Das Schneider CPC Systembuch

Die Abteilungen des Betriebssystems

Das Screen Pack

Sowohl die Text- als auch Die Abteilungen des Betriebssystems: Die Grafik-VDUdie Grafik-VDU bringen die Grafik-Informationen über Linien und Zeichen nicht direkt auf den Bildschirm. Sie greifen beide auf eine untergeordnete Abteilung des Betriebsystems zurück: Die Abteilungen des Betriebssystems: Das Screen PackDas Screen Pack. Hier sind eine Unzahl an Routinen versammelt, die mit Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
, Scrollen oder der Kodierung von Die Bildausgabe: Tinten und FarbenTinten im Bildschirm-Speicher zu tun haben. Hierfür eine separate Abteilung bereitzustellen, ist auch mehr als notwendig. Der Aufbau des CPC-Bildschirms ist nämlich äußerst kompliziert.

Lage des Video-RAMs

Der Bildschirmspeicher belegt immer einen Die Speicherkonfiguration im Schneider CPC: BlockBlock des zur Verfügung stehenden RAMs. Garbage Collection: ... beim CPC 464Beim CPC 6128 kann die zusätzliche RAM-Bank jedoch nicht benutzt werden. Dabei kann das Video-RAM in jeden der vier (normalen) RAM-Blocks gelegt werden. Es ergeben sich nur Einschränkungen durch das Betriebsystem:

Im untersten Die Speicherkonfiguration im Schneider CPC: BlockBlock von &0000 bis &3FFF liegt der Überblick: LOW KERNEL JUMPBLOCK
Die Firmware des Schneider CPC: LOW KERNEL JUMPBLOCK
LOW KERNEL JUMPBLOCK
und im dritten Speicherviertel von &8000 bis &BFFF liegen die restlichen BCD1: KL LOG EXT: 1. JumpblockJumpblocks. Im Allgemeinen ist es nicht sinnvoll, den Bild-Wiederholspeicher hier hineinzulegen. Das geht nur, wenn man auf die Routinen des Betriebsystems komplett verzichtet.

Die Standard-Lage für das Video-RAM ist der vierte Die Speicherkonfiguration im Schneider CPC: BlockBlock, von &C000 bis &FFFF. Es ist aber auch in Einleitung: BASIC
Anhang: Basic
Basic
möglich, den zweiten Die Speicherkonfiguration im Schneider CPC: BlockBlock zu verwenden. Das folgende Programm zeigt ein Beispiel, in dem mit beiden 'Bildschirmen' für eine bewegte Grafik gearbeitet wird:

 60 ' Grafik-Demo: Animation mit verdecktem Bildaufbau   Erklärung zu den Anschlüssen: Vcc und Vss
Erklärung zu den Anschluss-Bezeichnungen: Vcc und Vss
vs
. 23.5.86 (c) G.W. 70 ' ------------------------------------------------ ----------- -------- 71 ' 80 MEMORY &3FFF ' Sceen Base-Speicher des MAIN FIRMWARE JUMPBLOCK: SCREEN PACK
Die Firmware des Schneider CPC: SCREEN PACK
Screen Packs
: 81 DEFINT LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
,p ' CPC 664/6128: &B7C6, 90 bs=&B7C6 '<----- CPC 464: &B1CB. 91 LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
=&40 ' HiByte des Speicherviertels: &4000 oder &C000 92 p1=&bcff ' Portadresse 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
: Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
anwählen 93 p2=&bdff ' Portadresse 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
: Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
beschreiben 100 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
1:WINDOW 12,28,6,19 110 n=200:l=100 ' Dreh-Schritte und Seitenlänge des Quadrates 115 w=2*PI/n ' Drehwinkel 120 s=SIN(w) ' Sinus für Der Fill-Algorithmus: Vektor-DrehungVektor-Drehung 130 c=COS(w) ' Cosinus für Der Fill-Algorithmus: Vektor-DrehungVektor-Drehung 140 dx=0:dy=l ' Start-Vektor: (0,l) 150 ORIGIN 320,200 ' Origin in die Bildschirm-Mitte 154 ' 155 ' DEMO: Drehendes Quadrat 156 ' ----------------------- 160 ' 170 dz=dx*c-dy*s ' Den 180 dy=dy*c+dx*s ' Vektor 190 dx=dz ' drehen. 200 LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
=&100-LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
: ' Screen-Basis &40 -> &Der Zeichensatz des Schneider CPC: &C0 = 192C0 -> &40 wechseln POKE bs,LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
' und das Screen-Pack darauf einstellen. 210 CLS:MOVE dx,dy ' den nicht dargestellten Bildschirm löschen. 220 DRAW -dy,+dx: ' Und das Quadrat in den DRAW -dx,-dy: ' nicht dargestellten DRAW +dy,-dx: ' Bildschirmspeicher DRAW +dx,+dy ' zeichnen. 230 OUT p1,12:OUT p2,LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
\4 ' jetzt den Video-Controller auf die neue Lage des 240 GOTO 170 ' Bildschirmspeichers einstellen.

