-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathrmt_sup.asm
251 lines (208 loc) · 3.74 KB
/
rmt_sup.asm
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
;Caverns of the lost miner version C
;2007 (LGPL) BAKTRA
;Assembler routines. I like CC65, because it's easy to add assembler routines
;to a C program. And I also like KDE's editor component, because 6502 assembler
;syntax highlighting information is bundled. Under Microsoft Windows, I recomend
;PSPad programmer's editor (www.pspad.com). It is great freeware editor.
;If you make modifications and _vbistorel and _vbistoreh will be at different memory
;pages, align them using some "padding" bytes
;Supplementary variables
.segment "CODE"
_sfx: .byte 0
_vbistorel: .byte 0
_vbistoreh: .byte 0
_suspend: .byte 0
_mvDelay: .byte 0
.segment "CODE"
_dliHandler:
pha
sta 54282 ;Horiz retrace
lda #4 ;DARK BG
sta 53272
lda #12
sta 53271 ;BRIGHT FONT
lda #<_dliHandler2
sta 512
lda #>_dliHandler2
sta 513
pla
rti
_dliHandler2:
pha
sta 54282 ;Horiz retrace
;Restore colors, swap after DLI
lda #134 ;BLACK BG
sta 53272
lda #12
sta 53271
lda #<_dliHandler
sta 512
lda #>_dliHandler
sta 513
pla
rti
;Here is VBI CALLBACK
.segment "CODE"
_vbiRoutine:
php
pla
;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
;if SFX not requested, continue to music update
lda _sfx
cmp #0
beq _x
;SFX
ldx #3
lda #30
ldy _sfx
jsr $200f
lda #0
sta _sfx
;Music update - this is like MikMod :-)
_x: jsr $2003
_x1: jmp (_vbistorel)
;Setting up a VBI routine ---------------------------
.segment "CODE"
.proc _rmtSetVBI: near
.segment "CODE"
;store original vbi address
lda 548
sta _vbistorel
lda 549
sta _vbistoreh
;Set new
ldx #>_vbiRoutine
ldy #<_vbiRoutine
lda #7
jsr $e45c
rts
.endproc
;Restore VBI original routine
.segment "CODE"
.proc _rmtRestoreVBI: near
.segment "CODE"
;store original vbi address
ldy _vbistorel
ldx _vbistoreh
lda #7
jsr $e45c
rts
.endproc
;-Initialize RASTER music tracker------------------
.segment "CODE"
.proc _rmtInitMenuMusic: near
.segment "CODE"
;Music file is at page 100
ldx #0
ldy #100
;First song line
lda #0
;Initialize the tracker
jsr $2000
;End of procedure
rts
.endproc
.proc _rmtInitGameMusic: near
.segment "CODE"
;Music file is at page 100
ldx #0
ldy #100
;Tenth song line
lda #10
;Initialize the tracker
jsr $2000
;End of procedure
rts
.endproc
;-Stop RMT routine
.segment "CODE"
.proc _rmtAllStop: near
.segment "CODE"
jsr $2006
rts
.endproc
;-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 _rmtSetVBI
.export _rmtAllStop
.export _rmtPlayJump
.export _rmtRestoreVBI
.export _asmReboot
.export _dliHandler