@@ -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
965965dispatch_op:
966966 .byte $07 , $0A , $15 , $18 , $1E , $29 , $33 , $55 , $65
967+ NUM_OPS = * - dispatch_op
967968dispatch_lo:
968969 .lobytes OpFX07, OpFX0A, OpFX15, OpFX18, OpFX1E, OpFX29, OpFX33, OpFX55, OpFX65
970+ .assert * - dispatch_lo = NUM_OPS, error, "table size"
969971dispatch_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+
14751464key_table:
14761465 ;; COSMAC VIP hex keypad (index) to common QWERTY layout (value):
14771466 ;; 1 2 3 4 > 1 2 3 C
0 commit comments