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«. |
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