-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathgetkey.s
40 lines (36 loc) · 942 Bytes
/
getkey.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.if CODESEG = 1
.segment "CODE1"
.endif
.export _getkey
.export _count
.export _key
KBDCR = $D011 ; Apple I got key?
KBDDATA = $D010 ; The key pressed
_count: .byte 0,0,0,0
_key: .byte 0
_getkey:
LDA KBDCR ; cycles 4 got key?
BMI DONE ; cycles 2 if neg, got key goto DONE
CLC ; cycles 2 clear carry
LDA #1 ; cycles 2 A = 1
ADC _count+0 ; cycles 4 LSB += A
STA _count+0 ; cycles 4
LDA #0 ; cycles 2 A = 0
ROL A ; cycles 2 A = carry, carry = 0
ADC _count+1 ; cycles 4
STA _count+1 ; cycles 4
LDA #0 ; cycles 2 A = 0
ROL A ; cycles 2 A = carry, carry = 0
ADC _count+2 ; cycles 4
STA _count+2 ; cycles 4
LDA #0 ; cycles 2 A = 0
ROL A ; cycles 2 A = carry, carry = 0
ADC _count+3 ; cycles 4
STA _count+3 ; cycles 4
CLC ; cycles 2 clear carry
BCC _getkey ; cycles 2 + 1 back to checking for key
; total = 59
DONE: LDA KBDDATA ; get key value
AND #$7F ; 7th bit to 0
STA _key ; store in _key
RTS