This last year has been extremely busy with real-life things, so there’s been very little time to work on the emulator. During the winter and summer breaks we did have bit of time to work on some things, and there’s a couple important changes that might be of interest for you – so here’s a brief breakdown of the most important things that’ve been updated:
File deletion support
This has been one of the long-time tasks that’s been on the backlog, and has been causing issues with at least a number of test applications, which expect file deletion to work and would fail in random ways when this still was not implemented (this includes games such as Might & Magic 3, Dungeon of Doom, and others). This feature was delayed for a long time as it not only involves deleting the pair of AppleDouble header/data file pairs, but also maintaining the in-memory AVL tree presentation of the file system in stable state – which have now been implemented, at least in basic form, and the aforementioned applications now work much better
Dynamic configuration
One of most important changes for this year has been adding finally support for dynamic configuration of runtime, which means that emulated machine type and features can be configured using mace.settings file (located in the Resources folder within the app bundle), and a set of predefined machine profiles. Here’s brief breakdown of all configuration settings that are implemented:
Profile selection:
EnvProfile: Select the machine profile. Current predefined profiles are:
- mace_plus_4mb_sys607.profile: The default Mac Plus-like environment, with 4 megabytes of RAM and reports System version as 6.0.7
- mace_plus_4mb_sys700.profile: Same as previous profile, but reports System version as 7.0.0
- mace_se_4mb_sys700.profile: Same as previous, but instead of Mac Plus identifies as Mac SE. This profile should be used with THINK Pascal 4.x, as MACE trap tables always in the format of SE/II and later models (Long story short, Mac Plus had different trap table layout, which THINK Pascal would expect when it identified that model, and it would lead to conflict)
- mace_68020_8mb_sys700_24bit.profile: 24-bit 68020 Mac II with 8 megabytes of RAM and reports System version as 7.0.0
- mace_68030_32mb_sys755_32bit.profile: 24-bit 68030 Mac II with 32 megabytes of RAM, 32-bit memory manager eanbled, and reports System version as 7.5.5
- mace_68040_32mb_sys755_32bit.profile: Same as previous, but with 68040 CPU emulation level
Application settings:
EnvStartupWorkingDirectory: Choose startup directory within the emulated file system
EnvStartupFile: Choose which file will be LAUNCHed at emulator startup
EnvAppName: Default application display name (for bundled applications)
(Note that any non-ASCII custom characters in the filenames should be escaped using \xNN format, where NN is the MacRoman code for the character)
Additional configuration settings (for mace.settings):
EnvUseRelativeMouse: Set this to 1 to use relative mouse mode instead of absolute (use for games that alter mouse position, such as Apache strike or Wolfenstein 3D, or for games that hide mouse pointer and use it for input, such as Dark Castle). NOTE: There's a weird glitch from combination of the most recent macOS versions, the version of SDL2 we're using, and the software cursor obscuring code, which cause cursor sometimes jumping to screen center when this mode is enabled
EnvDisableDeskAccessories: Disable desk accessories
EnvClassicSoundPhaseShift: Alter the default .Sound DRVR output phase, set this to -1 (minus one) for Dark Castle for audio to work properly
EnvGetNextEventDelayHack: Set this to 1 for old games that run too fast (such as Stunt Copter)
EnvDefaultColorDepth: Set bit depth of the color video device
EnvVideoScreenWidth: Set width of the color video device
EnvVideoScreenHeight: Set height of the color video device
IMPORTANT NOTE: If you set the combined framebuffer size of color video (that is, width times height times bit depth of screen) to larger than 1 megabyte, it will only work if a 32-bit machine profile is used! This is as currently we only support fixed memory modes set at startup time, and on real macs in 24-bit mode the machine would transparently do MMU switching between 32- and 24-bit modes for screen accesses, something we don’t support yet!
The machine profile settings can be overridden from mace.settings, but changing most of the other default profile settings is not recommended as they will likely lead to non-functional environment.
New experimental CDN for demo application bundle builds
The old versions of demo applications haven’t been updated for a long time, but this year we wanted to get you a bit more recent version of the emulator to try out. However, there’s some challenges as our Apple Developer program ran out, so we don’t have signed binaries available, and we don’t have at moment a working Windows machine so we also don’t have windows versions available. HOWEVER, we did build ARM64 (unsigned) versions of both the existing demo applications, and we also created bundles for a number of new apps to try out, including a number of color games such as KYE, and demo version of Civilization and Eric’s Ultimate Solitaire Sampler, and a few others. Head over to the “Downloads” section using the link at top of the page to try them out! We also moved the files to a dedicated low-cost CDN, so WordPress should no longer mess up and randomly delete the ZIP files like in the past.
Please note that as they’re unsigned, you’ll have to at first launch choose “Done” instead of “Move to Bin” to not delete the application, and then go to System Settings -> Privacy & Security -> Security and choose “Open Anyway” to force macOS to open the demo apps. This is as we didn’t want to spend this year another $100 on Apple’s Developer Program as we have other expenses we need to cover. We’ll make the signed binaries again available someday in future, once we have chance to get back working on the emulator with more time.
Other minor fixes
There’s also some other minor fixes, such as:
- Fixes to 16-bit (“thousands of colors”) support for color quickdraw, which had still issues in the direct mode blitting, most notable drawing of mouse cursor. This seems to work now well enough so that Marathon is able to run in this mode. However, as gamma tables are not yet implemented, the gamma fades used by games to do fade-to-black effects do not yet work. This should be however a trivial feature to implement in future. There’s also foundation for 32-bit (“millions of colors”) mode, but most of blitters are still unimplemented so it’s not usable yet.
- cscSetGray control code support for color video DRVR. This allows setting the screen to monochrome mode for indexed display modes, allowing you to relive the fun memories of having a 16-grayscale monochrome displays 🙂
- Fix PutScrap to not keep incrementing the LMScrapSize value. This caused ResEdit to quickly run out of memory especially in color mode
- Fix UpdateGWorld to not reference old GWorld (this bug surfaced when we experimented color depth switching within Marathon)
- Other minor fixes
Some screenshots of the grayscale mode


