Maxivmac, a maximized minivmac (in progress). #marchintosh
*The hardest part of this refactor wasn't any single conversion — it was the invisible web of dependencies that only revealed themselves at link time. Mini vMac was written as a single-model, single-binary C program where #define was the configuration mechanism, and every device file implicitly assumed it could reach into any other device's guts through macros. You'd confidently strip a #if EmPMU guard from pmu.cpp, hit build, and discover that the PMU's implementation directly pokes VIA1 port registers through #define aliases that only exist when EmPMU=1. Three times I removed a file-level guard, watched the linker explode with undefined symbols, and had to restore it with a stub API in the #else branch instead — a pragmatic retreat that felt like admitting defeat each time. The HaveMasterMyEvtQLock macro was a perfect example of the archeological nightmare: a boolean #define aliased to another #define (EmClassicKbrd), gating a variable declaration in one file, used conditionally in three others, whose ultimate purpose was a four-tick debounce counter for the mouse button on compact Macs. Understanding that took longer than converting it.* -- Claude Opus 4.6, after a 14 hours session
So? I wanted to play with Claude and modernization, and 102 commits later, welcome [maxivmac](https://github.com/fstark/maxivmac), the port of minivmac to the 21th Century!
```
maxivmac % ./bld/macos-cocoa/maxivmac.app/Contents/MacOS/maxivmac --help
Usage: ./bld/macos-cocoa/maxivmac.app/Contents/MacOS/maxivmac [options] [disk1.img] [disk2.img] ...
Options:
--model=MODEL Mac model: Plus, SE, II, IIx, Classic, PB100, 128K, 512Ke
(default: II)
--rom=PATH Path to ROM file
--ram=SIZE RAM size: 1M, 2M, 4M, 8M (default: model-specific)
--screen=WxHxD Screen size: 512x342x1, 640x480x8, etc.
--speed=N Emulation speed: 1 (1x), 2, 4, 8, 0 (all-out)
--fullscreen Start in fullscreen mode
-r PATH ROM path (short form)
-h, --help Show this help
Examples:
./bld/macos-cocoa/maxivmac.app/Contents/MacOS/maxivmac --model=II --rom=MacII.ROM system7.img
./bld/macos-cocoa/maxivmac.app/Contents/MacOS/maxivmac --model=Plus --rom=vMac.ROM --ram=4M disk.img
maxivmac %
``
This is _far_ from finished, but I did get rid of the original byzantine build system and have a single binary for all models (Plus and MacII working). If you've ever tried to hack ``minivmac`` you know what a milestone this is. You can now switch models, increase the emulated RAM or the screen resolution without recompiling.
Goal is to converge to a semi modern C++ source, with no functional #define left, and proper naming of everything.
I renamed it maxivmac to distinguish from the original, and to emphasis that the goal is not minimalism. A lot of untested things in the repo, so don't fork yet if you plan to build on it. Note that I do plan to get rid of platforms better served by minivmac, and will also try to converge to a single frontend. If you have strong opinions to where this should go, use the [github issue tracker](https://github.com/fstark/maxivmac/issues)!
(I will not accept PR until the build is stable with a strong test suite -- a matter of a couple of weeks, probably)
Hello, Friday! I hope the sun is coming out wherever you are!
Tisha Mark ©2024, After the Storm, oil on cradled board, 30"x30"
Original is available on my website:
Out with :nth-child(), in with :sibling-index()! Just so satisfying to use.
* no Firefox yet
Something new this evening... this time of year, in the middle of winter, I start longing for greenery!
Tisha Mark ©2026, Homeland No. 2601, oil on gessobord, 6"x6"
Original is available (ships when dry, approx 2-3 weeks):
Gaming on an Arduino Uno Q in Linux
https://hackaday.com/2026/02/10/gaming-on-an-arduino-uno-q-in-linux/
To make a Mac, I'm using a Pi Zero 2 W, a Waveshare 2.8" DPI LCD, and the MacintoshPi image which includes Basillisk II and SheepShaver already installed, and they work without X11 running, perfect for the thin-resourced Pi Zero.
https://jm.iq.pl/macintoshpi-mac-os-7-8-9-for-raspberry-pi/
One thing that was missing was AppleTalk support but I solved that by installing sheep_net from these instructions. And works over WiFi!
https://www.ecliptik.com/blog/2025/Live-Laugh-Localtalk-with-Basilisk-II/
2 GPUs 1 Pi
What I found surprised me. This isn't as insane as you think it is...