C 64
Tips & Tricks

Befehlserweiterung für den C 64

Neue Basic-Anweisungen zur Bildschirmsteuerung und für maskierte Dateneingaben: TAB (X,Y) I CHR$ (!) / INPUT (!), " ….

Die vorgestellten Zusatzbefehle wurden ursprünglich zur Unterstützung eines kleineren Dateiprogramms entwickelt. Natürlich sind — besonders für die Bildschirmsteuerungen — andere Einsatzmöglichkeiten denkbar. Im Handbuch des C 64 finden Sie im Anhang F eine Tabelle der ASCII- und CHR$-Codes. Da einige Zeichen nicht belegt sind, bietet es sich an, diesen die neuen Steueranweisungen zuzuordnen.

Tabelle 1 zeigt die neuen CHR$-Codes.

CHR$(6) Invertiert den Bildschirm. Mit dem folgenden Programm blinkt der gesamte Bildschirm.
»10 FOR I=0 TO 100 : NEXT : PRINT CHR$(6): GOTO 10«
CHR$(7) RETURN auf der Cursorzeile. Der Cursor springt zum linken Bildschirmrand, jedoch nicht eine Zeile tiefer.
CHR$(21) Bildschirm um eine Spalte nach oben verschieben.
CHR$(22) Bildschirm um eine Spalte nach unten verschieben.
CHR$(23) Bildschirm um eine Zeile nach rechts verschieben.
CHR$(24) Bildschirm um eine Zeile nach links verschieben.
CHR$(25) Löscht die Cursorzeile.
CHR$(26) Löscht den Bildschirm oberhalb des Cursors.
CHR$(27) Löscht den Bildschirm unterhalb des Cursors.
CHR$(11) Entriegelt die STOP-Taste.
CHR$(12) Verriegelt die STOP-Taste.
CHR$(15) Entriegelt »STOP-RESTORE«.
CHR$(16) Verriegelt »STOP-RESTORE«.
Tabelle 1. Die neuen CHR$-Codes

Sicherlich haben Sie schon einmal die Erfahrung gemacht, daß Freunde bei selbstgeschriebenen Programmen erstaunlich schnell die STOP-Taste finden. Die »Treffsicherheit« steigt dabei mit zunehmender Unkenntnis über Computer. Mit den letzten vier — in der Tabelle aufgeführten — CHR$-Codes können die STOP-Taste und die STOP-RESTORE-Funktion ein- und ausgeschaltet werden.

Aber Vorsicht: Das folgende Beispielprogramm kann nach RUN nicht wieder unterbrochen werden. 10 PRINT CHR$(12);CHR$(16) 20 GOTO 20

Nur durch RESET oder ROSOF (Reset On Switch On ofF) kann der Computer zurückgeholt werden; das Programm ist jedoch in beiden Fällen verloren.

Nebenbei beziehen sich die neuen CHR$-Codes nur auf den Bildschirm. Da viele Drucker nicht in der Lage sind, einen einmal ausgedruckten Text beispielsweise nach links zu verschieben, werden die neu belegten CHR$-Codes unverändert an die Schnittstelle weitergegeben.

Die nächste Erweiterung betrifft den TAB-Befehl. Folgt zwischen den Klammern nur eine Angabe, so wird die Befehlsführung weiterhin dem Commodore-Basic überlassen. Falls der Klammerausdruck zwei Koordinaten (erst X, dann Y) enthält, wird TAB durch das Maschinenprogramm ausgeführt. Der Cursor wird in diesem Fall auf die Bildschirmkoordinaten X, Y gesetzt. Der Befehl »PRINT TAB (0,0);"TEST"« schreibt beispielsweise »TEST« an den oberen linken Bildschirmrand.

Als weitere Neuerung kann der INPUT-Befehl nun durch Angabe einer Feldbreite »maskiert« werden. Das funktioniert folgendermaßen: Der maskierte INPUT-Befehl wird durch eine Längenangabe — in Klammern — gekennzeichnet. Falls beispielsweise eine Eingabe auf zehn Zeichen begrenzt werden soll, muß die Anweisung wie folgt lauten: »10 INPUT (10),"EINGABE"; E$«.

Die Feldgrenzen können anschließend nicht mehr überschritten werden. Außerdem unterdrückt das Programm die Eingaben HOME, CLR HOME, CURSOR UP/DOWN sowie das Anführungszeichen. Die Tasten DELete und INST verändern nur die Maske; also in dem Beispiel die ersten zehn Positionen hinter dem Text »EINGABE«.