Die Schleife ab der Zeile 170 ist so aufgebaut, dass zunächst das Screen-Pack auf den jeweils anderen RAM-Block eingestellt wird und in diesem das neue, leicht gedrehte Quadrat gezeichnet wird, während Anhang: Die Bildausgabedie Bildausgabe noch aus dem alten Die Speicherkonfiguration im Schneider CPC: BlockBlock erfolgt. Erst wenn die Zeichnung beendet ist, wird auch der Video-Controller (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
) mit zwei OUT-Befehlen auf den neuen Die Speicherkonfiguration im Schneider CPC: BlockBlock umgestellt.

Dadurch ist nicht sichtbar, wie Einleitung: Die Grafikdie Grafik aufgebaut wird. Der Unterschied wird deutlich, wenn man das Programm ohne die Zeilen 200 und 230 laufen lässt. Hier sieht man, wie der Bildschirm gelöscht, und das neue Quadrat gezeichnet wird.

Wer will, kann auch noch die folgenden Zeile einfügen:

  225 MOVE 0,0:FILL 1
  225 MOVE 0,0:DRAW -dx,dy

RAM-Zeilen

Innerhalb eines Speicherblocks ist Die Anschlussbelegungen der wichtigsten ICs im CPC: Das RAM 4164das RAM in acht 'Zeilen' unterteilt, die jeweils 2 kByte = 2048 Datentypen: Bytes
Datenbreite: Bytes
Bytes
umfassen. Jede dieser Das Screen Pack: RAM-ZeilenRAM-Zeilen entspricht einer bestimmten Rasterzeile aller Buchstaben auf dem Bildschirm:

In der ersten Das Screen Pack: RAM-ZeilenRAM-Zeile von &C000 bis &C7FF ist die Grafik-Information für die oberste Zeile der 8*8-Punkte-Matrizen aller Buchstaben-Positionen auf dem Bildschirm enthalten.

Das folgende Programm zeigt das:

100 FOR i=1 100:PRINT"kjFDGHNBli yh rtgehp";:NEXT
110 FOR i=&C000 TO &C7FF
120   POKE i,255
130 NEXT

Die zweite Das Screen Pack: RAM-ZeilenRAM-Zeile von &C800 bis &CFFF ist für die zweite Zeile aller Buchstaben-Matrizen zuständig und so weiter bis zur letzten Das Screen Pack: RAM-ZeilenRAM-Zeile von &F800 bis &FFFF, die die untersten Zeilen speichert.

Jede Das Screen Pack: RAM-ZeilenRAM-Zeile gliedert sich in 25 Teilstücke, die den 25 Buchstaben-Zeilen auf dem Bildschirm entsprechen. Jedes Teilstueck, und damit alle 200 Monitor-Zeilen sind 80 Datentypen: Bytes
Datenbreite: Bytes
Bytes
lang. Diese Angaben gelten dabei unabhängig vom eingestellten Bildschirm-Modus.

Zunächst fällt auf, dass die Das Screen Pack: RAM-ZeilenRAM-Zeilen nicht vollständig ausgenutzt sind. Jede Das Screen Pack: RAM-ZeilenRAM-Zeile ist &800 = 2kByte = 2048 Datentypen: Bytes
Datenbreite: Bytes
Bytes
lang. Benutzt werden aber nur 25*80 = 2000 Datentypen: Bytes
Datenbreite: Bytes
Bytes
. Die überzähligen 48 Datentypen: Bytes
Datenbreite: Bytes
Bytes
jeder Das Screen Pack: RAM-ZeilenRAM-Zeile sind einfach nicht benutzt.

Hardware-Scroll

Es ist aber nur sehr bedingt möglich, in diese 8*48 Datentypen: Bytes
Datenbreite: Bytes
Bytes
eigenen Maschinencode zu legen. Im laufenden Betrieb kann sich die Lage der freien Positionen in den Das Screen Pack: RAM-ZeilenRAM-Zeilen nämlich ändern. Und zwar dann, wenn der Bildschirm hardwaremäßig gescrollt wird.

Das Screen-Pack hat zwei Möglichkeiten, den Bildschirm-Inhalt nach oben oder unten zu scrollen. Die langsamere ist, die entsprechenden Speicher-Bereiche innerhalb des Video-RAMs zu verschieben. Das ist leider eine recht Zeit-intensive Angelegenheit, und wird nur benutzt, wenn Windows, die nicht den ganzen Bildschirm umfassen gescrollt werden sollen.

Soll nämlich der gesamte Bildschirm verschoben werden, so kann dies durch Programmieren des Video-Controllers geschehen. 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
bietet nämlich die Möglichkeit, durch Programmieren zweier seiner Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
das 'erste Datentypen: Bytes
Datenbreite: Bytes
Byte
des Video-RAMs im Speicher' festzulegen. Das wird auch ausgenutzt, um den Bildschirm in ein anderes Speicherviertel zu legen!

Nun ist zunächst einmal zu klären, was passiert, wenn man den Start des Bildschirms beispielsweise auf das 100ste Datentypen: Bytes
Datenbreite: Bytes
Byte
der ersten Das Screen Pack: RAM-ZeilenRAM-Zeile festlegt. Dadurch wird der Start der Bildausgabe aus allen anderen Das Screen Pack: RAM-ZeilenRAM-Zeilen auch auf das 100ste Datentypen: Bytes
Datenbreite: Bytes
Byte
festgelegt. Alle Das Screen Pack: RAM-ZeilenRAM-Zeilen können nur in gleicher Weise beeinflusst werden, weil der Video-Controller zwischen den Das Screen Pack: RAM-ZeilenRAM-Zeilen nicht mit seinen Speicher-Adress-Leitungen sondern den Character-ROM-Adressen unterscheidet. Das ist im Kapitel über des CRTC-IC näher beschrieben.

