File: shadow_ram_timerirq2.s

package info (click to toggle)
cc65 2.19-2
  • links: PTS
  • area: main
  • in suites: forky, sid, trixie
  • size: 20,268 kB
  • sloc: ansic: 117,151; asm: 66,339; pascal: 4,248; makefile: 1,009; perl: 607
file content (81 lines) | stat: -rw-r--r-- 1,804 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
;
; Atari XL shadow RAM timer IRQ #2 handler
;
; Christian Groessler, chris@groessler.org, 2019
;

;DEBUG           =       1

.ifdef __ATARIXL__

SHRAM_HANDLERS  =       1
                .include        "atari.inc"
                .include        "romswitch.inc"
                .export         set_VTIMR2_handler


.segment "LOWBSS"

VTIMR2_handler: .res    3


.segment "BSS"

old_VTIMR2_handler:
                .res    2


.segment "LOWCODE"

; timer interrupt handler:
; disable ROM, call user handler, enable ROM again

my_VTIMR2_handler:
                disable_rom_quick
                jsr     VTIMR2_handler
                enable_rom_quick
                pla
                rti

.segment "CODE"

; install or remove VTIMR2 handler
; input: CF - 0/1 for remove/install handler
;        AX - pointer to handler (if CF=1)
; registers destroyed

set_VTIMR2_handler:

                bcc     @remove

; install vector

                stx     VTIMR2_handler+2
                sta     VTIMR2_handler+1        ; save passed vector in low memory
                lda     #$4C                    ; "JMP" opcode
                sta     VTIMR2_handler

                lda     VTIMR2
                sta     old_VTIMR2_handler
                lda     VTIMR2+1
                sta     old_VTIMR2_handler+1

                lda     #<my_VTIMR2_handler
                php
                sei
                sta     VTIMR2
                lda     #>my_VTIMR2_handler
                sta     VTIMR2+1
                plp
                rts

@remove:        php
                sei
                lda     old_VTIMR2_handler
                sta     VTIMR2
                lda     old_VTIMR2_handler+1
                sta     VTIMR2+1
                plp
                rts

.endif  ; .ifdef __ATARIXL__