Skip to content

Commit 7875127

Browse files
committed
untested revamp of everything
1 parent da59823 commit 7875127

File tree

3 files changed

+312
-265
lines changed

3 files changed

+312
-265
lines changed

src/nmi/keyboardmap.asm

Lines changed: 87 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -12,98 +12,104 @@
1212
; """
1313
; for row, keys in enumerate(kbmap.strip().splitlines()):
1414
; for mask, key in enumerate(keys.split()):
15-
; mask = 0x80 >> mask
16-
; print(f"key{key:<12} = ${row:02x}{mask:02x}")
15+
; print(f"key{key:<12} = ${((8 - row) << 3) | mask:02X}")
1716

17+
.macro readKeyDirect keyMap
18+
lda keyboardInput + (keyMap >> 3)
19+
and #$80 >> (keyMap & 7)
20+
.endmacro
1821

19-
; 2 bytes to represent each key
20-
; hi byte is an index into keyboardInput and represents row
21-
; lo byte is a bitmask to single out key's bit
22-
; result is not zero if key pressed
22+
.macro expandKeyRow keyMap
23+
.byte keyMap >> 3
24+
.endmacro
2325

24-
.macro readKeyDirect keyMap
25-
lda keyboardInput+>keyMap
26-
and #<keyMap
26+
.macro expandKeyMask keyMap
27+
.byte $80 >> (keyMap & 7)
2728
.endmacro
2829

29-
keyF1 = $0710
30-
keyF2 = $0610
31-
keyF3 = $0510
32-
keyF4 = $0410
33-
keyF5 = $0310
34-
keyF6 = $0210
35-
keyF7 = $0110
36-
keyF8 = $0010
3730

38-
keyStop = $0008
39-
keyReturn = $0020
31+
; each key is represented by a byte 0RRRRCCC
32+
; row is 0-8 and is inverted
33+
; col is byte position from left to right
34+
35+
keyF1 = $0B
36+
keyF2 = $13
37+
keyF3 = $1B
38+
keyF4 = $23
39+
keyF5 = $2B
40+
keyF6 = $33
41+
keyF7 = $3B
42+
keyF8 = $43
43+
44+
keyStop = $44
45+
keyReturn = $42
4046

41-
keyShiftRight = $0002
42-
keyShiftLeft = $0701
47+
keyShiftRight = $46
48+
keyShiftLeft = $0F
4349

44-
keyESC = $0720
45-
keyCTR = $0780
46-
keyGRPH = $0702
50+
keyESC = $0A
51+
keyCTR = $08
52+
keyGRPH = $0E
4753

48-
keyCLR_HOME = $0810
49-
keyINS = $0808
50-
keyDEL = $0804
54+
keyCLR_HOME = $03
55+
keyINS = $04
56+
keyDEL = $05
5157

52-
keyUp = $0820
53-
keyLeft = $0880
54-
keyRight = $0840
55-
keyDown = $0801
58+
keyUp = $02
59+
keyLeft = $00
60+
keyRight = $01
61+
keyDown = $07
5662

57-
keyCloseBracket = $0080 ; ]
58-
keyOpenBracket = $0040 ; [
59-
keyYen = $0004 ; ¥
60-
keySemicolon = $0180 ; ;
61-
keyColon = $0140 ; :
62-
keyatSign = $0120 ; @
63-
keyCaret = $0108 ; ^
64-
keySlash = $0102 ; /
65-
keyUnderscore = $0101 ; _
66-
keyComma = $0202 ; ,
67-
keyPeriod = $0201 ; .
68-
keyDash = $0104 ; -
69-
keyKana = $0001
63+
keyCloseBracket = $40 ; ]
64+
keyOpenBracket = $41 ; [
65+
keyYen = $45 ; ¥
66+
keySemicolon = $38 ; ;
67+
keyColon = $39 ; :
68+
keyatSign = $3A ; @
69+
keyCaret = $3C ; ^
70+
keySlash = $3E ; /
71+
keyUnderscore = $3F ; _
72+
keyComma = $36 ; ,
73+
keyPeriod = $37 ; .
74+
keyDash = $3D ; -
75+
keyKana = $47
7076

71-
keySpace = $0802
77+
keySpace = $06
7278

73-
key0 = $0208
74-
key1 = $0704
75-
key2 = $0708
76-
key3 = $0608
77-
key4 = $0508
78-
key5 = $0504
79-
key6 = $0408
80-
key7 = $0404
81-
key8 = $0308
82-
key9 = $0304
79+
key0 = $34
80+
key1 = $0D
81+
key2 = $0C
82+
key3 = $14
83+
key4 = $1C
84+
key5 = $1D
85+
key6 = $24
86+
key7 = $25
87+
key8 = $2C
88+
key9 = $2D
8389

84-
keyA = $0680
85-
keyB = $0401
86-
keyC = $0502
87-
keyD = $0580
88-
keyE = $0604
89-
keyF = $0501
90-
keyG = $0440
91-
keyH = $0480
92-
keyI = $0320
93-
keyJ = $0380
94-
keyK = $0280
95-
keyL = $0240
96-
keyM = $0301
97-
keyN = $0302
98-
keyO = $0220
99-
keyP = $0204
100-
keyQ = $0740
101-
keyR = $0540
102-
keyS = $0640
103-
keyT = $0520
104-
keyU = $0340
105-
keyV = $0402
106-
keyW = $0620
107-
keyX = $0601
108-
keyY = $0420
109-
keyZ = $0602
90+
keyA = $10
91+
keyB = $27
92+
keyC = $1E
93+
keyD = $18
94+
keyE = $15
95+
keyF = $1F
96+
keyG = $21
97+
keyH = $20
98+
keyI = $2A
99+
keyJ = $28
100+
keyK = $30
101+
keyL = $31
102+
keyM = $2F
103+
keyN = $2E
104+
keyO = $32
105+
keyP = $35
106+
keyQ = $09
107+
keyR = $19
108+
keyS = $11
109+
keyT = $1A
110+
keyU = $29
111+
keyV = $26
112+
keyW = $12
113+
keyX = $17
114+
keyY = $22
115+
keyZ = $16

0 commit comments

Comments
 (0)