Skip to content

Mariani - RetroBIOS

Type standalone
Classification Community forks
Source https://github.com/sh95014/AppleWin
Upstream https://github.com/AppleWin/AppleWin
Version 1.7
Profiled 2026-08-12
Cores mariani
Systems apple-ii
Source analysis

bundle_layout:

- **resource_folder:** Mariani.app/Contents/Resources
- **lookup:** NSBundle pathForResource, no fallback directory
- **reader:** open() and read(), cached per resource id in MarianiFrame::roms
- **size_check:** LinuxFrame::GetResource throws when the size differs from the one the call site expects
- **missing_file:** modal alert titled Resource not found, then a null pointer
- **source_ref:** source/frontends/mariani/MarianiFrame.cpp:156-232, source/frontends/mariani/AppDelegate.mm:1465-1469, source/linux/linuxframe.cpp:133-145

support_directory:

- **path:** ~/Library/Application Support/<bundle id>/
- **holds:** debugger symbol tables, debugger scripts, printer output, g_sProgramDir
- **source_ref:** source/frontends/mariani/AppDelegate.mm:1471-1485, source/frontends/mariani/MarianiFrame.cpp:36

unreachable_resources:

  • filename: Mockingboard-D.rom, reason: IDR_MOCKINGBOARD_D_FW appears only in the resource header and in the frontend's name table; nothing requests it, source_ref: resource/resource.h:38, source/frontends/mariani/MarianiFrame.cpp:172
  • filename: TKClock.rom, reason: IDR_TKCLOCK_FW appears only in the resource header and in the frontend's name table; nothing requests it, source_ref: resource/resource.h:51, source/frontends/mariani/MarianiFrame.cpp:175
  • filename: ThunderClockPlus.rom, reason: Its only consumer, LoadRom_Clock_ThunderClockPlus, has no caller in the tree, reads through the Win32 FindResource API and lives in a file the Xcode project never compiles

, source_ref: source/Peripheral_Clock_ThunderClockPlus.cpp:200-215, resource/resource.h:40 - filename: Debug_Font.bmp, reason: IDB_DEBUG_FONT_7_by_8 is fetched with Win32 LoadBitmap against the Windows frame, and MarianiFrame::GetBitmap answers only the three CHARSET ids. Mariani draws its debugger with AppKit , source_ref: source/Debugger/Debugger_Display.cpp:595, source/frontends/mariani/MarianiFrame.cpp:52-65

**symbol_tables:**

    - **lookup:** g_sProgramDir then g_sBuiltinSymbolsDir, which is the folder holding the bundled .SYM files
    - **source_ref:** source/Debugger/Debugger_Symbols.cpp:45-55, 774, 814-817, source/frontends/mariani/AppDelegate.mm:1487-1491
    **preloaded_at_init:**

    - APPLE2E.SYM
    - A2_BASIC.SYM
    - A2_DOS33.SYM2
    - A2_USER1.SYM

    **loaded_on_command:**

    - A2_ASM.SYM
    - A2_USER2.SYM
    - A2_SRC1.SYM
    - A2_SRC2.SYM
    - A2_PRODOS.SYM

    - **note:** DebugInitialize runs from InitialiseEmulator, so the preload happens even when the debugger window is never opened. Only APPLE2E.SYM and A2_BASIC.SYM are in the bundle. The user slots and the source a...
**debugger_scripts:**

- filename: DebuggerAutoRun.txt, source_ref: source/Debugger/Debug.cpp:365, source/Debugger/Debug.cpp:9440-9473, note: Run once at the first DebugInitialize, from the current directory and then from the support directory. Holds debugger commands written by the user; the copy in the source tree is empty.


**user_supplied_roms:**

    **options:**

    - option: --rom, accepts: 12 KB image at $D000 or 16 KB image at $C000, any path, source_ref: source/frontends/common2/argparser.cpp:197, source/frontends/common2/programoptions.cpp:81-91, source/Memory.cpp:2173-2213
    - option: --f8rom, accepts: 2 KB image at $F800, any path, source_ref: source/frontends/common2/argparser.cpp:198, source/frontends/common2/programoptions.cpp:92-101, source/Memory.cpp:2139-2161

    - **note:** Both are installed over the ROM already loaded from the bundle and neither has a fixed name. AppleWin's -videorom has no equivalent: ParseCmdLine is never called in this tree.

