1+ .include "keyboardmap.asm"
2+
3+ ; for remapping, see above map file for full list
4+ kbMappedUp = keyK
5+ kbMappedDown = keyJ
6+ kbMappedLeft = keyH
7+ kbMappedRight = keyL
8+ kbMappedB = keyD
9+ kbMappedA = keyF
10+ kbMappedSelect = keyShiftLeft
11+ kbMappedStart = keyReturn
12+
13+
114; https://www.nesdev.org/wiki/Family_BASIC_Keyboard
215
316; Input ($4016 write)
@@ -82,92 +95,63 @@ pollKeyboard:
8295@ret: rts
8396
8497
85- ; Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7
86- ; 0 ] [ RETURN F8 STOP ¥ RSHIFT KANA
87- ; 1 ; : @ F7 ^ - / _
88- ; 2 K L O F6 0 P , .
89- ; 3 J U I F5 8 9 N M
90- ; 4 H G Y F4 6 7 V B
91- ; 5 D R T F3 4 5 C F
92- ; 6 A S W F2 3 E Z X
93- ; 7 CTR Q ESC F1 2 1 GRPH LSHIFT
94- ; 8 LEFT RIGHT UP CLR HOME INS DEL SPACE DOWN
95-
96- kbUp = $0280 ; k
97- kbDown = $0380 ; j
98- kbLeft = $0480 ; h
99- kbRight = $0240 ; l
100- kbB = $0580 ; d
101- kbA = $0501 ; f
102- kbSelect = $0701 ; lshift
103- kbStart = $0020 ; return
104-
105-
10698mapKeysToButtons:
10799 lda entryActive
108- bne @startOnly
109- lda keyboardInput+>kbUp
110- and #<kbUp
100+ ; ignore all keys except for start/return during high score entry
101+ bne @readStart
102+
103+ readKeyDirect kbMappedUp
111104 beq @upNotPressed
112105 lda newlyPressedKeys
113106 ora #BUTTON_UP
114107 sta newlyPressedKeys
115- bne @skipDownRead
108+ bne @downNotPressed ; skip down read if up is pressed
116109@upNotPressed:
117110
118- lda keyboardInput+>kbDown
119- and #<kbDown
111+ readKeyDirect kbMappedDown
120112 beq @downNotPressed
121113 lda newlyPressedKeys
122114 ora #BUTTON_DOWN
123115 sta newlyPressedKeys
124- @skipDownRead:
125116@downNotPressed:
126- lda keyboardInput+>kbLeft
127- and #<kbLeft
117+
118+ readKeyDirect kbMappedLeft
128119 beq @leftNotPressed
129120 lda newlyPressedKeys
130121 ora #BUTTON_LEFT
131122 sta newlyPressedKeys
132- bne @skipRightRead
123+ bne @rightNotPressed ; skip right read if left is pressed
133124@leftNotPressed:
134125
135- lda keyboardInput+>kbRight
136- and #<kbRight
126+ readKeyDirect kbMappedRight
137127 beq @rightNotPressed
138128 lda newlyPressedKeys
139129 ora #BUTTON_RIGHT
140130 sta newlyPressedKeys
141- @skipRightRead:
142131@rightNotPressed:
143132
144- lda keyboardInput+>kbB
145- and #<kbB
133+ readKeyDirect kbMappedB
146134 beq @bNotPressed
147135 lda newlyPressedKeys
148136 ora #BUTTON_B
149137 sta newlyPressedKeys
150138@bNotPressed:
151139
152- lda keyboardInput+>kbA
153- and #<kbA
140+ readKeyDirect kbMappedA
154141 beq @aNotPressed
155142 lda newlyPressedKeys
156143 ora #BUTTON_A
157144 sta newlyPressedKeys
158145@aNotPressed:
159146
160- lda keyboardInput+>kbSelect
161- and #<kbSelect
162- beq @selectNotPressed
147+ readKeyDirect kbMappedSelect
148+ beq @readStart
163149 lda newlyPressedKeys
164150 ora #BUTTON_SELECT
165151 sta newlyPressedKeys
166- @selectNotPressed:
167- @startOnly:
152+ @readStart:
168153
169- lda keyboardInput+>kbStart
170- and #<kbStart
154+ readKeyDirect kbMappedStart
171155 beq @startNotPressed
172156 lda newlyPressedKeys
173157 ora #BUTTON_START
@@ -193,7 +177,21 @@ mapKeysToButtons:
193177 sta heldButtons_player1
194178 rts
195179
196- shiftFlag := $08
180+ ; Bit0 Bit1 Bit2 Bit3 Bit4 Bit5 Bit6 Bit7
181+ ; 0 ] [ RETURN F8 STOP ¥ RSHIFT KANA
182+ ; 1 ; : @ F7 ^ - / _
183+ ; 2 K L O F6 0 P , .
184+ ; 3 J U I F5 8 9 N M
185+ ; 4 H G Y F4 6 7 V B
186+ ; 5 D R T F3 4 5 C F
187+ ; 6 A S W F2 3 E Z X
188+ ; 7 CTR Q ESC F1 2 1 GRPH LSHIFT
189+ ; 8 LEFT RIGHT UP CLR_HOME INS DEL SPACE DOWN
190+
191+ ; each byte represents row, column and if shift should be read
192+ ; only keys supported by the score entry routine are included
193+
194+ shiftFlag = $08
197195charToKbMap:
198196 .byte $86 ; Space
199197 .byte $60 ; A
@@ -242,6 +240,7 @@ charToKbMap:
242240 .byte $16 | shiftFlag ; ?
243241 .byte $15 ; -
244242 .byte $85 ; del ; treated differently
243+ ; future feature: read left and right to shift cursor position
245244
246245charToKbMapEnd:
247246
0 commit comments