Fixed readkey
This commit is contained in:
parent
49f7b43401
commit
610e789539
|
@ -8,30 +8,44 @@
|
|||
; WHATEVER BUGS YOU MAY FIND CAN BE BLAMED ON ME AND NOT THE AUTHOR OF THE
|
||||
; BOOK.
|
||||
;
|
||||
POINTL .EQ $FA ; ADDRESS LO ON DISPLAY
|
||||
POINTH .EQ $FB ; ADDRESS HI ON DISPLAY
|
||||
INH .EQ $F9 ; INPUTBUFFER HI
|
||||
SCANDS .EQ $1F1F ; MONITOR FUNCTION TO OUTPUT A DIGIT
|
||||
VIA1 .EQ $C000
|
||||
VIA3 .EQ $CC00
|
||||
DDR1A .EQ VIA1+3 ; USING RC-ONE ADDRESS DECODING SCHEME, PLACING
|
||||
DDR1B .EQ VIA1+2 ; VIA3 AT $CC00 BY DEFAULT (INSTEAD OF $AC00)
|
||||
PORT1A .EQ VIA1+1 ; TO FIT RC-ONE ADDRESS DECODING THOUGH ORIGINAL
|
||||
PORT1B .EQ VIA1 ; CAN BE JUMPERED IF NEEDED/WANTED.
|
||||
DDR3A .EQ VIA3+3 ; USING RC-ONE ADDRESS DECODING SCHEME, PLACING
|
||||
DDR3B .EQ VIA3+2 ; VIA3 AT $CC00 BY DEFAULT (INSTEAD OF $AC00)
|
||||
PORT3A .EQ VIA3+1 ; TO FIT RC-ONE ADDRESS DECODING THOUGH ORIGINAL
|
||||
PORT3B .EQ VIA3 ; CAN BE JUMPERED IF NEEDED/WANTED.
|
||||
|
||||
|
||||
.OR $0200
|
||||
.TA $0200
|
||||
RC_ONE LDA #0
|
||||
STA DDR3A ; SET KEY STROBE PORT FOR INPUT
|
||||
LDA #$FF
|
||||
STA DDR3B ; SET KEYS FOR OUTPUT
|
||||
STA DDR1A
|
||||
STA DDR1B
|
||||
LDA #0
|
||||
STA POINTH
|
||||
STA POINTL
|
||||
STA INH
|
||||
STA PORT1A
|
||||
STA PORT1B
|
||||
LOOP JSR GETKEY ; GET THE KEY USING THE SUB-ROUTINE FROM THE BOOK,
|
||||
STA INH ; WE'LL HAVE IT IN A SO STORE IT TO DATA DIGITS.
|
||||
JSR SCANDS ; HAVE THE MONITOR OUTPUT THE VALUE
|
||||
CMP #0 ; KEY 0?
|
||||
BEQ OUTPUT0 ; YES, TURN ON ALL PORT1B LEDS
|
||||
CMP #15 ; KEY F?
|
||||
BEQ OUTPUTF ; YES, TURN ON ALL PORT1A LEDS
|
||||
JMP OUTPUTX ; NO, OUTPUT KEY AS ENTERED ON PORT1A
|
||||
OUTPUT0 LDA #$FF
|
||||
STA PORT1B
|
||||
JMP LOOP
|
||||
OUTPUTF LDA #$FF
|
||||
STA PORT1A
|
||||
JMP LOOP
|
||||
OUTPUTX STA PORT1A
|
||||
LDA #0
|
||||
STA PORT1B ; RESET PORT 1B
|
||||
JMP LOOP ; DO IT ALL AGAIN
|
||||
|
||||
.IN ../../common/CH01-Getkey/getkey_routine.asm
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
:10020000A9008D03CCA9FF8D02CCA90085FB85FA3E
|
||||
:1002100085F9201D0285F9201F1F4C12022C01CCEC
|
||||
:1002200010FBA20F8E00CC2C01CC1005CA10F530AB
|
||||
:10023000F18AA012A2FF2C01CC30E7CAD0F888D0F6
|
||||
:0D024000F360A9008D03CCA9FF8D02CC60F6
|
||||
:10020000A9008D03CCA9FF8D02CC8D03C08D02C047
|
||||
:10021000A9008D01C08D00C0204102C900F007C9AE
|
||||
:100220000FF00B4C3602A9FF8D00C04C1802A9FF3D
|
||||
:100230008D01C04C18028D01C0A9008D00C04C1862
|
||||
:10024000022C01CC10FBA20F8E00CC2C01CC10058F
|
||||
:10025000CA10F530F18AA012A2FF2C01CC30E7CAF7
|
||||
:10026000D0F888D0F360A9008D03CCA9FF8D02CC13
|
||||
:01027000602D
|
||||
:00000001FF
|
||||
|
|
|
@ -5,69 +5,83 @@
|
|||
0000- 8 ; WHATEVER BUGS YOU MAY FIND CAN BE BLAMED ON ME AND NOT THE AUTHOR OF THE
|
||||
0000- 9 ; BOOK.
|
||||
0000- 10 ;
|
||||
00FA- 11 POINTL .EQ $FA ; ADDRESS LO ON DISPLAY
|
||||
00FB- 12 POINTH .EQ $FB ; ADDRESS HI ON DISPLAY
|
||||
00F9- 13 INH .EQ $F9 ; INPUTBUFFER HI
|
||||
1F1F- 14 SCANDS .EQ $1F1F ; MONITOR FUNCTION TO OUTPUT A DIGIT
|
||||
C000- 15 VIA1 .EQ $C000
|
||||
CC00- 16 VIA3 .EQ $CC00
|
||||
C000- 11 VIA1 .EQ $C000
|
||||
CC00- 12 VIA3 .EQ $CC00
|
||||
C003- 13 DDR1A .EQ VIA1+3 ; USING RC-ONE ADDRESS DECODING SCHEME, PLACING
|
||||
C002- 14 DDR1B .EQ VIA1+2 ; VIA3 AT $CC00 BY DEFAULT (INSTEAD OF $AC00)
|
||||
C001- 15 PORT1A .EQ VIA1+1 ; TO FIT RC-ONE ADDRESS DECODING THOUGH ORIGINAL
|
||||
C000- 16 PORT1B .EQ VIA1 ; CAN BE JUMPERED IF NEEDED/WANTED.
|
||||
CC03- 17 DDR3A .EQ VIA3+3 ; USING RC-ONE ADDRESS DECODING SCHEME, PLACING
|
||||
CC02- 18 DDR3B .EQ VIA3+2 ; VIA3 AT $CC00 BY DEFAULT (INSTEAD OF $AC00)
|
||||
CC01- 19 PORT3A .EQ VIA3+1 ; TO FIT RC-ONE ADDRESS DECODING THOUGH ORIGINAL
|
||||
CC00- 20 PORT3B .EQ VIA3 ; CAN BE JUMPERED IF NEEDED/WANTED.
|
||||
0000- 21
|
||||
0200- 22 .OR $0200
|
||||
0200- 23 .TA $0200
|
||||
0200-A9 00 24 ( 2) RC_ONE LDA #0
|
||||
0202-8D 03 CC 25 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
|
||||
0205-A9 FF 26 ( 2) LDA #$FF
|
||||
0207-8D 02 CC 27 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
|
||||
020A-A9 00 28 ( 2) LDA #0
|
||||
020C-85 FB 29 ( 2) STA POINTH
|
||||
020E-85 FA 30 ( 2) STA POINTL
|
||||
0210-85 F9 31 ( 2) STA INH
|
||||
0212-20 1D 02 32 ( 6) LOOP JSR GETKEY ; GET THE KEY USING THE SUB-ROUTINE FROM THE BOOK,
|
||||
0215-85 F9 33 ( 2) STA INH ; WE'LL HAVE IT IN A SO STORE IT TO DATA DIGITS.
|
||||
0217-20 1F 1F 34 ( 6) JSR SCANDS ; HAVE THE MONITOR OUTPUT THE VALUE
|
||||
021A-4C 12 02 35 ( 3) JMP LOOP ; DO IT ALL AGAIN
|
||||
021D- 36
|
||||
021D- 37 .IN ../../common/CH01-Getkey/getkey_routine.asm
|
||||
021D- I 1 ; 'GETKEY' KEYBOARD INPUT ROUTINE READS AND DEBOUNCES KEYBOARD. RETURNS WITH
|
||||
021D- I 2 ; KEY NUMBER IN ACCUMULATOR IF KEY DOWN. OPERATION: SENDS NUMBERS 0-F TO 74154
|
||||
021D- I 3 ; (4 TO 16 LINE DECODER), WHICH GROUNDS ONE SIDE OF KEYSWITCHES ONE AT A TIME.
|
||||
021D- I 4 ; IF A KEY IS DOWN, PA7 OF VIA #3 WILL BE GROUNDED, AND THE CURRENT VALUE
|
||||
021D- I 5 ; APPLIED TO THE 74154 BE THE KEY NUMBER. WHEN THE PROGRAM DETECTS A KEY CLOSE
|
||||
021D- I 6 ; CHECKS FOR KEY CLOSURE FOR 50 MS. TO ELIMINATE BOUNCE.
|
||||
021D- I 7 ; NOTE: IF NO KEY IS PRESSED, GETKEY WILL WAIT.
|
||||
021D- I 8 ;
|
||||
021D-2C 01 CC I 9 ( 4) GETKEY BIT PORT3A ; SEE IF KEY IS STILL DOWN FROM LAST KEY CLOSURE:
|
||||
0220- I 10 ; KEYSTROBE IN 'N' STATUS BIT.
|
||||
0220-10 FB I 11 (2**) BPL GETKEY ; IF YES, WAIT FOR KEY RELEASE
|
||||
0222-A2 0F I 12 ( 2) RSTART LDX #15 ; SET KEY COUNTER TO 15
|
||||
0224-8E 00 CC I 13 ( 4) NXTKEY STX PORT3B ; OUTPUT KEY # TO 74154
|
||||
0227-2C 01 CC I 14 ( 4) BIT PORT3A ; SEE IF KEY DOWN: STROBE IN 'N'
|
||||
022A-10 05 I 15 (2**) BPL BOUNCE ; IF YES, GO DEBOUNCE
|
||||
022C-CA I 16 ( 2) DEX ; DECREMENT KEY #
|
||||
022D-10 F5 I 17 (2**) BPL NXTKEY ; NO, DO NEXT KEY
|
||||
022F-30 F1 I 18 (2**) BMI RSTART ; START OVER
|
||||
0231-8A I 19 ( 2) BOUNCE TXA ; SAVE KEY NUMBER IN A
|
||||
0232-A0 12 I 20 ( 2) LDY #$12 ; OUTER LOOP CNT LOAD FOR DELAY OF 50 MS.
|
||||
0234-A2 FF I 21 ( 2) LP1 LDX #$FF ; INNER 11 US. LOOP
|
||||
0236-2C 01 CC I 22 ( 4) LP2 BIT PORT3A ; SEE IF KEY STILL DOWN
|
||||
0239-30 E7 I 23 (2**) BMI RSTART ; IF NOT, KEY NOT VALID, RESTART
|
||||
023B-CA I 24 ( 2) DEX
|
||||
023C-D0 F8 I 25 (2**) BNE LP2 ; THIS LOOP USES 2115*5 US.
|
||||
023E-88 I 26 ( 2) DEY
|
||||
023F-D0 F3 I 27 (2**) BNE LP1 ; OUTER LOOP: TOTAL IS 50 MS.
|
||||
0241-60 I 28 ( 6) RTS ; DONE: KEY IN A.
|
||||
0242- I 29 ;
|
||||
0242- I 30 ; SUBROUTINE 'INITKEY'
|
||||
0242- I 31 ; TAKES CARE OF INITIALIZING VIA #3 FOR USING WITH THE GETKEY ROUTINE FROM
|
||||
0242- I 32 ; THE CODE.
|
||||
0242- I 33 ;
|
||||
0242-A9 00 I 34 ( 2) INITKEY LDA #0
|
||||
0244-8D 03 CC I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
|
||||
0247-A9 FF I 36 ( 2) LDA #$FF
|
||||
0249-8D 02 CC I 37 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
|
||||
024C-60 I 38 ( 6) RTS
|
||||
024D- 38
|
||||
0000- 22
|
||||
0200- 23 .OR $0200
|
||||
0200- 24 .TA $0200
|
||||
0200-A9 00 25 ( 2) RC_ONE LDA #0
|
||||
0202-8D 03 CC 26 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
|
||||
0205-A9 FF 27 ( 2) LDA #$FF
|
||||
0207-8D 02 CC 28 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
|
||||
020A-8D 03 C0 29 ( 4) STA DDR1A
|
||||
020D-8D 02 C0 30 ( 4) STA DDR1B
|
||||
0210-A9 00 31 ( 2) LDA #0
|
||||
0212-8D 01 C0 32 ( 4) STA PORT1A
|
||||
0215-8D 00 C0 33 ( 4) STA PORT1B
|
||||
0218-20 41 02 34 ( 6) LOOP JSR GETKEY ; GET THE KEY USING THE SUB-ROUTINE FROM THE BOOK,
|
||||
021B-C9 00 35 ( 2) CMP #0 ; KEY 0?
|
||||
021D-F0 07 36 (2**) BEQ OUTPUT0 ; YES, TURN ON ALL PORT1B LEDS
|
||||
021F-C9 0F 37 ( 2) CMP #15 ; KEY F?
|
||||
0221-F0 0B 38 (2**) BEQ OUTPUTF ; YES, TURN ON ALL PORT1A LEDS
|
||||
0223-4C 36 02 39 ( 3) JMP OUTPUTX ; NO, OUTPUT KEY AS ENTERED ON PORT1A
|
||||
0226-A9 FF 40 ( 2) OUTPUT0 LDA #$FF
|
||||
0228-8D 00 C0 41 ( 4) STA PORT1B
|
||||
022B-4C 18 02 42 ( 3) JMP LOOP
|
||||
022E-A9 FF 43 ( 2) OUTPUTF LDA #$FF
|
||||
0230-8D 01 C0 44 ( 4) STA PORT1A
|
||||
0233-4C 18 02 45 ( 3) JMP LOOP
|
||||
0236-8D 01 C0 46 ( 4) OUTPUTX STA PORT1A
|
||||
0239-A9 00 47 ( 2) LDA #0
|
||||
023B-8D 00 C0 48 ( 4) STA PORT1B ; RESET PORT 1B
|
||||
023E-4C 18 02 49 ( 3) JMP LOOP ; DO IT ALL AGAIN
|
||||
0241- 50
|
||||
0241- 51 .IN ../../common/CH01-Getkey/getkey_routine.asm
|
||||
0241- I 1 ; 'GETKEY' KEYBOARD INPUT ROUTINE READS AND DEBOUNCES KEYBOARD. RETURNS WITH
|
||||
0241- I 2 ; KEY NUMBER IN ACCUMULATOR IF KEY DOWN. OPERATION: SENDS NUMBERS 0-F TO 74154
|
||||
0241- I 3 ; (4 TO 16 LINE DECODER), WHICH GROUNDS ONE SIDE OF KEYSWITCHES ONE AT A TIME.
|
||||
0241- I 4 ; IF A KEY IS DOWN, PA7 OF VIA #3 WILL BE GROUNDED, AND THE CURRENT VALUE
|
||||
0241- I 5 ; APPLIED TO THE 74154 BE THE KEY NUMBER. WHEN THE PROGRAM DETECTS A KEY CLOSE
|
||||
0241- I 6 ; CHECKS FOR KEY CLOSURE FOR 50 MS. TO ELIMINATE BOUNCE.
|
||||
0241- I 7 ; NOTE: IF NO KEY IS PRESSED, GETKEY WILL WAIT.
|
||||
0241- I 8 ;
|
||||
0241-2C 01 CC I 9 ( 4) GETKEY BIT PORT3A ; SEE IF KEY IS STILL DOWN FROM LAST KEY CLOSURE:
|
||||
0244- I 10 ; KEYSTROBE IN 'N' STATUS BIT.
|
||||
0244-10 FB I 11 (2**) BPL GETKEY ; IF YES, WAIT FOR KEY RELEASE
|
||||
0246-A2 0F I 12 ( 2) RSTART LDX #15 ; SET KEY COUNTER TO 15
|
||||
0248-8E 00 CC I 13 ( 4) NXTKEY STX PORT3B ; OUTPUT KEY # TO 74154
|
||||
024B-2C 01 CC I 14 ( 4) BIT PORT3A ; SEE IF KEY DOWN: STROBE IN 'N'
|
||||
024E-10 05 I 15 (2**) BPL BOUNCE ; IF YES, GO DEBOUNCE
|
||||
0250-CA I 16 ( 2) DEX ; DECREMENT KEY #
|
||||
0251-10 F5 I 17 (2**) BPL NXTKEY ; NO, DO NEXT KEY
|
||||
0253-30 F1 I 18 (2**) BMI RSTART ; START OVER
|
||||
0255-8A I 19 ( 2) BOUNCE TXA ; SAVE KEY NUMBER IN A
|
||||
0256-A0 12 I 20 ( 2) LDY #$12 ; OUTER LOOP CNT LOAD FOR DELAY OF 50 MS.
|
||||
0258-A2 FF I 21 ( 2) LP1 LDX #$FF ; INNER 11 US. LOOP
|
||||
025A-2C 01 CC I 22 ( 4) LP2 BIT PORT3A ; SEE IF KEY STILL DOWN
|
||||
025D-30 E7 I 23 (2**) BMI RSTART ; IF NOT, KEY NOT VALID, RESTART
|
||||
025F-CA I 24 ( 2) DEX
|
||||
0260-D0 F8 I 25 (2**) BNE LP2 ; THIS LOOP USES 2115*5 US.
|
||||
0262-88 I 26 ( 2) DEY
|
||||
0263-D0 F3 I 27 (2**) BNE LP1 ; OUTER LOOP: TOTAL IS 50 MS.
|
||||
0265-60 I 28 ( 6) RTS ; DONE: KEY IN A.
|
||||
0266- I 29 ;
|
||||
0266- I 30 ; SUBROUTINE 'INITKEY'
|
||||
0266- I 31 ; TAKES CARE OF INITIALIZING VIA #3 FOR USING WITH THE GETKEY ROUTINE FROM
|
||||
0266- I 32 ; THE CODE.
|
||||
0266- I 33 ;
|
||||
0266-A9 00 I 34 ( 2) INITKEY LDA #0
|
||||
0268-8D 03 CC I 35 ( 4) STA DDR3A ; SET KEY STROBE PORT FOR INPUT
|
||||
026B-A9 FF I 36 ( 2) LDA #$FF
|
||||
026D-8D 02 CC I 37 ( 4) STA DDR3B ; SET KEYS FOR OUTPUT
|
||||
0270-60 I 38 ( 6) RTS
|
||||
0271- 52
|
||||
|
|
Loading…
Reference in New Issue