Macinpi: A new old computer

Macinpi in the garden

My first truly personal computer -- not the family computer, but mine -- was a Macintosh SE. My Aunt Joan gifted it to me after upgrading to a PowerMac, and though it was already 10 years old, it was brand new to 10-year-old me.

Coming from DOS machines, the elegance and simplicity of the Macintosh completely enthralled me. There was no autoexec.bat, no config.sys, no SoundBlaster, and no IRQs to set. You flip a switch and it just worked.

And the interface, wow. You were greeted by a friendly chime and the happiest little face on the happiest little computer every time you turned it on. Everything was where you expected it should be. The dialog boxes were helpful, the icons friendly, and the applications simple, yet powerful. The Macintosh hooked me right away, and I used it constantly.

My little machine could do tricks. I power it on. It smiles. I smile.

I collected software, arranged my icons, dragged and resized windows in the Finder so they opened just a couple pixels under one another, fixed it, broke it, and fixed it again. I played games on it, scanned pictures, used Graphic Converter and BBEdit, created MOD music. It was my escape from reality, where I could control everything and get lost in a world of creativity. Where I could design a house, then fly a paper airplane through it. A portal to another world.

I visited my first website on a Macintosh. I wrote my first website on a Macintosh.


Fast forward 25 years.

I'm back home during the COVID-19 pandemic, and life is complicated, scary. America is divided. Friends are getting sick, and family members have passed away. Nostalgia for a simpler time is strong.

I've pulled out all my old Macintoshes, my old disks. The same ones 12 year old me had in plastic disk case when a bully pushed me over, causing them to spill on the steps of the portable classroom. Simpler times, maybe, but not perfect.

But I have my little escape; my Performa 200 (aka Mac Classic II). A black and white, 9" display. A clicky mechanical keyboard and a one button mouse.

I plug it in. I power it on. Checkerboard background, a sign of damaged components.

I clean the electrolytic capacitor juice off the components with isopropyl. I replace the PRAM battery with a fresh 14250 cell. It was old, but luckily hadn't ruptured.

I power it on. A question mark blinks inside of a disk icon.

I remove the cover from the hard drive, exposing its platters. I flick the drive's magnetic head to get it going again. It's old and not moving like it used to.

I power it on. It smiles. I smile. A long lost friend.

I back up its hard drive using an external SCSI enclosure and another, internet-connected Mac. I back up every single floppy disk from the plastic disk case. Every byte of data I could read, I saved. All my old high scores. My collection of MOD music. My earliest essays and short stories.

I relive the experience of it all. I relive the wonder. I'm taken back to a time when a black and white screen could show you all the color in the world, as long as you used your imagination.

As old hardware begins to fail and spare parts become scarce, pieces of the experience fall away. Even after recapping the motherboard with fresh tantalum capacitors, there's no guarantee it will continue to function indefinitely, and it's not the same to use old software on a sleek, new MacBook; the feeling just isn't there.

I never want to lose the ability to go back to that time when things were simpler, to feel the wonder I felt when I was a kid, so I built Macinpi; a new computer with the charm of an old computer.

Hardware

No working computers were gutted in the making of this machine. Some of the pieces were leftover bits from someone else's simpler time, some new.

Case

It started with the case. Amidst a pile of computer parts -- buyer must take all -- a Macintosh Classic case. It was in pretty decent condition with a working fan, and it had only a handful of scuffs and scars.

An empty Mac Classic case admist a pile of computers
Spotted! An empty Mac Classic case

I asked about it. Why just the case? What happened to the rest? The owner explains an Amiga fell on the picture tube, crushing it. The motherboard was donated, the last missing piece to someone else's Classic. The power supply board was sold and shipped, bringing another Mac back to life. They can't find the screws or the cover for the display adjustments, but it's mine for $10 -- and a classic double from Arby's, if it's not too much trouble.

So I drop off the Arby's, send my $10, and pick up the case.

It's very friend-shaped; it just needs something to fill the hole where its display used to be.

Display

I think this little computer deserves a little color in its life. It's got a rainbow logo on the front of it after all, certainly black and white wouldn't suit it.

I choose the Pimoroni 10" display after seeing that it fit the case perfectly in PepPi's build, and was wide enough that no ugly bezels would be visible. And the wiring is clean, I like that. $99 later, it starts to look like a computer again.

Display mounted to the case
Display mounted to the case

CPU

There's a Raspberry Pi 4 2GB lying around I had bought to build another RetroPie box with. $45, at at the time at least. It would plug right into the display, and with an emulator like Basilisk II, could paint a smile on the screen and load all my old Mac applications.

Perfect.

Raspberry Pi 4 in Macinpi case
Raspberry Pi 4 hiding in the Macinpi case

Keyboard & Mouse

An Apple Adjustable Mechanical Keyboard popped up on Craigslist. It's missing the numeric keypad, but who needs that? I chat with the seller for over an hour. We talk about everything from space exploration, to forgotten anniversaries, to what it was like for him growing up in Compton as a black man in the 70s. We shake hands. $100.

Apple Adjustable Keyboard
Apple Adjustable Keyboard

I have an Apple mouse from the old days, rectangular and angular, with just one button.

