-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathPAC2.ASM
754 lines (754 loc) · 8.89 KB
/
PAC2.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
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
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
;
; PAC-MAN GAME SUBROUTINES
;
GOBBLE LDX GOBBLD
BEQ GOBBLX
LDA GOBBLF
LDY #$A5
CPX #7
BCS GOBBD2
CMP #$B4
BEQ SAMGOB
CLC
ADC #5
BNE STRGOB
SAMGOB INC GOBBLD
LDY #$A3
BNE STRGOB
GOBBD2 CPX #9
BNE GOBBD3
INC GOBBLD
BNE DECGOB
GOBBD3 LDY #$A3
DECGOB SEC
CMP #$78
BNE GOBDEC
LDA #0
STA GOBBLD
TAY
BEQ STRGOB
GOBDEC SBC #5
STRGOB STA GOBBLF
STA $D200
STY $D201
GOBBLX RTS
;
SKIRTS LDA RTCLOK+2
AND #$0F
BNE SKIRTX
LDA MSKIRT
BEQ ISKIRT
LDA #0
STA MSKIRT
BEQ SKIRTX
ISKIRT INC MSKIRT
SKIRTX RTS
;
; RERACK WILL RESET MAZE AFTER
; A PLAYER HAS CLEARED ALL DOTS
;
RERACK LDA RRSEQU
BNE TSTRRS
JSR CLRAUD
JSR DRAWIT
LDA #$40
RRKXX1 STA RRTIMR
RRKXX2 INC RRSEQU
RTS
TSTRRS CMP #1
BNE TSTRR2
LDA RRTIMR
BNE DRRWTM; DEC RERACK WAIT TIMER
LDA #0
LDX #3
TSRR1L STA HPOSP0,X
DEX
BPL TSRR1L
LDA #$0C
STA COLOR0
LDA #$07
STA RRFLCT; RERACK FLASH COUNT
LDA #$10
BNE RRKXX1
DRRWTM DEC RRTIMR
RTS
TSTRR2 CMP #2
BNE TSTRR3
LDA RRTIMR
BNE DRRWTM; DEC RERACK COLOR TIMER
DEC RRFLCT
BEQ RRKXX2
ALTCLR LDA RRFLCT
CLC
LSR A
BCC ALTBLU
LDA #$0C
BNE SETRRC
ALTBLU LDA #$86
SETRRC STA COLOR0
LDA #$10
STA RRTIMR
RTS
TSTRR3 CMP #3
BNE TSTRR4
LDA #0
STA INTCNT
LDA #CHRORG/256
STA CHBASE
TSTR3X RTS
TSTRR4 CMP #4
BNE TSTRR5
JSR NEWBRD
LDX PLYNUM
INC XPACP1,X
INC MAZCT1,X
JSR READY1
INC RRSEQU
LDA NUMPLY
BEQ TSTR3X
LDA #$30
STA RRTIMR
RTS
TSTRR5 CMP #5
BNE TSTRR6
LDA RRTIMR
BNE DTMRR5
INC RRSEQU
RTS
DTMRR5 DEC RRTIMR
RTS
TSTRR6 JSR READY2
LDA #0
STA RRFLAG
STA RRSEQU
LDA #2
STA RESETF
LDA #$40
STA RESETT
RTS
;
; GET READY TO PLAY
;
READY1 LDA #$A2
LDX #0
REDYLP STA PACMAZ+$1EF,X
CLC
ADC #1
INX
CPX #$0A
BNE REDYLP
JSR PLAYRS
LDX PLYNUM
LDA MAZCT1,X
CMP #6
BCC SETRED
CMP #$0A
BCS SETRED
LDY #$DA; SET UP FOR GREEN FRUITS
BNE SETFRC
SETRED LDY #$44
SETFRC STY FRUCLR
LDY #0
CMP #6
BCS HFRUTS
STA TEMLOC
LDA #$92
STA PIXPUT
LDA #HIGH PACMAZ+3
STA PIXPUT+1
LDX #0
FRUTLP LDA FRUCHR,X
STA (PIXPUT),Y
INC PIXPUT
CLC
ADC #1
STA (PIXPUT),Y
CPX TEMLOC
BEQ FSPLIT
FRUTS1 INX
DEC PIXPUT
DEC PIXPUT
DEC PIXPUT
BNE FRUTLP
HFRUTS CMP #18
BCC HFRUT1
LDA #18
HFRUT1 SEC
SBC #6
STA TEMLOC
SEC
LDA #LOW HIFRUT
SBC TEMLOC
STA PIXGET
LDA #HIGH HIFRUT
SBC #0
STA PIXGET+1
LDX #0
HFRUTL LDA (PIXGET),Y
STA PACMAZ+$386,X
CLC
ADC #1
STA PACMAZ+$387,X
INX
INX
INY
CPY #$7
BNE HFRUTL
FSPLIT RTS
;
READY2 LDX #$0B
LDA #0
RED2LP STA PACMAZ+$14E,X
DEX
BPL RED2LP
JSR DRAWIT
LDX PLYNUM
DEC XPACP1,X
;
UDXPACS LDX PLYNUM
LDA XPACP1,X
LDX #0
LDY #$9B
CMP #3
BNE TWOPAC
STY PACMAZ+$378
UDXPC2 STY PACMAZ+$376
UDXPC1 STY PACMAZ+$374
RTS
TWOPAC CMP #2
BNE ONEPAC
JSR UDNPC2
JMP UDXPC2
ONEPAC CMP #1
BNE NOPACS
JSR UDNPC1
JMP UDXPC1
NOPACS STX PACMAZ+$374
UDNPC1 STX PACMAZ+$376
UDNPC2 STX PACMAZ+$378
RTS
;
DRAWIT LDA #1
STA MSTILL
LDX #3
GREADL LDA M1DIRT,X
JSR MONHND
DEX
BPL GREADL
LDA #0
STA MSTILL
JMP PACSTP
;
READY3 LDX #$0D
LDA #0
REDY3L STA PACMAZ+$14D,X
STA PACMAZ+$1ED,X
DEX
BPL REDY3L
RTS
;
FLSHXU LDA RTCLOK+2
AND #$0F
BNE FLSHXX
LDA FLSHUP
BNE FLSRST
INC FLSHUP
BNE FLSHER
FLSRST LDA #0
STA FLSHUP
FLSHER LDA PLYNUM
BEQ FLSPL1
LDA FLSHUP
BNE FLS2ON
TAX
TAY
BEQ F2STOR
FLS2ON LDA #$12
LDX #$35
LDY #$30
F2STOR STA TEXT+$21
STX TEXT+$22
STY TEXT+$23
RTS
FLSPL1 LDA FLSHUP
BNE FLS1ON
TAX
TAY
BEQ F1STOR
FLS1ON LDA #$11
LDX #$35
LDY #$30
F1STOR STA TEXT+4
STX TEXT+5
STY TEXT+6
FLSHXX RTS
;
; SET UP MONSTER AND PACMAN
; START POSITIONS
;
SETUP JSR INITPM;CLEAR P/M GRAPHICS
SETUP1 LDX #$7F
CLRPGZ STA $80,X
DEX
BPL CLRPGZ
JSR SETCLR;INIT COLOR REGS
;
; SPEED INITIALIZATION
;
SPDINI LDX PLYNUM
LDA MAZCT1,X
CMP #6
BCC LOWINI
LDA #6
LOWINI TAY
LDA PACSPD,Y
TAX
LDA SPEED1,X
STA PMSPCT
LDA MONSPD,Y
TAY
LDX #3
SPINIL LDA SPEED1,Y
STA M1SPCT,X
DEX
BPL SPINIL
;
LDX #$13
INDATL LDA INIDAT,X
STA PACSCN,X
DEX
BPL INDATL
LDY #0
JSR MSTIMR
STA HITCLR
RTS
NEWGAM LDA #3
STA XPACP1;DO AT GAME START
STA XPACP2
LDA DIFOPT
STA MAZCT1
STA MAZCT2
LDX #1
JSR NEWBD1
NEWBRD JSR P1INIT; DO AT SCREEN START
JSR UDXPAC
LDX PLYNUM
LDA MAZCT1,X
TAY
BNE NEWRK2
LDA RTCLOK+2
BPL NEWRK2
NEWRK1 JSR MSTIMR
JMP NEWBD0
NEWRK2 INY
BNE NEWRK1
NEWBD0 LDX PLYNUM
NEWBD1 LDA #$0F
STA BIGDT1,X
LDA #0
STA FRUTP1,X
STA DTCTL1,X
STA DTCTM1,X
RTS
;
MSTIMR CPY #3
BCC LDMSTM
LDY #3
LDMSTM LDX #2
LDMSTL LDA STARTV,Y
STA M2TIMR,X
INY
DEX
BPL LDMSTL
RTS
;
; VFIZZL IS THE FOLD-UP
; SEQUENCE FOR THE PACMAN
;
; VFIZST IS THE STATUS
;
; 0 = NO ACTION
; 1 = WIGGLE SKIRTS
; 2 = CLEAR MONSTERS & INIT SOUNDS
; 3 = SOUND FREQ INCREASING
; 4 = SOUND FREQ DECREASING
; 5 = FADE OUT SOUND
; 6 = SHOW BLANK SCREEN
;
VFIZZL LDA VFIZST
CMP #1
BNE INICLR
LDA VFIZSQ
BEQ NXTFSQ
JSR SKIRTS
LDX #3
UDMFLP LDA M1DIRT,X
JSR MONHND
DEX
BPL UDMFLP
DEC VFIZSQ
RTS
NXTFSQ INC VFIZST
LDA VFIZST
INICLR CMP #2
BNE FIZCHK
LDX #3
LDA #0
MONCLR STA HPOSP0,X
DEX
BPL MONCLR
LDA #$35
STA VFIZFQ
STA VFIZBS
JSR CLRAUD
STA VFIZCT
STA FIZPTR
INC FIZZLE
LDA #$07
STA FIZTIM
LDA #3
STA VFIZST
BNE VFIZUP
FIZCHK CMP #3
BEQ VFIZUP
CMP #4
BEQ VFIZDN
CMP #5
BEQ VFIZFZ
CMP #6
BEQ FZWAIT
VFIZUP LDA #$A8
STA AUDC1
LDA VFIZFQ
STA AUDF1
CLC
ADC #8
STA VFIZFQ
INC VFIZCT
LDA VFIZCT
CMP #4
BNE VBFIZX
BEQ SVFIZS
VFIZDN LDA #$A8
STA AUDC1
LDA VFIZFQ
STA AUDF1
SEC
SBC #8
STA VFIZFQ
DEC VFIZCT
BNE VBFIZX
LDA VFIZBS
CMP #$6D
BEQ VBFIZI
VFIZSW CLC
ADC #4
STA VFIZBS
STA VFIZFQ
LDA #3
SVFIZS STA VFIZST
RTS
VFIZFZ LDA #$A8
STA AUDC1
LDA VFIZBS
STA AUDF1
SEC
SBC #8
STA VFIZBS
CMP #$25
BNE VBFIZX
JSR CLRAUD
LDA #$80
STA VFIZCT
VBFIZI INC VFIZST
VBFIZX RTS
;
FZWAIT LDA VFIZCT
BNE DECFCW
INC RESETF
RTS
DECFCW DEC VFIZCT
RTS
;
; FIZZIE WILL DRAW THE PACMAN
; FOLDING UP IN SEQUENCE
;
FIZZIE LDA FIZZLE
BEQ FIZZIX
LDA PMVPOS
STA PIXPUT
LDA #HIGH PMADDR+3
STA PIXPUT+1
LDA FIZTIM
BEQ RSTFIZ
DEC FIZTIM
BPL STRFIZ
RSTFIZ LDA FIZPTR
CMP #$0F
BEQ CLRFIZ
INC FIZPTR
LDA #$07
STA FIZTIM
STRFIZ LDA FIZPTR
BEQ FIZSTR
CMP #$0F
BEQ EXPPAC
TAX
DEX
LDA FIZIDX,X
TAY
DEY
LDA FIZDAT,X
STA (PIXPUT),Y
RTS
FIZSTR LDY #$0C
LDX #9
FIZSTL LDA PACDIE,X
STA (PIXPUT),Y
DEY
DEX
BPL FIZSTL
RTS
EXPPAC LDY #$0F
LDX #$0F
EXPPCL LDA PACEXP,X
STA (PIXPUT),Y
DEY
DEX
BPL EXPPCL
RTS
CLRFIZ LDY #$0F
LDA #0
CLRFZL STA (PIXPUT),Y
DEY
BPL CLRFZL
STA FIZZLE
FIZZIX RTS
;
FLITEC LDA FLASHC
BEQ NOFLIT
LDA TWEETR
BNE CKFLTM
JSR VRVERB
CKFLTM LDA FLITMR
BEQ FLSHSQ
DEC FLITMR
JMP SETFLC
NOFLIT LDA TWEETR
BNE FIZZIX
JMP VCHASE
FLSHSQ LDX PLYNUM
LDA MAZCT1,X
TAX
LDA FLSTIM,X
CMP FLASHC
BNE NXTFLS
LDX #3
RSCLLP LDA M1STAT,X
BPL NXTRSC
LDA COLORS,X
STA PCOLR0,X
NXTRSC DEX
BPL RSCLLP
LDX #3
RSTCHL LDA M1STAT,X
BPL NXRSTC
CMP #$80
BEQ RSTBOX
AND #$BB
BEQ NXRSTC
BNE RSTCHS
RSTBOX LDA #0
BEQ RSSTAT
RSTCHS LDA #$20
RSSTAT STA M1STAT,X
NXRSTC DEX
BPL RSTCHL
LDA #0
STA FLASHC
STA FLASHT
STA VFLITS
LDA #$A0
STA CHASET
RTS
NXTFLS LDA FLASHT
BNE DECFTM
INC FLASHC
LDA #$18
STA FLASHT
DECFTM DEC FLASHT
SETFLC LDA FLASHC
LSR A; ALTERNATE BLUE & WHITE
BCC FWHITE
LDY #$84; DARK BLUE
BNE FSTORE
FWHITE LDY #$0C; WHITE
FSTORE LDX #3
FSTORL LDA M1STAT,X
BPL NXFSTR
TYA
STA PCOLR0,X
NXFSTR DEX
BPL FSTORL
FLITCX RTS
;
;
VRVERB LDA VFLITS
BNE VFLRDY
LDA #5
STA VFLITV
LDA #2
STA VFLITD
INC VFLITS
LDA #$90
STA VFLITF
VFLRDY LDA VFLITD
CMP #1
BNE VFLIDN
LDA VFLITF
CMP #$90
BNE VFUPOK
LDA VFLITV
CMP #3
BNE VFVDEC
LDA #5
STA VFLITV
VFVDEC DEC VFLITV
LDA #2
STA VFLITD
BNE VFDNOK
VFUPOK CLC
LDA VFLITF
ADC #$10
BNE VRBSTR
VFLIDN LDA VFLITF
CMP #$40
BNE VFDNOK
LDA #1
STA VFLITD
BNE VFUPOK
VFDNOK SEC
LDA VFLITF
SBC #$10
VRBSTR STA VFLITF
STA AUDF2
LDA VFLITV
ORA #$A0
VRVBX1 STA AUDC2
VRVRBX RTS
;
VTWEET LDA TWEETF
BNE CTWEET
LDA #$0C
STA TWEETF
BNE ITWEET
CTWEET CMP #$17
BNE ITWEET
LDA #$0C
STA TWEETF
ITWEET INC TWEETF
STWEET LDA TWEETF
STA AUDF2
LDA #$A4
BNE VRVBX1
;
VGULPR DEC VGLPC1
BEQ DISTRT
SEC
LDA VGLPC2
SBC #4
STA VGLPC2
CMP #$10
BEQ GLPOFF
STA AUDF1
STA AUDF4
LDA #$84
STA AUDCTL
LDA #$A4
BNE GBRNCH
DISTRT LDA #2
STA VGLPC1
SEC
LDA VGLPC2
SBC #3
STA VGLPC2
STA AUDF1
STA AUDF3
STA AUDF4
LDA #$A8
STA AUDC3
GBRNCH STA AUDC4
BNE VEATRS
GLPOFF JSR CLRAUD
STA AUDCTL
STA VFREEZ
STA PACCNT
STY GULPED
LDA #$2A
STA COLOR3
LDA #$11
STA GPRIOR
LDX #3
RSTPCL LDA PCOLR0,X
CMP #$DC
BEQ RSTPLC
DEX
BPL RSTPCL
RTS
RSTPLC LDA #$0C
STA PCOLR0,X
STA HITCLR
LDA #0
STA PACCNT
JSR PMSTIK
INC PACADV
JMP MUNCHY
;
VEATER LDA EATERF
BEQ VEATRX
LDX EATERC
CPX #6
BNE CEATER
LDA #0
STA EATERF
STA EATERC
BEQ VEATRS
CEATER LDA EATERT
BNE EATER2
LDA E1DATA,X
JMP STREAT
EATER2 LDA E2DATA,X
STREAT INC EATERC
STA AUDF1
LDA #$A4
VEATRS STA AUDC1
VEATRX RTS
;
CLRAUD LDY #7
LDA #0
CLRAUL STA AUDF1,Y
DEY
BPL CLRAUL
CLRAUX RTS
;
PLAYRS LDA NUMPLY
BEQ CLRAUX
LDA #$65
LDX #0
PLYRLP STA PACMAZ+$14E,X
CLC
ADC #1
INX
CPX #$0C
BNE PLYRLP
LDA PLYNUM
BEQ CLRAUX
LDX #$71
STX PACMAZ+$158
INX
STX PACMAZ+$159
RTS
;
APGST LDA #$42
STA M1STAT,X
STX GULPED