Wirf mal einen Blick in das ROM-Listing zum C16/116/+4 bon Markt und Technik (Autor wimre Ch. Q. Spitzner) sowie das TED-Datenblatt (auf zimmers zu finden)
Was die Hardware angeht: sta $ff3e schaltet für die CPU das ROM ein, sta $ff3f das RAM, jeweils die vollen 32k. Der Inhalt von A ist dabei egal. In den TED-Registern gibt es dann noch ein Bit(r/o), das den aktuellen Status anzeigt. Das zitierte FF12 Bit 2 schaltet die TED-Zugriffe in den oberen 32k auf RAM bzw. ROM um.
Ein sta $fddx schaltet die ROM-Bänke; die unteren Bit von x geben dabei die Konfiguration des einen Blocks an (iirc den unteren von $8000 bis $bfff), die oberen zwei Bit von x den oberen Block von $c000 bis $ffff. Gewählt wird dabei System-ROM (BASIC/Kernal), internal function rom (hier lebt die 3+1), cartridge rom 1 (die normalen Cartridges) und Cartridge 2 (z.B. von der speech software des V364 genutzt). Die letzten drei sind im Prinzip gleichwertig; einziger Unterscheid ist die Reihenfolge, in der sie beim Reset initialisiert werden und damit die F-Taste, auf die der Commodore-Startcode den Start-SYS-Befehl legt. Dieses Register ist nicht rücklesbar; das Kernal legt ein Schatten-Register in der erweiterten Zeropage an. Siehe das ROM-Listing.
(Edit: Die 264er-Serie unterstützt also von haus aus bis zu 128k ROM!)
Dann gibt es noch das Flag bei $7f8. Damit kann man den Monitor zwischen RAM und ROM umschalten (mit >07f8 00 bzw. >07f8 80). Wenn man zuvor im der Routine 'monitor_read_ram' (auch irgendwo in der erweiterten Z-Page) die Adressen ff3e und ff3f auf FFD0 und FFDx umpoket, kann man mit dem Monitor statt RAM die Cartridge-ROMs lesen.
Und jetzt die Kekskrümel:
fc00 bis fcff kann nur RAM oder Kernal sein; die ffdx-Logik ist hier wirkungslos.
fd00 bis ff3f ist immer i/o bzw offen, falls kein Chip an der Adresse geschaltet ist.
Im realen Betrieb sollte man immer durch die Kernal-Routinen gehen, weil das System jederzeit unvermittelt auf ROM und Kernal zurückschalten kann.