**generated_files:**

    **written_only:**

    - AppleWin.log
    - Trace.txt
    - save states
    - screen recordings and screenshots
    - printer spool file

    **written_and_read_back:**

    - applewin.yaml
    - AppleWinDebugger.cfg

    - **note:** applewin.yaml is the configuration registry, created under the settings root and overridable with --conf and --registry. All of these are produced by the emulator, none is user-supplied.

**help_book:**

    - **filename:** Mariani.help
    - **reason:** Help bundle opened by AppKit through CFBundleHelpBookName, not by emulator code
    - **source_ref:** source/frontends/mariani/Mariani-Info.plist:42-45, source/frontends/mariani/Base.lproj/MainMenu.xib:264
Technical notes

Cocoa frontend for AppleWin, macOS only, shipped as Mariani.app and carrying AppleWin 1.31.0.5 (resource/version.h). ES-DE launches it with --d1 for the floppy in slot 6 drive 1.

Resources are files inside the application bundle instead of Win32 resources linked into the binary. MarianiFrame::GetResourceData maps each AppleWin resource id to a file name, NSBundle resolves it against Contents/Resources, and the file is read with open() then kept in a map for later requests (MarianiFrame.cpp:156-232, AppDelegate.mm:1465-1469). LinuxFrame::GetResource throws when the file it gets back does not have the size the call site asked for (linuxframe.cpp:133-145), so each entry below carries the size the code demands. A name that resolves to nothing raises a "Resource not found" alert and returns a null pointer.

Machine types offered in preferences: Apple II, II Plus, II J-Plus, //e, enhanced //e, Pravets 82, Pravets 8M, Pravets 8A, TK3000 //e and Base64A (PreferencesViewController.mm:191-193, 741-751). MemInitializeROM picks the system ROM from that setting (Memory.cpp:2052-2069). Default slots are the printer card in 1, Super Serial Card in 2, Mockingboard in 4 and Disk II in 6 (CardManager.cpp:325-334); the hard disk and mouse cards are chosen by the user.

Two names in the resource map have no file in the bundle: the Resources build phase lists 49 items and neither appears (Mariani.xcodeproj/project.pbxproj). Hddrvr-v2.bin is requested when a save state written with hard disk card version 4 is loaded (Harddisk.cpp:228, 1439-1443), and Freezes_Non-autostart_F8_Rom.rom when the configuration value "The Freeze's F8 Rom" is set on an Apple II (Memory.cpp:2163-2168, Utilities.cpp:188-189, Common.h:94). Contents/Resources is the only directory searched, so that is where the two belong.

The debugger comes up with the emulator, not with its window (context.cpp:116). CmdDebugStartup preloads four symbol tables (Debug.cpp:9492-9520), each read first from ~/Library/Application Support// and then from the bundle (Debugger_Symbols.cpp:774, 814-817, MarianiFrame.cpp:36-37, AppDelegate.mm:1471-1491).

--rom and --f8rom install a 12k/16k and a 2k image from any path over the ROM already loaded (argparser.cpp:197-198, programoptions.cpp:81-101, Memory.cpp:2120-2213). AppleWin's -videorom and its hard disk firmware switches are unreachable here: ParseCmdLine has no caller in this tree, and UseHdcFirmwareV1/V2 are called only from Windows/AppleWin.cpp:783-785, which the Xcode project does not compile.

37 files | 21 required, 16 optional | 37 in repo, 0 missing

Apple2.rom required in repo bundled
Apple II system ROM, $D000 to $FFFF

  • Size: 12.0 KB
  • SHA1: 09288be70546...
  • MD5: 3c406514b980...
  • Validation: size
  • Source: source/Memory.cpp:2054, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:177
  • Loaded when the machine type is Apple II (original).