Daraus wird klar, dass man Anhang: Die Bildausgabedie Bildausgabe via Hardware nur um ganze RAM-Zeilen-Pakete, also immer 8 Rasterzeilen auf einmal scrollen kann.

Was passiert nun aber bei der Bild-Ausgabe aus einer Das Screen Pack: RAM-ZeilenRAM-Zeile, deren Anfang auf das 100. Datentypen: Bytes
Datenbreite: Bytes
Byte
festgelegt ist, wenn das Ende erreicht ist?

Zunächst einmal wird die Grafik-Information aus den letzten 48 Datentypen: Bytes
Datenbreite: Bytes
Bytes
benutzt, die vorher (bei einem Offset von Real: NullNull) noch unbenutzt waren. Aber das langt noch nicht. Es fehlen noch 52 Datentypen: Bytes
Datenbreite: Bytes
Bytes
bis zum Bildschirm-Ende.

2 kByte Speicher lassen sich mit 11 Adress-Bits unterscheiden. Das sind die Adresleitungen MA0 bis MA9 des 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
und eine, die niederwertigste, wird vom Gate Datenspeicherung und Datenstrukturen: ArraysArray geliefert. Wird &7FF incrementiert, so ergibt das &800. Es kommt zu einem Übertrag auf das nächste 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
, MA10. MA10 und MA11 sind beim Video-Controller im Schneider CPC aber nicht angeschlossen. Deshalb bleibt der Übertrag unberücksichtigt, MA0 bis MA9 enthalten wieder &000 und die Bild-Ausgabe wird am Anfang der jeweiligen Das Screen Pack: RAM-ZeilenRAM-Zeile fortgesetzt.

Die RAM-Zeilen bilden Ring-Speicher!

Das kann man auch bei dem oben wiedergegebenen Basic-Programm für die erste Das Screen Pack: RAM-ZeilenRAM-Zeile demonstrieren: Vor Start des Programms muss man den Bildschirm nur ein paar mal scrollen, wodurch der Bildschirm-Start innerhalb der Das Screen Pack: RAM-ZeilenRAM-Zeilen verschoben wird. Die durch die Pokes erzeugte Linie startet dann nicht mehr in der linken, obenen Ecke, sondern irgendwo innerhalb des Bildschirms. Erreicht das Programm die rechte, untere Ecke, so 'verschwinden' die nächsten 48 Pokes im nicht benutzten Bereich der Das Screen Pack: RAM-ZeilenRAM-Zeile, bevor die Linie am Bildschirm-Beginn weitergezeichnet wird.

Um den Bildschirmspeicher um eine Zeile nach oben oder unten zu scrollen, muss der Bildschirm-Start innerhalb der Das Screen Pack: RAM-ZeilenRAM-Zeilen, der sogenannte 'Screen Offset', um 80 Datentypen: Bytes
Datenbreite: Bytes
Bytes
verschoben werden. Den 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
muss man aber nur mit der Hälfte programmieren, weil die niederwertigste Adressleitung vom Gate Datenspeicherung und Datenstrukturen: ArraysArray verwaltet wird.

Verschiebt man den Start einer Das Screen Pack: RAM-ZeilenRAM-Zeile aber nur um zwei Datentypen: Bytes
Datenbreite: Bytes
Bytes
(weniger geht nicht, weil auch hierfür 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
nur mit der Hälfte programmiert werden muss!), so wird der Bildschirmspeicher in der Horizontalen gescrollt. Was auf der einen Seite herausrollt, erscheint auf der anderen Seite wieder, allerdings um eine Zeile versetzt. 40 Horizontale Scrolls machen ja einen senkrechten, normalen Scroll aus: 40*2 = 80.

Das folgende Programm benutzt diesen Effekt, um ein reizvolles Grafik-Demo zu erzeugen:

100 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
0 ' Grafik erstellen: 110 FOR i=0 TO 7 120 INK i,i*3:PAPER i:WINDOW i+1,20-i,i+1,25-i:CLS 130 NEXT 140 ofs=0 150 IF INKEY(0)=0 THEN ofs=ofs+40 ' Erklärung zu den verwendeten Bezeichnungen: CursorCursor hoch 160 IF INKEY(2)=0 THEN ofs=ofs-40 ' Erklärung zu den verwendeten Bezeichnungen: CursorCursor runter 170 IF INKEY(8)=0 THEN ofs=ofs+1 ' Erklärung zu den verwendeten Bezeichnungen: CursorCursor links 180 IF INKEY(1)=0 THEN ofs=ofs-1 ' Erklärung zu den verwendeten Bezeichnungen: CursorCursor rechts 190 ofs=(ofs+&400) 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:
MOD
&400 210 hi=ofs\256+&Der Zeichensatz des Schneider CPC: &C0 = 192C0\4 ' MSB der in CRTC-Registern zu 220 lo=ofs AND &FF ' LSB programmierenden ersten Speicheradresse 225 Maschinencode über HIMEM: CALLCALL &MACHINE PACK: BD19: MC WAIT FLYBACKBD19 ' MC WAIT FLYBACK 230 OUT &BCFF,12:OUT&BDFF,HI ' MSB programmieren 240 OUT &BCFF,13:OUT&BDFF,LO ' LSB programmieren 250 GOTO 150

