Die einfachste Art der Ausgabe auf den Bildschirm des Computers ist das
direkte Beschreiben des Bildwiederholspeichers. Hierbei muessen dann
allerdings Zeichen aus dem ASCII-Code in den Bildschirmcode umgewandelt
werden.
Die zweite Moeglichkeit ist, mit Hilfe einer in den ROM's vorhandenen Routine
Zeichen im ASCII-Code auszugeben. Dieses Kapitel beschreibt nur die Ausgabe
im ASCII-Code an der augenblicklichen Cursor-Position.
Die verwendeten ROM-Routinen und Speicherplatze sind:
Name 2001 3001 8001 Beschreibung
---------------------------------------------------------------
BSOUT $FFD2 $FFD2 $FFD2 Zeichen zum Schirm
CLRSCR $E236 $E229 $E015 Schirminhalt loeschen
CRLF ---- $FDD0 $D534 Ausgabe von RETURN ($0D)
FPOUT $DCA9 $DCE3 $CF8D Ausgabe real-Zahl
INTOUT $DC9F $DCD9 $CF83 Ausgabe integer-Zahl
SCROLD ---- ---- $E021 Schirminhalt nach unten rollen
SCROLU $E559 $E53F $E024 Schirminhalt nach oben rollen
SETCUR $E5DB $E25D ---- Cursor positionieren
SPAC2 ---- $FDCA $D52E Ausgabe: 2 Leerzeichen
SPACE ---- $FDCD $D531 Ausgabe: 1 Leerzeichen
STROUT $CA2E $CA23 $BB24 Stringausgabe
STROUTZ $CA27 $CA1C $BB1D Stringausgabe
WROA ---- $E76A $D717 Ausgabe Hex-Adresse
WROB ---- $E775 $D722 Ausgabe Hex-Byte
WRTWO ---- $E784 $D731 zwei Zeichen zum Schirm
CURCOL $E2 $C6 $C6 Curscrspaite(0-39/0-39/0-79)
CUROW $F5 $D8 $D8 Cursorzeile (0-24)
FAC1 $B0-B6 $5E-64 $5E-64 Floating Akkumulator #1
STRADR $71-72 $1F-20 $1F-20 Stringadresse (low, high)
Diese Routine gibt ein einzelnes ASCII-Zeichen zum Schirm aus:
LDA CHR
JSR BSOUT
Ausgabe von zwei Zeichen ist mit folgender Routine moeglich:
LDX CHR1
LDA CHR2
JSR WRTWO
Ausgabe von RETURN: JSR CRLF
Ausgabe von 1 Leerzeichen: JSR SPACE
Ausgabe von 2 Leerzeichen: JSR SPAC2
Fuer die Stringausgabe gibt es zwei Moeglichkeiten:
a) Die Anfangsadresse des Strings wird in STRADR erwartet, die Laenge
des Strings im X-Register:
JSR STROUT
Beispiel: Ausgabe des Textes "PET" RETURN
LDX #4 ;STRINGLAENGE
LDA #L,MSG ;LOW BYTE
STA STRADR
LDA #H,MSG ;HIGH BYTE
STA STRADR+1
JSR STROUT ;STRINGAUSGABE
MSG .BY 'PET' $0D
b) Die Anfangsadresse des Strings wird im A-Register (low Byte) und Y-Register
(high Byte) uebergeben.
Der String endet mit einem 00-Byte:
JSR STROUTZ
Beispiel : Ausgabe des Textes ,cbm' RETURN
LDA #L,MSG ;LOW BYTE
LDY #H,MSG ;HIGH BYTE
JSR STROUTZ ;STRINGAUSGABE
MSG .BY 'cbm' $0D 0
Hinweis: In den ROM's der 8001-Serie wurde diese Routine abgeaendert.
Das den String abschliessende Null-Byte wird mit der Stringlaenge ueberschrieben,
das nachfolgende Byte
wird auf $FF gesetzt. Diese Aenderung kann bei Programmen,die im RAM liegen, zu unerwuenschten
Ergebnissen, bzw. zum Aufhaengen des Rechners fuehren!
Abhilfe: Verwendung der Routine STROUT (s.Kap. 3.2.a) oder Abschluss des Strings mit zwei Null-Bytes.
Soll der String mehrfach ausgegeben werden, so ist vor jedem Aufruf von STROUTZ das erste Null-Byte
(unmittelbar am Stningende) wieder auf Null zu setzen.
Diese Routine gibt die im AĆRegister stehende Zahl als zweistellige Hexadezimalzahl
zum Schirm aus (nur 3001/8001):
JSR WROB Die folgende Routine gibt die Adresse aus $FB-FC als vierstellige Hexadezimalzahl
zum Schirm aus (nur 3001/8001):
JSR WROA
Eine vorzeichenlose ganze Zahl (Adresse,Bereich 0-65535) wird auf dem Schirm
ausgegeben. Die Zahl wird im X-Register (low Byte) und A-Register (high Byte)uebergeben:
JSR INTOUT Der Floating-point Akkumulator FAC1 wird mit der folgenden Routine auf den Schirm ausgegeben:
JSR FPOUT Verschieben des Schirminhaltes um eine logische Zeile (40 oder 80 Zeichen bei 2001/3001) nach oben:
JSR SCROLU
In den Computern der 8001-Serie kann der Bildschirminhalt zusaetzlich um jeweils eine Zeile
nach unten geschoben werden:
JSR SCROLD Das LOeschen des Bildschirmes ist auf zwei Arten moeglich :
a) Ausgabe des Zeichencodes der "CLR"-Taste :
LDA #$93
JSR BSOUT
b) direkter Ansprung der Loeschroutine
JSR CLRSCR
Der Cursor kann durch das Setzen von Zeilenregister (CUROW), Spaltenregister (CURCOL)
und Cursor-Adresse neu gesetzt werden. Die Berechnung der Cursor-Adresse kann durch
eine ROM-Routine erfolgen.
LDA #zeile ; gewuenschte Zeilennummer
STA CUROW ; in Zeilenregister setzen
LDA #spalte ; gewuenschte Spaltennummer
STA CURCOL ; in Spaltenregister setzen
JSR SETCUR ; Cursoradresse berechnen
Letzte Änderung: 2019-01-04 10:05:39