Apple2_Plus.rom required in repo bundled
Apple II Plus system ROM, $D000 to $FFFF

  • Size: 12.0 KB
  • SHA1: 33a24f5489ba...
  • MD5: 572b3005a4fa...
  • Validation: size
  • Source: source/Memory.cpp:2055, source/Memory.cpp:2065-2069, source/Memory.cpp:2126-2137, source/frontends/mariani/MarianiFrame.cpp:178
  • Also read on an original Apple II with a language card in slot 0, where MemInitializeCustomF8ROM copies its last 2 KB over the autostart F8 area.

Apple2_JPlus.rom required in repo bundled
Apple II J-Plus system ROM, $D000 to $FFFF

  • Size: 12.0 KB
  • SHA1: ad200b3263d0...
  • MD5: f3e8237eca38...
  • Validation: size
  • Source: source/Memory.cpp:2056, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:179
  • Loaded when the machine type is Apple II J-Plus.

Apple2e.rom required in repo bundled
Apple //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF

  • Size: 16.0 KB
  • SHA1: 61fa9254628e...
  • MD5: 346bc782c6a0...
  • Validation: size
  • Source: source/Memory.cpp:2057, source/Memory.cpp:2065-2069, source/Memory.cpp:2100-2117, source/frontends/mariani/MarianiFrame.cpp:180
  • Loaded when the machine type is Apple //e (original).

Apple2e_Enhanced.rom required in repo bundled
Enhanced Apple //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF

  • Size: 16.0 KB
  • SHA1: b8ea90abe135...
  • MD5: 38063e08c778...
  • Validation: size
  • Source: source/Memory.cpp:2058, source/Memory.cpp:2065-2069, source/Memory.cpp:2100-2117, source/frontends/mariani/MarianiFrame.cpp:181
  • Default machine type.

PRAVETS82.ROM required in repo bundled
Pravets 82 system ROM, $D000 to $FFFF

  • Size: 12.0 KB
  • SHA1: 8bd7ced83e20...
  • MD5: c619b7edfcf0...
  • Validation: size
  • Source: source/Memory.cpp:2059, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:182
  • Loaded when the machine type is Pravets 82.

PRAVETS8M.ROM required in repo bundled
Pravets 8M system ROM, $D000 to $FFFF

  • Size: 12.0 KB
  • SHA1: f1b4ff018acf...
  • MD5: 76c79535f7cf...
  • Validation: size
  • Source: source/Memory.cpp:2060, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:183
  • Loaded when the machine type is Pravets 8M.

PRAVETS8C.ROM required in repo bundled
Pravets 8A system ROM, 4 KB internal Cx ROM then $D000 to $FFFF

  • Size: 16.0 KB
  • SHA1: c976fe56e577...
  • MD5: 1896d7b98dd9...
  • Validation: size
  • Source: source/Memory.cpp:2061, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:184
  • Loaded when the machine type is Pravets 8A.

TK3000e.rom required in repo bundled
TK3000 //e system ROM, 4 KB internal Cx ROM then $D000 to $FFFF

  • Size: 16.0 KB
  • SHA1: f163e5753c18...
  • MD5: 8d84b614b545...
  • Validation: size
  • Source: source/Memory.cpp:2062, source/Memory.cpp:2065-2069, source/frontends/mariani/MarianiFrame.cpp:185
  • Loaded when the machine type is TK3000 //e.

Base64A.rom required in repo bundled
Base64A system ROM, four 12 KB pages

  • Size: 48.0 KB
  • SHA1: f1c779af480b...
  • MD5: 352fdbcae14c...
  • Validation: size
  • Source: source/Memory.cpp:2063, source/Memory.cpp:2065-2069, source/Memory.cpp:2114-2117, source/frontends/mariani/MarianiFrame.cpp:186
  • Loaded when the machine type is Base64A. Copied into memrom as MaxRomPages pages of 12 KB.

Freezes_Non-autostart_F8_Rom.rom optional in repo
Non-autostart F8 monitor ROM

  • Size: 2.0 KB
  • SHA1: 3180be6b555e...
  • MD5: d0a61e95ed1e...
  • Validation: size
  • Source: source/Memory.cpp:2163-2168, source/Utilities.cpp:188-189, source/Common.h:94, source/frontends/mariani/MarianiFrame.cpp:187
  • MemInitializeCustomF8ROM copies it over $F800 to $FFFF when the configuration value "The Freeze's F8 Rom" is set and the machine is an Apple II. The application bundle does not ship it, so it has to be placed in Contents/Resources, the only directory PathToResourceNamed searches.

