Das Schneider CPC Systembuch

Die Firmware des Schneider CPC

MACHINE PACK

Maschinennahe Routinen

BD13: MC BOOT PROGRAM

Lade und starte ein Maschinencode-Programm.

Eingaben:    HL = Adresse einer Laderoutine
Ausgaben:    -/-
Unverändert: -/-

Diese Routine kann benutzt werden, um von einem laufenden Vordergrung-Programm aus (z.LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
. Einleitung: BASIC
Anhang: Basic
Basic
) ein Maschinencode-Programm von Kassette oder Diskette zu laden.

Das Betriebssystem initialisiert zuerst einen Teil der Die Firmware des Schneider CPCFirmware, damit von hier aus keine Stoerungen des Ladevorganges auftreten können:

• Zurücksetzen von Peripheriegeräten
• Löschen aller Software-Interrupts (auch Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
Sound
)
• Default-Setzen der Überblick: Die Indirections der Firmware-Packs
Die Firmware des Schneider CPC: Die Indirections der Firmware-Packs
Indirections
und
• Initialisieren des Maschinenstapels

ROM-Auswahl und -Status werden nicht geändert. Aber Achtung: Dieser Vektor ist mit einem LOW MAIN FIRMWARE JUMPBLOCK: JUMPER
Die Firmware des Schneider CPC: JUMPER
JUMP
gebildet, der das obere Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM ausblendet (evtl. Routine aus dem Vektor herausklauben!!).

Danach wird die in HL angegebene Routine aufgerufen, um das eigentliche Programm zu laden. Sie muss in der momentanen Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM- Konfiguration direkt erreichbar sein und folgende Aussprungsbedingung erfüllen:

• CY=0 => Ladefehler
• CY=1 => o.k. und HL enthält die Einsprungsadresse des Programms

Wurde das Programm korrekt geladen (CY=1) wird das Betriebssystem komplett neu initialisiert. Andernfalls wird eine Fehlermeldung ausgegeben, und in aller Regel zu Einleitung: BASIC
Anhang: Basic
BASIC
zurückgekehrt.

BD16: MC START PROGRAM

Rufe ein Vordergrund-ROM auf.

Eingaben:    HL=Einsprungsadresse
             C=ROM-Select-Byte
Ausgaben:    -/-
Unverändert: -/-

Diese Routine kann benutzt werden, um ein Maschinenprogramm in einen Vordergrund-ROM oder im RAM (wenn dieses bereits geladen ist) zu starten.

Das Betriebssystem wird komplett zurückgesetzt und die übergebene Adresse mit einem FAR Maschinencode über HIMEM: CALLCALL angesprungen. C muss also entweder die entsprechende ROM-Nummer enthalten, mit der das benötigte Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM eingeblendet wird oder den von einem RAM-Programm benötigten ROM-Konfiguration: ROM-Status
Anschluss eines Zusatz-ROM: ROM-Status
ROM-Status
(&FC bis &FF).

BD19: MC WAIT FLYBACK

Warte bis zum nächsten Strahlrücklauf des Monitorbildes.

Eingaben:    keine
Ausgaben:    keine
Unverändert: AF,BC,DE,HL,IX,IY

Mit jedem Strahlhochlauf des Monitorbildes erzeugt der Die ICs im Überblick: Der CRTC HD 6845
Die Anschlussbelegungen der wichtigsten ICs im CPC: Der CRTC HD 6845
Die Bildausgabe: Der CRTC HD 6845
CRTC
ein Signal (VSYNC), das einerseits die Interrupt-Erzeugung des Gate Datenspeicherung und Datenstrukturen: ArraysArrays synchronisiert (und einen Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupt auslöst) und andererseits über 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
0 von Erklärung zu den Anschluss-Bezeichnungen: PB0 bis PB7 - Port B Leitungen 0 bis 7Port B der Die ICs im Überblick: Die PIO 8255
Das Innenleben der CPC-Rechner: Die PIO 8255
Speicher und Peripherie: Die PIO 8255
Die Anschlussbelegungen der wichtigsten ICs im CPC: Die PIO 8255
PIO
eingelesen werden kann.

Die Zeit, in der der Elektronenstrahl des Monitors vom Bildschirmende wieder zu dessen Anfang hochläuft, ist vergleichsweise lang und damit ideal geeignet, umfangreichere Aktionen auf dem Bildschirm durchzuführen, ohne dass es eventuell zu unangenehmen Flimmereffekten kommt.

