mirror of
https://github.com/cc65/cc65.git
synced 2025-01-11 11:30:13 +00:00
Fix timer IRQ hooking for atarixl target.
This commit is contained in:
parent
86fe20fb14
commit
e85a3f9762
@ -8,11 +8,13 @@
|
|||||||
|
|
||||||
em_libref := _exit
|
em_libref := _exit
|
||||||
joy_libref := _exit
|
joy_libref := _exit
|
||||||
mouse_libref := _exit
|
|
||||||
ser_libref := atari_ser_libref
|
ser_libref := atari_ser_libref
|
||||||
.ifdef __ATARIXL__
|
.ifdef __ATARIXL__
|
||||||
.import CIO_handler
|
.import CIO_handler
|
||||||
tgi_libref := CIO_handler
|
tgi_libref := CIO_handler
|
||||||
|
.import set_VTIMR1_handler
|
||||||
|
mouse_libref := set_VTIMR1_handler
|
||||||
.else
|
.else
|
||||||
|
mouse_libref := _exit
|
||||||
tgi_libref := _exit
|
tgi_libref := _exit
|
||||||
.endif
|
.endif
|
||||||
|
@ -35,7 +35,7 @@ HEADER:
|
|||||||
|
|
||||||
; Library reference
|
; Library reference
|
||||||
|
|
||||||
.addr $0000
|
libref: .addr $0000
|
||||||
|
|
||||||
; Jump table
|
; Jump table
|
||||||
|
|
||||||
@ -96,7 +96,6 @@ Buttons: .res 1 ; Button mask
|
|||||||
XPosWrk: .res 2
|
XPosWrk: .res 2
|
||||||
YPosWrk: .res 2
|
YPosWrk: .res 2
|
||||||
|
|
||||||
OldT1: .res 2
|
|
||||||
visible: .res 1
|
visible: .res 1
|
||||||
|
|
||||||
.if .defined (AMIGA_MOUSE) .or .defined (ST_MOUSE)
|
.if .defined (AMIGA_MOUSE) .or .defined (ST_MOUSE)
|
||||||
@ -108,11 +107,18 @@ dumy: .res 1
|
|||||||
oldval: .res 1
|
oldval: .res 1
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
.ifndef __ATARIXL__
|
||||||
|
OldT1: .res 2
|
||||||
|
.else
|
||||||
|
|
||||||
; Default values for some of the above variables
|
.data
|
||||||
|
set_VTIMR1_handler:
|
||||||
|
.byte $4C, 0, 0
|
||||||
|
.endif
|
||||||
|
|
||||||
.rodata
|
.rodata
|
||||||
|
|
||||||
|
; Default values for some of the above variables
|
||||||
; (We use ".proc" because we want to define both a label and a scope.)
|
; (We use ".proc" because we want to define both a label and a scope.)
|
||||||
|
|
||||||
.proc DefVars
|
.proc DefVars
|
||||||
@ -182,7 +188,23 @@ INSTALL:
|
|||||||
jsr CMOVEY
|
jsr CMOVEY
|
||||||
cli
|
cli
|
||||||
|
|
||||||
; install timer irq routine to poll mouse
|
; Install timer irq routine to poll mouse.
|
||||||
|
|
||||||
|
.ifdef __ATARIXL__
|
||||||
|
|
||||||
|
; Setup pointer to wrapper install/deinstall function.
|
||||||
|
lda libref
|
||||||
|
sta set_VTIMR1_handler+1
|
||||||
|
lda libref+1
|
||||||
|
sta set_VTIMR1_handler+2
|
||||||
|
|
||||||
|
; Install my handler.
|
||||||
|
sec
|
||||||
|
lda #<T1Han
|
||||||
|
ldx #>T1Han
|
||||||
|
jsr set_VTIMR1_handler
|
||||||
|
|
||||||
|
.else
|
||||||
|
|
||||||
lda VTIMR1
|
lda VTIMR1
|
||||||
sta OldT1
|
sta OldT1
|
||||||
@ -197,6 +219,8 @@ INSTALL:
|
|||||||
sta VTIMR1+1
|
sta VTIMR1+1
|
||||||
plp
|
plp
|
||||||
|
|
||||||
|
.endif
|
||||||
|
|
||||||
lda #%00000001
|
lda #%00000001
|
||||||
sta AUDCTL
|
sta AUDCTL
|
||||||
|
|
||||||
@ -231,6 +255,13 @@ UNINSTALL:
|
|||||||
sta IRQEN
|
sta IRQEN
|
||||||
sta POKMSK
|
sta POKMSK
|
||||||
|
|
||||||
|
.ifdef __ATARIXL__
|
||||||
|
|
||||||
|
clc
|
||||||
|
jsr set_VTIMR1_handler
|
||||||
|
|
||||||
|
.else
|
||||||
|
|
||||||
php
|
php
|
||||||
sei
|
sei
|
||||||
lda OldT1
|
lda OldT1
|
||||||
@ -239,6 +270,7 @@ UNINSTALL:
|
|||||||
sta VTIMR1+1
|
sta VTIMR1+1
|
||||||
plp
|
plp
|
||||||
|
|
||||||
|
.endif
|
||||||
; fall thru...
|
; fall thru...
|
||||||
|
|
||||||
;----------------------------------------------------------------------------
|
;----------------------------------------------------------------------------
|
||||||
@ -692,6 +724,9 @@ mmexit: sty oldval
|
|||||||
tax
|
tax
|
||||||
pla
|
pla
|
||||||
tay
|
tay
|
||||||
|
.ifdef __ATARIXL__
|
||||||
|
rts
|
||||||
|
.else
|
||||||
pla
|
pla
|
||||||
rti
|
rti
|
||||||
|
.endif
|
||||||
|
81
libsrc/atari/shadow_ram_timerirq1.s
Normal file
81
libsrc/atari/shadow_ram_timerirq1.s
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
;
|
||||||
|
; Atari XL shadow RAM timer IRQ #1 handler
|
||||||
|
;
|
||||||
|
; Christian Groessler, chris@groessler.org, 2014
|
||||||
|
;
|
||||||
|
|
||||||
|
;DEBUG = 1
|
||||||
|
|
||||||
|
.ifdef __ATARIXL__
|
||||||
|
|
||||||
|
SHRAM_HANDLERS = 1
|
||||||
|
.include "atari.inc"
|
||||||
|
.include "romswitch.inc"
|
||||||
|
.export set_VTIMR1_handler
|
||||||
|
|
||||||
|
|
||||||
|
.segment "LOWBSS"
|
||||||
|
|
||||||
|
VTIMR1_handler: .res 3
|
||||||
|
|
||||||
|
|
||||||
|
.segment "BSS"
|
||||||
|
|
||||||
|
old_VTIMR1_handler:
|
||||||
|
.res 2
|
||||||
|
|
||||||
|
|
||||||
|
.segment "LOWCODE"
|
||||||
|
|
||||||
|
; timer interrupt handler:
|
||||||
|
; disable ROM, call user handler, enable ROM again
|
||||||
|
|
||||||
|
my_VTIMR1_handler:
|
||||||
|
disable_rom_quick
|
||||||
|
jsr VTIMR1_handler
|
||||||
|
enable_rom_quick
|
||||||
|
pla
|
||||||
|
rti
|
||||||
|
|
||||||
|
.segment "CODE"
|
||||||
|
|
||||||
|
; install or remove VTIMR1 handler
|
||||||
|
; input: CF - 0/1 for remove/install handler
|
||||||
|
; AX - pointer to handler (if CF=1)
|
||||||
|
; registers destroyed
|
||||||
|
|
||||||
|
set_VTIMR1_handler:
|
||||||
|
|
||||||
|
bcc @remove
|
||||||
|
|
||||||
|
; install vector
|
||||||
|
|
||||||
|
stx VTIMR1_handler+2
|
||||||
|
sta VTIMR1_handler+1 ; save passed vector in low memory
|
||||||
|
lda #$4C ; "JMP" opcode
|
||||||
|
sta VTIMR1_handler
|
||||||
|
|
||||||
|
lda VTIMR1
|
||||||
|
sta old_VTIMR1_handler
|
||||||
|
lda VTIMR1+1
|
||||||
|
sta old_VTIMR1_handler+1
|
||||||
|
|
||||||
|
lda #<my_VTIMR1_handler
|
||||||
|
php
|
||||||
|
sei
|
||||||
|
sta VTIMR1
|
||||||
|
lda #>my_VTIMR1_handler
|
||||||
|
sta VTIMR1+1
|
||||||
|
plp
|
||||||
|
rts
|
||||||
|
|
||||||
|
@remove: php
|
||||||
|
sei
|
||||||
|
lda old_VTIMR1_handler
|
||||||
|
sta VTIMR1
|
||||||
|
lda old_VTIMR1_handler+1
|
||||||
|
sta VTIMR1+1
|
||||||
|
plp
|
||||||
|
rts
|
||||||
|
|
||||||
|
.endif ; .ifdef __ATARIXL__
|
Loading…
x
Reference in New Issue
Block a user