Bunte Zahlen
Hexzahlen einlesen
Hexzahlen einlesen
100 init
110 repeat
120 for i=0 to 9:c=rnd(1)*15+1:
    d=rnd(1)*10
130 colour,c
140 for j=0 to 4:k=peek($cb)
150 print spc(i*4)pt$(dg%(d,j))
160 next:print at(0,lin-4)"";
170 next:print at(0,lin-4)"";
180 until not(k=64)
190 colour,12
200 end


220 proc init
230 data df,df,df, df,20,df, 20,df,20,
    df,20,20, 20,20,df, df,df,20, 20,
    df,df
235 data 20,20,20
240 data 0,1,1,1,0, 2,5,2,2,0, 0,4,6,3,0,
    0,4,6,4,0, 1,1,0,4,4, 0,3,0,4,0
250 data 0,3,0,1,0, 0,4,2,2,2, 0,1,0,1,0,
    0,1,0,4,0
260 dim pt$(7),dg%(9,4):div:colour
270 for i=0 to 7:for j=0 to 2:readx$:
    pt$(i)=pt$(i)+chr$(nrm(x$)):next:next
280 for i=0 to 9:for j=0 to 4:readdg%(i,j):
    next:next
290 end proc

Die vom Programm während des Laufs angezeigten bunten Zahlen werden in der Prozedur "init" (Zeilen 220 bis 290) festgelegt. Sie bestehen aus den beiden Zeichen 223 ($df) und 32 ($20), die in acht verschiedenen Dreier-Anordnungen abgelegt sind (Zeilen 230 und 235). Diese werden in der Zeile 280 mit den Angaben in den Zeilen 240 und 250 zu den zehn Ziffern 0 bis 9 kombiniert, die aus je 5×3 Zeichen bestehen. Aus diesen Vorgaben bastelt das Programm per Zufallsgenerator die Daueranzeige zusammen (Zeilen 110 bis 180) und zeigt sie so wie im großen Bild permanent an (beenden mit einer beliebigen Taste, siehe Zeile 140). Ein schöner Bildschirmschoner.

Der Hinweis für Programmierer, wie man (z.B. aus Data-Zeilen wie hier) Hex-Zahlen einliest, findet sich in Zeile 270: Die Hex-Zahl liegt als zwei- oder vierstelliger String vor (Z. 230/235) und wird mit READ auch so eingelesen (Z. 270). Um mit den Zahlenwerten in diesen Strings rechnen zu können, verwenden wir die Funktion NRM(). Sie liefert eine von TSB verwertbare Fließkommazahl zurück.


Vorgehensweise beim Einlesen von Hex-Strings: DATA c1: READ x$: PRINT CHR$(NRM(x$)); (zeigt ein großes "A")


Ein weiteres Beispiel für das Einlesen von Hex-Werten aus DATA-Zeilen:

100 mem: cset1: mayhem: colour,8
120 for l=0 to 23
130 for s=0 to 4
140 for ch=0 to 7: readm$(ch): next
150 for co=0 to 7: readc%(co): next
160 for ch=0 to 7: z=nrm(m$(ch)): c=c%(ch)
170 fill l,s*8+ch,1,1,z,c
180 next: next: next
190 fill 24,0,40,1,$3d,8: do null
200 :
210 nrm: colour11,12,0: div: print":)"
999 end

4990 rem" Zeile 0
5000 data 0d,0d,0d,98,00,00,00,00
5001 data 13,13,13,13, 0, 0, 0, 0
5005 data 00,00,00,00,00,00,00,00
5006 data  0, 0, 0, 0, 0, 0, 0, 0
5010 data 00,00,00,00,00,00,00,00
5011 data  0, 0, 0, 0, 0, 0, 0, 0
5015 data 00,00,00,00,00,00,00,00
5016 data  0, 0, 0, 0, 0, 0, 0, 0
5017 data 00,00,00,00,00,00,00,00
5018 data  0, 0, 0, 0, 0, 0, 0, 0
5020 rem" Zeile 1
5025 data 1a,1a,1a,1c,00,01,02,00
     ...
1100 proc mayhem
1105 bckgnds $83,10,9,x
1110 multi on
1115 poke $b21c,$e8: poke $b218,$ec
1120 scrld 1,x,2,"mayhem.fnt"
1125 poke $b21c,$04: poke $b218,$d8
1130 dim m$(7),c%(7)
1190 end proc
Mayhem in Monsterland
In je fünf Schüben wird jede Bildschirmzeile eingelesen, zuerst acht Hex-Codes für die (Multicolor-) Zeichen, dann die acht Farben dazu, zusammen 40 farbige Zeichen (Zeilen 120 bis 160). In Zeile 170 wird jedes Zeichen dann ausgegeben.

Die Umwandlung der Hex-Werte erfolgt in Zeile 160 bei z=nrm(m$(ch)) und liefert hier den Bildschirmcode eines Zeichens.

In der Prozedur "mayhem" werden zuerst mit BCKGNDS die Bildschirmfarben für den Multicolor-Textmodus gesetzt und mit MULTI ON der Multicolor-Modus eingeschaltet (Z. 1105/1110), dann lädt SCRLD den Mayhem-Zeichensatz nach $E800/$EC00 (Z. 1115/1120). In Zeile 1125 werden die SCRLD-Default-Adressen ($0400 und $D800) wiederhergestellt. Zeile 1130 erzeugt die beiden Arrays M$() und C%() für die Zeichen und Farben. Im Bild sieht man das Ergebnis des Programmdurchlaufs. Es steht dann in Zeile 190 bei DO NULL.