-
Notifications
You must be signed in to change notification settings - Fork 0
/
rmt_sup.s
358 lines (311 loc) · 6.95 KB
/
rmt_sup.s
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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
;===============================================================================
;Curse of the lost miner
;===============================================================================
;Supplementary variables
.segment "DATA"
_vbistorel:
.byte 0
_vbistoreh:
.byte 0
_sfx:
.byte 0
_suspend:
.byte 0
_mvDelay:
.byte 0
_colorStore1:
.byte 0
_colorStore2:
.byte 0
_keypadKey:
.byte $FF
_keypadDisable:
.byte $00
_secondFire:
.byte $00
;==============================================================================
; DLI Different colors and character set for status bar
;==============================================================================
.segment "CODE"
_dliHandler:
pha
sta 54282 ;Horiz retrace
lda #48 ;DARK BG
sta 53272-4096
lda #12
sta 53271-4096 ;BRIGHT FONT
lda #<_dliHandler2
sta $0206
lda #>_dliHandler2
sta $0207
pla
rti
_dliHandler2:
pha
sta 54282 ;Horiz retrace
;Restore colors, swap after DLI
lda _colorStore2 ;BLACK BG
sta 53272-4096
lda _colorStore1
sta 53271-4096
lda #<_dliHandler
sta $0206
lda #>_dliHandler
sta $0207
pla
rti
;===============================================================================
; Break key handler
;===============================================================================
.segment "CODE"
_breakHandler:
pha
lda #$FF
sta _secondFire
pla
pla
rti
;===============================================================================
; Keypad interrupt continuation handler
;===============================================================================
.segment "CODE"
_keypadCont:
_kc1: pha ;Save A
lda _keypadDisable ;Check if keypad disabled?
beq _kc2 ;If enabled, register the key
lda #$FF ;If not, place no key
sta _keypadKey
pla ;Restore A
jmp $FCB2 ;Continue with original handler
_kc2: pla ;Restore A
sta _keypadKey ;Store last key pressed
_kc3: jmp $FCB2 ;Continue with original handler
;===============================================================================
;VBI. Movement delay, Calling RMT
;===============================================================================
.segment "CODE"
_vbiRoutine:
php
pla
;No attract
lda #0
sta 4
;Movement delay
lda _mvDelay
cmp #0
beq _n
dec _mvDelay
;if audio is suspended, do not call RMT routines
_n: lda _suspend
cmp #0
bne _x1
;jmp _x1 ;@@!!@@
;if SFX not requested, continue to music update
lda _sfx
cmp #0
beq _x
;SFX
ldx #3
lda #30
ldy _sfx
jsr 8207
lda #0
sta _sfx
;Music update - Call RMT
_x: jsr 8195
;Call original VBI routine
_x1: jmp (_vbistorel)
;===============================================================================
; Set-up VBI routine
;===============================================================================
.segment "CODE"
.proc _rmtSetVBI: near
.segment "CODE"
;Store original vbi address
lda $204
sta _vbistorel
lda $205
sta _vbistoreh
;Set new
lda #<_vbiRoutine
sta $204
lda #>_vbiRoutine
sta $205
rts
.endproc
;Restore VBI original routine
.segment "CODE"
;===============================================================================
; Restore original VBI routine
;===============================================================================
.proc _rmtRestoreVBI: near
.segment "CODE"
;store original vbi address
ldy _vbistorel
ldx _vbistoreh
sty $202
stx $203
; lda #7
; jsr $e45c
rts
.endproc
;===============================================================================
; Initialize MENU music
;===============================================================================
.segment "CODE"
.proc _rmtInitMenuMusic: near
.segment "CODE"
;Music file is at page 36
ldx #0
ldy #36
;Zeroth song line
lda #0
;Initialize the tracker
jsr 8192
;End of procedure
rts
.endproc
;===============================================================================
; Initialize GAME music
;===============================================================================
.proc _rmtInitGameMusic: near
.segment "CODE"
;Music file is at page 36
ldx #0
ldy #36
;Eleventh song line
lda #11
;Initialize the tracker
jsr 8192
;End of procedure
rts
.endproc
;===============================================================================
; Initialize GAME OVER music
;===============================================================================
.proc _rmtInitGameOverMusic: near
.segment "CODE"
;Music file is at page 36
ldx #0
ldy #36
;Fourteenth song line
lda #14
;Initialize the tracker
jsr 8192
;End of procedure
rts
.endproc
;===============================================================================
; Initialize Dummy Music
;===============================================================================
.proc _rmtInitDummyMusic: near
.segment "CODE"
;Music file is at page 36
ldx #0
ldy #36
;Sixteenth song line
lda #16
;Initialize the tracker
jsr 8192
;End of procedure
rts
.endproc
;-Stop RMT routine
.segment "CODE"
;===============================================================================
; Stop all RMT playback
;===============================================================================
.proc _rmtAllStop: near
.segment "CODE"
jsr 8198
rts
.endproc
;===============================================================================
; Sound effects
;===============================================================================
;-Play diamond picked sound------------
.segment "CODE"
.proc _rmtPlayDiamond : near
.segment "CODE"
lda #10
sta _sfx
rts
.endproc
;-Play jump sound------------
.segment "CODE"
.proc _rmtPlayJump : near
.segment "CODE"
lda #18
sta _sfx
rts
.endproc
;-Play congratulations sound ---------------
.segment "CODE"
.proc _rmtPlayGratulation : near
.segment "CODE"
lda #16
sta _sfx
rts
.endproc
;-Play death sound-----------------------
.segment "CODE"
.proc _rmtPlayDeath : near
.segment "CODE"
lda #14
sta _sfx
rts
.endproc
;-Play all diamonds collected sound
.segment "CODE"
.proc _rmtPlayPicked : near
.segment "CODE"
lda #12
sta _sfx
rts
.endproc
;-Suspend RMT routine--------
.segment "CODE"
.proc _rmtSuspend : near
.segment "CODE"
lda #1
sta _suspend
rts
.endproc
;-Resume RMT routine--------
.segment "CODE"
.proc _rmtResume : near
.segment "CODE"
lda #0
sta _suspend
rts
.endproc
;-OS call - cold start--------
.segment "CODE"
.proc _asmReboot : near
.segment "CODE"
jmp 58487
.endproc
.export _mvDelay
.export _rmtSuspend
.export _rmtResume
.export _rmtPlayPicked
.export _rmtPlayDeath
.export _rmtPlayDiamond
.export _rmtPlayGratulation
.export _rmtInitMenuMusic
.export _rmtInitGameMusic
.export _rmtInitGameOverMusic
.export _rmtInitDummyMusic
.export _rmtSetVBI
.export _rmtAllStop
.export _rmtPlayJump
.export _rmtRestoreVBI
.export _asmReboot
.export _dliHandler
.export _colorStore1
.export _colorStore2
.export _keypadKey
.export _keypadDisable
.export _keypadCont
.export _secondFire
.export _breakHandler