Files
libretro/emulators/cap32.yml
2026-03-27 12:00:27 +01:00

121 lines
4.3 KiB
YAML

emulator: Caprice32
type: standalone + libretro
core_classification: community_fork
source: "https://github.com/libretro/libretro-cap32"
upstream: "https://github.com/ColinPitrat/caprice32"
profiled_date: "2026-03-23"
core_version: "v4.2.0"
display_name: "Amstrad - CPC/GX4000 (Caprice32)"
cores:
- cap32
- caprice32
systems:
- amstrad-cpc
notes: |
Caprice32 is an Amstrad CPC emulator ported to libretro. Supports CPC 464,
CPC 664, CPC 6128, and CPC+ (Plus) models.
All system ROMs are compiled directly into the core binary as C header
arrays in cap32/rom/*.h. No external BIOS files are required.
Embedded ROMs (cap32/cap32.c:342-345):
- cap32/rom/464.h: OS_BASIC10[32768] - CPC 464 OS + BASIC 1.0
- cap32/rom/6128.h: OS_BASIC11[32768] - CPC 6128 OS + BASIC 1.1
- cap32/rom/amsdos.h: AMSDOS[16384] - AMSDOS disk controller ROM
- cap32/rom/6128p.h: OS_6128P - CPC+ system cartridge ROM
- cap32/rom/cpm.h: cpmROM - CP/M boot snapshot (128KB)
ROM selection in emulator_select_ROM() (cap32/cap32.c:1072-1100):
- CPC 464: OS_BASIC10 (32KB)
- CPC 664: OS_BASIC10 (32KB) + AMSDOS in slot 7
- CPC 6128: OS_BASIC11 (32KB) + AMSDOS in slot 7
- CPC+: OS_6128P loaded as system cartridge via cpr_load()
The standalone (non-libretro) version references external filenames
cpc464.rom, cpc664.rom, cpc6128.rom, amsdos.rom in cap32.c:349-352
via config file loading (cap32.c:1828-1840), but the libretro port
does not use this path. The libretro init (libretro-core.c:1512) has
a "TODO: future use to load custom bios" comment that is not
implemented.
Keyboard layout patches are applied to the ROM in memory for French
and Spanish layouts via rom_mods.h (cap32.c:1102-1126).
CP/M support loads a pre-built snapshot (cpm.h) into memory via
snapshot_load_mem() in slots.c:87.
files:
# Standalone loads from rom_path/ — libretro embeds all as C arrays
# ref: ColinPitrat/caprice32/src/cap32.cpp:1006-1007,1159-1171
- name: cpc464.rom
system: amstrad-cpc
required: true
mode: standalone
size: 32768
note: "CPC 464 OS + BASIC 1.0"
source_ref: "caprice32/src/cap32.cpp:1006, rom/cpc464.rom"
- name: cpc664.rom
system: amstrad-cpc
required: false
mode: standalone
size: 32768
note: "CPC 664 OS + BASIC 1.0"
source_ref: "caprice32/rom/cpc664.rom"
- name: cpc6128.rom
system: amstrad-cpc
required: false
mode: standalone
size: 32768
note: "CPC 6128 OS + BASIC 1.1"
source_ref: "caprice32/rom/cpc6128.rom"
- name: amsdos.rom
system: amstrad-cpc
required: false
mode: standalone
size: 16384
note: "AMSDOS disc ROM (sideways slot 7)"
source_ref: "caprice32/src/cap32.cpp:1166"
- name: system.cpr
system: amstrad-cpc
required: false
mode: standalone
size: 131156
note: "CPC+ system cartridge"
source_ref: "caprice32/rom/system.cpr"
- name: MF2.rom
system: amstrad-cpc
required: false
mode: standalone
size: 8192
note: "Multiface 2 ROM"
source_ref: "caprice32/rom/MF2.rom, caprice32/src/cap32.cpp:1244-1263"
platform_details:
bios_mapping:
source_ref: "cap32/cap32.c:1072-1100, cap32/cap32.c:342-345"
notes: |
All ROMs are embedded. emulator_select_ROM() copies the appropriate
ROM array into the pbROM buffer based on CPC.model. No filesystem
lookup occurs in the libretro port. The retro_system_bios_directory
variable is set up in libretro-core.c:1499-1510 but only used for
a future custom BIOS feature that is not yet implemented.
embedded_roms:
source_ref: "cap32/rom/464.h, cap32/rom/6128.h, cap32/rom/amsdos.h, cap32/rom/6128p.h, cap32/rom/cpm.h"
notes: |
5 ROM sets embedded as C arrays:
OS_BASIC10 (32KB) - CPC 464/664 OS + BASIC 1.0
OS_BASIC11 (32KB) - CPC 6128 OS + BASIC 1.1
AMSDOS (16KB) - Disk controller ROM, mapped to slot 7
OS_6128P - CPC+ system cartridge (White Label cartridge)
cpmROM (128KB+) - CP/M boot snapshot including SNA header
model_rom_map:
source_ref: "cap32/cap32.c:1072-1100"
notes: |
CPC 464: OS_BASIC10 only (no disk support)
CPC 664: OS_BASIC10 + AMSDOS in ROM slot 7
CPC 6128: OS_BASIC11 + AMSDOS in ROM slot 7
CPC+: 6128P system cartridge (or user-provided .cpr file)