Scanncode der Tastatur

Fragen zu Programmiersprachen und Software für den Hive und die Propellerchips
Antworten
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Scanncode der Tastatur

Beitrag von PIC18F2550 »

Hallo,

wie kann ich den aktuellen Scanncode der Tastatur angezeigt bekommen?
Keyboard.spin
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
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: Scanncode der Tastatur

Beitrag von kuroneko »

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
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Scanncode der Tastatur

Beitrag von PIC18F2550 »

Hallo kuroneko,

Ich habe den Code eingefügt und die Variabeln bei

Code: Alles auswählen

' Uninitialized data
base                   res     1
indx                   res     1
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.
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
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: Scanncode der Tastatur

Beitrag von kuroneko »

PIC18F2550 hat geschrieben:da der Tastaturtreiber nicht läuft gehe ich davon aus dass ich die Variabeln falsch deklariert habe.
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).
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.
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:

Code: Alles auswählen

repeat n from 0 to 15
  value := byte[$7FF0][n]
  serial.tx(value)
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Scanncode der Tastatur

Beitrag von PIC18F2550 »

Irgendwie ist da der Wurm drinn.
Ich häng die Datei mal hier drann.
Keyboard.spin
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.
VGA_2_ASCII_DE.spin
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
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: Scanncode der Tastatur

Beitrag von kuroneko »

Die 5 Befehle muessen vor den 3 *_ret Labeln eingefuegt werden genau wie im ersten Posting. Und die Variablen wie folgt:

Code: Alles auswählen

base    long    $7FF0
indx    long    0
Wenn ich vorher long $7FF0, 0 erwaehnt habe, dann nur um zu verdeutlichen dass long anstelle von res benutzt werden muss.
Dateianhänge
Keyboard.spin
(56.91 KiB) 529-mal heruntergeladen
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Scanncode der Tastatur

Beitrag von PIC18F2550 »

Danke für die Hilfe,

jetzt geht es.

mein letztes Asembler Projekt war vor 30 Jahren auf einem Z1013 da ist eine Menge Eingerostet. :shock:
Jetzt mache ich Feierabend denn Heute ist auch noch ein Tag. :mrgreen:
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
Benutzeravatar
PIC18F2550
Beiträge: 2832
Registriert: Fr 30. Sep 2011, 13:08

Re: Scanncode der Tastatur

Beitrag von PIC18F2550 »

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.
Keyboard_KCode.spin
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)
Gerade festgestellt STRG+ALT+ENTF der String ist läger als 16 Zeichen :shock:
Da muss ich noch etwas machen :mrgreen:
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
Benutzeravatar
kuroneko
Beiträge: 202
Registriert: Sa 22. Okt 2011, 13:05
Wohnort: FN, Germany

Re: Scanncode der Tastatur

Beitrag von kuroneko »

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.

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)
Antworten