Die Sprungleisten des BetriebssystemsPatchen von VektorenDas Patchen muss dabei so lautlos wie möglich über die Buehne gehen. Auf die Vektoren greift beim Schneider CPC ja nicht nur ein einziges Programm zu. Hier können gleichzeitig ein Vordergrund- und beliebig viele Hintergrund-Programme im Speicher vorhanden sein, die alle Routinen des Betriebssystems benutzen können. Änderungen, die man für das eine Programm vorgesehen hat, können katastrophale Folgen für ein anderes Programm nach sich ziehen, wenn dieses den veränderten Vektor benutzen will. Die ursprüngliche 'Modul'-Beschreibung des gepatchten Vektors darf möglichst nicht geändert werden: Eingabe - Die Fließkomma-Routinen: FunktionenFunktion - Ausgabe
Zur Ein- und Ausgabe gehören dabei die Beschreibung der Register-Schnittstellen: • In welchen Registern werden welche Eingaben erwartet?
• In welchen Registern werden welche Ausgaben gemacht?
• Welche Die Tonausgabe: Das Kontrollregister (Reg. 7)
Auch die Die Fließkomma-Routinen: FunktionenFunktion muss möglichst die gleiche bleiben. Wenn man einen Vektor für die Textausgabe zum Ansteuern des Sound-ICs umwidmet, wird man sich sehr wahrscheinlich nicht mehr mit dem Computer 'unterhalten' können, weil alle Antworten, die auf dem Bildschirm dargestellt werden sollten, in ein unverständliches Pfeifkonzert umgesetzt werden. Trotzdem ist aber immer gerade die Die Fließkomma-Routinen: FunktionenFunktion eines Vektors, die durch einen Patch geändert werden soll. Die Änderung muss sich eben nur in Grenzen Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: Halthalten. So ist es beispielsweise eine beliebte Idee, die Textausgabe vom Bildschirm auf den Drucker umzulenken, um beispielsweise auch einmal einen Disketten-Katalog zu Papier bringen zu können. Die bekanntesten Patches werden wohl von Die Abteilungen des Betriebssystems: AmsdosAmsdos vorgenommen. Viele Vektoren zum MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER Beim Patchen sind dabei folgende Punkte zu beachten: • Es dürfen keine zusätzlichen Eingaben erwartet werden. Man kann allerdings weniger verlangen, als der Original-Eintrag. • Alle Ausgaben, die vom Original-Eintrag gemacht wurden, müssen auch vom Patch an das aufrufende Programm zurückgeliefert werden. • Alle Die Tonausgabe: Das Kontrollregister (Reg. 7) • Es sollten keine völlig sinnentstellende Änderungen an einzelnen Vektoren vorgenommen werden. Darüber hinaus gibt es noch einige praktische Erwägungen. So ist es oft sinnvoll, den alten Eintrag zu retten. Dann kann man eine Änderung zu einem späteren Zeitpunkt auch wieder rückgängig machen. Oder man kann die Original-Routine noch mitbenutzen, nachdem man beispielsweise einige Vorarbeiten oder zusätzliche Erklärung der Anschlussbelegung: TestTests vorgenomen hat. • Meist ist es sinnvoll, den alten Vektor zu retten, bevor man seinen Patch installiert. Deshalb müssen auch alle Vektoren ortsunabhängig sein. Ein normaler Z80-Sprungbefehl ist das. Adressierungsarten der Z80: RelativRelative Sprünge in Vektoren sind nicht sehr ratsam. • Der Patch muss ortsunabhängig (position independant) sein. Achtung: Die von Die Abteilungen des Betriebssystems: AmsdosAmsdos gepatchten Vektoren sind nicht ortsunabhängig !! Wer so genial saublöd gepatchte Vektoren wie die von Die Abteilungen des Betriebssystems: AmsdosAmsdos erneut patchen will, muss einigen Umstand in Kauf nehmen, wenn er die 'Original'-Amsdos-Vektoren noch mitbenutzen will. Das muss dann etwa so vor sich gehen: • Initialisieren: Alten (Die Abteilungen des Betriebssystems: AmsdosAmsdos-) Vektor retten, eigenen Vektor eintragen. • Wenn jetzt die eigene Routine aufgerufen wurde: Es ist nicht gerade vorbildlich, wie man sich hier bei Amstrad über die selbst erfundenen Spielregeln hinwegsetzte. Katalog auf dem DruckerDas folgende Beispiel-Programm erstellt einen Disketten-Katalog auf dem Drucker. Das Ganze ist als eine RSX-Erweiterung eingebunden und wird in Einleitung: BASIC Die zugehörige Routine patcht zunächst den Textausgabe-Vektor TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT, so dass Ausgaben für den Bildschirm zum Drucker umgeleitet werden. Danach wird ein Der Cassette Manager: KatalogKatalog angefordert, wofür der Vektor MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER Nachdem der Der Cassette Manager: KatalogKatalog ausgegeben wurde, wird der alte Vektor in TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT wieder restauriert. Dieses Programm ist jedoch nicht geeignet, auch einen Kassetten-Katalog zu erstellen. Die Katalog-Routine des Cassette Managers ruft nämlich, anders als Die Abteilungen des Betriebssystems: AmsdosAmsdos, nicht den Vektor für TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT, sondern diese Routine direkt auf. Das Assembler-Programm ist auch gleich mit dem Z80-Relocater zusammengebunden, so dass man sich hier noch einmal seine Z80-Relocalisitor: FunktionsweiseFunktionsweise anschauen kann. ; RSX-Erweiterung für einen Disketten-Katalog auf dem Drucker. ; ------------------------------------------------------------- ; ORG 30000 ; ; 0. Label-Deklarationen ; LOGEXT: EQU #BCD1 ; KERNEL: BCD1: KL LOG EXTKL LOG EXT CASCAT: EQU #BC9B ; MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER In der Ersatzroutine DRUOUT muss das AF-Doppelregister gerettet werden. Der Grund ist die Schnittstellenbeschreibung von TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT und MACHINE PACK: BD2B: MC PRINT CHARMC PRINT CHAR. Der Vektor TEXT VDU: BB5A: TXT OUTPUTTXT OUTPUT verändert keine Die Tonausgabe: Das Kontrollregister (Reg. 7) |