2
|
1 org $FF0000
|
1
|
2 incbin security.bin
|
2
|
3 Main
|
3
|
4 ;background and sprite test
|
|
5
|
|
6 ButtonState equ $FFFFEFF0
|
|
7 ButtonStateNew equ ButtonState+2
|
|
8
|
|
9 CRAMXferSizeCmd equ $9304
|
|
10 StaticColors equ 12
|
|
11
|
|
12 USE_HINT equ 0
|
|
13
|
|
14 Start
|
|
15 bsr ReadPad
|
|
16
|
|
17 btst.b #7, (ButtonState).w
|
|
18 bne LoadSLO
|
|
19
|
|
20 move.l #$C00000, a4
|
|
21 move.l #$c00004, a5
|
|
22
|
|
23 move.l #$0, a7
|
|
24
|
|
25 lea BgFile, a0
|
|
26 bsr FileByNameSimple
|
|
27
|
|
28 move.w #$8104, (a5) ;turn off display
|
|
29 move.w #$8200, (a5) ;Table A = 0000
|
|
30 move.w #$8400, (a5) ;Table B = 0000
|
|
31 move.w #$857C, (a5) ;Sprite Table = F800
|
|
32 move.w #$8B00, (a5) ;set full screen vertical and horizontal scrolling
|
|
33 move.w #$8D3F, (a5) ;H Scroll = FC00
|
|
34 move.w #$9001, (a5) ;64x32 scroll tables
|
|
35
|
|
36
|
|
37
|
|
38 lea $200000, a0
|
|
39 move.w (a0)+, d0 ;size in words
|
|
40 move.w (a0)+, d1 ;width in cells
|
|
41 move.w (a0)+, d2 ;height in cells
|
|
42 move.w d2, d7
|
|
43
|
|
44 subq #1, d0 ;adjust for 68K dbra routine
|
|
45 move.w #$8f02, (a5) ;autoincrement = 2
|
|
46 move.l #$50200000, (a5);beginning of background tile area
|
|
47 CopyTiles:
|
|
48 move.w (a0)+, (a4) ;copy tiles to VRAM
|
|
49 dbra d0, CopyTiles
|
|
50
|
|
51 move.l #$40000000, d4 ;beginning of Plane A Name table
|
|
52 move.l #$00800000, d5 ;delta between lines
|
|
53 move.w #$81, d6
|
|
54 subq #1, d1
|
|
55 subq #1, d2
|
|
56 move.w d1, d3
|
|
57 WriteNamesY:
|
|
58 move.l d4, (a5)
|
|
59 move.w d3, d1
|
|
60
|
|
61 WriteNamesX:
|
|
62 move.w d6, (a4)
|
|
63 addq #1, d6
|
|
64 dbra d1, WriteNamesX
|
|
65
|
|
66 add.l d5, d4
|
|
67 dbra d2, WriteNamesY
|
|
68
|
|
69 move.l #$C0000000, (a5) ;setup writes to CRAM
|
|
70 moveq #(StaticColors-1), d0 ;copy first 12 colors (static pallete)
|
|
71 CopyColors:
|
|
72 move.w (a0)+, (a4)
|
|
73 dbra d0, CopyColors
|
|
74
|
|
75 move.w d7, d0
|
|
76 lsl.w #5, d0
|
|
77 subq #1, d0
|
|
78 lea PalData(pc), a1
|
|
79 ;sub.l #2, a0
|
|
80 .copypallines:
|
|
81 move.l (a0)+, (a1)+
|
|
82 dbra d0, .copypallines
|
|
83
|
|
84
|
|
85 move.l #$60000010, (a5) ;setup writes to VSRAM
|
|
86 move.w #$0, (a4) ;vscroll = 0
|
|
87
|
|
88 move.l #$7C000003, (a5) ;setup writes to HScroll Table FC00
|
|
89 move.w #0, (a4) ;Plane A&B HScroll = 0;
|
|
90 move.w #0, (a4) ;
|
|
91
|
|
92 move.l #$78000003, (a5) ;clear sprite table
|
|
93 move.l #0, (a4)
|
|
94 move.l #0, (a4)
|
|
95
|
|
96 move.w #$8114, (a5) ;turn on DMA
|
|
97
|
|
98 bsr InitSprites
|
|
99 bsr AddSprite
|
|
100
|
|
101 move.w #$0, (a0)
|
|
102
|
|
103 bsr LoadSpritePal
|
|
104 bsr InitFrameBigSprite
|
|
105 moveq #0, d3
|
|
106 bsr ChangeFrameBigSprite
|
|
107
|
|
108
|
|
109
|
|
110
|
|
111 move.l #$C0180080, d5 ;setup DMA command word
|
|
112
|
|
113 move.w #CRAMXferSizeCmd, (a5) ;set Transfer length
|
|
114 move.w #$9400, (a5)
|
|
115
|
|
116 move.w #$8114, d6
|
|
117 move.w #$8174, d7
|
|
118
|
|
119
|
|
120
|
|
121 lea VINT(pc), a1 ;setup VINT handler
|
|
122 jsr $368
|
|
123
|
|
124 if USE_HINT
|
|
125 lea HINT(pc), a1 ;setup HINT handler and turn on HINTs
|
|
126 jsr $314
|
|
127
|
|
128 move.w #$8014, (a5)
|
|
129 move.w #$8A00, (a5) ;HINT occurs on every line
|
|
130 endif
|
|
131
|
|
132 move.w #$8174, (a5)
|
|
133
|
|
134
|
|
135
|
|
136 Loop:
|
|
137 if USE_HINT
|
|
138 bra Loop
|
|
139 endif
|
|
140 WaitTop:
|
|
141 cmpi.b #$FF, 4(a5)
|
|
142 bne.s WaitTop
|
|
143
|
|
144 LineDone:
|
|
145 move.b 4(a5), d0
|
|
146 WaitNextLine:
|
|
147 cmp.b 4(a5), d0
|
|
148 beq WaitNextLine
|
|
149
|
|
150
|
|
151
|
|
152 HINT:
|
|
153 ;move.w d6, (a5)
|
|
154 ;move.l d5, (a5) ;start DMA
|
|
155 ;move.w d7, (a5)
|
|
156 move.l d6, (a5)
|
|
157 move.l d7, (a5)
|
|
158 move.w #CRAMXferSizeCmd, (a5) ;set Transfer length
|
|
159 move.w #$9400, (a5)
|
|
160
|
|
161 if USE_HINT
|
|
162 rte
|
|
163 endif
|
|
164
|
|
165 cmp.b #223, 4(a5)
|
|
166 beq WaitTop
|
|
167
|
|
168 bra LineDone
|
|
169
|
|
170 VINT:
|
|
171 move.b #1, $A12000 ;trigger interrupt on Sub CPU
|
|
172 if USE_HINT
|
|
173 move.w #$8144, (a5)
|
|
174 endif
|
|
175 bsr SpriteCopyVRAM
|
|
176
|
|
177 bsr ReadPad
|
|
178
|
|
179 bsr Player1Vint
|
|
180
|
|
181 move.l PalData, d7 ;setup DMA source address
|
|
182 move.w #$9500, d6
|
|
183 ror.l #1, d7
|
|
184 move.b d7, d6
|
|
185 move.w d6, (a5)
|
|
186 ror.l #8, d7
|
|
187 move.b d7, d6
|
|
188 add.w #$100, d6
|
|
189 move.w d6,(a5)
|
|
190 ror.l #8, d7
|
|
191 move.b d7, d6
|
|
192 add.w #$100, d6
|
|
193 and.b #$7F, d6
|
|
194 move.w d6,(a5)
|
|
195
|
|
196 ;move.l d5, (a5) ;do DMA for first line
|
|
197
|
|
198 move.w #CRAMXferSizeCmd, (a5) ;set Transfer length
|
|
199 move.w #$9400, (a5)
|
|
200
|
|
201 move.w #$8114, d6 ;VDP commands to turn screen on and off during HBlank
|
|
202 swap d6
|
|
203 swap d5
|
|
204 move.w d5, d6
|
|
205 swap d5
|
|
206 move.w d5, d7
|
|
207 swap d7
|
|
208 move.w #$8174, d7
|
|
209 if USE_HINT
|
|
210 move.w d7, (a5)
|
|
211 endif
|
|
212 rte
|
|
213
|
|
214 LoadSpritePal:
|
|
215 move.l #$C0200000, (a5)
|
|
216 moveq #$F, d0
|
|
217 lea SpriteData, a0
|
|
218 PalLoop:
|
|
219 move.w (a0)+, (a4)
|
|
220 dbra d0, PalLoop
|
|
221 rts
|
|
222
|
|
223 PalAddress:
|
|
224 dc.l 0
|
|
225
|
|
226 Player1Vint:
|
|
227 move.b (ButtonState).w, d2
|
|
228 move.b (ButtonStateNew).w, d3
|
|
229
|
|
230 moveq #0, d0
|
|
231 move.w d0, d1
|
|
232
|
|
233 btst #5, d2
|
|
234 bne ScrollRight
|
|
235
|
|
236 btst #7, d2
|
|
237 bne ScrollLeft
|
|
238
|
|
239 btst #4, d3
|
|
240 bne IncrementFrame
|
|
241
|
|
242
|
|
243 btst #6, d3
|
|
244 bne DecrementFrame
|
|
245
|
|
246 btst #2, d2
|
|
247 beq PlayerShipNotLeft
|
|
248 subq #1, d0
|
|
249 PlayerShipNotLeft:
|
|
250
|
|
251 btst #3, d2
|
|
252 beq PlayerShipNotRight
|
|
253 addq #1, d0
|
|
254 PlayerShipNotRight:
|
|
255
|
|
256 btst #0, d2
|
|
257 beq PlayerShipNotDown
|
|
258 subq #1, d1
|
|
259 PlayerShipNotDown:
|
|
260
|
|
261 btst #1, d2
|
|
262 beq PlayerShipNotUp
|
|
263 addq #1, d1
|
|
264 PlayerShipNotUp:
|
|
265
|
|
266 bsr MoveBigSprite
|
|
267
|
|
268 rts
|
|
269 IncrementFrame:
|
|
270 move.w (PlayerShipFrame), d3
|
|
271 addq #1, d3
|
|
272 move.w d3, (PlayerShipFrame)
|
|
273 bsr ChangeFrameBigSprite
|
|
274
|
|
275 rts
|
|
276
|
|
277 DecrementFrame:
|
|
278
|
|
279 move.w (PlayerShipFrame), d3
|
|
280 subq #1, d3
|
|
281 move.w d3, (PlayerShipFrame)
|
|
282 bsr ChangeFrameBigSprite
|
|
283
|
|
284 rts
|
|
285
|
|
286 ScrollRight:
|
|
287 move.w (ScrollValue), d0
|
|
288 subq #1, d0
|
|
289 move.l #$7C000003, (a5) ;setup writes to HScroll Table FC00
|
|
290 move.w d0, (a4)
|
|
291 move.w d0, (a4)
|
|
292 move.w d0, (ScrollValue)
|
|
293
|
|
294 rts
|
|
295
|
|
296 ScrollLeft:
|
|
297 move.w (ScrollValue), d0
|
|
298 addq #1, d0
|
|
299 move.l #$7C000003, (a5) ;setup writes to HScroll Table FC00
|
|
300 move.w d0, (a4)
|
|
301 move.w d0, (a4)
|
|
302 move.w d0, (ScrollValue)
|
|
303
|
|
304 rts
|
|
305
|
|
306 include sprites.s68
|
|
307
|
|
308 PlayerShipFrame:
|
|
309 dc.w 0
|
|
310
|
|
311
|
|
312 ScrollValue:
|
|
313 dc.w 0
|
|
314
|
|
315 ReadPad:
|
|
316 move.b #$FF, $a10003 ;set TH for controller A
|
|
317 move.b $a10003, d0 ;CBRLUD
|
|
318 andi.b #$3F, d0
|
|
319 move.b #0, $a10003
|
|
320 move.b $a10003, d1 ;SA00UD
|
|
321 andi.b #$30, d1
|
|
322 lsl.b #2, d1
|
|
323 or.b d1, d0 ;SACBRLUD
|
|
324 not.b d0
|
|
325 move.b (ButtonState).w, d1
|
|
326 eor.b d0, d1
|
|
327 and.b d0, d1
|
|
328 move.b d0, (ButtonState).w
|
|
329 move.b d1, (ButtonStateNew).w
|
|
330
|
|
331 rts
|
|
332
|
|
333 FileByNameSimple:
|
|
334 move.b #0, $a1200e
|
|
335 lea $a12010, a1
|
|
336 .copyname
|
|
337 move.b (a0), (a1)+
|
|
338 tst.b (a0)+
|
|
339 bne .copyname
|
|
340
|
|
341 bset #1, $A12003; give SUB CPU control of WordRAM
|
|
342
|
|
343 .waitready
|
|
344 tst.b $a1200f
|
|
345 beq .waitready
|
|
346
|
|
347
|
|
348 move.b #3, $a1200e
|
|
349
|
|
350 .waitdone
|
|
351 cmp.b #$FF, $a1200f
|
|
352 beq .notfound
|
|
353 tst.b $a1200f
|
|
354 bne .waitdone
|
|
355
|
|
356 bclr #1, $a12003; get control of WordRAM
|
|
357 rts
|
|
358
|
|
359 .notfound
|
|
360 bra .notfound
|
|
361
|
|
362 LoadSLO:
|
|
363 lea LoaderFile(pc), a0
|
|
364 bsr FileByNameSimple
|
|
365 move.w #(.copyEnd-.copy-1), d0
|
|
366 lea .copy(pc), a0
|
|
367 lea ($FFFF8000).w, a1
|
|
368 move.l a1, a2
|
|
369 .copycopy
|
|
370 move.b (a0)+, (a1)+
|
|
371 dbra d0, .copycopy
|
|
372 move.w #$2000, d0; more than enough for slo.bin
|
|
373 lea $200000, a0
|
|
374 lea $FF0000, a1
|
|
375 jmp (a2)
|
|
376 .copy
|
|
377 move.b (a0)+, (a1)+
|
|
378 dbra d0, .copy
|
|
379 jmp $FF0000
|
|
380 .copyEnd
|
|
381
|
|
382 SpriteData:
|
|
383 incbin bultest.bin
|
|
384 BgFile:
|
|
385 dc.b "LOGO.BIN",0
|
|
386 LoaderFile:
|
|
387 dc.b "SLO.BIN",0
|
|
388
|
|
389 PalData:
|
|
390
|