Skip to content

CPCemu - RetroBIOS

Type standalone
Classification Other
Source https://www.cpc-emu.org/
Version 3.0.2
Profiled 2026-08-08
Cores cpcemu
Systems amstrad-cpc
Technical notes

Amstrad CPC emulator by Marco Vieth and Rainer Loritz, closed-source freeware for Windows, macOS, Linux, Android and iOS. Machines are the CPC 464, 664 and 6128; the firmware identifier and the message catalogue also know the 464+, the 6128+ and the KC compact.

Two packages were used. The 3.0.2 Windows portable and macOS builds of 2025-04-24 carry the same fourteen ROM files and the same data files, and provide the path constants, the message catalogue and the v3.0 help file. The 2.5 Linux x86-64 build of 2022-08-13 is still the newest Linux release, the 3.0.2 Linux archives listed on the download page being absent from the server, and provides the runtime behaviour: file opens traced with strace, required and optional decided by removing, truncating and patching each file and reading the emulator's own messages.

ROMs live in ROM_PATH, "./ROM/" in the shipped configuration, resolved against the working directory; the macOS build reads them from the application bundle Resources folder. Slots are filled by ROM_BLOCK lines naming a ROM number, a file in ROM_PATH and a 16 KB block position inside that file:

ROM_BLOCK = 255, "CPC6128.ROM", 0 lower ROM ROM_BLOCK = 0 , "CPC6128.ROM", 1 foreground ROM ROM_BLOCK = 7 , "CPCADOS.ROM", 0 AMSDOS ROM_BLOCK = 6 , "M4.ROM" , 0 M4 board

The shipped cpcemu0.cfg repeats the first three for every CPC_TYPE from 0 to 5, with CPC464.ROM for types 0 and 3, CPC664.ROM for type 1 and CPC6128.ROM for types 2, 4 and 5, and adds the M4 line once for all types. A file named by a ROM_BLOCK line that cannot be opened prints "ROM: Cannot open file" and ends the process with status 3 before audio initialisation, whichever slot it fills and whether or not the matching device is enabled; deleting the line instead lets the emulator start.

The machine is identified from the foreground ROM, not from the lower half and not from CPC_TYPE. CPCemu reads the four-byte CPC ROM header at the start of block 1: byte 0 has to be 0x80, and byte 2 selects the machine, 0x00 for the 464, 0x01 for the 664, 0x02 for the 6128. A random block 1 gives "ROM: No foreground ROM found.", an unlisted version byte gives "ROM: Unknown ROM version.", and both end on "CPC type not configured or ROM for CPC type not available. Unable to continue." The modification byte is ignored, the lower 16 KB half is never inspected, and padding past 32768 bytes is accepted, so the length requirement is a lower bound: a block 1 has to exist.

Types 3, 4 and 5 need ROM images the packages do not carry. The help file states they have to be supplied in CPCEMU.CFG first, and no filename for them is compiled into the binary, the user names the file in the ROM_BLOCK line. Left on the shipped configuration those types load the 464 and 6128 files and report the machine those files describe. There is no cartridge support, the file types handled on the command line are dsk, sna, cfg and zip.

M4 board emulation is on by default. HACK.ROM, the board's lower ROM, is opened at every startup whatever M4_ENABLED holds, after M4_SD_PATH + NMIROM.BIN has been tried, so a NMIROM.BIN placed on the emulated SD card replaces it; with neither present the emulator prints "Unable to load HACK.ROM" and keeps running. M4.ROM contents are checked, a zeroed file boots the CPC and reports "M4 ROM not valid." The firmware updater downloads M4FIRM.BIN from spinpoint.org and rewrites M4.ROM and HACK.ROM in place.

Alongside the ROMs the binary reads its own payload from the program directory: cpcemu.msg, the message catalogue, whose absence leaves every message unprinted; cpcemu.dat, colours and key tables; cpcemu.hlp, the online help opened on F1; cpcemu.dbf, the poke database opened from the poke menu; and cpcemu0.cfg, the template used when no user configuration exists. Configuration is looked up first in the user profile, ~/.CPCemu/cpcemu.cfg on Linux, then cpcemu0.cfg in the working directory; with neither, startup stops on "CPCEMU: Use INSTALL first". The disc, tape and snapshot folders and the M4 SD card folder hold user content.

