/
PACMAN.lst
6180 lines (6180 loc) · 218 KB
/
PACMAN.lst
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
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
mads 2.1.1
Source: PACMAN.ASM
1 ;************************************
2 ;* *
3 ;* PAC-MAN *
4 ;* *
5 ;* Developed for Atari Inc. by *
6 ;* Roklan Corp. This Information *
7 ;* is confidential and is not for *
8 ;* sale or distribution. *
9 ;* *
10 ;* Software written by Joe Hellesen *
11 ;* *
12 ;* 10/03/82 *
13 ;* *
14 ;* DISK VERSION *
15 ;* *
16 ;* High Score additions by *
17 ;* Thomas Cherryhomes *
18 ;* thom dot cherryhomes at gmail *
19 ;* dot com *
20 ;* *
21 ;* REVISION 3.0 *
22 ;* *
23 ;************************************
24 ;
25
26 ; Adapted version for MADS, 2018-07-28 JAC!
27
28 = 0001 .def ORIGINAL=1 ;Original source version
29 = 0002 .def ROKLAN=2 ;Roklan binary disk version
30 = 0003 .def ATARI82=3 ;Atari disk version, intermissions 3 & 4 are broken
31 = 0004 .def DATASOFT=4 ;Datasoft binary disk version, decoded from EOR encoder
32 .if .not .def VERSION ;Default, if it is not specified on assembler command line
33 .def VERSION=DATASOFT
34 .endif
35
36 .if .not .def INTERMISSION_DEMO ;Default, if it is not specified on assembler command line
37 .def INTERMISSION_DEMO=0 ;Complete level by eating one dot
38 .endif
39
40 ICL "SYSTEXT.ASM"
Source: SYSTEXT.ASM
1 ; @com.wudsn.ide.asm.mainsourcefile=PACMAN.ASM
2
3 ; SPACE 2
4
5 ; Operating System Equates ------------------------
6
7 ; SPACE 1
8
9 = 000A DOSVEC EQU $000A ;this program's start vector
10
11 = 000C DOSINI EQU $000C ;this program's init vector
12
13 = 0010 POKMSK EQU $0010 ;mask for POKEY IRQ enable
14
15 = 0011 BRKKEY EQU $0011 ;BREAK flag
16
17 = 0012 RTCLOK EQU $0012 ;60 Hz clock
18
19 = 004D ATRACT EQU $4D
20 = 004E DRKMSK EQU $4E
21 = 004F COLRSH EQU $4F
22
23 = 0200 VDSLST EQU $0200
24
25 = 0216 VIMIRQ EQU $0216 ;immediate IRQ vector
26
27 = 022B SRTIMR EQU $022B ;software-driven keydown timer
28
29 = 022F SDMCTL EQU $022F ;DMA control shadow
30
31 = 0230 SDLSTL EQU $0230 ;display list pointer (low byte)
32
33 = 0231 SDLSTH EQU $0231 ;display List pointer (high byte)
34
35 = 0232 SSKCTL EQU $0232 ;serial port control
36
37 = 0234 LPENH EQU $0234 ;light pen horizontal position
38
39 = 0235 LPENV EQU $0235 ;light pen vertical postion
40
41 = 026F GPRIOR EQU $026F ;player priority select
42
43 = 0270 PADDL0 EQU $0270 ;pot 0
44
45 = 0278 STICK0 EQU $0278 ;joystick 0 shadow
46
47 = 0284 STRIG0 EQU $0284 ;red button 0 shadow
48 = 0285 STRIG1 EQU $0285 ;red button 1 shadow
49
50 = 02BE SHFLK EQU $02BE ;shift-lock flag
51
52 = 02C0 PCOLR0 EQU $02C0 ;player color shadow
53 = 02C1 PCOLR1 EQU $02C1
54 = 02C2 PCOLR2 EQU $02C2
55 = 02C3 PCOLR3 EQU $02C3
56
57 = 02C4 COLOR0 EQU $02C4 ;playfield color shadow
58 = 02C5 COLOR1 EQU $02C5
59 = 02C6 COLOR2 EQU $02C6
60 = 02C7 COLOR3 EQU $02C7
61
62 = 02E7 MEMLO EQU $02E7 ;start of user memory
63 = 02F1 KEYDEL EQU $02F1 ;KEY DELAY
64
65 = 02F3 CHART EQU $2F3 ;character control
66
67 = 02F4 CHBAS EQU $2F4 ;character base address
68
69 = 02FC CH EQU $02FC ;character buffer
70
71 = 0300 DDEVIC EQU $0300 ;peripheral bus ID number
72
73 = 0301 DUNIT EQU $0301 ;unit number
74
75 = 0302 DCOMND EQU $0302 ;bus command ordinal
76
77 = 0303 DSTATS EQU $0303 ;command type/status return
78
79 = 0304 DBUFLO EQU $0304 ;data buffer pointer
80
81 = 0305 DBUFHI EQU $0305
82
83 = 0306 DTIMLO EQU $0306 ;device timeout in seconds
84
85 = 0308 DBYTLO EQU $0308 ;number of bytes transferred
86
87 = 0309 DBYTHI EQU $0309
88
89 = 030A DAUX1 EQU $030A ;command auxiliary bytes
90
91 = 030B DAUX2 EQU $030B
92
93 = 0342 ICCOM EQU $0342 ;CIO command block
94
95 = 0344 ICBAL EQU $0344
96
97 = 0345 ICBAH EQU $0345
98
99 = 0348 ICBLL EQU $0348
100
101 = 0349 ICBLH EQU $0349
102
103 = 034A ICAX1 EQU $034A
104
105 = 034B ICAX2 EQU $034B
106
107 = E000 CHRORG EQU $E000 ;OS charset
108
109 = E456 CIOV EQU $E456 ;CIO request vector
110
111 = E459 SIOV EQU $E459 ;SIO request vector
112
113 = E45C SETVBV EQU $E45C ;system interrupt init vector
114
115 = E462 XITVBV EQU $E462 ;system VBLANK return handler
116
117 = E474 OSRETN EQU $E474 ;system WARM START entry
118
119 = FCD8 CLICK EQU $FCD8 ;keyclick routine
120
121 ; EJECT
122
123 ; Hardware Registers --------------------------------
124
125 ; SPACE 1
126
127 = D000 HPOSP0 EQU $D000 ;player position registers
128 = D001 HPOSP1 EQU $D001
129 = D002 HPOSP2 EQU $D002
130 = D003 HPOSP3 EQU $D003
131
132 = D000 M0PF EQU $D000 ;missile 0 to playfield collision
133 = D001 M1PF EQU $D001
134 = D002 M2PF EQU $D002
135 = D003 M3PF EQU $D003
136
137 = D004 HPOSM0 EQU $D004 ;horizontal position of missile 0
138 = D005 HPOSM1 EQU $D005
139 = D006 HPOSM2 EQU $D006
140 = D007 HPOSM3 EQU $D007
141
142 = D004 P0PF EQU $D004 ;player 0 to playfield collision
143
144 = D008 M0PL EQU $D008 ;missile 0 to player collision
145 = D009 M1PL EQU $D009
146 = D00A M2PL EQU $D00A
147 = D00B M3PL EQU $D00B
148
149 = D008 SIZEP0 EQU $D008 ;player size registers
150
151 = D00C P0PL EQU $D00C ;player 0 to player collision
152
153 = D00C SIZEM EQU $D00C ;sizes for all missiles
154
155 = D00D GRAFP0 EQU $D00D ;graphics for player0
156
157 = D010 TRIG0 EQU $D010 ;joystick controller trigger 0
158
159 = D011 GRAFM EQU $D011 ;grahics for all missiles
160
161 = D012 COLPM0 EQU $D012 ;player color registers
162 = D013 COLPM1 EQU $D013
163 = D014 COLPM2 EQU $D014
164 = D015 COLPM3 EQU $D015
165
166 = D016 COLPF0 EQU $D016 ;playfield color registers
167 = D017 COLPF1 EQU $D017
168 = D018 COLPF2 EQU $D018
169 = D019 COLPF3 EQU $D019
170
171 = D01A COLBK EQU $D01A ;color-luminance of background
172
173 = D01B PRIOR EQU $D01B ;priority select
174
175 = D01C VDELAY EQU $D01C ;vertical delay
176
177 = D01D GRACTL EQU $D01D ;graphics control register
178
179 = D01E HITCLR EQU $D01E ;collision clear
180
181 = D01F CONSOL EQU $D01F ;console key register
182
183 = D200 POT0 EQU $D200 ;pot 0
184
185 = D200 AUDF1 EQU $D200 ;audio channel 1 frequency
186
187 = D201 AUDC1 EQU $D201 ;audio channel 1 control
188
189 = D202 AUDF2 EQU $D202 ;audio channel 1 frequency
190
191 = D203 AUDC2 EQU $D203 ;audio channel 1 control
192
193 = D204 AUDF3 EQU $D204 ;audio channel 1 frequency
194
195 = D205 AUDC3 EQU $D205 ;audio channel 1 control
196
197 = D206 AUDF4 EQU $D206 ;audio channel 1 frequency
198
199 = D207 AUDC4 EQU $D207 ;audio channel 1 control
200
201 = D208 AUDCTL EQU $D208 ;audio control
202
203 = D208 ALLPOT EQU $D208 ;read 8 line pot port status
204
205 = D209 KBCODE EQU $D209 ;keyboard code
206
207 = D209 STIMER EQU $D209 ;start timer
208
209 = D20A RANDOM EQU $D20A ;random number generator
210
211 = D20A SERIN EQU $D20A ;serial port input
212
213 = D20A SKREST EQU $D20A ;reset serial port status
214
215 = D20B POTGO EQU $D20B ;start POT scan sequence
216
217 = D20C SEROUT EQU $D20C ;serial port output
218
219 = D20E IRQEN EQU $D20E ;IRQ enable mask
220
221 = D20E IRQST EQU $D20E ;IRQ status
222
223 = D20F SKCTL EQU $D20F ;serial port control
224
225 = D20F SKSTAT EQU $D20F ;keyboard status register
226
227 = D300 PORTA EQU $D300 ;port A
228
229 = D400 DMACTL EQU $D400 ;DMA control register
230
231 = D401 CHACTL EQU $D401 ;character control
232
233 = D402 DLISTL EQU $D402 ;display list pointer (low byte)
234
235 = D403 DLISTH EQU $D403 ;display list pointer (high byte)
236
237 = D404 HSCROL EQU $D404 ;horizontal scroll register
238
239 = D405 VSCROL EQU $D405 ;vertical scroll register
240
241 = D407 PMBASE EQU $D407 ;player base address
242
243 = D409 CHBASE EQU $D409 ;character base address
244
245 = D40A WSYNC EQU $D40A ;wait for horizontal sync
246
247 = D40B VCOUNT EQU $D40B ;scan line counter
248
249 = D40C PENH EQU $D40C ;light pen horizontal position
250
251 = D40D PENV EQU $D40D ;light pen vertical position
252
253 = D40E NMIEN EQU $D40E ;interrupt enable register
254
255 = D40F NMIRES EQU $D40F ;NMI reset
256
257 = D40F NMIST EQU $D40F ;NMI status
41 ;
42 ; LIST I
43 ;
44 ;******* ZERO PAGE VARIABLES ******
45 ;
46 ORG $0018
47 ;
48 = 0018 DLICNT .DS 1 ;DISPLAY LIST INT. COUNT
49 = 0019 OPTION .DS 1 ;OPTION MODE FLAG
50 = 001A NUMPLY .DS 1 ;NUMBER OF PLAYERS
51 = 001B DIFOPT .DS 1 ;DIFFICULTY OPTION
52 = 001C RSTRTF .DS 1 ;RESTART FLAG
53 = 001D ATCLOK .DS 1 ;ATTRACT COUNTDOWN CLOCK
54 = 001E ATTIMR .DS 1 ;ATTRACT MODE TIMER
55 = 001F ATSEQU .DS 1 ;ATTRACT MODE SEQUENCE #
56 ;
57 = 0020 GMOVRF .DS 1 ;GAME OVER FLAG
58 = 0021 READYF .DS 1 ;READY FLAG
59 = 0022 INTROF .DS 1 ;INTRO FLAG
60 = 0023 SWAPPF .DS 1 ;SWAP PLAYER FLAG
61 = 0024 RESETF .DS 1 ;RESET FLAG
62 = 0025 RESETT .DS 1 ;RESET TIMER
63 = 0026 RRFLAG .DS 1 ;RERACK FLAG
64 = 0027 RRSEQU .DS 1 ;RERACK SEQUENCE #
65 = 0028 RRTIMR .DS 1 ;RERACK TIMER
66 = 0029 RRFLCT .DS 1 ;RERACK FLASH COUNT
67 = 002A TEMLOC .DS 1 ;TEMPORARY STORAGE
68 = 002B PLYNUM .DS 1 ;PLAYER # 0=1 1=2
69 = 002C XPACP1 .DS 1 ;EXTRA PACMAN PLAYER 1
70 = 002D XPACP2 .DS 1 ;EXTRA PACMAN PLAYER 2
71 = 002E BPACP1 .DS 1 ;BONUS PACMAN PLAYER 1
72 = 002F BPACP2 .DS 1 ;BONUS PACMAN PLAYER 2
73 = 0030 MAZCT1 .DS 1 ;MAZE COUNT PLAYER 1
74 = 0031 MAZCT2 .DS 1 ;MAZE COUNT PLAYER 2
75 = 0032 BIGDT1 .DS 1 ;BIG DOT STATUS #1
76 = 0033 BIGDT2 .DS 1 ;BIG DOT STATUS #2
77 = 0034 DTCTL1 .DS 1 ;DOTS EATEN CTR LSB #1
78 = 0035 DTCTL2 .DS 1 ;DOTS EATEN CTR LSB #2
79 = 0036 DTCTM1 .DS 1 ;DOTS EATEN CTR MSB #1
80 = 0037 DTCTM2 .DS 1 ;DOTS EATEN CTR MSB #2
81 = 0038 SCNSC1 .DS 2 ;SCREEN SCORE 1 ADDRESS
82 = 003A SCNSC2 .DS 2 ;SCREEN SCORE 2 ADDRESS
83 = 003C PIXGET .DS 2 ;P/M PIX GET ADDRESS
84 = 003E PIXPUT .DS 2 ;P/M PIX PUT ADDRESS
85 = 0040 PACCLR .DS 1 ;ATTRACT PACMAN COLOR
86 ;
87 ORG $0043
88 ;
89 = 0043 FRUTP1 .DS 1 ;FRUIT COUNTER #1
90 = 0044 FRUTP2 .DS 1 ;FRUIT COUNTER #2
91 = 0045 BCOUNT .DS 1 ;BOUNCE TIMER COUNT
92 = 0046 SAVCNS .DS 1 ;SAVE CONSOL DATA
93 = 0047 TUNLOC .DS 2 ;USED FOR TUNNEL LOGIC
94 ;
95 ORG $005A
96 = 005A M1DELY .DS 1 ;MONSTER 1 DELAY
97 = 005B M2DELY .DS 1 ;MONSTER 2 DELAY
98 = 005C M3DELY .DS 1 ;MONSTER 3 DELAY
99 = 005D M4DELY .DS 1 ;MONSTER 4 DELAY
100 = 005E ACOLR1 .DS 1 ;ATTRACT COLOR 1 - $3A
101 = 005F ACOLR2 .DS 1 ;ATTRACT COLOR 2 - $44
102 = 0060 ACOLR3 .DS 1 ;ATTRACT COLOR 3 - $2A
103 = 0061 ACOLR4 .DS 1 ;ATTRACT COLOR 4 - $DA
104 = 0062 INTCNT .DS 1 ;INTERMISSION COUNTER
105 = 0063 INTCLK .DS 1 ;INTERMISSION CLOCK
106 ORG $0080
107 ;
108 = 0080 PACSCN .DS 2 ;PACMAN SCREEN MEM ADDR
109 = 0082 PACBYT .DS 1 ;PACMAN BYTE COUNTER
110 = 0083 PVSAVE .DS 1 ;PACMAN VPOS SAVE
111 = 0084 PHSAVE .DS 1 ;PACMAN HPOS SAVE
112 = 0085 M1VPOS .DS 1 ;MONSTER 1 VERTICAL POSIT
113 = 0086 M2VPOS .DS 1 ;MONSTER 2 VERTICAL POSIT
114 = 0087 M3VPOS .DS 1 ;MONSTER 3 VERTICAL POSIT
115 = 0088 M4VPOS .DS 1 ;MONSTER 4 VERTICAL POSIT
116 = 0089 PMVPOS .DS 1 ;PACMAN VERTICAL POSITION
117 = 008A M1HPOS .DS 1 ;MONSTER 1 HORIZ POSITION
118 = 008B M2HPOS .DS 1 ;MONSTER 2 HORIZ POSITION
119 = 008C M3HPOS .DS 1 ;MONSTER 3 HORIZ POSITION
120 = 008D M4HPOS .DS 1 ;MONSTER 4 HORIZ POSITION
121 = 008E PMHPOS .DS 1 ;PACMAN HORIZONTAL POSIT
122 = 008F M1DIRT .DS 1 ;MONSTER 1 DIRECTION
123 = 0090 M2DIRT .DS 1 ;MONSTER 2 DIRECTION
124 = 0091 M3DIRT .DS 1 ;MONSTER 3 DIRECTION
125 = 0092 M4DIRT .DS 1 ;MONSTER 4 DIRECTION
126 = 0093 PMODIR .DS 1 ;PACMAN OLD DIRECTION
127 = 0094 SCOREX .DS 6 ;PLAYER SCORE FOR TEXT
128 = 009A CARRYB .DS 1 ;CARRY BIT FOR ABOVE
129 = 009B PAUSEF .DS 1 ;PAUSE FLAG
130 = 009C WHINEY .DS 1 ;CHASE WHINE DELTA
131 = 009D FRUTMR .DS 2 ;FRUIT TIMER (10 SECS)
132 = 009F FRUFLG .DS 1 ;FRUIT DISPLAY FLAG
133 = 00A0 FRUCLR .DS 1 ;FRUIT COLOR
134 = 00A1 FRSCRF .DS 1 ;FRUIT SCORE FLAG
135 = 00A2 FRSCRT .DS 1 ;FRUIT SCORE TIMER
136 = 00A3 NOTCNT .DS 1 ;NOTE COUNT FOR TUNES
137 = 00A4 VSAVER .DS 1 ;VERTICAL POSIT SAVE
138 = 00A5 HSAVER .DS 1 ;HORIZONTAL POSIT SAVE
139 = 00A6 PACMAP .DS 1 ;PACMAN VERT MAP COUNTER
140 = 00A7 PACCNT .DS 1 ;PACMAN MOTION COUNT
141 = 00A8 PACADV .DS 1 ;PACMAN ADVANCE-TURNING
142 = 00A9 PACDLY .DS 1 ;PACMAN DELAY-EATING DOTS
143 = 00AA PMSTAT .DS 1 ;PACMAN STATUS
144 = 00AB PMSEQU .DS 1 ;PACMAN SEQUENCE (MOUTH)
145 = 00AC PMNDIR .DS 1 ;PACMAN NEW DIRECTION
146 = 00AD CHASET .DS 1 ;CHASE TIMER
147 = 00AE MSTILL .DS 1 ;MONSTERS STILL FLAG
148 = 00AF MSKIRT .DS 1 ;MONSTER SKIRT FLAG
149 = 00B0 M1SPSQ .DS 1 ;MONSTER 1 SPEED SEQUENCE
150 = 00B1 M2SPSQ .DS 1 ;MONSTER 2 SPEED SEQUENCE
151 = 00B2 M3SPSQ .DS 1 ;MONSTER 3 SPEED SEQUENCE
152 = 00B3 M4SPSQ .DS 1 ;MONSTER 4 SPEED SEQUENCE
153 = 00B4 PMSPSQ .DS 1 ;PACMAN SPEED SEQUENCE
154 = 00B5 M1SPCT .DS 1 ;MONSTER 1 SPEED COUNT
155 = 00B6 M2SPCT .DS 1 ;MONSTER 2 SPEED COUNT
156 = 00B7 M3SPCT .DS 1 ;MONSTER 3 SPEED COUNT
157 = 00B8 M4SPCT .DS 1 ;MONSTER 4 SPEED COUNT
158 = 00B9 PMSPCT .DS 1 ;PACMAN SPEED COUNT
159 = 00BA M1PIDX .DS 1 ;MONSTER 1 PATTERN INDEX
160 = 00BB M2PIDX .DS 1 ;MONSTER 2 PATTERN INDEX
161 = 00BC M3PIDX .DS 1 ;MONSTER 3 PATTERN INDEX
162 = 00BD M4PIDX .DS 1 ;MONSTER 4 PATTERN INDEX
163 = 00BE M1PCNT .DS 1 ;MONSTER 1 PATTERN COUNT
164 = 00BF M2PCNT .DS 1 ;MONSTER 2 PATTERN COUNT
165 = 00C0 M3PCNT .DS 1 ;MONSTER 3 PATTERN COUNT
166 = 00C1 M4PCNT .DS 1 ;MONSTER 4 PATTERN COUNT
167 = 00C2 M1THPS .DS 1 ;MONSTER 1 TARGET HPOS
168 = 00C3 M2THPS .DS 1 ;MONSTER 2 TARGET HPOS
169 = 00C4 M3THPS .DS 1 ;MONSTER 3 TARGET HPOS
170 = 00C5 M4THPS .DS 1 ;MONSTER 4 TARGET HPOS
171 = 00C6 M1TVPS .DS 1 ;MONSTER 1 TARGET VPOS
172 = 00C7 M2TVPS .DS 1 ;MONSTER 2 TARGET VPOS
173 = 00C8 M3TVPS .DS 1 ;MONSTER 3 TARGET VPOS
174 = 00C9 M4TVPS .DS 1 ;MONSTER 4 TARGET VPOS
175 = 00CA M1TIMR .DS 1 ;MONSTER 1 TIMER
176 = 00CB M2TIMR .DS 1 ;MONSTER 2 TIMER
177 = 00CC M3TIMR .DS 1 ;MONSTER 3 TIMER
178 = 00CD M4TIMR .DS 1 ;MONSTER 4 TIMER
179 = 00CE M1STAT .DS 1 ;MONSTER 1 STATUS
180 = 00CF M2STAT .DS 1 ;MONSTER 2 STATUS
181 = 00D0 M3STAT .DS 1 ;MONSTER 3 STATUS
182 = 00D1 M4STAT .DS 1 ;MONSTER 4 STATUS
183 = 00D2 M1SSEQ .DS 1 ;MONSTER 1 START SEQUENCE
184 = 00D3 M2SSEQ .DS 1 ;MONSTER 2 START SEQUENCE
185 = 00D4 M3SSEQ .DS 1 ;MONSTER 3 START SEQUENCE
186 = 00D5 M4SSEQ .DS 1 ;MONSTER 4 START SEQUENCE
187 = 00D6 M1VDIR .DS 1 ;MONSTER 1 VERT CHOICE
188 = 00D7 M2VDIR .DS 1 ;MONSTER 2 VERT CHOICE
189 = 00D8 M3VDIR .DS 1 ;MONSTER 3 VERT CHOICE
190 = 00D9 M4VDIR .DS 1 ;MONSTER 4 VERT CHOICE
191 = 00DA M1HDIR .DS 1 ;MONSTER 1 HORZ CHOICE
192 = 00DB M2HDIR .DS 1 ;MONSTER 2 HORZ CHOICE
193 = 00DC M3HDIR .DS 1 ;MONSTER 3 HORZ CHOICE
194 = 00DD M4HDIR .DS 1 ;MONSTER 4 HORZ CHOICE
195 = 00DE VCHASF .DS 1 ;CHASE FREQ
196 = 00DF VCHASD .DS 1 ;DIRECTION 1=INC 2=DEC
197 = 00E0 VCHASS .DS 1 ;CHASE SOUND START
198 = 00E1 VFLITF .DS 1 ;FLIGHT FREQ
199 = 00E2 VFLITD .DS 1 ;DIRECTION SAME
200 = 00E3 VFLITV .DS 1 ;FLIGHT VOLUME
201 = 00E4 VFLITS .DS 1 ;FLIGHT SOUND START
202 = 00E5 VFREEZ .DS 1 ;FREEZE FLAG
203 = 00E6 VGLPC1 .DS 1 ;GULP COUNT1
204 = 00E7 VGLPC2 .DS 1 ;GULP COUNT2
205 = 00E8 GULPED .DS 1 ;LAST MONSTER EATEN
206 = 00E9 GLPCNT .DS 1 ;GULP COUNT
207 = 00EA FIZZLE .DS 1 ;FIZZLE FLAG 1=FIZL
208 = 00EB FIZPTR .DS 1 ;FIZZLE ADDR POINTER
209 = 00EC FIZTIM .DS 1 ;FIZZLE TIMER
210 = 00ED VFIZST .DS 1 ;FIZZLE STATUS
211 = 00EE VFIZSQ .DS 1 ;FIZZLE SEQUENCE #
212 = 00EF VFIZBS .DS 1 ;FIZZLE FREQ BASE
213 = 00F0 VFIZFQ .DS 1 ;FIZZLE CURRENT FREQ
214 = 00F1 VFIZCT .DS 1 ;FIZZLE COUNTER
215 = 00F2 TWEETR .DS 1 ;TWEET SOUND FLAG
216 = 00F3 TWEETF .DS 1 ;TWEET SOUND FREQ
217 = 00F4 EATERF .DS 1 ;EAT DOT SOUND FLAG
218 = 00F5 EATERC .DS 1 ;EAT DOT SOUND COUNT
219 = 00F6 EATERT .DS 1 ;EAT DOT TOGGLE
220 = 00F7 GOBBLD .DS 1 ;GOBBLE DIRCTN (FRUITS)
221 = 00F8 GOBBLF .DS 1 ;GOBBLE FREQUENCY
222 = 00F9 BLINKT .DS 1 ;BLINK TIMER
223 = 00FA FLSHUP .DS 1 ;FLASH 1UP 2UP TIMER
224 = 00FB FLASHT .DS 1 ;FLASH TIMER
225 = 00FC FLASHC .DS 1 ;FLASH COUNT
226 = 00FD FLITMR .DS 1 ;FLIGHT TIMER
227 = 00FE TUNMSK .DS 1 ;TUNNEL BIT MASK
228 = 00FF TUNCNT .DS 1 ;TUNNEL ITERATION COUNT
229 ;
230 ; EJECT
231 ;
232 ORG $0600
233 ;
234 = 0600 PACBUF .DS 16 ; PACMAN IMAGE BUFFER
235 = 0610 MONBUF .DS 16 ; MONSTER IMAGE BUFFER
236 ;
237 = 0680 INTRDL EQU $0680;INTERMISSION DL
238 = 06C0 INTMOD EQU $06C0;INTERMISSION MODE
239 = 06C1 INTSEQ EQU $06C1;INTERMISSION SEQ
240 ;
241 ;
242 ;**** SYSTEM VARIABLES ****
243 ;
244 = 0001 BDELAY EQU 1 ;BOUNCE DELAY
245 = 00FF FDELAY EQU $FF;FRUIT TIMER VALUE
246 = 0030 ADELAY EQU $30;ATTRACT TIMER DELAY
247 ;
248 = 0800 GAMMEM EQU $0800; GAME MEMORY
249 ;
250 = 1400 PACMAZ EQU GAMMEM+$0C00
251 = 1800 P1SAVE EQU GAMMEM+$1000
252 = 1C00 P2SAVE EQU GAMMEM+$1400
253 = 2000 OPTCHR EQU GAMMEM+$1800
254 = 2400 OPTSCN EQU GAMMEM+$1C00
255 = 2800 PMADDR EQU GAMMEM+$2000
256 = 2800 TEXT EQU GAMMEM+$2000
257 = 3000 PATSCN EQU GAMMEM+$2800
258 = 3400 AMCSET EQU GAMMEM+$2C00
259
260 OPT F+
261 ;
262 ; EJECT
263 ;
264 ORG $3FFD
265 ;
266 FFFF> 3FFD-7B2D> 4C BC + JMP INIT
267 ;
268 4000 ICL "PACDAT1.ASM"
Source: PACDAT1.ASM
1 ; @com.wudsn.ide.asm.mainsourcefile=PACMAN.ASM
2
3 ; MISSING LABELS & DATA
4
5 4000 PACCHR
6 4000 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$3C,$3C,$00,$00,$00
7 4010 3C 3C FF FF FF FF + .byte $3C,$3C,$FF,$FF,$FF,$FF,$3C,$3C,$00,$00,$01,$04,$04,$04,$04,$04
8 4020 00 00 40 10 10 10 + .byte $00,$00,$40,$10,$10,$10,$10,$10,$10,$10,$10,$10,$10,$40,$00,$00
9 4030 04 04 04 04 04 01 + .byte $04,$04,$04,$04,$04,$01,$00,$00,$00,$00,$55,$00,$00,$50,$04,$04
10 4040 00 00 40 10 10 40 + .byte $00,$00,$40,$10,$10,$40,$00,$00,$00,$00,$55,$00,$00,$05,$10,$10
11 4050 00 00 01 04 04 01 + .byte $00,$00,$01,$04,$04,$01,$00,$00,$00,$00,$FF,$00,$00,$00,$00,$00
12 4060 00 00 55 00 00 55 + .byte $00,$00,$55,$00,$00,$55,$00,$00,$04,$04,$04,$04,$04,$04,$04,$04
13 4070 00 00 55 00 00 00 + .byte $00,$00,$55,$00,$00,$00,$00,$00,$10,$10,$10,$10,$10,$10,$10,$10
14 4080 00 00 00 00 00 55 + .byte $00,$00,$00,$00,$00,$55,$00,$00,$00,$00,$00,$00,$01,$01,$01,$01
15 4090 01 01 01 01 00 00 + .byte $01,$01,$01,$01,$00,$00,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01
16 40A0 40 40 40 40 40 40 + .byte $40,$40,$40,$40,$40,$40,$40,$40,$00,$00,$55,$00,$00,$50,$04,$04
17 40B0 00 00 55 00 00 05 + .byte $00,$00,$55,$00,$00,$05,$10,$10,$04,$04,$50,$00,$00,$55,$00,$00
18 40C0 10 10 05 00 00 55 + .byte $10,$10,$05,$00,$00,$55,$00,$00,$10,$10,$05,$00,$00,$05,$10,$10
19 40D0 04 04 50 00 00 50 + .byte $04,$04,$50,$00,$00,$50,$04,$04,$3C,$FF,$3F,$0F,$3F,$FF,$3C,$00
20 40E0 00 00 15 40 00 05 + .byte $00,$00,$15,$40,$00,$05,$10,$10,$10,$10,$05,$00,$40,$15,$00,$00
21 40F0 00 00 54 01 00 50 + .byte $00,$00,$54,$01,$00,$50,$04,$04,$04,$04,$50,$00,$01,$54,$00,$00
22 4100 00 00 00 00 40 40 + .byte $00,$00,$00,$00,$40,$40,$40,$40,$40,$40,$40,$40,$00,$00,$00,$00
23 4110 00 3F 3C 3C 3F 3C + .byte $00,$3F,$3C,$3C,$3F,$3C,$3C,$00,$00,$F0,$3C,$3C,$F0,$F0,$3C,$00
24 4120 00 FF F0 FF F0 F0 + .byte $00,$FF,$F0,$FF,$F0,$F0,$FF,$00,$00,$C0,$03,$0F,$0F,$0F,$CF,$00
25 4130 00 F0 FC 0F 0F FF + .byte $00,$F0,$FC,$0F,$0F,$FF,$0F,$00,$00,$3F,$3C,$3C,$3C,$3C,$3F,$00
26 4140 00 C0 F0 3C 3C F0 + .byte $00,$C0,$F0,$3C,$3C,$F0,$C0,$00,$00,$F0,$F0,$3F,$0F,$0F,$0F,$00
27 4150 00 F3 F3 C3 00 03 + .byte $00,$F3,$F3,$C3,$00,$03,$03,$00,$00,$C0,$C0,$C0,$00,$C0,$C0,$00
28 4160 00 3F F0 F0 F3 F0 + .byte $00,$3F,$F0,$F0,$F3,$F0,$3F,$00,$00,$F0,$00,$03,$F3,$F3,$F3,$00
29 4170 00 3C FF C3 C3 FF + .byte $00,$3C,$FF,$C3,$C3,$FF,$C3,$00,$00,$0F,$0F,$CF,$CF,$CF,$CF,$00
30 4180 00 03 CF FF 33 03 + .byte $00,$03,$CF,$FF,$33,$03,$03,$00,$00,$CF,$CF,$CF,$CF,$CF,$CF,$00
31 4190 00 FC 00 F0 00 00 + .byte $00,$FC,$00,$F0,$00,$00,$FC,$00,$00,$00,$03,$03,$03,$03,$00,$00
32 41A0 00 FF C3 C3 C3 C3 + .byte $00,$FF,$C3,$C3,$C3,$C3,$FF,$00,$00,$0F,$CF,$CF,$CF,$C3,$00,$00
33 41B0 00 3C 3C 3C 3C F0 + .byte $00,$3C,$3C,$3C,$3C,$F0,$C0,$00,$00,$FF,$F0,$FF,$F0,$F0,$FF,$00
34 41C0 00 CF 0F 0F 0F 0F + .byte $00,$CF,$0F,$0F,$0F,$0F,$CF,$00,$00,$FC,$0F,$0F,$FC,$3C,$0F,$00
35 41D0 00 03 0C 2A 2A 2A + .byte $00,$03,$0C,$2A,$2A,$2A,$3A,$2A,$30,$F0,$30,$A8,$A8,$E8,$A8,$00
36 41E0 03 0F 2A 2E 2A 2B + .byte $03,$0F,$2A,$2E,$2A,$2B,$0A,$02,$00,$C0,$A0,$E0,$A0,$A0,$80,$00
37 41F0 02 02 0F 3F 3F 3F + .byte $02,$02,$0F,$3F,$3F,$3F,$3F,$0F,$00,$00,$C0,$F0,$F0,$F0,$F0,$C0
38 4200 03 0A 2A 2A 2A 2A + .byte $03,$0A,$2A,$2A,$2A,$2A,$2A,$0A,$00,$80,$A0,$A0,$E0,$E0,$A0,$80
39 4210 03 03 0A 2A 2A 2A + .byte $03,$03,$0A,$2A,$2A,$2A,$2A,$0A,$00,$00,$80,$A0,$A0,$A0,$A0,$80
40 4220 03 03 05 15 15 15 + .byte $03,$03,$05,$15,$15,$15,$15,$05,$00,$00,$40,$50,$50,$50,$50,$40
41
42 ; VERSION DEPENDENT PACMAN GRAPHICS
43 .if VERSION=ORIGINAL || VERSION=ROKLAN || VERSION=ATARI82
44 4230 22 22 22 22 22 A2 + .byte $22,$22,$22,$22,$22,$A2,$82,$82,$20,$20,$20,$20,$20,$28,$08,$08
45 4240 11 11 11 11 11 51 + .byte $11,$11,$11,$11,$11,$51,$41,$41,$10,$10,$10,$10,$10,$14,$04,$04
46 .elseif VERSION=DATASOFT
47 .byte $52,$5A,$55,$15,$05,$05,$01,$01,$14,$94,$54,$50,$40,$40,$00,$00
48 .byte $A3,$AF,$AA,$2A,$0A,$0A,$02,$02,$28,$E8,$A8,$A0,$80,$80,$00,$00
49 .else
50 .error "Invalid version ", VERSION
51 .endif
52
53 4250 03 0D 3F 3F 3F 3A + .byte $03,$0D,$3F,$3F,$3F,$3A,$2B,$0A,$00,$C0,$F0,$F0,$F0,$B0,$A0,$80
54 4260 0A 08 0A 03 03 03 + .byte $0A,$08,$0A,$03,$03,$03,$03,$03,$A0,$20,$A0,$C0,$F0,$C0,$F0,$C0
55 4270 00 03 00 00 00 00 + .byte $00,$03,$00,$00,$00,$00,$03,$00,$C0,$C3,$C3,$C3,$C3,$C3,$F0,$00
56 4280 3F 00 00 03 00 30 + .byte $3F,$00,$00,$03,$00,$30,$0F,$00,$F0,$33,$C3,$C3,$33,$33,$C0,$00
57 4290 3F 30 3F 00 00 30 + .byte $3F,$30,$3F,$00,$00,$30,$0F,$00,$F0,$03,$C3,$33,$33,$33,$C0,$00
58 42A0 3F 00 00 03 0C 0C + .byte $3F,$00,$00,$03,$0C,$0C,$0C,$00,$F0,$33,$C3,$03,$03,$03,$00,$00
59 42B0 03 0F 03 03 03 03 + .byte $03,$0F,$03,$03,$03,$03,$0F,$00,$03,$0C,$0C,$0C,$0C,$0C,$C3,$00
60 42C0 3F C0 00 0F 30 C0 + .byte $3F,$C0,$00,$0F,$30,$C0,$FF,$00,$03,$CC,$CC,$0C,$0C,$0C,$C3,$00
61 42D0 FF 00 03 0F 00 C0 + .byte $FF,$00,$03,$0F,$00,$C0,$3F,$00,$C3,$CC,$0C,$0C,$CC,$CC,$03,$00
62 42E0 FF C0 FF 00 00 C0 + .byte $FF,$C0,$FF,$00,$00,$C0,$3F,$00,$C3,$0C,$0C,$CC,$CC,$CC,$03,$00
63 42F0 C0 33 33 33 33 33 + .byte $C0,$33,$33,$33,$33,$33,$C0,$00,$F0,$0C,$0C,$0C,$0C,$0C,$F0,$00
64 4300 3C C3 C3 C3 C3 C3 + .byte $3C,$C3,$C3,$C3,$C3,$C3,$3C,$00,$00,$00,$55,$00,$00,$54,$01,$01
65 4310 01 01 54 00 00 55 + .byte $01,$01,$54,$00,$00,$55,$00,$00,$00,$00,$55,$00,$00,$15,$40,$40
66 4320 40 40 15 00 00 55 + .byte $40,$40,$15,$00,$00,$55,$00,$00,$00,$AA,$A0,$A0,$AA,$A0,$A0,$00
67 4330 00 82 A2 A2 82 02 + .byte $00,$82,$A2,$A2,$82,$02,$02,$00,$00,$80,$80,$80,$80,$80,$AA,$00
68 4340 00 02 0A 28 28 2A + .byte $00,$02,$0A,$28,$28,$2A,$28,$00,$00,$02,$82,$A0,$A0,$A0,$A0,$00
69 4350 00 82 82 AA 28 28 + .byte $00,$82,$82,$AA,$28,$28,$28,$00,$00,$8A,$8A,$0A,$0A,$0A,$0A,$00
70 4360 00 A8 00 A0 00 00 + .byte $00,$A8,$00,$A0,$00,$00,$A8,$00,$00,$AA,$A0,$A0,$AA,$A2,$A0,$00
71 4370 00 80 A0 A0 80 80 + .byte $00,$80,$A0,$A0,$80,$80,$A0,$00,$00,$00,$02,$00,$00,$00,$0A,$00
72 4380 00 A0 A0 A0 A0 A0 + .byte $00,$A0,$A0,$A0,$A0,$A0,$AA,$00,$00,$02,$0A,$00,$00,$02,$0A,$00
73 4390 00 A8 0A 28 A0 80 + .byte $00,$A8,$0A,$28,$A0,$80,$AA,$00
74
75 4398 DATMAZ
76 4398 00 11 1C 0C 0C 0C + .byte $00,$11,$1C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C
77 43A8 0C 0C 0C 15 16 0C + .byte $0C,$0C,$0C,$15,$16,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C
78 43B8 0C 0C 0C 0C 0C 1E + .byte $0C,$0C,$0C,$0C,$0C,$1E,$20,$00,$00,$13,$0F,$01,$01,$01,$01,$01
79 43C8 01 01 01 01 01 01 + .byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$0D,$0F,$01,$01,$01
80 43D8 01 01 01 01 01 01 + .byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$0D,$14,$00
81 43E8 00 13 0F 01 03 0E + .byte $00,$13,$0F,$01,$03,$0E,$0E,$0E,$04,$01,$03,$0E,$0E,$0E,$0E,$0E
82 43F8 0E 04 01 0D 0F 01 + .byte $0E,$04,$01,$0D,$0F,$01,$03,$0E,$0E,$0E,$0E,$0E,$0E,$04,$01,$03
83 4408 0E 0E 0E 04 01 0D + .byte $0E,$0E,$0E,$04,$01,$0D,$14,$00,$00,$13,$0F,$02,$06,$10,$10,$10
84 4418 05 01 06 10 10 10 + .byte $05,$01,$06,$10,$10,$10,$10,$10,$10,$05,$01,$06,$05,$01,$06,$10
85 4428 10 10 10 10 10 05 + .byte $10,$10,$10,$10,$10,$05,$01,$06,$10,$10,$10,$05,$02,$0D,$14,$00
86 4438 00 13 0F 01 01 01 + .byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
87 4448 01 01 01 01 01 01 + .byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
88 4458 01 01 01 01 01 0D + .byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$13,$0F,$01,$0A,$0C,$0C,$0C
89 4468 08 01 03 0E 04 01 + .byte $08,$01,$03,$0E,$04,$01,$0A,$0C,$0C,$0C,$0C,$07,$09,$0C,$0C,$0C
90 4478 0C 08 01 03 0E 04 + .byte $0C,$08,$01,$03,$0E,$04,$01,$0A,$0C,$0C,$0C,$08,$01,$0D,$14,$00
91 4488 00 13 0F 01 01 01 + .byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$0D,$00,$0F,$01,$01,$01
92 4498 01 01 01 0D 0F 01 + .byte $01,$01,$01,$0D,$0F,$01,$01,$01,$01,$01,$01,$0D,$00,$0F,$01,$01
93 44A8 01 01 01 01 01 0D + .byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$12,$1D,$0C,$0C,$0C,$0C,$61
94 44B8 04 01 0D 00 19 0C + .byte $04,$01,$0D,$00,$19,$0C,$0C,$0C,$0C,$08,$00,$06,$05,$00,$0A,$0C
95 44C8 0C 0C 0C 1A 00 0F + .byte $0C,$0C,$0C,$1A,$00,$0F,$01,$03,$63,$0C,$0C,$0C,$0C,$1F,$21,$00
96 44D8 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$13,$0F,$01,$0D,$00,$0F,$00,$00,$00
97 44E8 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0D,$00,$0F,$01,$0D
98 44F8 14 00 00 00 00 00 + .byte $14,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$0C,$0C,$0C,$0C,$62
99 4508 05 01 06 10 05 00 + .byte $05,$01,$06,$10,$05,$00,$03,$0E,$0E,$0E,$0E,$0B,$0B,$0E,$0E,$0E
100 4518 0E 04 00 06 10 05 + .byte $0E,$04,$00,$06,$10,$05,$01,$06,$64,$0C,$0C,$0C,$0C,$0C,$00,$00
101 4528 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$00,$00,$00,$0D,$00
102 4538 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$00,$00,$00,$00,$01,$00
103 4548 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0C,$0C,$0C,$0C,$0C,$61
104 4558 04 01 03 0E 04 00 + .byte $04,$01,$03,$0E,$04,$00,$06,$10,$10,$10,$10,$10,$10,$10,$10,$10
105 4568 10 05 00 03 0E 04 + .byte $10,$05,$00,$03,$0E,$04,$01,$03,$63,$0C,$0C,$0C,$0C,$0C,$00,$00
106 4578 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$13,$0F,$01,$0D,$00,$0F,$00,$00,$00
107 4588 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0D,$00,$0F,$01,$0D
108 4598 14 00 00 00 00 00 + .byte $14,$00,$00,$00,$00,$00,$00,$00,$00,$11,$1C,$0C,$0C,$0C,$0C,$62
109 45A8 05 01 06 10 05 00 + .byte $05,$01,$06,$10,$05,$00,$0A,$0C,$0C,$0C,$0C,$07,$09,$0C,$0C,$0C
110 45B8 0C 08 00 06 10 05 + .byte $0C,$08,$00,$06,$10,$05,$01,$06,$64,$0C,$0C,$0C,$0C,$1E,$20,$00
111 45C8 00 13 0F 01 01 01 + .byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
112 45D8 01 01 01 0D 0F 01 + .byte $01,$01,$01,$0D,$0F,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
113 45E8 01 01 01 01 01 0D + .byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$13,$0F,$01,$0A,$0C,$0C,$15
114 45F8 04 01 0A 0C 0C 0C + .byte $04,$01,$0A,$0C,$0C,$0C,$0C,$0C,$0C,$08,$01,$06,$05,$01,$0A,$0C
115 4608 0C 0C 0C 0C 0C 08 + .byte $0C,$0C,$0C,$0C,$0C,$08,$01,$03,$16,$0C,$0C,$08,$01,$0D,$14,$00
116 4618 00 13 0F 02 01 01 + .byte $00,$13,$0F,$02,$01,$01,$01,$0D,$0F,$01,$01,$01,$01,$01,$01,$01
117 4628 01 01 01 00 00 01 + .byte $01,$01,$01,$00,$00,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$0D
118 4638 0F 01 01 01 02 0D + .byte $0F,$01,$01,$01,$02,$0D,$14,$00,$00,$13,$19,$0C,$0C,$08,$01,$06
119 4648 05 01 03 0E 04 01 + .byte $05,$01,$03,$0E,$04,$01,$0A,$0C,$0C,$0C,$0C,$07,$09,$0C,$0C,$0C
120 4658 0C 08 01 03 0E 04 + .byte $0C,$08,$01,$03,$0E,$04,$01,$06,$05,$01,$0A,$0C,$0C,$1A,$14,$00
121 4668 00 13 0F 01 01 01 + .byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$0D,$00,$0F,$01,$01,$01
122 4678 01 01 01 0D 0F 01 + .byte $01,$01,$01,$0D,$0F,$01,$01,$01,$01,$01,$01,$0D,$00,$0F,$01,$01
123 4688 01 01 01 01 01 0D + .byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$13,$0F,$01,$0A,$0C,$0C,$0C
124 4698 0C 0C 17 10 18 0C + .byte $0C,$0C,$17,$10,$18,$0C,$0C,$0C,$0C,$08,$01,$06,$05,$01,$0A,$0C
125 46A8 0C 0C 0C 17 10 18 + .byte $0C,$0C,$0C,$17,$10,$18,$0C,$0C,$0C,$0C,$0C,$08,$01,$0D,$14,$00
126 46B8 00 13 0F 01 01 01 + .byte $00,$13,$0F,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
127 46C8 01 01 01 01 01 01 + .byte $01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01,$01
128 46D8 01 01 01 01 01 0D + .byte $01,$01,$01,$01,$01,$0D,$14,$00,$00,$12,$1D,$0C,$0C,$0C,$0C,$0C
129 46E8 0C 0C 0C 0C 0C 0C + .byte $0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C
130 46F8 0C 0C 0C 0C 0C 0C + .byte $0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$0C,$1F,$21,$00
131 4708 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
132 4718 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
133 4728 00 00 00 00 00 00 + .byte $00,$00,$00,$00,$00,$00,$00,$00
134
135 4730 ODLIST
136 4730 70 70 42 00 28 02 + .byte $70,$70,$42,$00,$28,$02,$C6,$00,$24,$07,$07,$86,$06,$06,$06,$06
137 4740 86 04 86 06 06 06 + .byte $86,$04,$86,$06,$06,$06,$06,$06,$06,$06,$06,$86,$44,$70,$17,$41, a(ODLIST)
138
139 4752 DLIST
140 4752 70 70 42 00 28 82 + .byte $70,$70,$42,$00,$28,$82,$C4,$00,$14,$04,$04,$04,$04,$04,$04,$04
141 4762 04 04 84 04 04 04 + .byte $04,$04,$84,$04,$04,$04,$04,$04,$04,$04,$04,$04,$84,$84,$04,$F0
142 4772 41 52 47 .byte $41,a(DLIST)
143
144 4775 ADLIST
145 4775 70 70 C2 00 28 02 + .byte $70,$70,$C2,$00,$28,$02,$46,$00,$30,$06,$86,$06,$06,$06,$06,$06
146 4785 06 06 86 06 06 06 + .byte $06,$06,$86,$06,$06,$06,$86,$06,$06,$06,$06,$06,$86,$06,$44,$70
147 4795 17 41 75 47 .byte $17,$41,a(ADLIST)
148 4799 NULLDL
149 4799 70 70 70 41 99 47 .byte $70,$70,$70,$41,a(NULLDL)
150
151 479F INTDLC
152 479F 70 70 70 42 00 28 + .byte $70,$70,$70,$42,$00,$28,$02,$F0,$70,$70,$70,$70,$70,$70,$70,$70
153 47AF 70 54 00 2C 54 50 + .byte $70,$54,$00,$2C,$54,$50,$2C,$54,$A0,$2C,$41,$80,$06
269
270 ;
271 ; EJECT
272 ;
273 47BC A2 09 INIT LDX #9
274 47BE BD 96 68 INITL1 LDA HISCTX,X
275 47C1 9D 0F 28 STA TEXT+$0F,X
276 47C4 CA DEX
277 47C5 10 F7 BPL INITL1
278 47C7 A9 00 LDA #0
279 47C9 A2 27 LDX #$27
280 47CB 95 18 INITL2 STA DLICNT,X
281 47CD CA DEX
282 47CE 10 FB BPL INITL2
283 47D0 A2 7F LDX #$7F
284 47D2 95 80 INIPZL STA $80,X
285 47D4 CA DEX
286 47D5 10 FB BPL INIPZL
287 ;
288 47D7 E6 19 INC OPTION
289 47D9 A6 14 LDX RTCLOK+2
290 47DB CA DEX
291 47DC 86 1D STX ATCLOK
292 ;
293 ; RELOCATE OPTION CHAR SET
294 ;
295 47DE A2 00 LDX #0
296 47E0 BD 38 69 OCLOOP LDA PACTTL,X
297 47E3 9D 08 20 STA OPTCHR+8,X
298 47E6 E8 INX
299 47E7 D0 F7 BNE OCLOOP
300 ;
301 ; BUILD ATTRACT MODE CHAR SET
302 ;
303 47E9 BD 00 E0 ANCHRL LDA CHRORG,X
304 47EC 9D 00 34 STA AMCSET,X
305 47EF BD 00 E1 LDA CHRORG+$100,X
306 47F2 9D 00 35 STA AMCSET+$100,X
307 47F5 E8 INX
308 47F6 D0 F1 BNE ANCHRL
309 47F8 A2 1F LDX #$1F
310 47FA BD 0D 6C ANCDTL LDA ATCHRS,X
311 47FD 9D 18 34 STA AMCSET+$18,X
312 4800 CA DEX
313 4801 10 F7 BPL ANCDTL
314 ;
315 ; ENABLE KEYSCAN & SET VBI VECTOR
316 ;
317 4803 78 PACINI SEI
318 4804 A5 10 LDA POKMSK
319 4806 09 40 ORA #$40
320 4808 85 10 STA POKMSK
321 480A 8D 0E D2 STA IRQEN
322 480D 58 CLI
323 480E A0 07 LDY #<VBLANK
324 4810 A2 4A LDX #>VBLANK
325 4812 A9 07 LDA #7
326 4814 8D 0F D2 STA SKCTL
327 4817 20 5C E4 JSR SETVBV;GO SET VBLANK VECTOR
328 481A A9 C0 LDA #$C0;ENABLE DLI AND VBI
329 481C 8D 0E D4 STA NMIEN
330 481F A9 3E LDA #$3E
331 4821 8D 2F 02 STA SDMCTL;ENABLE P/M GRAPHICS
332 4824 A9 03 LDA #$3
333 4826 8D 1D D0 STA GRACTL
334 4829 A9 28 LDA #>PMADDR
335 482B 8D 07 D4 STA PMBASE
336 482E A9 BC LDA #<INIT
337 4830 85 0A STA DOSVEC
338 4832 A9 47 LDA #>INIT
339 4834 85 0B STA DOSVEC+1
340 4836 A9 50 LDA #<INITAD
341 4838 85 0C STA DOSINI
342 483A A9 4A LDA #>INITAD
343 483C 85 0D STA DOSINI+1
344 ;
345 483E A9 00 REINIT LDA #0;NEW GAME VECTOR
346 4840 A2 1F LDX #$1F
347 4842 95 20 REINLP STA GMOVRF,X
348 4844 CA DEX
349 4845 10 FB BPL REINLP
350 4847 9A TXS
351 4848 20 86 58 JSR CLRAUD
352 ;
353 ; NOW INITIALIZE PLAYER SCREENS
354 ;
355 484B 20 E0 58 JSR P1INIT
356 484E 20 FE 58 JSR SAVEP1
357 4851 20 1C 59 JSR SAVEP2
358 ;
359 4854 A5 19 LDA OPTION
360 4856 D0 3C BNE LOOP
361 ;
362 4858 A5 14 PACGAM LDA RTCLOK+2
363 485A C5 14 PACGML CMP RTCLOK+2
364 485C F0 FC BEQ PACGML
365 485E A9 52 LDA #<DLIST
366 4860 8D 30 02 STA SDLSTL
367 4863 8D 02 D4 STA DLISTL
368 4866 A9 47 LDA #>DLIST
369 4868 8D 31 02 STA SDLSTH
370 486B 8D 03 D4 STA DLISTH
371 486E A9 6E LDA #<DLIV; DLI VECTOR
372 4870 8D 00 02 STA VDSLST
373 4873 A9 49 LDA #>DLIV
374 4875 8D 01 02 STA VDSLST+1
375 4878 A9 11 LDA #$11
376 487A 8D 6F 02 STA GPRIOR;LET MISSILES USE COLPF3
377 487D 20 4F 55 SETPAC JSR SETUP
378 4880 20 91 55 JSR NEWGAM
379 4883 A5 1A LDA NUMPLY
380 4885 F0 06 BEQ P1SCIN
381 4887 20 6D 4A JSR SET2PL
382 488A 4C 90 48 JMP GODOIT
383
384 488D 20 51 4A P1SCIN JSR SET1PL
385 4890 A9 02 GODOIT LDA #2
386 4892 85 1C STA RSTRTF
387 ;
388 4894 A5 27 LOOP LDA RRSEQU
389 4896 C9 03 CMP #3
390 4898 D0 08 BNE GOLOOP
391
392 489A 20 9A 62 JSR INTMIS
393 489D 20 4F 55 JSR SETUP
394 48A0 E6 27 INC RRSEQU
395 48A2 A2 03 GOLOOP LDX #3
396 48A4 BD 31 67 LOOPLP LDA ACOLOR,X
397 48A7 45 4F EOR COLRSH;ATTRACT COLORS THAT ARE
398 48A9 25 4E AND DRKMSK;SWITCHED WITH DLI'S
399 48AB 95 5E STA ACOLR1,X
400 48AD CA DEX
401 48AE 10 F4 BPL LOOPLP
402 48B0 A5 19 LDA OPTION
403 48B2 D0 29 BNE PCTRIG
404 48B4 AD F1 02 LDA KEYDEL
405 48B7 D0 18 BNE IGNORK
406 48B9 AD FC 02 LDA CH; TEST FOR SPACE BAR PAUSE
407 48BC C9 21 CMP #$21
408 48BE D0 11 BNE IGNORK
409 48C0 A5 9B LDA PAUSEF
410 48C2 F0 04 BEQ FLIPON
411 48C4 A9 00 LDA #0
412 48C6 F0 02 BEQ STFLIP
413 48C8 A9 01 FLIPON LDA #1
414 48CA 85 9B STFLIP STA PAUSEF
415 48CC A9 FF NOFLIP LDA #$FF
416 48CE 8D FC 02 STA CH
417 48D1 A5 20 IGNORK LDA GMOVRF
418 48D3 F0 17 BEQ GAMCNS
419 48D5 A5 1E LDA ATTIMR;IF GAME OVER, TIME OUT
420 48D7 D0 04 BNE PCTRIG;AND GO TO OPTION SCREEN
421 48D9 A9 04 LDA #4
422 48DB D0 6C BNE PCEXT1
423 48DD A9 FF PCTRIG LDA #$FF
424 48DF 8D FC 02 STA CH
425 48E2 AD 84 02 LDA STRIG0
426 48E5 F0 45 BEQ CSTART
427 48E7 AD 85 02 LDA STRIG1;TEST TRIGGER START
428 48EA F0 40 BEQ CSTART
429 48EC AD 1F D0 GAMCNS LDA CONSOL
430 48EF C9 07 CMP #7; NO BUTTONS PRESSED
431 48F1 F0 A1 BEQ LOOP
432 48F3 85 46 CNSSWT STA SAVCNS
433 48F5 A2 01 LDX #BDELAY
434 48F7 86 45 STX BCOUNT
435 48F9 0D 1F D0 CLOOP1 ORA CONSOL
436 48FC A6 45 LDX BCOUNT;DEBOUNCE LOGIC
437 48FE D0 F9 BNE CLOOP1
438 4900 C5 46 CMP SAVCNS
439 4902 D0 E8 BNE GAMCNS
440 4904 CD 1F D0 CLOOP2 CMP CONSOL
441 4907 F0 FB BEQ CLOOP2
442 4909 A5 46 LDA SAVCNS
443 490B C9 06 CMP #6
444 490D F0 1D BEQ CSTART
445 490F A6 1F LDX ATSEQU
446 4911 F0 08 BEQ CPROPT
447 4913 A9 00 LDA #0
448 4915 85 1F STA ATSEQU
449 4917 A9 04 LDA #4
450 4919 D0 2E BNE PCEXT1
451 491B A6 19 CPROPT LDX OPTION;IF OPTION SCREEN
452 491D E0 03 CPX #3; THEN CHANGE PARAMS
453 491F 90 26 BCC PCEXIT
454 4921 C9 03 PRESSW CMP #3
455 4923 F0 2F BEQ COPTON
456 4925 C9 05 CMP #5
457 4927 F0 12 BEQ CSELEC
458 4929 4C 94 48 JMP LOOP
459 492C A9 00 CSTART LDA #0
460 492E 85 20 STA GMOVRF;START FUNCTION-NEW GAME
461 4930 85 19 STA OPTION
462 4932 85 1F STA ATSEQU
463 4934 A9 01 LDA #1
464 4936 85 1C STA RSTRTF
465 4938 4C 3E 48 JMP REINIT
466 493B A5 1A CSELEC LDA NUMPLY
467 493D D0 04 BNE PCNSE1;PROCESS SELECT CHANGES
468 493F A9 01 LDA #1
469 4941 D0 02 BNE PCNSE2
470 4943 A9 00 PCNSE1 LDA #0
471 4945 85 1A PCNSE2 STA NUMPLY
472 4947 A9 03 PCEXIT LDA #3
473 4949 85 19 PCEXT1 STA OPTION
474 494B 85 4D STA ATRACT
475 494D A9 07 LDA #7
476 494F 85 1D STA ATCLOK
477 4951 4C 94 48 JMP LOOP
478 4954 A5 1B COPTON LDA DIFOPT
479 4956 C9 02 CMP #2
480 4958 B0 04 BCS PCNOP1;PROCESS OPTION CHANGES
481 495A E6 1B INC DIFOPT
482 495C D0 E9 BNE PCEXIT
483 495E C9 0C PCNOP1 CMP #$0C
484 4960 F0 06 BEQ PCNOP2
485 4962 E6 1B INC DIFOPT
486 4964 E6 1B INC DIFOPT
487 4966 D0 DF BNE PCEXIT
488 4968 A9 00 PCNOP2 LDA #0
489 496A 85 1B STA DIFOPT
490 496C F0 D9 BEQ PCEXIT
491 ;
492 ; DISPLAY LIST INTERRUPT VECTOR
493 ;
494 496E 48 DLIV PHA
495 496F 8A TXA
496 4970 48 PHA
497 4971 A6 18 LDX DLICNT;DLI COUNT
498 4973 D0 0A BNE DLI2ND
499 4975 A9 40 LDA #>PACCHR
500 4977 8D 0A D4 STA WSYNC
501 497A 8D 09 D4 STA CHBASE
502 497D D0 53 BNE DLIXIT
503 497F E0 01 DLI2ND CPX #1
504 4981 D0 0F BNE DLI3RD
505 4983 A5 61 LDA ACOLR4;-$DA PLAYER 1-2 MSG
506 4985 A6 5E LDX ACOLR1;-$3A LT ORANGE COLOR
507 4987 8D 0A D4 STA WSYNC
508 498A 8D 17 D0 STA COLPF1
509 498D 8E 18 D0 STX COLPF2
510 4990 D0 40 BNE DLIXIT
511 4992 E0 02 DLI3RD CPX #2
512 4994 D0 0E BNE DLI4TH
513 4996 A5 A0 LDA FRUCLR; FRUIT COLOR
514 4998 45 4F EOR COLRSH
515 499A 25 4E AND DRKMSK
516 499C 8D 0A D4 STA WSYNC
517 499F 8D 17 D0 STA COLPF1
518 49A2 D0 2E BNE DLIXIT
519 49A4 E0 03 DLI4TH CPX #3
520 49A6 D0 0A BNE DLI5TH
521 49A8 A5 5F LDA ACOLR2
522 49AA 8D 0A D4 STA WSYNC
523 49AD 8D 17 D0 STA COLPF1
524 49B0 D0 20 BNE DLIXIT
525 49B2 E0 04 DLI5TH CPX #4
526 49B4 D0 0F BNE LSTDLI
527 49B6 A5 60 LDA ACOLR3;YELLOW COLOR
528 49B8 A6 61 LDX ACOLR4
529 49BA 8D 0A D4 STA WSYNC
530 49BD 8E 16 D0 STX COLPF0
531 49C0 8D 19 D0 STA COLPF3
532 49C3 D0 0D BNE DLIXIT
533 49C5 A2 03 LSTDLI LDX #3
534 49C7 A9 00 LDA #0
535 49C9 9D 12 D0 DLICLP STA COLPM0,X
536 49CC CA DEX
537 49CD 10 FA BPL DLICLP
538 49CF 8D 19 D0 STA COLPF3
539 49D2 E6 18 DLIXIT INC DLICNT
540 49D4 68 PLA
541 49D5 AA TAX
542 49D6 68 PLA
543 49D7 40 RTI
544 ;
545 ; DLI VECTOR FOR OPT & TITLE SCREENS
546 ;
547 49D8 48 OPDLIV PHA
548 49D9 8A TXA
549 49DA 48 PHA
550 49DB 98 TYA
551 49DC 48 PHA
552 49DD A6 18 LDX DLICNT
553 49DF D0 15 BNE OPDLI1
554 49E1 A4 5F LDY ACOLR2
555 49E3 A5 5E LDA ACOLR1
556 49E5 A2 20 LDX #>OPTCHR
557 49E7 8D 0A D4 STA WSYNC
558 49EA 8E 09 D4 STX CHBASE
559 49ED 8D 18 D0 STA COLPF2
560 49F0 8C 17 D0 STY COLPF1
561 49F3 4C FF 49 JMP OPDLIX
562 49F6 BD A0 68 OPDLI1 LDA OCINDX,X
563 49F9 8D 0A D4 STA WSYNC
564 49FC 8D 09 D4 STA CHBASE
565 49FF E6 18 OPDLIX INC DLICNT
566 4A01 68 PLA
567 4A02 A8 TAY
568 4A03 68 PLA
569 4A04 AA TAX
570 4A05 68 PLA
571 4A06 40 RTI
572 ;
573 ; VERTICAL BLANK INTERRUPT VECTOR
574 ;
575 4A07 A9 00 VBLANK LDA #0
576 4A09 85 18 STA DLICNT
577 4A0B C6 45 DEC BCOUNT
578 4A0D 20 87 4A JSR VBSUBS
579 4A10 A5 1F LDA ATSEQU
580 4A12 D0 07 BNE VBEXIT
581 4A14 A5 E5 LDA VFREEZ
582 4A16 D0 03 BNE VBEXIT
583 4A18 20 B7 52 JSR TUNNEL
584 4A1B 4C 62 E4 VBEXIT JMP XITVBV; EXIT VECTOR
585 ;
586 4A1E A9 00 OPTTTL LDA #0