Frodo
Frodo emulates Commodore C64. It reads 4 files, none of them required: it starts games without them.
About this profile
Install this emulator's files
The installer finds your setup and its BIOS folder, then downloads only the files this emulator reads there and checks each one.
Open the Start menu. Type PowerShell and open it. Paste the line. Press Enter.
&([scriptblock]::Create((irm https://abdess.github.io/retrobios/i.ps1))) --emulator frodoOpen Terminal, in Applications, then Utilities. Paste the line. Press Return.
curl -fsSL https://abdess.github.io/retrobios/i | sh -s -- --emulator frodoOpen a terminal. Paste the line. Press Enter.
curl -fsSL https://abdess.github.io/retrobios/i | sh -s -- --emulator frodoSwitch to Desktop Mode. Open Konsole. Paste with Ctrl+Shift+V. Press Enter.
curl -fsSL https://abdess.github.io/retrobios/i | sh -s -- --emulator frodoInstall Termux, a terminal app. Run pkg install python and termux-setup-storage once. Then paste the line. Press Enter.
curl -fsSL https://abdess.github.io/retrobios/i | sh -s -- --emulator frodoOpen a terminal on the device. Or connect from a computer with SSH, a terminal over the network. Paste the line. Press Enter.
curl -fsSL https://abdess.github.io/retrobios/i | sh -s -- --emulator frodoTechnical notes
Frodo is a Commodore 64 emulator by Christian Bauer (Frodo V4.2), ported to libretro. It emulates the C64 (MOS 6510, VIC-II, SID, CIA x2) and an optional 1541 floppy drive.
All four ROMs are embedded directly in the core binary as compiled-in byte arrays (Basic_ROM.h, Kernal_ROM.h, Char_ROM.h, 1541_ROM.h). No external BIOS files are required for normal operation.
The core attempts to load external ROM files from the current working directory (DATADIR is empty in the libretro build) at startup via load_rom_files() in main.cpp. If any file fails to open or has the wrong size, the embedded ROM is used as fallback via memcpy(). The filenames are hardcoded with spaces, no subdirectory prefix.
ROM loading order in load_rom_files():
- "Basic ROM" (8192 bytes, BASIC_ROM_SIZE 0x2000) -> TheC64->Basic
- "Kernal ROM" (8192 bytes, KERNAL_ROM_SIZE 0x2000) -> TheC64->Kernal
- "Char ROM" (4096 bytes, CHAR_ROM_SIZE 0x1000) -> TheC64->Char
- "1541 ROM" (16384 bytes, DRIVE_ROM_SIZE 0x4000) -> TheC64->ROM1541
The core does NOT construct paths relative to retro_system_directory for ROM loading. The system directory variable is fetched in retro_init() but only used for the save directory fallback, not for ROM path construction. DATADIR defaults to "" (empty string) when not defined by the build system, so the filenames resolve to bare names in the cwd. In practice, the external ROM loading path is effectively unused in the libretro build since the cwd is unpredictable and the filenames contain spaces.
The Kernal ROM is patched at runtime by PatchKernal() in C64.cpp for fast reset (addresses 0x1D84-0x1D85) and IEC bus replacement when 1541 processor emulation is enabled (multiple addresses in the 0x0D00-0x0E00 range are patched with 0xF2 trap opcodes).
The 1541 drive ROM is also patched in PatchKernal(): ROM checksum verification is disabled (0x2AE4-0x2AE9 NOPed), DOS idle loop is trapped (0x2C9B), and write sector / format track operations are intercepted (0x3594-0x3598, 0x3B0C-0x3B0D).
Source: Src/main.cpp:67-115 (ROM defines, load_rom, load_rom_files),
Src/C64.h:33-37 (ROM size constants), Src/C64.cpp:221-285 (PatchKernal),
Src/C64.cpp:734-746 (Run init, saves original kernal bytes, calls PatchKernal),
Src/Basic_ROM.h, Src/Kernal_ROM.h, Src/Char_ROM.h, Src/1541_ROM.h
(embedded ROM arrays)
4 files: 0 required, 4 optional. 4 have an HLE fallback.
In this collection: 4 in repo and 0 missing.
Optional
Section titled “Optional”Basic ROM optional in repo HLE fallback
C64 BASIC V2 ROM
- System: Commodore C64
- Embedded as builtin_basic_rom[] in Basic_ROM.h. External file never loaded in practice (DATADIR is empty, path is bare filename in cwd).
- Size: 8.0 KB
- Collection copy:
bios/Commodore/ C128/ vice/ C128/ basic-901226-01.bin - Platforms:
C64_Basic.bin: BizHawk
Source
- Asked for by: emulator code, libretro port
- Source:
Src/main.cpp:71(emulator code, libretro port),Src/main.cpp:77(emulator code, libretro port),Src/main.cpp:100-102(emulator code, libretro port)
Kernal ROM optional in repo HLE fallback
C64 Kernal ROM
- System: Commodore C64
- Embedded as builtin_kernal_rom[] in Kernal_ROM.h. Patched at runtime for fast reset and 1541 IEC traps.
- Size: 8.0 KB
- Collection copy:
bios/Commodore/C64/Kernal ROM
Source
- Asked for by: emulator code, libretro port
- Source:
Src/main.cpp:72(emulator code, libretro port),Src/main.cpp:78(emulator code, libretro port),Src/main.cpp:104-106(emulator code, libretro port)
Char ROM optional in repo HLE fallback
C64 Character Generator ROM
- System: Commodore C64
- Embedded as builtin_char_rom[] in Char_ROM.h. Used by VIC-II for text/bitmap rendering.
- Size: 4.0 KB
- Collection copy:
bios/Commodore/ C128/ vice/ C64/ chargen-901225-01.bin - Platforms:
C64_Chargen.bin: BizHawk
Source
- Asked for by: emulator code, libretro port
- Source:
Src/main.cpp:73(emulator code, libretro port),Src/main.cpp:79(emulator code, libretro port),Src/main.cpp:108-110(emulator code, libretro port)
1541 ROM optional in repo HLE fallback
Commodore 1541 floppy drive ROM
- System: Commodore C64
- Embedded as builtin_drive_rom[] in 1541_ROM.h. Patched at runtime to disable checksum and trap disk I/O.
- Size: 16.0 KB
- Collection copy:
bios/Commodore/ C128/ vice/ DRIVES/ dos1541-325302-01+901229-05.bin - Platforms:
C64_Drive-1541.bin: BizHawk
Source
- Asked for by: emulator code, libretro port
- Source:
Src/main.cpp:74(emulator code, libretro port),Src/main.cpp:80(emulator code, libretro port),Src/main.cpp:112-114(emulator code, libretro port)
Next steps
Section titled “Next steps”- Get your files, for the setup you play on
- Every system, and the files each one needs
- When a game does not start