-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjsumo.a
436 lines (380 loc) · 4.98 KB
/
jsumo.a
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
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
!cpu 6502
!to "jsumo.bin", plain
!src "vcs.a"
+PAL
!macro nopn .repeat { !for .i, 1, .repeat { nop } }
MUSIC_SPEED = 16
P0COL = $ba
P1COL = $6a
LINE = $80 ; 1 byte
PFSTEP = $81 ; 1 byte
PFSTORE = $82 ; 3 bytes
P0STORE = $85 ; 1 byte
P1STORE = $86 ; 1 byte
M0STORE = $87 ; 1 byte
M1STORE = $88 ; 1 byte
P0LIVES = $89 ; 1 byte
P1LIVES = $8a ; 1 byte
P0YCOUNT = $8b ; 1 byte
P1YCOUNT = $8c ; 1 byte
;//// GAME VARS ////
X0_LO = $8d
X0_HI = $8e
Y0_LO = $8f
Y0_HI = $90
X1_LO = $91
X1_HI = $92
Y1_LO = $93
Y1_HI = $94
SPEEDX0_LO = $95
SPEEDX0_HI = $96
SPEEDY0_LO = $97
SPEEDY0_HI = $98
SPEEDX1_LO = $99
SPEEDX1_HI = $9a
SPEEDY1_LO = $9b
SPEEDY1_HI = $9c
P0LASTX = $9d
P1LASTX = $9e
COLLISION_SOUND = $9f
BGCOLOR = $a0
SNDFRAME = $a1
COUNTDOWN = $a2
FINAL_COUNTDOWN = $a3
EXPLOSION = $a4
CRASH = $a5
WINNER_COLOR = $a6
RESET = $a7
JUST_COLLIDED = $a8
COLOR = $a9
MUSIC_COUNTER = $aa
MUSIC_TICK = $ab
;///////////////////
+Init
lda #$50
sta WINNER_COLOR
lda #1
sta MUSIC_TICK
!src "title.a"
jsr game_init
screenloop
+VSync
+VBlankBegin
game_start
lda #$5a
sta COLUPF
ldx #0
stx GRP0
stx GRP1
lda #$10
sta PFSTORE
lda level_pf1
sta PFSTORE+1
lda level_pf2
sta PFSTORE+2
lda #$ff
sta PF0
sta PF1
sta PF2
jmp game1
game1_done
ldx #0
+VBlankEnd
prescreen
sta WSYNC
lda P0STORE
sta GRP0
lda P1STORE
sta GRP1
sta WSYNC
inx
; Set player Y postitions
ldy P0YCOUNT
lda player,y
sta P0STORE
dec P0YCOUNT
ldy P1YCOUNT
lda player,y
sta P1STORE
dec P1YCOUNT
cpx #$3
bne prescreen
lda PFSTORE
sta WSYNC
sta PF0
jmp screen2
screen
sta WSYNC
screen2
lda P0STORE
sta GRP0
lda P1STORE
sta GRP1
lda PFSTORE+1
sta PF1
lda PFSTORE+2
sta PF2
; Reload player stores
inx
txa
lsr
lsr
tay
lda #0
sta WSYNC
sta VBLANK
; Load playfield data
lda level_pf0,y
sta PFSTORE
lda level_pf1,y
sta PFSTORE+1
lda level_pf2,y
sta PFSTORE+2
; Set player Y postitions
ldy P0YCOUNT
lda player,y
sta P0STORE
dec P0YCOUNT
ldy P1YCOUNT
lda player,y
sta P1STORE
dec P1YCOUNT
cpx #PICTURE_LINES/2-9
bne screen
postscreen
sta WSYNC
lda P0STORE
sta GRP0
lda P1STORE
sta GRP1
lda #$ff
sta PF0
sta PF1
sta PF2
sta WSYNC
inx
; Set player Y postitions
ldy P0YCOUNT
lda player,y
sta P0STORE
dec P0YCOUNT
ldy P1YCOUNT
lda player,y
sta P1STORE
dec P1YCOUNT
cpx #PICTURE_LINES/2-6
bne postscreen
sta WSYNC
lda #2
sta VBLANK
lda #0
sta GRP0
sta GRP1
sta PF0
sta PF1
sta PF2
sta WSYNC
inx
sta WSYNC
sta WSYNC
lda #0
sta COLUBK
sta VBLANK
inx
; Display lives
scoreview
sta WSYNC
lda #P0COL
sta COLUPF
ldy P0LIVES ; 2
lda livesconv,y ; 3
sta PF1 ; 3
+nopn 6
ldy P1LIVES ; 2
lda livesconv,y ; 3
sta PF1 ; 3
lda #P1COL
sta COLUPF
sta WSYNC
lda #P0COL
sta COLUPF
ldy P0LIVES ; 2
lda livesconv,y ; 3
sta PF1 ; 3
+nopn 6
ldy P1LIVES ; 2
lda livesconv,y ; 3
sta PF1 ; 3
lda #P1COL
sta COLUPF
inx
cpx #PICTURE_LINES/2
bne scoreview
+OverscanBegin
jmp game2
game2_done
+OverscanEnd
jmp screenloop
reposp
sta WSYNC
+nopn 17
sta RESP0
sta WSYNC
+nopn 27
sta RESP1
lda #$50
sta HMP1
sta WSYNC
sta HMOVE
rts
; GAME CODE ;
game1
!src "movement.a"
lda Y0_HI
sta P0YCOUNT
lda Y1_HI
sta P1YCOUNT
lda BGCOLOR
sta COLUBK
jmp game1_done
game2
lda SWCHB
and #1
bne dontreset
lda #0
sta AUDC0
sta AUDC1
sta AUDV0
sta AUDV1
lda #$50
sta WINNER_COLOR
jmp game_end
dontreset
!src "crash.a"
ldx CRASH
beq nocrash
stx CXCLR
lda EXPLOSION
beq no_explosion
tay
lda EXPLOSION
and #7
sta AUDF1
tya
lsr
lsr
sta BGCOLOR
sta AUDV1
dey
sty EXPLOSION
no_explosion
dex
bne norestart
lda RESET
beq noreset
lda #0
sta RESET
jmp game_end
noreset
jsr game_init
norestart
stx CRASH
jmp game2_done
nocrash
lda COUNTDOWN
beq no_countdown
tax
ldy #12
sty AUDC1
ldy #31
sty AUDF1
and #$1f
lsr
lsr
sta AUDV1
dex
dex
stx COUNTDOWN
bne nofinal
lda #20
sta FINAL_COUNTDOWN
lda #0-2
ldy #$48
sta SPEEDY0_HI
sta SPEEDY1_HI
sty SPEEDY0_LO
sty SPEEDY1_LO
nofinal
jmp game2_done
no_countdown
; Clear audio
lda #0
sta AUDV0
sta AUDC0
; Store joystick in x
lda SWCHA
eor #$ff
!src "enginesounds.a"
!src "input.a"
!src "sounds.a"
ldy JUST_COLLIDED
beq nojc
dey
sty JUST_COLLIDED
nojc
inc SNDFRAME
jmp game2_done
game_init
lda #0
sta P0LASTX
sta P1LASTX
sta SPEEDX0_HI
sta SPEEDX0_LO
sta SPEEDX1_HI
sta SPEEDX1_LO
sta SPEEDY0_HI
sta SPEEDY0_LO
sta SPEEDY1_HI
sta SPEEDY1_LO
sta X0_LO
sta X0_HI
sta Y0_LO
sta Y0_HI
sta Y0_LO
sta Y1_LO
sta COLLISION_SOUND
sta CRASH
sta EXPLOSION
sta BGCOLOR
sta MUSIC_COUNTER
sta AUDC0
sta AUDF0
sta AUDV0
sta SWACNT
sta SWBCNT
lda #1
sta MUSIC_TICK
lda #96
sta Y0_HI
sta Y1_HI
lda #5
sta CTRLPF
lda #P0COL
sta COLUP0
lda #P1COL
sta COLUP1
jsr reposp
lda #$60
sta COUNTDOWN
rts
livesconv
!byte 0
!byte %00000010
!byte %00001010
!byte %00101010
!byte %10101010
!src "level.a"
!src "player.a"
!src "titlepf.a"
lander_pf2 !byte 0,0,0,0,192,224,240,48,240,240,32,112
+End 2