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.
Regression test: create fc3.bin and make sure it's identical to the original ROM:
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.
make clean PROJECT=monitor monitor.prg
builds a standalone version of the monitor that can be started with
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
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 (c) 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 firstname.lastname@example.org; this work is in the public domain.