Scanncode der Tastatur
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Scanncode der Tastatur
Hallo,
wie kann ich den aktuellen Scanncode der Tastatur angezeigt bekommen?
wie kann ich den aktuellen Scanncode der Tastatur angezeigt bekommen?
Gruß
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Re: Scanncode der Tastatur
Ich hab mal schnell 16 bytes von $7FF0..$7FFF gestohlen. Der aktuelle Scancode wird dort in einem Ringbuffer abgelegt. Anzeige code muesstest Du dir in SPIN selber schreiben.
Code: Alles auswählen
mov vscl, base
add vscl, indx
wrbyte data, vscl
add indx, #1 ' next location
and indx, #$0F ' limit to 0..15
look_ret
receive_ack_ret
receive_ret ret
base long $7FF0
indx long 0
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: Scanncode der Tastatur
Hallo kuroneko,
Ich habe den Code eingefügt und die Variabeln bei
erstellt.
da der Tastaturtreiber nicht läuft gehe ich davon aus dass ich die Variabeln falsch deklariert habe.
Leider Habe ich mich mit PASM noch nicht näher befasst so dass ich damit meine Probleme habe.
Köntest Du mir das das alles etwas näher erläutern?.
Wenn ich dich richtig Verstehe steht der scanncode anschließend im Speicher ab Adr. 0x7FF0.
Zum Speicher auslesen hatte ich mal was gefunden. Muß mal Suchen.
Ich habe den Code eingefügt und die Variabeln bei
Code: Alles auswählen
' Uninitialized data
base res 1
indx res 1
da der Tastaturtreiber nicht läuft gehe ich davon aus dass ich die Variabeln falsch deklariert habe.
Leider Habe ich mich mit PASM noch nicht näher befasst so dass ich damit meine Probleme habe.
Köntest Du mir das das alles etwas näher erläutern?.
Wenn ich dich richtig Verstehe steht der scanncode anschließend im Speicher ab Adr. 0x7FF0.
Zum Speicher auslesen hatte ich mal was gefunden. Muß mal Suchen.
Gruß
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Re: Scanncode der Tastatur
Die beiden Variablen koennen gleich nach dem ret eingefuegt werden. Und es muessen vorinitialisierte Variablen sein (long $7FF0, 0), res hilft da nicht (nicht initialisiert).PIC18F2550 hat geschrieben:da der Tastaturtreiber nicht läuft gehe ich davon aus dass ich die Variabeln falsch deklariert habe.
Das ganze ist nur ein Hack um an den Code zu kommen. Ich nehm an Du brauchst nur Zugriff um die Tabelle(n) zu vervollstaendigen. $7FF0-$7FFF ist das obere RAM Ende wo i.d.R. niemand umherturnt. Zugriff kann z.B. so erfolgen:Wenn ich dich richtig Verstehe steht der scanncode anschließend im Speicher ab Adr. 0x7FF0. Zum Speicher auslesen hatte ich mal was gefunden. Muß mal Suchen.
Code: Alles auswählen
repeat n from 0 to 15
value := byte[$7FF0][n]
serial.tx(value)
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: Scanncode der Tastatur
Irgendwie ist da der Wurm drinn.
Ich häng die Datei mal hier drann. Die Tabelle vervollständigen ist schon mal Richtig denn wer hatt noch eine Tastatur mit 84 Tasten die meisten haben 126.
Da ich den VGA-Zeichensatz auf 256 Zeichen aufgebohrt habe (um die umlaute darzustellen zu können) brauch ich jetzt noch den passenden Tastaturtreiber.
z.Z sind nur äÄöÖüÜß eingefügt mal sehen später soll der ganze ASCII zeichensatz für DE rein.
Ich häng die Datei mal hier drann. Die Tabelle vervollständigen ist schon mal Richtig denn wer hatt noch eine Tastatur mit 84 Tasten die meisten haben 126.
Da ich den VGA-Zeichensatz auf 256 Zeichen aufgebohrt habe (um die umlaute darzustellen zu können) brauch ich jetzt noch den passenden Tastaturtreiber.
z.Z sind nur äÄöÖüÜß eingefügt mal sehen später soll der ganze ASCII zeichensatz für DE rein.
Zuletzt geändert von PIC18F2550 am Mo 31. Okt 2011, 11:56, insgesamt 1-mal geändert.
Gruß
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Re: Scanncode der Tastatur
Die 5 Befehle muessen vor den 3 *_ret Labeln eingefuegt werden genau wie im ersten Posting. Und die Variablen wie folgt:
Wenn ich vorher long $7FF0, 0 erwaehnt habe, dann nur um zu verdeutlichen dass long anstelle von res benutzt werden muss.
Code: Alles auswählen
base long $7FF0
indx long 0
- Dateianhänge
-
- Keyboard.spin
- (56.91 KiB) 769-mal heruntergeladen
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: Scanncode der Tastatur
Danke für die Hilfe,
jetzt geht es.
mein letztes Asembler Projekt war vor 30 Jahren auf einem Z1013 da ist eine Menge Eingerostet.
Jetzt mache ich Feierabend denn Heute ist auch noch ein Tag.
jetzt geht es.
mein letztes Asembler Projekt war vor 30 Jahren auf einem Z1013 da ist eine Menge Eingerostet.

