★ APPLICATIONS ★ DIVERS ★ ROM-SIEB FÜR ZUSATZ-ROMS (CPC MAGAZIN) ★ |
ROM-Sieb für Zusatz-ROMs (CPC Magazin) | Applications Divers |
Mit dieser Routine werden die vorhandenen ROMs ausgesiebt und bei der Initialisierung nur die gewünschten berücksichtigt. Wer die vortex-RAM-Erweiterung in seinen CPC einbaut, muß feststellen, daß einzelne Programme nun nicht mehr laufen. Für den Graphik Master wird von vortex eine Kurzanleitung zur Anpassung angegeben. Für andere Programme gibt es keine derartige Hilfe, sie sind zunächst wertlos geworden. Dabei dürfte die RAM-Erweiterung im Normalbetrieb überhaupt nicht stören, denn die Zusatzsoftware bleibt vollständig im ROM, bis der Startbefehl BOS gegeben wird. Aber auch im Ruhezustand muß ein Er-weiterungs-ROM vom Betriebssystem verwaltet werden. Dazu werden beim Einschalten (und bei jedem Reset) 4 Byte angelegt, die unter anderem die ROM-Nummer enthalten. Der Wert von HIMEM verschiebt sich entsprechend nach unten, so daß Programme, die HIMEM abfragen und die Abweichung von 4 Byte nicht tolerieren, schließlich ab-stürzen. Schuld haben in diesem Falle die Softwarehersteller, die die Möglichkeit von Hardwareerweiterungen nicht genügend berücksichtigt haben. Vergleichbare Probleme gab es bereits mit der Floppy. Nur daß man die Floppy ausgeschaltet lassen kann. Wer aber will die RAM-Erweiterung jedesmal wieder aus- und einbauen? Wir stellen nun eine Software-Lösung für dieses Problem vor. Dabei geht es nicht nur um die vortex-RAM-Erweiterung, sondern ebenso um jedes andere Peripheriegerät, dessen ROM den Normalbetrieb stört. Mit der angegebenen Routine werden die vorhandenen ROMs ausgesiebt (daher der Name) und nur diejenigen bei der Initialisierung berücksichtigt, die erwünscht sind. VORTEX SPEZIAL! Das Basicladeprogramm erzeugt ein Maschinenprogramm, mit dem ein Reset erzeugt werden kann (wie sonst mit CTRL, SHIFT, ESC). ROM-SIEB.BIN muß dazu an eine beliebige freie Stelle des RAM oberhalb &4000 geladen werden. Der Befehl CALL ladeadresse, r1, r2, r3, r4..... setzt dann den Rechner vollständig zurück, wobei jedoch nur ROMs, deren Nummern mit r1, r2, usw. angegeben sind, initialisiert werden und anschließend verfügbar sind. Mögliche ROM-Nummern liegen von 1 bis 7, wobei bis jetzt erst 7 (Floppy), 6 (vortex-RAM-Erweiterung) und 5 (MAXAM -Assembler) benutz werden. Falsche EingabèWfeue berücksichtigt das Programm nicht. Wird keine ROM-Nummer angegeben, bleiben alle ROMs abgeschaltet. Eine Eingabereihenfolge 5,6,7 bewirkt die normale Initialisierungsreihenfolge 7, 6, 5. Jede andere Reihenfolge ist möglich, dabei ist aber zu bedenken, daß die von den ROMs angelegten RAM-Bereiche dadurch an anderen Adressen als sonst liegen. Wird eine Nummer wiederholt (maximal 32-fach), so wird auch das ROM entsprechend oft initialisiert und damit der RAM-Bereich für dieses ROM mehrfach angelegt. Auf eine mögliche Anwendung dieser Nebeneigenschaft des ROM-SIEB-Programmes wurde in dem Beitrag "SESAM und die Indexregister" (CPC Magazin 2/86) hingewiesen. Für Experimente besteht demnach jede Gelegenheit. Der Hauptzweck der Routine wird mit dem Befehl CALL ladeadresse, 7 erfüllt. Damit steht die Floppy weiter zur Verfügung, alle anderen ROMs bleiben "kalt". Der Rechner ist in genau dem Zustand, der ohne weitere Zusätze ursprünglich bestanden hat, so daß problematische Programme wieder lauffähig sind. Bei der Entwicklung der Routine stellte sich nämlich heraus, daß das Betriebssystem des CPC 464 (und der anderen beiden) eine harte Nuß zum Knacken aufgegeben hat. Um alle Fehlerquellen zu vermeiden, war ein völliges Zurücksetzen des Betriebssystems notwendig, ein "Warmstart" hätte nicht ausgereicht. Dazu eignet sich der Firmwareeinsprung START PROGRAM (&BD16). Da in dem Reset-Ablauf erst später die vorhandenen Er-weiterungs-ROMs zugeschaltet werden, mußten die Eingabewerte für die gewünschten ROM-Nummern an einem sicheren Platz zwischengespeichert werden. Dazu wurde der Speicherbereich unmittelbar hinter ROM-SIEB.BIN gewählt. Zum Glück wird das RAM erst zum Schluß mit der Basic-Initialisierung gelöscht, so daß die Routine überhaupt arbeiten kann. ROM-SIEB ist verschiebbar. Das wurde mit einem Maschinensprachetrick erreicht (über den User-Restart 6), der hier wie die übrigen Details des Maschinenprogramms nicht weiter erklärt werden soll. Die Routine endet mit einem Sprung in die Initialisierung des Basic-ROM an die Adresse &C00C. Es erscheint die übliche Ready-Meldung und gegebenenfalls die Meldungen der mitinitialisierten ROMs. Da das RAM gelöscht wird, ist ROM-SIEB nun nicht mehr vorhanden und muß für eine weitere Anwendung neu geladen werden. Gerhard Knapienski , CPC Magazin
|