Man kann aber auch die beiden Sperr-Bits MA10 und MA11 des 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
, die normalerweise immer mit Real: NullNull programmiert werden, überwinden, und von einem Speicherviertel in ein anderes hineinscrollen. Um das zu zeigen muss man nur die Zeile 190 gegen die folgende austauschen. Dann kann man durch den ganzen Speicher scrollen. Bevor man aber immer in das nächste Speicherviertel kommt, muss man jede Die Speicherkonfiguration im Schneider CPC: BankBank vier mal durchrotieren, um eben die 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
zu überwinden. Wer auch noch Zeile 99 einfügt, kann überall klar erkennen, wo sich 'was tut:

99 INK 14,25:INK 15,26
190 ofs=UNT(ofs) AND &7FFF

Es gibt aber auch sinnvolle Anwendungen, wie beispielsweise für ein schnelles, horizontales Scrolling in einer Textverarbeitung. Hier ist es dann wichtig, nicht nur Anhang: Die Bildausgabedie Bildausgabe, also den 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
zu informieren, sondern auch das Screen-Pack. Das geschieht durch Beschreiben des Screen-Offset-Speichers im System-RAM des Screen-Packs.

 60 ' Horizontales Scroll-Demo    Erklärung zu den Anschlüssen: Vcc und Vss
Erklärung zu den Anschluss-Bezeichnungen: Vcc und Vss
vs
. 23.5.86 (c) G.W. 70 ' ------------------------ ----------- -------- 80 os=&B7C4 ' Screen-Offset-Speicher: CPC 664/6128: &B7C4,B7C5 90 ' CPC 464: &B1C9,B1CA 91 ' 100 DIM t$(25) ' "*** 25 Zeilen Text eingeben: ***" 110 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
2:FOR i=1 TO 25:LINE INPUT t$:t$(i)=t$+SPACE$(255-LEN(t$)):NEXT 120 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
2:FOR i=1 TO 25:PRINT LEFT$(t$(i),80);:NEXT 140 es=1:ofs=0:f=0 150 IF es<81 AND INKEY(1)=0 THEN f=+2:GOSUB 190 ' Erklärung zu den verwendeten Bezeichnungen: CursorCursor rechts 170 IF es>1 AND INKEY(8)=0 THEN f=-2:GOSUB 190 ' Erklärung zu den verwendeten Bezeichnungen: CursorCursor links 180 f=0:GOTO 150 185 ' 186 ' zuerst horizontal scrollen: 187 ' 190 ofs=(ofs+f+&800)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:
mod
&800 ' Screen Offset neu berechnen 200 POKE os,ofs AND &FF ' und MAIN FIRMWARE JUMPBLOCK: SCREEN PACK
Die Firmware des Schneider CPC: SCREEN PACK
Screen Pack
damit programmieren. 210 POKE os+1,ofs\256 220 hi=ofs\2\256+&Der Zeichensatz des Schneider CPC: &C0 = 192C0\4 ' Werte für den 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
. 230 lo=ofs\2 AND &FF 240 OUT &BCFF,12:OUT&BDFF,HI ' 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
programmieren. 250 OUT &BCFF,13:OUT&BDFF,LO 260 ' 270 ' dann neu entstandene Spalten füllen: 280 ' 290 es=es+f ' erste Spalte merken. 300 IF f=+2 THEN WINDOW 79,80,1,25:s=es+78 ' rechts füllen oder 310 IF f=-2 THEN WINDOW 1, 2,1,25:s=es ' links füllen. 320 CLS:FOR z=1 TO 25:PRINT MID$(t$(z),s,2);:NEXT 330 RETURN

Farzuordnung via Palette

Die Farb-Ausgabe ist beim Schneider CPC zweigeteilt: Im Bildschirm wird zu jedem Pixel die Tintennummer (INK) gespeichert. Erst in dem Moment, in dem das Pixel auf dem Monitor dargestellt wird, wird die Die Bildausgabe: Tinten und FarbenTinte in eine Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
umgesetzt. Das geschieht in 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
, die ja die Ausgabe der Monitor-Signale besorgt.

Dazu besitzt Speicher und Peripherie: Die ULA
Die Bildausgabe: Die ULA
die ULA
in ihrem Inneren ein paar Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
, die mit OUT-Befehlen programmiert werden können. Diese Die Tonausgabe: Das Kontrollregister (Reg. 7)
Die Tonausgabe: Die möglichen Hüllkurvenformen (Reg. 13)
Register
werden Colour Look Up Table (CLUT) oder speziell beim Schneider CPC 'Palette' genannt.

Die Programmierung der Paletten-Register ist im Kapitel über Speicher und Peripherie: Die ULA
Die Bildausgabe: Die ULA
die ULA
genau beschrieben.

