From 55a635ec66b2f6a6713cb7c334ce63b0e487ba10 Mon Sep 17 00:00:00 2001 From: Abdessamad Derraz <3028866+Abdess@users.noreply.github.com> Date: Mon, 9 Nov 2026 08:05:49 +0100 Subject: [PATCH] feat: profile linapple-pie as the linapple core RetroPie builds dabonetn/linapple-pie master under the name linapple. The linappleii 3.0 profile moves to its own key and claims no core name. --- emulators/linapple.yml | 593 +++++---------------------------------- emulators/linappleii.yml | 541 +++++++++++++++++++++++++++++++++++ 2 files changed, 615 insertions(+), 519 deletions(-) create mode 100644 emulators/linappleii.yml diff --git a/emulators/linapple.yml b/emulators/linapple.yml index fb57da131..725e4fb41 100644 --- a/emulators/linapple.yml +++ b/emulators/linapple.yml @@ -1,545 +1,100 @@ -emulator: LinApple +emulator: linapple-pie type: standalone core_classification: community_fork -source: "https://github.com/linappleii/linapple" -upstream: "https://github.com/AppleWin/AppleWin" -profiled_date: "2026-10-20" -source_commit: "7f4b60898d91bfecd6f4d8683a374f38b0564962" -upstream_commit: "9970ef6b668a7cf057ce6d82f100dde6a751f4d3" -core_version: "3.0.0" +source: "https://github.com/dabonetn/linapple-pie" +upstream: "https://sourceforge.net/projects/linapple/" +profiled_date: "2026-11-09" +source_commit: "c22ba0c3ad6c317b4f13486b7ff06a340c831122" +pin_frozen: "RetroPie, the only platform that ships it, builds the master branch (RetroPie scriptmodules/emulators/linapple.sh:16), whose tip has been this commit since 2018-10-22." +pin_build: + - platform: retropie + repo: "https://github.com/RetroPie/RetroPie-Setup" + revision: "46128cd252cdecae852a4d0bafa2aaf9d03ab563" + path: "scriptmodules/emulators/linapple.sh" + variable: rp_module_repo + value: "git https://github.com/dabonetn/linapple-pie.git master" +core_version: "2b.1" version_basis: kind: file - path: "CMakeLists.txt" - pattern: 'project\(linapple\s+VERSION\s+([0-9][\w.+-]*)' -display_name: "Apple - Apple II (LinApple)" + path: "CHANGELOG" + pattern: '^Linapple-pie v([0-9][\w.]*)' +display_name: "Apple - Apple II (linapple-pie)" cores: - - linapple + - "linapple" systems: - apple-ii mode: standalone +data_root: + linux: + path: "~/.linapple" + source_ref: "src/Applewin.cpp:816-828, 558-574" + note: "linapple.conf and Master.dsk are read from the working directory when this folder does not hold them." notes: | - SDL port of AppleWin for Linux. The SourceForge project was abandoned and - its forks were gathered under the linappleii organization - (README.md:202-209). Five frontends build from one core: sdl1, sdl2, sdl3, - tui and headless (src/frontends/). + SDL 1.2 port of LinApple 2b, itself an SDL port of AppleWin, reworked for + frontends by Mark Ormond (README.md:1-6, CHANGELOG:11-14). Disks are + mounted from the command line with -1 and -2, -r boots at once and -f + starts full screen (src/Applewin.cpp:841-869). - The ROMs the emulator runs are compiled into the binary. - scripts/generate_roms.sh turns res/roms/*.rom into EmbeddedRoms.h and - EmbeddedRoms.cpp, once at configure time and again at build time - (CMakeLists.txt:295-331), each image behind an ENABLE_ROM_* macro - (scripts/generate_roms.sh:97-117). Seventeen images go through the - generator: ten system ROMs, four character generator ROMs and the three - Disk II ROMs. The mouse card, the printer card, the Super Serial Card, the - clock card and the hard disk controller carry their firmware as arrays in - their own source files (src/apple2/peripherals/mouse/MouseRom.h:19, - src/apple2/peripherals/printer/Printer.cpp:30, - src/apple2/peripherals/super_serial_card/SuperSerialRom.h:16, - src/apple2/peripherals/clock/ClockCard.cpp:34, - src/apple2/peripherals/harddisk/Harddisk.cpp:250), and the Mockingboard - registers no ROM. + The four system ROMs are byte arrays in src/resource.h (Apple2_rom, + Apple2plus_rom, Apple2e_rom, Apple2eEnhanced_rom at lines 5, 778, 1551, + 2581), picked from the machine type (src/Memory.cpp:963-970). The file + loaders that AppleWin used are commented out (src/Memory.cpp:974-1023). + The Disk II, Super Serial Card, mouse card, parallel printer and hard disk + firmware are arrays in their own sources (src/Disk.cpp:50, + src/SerialComms.cpp:57, src/MouseInterface.cpp:41, + src/ParallelPrinter.cpp:35, src/Harddisk.cpp:113). Splash screen, font + and 40 column character set are XPM compiled in (src/Video.cpp:34-35, + src/stretch.cpp:39). No ROM is read from disk. - What a macro is set to decides whether a machine model runs at all. - CMakeLists.txt:59-126 leaves the Apple ][, ][+, J-Plus, //e and Enhanced //e - system ROMs ON, along with the Disk II firmware. The three clone options are - OFF: ENABLE_ROM_CLONE_BASE64A, ENABLE_ROM_CLONE_PRAVETS and - ENABLE_ROM_CLONE_TK3000E (CMakeLists.txt:97-99). Selecting one of those - machine types on a default build reaches mem_initialize with no rom_data, - which prints the model name and its cmake flag, destroys the context and - returns -1 (src/apple2/Memory.cpp:1168-1178). The message offers two ways - out, and the second is a file: -R, --rom loads a system ROM at - runtime (src/frontends/common/AppArgs.cpp:77,188-189). + RetroPie installs the binary with linapple.conf and Master.dsk, copies + both to configs/apple2 when the user has none, links ~/.linapple there + and starts the emulator from $romdir/apple2 with -1 and the game + (RetroPie scriptmodules/emulators/linapple.sh:35-45, 51, 56-59, 66-73). - A custom ROM takes precedence over anything embedded. load_custom_rom opens - the path as given, then through Path::find_data_file, and refuses a file - below 12288 or above 65536 bytes, which stops the start - (src/frontends/common/AppController.cpp:142-185,265-267). mem_initialize - accepts the buffer at exactly 16384 or 12288 bytes, or larger, taking the - trailing 16384 for the //e-class types and the trailing 12288 otherwise - (src/apple2/Memory.cpp:1082-1103). No hash or name is checked: the file is - whatever the user points at. - - Character generators are res/charset40*.png, converted to XPM by CMake - (CMakeLists.txt:264-293) and included at src/apple2/Video.cpp:35-39. One of - five is chosen from the machine type and the keyboard language - (src/apple2/Video.cpp:1255-1279). The status font and the splash screen are - XPM as well (src/core/Asset.cpp:15-16,57,63). The four *_Video.rom images - are compiled in, and nothing under src/ reads their symbols. - - Master.dsk is inserted into slot 6 drive 1 at startup unless the command - line names a disk or the configuration autoloads one - (src/frontends/common/AppController.cpp:210-231). asset_find_master_disk - resolves it through Path::find_data_file (src/core/Asset.cpp:25-39), which - walks the user data and config directories, the executable directory and its - res/ neighbours, the share and etc prefixes beside it, the compiled-in - SOURCE_RES_DIR, /usr/local/share/linapple, /usr/share/linapple, every - XDG_CONFIG_DIRS entry or /etc/xdg/linapple when that variable is unset, and - /etc/linapple (src/core/Util_Path.h:116-179). The same search serves - icon.bmp and a --rom path that does not open as given. - - The debugger reads its symbol tables through system_state.program_dir, - declared at src/core/LinAppleCore.h:102 and read without ever being - assigned, so the names resolve against the working directory. - file_name_symbols lists nine tables (src/Debugger/Debugger_Symbols.cpp:37-49). - CmdSymbolsLoad reads a table's default file when it receives no argument - (src/Debugger/Debugger_Symbols.cpp:644-660). Its only caller is the LOAD - parameter of the SYM commands (src/Debugger/Debugger_Symbols.cpp:823-825), - and debug_initialize loads no table (src/Debugger/Debug.cpp:29-39). - ParseSymbolTable opens the file with fopen and a missing one leaves the - debugger running without its symbols (src/Debugger/Debugger_Symbols.cpp:497). - - Peripheral cards are linked into the executable by default. Each card has - an ENABLE_PERIPHERAL_* option, ON (CMakeLists.txt:543). With - BUILD_SHARED_PERIPHERALS, OFF at CMakeLists.txt:45, each card that - add_peripheral does not force built-in builds as a shared object - (CMakeLists.txt:550-552,655,665-671), and peripheral_plugins_init opens - every *.so found in the plugin search paths in either build - (src/apple2/peripherals/Peripheral_Internal.cpp:352-437, - src/core/Util_Path.h:102-114). - - linapple.conf carries preferences only (src/core/Registry.cpp, - src/frontends/common/AppEnvironment.cpp). Each accessor returns a compiled-in - default when a key is missing. + Save states, the printer output file, FTP downloads and the FTP directory + cache are written by the emulator. Disk and hard disk images are user + content. files: - - name: Master.dsk + - name: "linapple.conf" required: false bundled: true - description: "Boot floppy inserted into slot 6 drive 1 at startup" - min_size: 143105 - max_size: 143364 - validation: [size] - size: 143360 - md5: ee44560f34033efa3bb47b3e0aac1772 - sha1: 7b03befac4fbcef8c649048fa3ff5d095fd48dd3 - source_ref: "source src/core/Asset.cpp:20, 25-39, 97-112, source src/apple2/peripherals/disk/formats/SectorDiskImage.cpp:57-60, 71-74, source CMakeLists.txt:1325-1337" + description: "Configuration file" + source_ref: "src/Applewin.cpp:816-828, src/Registry.cpp:179-233" note: > - asset_find_master_disk warns and returns false when no search path - holds the file, and the emulator starts with an empty drive. The sector - image driver also takes 143403 and 143488 bytes. No hash or content - check is performed at run time. The hashes are those of res/Master.dsk, - which a build test pins. LinApple and Batocera ship different images - under this name, both 143360 bytes. - Shipped in share/linapple/ of the v3.0-beta-3 archives and .deb, - and installed by the RetroPie linapple scriptmodule. + Opened in append mode from ~/.linapple when that file exists, otherwise + from the working directory, so a missing file is created empty. Each + key that is absent keeps its compiled-in default. Shift+F8 rewrites + the file. No size or hash check. - - name: icon.bmp + - name: "Master.dsk" + required: false + bundled: true + description: "DOS 3.3 boot floppy inserted into slot 6 drive 1 at startup" + size: 143360 + md5: ecd3af4ea2b3c6d950b9089530525adb + sha1: 11c4b65136c4abe968cf196c46b682b638f42212 + source_ref: "src/Applewin.cpp:534-576, src/Disk.cpp:496-541, src/DiskImage.cpp:741-791" + note: > + Inserted when no -1 disk is given and Slot 6 Autoload is off or -r + is given, + from ~/.linapple when the file exists there, otherwise from the + working directory. A missing file leaves the drive empty. No hash is + checked. The hashes are those of the copy in the repository, which + RetroPie installs. + + - name: "icon.bmp" required: false bundled: true not_bundled_on: [retropie] - description: "Window icon read from disk by the SDL frontends" + description: "Window icon" size: 2102 md5: be7a389c5aa678f5e6ce4748593b0a29 sha1: 5aee3a718f3d541122b61b9b8203e8a28db97a34 - source_ref: "source src/frontends/sdl2/SDL_Asset.cpp:18-41, 55-69" + source_ref: "src/Frame.cpp:1207-1212" note: > - sdl_asset_load_bmp resolves the name through Path::find_data_file, - prints a warning to stderr when no search path holds it and returns - nullptr. The sdl1, sdl2 and sdl3 frontends each load it when the window - is created. Absence costs the window its icon and nothing else. - Shipped in share/linapple/ of the v3.0-beta-3 archives. The RetroPie - scriptmodule installs Master.dsk and not this file. - - - name: APPLE2E.SYM - required: false - description: "Debugger symbol table for the main ROM" - source_ref: "source src/Debugger/Debugger_Symbols.cpp:37-49, 644-660" - note: > - Read into the Main table when SYMMAIN LOAD is entered without a file - name. Parsed as text lines of address and symbol name, with no size or - hash check. - - - name: A2_BASIC.SYM - required: false - description: "Debugger symbol table for Applesoft BASIC" - source_ref: "source src/Debugger/Debugger_Symbols.cpp:37-49, 644-660" - note: > - Read into the Basic table when SYMBASIC LOAD is entered without a file - name. Parsed as text lines of address and symbol name, with no size or - hash check. - - # System ROMs the default build leaves out. ENABLE_ROM_CLONE_BASE64A, - # ENABLE_ROM_CLONE_PRAVETS and ENABLE_ROM_CLONE_TK3000E are OFF in - # CMakeLists.txt:97-99, so these machine types refuse to start unless the - # user passes the image with --rom. The names are the ones upstream gives - # the images in res/roms. The option takes a path and checks no name. - - name: Base64A.rom - required: false - description: "Copam Base 64A clone system ROM, supplied with --rom" - min_size: 12288 - max_size: 65536 - validation: [size] - size: 49152 - md5: 352fdbcae14c6a8c0398822c7a273309 - sha1: f1c779af480b5bda2bdd03950c1201a5c5143bea - source_ref: "source CMakeLists.txt:97, CMakeLists.txt:101-105, source scripts/generate_roms.sh:107, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:104-105, 1082-1103, 1168-1178" - note: > - Larger than a system ROM: mem_initialize takes the trailing 12288 bytes - for this machine type. - - - name: PRAVETS82.ROM - required: false - description: "Pravets 82 clone system ROM, supplied with --rom" - min_size: 12288 - max_size: 65536 - validation: [size] - size: 12288 - md5: c619b7edfcf021f3b8fd20d9386676ba - sha1: 8bd7ced83e209a15e9b19a05a5ef4b8e996dc1a5 - source_ref: "source CMakeLists.txt:98, CMakeLists.txt:107-111, source scripts/generate_roms.sh:109, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:106-107, 1082-1103, 1168-1178" - - - name: PRAVETS8M.ROM - required: false - description: "Pravets 8M clone system ROM, supplied with --rom" - min_size: 12288 - max_size: 65536 - validation: [size] - size: 12288 - md5: 76c79535f7cf77973e2c711aa977a124 - sha1: f1b4ff018acf95f3355f0d575b66a188d728b687 - source_ref: "source CMakeLists.txt:98, CMakeLists.txt:107-111, source scripts/generate_roms.sh:111, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:108-109, 1082-1103, 1168-1178" - - - name: PRAVETS8C.ROM - required: false - description: "Pravets 8C clone system ROM, supplied with --rom" - min_size: 12288 - max_size: 65536 - validation: [size] - size: 16384 - md5: 1896d7b98dd940c89f7c8ea899b71006 - sha1: c976fe56e57706c161f513a82ba3e0d8cda83904 - source_ref: "source CMakeLists.txt:98, CMakeLists.txt:107-111, source scripts/generate_roms.sh:110, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:110-111, 1082-1103, 1168-1178" - note: > - A //e-class type: mem_initialize takes the trailing 16384 bytes when the - file is larger. - - - name: TK3000e.rom - required: false - description: "Microdigital TK-3000 //e clone system ROM, supplied with --rom" - min_size: 12288 - max_size: 65536 - validation: [size] - size: 16384 - md5: 8d84b614b545d4eec8799d3f325332cb - sha1: f163e5753c18ff0e812a448e8da406f102600edf - source_ref: "source CMakeLists.txt:99, CMakeLists.txt:113-117, source scripts/generate_roms.sh:112, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:112-113, 1082-1103, 1168-1178" - note: > - A //e-class type: mem_initialize takes the trailing 16384 bytes when the - file is larger. - -analysis: - embedded_roms: - mechanism: > - res/roms/*.rom compiled into EmbeddedRoms.cpp by scripts/generate_roms.sh - at configure and build time, each behind an ENABLE_ROM_* macro - source_ref: "CMakeLists.txt:59-126, CMakeLists.txt:295-331, scripts/generate_roms.sh:97-117" - extraction: "hashes computed from the res/roms images the generator reads" - - system_roms: - - symbol: rom_apple2 - machine: "Apple ][" - machine_type: A2TYPE_APPLE2 - image: res/roms/Apple2.rom - cmake_option: ENABLE_ROM_APPLE2 - default: on - source_ref: "source src/apple2/Memory.cpp:1106-1111" - size: 12288 - md5: 3c406514b9806a7c57ee65fb0b0c39b4 - sha1: 09288be705464b608ff190519ab008d3dfcd1b05 - - - symbol: rom_apple2_plus - machine: "Apple ][+" - machine_type: A2TYPE_APPLE2PLUS - image: res/roms/Apple2_Plus.rom - cmake_option: ENABLE_ROM_APPLE2PLUS - default: on - source_ref: "source src/apple2/Memory.cpp:1112-1117" - size: 12288 - md5: 572b3005a4fa49bc54917b069b82c1ab - sha1: 33a24f5489ba9195b44be77d9afb2252594cb5c7 - - - symbol: rom_apple2_jplus - machine: "Apple ][ J-Plus" - machine_type: A2TYPE_APPLE2JPLUS - image: res/roms/Apple2_JPlus.rom - cmake_option: ENABLE_ROM_APPLE2_JPLUS - default: on - source_ref: "source src/apple2/Memory.cpp:1118-1123" - size: 12288 - md5: f3e8237eca3809bec2a42b984a1332a8 - sha1: ad200b3263d08e7235d0871c8595963a07adc905 - - - symbol: rom_apple2e - machine: "Apple //e Unenhanced" - machine_type: A2TYPE_APPLE2E - image: res/roms/Apple2e.rom - cmake_option: ENABLE_ROM_APPLE2E - default: on - source_ref: "source src/apple2/Memory.cpp:1124-1129" - size: 16384 - md5: 346bc782c6a08a531c460e33bc03daf4 - sha1: 61fa9254628e5bb7236fb474006116d67684d747 - note: "First 4 KB loaded as internal Cx ROM, remaining 12 KB at $D000" - - - symbol: rom_apple2e_enhanced - machine: "Apple //e Enhanced" - machine_type: A2TYPE_APPLE2EENHANCED - image: res/roms/Apple2e_Enhanced.rom - cmake_option: ENABLE_ROM_APPLE2ENHANCED - default: on - source_ref: "source src/apple2/Memory.cpp:1130-1135" - size: 16384 - md5: 38063e08c778503fc03ecebb979769e9 - sha1: b8ea90abe135a0031065e01697c4a3a20d51198b - note: "First 4 KB loaded as internal Cx ROM, remaining 12 KB at $D000" - - - symbol: rom_clone_base64a - machine: "Base64A" - machine_type: A2TYPE_CLONE_BASE64A - image: res/roms/Base64A.rom - cmake_option: ENABLE_ROM_CLONE_BASE64A - default: off - source_ref: "src/apple2/Memory.cpp:1136-1142" - note: "Trailing 12288 bytes of the image are used" - - - symbol: rom_clone_pravets82 - machine: "Pravets 82" - machine_type: A2TYPE_CLONE_PRAVETS82 - image: res/roms/PRAVETS82.ROM - cmake_option: ENABLE_ROM_CLONE_PRAVETS - default: off - source_ref: "src/apple2/Memory.cpp:1144-1147" - - - symbol: rom_clone_pravets8m - machine: "Pravets 8M" - machine_type: A2TYPE_CLONE_PRAVETS8M - image: res/roms/PRAVETS8M.ROM - cmake_option: ENABLE_ROM_CLONE_PRAVETS - default: off - source_ref: "src/apple2/Memory.cpp:1148-1151" - - - symbol: rom_clone_pravets8c - machine: "Pravets 8C" - machine_type: A2TYPE_CLONE_PRAVETS8C - image: res/roms/PRAVETS8C.ROM - cmake_option: ENABLE_ROM_CLONE_PRAVETS - default: off - source_ref: "src/apple2/Memory.cpp:1152-1155" - - - symbol: rom_clone_tk3000e - machine: "TK3000 //e" - machine_type: A2TYPE_CLONE_TK3000E - image: res/roms/TK3000e.rom - cmake_option: ENABLE_ROM_CLONE_TK3000E - default: off - source_ref: "src/apple2/Memory.cpp:1157-1162" - - video_roms: - note: > - Compiled in under the macro of their machine. Nothing under src/ - reads the symbols. The display uses the character_generators below. - images: - - symbol: rom_apple2_video - image: res/roms/Apple2_Video.rom - cmake_option: ENABLE_ROM_APPLE2 - default: on - source_ref: "source scripts/generate_roms.sh:98" - size: 2048 - md5: 9ac0dc8c4d0002eb45b0b84be0bde5ec - sha1: f9d312f128c9557d9d6ac03bfad6c3ddf83e5659 - - symbol: rom_apple2_jplus_video - image: res/roms/Apple2_JPlus_Video.rom - cmake_option: ENABLE_ROM_APPLE2_JPLUS - default: on - source_ref: "source scripts/generate_roms.sh:101" - size: 2048 - md5: 271e2c9bf928b95e7baeff391db45495 - sha1: 0a382be58db5215c4a3de53b19a72fab660d5da2 - - symbol: rom_apple2e_enhanced_video - image: res/roms/Apple2e_Enhanced_Video.rom - cmake_option: ENABLE_ROM_APPLE2ENHANCED - default: on - source_ref: "source scripts/generate_roms.sh:104" - size: 4096 - md5: 9123fff3442c0e688cc6816be88dd4ab - sha1: b2b5d87f52693817fc747df087a4aa1ddcdb1f10 - - symbol: rom_clone_base64a_german_video - image: res/roms/Base64A_German_Video.rom - cmake_option: ENABLE_ROM_CLONE_BASE64A - default: off - source_ref: "source scripts/generate_roms.sh:108" - size: 4096 - md5: 4b45852b369e2afd864a02d0d91f70dc - sha1: 87ca8135f7526ddf829f9c2c4f7dbe4d568818fc - - peripheral_firmware: - - device: "Disk II controller, 16 sector boot ROM" - slot: 6 - symbol: rom_disk2 - image: res/roms/DISK2.rom - cmake_option: ENABLE_ROM_DISK2 - default: on - source_ref: "source CMakeLists.txt:120, CMakeLists.txt:122-126, source scripts/generate_roms.sh:115, source src/apple2/peripherals/disk/Disk.cpp:1129-1131" - size: 256 - md5: 2020aa1413ff77fe29353f3ee72dc295 - sha1: d4181c9f046aafc3fb326b381baac809d9e38d16 - - - device: "Disk II controller, P6 sequencer PROM" - slot: 6 - symbol: rom_disk2_p6 - image: res/roms/DISK2-P6.rom - cmake_option: ENABLE_ROM_DISK2 - default: on - source_ref: "source scripts/generate_roms.sh:117, source src/apple2/peripherals/disk/Disk.cpp:621-627, source CMakeLists.txt:1041-1056" - size: 256 - md5: 5f1be0c1cdff26f5956eef9643911886 - sha1: bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4 - note: > - The controller state machine reads its opcodes from this image. A - build test pins its SHA-1 and its size. Without ENABLE_ROM_DISK2 the - sequencer returns a constant and the data register never moves. - - - device: "Disk II controller, 13 sector boot ROM" - symbol: rom_disk2_13sector - image: res/roms/DISK2-13sector.rom - cmake_option: ENABLE_ROM_DISK2 - default: on - source_ref: "source scripts/generate_roms.sh:116" - size: 256 - md5: 4f80448507cf43ab40c17ac08d89e278 - sha1: afd060e6f35faf3bb0146fa889fc787adf56330a - note: "Compiled in. Nothing under src/ reads the symbol" - - - device: "Super Serial Card" - slot: 2 - symbol: super_serial_rom - image: res/roms/SSC.rom - source_ref: "source src/apple2/peripherals/super_serial_card/SuperSerialRom.h:8-16, source src/apple2/peripherals/super_serial_card/SuperSerial.cpp:356-358, source CMakeLists.txt:940-944" - size: 2048 - md5: 67c0d61ab0911183faf05270f881a97e - sha1: 6dab633470c6bc4cb3e81d09fda46597caf8ee57 - note: > - Not generated and behind no ROM option: the card carries the 2048 - bytes as an array in SuperSerialRom.h, the last page mapped at $Cn00 - and the whole image at $C800. The generator does not read - res/roms/SSC.rom. A build test pins its SHA-1 as the reference of - that transcription. - - - device: "Mouse interface card" - slot: 4 - symbol: mouse_rom - image: res/roms/MouseInterface.rom - cmake_option: ENABLE_PERIPHERAL_MOUSE - default: on - source_ref: "source src/apple2/peripherals/mouse/MouseRom.h:8-19, source src/apple2/peripherals/mouse/Mouse.cpp:261-267, source CMakeLists.txt:543, CMakeLists.txt:666, CMakeLists.txt:987-991" - size: 2048 - md5: 22563ab338024dac7b03510371d49c57 - sha1: 3a9d881a8a8d30f55b9719aceebbcf717f829d6f - note: > - Not generated and behind no ROM option: the card carries the 2048 - bytes as an array in MouseRom.h and maps one 256-byte bank at $Cn00, - chosen by PIA port B bits 1-3. ENABLE_PERIPHERAL_MOUSE builds the - card and its firmware together. The generator does not read - res/roms/MouseInterface.rom. A build test pins its SHA-1 as the - reference of that transcription. - - - device: "Parallel printer card" - slot: 1 - symbol: printer_rom - image: res/roms/Parallel.rom - source_ref: "source src/apple2/peripherals/printer/Printer.cpp:30-55, 217, source CMakeLists.txt:921-927" - size: 256 - md5: 5902996f16dc78fc013f6e1db14805b3 - sha1: c75c751589cbcc1ad4ab4f63676af7abadd86f5b - note: > - Not generated and behind no ROM option: the card carries the 256 - bytes as an array in Printer.cpp. The generator does not read - res/roms/Parallel.rom. A build test pins its SHA-1 as the reference - of that transcription. - - - device: "Clock card" - symbol: clock_rom - source_ref: "src/apple2/peripherals/clock/ClockCard.cpp:19-20, 34-45, 174-176" - note: > - A 256-byte page written in ClockCard.cpp that answers the ProDOS - ThunderClock identification and read entry points. Each card patches - its slot into the operand at $0D. No image under res/roms backs it. - - - device: "ProDOS block device controller" - symbol: harddisk_rom - source_ref: "src/apple2/peripherals/harddisk/Harddisk.cpp:73-76, 250-275, 739-742" - note: > - A 256-byte page written in Harddisk.cpp from the ProDOS 8 Technical - Reference Manual, serving two volumes. Each card patches its slot - page into the operand at $09. No image under res/roms backs it. - - character_generators: - mechanism: "PNG converted to XPM by CMake, included at src/apple2/Video.cpp:35-39" - selection: "machine type, then keyboard language (src/apple2/Video.cpp:1255-1279)" - accepted_geometry: "128x128, or 128x256 for the Euro ROMs carrying a second language" - images: - - filename: charset40.png - used_for: "Apple //e class machines, English (US)" - size: 2745 - md5: c6029ef4d4fa272083769673bdcf2b6c - sha1: d79aa8af6446c3637401cb75ffdda92fdf7f3853 - - filename: charset40_IIplus.png - used_for: "Apple ][, Apple ][+ and Apple ][ J-Plus" - size: 1956 - md5: 2104f293d5df7137fdd579ea405da847 - sha1: bc9aa5cbadfcffe82b5b20ce954555b9d07fa260 - - filename: charset40_british.png - used_for: "English (UK)" - size: 5300 - md5: aa001ec528e3c6c472d02cbb09c5b365 - sha1: ac363e069b40658f86ccd1e2d57438db732dbc84 - - filename: charset40_french.png - used_for: "French (FR)" - size: 5330 - md5: f163ec67c91501b604ca349afef93fc3 - sha1: 5b454a2e7194863df3a997cc21e7ea6d61eb61d7 - - filename: charset40_german.png - used_for: "German (DE)" - size: 5290 - md5: 4d8ab9d3f15ee19d9e62c1f163df7e48 - sha1: f86bd5238604247e04d616850f244b489daef18d - - symbol_tables: - source_ref: "src/Debugger/Debugger_Symbols.cpp:37-49" - lookup: "system_state.program_dir + filename, and system_state.program_dir is never assigned" - loaded_on_command: - - APPLE2E.SYM - - A2_BASIC.SYM - - A2_ASM.SYM - - A2_USER1.SYM - - A2_USER2.SYM - - A2_SRC1.SYM - - A2_SRC2.SYM - - A2_DOS33.SYM - - A2_PRODOS.SYM - note: > - Each table is read by the LOAD parameter of its SYM command, and no table is - loaded when the debugger starts. Only APPLE2E.SYM and A2_BASIC.SYM are - distributed with the emulator, in res/. The user slots and the remaining - tables have no shipped counterpart. - - generated_files: - written_only: - - linapple.log - - Profile.txt - - Trace.txt - - AppleWin_Text40.txt - - AppleWin_Text80.txt - - Printer.txt - - "save states" - - "FTP directory cache" - note: > - Produced by the emulator, none is user-supplied. file_name_config - names LinAppleDebugger.cfg and no open call takes it - (src/Debugger/Debugger_Cmd_Config.cpp:40). - - unused_resources: - - filename: font.bmp - reason: "shipped in res/ and named by no source file at this revision" - - filename: fixedsys-excelsior-regular.ttf - reason: "shipped in res/ and named by no source file at this revision" + Loaded with SDL_LoadBMP from the working directory. A missing file + costs the window its icon and nothing else. The hashes are those of + the copy in the repository. The RetroPie scriptmodule does not + install it. diff --git a/emulators/linappleii.yml b/emulators/linappleii.yml new file mode 100644 index 000000000..2cbc0b1a1 --- /dev/null +++ b/emulators/linappleii.yml @@ -0,0 +1,541 @@ +emulator: LinApple +type: standalone +core_classification: community_fork +source: "https://github.com/linappleii/linapple" +upstream: "https://github.com/AppleWin/AppleWin" +profiled_date: "2026-10-20" +source_commit: "7f4b60898d91bfecd6f4d8683a374f38b0564962" +upstream_commit: "9970ef6b668a7cf057ce6d82f100dde6a751f4d3" +core_version: "3.0.0" +version_basis: + kind: file + path: "CMakeLists.txt" + pattern: 'project\(linapple\s+VERSION\s+([0-9][\w.+-]*)' +display_name: "Apple - Apple II (LinApple)" +cores: [] +systems: + - apple-ii +mode: standalone + +notes: | + SDL port of AppleWin for Linux. The SourceForge project was abandoned and + its forks were gathered under the linappleii organization + (README.md:202-209). Five frontends build from one core: sdl1, sdl2, sdl3, + tui and headless (src/frontends/). + + The ROMs the emulator runs are compiled into the binary. + scripts/generate_roms.sh turns res/roms/*.rom into EmbeddedRoms.h and + EmbeddedRoms.cpp, once at configure time and again at build time + (CMakeLists.txt:295-331), each image behind an ENABLE_ROM_* macro + (scripts/generate_roms.sh:97-117). Seventeen images go through the + generator: ten system ROMs, four character generator ROMs and the three + Disk II ROMs. The mouse card, the printer card, the Super Serial Card, the + clock card and the hard disk controller carry their firmware as arrays in + their own source files (src/apple2/peripherals/mouse/MouseRom.h:19, + src/apple2/peripherals/printer/Printer.cpp:30, + src/apple2/peripherals/super_serial_card/SuperSerialRom.h:16, + src/apple2/peripherals/clock/ClockCard.cpp:34, + src/apple2/peripherals/harddisk/Harddisk.cpp:250), and the Mockingboard + registers no ROM. + + What a macro is set to decides whether a machine model runs at all. + CMakeLists.txt:59-126 leaves the Apple ][, ][+, J-Plus, //e and Enhanced //e + system ROMs ON, along with the Disk II firmware. The three clone options are + OFF: ENABLE_ROM_CLONE_BASE64A, ENABLE_ROM_CLONE_PRAVETS and + ENABLE_ROM_CLONE_TK3000E (CMakeLists.txt:97-99). Selecting one of those + machine types on a default build reaches mem_initialize with no rom_data, + which prints the model name and its cmake flag, destroys the context and + returns -1 (src/apple2/Memory.cpp:1168-1178). The message offers two ways + out, and the second is a file: -R, --rom loads a system ROM at + runtime (src/frontends/common/AppArgs.cpp:77,188-189). + + A custom ROM takes precedence over anything embedded. load_custom_rom opens + the path as given, then through Path::find_data_file, and refuses a file + below 12288 or above 65536 bytes, which stops the start + (src/frontends/common/AppController.cpp:142-185,265-267). mem_initialize + accepts the buffer at exactly 16384 or 12288 bytes, or larger, taking the + trailing 16384 for the //e-class types and the trailing 12288 otherwise + (src/apple2/Memory.cpp:1082-1103). No hash or name is checked: the file is + whatever the user points at. + + Character generators are res/charset40*.png, converted to XPM by CMake + (CMakeLists.txt:264-293) and included at src/apple2/Video.cpp:35-39. One of + five is chosen from the machine type and the keyboard language + (src/apple2/Video.cpp:1255-1279). The status font and the splash screen are + XPM as well (src/core/Asset.cpp:15-16,57,63). The four *_Video.rom images + are compiled in, and nothing under src/ reads their symbols. + + Master.dsk is inserted into slot 6 drive 1 at startup unless the command + line names a disk or the configuration autoloads one + (src/frontends/common/AppController.cpp:210-231). asset_find_master_disk + resolves it through Path::find_data_file (src/core/Asset.cpp:25-39), which + walks the user data and config directories, the executable directory and its + res/ neighbours, the share and etc prefixes beside it, the compiled-in + SOURCE_RES_DIR, /usr/local/share/linapple, /usr/share/linapple, every + XDG_CONFIG_DIRS entry or /etc/xdg/linapple when that variable is unset, and + /etc/linapple (src/core/Util_Path.h:116-179). The same search serves + icon.bmp and a --rom path that does not open as given. + + The debugger reads its symbol tables through system_state.program_dir, + declared at src/core/LinAppleCore.h:102 and read without ever being + assigned, so the names resolve against the working directory. + file_name_symbols lists nine tables (src/Debugger/Debugger_Symbols.cpp:37-49). + CmdSymbolsLoad reads a table's default file when it receives no argument + (src/Debugger/Debugger_Symbols.cpp:644-660). Its only caller is the LOAD + parameter of the SYM commands (src/Debugger/Debugger_Symbols.cpp:823-825), + and debug_initialize loads no table (src/Debugger/Debug.cpp:29-39). + ParseSymbolTable opens the file with fopen and a missing one leaves the + debugger running without its symbols (src/Debugger/Debugger_Symbols.cpp:497). + + Peripheral cards are linked into the executable by default. Each card has + an ENABLE_PERIPHERAL_* option, ON (CMakeLists.txt:543). With + BUILD_SHARED_PERIPHERALS, OFF at CMakeLists.txt:45, each card that + add_peripheral does not force built-in builds as a shared object + (CMakeLists.txt:550-552,655,665-671), and peripheral_plugins_init opens + every *.so found in the plugin search paths in either build + (src/apple2/peripherals/Peripheral_Internal.cpp:352-437, + src/core/Util_Path.h:102-114). + + linapple.conf carries preferences only (src/core/Registry.cpp, + src/frontends/common/AppEnvironment.cpp). Each accessor returns a compiled-in + default when a key is missing. + +files: + - name: Master.dsk + required: false + bundled: true + description: "Boot floppy inserted into slot 6 drive 1 at startup" + min_size: 143105 + max_size: 143364 + validation: [size] + size: 143360 + md5: ee44560f34033efa3bb47b3e0aac1772 + sha1: 7b03befac4fbcef8c649048fa3ff5d095fd48dd3 + source_ref: "source src/core/Asset.cpp:20, 25-39, 97-112, source src/apple2/peripherals/disk/formats/SectorDiskImage.cpp:57-60, 71-74, source CMakeLists.txt:1325-1337" + note: > + asset_find_master_disk warns and returns false when no search path + holds the file, and the emulator starts with an empty drive. The sector + image driver also takes 143403 and 143488 bytes. No hash or content + check is performed at run time. The hashes are those of res/Master.dsk, + which a build test pins. LinApple and Batocera ship different images + under this name, both 143360 bytes. + Shipped in share/linapple/ of the v3.0-beta-3 archives and .deb. + + - name: icon.bmp + required: false + bundled: true + description: "Window icon read from disk by the SDL frontends" + size: 2102 + md5: be7a389c5aa678f5e6ce4748593b0a29 + sha1: 5aee3a718f3d541122b61b9b8203e8a28db97a34 + source_ref: "source src/frontends/sdl2/SDL_Asset.cpp:18-41, 55-69" + note: > + sdl_asset_load_bmp resolves the name through Path::find_data_file, + prints a warning to stderr when no search path holds it and returns + nullptr. The sdl1, sdl2 and sdl3 frontends each load it when the window + is created. Absence costs the window its icon and nothing else. + Shipped in share/linapple/ of the v3.0-beta-3 archives. + + - name: APPLE2E.SYM + required: false + description: "Debugger symbol table for the main ROM" + source_ref: "source src/Debugger/Debugger_Symbols.cpp:37-49, 644-660" + note: > + Read into the Main table when SYMMAIN LOAD is entered without a file + name. Parsed as text lines of address and symbol name, with no size or + hash check. + + - name: A2_BASIC.SYM + required: false + description: "Debugger symbol table for Applesoft BASIC" + source_ref: "source src/Debugger/Debugger_Symbols.cpp:37-49, 644-660" + note: > + Read into the Basic table when SYMBASIC LOAD is entered without a file + name. Parsed as text lines of address and symbol name, with no size or + hash check. + + # System ROMs the default build leaves out. ENABLE_ROM_CLONE_BASE64A, + # ENABLE_ROM_CLONE_PRAVETS and ENABLE_ROM_CLONE_TK3000E are OFF in + # CMakeLists.txt:97-99, so these machine types refuse to start unless the + # user passes the image with --rom. The names are the ones upstream gives + # the images in res/roms. The option takes a path and checks no name. + - name: Base64A.rom + required: false + description: "Copam Base 64A clone system ROM, supplied with --rom" + min_size: 12288 + max_size: 65536 + validation: [size] + size: 49152 + md5: 352fdbcae14c6a8c0398822c7a273309 + sha1: f1c779af480b5bda2bdd03950c1201a5c5143bea + source_ref: "source CMakeLists.txt:97, CMakeLists.txt:101-105, source scripts/generate_roms.sh:107, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:104-105, 1082-1103, 1168-1178" + note: > + Larger than a system ROM: mem_initialize takes the trailing 12288 bytes + for this machine type. + + - name: PRAVETS82.ROM + required: false + description: "Pravets 82 clone system ROM, supplied with --rom" + min_size: 12288 + max_size: 65536 + validation: [size] + size: 12288 + md5: c619b7edfcf021f3b8fd20d9386676ba + sha1: 8bd7ced83e209a15e9b19a05a5ef4b8e996dc1a5 + source_ref: "source CMakeLists.txt:98, CMakeLists.txt:107-111, source scripts/generate_roms.sh:109, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:106-107, 1082-1103, 1168-1178" + + - name: PRAVETS8M.ROM + required: false + description: "Pravets 8M clone system ROM, supplied with --rom" + min_size: 12288 + max_size: 65536 + validation: [size] + size: 12288 + md5: 76c79535f7cf77973e2c711aa977a124 + sha1: f1b4ff018acf95f3355f0d575b66a188d728b687 + source_ref: "source CMakeLists.txt:98, CMakeLists.txt:107-111, source scripts/generate_roms.sh:111, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:108-109, 1082-1103, 1168-1178" + + - name: PRAVETS8C.ROM + required: false + description: "Pravets 8C clone system ROM, supplied with --rom" + min_size: 12288 + max_size: 65536 + validation: [size] + size: 16384 + md5: 1896d7b98dd940c89f7c8ea899b71006 + sha1: c976fe56e57706c161f513a82ba3e0d8cda83904 + source_ref: "source CMakeLists.txt:98, CMakeLists.txt:107-111, source scripts/generate_roms.sh:110, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:110-111, 1082-1103, 1168-1178" + note: > + A //e-class type: mem_initialize takes the trailing 16384 bytes when the + file is larger. + + - name: TK3000e.rom + required: false + description: "Microdigital TK-3000 //e clone system ROM, supplied with --rom" + min_size: 12288 + max_size: 65536 + validation: [size] + size: 16384 + md5: 8d84b614b545d4eec8799d3f325332cb + sha1: f163e5753c18ff0e812a448e8da406f102600edf + source_ref: "source CMakeLists.txt:99, CMakeLists.txt:113-117, source scripts/generate_roms.sh:112, source src/frontends/common/AppController.cpp:163-174, source src/apple2/Memory.cpp:112-113, 1082-1103, 1168-1178" + note: > + A //e-class type: mem_initialize takes the trailing 16384 bytes when the + file is larger. + +analysis: + embedded_roms: + mechanism: > + res/roms/*.rom compiled into EmbeddedRoms.cpp by scripts/generate_roms.sh + at configure and build time, each behind an ENABLE_ROM_* macro + source_ref: "CMakeLists.txt:59-126, CMakeLists.txt:295-331, scripts/generate_roms.sh:97-117" + extraction: "hashes computed from the res/roms images the generator reads" + + system_roms: + - symbol: rom_apple2 + machine: "Apple ][" + machine_type: A2TYPE_APPLE2 + image: res/roms/Apple2.rom + cmake_option: ENABLE_ROM_APPLE2 + default: on + source_ref: "source src/apple2/Memory.cpp:1106-1111" + size: 12288 + md5: 3c406514b9806a7c57ee65fb0b0c39b4 + sha1: 09288be705464b608ff190519ab008d3dfcd1b05 + + - symbol: rom_apple2_plus + machine: "Apple ][+" + machine_type: A2TYPE_APPLE2PLUS + image: res/roms/Apple2_Plus.rom + cmake_option: ENABLE_ROM_APPLE2PLUS + default: on + source_ref: "source src/apple2/Memory.cpp:1112-1117" + size: 12288 + md5: 572b3005a4fa49bc54917b069b82c1ab + sha1: 33a24f5489ba9195b44be77d9afb2252594cb5c7 + + - symbol: rom_apple2_jplus + machine: "Apple ][ J-Plus" + machine_type: A2TYPE_APPLE2JPLUS + image: res/roms/Apple2_JPlus.rom + cmake_option: ENABLE_ROM_APPLE2_JPLUS + default: on + source_ref: "source src/apple2/Memory.cpp:1118-1123" + size: 12288 + md5: f3e8237eca3809bec2a42b984a1332a8 + sha1: ad200b3263d08e7235d0871c8595963a07adc905 + + - symbol: rom_apple2e + machine: "Apple //e Unenhanced" + machine_type: A2TYPE_APPLE2E + image: res/roms/Apple2e.rom + cmake_option: ENABLE_ROM_APPLE2E + default: on + source_ref: "source src/apple2/Memory.cpp:1124-1129" + size: 16384 + md5: 346bc782c6a08a531c460e33bc03daf4 + sha1: 61fa9254628e5bb7236fb474006116d67684d747 + note: "First 4 KB loaded as internal Cx ROM, remaining 12 KB at $D000" + + - symbol: rom_apple2e_enhanced + machine: "Apple //e Enhanced" + machine_type: A2TYPE_APPLE2EENHANCED + image: res/roms/Apple2e_Enhanced.rom + cmake_option: ENABLE_ROM_APPLE2ENHANCED + default: on + source_ref: "source src/apple2/Memory.cpp:1130-1135" + size: 16384 + md5: 38063e08c778503fc03ecebb979769e9 + sha1: b8ea90abe135a0031065e01697c4a3a20d51198b + note: "First 4 KB loaded as internal Cx ROM, remaining 12 KB at $D000" + + - symbol: rom_clone_base64a + machine: "Base64A" + machine_type: A2TYPE_CLONE_BASE64A + image: res/roms/Base64A.rom + cmake_option: ENABLE_ROM_CLONE_BASE64A + default: off + source_ref: "src/apple2/Memory.cpp:1136-1142" + note: "Trailing 12288 bytes of the image are used" + + - symbol: rom_clone_pravets82 + machine: "Pravets 82" + machine_type: A2TYPE_CLONE_PRAVETS82 + image: res/roms/PRAVETS82.ROM + cmake_option: ENABLE_ROM_CLONE_PRAVETS + default: off + source_ref: "src/apple2/Memory.cpp:1144-1147" + + - symbol: rom_clone_pravets8m + machine: "Pravets 8M" + machine_type: A2TYPE_CLONE_PRAVETS8M + image: res/roms/PRAVETS8M.ROM + cmake_option: ENABLE_ROM_CLONE_PRAVETS + default: off + source_ref: "src/apple2/Memory.cpp:1148-1151" + + - symbol: rom_clone_pravets8c + machine: "Pravets 8C" + machine_type: A2TYPE_CLONE_PRAVETS8C + image: res/roms/PRAVETS8C.ROM + cmake_option: ENABLE_ROM_CLONE_PRAVETS + default: off + source_ref: "src/apple2/Memory.cpp:1152-1155" + + - symbol: rom_clone_tk3000e + machine: "TK3000 //e" + machine_type: A2TYPE_CLONE_TK3000E + image: res/roms/TK3000e.rom + cmake_option: ENABLE_ROM_CLONE_TK3000E + default: off + source_ref: "src/apple2/Memory.cpp:1157-1162" + + video_roms: + note: > + Compiled in under the macro of their machine. Nothing under src/ + reads the symbols. The display uses the character_generators below. + images: + - symbol: rom_apple2_video + image: res/roms/Apple2_Video.rom + cmake_option: ENABLE_ROM_APPLE2 + default: on + source_ref: "source scripts/generate_roms.sh:98" + size: 2048 + md5: 9ac0dc8c4d0002eb45b0b84be0bde5ec + sha1: f9d312f128c9557d9d6ac03bfad6c3ddf83e5659 + - symbol: rom_apple2_jplus_video + image: res/roms/Apple2_JPlus_Video.rom + cmake_option: ENABLE_ROM_APPLE2_JPLUS + default: on + source_ref: "source scripts/generate_roms.sh:101" + size: 2048 + md5: 271e2c9bf928b95e7baeff391db45495 + sha1: 0a382be58db5215c4a3de53b19a72fab660d5da2 + - symbol: rom_apple2e_enhanced_video + image: res/roms/Apple2e_Enhanced_Video.rom + cmake_option: ENABLE_ROM_APPLE2ENHANCED + default: on + source_ref: "source scripts/generate_roms.sh:104" + size: 4096 + md5: 9123fff3442c0e688cc6816be88dd4ab + sha1: b2b5d87f52693817fc747df087a4aa1ddcdb1f10 + - symbol: rom_clone_base64a_german_video + image: res/roms/Base64A_German_Video.rom + cmake_option: ENABLE_ROM_CLONE_BASE64A + default: off + source_ref: "source scripts/generate_roms.sh:108" + size: 4096 + md5: 4b45852b369e2afd864a02d0d91f70dc + sha1: 87ca8135f7526ddf829f9c2c4f7dbe4d568818fc + + peripheral_firmware: + - device: "Disk II controller, 16 sector boot ROM" + slot: 6 + symbol: rom_disk2 + image: res/roms/DISK2.rom + cmake_option: ENABLE_ROM_DISK2 + default: on + source_ref: "source CMakeLists.txt:120, CMakeLists.txt:122-126, source scripts/generate_roms.sh:115, source src/apple2/peripherals/disk/Disk.cpp:1129-1131" + size: 256 + md5: 2020aa1413ff77fe29353f3ee72dc295 + sha1: d4181c9f046aafc3fb326b381baac809d9e38d16 + + - device: "Disk II controller, P6 sequencer PROM" + slot: 6 + symbol: rom_disk2_p6 + image: res/roms/DISK2-P6.rom + cmake_option: ENABLE_ROM_DISK2 + default: on + source_ref: "source scripts/generate_roms.sh:117, source src/apple2/peripherals/disk/Disk.cpp:621-627, source CMakeLists.txt:1041-1056" + size: 256 + md5: 5f1be0c1cdff26f5956eef9643911886 + sha1: bc39fbd5b9a8d2287ac5d0a42e639fc4d3c2f9d4 + note: > + The controller state machine reads its opcodes from this image. A + build test pins its SHA-1 and its size. Without ENABLE_ROM_DISK2 the + sequencer returns a constant and the data register never moves. + + - device: "Disk II controller, 13 sector boot ROM" + symbol: rom_disk2_13sector + image: res/roms/DISK2-13sector.rom + cmake_option: ENABLE_ROM_DISK2 + default: on + source_ref: "source scripts/generate_roms.sh:116" + size: 256 + md5: 4f80448507cf43ab40c17ac08d89e278 + sha1: afd060e6f35faf3bb0146fa889fc787adf56330a + note: "Compiled in. Nothing under src/ reads the symbol" + + - device: "Super Serial Card" + slot: 2 + symbol: super_serial_rom + image: res/roms/SSC.rom + source_ref: "source src/apple2/peripherals/super_serial_card/SuperSerialRom.h:8-16, source src/apple2/peripherals/super_serial_card/SuperSerial.cpp:356-358, source CMakeLists.txt:940-944" + size: 2048 + md5: 67c0d61ab0911183faf05270f881a97e + sha1: 6dab633470c6bc4cb3e81d09fda46597caf8ee57 + note: > + Not generated and behind no ROM option: the card carries the 2048 + bytes as an array in SuperSerialRom.h, the last page mapped at $Cn00 + and the whole image at $C800. The generator does not read + res/roms/SSC.rom. A build test pins its SHA-1 as the reference of + that transcription. + + - device: "Mouse interface card" + slot: 4 + symbol: mouse_rom + image: res/roms/MouseInterface.rom + cmake_option: ENABLE_PERIPHERAL_MOUSE + default: on + source_ref: "source src/apple2/peripherals/mouse/MouseRom.h:8-19, source src/apple2/peripherals/mouse/Mouse.cpp:261-267, source CMakeLists.txt:543, CMakeLists.txt:666, CMakeLists.txt:987-991" + size: 2048 + md5: 22563ab338024dac7b03510371d49c57 + sha1: 3a9d881a8a8d30f55b9719aceebbcf717f829d6f + note: > + Not generated and behind no ROM option: the card carries the 2048 + bytes as an array in MouseRom.h and maps one 256-byte bank at $Cn00, + chosen by PIA port B bits 1-3. ENABLE_PERIPHERAL_MOUSE builds the + card and its firmware together. The generator does not read + res/roms/MouseInterface.rom. A build test pins its SHA-1 as the + reference of that transcription. + + - device: "Parallel printer card" + slot: 1 + symbol: printer_rom + image: res/roms/Parallel.rom + source_ref: "source src/apple2/peripherals/printer/Printer.cpp:30-55, 217, source CMakeLists.txt:921-927" + size: 256 + md5: 5902996f16dc78fc013f6e1db14805b3 + sha1: c75c751589cbcc1ad4ab4f63676af7abadd86f5b + note: > + Not generated and behind no ROM option: the card carries the 256 + bytes as an array in Printer.cpp. The generator does not read + res/roms/Parallel.rom. A build test pins its SHA-1 as the reference + of that transcription. + + - device: "Clock card" + symbol: clock_rom + source_ref: "src/apple2/peripherals/clock/ClockCard.cpp:19-20, 34-45, 174-176" + note: > + A 256-byte page written in ClockCard.cpp that answers the ProDOS + ThunderClock identification and read entry points. Each card patches + its slot into the operand at $0D. No image under res/roms backs it. + + - device: "ProDOS block device controller" + symbol: harddisk_rom + source_ref: "src/apple2/peripherals/harddisk/Harddisk.cpp:73-76, 250-275, 739-742" + note: > + A 256-byte page written in Harddisk.cpp from the ProDOS 8 Technical + Reference Manual, serving two volumes. Each card patches its slot + page into the operand at $09. No image under res/roms backs it. + + character_generators: + mechanism: "PNG converted to XPM by CMake, included at src/apple2/Video.cpp:35-39" + selection: "machine type, then keyboard language (src/apple2/Video.cpp:1255-1279)" + accepted_geometry: "128x128, or 128x256 for the Euro ROMs carrying a second language" + images: + - filename: charset40.png + used_for: "Apple //e class machines, English (US)" + size: 2745 + md5: c6029ef4d4fa272083769673bdcf2b6c + sha1: d79aa8af6446c3637401cb75ffdda92fdf7f3853 + - filename: charset40_IIplus.png + used_for: "Apple ][, Apple ][+ and Apple ][ J-Plus" + size: 1956 + md5: 2104f293d5df7137fdd579ea405da847 + sha1: bc9aa5cbadfcffe82b5b20ce954555b9d07fa260 + - filename: charset40_british.png + used_for: "English (UK)" + size: 5300 + md5: aa001ec528e3c6c472d02cbb09c5b365 + sha1: ac363e069b40658f86ccd1e2d57438db732dbc84 + - filename: charset40_french.png + used_for: "French (FR)" + size: 5330 + md5: f163ec67c91501b604ca349afef93fc3 + sha1: 5b454a2e7194863df3a997cc21e7ea6d61eb61d7 + - filename: charset40_german.png + used_for: "German (DE)" + size: 5290 + md5: 4d8ab9d3f15ee19d9e62c1f163df7e48 + sha1: f86bd5238604247e04d616850f244b489daef18d + + symbol_tables: + source_ref: "src/Debugger/Debugger_Symbols.cpp:37-49" + lookup: "system_state.program_dir + filename, and system_state.program_dir is never assigned" + loaded_on_command: + - APPLE2E.SYM + - A2_BASIC.SYM + - A2_ASM.SYM + - A2_USER1.SYM + - A2_USER2.SYM + - A2_SRC1.SYM + - A2_SRC2.SYM + - A2_DOS33.SYM + - A2_PRODOS.SYM + note: > + Each table is read by the LOAD parameter of its SYM command, and no table is + loaded when the debugger starts. Only APPLE2E.SYM and A2_BASIC.SYM are + distributed with the emulator, in res/. The user slots and the remaining + tables have no shipped counterpart. + + generated_files: + written_only: + - linapple.log + - Profile.txt + - Trace.txt + - AppleWin_Text40.txt + - AppleWin_Text80.txt + - Printer.txt + - "save states" + - "FTP directory cache" + note: > + Produced by the emulator, none is user-supplied. file_name_config + names LinAppleDebugger.cfg and no open call takes it + (src/Debugger/Debugger_Cmd_Config.cpp:40). + + unused_resources: + - filename: font.bmp + reason: "shipped in res/ and named by no source file at this revision" + - filename: fixedsys-excelsior-regular.ttf + reason: "shipped in res/ and named by no source file at this revision"