14 files | 3 required, 11 optional | 14 in repo, 0 missing

CPC6128.ROM required in repo

  • Path: ROM/CPC6128.ROM
  • System: amstrad-cpc
  • Size: min 32.0 KB
  • SHA1: 5977adbad3f7...
  • MD5: b96280dc6c95...
  • Validation: size, signature
  • Source: CPCemu 2.5/3.0.2: ROM/CPC6128.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 2, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 2:4
  • CPC 6128 firmware and BASIC. Loaded for the shipped CPC_TYPE 2 and opened twice, once per block. Foreground ROM header 80 01 02 00.

CPC464.ROM optional in repo

  • Path: ROM/CPC464.ROM
  • System: amstrad-cpc
  • Size: min 32.0 KB
  • SHA1: 56d39c463da6...
  • MD5: a993f85b88ac...
  • Validation: size, signature
  • Source: CPCemu 2.5/3.0.2: ROM/CPC464.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 0 and 3
  • CPC 464 firmware and BASIC, selected by CPC_TYPE 0 or the -t 0 command line. Foreground ROM header 80 01 00 00.

CPC664.ROM optional in repo

  • Path: ROM/CPC664.ROM
  • System: amstrad-cpc
  • Size: min 32.0 KB
  • SHA1: 073a7665527b...
  • MD5: 5a384a2310f4...
  • Validation: size, signature
  • Source: CPCemu 2.5/3.0.2: ROM/CPC664.ROM, cpcemu0.cfg ROM_BLOCK 255 and 0 for CPC_TYPE 1
  • CPC 664 firmware and BASIC, selected by CPC_TYPE 1 or the -t 1 command line. Foreground ROM header 80 01 01 00.

CPCADOS.ROM required in repo

  • Path: ROM/CPCADOS.ROM
  • System: amstrad-cpc
  • Size: 16.0 KB
  • SHA1: 0e247123b9d3...
  • MD5: aa2fb251814b...
  • Source: CPCemu 2.5/3.0.2: ROM/CPCADOS.ROM, cpcemu0.cfg ROM_BLOCK 7 for every CPC_TYPE
  • AMSDOS disc ROM, the 8 KB image zero-padded to 16 KB. Declared for every machine by the shipped configuration, so startup ends on status 3 without it; dropping the ROM_BLOCK line instead boots with "ROM: No AMSDOS ROM found." and no disc support. Length is not checked, an 8 KB file installs the AMSDOS speedup all the same.

M4.ROM required in repo

  • Path: ROM/M4.ROM
  • System: amstrad-cpc
  • Size: 16.0 KB
  • SHA1: 05f9447d307a...
  • MD5: 28a7e368badc...
  • Validation: signature
  • Source: CPCemu 2.5/3.0.2: ROM/M4.ROM, cpcemu0.cfg ROM_BLOCK 6, M4_ENABLED = 1
  • M4 board firmware by Duke. Declared by the shipped configuration, so startup ends on status 3 without it even when M4_ENABLED is 0. Contents are checked, a zeroed file boots and reports "M4 ROM not valid."

HACK.ROM optional in repo

  • Path: ROM/HACK.ROM
  • System: amstrad-cpc
  • Size: 7.8 KB
  • SHA1: 582dd1706391...
  • MD5: ffcbcbce3222...
  • Source: CPCemu 2.5/3.0.2: ROM_PATH + /HACK.ROM, opened after M4_SD_PATH + NMIROM.BIN
  • M4 hack ROM, the lower ROM behind the Shift+F1 menu. Opened at every startup, and superseded by a NMIROM.BIN on the emulated SD card. Missing prints "Unable to load HACK.ROM" and emulation continues.

