SCREEN PACKDie Bildschirm-Routinen BBFF: SCR INITIALISEInitialisiere das Screen-Pack. Eingaben: keine Ausgaben: keine Unverändert: IX,IY Komplette Initialisierung des Screen-Packs. Betroffen sind: - Die Sprungleisten: die IndirectionsDie Indirections des Screen-Pack. BC02: SCR RESETSetze das Screen-Pack zurück. Eingaben: keine Ausgaben: keine Unverändert: IX,IY Kleine Initialisierung des Screen-Pack. Betroffen sind: - Die Sprungleisten: die IndirectionsDie Indirections des Screen-Pack BC05: SCR SET OFFSETVerändere den Hardware-Scroll-Offset des Bildschirms. Eingaben: HL = neuer Scroll-Offset Ausgaben: keine Unverändert: BC,DE,IX,IY Der Scroll-Offset wird zuerst mit &07FE maskiert, um einen erlaubten Wert sicherzustellen. Dann wird der Bildschirm (hardwaremäßig) gescrollt. BC08: SCR SET BASEVerlege den Bildschirm in ein anderes RAM-Viertel. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = MSB des RAM-Viertels
Ausgaben: keine
Unverändert: BC,DE,IX,IY
Die Bildschirm-Basis wird zuerst mit &Der Zeichensatz des Schneider CPC: &C0 = 192C0 maskiert, da nur exakte RAM-Viertel in Frage kommen. Dann wird die Hardware von der neuen Lage unterrichtet. Der Scroll-Offset wird nicht geändert, der neue Bildschirm wird auch nicht gelöscht. BC0B: SCR GET LOCATIONErfrage Scroll-Offset und Speicher-Viertel des Bildschirmes. Eingaben: keine
Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = MSB des RAM-Viertels des Bildschirmspeichers und
HL = Scroll-Offset.
Unverändert: BC,DE,IX,IY
BC0E: SCR SET MODELösche den Bildschirm, setze den Scroll-Offset auf Real: NullNull und lege den Bildschirm-Modus neu fest. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = neuer Bildschirm-Modus
Ausgaben: keine
Unverändert: IX,IY
Zuerst wird Operationen: BD5B / 349A / 349A: FLO SUBA mit 3 maskiert. Enthält Operationen: BD5B / 349A / 349A: FLO SUBA danach den Wert 3, kehrt die Routine sofort zurück. Sonst wird der Bildschirm mit INK 0 gelöscht und auf den neuen Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0 Alle Die Text-VDU: FensterFenster, auch das Grafikfenster, werden auf den ganzen Bildschirm ausgeweitet, die Erklärung zu den verwendeten Bezeichnungen: CursorCursor ausgeschaltet (OFF) und in die linke, obere Ecke gestellt. Der Grafikcursor und ORIGIN kommen in die linke, untere Ecke. Alle PEN- und PAPER-INKs, auch die der Grafik-VDU, werden entsprechend dem neuen Bildschirmmodus maskiert und können sich deshalb evtl. ändern. BC11: SCR GET MODEErfrage den momentan eingestellten Bildschirm-Modus. Eingaben: keine Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2: Folgende Ausgaben sind möglich: - Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2: BC14: SCR CLEARLösche den ganzen Bildschirm mit der Die Bildausgabe: Tinten und FarbenTinte 0. Eingaben: keine Ausgaben: keine Unverändert: IX,IY Der Bildschirm wird mit INK 0 gelöscht. Hat ein Die Text-VDU: FensterFenster eine andere PAPER-INK, so wird das sichtbar, sobald dort ein Zeichen geschrieben oder das Die Text-VDU: FensterFenster gelöscht wird. Der Scroll-Offset wird auf 0 gesetzt. Nachdem der Bildschirm gelöscht ist, wird das INK-FLASH-EVENT neu initialisiert. BC17: SCR CHAR LIMITSErfrage, wieviele Buchstaben, abhängig vom aktuellen Bildschirm-Modus, in eine Zeile passen. Eingaben: keine
Ausgaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
Die letzte Zeile und die letzte Spalte werden Adressierungsarten der Z80: Relativrelativ zur linken, oberen Ecke mit den Koordinaten (0,0) angegeben (physikalische Position). Die letzte Zeile ist immer = 24, die letzte Spalte, abhängig vom Bildschirm-Modus, 19, 39 oder 79. BC1A: SCR CHAR POSITIONKonvertiere eine 'physikalische' Buchstaben-Position in die zugehörige Bildspeicher-Adresse. Eingaben: H = Spalte und L = Zeile Ausgaben: HL = Byte-Adresse und LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Spalte und Zeile werden Adressierungsarten der Z80: Relativrelativ zur linken, oberen Ecke mit der Koordinate (0,0) angegeben. H und L werden nicht auf Plausibilität geprüft. Unsinnige Koordinaten erzeugen genauso unsinnige Adressen. Die angegebene Adresse gilt für die linke, obere Ecke des Buchstabens. BC1D: SCR DOT POSITIONKonvertiere eine Grafik-Position in 'Basis'-Koordinaten in die zugehörige Bildspeicher-Adresse. Eingaben: DE = X-Koordinate und HL = Y-Koordinate Ausgaben: HL = Byte-Adresse und C = Bitmaske für den Punkt LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Die Die verwendeten Abkürzungen bedeuten: x:X- und Y-Koordinate beziehen sich dabei auf die linke, untere Ecke mit der Koodinate (0,0). Die Skalierung in Die verwendeten Abkürzungen bedeuten: x:X- und Y-Richtung ist abhängig vom Bildschirm-Modus genau so, dass jedem Datentypen: Realrealen Pixel im Bildschirm genau eine eigene Koordinate zufällt. Die rechte, obere Ecke hat daher folgende Koordinaten: - Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2: Die übergebenen Koordinaten werden nicht auf Plausibilität geprüft. Unsinnige Koordinaten ergeben unsinnige Adressen. BC20: SCR NEXT BYTEBestimme die Adresse des Datentypen: Bytes Eingaben: HL = Adresse im Bildschirmspeicher
Ausgaben: HL = Adresse des Datentypen: Bytes
Normalerweise muss dazu die Adresse nur incrementiert werden. Durch die Möglichkeit, den Bildschirm aber auch hardwaremäßig zu scrollen, muss auf das Ende der 'Das Screen Pack: RAM-ZeilenRAM-Zeile' getestet werden. Ist die übergebene Position die letzte in der Zeile, so ist die neue Adresse die erste Position im Bildschirm 8 Zeilen tiefer. Liegt diese nicht mehr im Bildschirm, so ist es das erste Datentypen: Bytes BC23: SCR PREV BYTEBestimme die Adresse des Datentypen: Bytes Eingaben: HL = Adresse im Bildschirmspeicher
Ausgaben: HL = Adresse des Datentypen: Bytes
Normalerweise muss dazu die Adresse nur decrementiert werden. Durch die Möglichkeit, den Bildschirm aber auch hardwaremäßig zu scrollen, muss auf den Anfang einer Das Screen Pack: RAM-ZeilenRAM-Zeile getestet werden. Ist die übergebene Position die erste in einer Zeile, so ist die neue Adresse die letzte Position im Bildschirm 8 Zeilen höher. Liegt diese nicht mehr im Bildschirm, so ist es das letzte Datentypen: Bytes BC26: SCR NEXT LINEBestimme die Adresse des Datentypen: Bytes Eingaben: HL = Adresse im Bildschirmspeicher Ausgaben: HL = Adresse darunter Unverändert: BC,DE,IX,IY Wird eine Adresse in der letzten Bildschirmzeile übergeben, so ergibt sich kein sinnvolles Ergebnis. BC29: SCR PREV LINEBestimme die Adresse des Datentypen: Bytes Eingaben: HL = Adresse im Bildschirmspeicher Ausgaben: HL = Adresse darüber Unverändert: BC,DE,IX,IY Wird eine Adresse in der ersten Zeile des Bildschirms übergeben, so ergibt sich kein sinnvolles Ergebnis. BC2C: SCR INK ENCODEKonvertiere eine Tintennummer in ein Datentypen: Bytes Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tintennummer (INK) Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Farb-Byte Unverändert: BC,DE,HL,IX,IY Das so erhaltene Datentypen: Bytes BC2F: SCR INK DECODEBestimme die Tintennummer des ersten Punktes von links im übergebenen Datentypen: Bytes Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Farb-Byte Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tintennummer (INK) Unverändert: BC,DE,HL,IX,IY Die Farbkodierung des ersten (linken) Pixels im übergebenen Datentypen: Bytes BC32: SCR SET INKLege die beiden Die Grafik: Farben Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tintennummer (INK) LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Die Tintennummer wird mit &0F und die Die Grafik: Farben BC35: SCR GET INKErfrage die Die Grafik: Farben Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tintennummer (INK) Ausgaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Die Tintennummer wird mit &0F maskiert um einen gültigen Wert sicherzustellen. LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL BC38: SCR SET BORDERBestimme die Die Grafik: Farben Eingaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Die Die Grafik: Farben BC3B: SCR GET BORDERErfrage die Die Grafik: Farben Eingaben: keine Ausgaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL BC3E: SCR SET FLASHINGLege die Länge der beiden Blinkperioden neu fest. Eingaben: H und L enthalten die Längen der beiden Perioden. Ausgaben: keine Unverändert: BC,DE,IX,IY H enthält die anzuzeigende Dauer für die erste Die Grafik: Farben Die neuen Zeiten werden erst nach dem nächsten Blinkwechsel übernommen. BC41: SCR GET FLASHINGErfrage, welche Länge die beiden Blinkperioden momentan haben. Eingaben: keine Ausgaben: H und L enthalten die Länge der beiden Perioden Unverändert: BC,DE,IX,IY Siehe &SCREEN PACK: BC3E: SCR SET FLASHINGBC3E SCR SET FLASHING. BC44: SCR FILL BOXFülle einen rechteckigen Bildschirm-Ausschnitt mit einer Die Bildausgabe: Tinten und FarbenTinte. Die Grenzen werden in Buchstaben-Positionen angegeben. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Farbbytes: Encoded Inks: Die anzugebenden Grenzen sind die inneren Grenzen der Füllflaeche und beziehen sich auf die linke, obere Ecke mit der Koordinate (0,0). Die Grenzen werden nicht auf Plausibilität kontrolliert. Unmögliche Grenzwerte führen zu unmöglichen Ergebnissen! BC47: SCR FLOOD BOXFülle einen rechteckigen Bildschirm-Ausschnitt mit einer Die Bildausgabe: Tinten und FarbenTinte. Die Grenzen werden in Byte-Positionen angegeben. Eingaben: C = Farbbytes: Encoded Inks: Die übergebenen Werte werden nicht auf Plausibilität überprüft. Unmögliche Grenzen führen zu unsinnigen Ergebnissen. Die Angaben in den Registern D und LOW KERNEL JUMPBLOCK: 000E: LOW PCBC INSTRUCTION BC4A: SCR CHAR INVERTInvertiere eine Buchstaben-Position (-> Erklärung zu den verwendeten Bezeichnungen: CursorCursor). Eingaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Die Spalte und Zeile werden Adressierungsarten der Z80: Relativrelativ zur linken, oberen Ecke mit den Koordinaten (0,0) angegeben. Die Grafik-VDU: Die KoordinatenDie Koordinaten werden nicht auf Plausibilität überprüft. Zu große Werte erzeugen unsinnige Ergebnisse. Alle Datentypen: Bytes neu = alt xor LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
Mit diesem Effekt werden die Standard-Cursorflecken des CPC erzeugt. Durch nochmaliges Aufrufen dieser Routine wird der Flecken automatisch wieder entfernt (Erklärung zu den verwendeten Bezeichnungen: CursorCursor Setzen und Entfernen wird mit der selben Routine erledigt!). BC4D: SCR HW ROLLScrolle den ganzen Bildschirm hardwaremäßig um eine Buchstaben-Position rauf oder runter. Eingaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Der Bildschirm wird hardwaremäßig um 8 Pixelzeilen gescrollt. Die neu sichtbar werdende Buchstabenzeile wird mit dem angegebenen Das Screen Pack: FarbbytesFarbbyte gelöscht. Zum harwaremäßigen Scrollen wird der Scroll-Offset um 80 erhöht oder erniedrigt (Die Kodierung der Tintennummern in den Bildschirm-Bytes: Mode 2: BC50: SCR SW ROLLScrolle einen Bildschirm-Ausschnitt um eine Buchstaben-Position rauf oder runter. Eingaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Die Grenzen des zu scrollenden Bildschirmausschnitts sind innere Grenzen und beziehen sich auf die linke, obere Ecke mit den Koordinaten (0,0). Die Grenzen werden nicht auf Plausibilität kontrolliert. Unvorhersehbare Effekte können auftreten, wenn man unsinnige Werte übergibt. Der Ausschnitt wird um 8 Pixelzeilen gescrollt. Die freiwerdende Zeile wird mit dem angegebenen Farb-Byte gelöscht. BC53: SCR UNPACKExpandiere eine Zeichen-Matrix entsprechend dem momentanen Bildschirm-Modus. Eingaben: HL zeigt auf Zeichensatz: die Zeichenmatrixdie Zeichenmatrix und DE auf einen Puffer für die expandierten Datentypen: Bytes Zeichensatz: die ZeichenmatrixDie Zeichenmatrix wird je nach Bildschirm-Modus in 8, 16 oder 32 Datentypen: Bytes BC56: SCR REPACKKomprimiere die expandierten Datentypen: Bytes Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Farbbytes: Encoded Inks: Die Spalte und Zeile werden Adressierungsarten der Z80: Relativrelativ zur linken, oberen Ecke des Bildschirms mit der Koordinate (0,0) in Buchstaben-Positionen angegeben. Sie werden nicht auf Plausibilität geprüft. Der Versuch, von außerhalb des Bildschirms ein Zeichen zu lesen, führt zu keinem sinnvollen Ergebnis. In der erzeugten Zeichenmatrix sind all die Datenbreite: Bits BC59: SCR ACCESSSetze den Zeichen-Modus für Die Abteilungen des Betriebssystems: Die Grafik-VDUdie Grafik-VDU. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = neuer Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0 Der Wert im Die Tonausgabe: Das Kontrollregister (Reg. 7) Der Zeichen-Modus (Grafikmodus) bestimmt, wie beim Zeichnen die neue Die Bildausgabe: Tinten und FarbenTinte für einen Punkt aus dessen alter und der neuen Die Bildausgabe: Tinten und FarbenTinte berechnet wird: Zeichenmodus- Operationen: BD5B / 349A / 349A: FLO SUBA=0 -> opaque, deckend (force): Neu := INK - Operationen: BD5B / 349A / 349A: FLO SUBA=1 -> exclusiv-oder: Neu := Alt xor INK - Operationen: BD5B / 349A / 349A: FLO SUBA=2 -> und: Neu := Alt and INK - Operationen: BD5B / 349A / 349A: FLO SUBA=3 -> oder: Neu := Alt or INK Der Grafikmodus beeinflusst nur Die Indirections der Firmware-Packs: BDE8: IND SCR WRITEIND SCR WRITE. Diese Überblick: Die Indirections der Firmware-Packs BC5C: SCR PIXELSSetze einen Punkt im Bildschirm. Eingaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Die Bildschirmadresse wird nicht überprüft. Unsinnige Werte führen zu unvorhersehbaren Ergebnissen! Das oder die durch C ausmaskierten Pixel werden mit der Die Grafik: Farben BC5F: SCR HORIZONTALZeichne eine waagerechte Linie. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Farbbytes: Encoded Inks: Die Koordinaten-Angaben erfolgen in Basis-Koordinaten. Siehe dazu &SCREEN PACK: BC1D: SCR DOT POSITIONBC1D SCR DOT POSITION. Die übergebenen Koordinaten müssen im Bildschirm liegen, außerdem muss DE kleiner oder gleich BC sein. Wird das nicht beachtet, können unvorhergesehene Effekt auftreten. BC62: SCR VERTICALZeichne eine senkrechte Linie. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Farbbytes: Encoded Inks: Die Angaben erfolgen in Basis-Koordinaten. Siehe dazu &SCREEN PACK: BC1D: SCR DOT POSITIONBC1D SCR DOT POSITION. Die übergebenen Koordinaten müssen im Bildschirm liegen. Außerdem muss HL kleiner oder gleich BC sein. Andernfalls können unvorhergesehene Effekte auftreten. BD55: SCR SET POSITIONnur CPC 664 und 6128. Lege die Lage des Bildschirms nur für die Software neu fest. Eingaben: HL=Scroll-Offset Operationen: BD5B / 349A / 349A: FLO SUBA=Bildschirm-Basis Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA und HL legalisiert Unverändert: BC,DE,IX,IY Dieser Vektor ändert Lage und Scroll-Zustand nur für die Software, d.h. für Die Abteilungen des Betriebssystems: Das Screen Packdas SCREEN PACK, die TEXT und Einleitung: Die Grafikdie GRAFIK VDU. Anhang: Die BildausgabeDie Bildausgabe erfolgt nach wie vor aus dem zuvor gewählten Speicherviertel mit dem alten Scroll-Zustand. Dadurch ist es beispielsweise möglich, ein neues Bild unsichtbar aufzubauen, während das alte noch angezeigt wird. Garbage Collection: ... beim CPC 464Beim CPC 664 kommt dabei praktischerweise allerdings nur die Die Speicherkonfiguration im Schneider CPC: BankBank 1 (&4000 bis &7FFF) in Frage, Garbage Collection: ... beim CPC 464beim CPC 6128 kann man zusätzlich auch noch an der BD5B: KL RAM SELECT: Mögliche RAM-Konfigurationen:RAM-Konfiguration herumspielen. Operationen: BD5B / 349A / 349A: FLO SUBA wird als oberes Adressbyte benutzt, um das Speicherviertel festzulegen, und wird deshalb mit &Der Zeichensatz des Schneider CPC: &C0 = 192C0 maskiert. Die Maske für HL ist &07FE. Besitzer des CPC 464 können ersatzweise folgende Systemvariablen verändern: &B1C9,&B1CA - MAIN FIRMWARE JUMPBLOCK: SCREEN PACK |