Apple2_Video.rom required in repo bundled
Apple II and II Plus character generator

  • Size: 2.0 KB
  • SHA1: f9d312f128c9...
  • MD5: 9ac0dc8c4d00...
  • Validation: size
  • Source: source/NTSC_CharSet.cpp:249-256, source/NTSC_CharSet.cpp:296, source/frontends/mariani/MarianiFrame.cpp:189
  • make_csbits reads it on every start, whatever the machine type.

Apple2_JPlus_Video.rom required in repo bundled
Apple II J-Plus character generator

  • Size: 2.0 KB
  • SHA1: 0a382be58db5...
  • MD5: 271e2c9bf928...
  • Validation: size
  • Source: source/NTSC_CharSet.cpp:258-266, source/NTSC_CharSet.cpp:303, source/frontends/mariani/MarianiFrame.cpp:190
  • Read on every start. Fills the two J-Plus character sets selected by AN2.

Apple2e_Enhanced_Video.rom required in repo bundled
Apple //e character generator, US

  • Size: 4.0 KB
  • SHA1: b2b5d87f5269...
  • MD5: 9123fff3442c...
  • Validation: size
  • Source: source/NTSC_CharSet.cpp:278-285, source/NTSC_CharSet.cpp:297, source/NTSC_CharSet.cpp:299-301, source/frontends/mariani/MarianiFrame.cpp:191
  • Read on every start. The original //e set is derived from it by putting the non-alt characters back over the 32 mousetext slots.

Base64A_German_Video.rom required in repo bundled
Base64A character generator

  • Size: 4.0 KB
  • SHA1: 87ca8135f752...
  • MD5: 4b45852b369e...
  • Validation: size
  • Source: source/NTSC_CharSet.cpp:268-276, source/NTSC_CharSet.cpp:304, source/frontends/mariani/MarianiFrame.cpp:192
  • Read on every start. Split in two 2 KB halves for the two character sets.

CHARSET82.bmp required in repo bundled
Pravets 82 character generator bitmap

  • Size: 8.1 KB
  • SHA1: 34718c242ccc...
  • MD5: 5b4866713477...
  • Source: source/NTSC_CharSet.cpp:291, source/frontends/mariani/MarianiFrame.cpp:52-61
  • Read through GetBitmap on every start, decoded with ImageIO and packed eight pixels to the octet. No size check: the copy stops at the shorter of the image and the requested buffer.

CHARSET8M.bmp required in repo bundled
Pravets 8M character generator bitmap

  • Size: 8.1 KB
  • SHA1: cfbdbc1d7654...
  • MD5: f2720f708590...
  • Source: source/NTSC_CharSet.cpp:292, source/frontends/mariani/MarianiFrame.cpp:52-61
  • Read through GetBitmap on every start.

CHARSET8C.bmp required in repo bundled
Pravets 8A character generator bitmap, both character sets

  • Size: 16.1 KB
  • SHA1: 0ec9ebe6542c...
  • MD5: 9248c1f19f3d...
  • Source: source/NTSC_CharSet.cpp:293-294, source/frontends/mariani/MarianiFrame.cpp:52-61
  • Read twice, at row 0 for the alt character set off and at row 16 for on.

DISK2.rom required in repo bundled
Disk II controller firmware, 16 sector

  • Size: 256 B
  • SHA1: d4181c9f046a...
  • MD5: 2020aa1413ff...
  • Validation: size
  • Source: source/Disk.cpp:2074-2082, source/Disk.cpp:2104-2108, source/frontends/mariani/MarianiFrame.cpp:166
  • Read when the Disk II card initialises, which is slot 6 by default. Both firmware images are read up front and the one installed at $C600 follows the boot sector format of the inserted image.

DISK2-13sector.rom required in repo bundled
Disk II controller firmware, 13 sector

  • Size: 256 B
  • SHA1: afd060e6f35f...
  • MD5: 4f80448507cf...
  • Validation: size
  • Source: source/Disk.cpp:2074-2082, source/Disk.cpp:2104-2106, source/frontends/mariani/MarianiFrame.cpp:165
  • Read alongside the 16 sector image when the Disk II card initialises.

