1?? ?D ? ? L@`Lg@pppBpK A@آ_8T F'  F ԩ% F 4C@ G NN; \ 3Gb \ 4C F vOȄȄ D H SH惭)Ѕ ODLRA D A KC eH I 8KƮƭ CƏLA vO DhXL'A I WOL@ WOL@NįFCW07QmrWX&WQm\WɠWQWQWPXWW Fư8XW%}WɠWW}W0XWW PB΢WW F`WW G:H0 ݉X ݫX BLB [F BhW`h` OLM BhXȹSSLO PIhXhX0a(X 08堝(X8X 08堝8XhX7hXhXXXXXxXxXHXXX )?8 (X )?8 8X`ҩҍҍҍҍ`_)űTQ C 4Cҩ0Ҡ CҠ C憐 )F rW ɖ \W ) C D`Ơ` CW CWWW` 0 (ؐ`\WrW F` CePmPuP}Pm\Wɠ8頙]WmrWX8XsWݽQQ`$ F G ƾƿʆJ\W(rWL D`WWWWW텨`ƨ-(W 0}WWW 0}WW٥ CL?E)/}W)(W}W)(WƪJJQ e) D޴W@WW58塅.8塝W\We Fɠ F\WW>WW38塅.8塝WrWeW FX FrW0LAEbWxW F E]WsW F`\WrW [F BLC0 ^W݉XtWݫX BLCsW]W FLC`hX0(X!)RJ}XŷX)RJ}XŸ`8` \WWW`桦p`MJL\@ԩ0@1`HJJJOOh)UP`HJJJOOh)]P1`HJJJOOh)UP1` FP G GA8P G+ G G8( G G`e `8`TLGT GT8 & & &ii륤榥eƢ`hXhX )FiX 0XxXHXXX膁` C(X C8X`hXLHHXG(X8塅.8塝HX}xXxX)xXXe nIɘ nIXXX88X8塅.8塝XXXe IOP IX0LgHhX0G }xXQR I浊Hȱi泥iĶh` IFȑiƶ` PI(X}(X(X` PI8X}8X8X`hX)RXXJJJyOyO` 4C搌`8`4Ș8偅8堅 $KL%J  L` $KX rW̪X!XXX [FLB%H!X}Xɟ K $K 4CLKXX}XPQ KXXX F  XX F LLFLF` XXX`8`!XX F LLF)  K093/+柢ʩXiXi K_ F [FLB)Ǝ.ƊeɟƋe0XLF` =M =M7_W8内uW8凅 {L  FFL+L {Li lLi lL`S`8壅8奅`XiQ8QXi` X )<i XXX )lSS mXXmXXXXXd` ! 0MX 0MXX` )8` )8`L8NM8圍ҩ 0ƜLM0SҹSƗ) ҩҤ0SҹSƘ0SҹSƙ0idҥȌҤ0SҹTҥ)ƛ.*ƞ0" eƝ ƞfeL_@ N)TعT N Nҕȕ Nȕ N8аѵ؅م0L=N)e8eLb`TTTȽTɩЕѕ`u 8 Ē vO  𵑝`  `8堨 `(~<8?@ p@8|xp  eCeYYYYYYYTR3gY-"CdDe  ~fffff~~  ~~``~~~~~~fff~~``~~~~``~ff~~~~ff~ff~~~ff~~~~~ ASTEROIDZ (C) 1985 BY J.CROUDY TU+UgUUU.VV[.}S7STA V3A:NS7EXVBIJMP $E45FSCOREPROC; ADD VALUE TO SCORE; (A)=VALUE, (X)=DIGIT POSITIONLDY SCORT+1:L1CLCADC ?} SCORT,XSTA SCORT,XCMP #$BBCC :L2SECSBC #$ASTA SCORT,XLDA #1DEXBPL :L1:L2CPY SCORT+1BEQ :L3INC LIVES @}JSR DLIVESLDA #5STA BONCNTLDA #$CSTA BONSND:L3LDX #0:L4LDA SCORT,XCMP #1BNE :L5LDA #0STA SCORLN,XINX A}CPX #5BNE :L4:L5LDA SCORT,XSTA SCORLN,XINXCPX #6BNE :L5RTSHISCORPROC; UPDATE HIGH SCORELDX #0:L1LDA S B}CORLN,XCMP HSCORE,XBEQ :NXBCC :LOWBCS :HIGH:NXINXCPX #6BNE :L1:HIGHLDX #5:L2LDA SCORLN,XSTA HSCORE,XDEX }; ASTEROIDZ V 1.0; (C) MAR 1985 BY J.CROUDY; tm; BASED ON ASTEROIDSLIST -LORG $4000INCLUDE D:EQUATE.ASMNSFLAG D}EQU $80NLAHITEQU $81CDESEQU $82LOOPSEQU $83ESTYEQU $84ESXPLEQU $85EMXPEQU $86EMYPEQU $87EMXDEQU $88EMYDEQU E} $89EMXVTEQU $8AEMYVTEQU $8BEMXVCEQU $8CEMYVCEQU $8DEMRNGEQU $8ELIVESEQU $8FVBIGOEQU $90SCORTEQU $91;92;93;94 F};95;96SHFSNDEQU $97ESFSNDEQU $98ASBSNDEQU $99SAWSNDEQU $9AESXSNDEQU $9BSHXSNDEQU $9CBONSNDEQU $9DBONCNTEQU $9 }TCNS; ONLY CALLED WHEN SHIP NEEDS TO BE; RECREATEDPROC; CHECK IF SHIP IS OVER OR NEAR; AN OBJECTLDA #40-4STA H}CHKTMP+1LDA #10STA CHKCNT+1:L0LDA #74-4STA CHKTMPLDA #10STA CHKCNT:L1LDA CHKTMPLDY CHKTMP+1JSR LOOKBNE :RI}ET; YES SO RETINC CHKTMPDEC CHKCNTBNE :L1INC CHKTMP+1DEC CHKCNT+1BNE :L0LDX #0STX NSFLAGDEXSTX SHXSND;J} INIT SHIP SCREEN POSITIONLDA #74STA SHXPLDA #40STA SHYPJMP SETSH2:RETRTSINISHP; INIT SHIP VERSION (0)LDAM}; 88 ADDRESSES OF YPOS DOWN SCREENCOUNTSET 0SCADDLECHO 88DB LOW [SCREEN+COUNT]COUNTSET COUNT+20ENDMCOUNTSET 0SO} #0STA SHVSN; NOT EXPLODING !STA XPLODESTA XPLDEL; INIT MISSILES TO BE NON EXISTANTLDX #NM-1:LIMSTA SMXP,XDN}EXBPL :LIM; INIT SHIP VELOCITY (0); AND VELOCITY COUNTDOWNSLDX #NSP-1:LISLDA #0STA SHXV,XSTA SHYV,XLDA #1SV}CADDHECHO 88DB HIGH [SCREEN+COUNT]COUNTSET COUNT+20ENDM; 8 PIXEL MASKS FOR PLOTPLMASKDB $80,$40,$20,$10,8,4,2,1P}; 8 PIXEL MASKS FOR UNPLOTUNMASKDB $7F,$BF,$DF,$EF,$F7,$FB,$FD,$FE; TABLE OF POINTERS TO X/Y; PIXEL OFFSETS FOR EACH Q}OF 8 SHIP; VERSIONSSHIXPLDB LOW SHV0XP,LOW SHV1XP,LOW SHV2XP,LOW SHV3XP,LOW SHV4XP,LOW SHV5XP,LOW SHV6XP,LOW SHV7XPSHIR}XPHDB HIGH SHV0XP,HIGH SHV1XP,HIGH SHV2XP,HIGH SHV3XP,HIGH SHV4XP,HIGH SHV5XP,HIGH SHV6XP,HIGH SHV7XPSHIYPLDB LOW SHV0YP,S}LOW SHV1YP,LOW SHV2YP,LOW SHV3YP,LOW SHV4YP,LOW SHV5YP,LOW SHV6YP,LOW SHV7YPSHIYPHDB HIGH SHV0YP,HIGH SHV1YP,HIGH SHV2YP,HT}IGH SHV3YP,HIGH SHV4YP,HIGH SHV5YP,HIGH SHV6YP,HIGH SHV7YP; TABLE OF #NSP X/Y PIXEL OFFSETS FOR; EACH OF 8 SHIP VERSIONSU}LIST LSHV0XPDB 3,1,2,3,3,2,3,4,0,1,2,4,0,4,0,1,2,4,2,3,4SHV1XPDB 1,2,3,2,2,0,1,2,0,2,3,4,0,1,4,1,3,4,1,2,3SHV2XPDB 2x}TA SHXVC,XSTA SHYVC,XDEXBPL :LIS; INIT OTHER COUNTERSSTA FRICNTSTA ROTCNTRTSDOSHIPPROC; SLOW SHIP DOWN (FW}RICTION?)DEC FRICNTBNE :NSDLDA #$28STA FRICNTLDX #NSP-1:LSDLDA #1LDY SHXV,XBEQ :NSXBMI :LXPLDA #$FF:LXPX}CLCADC SHXV,XSTA SHXV,X:NSXLDA #1LDY SHYV,XBEQ :NSYBMI :LYPLDA #$FF:LYPCLCADC SHYV,XSTA SHYV,X:NSYDEXY}BPL :LSD:NSD; IF EXPLODING, ERASE SHIP,; AND DON'T DO STICKLDA XPLODEBEQ :NEXJSR ERASHPJMP :NXS:NEX; JOYSTI}PAUSELDY #$FFCPY $D20FBEQ :RETSTY VBIGOJSR SHUTUP:P1CPY $D20FBNE :P1:PAULDA CONSOLCMP #6BEQ :STARTCPY $D[}20FBEQ :PAU:P2CPY $D20FBNE :P2INC VBIGOSTY $02FC:RETCLCRTS:STARTSECRTSDOSAUCPROC; EVERY 256 LOOPS, CON\}SIDER CREATING; A SAUCER IF NOT ONE ALREADYLDA LOOPSBNE :NCLDA CDESBEQ :NDDEC CDESBNE :NC:NDLDA ESXPLBNE :]}CRLDA ESTYBPL :NC; ALREADY ONE:CRLDA #2STA CDES; CREATE ONE IF FEW LARGE ASTEROIDS; HITLDY #0STY ESXPLDE^}YSTY ESTYLDY NASCRINYINYSTY PLTMP:LRLDA RANDOMAND #7CMP PLTMPBCS :LRCMP NLAHITBCC :NCJSR CRES:NC; _}ERASE EXPLODING ES BEFORE MOVING ITLDA ESTYBPL :OK; NO ES, SO DELAY TO COMPENSATELDX #0:LDELDEXBNE :LDELRTS:`}OKLDA ESXPLBEQ :NERJSR ERAES:NERLDA LOOPSBNE :LNYLDA ESXPLBNE :LNY; CHANGE Y DIRECTIONLDA #0LDY ESYDBNEa} :LY1LDA #1LDY SHYPCPY ESYPBCS :LY1LDA #$FF:LY1LDX #NESP-1:LY2STA ESYD,XDEXBPL :LY2:LNY; SEE IF SAUCER Hb}ITS ASTEROIDLDA ESXPLBNE :ENHALDA ESXPSTA MXPLDA ESYPSTA MYPLDX #NAS-1:LAAJSR ASRNGBCS :NXT; YESJMP Sc}PLIT:NXTDEXBPL :LAA:ENHA; MOVE SAUCERLDY #7LDA ESXPLBNE :EXPLDY #$F:EXPSTY PLTMPLDA LOOPSAND PLTMPBNEd} :NMLDX #NESP-1:L0LDA ESXP,XCLCADC ESXD,XCMP #$F0BCS :L3CMP #159BCC :NE:L3JSR CHKESXBCC :NEJSR ERAESLe}DA #4STA CDESLDA #$FFSTA ESTYBNE :NES:NESTA ESXP,XLDA ESYP,XCLCADC ESYD,XBPL :L4LDA #80BNE :L45:L4CMPf} #81BCC :L5LDA #0:L45JSR CHKESX:L5STA ESYP,XDEXBPL :L0:NM; NORMALLY ERASE ALL AROUND SAUCERLDA ESXPLBNE :g}NEALDX #NESEP-1:LEA1LDA ESXP+NESP-NESEP,XLDY ESYP+NESP-NESEP,XJSR UNPLOTDEXBPL :LEA1:NEA; DRAW SAUCERLDX #Nh}ESP-NESEP-2LDA ESXPLBEQ :LD1LDX #NESP-2:LD1LDA ESXP+1,XBEQ :NP1LDY ESYP+1,XJSR PLOT:NP1DEXBPL :LD1; PLOT },2,1,2,3,1,2,3,1,3,0,1,3,4,0,4,0,1,2,3,4SHV3XPDB 3,1,2,2,2,2,3,4,0,1,2,4,0,3,4,0,1,3,1,2,3SHV4XPDB 1,1,2,3,1,0,1,2,0,2,3,y}4,0,4,0,2,3,4,0,1,2SHV5XPDB 2,1,2,3,3,1,2,3,0,1,3,0,3,4,0,1,2,4,2,3,4SHV6XPDB 1,2,3,2,2,0,1,2,3,4,0,4,0,1,3,4,1,3,1,2,3Sz}HV7XPDB 2,2,3,1,1,1,2,3,1,3,4,0,1,4,0,2,3,4,0,1,2SHV0YPDB 1,2,2,2,3,0,0,0,1,1,1,1,2,2,3,3,3,3,4,4,4SHV1YPDB 1,2,2,3,3,0{},0,0,1,1,1,1,2,2,2,3,3,3,4,4,4SHV2YPDB 1,2,3,3,3,0,0,0,1,1,2,2,2,2,3,3,4,4,4,4,4SHV3YPDB 1,2,2,3,3,0,0,0,1,1,1,1,2,2,2,3,|}3,3,4,4,4SHV4YPDB 1,2,2,2,3,0,0,0,1,1,1,1,2,2,3,3,3,3,4,4,4SHV5YPDB 1,2,2,3,3,0,0,0,1,1,1,2,2,2,3,3,3,3,4,4,4SHV6YPDB 1}},1,1,2,3,0,0,0,0,0,1,1,2,2,2,2,3,3,4,4,4SHV7YPDB 1,2,2,3,3,0,0,0,1,1,1,2,2,2,3,3,3,3,4,4,4; JOYSTICK TABLESTKTABDB 0,1~},$FF,0; DIRECTIONS PER SHIP VERSIONSHXDIRDB $FF,$FF,0,1,1,1,0,$FFSHYDIRDB 0,$FF,$FF,$FF,0,1,1,1; POSITIONS WHERE MIS}SILES START; PER SHIP VERSIONMXPOSDB 0,0,2,4,4,4,2,0MYPOSDB 2,0,0,0,2,4,4,4; POINTERS TO AST BIT MAPS PER SIZEASTL}BPL :L2:LOWRTSDLIVESPROC; CLEAR LIFE DISPLAYLDA $14:L14CMP $14BEQ :L14LDX #26LDA #0:L1STA SCORLN+6,X }CK UP ROUTINE (THRUST)LDA STICKAND #1BNE :NYSLDX #NSP-1:LTLDA SHXDCLCADC SHXV,XCMP #MINV-1BNE :XNMNLDA #}MINV:XNMNCMP #MAXV+1BNE :XNMXLDA #MAXV:XNMXSTA SHXV,XLDA SHYDCLCADC SHYV,XCMP #MINV-1BNE :YNMNLDA #MINV:}YNMNCMP #MAXV+1BNE :YNMXLDA #MAXV:YNMXSTA SHYV,XDEXBPL :LT:NYS; STICK LEFT/RIGHT ROUTINE (ROTATE)DEC ROTCNT}DEXBPL :L1LDA LIVESCMP #15BCC :L2LDA #14:L2STA PLTMPLDA #21SECSBC PLTMPTAYLDX PLTMPLDA #$B; SHIP SY }MBOL:L3DEXBEQ :L4STA SCORLN,YINYINYBNE :L3:L4RTSLINK D:AST.9SBC PLTMPTAYLDX PLTMPLDA #$B; SHIP SY NDB LOW SAS0,LOW SAS1,LOW SAS2,LOW SAS3,LOW SAS4,LOW SAS5,LOW SAS6,LOW SAS7DB LOW MAS0,LOW MAS1,LOW MAS2,LOW MAS3,LOW MAS4,L}OW MAS5,LOW MAS6,LOW MAS7DB LOW LAS0,LOW LAS1,LOW LAS2,LOW LAS3,LOW LAS4,LOW LAS5,LOW LAS6,LOW LAS7ASTHDB HIGH SAS0,HIGH} SAS1,HIGH SAS2,HIGH SAS3,HIGH SAS4,HIGH SAS5,HIGH SAS6,HIGH SAS7DB HIGH MAS0,HIGH MAS1,HIGH MAS2,HIGH MAS3,HIGH MAS4,HIGH }MAS5,HIGH MAS6,HIGH MAS7DB HIGH LAS0,HIGH LAS1,HIGH LAS2,HIGH LAS3,HIGH LAS4,HIGH LAS5,HIGH LAS6,HIGH LAS7; NO. OF BYTES }IN ASTEROID PER SIZEASTSDB 10,12,18; ASTEROID BIT MAPS (TOP TO BOTTOM)SAS0DB 0,0,$20,0,$70,0,$20,0,0,0SAS1DB 0,0,$1}0,0,$38,0,$10,0,0,0SAS2DB 0,0,8,0,$1C,0,8,0,0,0SAS3DB 0,0,4,0,$E,0,4,0,0,0SAS4DB 0,0,2,0,7,0,2,0,0,0SAS5DB 0,0,1,0,3,}$80,1,0,0,0SAS6DB 0,0,0,$80,1,$C0,0,$80,0,0SAS7DB 0,0,0,$40,0,$E0,0,$40,0,0MAS0DB 0,0,$30,0,$78,0,$38,0,$10,0,0,0MAS1}DB 0,0,$18,0,$3C,0,$1C,0,8,0,0,0MAS2DB 0,0,$C,0,$1E,0,$E,0,4,0,0,0MAS3DB 0,0,6,0,$F,0,7,0,2,0,0,0MAS4DB 0,0,3,0,7,$80,3},$80,1,0,0,0MAS5DB 0,0,1,$80,3,$C0,1,$C0,0,$80,0,0MAS6DB 0,0,0,$C0,1,$E0,0,$E0,0,$40,0,0MAS7DB 0,0,0,$60,0,$F0,0,$70,0,}$20,0,0LAS0DB 0,0,8,0,$1C,0,$3E,0,$7E,0,$3C,0,$38,0,$10,0,0,0LAS1DB 0,0,4,0,$E,0,$1F,0,$3F,0,$1E,0,$1C,0,8,0,0,0LAS2DB }0,0,2,0,7,0,$F,$80,$1F,$80,$F,0,$E,0,4,0,0,0LAS3DB 0,0,1,0,3,$80,7,$C0,$F,$C0,7,$80,7,0,2,0,0,0LAS4DB 0,0,0,$80,1,$C0,3,$}E0,7,$E0,3,$C0,3,$80,1,0,0,0LAS5DB 0,0,0,$40,0,$E0,1,$F0,3,$F0,1,$E0,1,$C0,0,$80,0,0LAS6DB 0,0,0,$20,0,$70,0,$F8,1,$F8,0,}$F0,0,$E0,0,$40,0,0LAS7DB 0,0,0,$10,0,$38,0,$7C,0,$FC,0,$78,0,$70,0,$20,0,0; ENEMY SAUCER BIT MAPSESXTDB 3,2,3,4,1,2,4},5,2,3,4DB 2,3,4,1,2,4,5,0,1,5,6,0,6,0,1,5,6,1,2,3,4,5ESYTDB 2,3,3,3,4,4,4,4,5,5,5DB 1,1,1,2,2,2,2,3,3,3,3,4,4,5,5,5,5,}6,6,6,6,6; TABLE OF COUNTDOWN TO MOVE EMISSILEEMVTDB 1,2,3,4,5,6,7,8,0,8,7,6,5,4,3,2,1; TABLE OF SCORES PER ASSIZEAS}CADB 1,5,2ASCXDB 3,4,4; SOUND TABLESSHFFTDB 0,$D,8,5SHFATDB 0,$65,$43,$65ESFFTDB 0,3,$EESFATDB 0,8,7ASBFTDB 0},$59,$59,$59,$59,$59,$59,$59,$54,$52,$33,$92,$8E,$82,$67,$59,$2D,7ASBATDB 0,1,1,1,1,2,1,1,1,2,$22,$43,$64,$84,$44,$65,$88E}SXFTDB 0,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12,$12DB $16,$13,$10,$E,}$C,$B,$A,$9ESXATDB 0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,5,6,4,5,6,7,8,$A,$B,$C;CHARACTER SETCHARSDB 0,0,0,0,0},0,0,0 ; SPACE; NUMBERSDB $7E,$66,$66,$66,$66,$66,$7E,$7EDB $C,$1C,$C,$C,$C,$C,$1E,$1EDB $7E,6,6,$7E,$60,$60,$7E,$7E}DB $7E,6,6,$7E,6,6,$7E,$7EDB $66,$66,$66,$7E,6,6,6,6DB $7E,$60,$60,$7E,6,6,$7E,$7EDB $7E,$60,$60,$7E,$66,$66,$7E,$7E}DB $7E,6,6,6,6,6,6,6DB $7E,$66,$66,$7E,$66,$66,$7E,$7EDB $7E,$66,$66,$7E,6,6,$7E,$7EDB %00000000DB %00000110DB %00}000110DB %01111110DB %01111110DB %00000110DB %00000110DB %00000000; SHIP PIXEL INFO - NSP IS :; 1 FOR ACTUAL SHI}P POS OR VEL,; 5 FOR EACH PIXEL POS OR VEL; NEP FOR PIXELS TO ERASE (AROUND IT)SHXPDS NSP ; X CO-ORD OF PIXELSSHYPDS N}SP ; Y CO-ORD OF PIXELSSHXVDS NSP ; X VEL OF PIXELSSHYVDS NSP ; Y VEL OF PIXELSSHXVCDS NSP ; CNTDWN TO X-MOVE PIXSHYVC}DS NSP ; CNTDWN TO Y-MOVE PIX; SHIP MISSILE INFOSMXPDS NM ;X CO-ORD OF MISSILESMYPDS NM ;Y CO-ORD OF MISSILESMXDDS }NM ;X DIRECTION OF MISSILESMYDDS NM ;Y DIRECTION OF MISSILESMRNGDS NM ;MISSILE RANGE COUNTERS; ASTEROID INFOASXPDS N}AS ; ASTEROID X CO-ORDASYPDS NAS ; ASTEROID Y CO-ORDASXVDS NAS ; ASTEROID X VELASYVDS NAS ; ASTEROID Y VELASXVCDS NAS}BNE :NXSLDA #$14STA ROTCNTLDA STICKLSR ALSR ATAXLDA STKTAB,XBEQ :NXSCLCADC SHVSNAND #7STA SHVSNJSR} SETSHP:NXS; MOVE SHIPLDX #NSP-1:LMDEC SHXVC,XBNE :NMXLDA #1STA SHXVC,XTAYLDA SHXV,XBEQ :NMXBPL :LXVP}LDY #$FF:LXVPSTY PLTMPSTA PLTMP+1INYBNE :XVPLDA #0SECSBC PLTMP+1STA PLTMP+1:XVPLDA #MAXV+6SECSBC PLTMP+s}EPLTMPEQU $B0;B1;B2XTMPEQU $B3;B4YTMPEQU $B5;B6SHVSNEQU $B7FRICNTEQU $B8ROTCNTEQU $BASHXDEQU $BBSHYDEQU $BC }XPLODEEQU $BDXPLDELEQU $BEOLDSTREQU $BFSMVCEQU $C0OLDHYPEQU $C1ASPOSEQU $C2;C3;C4;C5ASCNTEQU $C6MXPEQU $C7MYP }EQU $C8STICKEQU $C9STRIGEQU $CANASCREQU $CBCHKTMPEQU $CC;CDCHKCNTEQU $CE;CFNASEQU 16; MAX NO.ASTEROIDSNSPEQU } 22; NO.SHIP PIXELSNEPEQU 16; NO.ERASBL SH PIXELSNESPEQU 34; NO.SAUCER PIXELSNESEPEQU 22; NO.ERASBL ES PIXELSNMEQ }U 8MAXVEQU 40 ; MAX + VELMINVEQU -MAXV ; MAX - VELMAXV2EQU [MAXV*4/5]-8MINV2EQU -MAXV2TRIGEQU $D010CONSOLEQU $D }01FPORTEQU $D300CHBASEEQU $02F4CHARSTEQU $9800STARTJMP BEGIN; GAME DISPLAY LIST; 1 X GR.0 SCORE LINE; 88 X GR. }6 DISPLAYDLISTDB $70,$70,$70,$42DW SCORLNDB $70,$4BDW SCREENECHO 87DB $BENDMDB $41DW DLISTSCREENDS [88+2 }0]*20 ; GR.6 MAPESCREESCORLNDS 40 ; GR.0 TEXTHSCOREEQU SCORLN+32BEGINPROCCLDLDX #$FFTXSSTX VBIGO; COPY CH }ARSET ONTO 1K BOUNDARYLDX #95:LCCSLDA CHARS,XSTA CHARST,XDEXBPL :LCCSJSR CLSLDX #39:LCSLSTA SCORLN,XDEXB }PL :LCSLSTA LOOPSSTA $02C6STA $02C8LDA #$ASTA $02C4JSR SETDLSLDA #HIGH CHARSTSTA CHBASESTA $D409LDA #1S }TA SCORLN+5STA HSCORE+5LDA #8STA CONSOLJSR SETVBIGOLDA #$FFSTA SAWSNDSTA SHFSNDSTA ESFSNDSTA ASBSNDSTA ES }OR UNPLOT DOT IN MIDDLEJSR MIDPOSLDX ESXPLBNE :UNLDX ESTYBNE :PL:UNJMP UNPLOT:PLJMP PLOT:NESRTSCHKESXPRO} ; CNTDWN TO X-MOVE ASTASYVCDS NAS ; CNTDWN TO Y-MOVE ASTASSIZEDS NAS ; ASTEROID SIZEASVSNDS NAS ; ASTEROID X-VERSION}; ENEMY SAUCER INFOESXPDS NESP; ES XPOSESYPDS NESP; ES YPOSESXDDS NESP; ES XDIRESYDDS NESP; ES YDIREND START}C; KILL EXPLODING ES PIXELLDY ESXPLBEQ :NKLDA #0STA ESXP,XSTA ESXD,XSTA ESYD,XCLCRTS:NKSECRTSERAESP}XSNDSTA SHXSNDSTA BONCNTJSR SHUTUP:WAITLDA CONSOLCMP #6BNE :WAITJSR CLSLDX #5:LCSLDA #0STA SCORLN,XLDA }#1STA SCORT,XDEXBPL :LCSSTA SCORLN+5LDA #3STA LIVESJSR DLIVESLDY #$FFSTY ESTYSTY $02FCINYSTY ESXPLS }TY EMXPSTY VBIGOINYSTY EMXVTSTY EMYVTSTY NASCRSTY NSFLAGLDA #$C0STA EMRNGJSR INISHPNSHEETLDA #25STA CDE }SJSR INIASTJSR SETASVMLOOP; SET UP STICK AND STRIG FOR THIS LOOPINC LOOPSLDA PORTAND #$FSTA STICKLDA TRIGS }TA STRIGLDA NSFLAGBEQ :NNSJSR TCNSJMP :NDS:NNSJSR DOSHIPJSR DOSHMSJSR CHKHYP:NDSJSR DOASTJSR DOSAUCJSR DO }EM; COUNTDOWN TO END OF EXPLOSIONLDA XPLODEBEQ :NXPDEC XPLDELBNE :NXPDEC XPLODEBNE :NXPJSR ERASHPDEC LIVES }ROC; ERASE ENEMY SAUCERLDX #NESP-1:L1LDA ESXP,XLDY ESYP,XJSR UNPLOTDEXBPL :L1JSR MIDPOSJMP UNPLOTDOEMPR}PAUSELDY #$FFCPY $D20FBEQ :RETSTY VBIGOJSR SHUTUP:P1CPY $D20FBNE :P1:PAULDA CONSOLCMP #6BEQ :STARTCPY $D}20FBEQ :PAU:P2CPY $D20FBNE :P2INC VBIGOSTY $02FC:RETCLCRTS:STARTSECRTSDOSAUCPROC; EVERY 256 LOOPS, CON}SIDER CREATING; A SAUCER IF NOT ONE ALREADYLDA LOOPSBNE :NCLDA CDESBEQ :NDDEC CDESBNE :NC:NDLDA ESXPLBNE :}CRLDA ESTYBPL :NC; ALREADY ONE:CRLDA #3STA CDES; CREATE ONE IF FEW LARGE ASTEROIDS; HITLDY #0STY ESXPLDE}YSTY ESTYLDY NASCRINYINYSTY PLTMP:LRLDA RANDOMAND #7CMP PLTMPBCS :LRCMP NLAHITBCC :NCJSR CRES:NC; }ERASE EXPLODING ES BEFORE MOVING ITLDA ESTYBPL :OK; NO ES, SO DELAY TO COMPENSATELDX #0:LDELDEXBNE :LDELRTS:}BNE :MOREJSR HISCORJMP GO:MOREJSR DLIVESLDA #1STA NSFLAGJSR INISHP:NXP; CHECK FOR ALL ASTEROIDS GONELDX # }NAS-1:LCALDA ASSIZE,XBPL :SOMEDEXBPL :LCA; ALL GONE SO CREATE NEW ONESLDA NASCRCMP #[NAS/4]-1BEQ :NINCINC }NASCR:NINCJMP NSHEET:SOMERELOOPJSR PAUSEBCC MLOOPRESTRTJMP GODOSHMSPROC; IF NOT EXPLODING, CHECK FIRE BUTTON }LDA XPLODEBNE :NSLDY STRIGCPY OLDSTRSTY OLDSTRBEQ :NSTYABNE :NS; FIND SPARE MISSILE 'SLOT'LDX #NM-1:L1L }DA SMXP,XBEQ :GOTDEXBPL :L1; NONE, SO IGNORE BUTTONBMI :NS:GOT; SET UP NEW MISSILELDA #3STA SHFSNDLDY SH }VSNLDA MYPOS,YCLCADC SHYPCMP #88BCS :NSSTA SMYP,XLDA MXPOS,YCLCADC SHXPCMP #160BCS :NSSTA SMXP,XLDA } SHXDIR,YSTA SMXD,XLDA SHYDIR,YSTA SMYD,XLDA #80STA SMRNG,XLDA #1STA SMVC:NS; ERASE SHIP MISSILESLDX #NM- }1:L2LDA SMXP,XBEQ :NELDY SMYP,XJSR UNPLOT:NEDEXBPL :L2; MOVE THEM EVERY 4 LOOPSDEC SMVCBNE :NMSLDA #4S }TA SMVCLDX #NM-1:L3; IF MISSILE IS OUT OF RANGE, KILL ITDEC SMRNG,XBEQ :KM; MOVE IT & KILL IT IF IT LEAVES; THE }OC; CREATE ENEMY SAUCER MISSILE; (X),(Y) USED AS XDIR AND YDIRLDY ESTYBMI :NCLDA EMXPORA CDESBNE :NCLDA XPLO}DEBNE :NCLDA ESXPLBNE :NCLDA #2STA ESFSNDJSR EMDIR:NC; ERASE EMLDA EMXPSTA MXPBEQ :RETLDY EMYPSTY M}YPJSR UNPLOT; SEE IF IT HITS ASTEROIDLDX #NAS-1:LABJSR ASRNGBCS :NHA; YESLDA #0STA EMXPJMP SPLIT:NHADEX}BPL :LAB; MOVE ENEMY MISSILELDA LOOPSAND #1BNE :NORDEC EMRNGBNE :NORLDA #$C0STA EMRNGBNE :LY1:NORDEC E}MXVTBNE :NMXLDA EMXVCSTA EMXVTBEQ :NMXLDA EMXPCLCADC EMXDCMP #$F0BCS :LY1CMP #159BCS :LY1STA EMXP:NM}XDEC EMYVTBNE :NMYLDA EMYVCSTA EMYVTBEQ :NMYLDA EMYPCLCADC EMYDBMI :LY1CMP #88BCC :LY2:LY1LDA #0STA }EMXP:LY2STA EMYP:NMY; DRAW ENEMY MISSILELDA EMXPBEQ :RETLDY EMYPJMP PLOT:RETRTSEMDIRPROC; WORK OUT DIRE}CTION TO SHOOT EM; (Y)=ESTYTYABEQ :SMALL:LALDY #1JSR RANEMVSTA YTMPBPL :LA1LDY #$FF:LA1LDX #1JSR RANEMV}STA XTMPBPL :LA2LDX #$FF:LA2ORA YTMPBNE :L9BEQ :LA:SMALLLDX #1LDA SHXPSECSBC ESXPSTA XTMPBCS :L1LDX }#$FF:L1LDY #1LDA SHYPSECSBC ESYPSTA YTMPBCS :L2LDY #$FF:L2JSR ABS:L25LDA XTMPCMP #9BCS :L3LDA YTMPC}MP #9BCC :L4:L3LSR XTMPLSR YTMPJMP :L25:L4JSR ABS:L9STX EMXDSTY EMYDLDA XTMPORA YTMPBNE :XYOKLDA #1ST}A XTMP:XYOKLDA XTMPCLCADC #8TAYLDA EMVT,YSTA EMXVCSTA EMXVTLDA YTMPCLCADC #8TAYLDA EMVT,YSTA EMYVC}STA EMYVTLDA ESXPCLCADC #3STA EMXPLDA ESYPCLCADC #4STA EMYPRTSABSPROC; IF (X) NEG XTMP=-XTMP; IF (Y)} NEG YTMP=-YTMPTXABPL :L1LDA #0SECSBC XTMPSTA XTMP:L1TYABPL :L2LDA #0SECSBC YTMPSTA YTMP:L2RTSMI}DPOSPROC; WORK OUT POS OF MIDDLE ES BITLDA ESYPCLCADC #4CMP #81BCC :L1SECSBC #81:L1TAYLDA ESXPCLCAB} SCREENLDA SMXP,XBEQ :NMCLCADC SMXD,XBEQ :K1CMP #160BEQ :KMSTA SMXP,XLDA SMYP,XCLCADC SMYD,XBMI :KM }CMP #88BNE :L38:KMLDA #0:K1STA SMXP,X:L38STA SMYP,XJSR CHKMH:NMDEXBPL :L3:NMS; DRAW THEMLDX #NM-1:L4LD }A SMXP,XBEQ :NDLDY SMYP,XJSR PLOT:NDDEXBPL :L4RTSCHKMHPROC; CHECK FOR MISSILE HITTING SOMETHINGLDA SMXP,X }STA MXPLDY SMYP,XSTY MYPJSR LOOKBEQ :RET; HIT - SEE IF SAUCERTXAPHALDY ESTYBMI :NHSLDA ESXPLBNE :NHS }LDX #NESP-NESEP-2:LES1LDA MXPCMP ESXP+1,XBNE :NEXLDA MYPCMP ESYP+1,XBNE :NEX; YESJSR ESSCORJMP :KM:NEX }DEXBPL :LES1:NHS; SEE IF ASTEROID; SEE IF WITHIN AREA OF EACH ONELDX #NAS-1:L1JSR ASRNGBCS :NA; YESJSR SPL }ISC; KILL MISSILE:KMPLATAXLDA #0STA SMXP,XRTS:NADEXBPL :L1PLATAX:RETRTSESSCORPROC; SCORE AND DES }TROY SAUCER; (Y)=ESTYLDA #2LDX #3DEYBPL :LLLDA #1DEX:LLJSR SCOREJMP BLOWESSPLISC; SPLIT ASTEROID, AND SC }OREJSR SPLITLDY ASSIZE,XINYLDA ASCA,YLDX ASCX,YJMP SCORESPLITPROC; SPLIT ASTEROIDLDA #$10STA ASBSNDJ }SR ERAASTLDY ASSIZE,XCPY #2BNE :NLAINC NLAHIT:NLADEC ASSIZE,XBMI :SP; GONE !; NEW VELOCITYLDA ASXV,XLDY }RANDOMBMI :NCSTA PLTMPLDA #0SECSBC PLTMP:NCSTA ASXV,XLDA ASYV,XLDY RANDOMBMI :NDSTA PLTMPLDA #0SECS }BC PLTMP:NDSTA ASYV,X; FIND SPARE SLOT; AND SET UP NEW ASTEROIDLDY #NAS-1:L2LDA ASSIZE,YBPL :NXLDA ASSIZE,XS }TA ASSIZE,YLDA ASXP,XSTA ASXP,YLDA ASYP,XSTA ASYP,YLDA ASVSN,XSTA ASVSN,YLDA #1STA ASXVC,YSTA ASYVC,YLDA }RANDOMAND #$3FSECSBC #$20STA ASXV,YLDA RANDOMAND #$3FSECSBC #$20STA ASYV,Y:SPRTS:NXDEYBPL :L2SHUTUP }LDA #3STA $D20FLDA #0STA V1ASTA V2ASTA V3ASTA V4ASTA $D208RTSCHKHYPPROCLDA XPLODEBNE :NHYP; CHECK FO }R HYPERSPACE; JOYSTICK DOWN ('H' ON PANEL)LDA STICKAND #2TAYCMP OLDHYPSTA OLDHYPBEQ :NHYPTYABNE :NHYPJSR } ERASHP; DELAY AND SOUNDLDX #8STX VBIGOJSR SHUTUP:HLLDA #$A8STA V1ALDA #$30STA V1FLDY #32JSR DELAYSTY }V1ALDY #32JSR DELAYDEXBNE :HLSTX VBIGO; MOVE SHIP TO RANDOM POSITION:L1LDA RANDOMAND #$7FCMP #70BCS :L1 }CMP #10BCC :L1STA SHYP:L2LDA RANDOMCMP #150BCS :L2CMP #10BCC :L2STA SHXP; SHIP RANDOMLY EXPLODESLDA RAN }DOMAND #3BNE :OKJSR BLOWUP:OKJSR SETSH2:NHYPRTSDELAYPROCLDA #0STA PLTMP:LDDEC PLTMPBNE :LDDEYBNE :L }DRTSBLOWUPPROC; SET SHIP TO EXPLODELDA #2STA XPLODELDA #$A0STA SHXSNDLDX #NSP-1:L1JSR FASTVSTA SHXV,X }JSR FASTVSTA SHYV,XLDA #1STA SHXVC,XSTA SHYVC,XDEXBPL :L1RTSFASTVPROC; GET RANDOM FAST VELOCITY:L1LDA !<}OKLDA ESXPLBEQ :NERJSR ERAES:NERLDA LOOPSBNE :LNYLDA ESXPLBNE :LNY; CHANGE Y DIRECTIONLDA #0LDY ESYDBNE} :LY1LDA #1LDY SHYPCPY ESYPBCS :LY1LDA #$FF:LY1LDX #NESP-1:LY2STA ESYD,XDEXBPL :LY2:LNY; SEE IF SAUCER H}ITS ASTEROIDLDA ESXPLBNE :ENHALDA ESXPSTA MXPLDA ESYPSTA MYPLDX #NAS-1:LAAJSR ASRNGBCS :NXT; YESJMP S}PLIT:NXTDEXBPL :LAA:ENHA; MOVE SAUCERLDY #7LDA ESXPLBNE :EXPLDY #$F:EXPSTY PLTMPLDA LOOPSAND PLTMPBNE } 3E:}DISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATARIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. D$}UPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESSF. PROTEC$}T FILE N. CREATE MEM.SAVG. UNPROTECT FILE O. DUPLICATE FILEH. WRITE DOS FILES9!&x#!7&p))'&X*./)L''-؆莟$}R'S v W DEHHI 1A#! @ ~0ɛ8A0.) ȅ 1 1i$}il ! 1L NO SUCH ITEMSELECT ITEM OR FOR MENU! 0 .{z:*{}.|~ 1 0 0$}JB 18L^%|DLl%DIRECTORY--SEARCH SPEC,LIST FILE? # 0 0 n&|D! 1L NOT A DISK FILE$}N !B 1L " 1 !BDED:}:1BJ|DE 1DEBH$}I 1 h0ߢ 0.  0?詛 1 ~0YЛ 1 "L<" "L $} BL1TYPE "Y" TO DELETE...DELETE FILE SPECCOPY--FROM, TO?OPTION NOT ALLOWED111 FREE SECTORS COPYING---D1:BACK$}UP2.LOG# 0|D .L$A#B#C#JB|DE 1BHIDD#E 1D#0: B%} 1L B#C#C#B# B 1N#$0SYS1}:e#D# d# D# .d#ȽD# d# 𩛙d#X# 1,A#%}PdD#ELO- A.BJdD#E 1 1HH 0hh|DL^%1}:e# Lt% e#dD#EL%%} 1 0 . .0% 1L WILD CARDS NOT ALLOWED IN DESTINATION 0 A.|K@C}SE SHIP AS IT'S PROBABLY ROTATINGJSR ERASHPSETSH2; SETUP SHIP POS FOR THIS VERSIONLDX SHVSNLDA SHIXPL,XSTA XTMP!?}LDA SHIXPH,XSTA XTMP+1LDA SHIYPL,XSTA YTMPLDA SHIYPH,XSTA YTMP+1LDY #NSP-2:L2LDA (XTMP),YCLCADC SHXPCMP #!@}160BCC :L25SECSBC #160:L25STA SHXP+1,YLDA (YTMP),YCLCADC SHYPCMP #88BCC :L28SECSBC #88:L28STA SHYP+1,!A}YDEYBPL :L2; SET UP DIRECTIONS FOR VERSION (X)LDA SHXDIR,XSTA SHXDLDA SHYDIR,XSTA SHYDRTSLINK D:AST.2+1, zDC #3RTSCRESPROC; CREATE ENEMY SAUCERLDA #1LDY RANDOMBPL :RPLDA #150:RPSTA ESXP; XPOS:L1LDA RANDOMAND C}#$7FCMP #60BCS :L1CLCADC #10STA ESYP; YPOSLDX #1TYABPL :YPLDX #$FF:YPSTX ESXD; XDIRLDA #0STA ESYD;D} YDIRLDA RANDOMAND #1STA ESTY; TYPELDA #LOW ESXTSTA XTMPLDA #HIGH ESXTSTA XTMP+1LDA #LOW ESYTSTA YTMPLDAE} #HIGH ESYTSTA YTMP+1LDY #NESP-2:LC1LDA (XTMP),YCLCADC ESXPSTA ESXP+1,YLDA (YTMP),YCLCADC ESYPSTA ESYP+1,F}YLDA ESXDSTA ESXD+1,YLDA #0STA ESYD+1,YDEYBPL :LC1LDA #$64STA SAWSNDRTSBLOWESPROC; SET SAUCER TO EXPLOG}DELDA #32STA ESXSNDLDA #8STA CDESLDX #NESP-1STX ESXPL:L1JSR RANESVSTA ESXD,XJSR RANESVSTA ESYD,XORA ESH}XD,XBEQ :L1DEXBPL :L1RTSRANESV; GET A VELOCITY BETWEEN -3 AND +3LDA RANDOMAND #7CMP #7BEQ RANESVSECSBI}C #3RTSRANEMV; GET A VELOCITY BETWEEN -2 AND +2LDA RANDOMAND #7CMP #5BCS RANEMVSECSBC #2RTSLINK D:AST.J}5#3RTSRANEMV; GET A VELOCITY BETWEEN -2 AND +2LDA RANDOMAND #7CMP #5BCS RANEMVSECSBC #2RTSLINK D:AST.C; KILL EXPLODING ES PIXELLDY ESXPLBEQ :NKLDA #0STA ESXP,XSTA ESXD,XSTA ESYD,XCLCRTS:NKSECRTSERAESPX}ROC; ERASE ENEMY SAUCERLDX #NESP-1:L1LDA ESXP,XLDY ESYP,XJSR UNPLOTDEXBPL :L1JSR MIDPOSJMP UNPLOTDOEMPRY}OC; CREATE ENEMY SAUCER MISSILE; (X),(Y) USED AS XDIR AND YDIRLDY ESTYBMI :NCLDA EMXPORA CDESBNE :NCLDA XPLOZ}DEBNE :NCLDA ESXPLBNE :NCLDA #2STA ESFSNDJSR EMDIR:NC; ERASE EMLDA EMXPSTA MXPBEQ :RETLDY EMYPSTY M[}YPJSR UNPLOT; SEE IF IT HITS ASTEROIDLDX #NAS-1:LABJSR ASRNGBCS :NHA; YESLDA #0STA EMXPJMP SPLIT:NHADEX\}BPL :LAB; MOVE ENEMY MISSILELDA LOOPSAND #1BNE :NORDEC EMRNGBNE :NORLDA #$C0STA EMRNGBNE :LY1:NORDEC E]}MXVTBNE :NMXLDA EMXVCSTA EMXVTBEQ :NMXLDA EMXPCLCADC EMXDCMP #$F0BCS :LY1CMP #159BCS :LY1STA EMXP:NM^}XDEC EMYVTBNE :NMYLDA EMYVCSTA EMYVTBEQ :NMYLDA EMYPCLCADC EMYDBMI :LY1CMP #88BCC :LY2:LY1LDA #0STA _}EMXP:LY2STA EMYP:NMY; DRAW ENEMY MISSILELDA EMXPBEQ :RETLDY EMYPJMP PLOT:RETRTSEMDIRPROC; WORK OUT DIRE`}CTION TO SHOOT EM; (Y)=ESTYTYABEQ :SMALL:LALDY #1JSR RANEMVSTA YTMPBPL :LA1LDY #$FF:LA1LDX #1JSR RANEMVa}STA XTMPBPL :LA2LDX #$FF:LA2ORA YTMPBNE :L9BEQ :LA:SMALLLDX #1LDA SHXPSECSBC ESXPSTA XTMPBCS :L1LDX b}#$FF:L1LDY #1LDA SHYPSECSBC ESYPSTA YTMPBCS :L2LDY #$FF:L2JSR ABS:L25LDA XTMPCMP #9BCS :L3LDA YTMPCc}MP #9BCC :L4:L3LSR XTMPLSR YTMPJMP :L25:L4JSR ABS:L9STX EMXDSTY EMYDLDA XTMPORA YTMPBNE :XYOKLDA #1STd}A XTMP:XYOKLDA XTMPCLCADC #8TAYLDA EMVT,YSTA EMXVCSTA EMXVTLDA YTMPCLCADC #8TAYLDA EMVT,YSTA EMYVCe}STA EMYVTLDA ESXPCLCADC #3STA EMXPLDA ESYPCLCADC #4STA EMYPRTSABSPROC; IF (X) NEG XTMP=-XTMP; IF (Y)f} NEG YTMP=-YTMPTXABPL :L1LDA #0SECSBC XTMPSTA XTMP:L1TYABPL :L2LDA #0SECSBC YTMPSTA YTMP:L2RTSMIg}DPOSPROC; WORK OUT POS OF MIDDLE ES BITLDA ESYPCLCADC #4CMP #81BCC :L1SECSBC #81:L1TAYLDA ESXPCLCAq}<`BMEDIT ECFBEQUATE ASMB' AST OBJB3AST 5 B)GAST 2 B*ZAST 4 B.LAST 9 *AST BAKB:CAST 1 B*DUP SYSKAST BAKB%AST 3 MTMP DC #3RTSCRESPROC; CREATE ENEMY SAUCERLDA #1LDY RANDOMBPL :RPLDA #150:RPSTA ESXP; XPOS:L1LDA RANDOMAND }1STA SHXVC,XLDA SHXP,XCLCADC PLTMPCMP #$FFBNE :NLLDA #159JSR CHKEXP:NLCMP #160BNE :L2XLDA #0JSR CHKEXt}P:L2XSTA SHXP,X:NMXDEC SHYVC,XBNE :NMYLDA #1STA SHYVC,XTAYLDA SHYV,XBEQ :NMYBPL :LYVPLDY #$FF:LYVPSTY Pu}LTMPSTA PLTMP+1INYBNE :YVPLDA #0SECSBC PLTMP+1STA PLTMP+1:YVPLDA #MAXV+6SECSBC PLTMP+1STA SHYVC,XLDA v}SHYP,XCLCADC PLTMPBPL :NTLDA #87JSR CHKEXP:NTCMP #88BNE :L2YLDA #0JSR CHKEXP:L2YSTA SHYP,X:NMYDEXBMI w}:EMJMP :LM:EM; NORMALLY ERASE ALL AROUND SHIPLDA XPLODEBNE :NEALDX #NEP-1:L1LDA SHXP+NSP-NEP,XLDY SHYP+NSP-NEx}P,XJSR UNPLOTDEXBPL :L1JSR CHKSH:NEA; DRAW SHIPLDX #NSP-NEP-2LDA XPLODEBEQ :L3; IF EXPLODING, DRAW ALL PIy}XELSLDX #NSP-2:L3LDA SHXP+1,XBEQ :NPLDY SHYP+1,XJSR PLOT:NPDEXBPL :L3RTSCHKSHPROC; SEE IF SHIP HITS ASTz}EROIDLDX #2LDA SHXP,XSTA MXPLDY SHYP,XSTY MYP; SEE IF WITHIN AREA OF EACH ONELDX #NAS-1:L1JSR ASRNGBCS :N{}A; YESJSR SPLISC;KILL SHIPJMP BLOWUP:NADEXBPL :L1; SEE IF SHIP HITS SAUCERLDY ESTYBMI :NHS1LDA ESXPL|}BNE :NHS1LDX #NESP-2:LS1LDA SHXP+2CMP ESXP+1,XBNE :NXLDA SHYP+2CMP ESYP+1,XBNE :NX; YESJSR ESSCORJMP BLO}}WUP:NXDEXBPL :LS1:NHS1; SEE IF SAUCER MISSILE HITS SHIPLDX #NSP-NEP-2:LEM1LDA EMYPCMP SHYP+1,XBNE :NX1TAY~}LDA EMXPBEQ :RETCMP SHXP+1,XBNE :NX1; YESJSR UNPLOTLDA #0STA EMXPJMP BLOWUP:NX1DEXBPL :LEM1:RETRTSAS}RNGPROC; SEE IF MXP,MYP ARE WITHIN AST(X)LDY ASSIZE,XBMI :NALDA MXPCMP ASXP,XBCC :NALDA ASTS,YLSR ACLC}ADC ASXP,XCMP MXPBCC :NALDA MYPCMP ASYP,XBCC :NALDA ASTS,YLSR ACLCADC ASYP,XCMP MYPBCC :NACLCRTS:N}ASECRTSCHKEXPPROC; IF EXPLODING, KILL SHIP VELOCITY; AND XPOS (CALLED WHEN PIXEL LEAVES; SCREEN)LDY XPLODEBEQ} :NXPLDA #0STA SHXP,XSTA SHXV,XSTA SHYV,X:NXPRTSCLSPROC; CLEAR SCREENLDA #LOW SCREENSTA PLTMPLDA #HIGH} SCREENSTA PLTMP+1LDY #0TYA:L0STA (PLTMP),YINC PLTMPBNE :L1INC PLTMP+1:L1LDX PLTMPCPX #LOW ESCREEBNE :L0}LDX PLTMP+1CPX #HIGH ESCREEBNE :L0RTSSETVBIPROC; SET UP VBILDX $14INXINX:L14CPX $14BNE :L14LDX #HIGH} VBILDY #LOW VBILDA #6JMP $E45CSETDLS; SET UP GR.6 DISPLAY LISTLDA #$40STA $D40ELDA #LOW DLISTSTA $0230LD}A #HIGH DLISTSTA $0231RTSPLOTPROC; PLOT (A),(Y) ON GR.6 SCREENPHALSR ALSR ALSR ASTA PLTMP+2LDA SCADDL,}YSTA PLTMPLDA SCADDH,YSTA PLTMP+1PLAAND #7TAYLDA PLMASK,YLDY PLTMP+2ORA (PLTMP),YSTA (PLTMP),YRTSUNPLO}TPROC; UNPLOT (A),(Y) ON GR.6 SCREENPHALSR ALSR ALSR ASTA PLTMP+2LDA SCADDL,YSTA PLTMPLDA SCADDH,YSTA} PLTMP+1PLAAND #7TAYLDA UNMASK,YLDY PLTMP+2AND (PLTMP),YSTA (PLTMP),YRTSLOOKPROC; SEE IF PIXEL (A),(Y) }IS LITPHALSR ALSR ALSR ASTA PLTMP+2LDA SCADDL,YSTA PLTMPLDA SCADDH,YSTA PLTMP+1PLAAND #7TAYLDA PLM}ASK,YLDY PLTMP+2AND (PLTMP),YRTSLINK D:AST.3ADDL,YSTA PLTMPLDA SCADDH,YSTA PLTMP+1PLAAND #7TAYLDA PLM6#$7FCMP #60BCS :L1CLCADC #10STA ESYP; YPOSLDX #1TYABPL :YPLDX #$FF:YPSTX ESXD; XDIRLDA #0STA ESYD;} YDIRLDA RANDOMAND #1STA ESTY; TYPELDA #LOW ESXTSTA XTMPLDA #HIGH ESXTSTA XTMP+1LDA #LOW ESYTSTA YTMPLDA} #HIGH ESYTSTA YTMP+1LDY #NESP-2:LC1LDA (XTMP),YCLCADC ESXPSTA ESXP+1,YLDA (YTMP),YCLCADC ESYPSTA ESYP+1,}YLDA ESXDSTA ESXD+1,YLDA #0STA ESYD+1,YDEYBPL :LC1LDA #$64STA SAWSNDRTSBLOWESPROC; SET SAUCER TO EXPLO}DELDA #32STA ESXSNDLDA #8STA CDESLDX #NESP-1STX ESXPL:L1JSR RANESVSTA ESXD,XJSR RANESVSTA ESYD,XORA ES}XD,XBEQ :L1DEXBPL :L1RTSRANESV; GET A VELOCITY BETWEEN -3 AND +3LDA RANDOMAND #7CMP #7BEQ RANESVSECSB}C #3RTSRANEMV; GET A VELOCITY BETWEEN -2 AND +2LDA RANDOMAND #7CMP #5BCS RANEMVSECSBC #2RTSLINK D:AST.}5#3RTSRANEMV; GET A VELOCITY BETWEEN -2 AND +2LDA RANDOMAND #7CMP #5BCS RANEMVSECSBC #2RTSLINK D:AST.