Dieser Vektor lässt die 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
so lange im Leerlauf kreisen, bis das Ende eines Bildes auf dem Monitor erkannt wird. Wenn möglich, sollte man hierfür aber immer ein FRAME FLYBACK Der Kernel - Software-Interrupts: EventsEVENT programmieren.

BD1C: MC SET MODE

Lege den Bildschirm-Modus neu fest.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = gewünschter Bildschirm-Modus
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Der in Operationen: BD5B / 349A / 349A: FLO SUBA übergebene Wert wird geprüft, und nur wenn er im erlaubten Bereich von 0 bis 2 ist, wird der Bildschirmmodus entsprechend geändert.

MACHINE PACK: BD1C: MC SET MODEMC SET MODE informiert Die Abteilungen des Betriebssystems: Das Screen Packdas Screen Pack nicht über den neuen Bildschirm-Modus!!! Im Normalfall sollte man deshalb &SCREEN PACK: BC0E: SCR SET MODEBC0E SCR SET MODE benutzen.

BD1F: MC SCREEN OFFSET

Setze den Hardware-Scroll-Offset.

Eingaben:    HL=neuer Scroll-Offset
             Operationen: BD5B / 349A / 349A:  FLO SUBA=neues Bildschirm-Viertel
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Der Bildwiederholspeicher wird entsprechend Operationen: BD5B / 349A / 349A: FLO SUBA in ein neues RAM- Viertel gelegt. Um einen gültigen Wert zu erhalten, wird Operationen: BD5B / 349A / 349A: FLO SUBA mit &Der Zeichensatz des Schneider CPC: &C0 = 192C0 maskiert.

Außerdem wird der Hardware-Scroll-Offset entsprechend HL geändert. HL wird ebenfalss maskiert, um einen gültigen Wert zu erhalten, und zwar mit &07FE.

MACHINE PACK: BD1F: MC SCREEN OFFSETMC SCREEN OFFSET informiert Die Abteilungen des Betriebssystems: Das Screen Packdas Screen Pack ebenfalls nicht!!! Im Normalfall sollte deshalb &SCREEN PACK: BC05: SCR SET OFFSETBC05 SCR SET OFFSET oder &SCREEN PACK: BC08: SCR SET BASEBC08 SCR SET BASE benutzt werden.

BD22: MC CLEAR INKS

Setze alle Die Bildausgabe: Tinten und FarbenTinten auf eine Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
.

Eingaben:    DE zeigt auf eine Farbtabelle
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Diese Routine wird benutzt, um beim Löschen des Bildschirms (CLS) oder Screen-Mode-Wechsel (Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 1:
Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 0:
MODE
) den Eindruck zu erwecken, dass der Bildschirm ohne Verzögerung gelöscht wurde (tatsächlich dauert es aber etwa eine Achtel Sekunde, bis die 16000 Datentypen: Bytes
Datenbreite: Bytes
Bytes
des Video-RAMs gelöscht sind).

Die Farbtabelle besteht nur aus zwei Datentypen: Bytes
Datenbreite: Bytes
Bytes
:

Datentypen: Bytes
Datenbreite: Bytes
Byte
0 = Palettenfarbnummer für den Bildschirmrand (BORDER)
Datentypen: Bytes
Datenbreite: Bytes
Byte
1 = Palettenfarbnummer für alle Die Bildausgabe: Tinten und FarbenTinten (INKs)

Beim Einsatz dieser Routine muss man aber immer daran denken, dass Die Abteilungen des Betriebssystems: Das Screen Packdas Screen Pack normalerweise auf dem Frame-Flyback-Ticker einen BCEF: KL INIT EVENT: EventblockEventblock eingehängt hat, durch den im SPEED-INK-Rhythmus für alle Die Bildausgabe: Tinten und FarbenTinten (INKs) eine der beiden programmierten Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
in's Gate Datenspeicherung und Datenstrukturen: ArraysArray geschrieben wird.

BD25: MC SET INKS

Lege die Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
für alle Die Bildausgabe: Tinten und FarbenTinten neu fest.

Eingaben:    DE zeigt auf eine Farbtabelle
Ausgaben:    keine
Unverändert: BC,DE,HL,IX,IY

Dieser Vektor bildet das Pendant zu &MACHINE PACK: BD22: MC CLEAR INKSBD22 MC CLEAR INKS. Hiermit kann man auf einen Schlag allen Die Bildausgabe: Tinten und FarbenTinten und dem Border neue Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
zuordnen. Die Farbtabelle hat dabei folgendes Layout:

Datentypen: Bytes
Datenbreite: Bytes
Byte
0 = Palettenfarbnummer für den Bildschirmrand (BORDER) Datentypen: Bytes
Datenbreite: Bytes
Byte
1 = Palettenfarbnummer für Die Bildausgabe: Tinten und FarbenTinte (INK) 0 Datentypen: Bytes
Datenbreite: Bytes
Byte
2 = Palettenfarbnummer für Die Bildausgabe: Tinten und FarbenTinte (INK) 1 .... Datentypen: Bytes
Datenbreite: Bytes
Byte
16 = Palettenfarbnummer für Die Bildausgabe: Tinten und FarbenTinte 15

Dieser Vektor programmiert alle 16 Die Bildausgabe: Tinten und FarbenTinten, unabhängig vom aktuellen Bildschirmmodus. Trotzdem genügt es, nur so viele Datentypen: Bytes
Datenbreite: Bytes
Bytes
korrekt zu besetzen, wie momentan notwendig sind. Die restlichen Inks werden dann zwar auch (unvorhersehbar) verändert. Das macht aber nichts, weil sie ja nicht dargestellt werden können.

Auch hier gilt wieder zu bedenken, dass normalerweise die Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
für alle Die Bildausgabe: Tinten und FarbenTinten vom MAIN FIRMWARE JUMPBLOCK: SCREEN PACK
Die Firmware des Schneider CPC: SCREEN PACK
Screen Pack
im SPEED-INK-Rhythmus ständig neu programmiert werden, wofür sogar genau diese Routine benutzt wird.

BD28: MC RESET PRINTER

Setze die Printer-Indirections zurück.

Eingaben:    keine
Ausgaben:    keine
Unverändert: IX,IY

Die Indirection &Die Indirections der Firmware-Packs: BDF1: IND MC WAIT PRINTERBDF1 IND MAIN FIRMWARE JUMPBLOCK: MACHINE PACK
Die Firmware des Schneider CPC: MACHINE PACK
MC
Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: WaitWAIT CHAR wird auf die Standard-Routine umgebogen.

Außerdem wird Garbage Collection: ... beim CPC 664 und 6128beim CPC 664 und 6128 die Drucker-Übersetzungstabelle mit ihren Standardwerten gefüllt.

BD2B: MC PRINT CHAR

Versuche, ein Zeichen zum Drucker zu schicken.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = zu druckendes Zeichen
Ausgaben:    CY=1 => o.k.
             CY=0 => nicht gedruckt (time out)
Unverändert: BC,DE,HL,IX,IY

Dieser Vektor ruft &Die Indirections der Firmware-Packs: BDF1: IND MC WAIT PRINTERBDF1 IND MAIN FIRMWARE JUMPBLOCK: MACHINE PACK
Die Firmware des Schneider CPC: MACHINE PACK
MC
Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: WaitWAIT CHAR auf, um ein Zeichen zu drucken. Dabei wird normalerweise 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
7 von Operationen: BD5B / 349A / 349A: FLO SUBA ignoriert, weil der Centronics-Anschluss am Schneider CPC nur 7 Datenleitungen besitzt. Die Sprungleisten: die IndirectionsDie Indirection wartet, bis der Drucker nicht mehr BUSY signalisiert und druckt das Zeichen. Spätestens aber nach MAIN FIRMWARE JUMPBLOCK: CASSETTE MANAGER
Die Firmware des Schneider CPC: CASSETTE MANAGER
ca
. 0,4 Sekunden kehrt die Routine zurück, damit das druckende Programm auf BREAK o. AE. Erklärung der Anschlussbelegung: Testtesten kann.

Garbage Collection: ... beim CPC 664 und 6128Beim CPC 664 und 6128 werden alle Zeichen, die gedruckt werden sollen, vorher in der Printer-Translation-Table gesucht, und evtl. geändert, bevor &Die Indirections der Firmware-Packs: BDF1: IND MC WAIT PRINTERBDF1 IND MACHINE PACK: BD2B: MC PRINT CHARMC PRINT CHAR gerufen wird.

BD2E: MC BUSY PRINTER

Schaue nach, ob der Drucker bereit ist.

Eingaben:    keine
Ausgaben:    CY=1 => Der Drucker ist BUSY/OFF LINE oder nicht angeschlossen.
             CY=0 => Der Drucker ist bereit, ein Zeichen zu empfangen.
