safer vector handling in some Kernal routines
This commit is contained in:
1 parent
e349aa64f9
commit
26ce9d3b58
4 files changed
+34
-9
No files matched your search
@@ -29,8 +29,8 @@ hw_entry_irq:
|
|||||||
bne irq_handler_brk
|
bne irq_handler_brk
|
||||||
|
|
||||||
// Not caused by BRK - call interrupt routine (only if initialised)
|
// Not caused by BRK - call interrupt routine (only if initialised)
|
||||||
lda CINV
|
// Routine on zeropage = assuming not initialized
|
||||||
ora CINV+1
|
lda CINV+1
|
||||||
beq !+
|
beq !+
|
||||||
jmp (CINV)
|
jmp (CINV)
|
||||||
!:
|
!:
|
||||||
|
|||||||
@@ -147,7 +147,22 @@ scnkey_bucky_loop:
|
|||||||
|
|
||||||
// Set KEYTAB vector
|
// Set KEYTAB vector
|
||||||
|
|
||||||
jsr via_keylog // XXX for some CPUs we have indirect jsr
|
lda KEYLOG+1
|
||||||
|
bne !+
|
||||||
|
jsr scnkey_set_keytab // KEYLOG routine on zeropage? most likely vector not set
|
||||||
|
#if HAS_OPCODES_65C02
|
||||||
|
bra scnkey_keytab_set_done
|
||||||
|
#else
|
||||||
|
jmp scnkey_keytab_set_done
|
||||||
|
#endif
|
||||||
|
!:
|
||||||
|
#if HAS_OPCODES_65CE02
|
||||||
|
jsr_ind KEYLOG
|
||||||
|
#else
|
||||||
|
jsr scnkey_via_keylog
|
||||||
|
#endif
|
||||||
|
|
||||||
|
scnkey_keytab_set_done:
|
||||||
|
|
||||||
#if CONFIG_JOY2_CURSOR
|
#if CONFIG_JOY2_CURSOR
|
||||||
|
|
||||||
@@ -483,8 +498,4 @@ scnkey_early_repeat:
|
|||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
via_keylog:
|
|
||||||
jmp (KEYLOG)
|
|
||||||
|
|
||||||
|
|
||||||
#endif // no CONFIG_LEGACY_SCNKEY
|
#endif // no CONFIG_LEGACY_SCNKEY
|
||||||
@@ -38,8 +38,8 @@ scnkey_set_keytab:
|
|||||||
cmp #$FF
|
cmp #$FF
|
||||||
bne scnkey_valid_offset
|
bne scnkey_valid_offset
|
||||||
|
|
||||||
// $FF means we shouldn't decode anything, mark this by setting high byte
|
// $FF means we should not decode anything, mark this by setting high byte
|
||||||
// of KEYTAB to 0 (I don't think anyone would put keyboard decoding table
|
// of KEYTAB to 0 (I do not think anyone would put keyboard decoding table
|
||||||
// at zeropage)
|
// at zeropage)
|
||||||
lda #$00
|
lda #$00
|
||||||
beq !+ // branch always
|
beq !+ // branch always
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
// #LAYOUT# STD * #TAKE
|
||||||
|
// #LAYOUT# X16 * #IGNORE
|
||||||
|
// #LAYOUT# * KERNAL_0 #TAKE
|
||||||
|
// #LAYOUT# * * #IGNORE
|
||||||
|
|
||||||
|
// Short helper jump-via-vector routine, to set the keyboard matrix
|
||||||
|
|
||||||
|
#if !HAS_OPCODES_65CE02
|
||||||
|
|
||||||
|
scnkey_via_keylog:
|
||||||
|
|
||||||
|
jmp (KEYLOG)
|
||||||
|
|
||||||
|
#endif
|
||||||
Reference in new issue
Block a user