Skip to content

C64.emu - RetroBIOS

Type standalone
Classification Community forks
Source https://github.com/Rakashazi/emu-ex-plus-alpha
Upstream https://github.com/VICE-Team/svn-mirror
Version 1.5.85
Profiled 2026-08-11
Cores c64-emu, C64.emu, C64-EMU
Systems commodore-c64, commodore-c64-supercpu, commodore-c64dtv, commodore-c128, commodore-vic20, commodore-plus4, commodore-pet, commodore-cbm-ii
Technical notes

Android and Linux member of the EX Emulator series by Robert Broglia, published as com.explusalpha.C64Emu (C64.emu/metadata/conf.mk:2,6,7) and reached by ES-DE through its C64-EMU find rule. VICE 3.10 is vendored under C64.emu/src/vice (C64.emu/src/config/vice-config.h:699,795) and driven by the app's own sysfile, video, sound and zfile layers.

Ten machines are built as separate shared libraries (C64.emu/src/CMakeLists.txt:535-683): c64, c64sc, scpu64, c64dtv, c128, vic, pet, plus4, cbm2, cbm5x0. Each opens its files under the VICE machine directory named by its own machine_name (c64/c64.c:179, c128/c128.c:240, vic20/vic20.c:144, plus4/plus4.c:131, pet/pet.c:128, cbm2/cbm2.c:131, cbm2/cbm5x0.c:122, scpu64/scpu64.c:157, c64dtv/c64dtv.c:129), so c64 and c64sc share C64/ and cbm2 and cbm5x0 share CBM-II/. Drive ROMs live in DRIVES/ (drive/driverom.c:104,174).

Nothing is embedded. The app implements sysfile_open, sysfile_locate and sysfile_load itself (C64.emu/src/main/sysfile.cc:218-355) over a user-set path that may be a directory or a ZIP archive, and that path is rejected unless it carries a DRIVES folder (C64.emu/src/main/sysfile.cc:140-151). On Linux two fallbacks follow it, ~/.local/share/C64.emu and /usr/share/games/vice (C64.emu/src/main/Main.cc:91-95). A last fallback reads the application bundle (C64.emu/src/main/sysfile.cc:107-119,252-259), which supplies only the eight keymaps below (C64.emu/res/android/assets symlinks C64.emu/res/vice, and each machine directory there holds one file).

Missing ROMs stop the app rather than degrading it: initC64 throws when the path is unset, and again with the name of the first file that failed once plugin.init_main() returns -1 (C64.emu/src/main/Main.cc:301-311), which is what machine_init does when mem_load cannot find a ROM.

All fourteen C64 models are offered (C64.emu/src/main/VicePlugin.cc:66-79), so every kernal revision and both chargens are reachable. The MAX Machine model loads nothing: c64rom.c:222-224 matches the kernal-none.bin name and zeroes the ROM area instead of calling sysfile_load.

C128 is the one machine that needs its whole language set present. mem_load runs c128rom_check_res_file over both BASIC halves, all eight kernal resources, all eight chargen resources, Kernal64 and Basic64, and returns -1 if any one of them cannot be located (c128/c128rom.c:762-806). Only the selected variant is then read. MachineType stays at C128_MACHINE_INT (c128/c128-resources.c:684) because no reachable code writes it, so the Danish, Norwegian and Swedish kernal64 variants of c128rom.h:111-113 are never named.

Drive ROMs are optional in the strict sense: iec_drive_rom_load, ieee_drive_rom_load, tcbm_drive_rom_load and iec128dcr_drive_rom_load return void, and driverom_load logs the miss and disables the units of that type (drive/driverom.c:186-196,131-144). Default unit 8 is a 1541-II on C64, SCPU64 and DTV (c64/c64drive.c:43), a 1571CR on C128 (c128/c128drive.c:56), a 1540 on VIC-20 (vic20/vic20drive.c:44), a 1551 on Plus/4 (plus4/plus4drive.c:46) and a 2031 on PET and CBM-II (pet/petdrive.c:42, cbm2/cbm2drive.c:42).

