10 ;  ÁÕÔÏÍÏÖÅ ›20 ;›30 ; COPYRIGHT (C) 1982 BY DAVID FOX AND MITCHELL WAITE›40 ;›0100 .TITLE "CLK-AUTOMOVE.ASM;v01.04-810724,820619"›0110 .PAGE "Automatic Player Mover"›0120 ;›0130 ;BY COREY L. KOSAK›0140 ;›0150 ;B=$4000,FREL›0160 ;›0170 BASE=$4000›0180 ;›0190 *=$400›0200 ;›0210 ;CASBUF DATABASE EQUATES›0220 ;›0230 PMBAS *=*+1 ;HIBYTE OF PLAYER MISSILE AREA (LOBYTE EQUALS 0)›0240 PMBUF *=*+2 ;ADDRESS OF 128 BYTE BUFFER (FOR PMOVER)›0250 ANIMINIT *=*+1 ;INIT LOCATION FOR ANIMATE›0260 AUTOINIT *=*+1 ;INIT LOCATION FOR AUTOMOVE›0270 SCRLINIT *=*+1 ;INIT LOCATION FOR SCROLLER›0280 HPLR *=*+4 ;PLAYERS 0-3 X COORDINATE (FOR PMOVER)›0290 VPLR *=*+4 ;PLRS 0-3 Y COORD (FOR PMOVER)›0300 RATE *=*+4 ;PLRS 0-3 RATE (FOR ANIMATE)›0310 FLSTPTR *=*+8 ;PLRS 0-3 FRAME LIST POINTERS (FOR ANIMATE)›0320 SCRLADR *=*+2 ;SCREEN ADDRESS (FOR SCROLL)›0330 SCRLLEN *=*+2 ;LINE LENGTH OF SCROLLED AREA (FOR SCROLL)›0340 SCRLCLK *=*+1 ;COLOR CLOCKS IN SCREEN BYTE (FOR SCROLL)›0350 SCRLSTEP *=*+1 ;SCROLL STEP (FOR SCROLL)›0360 MOVERATE *=*+4 ;PLRS 0-3 HORIZONTAL STEP (FOR AUTOMOVE)›0370 DLIADR *=*+2 ;ADDRESS OF COLOR TABLE›0380 ;›0390 ;*LOCAL* DATABASE EQUATES›0400 ; THESE LOCATIONS ARE *LOCAL* TO THE ROUTINES›0410 ; AND SHOULD *NOT* BE MODIFIED BY THE HOST PROGRAM›0420 ;›0430 O0X *=*+4 ;PLRS 0-3 X COORDINATE›0440 O0Y *=*+4 ;PLRS 0-3 Y COORD›0450 ORATE0 *=*+4 ;PLRS 0-3 FRAME CHANGE RATE›0460 OADR0 *=*+8 ;PLRS 0-3 FRAME LIST ADDRESS›0470 TIMR0 *=*+4 ;PLRS 0-3 COUNTDOWN TIMERS (HOW MANY JIFFIES UNTIL FRAME CHANGE)›0480 POS0 *=*+4 ;PLRS 0-3 FRAME LIST POSITION›0490 OSADR *=*+2 ;SCREEN ADDRESS FOR SCROLLER›0500 CPOS *=*+2 ;COARSE SCROLL POSITION FOR SCROLLER (0-LINELEN)›0510 FPOS *=*+1 ;FINE SCROLL POSITION (0-7)›0520 OXSTEP0 *=*+4 ;PLRS 0-3 HORIZONTAL STEP›0530 DLIPOS *=*+1 ;CURRENT POSITION IN COLOR TABLE›0540 PM1 *=*+1 ;4 LOCATIONS RESERVED FOR PMOVER›0550 PM2 *=*+1›0560 PM3 *=*+1›0570 PM4 *=*+1›0580 EX1 *=*+1 ;4 LOCATIONS RESERVED FOR ANIMATE, AUTOMOVE, SCROLL, AND MFILL›0590 EX2 *=*+1›0600 EX3 *=*+1›0610 EX4 *=*+1›0620 PMSAVE *=*+5 ;ZERO PAGE SAVE AREA FOR PMOVER›0630 ZSAVE *=*+4 ;ZERO PAGE SAVE AREA FOR ALL OTHER ROUTINES›0640 ;›0650 XITVBV=$E462›0660 ;›0670 ZERO=$E0›0680 ONE=$E2›0690 ;›0700 *=BASE›0710 ;›0720 START›0730 CLV›0740 BVC START1›0750 ;›0760 EXIT›0770 JMP XITVBV›0780 ;›0790 START1›0800 CLD ;CLEAR DECIMAL MODE!!!›0810 LDA AUTOINIT ;INIT BYTE SET?›0820 BEQ EXIT ;NO, LEAVE›0830 BMI MOVETHEM ;NORMAL OPERATION IF >127›0840 ;›0850 LDX #$00 ;START WITH PLAYER #0›0860 LOOP›0870 LSR AUTOINIT ;IS THE BIT FOR THIS PLAYER SET?›0880 BCC NEXT ;NO, SKIP OVER UPDATE›0890 LDA MOVERATE,X ;MOVE PARAMS INTO LOCAL LOCATIONS›0900 STA OXSTEP0,X›0910 NEXT›0920 INX›0930 CPX #$04 ;ARE WE ALL DONE?›0940 BNE LOOP ;NO, SO LOOP›0950 LDA #$80›0960 STA AUTOINIT ;SET INIT BYTE TO $80›0970 ;›0980 MOVETHEM›0990 LDX #$03 ;START WITH PLAYER #3›1000 LOOP2›1010 LDA OXSTEP0,X ;READ STEP›1020 EOR #$80 ;REVERSE SIGN›1030 PHP›1040 CLC›1050 ADC O0X,X ;ADD STEP TO OLD XCOORD›1060 BCC CCLEAR›1070 ;›1080 PLP›1090 BMI OK ;CARRY SET IS OK, IF STEP IS NEGATIVE›1100 BPL BAD›1110 ;›1120 CCLEAR›1130 PLP›1140 BPL OK ;CARRY CLEAR IS OK, IF STEP IS POSITIVE›1150 ;›1160 BAD›1170 LDA #$80 ;ZERO THE STEP. (STOP MOTION FOR THIS PLAYER)›1180 STA OXSTEP0,X›1190 LDA #$00 ;ZERO THE XCOORD OF THIS PLAYER›1200 ;›1210 OK›1220 STA O0X,X ;STORE XCOORD›1230 DEX ;DO NEXT PLAYER›1240 BPL LOOP2 ;LAST PLAYER? NO, LOOP›1250 BMI EXIT ;YES, LEAVE.›1260 .END›