Unverändert: Operationen: BD5B / 349A / 349A:  FLO SUBA,BC,DE,HL,IX,IY

Vor einer Textausgabe kann man mit diesem Vektor sicherstellen, dass überhaupt ein Drucker angeschlossen ist. Im Zusammenspiel mit &MACHINE PACK: BD31: MC SEND PRINTBD31 MC SEND PRINTER kann wie mit &MACHINE PACK: BD2B: MC PRINT CHARBD2B MC PRINT CHAR ein Zeichen zum Drucker geschickt werden.

BD31: MC SEND PRINT

Sende ein Zeichen zum Drucker.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA = zu druckendes Zeichen
Ausgaben:    CY=1
Unverändert: BC,DE,HL,IX,IY

Dieser Vektor darf nie aufgerufen werden, ohne vorher den Status der BUSY-Leitung vom Drucker zu Erklärung der Anschlussbelegung: Testtesten, da sonst die meisten übertragenen Zeichen verloren gehen.

BD34: MC SOUND REGISTER

Lade ein Datentypen: Bytes
Datenbreite: Bytes
Byte
in ein Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
des Sound-Chips.

Eingaben:    Operationen: BD5B / 349A / 349A:  FLO SUBA=Registernummer
             C=Datenbyte für das Die Tonausgabe: Das Kontrollregister  (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
Ausgaben: keine Unverändert: DE,HL,IX,IY

Im Normalfall treibt man den Tongenerator über Die Abteilungen des Betriebssystems: Der Sound Managerden Sound Manager, der eine sehr komfortable Programmierung der drei Tonkanäle erlaubt.

Will man aber trotzdem einzelne Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
direkt programmieren, beispielsweise weil Die Abteilungen des Betriebssystems: Der Sound Managerder Sound Manager für spezielle Effekte zu langsam ist, sollte man sich an diesen Vektor Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: Halthalten.

Nur in Ausnahmefällen, z.LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
. bei Sprach- oder Geräusch- Reproduktionen die extrem zeitkritisch sind, wird man den Einleitung: Sound
MAIN FIRMWARE JUMPBLOCK: SOUND MANAGER
Die Firmware des Schneider CPC: SOUND MANAGER
Sound
- Generator 'zu Fuß' programmieren, da dies wegen der Hardware-Gestaltung im Schneider CPC eine ziemlich aufwendige Angelegenheit ist.

BD58: MC PRINT TRANSLATION

Nur CPC 664 und 6128

Ändere die Zeichen-Übersetzungs-Tabelle für den Drucker.

Eingaben:    HL zeigt auf die neue Übersetzungstabelle
Ausgaben:    CY=1 -> o.k.
             CY=0 -> Der Linien-Algorithmus: Fehler 3Fehler (Tabelle zu lang)
Unverändert: IX,IY

Die Übersetzungstabelle hat folgenden Aufbau:

1. Datentypen: Bytes
Datenbreite: Bytes
Byte
= Anzahl der Einträge (max. 20 Stück) danach jeweils 2 Datentypen: Bytes
Datenbreite: Bytes
Bytes
pro Eintrag

Jeder Eintrag besteht aus:

1. Datentypen: Bytes
Datenbreite: Bytes
Byte
= zu übersetzender Zeichencode 2. Datentypen: Bytes
Datenbreite: Bytes
Byte
= zugeordneter Zeichencode (&FF -> Zeichen ignorieren)

Die Tabelle wird von MACHINE PACK: BD58: MC PRINT TRANSLATIONMC PRINT TRANSLATION in den Variablenbereich der Die Firmware des Schneider CPCFirmware kopiert. Man kann den Platz danach also weiter verwerten.

Die Standard-Belegung nach einem 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
ist:

alt | &Der Zeichensatz des Schneider CPC: &A0 = 160A0 &A1 &A2 &A3 &A6 &AB &AC &AD &AE &AF
----+-----------------------------------------
neu | &5LOW KERNEL JUMPBLOCK: 000E:  LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
&5C &7LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B
&23 &40 &7C &7D &7LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION
LOW KERNEL JUMPBLOCK: 001E: LOW PCHL INSTRUCTION
E
&5D &5LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
B

Dadurch werden die in diesem Bereich liegenden Sonderzeichen solchen Zeichencodes zugeordnet, die nach ASCII-Norm in den verschiedenen Ländern unterschiedliche Zeichen erzeugen. In Deutschland sind das beispielsweise die Umlaute.

Valid HTML   Valid CSS