0100 ;SAVE#D:KRAZYMZE.M65 0110 ;5-28-88 9:00 P.M. 0120 ; 0130 .OPT NO LIST 0140 *= $90 0150 LO 1 0160 HI 1 0170 I 2 0180 J 2 0190 ML 1 0200 MH 1 0210 ; 0220 D1X 1 0230 D2X 1 0240 D1Y 1 0250 D2Y 1 0260 GX 1 0270 GX1 1 0280 COLS 1 0290 GOLD 2 0300 TOTL 2 0310 P0YP 1 0320 P1YP 1 0330 LHD 1 0340 HHD 1 0350 GCNT 1 0360 PX 1 0370 PY 1 0380 XHD 1 0390 JHD 1 0400 HS1 1 0410 HS2 1 0420 LINES 1 0430 MZNUM 1 0440 COLOR 1 0450 WSCN 2 ;gr5 a or b 0460 VFLG 1 0470 TFLG 1 0480 TIM 1 0490 SCR1 2 0500 SCR2 2 0510 TB1 8 0520 TB2 8 0530 .OPT LIST 0540 .OPT NO LIST 0550 ; 0560 RANDOM = $D20A 0570 HPOSP0 = $D000 0580 HPOSP1 = $D001 0590 HITCLR = $D01E 0600 MYSET = $5000 0610 ; 0620 PMB = $8800 0630 PLR0 = $8C00 0640 PLR1 = $8D00 0650 PLR2 = $8E00 0660 PLR3 = $8F00 0670 MAZE0 = $9000 0680 GR5A = $9800 0690 GR5B = $9B00 0700 ; 0710 *= $3000 0720 BEGIN JSR ZHSC ;0 scores 0730 START LDA #0 0740 STA VFLG ;vbi flag 0750 LDA #$10 0760 LDX #2 ;set final 0770 FSLP STA FSC1,X ;scores 0780 STA FSC2,X 0790 DEX 0800 BPL FSLP 0810 LDA # >MYSET ;chr set 0820 STA 756 0830 JSR SETPMG ;PMG setup 0840 LDA #7 ;install vbi 0850 LDX # >VBI 0860 LDY # DL5 1350 STA $0231 1360 LDA #62 ;screen on 1370 STA $022F 1380 LDA D1X ;dot positions 1390 STA PX 1400 LDA D1Y 1410 STA PY 1420 LDA #1 ;plot color 1430 STA COLOR 1440 LDA # GR5A 1470 STA WSCN+1 1480 JSR PLOT5 1490 LDA #3 ;plot color 1500 STA COLOR 1510 LDA D2X ;dot pos 1520 STA PX 1530 LDA D2Y 1540 STA PY 1550 LDA # GR5B 1580 STA WSCN+1 1590 JSR PLOT5 1600 LDA #0 ;ghosties again 1610 STA GX 1620 LDA #$80 1630 STA GX1 1640 ; 1650 ;move 1st dot,then 2nd 1660 ; 1670 STC1 LDA 632 ;stick 0 1680 CMP #$0F 1690 BNE ST1 1700 JMP STC2 1710 ST1 CMP #7 ;right? 1720 BNE TRL 1730 LDA D1X 1740 CMP #79 1750 BEQ PJ1 1760 JSR LOKR ;look right 1770 BCS PJ1 1780 JSR ERSD1 ;erase dot 1790 INC D1X 1800 JSR SHWD1 ;plot it in 1810 JSR WAIT ;new position 1820 JMP PJ1 1830 TRL CMP #11 ;left? 1840 BNE TRU 1850 LDA D1X 1860 CMP #1 1870 BEQ PJ1 1880 JSR LOKL 1890 BCS PJ1 1900 JSR ERSD1 1910 DEC D1X 1920 JSR SHWD1 1930 JSR WAIT 1940 JMP PJ1 1950 TRU CMP #14 1960 BNE TRD 1970 LDA D1Y 1980 CMP #1 1990 BEQ PJ1 2000 JSR LOKU 2010 BCS PJ1 2020 JSR ERSD1 2030 DEC D1Y 2040 JSR SHWD1 2050 JSR WAIT 2060 JMP PJ1 2070 TRD CMP #13 2080 BNE PJ1 2090 LDA D1Y 2100 CMP #21 2110 BEQ PJ1 2120 JSR LOKD 2130 BCS PJ1 2140 JSR ERSD1 2150 INC D1Y 2160 JSR SHWD1 2170 JSR WAIT 2180 PJ1 JMP STC2 2190 ; 2200 ;erase top dot 2210 ; 2220 ERSD1 LDA #0 2230 STA COLOR 2240 SED1 LDA D1X 2250 STA PX 2260 LDA D1Y 2270 STA PY 2280 LDA # GR5A 2310 STA WSCN+1 2320 STA HITCLR 2330 JSR PLOT5 2340 RTS 2350 ; 2360 ;plot top dot 2370 ; 2380 SHWD1 LDA #1 2390 STA COLOR 2400 JMP SED1 2410 ; 2420 ;move the 2nd dot 2430 ; 2440 STC2 LDA $0279 ;stick 1 2450 CMP #$0F 2460 BEQ PSJ 2470 CMP #7 ;left 2480 BNE T2L 2490 LDA D2X 2500 CMP #79 2510 BEQ PSJ 2520 JSR L2R ;look right 2530 BCS PSJ 2540 JSR ERSD2 ;erase dot 2550 INC D2X 2560 L2L JSR SHWD2 ;plot dot 2570 JSR WAIT 2580 JMP PSJ 2590 T2L CMP #11 2600 BNE T2U 2610 LDA D2X 2620 CMP #1 2630 BEQ PSJ 2640 JSR L2F 2650 BCS PSJ 2660 JSR ERSD2 2670 DEC D2X 2680 JMP L2L 2690 T2U CMP #14 2700 BNE T2D 2710 LDA D2Y 2720 CMP #1 2730 BEQ PSJ 2740 JSR L2U 2750 BCS PSJ 2760 JSR ERSD2 2770 DEC D2Y 2780 JMP L2L 2790 T2D CMP #13 2800 BNE PSJ 2810 LDA D2Y 2820 CMP #21 2830 BEQ PSJ 2840 JSR L2D 2850 BCS PSJ 2860 JSR ERSD2 2870 INC D2Y 2880 JMP L2L 2890 ; 2900 ;is there a winner 2910 ; 2920 PSJ JSR WINER? 2930 BCS NXGME 2940 STA HITCLR 2950 JSR CHKCOL 2960 ; 2970 LDA GX ;reset ghosts 2980 CMP #$DA 2990 BCC FOK 3000 JSR DEFP0 3010 FOK LDA GX1 3020 CMP #$DA 3030 BCC SOK 3040 JSR DEFP1 3050 SOK LDA 53279 ;chk for 3060 CMP #5 ;select 3070 BNE SSK 3080 PLA 3090 PLA 3100 JMP START 3110 SSK JMP STC1 3120 ; 3130 NXGME RTS ;someone won 3140 ; 3150 ;erase bottom dot 3160 ; 3170 ERSD2 LDA D2X 3180 STA PX 3190 LDA D2Y 3200 STA PY 3210 LDA # GR5B 3240 STA WSCN+1 3250 LDA #0 3260 STA COLOR 3270 JSR PLOT5 3280 RTS 3290 ; 3300 ;plot bottom dot 3310 ; 3320 SHWD2 LDA D2X 3330 STA PX 3340 LDA D2Y 3350 STA PY 3360 LDA #3 3370 STA COLOR 3380 STA HITCLR 3390 JSR PLOT5 3400 RTS 3410 ; 3420 ;setup dots 3430 ; 3440 SETUP LDA #1 3450 STA D1X 3460 STA D2X 3470 LDA #11 3480 STA D1Y 3490 STA D2Y 3500 RTS 3510 ; 3520 ;display list for gr 5 3530 ; 3540 DL5 .BYTE $70,$70,$70,$4A 3550 .WORD GR5A 3560 .BYTE $0A,$0A,$0A,$0A,$0A 3570 .BYTE $0A,$0A,$0A,$0A,$0A 3580 .BYTE $0A,$0A,$0A,$0A,$0A 3590 .BYTE $0A,$0A,$0A,$0A,$0A 3600 .BYTE $0A,$0A,$46 3610 .WORD TITLE 3620 .BYTE $4A 3630 .WORD GR5B 3640 .BYTE $0A,$0A,$0A,$0A,$0A 3650 .BYTE $0A,$0A,$0A,$0A,$0A 3660 .BYTE $0A,$0A,$0A,$0A,$0A 3670 .BYTE $0A,$0A,$0A,$0A,$0A 3680 .BYTE $0A,$0A,$41 3690 .WORD DL5 3700 ; 3710 WAITL LDA #$FE 3720 BNE WT1 3730 WAIT LDA #$FF 3740 WT1 STA $14 3750 WLP LDA $14 3760 BNE WLP 3770 STA 77 3780 RTS 3790 ; 3800 ;clear maze 3810 ; 3820 CLR0 LDA # MAZE0 3850 STA HI 3860 C03 LDX #7 ;7.5 pages 3870 C02 LDY #0 3880 LDA #0 3890 C01 STA (LO),Y 3900 DEY 3910 BNE C01 3920 INC HI 3930 DEX 3940 BPL C02 3950 RTS 3960 ; 3970 ;prepare maze for generation 3980 ; 3990 PRPMZE LDA # MAZE0 4020 STA HI 4030 LDX #22 ;23 lines 4040 PR2 LDY #12 4050 LDA #$80 4060 PR1 STA (LO),Y 4070 INY 4080 CPY #65 4090 BNE PR1 4100 LDA LO 4110 CLC 4120 ADC #80 4130 STA LO 4140 LDA HI 4150 ADC #0 4160 STA HI 4170 DEX 4180 BPL PR2 4190 LDA # MAZE0 4240 ADC # >800 4250 STA HI 4260 LDX #2 ;3 lines 4270 TUN LDY #0 4280 LDA #$80 4290 TUP STA (LO),Y 4300 INY 4310 CPY #79 4320 BNE TUP 4330 LDA LO 4340 CLC 4350 ADC #80 4360 STA LO 4370 LDA HI 4380 ADC #0 4390 STA HI 4400 DEX 4410 BPL TUN 4420 RTS 4430 ; 4440 ;generate the middle maze 4450 ;in Antic mode 4 4460 ; 4470 GENMZ4 LDA # <[MAZE0+381] 4480 STA LO 4490 LDA # >[MAZE0+381] 4500 STA HI 4510 LDX #15 4520 MVU LDA TB41,X 4530 STA TB1,X 4540 DEX 4550 BPL MVU 4560 LDA #6 4570 STA MZNUM 4580 BNE SMZ 4590 ; 4600 ;generate a maze for gr. 5 4610 ; 4620 GENMZ5 LDA # <[MAZE0+901] 4630 STA LO 4640 LDA # >[MAZE0+901] 4650 STA HI 4660 LDX #15 4670 MVT LDA TB51,X 4680 STA TB1,X 4690 DEX 4700 BPL MVT 4710 LDA #$80 4720 STA MZNUM 4730 ; 4740 ;the maze generation is 4750 ;is done here 4760 ; 4770 SMZ LDA #5 4780 LDY #0 4790 STA (LO),Y ;start of maze 4800 GN1 LDA RANDOM ;get rand direct 4810 AND #3 ;0-3 4820 STA XHD ;save it 4830 STA JHD ;twice 4840 GN3 LDA XHD ;get direct 4850 ASL A ;x 2 4860 TAX ;0=rt, 1= up 4870 LDA LO ;2=lft, 3=dn 4880 CLC ;find new pos 4890 ADC TB1,X ;2 away from 4900 STA J ;where we are 4910 LDA HI 4920 ADC TB1+1,X 4930 STA J+1 4940 LDA (J),Y ;what's there 4950 CMP MZNUM ;a wall? 4960 BNE GN2 ;no 4970 LDA XHD ;yes so erase 4980 ASL A ;it 4990 TAX 5000 LDA LO 5010 CLC 5020 ADC TB2,X ;get inbetween 5030 STA I ;location 5040 LDA HI 5050 ADC TB2+1,X 5060 STA I+1 5070 LDA #0 ;zero it 5080 STA (I),Y 5090 INC XHD ;store next 5100 LDA XHD ;direction 5110 STA (J),Y ;in new spot 5120 LDA J ;reset current 5130 STA LO ;location to 5140 LDA J+1 ;new pos 5150 STA HI 5160 JMP GN1 ;again 5170 GN2 INC XHD ;try next 5180 LDA XHD ;direction 5190 AND #3 5200 STA XHD ;if same as 5210 CMP JHD ;old-go back 5220 BNE GN3 ;try this direct 5230 LDY #0 ;going back 5240 LDA (LO),Y 5250 STA XHD 5260 LDA #0 5270 STA (LO),Y 5280 LDA XHD ;have we come 5290 CMP #5 ;back to begin? 5300 BNE GN4 ;no 5310 RTS ;yes-done! 5320 GN4 INC XHD ;try next direct 5330 LDA XHD ;and see if it 5340 AND #3 ;will work 5350 ASL A 5360 TAX 5370 CLC 5380 LDA LO 5390 ADC TB1,X 5400 STA LO 5410 LDA HI 5420 ADC TB1+1,X 5430 STA HI 5440 JMP GN1 5450 ; 5460 ;tables to got rt,lf,up,dn 5470 ;for gr5 and antic 5 5480 ; 5490 TB51 .BYTE 2,0,96,255 5500 .BYTE 254,255,160,0 5510 TB52 .BYTE 1,0,176,255 5520 .BYTE 255,255,80,0 5530 TB41 .BYTE 2,0,176,255 5540 .BYTE 254,255,80,0 5550 TB42 .BYTE 1,0,216,255 5560 .BYTE 255,255,40,0 5570 ; 5580 ;plot routine for gr. 5 5590 ; 5600 PLOT5 LDA PY 5610 ASL A 5620 STA ML 5630 LDA #0 5640 ROL A 5650 STA MH 5660 ASL ML 5670 ROL MH ;X4 5680 LDA ML 5690 STA LHD 5700 LDA MH 5710 STA HHD 5720 ASL ML 5730 ROL MH ;X8 5740 ASL ML 5750 ROL MH ;X16 5760 LDA ML 5770 CLC 5780 ADC LHD 5790 STA ML 5800 LDA MH 5810 ADC HHD 5820 STA MH 5830 LDA WSCN 5840 CLC 5850 ADC ML 5860 STA ML 5870 LDA WSCN+1 5880 ADC MH 5890 STA MH 5900 LDA PX 5910 AND #3 5920 TAX 5930 LDA PX 5940 LSR A 5950 LSR A 5960 CLC 5970 ADC ML 5980 STA LO 5990 LDA MH 6000 ADC #0 6010 STA HI 6020 LDY COLOR 6030 LDA BMASK2,X 6040 AND COLORS,Y 6050 STA LHD 6060 LDA BMASK1,X 6070 LDY #0 6080 AND (LO),Y 6090 ORA LHD 6100 STA (LO),Y 6110 RTS 6120 ; 6130 ;copy maze to gr5 screen 6140 ; 6150 COPYTO5 LDA #0 ;24 lines 6160 STA LINES 6170 STA PX ;reset px 6180 LDA #2 6190 STA COLOR 6200 LDA # GR5A 6230 STA WSCN+1 6240 LDA # MAZE0 6270 STA J+1 6280 NLN LDY #0 6290 NXY LDA (J),Y 6300 BEQ NEXB 6310 STY PX 6320 LDA LINES 6330 STA PY 6340 JSR PLOT5 6350 NEXB INC PX 6360 LDY PX 6370 CPY #80 6380 BNE NXY 6390 INC LINES 6400 LDA LINES 6410 CMP #23 6420 BEQ CDON 6430 LDA J 6440 CLC 6450 ADC #80 6460 STA J 6470 LDA J+1 6480 ADC #0 6490 STA J+1 6500 JMP NLN 6510 CDON LDY #0 6520 MAB LDA GR5A,Y 6530 STA GR5B,Y 6540 LDA GR5A+$0100,Y 6550 STA GR5B+$0100,Y 6560 INY 6570 BNE MAB 6580 RTS 6590 ; 6600 ;clear out gr5 screen memry 6610 ; 6620 CLRGR5 LDA # >GR5A 6630 STA HI 6640 LDA # MAZE0 7400 ADC MH 7410 STA I+1 7420 TXA 7430 CLC 7440 ADC I 7450 STA I 7460 LDA I+1 7470 ADC #0 7480 STA I+1 7490 LDY #0 7500 LDA (I),Y 7510 CMP #$80 7520 BNE LOK 7530 SEC 7540 RTS 7550 LOK CLC 7560 RTS 7570 ; 7580 ;look routines for 2nd player 7590 ; 7600 L2R LDA D2Y 7610 LDX D2X 7620 INX 7630 JSR MUL80 7640 RTS 7650 ; 7660 L2F LDA D2Y 7670 LDX D2X 7680 DEX 7690 JSR MUL80 7700 RTS 7710 ; 7720 L2U LDX D2Y 7730 DEX 7740 TXA 7750 LDX D2X 7760 JSR MUL80 7770 RTS 7780 ; 7790 L2D LDX D2Y 7800 INX 7810 TXA 7820 LDX D2X 7830 JSR MUL80 7840 RTS 7850 ; 7860 ;display list for antic 4 scrn 7870 ; 7880 DL4 .BYTE $70,$70,$70,$44 7890 .WORD MAZE0 7900 .BYTE $04,$04,$04,$04,$04 7910 .BYTE $04,$04,$04,$04,$04 7920 .BYTE $04,$04,$04,$04,$04 7930 .BYTE $04,$04,$04,$04,$04 7940 .BYTE $04,$46 7950 .WORD SCRTXT 7960 .BYTE $41 7970 .WORD DL4 7980 ; 7990 ;see if there's a winner 8000 ;add 100 to winner's score 8010 ; 8020 WINER? LDA D1X 8030 CMP #77 8040 BEQ MZ1 8050 LDA D2X 8060 CMP #77 8070 BEQ MZ2 8080 CLC 8090 RTS 8100 MZ1 INC FSC1 8110 JSR AHUN1 8120 SEC 8130 RTS 8140 MZ2 INC FSC2 8150 JSR AHUN2 8160 SEC 8170 RTS 8180 ; 8190 ;set up for middle maze 8200 ; 8210 PRPMID JSR CLR0 8220 LDA # MAZE0 8250 STA HI 8260 LDX #20 8270 PMA LDY #0 8280 LDA #6 8290 PMC STA (LO),Y 8300 INY 8310 CPY #39 8320 BNE PMC 8330 LDA LO 8340 CLC 8350 ADC #40 8360 STA LO 8370 LDA HI 8380 ADC #0 8390 STA HI 8400 DEX 8410 BPL PMA 8420 RTS 8430 ; 8440 ;setup player graphics 8450 ; 8460 SETPMG LDA #62 ;single line res 8470 STA $022F 8480 LDA #1 8490 STA $026F 8500 LDA #$66 ;colors 8510 STA $02C0 8520 LDA #$26 8530 STA $02C1 8540 LDA #$0E 8550 STA $02C2 8560 STA $02C3 8570 LDA #0 8580 STA HPOSP0 8590 STA HPOSP1 8600 STA HPOSP0+2 8610 LDA #1 ;width 8620 STA $D008 8630 STA $D009 8640 STA $D00A 8650 STA $D00B 8660 LDA #3 8670 STA $D01D 8680 LDA # >PMB 8690 STA $D407 8700 RTS 8710 ; 8720 ;put player at random vertical 8730 ;position on screen within 8740 ;a certain range 8750 ; 8760 DEFP1 JSR CLRP1 ;does bottom 8770 LDA RANDOM ;ghost 8780 AND #$1F 8790 CLC 8800 ADC #$47 8810 STA P1YP 8820 LDX #0 8830 TAY 8840 P1L LDA PDF1,X 8850 STA PLR1,Y 8860 STA PLR1+$64,Y 8870 INY 8880 STA PLR1,Y 8890 STA PLR1+$64,Y 8900 INY 8910 INX 8920 CPX #12 8930 BNE P1L 8940 LDY P1YP 8950 LDA #$14 8960 STA PLR3+4,Y 8970 STA PLR3+5,Y 8980 STA PLR3+$68,Y 8990 STA PLR3+$69,Y 9000 LDA #$1C 9010 STA PLR3+$0A,Y 9020 STA PLR3+$0B,Y 9030 STA PLR3+$6E,Y 9040 STA PLR3+$6F,Y 9050 RTS 9060 ; 9070 ;place top ghost on screen 9080 ; 9090 DEFP0 JSR CLRP0 9100 LDA RANDOM 9110 AND #$1F 9120 CLC 9130 ADC #$20 9140 STA P0YP 9150 LDX #0 9160 LDY P0YP 9170 P0L LDA PDF1,X 9180 STA PLR0,Y 9190 STA PLR0+$64,Y 9200 INY 9210 STA PLR0,Y 9220 STA PLR0+$64,Y 9230 INY 9240 INX 9250 CPX #12 9260 BNE P0L 9270 LDA #$14 9280 LDY P0YP 9290 STA PLR2+4,Y 9300 STA PLR2+5,Y 9310 STA PLR2+$68,Y 9320 STA PLR2+$69,Y 9330 LDA #$1C 9340 STA PLR2+$0A,Y 9350 STA PLR2+$0B,Y 9360 STA PLR2+$6E,Y 9370 STA PLR2+$6F,Y 9380 RTS 9390 ; 9400 ;erase players 0 & 2 9410 ; 9420 CLRP0 LDX #23 9430 LDA #0 9440 LDY P0YP 9450 C0L STA PLR0,Y 9460 STA PLR2,Y 9470 STA PLR0+$64,Y 9480 STA PLR2+$64,Y 9490 INY 9500 DEX 9510 BPL C0L 9520 RTS 9530 ; 9540 ;erase players 1 & 3 9550 ; 9560 CLRP1 LDX #23 9570 LDA #0 9580 LDY P1YP 9590 C1L STA PLR1,Y 9600 STA PLR1+$64,Y 9610 STA PLR3,Y 9620 STA PLR3+$64,Y 9630 INY 9640 DEX 9650 BPL C1L 9660 RTS 9670 ; 9680 ;the ghosties 9690 ; 9700 PDF1 .BYTE $1C,$3E,$6B,$7F 9710 .BYTE $7F,$63,$7F,$7F 9720 .BYTE $7F,$7F,$DA,$00 9730 ; 9740 ;move the ghosts 9750 ; 9760 MGHOST INC GX 9770 INC GX1 9780 LDA GX 9790 STA HPOSP0 9800 STA HPOSP0+2 9810 LDA GX1 9820 STA HPOSP1 9830 STA HPOSP1+2 9840 RTS 9850 ; 9860 ;clear out all plyrs 9870 ; 9880 CLPLRS LDX #0 9890 TXA 9900 CP1 STA PLR0,X 9910 STA PLR1,X 9920 STA PLR2,X 9930 STA PLR3,X 9940 INX 9950 BNE CP1 9960 RTS 9970 ; 9980 ;chekc for collisions 9990 ;send anyone hit back to 010000 ;beginning of maze 010010 ; 010020 CHKCOL LDA $D004 010030 STA COLS 010040 AND #1 010050 BEQ KB 010060 FIR JSR ERSD1 010070 LDA #1 010080 STA D1X 010090 LDA #11 010100 STA D1Y 010110 JSR SHWD1 010120 RTS 010130 KB LDA COLS 010140 AND #4 010150 BEQ TRP1 010160 SCD JSR ERSD2 010170 LDA #1 010180 STA D2X 010190 LDA #11 010200 STA D2Y 010210 JSR SHWD2 010220 RTS 010230 ; 010240 TRP1 LDA $D005 010250 STA COLS 010260 AND #1 010270 BEQ KC 010280 JMP FIR 010290 KC LDA COLS 010300 AND #4 010310 BNE SCD 010320 RTS 010330 ; 010340 ;the vertical blank interrupt 010350 ;make some sounds,move the 010360 ;ghosts, & change their 010370 ;luminance 010380 ; 010390 VBI LDA VFLG ;off or 010400 BNE VVV ;on 010410 LDA #0 ;no sound 010420 STA $D200 010430 STA $D201 010440 BEQ NOV 010450 VVV JSR MGHOST 010460 INC GCNT 010470 LDA GCNT ;for luminance 010480 AND #3 ;changes in 010490 TAX ;color 010500 STX GCNT 010510 LDA VP1,X 010520 STA $02C0 010530 LDA VP2,X 010540 STA $02C1 010550 LDA TFLG ;title flag 010560 BEQ NOCHK ;don't chk for 010570 JSR CHKCOL ;collisions 010580 ; 010590 NOCHK DEC TIM ;on title 010600 LDA TIM ;screen 010610 BNE NOV 010620 INC NTX 010630 LDA NTX 010640 AND #3 ;play notes 010650 STA NTX 010660 TAX 010670 LDA #2 010680 STA TIM 010690 LDA NOTE,X 010700 STA $D200 010710 LDA #$A6 010720 STA $D201 010730 NOV JMP $E462 ;xit 010740 ; 010750 ;the middle maze 010760 ; 010770 GAME2 LDA # DL4 010800 STA $0231 010810 JSR STOPAL ;no ghosts 010820 LDA #$94 ;screen colrs 010830 STA $02C4 010840 LDA #$F6 010850 STA $02C5 010860 LDA #$44 010870 STA $02C6 010880 JSR PRPMID ;prepare middle 010890 JSR GENMZ4 ;maze & generate 010900 JSR PUTGLD ;fill w/gold 010910 LDA #62 010920 STA $022F ;screen on 010930 JSR COLLECT ;go for gold! 010940 RTS 010950 ; 010960 ;fill the maze with gold 010970 ; 010980 PUTGLD LDA # MAZE0 011010 STA HI 011020 LDA #0 011030 STA GOLD 011040 STA GOLD+1 011050 LDX #18 011060 GLL LDA LO 011070 CLC 011080 ADC #40 011090 STA LO 011100 LDA HI 011110 ADC #0 011120 STA HI 011130 LDY #1 011140 GLP LDA (LO),Y 011150 BNE GNY 011160 LDA #7 ;gold 011170 STA (LO),Y 011180 INC GOLD 011190 LDA GOLD 011200 BNE GNY 011210 INC GOLD+1 011220 GNY INY 011230 CPY #38 011240 BNE GLP 011250 DEX 011260 BPL GLL 011270 LDA GOLD 011280 SEC 011290 SBC #2 011300 STA GOLD 011310 LDA GOLD+1 011320 SBC #0 011330 STA GOLD+1 011340 RTS 011350 ; 011360 ;here's where we fight over 011370 ;the gold coins 011380 ; 011390 COLLECT LDA #1 ;staring pos. 011400 STA D1X 011410 LDA #10 011420 STA D1Y 011430 JSR MCH1 ;show man 011440 LDA #37 ;2nd man 011450 STA D2X 011460 LDA #10 011470 STA D2Y 011480 JSR MCH2 ;show him 011490 LDA #0 ;zero scores 011500 LDX #3 011510 SCC STA SCR1,X 011520 DEX 011530 BPL SCC 011540 LDX #2 ;screen scores 011550 LDA #$10 011560 SCF STA SCRTXT+10,X 011570 STA SCRTXT+16,X 011580 DEX 011590 BPL SCF 011600 ; 011610 CS1 JSR MCH1 ;show 1st man 011620 LDA $0278 ;stick 0 011630 CMP #$0F 011640 BEQ CS2 011650 CMP #7 011660 BNE CTL ;move right? 011670 JSR CLR ;chk 4 wall,etc 011680 BCS CS2 011690 JSR CHGLD1 ;chk for gold 011700 JSR PCHR1 011710 INC D1X 011720 CGEN JSR MCH1 ;show move 011730 JSR WAITL ;delay 011740 JMP CS2 ;plyr 2 011750 ; 011760 CTL CMP #11 ;left? 011770 BNE CTU 011780 JSR CLF 011790 BCS CS2 011800 JSR CHGLD1 011810 JSR PCHR1 011820 DEC D1X 011830 JMP CGEN 011840 ; 011850 CTU CMP #14 ;up 011860 BNE CTD 011870 JSR CLU 011880 BCS CS2 011890 JSR CHGLD1 011900 JSR PCHR1 011910 DEC D1Y 011920 JMP CGEN 011930 CTD CMP #13 ;down? 011940 BNE CS2 011950 JSR CLD 011960 BCS CS2 011970 JSR CHGLD1 011980 JSR PCHR1 011990 INC D1Y 012000 JMP CGEN 012010 ; 012020 CS2 JSR MCH2 ;repeat for 012030 LDA $0279 ;2nd palyr 012040 CMP #$0F 012050 BEQ MWIN 012060 CMP #7 012070 BNE ELF 012080 JSR C2R 012090 BCS MWIN 012100 JSR CHGLD2 012110 JSR PCH2 012120 INC D2X 012130 EGEN JSR MCH2 012140 JSR WAITL 012150 JMP MWIN 012160 ; 012170 ELF CMP #11 012180 BNE ELU 012190 JSR C2L 012200 BCS MWIN 012210 JSR CHGLD2 012220 JSR PCH2 012230 DEC D2X 012240 JMP EGEN 012250 ; 012260 ELU CMP #14 012270 BNE ELD 012280 JSR C2U 012290 BCS MWIN 012300 JSR CHGLD2 012310 JSR PCH2 012320 DEC D2Y 012330 JMP EGEN 012340 ; 012350 ELD CMP #13 012360 BNE MWIN 012370 JSR C2D 012380 BCS MWIN 012390 JSR CHGLD2 012400 JSR PCH2 012410 INC D2Y 012420 JMP EGEN 012430 ; 012440 ;has anyone won? 012450 ; 012460 MWIN LDA SCR1 ;get sum 012470 CLC 012480 ADC SCR2 012490 STA TOTL 012500 LDA SCR1+1 012510 ADC SCR2+1 012520 STA TOTL+1 012530 CMP GOLD+1 ;does sum = 012540 BNE FLIP ;total gold? 012550 LDA TOTL 012560 CMP GOLD 012570 BNE FLIP 012580 RTS ;somebody won 012590 ; 012600 FLIP LDA $D01F ;select? 012610 CMP #5 012620 BNE FFP 012630 PLA 012640 PLA 012650 JMP START ;yes,start ovr 012660 FFP JMP CS1 012670 ; 012680 ;chk for walls 012690 ; 012700 CLR LDA D1Y 012710 LDX D1X 012720 INX 012730 CLLL JSR MUL40 012740 LDY #0 012750 LDA (I),Y 012760 CMP #6 012770 BEQ WALL 012780 GG CLC 012790 RTS 012800 WALL SEC 012810 RTS 012820 ; 012830 CLF LDA D1Y 012840 LDX D1X 012850 DEX 012860 JMP CLLL 012870 ; 012880 CLU LDY D1Y 012890 DEY 012900 TYA 012910 LDX D1X 012920 JMP CLLL 012930 ; 012940 CLD LDY D1Y 012950 INY 012960 TYA 012970 LDX D1X 012980 JMP CLLL 012990 ; 013000 ;chks for wall for man 2 013010 ; 013020 C2R LDA D2Y 013030 LDX D2X 013040 INX 013050 JMP CLLL 013060 ; 013070 C2L LDA D2Y 013080 LDX D2X 013090 DEX 013100 JMP CLLL 013110 ; 013120 C2U LDY D2Y 013130 DEY 013140 TYA 013150 LDX D2X 013160 JMP CLLL 013170 ; 013180 C2D LDY D2Y 013190 INY 013200 TYA 013210 LDX D2X 013220 JMP CLLL 013230 ; 013240 ;zero out top 013250 ; 013260 PCHR1 LDA D1Y 013270 LDX D1X 013280 JSR MUL40 013290 LDY #0 013300 LDA #0 013310 STA (I),Y 013320 RTS 013330 ; 013340 ;zero out bot man 013350 ; 013360 PCH2 LDA D2Y 013370 LDX D2X 013380 JSR MUL40 013390 LDY #0 013400 TYA 013410 STA (I),Y 013420 RTS 013430 ; 013440 ;show top man 013450 ; 013460 MCH1 LDA D1Y 013470 LDX D1X 013480 JSR MUL40 013490 LDY #0 013500 LDA #8 013510 STA (I),Y 013520 RTS 013530 ; 013540 ;show bot man 013550 ; 013560 MCH2 LDA D2Y 013570 LDX D2X 013580 JSR MUL40 013590 LDY #0 013600 LDA #9 013610 STA (I),Y 013620 RTS 013630 ; 013640 ;mult x 40 to get screen pos 013650 ; 013660 MUL40 ASL A 013670 STA LHD 013680 LDA #0 013690 ROL A 013700 STA HHD 013710 ASL LHD ;x4 013720 ROL HHD 013730 ASL LHD ;x8 013740 ROL HHD 013750 LDA LHD 013760 STA ML 013770 LDA HHD 013780 STA MH 013790 ASL LHD ;x16 013800 ROL HHD 013810 ASL LHD ;32 013820 ROL HHD 013830 LDA LHD 013840 CLC 013850 ADC ML 013860 STA ML 013870 LDA HHD 013880 ADC MH 013890 STA MH 013900 LDA # MAZE0 013950 ADC MH 013960 STA I+1 013970 TXA 013980 CLC 013990 ADC I 014000 STA I 014010 LDA I+1 014020 ADC #0 014030 STA I+1 014040 RTS 014050 ; 014060 ;is it gold we are moving 014070 ;onto- for top man 014080 ; 014090 CHGLD1 CMP #7 ;gold? 014100 BEQ GD1 ;yes 014110 RTS 014120 GD1 JSR BELL ;sounds 014130 INC SCR1 ;inc. score 014140 BNE DGA 014150 INC SCR1+1 014160 DGA LDX #2 ;show score 014170 INC SCRTXT+10,X 014180 LDA SCRTXT+10,X 014190 DGC CMP #$1A 014200 BCC FST 014210 LDA #$10 014220 STA SCRTXT+10,X 014230 DEX 014240 BMI FST 014250 INC SCRTXT+10,X 014260 LDA SCRTXT+10,X 014270 JMP DGC 014280 ; 014290 FST JSR ADDH1 ;add 1 to hi 014300 LDX #2 ;scores 014310 INC FSC1,X 014320 LDA FSC1,X 014330 FSR CMP #$1A 014340 BCC DGB 014350 LDA #$10 014360 STA FSC1,X 014370 DEX 014380 BMI DGB 014390 INC FSC1,X 014400 LDA FSC1,X 014410 JMP FSR 014420 DGB RTS 014430 ; 014440 ;do same for bottom man 014450 ; 014460 CHGLD2 CMP #7 014470 BEQ EG1 014480 RTS 014490 EG1 JSR BELL 014500 INC SCR2 014510 BNE EGA 014520 INC SCR2+1 014530 EGA LDX #2 014540 INC SCRTXT+16,X 014550 LDA SCRTXT+16,X 014560 EGC CMP #$1A 014570 BCC FSU 014580 LDA #$10 014590 STA SCRTXT+16,X 014600 DEX 014610 BMI FSU 014620 INC SCRTXT+16,X 014630 LDA SCRTXT+16,X 014640 JMP EGC 014650 ; 014660 FSU JSR ADDH2 014670 LDX #2 014680 INC FSC2,X 014690 LDA FSC2,X 014700 FSV CMP #$1A 014710 BCC EGB 014720 LDA #$10 014730 STA FSC2,X 014740 DEX 014750 BMI EGB 014760 INC FSC2,X 014770 LDA FSC2,X 014780 JMP FSV 014790 EGB RTS 014800 ; 014810 ;intermission time 014820 ;show current scores 014830 ; 014840 NTRMSS LDA # ILST 014870 STA $0231 014880 JSR STOPAL 014890 SS1 LDA $0284 014900 BNE SS2 014910 RR1 LDA $0284 014920 BEQ RR1 014930 RTS 014940 SS2 LDA $0285 014950 BNE SS1 014960 RR2 LDA $0285 014970 BEQ RR2 014980 RTS 014990 ; 015000 ;stop vbi & remove players 015010 ; 015020 STOPAL LDA #0 015030 STA VFLG 015040 LDX #3 015050 STP STA HPOSP0,X 015060 DEX 015070 BPL STP 015080 RTS 015090 ; 015100 ;intermission display list 015110 ; 015120 ILST .BYTE $70,$70,$70,$70 015130 .BYTE $70,$70,$47 015140 .WORD PS1 015150 .BYTE $70,$70,$70,$47 015160 .WORD PS2 015170 .BYTE $70,$70,$70,$47 015180 .WORD FIRMS 015190 .BYTE $41 015200 .WORD ILST 015210 ; 015220 ;misc. data & tables 015230 ; 015240 VP1 .BYTE $44,$44,$4A,$4A 015250 VP2 .BYTE $24,$24,$2A,$2A 015260 TITLE .SBYTE " krAzy MAZES " 015270 SCRTXT .SBYTE " scores 1:000 2:000 " 015280 PS1 .SBYTE " SCORE 1: " 015290 FSC1 .SBYTE "000 " 015300 PS2 .SBYTE " SCORE 2: " 015310 FSC2 .SBYTE "000 " 015320 FIRMS .SBYTE " press fire " 015330 ; 015340 ;bell sound for middle maze 015350 ; 015360 BELL LDA #23 015370 STA $D200 015380 LDX #$AA 015390 STX $D201 015400 JSR WAIT 015410 LDA #0 015420 STA $D201 015430 RTS 015440 ; 015450 ;frequencies for bell 015460 ; 015470 NTX .BYTE 0 015480 NOTE .BYTE 132,0,143,0 015490 ; 015500 ;introduction screen w/ghosts 015510 ; 015520 INTRO LDA # INTL 015550 STA $0231 015560 CCC LDA GX 015570 CMP #$DA 015580 BCC IIA 015590 JSR DEFP0 015600 IIA LDA GX1 015610 CMP #$DA 015620 BCC IIB 015630 JSR DEFP1 015640 IIB LDA $D01F 015650 CMP #6 015660 BNE IIC 015670 RTS 015680 IIC CMP #3 015690 BNE CCC 015700 JSR ZHSC 015710 JMP CCC 015720 ; 015730 ;zero out high scores 015740 ; 015750 ZHSC LDA #$10 015760 LDX #4 015770 IIL STA HSC1,X 015780 STA HSC2,X 015790 DEX 015800 BPL IIL 015810 RTS 015820 ; 015830 ;introduction display list 015840 ; 015850 INTL .BYTE $70,$70,$70 015860 .BYTE $70,$47 015870 .WORD INTIL 015880 .BYTE $07 015890 .BYTE $70,$70,$46 015900 .WORD CREDIT 015910 .BYTE $70,$70,$70,$70,$46 015920 .WORD PST 015930 .BYTE $70,$46 015940 .WORD PRSRES 015950 .BYTE $70,$70,$70,$70,$46 015960 .WORD HISC 015970 .BYTE $41 015980 .WORD INTL 015990 ; 016000 ;screen data 016010 ; 016020 INTIL .SBYTE " r Z " 016030 .SBYTE " K a y mazes " 016040 CREDIT .SBYTE " BY BARRY KOLBE " 016050 PST .SBYTE " start play " 016060 PRSRES .SBYTE " option scores " 016070 HISC .SBYTE " 1: " 016080 HSC1 .SBYTE "00000 2: " 016090 HSC2 .SBYTE "00000 " 016100 ; 016110 ;add 1 to high score top man 016120 ; 016130 ADDH1 LDX #4 016140 AA1 INC HSC1,X 016150 LDA HSC1,X 016160 CMP #$1A 016170 BCC AAE 016180 LDA #$10 016190 STA HSC1,X 016200 DEX 016210 BPL AA1 016220 LDA HSC1,X 016230 AAE RTS 016240 ; 016250 ;add 100 to top man 016260 ; 016270 AHUN1 LDX #2 016280 JMP AA1 016290 ; 016300 ;add 100 to bottom man 016310 ; 016320 AHUN2 LDX #2 016330 JMP BB1 016340 ; 016350 ;add 1 to high score bot man 016360 ; 016370 ADDH2 LDX #4 016380 BB1 INC HSC2,X 016390 LDA HSC2,X 016400 CMP #$1A 016410 BCC BBE 016420 LDA #$10 016430 STA HSC2,X 016440 DEX 016450 BPL BB1 016460 BBE RTS 016470 ; 016480 ;the characer set 016490 ; 016500 *= MYSET 016510 .BYTE $00,$00,$00,$00 016520 .BYTE $00,$00,$00,$00 016530 .BYTE $38,$38,$38,$38 016540 .BYTE $38,$00,$38,$00 016550 .BYTE $66,$66,$66,$00 016560 .BYTE $00,$00,$00,$00 016570 .BYTE $00,$66,$FF,$66 016580 .BYTE $66,$FF,$66,$00 016590 .BYTE $18,$3E,$60,$3C 016600 .BYTE $06,$7C,$18,$00 016610 .BYTE $00,$66,$6C,$18 016620 .BYTE $30,$66,$46,$00 016630 .BYTE $DF,$FD,$DF,$FD 016640 .BYTE $DF,$FD,$DF,$FD 016650 .BYTE $00,$28,$AA,$BE 016660 .BYTE $BE,$AA,$28,$00 016670 .BYTE $00,$28,$00,$69 016680 .BYTE $28,$28,$41,$41 016690 .BYTE $00,$14,$00,$96 016700 .BYTE $14,$14,$82,$82 016710 .BYTE $00,$66,$3C,$FF 016720 .BYTE $3C,$66,$00,$00 016730 .BYTE $00,$18,$18,$7E 016740 .BYTE $18,$18,$00,$00 016750 .BYTE $00,$00,$00,$00 016760 .BYTE $00,$18,$18,$30 016770 .BYTE $00,$00,$00,$7E 016780 .BYTE $00,$00,$00,$00 016790 .BYTE $00,$00,$00,$00 016800 .BYTE $00,$18,$18,$00 016810 .BYTE $00,$06,$0C,$18 016820 .BYTE $30,$60,$40,$00 016830 .BYTE $7C,$CE,$C6,$C6 016840 .BYTE $C6,$E6,$7C,$00 016850 .BYTE $38,$38,$18,$18 016860 .BYTE $18,$18,$18,$00 016870 .BYTE $7C,$E6,$0C,$18 016880 .BYTE $30,$60,$FE,$00 016890 .BYTE $7E,$0C,$18,$0C 016900 .BYTE $06,$66,$3C,$00 016910 .BYTE $0C,$1C,$3C,$6C 016920 .BYTE $CC,$FE,$0C,$00 016930 .BYTE $7E,$60,$7C,$06 016940 .BYTE $06,$66,$3C,$00 016950 .BYTE $7C,$C6,$C0,$FC 016960 .BYTE $CE,$E6,$7C,$00 016970 .BYTE $7E,$06,$0C,$18 016980 .BYTE $30,$30,$30,$00 016990 .BYTE $7C,$CE,$E6,$7C 017000 .BYTE $CE,$E6,$7C,$00 017010 .BYTE $7C,$CE,$C6,$E6 017020 .BYTE $7E,$0C,$18,$30 017030 .BYTE $00,$38,$38,$00 017040 .BYTE $00,$38,$38,$00 017050 .BYTE $00,$00,$18,$18 017060 .BYTE $00,$18,$18,$30 017070 .BYTE $06,$0C,$18,$30 017080 .BYTE $18,$0C,$06,$00 017090 .BYTE $00,$00,$7E,$00 017100 .BYTE $00,$7E,$00,$00 017110 .BYTE $60,$30,$18,$0C 017120 .BYTE $18,$30,$60,$00 017130 .BYTE $3C,$66,$66,$0C 017140 .BYTE $18,$00,$18,$00 017150 .BYTE $00,$3C,$66,$6E 017160 .BYTE $6E,$60,$3E,$00 017170 .BYTE $78,$9C,$3C,$36 017180 .BYTE $3E,$66,$66,$C3 017190 .BYTE $EE,$73,$63,$63 017200 .BYTE $6E,$63,$63,$DE 017210 .BYTE $3C,$66,$CC,$C0 017220 .BYTE $C0,$C0,$E6,$7C 017230 .BYTE $EE,$73,$63,$63 017240 .BYTE $63,$63,$63,$DE 017250 .BYTE $FE,$66,$60,$78 017260 .BYTE $60,$63,$66,$7C 017270 .BYTE $FE,$66,$60,$78 017280 .BYTE $60,$60,$60,$60 017290 .BYTE $3C,$66,$C6,$C0 017300 .BYTE $DE,$C6,$66,$3C 017310 .BYTE $C6,$C6,$C6,$CE 017320 .BYTE $FE,$E6,$C6,$C6 017330 .BYTE $30,$18,$18,$18 017340 .BYTE $18,$18,$18,$0C 017350 .BYTE $1E,$0C,$0C,$0C 017360 .BYTE $0C,$1C,$38,$60 017370 .BYTE $C6,$6C,$6C,$78 017380 .BYTE $78,$6C,$6C,$C6 017390 .BYTE $E0,$60,$60,$60 017400 .BYTE $60,$66,$7E,$78 017410 .BYTE $C6,$EE,$FE,$D6 017420 .BYTE $C6,$C6,$C6,$C6 017430 .BYTE $C6,$C6,$E6,$F6 017440 .BYTE $DE,$CE,$C6,$C6 017450 .BYTE $7C,$CE,$C6,$C6 017460 .BYTE $C6,$C6,$E6,$7C 017470 .BYTE $7C,$66,$66,$66 017480 .BYTE $6C,$60,$60,$C0 017490 .BYTE $7C,$E6,$C6,$C6 017500 .BYTE $C6,$C6,$CE,$7F 017510 .BYTE $EE,$73,$66,$6C 017520 .BYTE $66,$66,$63,$C3 017530 .BYTE $3A,$66,$60,$3C 017540 .BYTE $06,$06,$66,$5C 017550 .BYTE $FE,$30,$60,$C0 017560 .BYTE $C0,$C2,$C6,$7C 017570 .BYTE $E6,$66,$66,$66 017580 .BYTE $66,$66,$6E,$3F 017590 .BYTE $C3,$66,$66,$66 017600 .BYTE $66,$66,$3C,$18 017610 .BYTE $C3,$C3,$C3,$D3 017620 .BYTE $CB,$DF,$77,$62 017630 .BYTE $C3,$C3,$66,$3C 017640 .BYTE $3C,$66,$C3,$C3 017650 .BYTE $C3,$66,$66,$3C 017660 .BYTE $18,$18,$18,$18 017670 .BYTE $7E,$C6,$0C,$18 017680 .BYTE $FE,$60,$C3,$FE 017690 .BYTE $00,$1E,$18,$18 017700 .BYTE $18,$18,$1E,$00 017710 .BYTE $00,$40,$60,$30 017720 .BYTE $18,$0C,$06,$00 017730 .BYTE $00,$78,$18,$18 017740 .BYTE $18,$18,$78,$00 017750 .BYTE $00,$08,$1C,$36 017760 .BYTE $63,$00,$00,$00 017770 .BYTE $00,$00,$00,$00 017780 .BYTE $00,$00,$FF,$00 017790 ; 017800 *= $02E0 017810 .WORD BEGIN