mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-11 14:03:23 -05:00
Every part of its ref names a class from the shipped app, not a file in the repository, and only the first carried the release label; the continuations were looked up in the tree. race, xendroid, zesarux and sdl2trs only needed their pin to catch up.
284 lines
14 KiB
YAML
284 lines
14 KiB
YAML
emulator: SDL2TRS
|
|
type: standalone
|
|
core_classification: community_fork
|
|
source: "https://gitlab.com/jengun/sdltrs"
|
|
upstream: "http://sdltrs.sourceforge.net"
|
|
profiled_date: "2026-08-08"
|
|
source_commit: "b008486afe41813fd2225ebb807a3e672d544f79"
|
|
core_version: "1.2.35"
|
|
display_name: "Tandy - TRS-80 (SDL2TRS)"
|
|
cores:
|
|
- sdl2trs
|
|
- sdltrs
|
|
systems:
|
|
- trs80
|
|
mode: standalone
|
|
|
|
notes: |
|
|
TRS-80 Model I, III, 4 and 4P emulator. Jens Guenther's GitLab tree continues
|
|
Mark Grebe's SDLTRS, itself an SDL port of Tim Mann's xtrs, whose licence
|
|
still ships as xtrs.LICENSE. The sdl2 branch builds the sdl2trs binary that
|
|
ES-DE and RetroDECK look for; master builds sdltrs for hosts without SDL2
|
|
(README.md:106-111). The branches diverge only in the display and paste code:
|
|
trs_cmd_rom.c and trs_memory.c are byte-identical between them.
|
|
|
|
Three ROM slots exist, one per model family, and trs_rom_init picks one from
|
|
trs_model. Model I takes romfile1, Model III and Model 4 share romfile3, and
|
|
Model 4P takes romfile4p (trs_cmd_rom.c:868-894). The defaults are level2.rom,
|
|
model3.rom and model4p.rom, each prefixed by ROM_PATH (trs_options.c:896-898).
|
|
ROM_PATH is a build define left empty unless a packager sets it
|
|
(trs_options.c:53-54, CMakeLists.txt:42), so a stock build resolves the names
|
|
against the working directory.
|
|
|
|
-rom, -r and -romfile write to the slot of the model selected at the moment
|
|
they are parsed (trs_options.c:609-619). Options are applied in command-line
|
|
order after the config file has been read (trs_options.c:1016-1036), so -m has
|
|
to come first to redirect them, and a model key in the config file otherwise
|
|
decides. -rom1, -rom3 and -rom4p address a slot directly. The GUI ROM browser
|
|
filters on .bin, .hex, .iii and .rom (trs_sdl_gui.h:63, trs_sdl_gui.c:2591-2597).
|
|
|
|
trs_load_rom sniffs the first byte. A colon means Intel hex, and load_hex
|
|
rejects the file on a line checksum mismatch. A 1 or a 5 on Model III or later
|
|
means a MODELA/III CMD file, rejected above 14 KB. Anything else is read as
|
|
raw binary with no check (trs_cmd_rom.c:720-767, 779-843), which is the path a
|
|
dump takes. No hash is computed anywhere in the tree. rom_write drops any byte
|
|
at or past MAX_ROM_SIZE, 18432 (trs_memory.c:63, 742-745), and trs_rom_size,
|
|
the extent of the plain ROM mapping, is capped at 14336 (trs_cmd_rom.c:896-898).
|
|
|
|
A failed load is not fatal. Model I and Model III/4 fall back to trs_fakerom,
|
|
which prints "You do not have a ROM image installed for Model" and spins.
|
|
Model 4P falls back to trs_rom4p, Pete Cervasio's free boot ROM, which boots
|
|
Model 4 operating systems from floppy (trs_cmd_rom.c:871-893). -stringy
|
|
overlays the built-in Exatron Stringy Floppy ROM at 0x3000 over the Model I
|
|
image (trs_cmd_rom.c:875-876), and -hdboot rewrites the loaded Model I ROM in
|
|
place to boot from a hard drive (trs_cmd_rom.c:447-610, 882-883).
|
|
|
|
The clones run off the same three slots and are recognised from the ROM data
|
|
rather than from an option (trs_clones.c:8-20, html/Features.html), so their
|
|
larger images load as a Model I or a Model III ROM. None has a filename of its
|
|
own anywhere in the tree.
|
|
|
|
files:
|
|
- name: level2.rom
|
|
description: "TRS-80 Model I ROM"
|
|
required: true
|
|
max_size: 18432
|
|
source_ref: "src/trs_options.c:81 (romfile1), src/trs_options.c:896 (default name), src/trs_cmd_rom.c:871-884 (trs_model 1)"
|
|
note: >
|
|
Model I is the model a stock configuration selects (trs_options.c:923), so
|
|
this is the slot an unconfigured run reads. Without it the machine runs the
|
|
compiled-in diagnostic stub and nothing else. max_size is the shared ROM
|
|
buffer ceiling: a longer file is truncated, never rejected, and only the
|
|
first 14336 bytes reach the plain memory map.
|
|
|
|
- name: model3.rom
|
|
description: "TRS-80 Model III and Model 4 ROM"
|
|
required: true
|
|
max_size: 18432
|
|
source_ref: "src/trs_options.c:82 (romfile3), src/trs_options.c:897 (default name), src/trs_cmd_rom.c:885-889 (trs_model 3 and 4)"
|
|
note: >
|
|
Serves Model III and Model 4 alike; the stub text spells out that Model 4
|
|
mode needs a Model 3 image (trs_cmd_rom.c:110-115). This is the one slot
|
|
that also accepts a MODELA/III CMD file, which html/index.html presents as
|
|
the substitute for a real Model III ROM. Same truncating ceiling as the
|
|
Model I slot. The image is the Model III memory map: ROM A 8041364.u104
|
|
at 0, ROM B 8040332.u105 at 0x2000 and ROM C 8040316c.u106 at 0x3000, the
|
|
layout MAME declares for the 0x3800 region.
|
|
|
|
- name: model4p.rom
|
|
description: "TRS-80 Model 4P boot ROM"
|
|
required: false
|
|
max_size: 18432
|
|
source_ref: "src/trs_options.c:83 (romfile4p), src/trs_options.c:898 (default name), src/trs_cmd_rom.c:890-893 (trs_model 5)"
|
|
note: >
|
|
Optional because the compiled-in replacement is a working boot ROM rather
|
|
than a stub. html/index.html states the free ROM boots only Model 4
|
|
operating systems, not Model III, and only from floppy, so the original
|
|
image is what restores Model III mode and hard-drive booting. Hard drive
|
|
unit 0 is tried before floppy by the Radio Shack ROM, and F2 held at boot
|
|
forces floppy (html/Features.html). The image is the 4 KB gate-array boot
|
|
ROM 8075332.u69, the only ROM the machine carries; the Model III code
|
|
comes from a boot disk.
|
|
|
|
analysis:
|
|
embedded_roms:
|
|
mechanism: "Uint8 arrays in trs_cmd_rom.c, copied into the ROM buffer by trs_load_compiled_rom (trs_cmd_rom.c:769-777)"
|
|
extraction: "hashes computed from the decoded byte literals"
|
|
|
|
entries:
|
|
- symbol: trs_fakerom
|
|
role: "Fallback for Model I and Model III/4 when the slot cannot be read"
|
|
source_ref: "src/trs_cmd_rom.c:56-116, src/trs_cmd_rom.c:873,888"
|
|
load_address: 0
|
|
size: 461
|
|
crc32: 5f85edf9
|
|
md5: de9617738e7ee6633d305777e0ce6a15
|
|
sha1: 42736ddff1944fcd4631168d35f773fc824eeb9b
|
|
note: >
|
|
Writes "You do not have a ROM image installed for Model" plus the model
|
|
digit to the screen and halts on a JR -2. It runs no TRS-80 software,
|
|
which is why both slots it covers are required.
|
|
|
|
- symbol: trs_rom4p
|
|
role: "Fallback for Model 4P"
|
|
source_ref: "src/trs_cmd_rom.c:126-193, src/trs_cmd_rom.c:892"
|
|
load_address: 0
|
|
size: 518
|
|
crc32: 57ec35ee
|
|
md5: c8551e6aa36c4bea256d3073c7255ed5
|
|
sha1: 60d4ff043525256fa3072e59ba283a3cb98399f4
|
|
note: >
|
|
Pete Cervasio's free Model 4P boot ROM version 0.06, carried under a
|
|
copy-and-modify notice in the header. Reads and runs a boot sector and
|
|
reports CRC errors, a missing boot sector and an empty drive.
|
|
utilities/xtrsrom4p.z80 is its source and xtrsrom4p.README its manual.
|
|
|
|
- symbol: trs_romesf
|
|
role: "Exatron Stringy Floppy firmware, overlaid on the Model I image"
|
|
source_ref: "src/trs_cmd_rom.c:199-441, src/trs_cmd_rom.c:875-876"
|
|
load_address: 12288
|
|
size: 1920
|
|
crc32: 99e3fdc6
|
|
md5: 235d1eb412cfc5696aad8a0a2dc6c53a
|
|
sha1: b2612037600031b5290bace247951e1f99700b36
|
|
note: >
|
|
Loaded over 0x3000-0x377F whenever -stringy is set, on top of whatever
|
|
the Model I slot supplied, and leaves trs_rom_size at 0x3780. Taken
|
|
from the ESF Advanced Programmer's Guide and held to be public domain
|
|
by the header. utilities/esfrom.z80 is its source.
|
|
|
|
extended_rom_images:
|
|
note: >
|
|
The clones and the Holmes video card need images larger than a stock ROM,
|
|
and the memory mapper reads the extra regions straight out of the same
|
|
buffer. They arrive through romfile1 or romfile3 like any other image and
|
|
are recognised from the ROM data, so the emulator defines no filename for
|
|
them and no option selects them.
|
|
source_ref: "src/trs_clones.c:8-20 (clone table), src/trs_memory.c:63 (MAX_ROM_SIZE)"
|
|
layouts:
|
|
- machine: "Prologica CP-300, CP-500 and CP-500 M80"
|
|
slot: model3.rom
|
|
image_size: 16384
|
|
source_ref: "src/trs_cp500.c:1-22, src/trs_cp500.c:153-160, src/trs_memory.c:1052-1054"
|
|
note: >
|
|
14 KB of patched Model III ROM plus a 2 KB resident monitor read back
|
|
from 0x3800-0x3FFF and banked into 0x3000-0x37FF. README.md:21 and
|
|
html/Features.html name CP-300 and CP-500 for this 16 KB image.
|
|
|
|
- machine: "Holmes VID-80 (VX-3) on Model III"
|
|
slot: model3.rom
|
|
image_size: 18432
|
|
source_ref: "src/trs_memory.c:577-586, src/trs_memory.c:1057-1080"
|
|
note: "4 KB VID-80 ROM with the Model III ROM appended behind it; this pairing is what sets MAX_ROM_SIZE."
|
|
|
|
- machine: "TCS SpeedMaster, also sold as Genie IIs"
|
|
slot: level2.rom
|
|
image_size: 16384
|
|
source_ref: "src/trs_memory.c:1025-1048"
|
|
note: "BASIC at 0x0000-0x2FFF and a ROM card read from 0x1000-0x3FFF into 0x4000-0xBFFF. Needs -speedup tcs (html/Features.html)."
|
|
|
|
- machine: "Aster CT-80"
|
|
slot: level2.rom
|
|
image_size: 14336
|
|
source_ref: "src/trs_memory.c:962-994"
|
|
note: "BASIC at 0x0000-0x2FFF plus a 2 KB boot ROM at 0x3000-0x37FF, mirrored into 0xEC00 in CP/M mode."
|
|
|
|
- machine: "EACA EG 3200 Genie III"
|
|
slot: level2.rom
|
|
image_size: 14336
|
|
source_ref: "src/trs_memory.c:909-931"
|
|
note: "Bank 1 is read through trs_rom_size, so the 14 KB cap on the plain mapping is the ceiling."
|
|
|
|
- machine: "TCS Genie IIIs"
|
|
slot: level2.rom
|
|
image_size: 12288
|
|
source_ref: "src/trs_memory.c:932-961"
|
|
note: "Reads 0x0000-0x2FFF only; the rest of the address space is banked RAM, video and the HRG window."
|
|
|
|
- machine: "LNW Research LNW80/II"
|
|
slot: level2.rom
|
|
image_size: 12288
|
|
source_ref: "src/trs_memory.c:995-1024"
|
|
note: "Reads 0x0000-0x2FFF only. -speedup lnw sets the 4 MHz clock and the low 16 KB banking."
|
|
|
|
character_generators:
|
|
source_ref: "src/trs_chars.c:12 (trs_char_data), src/trs_options.c:404-436 (charset names), src/trs_sdl_interface.c:585"
|
|
note: >
|
|
Every character set is a compiled-in bitmap table selected by -charset1,
|
|
-charset3 and -charset4. The tree holds no external font file and reads
|
|
none. The sets cover the Model I generators, the Model III and Model 4
|
|
Katakana and international sets, and the Video Genie, System 80, HT-1080Z,
|
|
Meritum and Aster CT-80 clones.
|
|
|
|
frontend_conventions:
|
|
note: >
|
|
Two frontends fix names and paths the emulator itself does not know. Both
|
|
belong to the platform layer.
|
|
entries:
|
|
- frontend: ES-DE
|
|
source_ref: "ES-DE resources/systems/linux/es_systems.xml:2211-2213, ES-DE USERGUIDE.md:3334-3362"
|
|
note: >
|
|
Passes -rom %ROMPATH%/trs-80/level2.rom on all three launch commands
|
|
and -disk0 %ROMPATH%/trs-80/boot.dsk on the DOS Diskette one, with
|
|
boot.dsk documented as a copy of a TRS-80 DOS, NewDos/80 v2.0
|
|
recommended. No command passes -m, so the slot -rom writes to follows
|
|
the config file, which is Model I unless the user changed it, and
|
|
model3.rom and model4p.rom are never named. The ES-DE user guide
|
|
records that both filenames are case sensitive.
|
|
- frontend: RetroDECK
|
|
source_ref: "RetroDECK archive_later/sdl2trs/component_manifest.json"
|
|
note: >
|
|
Declares level1.rom, level2.rom, level3.rom, level4.rom, level4p.rom
|
|
and boot.dsk under $roms_path/trs-80. Of those the emulator opens only
|
|
level2.rom by default; level3.rom, level4.rom and level4p.rom are
|
|
renames of the model3.rom and model4p.rom slots, and level1.rom is a
|
|
Level I BASIC image for the Model I slot. The manifest hashes come
|
|
from the frontend, not from the emulator, which computes none.
|
|
|
|
shipped_content:
|
|
source_ref: "CMakeLists.txt:50, CMakeLists.txt:145-146"
|
|
files:
|
|
- diskimages/utility.dsk
|
|
- diskimages/cpmutil.dsk
|
|
note: >
|
|
Installed into the shared data directory by the emulator's own packaging
|
|
and carrying the IMPORT, EXPORT, SETTIME, XTRSHARD, XTRSMOUS and CP/M
|
|
helper programs whose sources sit in utilities/. No code path names them:
|
|
they reach the machine only when a user mounts them with -disk.
|
|
|
|
user_supplied_paths:
|
|
note: "Named on the command line, in the config file or in a disk set, with no fixed filename"
|
|
entries:
|
|
- what: "floppy images in drives 0-7, JV1, JV3 and DMK"
|
|
source_ref: "src/trs_options.c:589-594, src/trs_disk.c:789-921"
|
|
- what: "hard drive images, units 0-3"
|
|
source_ref: "src/trs_options.c:595-600, src/trs_hard.c:212-220, src/trs_hard.c:528-609"
|
|
- what: "cassette images, .cas, .cpt and .wav"
|
|
source_ref: "src/trs_options.c:583-588, src/trs_cassette.c:526-553"
|
|
- what: "stringy floppy wafers in drives 0-7, .esf"
|
|
source_ref: "src/trs_options.c:601-606, src/trs_stringy.c:278-316, src/trs_stringy.c:342-346"
|
|
- what: "disk set, a plain list of the paths above"
|
|
source_ref: "src/trs_options.c:607-610, src/trs_disk.c:3765-3802"
|
|
- what: "CMD program loaded straight into memory, from a bare argument"
|
|
source_ref: "src/trs_options.c:1014-1015, src/trs_cmd_rom.c:845-866"
|
|
- what: "serial port tty, defaulting to /dev/ttyS0 on Linux"
|
|
source_ref: "src/trs_uart.c:54-56, src/trs_uart.c:144-202"
|
|
|
|
generated_files:
|
|
written_and_read_back:
|
|
- filename: ".sdltrs.t8c"
|
|
source_ref: "src/trs_options.c:939-955, src/trs_options.c:1049"
|
|
note: "Configuration, written to the home directory on first run when none is found."
|
|
- filename: "<name>.t8s"
|
|
source_ref: "src/trs_state_save.c:38-66, src/trs_state_save.c:68-113"
|
|
note: "Emulator state, written and read by the GUI or a bare command-line argument."
|
|
- filename: "blank disk, wafer and hard drive images"
|
|
source_ref: "src/trs_mkdisk.c:192-308, src/trs_stringy.c:187-197"
|
|
written_only:
|
|
- filename: "trsprn####.txt"
|
|
source_ref: "src/trs_printer.c:60-81"
|
|
note: "Printer output, numbered up to 9999 in the printer directory."
|
|
- filename: "screenshots as BMP"
|
|
source_ref: "src/trs_sdl_gui.c:2673"
|
|
note: "Produced by the emulator, none is user-supplied"
|