               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
