Files
libretro/emulators/ace-dl.yml
T
Abdessamad Derraz 0a9d898d90 fix: cite ACE-DL loaders from its binary
Refs were prose. Each now names the function and offsets in the
2026/10/16 Linux AceDL that builds the path, reads the file and fails.
The firmware names the SNA loader opens without the .rom suffix become
aliases, and the plugin ROMs take a minimum size.
2026-11-10 13:30:29 +01:00

331 lines
18 KiB
YAML

emulator: ACE-DL
type: standalone
core_classification: community_fork
source: "https://roudoudou.com/ACE-DL/"
upstream: "http://ace.cpcscene.net"
version_source:
url: "https://roudoudou.com/ACE-DL/"
pattern: 'New release <i>[^<]*</i> - (\d{4}/\d{2}/\d{2})'
profiled_date: "2026-11-10"
core_version: "2026/10/16"
version_basis:
kind: package
url: "https://roudoudou.com/ACE-DL/"
artifact: "BNDGEN.tar.gz (ACE-DL Linux x86-64 build), release date on the download page"
display_name: "Amstrad - CPC/Plus (ACE-DL)"
cores:
- ace-dl
- acedl
systems:
- amstrad-cpc
mode: standalone
notes: |
SDL port of ACE, the Amstrad CPC/Plus emulator written by Philippe Rimauro
(OffseT) for MorphOS. ACE-DL is built by Edouard Bergé (Roudoudou) from the
MorphOS sources and released for Windows, macOS, Linux and Raspberry Pi.
The sources are private. Every entry below was read from the stripped
Linux x86-64 executable AceDL of the 2026/10/16 BNDGEN.tar.gz (tarball
sha256 4f3567bb2196e32f, AceDL sha256 0f159a705028e80e). The binary has no
symbols, so functions are named FUN_<address> (file offset = virtual
address in this PIE).
Machines are CPC 464, 664 and 6128 plus the Plus range, which boots from a
cartridge and covers the GX-4000. An operating system is one file read by
FUN_248970 as two 16 KB halves, the firmware ROM then the BASIC ROM, each
fread having to return 0x4000 bytes. A shorter file is refused, bytes past
32 KB are ignored. ACE-DL ships them pre-joined under private/firmware/,
one file per machine and language:
OS464_UK.rom Firmware v1 + BASIC 1.00
OS464_FR.rom Firmware f1 + French BASIC 1.0 (md5 824f5213...)
OS664_UK.rom Firmware v2 + BASIC 1.10
OS6128_UK.rom Firmware v3 + BASIC 1.20
OS6128_FR.rom Firmware f3 + BASIC 1.23
OS6128_S.rom Firmware s3 + BASIC 1.21
OS6128_DK.rom Firmware d3 + BASIC 1.20
XMEM_FW_3_15_UK.rom XMEM 3.15 firmware + BASIC 1.20
XMEM_FW_3_15_FR.rom XMEM 3.15 firmware + BASIC 1.23
Firmware versions run 1 to 4 for the 464, 664, 6128 and Plus, and the letter
is the country: v English, f French, s Spanish, d Danish.
main (FUN_3a479) builds OS6128_UK.rom and Amsdos.rom from the application
directory and creates the machine with them before the config file is read.
If either load fails the machine constructor returns NULL, main prints
"Initialisation Error should not happend" and the next call dereferences
the NULL machine, so startup dies. Afterwards the OS= config key
(FUN_2a4840) loads the path it holds, the firmware requester (FUN_373ad0)
lists every *.rom under private/firmware/ and loads the pick, and -fuk,
-ffr, -fsp, -fdk (FUN_345230, applied by FUN_2989f0 after the config) load
one of the four 6128 files. These three paths keep the current firmware
when the load fails. The Machine configuration page (FUN_377790) names the
loaded firmware by comparing its basename with the nine names above.
Two older code paths switch firmware by RAM size, 64 KB for a 464 or 664,
more for a 6128, keeping the language through a strstr for "FR" in the
current path: the SNA loader (FUN_369ce0) opens ./private/firmware/OS464_FR,
OS464_UK, OS664_UK, OS6128_FR or OS6128_UK and the RAM selector
(FUN_377790) opens the same names under ./firmware/, both without
extension and relative to the working directory. When the open fails the
current firmware stays.
Plus system cartridges are loaded by the CPR loader FUN_234870, reached
from the media loader FUN_2a30a0 on a .cpr extension (command line,
CARTRIDGE= config key, dropped file). No code names the three
Amstrad_?4.cpr files.
Plugins pull three more ROMs, each from a path under the application
directory, loaded when the PLUGIN_ key is 1 in the config file (FUN_2a4840)
or from the plugin menu (FUN_375320). Multiface II and Play2CPC are also
reachable with -plugin multiface2 and -plugin play2cpc. A missing
Multiface II or Hacker ROM leaves the plugin uninstalled, a short one also
clears its PLUGIN_ flag. A missing YM2608 ROM is reported and Play2CPC runs
without the rhythm samples. The Windows x64 package omits that ROM, the
Linux packages carry it.
Expansion ROMs are user business: config keys ROM0 to ROM255 hold whatever
the user picks through the requester rooted at media/rom/, loaded by
FUN_248ae0 with the ROM type check. Disc, tape, snapshot, Dandanator and
X-MASS images are user content the same way, and the Nova plugin
regenerates its 32 KB private/Nova/nova.nvram when the file is absent.
Outside emulation the binary loads its own payload: QOI images, WAV drive
and monitor samples, and the private/messages catalog.
files:
# -- Operating systems, firmware ROM + BASIC ROM joined in one 32 KB file --
- name: OS6128_UK.rom
path: "private/firmware/OS6128_UK.rom"
aliases: [OS6128_UK]
system: amstrad-cpc
required: true
bundled: true
min_size: 32768
validation: [size]
md5: b96280dc6c95a48857b4b8eb931533ae
sha1: 5977adbad3f7c1e0e082cd02fe76a700d9860c30
source_ref: "AceDL 2026/10/16 linux-x64 FUN_3a479 0x3a893-0x3a8ac (sprintf %sprivate/firmware/OS6128_UK.rom), 0x3a8fc FUN_26caf0, FUN_249ef0 0x249fc0 FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails), 0x249fda (Error initializing ROMs!), FUN_3a479 0x3a905-0x3a93e (NULL machine), FUN_247c50 0x247c54 (NULL dereference); FUN_2989f0 0x299450 (-fuk); FUN_372cb0 0x373077-0x3730a4 (reset to 6128 UK); FUN_369ce0 0x36b7f4 and FUN_377790 0x378298 (extensionless OS6128_UK)"
note: >-
CPC 6128 English. Firmware v3 followed by BASIC 1.20. Absence stops
startup with "Error initializing ROMs!". The SNA loader and the RAM
selector also try the extensionless name.
- name: OS6128_FR.rom
path: "private/firmware/OS6128_FR.rom"
aliases: [OS6128_FR]
system: amstrad-cpc
region: [france]
required: false
bundled: true
min_size: 32768
validation: [size]
md5: 5ee871d5600eb9b5a22989c295f902a5
sha1: 200d59076dfef36db061d6d7d21d80021cab1237
source_ref: "AceDL 2026/10/16 linux-x64 FUN_345230 0x345f26-0x345f36 (-ffr sets 2), FUN_2989f0 0x298a03, 0x2993d7-0x2993ff (sprintf %sprivate/firmware/OS6128_FR.rom), 0x29946b FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails), 0x299472 (failure keeps the current firmware); FUN_373ad0 0x374ea6-0x374ed7 (requester); FUN_369ce0 0x36b2ad and FUN_377790 0x377dc5 (extensionless OS6128_FR)"
note: >-
CPC 6128 French. Firmware f3 followed by BASIC 1.23. The SNA loader and
the RAM selector also try the extensionless name.
- name: OS6128_S.rom
path: "private/firmware/OS6128_S.rom"
system: amstrad-cpc
region: [spain]
required: false
bundled: true
min_size: 32768
validation: [size]
md5: 0246740371010333385665dfeb7cd0ec
sha1: 1acd01c2c03424a78b32c9440f4d890fb1104815
source_ref: "AceDL 2026/10/16 linux-x64 FUN_345230 0x345f6b-0x345f7b (-fsp sets 3), FUN_2989f0 0x2993c1-0x2993ff (sprintf %sprivate/firmware/OS6128_S.rom), 0x29946b FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails); FUN_373ad0 0x374ea6-0x374ed7 (requester)"
note: "CPC 6128 Spanish. Firmware s3 followed by BASIC 1.21."
- name: OS6128_DK.rom
path: "private/firmware/OS6128_DK.rom"
system: amstrad-cpc
region: [denmark]
required: false
bundled: true
min_size: 32768
validation: [size]
md5: ca1635fd992e2aa7a776b30da13467e5
sha1: a9e7ee6355730f319a37c95ca0a714212b88c3b1
source_ref: "AceDL 2026/10/16 linux-x64 FUN_345230 0x345fb0-0x345fc4 (-fdk sets 4), FUN_2989f0 0x299438-0x299449, 0x2993ff (sprintf %sprivate/firmware/OS6128_DK.rom), 0x29946b FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails); FUN_373ad0 0x374ea6-0x374ed7 (requester)"
note: "CPC 6128 Danish. Firmware d3 followed by BASIC 1.20."
- name: OS464_UK.rom
path: "private/firmware/OS464_UK.rom"
aliases: [OS464_UK]
system: amstrad-cpc
required: false
bundled: true
min_size: 32768
validation: [size]
md5: a993f85b88ac4350cf4d41554e87fe4f
sha1: 56d39c463da60968d93e58b4ba0e675829412a20
source_ref: "AceDL 2026/10/16 linux-x64 FUN_373ad0 0x37407d-0x3740ad (firmware requester lists *.rom under %sprivate/firmware), 0x374ea6-0x374ed7 (sprintf %sprivate/firmware/ + pick, FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails)); FUN_2a4840 0x2a4bac-0x2a4c15 (OS= key); FUN_377790 0x3779fe (Machine configuration label); FUN_369ce0 0x36b918 and FUN_377790 0x378363 (extensionless OS464_UK)"
note: >-
CPC 464 English. Firmware v1 followed by BASIC 1.00. The SNA loader and
the RAM selector also try the extensionless name.
- name: OS464_FR.rom
path: "private/firmware/OS464_FR.rom"
aliases: [OS464_FR]
system: amstrad-cpc
required: false
bundled: true
min_size: 32768
validation: [size]
md5: a588b7c9e1c142b5d8ebec65ac7713d8
sha1: c68d84f37ab9defbb19200598c24948c97c9a644
source_ref: "AceDL 2026/10/16 linux-x64 FUN_373ad0 0x37407d-0x3740ad (firmware requester lists *.rom under %sprivate/firmware), 0x374ea6-0x374ed7 (sprintf %sprivate/firmware/ + pick, FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails)); FUN_2a4840 0x2a4bac-0x2a4c15 (OS= key); FUN_377790 0x3779e7 (Machine configuration label); FUN_369ce0 0x36b8e1 and FUN_377790 0x3782f4 (extensionless OS464_FR)"
note: >-
CPC 464 French. Firmware f1 followed by a French BASIC 1.0. The SNA
loader and the RAM selector also try the extensionless name.
- name: OS664_UK.rom
path: "private/firmware/OS664_UK.rom"
aliases: [OS664_UK]
system: amstrad-cpc
required: false
bundled: true
min_size: 32768
validation: [size]
md5: 5a384a2310f472c7857888371c00ed66
sha1: 073a7665527b5bd8a148747a3947dbd3328682c8
source_ref: "AceDL 2026/10/16 linux-x64 FUN_373ad0 0x37407d-0x3740ad (firmware requester lists *.rom under %sprivate/firmware), 0x374ea6-0x374ed7 (sprintf %sprivate/firmware/ + pick, FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails)); FUN_2a4840 0x2a4bac-0x2a4c15 (OS= key); FUN_377790 0x377a15 (Machine configuration label); FUN_369ce0 0x36b881 and FUN_377790 0x378168 (extensionless OS664_UK)"
note: >-
CPC 664 English. Firmware v2 followed by BASIC 1.10. The SNA loader and
the RAM selector also try the extensionless name.
- name: XMEM_FW_3_15_UK.rom
path: "private/firmware/XMEM_FW_3_15_UK.rom"
system: amstrad-cpc
required: false
bundled: true
min_size: 32768
validation: [size]
md5: 85accc17e98c79dbbdde826cbfaf4692
sha1: c7d7e5116665e4f21ae3b9bcdca2ce3685f00293
source_ref: "AceDL 2026/10/16 linux-x64 FUN_373ad0 0x37407d-0x3740ad (firmware requester lists *.rom under %sprivate/firmware), 0x374ea6-0x374ed7 (sprintf %sprivate/firmware/ + pick, FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails)); FUN_2a4840 0x2a4bac-0x2a4c15 (OS= key); FUN_377790 0x377a9f (Machine configuration label)"
note: "X-MEM firmware 3.15 English, followed by BASIC 1.20."
- name: XMEM_FW_3_15_FR.rom
path: "private/firmware/XMEM_FW_3_15_FR.rom"
system: amstrad-cpc
required: false
bundled: true
min_size: 32768
validation: [size]
md5: 046fa182f7574bde3ab97ee873f6e736
sha1: faa49a3aeb1d7e972437f6b77515455d14e2d680
source_ref: "AceDL 2026/10/16 linux-x64 FUN_373ad0 0x37407d-0x3740ad (firmware requester lists *.rom under %sprivate/firmware), 0x374ea6-0x374ed7 (sprintf %sprivate/firmware/ + pick, FUN_248970 (fopen rb 0x248a0f, fread 0x4000 at 0x248a2c and 0x248aa1, a short read fails)); FUN_2a4840 0x2a4bac-0x2a4c15 (OS= key); FUN_377790 0x377a88 (Machine configuration label)"
note: "X-MEM firmware 3.15 French, followed by BASIC 1.23."
# -- Disc ROM, mapped in slot 7 --
- name: Amsdos.rom
path: "private/amsdos/Amsdos.rom"
system: amstrad-cpc
required: true
bundled: true
size: 16384
md5: 25629dfe870d097469c217b95fdc1c95
sha1: 39102c8e9cb55fcc0b9b62098780ed4a3cb6a4bb
source_ref: "AceDL 2026/10/16 linux-x64 FUN_3a479 0x3a8bb-0x3a8d4 (sprintf %sprivate/amsdos/Amsdos.rom), FUN_249ef0 0x24a037 FUN_248ae0 (fopen rb 0x248b42, %s is missing. 0x248c31, 128-byte AMSDOS header skipped when its checksum matches 0x248b63-0x248b99, ROM type byte 0-3 or 0x80 else not a CPC ROM file 0x248bd2-0x248bfd, fread 0x3f80 unchecked 0x248bb7), 0x24a098 (Error loading AMSDOS ROM), 0x249fda, FUN_3a479 0x3a905-0x3a93e, FUN_247c50 0x247c54 (NULL dereference)"
note: >-
AMSDOS disc ROM. Absence prints "Error loading AMSDOS ROM" then
"Error initializing ROMs!" and stops startup. Length is not checked,
the first byte must be a ROM type 0 to 3 or 0x80.
# -- Plus system cartridges, 8 banks of 16 KB in RIFF chunks --
- name: Amstrad_v4.cpr
path: "private/firmware/Amstrad_v4.cpr"
system: amstrad-cpc
required: false
bundled: true
size: 131156
md5: 39b565e648172980aa552293e667070f
sha1: 405e341437fab8db477606238af0c20eca2e39ee
source_ref: "AceDL 2026/10/16 linux-x64 FUN_2a30a0 0x2a31ae (.cpr extension), FUN_234870 (fopen rb 0x2348b3, 12-byte RIFF header 0x234927, form AMS! or CXME 0x234937-0x23494b else Cartridge Load Error (Header) 0x2349a0, chunk loop 0x234bad with truncated file! 0x234d20, cbNN bank number 0x234eb0, 16 KB bank read 0x235010-0x235042)"
note: "464plus/6128plus/GX-4000 system cartridge, English, firmware version 4."
- name: Amstrad_f4.cpr
path: "private/firmware/Amstrad_f4.cpr"
system: amstrad-cpc
required: false
bundled: true
size: 131156
md5: e7159fd674022ba05f9b347ae3cdafc6
sha1: e5aa80c501cfb435e2cba35ad92e427240394164
source_ref: "AceDL 2026/10/16 linux-x64 FUN_2a30a0 0x2a31ae (.cpr extension), FUN_234870 (fopen rb 0x2348b3, 12-byte RIFF header 0x234927, form AMS! or CXME 0x234937-0x23494b else Cartridge Load Error (Header) 0x2349a0, chunk loop 0x234bad with truncated file! 0x234d20, cbNN bank number 0x234eb0, 16 KB bank read 0x235010-0x235042)"
note: "464plus/6128plus/GX-4000 system cartridge, French, firmware version 4."
- name: Amstrad_s4.cpr
path: "private/firmware/Amstrad_s4.cpr"
system: amstrad-cpc
required: false
bundled: true
size: 131156
md5: 6eeed3fdd4abc98a2a932da810410128
sha1: 05fb14df24b2b504a3ae463a086f02f0adcc07b9
source_ref: "AceDL 2026/10/16 linux-x64 FUN_2a30a0 0x2a31ae (.cpr extension), FUN_234870 (fopen rb 0x2348b3, 12-byte RIFF header 0x234927, form AMS! or CXME 0x234937-0x23494b else Cartridge Load Error (Header) 0x2349a0, chunk loop 0x234bad with truncated file! 0x234d20, cbNN bank number 0x234eb0, 16 KB bank read 0x235010-0x235042)"
note: "464plus/6128plus/GX-4000 system cartridge, Spanish, firmware version 4."
# -- Plugin ROMs --
- name: multiface2.rom
path: "private/multiface2/multiface2.rom"
system: amstrad-cpc
required: false
bundled: true
min_size: 8192
validation: [size]
md5: 4c9f014e91d407cc6509fad0095ab909
sha1: 1431ec628d38f000715545dd2186b684c5fe5a6f
source_ref: "AceDL 2026/10/16 linux-x64 FUN_2a4840 0x2a735b-0x2a73c3 (PLUGIN_MULTIFACE2 into 0x50c410), 0x2a767b-0x2a7685, 0x2ac38a FUN_3aa850 (sprintf %sprivate/multiface2/multiface2.rom 0x3aa87b, fopen rb 0x3aa88c, missing returns uninstalled 0x3aa894, fread 0x2000 0x3aa8ad, short read clears the flag 0x3aa8ba, hooks installed 0x3aa8e0-0x3aa955); FUN_345230 0x346086 (-plugin multiface2), FUN_2989f0 0x29934c-0x299358"
note: >-
Romantic Robot Multiface Two ROM. Without it the plugin is not
installed, a file shorter than 8 KB also clears PLUGIN_MULTIFACE2.
- name: hackit400uk.rom
path: "private/hacker/hackit400uk.rom"
system: amstrad-cpc
required: false
bundled: true
min_size: 16384
validation: [size]
md5: 9a293eaaebca601f671070ad56cb81b6
sha1: 56306e7234bcffd14b4f977d42d237c4ad9c12d5
source_ref: "AceDL 2026/10/16 linux-x64 FUN_2a4840 0x2a743d-0x2a74a5 (PLUGIN_HACKER into 0x50c40c), 0x2a74ae-0x2a7516 (PLUGIN_HACKERFR into 0x50c408), 0x2a769b-0x2a76a3, 0x2ac36c FUN_3adac0 (0x3adaf1 %sprivate/hacker/hackit400uk.rom when PLUGIN_HACKERFR=0, fopen rb 0x3adb1d, missing returns uninstalled 0x3adb28, fread 0x4000 0x3adb3e, short read clears PLUGIN_HACKER 0x3adb4b)"
note: >-
HackIt 4.00 by Siren Software, English, read when PLUGIN_HACKERFR is 0.
Without it the plugin is not installed, a file shorter than 16 KB also
clears PLUGIN_HACKER.
- name: hacker481fr.rom
path: "private/hacker/hacker481fr.rom"
system: amstrad-cpc
required: false
bundled: true
min_size: 16384
validation: [size]
md5: dfdd9924295f491d54f30569874287f8
sha1: 0c15d6753cf0ae2a1737b6e857e8e82ee135a697
source_ref: "AceDL 2026/10/16 linux-x64 FUN_2a4840 0x2a74ae-0x2a7516 (PLUGIN_HACKERFR into 0x50c408), 0x2a769b-0x2a76a3, 0x2ac36c FUN_3adac0 (0x3adafb-0x3adaff %sprivate/hacker/hacker481fr.rom when PLUGIN_HACKERFR=1, fopen rb 0x3adb1d, missing returns uninstalled 0x3adb28, fread 0x4000 0x3adb3e, short read clears PLUGIN_HACKER 0x3adb4b)"
note: >-
Le Hackeur 4.81, the French edition of the same Siren Software ROM,
read when PLUGIN_HACKERFR is 1. Without it the plugin is not
installed, a file shorter than 16 KB also clears PLUGIN_HACKER.
- name: ym2608_adpcm_rom.bin
path: "private/sounds/ym2608_adpcm_rom.bin"
system: amstrad-cpc
required: false
size: 8192
md5: 8740932cda05e518a9955f1d08d6786f
sha1: 50b6c3e288eaa12ad275d4f323267bb72b0445df
source_ref: "AceDL 2026/10/16 linux-x64 FUN_2a4840 0x2a7584-0x2a758c (PLUGIN_PLAY2CPC flag 0x50c46c), 0x2ac31a FUN_3a7820, 0x3a7849 FUN_3ae520, FUN_3ae340 (sprintf %sprivate/sounds/ym2608_adpcm_rom.bin 0x3ae3d1, fopen rb 0x3ae3f1, missing prints Warning not found 0x3ae4ed-0x3ae505 and continues, whole file read by ftell size 0x3ae402-0x3ae463); FUN_345230 0x345a29 (-plugin play2cpc)"
note: >-
YM2608 internal ADPCM rhythm ROM used by the Play2CPC cartridge sound.
Missing file prints "Warning: ym2608_adpcm_rom.bin not found!" and the
plugin keeps running. The whole file is read, its length is not
checked. Absent from the Windows x64 package.