Marathon in grayscale mode
Hopefully we’ll have again more to show you guys in the winter. We also have had the AppleDoubler tool ready for a long time, which would speed up a lot converting native files to the ADF format used by the emulator, but sadly haven’t had time to polish and publish it properly. But we’ll definitely get over to doing it around December/Christmas break.
Full list of changes since last post
2025-07-19 02:01:43 +0300 • Add EnvClassicSoundPhaseShift to dynamic settings
2025-07-19 00:40:38 +0300 • Update version number
2025-07-19 00:39:42 +0300 • Fix setup of csMode from gdFlags in InitGDevice
2025-07-18 16:26:20 +0300 • Implement cscSetGray for the color video DRVR
2025-06-30 03:37:05 +0300 • Fix reference to old GWorld in UpdateGWorld exit
2025-06-30 03:23:59 +0300 • Add 32-bit graphics output blitter to SDL module
2025-06-30 03:02:56 +0300 • Better divsul overflow fix (takes size into cons..
2025-06-30 02:30:25 +0300 • Fix compilation errors in mdb and mpr
2025-06-30 02:26:00 +0300 • Update trap list source
2025-06-30 02:25:25 +0300 • Fix negative integer overflow in divsul
2025-06-30 02:24:24 +0300 • Fix nested sourceDevice declaration
2025-06-29 23:13:34 +0300 • Hack CMakeLists.txt to work with new CMake version
2025-06-29 23:12:57 +0300 • Fix 32-bit ROM resource zone corruption bug
2025-06-29 23:12:19 +0300 • Make screen size configurable in mace.settings
2025-06-29 23:11:31 +0300 • Fix incorrect color depth in a number of test apps
2025-03-14 23:06:39 +0200 • Fix inverted cursor drawing glitch in direct mode
2025-03-14 11:18:47 +0200 • CRT filter for 16-bit mode
2025-03-09 02:17:32 +0200 • Fix PutScrap setting invalid LMScrapSize value
2025-01-15 23:05:10 +0200 • Support GetNextEventDelayHack in dynamic settings
2025-01-15 14:03:01 +0200 • Minor fixes to Fool's Errand app configuration
2025-01-13 01:27:56 +0200 • Fix F/A-18 Hornet test app filename in settings
2025-01-13 00:04:43 +0200 • Fix setup of 32-bit mode memory pages
2025-01-12 22:32:59 +0200 • Handle escaped hex values in configuration strings
2025-01-12 01:53:17 +0200 • Fix NewAlias stub to return a dummy Alias Handle
2025-01-12 00:43:20 +0200 • Relocate trap generator to its own sub folder
2025-01-12 00:42:50 +0200 • First implementation of dynamic settings system
2025-01-05 03:21:29 +0200 • Remove old backup of trap list source file
2025-01-04 02:28:52 +0200 • Work on refactoring configs to dynamic settings
2025-01-02 19:38:26 +0200 • Implement basic file deletion (logical & physical)
2024-11-03 21:30:22 +0200 • Partial RestoreEntries implementation
2024-10-23 13:32:06 +0300 • Add missing std file dialog 'dctb' color tables
2024-10-23 13:31:29 +0300 • Add Ares Demo test app config
2024-08-14 11:20:20 +0300 • Save regs on CallComponentFunction & debug cleanup

You must be logged in to post a comment.