Sizes come from the min and max arguments of each sysfile_load call. The loader accepts a file two bytes over its maximum by dropping the leading load address, pads a short file to the top of the buffer, and truncates anything longer with a warning (C64.emu/src/main/sysfile.cc:30-71).

SHA-1s are those hardcoded in c64/c64rom.h:88-96. c64rom.c:120-131 hashes the loaded kernal and matches that table to identify the revision; an unmatched image is reported and accepted. VICE distributes C128/kernal64-901227-03.bin and C128/basic64-901226-01.bin with the same bytes as the C64 Rev 3 kernal and BASIC, so those two entries carry the same hashes.

Palettes are read only after the user enables an external palette: the ${CHIP}ExternalPalette resource is registered with factory value 0 and ${CHIP}PaletteFile with the chip's default name (video/video-resources.c:393-398,916-923). The app lists every .vpl in the machine directory and sets both resources (C64.emu/src/main/EmuMenuViews.cc:186,1058,1074-1083, C64.emu/src/main/options.cc:38-51). Only the code-named default of each chip is listed here; palette_load appends the .vpl extension itself (palette.c:228-248).

Keymaps are named from KBD_PORT_PREFIX, which the app sets to gtk3 (C64.emu/src/config/kbd.h:7). keymap_init runs inside init_main and the lookup falls back to _sym.vkm (keymap.c:1249-1270,1386-1392), the file the app bundles for each machine directory. Host-layout and keyboard-type variants extend the name and are not enumerated here.

Four subsystems are compiled but cannot reach their files. Printer ROMs and the PRINTER/ palettes load from drv_mps803_open and drv_nl10_open, which require Printer4, Printer5 or Printer6 to leave PRINTER_DEVICE_NONE (printerdrv/interface-serial.c:145-149); the app writes no printer resource, and neither main.c nor initcmdline.c is compiled, so the resource file and the command line that would set one do not exist. Romset .vrs files, the monitor command file and joystick .vjm maps have no default name at all (joyport/joystick.c:2212) and no menu that supplies one. vice/arch is outside the build, so the CBM font, icon and hotkey lookups of archdep_cbmfont.c, archdep_icon_path.c and hotkeys/parser.c are never linked.

113 files | 45 required, 68 optional | 111 in repo, 2 missing Categories: 95 BIOS, 18 game data

kernal-901227-03.bin required in repo
C64 kernal Rev 3, default kernal and default model

kernal-901227-02.bin optional in repo
C64 kernal Rev 2, C64 old PAL model

kernal-901227-01.bin optional in repo
C64 kernal Rev 1, C64 old NTSC model

kernal-251104-04.bin optional in repo
SX-64 kernal, C64 SX PAL and NTSC models

kernal-906145-02.bin optional in repo japan
Japanese C64 kernal

kernal-390852-01.bin optional in repo
C64 GS kernal

kernal-901246-01.bin optional in repo
Educator 64 kernal, PET64 PAL and NTSC models

basic-901226-01.bin required in repo
C64 BASIC

chargen-901225-01.bin required in repo
C64 character generator

chargen-906143-02.bin optional in repo japan
Japanese C64 character generator

gtk3_sym.vkm optional in repo game_data bundled
C64 symbolic keymap, US layout

pepto-pal.vpl optional in repo game_data
VIC-II default external palette

scpu64 required in repo
SuperCPU64 firmware

chargen-901225-01.bin required in repo
Character generator for the SuperCPU machine

chargen-906143-02.bin optional in repo japan
Japanese character generator, Japanese SuperCPU model

gtk3_sym.vkm optional in repo game_data bundled
SuperCPU symbolic keymap, US layout

pepto-pal.vpl optional in repo game_data
VIC-II default external palette

kernal-901227-03.bin required in repo
C64 kernal Rev 3 for the DTV machine

basic-901226-01.bin required in repo
C64 BASIC for the DTV machine

chargen-901225-01.bin required in repo
Character generator for the DTV machine

