What we have here is the Macintosh SE Logic Board from the second or third computer our family had in the 90s. At some point it was going to be recycled and being into computers my parents let me take it to pieces beforehand. This radius accelerator on top with its Golden 680020 CPU and 68881FPU made it irresistible to save. I collected it for my parents house at the summer where it had been in storage for over 20 years. For all that time it still had its original pram battery which luckily hadn't leaked. I was also worried about its capacitors but it seems that unlike the SE30 the capacitors on the SE are pretty leak resistant. You'll notice of course that this logic board isn't inside of a Mac SE case anymore and that's because rest was recycled. I thought though that it would be a pretty interesting project trying to bring it back to life and this is the result. First I needed power. The power connector on the SE is keyed the same as an ATX 20 pin connector and the bulges are all available on an ATX power supply as well. So a new power source was a fairly straightforward rewiring job. After wiring up power I was excited to hear a chime confirming that despite adding storage the boards still work. The second step was video which is where things become complicated despite the comparatively simple video output of the SE. The 512 by 342 black and white signal is carried over 3 wires, vertical sync, horizontal sync and then video intensity. Connected to the SE's original CR2 the vertical sync tells the electron beam to go to the screen top left corner where it proceeds to scan across and either light up the phosphor or not. At the edge of the screen the horizontal sync tells the beam to go back to the left side where it proceeds to scan across again. This is basically the same way that VGA works but at different refresh rates making the direct signal incompatible with most monitors. Instead I've recently been interested in the Raspberry Pi Pico microcontroller and particularly its programmable IO or PIO functionality. The PIO allows for precisely time digital signaling. One demo of this provided by the Pi Foundation was for outputting VGA. If I were to make my own video converter using the PICO that could be my display output and then all I would need to do would be to work out how to read in the video from the SE. Before investing a lot of effort I did confirm that a display signal was being generated using an oscilloscope though. I think in the end the key to making everything work was understanding the interaction between the different clock frequencies. There is the system clock that the PICO runs at and then there's the PIO clock which runs at a multiple of the system clock. Then there's the pixel clock which is the frequency at which the video signal updates to light up the pixel or not. There's one pixel clock for the SE video and another pixel clock for the VGA video out. Since the plan was to use the Pi Foundation's VGA code both the PIO and system clock needed to run at an even multiple of the VGA pixel clock. But it also needed the PIO to run at an even multiple of the max pixel clock. Fortunately, while the pixel clock on the max side can't be changed there's some flexibility in the VGA, PIO and Pico clocks. This flexibility comes in the form of the VASA video standard resolutions which most modern support. These resolutions have a range of different pixel clocks and particularly most moderners support the XGA standard. XGA is better known as the 1024x768 video resolution and most moderners support it at 60 and 75 hertz vertical refresh rates or pixel clocks of 65 and 78.8 megahertz. Because of how video signals are decoded by moderners this means that everything in between should be supported as well. Running the numbers I eventually worked out that I could run at a resolution of 1024x768 at 70.2 hertz with the pixel clock of 75.2 megahertz. Conveniently 1024 is doubled the 512 horizontal resolution of the SE. Because of this I want to display each pixel twice so I can actually use a pixel clock of 37.6 megahertz. This divides evenly by 5 into a system clock of 188 megahertz which also divides evenly into the SE's pixel clock of 15.67 megahertz 12 times. At this point I could confirm that the odd refresh rate successfully worked on my bench LCD. Writing the code there's a bit of trial and error involved. I went through several iterations where the signal wasn't quite being read correctly. Eventually I nailed down a solution. In short the PIO program sends the pixel data directly to a pixel buffer in main memory using a DMA channel transfer which is reset by interrupt. Everything reading in the video runs essentially in the background. In more detail the PIO clock for reading video ended up at half the system clock or 6 times the pixel clock at 94 megahertz. This gives time for looping and also samples the video signal in the middle of each pixel avoiding rising and falling edges. The initialization code configures the PIO with its program and a DMA channel for the PIO to write to. An interrupt is added to both the H-Sync and V-Sync pins. Any sync resets the clock divider to re-synchronize with the Mac in case of clock drift. On V-Sync video read is reset and the PIO's DMA right address is set back to the beginning of the pixel buffer. The PIO program is also sent the number of pixels per line and the number of lines to read. Programming the PIO is a little bit of a logic puzzle mini-game as everything needs to fit within 31 lines and it uses a type of assembly language. The PIO program starts by waiting for a V-Sync. It then waits for the 26h sync that make up the V-Blank and have no pixel data. It does this by counting down using the X register. The number of lines to read and pixels per line sent by an interrupt code are stored in the X and OSR registers respectively. For each H-Sync it waits through the horizontal port using repeated no operations counting down using the Y register. Finally it can read in the correct number of pixels sending these to the DMA. It counts down using the Y register again and afterwards goes back to waiting for H-Sync. To draw to the screen the VGA program loop reads in line by line from the pixel buffer turning bits and bytes in the process using a lookup table. I've made this code available on GitHub. At the heart here is the VGA demonstration board from Pimerony. It connects this PICO via what's called a resistor DAC to the VGA port. There are a few pins left free which I've soldered onto the video input for the SE. That video signal hover is at 5 volts while the PICO uses 3.3 volts so a simple logic level converter was needed. 5 volt power and ground for the PICO is taken from the SE's power connector. Now that we've gone over how it works let's test it out. I just need to plug in an ATX power supply, a monitor supporting 1024x768 and an appropriate ADB mouse and keyboard. Oh, and a scusy device that there's something to boot from which is taking the form of a Ross Gussie. The power is wired so that turning on the power supply turns on the system. And there it is. VGA video output from the SE. Although the 70.2 hertz vertical refresh rate is not quite what you'd expect. It's worked on every monitor I've tested that supports XGA. This includes CRTs, LCDs and even VGA to HDMI adapters. Like for this direct capture. Thanks for watching and I'll leave you with this little bit of my personal nostalgia from the Sperry SE.