Bildschirmmasken ohne Probleme

Zusätzlich kann in dem Feld eine Maske unterlegt werden. Hierzu das folgende Testprogramm: 10 PRINT "12345678……TEST";CHR$(7); 20 INPUT (10), "EINGABE"; D$ 30 D$ = LEFT$(D$,10) : PRINT D$

Der PRINT-Befehl schreibt zuerst die Zahlen 1-8, dann zehn Punkte (als Maske) und zuletzt das Wort »TEST«. Durch CHR$(7) folgt anschließend ein RETURN auf der Bildschirm-Zeile. Der Text »EINGABE« des INPUT-Befehls überschreibt dann die Zahlen 1 bis 8 und das Ergebnis sieht wie folgt aus: EINGABE?………TEST

Falls Sie nun einige Zeichen eingeben und anschließend mit der DEL-Taste löschen, werden am Maskenende neue Punkte »nachgeschoben«. Das Wörtchen »TEST« bleibt jedoch unverändert, da sich die Eingaben DEL und INST nur auf die Eingabemaske beziehen. Nach RETURN wird die Maske (mit SPACEs) gelöscht. In der Zeile 30 muß der String zuletzt auf die Maskenlänge begrenzt werden, da das Wort »TEST« ebenfalls in die Variable übernommen wurde.

Nachdem Sie jetzt wissen was das Programm macht, brauchen Sie »nur« noch das Basic-Ladeprogramm einzugeben. Die Daten sind als Hexadezimalwerte aufgeführt. Bei dem letzten Wert handelt es sich um die Prüfsumme der entsprechenden Zeile. Nach »RUN« meldet das Programm beispielsweise »Zeile 1009 PRUEFSUMMENFEHLER«, so daß Sie genau erfahren, in welcher DATA-Zeile Sie das Maschinenprogramm »umgeschrieben« haben.

Das Programm wird mit SYS 49152 gestartet. Die neuen Funktionen stehen dann sofort zur Verfügung.