dtvrom.bin optional in repo
DTV flash image, all six DTV model resources default to this name

gtk3_sym.vkm optional in repo game_data bundled
DTV symbolic keymap, US layout

spiff.vpl optional in repo game_data
VIC-II default external palette on the DTV machine

kernal-318020-05.bin required in repo
C128 international kernal, editor and Z80 BIOS

kernal-315078-03.bin required in repo
C128 German kernal

kernal-325172-01.bin required in repo
C128 Swiss kernal

kernal-318034-01.bin required in repo
C128 Swedish kernal

kernalfi required in repo
C128 Finnish kernal

kernalfr required in repo
C128 French kernal

kernalit required in repo
C128 Italian kernal

kernalno required in repo
C128 Norwegian kernal

basiclo-318018-04.bin required in repo
C128 BASIC low half

basichi-318019-04.bin required in repo
C128 BASIC high half, holds the editor

chargen-390059-01.bin required in repo
C128 international character generator

chargen-315079-01.bin required in repo
C128 German character generator

chargen-325167-02.bin required in repo
C128 Italian, French and Belgian character generator

chargen-325181-01.bin required in repo
C128 Swedish and Finnish character generator

chargen-325173-01D.bin required in repo
C128 Swiss character generator

chargen-325078-02.bin required in repo
C128 Norwegian character generator

kernal64-901227-03.bin required in repo
C64 mode kernal

basic64-901226-01.bin required in repo
C64 mode BASIC

gtk3_sym.vkm optional in repo game_data bundled
C128 symbolic keymap, US layout

pepto-pal.vpl optional in repo game_data
VIC-II default external palette

vdc_deft.vpl optional in repo game_data
VDC default external palette

kernal.901486-07.bin required in repo
VIC-20 PAL kernal, default kernal resource

kernal.901486-06.bin required in repo
VIC-20 NTSC kernal, default model and VIC-21

kernal.901486-02.bin optional in repo japan
VIC-1001 kernal

basic-901486-01.bin required in repo
VIC-20 BASIC

chargen-901460-03.bin required in repo
VIC-20 character generator

chargen-901460-02.bin optional in repo japan
VIC-1001 character generator

gtk3_sym.vkm optional in repo game_data bundled
VIC-20 symbolic keymap, US layout

mike-pal.vpl optional in repo game_data
VIC default external palette

kernal-318005-05.bin required in repo
Plus/4 NTSC kernal, default model

kernal-318004-05.bin required in repo
Plus/4 PAL kernal, default kernal resource

kernal-318004-01.bin optional in repo
C232 prototype kernal

kernal-364.bin optional in repo
V364 prototype kernal

basic-318006-01.bin required in repo
Plus/4 BASIC

3plus1-317053-01.bin required in repo
3-plus-1 low function ROM, Plus/4 and V364 models

3plus1-317054-01.bin required in repo
3-plus-1 high function ROM, Plus/4 and V364 models

c2lo-364.bin optional in repo
V364 speech ROM

gtk3_sym.vkm optional in repo game_data bundled
Plus/4 symbolic keymap, US layout

yape-pal.vpl optional in repo game_data
TED default external palette

kernal-4.901465-22.bin required in repo
BASIC 4 kernal, default model PET 8032

kernal-2.901465-03.bin optional in repo
BASIC 2 kernal, PET 3008 to 3032B models

kernal-1.901439-04-07.bin optional in repo
BASIC 1 kernal, PET 2001-8N model

basic-4.901465-23-20-21.bin required in repo
BASIC 4, default model PET 8032

basic-2.901465-01-02.bin optional in repo
BASIC 2, PET 3008 to 3032B models

basic-1.901439-09-05-02-06.bin optional in repo
BASIC 1, PET 2001-8N model

edit-4-80-b-50Hz.901474-04_.bin required in repo
BASIC 4 business 80 column editor, default model PET 8032

edit-4-40-n-50Hz.901498-01.bin optional in repo
BASIC 4 graphics 40 column editor, PET 4016 and 4032 models

edit-4-40-b-50Hz.ts.bin optional in repo
BASIC 4 business 40 column editor, PET 4032B model

edit-2-n.901447-24.bin optional in repo
BASIC 2 graphics 40 column editor, PET 3008 to 3032 models

edit-2-b.901474-01.bin optional in repo
BASIC 2 business editor, PET 3032B model

edit-1-n.901439-03.bin optional in repo
BASIC 1 graphics 40 column editor, PET 2001-8N model

characters-2.901447-10.bin required in repo
Second generation character generator, default model PET 8032

characters-1.901447-08.bin optional in repo
First generation character generator, PET 2001-8N model

characters.901640-01.bin optional in repo
SuperPET character generator

waterloo-a000.901898-01.bin optional in repo
SuperPET 6809 ROM at a000

waterloo-b000.901898-02.bin optional in repo
SuperPET 6809 ROM at b000

waterloo-c000.901898-03.bin optional in repo
SuperPET 6809 ROM at c000

waterloo-d000.901898-04.bin optional in repo
SuperPET 6809 ROM at d000

waterloo-e000.901897-01.bin optional in repo
SuperPET 6809 ROM at e000, the one slot the loader accepts at 2 KB

waterloo-f000.901898-05.bin optional in repo
SuperPET 6809 ROM at f000

gtk3_sym.vkm optional in repo game_data bundled
PET symbolic keymap, US layout and the fallback for every keyboard type

green.vpl optional in repo game_data
CRTC default external palette

kernal-901244-04a.bin required in repo
CBM-II 6x0 and 7x0 kernal, default model CBM 610

kernal-901234-02.bin required in repo
CBM 510 kernal, default model of the cbm5x0 plugin

basic-901242+3-04a.bin required in repo
CBM-II 128 KB BASIC, CBM 610 and 710 models

basic-901240+1-03.bin optional in repo
CBM-II 256 KB BASIC, CBM 620, 620+, 720 and 720+ models

basic-901235+6-02.bin required in repo
CBM 510 BASIC

chargen-901237-01.bin required in repo
CBM-II 600 series character generator, default model CBM 610

chargen-901232-01.bin optional in repo
CBM-II 700 series character generator

chargen-901225-01.bin required in repo
CBM 510 character generator

gtk3_sym.vkm optional in repo game_data bundled
CBM-II symbolic keymap, US layout

green.vpl optional in repo game_data
CRTC default external palette, 6x0 and 7x0 models

pepto-pal.vpl optional in repo game_data
VIC-II default external palette, 5x0 models

dos1541ii-251968-03.bin optional in repo
1541-II DOS, default unit 8 on C64, SuperCPU and DTV

dos1541-325302-01+901229-05.bin optional in repo
1541 DOS

dos1540-325302+3-01.bin optional in repo
1540 DOS, default unit 8 on VIC-20

dos1570-315090-01.bin optional in repo
1570 DOS

dos1571-310654-05.bin optional in repo
1571 DOS

dos1571cr-318047-01.bin optional in repo
1571CR DOS, default unit 8 on C128

dos1581-318045-02.bin optional in repo
1581 DOS

dos1551-318008-01.bin optional in repo
1551 DOS, default unit 8 on Plus/4

dos2000-cs-33cc6f.bin optional missing
CMD FD-2000 DOS

dos4000-fd-350022.bin optional missing
CMD FD-4000 DOS

bootromCMDHD-v2-80.bin optional in repo
CMD HD boot ROM

dos2031-901484-03+05.bin optional in repo
2031 DOS, default unit 8 on PET and CBM-II

dos2040-901468-06+07.bin optional in repo
2040 DOS

dos3040-901468-11-13.bin optional in repo
3040 DOS

dos4040-901468-14-16.bin optional in repo
4040 DOS

dos1001-901887+8-01.bin optional in repo
1001, 8050 and 8250 DOS

dos9000-300516+7-revC.bin optional in repo
D9090 and D9060 DOS

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