CPC6128.ROM.UK optional in repo uk

  • Path: ROM/National/CPC6128.ROM.UK
  • System: amstrad-cpc
  • Size: min 32.0 KB
  • SHA1: 5977adbad3f7...
  • MD5: b96280dc6c95...
  • Validation: size, signature
  • Source: CPCemu 2.5/3.0.2: ROM/National/CPC6128.ROM.UK
  • English CPC 6128 firmware, the same image as CPC6128.ROM. Ships in the National folder without being named by any path constant.

CPC6128.ROM.FR optional in repo france

  • Path: ROM/National/CPC6128.ROM.FR
  • System: amstrad-cpc
  • Size: min 32.0 KB
  • SHA1: 200d59076dfe...
  • MD5: 5ee871d5600e...
  • Validation: size, signature
  • Source: CPCemu 3.0.2: National/CPC6128.ROM.FR, keyboard layout dialog on first start
  • French CPC 6128 firmware, configured when the French layout is picked.

CPC6128.ROM.ES optional in repo spain

  • Path: ROM/National/CPC6128.ROM.ES
  • System: amstrad-cpc
  • Size: min 32.0 KB
  • SHA1: 1acd01c2c034...
  • MD5: 024674037101...
  • Validation: size, signature
  • Source: CPCemu 3.0.2: National/CPC6128.ROM.ES, keyboard layout dialog on first start
  • Spanish CPC 6128 firmware, configured when the Spanish layout is picked.

CPC6128.ROM.DK optional in repo denmark

  • Path: ROM/National/CPC6128.ROM.DK
  • System: amstrad-cpc
  • Size: min 32.0 KB
  • SHA1: a9e7ee635573...
  • MD5: ca1635fd992e...
  • Validation: size, signature
  • Source: CPCemu 3.0.2: National/CPC6128.ROM.DK, keyboard layout dialog on first start
  • Danish CPC 6128 firmware, configured when the Danish layout is picked.

CPC6128.ROM.SE optional in repo sweden

  • Path: ROM/National/CPC6128.ROM.SE
  • System: amstrad-cpc
  • Size: min 32.0 KB
  • SHA1: 6765a91a42fe...
  • MD5: 8ca256a832e8...
  • Validation: size, signature
  • Source: CPCemu 2.5/3.0.2: ROM/National/CPC6128.ROM.SE
  • Swedish CPC 6128 firmware. Ships in the National folder without being named by any path constant, the layout dialog offering English, French, Spanish and Danish only.

XDDOS210.ROM optional in repo

  • Path: ROM/XDDOS210.ROM
  • System: amstrad-cpc
  • Size: 16.0 KB
  • SHA1: 2f1bd4d6e2d2...
  • MD5: 1d91a9ef315b...
  • Source: CPCemu 3.0.2: ROM/XDDOS210.ROM, cpcemu0.cfg commented ROM_BLOCK 7, help topic DOBBERTIN HD20 ENABLED
  • X-DDOS 2.10 by Dobbertin, the disc operating system of the HD20 hard disk. Required in a ROM slot to use DOBBERTIN_HD_ENABLED = 1. Added in 3.0, not shipped with 2.5.

COPYMATE.ROM optional in repo

  • Path: ROM/COPYMATE.ROM
  • System: amstrad-cpc
  • Size: 16.1 KB
  • SHA1: 15d52de01320...
  • MD5: e9c4288eab88...
  • Source: CPCemu 2.5/3.0.2: ROM/COPYMATE.ROM, cpcemu0.cfg commented ROM_BLOCK 4
  • Copy utility ROM, carrying a 128-byte AMSDOS file header ahead of the 16 KB image. Shipped as the example expansion ROM of the configuration file and loaded once the line is uncommented.

multface.rom optional in repo

  • Path: ROM/multface.rom
  • System: amstrad-cpc
  • Size: 8.0 KB
  • SHA1: 1431ec628d38...
  • MD5: 4c9f014e91d4...
  • Source: CPCemu 2.5/3.0.2: ROM/multface.rom, ROM_BLOCK filename or ROM Manager entry
  • Romantic Robot Multiface Two ROM. Ships in the ROM folder for the user to map into a slot, no path constant naming it.

Generated on 2026-08-23T16:12:06Z