Das Screen-Pack unterstuetzt dabei eine Zuordnung von zwei verschiedenen Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
zu jeder Die Bildausgabe: Tinten und FarbenTinte. Für alle Inks müssen zwei Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
angegeben werden! Bei der Initialisierung des Rechners wird auf dem FRAME FLYBACK TICKER ein Der Kernel - Software-Interrupts: EventsEVENT eingehängt, (--> Programmierung eines Software-Interrupts für die Zeit des Strahl-Hochlaufes im Monitor) das in regelmäßigen Zeitabständen jeder Die Bildausgabe: Tinten und FarbenTinte die eine bzw. die andere Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
zuordnet. Dabei werden immer alle Farbzuordnungen in der CLUT 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
neu programmiert, auch wenn nur ein 'Wechsel' zwischen zwei gleichen Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
stattfindet.

Und das ist der Normalfall: Fast alle Die Bildausgabe: Tinten und FarbenTinten bekommen zwei gleiche Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
zugeordnet, damit sie eben 'nicht' blinken.

In Einleitung: BASIC
Anhang: Basic
Basic
kann man die Blinkperioden mit SPEED INK periode1,periode2 festlegen. Die Farb-Zuordnung wird mit dem Befehl INK Die Bildausgabe: Tinten und Farbentinte, farbe1 [,farbe2] vorgenommen.

Dabei muss Speicher und Peripherie: Die ULA
Die Bildausgabe: Die ULA
die ULA
mit anderen Farb-Nummern programmiert werden, als man sie im INK-Statement oder, in Maschinensprache, bei dem entsprechenden Vektor angeben muss. Die Abteilungen des Betriebssystems: Das Screen PackDas Screen Pack konvertiert die User-Farbnummern erst über eine Tabelle in die 'Paletten-Farbnummern'. Der Grund für diesen Umstand ist, dass die User-Farbnummern nach ihrer Helligkeit auf einem monochromen Farbmonitor sortiert sind.

Standard-Zuordnung der Tinten zu Farbnummern:
---------+----------------------------------------------------------------------
  Die Bildausgabe: Tinten und FarbenTinte: | Border 0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15
---------+----------------------------------------------------------------------
Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
1: | 1 1 24 20 6 26 0 2 8 10 12 14 16 18 22 1 16 Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
2: | 1 1 24 20 6 26 0 2 8 10 12 14 16 18 22 24 11 ---------+---------------------------------------------------------------------- <---- 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
2 ----------> <------> <---- 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
1 ------------------> blinkend <---- 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
0 ------------------------------------------------------------------>
Zusammenhang zwischen Farbe, Farbnummer und Paletten-Farbnummer
                   Paletten- Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farb
- || Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farb
- Paletten- Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
Farb-Nr. Nummer || Nummer Farb-Nr. Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
-----------------------------++----------------------------------- Schwarz 20 0 || 26 11 Hellweiß Blau 4 1 || 25 3 Pastell-Gelb Hellblau 21 2 || 24 10 Hellgelb Rot 28 3 || 23 27 Pastell-Blaugrün Magenta 24 4 || 22 25 Pastell-Grün Hellviolett 29 5 || 21 26 Limonengrün Hellrot 12 6 || 20 19 Hellblaugrün Purpur 5 7 || 19 2 Seegrün Hellmagenta 13 8 || 18 18 Hellgrün Grün 22 9 || 17 15 Pastell-Magenta Blaugrün 6 10 || 16 7 Rosa Himmelblau 23 11 || 15 14 Orange Gelb 30 12 || 14 31 Pastell-Blau Weiss 0 13 || 13 0 Weiss -----------------------------++-----------------------------------

Kodierung der Tinten

Unabhängig vom eingeschalteten Bildschirm-Modus ist ein Datentypen: Bytes
Datenbreite: Bytes
Byte
des Bildschirm-Speichers immer für den gleichen, kurzen Abschnitt im Monitorbild zuständig. Je nach Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
wird diese Strecke nur in 2, 4 oder 8 getrennt einfärbbare Pixel unterteilt.

Im Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
2 wird die 'Byte-Strecke' in 8 Pixel unterteilt. Genau ein 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
ist für jedes Pixel zuständig, deshalb kann nur zwischen zwei verschiedenen Die Bildausgabe: Tinten und FarbenTinten unterschieden werden.

Im Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
1 wird diese Strecke nur in 4 Pixel unterteilt. Deshalb sind jeweils zwei 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
für ein Pixel zuständig, womit sich vier unterschiedliche Die Bildausgabe: Tinten und FarbenTinten unterscheiden lassen.

Im Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
0 endlich wird das Datentypen: Bytes
Datenbreite: Bytes
Byte
nur noch in zwei Pixel geteilt. Für jedes Pixel können in vier 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
16 unterschiedliche Die Bildausgabe: Tinten und FarbenTinten kodiert werden.

Die folgende Tabelle zeigt noch einmal den Zusammenhang:

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
0: 80 * 2 = 160 Punkte und 2^(8/2) 2^(4) = 16 Die Bildausgabe: Tinten und FarbenTinten 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
1: 80 * 4 = 320 Punkte und 2^(8/4) 2^(2) = 4 Die Bildausgabe: Tinten und FarbenTinten 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
2: 80 * 8 = 640 Punkte und 2^(8/8) 2^(1) = 2 Die Bildausgabe: Tinten und FarbenTinten ^ ^ ^ ^ | 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
pro Datentypen: Bytes
Datenbreite: Bytes
Byte
| 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
pro Punkt | | Punkte pro Datentypen: Bytes
Datenbreite: Bytes
Byte
Punkte pro Datentypen: Bytes
Datenbreite: Bytes
Byte

