emulator: POM2 type: standalone core_classification: other source: "https://github.com/habib256/pom2" upstream: "https://github.com/habib256/pom2" profiled_date: "2026-09-17" source_commit: "95cdbd1dc18b86a6b347dacd513503ac8ed73921" core_version: "0.9.3" display_name: "Apple - Apple II (POM2)" cores: - pom2 systems: - apple-ii mode: standalone notes: | Apple ][, ][+, //e, //c and //c+ emulator by Arnaud Verhille, C++ with an ImGui frontend, plus a browser build and a headless CLI. Nine machine profiles (src/SystemProfile.cpp:32-302): Apple ][ Original, ][+, //e Unenhanced, //e Enhanced, //c, //c Plus, and PAL variants of the //e Unenhanced, //e Enhanced (the default) and //c (Le Chat Mauve). Every file is looked up by a relative name through findResource (src/ResourcePaths.cpp:178-251): the per-user data directory (~/.local/share/POM2, ~/Library/Application Support/POM2, %LOCALAPPDATA%\POM2) when it really is per-user, the executable directory, its parent, ../share/POM2, the temp fallback data directory otherwise, then the working directory and its two parents. The first hit wins. Release packages ship the whole roms/ tree, the fonts and the two photos (packaging/bundle.manifest). Machine firmware is a probe chain per profile, first name found wins (SystemProfile.cpp romProbeOrder, src/ProfileSwitch.cpp:113-133): ][ Original apple2o.rom, apple2.rom ][+ apple2p.rom, apple2.rom //e Unenhanced apple2e_unenh.rom, 342-0135-b.64.rom, apple2e.rom //e Enhanced apple2e.rom //c apple2c-32Kv0.rom, apple2c-16K.rom, 3420033a.256 //c Plus apple2cp.rom, apple2c-plus.rom, apple2c-32Kv0.rom With no candidate the machine runs on a $D000-$FFFF stub and the Welcome panel opens (src/MainWindow.cpp:323-331). A first run with no //e image falls back to the ][+ chain (src/MainWindow.cpp:228-241). Memory::loadAppleIIRom (src/Memory.cpp:173-236) maps 12 KB at $D000, 16 KB at $C000, skips the 4 KB pad of a 20 KB ][+ dump, and slices a 32 KB dump by profile: //e images carry the firmware in the upper half, //c and //c+ images are two firmware banks with bank 0 in the lower half (src/SystemProfile.cpp:429). Character generators follow charRomProbeOrder per profile, or the locale picked in the toolbar (src/CharRomCatalog.cpp:42-79, src/ProfileSwitch.cpp:135-141). Memory::loadCharRom accepts 2 KB, 4 KB and 8 KB dumps (src/Memory.cpp:324-357); an 8 KB dump is two 4 KB banks, loaded as one bank or kept dual-bank with annunciator 2 selecting the live set. Peripheral ROMs are read when the card is plugged (src/SlotCardFactory.cpp). The Disk II carries the 341-0027-A boot PROM and the 16-sector P6 sequencer built in (src/DiskIICard.cpp:135-148). CFFA, Liron, Workstation and the MC68705 mouse card leave the slot empty without their dump; Grappler+, ThunderClock+ and TransWarp run a synthetic ROM instead. The catalogue behind the ROM Status panel (src/RomCatalog.h) lists every name in probe order with the size the loader enforces, what a missing dump costs (degraded, card unavailable, unused) and, where POM2 vouches for a dump, its CRC32; the panel hashes each present file (src/RomStatus_ImGui.cpp:169-181, 311). Help > Download missing ROMs (src/RomFetch.cpp:66-263) fetches 37 dumps with curl from raw.githubusercontent.com/Abdess/retrobios, pinned to HTTPS (src/RomFetch.cpp:694-710). Every entry carries the SHA-256 of the dump POM2 ships in its own roms/ tree, eight a CRC32 as well; a download is installed only when its size, CRC32 and SHA-256 match (src/RomFetch.cpp:591-627). A present file is re-checked with the same gate and, when it is not the catalogued dump, replaced after a copy to roms-replaced/ under the data directory (src/RomFetch.cpp:541-589, 795-815, 824-842); a 12 KB apple2p.rom is the one alternate size kept as is. Two entries are members of MAME romsets, read in-process (src/ZipMember.cpp): apple2e_unenh.rom is 342-0135-b.64 then 342-0134-a.64 from apple2e.zip, mouse_341-0270-c.bin is 341-0270-c.4b from a2mouse.zip. Downloads land in the per-user data directory's roms/ (src/RomFetch.cpp:763-783). Unavailable in the browser build (src/RomFetch.cpp:884-887). The floppy mechanical sounds are MAME's samples/floppy set, read from roms/floppy_samples/ as two banks of ten WAV files prefixed 525_ and 35_ (src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353); a missing sample is logged and the drive stays silent. Media named by the code are not firmware and are not listed here: the browser demo boots floppyemu/DIX.po (wasm/shell.html:89) or, when the shell passes no disk, floppyemu/Total Replay v6.1.hdv (src/main.cpp:282-286); the headless CLI mounts disks_5.4/dos33_master.dsk by default (src/pom2_headless.cpp:262-264). Disk, tape and hard-disk images are browsed from disks_5.4/, disks_3.5/, hdv/, floppyemu/, cassettes/ and prodos_folder/ next to the executable. files: - name: "apple2o.rom" path: "roms/apple2o.rom" description: "Apple ][ Original monitor and Integer BASIC, $D000-$FFFF" required: false priority: 1 size: 12288 sha256: "68d9db6bb4c305d40c3fa89fa0f2d7b7f71516a9431e3138859f23bc5bddb2d1" sha1: "78008be557f643e956a106121bcc182c0fb9ea6d" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:38, src/Memory.cpp:173-236, src/RomFetch.cpp:70-73" note: "First candidate of the Apple ][ Original profile; apple2.rom is probed next." - name: "apple2.rom" path: "roms/apple2.rom" description: "Apple ][ generic 12 KB fallback, Autostart monitor and Applesoft" required: false priority: 2 size: 12288 sha256: "fc3e9d41e9428534a883df5aa10eb55b73ea53d2fcbb3ee4f39bed1b07a82905" sha1: "33a24f5489ba9195b44be77d9afb2252594cb5c7" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:38, src/SystemProfile.cpp:54, src/ProfileSwitch.cpp:121-128, src/RomFetch.cpp:74-81" note: "Probed after the profile image for the ][ and ][+ profiles. When it resolves in place of that image the loader logs that the ROM identity may not match the machine." - name: "apple2p.rom" path: "roms/apple2p.rom" description: "Apple ][+ Autostart monitor and Applesoft, 4 KB pad then $C000-$FFFF" required: false priority: 1 size: 20480 size_options: [12288, 20480] sha256: "92c4bef609920842ea472d21b661a0d35dbda6cd90963b8b734a205e22d84108" sha1: "29a53f3bb158b160433369e8e4a1d7cd5bf68ac6" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:54, src/Memory.cpp:221-231, src/RomFetch.cpp:82-94, src/RomFetch.cpp:824-835" note: "First candidate of the ][+ profile and of the first-run fallback (src/MainWindow.cpp:237-241). The loader drops the leading 4 KB of the 20 KB dump. The fetch gate names that dump; a 12 KB six-chip image already on disk is kept as present without a digest check." - name: "apple2e.rom" path: "roms/apple2e.rom" description: "Apple //e Enhanced firmware, 32 KB dump with the 16 KB firmware in the upper half" required: true priority: 1 size: 32768 sha256: "c17bc38c75ba96c33a30c688a1efd60144811073423533fe7f8453cdd9457aab" sha1: "d756eba578a6c5a4807510dfee30ee585c63755e" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:101, src/SystemProfile.cpp:241-253, src/Memory.cpp:201-213, src/Memory.cpp:232-234, src/MainWindow.cpp:228-231, src/RomFetch.cpp:95-98" note: "Sole candidate of the //e Enhanced profiles, NTSC and PAL, PAL being the default machine. Also the last fallback of the //e Unenhanced chain." - name: "apple2e_unenh.rom" path: "roms/apple2e_unenh.rom" description: "Apple //e Unenhanced firmware, 4 KB internal $Cx00 ROM then $D000-$FFFF" required: false priority: 1 aliases: ["342-0135-b.64.rom"] size: 16384 sha256: "1fb812584c6633fa16b77b20915986ed1178d1e6fc07a647f7ee8d4e6ab9d40b" sha1: "61fa9254628e5bb7236fb474006116d67684d747" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:78-79, src/SystemProfile.cpp:267-279, src/RomFetch.cpp:51-56, src/RomFetch.cpp:99-107" note: "First candidate of the //e Unenhanced profiles; 342-0135-b.64.rom is probed second, apple2e.rom third. The fetcher assembles it from the two 8 KB chips of the MAME apple2e set, 342-0135-b.64 then 342-0134-a.64." - name: "apple2c-32Kv0.rom" path: "roms/apple2c-32Kv0.rom" description: "Apple //c two-bank firmware, bank 0 in the lower 16 KB" required: false priority: 1 size: 32768 crc32: "323952d1" sha256: "d65bbf97058b9cdce8eaebf74124048e3b4e42dca1bd42be316747bbc27dc124" sha1: "fb0d644aafaff1352d0816bc8494f6c9913809d5" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:142-143, src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:429-434, src/Memory.cpp:201-213, src/Memory.cpp:232-234, src/RomFetch.cpp:108-111" note: "First candidate of the //c and //c PAL profiles, third of the //c Plus chain. Bank 0 is mapped at reset, the $C028 ROMBANK switch selects the other. Identical to 3420033a.256 with its first 256 bytes zeroed." - name: "apple2c-16K.rom" path: "roms/apple2c-16K.rom" description: "Apple //c ROM 255, 16 KB, MAME apple2c a2c.128" required: false priority: 2 size: 16384 crc32: "f0edaa1b" sha256: "3ca1c8a27bf111aa0f4dc9372c5e6404457adb9a458ce32ae4b03a7e989e0c76" sha1: "1a9b8aca5e32bb702ddb7791daddd60a89655729" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:142-143, src/Memory.cpp:219-220, src/RomFetch.cpp:112-115" note: "Second candidate of the //c chain, loaded at $C000." - name: "3420033a.256" path: "roms/3420033a.256" description: "Apple //c ROM 0, UniDisk 3.5 firmware, MAME apple2c0 342-0033-A" required: false priority: 3 size: 32768 crc32: "c8b979b3" sha256: "678d5c9d374664d2ee94ba9c9564d26a917b31116b07c46df30a3e82c640885b" sha1: "10767e96cc17bad0970afda3a4146564e6272ba1" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:142-143, src/RomFetch.cpp:116-119" note: "Third candidate of the //c chain." - name: "apple2cp.rom" path: "roms/apple2cp.rom" description: "Apple //c Plus two-bank firmware, MAME apple2cp 341-0625-a.256" required: false priority: 1 aliases: ["apple2c-plus.rom"] size: 32768 crc32: "0b996420" sha256: "5a62070f6a0b07784681d4df4bf2ce88b2809bec0cbaa65fcb963e804ed60374" sha1: "1a27ae26966bbafd825d08ad1a24742d3e33557c" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:204-205, src/SystemProfile.cpp:429-434, src/RomFetch.cpp:120-123" note: "First candidate of the //c Plus profile; apple2c-plus.rom is probed second and apple2c-32Kv0.rom third." - name: "apple2_char.rom" path: "roms/apple2_char.rom" description: "Apple ][ and ][+ character generator, 2 KB uppercase set" required: false priority: 1 size: 2048 sha256: "08f5d22230481019844492dde0a29a018cb193712a9e4a43770a3870608f28de" sha1: "f9d312f128c9557d9d6ac03bfad6c3ddf83e5659" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:39, src/SystemProfile.cpp:55, src/CharRomCatalog.cpp:42-43, src/RomFetch.cpp:126-129, src/Memory.cpp:324-357" note: "Sole candidate of the ][ and ][+ profiles and the last fallback of every //e-class chain." - name: "apple2e_char.rom" path: "roms/apple2e_char.rom" description: "Apple //e Enhanced character generator 342-0265-A, 4 KB with MouseText" required: false priority: 1 aliases: ["apple2e_char_us.rom"] size: 4096 sha256: "52c3b87900ac939f6525402cab1ccfd8f8259290fc6df54da48fb4c98ae3ed0f" sha1: "b2b5d87f52693817fc747df087a4aa1ddcdb1f10" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:105, src/SystemProfile.cpp:144, src/SystemProfile.cpp:206, src/CharRomCatalog.cpp:48-49, src/RomFetch.cpp:130-142, src/Memory.cpp:324-357" note: "First candidate of the //e Enhanced, //c and //c Plus profiles; the same dump answers to apple2e_char_us.rom in the locale picker, and the fetcher writes both names." - name: "apple2e_char_us_unenh.rom" path: "roms/apple2e_char_us_unenh.rom" description: "Apple //e Unenhanced character generator 342-0133-A, 4 KB" required: false priority: 1 aliases: ["apple2e_char_2k.rom", "341-0265-a.chr.rom"] size: 4096 sha256: "ed5bdd4afa509134e85f1d020685af7ff50e279226eb869a17825b471cc1634c" sha1: "58ad0008df72896a18601e090ee0d58155ffa5be" validation: [size, sha256] source_ref: "src/SystemProfile.cpp:83-84, src/CharRomCatalog.cpp:50-51, src/RomFetch.cpp:143-150, src/Memory.cpp:324-357" note: "The //e Unenhanced profile probes apple2e_char_2k.rom then 341-0265-a.chr.rom then apple2_char.rom; the same dump ships under both names and the fetcher writes both." - name: "apple2e_char_fr.rom" path: "roms/apple2e_char_fr.rom" description: "Apple //e French character generator, 4 KB" required: false aliases: ["apple2e_char_frca_unenh.rom"] size: 4096 crc32: "ab0be706" sha256: "52d8e46b487a617c288caaf12ab7ad6cb81030b6ab92419f9a2e19c43d765566" sha1: "42afb02aab4146f781ac52803a2733adc4da834e" validation: [size, sha256] source_ref: "src/CharRomCatalog.cpp:52-53, src/CharRomCatalog.cpp:56-57, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:153-156, src/Memory.cpp:324-357" note: "Locale picker entry. The same dump is also listed as the FR Canadian unenhanced set 341-0168-A, a name the fetcher does not serve." - name: "apple2e_char_frca.rom" path: "roms/apple2e_char_frca.rom" description: "Apple //e French Canadian Enhanced character generator, 4 KB" required: false size: 4096 crc32: "2c8fc403" sha256: "56479cbec4767651c62a4d0f61e6ed103395216f2b86eddba74d85495dd71cc4" sha1: "4043e0808af8be096660827445e41149d16c5c85" validation: [size, sha256] source_ref: "src/CharRomCatalog.cpp:54-55, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:157-160, src/Memory.cpp:324-357" note: "Locale picker entry; equals the low bank of 342-0274-a.e9." - name: "apple2e_char_uk.rom" path: "roms/apple2e_char_uk.rom" description: "Apple //e UK Enhanced character generator 342-0273-A, 4 KB" required: false size: 4096 crc32: "dda11653" sha256: "d55bd5391485cd78c68c71408f09bd088e82a73d179a0a25820067a0c1554acd" sha1: "d19c2e2cc12b27d77edc403d5d0701186a4ed988" validation: [size, sha256] source_ref: "src/CharRomCatalog.cpp:58-59, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:161-164, src/Memory.cpp:324-357" note: "Locale picker entry." - name: "apple2e_char_uk_unenh.rom" path: "roms/apple2e_char_uk_unenh.rom" description: "Apple //e UK Unenhanced character generator 341-0160-A, 4 KB" required: false size: 4096 crc32: "7a9a91ef" sha256: "f2199fbfb473e98a8c3fb7e7c3312faaf76b4b010b02c655b662e5f87dc997f3" sha1: "6ca9767e0f47f642d1caab6ed41b8f58c58bb9eb" validation: [size, sha256] source_ref: "src/CharRomCatalog.cpp:60-61, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:165-168, src/Memory.cpp:324-357" note: "Locale picker entry." - name: "apple2e_char_de.rom" path: "roms/apple2e_char_de.rom" description: "Apple //e German character generator 341-0161-A, 4 KB" required: false size: 4096 crc32: "0d72f153" sha256: "b92576b4fa994384501078ff99963b53cfa98eff4bb641eb61649d484a469315" sha1: "a7fd75ae8611572b0b4d99ad54562014b879dbbf" validation: [size, sha256] source_ref: "src/CharRomCatalog.cpp:62-63, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:169-172, src/Memory.cpp:324-357" note: "Locale picker entry." - name: "apple2e_char_de_improved.rom" path: "roms/apple2e_char_de_improved.rom" description: "Apple //e German Improved character generator, 4 KB" required: false size: 4096 crc32: "d345d332" sha256: "0e32ab131e3932fc61c0a5f0f5509b4c37ab8db6239027f5955d47feba56d39f" sha1: "12ce44f02bd28c350e2b0723d94ab8d9066f8798" validation: [size, sha256] source_ref: "src/CharRomCatalog.cpp:64-65, src/CharRomCatalog.cpp:151-166, src/RomFetch.cpp:173-176, src/Memory.cpp:324-357" note: "Locale picker entry." - name: "342-0274-a.e9" path: "roms/342-0274-a.e9" description: "Apple //e international video ROM 342-0274-A, 8 KB, French Canadian bank then US bank, MAME apple2eefr" required: false size: 8192 crc32: "8f342081" sha256: "d4d29771658372c6ab5d18ff3bdab6b3b2b02b8de30ed6b021efb8a415192432" sha1: "c81c1bbf237e70f8c3e5eef3c8fd5bd9b9f54d1e" validation: [size, sha256] source_ref: "src/CharRomCatalog.cpp:73-76, src/CharRomCatalog.cpp:144-149, src/RomFetch.cpp:177-182, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:324-357" note: "Locale picker entries select bank 0 or bank 1; loaded whole, both banks stay live and annunciator 2 picks the set." - name: "apple2e_char_ft_blockascii.rom" path: "roms/apple2e_char_ft_blockascii.rom" description: "French Touch Block ASCII dual-bank character generator, 8 KB" required: false size: 8192 crc32: "1eae3944" sha256: "c69c8e1eb26923c5df03d3507fdf86c5f768283a924a5fffdd80377cf2339321" sha1: "f79815457437e50404f4f537d8aabe34bff3a220" validation: [size, sha256] source_ref: "src/CharRomCatalog.cpp:77-78, src/RomFetch.cpp:183-187, src/RomStatus_ImGui.cpp:250, src/Memory.cpp:324-357" note: "Locale picker entry loaded dual-bank: annunciator 2 flips between the text set and the block glyphs." - name: "Videx Lower Case Chip ROM.bin" path: "roms/Videx Lower Case Chip ROM.bin" description: "Videx LOWER CASE CHIP character generator for the ][ and ][+, 2 KB" required: false size: 2048 crc32: "00f68076" sha256: "6a516bcd96382597af7a498fb1da7547490c830db0f9d22d541fb065b9cd048b" sha1: "447874fe0850c8add3fd5b13fa98f6648fe6f999" validation: [size, crc32, sha256] source_ref: "src/CharRomCatalog.cpp:44-45, src/RomCatalog.h:166-172, src/RomFetch.cpp:188-192, src/RomStatus_ImGui.cpp:311" note: "Locale picker entry for the ][ and ][+ profiles; without it the picker keeps the stock uppercase set." - name: "disk2.rom" path: "roms/disk2.rom" description: "Disk II 16-sector boot PROM 341-0027-A" required: false has_builtin: true size: 256 sha256: "de1e3e035878bab43d0af8fe38f5839c527e9548647036598ee6fe7ec74d2a7d" sha1: "d4181c9f046aafc3fb326b381baac809d9e38d16" validation: [size, sha256] source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:135-140, src/DiskIICard.cpp:150-173, src/RomFetch.cpp:195-198" note: "The card carries the same PROM built in; the file replaces it when present." - name: "diskii_p6.rom" path: "roms/diskii_p6.rom" description: "Disk II 16-sector P6 logic state sequencer PROM 341-0028-A" required: false has_builtin: true size: 256 sha256: "e5e30615040567c1e7a2d21599681f8dac820edbdcda177b816a64d74b3a12f2" sha1: "bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4" validation: [size, sha256] source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:141-148, src/DiskIICard.cpp:175-201, src/DiskIICard.cpp:250-262, src/RomFetch.cpp:199-202" note: "Loading the file switches the bit-level LSS path on for every image; without it the legacy 32-cycle nibble gate serves non-WOZ images and the built-in PROM serves WOZ images." - name: "disk2_13.rom" path: "roms/disk2_13.rom" description: "Disk II 13-sector boot PROM 341-0009" required: false size: 256 sha256: "2d2599521fc5763d4e8c308c2ee7c5c4d5c93785b8fb9a4f7d0381dfd5eb60b6" sha1: "afd060e6f35faf3bb0146fa889fc787adf56330a" validation: [size, sha256] source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:203-220, src/DiskIICard.cpp:263-287, src/RomCatalog.h:90-93, src/RomFetch.cpp:203-206" note: "A mounted 13-sector disk switches the card to this PROM at $Cn00 and forces the bit-level LSS; without it the disk mounts but cannot boot." - name: "diskii_p6_13.rom" path: "roms/diskii_p6_13.rom" description: "Disk II 13-sector P6 logic state sequencer PROM 341-0010" required: false size: 256 sha256: "383c55f5333cbfde39dd41528186631e5aca2eddfec30716344f03b6a4d44655" sha1: "e3d6d1c30653572b49ecc2dc54ce073978411a04" validation: [size, sha256] source_ref: "src/SlotCardFactory.cpp:93-106, src/DiskIICard.cpp:222-239, src/DiskIICard.cpp:272-282, src/RomCatalog.h:94-97, src/RomFetch.cpp:207-210" note: "Read into the card and not consumed: the 13-sector switch depends on disk2_13.rom alone, and the sequencer keeps running the 16-sector P6 on 13-sector disks." - name: "cffa20eec02.bin" path: "roms/cffa20eec02.bin" description: "CFFA 2.0 firmware, 65C02 build" required: false size: 4096 crc32: "fb3726f8" sha256: "a08cb25ad80054649ee5fcb620e01ed56f025acb28c753bc28dd187a1d149cab" sha1: "080ff88f19de22328e162954ee2b51ee65f9d5cd" validation: [size, crc32, sha256] source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:119-123, src/RomFetch.cpp:221-224" note: "Preferred when the CPU is a 65C02, the 6502 build is the fallback; the slot stays empty when neither is found." - name: "cffa20ee02.bin" path: "roms/cffa20ee02.bin" description: "CFFA 2.0 firmware, 6502 build" required: false size: 4096 crc32: "3ecafce5" sha256: "3d7f6918f9af3828f5a6299299a817df0d354ee62e547bc0238755de66162a88" sha1: "d600692ed9626668233a22a48236af639410cb7b" validation: [size, crc32, sha256] source_ref: "src/SlotCardFactory.cpp:115-139, src/CffaCard.cpp:26-40, src/RomCatalog.h:124-129, src/RomFetch.cpp:217-220" note: "Preferred on an NMOS 6502, fallback for a 65C02." - name: "mouse_341-0270-c.bin" path: "roms/mouse_341-0270-c.bin" description: "AppleMouse II card slot EPROM 341-0270-C" required: false size: 2048 sha256: "7f8e50c0e8a409991264201f9300f109b872b68e09c43f3e6c26af35fd8b89af" sha1: "3a9d881a8a8d30f55b9719aceebbcf717f829d6f" validation: [size, sha256] source_ref: "src/SlotCardFactory.cpp:51-83, src/SlotCardFactory.cpp:232-247, src/MouseCard.cpp:119-153, src/MouseCardAppleWin.cpp:87-100, src/RomFetch.cpp:241-246" note: "Needed by both mouse cards: the MC68705 card also needs the MCU ROM, the AppleWin HLE card needs this one only. The fetcher extracts it from the MAME a2mouse set as 341-0270-c.4b." - name: "mouse_341-0269.bin" path: "roms/mouse_341-0269.bin" description: "AppleMouse II card MC68705P3 MCU mask ROM 341-0269" required: false size: 2048 sha256: "66480812edad5f6bd70349949cf8bd8fbafee2dc8bf396541d4e78bac2629ec0" sha1: "3a2baa6648efe4456d3ec3721216e57c64f7acfc" validation: [size, sha256] source_ref: "src/SlotCardFactory.cpp:51-83, src/MouseCard.cpp:150-153, src/M68705P3.cpp:85-104, src/RomFetch.cpp:237-240" note: "The MC68705 mouse card leaves its slot empty without it." - name: "grappler_plus.bin" path: "roms/grappler_plus.bin" description: "Orange Micro Grappler+ parallel printer EPROM 3.2" required: false aliases: ["grappler+.bin", "grappler.bin"] size: 4096 sha256: "9be4dea7722ad8928aee64c2ae708f365a6d66c50a63bff8a3c1a4e7596d44c6" sha1: "829072cc19a58b24d36c2af972abaad6f9ba35d9" validation: [size, sha256] source_ref: "src/SlotCardFactory.cpp:147-166, src/GrapplerCard.cpp:29-52, src/RomCatalog.h:132-138, src/RomFetch.cpp:233-236" note: "Without it the card runs a stub ROM: PR#n prints, the graphics dump commands are absent." - name: "ae_transwarp_1.4.bin" path: "roms/ae_transwarp_1.4.bin" description: "Applied Engineering TransWarp accelerator ROM v1.4, MAME warprom" required: false aliases: ["ae transwarp rom v1.4.bin"] size: 4096 crc32: "afe37f55" sha256: "bcbb1a3bab083b0c2988b502f5e024ff4346fab5dbf09276b32724693bcbd0e9" sha1: "7b75534e7895e04859a0b1337801c6eeb0cef52a" validation: [size, crc32, sha256] source_ref: "src/TranswarpCard.h:167, src/TranswarpCard.cpp:213-231, src/RomCatalog.h:139-146, src/RomFetch.cpp:229-232" note: "Shipped in roms/ since v0.9.3. The card accelerates without it and only shadows $F000-$FFFF with the speed-corrected monitor when the dump is present; the shadow steps aside for a main ROM reload and covers the new firmware." - name: "thunderclock_u9_v1.3.bin" path: "roms/thunderclock_u9_v1.3.bin" description: "Thunderware ThunderClock+ slot ROM rev 1.3, U9" required: false aliases: ["thunderclock_u9.bin", "thunderclock.rom", "Thunderware_REV_1.3_ROM_U9.bin"] size: 2048 size_options: [256, 2048] sha256: "ecca793179427fdd193373080bf23e49a95743bd7b5e0b218c747663938b6c03" sha1: "60f434f5325899d7ea257a6e56e6f53eae65146a" validation: [size, sha256] source_ref: "src/ClockCard.cpp:469-530, src/RomCatalog.h:174-184, src/RomFetch.cpp:225-228" note: "The card loads a 256-byte slot ROM or the 2 KB chip, which supplies the $C800 expansion ROM as well; the fetch gate names the 2 KB dump and replaces a 256-byte file. The first four even bytes must read $08, $28, $58, $70, the ProDOS clock signature, or the synthetic ROM stays in place." - name: "liron.rom" path: "roms/liron.rom" description: "Apple Liron SmartPort controller firmware, 4 KB" required: false size: 4096 sha256: "42c1ae66c6bec932669239599eb8989a5364752d56fa5c8997bb23d8dfc0b657" sha1: "fa94ecc2aa23f336f7da9e18bc8f4a6cfbb4ea60" validation: [size, sha256] source_ref: "src/SlotCardFactory.cpp:194-220, src/LironCard.cpp:61-85, src/SmartPortCard.cpp:80-97, src/RomCatalog.h:100-104, src/RomFetch.cpp:213-216" note: "The Liron card refuses to plug without it. The SmartPort 3.5 card loads it on machines with physical slots and otherwise presents a synthetic identity." - name: "341-0358-A.bin" path: "roms/341-0358-A.bin" description: "Apple II Workstation Card firmware 341-0358-A, 64 KB" required: false aliases: ["341-0358-a.bin"] size: 65536 crc32: "63819dcb" sha256: "ce785b913b9fcec6db0fab89b2d94f07fcd07664a822531dcbba3a5ca70ca3bf" sha1: "59c8e8c88bac5c31ada1306b412edfcf5912a720" validation: [size, crc32, sha256] source_ref: "src/SlotCardFactory.cpp:169-192, src/WorkstationCard.cpp:60-74, src/RomCatalog.h:156-164, src/RomFetch.cpp:253-256" note: "The Workstation card leaves its slot empty without it; the card runs its own 65C02 on the upper 32 KB." - name: "341-0438-a.bin" path: "roms/341-0438-a.bin" description: "Apple II 3.5 Disk Controller SuperDrive firmware 341-0438-A, MAME a2superdrive" required: false size: 32768 crc32: "c73ff25b" sha256: "084587835c1d2c92f5708a9745fdd43ba32136fcdb861a12ee7d690de22dc172" sha1: "440c3f84176c7b9f542da0b6ddf4fb13ec326c46" validation: [size, crc32, sha256] source_ref: "src/RomCatalog.h:105-111, src/RomStatus_ImGui.cpp:169-181, src/RomFetch.cpp:249-252" note: "No card reads it; the ROM Status panel and the fetch gate check it." - name: "342-0326-a.f12" path: "roms/342-0326-a.f12" description: "Apple //e French keyboard decode ROM 342-0326-A, MAME apple2eefr" required: false size: 2048 crc32: "f04970a9" sha256: "4ae7ff693a486b155a70a8833047b3d4363464dace6760ed64bfb68db233ed4b" sha1: "806a602195c18ffec637c03b6bb3405188b0dc1e" validation: [size, crc32, sha256] source_ref: "src/RomCatalog.h:112-118, src/RomStatus_ImGui.cpp:169-181, src/RomStatus_ImGui.cpp:311, src/RomFetch.cpp:257-260" note: "Host keys are mapped directly, no keyboard decode ROM is emulated; the ROM Status panel and the fetch gate check the file only." - name: "525_seek_2ms.wav" path: "roms/floppy_samples/525_seek_2ms.wav" description: "MAME floppy sample, 5.25 inch drive, 2 ms head seek" category: game_data required: false size: 5336 sha1: "2d046a880476218685ed738fe8c8381962afd74a" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" note: "One of ten samples per drive bank; a missing sample is logged and that sound stays silent." - name: "525_seek_6ms.wav" path: "roms/floppy_samples/525_seek_6ms.wav" description: "MAME floppy sample, 5.25 inch drive, 6 ms head seek" category: game_data required: false size: 14860 sha1: "6f698055fa6e9da6c5ae3fd6fb05de76b92a45a9" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_seek_12ms.wav" path: "roms/floppy_samples/525_seek_12ms.wav" description: "MAME floppy sample, 5.25 inch drive, 12 ms head seek" category: game_data required: false size: 22764 sha1: "fbbbb5e8724c076d194e66a4443d299d54a8efd6" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_seek_20ms.wav" path: "roms/floppy_samples/525_seek_20ms.wav" description: "MAME floppy sample, 5.25 inch drive, 20 ms head seek" category: game_data required: false size: 30060 sha1: "b6cd14944454c743861196edb4fcab1cc9b586d4" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_empty.wav" path: "roms/floppy_samples/525_spin_empty.wav" description: "MAME floppy sample, 5.25 inch drive, motor running, no disk" category: game_data required: false size: 8864 sha1: "4b13701d9a7f8ab0f0827f17ba80b5c32b4e0fa7" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_loaded.wav" path: "roms/floppy_samples/525_spin_loaded.wav" description: "MAME floppy sample, 5.25 inch drive, motor running, disk loaded" category: game_data required: false size: 17708 sha1: "875f90538a3ff5db863ad4c384e1808841ddea9b" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_start_empty.wav" path: "roms/floppy_samples/525_spin_start_empty.wav" description: "MAME floppy sample, 5.25 inch drive, motor start, no disk" category: game_data required: false size: 11180 sha1: "b87d89c4b46c36dd78dec3dc5170ca61501e7cd9" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_start_loaded.wav" path: "roms/floppy_samples/525_spin_start_loaded.wav" description: "MAME floppy sample, 5.25 inch drive, motor start, disk loaded" category: game_data required: false size: 17708 sha1: "510476098848e2b5cdfe9f1608f8dfa3207fe9b4" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_spin_end.wav" path: "roms/floppy_samples/525_spin_end.wav" description: "MAME floppy sample, 5.25 inch drive, motor stop" category: game_data required: false size: 8864 sha1: "f8d9b94c4d92d35d9ffb1117b693fc74a93f613f" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "525_step_1_1.wav" path: "roms/floppy_samples/525_step_1_1.wav" description: "MAME floppy sample, 5.25 inch drive, single track step" category: game_data required: false size: 6628 sha1: "669ee98fb9fac4371c72ed0b60be1bc8470bc7f8" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_seek_2ms.wav" path: "roms/floppy_samples/35_seek_2ms.wav" description: "MAME floppy sample, 3.5 inch drive, 2 ms head seek" category: game_data required: false size: 7450 sha1: "55caafbd19486b8d517e4b33a6fa65250df55e25" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" note: "One of ten samples per drive bank; a missing sample is logged and that sound stays silent." - name: "35_seek_6ms.wav" path: "roms/floppy_samples/35_seek_6ms.wav" description: "MAME floppy sample, 3.5 inch drive, 6 ms head seek" category: game_data required: false size: 22230 sha1: "87e5dec269e67497681c15849777ebfc301131c1" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_seek_12ms.wav" path: "roms/floppy_samples/35_seek_12ms.wav" description: "MAME floppy sample, 3.5 inch drive, 12 ms head seek" category: game_data required: false size: 26540 sha1: "c6b34fc61496943134ac45cc836a24e743caf794" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_seek_20ms.wav" path: "roms/floppy_samples/35_seek_20ms.wav" description: "MAME floppy sample, 3.5 inch drive, 20 ms head seek" category: game_data required: false size: 44144 sha1: "b2fe4c3a4185146a7d11483d92d4412dd79dbc78" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_empty.wav" path: "roms/floppy_samples/35_spin_empty.wav" description: "MAME floppy sample, 3.5 inch drive, motor running, no disk" category: game_data required: false size: 17708 sha1: "db04fc097bdd0411cff232f57525ded491b48c6c" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_loaded.wav" path: "roms/floppy_samples/35_spin_loaded.wav" description: "MAME floppy sample, 3.5 inch drive, motor running, disk loaded" category: game_data required: false size: 17708 sha1: "96ce04a5b02af0da6d311f06fc4906a3cf71c78f" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_start_empty.wav" path: "roms/floppy_samples/35_spin_start_empty.wav" description: "MAME floppy sample, 3.5 inch drive, motor start, no disk" category: game_data required: false size: 17708 sha1: "af770fd9261a8efee23d66cd39b27be7b2ab7853" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_start_loaded.wav" path: "roms/floppy_samples/35_spin_start_loaded.wav" description: "MAME floppy sample, 3.5 inch drive, motor start, disk loaded" category: game_data required: false size: 35308 sha1: "c82b1714378bf2507ed86dea1e9fe743c380abab" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_spin_end.wav" path: "roms/floppy_samples/35_spin_end.wav" description: "MAME floppy sample, 3.5 inch drive, motor stop" category: game_data required: false size: 17684 sha1: "a8901b692de15eb7a9052f61283f0e7a2b63d67d" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "35_step_1_1.wav" path: "roms/floppy_samples/35_step_1_1.wav" description: "MAME floppy sample, 3.5 inch drive, single track step" category: game_data required: false size: 6878 sha1: "40d756d0cb5f7998ca26ac1de142a96a83fa2b97" source_ref: "src/FloppySoundDevice.cpp:80-118, src/MainWindow.cpp:340-353" - name: "DejaVuSans.ttf" path: "fonts/DejaVuSans.ttf" description: "DejaVu Sans, the frontend text font" category: game_data required: false bundled: true unsourceable: "host program component shipped inside every POM2 package, not emulation data" size: 759720 sha1: "3061cf7af25793a655a1ff5a509385f3620f3eb3" source_ref: "src/main.cpp:530-543" note: "Falls back to the system DejaVu, Arial Unicode or Segoe UI, then to the ImGui bitmap font." - name: "fa-solid-900.ttf" path: "fonts/fa-solid-900.ttf" description: "Font Awesome 6 Free Solid, the frontend icon font" category: game_data required: false bundled: true unsourceable: "host program component shipped inside every POM2 package, not emulation data" size: 426112 sha1: "0c8c9706abc0116f08b66d11a69da6aa9ef7e6bf" source_ref: "src/main.cpp:590-608" note: "Without it every icon renders as an empty box." - name: "Apple_II_plus.jpg" path: "pic/Apple_II_plus.jpg" description: "Apple ][+ photograph shown in Help > About" category: game_data required: false bundled: true unsourceable: "host program component shipped inside every POM2 package, not emulation data" size: 102046 sha1: "69358dd499148deae4112b49cedb7bec220584e2" source_ref: "src/MainWindow_MiscPanels.cpp:621" - name: "Keyboard_AppleIIe.jpeg" path: "pic/Keyboard_AppleIIe.jpeg" description: "Apple //e keyboard photograph the clickable keyboard window is built on" category: game_data required: false bundled: true unsourceable: "host program component shipped inside every POM2 package, not emulation data" size: 794259 sha1: "a178f37661078739637ff7642cd6450c762993aa" source_ref: "src/MainWindow_MiscPanels.cpp:480" note: "The window hotspots are fractions of this image; without it the window has nothing to click."