emulator: XRoar type: standalone source: "https://www.6809.org.uk/git/xroar.git" upstream: "https://www.6809.org.uk/xroar/" version_source: url: "https://www.6809.org.uk/xroar/" pattern: 'version\s*([0-9.]+), released' profiled_date: "2026-10-20" core_version: "1.12.1" display_name: "Dragon / CoCo / MC-10 (XRoar)" cores: - xroar systems: - dragon32 - dragon64 - coco - coco3 - mc10 notes: | XRoar by Ciaran Anscomb emulates Dragon 32/64, Tandy CoCo 1/2/3, MC-10, Alice, and clones (MX-1600, CP-400, Dragon 200-E, Deluxe CoCo). ROM files are searched in a configurable rompath directory with automatic extension appending (.rom, .ROM, .dgn, .DGN). Batocera sets rompath to /userdata/bios/xroar/. The romlist mechanism defines fallback filenames per ROM slot. Each machine type has a default romlist that tries filenames in priority order. CRC32 is computed for loaded ROMs and matched against known-good values for breakpoint and feature detection, but mismatches do not prevent loading. A ROM metadata table (src/rom.c) maps CRC32 and size to a description, the debugger symbol table and, for a file inserted as a cartridge, the cartridge type. It names images, it does not accept or reject them. Machine selection: Batocera maps system names to default machines via xroarGenerator.py (mc10 -> mc10, dragon64 -> dragon64, others -> coco2bus). files: # ---- Dragon 32 ---- - name: "d32.rom" system: dragon32 description: "Dragon 32 BASIC ROM" required: true size: 16384 crc32: "e3879310" validation: [crc32] aliases: [dragon32, d32rom, "Dragon Data Ltd - Dragon 32 - IC17"] source_ref: "src/xroar.c:649 (romlist d32), src/dragon/dragon32.c:40 (default @dragon32), src/dragon/dragon32.c:107,110-116,131-132 (load + CRC)" note: "Combined 16K ROM. Loaded into a single 16384-byte rombank slot." # ---- Dragon 64 ---- - name: "d64_1.rom" system: dragon64 description: "Dragon 64 32K mode BASIC ROM" required: true size: 16384 crc32: "84f68bf9" validation: [crc32] aliases: [d64rom1, d64rom1.rom, dragrom, "Dragon Data Ltd - Dragon 64 - IC17", "Dragon Data Ltd - TANO IC18", "Eurohard S.A. - Dragon 200 IC18"] source_ref: "src/xroar.c:647 (romlist d64_1), src/xroar.c:653 (romlist dragon64), src/dragon/dragon64.c:151-157,169-171 (load + CRC)" note: "IC17 ROM. Required for the machine to start." - name: "d64_2.rom" system: dragon64 description: "Dragon 64 64K mode BASIC ROM" required: false size: 16384 crc32: "17893a42" validation: [crc32] aliases: [d64rom2, "Dragon Data Ltd - Dragon 64 - IC18", "Dragon Data Ltd - TANO IC17", "Eurohard S.A. - Dragon 200 IC17"] source_ref: "src/xroar.c:648 (romlist d64_2), src/xroar.c:654 (romlist dragon64_alt), src/dragon/dragon64.c:160-166,174-176 (load + CRC)" note: "IC18 ROM. 64K mode alternate BASIC. Machine starts without it (32K mode only)." # ---- Dragon 200-E ---- - name: "d200e_1.rom" system: dragon64 description: "Dragon 200-E BASIC IC18 (Spanish)" region: [spain] required: true size: 16384 crc32: "95af0a0a" validation: [crc32] aliases: [d200e_rom1, ic18_v1.4e.ic34] source_ref: "src/xroar.c:650 (romlist d200e_1), src/xroar.c:656 (romlist dragon200e), src/xroar.c:741 (crclist)" note: "Required for Dragon 200-E. Falls back to d64_1 then generic dragon if not found." - name: "d200e_2.rom" system: dragon64 description: "Dragon 200-E BASIC IC17 (Spanish)" region: [spain] required: false size: 16384 crc32: "48b985df" aliases: [d200e_rom2, ic17_v1.4e.ic37] source_ref: "src/xroar.c:651 (romlist d200e_2), src/xroar.c:657 (romlist dragon200e_alt), src/rom.c:91 (0x48b985df = Dragon 200-E 64K BASIC)" note: "64K mode alternate. Falls back to d64_2 if not found." - name: "d200e_26.rom" system: dragon64 description: "Dragon 200-E external character generator ROM" region: [spain] required: false size: 4096 crc32: "565724bc" aliases: [rom26.ic1] source_ref: "src/xroar.c:658 (romlist dragon200e_charset), src/dragon/dragon.c:430-447 (ext_charset load), src/rom.c:92 (0x565724bc = Dragon 200-E Character Set)" note: "Spanish character set. Loaded into a 4096-byte rombank. Machine works without it (uses standard charset)." # ---- Dragon Professional (Alpha) ---- - name: "alpha-boot-v1.0.rom" system: dragon64 description: "Dragon Professional (Alpha) boot ROM v1.0" required: true size: 8192 crc32: "c3dab585" validation: [crc32] aliases: [alpha_bt_10, "Dragon Data Ltd - Dragon Alpha Boot v1.0 150584"] source_ref: "src/xroar.c:660 (romlist dragonpro_boot), src/xroar.c:747 (crclist), src/dragon/dragonpro.c:246 (BOOT bank 8192), src/dragon/dragonpro.c:251-254 (load), src/dragon/dragonpro.c:269 (0xc3dab585 = Dragon Pro BOOT 1.0)" note: >- Required for Dragon Professional machine. Loaded as extbas_rom into the BOOT bank. rombank_verify_crc accepts any member of @dragonpro_boot, which also holds 0xd6172b56 for the v0.4 slot. - name: "alpha-boot-v0.4.rom" system: dragon64 description: "Dragon Professional (Alpha) boot ROM v0.4" required: false size: 8192 crc32: "d6172b56" validation: [crc32] aliases: [alpha_bt_04] source_ref: "src/xroar.c:660 (romlist dragonpro_boot), src/xroar.c:747 (crclist), src/dragon/dragonpro.c:246 (BOOT bank 8192), src/rom.c:93 (0xd6172b56 = Dragon Professional Boot 0.4)" note: >- Fourth and fifth candidates of the dragonpro_boot romlist, tried when no v1.0 image is found. The dragonpro_boot crclist carries 0xd6172b56 next to the v1.0 value, and the ROM metadata table names it Dragon Professional Boot 0.4. - name: "alpha-basic.rom" system: dragon64 description: "Dragon Professional (Alpha) BASIC ROM" required: true size: 16384 crc32: "84f68bf9" validation: [crc32] aliases: [alpha_ba, "Dragon Data Ltd - Dragon Alpga Basic"] source_ref: "src/xroar.c:661 (romlist dragonpro_basic), src/xroar.c:748 (crclist = @d64_1), src/dragon/dragonpro.c:247 (ROM0 bank 16384), src/dragon/dragonpro.c:260-263 (load), src/dragon/dragonpro.c:274 (0x84f68bf9 = Dragon 64 32K mode BASIC)" note: "Loaded as altbas_rom into the 32K BASIC bank. Falls back to d64_1 if not found." # ---- Tandy CoCo (Colour BASIC) ---- - name: "bas13.rom" system: coco description: "Tandy CoCo Colour BASIC 1.3" required: true size: 8192 crc32: "d8f4d15e" validation: [crc32] source_ref: "src/xroar.c:663 (romlist coco), src/xroar.c:753 (crclist bas13), src/dragon/coco.c:154-160,166-168 (load + CRC)" note: "Default Colour BASIC. First tried in the @coco romlist. 8K ROM loaded into slot 1 of a 2-slot rombank." - name: "bas12.rom" system: coco description: "Tandy CoCo Colour BASIC 1.2" required: false size: 8192 crc32: "54368805" validation: [crc32] aliases: ["Color Basic v1.2 (1982)(Tandy)"] source_ref: "src/xroar.c:663 (romlist coco), src/xroar.c:752 (crclist bas12)" note: "Alternative to bas13. Second in fallback order." - name: "bas11.rom" system: coco description: "Tandy CoCo Colour BASIC 1.1" required: false size: 8192 crc32: "6270955a" validation: [crc32] source_ref: "src/xroar.c:663 (romlist coco), src/xroar.c:751 (crclist bas11)" note: "Used by CoCo 1E. Third in fallback order." - name: "bas10.rom" system: coco description: "Tandy CoCo Colour BASIC 1.0" required: false size: 8192 crc32: "00b50aaa" validation: [crc32] source_ref: "src/xroar.c:663 (romlist coco), src/xroar.c:750 (crclist bas10)" note: "Earliest version. Used by original CoCo 1. Last in fallback order." # ---- Tandy CoCo (Extended Colour BASIC) ---- - name: "extbas11.rom" system: coco description: "Tandy CoCo Extended Colour BASIC 1.1" required: true size: 8192 crc32: "a82a6254" validation: [crc32] source_ref: "src/xroar.c:664 (romlist coco_ext), src/xroar.c:758 (crclist extbas11), src/dragon/coco.c:145-151,170-171 (load + CRC)" note: "Default Extended BASIC. 8K ROM loaded into slot 0 of a 2-slot rombank." - name: "extbas10.rom" system: coco description: "Tandy CoCo Extended Colour BASIC 1.0" required: false size: 8192 crc32: "e031d076" validation: [crc32] source_ref: "src/xroar.c:664 (romlist coco_ext), src/xroar.c:757 (crclist extbas10)" note: "Earlier version. Second in fallback order." # ---- Tandy CoCo 3 ---- - name: "coco3.rom" system: coco3 description: "CoCo 3 Super Extended Colour BASIC (NTSC)" required: true size: 32768 crc32: "b4c88d6c" validation: [crc32] source_ref: "src/xroar.c:694 (romlist coco3), src/xroar.c:768 (crclist coco3), src/coco3.c:258-260,535-549 (load + CRC)" note: "32K combined ROM. Single required ROM for CoCo 3 NTSC." - name: "coco3p.rom" system: coco3 description: "CoCo 3 Super Extended Colour BASIC (PAL)" required: true size: 32768 crc32: "ff050d80" validation: [crc32] source_ref: "src/xroar.c:695 (romlist coco3p), src/xroar.c:510,519 (machine config), src/xroar.c:768 (crclist coco3), src/coco3.c:535-549, src/rom.c:119 (0xff050d80 = Super Extended Colour BASIC PAL)" note: "PAL variant of the CoCo 3 ROM. Required for PAL CoCo 3 machines." # ---- Tandy MC-10 ---- - name: "mc10.rom" system: mc10 description: "Tandy MC-10 Microcolour BASIC" required: true size: 8192 crc32: "11fda97e" validation: [crc32] source_ref: "src/xroar.c:701 (romlist mc10), src/xroar.c:773 (crclist mc10), src/mc10.c:169-171,423-434 (load + CRC)" note: "Single required ROM for MC-10." - name: "alice.rom" system: mc10 description: "Matra & Hachette Alice Microcolour BASIC" region: [france] required: true size: 8192 crc32: "f876abe9" validation: [crc32] source_ref: "src/xroar.c:703 (romlist alice), src/xroar.c:775 (crclist alice), src/mc10.c:169-171" note: "French Alice variant. Required for Alice machine. MC-10 compatible." # ---- Deluxe CoCo (prototype) ---- - name: "deluxe.rom" system: coco description: "Tandy Deluxe CoCo Advanced BASIC (bank 0)" required: true crc32: "1cce231e" validation: [crc32] aliases: [adv070_u24] source_ref: "src/xroar.c:679 (romlist deluxecoco), src/xroar.c:763 (crclist), src/dragon/deluxecoco.c:213-216 (load)" note: "Primary ROM for the Deluxe CoCo prototype. Loaded as extbas_rom." - name: "adv071_u24.rom" system: coco description: "Tandy Deluxe CoCo ROM bank 1" required: false source_ref: "src/xroar.c:681 (romlist deluxecoco1), src/dragon/deluxecoco.c:223-226 (load)" - name: "adv072_u24.rom" system: coco description: "Tandy Deluxe CoCo ROM bank 2" required: false source_ref: "src/xroar.c:682 (romlist deluxecoco2), src/dragon/deluxecoco.c:230-233 (load)" - name: "adv073-2_u24.rom" system: coco description: "Tandy Deluxe CoCo ROM bank 3" required: false aliases: [adv073_u24] source_ref: "src/xroar.c:683 (romlist deluxecoco3), src/dragon/deluxecoco.c:237-240 (load)" # ---- Dynacom MX-1600 (Brazilian clone) ---- - name: "mx1600bas.rom" system: coco description: "Dynacom MX-1600 Colour BASIC" required: true crc32: "d918156e" validation: [crc32] aliases: [mx1600bas_zephyr] source_ref: "src/xroar.c:685 (romlist mx1600), src/xroar.c:754 (crclist mx1600)" note: "Required for MX-1600. Zephyr-patched variant (CRC32 d11b1c96) is an alias." - name: "mx1600extbas.rom" system: coco description: "Dynacom MX-1600 Extended Colour BASIC" required: true crc32: "322a3d58" validation: [crc32] source_ref: "src/xroar.c:686 (romlist mx1600ext), src/xroar.c:759 (crclist mx1600ext)" # ---- Prologica CP-400 (Brazilian clone) ---- - name: "cp400bas.rom" system: coco description: "Prologica CP-400 Colour BASIC" required: true crc32: "0b2903d4" validation: [crc32] source_ref: "src/xroar.c:688 (romlist cp400), src/xroar.c:755 (crclist cp400)" - name: "cp400ext.rom" system: coco description: "Prologica CP-400 Extended Colour BASIC" required: true crc32: "114accbc" validation: [crc32] source_ref: "src/xroar.c:689 (romlist cp400ext), src/xroar.c:760 (crclist cp400ext)" # ---- DOS cartridge ROMs (all optional) ---- - name: "disk11.rom" system: coco description: "Tandy RS-DOS 1.1 (CoCo floppy disk controller)" required: false size: 8192 crc32: "0b9c5415" source_ref: "src/xroar.c:714 (romlist rsdos), src/rsdos.c:176 (default @rsdos), src/rom.c:150 (0x0b9c5415 = Disk Extended Colour BASIC 1.1)" note: "Primary CoCo disk controller ROM. disk10.rom (RS-DOS 1.0) is an earlier version used as fallback." - name: "disk10.rom" system: coco description: "Tandy RS-DOS 1.0 (CoCo floppy disk controller)" required: false size: 8192 crc32: "b4f9968e" source_ref: "src/xroar.c:714 (romlist rsdos), src/rsdos.c:176 (default @rsdos), src/rom.c:149 (0xb4f9968e = Disk Extended Colour BASIC 1.0)" note: "Second name in the rsdos romlist, opened when disk11.rom is absent." - name: "hdbdw3bck.rom" system: coco description: "RS-DOS with Becker port (DriveWire)" required: false source_ref: "src/xroar.c:724 (romlist rsdos_becker), src/xroar.c:578-580 (cart becker)" note: "For CoCo with Becker port hardware. Enables DriveWire connectivity." - name: "ddos12a.rom" system: dragon64 description: "DragonDOS 1.2a (Dragon floppy disk controller)" required: false source_ref: "src/xroar.c:708 (romlist dragondos), src/dragondos.c:173 (default @dragondos_compat)" note: "Latest DragonDOS version. Fallback chain tries DOSPlus -> SuperDOS -> DragonDOS -> Cumana. Older versions: ddos12, ddos40, ddos15, ddos10." - name: "ddos40.rom" system: dragon64 description: "DragonDOS 4.0 (Eurohard S.A.)" required: false size: 8192 crc32: "14f4c54a" source_ref: "src/xroar.c:708 (romlist dragondos), src/xroar.c:712 (romlist dragondos_compat), src/dragondos.c:173 (default @dragondos_compat), src/rom.c:134 (0x14f4c54a = DragonDOS 4.0)" note: "Third name in the dragondos romlist, which @dragondos_compat tries after the dosplus and superdos lists." - name: "ddos10.rom" system: dragon64 description: "DragonDOS 1.0 (Dragon Data Ltd)" required: false size: 8192 crc32: "b44536f6" aliases: ["Dragon Data Ltd - DragonDOS 1.0"] source_ref: "src/xroar.c:708 (romlist dragondos), src/xroar.c:712 (romlist dragondos_compat), src/dragondos.c:173 (default @dragondos_compat), src/rom.c:131 (0xb44536f6 = DragonDOS 1.0)" note: "Fifth name in the dragondos romlist, which @dragondos_compat tries after the dosplus and superdos lists." - name: "dplus49b.rom" system: dragon64 description: "DOSPlus 4.9b (Dragon compatible DOS)" required: false size: 8192 crc32: "7c6dfca8" source_ref: "src/xroar.c:709 (romlist dosplus), src/rom.c:138 (0x7c6dfca8 = DOSplus 4.9B)" note: "First tried in DragonDOS-compatible cartridge. Enhanced Dragon DOS. Older version: dplus48 (alias: dosplus-4.8, DOSPLUS)." - name: "dplus48.rom" system: dragon64 description: "DOSPlus 4.8 (Dragon compatible DOS)" required: false size: 8192 crc32: "d4d954a0" aliases: [dosplus-4.8, DOSPLUS] source_ref: "src/xroar.c:709 (romlist dosplus), src/xroar.c:712 (romlist dragondos_compat), src/dragondos.c:173 (default @dragondos_compat), src/rom.c:137 (0xd4d954a0 = DOSplus 4.8)" note: "Second name in the dosplus romlist, the first list @dragondos_compat tries." - name: "sdose6.rom" system: dragon64 description: "SuperDOS E6 (Dragon compatible DOS)" required: false size: 8192 crc32: "8c1d6c45" aliases: ["PNP - SuperDOS E6"] source_ref: "src/xroar.c:710 (romlist superdos), src/rom.c:141 (0x8c1d6c45 = SuperDOS E6)" note: "Latest SuperDOS. Older versions: sdose5, sdose4." - name: "cdos20.rom" system: dragon64 description: "Cumana DOS 2.0 (Dragon compatible DOS)" required: false aliases: [CDOS20, "CumanaDOSv2.0"] source_ref: "src/xroar.c:711 (romlist cumana)" - name: "delta2.rom" system: dragon64 description: "Delta System 2 (Premier Microsystems disk controller)" required: false size: 8192 crc32: "307fb37c" aliases: ["Premier Micros - DeltaDOS"] source_ref: "src/xroar.c:717 (romlist delta), src/deltados.c:160 (default @delta), src/rom.c:146 (0x307fb37c = Delta System 2.0)" note: "Latest Delta version. Older versions: delta1a, delta19, delta, deltados." - name: "cp450dsk.rom" system: coco description: "Prologica CP-450 DOS cartridge" required: false source_ref: "src/xroar.c:715 (romlist cp450)" note: "Falls back to RS-DOS if not found." # ---- Other cartridge ROMs (all optional) ---- - name: "orch90.rom" system: coco description: "Orchestra-90 CC sound cartridge ROM" required: false size: 8192 crc32: "15fb39af" source_ref: "src/orch90.c:122 (default rom = orch90), src/rom.c:313 (0x15fb39af = Orchestra-90/CC)" note: "Sound synthesis cartridge. Loaded directly (no romlist fallback)." - name: "mcx128.rom" system: mc10 description: "MCX128 memory expansion BASIC ROM" required: false aliases: [MCX_Basic_21] source_ref: "src/xroar.c:730 (romlist mcx128), src/mcx128.c:208 (default @mcx128)" note: "128K memory expansion for MC-10. Adds enhanced BASIC." - name: "mcx128a.rom" system: mc10 description: "MCX128 memory expansion BASIC ROM (AZERTY)" required: false aliases: [MCX_Basic_21_AZERTY] source_ref: "src/xroar.c:731 (romlist mcx128_azerty), src/xroar.c:638-639 (cart mcx128a)" note: "AZERTY keyboard variant for Alice. Same MCX128 hardware." - name: "yados.rom" system: coco description: "YADOS (Glenside IDE interface ROM)" required: false source_ref: "src/xroar.c:696 (romlist glenside_ide), src/idecart.c:208 (default @glenside_ide)" note: "IDE hard disk interface. Fallback: hdblba.rom (alternative IDE ROM)." - name: "sdbdos.rom" system: dragon64 description: "SDBDOS (MOOH memory cartridge ROM)" required: false source_ref: "src/mooh.c:259 (default rom = sdbdos)" note: "SD card boot DOS for MOOH cartridge. Loaded directly." - name: "dragonfly-2.3.rom" system: dragon64 description: "Ikon Ultra Drive Dragonfly ROM 2.3" required: false source_ref: "src/xroar.c:721 (romlist ikon), src/ikon.c:151 (default @ikon), src/ikon.c:26 (WANT_EXPERIMENTAL)" note: "Experimental, compiled only with WANT_EXPERIMENTAL. Ikon Ultra Drive storage interface. First candidate of the ikon romlist. No crclist entry names it." - name: "dragonfly-1.3.rom" system: dragon64 description: "Ikon Ultra Drive Dragonfly ROM 1.3" required: false source_ref: "src/xroar.c:721 (romlist ikon), src/ikon.c:151 (default @ikon), src/romlist.c:46-48 (extensions tried)" note: >- Experimental. Second candidate of the ikon romlist, loaded when dragonfly-2.3 is absent. romlist_find appends the extensions "", .rom, .ROM, .dgn, .DGN in that order. ikon.c loads the bank through cart_rom_init and checks nothing: no crclist entry names this ROM.