1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-25 17:29:50 +00:00
cc65/libsrc/atari5200/irq.s

60 lines
1.4 KiB
ArmAsm
Raw Normal View History

2014-05-12 01:02:17 +00:00
;
; IRQ handling (ATARI 5200 version)
;
.export initirq, doneirq
.import callirq
.include "atari5200.inc"
2014-05-26 23:47:37 +00:00
; ------------------------------------------------------------------------
.segment "ONCE"
2014-05-12 01:02:17 +00:00
initirq:
2014-05-26 23:47:37 +00:00
lda VVBLKD
ldx VVBLKD+1
sta IRQInd+1
stx IRQInd+2
ldy #<IRQStub
ldx #>IRQStub
jmp SETVBV
; ------------------------------------------------------------------------
.code
2014-05-12 01:02:17 +00:00
doneirq:
2014-05-26 23:47:37 +00:00
ldy IRQInd+1
ldx IRQInd+2
;jmp SETVBV
; fall thru
; ------------------------------------------------------------------------
; Set deferred vertical blank interrupt
; logic copied from Atari computer ROM
SETVBV: txa
ldx #5
sta WSYNC ; waste 20 CPU cycles
@1: dex ; to allow VBLANK to happen
bne @1 ; if this is line "7C"
sta VVBLKD+1
sty VVBLKD
2014-05-12 01:02:17 +00:00
rts
2014-05-26 23:47:37 +00:00
; ------------------------------------------------------------------------
.segment "LOWCODE"
IRQStub:
cld ; Just to be sure
jsr callirq ; Call the functions
jmp IRQInd ; Jump to the saved IRQ vector
; ------------------------------------------------------------------------
.data
IRQInd: jmp $0000