Files
libretro/emulators/oricutron.yml
T
Abdessamad Derraz 3cb9e4e558 chore: name the projects these three cite
jaxe pointed at a libretro core-info file, lindbergh-loader at a
Batocera generator, oricutron at the ES-DE user guide. None is in the
tree each names.
2026-09-05 09:23:43 +02:00

329 lines
15 KiB
YAML

emulator: Oricutron
type: standalone
core_classification: other
source: "https://github.com/pete-gordon/oricutron"
upstream: "https://www.petergordon.org.uk/oricutron/"
profiled_date: "2026-08-08"
source_commit: "002279fce9fa756d1d63cdc40ae97939eb7de7ed"
core_version: "1.2.0"
display_name: "Tangerine - Oric (Oricutron)"
cores:
- oricutron
systems:
- oric
- oricatmos
mode: standalone
notes: |
Oric-1, Oric-1 16K, Oric Atmos, Telestrat and Pravetz 8D emulator by Peter
Gordon. Recalbox packages it for its oricatmos system, ES-DE offers it for
oric alongside MAME and starts it with the working directory set to the
emulator directory.
ROM names are configured without the extension: load_rom appends ".rom"
(machine.c:1089-1093). The defaults are set in preinit_gui (gui.c:2283-2297)
behind ROMPREFIX, which is "roms/" everywhere except AmigaOS
("PROGDIR:roms/") and the emscripten build ("assets/roms/") (system.h:38-68).
A path read from oricutron.cfg goes through read_config_path
(main.c:341-347), which prepends the program directory resolved from argv[0]
(main.c:196-236), so a relative path resolves against the directory holding
the binary rather than the working directory.
The machine ROM is loaded by init_machine for the selected machine type and
a failure returns SDL_FALSE, after which the emulator exits
(main.c:1442-1446). The four disk controller ROMs are loaded once at startup
by load_diskroms (main.c:1407, machine.c:1249-1255) whatever the machine and
the drive setting; a failure only clears the matching flag and startup
continues. Of those flags only pravetzrom_valid is read afterwards
(machine.c:1055): the Microdisc, BD-500 and Jasmin buffers are mapped into
the CPU address space whether or not the file was read, so a missing file
leaves the selected controller running on zeroed memory.
Size is the only property the code checks. A machine ROM is rejected above
16384 bytes and is loaded right-aligned in its bank, so a shorter file is
accepted (machine.c:1101-1118). A disk controller ROM is read as one
fixed-length block, which fails when the file is shorter than that length
and ignores anything past it (machine.c:1120-1126). No hash is computed
anywhere in the tree.
Telestrat banks 0 to 4 hold RAM unless the config names a file for them
(machine.c:2029-2038). The Twilighte board is off by default and is switched
on with twilighte_board in oricutron.cfg (main.c:660). Its bank config is
opened as a bare relative path (oric_twilighte_board_plugin.c:132) and the
bank filenames in it are read with read_config_string rather than
read_config_path (oric_twilighte_board_plugin.c:174,182), so both resolve
against the working directory and not the program directory.
files:
- name: basic11b.rom
description: "Oric Atmos BASIC 1.1b ROM"
required: true
max_size: 16384
validation: [size]
source_ref: "gui.c:2283 (default roms/basic11b), main.c:553 (atmosrom), machine.c:2006-2007 (MACH_ATMOS)"
note: >
Atmos is the machine oricutron.cfg selects, so this is the ROM a stock
configuration needs. Also named by twilbankrom06 in the Twilighte board
config (plugins/twilighte_board/twilighte.cfg:3).
- name: basic10.rom
description: "Oric-1 BASIC 1.0 ROM"
required: true
max_size: 16384
validation: [size]
source_ref: "gui.c:2284 (default roms/basic10), main.c:554 (oric1rom), machine.c:1932-1933 (MACH_ORIC1_16K), machine.c:1969-1970 (MACH_ORIC1)"
note: "Serves both the 48K Oric-1 and the 16K Oric-1, selected with -m oric1 or -m o16k."
- name: pravetzt.rom
description: "Pravetz 8D BASIC ROM"
required: true
max_size: 16384
validation: [size]
source_ref: "gui.c:2288 (default roms/pravetzt), main.c:558 (pravetzrom), machine.c:2082-2083 (MACH_PRAVETZ)"
note: "Selected with -m pravetz. roms/pravetzt-1.0.pch and .sym ship for an earlier revision of this ROM."
- name: teleass.rom
description: "Telestrat TELEASS ROM, bank 5"
required: true
max_size: 16384
validation: [size]
source_ref: "gui.c:2295 (default roms/teleass), main.c:588-589 (telebank5), machine.c:2029-2033 (MACH_TELESTRAT)"
- name: hyperbas.rom
description: "Telestrat HYPER BASIC ROM, bank 6"
required: true
max_size: 16384
validation: [size]
source_ref: "gui.c:2296 (default roms/hyperbas), main.c:588-589 (telebank6), machine.c:2029-2033 (MACH_TELESTRAT)"
- name: telmon24.rom
description: "Telestrat TELEMON 2.4 ROM, bank 7"
required: true
max_size: 16384
validation: [size]
source_ref: "gui.c:2297 (default roms/telmon24), main.c:588-589 (telebank7), machine.c:2029-2033 (MACH_TELESTRAT)"
note: "Bank 7 is the bank mapped at reset (machine.c:2041-2043)."
- name: microdis.rom
description: "Microdisc disk controller ROM"
required: false
min_size: 8192
validation: [size]
source_ref: "gui.c:2285 (default roms/microdis), main.c:555 (mdiscrom), machine.c:1251, machine.c:904-911 (mapped at $E000)"
note: >
Conditional: needed for the Microdisc controller, which is the drive type
a disk image falls back to when none is given (main.c:1409-1410,
1488-1489). Loaded whatever the machine and not fatal, and
setup_for_microdisc raises romdis, so an absent file leaves the $E000
overlay reading zeroes.
- name: bd500.rom
description: "ByteDrive BD-500 disk controller ROM"
required: false
min_size: 8192
validation: [size]
source_ref: "gui.c:2286 (default roms/bd500), main.c:556 (bd500rom), machine.c:1252, machine.c:937-944 (mapped at $E000)"
note: >
Conditional: needed for the BD-500 controller, selected with -k bd500 or
by autodetecting a BD-500 image (main.c:1478-1481). Same non-fatal load
and same zeroed overlay as the Microdisc ROM. The rom16 and dos70 config
keys change how ROMDIS disables the chips (oricutron.cfg:98-106).
- name: jasmin.rom
description: "Jasmin disk controller ROM"
required: false
min_size: 2048
validation: [size]
source_ref: "gui.c:2287 (default roms/jasmin), main.c:557 (jasminrom), machine.c:1253, machine.c:836-844 (mapped at $F800)"
note: >
Conditional: needed for the Jasmin controller, selected with -k jasmin or
by autodetecting a Jasmin image (main.c:1468-1471). setup_for_jasmin
leaves romdis clear, so the machine still boots from its BASIC ROM.
- name: 8dos2.rom
description: "Pravetz 8D floppy controller boot PROM"
required: false
min_size: 512
validation: [size]
source_ref: "gui.c:2289 (default roms/8dos2), main.c:559 (pravetz8drom), machine.c:1254, machine.c:1053-1058 (mapped at $320-$3FF)"
note: >
Conditional: needed for the Pravetz 8D drive. The only disk ROM whose
load flag is read back, so the Pravetz machine boots without it and only
the drive is lost. oricutron.cfg:44-45 gives roms/8dos as the other
value for this key, and roms/8dos.sym ships for it.
- name: kernel.rom
description: "Orix kernel, Twilighte board ROM bank 7"
required: false
max_size: 16384
validation: [size]
source_ref: "plugins/twilighte_board/twilighte.cfg:2 (twilbankrom07), plugins/twilighte_board/oric_twilighte_board_plugin.c:167-216 (parse and load), plugins/twilighte_board/oric_twilighte_board_plugin.c:63-115 (load_rom_twilighte)"
note: >
Loaded only when twilighte_board is on (main.c:660). A configured bank
file that cannot be read makes twilighte_oric_init return NULL.
ReadMe.txt:506-519 records the copy in the tree as Orix v2022.1 and
points at repo.orix.oric.org for later builds.
- name: shell.rom
description: "Orix shell, Twilighte board ROM bank 5"
required: false
max_size: 16384
validation: [size]
source_ref: "plugins/twilighte_board/twilighte.cfg:4 (twilbankrom05), plugins/twilighte_board/oric_twilighte_board_plugin.c:167-216 (parse and load), plugins/twilighte_board/oric_twilighte_board_plugin.c:63-115 (load_rom_twilighte)"
note: >
Loaded only when twilighte_board is on (main.c:660). ReadMe.txt:506
names kernel.rom in bank 7 and shell.rom in bank 5 as the minimum
configuration for the board to start.
analysis:
gui_images:
source_ref: "gui.c:100-117 (gimgs table), gui.c:425-492 (gimg_load), gui.c:2464-2466 (init_gui)"
lookup: "program directory + IMAGEPREFIX, which is images/ everywhere except AmigaOS and the emscripten build (system.h:38-68)"
validation: "uncompressed 24-bit BMP, one plane, at the exact width and height declared in the table"
fatal: true
note: >
init_gui returns SDL_FALSE on the first image it cannot read and the
emulator exits (main.c:1416-1420). The set ships in the source tree and
in the binary releases, and packagers install it beside the binary:
the RetroDECK recipe copies the whole images directory
(RetroDECK/components archive_later/oricutron/component_recipe.json) and
the ES-DE guide has Linux users take images and roms out of the Windows
archive (es-de USERGUIDE.md:3377-3391).
files:
- statusbar.bmp
- disk_ejected.bmp
- disk_idle.bmp
- disk_active.bmp
- disk_modified.bmp
- disk_modactive.bmp
- tape_ejected.bmp
- tape_pause.bmp
- tape_play.bmp
- tape_stop.bmp
- tape_record.bmp
- avirec.bmp
- gfx_oric1kbd.bmp
- gfx_atmoskbd.bmp
- gfx_pravetzkbd.bmp
conditional_entries:
note: >
gfx_oric1kbd.bmp sits behind WWW_NO_ORIC1 and gfx_pravetzkbd.bmp
behind WWW_NO_PRAVETZ (gui.c:112-118, gui.h:114-120), both of which
only cut down the emscripten build. A native build carries all
fifteen.
non_fatal:
- filename: winicon.bmp
source_ref: "gui.c:2306-2307"
note: "Read with SDL_LoadBMP and passed to SDL_COMPAT_WM_SetIcon, which takes a null surface."
unused:
- filename: status_bar.bmp
reason: "the gimgs table names statusbar.bmp; no code path reads this second file"
rom_sidecars:
note: >
Both sidecars are keyed on the ROM basename from the config, so renaming
or relocating a ROM moves them with it.
symbols:
pattern: "<rom basename>.sym"
source_ref: "machine.c:1129-1133 (load_rom), monitor.c:2676-2691 (mon_new_symbols)"
note: >
Read for all ten ROMs right after the ROM itself, with verbose off, so
an absent file is silent. Fills the debugger symbol tables and nothing
else. Compiled out under WWW_NO_MONITOR.
shipped:
- basic10.sym
- basic11b.sym
- pravetzt.sym
- teleass.sym
- telmon24.sym
- microdis.sym
- jasmin.sym
- bd500.sym
- 8dos2.sym
referenced_but_not_shipped:
- hyperbas.sym
patches:
pattern: "<rom basename>.pch"
source_ref: "machine.c:1726-1740 (load_patches), machine.c:1933,1970,2007,2033,2083 (call sites)"
note: >
Read for the machine ROMs only, never for the disk controller ROMs.
Carries the keyboard layout, the CLOAD/CSAVE filename decoding
addresses, the tape turbo hook addresses and any number of literal
byte patches. An absent file returns silently and leaves
pch_tt_available false (machine.c:1810-1815), so tape turbo stays off
and tapes load at real speed (tape.c:243, 1322-1462).
shipped:
- basic10.pch
- basic11b.pch
- pravetzt.pch
- telmon24.pch
referenced_but_not_shipped:
- teleass.pch
- hyperbas.pch
unconfigured_basenames:
note: >
These sidecars ship for ROM basenames no default config names. They
take effect only once a config key points at that basename, and each
one implies a ROM dump Oricutron can run.
files:
- filename: Bas122uk.pch
implies: "Oric BASIC 1.22 UK, as an atmosrom value"
- filename: Bas122fr.pch
implies: "Oric BASIC 1.22 French, as an atmosrom value"
- filename: Bas122de.pch
implies: "Oric BASIC 1.22 German, as an atmosrom value"
- filename: pravetzt-1.0.pch
implies: "Pravetz BASIC revision 1.0, as a pravetzrom value"
- filename: pravetzt-1.0.sym
implies: "Pravetz BASIC revision 1.0, as a pravetzrom value"
- filename: 8dos.sym
implies: "the earlier Pravetz 8-DOS boot PROM, offered as pravetz8drom in oricutron.cfg:44"
- filename: cumana.sym
implies: "a Cumana controller ROM; its symbols run from $F800, the window jasminrom feeds"
- filename: sedoric.sym
implies: "a Sedoric DOS ROM; its symbols name the Microdisc FDC registers at $310-$318"
unused_resources:
- filename: empty_orix.rom
reason: "no reference anywhere in the tree; not named by any config default nor by twilighte.cfg"
- filename: orixbank1.rom
reason: "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
- filename: orixbank2.rom
reason: "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
- filename: orixbank3.rom
reason: "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
- filename: orixbank4.rom
reason: "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
- filename: orixbank5.rom
reason: "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
- filename: orixbank6.rom
reason: "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
- filename: orixbank7.rom
reason: "no reference anywhere in the tree; loadable only once a twilbankromNN key names it"
user_supplied_paths:
note: "Named on the command line or in the config, with no fixed filename"
entries:
- what: "disk, tape and snapshot images"
source_ref: "main.c:1361-1504, oricutron.cfg:63-86"
- what: "debugger symbol file, -s or --symbols"
source_ref: "main.c:1533-1545"
- what: "breakpoint list, -r or --breakpoint with a leading colon"
source_ref: "main.c:1547-1574"
- what: "keyboard mapping, autoload_keyboard_mapping"
source_ref: "main.c:665 (config key), main.c:2188, keyboard.c:587-598, oricutron.cfg:220"
- what: "CH376 sdcard and usbdrive trees, telestrat mode"
source_ref: "plugins/ch376/ch376.c:1186, ReadMe.txt:512-514"
generated_files:
written_only:
- printer_out.txt
- "AVI captures"
- "snapshots"
- "tape captures"
- "debugger log and memory dumps"
note: "Produced by the emulator, none is user-supplied"