*PLAYER MISSILE INTERFACE TO BASIC *CODE BY JEFF STANTON & DAN PINAL *PLAYER SHAPES ARE STORED IN PAGE ONE P/M AREA *MAX LENGTH 64 BYTES EACH * HPOSP0 EQU $D000 SHAPEL EQU $D4 ; LO BYTE WHERE SHAPE IS STORED SHAPEH EQU $D5 ; HI BYTE SHPML EQU $CE ; LO BYTE TO DRAW OR ERASE SHAPE IN P/M AREA SHPMH EQU $CF ; HI BYTE * * CALL FROM BASIC * A=USR(1536, PLAYER #,PLAYER LEN,OLD Y,NEW Y,NEW X) ORG $600 * .TF "D:PMSUB.OBJ" *TRANSFER VALUES IN USR FUNCTION THAT ARE STORED ON STACK TO SUBROUTINE START PLA ; PULL # OF ARG'S OFF STACK LDX #$00 PULL PLA ; DISCARD THE HIBYTE IT'S USELESS PLA ; GET VALUE STA PLAYNUM,X INX CPX #$05 ; GOT ALL 5 YET? BNE PULL *SETUP POINTERS TO MOVE SHAPE FROM STORAGE PLACE TO PLACE IN P/M AREA LDA NEWX ; HORIZONTAL POSITION LDX PLAYNUM STA HPOSP0,X ; TELL ANTIC NEWX LDA BASE ; HIBYTE OF PMBASE STA SHAPEH CLC ADC #$04 ; SET FOR PLAYER 0 ADDRESS STA SHPMH LDA PLAYNUM ; PLAYER CMP #$04 ; MISSILES? BGE MISSILES TAX ; PLAYER # BECOMES INDEX LDA INDEX,X STA SHAPEL AA1 DEX ; WE INCREMENT SHPMH FOR EACH PLAYER UNLESS 0 BMI ERASE INC SHPMH ; EACH INDIVIDUAL P/M AREA 256 BYTES APART BNE AA1 ; ALWAYS ERASE LDA OLDY ; Y STA SHPML LDA #$00 ; ERASE WITH 0 TAY ; Y--O AB1 STA (SHPML),Y ; STORE IN PROPER P/M AREA INY ; NEXT BYTE CPY PLAYLEN ; DONE? BL AB1 LDA NEWY ; NEW Y STA SHPML ; SETUP POINTER TO PLOT LDY #$00 DRAW LDA (SHAPEL),Y ; LOAD BYTE FROM PLAYER SHAPE TABLE STA (SHPML),Y ; STORE IN PROPER P/M PLAYER AREA INY ; NEXT BYTE CPY PLAYLEN ; DONE? BL DRAW RTS *COMES HERE WITH ACC=MISSILE# PLUS 4 MISSILES SEC SBC #$04 ; GET PROPER MISSILE # (0-3) TAX ; SET INDEX FOR MISSILE MASKS DEC SHPMH ; SHPMH WAS SET FOR PLAYERO, MISSILES ARE 1 LDA OLDY ; OLD/CURRENT Y POS. ; \PAGE LOWER STA SHPML LDY #$00 UNDRAW LDA (SHPML),Y ; LOAD OLD MISSILES DATA AND MASKS,X ; ERASE IT BUT DON'T DISTURB OTHER MISSILES STA (SHPML),Y ; STORE COMBINED MISSILE DATA IN P/M AREA INY ; NEXT BYTE CPY PLAYLEN ; DONE? BL UNDRAW LDA NEWY ; NEW Y POS. STA SHPML LDY #$00 MDRAW LDA (SHPML),Y ; LOAD OLD MISSILES DATA ORA SHOTS,X ; MERGE SHOT DATA WITH OTHER MISSILES STA (SHPML),Y ; STORE NEW COMBINED MISSILE BYTE INY ; NEXT BYTE CPY PLAYLEN ; DONE? BL MDRAW RTS INDEX DB $00,$40,$80,$C0 ; LO BYTE OF STORED PLAYER SHAPES MASKS DB $FC,$F3,$CF,$3F ; MISSILE MASKS SHOTS DB $03,$0C,$30,$C0 ; MISSILE SHAPES PLAYNUM DS 1 PLAYLEN DS 1 OLDY DS 1 NEWY DS 1 NEWX DS 1 BASE DS 1 ; HI BYTE PMBASE IS POKED IN FROM BASIC