(Heino Velder/ev)
1 rem *****************************************
2 rem *          basic-erweiterungen          *
3 rem *  tab(x,y) / chr$(x) / input (x),"..   *
4 rem *                                       *
5 rem *         by heino velder, 5.1.84       *
6 rem *                                       *
7 rem *****************************************
8 :
10 dim h(75) : for i=0 to 9
20 h(48+i)=i : h(65+i)=i+10 : next
30 for i=49152 to 50341 : read a$
40 h=asc(left$(a$,1)):l=asc(right$(a$,1))
50 d=h(h)*16+h(l) : s=s+d : poke i,d
60 a=a+1 : if a<10 then next : end
65 print "zeile:";1000+z;
70 read v : a=0 : z=z+1 : if v=s then 90
80 print" pruefsummenfehler !"; : stop
90 s=0 : print : next : end
99 :
1000 data ad,09,03,c9,c0,f0,3d,8d,8b,c4, 1355
1001 data ad,08,03,8d,8a,c4,ad,26,03,8d, 1014
1002 data 88,c4,ad,27,03,8d,89,c4,a9,c0, 1382
1003 data 8d,09,03,a9,45,8d,08,03,a2,6a,  811
1004 data a9,c2,d0,12,ad,8a,c4,8d,08,03, 1248
1005 data ad,8b,c4,8d,09,03,ae,88,c4,ad, 1340
1006 data 89,c4,8e,26,03,8d,27,03,60,98,  947
1007 data 48,a0,01,b1,7a,f0,17,c9,99,d0, 1357
1008 data 0c,a9,4c,85,73,a9,15,85,74,a9, 1113
1009 data c2,d0,17,c9,85,d0,15,20,7b,c0, 1335
1010 data a5,73,e0,4c,d0,0c,a9,e6,85,73, 1447
1011 data a9,7a,85,74,a9,d0,85,75,68,a8, 1439
1012 data 6c,8a,c4,c8,b1,7a,c9,20,f0,f9, 1663
1013 data c9,28,f0,01,60,20,fb,a8,20,9b, 1216
1014 data b7,c9,29,d0,68,20,73,00,c9,2c, 1129
1015 data d0,61,8a,48,20,73,00,c9,22,d0, 1105
1016 data 0b,20,bd,ae,a9,3b,20,ff,ae,20, 1127
1017 data 21,ab,aa,a5,d3,8d,92,c4,ee,92, 1617
1018 data c4,18,68,6d,92,c4,ee,92,c4,8d, 1496
1019 data 93,c4,a8,b1,d1,8d,94,c4,ad,92, 1701
1020 data c4,8d,95,c4,ce,95,c4,78,ad,14, 1546
1021 data 03,8d,8e,c4,ad,15,03,8d,8f,c4, 1159
1022 data a9,01,8d,14,03,a9,c2,8d,15,03,  862
1023 data 58,8a,20,ce,ab,20,f3,c1,58,a0, 1351
1024 data 00,84,c6,88,c6,7b,4c,fb,a8,4c, 1358
1025 data 5f,ab,78,a5,9d,f0,06,20,f3,c1, 1422
1026 data 4c,81,ea,ad,95,c4,a5,c6,d0,03, 1531
1027 data 4c,e2,c1,ad,8e,02,4a,6a,05,cb, 1200
1028 data a2,06,dd,0e,c2,f0,50,ca,10,f8, 1383
1029 data a6,cb,e0,02,f0,0e,e0,01,f0,0a, 1324
1030 data a6,d3,ec,95,c4,90,03,8e,95,c4, 1592
1031 data a6,d3,c9,82,d0,05,ec,92,c4,f0, 1739
1032 data 2e,c9,80,d0,2c,ac,93,c4,cc,95, 1495
1033 data c4,f0,03,ee,95,c4,c4,d3,f0,13, 1688
1034 data 88,b1,d1,48,b1,f3,29,0f,c8,91, 1415
1035 data f3,68,29,7f,91,d1,88,d0,e9,a9, 1615
1036 data 20,91,d1,a9,00,85,cf,f0,7a,c9, 1458
1037 data 00,d0,3d,a4,d3,88,c8,b1,d1,48, 1438
1038 data b1,f3,29,0f,88,91,f3,68,29,7f, 1272
1039 data 91,d1,c8,cc,93,c4,d0,ea,a9,00, 1712
1040 data 85,cf,ad,94,c4,91,d1,ac,92,c4, 1725
1041 data cc,95,c4,f0,03,ce,95,c4,88,a9, 1648
1042 data 20,91,d1,a6,c6,a9,9d,9d,76,02, 1353
1043 data a9,82,d0,84,c9,01,d0,1e,ee,93, 1464
1044 data c4,a9,00,85,cf,a4,d3,b1,d1,29, 1507
1045 data 7f,91,d1,a9,20,ac,95,c4,c8,cc, 1603
1046 data 93,c4,f0,12,91,d1,d0,f6,ec,93, 1792
1047 data c4,90,09,a6,c6,e6,c6,a9,9d,9d, 1624
1048 data 77,02,a9,00,85,d8,85,c7,4c,81, 1176
1049 data ea,a5,c6,f0,f3,c6,c6,10,ef,78, 1851
1050 data ad,8e,c4,8d,14,03,ad,8f,c4,8d, 1328
1051 data 15,03,60,a9,c0,48,a9,fc,48,08, 1054
1052 data 08,08,08,6c,8e,c4,07,87,33,b3,  842
1053 data 81,bf,bb,e6,7a,d0,02,e6,7b,98, 1574
1054 data 48,a0,00,b1,7a,c9,a3,d0,3d,a5, 1329
1055 data 7b,48,a5,7a,48,20,9b,b7,c9,2c, 1169
1056 data d0,2a,8a,48,a9,13,20,d2,ff,20, 1177
1057 data 9b,b7,c9,29,d0,27,8a,f0,08,a9, 1382
1058 data 11,20,d2,ff,ca,d0,f8,68,aa,f0, 1686
1059 data 06,20,3b,ab,ca,d0,fa,20,73,00, 1075
1060 data 68,68,d0,06,68,85,7a,68,85,7b, 1141
1061 data 68,a8,4c,79,00,4c,5f,ab,08,48,  891
1062 data 8d,96,c4,a5,9a,c9,03,d0,17,98, 1393
1063 data 48,8a,48,ad,96,c4,a2,24,dd,61, 1317
1064 data c4,f0,0e,ca,ca,ca,10,f6,68,aa, 1592
1065 data 68,a8,68,28,4c,ca,f1,78,bd,62, 1342
1066 data c4,8d,90,c4,bd,63,c4,8d,91,c4, 1643
1067 data 20,dc,c2,a0,00,a2,04,ad,88,02, 1083
1068 data 84,d9,84,db,85,da,85,e0,29,03, 1452
1069 data 09,d8,85,dc,85,e2,ad,21,d0,29, 1392
1070 data 0f,85,e3,20,ce,c2,20,d1,c2,68, 1346
1071 data aa,68,a8,68,28,18,58,60,6c,90, 1046
1072 data c4,a2,0b,bd,97,c4,95,d9,ca,10, 1489
1073 data f8,60,a2,0b,b5,d9,9d,97,c4,ca, 1621
1074 data 10,f8,60,a9,00,85,d3,60,a2,31, 1180
1075 data a9,ea,d0,04,a2,fd,a9,c2,8e,14, 1555
1076 data 03,8d,15,03,60,20,ea,ff,a9,00,  954
1077 data 85,91,4c,34,ea,a2,47,a9,fe,d0, 1504
1078 data 04,a2,c1,a9,fe,8e,18,03,8d,19, 1117
1079 data 03,60,b1,d9,49,80,91,d9,b1,db, 1452
1080 data 29,0f,c5,e3,d0,05,ad,86,02,91, 1147
1081 data db,c8,d0,ea,e6,da,e6,dc,ca,d0, 2169
1082 data e3,60,38,98,e9,28,85,df,85,e1, 1518
1083 data b0,04,c6,e0,c6,e2,a0,28,b1,d9, 1620
1084 data 91,df,b1,db,91,e1,c8,d0,f5,ca, 1989
1085 data f0,0a,e6,da,e6,dc,e6,e0,e6,e2, 2058
1086 data d0,e8,a0,c0,a9,20,91,d9,a5,e3, 1747
1087 data 91,db,c8,d0,f5,60,18,a5,da,69, 1625
1088 data 03,85,da,85,e0,29,03,09,d8,85, 1113
1089 data dc,85,e2,a9,28,85,df,85,e1,a0, 1662
1090 data d7,88,b1,d9,91,df,b1,db,91,e1, 1879
1091 data 98,d0,f4,ca,f0,0a,c6,da,c6,dc, 1890
1092 data c6,e0,c6,e2,d0,e7,a0,27,a9,20, 1685
1093 data 91,d9,a5,e3,91,db,88,10,f5,60, 1611
1094 data a2,19,a0,26,b1,d9,48,b1,db,c8, 1447
1095 data 91,db,68,91,d9,88,88,10,f1,c8, 1559
1096 data 20,42,c4,d0,e9,60,a2,19,a0,01, 1179
1097 data b1,d9,48,b1,db,88,91,db,68,91, 1611
1098 data d9,c8,c8,c0,28,d0,ef,88,20,42, 1530
1099 data c4,d0,e7,60,a5,d1,85,d9,a5,d2, 1830
1100 data 29,03,09,d8,85,da,a0,27,a9,20, 1020
1101 data 91,d1,a5,e3,91,d9,88,10,f5,60, 1601
1102 data a6,d2,18,a5,d3,65,d1,90,01,e8, 1463
1103 data e8,85,df,a0,ff,d0,1f,a6,d2,18, 1642
1104 data a5,d3,65,d1,90,01,e8,a8,8a,85, 1502
1105 data da,29,03,09,d8,85,dc,a9,ff,85, 1397
1106 data df,ad,88,02,18,69,04,aa,c8,a9, 1206
1107 data 01,91,d9,a5,e3,91,db,c4,df,d0, 1746
1108 data f3,e6,da,e6,dc,e4,da,d0,eb,60, 2126
1109 data a9,20,91,d9,a5,e3,91,db,18,a9, 1512
1110 data 28,65,d9,85,d9,85,db,90,02,e6, 1436
1111 data da,a5,da,29,03,09,d8,85,dc,ca, 1425
1112 data 60,0b,ec,c2,0c,f2,c2,0f,07,c3, 1202
1113 data 10,0d,c3,06,18,c3,07,e7,c2,15,  902
1114 data 36,c3,16,6c,c3,17,ac,c3,18,c6, 1186
1115 data c3,19,e2,c3,1a,fc,c3,1b,0d,c4, 1350
1116 data 00,00,00,00,00,00,00,00,00,00, 0000
1117 data 00,00,00,00,00,00,00,00,00,00, 0000
1118 data 00,00,00,00,00,00,00,00,00,00, 0000
Listing »Basic-Erweiterungen«
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →