;===========================›; LIVEWIRE›;===========================››;===========================›; WRITTEN BY: TOM HUDSON›;A.N.A.L.O.G. COMPUTING #12›;===========================››;---------------›;PAGE ZERO USAGE›;---------------››ORG$80››LODS1›HIDS1›PLOTXDS1;PLOT X VALUE›PLOTYDS1;PLOT Y VALUE›COLORDS1;PLOT COLOR›DRAWXDS1;DRAWTO X›DRAWYDS1;DRAWTO Y›ACCXDS1;X ACCUM.›ACCYDS1;Y ACCUM.›DELTAXDS1;DRAW WORK AREA›DELTAYDS1;DRAW WORK AREA›INCXDS1;DRAW X INCREMENT›INCYDS1;DRAW Y INCREMENT›COUNTRDS1;DRAWTO COUNTER›ENDPTDS1;DRAW ENDPOINT›HOLDDS1;WORK AREA›XWORKDS1›YWORKDS1›GRIDDS1;GRID # WORK›OFFSETDS1;GRID OFFSET›PMTIMEDS1;PLAYER MOVE TIMER›PLRGRDDS1;PLAYER GRID#›PLRYDS1;PLAYER Y POS.›GRIDNODS1;GRID #›LASTDS1;GRID...›NEXTDS1;DIVIDE...›STEPDS1;WORK...›DESTDS1;AREAS›VBXHLDDS1;X HOLD›PFTIMEDS1;PLAYER FIRE TIMER›ENDVALDS1;WORK AREA›MISNUMDS1;MISSILE #›PRFLIPDS1;PROJ. FLIP FLAG›PRADVTDS1;PROJ. MOVE TIMER›PRADV1DS1;PROJ. TIMER›TIMERDS1;GENERAL TIMER›INTRFGDS1;INTRO FLAG›BCDLVLDS1;LEVEL #›SHCOLRDS1;CHAR. COLOR›SHOBYTDS1;CHAR. BYTE POS.›YOFSETDS1;PLOT Y OFFSET›OBTIM1DS1;OBJECT MOVE TIMER›OBJNUMDS1;OBJECT #›SHAPIXDS1;OBJ. SHAPE INDEX›LENGTHDS1;OBJ. LENGTH›XIDS1;OBJ. X INCREMENT›YIDS1;OBJ. Y INCREMENT›SHAPCTDS1;OBJ. SHAPE CNT.›HLDGRDDS1;OBJ. GRID WORK›PAUFLGDS1;PAUSE FLAG›ZAPDS1;ZAP FLAG›SAVEXDS1;WORK AREA›SAVEYDS1;WORK AREA›FLASHYDS1;OBJ. FLASH POS.›FLTIMEDS1;FLASH TIME›SP1IXDS1;PLAYER...›SP2IXDS1;SHAPE...›SP3IXDS1;INDEX...›SPIXDS1;AREAS›PLTBYTDS1;PLYR. IMAGE BYTE›PSCNTDS1;PLYR. SHAPE COUNT›KILPLRDS1;KILL PLYR FLAG›PAVAILDS1;# PROJ. AVAILABLE›TRANTMDS1;TRANSIENT TIMER›DESTLODS1;DESTINATION...›DESTHIDS1;ADDRESS›SHFLIPDS1;SHORT FLIP FLAG›DESTNMDS1;SHORT PLYR #›CPYSTDS1;SHORT IMAGE START›DMAC1DS1;DMA CTRL WORK›GRAC1DS1;GRAPHICS CTRL WK.›GRIDIXDS1;GRID INDEX›LIVESDS1;LIVES LEFT›GRDADJDS1;GRID...›GRDWKDS1;DRAW...›GRDWK2DS1;WORK...›GRDNUMDS1;AREAS›OBJSPDDS1;OBJ. SPEED›JOYPADDS1;STICK/PADDLE›CPYCNTDS1;SHORT COPY CNT.›BONUSDS1;BONUS VALUE›FIRSOUDS1;FIRE SOUND COUNT›OBDSOUDS1;OBJ. DEATH SOUND›MOVSOUDS1;PLYR MOVE SOUND›PRYHLDDS4;PROJ. Y HOLDS›SCOREDS3;SCORE›SCOADDDS3;SCORE ADD VALUE›MISCADDS1;MISC. SCORE ADD›NUMOBJDS5;OBJECTS LEFT›DIFFDS1;DIFFICULTY ADJUST›OBJPRSDS6;OBJ PRESENT FLAGS››;--------------------›;MISCELLANEOUS MEMORY›;--------------------››PMAREA=$0000;P/M AREA›MISSLS=PMAREA+768›PL0=PMAREA+1024›PL1=PMAREA+1280›PL2=PMAREA+1536›PL3=PMAREA+1792›DISP=$0800;DISPLAY››;--------------›;SYSTEM EQUATES›;--------------››VDSLST=$200;DLI VECTOR›WSYNC=$D40A;WAIT/SYNC›PTRIG0=$27C;PADDLE TRIG.›POT0=$270;PADDLE 0›KEY=$2FC;KEYBOARD›CONSOL=$D01F;CONSOLE BUTTONS›PMBASE=$D407;P/M BASE ADDR›RANDOM=$D20A;RANDOM #›SETVBV=$E45C;VBLANK SET›XITVBV=$E462;VBLANK EXIT›COLBK=$2C8;COLORS›COLPF0=$2C4›COLPF1=$2C5›COLPF2=$2C6›COLPF3=$2C7›AUDC1=$D201;AUDIO CONTROL›AUDC2=$D203›AUDC3=$D205›AUDC4=$D207›AUDF1=$D200;AUDIO FREQUENCY›AUDF2=$D202›AUDF3=$D204›AUDF4=$D206›AUDCTL=$D208;MAIN AUDIO CTRL.›PRIOR=$026F;PRIORITY›ATTRAC=$4D;ATTRACT MODE›DMACTL=$22F;DMA CONTROL›DLISTL=$230;DISP. LIST›GRACTL=$D01D;GRAPHICS CTRL.›NMIEN=$D40E;INTERRUPT ENABLE›COLPM0=$2C0;PLAYER COLORS›COLPM1=$2C1›COLPM2=$2C2›COLPM3=$2C3›HPOSP0=$D000;PLAYER POSITIONS›HPOSP1=$D001›HPOSP2=$D002›HPOSP3=$D003›HPOSM0=$D004;MISSILE POSITIONS›HITCLR=$D01E;COLLISION CLEAR›P0PL=$D00C;PL0 TO PLAYER COLL.›STICK=$278;JOYSTICK›STRIG=$284;STICK TRIGGER››ORG$2000››;----------------------›;MAIN GAME DISPLAY LIST›;----------------------››DLISTDB$70,$F0,$70,$4E›DWDISP›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E›DB$4E›DWDISP+$800›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E,$E›DB$E,$E,$E,$E,$E,$E,$E›DB$80,$00›DB$47›DWINFOLN›DB$41›DWDLIST››;-------------------------›;TITLE SCREEN DISPLAY LIST›;-------------------------››TITLDLDB$70,$70,$70,$70,$70,$70›DB$70,$47›DWLASTSC›DB$70,$70,$46›DWMAGMSG›DB$70,$47›DWTITLE›DB$30,$46›DWAUTHOR›DB$70,$70,$30,$46›CONTRLDWJOYMSG›DB$41›DWTITLDL››;-----------------------›;DISPLAY LIST INTERRUPTS›;-----------------------››DLI1PHA;SAVE ACCUM›LDAGRAC1;GET GR. CTRL›STAWSYNC;WAIT FOR SYNC›STAGRACTL;STORE IT›LDADMAC1;GET AND SAVE›STA$D400;DMA CTRL›LDA#DLI2&255;POINT...›STAVDSLST;TO...›LDA#DLI2/256;NEXT...›STAVDSLST+1;DLI!›PLA;GET ACCUM›RTI;AND EXIT!››DLI2PHA;SAVE ACCUM›LDA#$0A;GET WHITE›STAWSYNC;WAIT FOR SYNC›STA$D016;PUT IN COLOR 0›LDA#$74;PUT BLUE...›STA$D017;IN COLOR 1›LDA#$28;PUT ORANGE...›STA$D018;IN COLOR 2›LDA#$3D;SET UP...›STA$D400;DMA CTRL›PLA;GET ACCUM.›RTI;AND EXIT››;---------------›;SCREEN MESSAGES›;---------------››INFOLNDB0,0,0,0,0,0,0,0›DB0,0,$6C,$76,$6C,0,0,0›MAGMSGDB$21,$2E,$21,$2C,$2F,$27›DB0,$23,$2F,$2D,$30,$35›DB$34,$29,$2E,$27›TITLEDB0,0,0,0,$6C,$69,$76,$65›DB$77,$69,$72,$65,0,0,0,0›AUTHORDB0,$A2,$B9,0,0,$B4,$AF›DB$AD,0,$A8,$B5,$A4,$B3›DB$AF,$AE,0›JOYMSGDB0,0,0,0,$EA,$EF,$F9,$F3›DB$F4,$E9,$E3,$EB,0,0,0,0›PADMSGDB0,0,0,0,0,$F0,$E1,$E4›DB$E4,$EC,$E5,0,0,0,0,0›LASTSCDB0,0,0,0,0,0,0,0›DB0,0,0,0,0,0,0,0››;----------›;PROG START›;----------››LIVECLD›JSR$E465;INIT SOUND›LDA#0;CLEAR PAGE 0›LDX#127›CPAGE0STA$80,X›DEX›BPLCPAGE0›LDA#1;INIT...›STABCDLVL;LEVEL #›STAINTRFG;SET INTRO FLAG›LDA#JOYMSG&255;DEFAULT...›STACONTRL;CONTROL...›LDA#JOYMSG/256;IS...›STACONTRL+1;STICK!›LDA#0;INIT...›STADMACTL;DMA›STANMIEN;INTERRUPTS›STAAUDCTL;AUDIO›STAHITCLR;COLLISION›STACOLBK;BACKGND COLOR›LDX#3;CLEAR SHORTS›CLRSHOSTASHORTF,X›DEX›BPLCLRSHO›LDX#5;ZERO OBJECT...›CLRDEDSTAOBDEAD,X;CLR DEAD TABLE›DEX›BPLCLRDED›LDX#2;ZERO SCORE›CLRSCOSTASCORE,X›STASCOADD,X›DEX›BPLCLRSCO›LDX#7›CLRPRJSTAPROJAC,X;CLEAR PROJ.›DEX›BPLCLRPRJ›LDX#5›MOVSCOLDAINFOLN,X;COPY SCORE...›STALASTSC+5,X;TO LAST...›DEX;SCORE LINE›BPLMOVSCO›LDA#29;SET ALL...›LDX#5;OBJECTS TO...›INIOBSSTAOBJSEG,X;SEGMENT # 29›DEX›BPLINIOBS›JSRSHOSCO;SHOW SCORE›JSRSNDOFF;NO SOUNDS›LDA#6;6 PROJECTILES›STAPAVAIL;AVAILABLE›LDA#2;SET...›STABONUS;BONUS=20000›STALIVES;2 EXTRA LIVES›JSRSHOLIV;SHOW LIVES LEFT›LDA#5;SET UP...›STASP2IX;PLAYER...›LDA#10;SHAPE...›STASP3IX;INDEXES›LDA#TITLDL&255;POINT TO...›STADLISTL;TITLE...›LDA#TITLDL/256;DISPLAY...›STADLISTL+1;LIST›LDY#VBI&255;POINT TO...›LDX#VBI/256;VERTICAL...›LDA#7;BLANK...›JSRSETVBV;INTERRUPT›LDA#PMAREA/256;SET UP P/M...›STAPMBASE;BASE ADDRESS›JSRPMCLR;CLEAR P/M›LDA#$74;PUT BLUE...›STACOLPF0;IN COLOR 0›LDA#$C4;PUT GREEN...›STACOLPF1;IN COLOR 1›LDA#$0A;PUT WHITE...›STACOLPF2;IN COLOR 2›LDA#$34;PUT RED...›STACOLPF3;IN COLOR 3›LDA#$3D;SET UP...›STADMACTL;DMA,›LDA#3;GRAPHICS,›STAGRACTL;AND›LDA#$C0;INTERRUPT...›STANMIEN;ENABLE›LDA#$11;SET P/M...›STAPRIOR;PRIORITY›LDA#$0F;PUT WHITE...›STACOLPM1;IN PLAYER 1,›STACOLPM2;PLAYER 2›STACOLPM3;AND 3›LDA#$16;PUT YELLOW...›STACOLPM0;IN PLAYER 0››;------------›;INTRO SCREEN›;------------››INTROLDACONSOL;START KEY...›AND#1;PRESSED?›BNECKSEL;NO!›GOCHEKLDACONSOL;START KEY...›AND#1;RELEASED?›BEQGOCHEK;NO, WAIT.›JMPDIGIN;GO DIG IN!!›CKSELLDACONSOL;SELECT KEY...›AND#2;PRESSED?›BNEINTRO;NAW, LOOP BACK.›LDAJOYPAD;TOGGLE...›CLC;STICK/PADDLE...›ADC#1;INDICATOR...›AND#1›STAJOYPAD›TAX›LDAJPLO,X;AND SHOW...›STACONTRL;CONTROLLER...›LDAJPHI,X;MESSAGE...›STACONTRL+1;ON SCREEN!›LDA#30;30 JIFFY...›JSRWAIT;WAIT!›JMPINTRO;AND LOOP.››;---------------------------›;HERE'S WHERE PROGRAM STARTS›;---------------------------››DIGINLDA#DLIST&255;POINT TO...›STADLISTL;GAME...›LDA#DLIST/256;DISPLAY...›STADLISTL+1;LIST›LDA#0;NO LONGER IN...›STAINTRFG;INTRO›FOREVRLDA#1;WE WANT...›STACOLOR;COLOR 1›STAZAP;RESET ZAP.›JSRCLRSC;CLEAR SCREEN›LDAGRIDIX;GET GRID#›AND#7;FIND WHICH...›TAX;GRID SHAPE...›LDAGRDTBL,X;TO DRAW...›STAGRDNUM;AND STORE›JSRSHOLVL;SHOW LEVEL#›JSRDRGRID;DRAW GRID!›CONWTLDAPAUFLG;WE PAUSED?›BNECONWT;YUP, LOOP.›LDAKILPLR;PLAYER DEAD?›BEQPLIVE;NOPE!›JSRDECLIV;ONE LESS LIFE!›PLIVESTAATTRAC;CANCEL ATTRACT!›LDAFLTIME;FLASH GOING?›BNENOFEND;YES! STORE...›STAHPOSP1;FLASH POSITION!›NOFENDLDAOBTIM1;OBJECTS MOVING?›BNENOOHAN;NOT YET!›LDAOBJSPD;RESET MOVE...›STAOBTIM1;TIMER››;----------------------›;COPY OBJECT KILL TABLE›;----------------------››LDX#5;THIS SECTION›COPDEDLDAOBDEAD,X;COPIES THE›STAOBDED2,X;OBJECT KILL›LDA#0;TABLE WHICH IS›STAOBDEAD,X;SET UP BY THE›DEX;PROJECTILE›BPLCOPDED;HANDLER››LDAMISCAD;MISC.SCORE?›BEQNOMSCO;NO!›STASCOADD+1;SET SCORE ADD...›JSRADDSCO;AND ADD IT!›LDA#0;THEN RESET THE›STAMISCAD;ADD VALUE.›NOMSCOLDX#5;THIS SECTION›LDA#0;TALLIES ALL›CKOBLVORAOBJPRS,X;OBJECTS THAT›DEX;ARE ALIVE›BPLCKOBLV›LDX#4;NOW TALLY›CKOBWTORANUMOBJ,X;ALL OBJECTS›DEX;THAT ARE NOT›BPLCKOBWT;ON GRID YET›CMP#0;ANY OBJECTS?›BEQLVLEND;NO, END OF LEVEL!››LDX#5;IS OBJECT›GENNOLLDAOBJPRS,X;PRESENT?›BNENXTOGN;YES, TRY NEXT.›TRYTYPLDARANDOM;LET'S TRY TO›AND#7;START UP A›CMP#5;NEW OBJECT›BCSTRYTYP;GET A TYPE›TAY;ANY OF THAT›LDANUMOBJ,Y;TYPE WAITING?›BEQNXTOGN;NO, TRY NEXT›SEC;DECREMENT #›SBC#1;OF OBJECTS›STANUMOBJ,Y;WAITING.›TYA;THEN SET›STAOBJTYP,X;OBJECT TYPE.›NEWGRDLDARANDOM;GET A RANDOM›AND#$0F;SUB-GRID›CMP#15;NUMBER›BEQNEWGRD›STAOBJGRD,X;AND SAVE IT›LDA#30;PUT OBJECT AT›STAOBJSEG,X;FAR END OF GRID›LDA#1;SET UP...›STAOBJINC,X;OBJ. INCREMENT›STAOBJPRS,X;OBJECT PRESENT›NXTOGNDEX;LOOP BACK TO DO›BPLGENNOL;NEXT OBJECT››JSROBJHAN;HANDLE OBJECTS›JSRSHOHAN;HANDLE SHORTS››NOOHANLDACONSOL;ANY CONSOLE›CMP#7;KEYS PRESSED?›BEQJCONWT;NOPE!›JMPLIVE;YES, RESTART GAME›JCONWTJMPCONWT;INDIRECT JUMP›LVLENDLDAGRIDIX;ARE WE ON›CMP#63;GRID #63?›BEQNOGRDI;YES, DON'T INC!›CLC;INCREMENT›ADC#1;GRID #›STAGRIDIX;AND SAVE IT.›AND#7;ADD 2 TO›BNENODIFI;DIFFICULTY IF›INCDIFF;ON A MULTIPLE›INCDIFF;OF 8 GRIDS.›NODIFISED;INCREMENT›LDABCDLVL;BCD LEVEL #›CLC›ADC#1›STABCDLVL›CLD;NOW GO TO›NOGRDIJMPFOREVR;DRAW NEW GRID.››;--------------›;OBJECT HANDLER›;--------------››OBJHANLDAOBJNUM;INCREMENT›CLC;OBJECT #›ADC#1›CMP#6;DONE?›BNESTONUM;NO, CONTINUE.›LDA#$FF;RESET›STAOBJNUM;OBJECT #›RTS;AND EXIT.›STONUMSTAOBJNUM;SAVE OBJ #›OBHLP1LDXOBJNUM;GET OBJ #›LDAOBJPRS,X;OBJ PRESENT?›BEQOBJHAN;NO!›OBLIVELDAOBJSEG,X;WITHIN 2 UNITS›CMP#2;OF RIM?›BCCNOOBFI;YES, DON'T FIRE›LDARANDOM;RANDOM CHANCE›AND#$0F;OF SHOOTING›BNENOOBFI;DON'T SHOOT›LDAPROJAC;PROJ. 0 ACTIVE?›BNETRYPR1;YES, IGNORE!›LDY#0;FORCE BRANCH›BEQSTOBFI;TO STORE IT›TRYPR1LDAPROJAC+1;PROJ. 1 ACTIVE?›BNENOOBFI;YES, NO FIRE›LDY#1;SET INDEX›STOBFILDAOBJSEG,X;INITIALIZE›LSRA;PROJECTILE›STAPROJSG,Y;SEGMENT #›LDAOBJGRD,X;AND›STAPROGRD,Y;SUB-GRID #›ASLA;MULTIPLY›ASLA;BY›ASLA;16›ASLA;AND›STAPROJGN,Y;SAVE INDEX!›LDA#$FF;SET INCREMENT›STAPROINC,Y;(TOWARD RIM)›LDA#21;START THE›STAFIRSOU;FIRE SOUND›LDA#1;AND›STAPROJAC,Y;PROJECTILE›NOOBFILDA#0;SET COLOR 0›STACOLOR;TO ERASE OBJECT›JSRDRWOBJ;AND ERASE IT›LDXOBJNUM›LDAOBDED2,X;OBJ DEAD?›BEQNOOKIL;YES! START›JSRFLASH;DEATH FLASH›LDXOBJNUM›LDYOBJTYP,X;GET OBJECT TYPE›LDAPOINT1,Y;GET POINTS›STASCOADD+1;AND READY›LDAPOINT2,Y;THE SCORE›STASCOADD+2;ADD VALUE›JSRADDSCO;ADD TO SCORE!›LDXOBJNUM›JMPKILOBJ;THEN KILL OBJ.›NOOKILLDAOBJSEG,X;INCREMENT›SEC;OBJECT'S›SBCOBJINC,X;SEGMENT›STAOBJSEG,X;POSITION›BMIKILOBJ;PAST RIM!›CMP#30;TYPE 3 PAST END?›BNENOTOT3;NOPE!›INCNUMOBJ+2;START TYPE 2›BNEKILOBJ;FORCE BRANCH›NOTOT3CMP#10;AT TYPE 3 TURN?›BNEOBHLP2;NO!›LDAOBJTYP,X;IS IT›CMP#3;TYPE 3?›BNEOBHLP2;NO!›LDA#$FF;REVERSE OBJECT›STAOBJINC,X;INCREMENT›OBHLP2LDAOBJTYP,X;IS OBJECT›CMP#2;TYPE 2?›BNESETHUE;NO, SET COLOR›LDARANDOM;GET RANDOM›AND#1;DIRECTION›TAY;FOR TYPE 2›LDAOBJGRD,X;AND›CLC;ADD OR›ADCADDSB1,Y;SUBTRACT 1›CMP#15;PAST LIMIT?›BCSSETHUE;YES!›STAOBJGRD,X;SAVE NEW POS.›SETHUELDAOBJTYP,X;GET OBJ. TYPE›TAX;AND GET›LDAOBJHUE,X;COLOR #›STACOLOR;SAVE IT›JSRDRWOBJ;AND DRAW OBJECT!›JMPOBJHAN;DO NEXT ONE››KILOBJLDA#0;OBJECT IS NO›STAOBJPRS,X;LONGER ALIVE›LDA#21;SET UP›STAOBDSOU;DEATH SOUND›LDAOBJSEG,X;CHECK›BPLJOBHAN;FOR A›LDAOBJGRD,X;COLLISION›CMPPLRGRD;WITH PLAYER›BNECKSHOR;NO HIT›LDA#1;HIT,›STAKILPLR;KILL PLAYER!›BNEJOBHAN ;NEXT OBJECT›CKSHORLDAOBJTYP,X;OBJECT›CMP#1;TYPE 1?›BNEJOBHAN;NOPE!›LDY#3;TRY SHORT:›TRYSHOLDASHORTF,Y;SHORT AVAILABLE?›BEQINISHO;YUP!›DEY;KEEP...›BPLTRYSHO;TRYING!›BMIJOBHAN;NO SHORT AVAIL!›INISHOLDAOBJGRD,X;MULTIPLY THE›ASLA;OBJECT'S›ASLA;SUB-GRID #›ASLA;BY 16...›ASLA›CLC›ADC#8;AND ADD 8 FOR›STASHORTX,Y;THE SHORT INDEX›LDA#1;SHORT IS›STASHORTF,Y;ALIVE!›LDARANDOM;RANDOMIZE...›AND#1;SHORT...›STASHORTD,Y;DIRECTION›LDARANDOM;AND THAT...›AND#$3F;DIRECTION'S...›STASHORTT,Y;TIME!›JOBHANJMPOBJHAN;NEXT OBJECT››DRWOBJLDXOBJNUM;GET OBJECT #›LDAOBJGRD,X;GET SUB-GRID #›ASLA;MULTIPLY›ASLA;BY 16...›ASLA›ASLA›STAHLDGRD;AND SAVE.›LDAOBJSEG,X;DIVIDE›LSRA;SEGMENT BY 2›BCSODDSEG;PROCESS ODD #›CLC;IT'S EVEN, ADD›ADCHLDGRD;GRID INDEX›TAY;PUT IN Y REG.›LDASEGX,Y;GET OBJECT'S›STAPLOTX;X POSITION›STASAVEX;AND SAVE›LDASEGY,Y;GET OBJECT'S›STAPLOTY;Y POSITION›STASAVEY;AND SAVE›JMPODDSKP;SKIP ODD ROUTINE›ODDSEGCLC;IT'S ODD, ADD›ADCHLDGRD;GRID INDEX›TAY;PUT IN Y REG.›LDASEGX,Y;GET OBJECT'S›CLC;X POS, ADD›ADCSEGX+1,Y;NEXT X POS.›RORA;GET AVERAGE›STAPLOTX;PUT IN PLOT X›STASAVEX;AND SAVE›LDASEGY,Y;GET OBJECT'S›CLC;Y POS, ADD›ADCSEGY+1,Y;NEXT Y POS.›RORA;GET AVERAGE›STAPLOTY;PUT IN PLOT Y›STASAVEY;AND SAVE›ODDSKPLDA#30;NOW CALCULATE›SEC;THE OBJECT'S›SBCOBJSEG,X;SIZE BASED ON›LSRA;ITS POSITION›AND#$FE;ON THE GRID›ASLA›ASLA›TAY;PUT INDEX IN Y›LDX#0;NOW COPY PART›COPYSZLDASIZTBL,Y;OF THE SIZE›STASIZEWK,X;TABLE TO A›INY;SIZE WORK AREA›INX;THIS TABLE HOLDS›CPX#8;8 SIZE VALUES›BNECOPYSZ;BASED ON DIST.›LDXOBJNUM;GET OBJECT #›LDAOBJTYP,X;AND ITS TYPE›ASLA;AND MULTIPLY›ASLA;BY 8 FOR AN›ASLA;INDEX INTO›STASHAPIX;THE SHAPE TABLE›LDA#8;MAX 8 LINES IN›STASHAPCT;EACH OBJECT›DOBLPLDXSHAPIX;GET LINE#›LDAOBJDIR,X;& ITS DIRECTION›TAY;A NEGATIVE #›BMIENDOBJ;INDICATES END›LDAPXINC,Y;GET X INCREMENT›STAXI;OF LINE,›LDAPYINC,Y;Y INCREMENT›STAYI;OF LINE,›LDAOBJLEN,X;ABSOLUTE LENGTH›TAY;OF LINE THEN›LDASIZEWK,Y;SCALED LENGTH›STALENGTH;AND STORE!›PLOTOBLDAPLOTX;THIS SECTION›CLC;ADJUSTS THE›ADCXI;X AND Y PLOT›STAPLOTX;VALUES...›LDAPLOTY›CLC›ADCYI›STAPLOTY›LDASHAPIX;DON'T PLOT›BEQNOPLT1;FIRST LINE!›JSRPLOTCL;PLOT POINT›NOPLT1LDAPLOTY;INCREMENT Y›CLC;AGAIN TO ADJUST›ADCYI;FOR GR. 7+›STAPLOTY;ASPECT RATIO›LDASHAPIX;DON'T PLOT›BEQNOPLT2;FIRST LINE›JSRPLOTCL;PLOT POINT›NOPLT2DECLENGTH;END OF LINE?›BPLPLOTOB;NOPE!›INCSHAPIX;NEXT LINE›DECSHAPCT;LAST LINE?›BNEDOBLP;NOT YET!›ENDOBJRTS;ALL DONE!››;-------------›;SHORT HANDLER›;-------------››SHOHANLDX#3;MAX. 4 SHORTS›SHHANLLDASHORTF,X;SHORT ALIVE?›BEQHANNXS;NO, DO NEXT›LDYSHORTD,X;GET SHORT DIR.›LDASHORTX,X;GET X POS.›CLC;AND ADJUST›ADCADDSUB,Y;POSITION›CMP#240;ON GRID?›BCSRESSHD;NO! DON'T MOVE›STASHORTX,X;OK, SAVE POS.›DECSHORTT,X;DIRECTION CHANGE?›BPLHANNXS;NO!›RESSHDLDARANDOM;GET A RANDOM›AND#$3F;DIRECTION TIME›STASHORTT,X;0-63 & SAVE›AND#1;RANDOM DIRECTION›STASHORTD,X;0-1 & SAVE›HANNXSDEX;MORE SHORTS?›BPLSHHANL;YUP!›RTS;ALL DONE!››;------------›;ADD TO SCORE›;------------››ADDSCOLDY#0;GET ZERO›SED;SET DECIMAL MODE›LDASCORE+2;THIS SECTION›CLC;INCREMENTS›ADCSCOADD+2;THE 3-DIGIT›STASCORE+2;SCORE USING›STYSCOADD+2;THE 3-DIGIT›LDASCORE+1;SCORE ADD›ADCSCOADD+1;AREA, THEN›STASCORE+1;ZEROS OUT›STYSCOADD+1;THE›LDASCORE;SCORE ADD›ADCSCOADD;AREA USING›STASCORE;THE›STYSCOADD;Y REGISTER.›CLD;CLR DECIMAL MODE›JSRSHOSCO;SHOW SCORE›LDASCORE;IS SCORE AT›CMPBONUS;BONUS LEVEL?›BNENOBONS;SORRY!›JSRINCLIV;BONUS, ADD LIFE!›SED;SET DECIMAL›LDABONUS;GET OLD BONUS›CLC;ADD 20000›ADC#2;TO IT›CLD;CLR DECIMAL›STABONUS;AND SAVE BONUS›NOBONSRTS;FINIS!››;----------›;SHOW SCORE›;----------››SHOSCOLDA#$10;SET UP COLOR›STASHCOLR;BYTE FOR SHOW›LDX#0;ZERO X›LDY#0;& Y REGS›SSCOLPLDASCORE,Y;GET SCORE BYTE›JSRSHOBCD;SHOW IT›INX;INCREMENT SHOW›INX;POS. BY 2›INY;NEXT SCORE BYTE›CPY#3;DONE?›BNESSCOLP;NOT YET!›RTS;ALL DONE!››;---------------›;INCREMENT LIVES›;---------------››INCLIVLDALIVES;DO WE HAVE›CMP#5;5 LIVES NOW?›BEQNOMOLV;YUP, NO INC!›INCLIVES;ONE MORE LIFE›JSRSHOLIV;SHOW IT›NOMOLVRTS;AND EXIT!››;---------------›;DECREMENT LIVES›;---------------››DECLIVJSRSNDOFF;NO SOUND››;---------------------------›;WAIT FOR PROJECTILES TO END›;---------------------------››WAITPDLDX#7;8 PROJECTILES›LDA#0;ZERO TALLY›CKPRLVORAPROJAC,X;CHECK ALL›DEX;PROJECTILES›BNECKPRLV;FOR ACTIVITY›CMP#0;ANY ACTIVE?›BNEWAITPD;YES! WAIT MORE!››;-----------›;STOP SHORTS›;-----------››LDX#3;4 SHORTS (0-3)›STPSHOSTASHORTF,X;TURN OFF›DEX;ALL OF 'EM›BPLSTPSHO;LOOP UNTIL DONE››;--------------------------›;PUT OBJECTS AT END OF GRID›;--------------------------››LDA#0;ERASE›STACOLOR;COLOR›LDA#5;ERASE ALL 6›STAOBJNUM;OBJECTS›ERSOBJJSRDRWOBJ;ERASE IT!›LDXOBJNUM;GET OBJECT #›LDA#30;PLACE AT›STAOBJSEG,X;SEG #30›LDA#1;SET UP MOVE›STAOBJINC,X;INCREMENT›RNDOBGLDARANDOM;GET RANDOM›AND#$0F;SUB-GRID #›CMP#$0F;0-14›BEQRNDOBG›STAOBJGRD,X›DECOBJNUM;MORE OBJECTS?›BPLERSOBJ;YEAH, DO 'EM›LDA#$0F;SHOW PLAYER›STACOLPM0;DEATH HERE›STAAUDC1;START SOUND›MOREWTLDARANDOM;SET RANDOM›AND#$1F;DEATH SOUND›STAAUDF1;FREQUENCY›LDA#6;WAIT 0.1 SEC›JSRWAIT›DECCOLPM0;DEC BRIGHTNESS›LDACOLPM0;NOW SET›STAAUDC1;DEATH VOLUME›BNEMOREWT;MORE WAIT›LDALIVES;MORE LIVES?›BEQDEAD;NO MORE LIFE!›DECLIVES;ONE LESS LIFE›JSRSHOLIV;SHOW IT›LDA#60;WAIT 1 SEC›JSRWAIT›LDA#0;RESET PLAYER›STAKILPLR;KILL FLAG›LDA#$16;AND›STACOLPM0;PLAYER COLOR›RTS;AND EXIT!›DEADPLA;ALL DEAD, PULL›PLA;RETURN ADDR.›JMPLIVE;AND RESTART GAME››;----------›;SHOW LIVES›;----------››SHOLIVLDA#$90;SELECT DISPLAY›STASHCOLR;COLOR›LDALIVES;GET LIVES›LDX#7;7TH CHAR ON LINE›JSRSHOBCD;SHOW IT!›RTS;AND EXIT››;----------›;SHOW LEVEL›;----------››SHOLVLLDY#$50;SELECT DISPLAY›STYSHCOLR;COLOR›LDABCDLVL;GET LEVEL#›LDX#14;14TH CHAR››;----------------›;BCD CHAR DISPLAY›;----------------››SHOBCDSTASHOBYT;SAVE CHARACTER›AND#$0F;GET NUM 1›ORASHCOLR;ADD COLOR›STAINFOLN+1,X;SHOW IT›LDASHOBYT;GET CHAR.›LSRA;SHIFT RIGHT›LSRA;TO GET›LSRA;NUM 2›LSRA›ORASHCOLR;ADD COLOR›STAINFOLN,X;SHOW IT›RTS;AND EXIT!››;----------------------›;FLASH OBJECT WHEN DEAD›;----------------------››FLASHLDYFLASHY;GET Y POS.›LDA#0;GET READY TO›LDX#14;CLEAR OLD FLASH›CLFLSHSTAPL1,Y;ZERO OUT EACH›INY;BYTE OF FLASH›DEX;DONE YET?›BNECLFLSH;NO, LOOP.›LDASAVEX;GET OBJECT'S›CLC;X POS. AND›ADC#61;ADD 61 FOR›STAHPOSP1;FLASH HORIZ.›LDASAVEY;GET Y POS AND›CLC;ADD 26 FOR›ADC#26;FLASH VERT.›TAY;POSITION›STYFLASHY;AND SAVE›LDX#13;FLASH = 14 BYTES›SEFLSHLDAFLBYTE,X;GET IMAGE›STAPL1,Y;PUT IN PLAYER 1›INY;NEXT P/M BYTE›DEX;NEXT IMAGE BYTE›BPLSEFLSH;LOOP.›LDA#1;SET FLASH›STAFLTIME;DURATION›RTS;ALL DONE!››;----------›;TIME DELAY›;----------››WAITSTATIMER;SET TIMER›WAITLPLDATIMER;TIMER = 0?›BNEWAITLP;NOPE!›RTS;TIMER FINISHED!››;---------------›;TURN SOUNDS OFF›;---------------››SNDOFFLDA#0;ZERO OUT:›STAFIRSOU;FIRE SOUND›STAOBDSOU;OBJ DEATH SOUND›STAMOVSOU;PLYR MOVE SOUND›LDX#7;ZERO ALL:›SNDOF2STAAUDF1,X;AUDIO REGISTERS›DEX›BPLSNDOF2›RTS;AND EXIT››;---------›;DRAW GRID›;---------››DRGRIDLDA#1;TELL INTERRUPT›STAINTRFG;IT'S INTRO›JSRSNDOFF;TURN OFF SOUND›LDA#$20;TURN OFF TOP›STADMAC1;OF SCREEN BY›LDA#0;SHUTTING OFF›STAGRAC1;DMA & GRAPHICS›LDX#3;TURN OFF SHORTS›CLSHRTSTASHORTF,X›DEX›BPLCLSHRT›LDX#7;TURN OFF›CLPRJCSTAPROJAC,X;ALL PROJECTILES›DEX›BPLCLPRJC›JSRPMCLR;CLEAR P/M AREA›STAOFFSET;ZERO OFFSET›LDA#6;SET 6 PROJECT.›STAPAVAIL;AVAILABLE›LDAGRIDIX;GET GRID #›LSRA;DIVIDE›LSRA;BY›LSRA;8›TAX;LOAD APPROPRIATE›LDAC0TBL,X;GRID COLOR›STACOLPF0›LDAC1TBL,X;OBJECT COLOR 1›STACOLPF1›LDAC2TBL,X;OBJECT COLOR 2›STACOLPF2›LDAOBSTBL,X;OBJECT SPEED›STAOBJSPD›LDAGRIDIX;GET GRID›AND#7;SHAPE INDEX›TAX;LOAD:›LDAOBCNT0,X;TYPE 0›STANUMOBJ;OBJECT COUNT›LDAOBCNT1,X;TYPE 1›STANUMOBJ+1;OBJECT COUNT›LDAOBCNT2,X;TYPE 2›STANUMOBJ+2;OBJECT COUNT›LDAOBCNT3,X;TYPE 3›STANUMOBJ+3;OBJECT COUNT›LDAOBCNT4,X;TYPE 4›STANUMOBJ+4;OBJECT COUNT›LDX#4;ADJUST ALL›DIFFADLDANUMOBJ,X;OBJECT COUNTS›CLC;BY ADDING›ADCDIFF;DIFFICULTY›STANUMOBJ,X;AND SAVE›DEX›BPLDIFFAD›LDAGRDNUM;GET GRID #›ASLA;MULTIPLY›ASLA;BY 16›ASLA›ASLA›STAGRDADJ;SAVE›STAGRDWK;SAVE›TAX;SET X INDEX›LDA#16;LOAD 16 BYTES›STAGRDWK2›GRDLINLDACX,X;GET CLOSE X›STAPLOTX›LDACY,X;GET CLOSE Y›STAPLOTY›LDAFX,X;GET FAR X›STADRAWX›LDAFY,X;GET FAR Y›STADRAWY›LDACOLPF0;INVISIBLE?›BEQNOGRD1;YES, DON'T DRAW›JSRPLOTCL;PLOT CLOSE POINT›JSRDRAW;DRAW TO FAR›NOGRD1DECGRDWK2;CONTINUE DRAWING›BEQGRDBO1;UNTIL ALL 16›INCGRDWK;LINES ARE DONE›LDXGRDWK›JMPGRDLIN›GRDBO1LDXGRDADJ;NOW DRAW 15›STXGRDWK;CLOSE GRID›LDA#15;BORDER LINES›STAGRDWK2›GRDBL1LDACX,X;GET CLOSE X›STAPLOTX›LDACY,X;GET CLOSE Y›STAPLOTY›LDACX+1,X;NEXT CLOSE X›STADRAWX›CLC;FIND POINT›ADCPLOTX;BETWEEN THEM›RORA›STAXWORK;AND SAVE IT!›LDACY+1,X;NEXT CLOSE Y›STADRAWY›CLC;FIND POINT›ADCPLOTY;BETWEEN THEM›RORA›STAYWORK;AND SAVE IT!›LDA#15;SET UP A WORK›SEC;AREA TO HOLD›SBCGRDWK2;THE POINTS›STAGRID;BETWEEN LINES›JSRGRIDSV;AND SAVE THEM›LDACOLPF0;INVISIBLE GRID?›BEQNOGRD2;YES, DON'T DRAW›JSRPLOTCL;PLOT CLOSE POINT1›JSRDRAW;DRAW TO POINT 2›NOGRD2DECGRDWK2;MORE LINES?›BEQGRDBO2;NO!›INCGRDWK;INCREMENT TO›LDXGRDWK;NEXT LINE›JMPGRDBL1;AND LOOP›GRDBO2LDXGRDADJ;NOW DRAW 15›STXGRDWK;FAR GRID›LDA#15;BORDER LINES›STAGRDWK2›STAOFFSET;AND SET OFFSET›GRDBL2LDAFX,X;GET FAR X›STAPLOTX›LDAFY,X;GET FAR Y›STAPLOTY›LDAFX+1,X;NEXT FAR X›STADRAWX›CLC;AND FIND›ADCPLOTX;MIDPOINT›RORA;BETWEEN THEM›STAXWORK;AND SAVE IT!›LDAFY+1,X;NEXT FAR Y›STADRAWY›CLC;AND FIND›ADCPLOTY;MIDPOINT›RORA;BETWEEN THEM›STAYWORK;AND SAVE IT!›LDA#15;USE THE SAME›SEC;WORK AREA›SBCGRDWK2;TO HOLD THE›STAGRID;MIDPOINTS›JSRGRIDSV;AND SAVE THEM›LDACOLPF0;INVISIBLE GRID?›BEQNOGRD3;YES, DON'T DRAW›JSRPLOTCL;PLOT FAR POINT 1›JSRDRAW;DRAW TO POINT 2›NOGRD3DECGRDWK2;MORE LINES?›BEQGENCOO;NO!›INCGRDWK;INCREMENT TO›LDXGRDWK;NEXT LINE›JMPGRDBL2;AND LOOP››;-----------------------------›;NOW GENERATE COORDINATE TABLE›;›;THIS SECTION BUILDS THE SEGX,›;SEGY, RIMX AND RIMY TABLES.›;THE SEGX&Y TABLES ARE POINTS›;UP AND DOWN THE GRID FOR PRO-›;JECTILES AND OBJECTS. THE›;RIMX&Y TABLES ARE FOR THE›;POSITIONING OF SHORTS.›;-----------------------------››GENCOOLDA#0›STAGRIDNO›DIVCTLTAX›LDASEGX,X;SET UP SEGWK›STASEGWK;WITH END›LDASEGX+15,X;COORDINATES›STASEGWK+16›JSRDIVIDE;DIVIDE SEGWK›LDXGRIDNO›LDY#0›COPY1LDASEGWK,Y;COPY SEGWK›STASEGX,X;TABLE TO SEGX›INX›INY›CPY#16›BNECOPY1›;NOW THE Y COORDS›LDXGRIDNO›LDASEGY,X;SET UP SEGWK›STASEGWK;WITH END›LDASEGY+15,X;COORDINATES›STASEGWK+16›JSRDIVIDE;DIVIDE SEGWK›LDXGRIDNO›LDY#0›COPY2LDASEGWK,Y;COPY SEGWK›STASEGY,X;TABLE TO SEGY›INX›INY›CPY#16›BNECOPY2››;----------------------------›;NOW GENERATE RIM COORDINATES›;----------------------------››LDXGRIDNO›LDARIMX,X;SET UP SEGWK›STASEGWK;WITH END›LDARIMX+15,X;COORDINATES›STASEGWK+16›JSRDIVIDE;DIVIDE SEGWK›LDXGRIDNO›LDY#0›COPY3LDASEGWK,Y;COPY SEGWK›STARIMX,X;TABLE TO RIMX›INX›INY›CPY#16›BNECOPY3›;NOW THE RIM Y COORDS›LDXGRIDNO›LDARIMY,X;SET UP SEGWK›STASEGWK;WITH END›LDARIMY+15,X;COORDINATES›STASEGWK+16›JSRDIVIDE;DIVIDE SEGWK›LDXGRIDNO›LDY#0›COPY4LDASEGWK,Y;COPY SEGWK›STARIMY,X;TABLE TO RIMY›INX›INY›CPY#16›BNECOPY4›LDAGRIDNO;DO ALL 15›CLC;GRID LINES›ADC#16›STAGRIDNO›CMP#240;ALL DONE?›BEQENDDVC;YOU BET!›JMPDIVCTL;LOOP BACK!›ENDDVCLDA#$3D;RESTART›STADMAC1;THE DISPLAY›LDA#$03;AFTER GRID›STAGRAC1;IS DRAWN›LDA#0;NO MORE›STAINTRFG;INTRO STATUS›RTS;FINIS!››;-------------------------------›;DIVIDE SEGWK TABLE›;›;THIS ROUTINE EXAMINES THE FIRST›;AND LAST BYTES IN THE SEGWK›;TABLE AND FILLS THE BYTES IN›;BETWEEN WITH AN EVEN TRANSITION›;FROM ONE ENDPOINT TO THE OTHER›;-------------------------------››DIVIDELDA#16›STASTEP›STANEXT›LSRA›STADEST›DIVLP2LDA#0›STALAST›DIVLP1LDXLAST›LDASEGWK,X›LDXNEXT›CLC›ADCSEGWK,X›RORA›LDXDEST›STASEGWK,X›LDALAST›CLC›ADCSTEP›STALAST›ADCSTEP›CMP#17›BCSNOSTEP›STANEXT›LDADEST›CLC›ADCSTEP›STADEST›JMPDIVLP1›NOSTEPLDASTEP›LSRA›STASTEP›STANEXT›LSRA›BEQENDDIV›STADEST›JMPDIVLP2›ENDDIVRTS››;--------------------›;GRID COORDINATE SAVE›;--------------------››GRIDSVLDAGRID›ASLA;*2›ASLA;*4›ASLA;*8›ASLA;*16›CLC;ADD THE›ADCOFFSET;OFFSET VALUE›TAX;SAVE IN INDEX›LDAXWORK;GET X WORK›STASEGX,X;AND SAVE›LDAYWORK;GET Y WORK›STASEGY,X;AND SAVE›LDAOFFSET;DON'T CONTINUE›BNESAVEND;IF OFFSET >0›LDAPLOTX;GET PLOTX›STARIMX,X;AND SAVE›LDAPLOTY;GET PLOTY›STARIMY,X;AND SAVE›LDADRAWX;GET DRAWX›STARIMX+15,X;AND SAVE›LDADRAWY;GET DRAWY›STARIMY+15,X;AND SAVE›SAVENDRTS;ALL DONE!››;----------------------›;VERTICAL BLANK ROUTINE›;----------------------››VBILDA#DLI1&255;POINT TO›STAVDSLST;FIRST›LDA#DLI1/256;DISPLAY LIST›STAVDSLST+1;INTERRUPT›CLD;CLR DECIMAL MODE›LDAOBTIM1;THIS SECTION›BEQNOOBTD;PROCESSES›DECOBTIM1;ALL TIMERS›NOOBTDLDATIMER›BEQNOTIMR›DECTIMER›NOTIMRLDAFLTIME›BEQNOFTIM›DECFLTIME›NOFTIMLDAKILPLR;PLAYER DEAD?›BEQCHKINT;NO, CONTINUE!›JMPVBCONT;SKIP PLAYER STUFF›CHKINTLDAINTRFG;IN INTRO?›BEQNOTINT;NO, CONTINUE!›JMPXITVBV;EXIT IF INTRO›NOTINTLDAKEY;GET KEYBOARD›CMP#$1C;PAUSE (ESC)?›BNECKZAP;NO, CHECK ZAP›LDAPAUFLG;GET PAUSE FLAG›EOR#$FF;AND FLIP›STAPAUFLG;AND STORE›JMPENDKEY;DONE W/KEY›CKZAPCMP#$21;SPACE BAR?›BNEENDKEY;NAW, DONE W/KEY›LDAZAP;USED ZAP YET?›BEQENDKEY;YES, NO ZAP›DECZAP;ZAP NOW USED›LDX#5;TIME TO KILL›LDA#1;ALL OBJECTS›ZAPOBJSTAOBDEAD,X›DEX›BPLZAPOBJ›LDX#3;AND KILL›ZAPSHOLDASHORTF,X;ALL SHORTS›BEQNOSKIL›LDAMISCAD;ALSO SET›SED;MISCELLANEOUS›CLC;SCORE ADD›ADC#4;FOR 400 POINTS›STAMISCAD;FOR EACH SHORT›CLD›LDA#0;KILL›STASHORTF,X;SHORT›NOSKILDEX›BPLZAPSHO›ENDKEYLDA#0;CLEAR›STAKEY;KEYPRESS.›LDAPAUFLG;PAUSED?›BEQNOPAU;NO, CONTINUE›LDA#0;TURN OFF›STAAUDC1;ALL SOUNDS›STAAUDC2;DURING›STAAUDC3;THE›STAAUDC4;PAUSE›JMPXITVBV;THEN EXIT›NOPAULDAFIRSOU;FIRE SOUND ON?›BEQNOFSND;NO!›DECFIRSOU;DEC COUNTER›LDXFIRSOU;PUT IN INDEX›LDAFIRFRQ,X;GET FREQUENCY›STAAUDF2›LDAFIRCTL,X;GET CONTROL›STAAUDC2›NOFSNDLDAOBDSOU;OBJ DEATH SOUND?›BEQNOOSND;NO!›DECOBDSOU;DEC COUNTER›LDXOBDSOU;PUT IN INDEX›LDAOBDFRQ,X;GET FREQUENCY›STAAUDF3›LDAOBDCTL,X;GET CONTROL›STAAUDC3›NOOSNDLDAMOVSOU;MOVE SOUND?›BEQCYCCOL;NO!›DECMOVSOU;DEC COUNTER›LDXMOVSOU;PUT IN INDEX›LDAMOVFRQ,X;GET FREQUENCY›STAAUDF4›LDAMOVCTL,X;GET CONTROL›STAAUDC4›CYCCOLLDACOLPM2;CYCLE›CLC;PLAYER 2›ADC#16;COLOR›STACOLPM2;SAVE IN P/M 2›STACOLPM3;AND IN P/M 3›AND#$FC;ALSO PUT IN›STACOLPF3;PF3 FOR MISSILES›DECTRANTM;TRANSIENT TIME›BNENOTRAN;NO CHANGE›LDAOBJHUE+4;FLIP›BNETRAN1;TRANSIENT›LDA#2;HUE›BNESTOTRN;TO EITHER›TRAN1LDA#0;0 OR 2›STOTRNSTAOBJHUE+4›LDARANDOM›ORA#$1F;RESET›AND#$3F;THE›STATRANTM;TRANSIENT TIME›NOTRANINCPSCNT;INC PLYR TIMER›LDAPSCNT;READY TO›CMP#3;CHANGE SHAPE?›BNENOPSIN;NOT YET!›LDA#0;BETTER RESET›STAPSCNT;INDEX›INCSP1IX;AND INCREMENT›INCSP2IX;ALL SHAPE›INCSP3IX;INDEXES!›NOPSINLDAPFTIME;SEE IF WE'RE›BEQFIRE;READY TO CHECK›DECPFTIME;IF PLAYER IS›JMPCHKPMV;SHOOTING›FIRELDA#4;RESET FIRE›STAPFTIME;TIMER›LDAJOYPAD;USING STICK?›BEQRDSTRG;YES!›LDAPTRIG0;GET PADL TRIGGER›JMPCMPTRG;CHECK IT›RDSTRGLDASTRIG;GET STICK TRIGGER›CMPTRGBNECHKPMV;NOT FIRING!›LDAPAVAIL;ANY PROJ AVAIL?›BEQCHKPMV;NO!›LDX#7;FIND AN›PRSCANLDAPROJAC,X;AVAILABLE›BEQGOTPRN;PROJECTILE›DEX›BNEPRSCAN›GOTPRNDECPAVAIL;1 LESS AVAILABLE›LDA#1;IT'S NOW›STAPROJAC,X;ACTIVE›LDA#21;START UP›STAFIRSOU;FIRE SOUND›LDA#0;INITIALIZE›STAPROJSG,X;SEGMENT # TO 0›LDAPLRGRD;SET UP›STAPROGRD,X;PROJ GRID#›ASLA;AND›ASLA;MULTIPLY›ASLA;BY 16›ASLA›STAPROJGN,X;FOR INDEX›LDA#1;INITIALIZE›STAPROINC,X;PROJ INCREMENT›CHKPMVLDAJOYPAD;USING STICK?›BEQGOSTIK;YES!›LDAPOT0;GET PADDLE›LSRA;DIVIDE BY›LSRA;16 TO GET›LSRA;USABLE VALUE›LSRA›CMP#15;> 14?›BMISTOPOS;NO, GO STORE›LDA#14;MAX. IS 14›BNESTOPOS;AND GO STORE›GOSTIKLDAPMTIME;READY FOR STICK?›BEQRDSTIK;YES!›DECPMTIME;DEC TIMER›JVBCJMPVBCONT;JMP TO CONTINUE›RDSTIKLDA#2;RESET STICK TIMER›STAPMTIME;TO 2 JIFFIES›LDXSTICK;GET STICK›LDAPLRGRD;GET PLYR GRID #›CLC;ADD THE›ADCSTKADD,X;DIRECTION INC›BMISAMPOS;IF <0 REJECT›CMP#15;IF <15...›BNESTOPOS;USE IT!›SAMPOSLDAPLRGRD;GET GRID#›STOPOSCMPPLRGRD;SAME AS LAST?›BEQNOPSTO;YES, DON'T STORE›LDX#9;START UP›STXMOVSOU;MOVE SOUND›STAPLRGRD;SAVE GRID#›NOPSTOASLA;MULTIPLY›ASLA;BY 16 FOR›ASLA;POSITION›ASLA;INDEX›TAX›LDAP0PL›AND#$0C;HIT P2/P3?›BEQNOHSHO;NO!›LDA#1;OOPS! HIT SHORT!›STAKILPLR;KILL PLAYER›JMPVBEND;AND EXIT VBLANK›NOHSHOLDASEGX,X;GET PLAYER'S›CLC;X POSITION AND›ADC#61;ADJUST FOR P/M›STAHPOSP0;AND SAVE›LDYPLRY;HOLD OLD Y POS›LDASEGY,X;GET NEW Y POS›CLC;ADJUST FOR P/M›ADC#32;BY ADDING 32›STAPLRY;SET Y POS›LDA#0;CLEAR OUT›LDX#15;OLD PLAYER›CLRPSSTAPL0-8,Y;IMAGE›INY›DEX›BPLCLRPS›LDA#15;NOW COPY›STASPIX;16-BYTE›SPLOOPLDA#0;PLAYER IMAGE›STAPLTBYT;TO PLAYER 0›LDASP1IX›AND#15›TAX›LDASPIX›CMPSPTBL,X›BCCNOSP1›CMPEPTBL,X›BCSNOSP1›TAX›LDAPN1,X;GET IMAGE 1›STAPLTBYT;AND SAVE›NOSP1LDASP2IX›AND#15›TAX›LDASPIX›CMPSPTBL,X›BCCNOSP2›CMPEPTBL,X›BCSNOSP2›TAX›LDAPN2,X›ORAPLTBYT;ADD IMAGE 2›STAPLTBYT;AND SAVE›NOSP2LDASP3IX›AND#15›TAX›LDASPIX›CMPSPTBL,X›BCCNOSP3›CMPEPTBL,X›BCSNOSP3›TAX›LDAPN3,X›ORAPLTBYT;ADD IMAGE 3›STAPLTBYT;AND SAVE›NOSP3LDAPLRY›CLC›ADCSPIX›SEC›SBC#8›TAY›LDAPLTBYT;GET IMAGE BYTE›STAPL0,Y;PUT IN P/M AREA›DECSPIX;MORE IMAGE?›BPLSPLOOP;YES!›VBCONTLDAPRADV1;ADVANCE PROJ?›BEQSETPRA;YES!›DECPRADV1;NO, DEC TIMER›JMPFLIPIT;GO FLIP DISPLAY›SETPRAINCPRADVT›LDA#1;SET ADVANCE›STAPRADV1;TIMER››;------------------------------›;THIS SECTION FLIP-FLOPS THE 4›;MISSILES IN ORDER TO ALLOW THE›;DISPLAY OF 8 PROJECTILES. AS›;A RESULT, SOME FLICKER CAN BE›;OBSERVED.›;------------------------------››FLIPITINCPRFLIP;INC FLIP INDEX›LDAPRFLIP;GET INDEX›AND#1;MAKE 0/1›TAY;SAVE IN Y›LDAPREND,Y;GET # OF LAST›STAENDVAL;PROJECTILE›LDXPRSTRT,Y;GET # OF FIRST›STXVBXHLD;PROJECTILE›LDA#3;START W/MISSILE›STAMISNUM;NUMBER 3›PROJLPLDAPROJAC,X;IS PROJ. ACTIVE?›BNEGOTPRJ;YOU BET.›JMPCKPEND;TRY ANOTHER›GOTPRJLDXMISNUM;GET MISSILE #›LDYPRYHLD,X;GET LAST POSITION›LDAMISSLS-1,Y;ERASE OLD›ANDMISLOF,X;PROJECTILE›STAMISSLS-1,Y;IMAGE›LDAMISSLS,Y›ANDMISLOF,X›STAMISSLS,Y›LDAMISSLS+1,Y›ANDMISLOF,X›STAMISSLS+1,Y›LDXVBXHLD›LDAPRADVT;READY TO›AND#1;ADVANCE PROJ?›BNENOPADV;NOT YET›LDAPROJSG,X;GET PROJ SEG#›CLC;AND›ADCPROINC,X;ADD INCREMENT›STAPROJSG,X;THEN SAVE›NOPADVLDAPROINC,X;ENEMY SHOT?›BMINOOHCK;NO OBJ HIT CHECK›LDY#5›OBKILPLDAOBDEAD,Y;ALREADY DEAD?›BNENXTOCK;YES!›LDAOBJPRS,Y;OBJECT THERE?›BEQNXTOCK;NO!›LDAOBJTYP,Y;TRANSIENT?›CMP#4›BNENOTRNC;NO!›LDAOBJHUE+4;INVISIBLE?›BEQNXTOCK;YES!›NOTRNCLDAOBJGRD,Y;SAME GRID #›CMPPROGRD,X;AS PROJ?›BNENXTOCK;NO!›LDAOBJSEG,Y;SAME SEG #›LSRA›SEC›SBCPROJSG,X;AS PROJ?›BEQHITOBJ›CMP#254›BCCNXTOCK;NO!›HITOBJLDAOBJTYP,Y;RESISTOR?›BEQCGPRDR;YES!›LDA#1;KILL OBJECT›STAOBDEAD,Y›JMPKILLPR;AND PROJ.›CGPRDRLDA#$FF;PROJ NOW HEADING›STAPROINC,X;FOR PLAYER!›NXTOCKDEY;NEXT OBJECT›BPLOBKILP;MORE TO DO!›NOOHCKLDAPROJSG,X;IS PROJ SEG# =0?›BEQKILLPR;YES, KILL IT!›CMP#16;=16?›BEQKILLPR;YES, KILL IT!›CLC;NOW ADD PROJ›ADCPROJGN,X;GRID INDEX›TAX;AND GET›LDASEGX,X;X COORD›LDYSEGY,X;AND Y COORD›CLC;ADD 64 TO›ADC#64;X COORD FOR›LDXMISNUM;P/M HORIZ›STAHPOSM0,X;AND SAVE›TYA;GET Y›CLC;ADD 32 TO›ADC#32;Y COORD FOR›TAY;P/M VERT›STYPRYHLD,X;AND SAVE.›LDAMISSLS-1,Y;NOW DRAW›ORAMISLON,X;PROJECTILE IN›STAMISSLS-1,Y;NEW POSITION›LDAMISSLS,Y›ORAMISLON,X›STAMISSLS,Y›LDAMISSLS+1,Y›ORAMISLON,X›STAMISSLS+1,Y›CKPENDDECMISNUM;NEXT MISSILE #›DECVBXHLD;NEXT PROJ.›LDXVBXHLD›CPXENDVAL;DONE?›BEQSHORTS;YES!›JMPPROJLP;DO NEXT PROJ.›KILLPRLDA#0;KILL PROJ.›STAPROJAC,X›CPX#2;ENEMY PROJ?›BCCNOAVIN;YES DON'T INC›INCPAVAIL;ANOTHER AVAIL›NOAVINLDAPROJSG,X ;SEGMENT 0?›BNENOKILP;NO!›LDAPROINC,X;TOWARD RIM?›BPLNOKILP;NO!›LDAPROGRD,X;SAME GRID...›CMPPLRGRD;AS PLAYER?›BNENOKILP;NO!›LDA#1;THE PLAYER›STAKILPLR;IS DEAD!›NOKILPJMPCKPEND;NEXT PROJ.››;------------------------------›;THIS SECTION HANDLES SHORTS.›;2 PLAYERS ARE USED TO SHOW A›;MAXIMUM OF 4 SHORTS, SO SOME›;FLICKER MAY BE OBSERVED.›;------------------------------››SHORTSINCSHFLIP;TOGGLE FLIP›LDASHFLIP;MASK FLIP›LSRA;TO EITHER›AND#1;0 OR 1›TAY;PUT IN Y›LDACPYSTN,Y;AND GET IMAGE›STACPYST;TO USE (+/X)›LDASHFLIP;GET FLIP,›AND#1;MASK AND›TAY;PUT IN Y›LDA#PL3/256;PUT PLAYER 3›STADESTHI;IN DESTINATION›LDA#PL3&255;ADDRESS›STADESTLO;HI & LO›LDA#1;SET DEST #›STADESTNM›LDASHSTRT,Y;GET START›STAVBXHLD;SHORT #›SHORLPLDA#0›LDXDESTNM›LDYSHYHLD,X;GET LAST INDEX›LDX#9;NOW ERASE›ERSSHOSTA(DESTLO),Y;PREVIOUS›INY;SHORT›DEX›BPLERSSHO›LDXVBXHLD›LDASHORTF,X;SHORT ALIVE?›BEQNXTSHO;NO!›LDASHORTX,X;GET INDEX OF›TAX;SHORT'S POS.›LDARIMX,X;GET X COORD›LDYRIMY,X;AND Y COORD›CLC›ADC#62;ADJUST X›LDXDESTNM;GET PLAYER#›STAHPOSP2,X;AND STORE›TYA›CLC›ADC#28;ADJUST Y›STASHYHLD,X;SAVE IT›TAY›LDXCPYST›LDA#4›STACPYCNT›SHOCOPLDASHOIMG,X;NOW COPY›STA(DESTLO),Y;SHORT IMAGE›INY;TO P/M›STA(DESTLO),Y;AREA›INY›DEX›DECCPYCNT›BPLSHOCOP›NXTSHODECDESTNM;MORE?›BMIVBEND;NO, EXIT!›DECDESTHI;NEXT PLAYER›INCVBXHLD›JMPSHORLP;LOOP BACK.›VBENDSTAHITCLR;CLEAR COLLISION›JMPXITVBV;VBI DONE! (WHEW!)››;---------------------›;CLEAR PLAYER-MISSILES›;---------------------››PMCLRLDA#0;PUT 255›TAX;ZEROS IN›PMCLPSTAMISSLS,X;EACH P/M›STAPL0,X;AREA›STAPL1,X›STAPL2,X›STAPL3,X›DEX›BNEPMCLP›RTS;FINIS!››;------------›;CLEAR SCREEN›;------------›CLRSCLDA#DISP/256;INITIAL›STAHI;DISPLAY›LDA#DISP&255;ADDRESS›STALO;WORK AREA›LDX#20;CLEAR 20 GROUPS›CLRSC2LDY#0;OF 256 BYTES›TYA;(5120 BYTES)›CLRSC3STA(LO),Y›DEY›BNECLRSC3›DEX›BNECLRSC4›RTS›CLRSC4INCHI›JMPCLRSC2››;----------------------›;GR. 7+ PLOTTER ROUTINE›;(SEE A.N.A.L.O.G. #11)›;----------------------››PLOTCLLDAPLOTY;MULT. Y BY 32:›ASLA›STALO›LDA#0›ROLA›STAHI;*2›ASLLO›ROLHI;*4›ASLLO›ROLHI;*8›ASLLO›ROLHI;*16›ASLLO›ROLHI;*32›LDA#DISP&255 ;ADD THE DISPLAY›CLC;ADDRESS TO GET›ADCLO;THE ACTUAL›STALO;ADDRESS OF THE›LDA#DISP/256 ;BYTE THAT WILL›ADCHI;BE ALTERED FOR›STAHI;THE PLOT.›LDAPLOTX;MASK PLOTX FOR›AND#3;PLOT INDEX,›TAX;PLACE IN X.›LDAPLOTX;GET PLOTX AND›LSRA;DIVIDE›LSRA;BY 4,›STAYOFSET›TAY›LDA(LO),Y›ANDBMASK2,X›CMPCOLOR1,X›BEQPABORT›LDYCOLOR;GET COLOR›LDABMASK2,X;AND MASK OFF›ANDCOLORS,Y;PIXEL POSITION›STAHOLD;SAVE IT,›LDABMASK1,X;MASK OFF PIXEL›LDYYOFSET;OF THE ADDRESS›AND(LO),Y;TO BE ALTERED›ORAHOLD;SET THE PLOT›STA(LO),Y;BITS AND STORE!›PABORTRTS;FINIS!››;----------------›;PLOT MASK TABLES›;----------------››COLORSDB$00,$55,$AA,$FF›BMASK1DB$3F,$CF,$F3,$FC›BMASK2DB$C0,$30,$0C,$03›COLOR1DB$40,$10,$04,$01››;------------›;DRAW HANDLER›;------------››DRAWLDADRAWY›CMPPLOTY;IS DRAWY>PLOTY?›BCCYMINUS;NO!›SEC;SUBTRACT›SBCPLOTY;PLOTY FROM DRAWY›STADELTAY;AND SAVE DIFFERENCE.›LDA#1;Y INCREMENT›STAINCY;= 1 (DOWN)›BNEXVEC;BRANCH!›YMINUSLDAPLOTY;SUBTRACT›SEC;DRAWY›SBCDRAWY;FROM PLOTY›STADELTAY;AND SAVE DIFFERENCE.›LDA#255;Y INCREMENT›STAINCY;= -1 (UP)›XVECLDADRAWX;IS DRAWX›CMPPLOTX;> PLOTX?›BCCXMINUS;NO!›SEC;SUBTRACT›SBCPLOTX;PLOTX FROM DRAWX›STADELTAX;AND SAVE DIFFERENCE.›LDA#1;X INCREMENT›STAINCX;IS 1 (RIGHT)›BNEVECSET;BRANCH!›XMINUSLDAPLOTX;SUBTRACT›SEC;DRAWX FROM›SBCDRAWX;PLOTX›STADELTAX;AND SAVE DIFFERENCE.›LDA#255;X INCREMENT›STAINCX;IS -1 (LEFT)›VECSETLDA#0;ZERO OUT:›STAACCY;Y ACCUMULATOR›STAACCX;X ACCUMULATOR›LDADELTAX;IS DELTAX>›CMPDELTAY;DELTAY?›BCCYMAX;NO!›STACOUNTR;SAVE DELTAX›STAENDPT;IN COUNTR, ENDPT.›LSRA;DIVIDE BY 2 AND›STAACCY;STORE IN Y ACCUM.›JMPDRAWGO;START DRAW›YMAXLDADELTAY;DELTAY LARGER,›STACOUNTR;STORE IT IN›STAENDPT;COUNTR, ENDPT.›LSRA;DIVIDE BY 2 AND›STAACCX;STORE IN X ACCUM.››;-----------------------›;NOW WE START THE ACTUAL›;DRAWTO FUNCTION!›;-----------------------››DRAWGOLDACOUNTR;IF COUNTR=0...›BEQDRWEND;NO DRAW!›BEGINLDAACCY;ADD DELTAY›CLC;TO Y ACCUMULATOR›ADCDELTAY›STAACCY›CMPENDPT;AT ENDPOINT YET?›BCCBEGIN2;NO, GO DO X.›LDAACCY;SUBTRACT ENDPT›SEC;FROM Y ACCUMULATOR›SBCENDPT›STAACCY›LDAPLOTY;AND INCREMENT›CLC;THE Y POSITION!›ADCINCY›STAPLOTY›BEGIN2LDAACCX;ADD DELTAX TO›CLC;X ACCUMULATOR›ADCDELTAX›STAACCX›CMPENDPT;AT ENDPOINT YET?›BCCPLOTIT;NO, GO PLOT.›LDAACCX;SUBTRACT ENDPT›SEC;FROM X ACCUMULATOR›SBCENDPT›STAACCX›LDAPLOTX;AND INCREMENT›CLC;PLOT X›ADCINCX›STAPLOTX›PLOTITJSRPLOTCL;PLOT THE POINT! ›DECCOUNTR;MORE TO DRAW?›BNEBEGIN;YES!›DRWENDRTS;NO, EXIT!››;------------------›;MISCELLANEOUS DATA›;------------------››GRDTBLDB0,1,2,3,4,1,5,3›;L,I,V,E,W,I,R,E››;COLORS (0=GRID, 1=OBJ1 2=OBJ2)››C0TBLDB$C4,$36,$74,$F6›DB$54,$06,$00,$26›C1TBLDB$86,$0C,$36,$56›DB$26,$C6,$98,$18›C2TBLDB$98,$46,$A8,$36›DB$84,$18,$C6,$38››;OBJECT COUNT TABLES (DIFFICULTY)››OBCNT0DB0,0,0,0,4,6,8,10›OBCNT1DB0,0,0,6,8,9,10,11›OBCNT2DB8,10,12,14,16,18,20,22›OBCNT3DB6,8,10,11,12,14,15,16›OBCNT4DB0,0,4,8,10,12,14,16››;STICK ADD VALUES››STKADDDB0,0,0,0,0,1,1,1›DB0,$FF,$FF,$FF,0,0,0,0››;PROJECTILE DATA››PROJACDB0,0,0,0,0,0,0,0›PROINCDS8›PROGRDDS8›PROJGNDS8›PROJSGDS8›PRSTRTDB3,7›PRENDDB$FF,3›MISLONDB$03,$0C,$30,$C0›MISLOFDB$FC,$F3,$CF,$3F››;FLASH (OBJECT DEATH) DATA››FLBYTEDB$28,$28,$28,$92,$54,$28,$10›DB$10,$28,$54,$92,$28,$28,$28›;OBJECT POINTS (250,200,50,100,150)››POINT1DB$02,$02,$00,$01,$01›POINT2DB$50,$00,$50,$00,$50››;SHORT DATA››SHORTFDS4›SHORTXDS4›SHORTDDS4›SHORTTDS4››;OBJECT DATA››OBDEADDS6›OBDED2DS6›OBJTYPDS6›OBJINCDS6›OBJGRDDS6›OBJSEGDS6›OBJHUEDB2,3,2,3,2›SIZEWKDB0,0,0,0,0,0,0,0›PXINCDB0,0,1,$FF,1,$FF,1,$FF›PYINCDB$FF,1,0,0,$FF,1,1,$FF›OBSTBLDB18,15,14,12›DB11,10,9,7›OBJDIRDB4,3,1,2,0,5,$FF,0›DB4,5,0,6,0,$FF,0,0›DB0,5,6,4,7,1,$FF,0›DB6,0,3,1,2,7,$FF,0›DB4,6,5,7,5,6,4,$FF›OBJLENDB3,7,7,7,7,7,0,0›DB3,7,7,7,7,0,0,0›DB3,3,3,3,3,7,0,0›DB2,3,3,3,3,3,0,0›DB1,1,1,3,1,1,3,0›SIZTBLDB0,0,0,0,0,1,1,1›DB0,0,0,1,1,2,2,2›DB0,0,1,1,1,2,2,2›DB0,1,1,2,2,2,2,3›DB0,1,1,2,2,2,3,3›DB1,2,2,2,2,2,3,3›DB1,2,2,2,3,3,3,4›DB1,2,2,3,3,3,4,4››;PLAYER SHAPES››PN1DB$10,$10,$10,$10,$10,$10,$10,$10›DB$08,$08,$08,$08,$08,$08,$08,$08›PN2DB$00,$00,$00,$00,$80,$40,$20,$10›DB$08,$04,$02,$01,$00,$00,$00,$00›PN3DB$00,$00,$01,$01,$02,$02,$04,$08›DB$10,$20,$40,$40,$80,$80,$00,$00››;SHAPE START/END POINTS››SPTBLDB0,1,2,3,4,5,6,7›DB8,7,6,5,4,3,2,1›EPTBLDB17,16,15,14,13,12,11,10›DB9,10,11,12,13,14,15,16››;JOYSTICK/PADDLE MESSAGE POINTERS››JPLODBJOYMSG&255,PADMSG&255›JPHIDBJOYMSG/256,PADMSG/256››;GRID DATA TABLES››CXDB14,14,14,14,14,14,14,14›DB26,39,51,64,75,88,100,113›DB14,14,14,14,14,14,14,14›DB14,14,14,14,14,14,14,14›DB14,20,26,32,38,43,49,59›DB69,78,84,89,95,101,107,113›DB113,88,64,39,14,14,14,27›DB27,14,14,14,39,64,88,113›DB14,14,14,14,14,29,43,58›DB70,84,98,113,113,113,113,113›DB113,106,100,113,113,100,82,65›DB48,32,14,14,14,14,14,14›››CYDB18,34,52,70,88,105,123,141›DB141,141,141,141,141,141,141,141›DB18,25,34,42,50,58,67,75›DB83,91,100,108,116,125,133,141›DB18,39,59,80,101,121,141,141›DB141,141,121,101,80,59,39,18›DB18,18,18,18,18,35,53,71›DB89,106,124,141,141,141,141,141›DB18,49,80,111,141,132,123,114›DB114,123,132,141,111,80,49,18›DB141,110,80,61,38,18,18,18›DB18,18,18,43,68,92,117,141››FXDB55,55,55,55,55,55,55,55›DB58,60,62,64,66,68,70,73›DB55,55,55,55,55,55,55,55›DB55,55,55,55,55,55,55,55›DB55,57,58,59,59,60,61,63›DB65,67,68,69,69,70,71,73›DB73,68,64,60,55,55,55,57›DB57,55,55,55,60,64,68,73›DB55,55,55,55,55,58,61,63›DB65,67,70,73,73,73,73,73›DB73,72,70,73,73,70,67,64›DB61,58,55,55,55,55,55,55››FYDB67,71,74,77,81,84,87,90›DB90,90,90,90,90,90,90,90›DB60,62,65,68,71,73,76,78›DB81,83,86,89,92,94,97,99›DB67,73,77,80,84,88,90,90›DB90,90,88,84,80,77,73,67›DB67,67,67,67,67,71,74,77›DB80,83,86,90,90,90,90,90›DB67,74,80,86,90,89,87,86›DB86,87,89,90,86,80,74,67›DB90,85,80,75,71,67,67,67›DB67,67,67,73,78,82,86,90››SHSTRTDB0,2›SHYHLDDS2›SHOIMGDB$88,$50,$20,$50,$88›DB$20,$20,$F8,$20,$20›CPYSTNDB4,9››ADDSUBDB2,$FE;ADD/SUB. 2›ADDSB1DB1,$FF;ADD/SUB. 1››;SOUND DATA››FIRCTLDB$00,$A1,$A1,$A2,$A2,$A3›DB$A3,$A4,$A4,$A5,$A5,$A6›DB$A6,$A7,$A7,$A8,$A8,$A9›DB$A9,$AA,$AA›FIRFRQDB0,194,166,180,152,166›DB138,152,124,138,110,124›DB96,110,82,96,68,82›DB54,68,40››OBDCTLDB$00,$41,$41,$42,$42,$43›DB$43,$44,$44,$45,$45,$46›DB$46,$47,$47,$48,$48,$49›DB$49,$4A,$4A›OBDFRQDB0,80,40,120,80,160›DB120,200,160,240,200,24›DB240,64,24,104,64,144›DB104,204,144››MOVCTLDB$00,$A1,$A1,$A2,$A2,$A3›DB$A3,$A4,$A4›MOVFRQDB0,20,30,20,30,20,30,20,30››;DATA TABLES››SEGWKDS17›SEGXDS256›SEGYDS256›RIMXDS256›RIMYDS256››ENDLIVE›