002
02.01.2022, 12:33 Uhr
volkerp
Default Group and Edit
|
Die Ansteuerung der Tastatur ist relativ ungewöhnlich. Die Sondertasten Shift und Ctrl werden gesondert abgefragt.
Die Tastaturabfrage wird folgendermaßen realisiert:
PIO ist auf BIT Ein-/Ausgabe initialisiert, Kanal A auf Ausgabe, Kanal B auf Eingabe. Auf Kanal A wird 0 ausgegeben, d.h., alle Leitungen sind "LOW". Ist keine Taste gedrückt, so sind alle Leitungen von Kanal B auf Grund der Ziehwiderstände "HIGH". Wird eine Taste gedrückt, so ist eine Leitung von A mit einer Leitung von B verbunden, und es wird ein Interrupt ausgelöst, da eine Leitung von B LOW-Pegel führt. Jetzt werden die Kanäle uminitialisiert, auf B wird 0 ausgegeben und auf Kanal A führt jetzt nur die der gedrückten Taste entsprechende Leitung LOW-Pegel.
Routine GPIOD:
Quellcode: | ; ;TASTATUR - PIO ABFRAGEN ;ret D - neg. Matrixzeile ; E - neg. Matrixspalte ; H - Matrixzeile zu Control ; L - Matrixzeile zu Shift ;zusaetzlich Auswertung Spielhebel GPIOD: DI IN A, DPIOB ;Zeilen auswerten CPL LD D,A ;NEGIERTE MATRIXZEILE ;Ctrl+Shift LD A,3 ;Interrupt aus OUT SPIOB, A LD A,11111011B ;PRUEFEN CONTROL-TASTE OUT DPIOA, A ;nur Spalte A2 auf low IN A, DPIOB LD H,A ;Zeilen nach H LD A,11111110B ;PRUEFEN SHIFT-TASTE OUT DPIOA, A ;nur Spalte A0 auf low IN A, DPIOB LD L,A ;Zeilen nach L ;Umprogrammieren PIO LD A,0CFH ;BIT E/A OUT SPIOA, A LD A,0FFH ;ALLES EINGAENGE OUT SPIOA, A LD A,0CFH ;BIT E/A OUT SPIOB, A XOR A OUT SPIOB, A ;ALLES AUSGAENGE OUT DPIOB, A ;PIOB alle Leitungen auf 0 IN A, DPIOA ;Spalten einlesen CPL LD E,A ;NEGIERTE MATRIXSPALTE ;Spielhebel abfragen LD A,80H ;SPIELHEBEL 1 ABFRAGEN OUT DPIOB, A ;Zeile B6 low (B0..B6) IN A, DPIOA ;Spalten nach A CPL LD (JOYR),A LD A,40H ;SPIELHEBEL 2 ABFRAGEN OUT DPIOB, A ;Zeile B7 low (B0..B5,B7) IN A, DPIOA ;Spalten nach A CPL LD (JOYL),A ;Umprogrammieren PIO CALL INITT ;TATSTATUR INIT. XOR A ;A=0 OUT DPIOA, A ;PIOA alle Leitungen auf 0 RET
|
Quellcode: | ; TASTATURMATRIX ; ; PIO2A, Port 90H ; ; A0 A1 A2 A3 A4 A5 A6 A7 ; | | | | | | | | ; TI0 TI1 TI2 TI3 TI4 TI5 TI6 TI7 ; | | | | | | | | ; +-----+-----+-----+-----+-----+-----+-----+-----+ PIO2B, Port 91H ; | S11 | S12 | S13 | S14 | S15 | S16 | S17 | S18 |--TO0-B0 ; | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ; +-----+-----+-----+-----+-----+-----+-----+-----+ ; | S21 | S22 | S23 | S24 | S25 | S26 | S27 | S28 |--TO1-B1 ; | 8 | 9 | : | ; | , | = | . | ? | ; +-----+-----+-----+-----+-----+-----+-----+-----+ ; | S31 | S32 | S33 | S34 | S35 | S36 | S37 | S38 |--TO2-B2 ; | @ | A | B | C | D | E | F | G | ; +-----+-----+-----+-----+-----+-----+-----+-----+ ; | S41 | S42 | S43 | S44 | S45 | S46 | S47 | S48 |--TO3-B3 ; | H | I | J | K | L | M | N | O | ; +-----+-----+-----+-----+-----+-----+-----+-----+ ; | S51 | S52 | S53 | S54 | S55 | S56 | S57 | S58 |--TO4-B4 ; | P | Q | R | S | T | U | V | W | ; +-----+-----+-----+-----+-----+-----+-----+-----+ ; | S61 | S62 | S63 | S64 | S65 | S66 | S67 |(S68)|--TO5-B5 ; | X | Y | Z | tab |pause| ins | ^ | | ; +-----+-----+-----+-----+-----+-----+-----+-----+ ; | S71 | S72 | S73 | S74 | S75 | S76 | S77 | S78 |--TO6-B6 ; |left |right| down| up | esc |enter|stop |space| ; +-----+-----+-----+-----+-----+-----+-----+-----+ ; | S81 | S82 | S83 | S84 | S85 | S86 | S87 |(S88)|--TO7-B7 ; |shift|color|contr|graph|list | run |shlck| | ; +-----+-----+-----+-----+-----+-----+-----+-----+
|
-- VolkerP
http://hc-ddr.hucki.net (Z9001, Z1013, LC-80, ...) Dieser Beitrag wurde am 02.01.2022 um 12:35 Uhr von volkerp editiert. |