Unabhängig vom Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
belegt jeder Buchstabe, der ausgedruckt wird, 8 Pixel in Breite und Höhe. Die Höhe ändert sich nicht, aber die Breite, weil zur Darstellung von 8 verschiedenen Punkten nun ein, zwei oder 4 Datentypen: Bytes
Datenbreite: Bytes
Bytes
benötigt werden.

Die Zuordnung der 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
in einem Datentypen: Bytes
Datenbreite: Bytes
Byte
zu den betroffenen Pixeln ist, je nach Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
, äußerst kompliziert. Am einfachsten ist sie noch im Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
2. Jedes 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
entspricht einem Pixel, das höchstwertige 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
dabei dem am Pixel ganz links:

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
2: +---+---+---+---+---+---+---+---+ ! 7 ! 6 ! 5 ! 4 ! 3 ! 2 ! 1 ! 0 ! <-- 8 Punkte im Bildschirm +---+---+---+---+---+---+---+---+ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+ ! 7 ! 6 ! 5 ! 4 ! 3 ! 2 ! 1 ! 0 ! <-- 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
0...7 eines Datentypen: Bytes
Datenbreite: Bytes
Bytes
+---+---+---+---+---+---+---+---+

In Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
1 ist die Sache komplizierter. Wie auch im Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
0 sind hier nicht zwei nebeneinander liegende 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
für ein Datentypen: Bytes
Datenbreite: Bytes
Byte
zuständig. Die 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
sind vielmehr nach ihrer Wertigkeit bei der Bestimmung der Tintennummer gruppiert: Die höherwertigen 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
der vier Pixel liegen im unteren Datenbreite: NibblesNibble, die niederwertigen 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
im oberen Halbbyte. Innerhalb eines Datenbreite: NibblesNibbles folgen die 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
glücklicherweise in der Reihenfolge aufeinander, wie die zugehörigen Pixel im Bildschirm.

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
1: +-------+-------+-------+-------+ ! 37 ! 26 ! 15 ! 04 ! <-- 4 Punkte im Bildschirm +-------+-------+-------+-------+ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | +---+---+---+---+---+---+---+ | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+ ! 7 ! 6 ! 5 ! 4 ! 3 ! 2 ! 1 ! 0 ! <-- 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
0...7 eines Datentypen: Bytes
Datenbreite: Bytes
Bytes
+---+---+---+---+---+---+---+---+

Noch komplizierter ist es in Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
0. Aber die folgende Grafik zeigt, welches 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
bei welchem Pixel mit welcher Wertigkeit in die Bestimmung der Tintennummer eingeht.

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
0: +---------------+---------------+ ! 1537 ! 0426 ! <-- 2 Punkte im Bildschirm +---------------+---------------+ ^ ^ ^ ^ ^ ^ ^ ^ | | | | | | | | +---+---+---+---+---+---+---+ | | | | | | | | | | | | | | | | +---+---+---+---+---+---+---+---+ ! 7 ! 6 ! 5 ! 4 ! 3 ! 2 ! 1 ! 0 ! <-- 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
0...7 eines Datentypen: Bytes
Datenbreite: Bytes
Bytes
+---+---+---+---+---+---+---+---+

Der einzige angenehme Effekt, der sich dadurch ergibt, ist, dass man in jedem Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
ein Datentypen: Bytes
Datenbreite: Bytes
Byte
nur einmal shiften muss, um die Pixel darin um eine Position zu verschieben. Will man das allerdings für ein horizontales 'Soft-Scrolling' benutzen, muss man aber noch das nicht ganz unbedeutende Problem des Pixel-Übertrags zwischen zwei benachbarten Datentypen: Bytes
Datenbreite: Bytes
Bytes
lösen.

Es ist aber leicht, das n-te Pixel von links in einem Datentypen: Bytes
Datenbreite: Bytes
Byte
ganz nach links zu schieben (n-1 mal shiften), um dann, beispielsweise mit dem Vektor &SCREEN PACK: BC2F: SCR INK DECODEBC2F SCR INK DECODE, daraus die Tintennummer zu berechnen.

Pixel-Masken

Diese komplizierten Zuordnungen sind aber auch für 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
nicht so leicht zu verdauen. Deshalb enthält Die Abteilungen des Betriebssystems: Das Screen Packdas Screen Pack für jeden Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
eine Tabelle, die das Separieren einzelner Pixel in einem Datentypen: Bytes
Datenbreite: Bytes
Byte
erleichtert. Diese Tabelle enthält für jedes Pixel, das mit einem Datentypen: Bytes
Datenbreite: Bytes
Byte
darstellbar ist, ein Pixel-Masken: MaskenbytesMaskenbyte, mit dem man das einzelne Pixel herausfiltern kann. Da die Anzahl an Pixeln, in die ein Datentypen: Bytes
Datenbreite: Bytes
Byte
unterteilt wird, je nach Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
unterschiedlich ist, ist die Tabelle in jedem Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
auch unterschiedlich lang. Garbage Collection: ... beim CPC 464Beim CPC wird die jeweils zutreffende Tabelle mit jedem Moduswechsel ab Adresse &B1CF in's RAM kopiert.

