0100 ; 0110 ;Start of prog 0120 ; 0130 .INCLUDE #D:KINGEQU.M65 0140 *= $2000 0150 .INCLUDE #D:KING.DAT 0160 ; 0170 ;Erase P/M Memory 0180 ; 0190 CLRPM LDY #0 ;zero A + Y 0200 TYA 0210 CPM1 STA PLR0,Y ;zap plyr's 0220 STA PLR1,Y 0230 STA PLR2,Y 0240 STA PLR3,Y 0250 INY 0260 BNE CPM1 ;loop again 0270 RTS ;bye. 0280 ; 0290 ;Erase screen memory 0300 ; 0310 CLRSCR LDX #3 ;do 1K 0320 LDY #0 0330 STY SCR 0340 LDA # >MYSCRN 0350 STA SCR+1 0360 TYA 0370 CS1 STA (SCR),Y 0380 INY 0390 BNE CS1 ;page yet? 0400 INC SCR+1 0410 DEX ;next page 0420 BPL CS1 0430 RTS ;done. 0440 ; 0450 ;Erase MYLINE 0460 ; 0470 ERMYLN LDY #39 ;40 chars 0480 LDA #0 0490 ERL STA MYLINE-5,Y ;on scrn 0500 DEY 0510 BPL ERL 0520 RTS ;done 0530 ; 0540 ;Print routine 0550 ; 0560 EPRINT STA IND2 ;save address 0570 STY IND2+1 0580 JSR ERMYLN ;clear line 0590 INY ;Y = 0 0600 PRL1 LDA (IND2),Y ;first char 0610 BPL PRL2 ;normal? print 0620 AND #$7F ;mask inverse 0630 PRL2 STA MYLINE,Y ;on screen 0640 LDA (IND2),Y ;get again 0650 BMI PRL3 ;if>$80 end 0660 INY ;up count 0670 BNE PRL1 ;go again 0680 PRL3 LDY #119 ;two seconds 0690 PRL4 JSR WAIT ;wait jiffy 0700 DEY ;dec loop 0710 BPL PRL4 0720 RTS ;leave 0730 PRL5 LDX #5 ;wait 10 sec. 0740 PRL6 JSR PRL3 0750 DEX 0760 BNE PRL6 0770 RTS 0780 ; 0790 ;Show number of men left 0800 ; 0810 MENLEFT LDA MEN1 ;player one 0820 CLC ;add color 0830 ADC #80 0840 STA MENL+7 ;on scrn 0850 LDA MEN2 ;same for 0860 CLC ;player two 0870 ADC #80 0880 STA MENL+17 0890 RTS ;done. 0900 ; 0910 ;Vertical Blank Routine 0920 ; 0930 VBLANK1 LDA #0 ;just KILL 0940 STA ATRACT ;atract mode. 0950 JMP SYSVBV 0960 ; 0970 ;Audio prompts 0980 ; 0990 BEEP LDA #25 ;high tone 1000 BNE BTONE ;play it 1010 ; 1020 BOOP LDA #100 ;low tone 1030 BTONE STA AUDF1 ;save freq 1040 LDA #$AA ;pure sound 1050 STA AUDC1 1060 JSR BWAIT ;and leave on 1070 ; 1080 ;Sound Off 1090 ; 1100 SNDOFF LDA #0 ;now zero 1110 STA AUDF1 ;the sound 1120 STA AUDF2 ;registers 1130 STA AUDC1 1140 STA AUDC2 1150 RTS 1160 ; 1170 ;Wait 4 jiffies 1180 ; 1190 BWAIT LDY #3 ;wait 4 jiffies 1200 DOW JSR WAIT ;pause 1 jiffy 1210 DEY ;decrease loop 1220 BPL DOW ;do again 1230 RTS ;leave 1240 ; 1250 ;Turn on screen 1260 ; 1270 TURNON LDX #0 1280 STX COLOR4 ;in color 1290 STX COLOR2 1300 LDX #14 1310 STX COLOR1 1320 LDX # GDLI 1350 STX VDSLST+1 1360 LDX #$C0 ;turn it on 1370 STX NMIEN 1380 LDX #62 1390 STX SDMCTL 1400 RTS ;done 1410 ; 1420 ;Turn off screen 1430 ; 1440 TURNOFF LDX #0 1450 STX SDMCTL ;turn off scrn 1460 JMP WAIT 1470 ; 1480 ;Posit players for board 1490 ; 1500 POSPM LDX #0 ;get zero 1510 STX PCOLR2 1520 STX PCOLR3 1530 INX 1540 STX GPRIOR ;set priority 1550 STX SIZEP0 ;double wide 1560 JSR CLRPM ;erase P/M 1570 LDA #$FC ;gold color 1580 STA PCOLR0 1590 LDA # >MYPM ;set PMBASE 1600 STA PMBASE 1610 LDA #3 ;set sizes 1620 STA SIZEP2 1630 STA SIZEP3 1640 STA GRACTL ;turn on P/M 1650 LDA #$FF ;define plyrs 1660 LDY #62 ;2 + 3 as the 1670 PDF1 STA PLR2,Y ;borders 1680 STA PLR3,Y 1690 INY 1700 CPY #160 1710 BNE PDF1 1720 LDA #44 ;now position 1730 STA HPOSP2 ;them on the 1740 LDA #180 ;screen 1750 STA HPOSP3 1760 RTS ;later. 1770 ; 1780 ;Switch players 1790 ; 1800 SWITCH LDA PLAYER ;get player 1810 EOR #1 ;flip it 1820 STA PLAYER ;store 1830 RTS ;done. 1840 ; 1850 ;Wait a 1 jiffy 1860 ; 1870 WAIT LDA #0 ;zero the clock 1880 STA RTCLOK 1890 W1 LDA RTCLOK ;get clock 1900 BEQ W1 ;if same loop 1910 RTS ;leave 1920 ; 1930 ;Test player move 1940 ; 1950 TESTIT STA SAVEA ;save A 1960 BMI MVOK ;empty? yes. 1970 BEQ MVNK ;bad move 1980 CMP #19 ;objects? 1990 BCS MVNK 2000 LDA PLAYER ;get plyr # 2010 BNE HAV2 ;player 2 2020 LDA SAVEA ;char 2030 CMP #10 ;equal 10? 2040 BCS MVOK ;no. good. 2050 BCC MVNK ;bad move. 2060 HAV2 LDA SAVEA ;restore A 2070 CMP #10 ;> 10? 2080 BCS MVNK ;yes. bad one. 2090 MVOK CLC ;signal good. 2100 RTS ;leave. 2110 MVNK SEC ;signal bad. 2120 RTS ;leave 2130 ; 2140 ;Move + define cursor 2150 ; 2160 DEFINE LDA PLRX ;get X pos 2170 STA HPOSP0 ;in horizontal 2180 LDY PLRY ;get Y pos 2190 LDX #0 ;and erase top 2200 TXA ;half of the 2210 DEF0 STA PLR0,Y ;cursor 2220 DEY 2230 BNE DEF0 2240 LDY PLRY ;get Y again 2250 DEF1 LDA DEFPL1,X ;and put in 2260 STA PLR0,Y ;the definition 2270 INY 2280 INX 2290 CPX #20 ;20 bytes yet? 2300 BNE DEF1 ;no. 2310 DEF2 STA PLR0,Y ;now erase under 2320 INY ;the cursor. 2330 BNE DEF2 2340 RTS ;done. 2350 ; 2360 ;Perform a cursor move 2370 ; 2380 DOMOVE LDY MOVED ;get move 2390 LDA MOVTAB,Y ;load and store 2400 STA MOVJMP+1 ;vector in 2410 LDA MOVTAB+1,Y ;the table 2420 STA MOVJMP+2 2430 MOVJMP JMP $FFFF ;Move it! 2440 ; 2450 ;Move LEFT 2460 ; 2470 LEFT LDY TABPOS ;get pos 2480 LDA GAMBRD-1,Y ;look left 2490 BEQ DN1 ;bad move! 2500 LDY #7 ;okeh move it 2510 LLP STY SAVEY ;back 8 pixels 2520 DEC PLRX 2530 JSR WAIT ;wait a jiffy 2540 JSR DEFINE 2550 LDY SAVEY 2560 DEY 2570 BPL LLP 2580 DEC TABPOS ;new posit 2590 DN1 RTS ;done. 2600 ; 2610 ;Move RIGHT 2620 ; 2630 RIGHT LDY TABPOS ;position 2640 LDA GAMBRD+1,Y ;look right 2650 BEQ DN1 ;bad one 2660 LDY #7 ;move right 2670 RLP STY SAVEY ;8 pixels. 2680 INC PLRX 2690 JSR WAIT 2700 JSR DEFINE 2710 LDY SAVEY 2720 DEY 2730 BPL RLP 2740 INC TABPOS 2750 RTS 2760 ; 2770 ;Move UP 2780 ; 2790 UP LDA TABPOS ;posit 2800 SEC ;up one line 2810 SBC #14 2820 TAY 2830 LDA GAMBRD,Y ;look in board 2840 BEQ DN2 ;bad move! 2850 STY TABPOS ;save posit 2860 LDY #15 ;move player 2870 ULP STY SAVEY ;up 16 pixels 2880 DEC PLRY 2890 JSR WAIT 2900 JSR DEFINE 2910 LDY SAVEY 2920 DEY 2930 BPL ULP 2940 RTS 2950 ; 2960 ;Move DOWN 2970 ; 2980 DOWN LDA TABPOS ;posit 2990 CLC ;add 13 for line 3000 ADC #14 ;down 3010 TAY 3020 LDA GAMBRD,Y ;get piece 3030 BEQ DN2 ;bad 3040 STY TABPOS ;save posit 3050 LDY #15 ;move player 3060 DLP STY SAVEY ;down 16 pixels 3070 INC PLRY 3080 JSR WAIT 3090 JSR DEFINE 3100 LDY SAVEY 3110 DEY 3120 BPL DLP 3130 DN2 RTS ;all done 3140 ; 3150 ;Read Stick + button 3160 ; 3170 ;MOVED = 0 for left 3180 ; = 2 for right 3190 ; = 4 for up 3200 ; = 6 for down 3210 ; 3220 STICK LDX PLAYER ;get player 3230 LDA #15 ;and reset 3240 STA STICK0,X ;stick values 3250 LDA #1 3260 STA STRIG0,X 3270 LDA MOVED ;put last move 3280 STA OMOVE ;in hold area 3290 STCK LDA #$FF 3300 STA MOVED ;no move made 3310 CSTK LDA STICK0,X ;read stick 3320 CMP #15 ;no move 3330 BEQ TRYTRG ;try trigger 3340 CMP #11 ;left? 3350 BNE ST0 ;no. 3360 LDA #0 ;move is 0 3370 BEQ STDN 3380 ST0 CMP #7 ;right? 3390 BNE ST1 ;no. 3400 LDA #2 ;table offset 3410 BNE STDN ;=2 3420 ST1 CMP #14 ;up? 3430 BNE ST2 ;no. 3440 LDA #4 ;offset = 4 3450 BNE STDN 3460 ST2 CMP #13 ;down? 3470 BNE CSTK ;no. read again 3480 LDA #6 ;make a 6 3490 STDN STA MOVED ;save move 3500 SEC ;signal move 3510 RTS 3520 TRYTRG LDA STRIG0,X ;trigger 3530 BNE CSTK ;read stick 3540 CLC ;signal fire 3550 RTS 3560 ; 3570 ;Add border to game board 3580 ; 3590 ADDBORD LDX #11 ;12 lines 3600 LDA #0 ;make the 3610 STA COLOR2 ;screen black 3620 STA COLOR4 3630 LDA # <[MYSCRN+7] 3640 STA SCR 3650 LDA # >[MYSCRN+7] 3660 STA SCR+1 3670 BOR0 LDY #25 ;26 chars 3680 LDA #84 ;red space 3690 BOR1 STA (SCR),Y ;on screen 3700 DEY ;down loop 3710 BPL BOR1 ;and run again 3720 LDA SCR ;now add 40 3730 CLC ;to screen 3740 ADC #40 ;pointer to 3750 STA SCR ;get to next 3760 LDA SCR+1 ;screen line 3770 ADC #0 3780 STA SCR+1 3790 DEX ;dec outer loop 3800 BPL BOR0 ;do again 3810 RTS ;all done 3820 ; 3830 ;Randomize terrain features 3840 ; 3850 TERRAIN LDY #20 ;21 features 3860 TERR1 LDA RANDOM ;number 3870 CMP #15 3880 BCC TERR1 3890 CMP #81 3900 BCS TERR1 3910 TAX 3920 TERR2 LDA RANDOM ;next number 3930 CMP #1 ;check if piece 3940 BCC TERR2 3950 CMP #4 3960 BCS TERR2 3970 STA SAVEA ;save it 3980 LDA GAMBRD,X ;get piece 3990 BPL TERR1 ;<128 no good 4000 LDA SAVEA ;get feature 4010 CLC ;and add 18 4020 ADC #18 4030 STA GAMBRD,X ;put in 4040 DEY ;board 4050 BPL TERR1 ;do again 4060 ; 4070 ;Now assure a path through 4080 ; 4090 DOPATH LDA RANDOM 4100 AND #3 ;only 0-3 4110 CMP #3 ;=3? 4120 BEQ DOPATH ;yes do again 4130 ASL A ;times 8 4140 ASL A 4150 ASL A 4160 TAY 4170 LDX #7 ;do 8 spaces 4180 PATH2 LDA PATHS,Y ;get posit 4190 STY SAVEY ;save Y 4200 TAY 4210 LDA #$80 ;get blank 4220 STA GAMBRD,Y ;put in 4230 LDY SAVEY ;board. get Y 4240 INY ;up posit 4250 DEX ;dec loop 4260 BPL PATH2 ;and loop again 4270 RTS ;all done 4280 ; 4290 ;Fill play field 4300 ; 4310 SETSCR LDY #0 4320 LDA # DLIST1 4350 STA SDLSTL+1 4360 SE1 LDA GAMBRD+14,Y ;get a piece 4370 BEQ SNXT ;leave alone 4380 BPL SE2 ;have character 4390 LDA #0 ;get empty 4400 SE2 ASL A ;* 2 4410 ASL A ;* 4 4420 STY SAVEY ;save y 4430 TAX ;char index 4440 TYA ;screen posit 4450 ASL A ;* 2 4460 TAY 4470 LDA SCRTAB,Y ;look up addr 4480 STA INDR ;and save it 4490 LDA SCRTAB+1,Y 4500 STA INDR+1 4510 LDY #0 4520 SE3 LDA CHARS,X ;get char 4530 STA (INDR),Y ;on screen 4540 INX ;up count 4550 INY 4560 CPY #2 ;2 yet? 4570 BNE SE3 ;no. 4580 LDY #0 4590 LDA INDR ;add 40 to scrn 4600 CLC ;position 4610 ADC #40 4620 STA INDR 4630 LDA INDR+1 4640 ADC #0 4650 STA INDR+1 4660 SE4 LDA CHARS,X ;next half of 4670 STA (INDR),Y ;character 4680 INX ;goes on screen 4690 INY 4700 CPY #2 4710 BNE SE4 4720 LDY SAVEY ;restore Y 4730 SNXT INY ;up it. 4740 CPY #70 ;70 yet? 4750 BNE SE1 ;no. 4760 RTS ;done. 4770 ; 4780 ;Copy game board 4790 ; 4800 BEGIN CLD ;no decimal 4810 LDA #1 ;fix boot status 4820 STA BOOT? 4830 LDA # BEGIN 4860 STA DOSINI+1 4870 LDA #3 ;init sound 4880 STA SKCTL ;stuff 4890 LDA #0 ;kill cold start 4900 STA COLDST 4910 STA AUDCTL 4920 LDX #$80 ;erase bottom 4930 ERZPG STA ZPAGE,X ;half of 4940 INX ;page zero 4950 BNE ERZPG 4960 TAY 4970 ZGB STA GAMBRD,Y ;erase GAMBRD 4980 INY 4990 BNE ZGB 5000 LDA #9 ;set # of men 5010 STA MEN1 5020 STA MEN2 5030 LDY #69 ;now copy in 5040 BEG1 LDA BRDSET,Y ;the new 5050 STA GAMBRD+14,Y ;board 5060 DEY 5070 BPL BEG1 5080 LDY #17 ;copy in the 5090 HTB LDA HITTAB,Y ;hit point 5100 STA HTAB,Y ;table 5110 DEY 5120 BPL HTB 5130 LDA # SCRTAB ;definition 5160 STA INDR+1 ;table. 5170 LDX #0 5180 LDA # <[MYSCRN+44] ;start 5190 STA IND2 ;screen posit 5200 LDA # >[MYSCRN+44] 5210 STA IND2+1 5220 SC1 LDY #0 5230 SC2 LDA IND2 ;get scrn 5240 CLC ;and add 2 5250 ADC #2 5260 STA IND2 5270 STA (INDR),Y ;save in table 5280 LDA IND2+1 5290 ADC #0 ;now do hi byte 5300 INY 5310 STA (INDR),Y ;in table 5320 STA IND2+1 5330 INY 5340 CPY #28 ;28 yet? 5350 BNE SC2 ;no. 5360 LDA INDR ;now add offset 5370 CLC ;to table 5380 ADC #28 ;position 5390 STA INDR ;and store it. 5400 LDA INDR+1 5410 ADC #0 5420 STA INDR+1 5430 LDA IND2 ;now update 5440 CLC ;screen pointer 5450 ADC #52 ;52 chars later 5460 STA IND2 5470 LDA IND2+1 5480 ADC #0 5490 STA IND2+1 5500 INX ;up line count 5510 CPX #5 ;5 yet? 5520 BNE SC1 ;no. 5530 JSR INTRO ;display intro 5540 JSR TERRAIN 5550 ; 5560 ;Start of game 5570 ; 5580 CHESS JSR TURNOFF 5590 LDY # VBLANK1 ;vector 5610 LDA #6 ;Immediate mode 5620 JSR SETVBV ;set it! 5630 JSR CLRSCR ;erase screen 5640 JSR ADDBORD ;add border 5650 JSR SETSCR ;set board up 5660 JSR POSPM ;add P/M 5670 JSR TURNON ;turn it on 5680 ; 5690 LOOP0 LDA #78 ;position player 5700 STA PLRX 5710 LDA #70 5720 STA PLRY 5730 LDA #15 ;set tabpos. 5740 STA TABPOS 5750 LDA #0 ;make player 1 5760 STA PLAER+14 5770 LDA PLAYER ;get player 5780 BEQ SCRON 5790 LDA #166 ;player 2 5800 STA PLRX ;reset cursor 5810 LDA #26 ;and tabpos 5820 STA TABPOS ;pntrs. 5830 LDA #105 ;player II 5840 STA PLAER+14 5850 ; 5860 SCRON JSR MENLEFT ;# men left 5870 JSR SETSCR ;update scrn 5880 LOOP JSR DEFINE ;put on cursor 5890 LDX PLAYER ;player num 5900 JSR STCK ;read stick 5910 BCC FIRED ;pressed fire 5920 JSR DOMOVE ;move cursor 5930 JMP LOOP ;and loop.... 5940 FIRED LDY #3 ;zero out move 5950 LDA #$FF ;table 5960 FR1 STA MOVES,Y 5970 DEY 5980 BPL FR1 5990 LDY TABPOS ;get table pos 6000 STY OLDPOS ;and save it 6010 LDA GAMBRD,Y ;get piece 6020 STA OLDPCE ;save it. 6030 BMI LOOP ;blank. loop. 6040 CMP #19 ;trying to move 6050 BCS LOOP ;on terrain? 6060 LDX PLAYER ;get player 6070 BNE PL2 ;have player 2 6080 CMP #10 ;trying to move 6090 BCC CHOK ;on yourself? 6100 BCS LOOP ;yes! 6110 PL2 CMP #10 ;same thing. 6120 BCC LOOP 6130 ; 6140 ;Now we see if the piece 6150 ;selection was a good one 6160 ; 6170 CHOK LDY #3 ;check 4 6180 MCK0 LDA GTABH,Y ;inset table 6190 STA MCHECK+2 ;position 6200 LDA GTABL,Y ;in program 6210 STA MCHECK+1 6220 STY SAVEY ;save Y 6230 LDY TABPOS ;get pos. 6240 MCHECK LDA $FFFF,Y ;and piece 6250 JSR TESTIT ;test players 6260 BCS UPLP ;bad one 6270 LDY SAVEY ;restore Y 6280 TYA ;possible move 6290 ASL A ;* 2 and 6300 STA MOVES,Y ;save move 6310 UPLP LDY SAVEY ;get Y again 6320 DEY ;and loop again 6330 BPL MCK0 6340 ; 6350 ;Now see if any move is 6360 ;possible this time. 6370 ; 6380 LDY #3 6390 SMV LDA MOVES,Y 6400 BPL HAVMOV ;got one! 6410 DEY 6420 BPL SMV 6430 LDA # ALAS ;move. 6450 JSR EPRINT 6460 JSR ERMYLN ;erase line 6470 JMP LOOP ;loop again. 6480 HAVMOV JSR BEEP ;beep! 6490 TRYMOV JSR STICK ;read stick 6500 LDA MOVED 6510 BMI TRYMOV ;mask out button 6520 LDY #3 ;test against 6530 CMV CMP MOVES,Y ;possible moves 6540 BEQ GMOVE ;good move! 6550 DEY 6560 BPL CMV 6570 JSR BOOP ;Error! 6580 JMP TRYMOV ;try again 6590 GMOVE JSR DOMOVE 6600 JSR STICK 6610 BCC BEP 6620 LDX PLAYER ;player # 6630 LDY #29 ;wait 1/2 second 6640 GVM LDA #0 ;and check for 6650 STA RTCLOK ;press of fire 6660 GVM1 LDA STRIG0,X ;button 6670 BEQ BEP 6680 LDA RTCLOK ;get clock 6690 BEQ GVM1 ;=0? yes. 6700 GVM2 DEY ;loop again 6710 BPL GVM 6720 LDY OMOVE ;now we move 6730 LDA NEGTAB,Y ;the cursor 6740 STA UNJSR+1 ;back to its 6750 LDA NEGTAB+1,Y ;original 6760 STA UNJSR+2 ;position. 6770 UNJSR JSR $FFFF 6780 JMP TRYMOV ;go again 6790 BEP JSR BEEP ;signal move 6800 LDY TABPOS ;get posit 6810 LDA GAMBRD,Y ;and piece 6820 BPL DOBATTLE ;do a combat! 6830 LDA OLDPCE ;just move old 6840 STA GAMBRD,Y ;piece on the 6850 LDY OLDPOS ;board 6860 LDA #$80 ;remove previous 6870 STA GAMBRD,Y ;character 6880 JSR SWITCH ;flip player 6890 JMP LOOP0 ;and loop 6900 ; 6910 DOBATTLE TAY 6920 CMP #10 ;player >10? 6930 BCC GP1 ;no. 6940 STY PLRTYPE+1 ;player type 6950 DEY ;decrease index 6960 LDA HTAB,Y ;get hit points 6970 STA HTS+1 ;save em 6980 BNE INH0 ;player 1 hits 6990 GP1 STY PLRTYPE ;player 1 7000 DEY ;down index 7010 LDA HTAB,Y ;hit points 7020 STA HTS ;save 7030 INH0 LDY OLDPCE ;old piece 7040 CPY #10 ;>10? 7050 BCC GP11 ;no. 7060 STY PLRTYPE+1 ;move player 1 7070 DEY ;hits out of 7080 LDA HTAB,Y ;table 7090 STA HTS+1 7100 BNE INH1 ;play game 7110 GP11 STY PLRTYPE ;player #1 7120 DEY ;and get out 7130 LDA HTAB,Y ;their hits 7140 STA HTS 7150 INH1 JSR TURNOFF ;screen off 7160 ; 7170 LDA #$40 7180 STA NMIEN ;kill DLI's 7190 JSR BATTLE ;Do battle! 7200 LDX #1 ;do 2 players 7210 UH0 LDY PLRTYPE,X ;type # 7220 LDA HTS,X ;new hit points 7230 DEY 7240 STA HTAB,Y ;save in table 7250 DEX 7260 BPL UH0 ;do next 7270 LDA PLAYER ;get the player 7280 TAX ;X holds plr # 7290 CMP WINNER ;same as winner? 7300 BNE CHANGE ;no. lost. 7310 EOR #1 7320 TAX 7330 LDA OLDPCE ;old piece 7340 LDY TABPOS ;and move to 7350 STA GAMBRD,Y ;the new square 7360 ; 7370 CHANGE LDA #$80 ;erase old guy 7380 LDY OLDPOS 7390 STA GAMBRD,Y ;save in board. 7400 JSR SWITCH ;flip players 7410 DEC MEN1,X ;lower men left 7420 LDA HTAB+8 ;check if kings 7430 BEQ DEATH ;are dead yet. 7440 LDA HTAB+17 7450 BEQ DEATH 7460 JMP CHESS ;and play chess 7470 ; 7480 ;Handle Death of a team 7490 ; 7500 DEATH TXA ;get player 7510 EOR #1 ;flip it 7520 CLC ;make scr mem 7530 ADC #17 7540 STA TROPHY+7 ;save in string 7550 JSR CLRSCR 7560 JSR MENLEFT ;show # left 7570 JSR ADDBORD ;add border 7580 JSR SETSCR 7590 JSR POSPM ;put on P/M 7600 JSR TURNON 7610 LDA # TROPHY ;message. 7630 JSR EPRINT 7640 JSR PRL5 ;wait 10 sec 7650 JSR CLRPM ;remove P/M 7660 LDA #$40 7670 STA NMIEN 7680 JSR TURNOFF 7690 JMP BEGIN ;start over. 7700 ; 7710 ;Introduction Screen 7720 ; 7730 INTRO LDA #0 ;screen off 7740 STA SDMCTL 7750 LDA # IDLST 7780 STA SDLSTL+1 7790 LDA RANDOM ;random # 7800 AND #$F0 ;hit nybble 7810 STA INTC ;save in color 7820 LDA #$20 ;and add charac. 7830 STA CHBAS ;set. 7840 JSR CLRPM ;remove players 7850 JSR CLRSCR 7860 LDA # DLI1 ;vector. 7890 STA VDSLST+1 7900 LDA #$C0 ;fire DLI! 7910 STA NMIEN 7920 LDY #4 ;copy 4 nums. 7930 IC LDA ICLR,Y ;get number 7940 STA COLOR0,Y ;save in color 7950 DEY ;dec loop 7960 BPL IC ;do again 7970 ; 7980 ;Now add text to intro 7990 ; 8000 LDA # <[SLN1+256] ;start adr 8010 STA SCR ;of where text 8020 LDA # >[SLN1+256] ;goes in 8030 STA SCR+1 ;memory. 8040 LDX #0 ;zero X 8050 PTIL LDA STXT,X ;get a position 8060 BEQ LINFD ;if 0 line feed 8070 TAY ;in Y reg 8080 PTIL2 INX ;up X 8090 LDA STXT,X ;next char 8100 CMP #$FF ;if $FF lin feed 8110 BEQ LINFD 8120 CMP #$FE ;if $FE then end 8130 BEQ STITL 8140 STA (SCR),Y ;in memory 8150 INY ;up Y 8160 BNE PTIL2 ;and do again 8170 LINFD LDA SCR ;now add a 32 8180 CLC ;to memory 8190 ADC #$20 ;pointer 8200 STA SCR ;save it. 8210 LDA SCR+1 ;get hi byte 8220 ADC #0 ;and add carry 8230 STA SCR+1 ;save it. 8240 INX ;up X 8250 JMP PTIL ;do again. 8260 ; 8270 ;Scroll Title Screen 8280 ; 8290 STITL LDA #61 ;turn on narrow 8300 STA SDMCTL ;screen. 8310 LDA # >SLN1 ;set LMS to my 8320 STA DVC+2 ;memory. 8330 LDA #0 8340 STA DVC+1 8350 STA ATRACT ;kill atract 8360 STA LINES ;lines = 0 8370 DOLN LDA #0 ;scroll counter 8380 STA SCROLC ;is zero. 8390 LNL JSR WAIT ;wait 1 jiffy 8400 INC SCROLC ;inc scrol count 8410 LDA SCROLC ;get it. 8420 CMP #8 ;done 8 yet? 8430 BEQ LNDN ;yes. line done 8440 STA VSCROL ;in VSCROL 8450 LDA CONSOL ;check START key 8460 CMP #6 8470 BEQ STARTUP ;if pressed go! 8480 BNE LNL ;loop again. 8490 LNDN LDY #0 ;zero Y 8500 STY SCROLC ;counter nil 8510 STY VSCROL ;same for VSCROL 8520 LDA DVC+1 ;now add 32 to 8530 CLC ;the LMS 8540 ADC #$20 ;instruction 8550 STA DVC+1 8560 LDA DVC+2 ;and take care 8570 ADC #0 ;of hi byte. 8580 STA DVC+2 8590 INC LINES ;inc lines done 8600 LDA LINES ;get it. 8610 CMP #37 ;37 lines yet? 8620 BEQ STITL ;yes. start over 8630 LDY #2 ;check if this 8640 CLN CMP PLINS,Y ;line is one 8650 BEQ WSEC ;we pause on. 8660 DEY ;not this one 8670 BPL CLN ;try next. 8680 BMI DOLN ;do next line. 8690 WSEC LDA #0 ;zero clock 8700 STA RTCLOK 8710 WSC1 LDA RTCLOK ;get it and 8720 CMP #120 ;wait 2 seconds 8730 BEQ DOLN 8740 LDA CONSOL ;check CONSOL 8750 CMP #6 ;START? 8760 BNE WSC1 ;no. loop. 8770 STARTUP LDA #$40 ;kill DLI 8780 STA NMIEN 8790 JMP TURNOFF ;and play game. 8800 ; 8810 ;DLI for intro colors 8820 ; 8830 DLI1 PHA ;save A 8840 STX DLIX ;and X regis. 8850 DLL0 LDA INTC ;color 8860 STA DCLOR ;save it 8870 LDX #7 ;loop 8 times 8880 DLL1 LDA DCLOR ;get color 8890 STA WSYNC ;wait sync 8900 STA COLPF3 ;store it 8910 CLC ;add for next 8920 ADC #2 ;luminance 8930 STA DCLOR ;and save it. 8940 DEX ;dec loop count 8950 BPL DLL1 ;and do again 8960 ; 8970 LDX #7 ;loop 8 more 8980 DLL2 LDA DCLOR ;get color 8990 SEC ;and subtract 2 9000 SBC #2 ;from luminance 9010 STA WSYNC ;wait for sync 9020 STA COLPF3 ;store it 9030 STA DCLOR ;save color 9040 DEX ;dec loop 9050 BPL DLL2 ;and do again 9060 PLA ;restore A 9070 LDX DLIX ;and X regs. 9080 RTI ;done. 9090 ; 9100 ;Game board DLI1 9110 ; 9120 GDLI PHA 9130 LDA #2 9140 STA WSYNC 9150 STA COLPF2 9160 LDA # GDLI2 9190 STA VDSLST+1 9200 PLA 9210 RTI 9220 ; 9230 ;Game board DLI2 9240 ; 9250 GDLI2 PHA 9260 LDA #0 9270 STA WSYNC 9280 STA COLPF2 9290 LDA # GDLI 9320 STA VDSLST+1 9330 PLA 9340 RTI 9350 .INCLUDE #D:KING2.M65 9360 *= $02E0 9370 .WORD BEGIN 9380 .END