Die zentrale Ausgaberoutine des C64 wird mit jsr $ffd2 aufgerufen.
Durch die Aenderung der Adresse in den Speicherstellen $0326/$0327
kann die Augabe auf eine eigene Routine umgeleitet werden, wovon
in screen.a Gebrauch gemacht wird.
Um weitgehend kompatibel zum Betriebssystem des C64 zu sein - was
insbesondere fuer die Verwendung innerhalb von BASIC oder G-Pascal
wichtig ist - wird in screen.a (weitgehend) der gleiche Aufbau und
die gleichen Funktionsnamen verwendet, wie im Original des C64.
Eine wesentliche Einschraenkung/Abweichung ist die, dass in
screen.a keine logischen Doppelzeilen unterstuetzt werden. Der
C64 fasst zwei physische Bildschirmzeilen zu je 40 Zeichen zu
einer logischen Zeile mit 80 Zeichen zusammen. Dies macht aber
mehr oder weniger komplizierte Ablaeufe im Betriebssystem
erforderlich. Hierauf verzichtet screen.a komplett und
unterstuetzt nur Zeilen mit 40 Zeichen.
Dafuer kann screen.a jedoch auch rueckwaerts scrollen, wenn der
Cursor am oberen Bildschirmrand nach oben bewegt wird.
Zum tieferen Verstaendnis der Bildschirmausgabe gibt es hier
ein kommentiertes ROM-Listing und eine Simulation der Original-
Bildschirmausgabe in G-Pascal. Hierbei wurden jedoch alle Teile,
die die Handhabung logischer Doppelzeilen betreffen, ausgespart.
Ablauf einer Bildschirmausgabe
------------------------------
Die Ausgaberoutine prueft zuerst, auf welches Geraet die Ausgabe
erfolgen soll, und wenn dies der Bildschirm ist, wird die Haupt-
routine fuer die Beilschirmausgabe output_to_screen aufgerufen.
Dort wird danach unterschieden, ob die Umschalttaste gedrueckt
(ASCII-Code >= 128) oder nicht gedrueckt (ASCII-Code < 128)
wurde und entsprechend in die Routinen shifted_chars bzw.
unshifted_chars verzweigt. Diese beiden Routinen haben einen
simultanen Aufbau in der Verarbeitung des ASCII-Codes:
unshifted_chars shifted_chars
ASCII ASCII
---------------------------------------------------------------
13 Zeilenumbruch 128+13=141 Zeilenumbruch
17 Cursor nach unten 128+17=145 Cursor nach oben
18 Inversdarstellung an 128+18=146 Inversdarstellung aus
19 Cursor oben links 128+19=147 Bildschirm loeschen
20 Zeichen loeschen 128+20=148 Leerzeichen einfuegen
29 Cursor nach rechts 128+29=157 Cursor nach links
>= 32 Zeichen ausgeben >= 160 Zeichen ausgeben
In screen.a wird bei Shift-Return (ASCII 141) ein Zeilenumbruch
nach oben mit ggf. rueckwaertigem Scrolling durchgefuehrt.