Das Schneider CPC Systembuch

Die Firmware des Schneider CPC

LOW KERNEL JUMPBLOCK

Die untere Sprungleiste des MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel

0000 - RST 0: LOW RESET ENTRY

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: Basic
Basic
) 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 765
Der 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.

0008 - RST 1: LOW LOW JUMP

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-Status
ROM-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 ENTRY
RST
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-Status
ROM-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-Status
ROM-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 Registersatz
der 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-Status
ROM-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.

000B: LOW KL LOW PCHL

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-Status
ROM-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.

000E: LOW PCBC INSTRUCTION

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 INSTRUCTION
E
PUSH BC 000F RET

wodurch der Sprung zur angegebenen Adresse erreicht wird.

0010 - RST 2: LOW SIDE CALL

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 ENTRY
RST
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: KERNEL
Kernel
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: Bytes
Byte
= Adresse &C000). Die anderen drei 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: KERNEL
Kernel
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.

0013: LOW KL SIDE PCHL

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.

0016: LOW PCDE INSTRUCTION

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

0018 - RST 3: LOW FAR CALL

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-Selektion
ROM-Selektion
und Adresse werden indirekt über ein nachgestelltes 'DEFW xxxx' angezeigt.

Eingaben:    ein inline angegebener Vektor zeigt auf die 3-Datentypen: Bytes
Datenbreite: Bytes
Byte
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 ENTRY
RST
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: Bytes
Byte
, 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-Status
ROM-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

001B: LOW KL FAR PCHL

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-Selektion
ROM-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.

001E: LOW PCHL INSTRUCTION

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.

0020 - RST 4: LOW RAM LAM

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-Status
ROM-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 Z80
CPU
beeinflussen. Schreibbefehle gehen immer an das eingebaute RAM.

0023: LOW KL FAR ICALL

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: Bytes
Byte
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.

0028 - RST 5: LOW FIRM JUMP

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 ENTRY
RST
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-Status
ROM-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.

0030 - RST 6: LOW USER RESTART

Vom Betriebssystem nicht benutzt. Der ROM-RST 6 speichert jedoch den momentanen RAM- und ROM-Konfiguration: ROM-Status
Anschluss eines Zusatz-ROM: ROM-Status
ROM-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 INTERRUPT
B
, 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-Status
ROM-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 INTERRUPT
B
, 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-Status
ROM-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-Status
ROM-Status
wiederherstellen. Denkbar ist beispielsweise der Einsatz dieses ROM-Konfiguration: RestartsRestarts als Breakpoint in einem Maschinensprache-Monitor.

0038 - RST 7: LOW INTERRUPT ENTRY

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 2
Interrupt-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 ENTRY
RST
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: KERNEL
Kernel
selbst werden hier folgende Bloecke eingehängt:

- Der Key Manager: Tastatur-AbfrageTastatur-Abfrage (TICKER)
- Farbblinken (FRAME FLYBACK)

003B: LOW EXT INTERRUPT

Erkennt der MAIN FIRMWARE JUMPBLOCK: KERNEL
Die Firmware des Schneider CPC: KERNEL
Kernel
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: Bytes
Bytes
) 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.

Valid HTML   Valid CSS