00010 *PLAYER MISSILE INTERFACE TO BASIC 00015 *CODE BY JEFF STANTON & DAN PINAL 00020 *PLAYER SHAPES ARE STORED IN PAGE ONE P/M AREA 00030 *MAX LENGTH 64 BYTES EACH 00035 * D000: 00040 HPOSP0 EQ $D000 00D4: 00050 SHAPEL EQ $D4 ;LO BYTE WHERE SHAPE IS STORED 00D5: 00060 SHAPEH EQ $D5 ;HI BYTE 00CE: 00070 SHPML EQ $CE ;LO BYTE TO DRAW OR ERASE SHAPE IN P/M AREA 00CF: 00080 SHPMH EQ $CF ;HI BYTE 00090 * 00100 * CALL FROM BASIC 00110 * A=USR(1536, PLAYER #,PLAYER LEN,OLD Y,NEW Y,NEW X) 00120 OR $600 00130 .TF "D:PMSUB.OBJ" 00135 *TRANSFER VALUES IN USR FUNCTION THAT ARE STORED ON STACK TO SUBROUTINE 0600: 68 00150 START PLA PULL # OF ARG'S OFF STACK 0601: A2 00 00160 LDX #$00 0603: 68 00180 PULL PLA DISCARD THE HIBYTE IT'S USELESS 0604: 68 00190 PLA GET VALUE 0605: 9D 91 06 00200 STA PLAYNUM,X 0608: E8 00210 INX 0609: E0 05 00220 CPX #$05 GOT ALL 5 YET? 060B: D0 F6 00230 BNE PULL 00240 *SETUP POINTERS TO MOVE SHAPE FROM STORAGE PLACE TO PLACE IN P/M AREA 060D: AD 95 06 00250 LDA NEWX HORIZONTAL POSITION 0610: AE 91 06 00260 LDX PLAYNUM 0613: 9D 00 D0 00270 STA HPOSPOJ ; TELL ANTIC NEWX 0616: AD 96 06 00280 LDA BASE HIBYTE OF PMBASE 0619: 85 D5 00290 STA SHAPEH 061B: 18 00300 CLC 061C: 69 04 00310 ADC #$04 SET FOR PLAYER 0 ADDRESS 061E: 85 CF 00320 STA SHPMH 0620: AD 91 06 00330 LDA PLAYNUM PLAYER 0623: C9 04 00340 CMP #$04 MISSILES? 0625: B0 2F 00350 BGE MISSILES 0627: AA 00360 TAX ;PLAYER # BECOMES INDEX 0628: BD 85 06 00370 LDA INDEX,X 062B: 85 D4 00380 STA SHAPEL 062D: CA 00400 .1 DEX ;WE INCREMENT SHPMH FOR EACH PLAYER UNLESS 0 062E: 30 04 00410 BMI ERASE 0630: E6 CF 00420 INC SHPMH ;EACH INDIVIDUAL P/M AREA 256 BYTES APART 0632: D0 F9 00430 BNE .1 ALWAYS 00440 ERASE 0634: AD 93 06 00450 LDA OLDY Y 0637: 85 CE 00460 STA SHPML 0639: A9 00 00470 LDA #$00 ;ERASE WITH 0 063B: A8 00480 TAY ; Y--O 063C: 91 CE 00490 .1 STA (SHPML),Y ;STORE IN PROPER P/M AREA 063E: C8 00500 INY ;NEXT BYTE 063F: CC 92 06 00510 CPY PLAYLEN DONE? 0642: 90 F8 00520 BLT .1 0644: AD 94 06 00530 LDA NEWY NEW Y 0647: 85 CE 00540 STA SHPML ;SETUP POINTER TO PLOT 0649: A0 00 00550 LDY #$00 064B: B1 D4 00570 DRAW LDA (SHAPEL),Y ;LOAD BYTE FROM PLAYER SHAPE TABLE 064D: 91 CE 00580 STA (SHPML),Y ;STORE IN PROPER P/M PLAYER AREA 064F: C8 00590 INY ;NEXT BYTE 0650: CC 92 06 00600 CPY PLAYLEN ;DONE? 0653: 90 F6 00610 BLT DRAW 0655: 60 00620 RTS 00650 *COMES HERE WITH ACC=MISSILE# PLUS 4 0656: 38 00660 MISSILES SEC 0657: E9 04 00670 SBC #$04 GET PROPER MISSILE # (0-3) 0659: AA 00680 TAX SET INDEX FOR MISSILE MASKS 065A: C6 CF 00690 DEC SHPMH SHPMH WAS SET FOR PLAYERO, MISSILES ARE 1 065C: AD 93 06 00700 LDA OLDY OLD/CURRENT Y POS. \PAGE LOWER 065F: 85 CE 00710 STA SHPML 0661: A0 00 00720 LDY #$00 0663: B1 CE 00740 UNDRAW LDA (SHPML),Y ;LOAD OLD MISSILES DATA 0665: 3D 89 06 00750 AND MASKS,X ; ERASE IT BUT DON'T DISTURB OTHER MISSILES 0668: 91 CE 00760 STA (SHPML),Y ;STORE COMBINED MISSILE DATA IN P/M AREA 066A: C8 00770 INY ;NEXT BYTE 066B: CC 92 06 00780 CPY PLAYLEN DONE? 066E: 90 F3 00790 BLT UNDRAW 0670: AD 94 06 00800 LDA NEWY NEW Y POS. 0673: 85 CE 00810 STA SHPML 0675: A0 00 00820 LDY #$00 0677: B1 CE 00840 MDRAW LDA (SHPML),Y ;LOAD OLD MISSILES DATA 0679: 1D 8D 06 00850 ORA SHOTSJ ; MERGE SHOT DATA WITH OTHER MISSILES 067C: 91 CE 00860 STA (SHPML),Y ;STORE NEW COMBINED MISSILE BYTE 067E: C8 00870 INY ;NEXT BYTE 067F: CC 92 06 00880 CPY PLAYLEN ;DONE? 0682: 90 F3 00890 BLT MDRAW 0684: 60 00900 RTS 00910 0685: 00 40 80 0688: C0 00920 INDEX HS 004080CO ;LO BYTE OF STORED PLAYER SHAPES 0689: FC F3 CF 068C: 3F 00930 MASKS HS FCF3CF3F ;MISSILE MASKS 068D: 03 0C 30 0690: C0 00940 SHOTS HS 030C30CO ;MISSILE SHAPES 0691: 00 00950 PLAYNUM BS 1 0692: 00 00960 PLAYLEN BS 1 0693: 00 00970 OLDY BS 1 0694: 00 00980 NEWY BS 1 0695: 00 00990 NEWX BS 1 0696: 00 01000 BASE BS 1 ;HI BYTE PMBASE IS BOKED IN FROM BASIC