Maskenbytes
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
2: Pixel 7 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X10000000 = &80 = 128 (links) Pixel 6 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X01000000 = &40 = 64 Pixel 5 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X00100000 = &20 = 32 Pixel 4 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X00010000 = &10 = 16 Pixel 3 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X00001000 = &08 = 8 Pixel 2 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X00000100 = &04 = 4 Pixel 1 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X00000010 = &02 = 2 Pixel 0 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X00000001 = &01 = 1 (rechts)   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
1: Pixel 3 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X10001000 = &88 = 136 (links) Pixel 2 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X01000100 = &44 = 68 Pixel 1 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X00100010 = &22 = 34 Pixel 0 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X00010001 = &11 = 17 (rechts)   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
2: Pixel 1 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X10101010 = &AA = 170 (links) Pixel 0 -> Datentypen: Bytes
Datenbreite: Bytes
Byte
: &X01010101 = &55 = 85 (rechts)

Farbbytes

Jedesmal wenn man für ein Textfenster oder die Grafikausgabe eine neue Vorder-oder Hintergrund-Tinte festlegt, wird das entsprechende Das Screen Pack: FarbbytesFarbbyte berechnet und in eine Speicherzelle des System-RAMs der Text- bzw. Grafik-VDU kopiert. Dieses Datentypen: Bytes
Datenbreite: Bytes
Byte
ist vollständig mit der gewünschten Die Bildausgabe: Tinten und FarbenTinte 'eingefärbt', würde man dieses Datentypen: Bytes
Datenbreite: Bytes
Byte
in den Bildschirm poken, so würden alle durch das Datentypen: Bytes
Datenbreite: Bytes
Byte
betroffenen Pixel in dieser Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farbe
dargestellt.

Encoded Inks:
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
2: Die Bildausgabe: Tinten und FarbenTinte 00 -> &X00000000 = &00 = 0 Die Bildausgabe: Tinten und FarbenTinte 01 -> &X11111111 = &FF = 255   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
1: Die Bildausgabe: Tinten und FarbenTinte 00 -> &X00000000 = &00 = 0 Die Bildausgabe: Tinten und FarbenTinte 01 -> &X11110000 = &Der Zeichensatz des Schneider CPC: &F0 = 240F0 = 240 Die Bildausgabe: Tinten und FarbenTinte 02 -> &X00001111 = &0F = 15 Die Bildausgabe: Tinten und FarbenTinte 03 -> &X11111111 = &FF = 255   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
0: Die Bildausgabe: Tinten und FarbenTinte 00 -> &X00000000 = &00 = 0 Die Bildausgabe: Tinten und FarbenTinte 01 -> &X11000000 = &Der Zeichensatz des Schneider CPC: &C0 = 192C0 = 192 Die Bildausgabe: Tinten und FarbenTinte 02 -> &X00001100 = &0C = 12 Die Bildausgabe: Tinten und FarbenTinte 03 -> &X11001100 = &CC = 204 Die Bildausgabe: Tinten und FarbenTinte 04 -> &X00110000 = &30 = 48 Die Bildausgabe: Tinten und FarbenTinte 05 -> &X11110000 = &Der Zeichensatz des Schneider CPC: &F0 = 240F0 = 240 Die Bildausgabe: Tinten und FarbenTinte 06 -> &X00111100 = &3C = 60 Die Bildausgabe: Tinten und FarbenTinte 07 -> &X11111100 = &FC = 252 Die Bildausgabe: Tinten und FarbenTinte 08 -> &X00000011 = &03 = 3 Die Bildausgabe: Tinten und FarbenTinte 09 -> &X11000011 = &C3 = 195 Die Bildausgabe: Tinten und FarbenTinte 10 -> &X00001111 = &0F = 15 Die Bildausgabe: Tinten und FarbenTinte 11 -> &X11001111 = &CF = 207 Die Bildausgabe: Tinten und FarbenTinte 12 -> &X00110011 = &33 = 51 Die Bildausgabe: Tinten und FarbenTinte 13 -> &X11110011 = &F3 = 243 Die Bildausgabe: Tinten und FarbenTinte 14 -> &X00111111 = &3F = 63 Die Bildausgabe: Tinten und FarbenTinte 15 -> &X11111111 = &FF = 255

Um nun ein Pixel in einer bestimmten Die Bildausgabe: Tinten und FarbenTinte zu setzen, muss man

• aus Bildschirm-Basis und Scroll-Offset und der Die verwendeten Abkürzungen bedeuten: x:X- und Y-Koordinate
  die Adresse des betroffenen Datentypen: Bytes
Datenbreite: Bytes
Bytes
ermitteln. • mit der X-Koordinate die zutreffende Kodierung der Tinten: Pixel-MaskenPixel-Maske bestimmen. • mit der Maske die nicht betroffenen 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
ausblenden und retten • mit der Maske und dem Das Screen Pack: FarbbytesFarbbyte ein Ein-Bit-Farbbyte erzeugen • das Datentypen: Bytes
Datenbreite: Bytes
Byte
mit dem zu setzenden Pixel und das Datentypen: Bytes
Datenbreite: Bytes
Byte
mit den nicht betroffenen Pixeln entsprechend dem Vordergrund-Modus verknüpfen • und dieses Datentypen: Bytes
Datenbreite: Bytes
Byte
dann in den Bildschirmspeicher zurücktransportieren.

Nicht gerade wenig, was da für ein einzelnes Pünktchen geleistet werden muss.

Vielfarben-Zeichen

