Skip to content

Commit e0d0f07

Browse files
Key dispatch table
1 parent 3120139 commit e0d0f07

File tree

1 file changed

+31
-42
lines changed

1 file changed

+31
-42
lines changed

chip8.system.s

Lines changed: 31 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -945,7 +945,7 @@ ret: rts
945945
txa
946946
pha
947947
lda instr
948-
ldx #8 ; size of table
948+
ldx #NUM_OPS-1
949949
: cmp dispatch_op,x
950950
beq :+
951951
dex
@@ -964,10 +964,13 @@ ret: rts
964964

965965
dispatch_op:
966966
.byte $07, $0A, $15, $18, $1E, $29, $33, $55, $65
967+
NUM_OPS = * - dispatch_op
967968
dispatch_lo:
968969
.lobytes OpFX07, OpFX0A, OpFX15, OpFX18, OpFX1E, OpFX29, OpFX33, OpFX55, OpFX65
970+
.assert * - dispatch_lo = NUM_OPS, error, "table size"
969971
dispatch_hi:
970972
.hibytes OpFX07, OpFX0A, OpFX15, OpFX18, OpFX1E, OpFX29, OpFX33, OpFX55, OpFX65
973+
.assert * - dispatch_hi = NUM_OPS, error, "table size"
971974
.endproc
972975

973976
.proc OpFX07
@@ -1411,48 +1414,23 @@ ret: rts
14111414
.proc TranslateKey
14121415
and #$7F
14131416

1414-
;; Escape?
1415-
cmp #$1B
1416-
bne :+
1417-
sta KBDSTRB
1418-
jmp quit
1419-
:
1420-
cmp #'9'
1421-
bne :+
1422-
jsr PrevBorder
1423-
lda #$FF
1424-
rts
1425-
:
1426-
cmp #'0'
1427-
bne :+
1428-
jsr NextBorder
1429-
lda #$FF
1430-
rts
1431-
:
1432-
cmp #'['
1433-
bne :+
1434-
jsr PrevBG
1435-
lda #$FF
1436-
rts
1437-
:
1438-
cmp #']'
1439-
bne :+
1440-
jsr NextBG
1441-
lda #$FF
1442-
rts
1443-
:
1444-
cmp #','
1445-
bne :+
1446-
jsr PrevFG
1447-
lda #$FF
1448-
rts
1449-
:
1450-
cmp #'.'
1451-
bne :+
1452-
jsr NextFG
1453-
lda #$FF
1454-
rts
1417+
;; Search for command key
1418+
ldx #NUM_KEYS-1
1419+
: cmp dispatch_key,x
1420+
beq :+
1421+
dex
1422+
bpl :-
1423+
jmp check_keypad
14551424
:
1425+
sta KBDSTRB
1426+
lda dispatch_lo,x
1427+
sta dispatch
1428+
lda dispatch_hi,x
1429+
sta dispatch+1
1430+
dispatch := *+1
1431+
jmp $1234 ; self-modified
1432+
1433+
check_keypad:
14561434
;; Convert to uppercase
14571435
cmp #'a'
14581436
bcc :+
@@ -1472,6 +1450,17 @@ found:
14721450
txa
14731451
rts ; N=0
14741452

1453+
1454+
dispatch_key:
1455+
.byte $1B, '9', '0', '[', ']', ',', '.'
1456+
NUM_KEYS = * - dispatch_key
1457+
dispatch_lo:
1458+
.lobytes quit, PrevBorder, NextBorder, PrevBG, NextBG, PrevFG, NextFG
1459+
.assert * - dispatch_lo = NUM_KEYS, error, "table size"
1460+
dispatch_hi:
1461+
.hibytes quit, PrevBorder, NextBorder, PrevBG, NextBG, PrevFG, NextFG
1462+
.assert * - dispatch_hi = NUM_KEYS, error, "table size"
1463+
14751464
key_table:
14761465
;; COSMAC VIP hex keypad (index) to common QWERTY layout (value):
14771466
;; 1 2 3 4 > 1 2 3 C

0 commit comments

Comments
 (0)