SSC.rom required in repo bundled
Super Serial Card firmware

  • Size: 2.0 KB
  • SHA1: 6dab633470c6...
  • MD5: 67c0d61ab091...
  • Validation: size
  • Source: source/SerialComms.cpp:957-970, source/frontends/mariani/MarianiFrame.cpp:167
  • Read when the card initialises, slot 2 by default. The 256 bytes at offset 0x700 go to the slot ROM and the whole 2 KB stays as expansion ROM.

Parallel.rom required in repo bundled
Parallel printer card firmware

  • Size: 256 B
  • SHA1: c75c751589cb...
  • MD5: 5902996f16dc...
  • Validation: size
  • Source: source/ParallelPrinter.cpp:43-52, source/frontends/mariani/MarianiFrame.cpp:171
  • Read when the printer card initialises, slot 1 by default.

MouseInterface.rom optional in repo bundled
Mouse interface card firmware

  • Size: 2.0 KB
  • SHA1: 3a9d881a8a8d...
  • MD5: 22563ab33802...
  • Validation: size
  • Source: source/MouseInterface.cpp:163-176, source/frontends/mariani/MarianiFrame.cpp:173
  • Read only when the user puts the mouse card in a slot. No default slot holds it.

HDC-SmartPort.bin optional in repo bundled
Hard disk controller firmware, SmartPort

  • Size: 256 B
  • SHA1: fd557998fd58...
  • MD5: 2592efa1d34a...
  • Validation: size
  • Source: source/Harddisk.cpp:222-241, source/frontends/mariani/MarianiFrame.cpp:170
  • Default firmware of the hard disk card, which no slot holds until the user adds it. Block mode and drive count are patched into the copy afterwards.

Hddrvr.bin optional in repo bundled
Hard disk controller firmware, version 1

  • Size: 256 B
  • SHA1: 69667800c54d...
  • MD5: e0a40e9166af...
  • Validation: size
  • Source: source/Harddisk.cpp:227, source/Harddisk.cpp:237, source/Harddisk.cpp:1439-1441, source/frontends/mariani/MarianiFrame.cpp:168
  • Selected over the SmartPort firmware when a save state carries a hard disk card older than version 4.

Hddrvr-v2.bin optional in repo
Hard disk controller firmware, version 2

  • Size: 256 B
  • SHA1: 06115eebb4d5...
  • MD5: a49e45e7a6d4...
  • Validation: size
  • Source: source/Harddisk.cpp:228, source/Harddisk.cpp:237, source/Harddisk.cpp:1439-1443, source/frontends/mariani/MarianiFrame.cpp:169
  • Selected when a save state carries hard disk card version 4. The application bundle does not ship it, so it has to be placed in Contents/Resources for that state to restore.

bootsector.bin optional in repo bundled
Boot sector written to a new DOS 3.3 disk image

  • Size: 256 B
  • SHA1: 3b0d57ff9abb...
  • MD5: 6ab4d0a20071...
  • Validation: size
  • Source: source/ProDOS_Utils.cpp:832-836, source/frontends/mariani/MarianiFrame.cpp:194
  • Read by the Disk Maker window when it formats an image without copying DOS 3.3.

bootsector_prodos243.bin optional in repo bundled
Two boot sectors written to a new ProDOS disk image

  • Size: 1.0 KB
  • SHA1: e2f1b6342eff...
  • MD5: 2695dc545807...
  • Validation: size
  • Source: source/ProDOS_Utils.cpp:792-796, source/frontends/mariani/MarianiFrame.cpp:195
  • Read by the Disk Maker window when it creates a ProDOS image.

dos33c.bin optional in repo bundled
DOS 3.3 image copied to the first three tracks of a new disk

  • Size: 12.0 KB
  • SHA1: 52d1bbeed17f...
  • MD5: 46a02fc4775b...
  • Validation: size
  • Source: source/ProDOS_Utils.cpp:774-778, source/frontends/mariani/MarianiFrame.cpp:196
  • Read by the Disk Maker window when DOS 3.3 is copied onto the new image.

