You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Michael Steil 3e384deeb5 documented illegal opcodes 2 months ago
bin moved to 1988-12 4 years ago
core fixed AC000BEQ$C000 bug 2 months ago
projects monitor: added support for TED (C16, C116, Plus/4) 3 months ago
.gitignore separated fc3 core from projects in directory structure 4 years ago
Makefile 65C02 support 2 months ago documented illegal opcodes 2 months ago

Final Cartridge

This project is the reverse-engineered and documented Commodore 64 cc65/ca65/cl65 assembly source code of the first bank of the “Final Cartridge III”.

When assembled, the resulting binary is identical with the 1988-12 version of bank 0 of the original cartridge ROM.

What is contained?

Bank 0 contains the BASIC and editor extensions, the floppy and tape speeder, fast format, the centronics printer driver, and the monitor. This project does not contain Desktop, the freezer or the BASIC menu bar.


Create fc3.bin:


Regression test: create fc3.bin and make sure it’s identical to the original ROM:

make test


Reusing Components

The FC3 contained some great components, like the editor and BASIC extensions, and the excellent machine code monitor.

The source was separated into files with minimal dependencies, so they can be included in other projects.

For example:

make clean PROJECT=monitor monitor.prg

builds a standalone version of the monitor that can be started with

sys 16384

The monitor has also been adapted to work with the TED series (C16, C116, Plus/4):

make clean MACHINE=ted PROJECT=monitor monitor.prg

In this version, the O command takes a single hex character argument for the 16 banks. Since OD clashes with switching to disk, bank D can be reached with O<SHIFT>D.

The standalone version can optionally be built with support for illegal opcodes by adding CPU=6502ill to the make command like, i.e.

make clean CPU=6502ill PROJECT=monitor monitor.prg # C64
make clean CPU=6502ill MACHINE=ted PROJECT=monitor monitor.prg # TED

Creating Derivatives

The existing code is a great starting point to create an improved Final Cartridge. Some ideas:

  • Replace the floppy speeder with a faster one.
  • Disable speeder when it detects non-1541 drives or a high-level emulated drive.
  • Add a fast directory function.
  • Replace PACK and UNPACK with a different engine.
  • Adding disk copy functionality.
  • Add “clear all memory” functionality (like “Zero Fill” in freezer)
  • Monitor: Support illegal opcodes.
  • Monitor: Support screen code.
  • Monitor: Optimize “OD” mode for speed.
  • Monitor: Allow transfering data between computer and drive.
  • Monitor: Allow loading and saving below I/O area.
  • Bundle a user-defined set of standard $0801-based programs in ROM.

This can be done without overflowing bank 0, since it contains plenty of code that can be removed, either because it is of little use these days (printer.s, tape code in speeder.s, format.s) or it is only there to support other banks (freezer.s, vectors.s, desktop_helper.s).

Please be aware of the The Final Replay project, which has similar goals, but is based on a clean reimplementation.


The original code is © Uwe Stahl and Riska B.V. Home & Personal Computers. The assembly version, the comments, the partitioning into separate files and the linker configuration was done by Michael Steil; this work is in the public domain.