Basic auf Tastendruck
Beim Programm KEYS handelt es sich um ein Maschinenprogramm, das den Bereich $C000 - $C26B benötigt. Es erweitert das Basic um die beiden Befehle »KEY« und »DISPLAY«, mit denen die Funktionstasten belegt werden können beziehungsweise diese Belegung angezeigt werden kann. Zusätzlich können die wichtigsten Basic-Befehle durch gleichzeitiges Drücken von CTRL und einer Buchstabentaste »auf Knopfdruck« auf den Bildschirm geschrieben werden, was die Programmierarbeit doch sehr vereinfachen kann.
Bei der Initialisierung mit SYS 49152, die der Basic-Lader automatisch vornimmt, werden die Vektoren auf die Routine »Basic-Statement ausführen« und die Tastaturabfrage auf $C014 beziehungsweise $C11D verbogen.
Die beiden neuen Befehle werden an einem vorangestellten »!« erkannt, anschließend prüft das Programm auf die Anfangsbuchstaben K und D ($C014 - $C02D). Folgt keiner dieser Buchstaben, so wird ein »SYNTAX ERROR« ausgegeben ($C02E). Andernfalls verzweigt es nach $C031 (KEY) beziehungsweise $C0A7 (DISPLAY).
Der »KEY«-Befehl hat das Format !KEY N, »Befehl«. Hierbei muß N zwischen eins und zwölf liegen, der Befehl darf maximal neun Zeichen umfassen, wobei Anführungszeichen durch das Hochkomma zu ersetzen sind. Ein anschließendes RETURN erreicht man durch Eingabe von »£« als letztes Zeichen.
Die Funktionstasten F1 bis F8 werden wie üblich, die Tasten F9 bis F12 durch gleichzeitiges Drücken von »C=« und einer F-Taste erreicht.
Beispielsweise bewirkt !KEY 9, »RUN£«, daß nach gleichzeitigem Drücken von »C=« und »F1« ein Basic-Programm gestartet wird.
Der »DISPLAY«-Befehl hat das Format !DISPLAY und läßt sich ebenfalls auf eine Funktionstaste legen. Er bewirkt ein Löschen des Bildschirms und die Anzeige der Belegung der 12 Funktionstasten.
Die neue Tastaturabfrageroutine prüft zunächst, ob die Control-Taste gedrückt ist. Ist dies der Fall und ist die gleichzeitig gedrückte Taste belegt, so wird aus einer Tabelle ($C1A8-$C1DE) das Token des Befehls minus $7F geladen und mit dessen Hilfe der ASCII-Code der Buchstaben des Befehls aus der Tabelle der Basic-Befehlsworte geholt. Die einzelnen Buchstaben werden in den Tastaturpuffer geschrieben und ausgegeben.
Ist die Control-Taste nicht gedrückt, so wird geprüft, ob eine Funktionstaste gedrückt ist. Wenn ja, wird mit Hilfe des Tasten-Codes die Adresse der Belegung berechnet und die einzelnen Zeichen in den Tastaturpuffer geschrieben und ausgegeben.
(Klaus Russell / rg)Gliederung des Programms:
$C000-$C013 | Initialisierung |
$C014-$C020 | Prüfen auf »!« |
$C021-$C02D | Prüfen auf »K« oder »D« |
$C02E | Ausgabe »SYNTAX ERROR« |
$C031-$C0A6 | »KEY«-Befehl |
$C0A7-$C11C | »DISPLAY«-Befehl |
$C11D-$C1AA | Tastaturabfrage |
$C1AB-$C1DE | Tokens - $7F |
$C1DF-$C1EA | [CLR/HOME] »!DISPLAY« 2*Carriage Return |
$C1EB-$C1EF | »!KEY« |
$C1F0-$C1FB | Hilfswerte zur Berechnung der Adressen der F-Tasten-Belegung |
$C200-$C26C | Belegung F-Tasten |
Benutzte Routinen:
$A7E7 | Basic-Statement ausführen |
$AB1E | String ausgeben |
$AEFD | Prüft auf Komma |
$AF08 | »SYNTAX ERROR« ausgeben |
$B79E | Holt Byte-Wert nach X |
$EB3C | $EB42, alte Tastaturabfrage |
$EB48 | Prüft auf SHIFT, CTRL, C= |
$FFD2 | Ausgabe eines Zeichens |
$0073 | Holt nächstes Zeichen |
Belegung der Tastatur (mit Control):
Taste | Code (PEEK(203)) | Befehl |
+ | 40 | SIN |
- | 43 | COS |
£ | 48 | TAN |
F1 | 4 | RUN |
F3 | 5 | LIST |
F5 | 6 | LOAD |
F7 | 3 | SAVE |
W | 9 | WAIT |
E | 14 | END |
R | 17 | RETURN |
T | 22 | TO |
Y | 25 | SYS |
U | 30 | USR |
I | 33 | INPUT |
0 | 38 | OPEN |
P | 41 | POKE |
@ | 46 | CONT |
* | 49 | SQR |
↑ | 54 | --- |
A | 10 | ABS |
S | 13 | STEP |
D | 18 | DATA |
F | 21 | FOR |
G | 26 | GOTO |
H | 29 | THEN |
J | 34 | READ |
K | 37 | RIGHT$ |
L | 42 | LEFT$ |
: | 45 | INT |
; | 50 | LOG |
Z | 12 | GOSUB |
X | 23 | PEEK |
C | 20 | CLOSE |
V | 31 | VAL |
B | 28 | RESTORE |
N | 39 | NEXT |
M | 36 | MID$ |
, | 47 | TAB( |
. | 44 | SPC( |
CRSR↕ | 7 | EXP |
CRSR↔ | 2 | CONT |
Die Belegung läßt sich folgendermaßen ändern: Man sucht den Code der Taste, deren Belegung man ändern will, aus obiger Tabelle und addiert 49579 dazu. Nun subtrahiert man vom Token des gewünschten Befehls 127 und POKEt diesen Wert in die zuerst errechnete Adresse. Will man zum Beispiel die F1-Taste mit »VERIFY« belegen, so sieht das wie folgt aus: F1 hat den Code 4 (siehe Tabelle). Das Token für VERIFY ist 149.
Nun gibt man ein: POKE 49579 + 4,(149-127)
Danach ergibt <CTRL> zusammen mit F1 die Ausgabe von »VERIFY« auf dem Bildschirm. Die so geänderte Belegung läßt sich dann mit einem Monitorprogramm abspeichern. Sollen auch die Belegungen der mit !KEY belegbaren F-Tasten gespeichert werden, so muß der Bereich $C000 bis $C26B geSAVEt werden.
0 poke53280,0:poke53281,0:print"{clr}" 1 print"*************************** 2 print"** ** 3 print"** basic-befehle ** 4 print"** auf tastendruck ** 5 print"** +12 funktionstasten ** 6 print"** ** 7 print"** k. russell ** 8 print"** luisenstr.28 ** 9 print"** 5100 aachen ** 10 print"** ** 11 print"*************************** 20 : 30 a=49152:e=49659:print:print 40 print"bitte etwas geduld: ich lese daten! 60 fori=atoe:readx:s=s+x:pokei,x:next 70 ifs<>60722thenprint"data error":end 80 fori=49660to49771:pokei,0:next 90 sys49152 : rem initialisierung 100 print"{clr}die funktionstasten sind jetzt 3-fach belegbar mit: 110 print"{down} !key #,"chr$(34)"kommando"chr$(34) 120 print"{down}ein anschliessendes return ist mit "chr$(34)"\"chr$(34) 130 print"als letztem zeichen des kommandos zu er-reichen. 140 print"{down}das kommando darf maximal 9 zeichen um- fassen. 150 print"{down}!display zeigt die belegung der f-tastenan. 160 print"{down}die meisten basic-befehle sind mit <ctrl> + anfangsbuchstabe "; 170 print"des befehls abrufbar. 190 : 200 data169,20,141,8,3,162,192,142,9,3,232,142,144,2,169,29,141,143,2,96 201 data32,115,0,201,33,240,6,32,121,0,76,231,167,162,0,32,115,0,201,75,240 202 data7,201,68,240,121,76,8,175,32,115,0,221,237,193,208,245,232,224,2 203 data208,243,32,115,0,32,158,183,224,0,208,5,162,14,108,0,3,224,13,16 204 data247,189,239,193,133,251,169,194,133,252,234,234,234,32,253,174,201 205 data34,240,5,162,22,108,0,3,160,255,200,192,9,16,29,32,115,0,201,34,240 206 data39,201,39,240,11,201,92,208,9,169,13,145,251,76,141,192,169,34,145 207 data251,76,107,192,32,115,0,201,34,240,5,162,23,108,0,3,192,8,16,5,200 208 data169,0,145,251,162,128,108,0,3,32,115,0,221,226,193,208,136,232,224 209 data6,208,243,169,223,160,193,32,30,171,169,1,72,169,235,160,193,32,30 210 data171,104,170,201,10,48,9,169,49,32,210,255,138,56,233,10,24,105,48 211 data32,210,255,169,44,32,210,255,169,34,32,210,255,189,239,193,24,105 212 data0,133,251,169,0,168,105,194,133,252,177,251,240,20,201,34,208,2,169 213 data39,201,13,208,2,169,92,32,210,255,200,192,9,208,232,169,34,32,210 214 data255,169,13,32,210,255,232,138,201,13,208,162,240,133,173,141,2,201 215 data4,240,79,162,3,228,203,240,8,232,224,7,208,247,76,72,235,228,197 216 data240,249,134,197,201,3,16,52,201,0,240,12,232,232,232,232,201,1,240 217 data4,232,232,232,232,216,169,0,224,3,240,8,24,105,9,202,224,3,208,248 218 data170,160,0,200,189,0,194,153,118,2,201,0,240,5,232,192,9,48,240,132 219 data198,76,66,235,162,2,228,203,240,7,232,224,51,208,247,240,175,189 220 data171,193,240,170,228,197,240,166,134,197,170,160,255,202,240,8,200 221 data185,158,160,16,250,48,245,200,185,158,160,48,6,157,119,2,232,208 222 data244,56,233,128,76,60,235,255,255,27,21,11,28,20,62,0,19,55,0,14,42 223 data1,0,0,15,4,0,33,2,37,67,0,31,10,0,13,40,56,70,0,6,8,0,75,74,32,3 224 data64,24,73,63,39,54,27,36,65,59,61,255,147,33,68,73,83,80,76,65,89 225 data13,13,0,33,75,69,89,0,9,45,18,54,27,63,0,36,81,90,99,72