Das hier
vorgestellte Programm ist eine etwas modifizierte ROM-Routine,
die den GET-Befehl mit blinkendem Cursor ermöglicht.
Nicht nur
BASIC-Dialekt, sondern auch die Art und Weise der Ausführung
von
Befehlen variiert von System zu System. Was beim GET des Apple II-Basic
unter Umständen als störend empfunden wird - es
erscheint der
Cursor und wartet auf eine Eingabe - sucht man beim Commodore
vergebens; hier wird bei leerem Tastaturspeicher ein Leerzeichen
übernommen.
Beide Lösungen
haben Vor- und Nachteile. Es ergibt sich aber oft, daß im
Programm Abfragen eingebaut sind, die narrensicher sein sollen. Das
geht mit keinem INPUT-Befehl. Versucht man sich mit GET, muß
in
mühsamer »Handarbeit« ein Cursor simuliert
werden.
Diese Hilfsroutine
in Versionen für alle Commodore-Computer liefert uns ein GET
mit
Cursor. Nach dem SYS erhält man den ASCII-Wert der
gedrückten
Taste durch den angegebenen PEEK-Befehl; nach dem USR-Aufruf steht er
in der Variablen. Der Eingabe kann nun wie bei ganz normalem GET eine
Abfrage auf Zulässigkeit des Wertes folgen (zum Beispiel
können alle oder bestimmte Control-Codes unterdrückt
werden;
kein unbedachtes »CLR HOME« etc.). Die Ausgabe des
Zeichens
erfolgt über PRINT.
(Reinhard Kratzberg)
Dieser Artikel ist auch als eingescanntes PDF-Dokument
(233 KB) verfügbar.
Hinweis:
Die im Artikel (s.u.) angegebenen verschiedenen ROM-Einsprungadressen
für GETIN und CHROUT können auch durch die
für alle hier aufgeführten Systeme gemeinsamen
Adressen in der Kernalsprungtabelle ($FFXX) ersetzt werden:
$FFE4: GETIN
$FFD2: CHROUT
|
![](../image/pic_01pix.gif) |
Assemblerlisting der GET-Routine für
Commodore 64 und VC20 |
ASSEMBLERLISTING
Version VIC20 / CBM 64
HEXZAHLEN GELTEN FUER DEN CBM 64
10 ., 033D A5
C6 START LDA KEY
15 ., 033F 85
CC
STA CURSOR
20 ., 0341 F0
FA
BEQ START
25 ., 0343
78
SEI
30 ., 0344 A5
CF
LDA BLINK
35 ., 0346 F0
0C
BEQ MARK1
40 ., 0348 A5
CE
LDA CHAR
45 ., 034A AE 87
02
LDX COLOR
50 ., 034D A0
00
LDY #$00
55 ., 034F 84
CF
STY BLINK
60 ., 0351 20 13
EA
JSR BSOUT
65 ., 0354 20 B4 E5 MARK1 JSR GETIN
70 ., 0357 8D 3C
03
STA ASCODE
75 ., 035A 4C A2 B3 ENDE JMP
INTFP
READY. |
Assemblelisting der GET-Routine für die
Commodore-Computer der Serien 2001 bis 8001 |
ASSEMBLERLISTING
Version CBM 2/3/4/8000
DIE HEXZAHLEN GELTEN FUER CBM 4000
10 ., 033D A5
9E START LDA KEY
15 ., 033F 85
A7
STA CURSOR
20 ., 0341 F0
FA
BEQ START
25 ., 0343
78
SEI
30 ., 0344 A5
AA
LDA BLINK
35 ., 0346 F0
0A
BEQ MARK1
40 ., 0348 A5
A9
LDA CHAR
45 ., 034A A0
00
LDY #$00
50 ., 034C 84
AA
STY BLINK
55 ., 034E A4
C6
LDY CURSP
60 ., 0350 91
C4
STA (CURAD),Y
65 ., 0352 20 A7 E0 MARK1 JSR GETIN
70 ., 0355 8D 3C
03
STA ASCODE
75 ., 0358 4C CB C4 ENDE JMP
INTFP
READY. |
Ein typischer Anwendungsfall |
ANWENDUNG:
BEISPIEL MIT SYS:
100 SYS829:A=PEEK(828):A$=CHR$(A)
110 IFA....
190 PRINTA$;:GOTO100
BEISPIEL MIT USR:
100 POKEUS,61:POKEUS+1,3
110 A=USR(A):A$=CHR$(A)
120 IFA....
190 PRINTA$;:GOTO100
VOR ANWENDUNG DER USR-FUNKTION MUSS DER
USR-VEKTOR GESETZT WERDEN. DAZU WIRD DER
VARIABLEN 'US' DER WERT '1' BZW. BEIM
CBM 64 DER WERT '785' ZUGEWIESEN. |
|