Workaround for "phantom" key presses in the C128 "joystick" mouse driver.
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
; 2013-07-25, Greg King
|
||||
;
|
||||
|
||||
.include "c128.inc"
|
||||
|
||||
.export mouse_libref, _pen_adjuster
|
||||
|
||||
.data
|
||||
@@ -21,3 +23,70 @@ mouse_libref: ; generic label for mouse-kernel
|
||||
;
|
||||
_pen_adjuster:
|
||||
.addr $0000
|
||||
.addr IRQStub2
|
||||
callback: ; callback into mouse driver after ROM IRQ handler has been run
|
||||
.addr $0000 ; (filled in by mouse driver)
|
||||
jmp_rom_hdlr: ; "trampoline" to jump to ROM IRQ handler
|
||||
.addr $0000 ; (filled in by mouse driver)
|
||||
|
||||
|
||||
.segment "LOWCODE"
|
||||
|
||||
; Called from irq.s when it thinks it chains to the original handler.
|
||||
; ROM is banked in again. In order to call the callback we have to
|
||||
; bank it out one more time.
|
||||
|
||||
IRQStub2:
|
||||
|
||||
; Call ROM handler and prepare stack so that it will return to us.
|
||||
|
||||
; setup fake IRQ stack frame which will return to "IRQCont"
|
||||
lda #>@IRQCont
|
||||
pha
|
||||
lda #<@IRQCont
|
||||
pha
|
||||
php
|
||||
|
||||
; mimic the contents saved on the stack by the ROM IRQ entry handler
|
||||
pha ; A
|
||||
pha ; X
|
||||
pha ; Y
|
||||
lda #MMU_CFG_CC65 ; MMU configuration which will be active after the ROM handler returns
|
||||
pha
|
||||
|
||||
; push address of ROM handler on stack and jump to it
|
||||
lda jmp_rom_hdlr+1
|
||||
pha
|
||||
lda jmp_rom_hdlr
|
||||
pha
|
||||
rts ; jump to ROM handler
|
||||
|
||||
; our MMU configuration byte we pushed on the stack before (MMU_CFG_CC65) is now active
|
||||
|
||||
@IRQCont:
|
||||
|
||||
; call mouse driver callback routine
|
||||
lda #>(@IRQCont2-1)
|
||||
pha
|
||||
lda #<(@IRQCont2-1)
|
||||
pha
|
||||
lda callback+1
|
||||
pha
|
||||
lda callback
|
||||
pha
|
||||
rts ; jump to callback routine
|
||||
|
||||
@IRQCont2:
|
||||
|
||||
; return from interrupt
|
||||
; We could just jump to $FF33, but since I don't know whether this address is valid in all
|
||||
; ROM versions, duplicate that code here.
|
||||
|
||||
pla
|
||||
sta MMU_CR ; MMU configuration register
|
||||
pla
|
||||
tay
|
||||
pla
|
||||
tax
|
||||
pla
|
||||
rti
|
||||
|
||||
Reference in New Issue
Block a user