But these won't work with the Pi. They don't have USB, but ADB (Apple Desktop Bus), Apple's proprietary serial connector.

TMK with adb_usb on an old Arduino Pro Micro clone is the answer. I download and flash the firmware. I pull a 1kΩ resistor from my old electronics organizer. 10 year old me categorized it wrong, or maybe it slipped under the dividers in the drawers, but I found it. An old s-video cable, which has the same 4 pin mini-DIN connector as ADB, is chopped up and wired in according to the schematic. Everything works the first try, $5 later.

ADB2USB using an Arduino Pro Micro Clone
ADB2USB using an Arduino Pro Micro Clone

Connectivity

The vacant holes on the rear of the machine where the old ports were need to be put to good use. My friend Kim helps me weld a steel plate back there. I trace out holes crudely with a pencil, make a few markings, drill a few holes, and route out some ports with my Dremel.

2x panel mount USB-A 3.0. 1x panel mount USB-C. 1x panel mount 4 pin mini-DIN. Some M2 and M3 screws.

$30 or so.

Rear ports
Rear ports

It fits nicely in the case after a little trimming. I harvested a power button from an old Quadra 610 case I had in the attic, and it happens to be exactly the same size as the headphone port where I placed the reset switch. I add a little hot glue and slide it onto the switch.

Rear ports with case on
Connectivity, right where it used to be

Supporting electronics

Though I can power the display directly from the Pi, adding any other peripherals means the voltage begins to drop and the Pi flashes its little yellow lightning bolt.

A USB-C PD trigger lets me use any decent USB-C power supply, such as a MacBook charger, and get a solid 9V 3A out of it. 5 for $10, so $2. Now I can power that fan, undervolting it a little bit to keep it quiet.

But the Pi needs power too. Pololu 5V 5A regulator should do the trick. It's not cheap, but it's quality and will provide plenty of clean power. $25.

The old Quadra 610 case donates its speaker. It's old and sounds tinny, but that's part of the charm. $0.

The speaker, shoved into the air intake
The speaker, shoved into the air intake

The Raspberry Pi can't drive a speaker directly; it needs an amplifier. A 3-12V mono LM316 amplifier module, two for about $9, will do the trick nicely.

But since the amplifier and fan are powered directly from the USB-C trigger's 9V supply, they stay on when the Pi shuts down. We'll have to fix this.

After a little lesson on basic electrical engineering from some new friends on Discord, a schematic is drawn up. A 100kΩ resistor takes the Pi's 3.3V signal from pin 8 (GPIO14) to a 2N3904 NPN transistor, 1N4007 flyback diode, and a 470µF 35V filter capacitor that bring the fan to life when the Pi powers up. As long as you have serial communication enabled, GPIO14 will provide 3.3V while the Pi is on.

Fan schematic
Fan schematic

Two 1.2kΩ resistors help me combine the left and right stereo channels into a single mono signal, and a 2N3904 NPN/2N3906 PNP transistor stack with a 1kΩ resistor between them switches the positive of the amplifier when the Pi comes on, because the Pi's headphone ground keeps the amp on if we try to switch the negative using a single NPN.

Amplifier schematic
Amplifier schematic

All of this is placed on a prototype PCB, with a mess of jumper wires underneath, acting as traces.

Complete Macinpi board
Complete Macinpi board

A momentary switch is wired between the Pi's GLOBAL_EN and J2 pins to reset the Pi from a halted state.

Macinpi internals
Macinpi internals

The hardware is ready.

Complete hardware
Complete hardware

Software

I start with a GUI-free Raspberry Pi OS Lite image on a 32GB SD card.

The display has a 1024ⅹ768 resolution, and its 10" display is larger than the hole in the front of the case. To correct this, I arrive at 928ⅹ672 with 48 left and right overscan, 32 top, and 64 bottom to get it fitting nicely. I edit these values into /boot/config.txt. The display is perfectly centered and has just the right amount of black border around the edges.

I compile Basilisk II without X11. I set the resolution and upload a disk image with System 7.5.3 and my backed up files.

I add initiramfs-splash to show a happy Mac start up screen the second the machine powers up. I touch .hushlogin and sudo truncate -s 0 /etc/motd to quiet things down.

It smiles
It smiles

I make sure to set POWER_OFF_ON_HALT=1 in the EEPROM configuration so it shuts down completely when its off, instead of entering a low-power mode.

Autologin takes me straight to a shell, and .bashrc takes it from there. aplay plays a familiar chime, and BasiliskII launches.

Macinpi lives

It's a sunny winter afternoon. I plug in a USB-C PD powerbank and take it outside. I sit at the table in the memorial garden I built for my mom. I remember simpler times.

I power it on. All my old files are there. My old games. My old high scores. The first short stories I ever wrote. My MOD music.

It smiles. I smile.

Macinpi in the garden


Boot and shutdown sequence

Macinpi boots with the press of a button, and shuts off completely after selecting Special -> Shutdown in Mac OS.

Scripts and config files

See lazd/macinpi for the scripts and config files I used to build Basilisk II and configure the system.

Parts list

Want to build your own Macinpi? Here are the parts I used.

System

Panel connectors

Control and power supply board