mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-20 18:59:07 -05:00
Profiles that read two repositories, a libretro port and its upstream, now prefix each citation with source or upstream, decided by which tree carries the cited value at its pin. The emulator pages use the word to tell libretro glue, emulator code as the port carries it, and the upstream emulator apart.
190 lines
10 KiB
YAML
190 lines
10 KiB
YAML
emulator: Hatari
|
|
type: libretro
|
|
core_classification: official_port
|
|
source: "https://github.com/libretro/hatari"
|
|
upstream: "https://github.com/hatari/hatari"
|
|
logo: "https://raw.githubusercontent.com/hatari/hatari/main/share/icons/hicolor/scalable/apps/hatari.svg"
|
|
profiled_date: "2026-09-17"
|
|
source_commit: "5831f66e05ae19435bd9d8ef1c6f9c93998ff6f4"
|
|
upstream_commit: "51ed9991101fdc4623b3b38ec16e5a170cf2dffa"
|
|
core_version: "2.6.1-devel"
|
|
display_name: "Atari - ST/STE/TT/Falcon (Hatari)"
|
|
cores:
|
|
- hatari
|
|
systems:
|
|
- atari-st
|
|
- atari-ste
|
|
- atari-tt
|
|
- atari-falcon
|
|
|
|
notes: |
|
|
The main branch of libretro/hatari is the upstream Hatari tree with its
|
|
experimental libretro target in src/retro, which upstream added in
|
|
January 2026, plus the port commits that follow the merge base recorded
|
|
as upstream_commit: VFS, disk control, core options and hard disk
|
|
loading. It builds as hatari_libretro (.gitlab-ci-libretro.yml:10-11,
|
|
src/CMakeLists.txt:371-404), reports library_name hatari and the
|
|
HATARI_VERSION string 2.6.1-devel (src/retro/main_retro.c:218-219,
|
|
src/includes/version.h:8). The .info shipped in the tree declares no
|
|
firmware (share/libretro/info/libretro-hatari.info). The
|
|
hatari_libretro.info in libretro-core-info took that file's metadata on
|
|
2026-09-16 and keeps a tos.img firmware entry with the TOS 1.02 US MD5,
|
|
which this code never checks.
|
|
|
|
retro_init builds <system>/tos.img, records whether it exists and passes
|
|
it as --tos (src/retro/main_retro.c:157-207). When it is absent a
|
|
frontend message is shown and retro_run only refreshes the framebuffer
|
|
(src/retro/main_retro.c:186-189, src/retro/main_retro.c:250-261). The
|
|
name is fixed by that check: the .rom and .tos fallbacks of File_Read
|
|
(src/tos.c:60-66, src/file.c:312-353, src/file.c:544-583) are never
|
|
reached under a frontend. A missing --tos file fails option parsing
|
|
(src/options.c:1026-1079, src/options.c:1937-1945), but Main_ErrorExit only
|
|
raises the quit flag in this build (src/retro/main_retro.c:478-490), so
|
|
Main_Init carries on with bUseTos cleared and TOS_InitImage installs the
|
|
built-in test stub of faketosData.c instead of reading a ROM
|
|
(src/tos.c:43, src/tos.c:1112-1131, src/tos.c:1151-1162). Without a
|
|
system directory Main_Init runs with no --tos, the TOS path falls back to
|
|
tos.img in the Hatari data directory derived from the executable location
|
|
(src/configuration.c:810-812, src/paths.c:305-356, CMakeLists.txt:422-434)
|
|
and have_bios is never set. TOS_LoadImage strips the 256-byte (34-byte
|
|
for 4.92) loader of a RAM TOS, detects EmuTOS by ETOS at offset 0x2c,
|
|
refuses images below 0x40 bytes, above 1 MB, with a version outside
|
|
0x100-0x6FF or a load address other than 0xE00000 or 0xFC0000, and
|
|
coerces machine type and CPU to the TOS version unless the image is a
|
|
512 KB or larger EmuTOS (src/tos.c:976-1097, src/tos.c:838-969). ROM
|
|
patches apply when the hatari_patch_tos option is on and the image is
|
|
not EmuTOS (src/retro/options.c:250-263, src/retro/options.c:784,
|
|
src/tos.c:1220-1222). No TOS is embedded. Because nSymbolsAutoLoad
|
|
defaults to SYM_AUTOLOAD_DEBUGGER (src/configuration.c:621,
|
|
src/includes/configuration.h:29-31), every TOS load also reads a
|
|
<tos>.sym symbol table when one exists (src/tos.c:1094,
|
|
src/debug/symbols.c:1095-1113, src/debug/symbols.c:1002-1020,
|
|
src/debug/symbols.c:372-407).
|
|
|
|
The Hatari home directory is the RetroArch save directory
|
|
(src/paths.c:236-250). Configuration is read from <CONFDIR>/hatari.cfg,
|
|
/etc on Unix and the current directory on Windows, then from hatari.cfg
|
|
in that home directory, before the --tos argument is applied
|
|
(src/main.c:260-282, src/main.c:319-322, src/configuration.c:862-867,
|
|
src/configuration.c:1061-1071, CMakeLists.txt:444-461). The boot core
|
|
options are applied right after the command line, so the machine, DSP,
|
|
CPU, FPU, memory and hatari_patch_tos keys of hatari.cfg are overwritten
|
|
by them (src/main.c:328-330, src/retro/options.c:724-789). Every other
|
|
section is honoured: the cartridge image (src/configuration.c:487-493),
|
|
floppy images, GEMDOS directories and ACSI, SCSI and IDE images
|
|
(src/configuration.c:362-364, src/configuration.c:375-483), MIDI, printer,
|
|
RS232 and SCC host endpoints (src/configuration.c:509-543), all disabled
|
|
by default (src/configuration.c:736-761) and opened by Midi_Host_Open,
|
|
Printer_TransferByteTo, RS232_OpenCOMPort and SCC_Init_Channel when
|
|
enabled (src/midi.c:342-367, src/printer.c:42-65, src/printer.c:89-106,
|
|
src/rs232.c:175-246, src/scc.c:439-500). szMappingFileName is parsed
|
|
(src/configuration.c:256) but the port's Keymap_LoadRemapFile is empty
|
|
(src/retro/keymap.c:222-224). Only the SDL build reads a keymap file
|
|
(src/sdl/keymap.c:701). The autosave snapshot is restored by
|
|
M68000_Start (src/m68000.c:332-348), which the port never calls. TT and
|
|
Falcon NVRAM is hatari.nvram in the home directory, read at NvRam_Init
|
|
and written at exit (src/falcon/nvram.c:282-294,
|
|
src/falcon/nvram.c:334-337).
|
|
|
|
Content is a floppy image, an .m3u list parsed relative to its own
|
|
directory (src/retro/disk_control.c:94-182), an .ide image put on the
|
|
IDE master, a .vhd image put on ACSI 0 or a .gem marker naming a GEMDOS
|
|
directory (src/retro/main_retro.c:369-427, src/retro/harddisk.c:32-129).
|
|
With a .gem, <system>/hatari/BOOT.ST is inserted into drive A when it
|
|
exists (src/retro/harddisk.c:105-127). A disk whose name ends in A pulls
|
|
the sibling ending in B into drive B (src/floppy.c:300-343,
|
|
src/floppy.c:385-388), and an STX image reads its .wd1772 overlay from
|
|
the same directory (src/floppies/stx.c:807-827). Savestates pass through
|
|
hatari_savestate.tmp in the system directory
|
|
(src/retro/main_retro.c:41, src/retro/main_retro.c:292-359). IPF support
|
|
is compiled in from rsn8887/capsimg when ENABLE_STATIC_CAPSIMAGE is on
|
|
(cmake/BuildDependencies.cmake:93-126). The Windows jobs build with it
|
|
since September 2026 (.gitlab-ci-libretro.yml:101,
|
|
.gitlab-ci-libretro.yml:109) and the static Vita, Wii, Wii U and Switch
|
|
jobs turn it off (.gitlab-ci-libretro.yml:193, .gitlab-ci-libretro.yml:202,
|
|
.gitlab-ci-libretro.yml:210, .gitlab-ci-libretro.yml:218).
|
|
File access goes through the libretro VFS when the frontend provides it
|
|
(src/retro/vfs.c:17-48, src/file.c:253-302, src/file.c:479-492), and a
|
|
device-prefixed path such as ux0:/ counts as absolute (src/file.c:152-164).
|
|
|
|
files:
|
|
- name: "tos.img"
|
|
path: "tos.img"
|
|
description: "Atari TOS ROM image"
|
|
required: true
|
|
min_size: 64
|
|
max_size: 1048576
|
|
validation: [size]
|
|
source_ref: "source src/retro/main_retro.c:157-207, source src/retro/main_retro.c:250-261, source src/options.c:1937-1945, source src/tos.c:60-66, source src/tos.c:976-1097, source src/tos.c:838-969, source src/file.c:312-353"
|
|
note: >
|
|
Any TOS 1.00 to 4.04, TOS 0.00, a RAM TOS or EmuTOS. The file must
|
|
carry this exact name: retro_init only enables emulation when
|
|
<system>/tos.img exists.
|
|
|
|
- name: "tos.sym"
|
|
path: "tos.sym"
|
|
description: "Symbol table for the TOS image, nm-style text or a program symbol table"
|
|
required: false
|
|
storage: user_provided
|
|
unsourceable: "one table per TOS build, valid only beside the image it was linked with: each EmuTOS release archive carries the table of its ROM, etos512k.sym beside etos512k.img, and Atari TOS has none"
|
|
source_ref: "source src/tos.c:1094, source src/debug/symbols.c:1095-1113, source src/debug/symbols.c:1002-1020, source src/debug/symbols.c:372-407, source src/configuration.c:621, source src/includes/configuration.h:29-31, source src/retro/main_retro.c:182-194"
|
|
note: >
|
|
The name is the TOS image path with its last three characters
|
|
replaced by sym, and the image path is always tos.img here: retro_init
|
|
passes <system>/tos.img as --tos and no other image name reaches the
|
|
loader, so a table named after another image, emutos.sym beside
|
|
emutos.img, is never opened. nSymbolsAutoLoad gates the read. Its
|
|
default is not off and no core option changes it, so the table is read
|
|
at every TOS load when present. The symbols serve the built-in
|
|
debugger.
|
|
|
|
- name: "cartridge ROM"
|
|
path: null
|
|
config_key: "szCartridgeImageFileName"
|
|
description: "Atari ST cartridge image loaded at 0xFA0000"
|
|
required: false
|
|
min_size: 40
|
|
max_size: 131076
|
|
validation: [size]
|
|
source_ref: "source src/cart.c:41-47, source src/cart.c:53-88, source src/cart.c:97-104, source src/cart.c:114-142, source src/configuration.c:487-493, source src/configuration.c:814"
|
|
note: >
|
|
Set through hatari.cfg. Raw images up to 0x20000 bytes or .stc
|
|
images of exactly 0x20004 bytes whose 4-byte header is skipped.
|
|
Extensions .img, .rom and .stc are tried when the configured path is
|
|
missing. Replaced by the built-in GEMDOS trampoline whenever GEMDOS
|
|
hard disk emulation, extended VDI, program autostart or OS tracing
|
|
is on.
|
|
|
|
- name: "BOOT.ST"
|
|
path: "hatari/BOOT.ST"
|
|
description: "Boot floppy inserted with GEMDOS hard disk folders"
|
|
required: false
|
|
source_ref: "source src/retro/harddisk.c:78-129, source src/retro/main_retro.c:391-395"
|
|
note: "Inserted into drive A when the content is a .gem file."
|
|
|
|
- name: "hatari.cfg"
|
|
path: null
|
|
description: "Hatari configuration file"
|
|
required: false
|
|
storage: user_provided
|
|
unsourceable: "user settings in Hatari's INI format, with no canonical contents"
|
|
source_ref: "upstream src/main.c:260-282, source src/main.c:319-322, source src/main.c:328-330, source src/configuration.c:862-867, source src/configuration.c:1061-1071, upstream src/paths.c:236-250, source CMakeLists.txt:444-461"
|
|
note: >
|
|
Read from <CONFDIR>/hatari.cfg and then from hatari.cfg in the
|
|
RetroArch save directory, before the --tos argument and the boot
|
|
core options are applied.
|
|
|
|
- name: "hatari.nvram"
|
|
path: null
|
|
description: "TT and Falcon NVRAM contents, 50 bytes"
|
|
required: false
|
|
has_builtin: true
|
|
min_size: 50
|
|
validation: [size]
|
|
storage: user_provided
|
|
unsourceable: "machine state the emulator writes itself at exit, with no canonical contents"
|
|
source_ref: "source src/falcon/nvram.c:96-97, source src/falcon/nvram.c:116-141, source src/falcon/nvram.c:148-171, source src/falcon/nvram.c:282-294, source src/falcon/nvram.c:334-337, upstream src/paths.c:236-250, source src/main.c:208"
|
|
note: >
|
|
Read from the RetroArch save directory at NvRam_Init. A short read
|
|
keeps the built-in defaults. Saved back on exit.
|