Paper Mac

Introducing my latest retro computing abomination... Paper Mac.

It's a Macintosh Classic II shell with a 16-color grayscale e-ink screen. Inside is a Raspberry Pi running custom software that displays recent highlights from my Google Photos library in a System 7-like desktop environment. Classic Apple Desktop Bus hardware is also supported via an Arduino Micro that adapts ADB to USB.

Paper Mac in photo frame mode

Here it is in action:

Design and Components

Component diagram
Component Diagram

The ePaper display is a Waveshare 9.7 inch E-Paper Display with HAT connected to the GPIO pins. I use the Python libraries for Waveshare e-paper series to push images to the display.

Inside the case
Inside the case

I installed the TMK ADB to USB keyboard converter firmware on an Arduino Micro and followed this ADB to USB Guide with an wiring diagram to build the Apple Desktop Bus to USB adapter connected to one of the Pi's USB ports. I always wanted an Apple Adjustable Keyboard, so I bought one and attached it to the adapter. I also picked up an Apple Desktop Bus Mouse which is daisy-chained through the keyboard.

The Paper Mac plays sound through a set of Acer MS1238UA USB-powered speakers inside the case. I included stevenjaycohen's MacOS Classic Sound Pack v1.5 to add some classic Mac audio accents.

Finally, I linked a Waveshare HDMI to CSI adapter to the Pi's Camera Serial Interface to capture video output from a first generation Google Chromecast. The HDMI to CSI adapter does not support HDCP which is required by the Chromecast, so I added an in-line HDMI splitter to strip the copy protection from the video signal. The adapter would capture a black screen otherwise.

Photo Management

OK, so you're probably wondering why I'm capturing output from a Chromecast.

I wanted to use Google Photos as my source for the Paper Mac's photo frame mode, but I really did not feel like dealing with Google Photos API authentication, querying, and caching. There wasn't anything new or fun to that process for me.

Instead, I decided to use the Pi's native camera interface with a capture card to grab stills from the Chromecast's ambient mode which can display Google Photos. The Chromecast would do all of the heavy lifting for photo management, and I'd learn more about the camera port which I'd never used before.

Now that I had all of the hardware set up, I needed to write some code to bring it all together.

Pseudo7

I wrote a Python script called Pseudo7 to control the experience. It captures Google Photos in-memory, dynamically creates windows for the photos, listens for keyboard input, pushes visuals to the ePaper display, and plays sound files when UI elements update.

Pseudo7 boot screen
Pseudo7 boot screen

When the application starts, Pseudo7 displays a boot screen while it sets up the environment and initializes the capture device. Yes, the logo uses the face from the shrug emoji: ¯\_(ツ)_/¯

Next, Pseudo7 drops into a fake desktop and starts photo frame mode. Every two minutes, an image is captured from the Chromecast and prepared for display. The image is resized to a random resolution, decorated with System 7 window elements, converted to a black and white image, and pasted over the desktop. Any older photo frame windows are modified to look inactive. Finally, Pseudo7 pushes the updated desktop to the display.

I wanted the GUI elements to look authentic, so I took screenshots while using the System7.app in-browser emulator in 16-color grayscale mode. I carved up the screenshots in Photoshop and built a few base images that I could manipulate with the Python Image Library. Window elements are split into four images that Pseudo7 crops and arranges around an image. The desktop is a static image on which I superimpose the system clock and dynamically generated windows.

Click on the images below to get a better look at how the GUI elements come together:

Pseudo7 includes a clock mode which can be toggled by pressing the C key on the keyboard. There are other keyboard shortcuts to take screenshots, awaken Mr. Macintosh, and shut down.

Other links

SystemSix - A beautiful e-ink desk calendar created by John Calhoun who is a former Apple engineer and author of one of my favorite classic games, Glider! Honestly, it's so perfect that I probably would have gone in a different direction if I had known about it before I started the Paper Mac.

MacintoshPi - This Raspberry Pi-based Mac emulator in a Mac Classic II also popped up while I was working on my build. I love that it even includes Commodore emulation.

This article was updated on 09 December 2022 22:57-0500