Wenn man im Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
2 ein Zeichen ausdruckt, so kann man alleine mit der Zeichenmatrix alle betroffenen 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
setzen oder löschen, weil sich hier Pixel und 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
1 zu 1 entsprechen. Macht man die Text-Ausgabe glauben, dass der Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
2 eingestellt sei, während die Bild-Ausgabe tatsächlich in Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
1 oder 0 erfolgt, so beeinflussen immer zwei oder vier 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
der Zeichenmatrix ein Pixel im Bildschirm. Man kann dann, einfach indem man entsprechend definierte Sonderzeichen druckt, 4- oder gar 16-farbige Sprites o. AE. erzeugen. Dabei müssen nur im Farb-Byte für PEN immer alle 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
gesetzt sein, damit nicht dadurch wieder 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
aus dem gedruckten Zeichen ausgeblendet werden.

Das folgende Programm definiert ein 4-Farben-Zeichen für Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
1, das hier 2*2 Buchstabenpositionen groß ist. Um aber 4 Buchstabenpositionen in Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
1 zu füllen, müssen in Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
2 acht Zeichen definiert werden. Außerdem muss man mit den Bildschirmgrenzen aufpassen, die je nach Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
verschieden sind.

Das Programm ist so gestaltet, dass man es selbst leicht ändern kann, um für eigene Programme (Spiele, Menüs etc.) Vierfarb-Zeichen zu definieren. Die Auswertung der Datazeilen ist etwas kompliziert geraten, um in den Datazeilen selbst das Zeichen leicht darstellen zu können.

 90 ' Vierfarb-Zeichen in Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
1 Erklärung zu den Anschlüssen: Vcc und Vss
Erklärung zu den Anschluss-Bezeichnungen: Vcc und Vss
vs
. 23.5.86 (c) G.W. 91 ' --------------------------- ----------- -------- 92 ' 93 ' Die einzelnen Zeichen in den Datazeilen bedeuten: 94 ' 100 ' 'M' = Ink 3 'Die verwendeten Abkürzungen bedeuten: x:X' = Ink 2 110 ' '-' = Ink 1 ' ' = Ink 0 120 ' 130 Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
modus
=&B7C3 ' Sys-Speicher für Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
: CPC 664/6128: &B7C3 140 RESTORE ' CPC 464: &B1C8 150 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
1:PEN 3:PAPER 0 ' Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
1 einstellen. Das Screen Pack: FarbbytesFarbbytes initialisieren. 160 POKE Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
modus
,2 ' Screen-Pack auf Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 0
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 1
Die 3 verschiedenen Betriebsarten der PIO 8255: Modus 2
Modus
2 einstellen. 170 WINDOW 1,80,1,25 ' Fenstergrenzen wieder auf ganzen Bildschirm. 180 ' 201 DATA " MMMMMMMMMMMM " 202 DATA " MMMMMMMMMMMMMM " 203 DATA "MMXX MMM" 204 DATA "MMXXX MM" 205 DATA "MM XXX---- MM" 206 DATA "MM XXX---- MM" 207 DATA "MM -XXX---- MM" 208 DATA "MM --XXX--- MM" 209 DATA "MM ---XXX-- MM" 210 DATA "MM ----XXX- MM" 211 DATA "MM ----XXX MM" 212 DATA "MM ----XXX MM" 213 DATA "MM XXXMM" 214 DATA "MMM XXMM" 215 DATA " MMMMMMMMMMMMMM " 216 DATA " MMMMMMMMMMMM " 220 ' 230 DIM s(15,3) ' Datazeilen auslesen. Etwas kompliziert, 240 z$="-XM" ' damit die Datazeilen einfach darzustellen sind. 250 FOR i=0 TO 15 260 Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: RD und WR - read und write
Erklärung zu den Anschluss-Bezeichnungen: RD - Read
READ
s$ 270 FOR j=0 TO 3 280 o$="":u$="" 290 FOR k=1 TO 4 300 LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
$=BIN$(INSTR(z$,LEFT$(s$,1)),2) 304 o$=o$+RIGHT$(LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
$,1) 310 u$=u$+LEFT$(LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL
LOW KERNEL JUMPBLOCK: 001B: LOW KL FAR PCHL
LOW KERNEL JUMPBLOCK: 003B: LOW EXT INTERRUPT
b
$,1) 320 s$=MID$(s$,2) 330 NEXT 340 s(i,j)=VAL("&Die verwendeten Abkürzungen bedeuten: x:X"+o$+u$) 350 NEXT 360 NEXT 370 ' 380 z=248 ' Symbols definieren. 390 FOR i=0 TO 8 STEP 8 400 FOR j=0 TO 3 410 PRINT CHR$(25);CHR$(z); 420 FOR k=i TO i+7:PRINT CHR$(s(k,j));:NEXT 430 z=z+1 440 NEXT 450 NEXT ' Passende Die Grafik: Farben
Die Bildausgabe: Tinten und Farben
Farben
einstellen und Zeichen ausgeben. 460 ' 470 INK 0,0:INK 1,26:INK 2,18:INK 3,15 480 LOCATE 10,10:PRINT CHR$(248);CHR$(249);CHR$(250);CHR$(251) 490 LOCATE 10,11:PRINT CHR$(252);CHR$(253);CHR$(254);CHR$(255) 500 GOTO 500

Valid HTML   Valid CSS