-
Notifications
You must be signed in to change notification settings - Fork 0
/
irq_sub.js
178 lines (158 loc) · 3.71 KB
/
irq_sub.js
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
; -*-asm-*-
****************
* MODUL IRQ
* created 30/07/95
****************
* exports MODrun.irq_sub
* MODend.irq_sub
* MODlen.irq_sub
GPU set 1
AnzObjekte equ 13
gpu
include <js\symbols\blit_eq.js>
include <js\symbols\jagregeq.js>
include <js\macro\help.mac>
include <js\macro\module.mac>
include <js\macro\joypad1.mac>
include "constant.S"
****************
* global register equates
include "globlreg.inc"
****************
* local macros
MACRO IRQ_PUSH
subqt #4,IRQ_SP.a
store \0,(IRQ_SP.a)
ENDM
MACRO IRQ_POP
load (IRQ_SP.a),\0
addqt #4,IRQ_SP.a
ENDM
MODULE irq_sub,$f03000
IRQ_START::
;;; ----------------------------------------
;;; CPU interrupt
;;; ----------------------------------------
org $f03000
irq0::
movei #ill_irq,r0
load (IRQ_FLAGADDR.a),IRQ_FLAG.a
jump (IRQScratch0.a)
bclr #3,IRQ_FLAG.a
;;; ----------------------------------------
;;; DSP interrupt
;;; ----------------------------------------
org $f03010
irq1::
movei #ill_irq,r0
load (IRQ_FLAGADDR.a),IRQ_FLAG.a
jump (IRQScratch0.a)
bclr #3,IRQ_FLAG.a
;;; ----------------------------------------
;;; Timer interrupt
;;; ----------------------------------------
org $f03020
load (IRQ_FLAGADDR.a),IRQ_FLAG.a
movei #timer_irq,IRQScratch0.a
bset #11,IRQ_FLAG.a
load (IRQ_SP.a),IRQ_RTS.a
jump (IRQScratch0.a)
bclr #3,IRQ_FLAG.a
;;; ----------------------------------------
;;; OBJECT interrupt
;;; ----------------------------------------
org $f03030
load (IRQ_FLAGADDR.a),IRQ_FLAG.a
movei #obj_irq,IRQScratch0.a
bset #12,IRQ_FLAG.a
load (IRQ_SP.a),IRQ_RTS.a
jump (IRQScratch0.a)
bclr #3,IRQ_FLAG.a
;;; ----------------------------------------
;;; Blitter interrupt
;;; ----------------------------------------
org $f03040
irq4::
movei #ill_irq,r0
load (IRQ_FLAGADDR.a),IRQ_FLAG.a
jump (IRQScratch0.a)
bclr #3,IRQ_FLAG.a
;;; ----------------------------------------
;;; Illegal interrupt
;;; ----------------------------------------
ill_irq:
bclr #6,IRQ_FLAG.a
bset #11,IRQ_FLAG.a
movei #$f02114,r0
load (r0),r0
moveta r0,r0
jump (DUMP_REG.a)
store IRQ_FLAG.a,(IRQ_FLAGADDR.a)
;;; ----------------------------------------
;;; OBJECT interrupt
;;; ----------------------------------------
obj_irq::
movefa IRQ_SP,IRQ_SP.a
addqt #2,IRQ_RTS.a
;---------------
movei #OBF,IRQScratch0.a
storew IRQScratch1.a,(IRQScratch0.a) ; resume OP
;---------------
moveq #1,IRQScratch1.a
movei #OBL,IRQScratch0.a
moveta IRQScratch1.a,VBLFlag
movei #OBL0,IRQScratch1.a
movei #AnzObjekte*4,IRQScratch2.a
loadp (IRQScratch1.a),IRQScratch3.a
.loop
addq #8,IRQScratch1.a
subq #1,IRQScratch2.a
storep IRQScratch3.a,(IRQScratch0.a)
addqt #8,IRQScratch0.a
jr nz,.loop
loadp (IRQScratch1.a),IRQScratch3.a
;---------------
.exit
jump (IRQ_RTS.a)
store IRQ_FLAG.a,(IRQ_FLAGADDR.a)
****************
* ms-timer
****************
timer_irq::
addqt #2,IRQ_RTS.a
movefa IRQ_SP,IRQ_SP.a
;---------------
subq #1,_50Hz.a
movei #$f02114,IRQScratch0.a
jr nz,.cont0
load (IRQScratch0.a),IRQScratch1.a
moveq #20,_50Hz.a
bset #1,IRQScratch1.a
store IRQScratch1.a,(IRQScratch0.a) ; kick CPU-VBL
.cont0
movefa PauseFlag,IRQScratch1.a
cmpq #0,IRQScratch1.a
movei #.exit,IRQScratch0.a
jump nz,(IRQScratch0.a)
nop
subq #1,ms.a
jr nz,.cont
subq #1,DropCounter.a
movei #1000,ms.a
addqt #1,sec.a ; sec inc
.cont
jr nn,.exit
movefa Y_Flag,IRQScratch1.a
cmpq #0,IRQScratch1.a
jr z,.x1
nop
jr nn,.exit
.x1
moveq #8,IRQScratch1.a
move DropCounterInit.a,DropCounter.a
moveta IRQScratch1.a,Y_Flag
.exit
jump (IRQ_RTS.a)
store IRQ_FLAG.a,(IRQ_FLAGADDR.a)
ENDMODULE irq_sub
END