prodos243.bin optional in repo bundled
ProDOS 2.4.3 kernel written as PRODOS on a new ProDOS disk

  • Size: 16.7 KB
  • SHA1: 17c354249ddb...
  • MD5: 90644bd658fd...
  • Validation: size
  • Source: source/ProDOS_Utils.cpp:595-599, source/frontends/mariani/MarianiFrame.cpp:197
  • Read by the Disk Maker window when the ProDOS system file is copied.

bitsy.boot.bin optional in repo bundled
Bitsy Boot system file for a new ProDOS disk

  • Size: 365 B
  • SHA1: 474c2b0c6662...
  • MD5: e6e8f7edc3ae...
  • Validation: size
  • Source: source/ProDOS_Utils.cpp:509-513, source/frontends/mariani/MarianiFrame.cpp:198
  • Read by the Disk Maker window when Bitsy Boot is copied.

quit.system.bin optional in repo bundled
Bitsy Bye quit system file for a new ProDOS disk

  • Size: 56 B
  • SHA1: dbda9a9fd882...
  • MD5: 6a32c39d8ac2...
  • Validation: size
  • Source: source/ProDOS_Utils.cpp:552-556, source/frontends/mariani/MarianiFrame.cpp:199
  • Read by the Disk Maker window when Bitsy Bye is copied.

basic17.system.bin optional in repo bundled
BASIC.SYSTEM 1.7 written to a new ProDOS disk

  • Size: 10.0 KB
  • SHA1: 6ba0571dee8d...
  • MD5: a8d8c08f5cb4...
  • Validation: size
  • Source: source/ProDOS_Utils.cpp:467-471, source/frontends/mariani/MarianiFrame.cpp:200
  • Read by the Disk Maker window when BASIC.SYSTEM is copied.

APPLE2E.SYM optional in repo bundled
Debugger symbol table for the main ROM

  • Size: 13.1 KB
  • SHA1: fcfbbb25e06f...
  • MD5: 034527d42a96...
  • Source: source/Debugger/Debugger_Symbols.cpp:46, source/Debugger/Debugger_Symbols.cpp:774, source/Debugger/Debugger_Symbols.cpp:814-817, source/Debugger/Debug.cpp:9499-9500
  • Preloaded into the Main table when the emulator starts. Read from the support directory first, then from the bundle. Parsed as lines of address and name, with no size or hash check.

A2_BASIC.SYM optional in repo bundled
Debugger symbol table for Applesoft BASIC

  • Size: 15.0 KB
  • SHA1: 496a0bd1af46...
  • MD5: 7253a9ba7d7c...
  • Source: source/Debugger/Debugger_Symbols.cpp:47, source/Debugger/Debugger_Symbols.cpp:774, source/Debugger/Debugger_Symbols.cpp:814-817, source/Debugger/Debug.cpp:9502-9503
  • Preloaded into the Basic table when the emulator starts.

A2_DOS33.SYM2 optional in repo
Debugger symbol script for DOS 3.3

  • Size: 2.3 KB
  • SHA1: 51cc84e2cbd9...
  • MD5: 88bd69906b4b...
  • Source: source/Debugger/Debugger_Symbols.cpp:53, source/Debugger/Debugger_Symbols.cpp:774-806, source/Debugger/Debug.cpp:9506-9507
  • Preloaded into the DOS33 table when the emulator starts. The .SYM2 extension routes it through the debugger script reader instead of the symbol parser, so it is only read from the support directory. The application bundle does not ship it.

PrintChar21.ttf optional in repo bundled
Print Char 21 font used by the debugger console and inspector

  • Size: 490.2 KB
  • SHA1: c66c1955dac8...
  • MD5: 972ce55fa7b9...
  • Source: source/frontends/mariani/debugger/ConsoleViewController.mm:74, source/frontends/mariani/debugger/InspectorOutlineViewController.mm:356, source/frontends/mariani/debugger/CharacterMappings.mm:13-142, source/frontends/mariani/Mariani-Info.plist:5-6
  • Registered from the resource folder by ATSApplicationFontsPath and asked for by family name. CharacterMappings maps Apple II character values to its codepoints.

Generated on 2026-08-23T16:12:06Z