Tastaturcode...

Moderator: Rockford

Antworten
Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Tastaturcode...

Beitrag von Dr. Irata »

Hallo in die Runde,
folgendes Problem:

Ich möchte über das Register CH einen Buchstaben auslesen und anschließend auf den Bildschirm printen.
Blöd nur, daß der Tastaturcode nicht mit dem Code für den Buchstaben übereinstimmt!
Z.B. gibt CH für A den Wert 63 aus und man muss aber den Wert 33 auf den Bildschirm printen um A zu sehen.
Da braucht man also eine Umrechnungstabelle... das geht doch sicherlich ganz anders, bzw. so eine Tabelle muss es doch im OS geben??!!

Wer kann da helfen?
LG
Peter

slx
Beiträge: 230
Registriert: 18.06.2021 23:16
Has thanked: 205 times
Been thanked: 30 times
Kontaktdaten:

Re: Tastaturcode...

Beitrag von slx »

Na, dann zieh' doch einfach 30 ab, dann passt das mit dem A :D

Scherz beiseite: ich hab' mal auf die Schnelle dieses kryptische Stück Code auf AtariAge gefunden. Das basiert auf einer Tabelle und so wie die Keyboard-Werte aussehen, geht das auch nicht ohne Tabelle.

Alternativ könntest Du auf XL/XE die Tabelle des OS verwenden (Adresse auf $79), aber das funktioniert auf 400/800 nicht (und erlaubt laut diesem Artikel auch nicht alle Tastenkombinationen mit Shift und/oder Control zu lesen.

Benutzeravatar
DjayBee
Beiträge: 1040
Registriert: 17.08.2021 04:02
Has thanked: 743 times
Been thanked: 359 times
Kontaktdaten:

Re: Tastaturcode...

Beitrag von DjayBee »

Ja, die gibt es.

Im OS-A/OS-B befindet sie sich an $FEFE.
Im XL-OS gibt es eine neue Variable KEYDEF=$79, die zur Tabelle zeigt.

Mit diesem Code habe ich einige Spiele XL-tauglich gemacht:

Code: Alles auswählen

KEYDEF	EQU	$79
keytab	EQU	$FEFE ; Tabelle im 400/800

	lda KEYDEF+1	; adapt keyboard translation table
	beq noxl ; KEYDEF ist im 400/800 =$0000
	sta keytbl+2 ; XL-Tabelle in den unten ...
	lda KEYDEF
	sta keytbl+1 ; ... stehenden Code patchen.
noxl

Hiermit übersetzt du dann den Keycode, der sich in X befinden muss, durch den ASCII-Wert:

Code: Alles auswählen

keytbl	lda keytab,X ; voreingestellt ist die Tabelle in OS-A/OS-B
	rts
Du kannst natürlich auch umgekehrt die ZP-Variable anpassen:

Code: Alles auswählen

KEYDEF	EQU	$79
keytab	EQU	$FEFE ; Tabelle im 400/800

	lda KEYDEF+1	; adapt keyboard translation table
	bne xl ; KEYDEF ist im 400/800 =$0000
	lda #<keytab ; Zeiger auf die 400/800-Tabelle ...
	sta KEYDEF
	lda #>keytab ; in die ZP-Variable schreiben
	sta KEYDEF+1
xl
Und übersetzt den Keycode, der sich diesmal in Y befinden muss, dann durch:

Code: Alles auswählen

	lda (KEYDEF),Y

Benutzeravatar
Dr. Irata
Beiträge: 1265
Registriert: 24.08.2021 14:40
Has thanked: 182 times
Been thanked: 417 times
Kontaktdaten:

Re: Tastaturcode...

Beitrag von Dr. Irata »

lieben Dank !

Ich hatte auch gerade im Profibuch nachgelesen und diese Tabelle bei keydef gefunden und entsprechend die Werte konvertieren können.
Nur Leider funktioniert es nicht gut - bekomme nur kleine Buchstaben und die Zahlen funktionieren gar nicht.

Ob es am Emulator liegt ???

Benutzeravatar
mega-hz
Beiträge: 1369
Registriert: 03.11.2021 11:23
Has thanked: 392 times
Been thanked: 467 times

Re: Tastaturcode...

Beitrag von mega-hz »

bedenke, KEYDEF=$79 ist fürs XL/XE OS!
Du benutzt da aber ein OLD-OS!
keine PN's mehr! Bitte per email kontaktieren! atari1450xld©mega-hz.de

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast