However, it seems to work well enough to get text in and out of the emulator in a more natural fashion than files saved in the “Uploads” folder. ![]() The latter has some interface impedance mismatch issues, since the clipboard API is asynchronous and has gesture trigger requirements. I also added a couple of useful features: the ability to swap the control and command keys (so that shortcuts like Command-Q and Command-W can be used even when not in full screen mode) and clipboard syncing support. Technically beige was no longer in use by the time System 7 was released (the Snow White design language was fully rolled out a few years prior), so this may be something to revisit if older OS versions are supported. A bit over-engineered perhaps (see the caveat below), but it was fun to reconstruct what Jens Alfke had implemented almost 30 years ago.Īnother “because I felt like it” feature was adding era-appropriate screen bezels to the ersatz monitor that is shown around the screen. I therefore reverse engineered the Stickies data format and then switched to dynamically generating it, including the changelog. I had been previously been embedding the data by hand (by booting each image and editing the Stickies file), but this was becoming tedious now that there were four separate variants and more frequent edits. Mac OS 9 in an Apple Cinema Display bezel with dynamically-generated StickiesĪ somewhat silly feature I wanted to implement was to show the changelog in the set of stickies that is shown at startup. There’s probably low-hanging fruit in the emulation itself when targeting WebAssembly, but I have not done any investigations in that area. A lot of that appears to be due to bloat in Mac OS 9 itself, running a PowerPC version of System 7 feels snappier. My main takeaway is that it feels more sluggish than System 7 or Mac OS 8. After that it was a matter of hooking up each subsytem to the existing implementations that bridged to the JavaScript/browser world. ![]() The initial bringup and integration involved similar autoconf tweaks and #define changes to get the Emscripten build on the right code path. Luckily, it shares a lot of code and architectural decisions with Basilisk II (not surprising, since they were both created by Christian Bauer). This involved porting SheepShaver to WebAssembly/Emscripten. SheepShaver and Mac OS 9With things on a more maintainable path, I decided to tackle a bigger project: PowerPC support (which would allow Mac OS 8.5 and later to run). This reduced the friction when tracking down behavioral differences between the native and web-based versions: I can instrument or modify shared code and then run it in both builds to see how it differs. Most Basilisk II development is happening in the kanjitalk755’s fork, and I switched to building on top of that.įinally, I made it easier to do native (macOS) builds of Basilisk II (and SheepShaver) from the same repo. ![]() That cleaner separation, combined with changes to reduce diffs with the upstream, made it possible to rebase the repo on a more recent version of Basilisk II - I had still been basing my work on James Friend’s initial Emscripten port, which was a snapshot as of 2017. I moved all of the browser-specific audio, video, clipboard and other subsystem implementations into their own modules, instead of adding lots of branching to existing ones. This included small changes like setting up auto-formatting and bigger ones around code organization. Foundationsīefitting a long-term endeavor, I invested some time into maintainability. With that in mind, here's where things stand at the end of the year - there have been quite a few changes since my last post on the project. There's always something to work on, whether it's expanding the library, improving compatibility, adding more platforms, improving performance, debugging data structures, bridging APIs from 30 years ago with modern web platform features, or fighting with frontend tooling. I've come to think of Infinite Mac as my forever project.
0 Comments
Leave a Reply. |