Der Commodore 64 gilt als eine der erfolgreichsten Heimcomputer-Kreationen der 1980er Jahre. Seine Popularität beruht nicht nur auf seiner zugänglichen Architektur und preislichen Erschwinglichkeit, sondern auch darauf, dass er immer wieder neue, kreative Anwendungswege ermöglichte, die ursprünglich so nicht vorgesehen waren. Eines der bemerkenswertesten Beispiele hierfür ist der sogenannte Freezer – eine Hardwareerweiterung, die es Nutzern erlaubte, die Ausführung eines Programms jederzeit anzuhalten, den Zustand des Systems inklusive Speicher und Prozessorregistern zu sichern, und später genau an derselben Stelle fortzusetzen. Der Final Cartridge III (FC3) war in dieser Hinsicht einer der herausragendsten Vertreter. Sein Freezer-Modul gilt als technische Meisterleistung, die Hardware-Kenntnisse, Softwaretricks und das Ausnutzen von selten genutzten Prozessor- und Chipfunktionen auf einzigartige Weise miteinander vereinte.
Um die Funktionsweise des Final Cartridge III Freezers zu verstehen, ist es essenziell, zunächst die Rahmenbedingungen des Commodore 64 zu betrachten. Ursprünglich war der C64 nicht dafür ausgelegt, das Einfrieren laufender Programme oder das Speichern und Wiederherstellen des kompletten Systemzustands zu unterstützen. Eine solche Funktionalität bedurfte deswegen spezieller Tricks, um auf vorhandene Hardwareeigenschaften zurückzugreifen, die Commodore in der Architektur mehr durch Zufall als absichtlich hinterlassen hatte. Hier kommt die sogenannte Ultimax-Modus ins Spiel, welche eine Art Kompatibilitätsmodus für ein eher unbekanntes Commodore-System darstellt – die Commodore Ultimax bzw. Max Machine.
Dieses Gerät war ein Spielekonsole mit nur 2 Kilobyte RAM und vollständig externem ROM auf dem Modul. Obwohl die Ultimax nicht kommerziell erfolgreich war, verblieben deren Hardware-Modi und -Signale im C64 und kannten findige Entwickler und Ingenieure zu nutzen. Der Ultimax-Modus wird aktiviert, wenn das Cartridge den GAME-Pin auf dem Erweiterungsport auf Low zieht. Dabei wird großer Teil des Arbeitsspeichers auf dem C64 deaktiviert und das Cartridge-ROM wird eingeblendet, direkt im Speicherbereich für das KERNAL (dem Betriebssystemkern). Dieses Verfahren erlaubt es einem Cartridge zu jeder Zeit den normalen C64-Speicher umzuleiten und so zum Beispiel auch auf Interruptvektoren Einfluss zu nehmen.
Dies wird beim Final Cartridge III mit großer Präzision ausgenutzt, um das Einfrieren und kontrollierte Fortsetzen von Programmen zu ermöglichen. Ein wichtiges Steuerungsmittel ist dabei der sogenannte NMI-Interrupt (Nicht-maskierbarer Interrupt), der unerwartet und jederzeit vom Prozessor angenommen werden muss. Beim Drücken der Freeze-Taste am FC3 aktiviert das Cartridge den NMI-Signalpegel sofort und zieht das GAME-Signal nach wenigen Maschinencycles nach Low, um den Ultimax-Modus einzuschalten. Die Abstimmung dieses zeitlichen Verhaltens ist ausgesprochen heikel, weil der 6510-Prozessor jedes Mal die aktuelle Instruktion fertig ausführt, bevor der Interrupt abgearbeitet wird. Ist das Umschalten auf Ultimax-Modus zu früh, greifen die letzten Befehle auf deaktivierten Speicher zu und können scheitern.
Ist es zu spät, kann kein Freezing stattfinden. Die Entwickler des FC3 meisterten diese Herausforderung durch einen präzise taktenden Zähler im Freezer-Hardwaredesign, welcher die Umschaltung mit sieben Zyklen Verzögerung umsetzt – ein Kompromiss, der zwar gelegentliche seltene Fehler zulässt, insgesamt aber sehr zuverlässig funktioniert. Die Horizonale der Freezing-Funktion wurde durch Software noch weiter ergänzt. Sobald der NMI ausgeführt wird, übernimmt eine intelligente Routine die Kontrolle am Ende des Pufferspeichers. Dabei arbeitet das Firmware des FC3 zunächst in einem sehr engen Speicherbereich mit wenigen Bytes, da zu Beginn keine dauerhaft belegbare Arbeitsspeicherregion frei war.
Deshalb scannt das System den Speicher nach Regionen, die durch RLE-Kompression (Run Length Encoding) auf einen einheitlichen Wert gebracht werden können – typischerweise ungenutzter Speicher mit sich wiederholenden Daten. Solche Bereiche werden als temporärer Speicher für Register-Backups und den Entfriereroutinecode verwendet und ermöglichen das Verwalten eines gefrorenen Zustands inklusive aller relevanten Systemparameter. Besondere Aufmerksamkeit gilt natürlich den zentralen Komponenten im C64 – wie den CIA-Chips, dem VIC-II Grafikchip und dem SID-Soundchip. Die Register der CIA-Bausteine werden hochpräzise gesichert, auch wenn einige Register nicht direkt lesbar sind. Per geschickter Manipulation der Timer-Control-Register und zeitlich abgestimmtem Abfragen werden Werte genau ermittelt.
Der VIC-II wird teilweise gesichert, wobei sich das Freezer-System nur auf ausgewählte Register fokussiert, die für die Anzeige und Spriteprogrammierung relevant sind. Beim SID sind hardwarebedingte Einschränkungen vorhanden, denn dessen Register sind nicht auslesbar. Daher setzt der FC3 schlicht den Lautstärkeregler auf Null während des Freezings, um Klangstörungen zu vermeiden, und stellt ihn nach dem Auftauen wieder auf Maximalwert. Diese Kompromisse zeigen den hohen Aufwand und das Detailverständnis, mit dem die Entwickler vorgegangen sind. Ein weiterer überraschender Trick für die Anzeige des Freezer-Menüs ist die Verwendung des sogenannten „invalid bitmap mode“ im VIC-II.
Wenn man gleichzeitig den Bitmap-Modus (BMM) und den erweiterten Hintergrundfärbemodus (ECM) aktiviert, interpretiert der Grafikchip dies als ungültigen Modus und gibt den Bildschirm schwarz aus – obwohl interne Grafikmodi weiterhin aktiv bleiben. Dadurch kann das FC3-Menü die normale Bildschirmanzeige ausblenden, gleichzeitig jedoch Sprites als Menüelemente nutzen, deren Grafikdaten direkt aus dem Cartridge-ROM geladen werden. So ist es möglich, eine vollwertige Menüoberfläche mit verschachtelten Pulldown-Optionen darzustellen, ohne auf den knapp verfügbaren Arbeitsspeicher des C64 angewiesen zu sein. Mit einem gezielt ausgelösten Raster-Interrupt wird der Bitmap-Modus kurzzeitig deaktiviert, um die Menüleiste korrekt in Textmodus darzustellen. Auch die Farbgebung der ausgewählten Menüpunkte wird durch Anpassungen an den Sprite-Farbregistern im VC-IICHI-Bildschirm-Controller während der Rasterzeile realisiert.
Selbst der Menü-Klicksound wird auf die Hardware des SID gekonnt gelegt, indem die Lautstärke nur kurz auf maximal und dann wieder auf Null gesetzt wird – ein schlichtes, aber wirkungsvolles akustisches Feedback. Der Zugang zum C64-Hauptspeicher ist während des Freezing-Modus aus Sicherheitsgründen stark limitiert, da die meisten Speicherbereiche durch den Ultimax-Modus deaktiviert sind und nur kleine Regionen wie der Stack zugänglich bleiben. Um dennoch zuverlässig auf Speicherbereiche für Funktionen wie das Speichern und Wiederherstellen von Spielständen zuzugreifen, wird auf Hardwareebene das EXROM-Signal ebenfalls manipuliert. Wenn sowohl GAME als auch EXROM auf Low gesetzt werden, schaltet der C64 in den sogenannten 16-KB-Cartridge-Modus, welcher das Deaktivieren des ROMs über das seitens Software steuerbare Speicherbankregister $0001 ermöglicht. Dies eröffnet dem FC3 während des Freezing-Zustands den Zugang zum gesamten RAM ohne durch ROM-Leseschutz blockiert zu werden.
Backup und Restore-Funktionen waren ein weiterer wichtiger Bestandteil des Final Cartridge III Freezers. Die Speicherinhalte können sowohl auf Diskette als auch auf Kassette gesichert werden, wobei eine RLE-Kompression zum optimierten Speichern großer Speicherbereiche zum Einsatz kommt. Die Backups bestehen aus zwei Dateien: Die eine enthält den Bootloader und Speicherbereiche bis $01FF, die andere die komprimierten Speicherblöcke darüber hinaus. Das Einlesen erfolgt ebenfalls schrittweise, wobei der Stack bereits früh wiederhergestellt wird, um anschließend den Rest des Speichers mit einem schnellen Ladevorgang – getarnt als Fastloader – zu rekonstruieren. Das ermöglicht nach dem Laden eine direkte Wiederaufnahme des eingefrorenen Programms durch einen simplen RTS-Befehl.
Eine weitere Besonderheit des FC3 Freezers ist der sogenannte Game Trainer. Dieser kann bestimmte Speicherbereiche überwachen und Cheats erlauben, indem er Zugriff auf CIA- und VIC-II-Register überwacht und entsprechende Maschinencode-Instruktionen durch eigene Routinen ersetzt. Damit erlaubt der Cartridge Eingriffe und Veränderungen am Spielablauf in Echtzeit. Allerdings führt die Aktivierung des Game Trainers dazu, dass das System nicht mehr korrekt von Diskette lesen kann – ein kleiner Preis für die Erweiterte Funktionalität. Abschließend beeindruckt der Final Cartridge III Freezer nicht nur durch seine technische Raffinesse, sondern auch durch die umfassende Kenntnis der Entwickler über die Atari-ähnliche 6510-CPU, die C64-Speicherstrukturen und die Geheimnisse des VIC-II Grafikchips.
Trotz fehlender moderner Debug-Tools der damaligen Zeit gelang es, ein nahezu nahtlos funktionierendes und benutzerfreundliches System zu schaffen, das es Hobbyisten, Programmierern und Spielern erlaubte, ihre Software zu kontrollieren, zu sichern und weiterzuentwickeln. Dieses Zusammenspiel aus Hardwaretricks, Softwareanpassungen und dem Ausnutzen von versteckten Maschinenfähigkeiten machte den FC3 Freezer zu einem Meilenstein der Heimcomputerära und sicherte dem Commodore 64 eine längere Relevanz und Vielseitigkeit als es ursprünglich zu erwarten gewesen wäre.