*=$1F00 BP LDA #2 ;INIT RESET KEY STA 9 LDA #BP STA 3 LDA #0 STA 580 STA LN ;LVL VAR=0 STA SP ;SPD VAR=0 STA 82 ;LMAR=0 STA JLOCK ;UNLOK JOYSTIK LDA #39 STA 83 ;RMAR=0 LDA #7 JSR GRAPHICS LDA #64 STA 16 STA 53774 ;NO BREAK LDA #HPOS STA $C1 ;DEC ADR H STA PHPOS+1 ;HPOS PTR H LDY #0 MAKEDEC LDA #$DE ;"DEC ABS,X" STA DECS,Y LDA $C0 ; ADR TO DEC L INY STA DECS,Y LDA $C1 ; ADR TO DEC H INY STA DECS,Y LDA $C0 ;INC BY 8 ADR FOR CLC ; 'DEC' INSTR TO ADC #$08 ; GET NXT IN LYR STA $C0 ; OF STRS LDA $C1 ADC #0 STA $C1 INY ;MAKE NXT INSTR. CPY #72 ;DONE ALL? BCC MAKEDEC ;N:CONT LDA #DLII STA $C1 LDA #LT STA PLT+1 LDX #0 ;#DLI'S DONE OMDLI LDY #0 ;#INSTR'S DONE IMDLI LDA DLIP,Y ;GET INSTR. STA ($C0),Y ;PUT IN DLI INY ;NXT BYT CPY #15 ;DONE? BCC IMDLI ;N:GET ANOTHER LDA $C0 ;Y:INC ADR WHERE CLC ; DLI IS PUT IN ADC #15 ; MEM STA $C0 LDA $C1 ADC #0 STA $C1 LDA PHPOS ;CHG DLI INSTR CLC ; TBL SO NXT DLI ADC #1 ; REFERS TO NXT STA PHPOS ; STAR'S HPOS LDA PHPOS+1 ADC #0 STA PHPOS+1 LDA PLT ;SAME FOR LUM. CLC ADC #1 STA PLT LDA PLT+1 ADC #0 STA PLT+1 INX CPX #192 ;DONE 192 DLIS? BCC OMDLI ;N:KEEP MAKING LDA #3 ;Y:ENABLE P/M STA 53277 STA ERP ;LVL 1 PSE LDA #$40 ;PMBASE=$4000 STA 54279 LDA #62 ;SDMCTL=SGL LINE STA 559 LDA #1 ;GRPRIOR STA 623 STA 752 ;CURSOR OFF LDA ELVT ;GET LVL 1 SPD STA ELVL ;STORE IN PGM LDA #$31 ;INIT MSGS STA LNGM STA SPGM LDA #14 ;SET UP P/M COL STA 704 STA 705 STA 706 LDY #0 TYA BLANKPM STA $4300,Y ;CLR M1-4 STA $4400,Y ; P0 STA $4500,Y ; P1 STA $4600,Y ; P2 INY BNE BLANKPM ;DONE ALL 256? LDX #32 ;Y:X=OFSET TO M0 LDA #$80 STA X ;INIT CRSHR POS STA Y FM STA $4300,X ;FILL M3 INX CPX #224 ;BOT OF SCREEN? BCC FM ;N:CONT FILL LDX #0 ;Y:INIT STR COLS STX CTR OLP LDY #0 ILP LDA C,Y ;GET LUM FROM TBL STA LT,X ;STORE IN BIG TBL INX INY CPY #8 ;DONE W/SML TBL? BCC ILP ;N:KEEP XFER INC CTR ;Y:NXT GRP LDA CTR CMP #24 ;DONE W/SCREEN? BCC OLP ;N:XFER SML TBL LDA #0 ;Y:BLK BCKGROUND STA 710 TAX FILL LDA $D20A STA HPOS,X ;RND STAR HPOS INX CPX #192 ;DONE 192? BCC FILL ;N:MORE RND HPOS LDA 560 ;Y:SET UP DLI STA $C0 ; LINE LDA 561 STA $C1 LDY #2 LDA ($C0),Y ORA #$80 STA ($C0),Y LDA #SVBI ; ROUTINE STA $0229 LDA #DLI STA 513 LDX #0 INITE LDA $D20A AND #$7F CLC ADC #60 ;RND ENM X STA EX,X AND #$3F ;RND ENM MOVE STA ELIM,X ; LIMIT AND #$03 ;RND ENM DX SEC SBC #1 STA EDX,X REINITY LDA $D20A ;RND ENM Y AND #$7F CLC ADC #46 STA EY,X AND #$03 ;RND ENM DY SEC SBC #1 BEQ REINITY ;NO ZERO DY! STA EDY,X LDA #0 ;MVMENT CTR=0 STA ECTR,X STA ELOCK,X ;UNLOK ENM LDA #$FF ;#VECTS MOVED= STA NV,X ; NEG:ENM ADVANC LDA #5 ;ENM SHP CTR=5= STA ESC,X ; SMALLEST FRAME LDA #7 STA EP,X ;TMR PSE=7 STA ET,X ;TMR=7 INX CPX #3 ;DONE ALL 3 ENM? BCC INITE ;N:INIT NEXT LDA ERP ;Y:ENM RTN PSE*8= ASL A ; ENM FIRING PSE ASL A ASL A STA OKF LDA #$70 STA SHIELD ;INIT SHIELD LDA #$99 STA REM ;INIT REMAINING LDA #0 ;POS 0,0 STA 656 STA 657 STA 658 TAX ;X=IOCB0=SCRN LDA #11 ;ICCOM=PUTCHR STA $0342 LDA #SMSG STA $0345 LDA #158 ;ICBLEN=158 STA $0348 STX $0349 STX $02FF ;NO CTRL-1 JSR $E456 ;CIOV ST LDX #0 ;PSE ABT 1 SEC OP LDY #0 IP DEY BNE IP DEX BNE OP STX $02FF ;NO CTRL-1 LDA 53279 ;CONSOLE KEY CMP #7 ;TOUCHING A KEY? BEQ ST CMP #5 ;SELECT? BNE NSEL JMP SELECT NSEL CMP #3 ;OPTION? BNE NOPT JMP OPTION NOPT CMP #6 ;START? BNE ST JMP START OPTION LDX LN ;INC LEVEL NUMBER INX CPX #3 BCC LNS LDX #0 LNS STX LN LDA ELVT,X ;GET ENM LVL STA ELVL ;STORE IN PGM LDA #35 ;POS 33,0 STA 657 LDA #0 STA 658 STA 656 STA $0348 ;ICBLEN=0:DATA STA $0349 ; STORED IN ACCU. LDA #11 ;ICCOM=PUTCHR STA $0342 INX ;CHG LVL TO ASCII TXA ORA #$30 STA LNGM ;STORE IN GMSG LDX #$00 ;X=IOCB0:SCREEN JSR $E456 ;CIOV JMP ST ;BACK TO PAUSE SELECT LDX SP ;INC ENM SPD BY 1 INX CPX #3 BCC SPS LDX #0 SPS STX SP LDA ERPT,X ;GET NEW PAUSE STA ERP ; &STORE IN PGM LDA #35 ;POS 33,1 STA 657 LDA #0 STA 658 STA $0348 ;ICBLEN=0:DATA IN STA $0349 ; ACCU. LDA #1 STA 656 LDA #11 ;ICCOM=PUTCHR STA $0342 INX ;CHG SPD TO ASCII TXA ORA #$30 STA SPGM ;STORE IN GMSG LDX #0 ;X=IOCB0:SCREEN JSR $E456 ;CIOV JMP ST ;BACK TO PAUSE START LDX #0 ;POS 0,0 STX 656 STX 657 STX 658 LDA #11 ;ICCOM=PUTCHR STA $342 LDA #GMSG STA $0345 LDA #158 ;ICBLEN=158 STA $0348 LDA #0 STA $0349 JSR $E456 ;CIOV LDA #1 ;SET FLAG=PUT STA EFLAG ; CRSHAIR ON SCR STA $21A ;ENABLE SET RTN LDA #192 STA 54286 ;ENABLE DLI MAIN LDA $D20F AND #$04 ;PRESSNG ANY KEY? BNE NOSPACE LDA 53769 CMP #$21 ;PRESSING SPACE? BNE NOSPACE JSR STPI ;STP ALL INTER. KEYED LDA $D20F AND #$04 ;STILL PRESSING? BEQ KEYED PAUSED LDA $D20F AND #$04 ;PRESSING A KEY? BNE PAUSED LDA 53769 CMP #$21 ;PRESSING SPACE? BNE PAUSED RELEASE LDA $D20F AND #$04 ;STILL PRESSING? BEQ RELEASE JSR STRI ;RESTART INTER. NOSPACE LDA #0 STA 77 ;NO ATTRACT MODE LDA $D010 ;FIRE BUTTON? BNE EFIRE ;N:ENM'S FIRE JMP FIRE ;Y:YOU FIRE EFIRE LDA OKF ;TIME FOR ENM TO BEQ DOEFIRE ; FIRE? JMP MAIN DOEFIRE LDA ERP ;RESTORE ENM FIRE ASL A ; CTR ASL A ASL A STA OKF LDA $D20A ELVL=*+1 CMP #64 ;FIRE ACCORDING BCS MAIN ; TO PROBABILITY AND #$03 CMP #3 BEQ MAIN TAX ;ENEMY # FIRING LDA NV,X BEQ MAIN ;IF RECEDING,QUIT BMI MAIN ;IF ADVANCNG,QUIT LDA ELOCK,X BNE MAIN ;IF LOCKED,QUIT STX EL LDA #$20 ;START ENM LASER STA $D200 ; SOUND LDA #$4F STA $D201 LDA #1 ;LOCK ENEMY STA ELOCK,X LDA #2 ;COLOR 2 JSR COLOR LDX EL LDA EY,X ;CHG ENM PLR Y SEC ; INTO GR 7 YPOS SBC #26 LSR A PHA TAY LDA EX,X ;CHG ENM PLR X SEC ; INTO GR 7 XPOS SBC #45 PHA TAX LDA #0 JSR PLOT ;PLOT LDA $D20A ;RND YPOS AND #$3F CLC ADC #8 TAY STA LY LDA $D20A ;RND XPOS AND #$7F CLC ADC #16 TAX STA LX LDA #0 JSR DRAWTO ;DRAWTO TO HERE LDA #64 ;FLASH SCREEN RED STA 712 STA 710 LDA #0 ;COLOR 0 JSR COLOR PLA ;START XPOS FOR TAX ; LASER PLA ;START YPOS FOR TAY ; LASER LDA #0 JSR PLOT ;'UNPLOT' THIS PT LDA #0 ;END XPOS FOR LDX LX ; LASER LDY LY ;END YPOS JSR DRAWTO ;ERASE LINE LDX EL LDA #0 ;UNLOCK ENEMY STA ELOCK,X STA $D200 ;TURN OFF SOUND STA $D201 STA 712 ;BLACKEN SCREEN STA 710 LDA SHIELD PHA CMP #2 BCC LOSE ;YOU KILLED? JSR STPI SED PLA SEC SBC #2 ;DECREASE SHIELD STA SHIELD PHA CLD JSR STRI LDA #36 ;POS 36,0 STA 657 LDA #0 STA 658 STA 656 PLA JSR PN ;PRINT NEW SHIELD JMP MAIN ;BACK TO MAIN LOSE LDA #$8F ;DISTORTION,VOL STA $D201 ; FOR YOUR EXPL STA JLOCK ;LOCK JSTICK LDX #$80 ;EXPL DURATION LO LDY #0 LI LDA $D20A STA $D200 ;RND FREQ STA 712 ;RND COL STA 710 DEY BNE LI DEX BNE LO ;LOOP YOUR EXPL STX $D200 ;TURN OFF SOUND STX $D201 STX 712 ;BCK COL=0 STX 710 STX 656 ;POS 0,0 STX 657 STX 658 LDA #11 STA $0342 ;ICCOM=PRNCHR LDA #LMSG STA $0345 LDA #39 ;ICBLEN=39 STA $0348 STX $0349 JSR $E456 ;CIOV JMP RES ;WAIT FOR RESTART FIRE LDA #$4F ;START YOUR LASER STA $D201 ; SOUND LDA #1 STA $D200 STA JLOCK ;LOCK JOYSTIK JSR COLOR ;COLOR 1 LDA #0 STA 53278 ;CLR OLD COLL. LDX #80 LDY #79 JSR PLOT ;PLOT 80,79 LDA X ;CHG CROSSHAIR X SEC ; TO GR.7 XPOS SBC #45 PHA TAX LDA Y ;CHG CROSSHAIR Y SEC ; TO GR.7 YPOS SBC #26 LSR A PHA TAY LDA #0 JSR DRAWTO ;DRAWTO TO HERE LDA #0 JSR COLOR ;COLOR 0 LDA #0 LDX #80 LDY #79 JSR PLOT ;ERASE LASER STRT PLA ;LASER END Y TAY PLA ;LASER END X TAX LDA #0 ;TURN OFF SOUND STA $D200 STA $D201 JSR DRAWTO ;ERASE LASER LDA #0 ;UNLOK JOYSTIK STA JLOCK LDA $D008 ;CHECK FOR ANY BEQ CH2 ; COLLISIONS JSR HIT CH2 LDA $D009 BEQ CH3 JSR HIT CH3 LDA $D00A BEQ NOHIT JSR HIT NOHIT JMP EFIRE ;LET ENM FIRE HIT BIT ONE ;HIT P0? BEQ ONEOK LDX #0 JSR EXPLODE ONEOK BIT TWO ;HIT P1? BEQ TWOOK LDX #1 JSR EXPLODE TWOOK BIT FOUR ;HIT P2? BEQ FOUROK LDX #2 JSR EXPLODE FOUROK RTS EXPLODE PHA ;SAVE COLL REG TXA ;SAVE WHICH ENM PHA ; TO EXPLODE LDA ELOCK,X ;ENM LOCKED? BEQ CANEXP PLA PLA RTS CANEXP PLA ;RESTORE WHICH TO PHA ; EXPL.&SAVE AGN CLC ;GET WHICH PLR ADC #$44 ; BAND TO USE STA EXPADR LDA #1 ;LOCK ENEMY STA ELOCK,X LDA EY,X ;GET ENM YPOS TAY LDX #0 EXPLP LDA EXPSHP,X ;PUT EXPLOSION EXPADR=*+2 STA $FF00,Y INX INY CPX #12 ;ALL 12? BCC EXPLP PLA TAX LDA #60 ;KEEP THIS EXPL. STA EXPCTR,X ; ON FOR 1 SEC JSR STPI ;STP INT SED LDA REM SEC SBC #1 STA REM ;REM=REM-1(DEC) LDA SHIELD CMP #$99 BEQ NOIS CLC ADC #1 STA SHIELD ;SHIELD=SHIELD+1 NOIS CLD JSR STRI ;STR INT LDA REM PHA CMP #3 ;>=3 LEFT? BCS CANR LDA #0 ;CANT RESTORE JMP STORR CANR LDA #1 ;CAN RESTORE STORR STA R,X PLA BEQ WIN ;IF KILL ALL,WIN! LDY #36 ;POS 36,1 STY 657 LDY #0 STY 658 LDY #1 STY 656 JSR PN ;PRNT #REMAINING LDA #36 ;POS 36,0 STA 657 LDA #0 STA 658 STA 656 LDA SHIELD JSR PN ;PRINT NEW SHIELD PLA ;RESTORE COL REG RTS ;BACK TO CALLER WIN LDX #0 ;POS 0,0 STX 656 STX 657 STX 658 LDA #11 ;ICCOM=PUTCHR STA $342 LDA #WMSG STA $345 LDA #79 ;ICBLEN=79 STA $348 STX $349 JSR $E456 ;CIOV RES LDA 53279 ;PRESSING START? CMP #6 BNE RES JMP $E474 ;'PRESS' RESET PN PHA LSR A ;GET HIGH NIBBLE LSR A LSR A LSR A JSR CA ;PRINT PLA AND #$0F ;GET LOW NBL&PRT CA ORA #$30 ;CHG TO ASCII LDX #11 ;ICCOM=PUTCHR STX $342 LDX #0 ;ICBLEN=0=DATA IN STX $348 ; ACCU. STX $349 JMP $E456 ;CIOV STPI LDA #$80 ;STOP INTERRUPTS STA $D40E SEI RTS STRI LDA #$C0 ;ENABLE INTER.'S STA $D40E CLI RTS SVBI LDA #DVBI STA $0225 LDA #IVBI STA $0223 LDA #CRTN STA $0229 LDA #1 STA $021A RTS CRTN LDA #0 STA $02FF ;NO CTRL-1 INC 708 ;PULSE YOUR LASER LDA OKF ;UPDATE OKF (ENM BEQ NUOKF ; FIRE CTR) DEC OKF NUOKF LDX #2 CKEXP LDA EXPCTR,X ;ENM EXPLODING? BEQ NXEXP DEC EXPCTR,X ;DEC EXPL CTR BEQ STPEXP ;IF DONE EXP,STOP LDA #$20 ;ELSE,KEEP EXPL STA $D202 ; SOUND ON LDA #$0F STA $D203 NXEXP DEX BPL CKEXP ;DONE ALL ENM'S? LDA #1 ;RESET CTDN TMR STA $21A RTS STPEXP TXA PHA CLC ;GET WHICH PLR ADC #$44 ; BAND TO USE STA EREXAD LDA EY,X TAY LDA #0 STA $D202 ;STOP EXPL SOUND STA $D203 TAX EREX EREXAD=*+2 STA $FF00,Y ;ERASE EXPL INX INY CPX #12 ;DONE ERASING? BCC EREX PLA TAX LDA $D20A ;RND XPOS AND #$7F CLC ADC #60 STA EX,X LDA $D20A ;RND YPOS AND #$7F CLC ADC #46 STA EY,X LDA #$FF ;ENEMY=ADVANCING STA NV,X LDA #0 STA 53278 ;NO COLL W/EXPL. LDA #5 ;ENEMY=STARTS STA ESC,X ; OUT SMALL LDA #7 STA ET,X ;ENM TMR=7 STA EP,X ;ENM TMR PSE=7 LDA R,X BEQ NOU ;CAN WE UNLOK? LDA #0 STA ELOCK,X ;UNLOK NOU JMP NXEXP ;NXT EXPL. DVBI INC S1 ;STAR1 CTR=..+1 INC S2 ; 2 INC S3 ; 3 INC S4 ; 4 INC S5 ; 5 INC S6 ; 6 INC S7 ; 7 INC S8 ; 8 LDX #0 PAUSE LDA S1,X ;NEED TO RESET CMP PS,X ; THIS CTR? BCC SKIP LDA #0 ;RESET CTR STA S1,X JSR DECS ;AND MOV THE STRS CPX #1 BCS SKIP JSR DECS SKIP INX ;NEXT LEVEL CPX #8 ;DONE ALL 8 LVLS? BCC PAUSE JMP $E462 ;RET TO SYSTEM DECS Org *+72 ;DEC STRS IN LYR RTS ; (CREATED RTNE) DLI PHA ;SAVE REGS TXA PHA TYA PHA DLII Org *+2880 ;SET STR HPOS,LUM PLA ;RESTORE REGS TAY PLA TAX PLA RTI IVBI LDA JLOCK ;LOCKED JOYSTIK? BEQ JMOVE JMP ERTN JMOVE LDX #1 CHECKJOY LDA #15 ;GET 15-STICK(0) SEC SBC 632 BIT ONE ;UP? BEQ NOTONE LDY Y CPY #32 ;IS Y AT TOP? BCC NOTONE DEC Y ;DEC Y TWICE DEC Y STX EFLAG ;FLAG-REDRAW NOTONE BIT TWO ;DOWN? BEQ NOTTWO LDY Y CPY #182 ;IS Y AT BOT? BCS NOTTWO INC Y ;INC Y TWICE INC Y STX EFLAG ;FLAG-REDRAW NOTTWO BIT FOUR ;LEFT? BEQ NOTFOUR LDY X CPY #50 ;IS X LEFTMOST? BCC NOTFOUR DEC X ;DEC X TWICE DEC X NOTFOUR BIT EIGHT ;RIGHT? BEQ NOTEIGHT LDY X CPY #201 ;IS X RTMOST? BCS NOTEIGHT INC X ;INC X TWICE INC X NOTEIGHT LDX X ;UPDATE XPOS STX $D004 INX INX STX $D005 INX INX STX $D006 ;STORE IN HPOSM2 LDA EFLAG ;NEED TO REDRAW? BEQ ERTN ;N:MOVE ENEMIES LDA #0 ;Y:REDRAW CROSS- STA EFLAG ; HAIR TAX LDY Y PUTLOOP LDA $4300,Y ;GET OLD MBYTE AND #$C0 ;SAVE ONLY M3 ORA PSHAP,X ;FORCE IN C-HAIR STA $4300,Y ;STORE FINAL BYT INX INY CPX #12 ;DONE ALL 12? BCC PUTLOOP ERTN LDA #0 STA EC STA $C0 ;($C0)=PTR TO PLR LDA #$44 ; BAND CURRENTLY STA $C1 ; IN USE LDX EC ELOOP LDA ELOCK,X ;ENEMY LOCKED? BEQ CKTM JMP NEXENM CKTM DEC ET,X ;DEC ENM'S TIMER BEQ DOTHISENM ;IF ZERO,MOVE HIM JMP NEXENM ;ELSE DO NEXT ENM DOTHISENM LDA EP,X ;RESET THIS ENM'S STA ET,X ; TIMER LDA NV,X ;GET #VECTRS MOVD BEQ DSAPPR ;ZERO=DSAPPR BMI APPEAR ;NEG#=APPEAR JMP CONTERTN ;POS#=MOVING DSAPPR STA CTR LDA ESC,X CMP #5 BCS SETAPR ;DONE DISAPPRING? ASL A CLC ADC ESC,X ASL A ASL A LDY EY,X ;Y=PTR TO ENM PLR TAX ;X=PTR 2 ESHP TBL RECLP LDA ESHAP,X ;GET SHAPE BYTE STA ($C0),Y ;STORE IT IN P0 INX INY INC CTR LDA CTR CMP #12 BCC RECLP LDX EC INC ESC,X ;NEXT FRAME JMP NEXENM ;NXT ENM SETAPR LDA #$FF ;#VECT CTR=NEG #: STA NV,X ; ENM WILL APPEAR LDA EY,X CLC ADC #5 STA EY,X TAY LDA #0 ;ERASE ENEMY STA ($C0),Y LDA $D20A ;RND ENM XPOS AND #$7F CLC ADC #60 STA EX,X LDA $D20A ;RND ENM YPOS AND #$7F CLC ADC #46 STA EY,X JMP NEXENM ;NXT ENM APPEAR DEC ESC,X BMI DNAPPR ;DONE APPEARING? LDA ESC,X ASL A CLC ADC ESC,X ASL A ASL A LDY EY,X ;Y=PTR TO ENM PLR TAX ;X=PTR TO SHP TBL LDA #0 STA CTR APLP LDA ESHAP,X ;GET ENM SHP BYT STA ($C0),Y ;PUT IT IN PLR INX INY INC CTR LDA CTR ;DONE 12 BYTES? CMP #12 BCC APLP LDX EC LDA EX,X ;GET ENM'S XPOS STA $D000,X ;STORE IN HPOS JMP NEXENM ;NXT ENM DNAPPR LDA $D20A ;RND MAX # VECTRS AND #$07 CLC ADC #4 STA MNV,X ERP=*+1 LDA #1 STA ET,X ;ENM TMR=1 STA EP,X ;ENM TMR PSE=1 LDA #1 STA NV,X ;#VETCS MOVED=1 JMP NEXENM ;NXT ENM CONTERTN LDA EX,X ;ENM'S X=..+DX CLC ADC EDX,X STA EX,X CMP #48 ;OFF LEFT EDGE? BCC CEDIR CMP #201 ;OFF RIGHT EDG? BCS CEDIR LDA EY,X ;ENM Y=..+DY CLC ADC EDY,X STA EY,X CMP #186 ;OFF BOT EDGE? BCS CEDIR CMP #33 ;OFF TOP EDGE? BCC CEDIR INC ECTR,X ;N:INC CTR 4 ENM LDA ECTR,X ;HAS IT MOVED CMP ELIM,X ; THE LIMIT? BCS CEDIR PUTENM LDY EY,X ;Y=PTR TO ENM PLR LDX #0 ;X=PTR TO SHP TBL PUTELP LDA ESHAP,X ;GET ENM SHAPBYT STA ($C0),Y ;STORE IN ENM PLR INY INX CPX #12 ;DONE ALL 12? BCC PUTELP LDX EC LDA EX,X ;GET ENM XPOS STA $D000,X ;STORE IN HPOS NEXENM INC $C1 ;NXT PLR BAND INC EC ;NXT ENM CTR LDX EC ;DONE W/ALL 3 CPX #3 ; ENMS? BCS RETIMM JMP ELOOP ;CONT W/NXT ENM RETIMM JMP $E45F ;BACK TO SYSTEM CEDIR LDA EY,X ;RESTORE ENM YPOS SEC SBC EDY,X STA EY,X LDA EX,X ;RESTORE ENM XPOS SEC SBC EDX,X STA EX,X INC NV,X ;#VECTS MVED=..+1 LDA NV,X ;LIMIT YET? CMP MNV,X BCC CNTCEDIR LDA #0 ;NV=0:FLAG-ENM STA NV,X ; WILL RECEDE STA ESC,X ;RSET ENM SHP CTR LDA #7 STA ET,X ;ENM TMR=7 STA EP,X ;ENM TMR PSE=7 JMP NEXENM ;UPDATE NXT ENM CNTCEDIR LDA #0 ;RESET MVEMNT CTR STA ECTR,X LDA 53770 ;SET A NEW AND #$3F ; MOVEMENT LIMIT STA ELIM,X LDA EX,X BPL POSEDX ;IF X=LF,DX=RT BMI NEGEDX ;IF X=RT,DX=LF NEWEDY LDA EY,X BPL POSEDY ;IF Y=UP,DY=DN BMI NEGEDY ;IF Y=DN,DY=UP JMP PUTENM ;DRAW SHAPE POSEDX JSR GETPOS ;GET RND ENM +DX STA EDX,X JMP NEWEDY NEGEDX JSR GETNEG ;GET RND ENM -DX STA EDX,X JMP NEWEDY POSEDY JSR GETPOS ;GET RND ENM +DY STA EDY,X JMP PUTENM NEGEDY JSR GETNEG ;GET RND ENM -DY STA EDY,X JMP PUTENM GETPOS LDA 53770 ;GET RND 1-3 AND #$03 BEQ GETPOS RTS GETNEG LDA 53770 ;GET RND -1 TO -3 AND #$03 BEQ GETNEG EOR #$FF CLC ADC #1 RTS ONE .BYTE 1 ;FOR 'BIT' INSTR. TWO .BYTE 2 ; SAME FOUR .BYTE 4 ; SAME EIGHT .BYTE 8 ; SAME Y .BYTE 0 ;CROSSHAIR Y X .BYTE 0 ;CROSSHAIR X EFLAG .BYTE 0 ;C-HAIR REDRAW FLAG PSHAP .BYTE $00,$00,$0C,$0C,$0C,$3F,$3F,$0C,$0C,$0C,$00,$00 ;CRSSHAIR SHAPE C .BYTE 14,12,10,8,8,6,4,2 ;STARS' COLOR (LUMINANCE) TABLE S1 .BYTE 0 ;CTR FOR STAR LAYER 1 S2 .BYTE 0 ; 2 S3 .BYTE 0 ; 3 S4 .BYTE 0 ; 4 S5 .BYTE 0 ; 5 S6 .BYTE 0 ; 6 S7 .BYTE 0 ; 7 S8 .BYTE 0 ; 8 PS .BYTE 1,1,2,3,4,6,9,14 ;STR SPD CTR .BYTE 0 ;MISC COUNTER DLIP .BYTE $AD ;"LDA ABSOLUTE" PHPOS .WORD HPOS ; ADR FOR LDA .BYTE $AC ;"LDY ABSOLUTE" PLT .WORD LT ;ADR FOR LDY .BYTE $8D,$0A,$D4 ;STA WSYNC .BYTE $8D,$07,$D0 ;STA HPOSM3 .BYTE $8C,$15,$D0 ;STY COLRM3 EX .BYTE 0,0,0 ;ENEMY XPOS TABLE EY .BYTE 0,0,0 ;ENEMY YPOS TABLE ESHAP .BYTE 0,0,0,0,146,186,254,198,0,0,0,0 .BYTE 0,0,0,0,146,254,198,0,0,0,0,0 .BYTE 0,0,0,0,84,124,68,0,0,0,0,0 .BYTE 0,0,0,0,0,56,0,0,0,0,0,0 .BYTE 0,0,0,0,0,16,0,0,0,0,0,0 EDX .BYTE 0,0,0 ;ENEMY DX TABLE EDY .BYTE 0,0,0 ;ENEMY DY TABLE ECTR .BYTE 0,0,0 ;# STEPS TRAVELED ELIM .BYTE 0,0,0 ;MAX # STEPS TO XVL NV .BYTE 0,0,0 ;#VECTORS TRAVELED MNV .BYTE 0,0,0 ;MAX VECTS TO XVEL ESC .BYTE 0,0,0 ;ENM SHAPE CTR EP .BYTE 0,0,0 ;ENM TIMER PAUSES ET .BYTE 0,0,0 ;ENM TIMERS EC .BYTE 0 ;CTR FOR ENM MVEMNT JLOCK .BYTE 0 ELOCK .BYTE 0,0,0 ;ENM 'LOCK' STATUS EL .BYTE 0 ;ENEMY FIRING LASER LX .BYTE 0 ;LASER TERMINAL X LY .BYTE 0 ;LASER TERMINAL Y EXPSHP .BYTE 20,64,10,160,4,17,132,33,4,80,2,40 ;EXPLOS SHAPE EXPCTR .BYTE 0,0,0 ;EXPLOSION COUNTER OKF .BYTE 0 ;ENM OK2FIRE CTR ELVT .BYTE 64,128,192 ;ENM LVL TBL ERPT .BYTE 3,2,1 ;ENM RTN PAUSE TBL LN .BYTE 0 ;LEVEL # SP .BYTE 0 ;ENEMY SPEED SMSG .BYTE " INVASION OPTION-Level:1 " .BYTE " SELECT-Speed:1 " .BYTE " by: Norman Lin START -Play Game " .BYTE " (c) 1988 SPACE -Pause " GMSG .BYTE " INVASION Shield Energy:70 " .BYTE " Enemies Left :99 " LNGM=*+37 .BYTE " by: Norman Lin Level Number : 1 " SPGM=*+37 .BYTE " (c) 1988 Enemy Speed : 1 " WMSG .BYTE " INVASION GOOD JOB!YOU WIN! " .BYTE " -->PRESS START<-- " LMSG .BYTE " INVASION YOU LOSE-PUSH START " SHIELD .BYTE 0 ;SHIELD ENERGY REM .BYTE 0 ;#ENM LEFT R .BYTE 0,0,0 ;ENM UNLOCK FLAG GRAPHICS PHA ;SAVE ORIG. # LDX #$60 ;IOCB 6(SCREEN) LDA #12 ;CLOSE #6 STA $342,X ;(JUST TO BE JSR $E456 ; SAFE!) LDA #3 ;OPEN #6 STA $342,X ;COMMAND # LDA SCRDEV ;AND NOW THE STA $345,X ; HI BYTE LDA #1 ;LENGTH OF SCRN STA $348,X ; I.D. IS ONLY LDA #0 ; ONE CHARACTER STA $349,X ; (THE 'S') PLA ;GET IT BACK PHA ;BUT STILL SAVE EOR #16 ;REVERSE BIT 5 AND #16 ;KEEP ONLY BIT 5 CLC ;ADD 12 TO IT ADC #12 STA $34A,X ;=ICAX1 SPEC PLA ;ORIG. MODE #= STA $34B,X ; ICAX2 SPEC JMP $E456 ;AND JMP TO CIO! COLOR STA COLNUM ;STORE IT FOR RTS ; LATER USE POSITION STY 84 ;VERT POS STX 85 ;HOR POS LO BYTE STA 86 ;HOR POS HI BYTE RTS ;BYE! PLOT JSR POSITION ;POSITION CURSOR LDX #$60 ;SCREEN (IOCB6) LDA #11 ;PUT CHARS COMD STA $342,X ;STORE IN ICCOM LDA #$00 ;BUFLEN OF ZERO STA $348,X ; MEANS GET/PUT STA $349,X ; DATA TO/FROM ; THE ACCUM. LDA COLNUM ;PUT COLOR # IN ; ACCU B/C LEN=0 JMP $E456 ;JMP TO CIO DRAWTO JSR POSITION ;POSITION CURSR LDX #$60 ;SCRN (IOCB6) LDA #17 ;DRAW LINE CMD STA $342,X ;STORE IN ICCOM LDA #0 ;ZERO BUF LEN STA $348,X ; B/C NO DATA STA $349,X ; IS XFERRED! LDA COLNUM ;STORE COL # IN STA $02FB ; 2FB FOR CIO JMP $E456 ;AND GO TO CIO SCRDEV .BYTE "S" ;SCREEN I.D. COLNUM BRK ;COLOR# STORAGE HPOS Org *+192 ;TBL STR POS LT Org *+192 ;TBL STR LUM *=$02E0 .WORD BP ;DOS RUN ADR