Die untere Sprungleiste des MAIN FIRMWARE JUMPBLOCK: KERNEL Die Firmware des Schneider CPC: KERNELKernel
Kaltstart, totaler Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: Reset Erklärung zu den Anschluss-Bezeichnungen: RESET Erklärung der Anschlussbelegung: Reset Erklärung zu den Bezeichnungen: RESET Erklärungen zu den Anschlussbezeichnungen: RESET Erläuterung zu den Anschlüssen 40 bis 45: 41 - RESET (0)Reset.
Eingaben: keine
Ausgaben: Routine kehrt nicht zurück
Unverändert: -/-
Die Hardware wird (fast) vollständig zurückgesetzt, die Die Firmware des Schneider CPCFirmware komplett initialisiert und dann das Vordergrund-Programm in Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM 0 (Einleitung: BASIC Anhang: BasicBasic) gestartet.
Im CPC 6128 wird zusätzlich die normale RAM-Bank angewählt.
Die ICs im Überblick: Der FDC 765 Das Innenleben der CPC-Rechner: Der FDC 765Der FDC kann nicht 100%ig zurückgesetzt werden, da sein Reset-Eingang nur mit dem Einschalt-Reset verbunden ist. Hat man ihn beispielsweise auf DMA-Modus eingestellt, hilft nur noch Aus- und Wiedereinschalten des Computers:
OUT &FB7F,3 ' Laufwerks-Parameter setzen
OUT &FB7F,0
OUT &FB7F,0 ' u. Operationen: BD5B / 349A / 349A: FLO SUBA. DMA-Betrieb
CAT ' Böser Ärger
CTRL/SHIFT/ESCAPE ' wieder Ruhe
CAT ' Nach wie vor: Böser Ärger
Wie man sieht, hält sich Amstrad auch nicht an die selbst erfundenen Regeln.
Sprung zu einer Routine im unteren Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM oder RAM mit Angabe des gewünschten ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status und Routinenadresse in einem nachgestellten 'DEFW xxxx'.
Eingaben: 2-Byte-Inline-Adresse
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
Anwendung:
Speicheraufteilung durch ein Vordergrund-Programm: RST 3 LOW KERNEL JUMPBLOCK: 0000 - RST 0: LOW RESET ENTRY LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMP LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALL LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALL LOW KERNEL JUMPBLOCK: 0020 - RST 4: LOW RAM LAM LOW KERNEL JUMPBLOCK: 0028 - RST 5: LOW FIRM JUMP LOW KERNEL JUMPBLOCK: 0030 - RST 6: LOW USER RESTART LOW KERNEL JUMPBLOCK: 0038 - RST 7: LOW INTERRUPT ENTRYRST 1 ; erweiterter JP-Befehl
DEFW ADRESSE+&8000+&4000
Dem ROM-Konfiguration: RestartsRestart wird ein 2-Byte-Vektor mit einer Adresse im unteren Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM oder RAM angehängt. Port B - Input: &F5xx: Bits 1, 2 und 3: Port C - Output: &F6xx: Bit 6 und 7:Bits 14 und 15 der Adresse sind dabei immer Real: NullNull. Diese Datenbreite: Bits Port B - Input: &F5xx: Bit 0: Port B - Input: &F5xx: Bit 4: Port B - Input: &F5xx: Bit 5: Port B - Input: &F5xx: Bit 6: Port B - Input: &F5xx: Bit 7: Port C - Output: &F6xx: Bit 4: Port C - Output: &F6xx: Bit 5:Bits werden vom ROM-Konfiguration: RestartsRestart 1 als ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status interpretiert:
Datenbreite: Bits Port B - Input: &F5xx: Bit 0: Port B - Input: &F5xx: Bit 4: Port B - Input: &F5xx: Bit 5: Port B - Input: &F5xx: Bit 6: Port B - Input: &F5xx: Bit 7: Port C - Output: &F6xx: Bit 4: Port C - Output: &F6xx: Bit 5:Bit 14 = 0 -> unten (bis &3FFF) Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM einblenden
Datenbreite: Bits Port B - Input: &F5xx: Bit 0: Port B - Input: &F5xx: Bit 4: Port B - Input: &F5xx: Bit 5: Port B - Input: &F5xx: Bit 6: Port B - Input: &F5xx: Bit 7: Port C - Output: &F6xx: Bit 4: Port C - Output: &F6xx: Bit 5:Bit 14 = 1 -> unten das Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM ausblenden
Datenbreite: Bits Port B - Input: &F5xx: Bit 0: Port B - Input: &F5xx: Bit 4: Port B - Input: &F5xx: Bit 5: Port B - Input: &F5xx: Bit 6: Port B - Input: &F5xx: Bit 7: Port C - Output: &F6xx: Bit 4: Port C - Output: &F6xx: Bit 5:Bit 15 = 0 -> oben (ab &C000) das selektierte Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM einblenden
Datenbreite: Bits Port B - Input: &F5xx: Bit 0: Port B - Input: &F5xx: Bit 4: Port B - Input: &F5xx: Bit 5: Port B - Input: &F5xx: Bit 6: Port B - Input: &F5xx: Bit 7: Port C - Output: &F6xx: Bit 4: Port C - Output: &F6xx: Bit 5:Bit 15 = 1 -> oben das Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM ausblenden
Dieser Vektor simuliert den Z80-Befehl 'JP_ADRESSE', nur dass er auch noch den ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status wie gewünscht einstellt. Es werden keine Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register verändert.
Ausgenommen davon ist Die CPU Z80: Der zweite Registersatz ROM-Konfiguration: der zweite Registersatzder zweite Registersatz: Alle ROM-Konfiguration: RestartsRestarts schalten mit 'EXX' die beiden Registersätze um, um notwendige Die Fließkomma-Routinen: OperationenOperationen durchführen zu können, ohne die normalen Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register zu verändern. Deshalb muss auch immer der Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt verboten und nachher wieder zugelassen werden. Alle ROM-Konfiguration: RestartsRestarts schalten deshalb den Hardware-Interrupt wieder ein!
Kehrt die so angesprungene Routine mit 'RET' wieder zurück, so läuft sie in eine manipulierte Rücksprungsadresse, die zuerst den alten ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status wieder herstellt.
Auch hierbei werden Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts wieder zugelassen, andererseits aber keine Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register verändert. Die zurückgegebenen Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register stammen alle von der aufgerufenen Routine.
Dieser ROM-Konfiguration: RestartsRestart ist für den Einsatz in Sprungleisten im RAM gedacht und wird im Firmware-Jumpblock exzessiv genutzt.
Sprung zu einer Routine im unteren Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM oder RAM mit Angabe der gewünschten Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration und Adresse im HL-Register.
Eingaben: HL = ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status und Routinenadresse
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
Dieser Vektor entspricht fast völlig dem &08 LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMPLOW LOW JUMP. Die Routinenadresse muss jedoch im HL-Register übergeben werden. Es können also nur Routinen angesprungen werden, die im HL-Register keine Eingabe-Parameter erwarten.
JP (BC)
Eingaben: BC = Routinenadresse
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
An dieser Stelle stehen die beiden Z80-Befehle:
000LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTIONE PUSH BC
000F RET
wodurch der Sprung zur angegebenen Adresse erreicht wird.
Aufruf einer Routine in einem benachbarten oberen Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM mit Angabe der 'Distanz' und Adresse in einem nachgestellten 'DEFW xxxx'.
Eingaben: 2-Byte-Inline-Adresse
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX
Anwendung:
Speicheraufteilung durch ein Vordergrund-Programm: RST 3 LOW KERNEL JUMPBLOCK: 0000 - RST 0: LOW RESET ENTRY LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMP LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALL LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALL LOW KERNEL JUMPBLOCK: 0020 - RST 4: LOW RAM LAM LOW KERNEL JUMPBLOCK: 0028 - RST 5: LOW FIRM JUMP LOW KERNEL JUMPBLOCK: 0030 - RST 6: LOW USER RESTART LOW KERNEL JUMPBLOCK: 0038 - RST 7: LOW INTERRUPT ENTRYRST 2 ; erweiterter CALL-Befehl
DEFW OFFSET*&4000 + Adresse-&C000
Für Modul-Programme, die den Rahmen eines 16k-Eproms sprengen, unterstützt der MAIN FIRMWARE JUMPBLOCK: KERNEL Die Firmware des Schneider CPC: KERNELKernel bis zu 3 Erweiterungs-ROMs pro Vordergrund-ROM. Programme können so bis zu 64 kByte Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM umfassen.
Beim Ein- und Aussprung werden wieder alle Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register bis auf IY von und zur gerufenen Routine weitergegeben. Das gewünschte Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM wird angewählt (selektiert) und eingeblendet und das untere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM mit dem Betriebssystem ausgeblendet. Der Stack wird dabei so manipuliert, dass die aufgerufene Routine, sobald sie mit 'RET' abschließt, zuerst noch in eine andere Routine läuft, die die alte Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration wieder herstellt.
Der ROM-Konfiguration: RestartsRestart 2 simuliert einen erweiterten 'Maschinencode über HIMEM: CALLCALL'-Befehl. Das angehängte Datenbreite: WordsWord enthält dabei die gewünschte Routinenadresse. Da der SIDE Maschinencode über HIMEM: CALLCALL nur für den oberen Speicherblock (ab &C000) zulässig ist, wären die Port B - Input: &F5xx: Bits 1, 2 und 3: Port C - Output: &F6xx: Bit 6 und 7:Bits 14 und 15 immer gesetzt. In diesen Datenbreite: Bits Port B - Input: &F5xx: Bit 0: Port B - Input: &F5xx: Bit 4: Port B - Input: &F5xx: Bit 5: Port B - Input: &F5xx: Bit 6: Port B - Input: &F5xx: Bit 7: Port C - Output: &F6xx: Bit 4: Port C - Output: &F6xx: Bit 5:Bits kann deshalb ein ROM-Nummern-Offset angegeben werden.
Bezugspunkt ist dabei die ROM-Nummer des laufenden Vordergrund- Programmes. Umfasst ein Programm-Paket beispielsweise 4 Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROMs (4*16k = 64k), so darf nur das erste als Vordergrund-ROM markiert werden (ROM-Software: ROM-TypenROM-Typ im ersten Datentypen: Bytes Datenbreite: BytesByte = Adresse &C000). Die anderen drei Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROMs müssen die nächsten folgenden ROM-Select-Adressen belegen und erhalten eine Kennung als Erweiterungs-ROM.
Wird das Vordergrund-Programm gestartet, merkt sich der MAIN FIRMWARE JUMPBLOCK: KERNEL Die Firmware des Schneider CPC: KERNELKernel die ROM-Adresse, die dem Programm selbst vollkommen unbekannt bleiben kann (-> unbekannter Modulschacht). Soll eine Routine im 2. Erweiterungs-ROM aufgerufen werden, geht das einfach via SIDE Maschinencode über HIMEM: CALLCALL: Die obersten beiden Datenbreite: Bits Port B - Input: &F5xx: Bit 0: Port B - Input: &F5xx: Bit 4: Port B - Input: &F5xx: Bit 5: Port B - Input: &F5xx: Bit 6: Port B - Input: &F5xx: Bit 7: Port C - Output: &F6xx: Bit 4: Port C - Output: &F6xx: Bit 5:Bits erhalten den ROM-Offset 2 (=&X10). Diese Routine selbst kann nun ein Grundlagen: UnterprogrammeUnterprogramm im ersten Erweiterungs-ROM aufrufen: ROM-Offset ist jetzt 1 (&X01). Und so weiter.
Aufruf einer Routine in einem benachbarten oberen Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM mit Angabe der 'Distanz' und Adresse im HL-Register.
Eingaben: HL = Routinenadresse + ROM-Offset
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX
Dieser Vektor entspricht fast völlig dem vorhergehenden &0010 LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALLLOW SIDE CALL. Der einzige Unterschied liegt in der Übergabe der Routinenadresse, die hier im HL-Register erfolgt. Über diesen Vektor können deshalb keine Routinen aufgerufen werden, die im HL-Register Basic und Maschinencode: ParameterParameter erwarten.
JP (DE)
Eingaben: DE = Routinenadresse
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
Diese Routine springt zur im DE-Register angegebenen Adresse. Diese wird durch die folgenden beiden Befehle erreicht:
0016 PUSH DE
0017 RET
Aufruf einer Routine im RAM oder jedem beliebigen Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM. ROM-Konfiguration: ROM-Selektion Anschluss eines Zusatz-ROM: ROM-SelektionROM-Selektion und Adresse werden indirekt über ein nachgestelltes 'DEFW xxxx' angezeigt.
Eingaben: ein inline angegebener Vektor zeigt auf die 3-Datentypen: Bytes Datenbreite: BytesByte FAR ADDRESS
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX
Anwendung:
Speicheraufteilung durch ein Vordergrund-Programm: RST 3 LOW KERNEL JUMPBLOCK: 0000 - RST 0: LOW RESET ENTRY LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMP LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALL LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALL LOW KERNEL JUMPBLOCK: 0020 - RST 4: LOW RAM LAM LOW KERNEL JUMPBLOCK: 0028 - RST 5: LOW FIRM JUMP LOW KERNEL JUMPBLOCK: 0030 - RST 6: LOW USER RESTART LOW KERNEL JUMPBLOCK: 0038 - RST 7: LOW INTERRUPT ENTRYRST 3 ; erweiterter CALL-Befehl
DEFW FARADR ; Zeiger auf die FAR ADDRESS
...
FARADR: DEFW ADRESSE ; Routinenadresse
DEFB ROMKONFIG ; benötigte Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration
Dieser ROM-Konfiguration: RestartsRestart ist das Arbeitspferd unter den 'Befehlserweiterungen' für Anhang: Die Z80die Z80. Hiermit lässt sich jede Routine in jedem Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM aufrufen.
An den ROM-Konfiguration: RestartsRestart muss dabei direkt ein Zeiger auf die sogenannte FAR ADDRESS angehängt werden. Hier steht dann die Routinenadresse und ein Datentypen: Bytes Datenbreite: BytesByte, das die Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration bestimmt.
Auch bei diesem ROM-Konfiguration: RestartsRestart werden alle Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register unberührt hin- und zurückgegeben. Ausgenommen davon ist nur wieder das IY-Register: Wird eine Routine in einem Speicheraufteilung durch ein Vordergrund-Programm: Hintergrund-ROMsHintergrund-ROM aufgerufen, so wird auf dem Hinweg das IY auf die Untergrenze seines oberen RAM-Bereiches gesetzt. Das ist der Wert, der nach der Initialisierung des Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROMs mit &KERNEL: BCCE: KL INIT BACKBCCE KL INIT BACK im HL-Register zurückgegeben wird.
Auch hier wird wieder der Stack so manipuliert, dass nach dem 'RET' der aufgerufenen Routine zuerst noch die alte Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM- Konfiguration wieder hergestellt wird.
Das Konfigurationsbyte in der FAR ADDRESS kann dabei auf zwei unterschiedliche Weisen interpretiert werden: Für Werte von 0 bis 251 wird das Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM mit dieser Nummer selektiert, eingeblendet und unten das Betriebssystems-ROM ausgeblendet. Existiert kein externes Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM an der angegebenen Position, so wird automatisch das eingebaute Basic-ROM angewählt.
Bei Werten größer als 251 wird kein neues Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM angewählt, sondern nur der ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status geändert:
252 -> unten Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM - oben Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM
253 -> unten RAM - oben Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM
254 -> unten Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM - oben RAM
255 -> unten RAM - oben RAM
Aufruf einer Routine in RAM oder jedem beliebigen Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM. Die Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register C und HL enthalten die gewünschte ROM-Konfiguration: ROM-Selektion Anschluss eines Zusatz-ROM: ROM-SelektionROM-Selektion und Adresse.
Eingaben: HL = Routinenadresse
C = Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX
Dieser Vektor entspricht wieder dem vorhergehenden LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALLRST_3 FAR Maschinencode über HIMEM: CALLCALL. Einziger Unterschied liegt wieder in der Übergabe der Routinenadresse, wofür diesmal die Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register HL und C herhalten müssen. Mit diesem Vektor können also keine Routinen aufgerufen werden, die in HL oder C Eingabeparameter erwarten.
JP (HL)
Eingaben: HL = Routinenadresse
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
An dieser Stelle steht lediglich der Z80-Befehl 'JP (HL)'. Dieser Vektor ist, wie &0LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTIONE LOW PCBC INSTRUCTION und &16 LOW KERNEL JUMPBLOCK: 0016: LOW PCDE INSTRUCTIONLOW PCDE INSTRUCTION sinnvoll, weil man durch Aufruf dieses Vektors (Maschinencode über HIMEM: CALLCALL #001E) den nicht existenten Z80-Befehl 'Maschinencode über HIMEM: CALLCALL (HL)' simulieren kann.
LD Operationen: BD5B / 349A / 349A: FLO SUBA,(HL) aus dem RAM.
Eingaben: HL = RAM-Adresse
Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Inhalt dieser Speicherzelle
Unverändert: F,BC,DE,HL,IX,IY
Dieser ROM-Konfiguration: RestartsRestart gibt ROM-Programmen eine bequeme Möglichkeit, unabhängig vom aktuellen ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status aus dem RAM zu lesen. Dieser ROM-Konfiguration: RestartsRestart ersetzt dabei den Z80-Befehl 'LD Operationen: BD5B / 349A / 349A: FLO SUBA,(HL)'.
Ein entsprechender Vektor zum Beschreiben des RAM ist nicht notwendig, da die jeweils eingestellte Die Speicherkonfiguration im Schneider CPC: ROM-KonfigurationROM-Konfiguration nur die Lesebefehle der Die ICs im Überblick: Die CPU Z80 Das Innenleben der CPC-Rechner: Die CPU Z80 Die Anschlussbelegungen der wichtigsten ICs im CPC: Die CPU Z80CPU beeinflussen. Schreibbefehle gehen immer an das eingebaute RAM.
Aufruf einer Routine in RAM oder jedem beliebigen Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM. ROM-Selection und Adresse werden vom HL-Register angezeigt.
Eingaben: HL zeigt auf die 3-Datentypen: Bytes Datenbreite: BytesByte FAR ADDRESS
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX
Auch dieser Vektor entspricht dem ROM-Konfiguration: RestartsRestart 3 FAR Maschinencode über HIMEM: CALLCALL. Der Unterschied ist wieder die Art, wie die Routinenadresse übergeben wird. Diesmal wird das HL-Register benutzt, um auf die FAR ADDRESS zu zeigen. Das HL-Register kann also wieder nicht benutzt werden, um Basic und Maschinencode: ParameterParameter zur aufgerufenen Routine zu übergeben.
Sprung zu einer Routine im unteren Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM. Die gewünschte Adresse wird in einem 'DEFW xxxx' angehängt.
Eingaben: inline angegebener Vektor zur Routine
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
Anwendung:
Speicheraufteilung durch ein Vordergrund-Programm: RST 3 LOW KERNEL JUMPBLOCK: 0000 - RST 0: LOW RESET ENTRY LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMP LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALL LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALL LOW KERNEL JUMPBLOCK: 0020 - RST 4: LOW RAM LAM LOW KERNEL JUMPBLOCK: 0028 - RST 5: LOW FIRM JUMP LOW KERNEL JUMPBLOCK: 0030 - RST 6: LOW USER RESTART LOW KERNEL JUMPBLOCK: 0038 - RST 7: LOW INTERRUPT ENTRYRST 5 ; erweiterter JP-Befehl
DEFW ADRESSE
Die angegebene Routine wird aufgerufen, wobei wieder alle Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register von und zur Routine unverändert weitergereicht werden.
Bevor die Routine angesprungen wird, wird das untere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM eingeblendet (Die Routine selbst kann dabei durchaus über &4000 liegen!). Nachher wird das untere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM immer (!) ausgeblendet, unabhängig vom alten ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status. Normalerweise ist das unkritisch, da beim 'Standard-CPC-Betrieb' das Betriebssystem-ROM immer ausgeschaltet sein soll.
Schreibt man aber ein Programm so, dass das untere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM die meiste Zeit eingeblendet ist, muss man beim Aufruf einiger Vektoren, die diesen ROM-Konfiguration: RestartsRestart benutzen, Vorsicht walten lassen.
Vom Betriebssystem nicht benutzt. Der ROM-RST 6 speichert jedoch den momentanen RAM- und ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status in Adresse &2LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPTB, blendet RAM ein und springt den RAM-RST 6 an.
Eingaben: ?
Ausgaben: ?
Unverändert: ?
Dieser ROM-Konfiguration: RestartsRestart kann von einem Vordergrund-Programm mit einer eigenen Aufgabe versehen werden. Da man Änderungen am Maschinencode an dieser Stelle nur im RAM vornehmen kann, wurde ein spezieller Mechanismus implementiert: Der ROM-RST_6 speichert den aktuellen ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status in der Speicherstelle &2LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPTB, blendet das untere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM aus und wiederholt den ROM-Konfiguration: RestartsRestart. Dadurch kann man einerseits unabhängig vom ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status auf den ROM-Konfiguration: RestartsRestart 6 zugreifen und andererseits nach Beendigung dieser Routine den alten ROM-Konfiguration: ROM-Status Anschluss eines Zusatz-ROM: ROM-StatusROM-Status wiederherstellen. Denkbar ist beispielsweise der Einsatz dieses ROM-Konfiguration: RestartsRestarts als Breakpoint in einem Maschinensprache-Monitor.
Anhang: Die Z80Die Z80 wird im Die CPU Z80: Die verschiedenen Interrupt-Modi der Z80 Die verschiedenen Interrupt-Modi der Z80: IM0 - Interrupt-Modus 0 Die verschiedenen Interrupt-Modi der Z80: IM1 - Interrupt-Modus 1 Die verschiedenen Interrupt-Modi der Z80: IM2 - Interrupt-Modus 2Interrupt-Modus 1 betrieben. Das heißt, dass sie mit jeder Interrupt-Anforderung einen Speicheraufteilung durch ein Vordergrund-Programm: RST 3 LOW KERNEL JUMPBLOCK: 0000 - RST 0: LOW RESET ENTRY LOW KERNEL JUMPBLOCK: 0008 - RST 1: LOW LOW JUMP LOW KERNEL JUMPBLOCK: 0010 - RST 2: LOW SIDE CALL LOW KERNEL JUMPBLOCK: 0018 - RST 3: LOW FAR CALL LOW KERNEL JUMPBLOCK: 0020 - RST 4: LOW RAM LAM LOW KERNEL JUMPBLOCK: 0028 - RST 5: LOW FIRM JUMP LOW KERNEL JUMPBLOCK: 0030 - RST 6: LOW USER RESTART LOW KERNEL JUMPBLOCK: 0038 - RST 7: LOW INTERRUPT ENTRYRST 7 ausführt.
Eingaben: keine
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
Jeder Hardware-Interrupt führt zu einem Die CPU Z80: Unterprogramm-AufrufeUnterprogramm-Aufruf an dieser Stelle. Die Behandlungs-Routine muss zunächst zwischen einem normalen Timer-Interrupt der Die ICs im Überblick: Die ULA 40007, 40008 oder 40010 Die Anschlussbelegungen der wichtigsten ICs im CPC: Die ULA 40007 und 40008 (CPC 464 und 664) Die Anschlussbelegungen der wichtigsten ICs im CPC: Die ULA 40010 (CPC 6128)ULA und einer möglichen Interrupt-Anforderung eines externen Gerätes unterscheiden. Dazu wird in der Interrupt-Routine sofort ein Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt kurzzeitig wieder zugelassen. Liegt das Interrupt-Signal immer noch an, so wird der Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt wieder unterbrochen, woran letztendlich ein externer Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt erkannt wird.
Wenn nicht, war es ein normaler Timer-Interrupt. Dann wird ein Zähler erhöht und die ein oder andere Datenspeicherung und Datenstrukturen: ChainsCHAIN für die Software- Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts abgearbeitet. Vom MAIN FIRMWARE JUMPBLOCK: KERNEL Die Firmware des Schneider CPC: KERNELKernel selbst werden hier folgende Bloecke eingehängt:
- Der Key Manager: Tastatur-AbfrageTastatur-Abfrage (TICKER)
- Farbblinken (FRAME FLYBACK)
Erkennt der MAIN FIRMWARE JUMPBLOCK: KERNEL Die Firmware des Schneider CPC: KERNELKernel ein Interrupt-Signal von einer Erweiterung am Die Anschlüsse am Schneider CPC: Der Expansion-Port (Systembus)Systembus, so wird diese Adresse angesprungen.
Eingaben: keine
Ausgaben: keine
Unverändert: IX,IY
Erkennt die normale Interrupt-Routine eine externe Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt- Anforderung, so wird das untere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM ausgeblendet und dieser Vektor angesprungen.
Die hier installierte Routine sollte:
• nicht gepatcht werden, ohne vorher eine Kopie des alten Eintrages an dieser Stelle (5 Datentypen: Bytes Datenbreite: BytesBytes) gemacht zu haben. Dieser Vektor muss deshalb ortsunabhängig sein. • nachschauen, ob der Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt auch wirklich für sie ist. Wenn nicht, dann muss die Kopie des Vektors aufgerufen werden. • den Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt löschen. • keinesfalls einen Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt wieder zulassen oder ein Die Tonausgabe: Das Kontrollregister (Reg. 7) Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)Register dauerhaft ändern außer: AF, BC, DE und HL. • möglichst schnell abschließen, damit möglichst keine Timer-Interrupts ausgelassen werden.
Nach Möglichkeit sollte in der Interrupt-Routine selbst nur ein Der Kernel - Software-Interrupts: EventsEVENT gekickt werden: &KERNEL: BCF2: KL EVENTBCF2 KL EVENT.
|