5 ms·
Advanced Mac Substitute is an API-level reimplementation of 1980s-era Mac OS
- shermantanktop 6mo agoBut will it run Dark Castle?? Many hours were wasted on that game.
- rvnx 6mo agoStill wondering why the main character looks like Sammy from Scooby Doo and yes: https://github.com/jjuran/metamage_1/commit/30cb0e260d5ff478d80145406f670504df80d885 https://github.com/jjuran/metamage_1/commit/30cb0e260d5ff478...
- Chazprime 6mo agoHell, I’d go straight for Beyond Dark Castle… it really took the series to a whole different level.
- azinman2 6mo agoThis is quite the feat. I’d love to know more about the process to make this, the motivation, how much time was spent, etc.
- whartung 6mo agoI'm guessing they reimplemented the toolbox at the TRAP level (most MacOS calls at the time were accessed through the 68K TRAP instruction). So, rather than emulating hardware to run native ROMs, they "simply" reimplemented the ROMs. A friend of mine did this at another level. He basically rewrote the bulk of the toolbox as a C library so that the company, who had a Mac application, could port it to run on a PC, while sharing the source code. This was before Windows, and it worked! Launched it from DOS, takes over the entire screen. He didn't copy the Mac look and feel. Instead he used OpenLook for his gadgets and what not (since it was, you know, "open"). But he rewrote the bulk of it: QuickDraw, Event Manager, Memory Manager, Window Manager, etc. Just ate it like an elephant. I don't think his regions were as clever as the Mac. Pretty sure he just stuck with rectangles.
- jjuran 6mo agoCorrection: 68K Mac OS calls were A-line traps — in other words, they had opcodes of the form `$Axxx`. To the processor, they're unimplemented instructions that each take an exception through the same vector. The exception handler is the Mac OS trap dispatcher. `TRAP` is a different instruction, with opcodes `$4E4x`. Each one gets its own exception vector. It's not just trap calls, though — sometimes applications write directly to the sound buffer or use hardware page flipping.
- bitwize 6mo agoAs I recall MacOS system calls were done through invalid instructions which would cause the CPU to "trap" (raise an interrupt). Giving rise to the question Mac extension writers asked of each other: "How many traps did you patch?"
- jjuran 6mo agoYou want to talk trap patches? Your Mac's INITs have minimal trap patches, touch the Toolbox in boring places like SysBeep() and GetNextEvent(). The Developator's Mac has big, tricky INITs with trap patches that hook into half of the Device Manager.[1] The Developator is in touch with the metal, starts like a warm boot off the ROM reset vector, stops on an NMI. [1] See https://www.macrelics.com/legacynth/ https://www.macrelics.com/legacynth/
- tmoertel 6mo agoThe question serious patch trappers ask is whether you patched the traps used to patch traps to make sure that, when you patched traps, no other INIT could patch those traps after you to get in line before you when the traps were handled.
- jjuran 6mo agoMy earliest recollection of what motivated me is a desire to resurrect The Fool's Errand. The irony is not lost on me. :-)
- homarp 6mo agohow does it compare to executor? https://en.wikipedia.org/wiki/Executor_(software) https://en.wikipedia.org/wiki/Executor_(software)
- homarp 6mo agorelated discussion https://news.ycombinator.com/item?id=40338443 https://news.ycombinator.com/item?id=40338443
- jjuran 6mo agoFunny you should bring up MacRelix — the very first front end for Advanced Mac Substitute was built in it.
- davidfstr 6mo agoWine for classic Mac OS? Amazing. Well done.
- bsimpson 6mo agoSounds like Wine + FEX
- hyperhello 6mo agoI'd like to see something like Carbon for old apps so that they boot in modern window frames (without the missing Tahoe corners) and can save to files.
- eschaton 6mo agoThis is exactly the sort of project that can serve as the basis for such a system.
- jjuran 6mo agoAdvanced Mac Substitute stores documents and preference files in sandboxed host directories. For example, check out the MacPaint demo: https://www.v68k.org/advanced-mac-substitute/demo/MacPaint-AMS-demo.mp4 https://www.v68k.org/advanced-mac-substitute/demo/MacPaint-A... If you were to double-click the Hello document in macOS' Finder, it would launch and open in MacPaint.app.
- hagbard_c 6mo agomake ams-vnc ./build.pl -i exhibit graft skif minivx xv68k freemountd listen vnc-interact ... Daemon starting up... done. T=0.037s ERROR: OpenDF is unimplemented Hm, doesn't seem to work. Let's try the X11 version: make ams-x11 ./build.pl -i exhibit graft skif minivx xv68k freemountd interact-x11 ... T=0.275s ERROR: OpenDF is unimplemented Nope, it seems to be missing something. OpenDF? All I find is this: https://github.com/PrjEnt/OpenDF https://github.com/PrjEnt/OpenDF, a long-abandoned project which seems to be a more compact version of another abandoned thing.
- ksherlock 6mo agoOpenDF is a MacOS toolbox call (which is apparently not implemented)
- hagbard_c 6mo agoStrange it errors out on given that I assume the thing does run elsewhere. The X11 version sometimes shows the opening screen but any attempt at interaction leads to the mentioned error. The VLC version shows the error directly.
- jjuran 6mo agoAny interaction with the Welcome application terminates it. Try setting AMS_APPNAME=Tic-tac-toe in the environment, or AMS_APPNAME="Nyanochrome Cat".
- hagbard_c 6mo agoYes, that works, the tic-tac-toe thing appears and remains even though the error message regarding OpenDF is shown. In other words that error message can be ignored, at least as long as whatever is in AMS_APPNAME does not require whatever OpenDF provides.
- Someone 6mo agoI think they mean FSpOpenDF (https://dev.os9.ca/techpubs/mac/Files/Files-53.html#HEADING53-0 https://dev.os9.ca/techpubs/mac/Files/Files-53.html#HEADING5...), a (relatively) late addition to the Mac API.
- imoverclocked 6mo agoI can't imagine how fast this is compared to the original hardware that ran it. I remember using a Mac 512k with a single floppy drive (no hard drive support) and doing the insert-floppy-dance. Computers were far more mechanical then. It would be fun to have a "slow it down" feature that also has the various floppy read/write noises paired with it. Bonus points for different generations of hardware and having the OG HD noises to pair with those too!
- drzaiusx11 6mo agoThere was a show HN retro HW project somewhat recently that included sound emulation on board. Maybe that author is reading this, but their sound emulation was probably my favorite part (not to disregard the actual hard parts! I just found it charming)
- jdwithit 6mo ago"Fond" memories of playing King's Quest IV as a little kid on my parents' Apple IIe. You had to swap in a new 5.25" floppy almost every time you walked to another screen. I was fascinated by the game but my god was it tedious to constantly flip and swap the disks around. Google says it came on 8 double sided disks, I could have sworn it was a couple dozen.
- technothrasher 6mo agoThe game I played for hours on the Apple ][+ was "FantasyLand 2041". It came on six double sided disks, and I was bummed to find out after quite a lot of game time that disk six was corrupted. I then found out many years later that it wasn't corrupted, the game wasn't ever finished. I then further discovered that John Bell, who produced that and other popular games (Sand of Mars, Beneath the Pyramids, House of Usher), is utterly batty and has written a few "the government is hiding UFOs from us" books.
- steve-atx-7600 6mo agoJust tried out this apple II emulator that’s close to what you’re describing, but for Apple II https://www.virtualii.com/ https://www.virtualii.com/ . Has floppy sounds as well as speed settings.
- Batbird 6mo agoThis triggered flashbacks. I'm not sure if I'm remembering correctly, but I think we sometimes also used used Pascal, and it was optional for some toolboxes. It's been a long time though so I could be mistaken. That might have been pre-Mac? But good times, though. Boy, is the world a different place.
- DavidSJ 6mo agoThe original Mac system software was written in Pascal and most Mac toolbox calls took Pascal-style (prefixed by length) rather than C-style (terminated with null character) strings. But you could write application code in either language keeping this caveat in mind.
- eschaton 6mo agoIt was actually mostly written in assembly, but used Pascal calling conventions and structure layouts since that was expected to be the primary language for application developers. As it had been for Lisa, as it was for “large” applications on Apple II, and as was the case for much of the rest of the microcomputer and minicomputer industry and even the nascent workstation industry (eg Apollo). It was the Lisa system software that was mostly implemented in Pascal and some blamed this for its largeness and its performance. Compilers and linkers weren’t great back then; most compiler code generation was pretty rigid, and most linkers didn’t even coalesce identical string literals across compilation unit boundaries! Lisa Workshop C introduced the “pascal” keyword for function declarations and definitions to indicate they used Pascal calling conventions, and otherwise followed Lisa Pascal structure layout rules, so as to minimize the overhead of interoperating with the OS. (I’m not sure whether it introduced the “\p” Pascal string literal convention too or if that came later with Stanford or THINK Lightspeed C.)
- WillAdams 6mo agoA good example of this dichotomy is the Puzzle Desk Accessory --- originally written in Pascal (as an example of making a DA thus), it was too large to include on a 400KB micro-floppy disk, so was re-written in assembly language going from 6K Bytes to 600 Bytes: https://www.folklore.org/Puzzle.html https://www.folklore.org/Puzzle.html
- londons_explore 6mo agoI am amazed that 1980's software works on binary API compatibility rather than relying on API quirks like timing, memory alignment quirks, memory layout from specific allocator behaviour, etc. It only takes one unintentional reliance on an implementation detail to make an application not run on another OS implementation...
- wmf 6mo agoThere were plenty of apps that relied on implementation quirks.
- CharlesW 6mo agoOut of curiosity, what app are you thinking of? Of all of types of software used with classic Mac OS (INITs, CDEVs, FKEYs, Desk Accessories, Drivers, etc.), apps would be the least likely to rely on implemention quirks.
- wk_end 6mo agoMacintosh Common Lisp - at least the versions floating around Mac Garden and such - seems to refuse to run on anything besides accurate emulators and real hardware.
- eschaton 6mo agoThey mostly relied on OS/Toolbox implementation quirks though, not hardware implementation quirks, because applications that relied on the latter wouldn’t run on the Macintosh XL and that mattered to certain market segments. (Like some people using spreadsheets, who were willing to trade CPU speed for screen size.) Similarly anything that tried to use floppy copy protection tricks wouldn’t work due to the different system design, so that wasn’t common among applications. So even things that wrote directly to the framebuffer would ask the OS for the address and bounds rather than hardcode them, copy protection would be implemented using license keys (crypto/hashes, not dongles) rather than weird track layouts on floppies, etc. It led to good enough forward compatibility that the substantial architectural changes in the Macintosh II were possible, and things just improved from there.
- msephton 6mo agoSo has this beaten MACE to the finish line? Or are the goals different? https://mace.home.blog https://mace.home.blog
- rcarmo 6mo agoThis is pretty neat. I have been spending the past few months adding an ARM64 JIT to Basilisk II (https://github.com/rcarmo/macemu https://github.com/rcarmo/macemu) and totally appreciate what's involved (I'm currently stuck patching a Quadra ROM to bypass NuBus hardware detection...) Will definitely give it a try, since I would _love_ to have a Classic Mac environment with some modern creature comforts (like file sharing) in tiny machines.
- andai 6mo agoVery cool. If it's built on SDL2, it should be straightforward to make it run in the browser via Emscripten, right?
- jjuran 6mo agoAdvanced Mac Substitute uses a factored approach. 68K emulation happens in the back end, which is a collection of processes connected by Unix-domain sockets, portable to basically any POSIX system. The front end deals with displaying graphics and forwarding user input to the back end. Working front ends include SDL2 (by a contributor), X11, Linux fbdev, VNC, and five different macOS APIs (Cocoa/OpenGL, CGL, AGL, Quartz, and QuickDraw). The front and back ends communicate using FIFOs and shared memory. I'm aware that certain platforms will require refactoring all of this to run in a single process. If Emscripten is one of them, then it won't be as simple as you suggest. In any case, if I were the one doing the port, I might write a bare-bones front end just for this purpose, possibly using the fbdev one as a starting point.
- andai 6mo agoAs far as I can tell, the simplest solution would be to run the whole thing in a PC emulator. Simultaneously elegant, and deeply unsatisfying ;)
- anthk 6mo agoExecutor from autc04 was fine until I tried to open Nethack 3.6.7 for m68k Macs. It crashed, but it was a fun exercise. AMS might work better, but it's a pain to setup.
- flenserboy 6mo agoEfforts like this could be a nice way to get old apps to run "natively" on current hardware, as there are a ton of them out there which are perfectly good for work, but which cannot run today.
- WillAdams 6mo agoI'd be glad of being able to run Macromedia Freehand/MX thus.
- epenn 6mo agoVery cool! This reminds me of ARDI Executor [1] - a piece of (discontinued) commercial software first released in 1990 that took the same API-level reimplementation approach used here. And it did so jaw-droppingly fast considering that it was running on 90s PC hardware. As a little kid using it to play a few Mac games on my Windows PC, it was genuinely inspiring to me to see that this was possible at a time when I was first learning how to code. :) Great to see something with a more modern implementation doing this as well! It was discontinued in 2005, but the developers subsequently open sourced it and put the code on GitHub a couple years later. [2] [1] https://en.wikipedia.org/wiki/Executor_(software) https://en.wikipedia.org/wiki/Executor_(software) [2] https://github.com/ctm/executor https://github.com/ctm/executor Bonus: One of the engineers from ARDI, the startup that created Executor, was very briefly featured in Bob Cringely's 1996 documentary Triumph of the Nerds talking about the lifestyle of working at prototypical mid-90s Silicon Valley startup.
- jjuran 6mo agoI knew of Executor, but never saw it in action. Winning back performance lost to emulation was critical when competing with contemporary real hardware, and kudos to ctm and ARDI for their clever solution. Decades later, though, emulation performance is mostly a non-issue (and even improves automatically with faster hosts). What matters now is portability (which requires ongoing maintenance) and renovation of programs designed around having the CPU to themselves (via dynamically applied patches).
- keepamovin 6mo agoThis is super cool. I love that look. Something about classic black & white macos has a timeless "alternative timeline" L'Air de Panache aesthetic that to me says credibility and stability. Maybe it's the memory of the rows of Macintosh SE or Plus, those solid little upright beige bricks, in the computer room at my elementary school. I made a MacOS system 7 web desktop UI with real web browsing: https://win9-5.com/macos/ https://win9-5.com/macos/ A re-imagining.
- jjuran 6mo agoOh wow. Once I saw the smiling machine and empty progress bar, I went straight to NoScript and enabled your domain without a moment's hesitation — highly unusual for me. It's charming! I laughed out loud when I saw your screen-saver. It's familiar and alien at the same time, like I'm seeing an alternate universe. I made my own web-based Mac simulator some time ago: https://www.metamage.com/apps/maxim/ https://www.metamage.com/apps/maxim/ It was a way to become more familiar with CSS and JS (and indulge my classic Mac OS nostalgia), but my biggest takeaway was that the web wasn't a foundation I wanted to build complex structures on, and indirectly helped spur me to create Advanced Mac Substitute.
- hyperhello 6mo agoSharing our Mac themes simulators? Here is my entrant: https://hcsimulator.com/ https://hcsimulator.com/ Full compatibility with HyperCard stacks, including their resource forks if they are in StuffIt archives.
- keepamovin 6mo agoBeautiful little story about Ziggy
- msie 6mo agoWow! Who is the madman that created this?