Jetzt mache ich Feierabend denn Heute ist auch noch ein Tag.

Gruß
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
- PIC18F2550
- Beiträge: 2851
- Registriert: Fr 30. Sep 2011, 13:08
Re: Scanncode der Tastatur
Hallo kuroneko,
ich habe mir die ganze geschichte heute früh noch mal durch den Kopf gehen lassen und habe noch ein paar Änderungen vorgenommen. und das ist die Ausgabe dazu
Gerade festgestellt STRG+ALT+ENTF der String ist läger als 16 Zeichen
Da muss ich noch etwas machen
ich habe mir die ganze geschichte heute früh noch mal durch den Kopf gehen lassen und habe noch ein paar Änderungen vorgenommen. und das ist die Ausgabe dazu
Code: Alles auswählen
repeat
if kyb.gotkey
vga.pr_chr($e)
i:=kyb.getkey
kyb.stop
kyb.start(KYB_CLK, KYB_DAT) 'start the keyboard
vga.pr_chr(i)
vga.pr_str(string(" "))
vga.pr_str(str.integerToHexadecimal(i,2))
vga.pr_str(string(" "))
i := byte[$7FF0][0]
i := str.integerToDecimal(i,3)
vga.pr_str(i)
vga.pr_str(string(" "))
repeat n from 0 to 15
i := byte[$7FF0][n]
byte[$7FF0][n]:=0
i := str.integerToHexadecimal(i,2)
vga.pr_str(i)
vga.pr_chr(" ")
vga.pr_chr($d)

Da muss ich noch etwas machen

Gruß
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550
drone265/278
Barbarus hic ergo sum, quia non intellegor ulli.
Ein Barbar bin ich hier, da ich von keinem verstanden werde.
ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Re: Scanncode der Tastatur
Hat Dein VGA Object keine hex Ausgabe? Stringkonvertierung ist irgendwie von-hinten-durch-die-Brust-ins-Auge. Normalerweise (unter Benutzung von VGA_Text) sollte ein vga.hex(value, 2) reichen.
Und wieso startest Du den Keyboard driver neu? Merk Dir einfach die letzte Position im Scancode-Buffer (!=0), fuell alles mit 0 and dann starte Deine naechste Ausgabe von der Position. Notfalls kann PASM noch den aktuellen Index in den hub RAM schreiben (z.B. $7FEC) dann weisst Du genau wie lang der Scancode ist (musst Dir allerdings Deine Leseposition merken), z.B.
Und wieso startest Du den Keyboard driver neu? Merk Dir einfach die letzte Position im Scancode-Buffer (!=0), fuell alles mit 0 and dann starte Deine naechste Ausgabe von der Position. Notfalls kann PASM noch den aktuellen Index in den hub RAM schreiben (z.B. $7FEC) dann weisst Du genau wie lang der Scancode ist (musst Dir allerdings Deine Leseposition merken), z.B.
Code: Alles auswählen
VAR
long current
PUB display
repeat while current <> long[$7FEC] ' $7FEC updated by PASM driver
vga.hex(byte[$7FF0][current], 2)
current := ++current & 15
vga.out(32)