DSTATION1  DSK (GAMEEB PGAMED &lP&yPGAMEA +P+# GAMEEBO <PǰGAMEDEB 'P'`GAMEC +P+NGAME P"LOAD vGAMEO PPZGAMEL  .P 7GAMEI FPLIST PuGAMEM PAGAMEIEB P COPY "DSK1.GAMED" COPY "DSK1.GAMEI" COPY "DSK1.GAMEM" COPY "DSK1.GAMEA" COPY "DSK1.GAMEL" COPY "DSK1.GAMEC" END&**************************************&* ROUTINE TO DETERMINE IF WE NEED A *&* SAUCER ON THE SCREEN. RETURN IN 13 *&**************************************$SENDSC MOV R11,R13 SAVE RETURN3 MOV @SAUDLY,@SAUDLY IS THE DELAY TIMER ZERO?0 MOVB @HFF,@R10LB NO, SO SET IT PAST ZERO-SAUSET BL @WRTVCL PUT SPRITE ON SCREEN DATA SAL+12,2,MYWS+200 AI VDPADD,>480 POINT TO IT'S VEL TABLE5 BL @WRTCL AND WRITE OUT THE RANDOM VEL DATA 2,MYWS+25 MOVB @H00,@SAUCRF SAUCER NO LONGER ON SCREENSRETRN B @SSRTRN*'NEEDIT BL @RANDNO GET A RANDOM # ANDI R10,>0007 MASK" SLA R10,1 MULT BY 22 MOV @SAUVEL(R10),R1 GOT THE RANDOM VELOCITY*EENMER ZERO?5 MOVB R6,R6 WHICH WAY IS SAUCER HEADING?4 JGT SAUPOS RIGHT, SO CHECK RIGHT BOUND#SAUNEG CI R5,8 PAST LEFT?. JLE DELSAU YES, SO DELETE SAUCER& JMP SRETRN NO, SO RETURNHEREIMER ZERO?1 JEQ LETSGO YES, SO RUN THIS ROUTINE/ DEC @SAUDLY NO, CAN'T SEND HIM YET JMP SRETRN RETURN9LETSGO MOVB @SAUCRF,@SAUCRF IS SAUCER ALREADY ON SCREEN?- JEQ NEEDIT NO, SO PUT HIM THEREIMER ZERO?4 MOVB @H01,@SAUCRF SAUCER IS NOW ON THE SCREEN BL @SOUND DATA SAUSND*)SSRTRN B *R13 RETURN TO CALLER'***************************************'* SUBROUTINE TO TEST COINCIDENCE ON THE'* SAUCER AND BULLET. TEMPRT IS USED *' BL @RANDNO GET RANDOM ROW ANDI R10,>03F0 0-63 AI R10,>0080 18-80( SLA R10,4 Y IN HB, X IS 0- MOVB @R1LB,@R1LB IS SAUCER POS OR NEG/ JGT SAUSET YES, SO IT CAN BE AT 0ER ZERO?$SAUPOS CI R5,247 PAST RIGHT?' JHE DELSAU YES, SO DELETE" JMP SRETRN IT'S O.K.DELSAU BL @WRTVCL& DATA SVT+12,2,H0000 STOP SAUCER BL @WRTVCL/ DATA SAL+12,1,HC0 AND PLACE OFF SCREENMER ZERO?,CHKSB BL @RDVCL GET SAUCER POSITION DATA SAL+12,2,MYWS+10& ANDI R5,>00FF X IS IN R5LSB, AI VDPADD,>481 POINT TO IT'S X VEL) BL @RDCL AND GET IT IN R6 DATA 1,MYWS+12T HIM THEREIMER ZERO?'***************************************$COINCS MOV R11,@TEMPRT SAVE RETURN, MOVB @SAUCRF,@SAUCRF IS SAUCER THERE?& JEQ NOCOS NO, SO RETURN# BL @RDVCL READ SAL'S DATA SAL+8,8,MYWS+10 AI R5,>0404USED * DATA 2,H0000 BL @WRTVCL. DATA SAL+8,1,HC0 PUT BULLET OFF SCREEN+ MOVB @H00,@FIRFLG AND RESET ITS FLAG* LI R1,>1000#SPLDLY DEC R1 WASTE TIME JNE SPLDLY*+ C *R0+,*R0+ NOW POINT TO SPLAT * S R6,R8 X DELTA ABS R8" CI R7,4 TOLERANCE! JH NOCOS NO COINC" CI R8,4 TOLERANCE! JH NOCOS NO COINC#* COINCIDENCE DETECTED HERE!!! BL @SOUND ABS R7 *, MOVB @SAUCRF,@SAUCRF IS SAUCER THERE?+ JEQ MIDEXT NO, SO EXIT MODULE6 MOV @DRPDLY,@DRPDLY ARE WE ALLOWED TO DROP,YET?% JEQ OKDROP YES, SO DROP1 DEC @DRPDLY NO, SO DECREMENT COUNTEROW POINT TO SPLAT *' DEC @ALSLOC POINT ONE LEFT/ MOV @ALSLOC,VDPADD SET UP SCREEN ADDRESS- BL @WRTCL AND DELETE ONE ALIEN DATA 1,BLANKS1 BL @WRTVCL MUST BE LESS THAN FOUR!! DATA CT+20,1,HE0 NOW POINT TO SPLAT *+ BL @WRTCL AND PUT OFF SCREEN DATA 1,HC0( LI R1,>8300 RESTORE PATTERN BL @WRTVCL DATA SAL+14,1,MYWS+2 BL @SCORE DATA >1000& MOVB @H00,@SAUCRF NO SAUCER NOW+ NOW POINT TO SPLAT *% DATA HITSND MAKE A SOUND LI R1,>8500( BL @WRTVCL CHANGE TO SPLAT DATA SAL+14,1,MYWS+2$ BL @WRTVCL STOP BULLET DATA SVT+8,2,H0000# C *R0+,*R0+ AND SAUCER BL @WRTCLBS R7 *$ MOV R5,R6 COPY BULLET SRL R5,8 Y IN 5 ANDI R6,>00FF X IN 6 AI R7,>0404 MOV R7,R8 SRL R7,8 Y IN 7 ANDI R8,>00FF X IN 8 S R5,R7 Y DELTA ABS R7 *'NOCOS MOV @TEMPRT,R11 RESTORE RETURN B *R11'***************************************'* ROUTINE TO DROP ALIENS. RETURN IS R12'***************************************$DROPAL MOV R11,R12 SAVE RETURN DATA CT+20,1,HE0 NOW POINT TO SPLAT *' LI R0,>1500 DELAY HIM, TOO) MOV R0,@SAUDLY WITH HIS COUNTER*5 MOVB @ONGRND,@ONGRND ARE ANY ALIENS ON GROUND?) JEQ NOCOS NO, SO NO REWARD- SB @H01,@ONGRND YES, SO ONE LESS NOW NOW POINT TO SPLAT *! JMP MIDEXT AND EXIT*.OKDROP BL @RDVCL GET SAUCER Y,X INTO 6 DATA SAL+12,2,MYWS+12$ AI R6,>0400 ADJUST DOWN* CB @R6LB,@H08 PAST LEFT BORDER?+ JLE MIDEXT YES, SO CAN'T DROPOINT TO SPLAT * BL @WRTCL DATA 2,MYWS+14)DARTRN B *R12 RETURN TO CALLER'***************************************'* TEST COINC ON BULLET AND ALIENS. *'* RETURN IS IN R12. *'***************************************NO MAKE HIM MOV R5,VDPADD BL @WRTCL, DATA 2,MYWS+12 PUT ALIEN ON SCREEN) BL @RANDNO GET A RANDOM VEL ANDI R10,>0007 CLR R7 PREPARE& MOVB @LEVEL,@LEVEL ARE WE EASY? OFFSET TO WHICH ALIENO MAKE HIM-MKAL AB @H01,@ALNUM NEXT ALIEN NEXT TIME. CB @ALNUM,@H05 DID WE GO PAST ALIEN?( JL MKALOK NO, SO CONTINUE- MOVB @H00,@ALNUM YES, SO RESET @ALNUM*-MKALOK MOVB @H01,@AFLAGS(R5) THIS ALIEN IS ON EXIT* NO, SO MAKE HIM% LI R5,247 RIGHT BORDER+ CB @R6LB,@R5LB PAST RIGHT BORDER? JHE MIDEXT, MOVB @ALNUM,R5 WHICH ALIEN TO DROP SRL R5,83 MOVB @AFLAGS(R5),R0 IS THIS ALIEN ON SCREEN?( JEQ MKAL NO, SO MAKE HIM$COINC5 MOV R11,@TEMPRT SAVE RETURN& CLR R5 INDEX COUNTER3 MOVB @FIRFLG,R0 IS THERE A SHOT ON SCREEN?& JEQ NOSHOT NO, SO RETURN.C5LOOP MOVB @AFLAGS(R5),R2 IS ALIEN ON SCREEN?( JNE ALHERE YES, SO PROCESS, JNE HARDAL NO, USE FASTER LIST+EASYAL MOVB @AVELSE(R10),R7 USE EASY LIST+ JMP GOTSPD AND WRITE VELOCITY,HARDAL MOVB @AVELSH(R10),R7 GET THE VELOCITY=GOTSPD AI VDPADD,>480 POINT TO THIS SPRITES VELOCITY TABLEENO MAKE HIM% BL @RANDNO GET RANDOM # ANDI R10,>0FF0 0-255 SRL R10,4 AI R10,200 200-455% MOV R10,@DRPDLY RESET DELAY& SLA R5,2 MULTIPLY BY 4. AI R5,SAL+16 OFFSET TO WHICH ALIENO MAKE HIM4 INC R5 YES, SO POINT TO NEXT ALIEN' CI R5,5 AT LAST ALIEN?- JL RESTAL NO, SO RESTORE @ALNUM CLR R5.RESTAL MOVB @R5LB,@ALNUM RESTORE ALIEN POINTER!MIDEXT JMP DARTRN AND EXIT* NO, SO MAKE HIM$ MOV R1,VDPADD POINT AGAIN& INCT VDPADD POINT TO CHAR# LI R2,>8500 SPLAT CHAR' BL @WRTCL MAKE HIM SPLAT DATA 1,MYWS+4 LI R2,>0800 DELAY ASLOOP DEC R2 JNE ASLOOP DATA 2,H0000. JH NOCO5 NO COINC HERE, EITHER JMP CO5 GOT 'EM*%NOCO5 JMP NEXTAL TRY NEXT ONE$CO5 BL @WRTVCL STOP BULLET DATA SVT+8,2,H0000 BL @SOUND DATA HITSND TOLERANCEYES, SO PROCESS SRL R6,8 Y IN 6 ANDI R7,>00FF X IN 7# BL @RDVCL GET BULLET% DATA SAL+8,2,MYWS+16 INTO 8 AI R8,>0404 ADJUST MOV R8,R9 COPY SRL R8,8 Y IN 8 YES, SO PROCESS#NEXTAL INC R5 NEXT INDEX' CI R5,4 DONE WITH ALL? JLE C5LOOP NOT YET,NOSHOT B @C5RTRN YES, SO EXIT MODULE#ALHERE MOV R5,R0 COPY INDEX( SLA R0,2 MULT BY 4 (SAL) YES, SO PROCESS$ LI R2,>8400 ALIEN AGAIN BL @WRTCL DATA 1,MYWS+4 DECT VDPADD' BL @WRTCL PUT OFF SCREEN DATA 1,HC0+ MOVB @H00,@AFLAGS(R5) SPRITE IS GONE# BL @SCORE 100 POINTS DATA >01000000+ BL @WRTVCL AND PUT OFF SCREEN DATA SAL+8,1,HC0# MOVB @H00,@FIRFLG RESET FLAG/ MOV R1,VDPADD POINTS TO SAL OF ALIEN) AI VDPADD,>480 NOW INTO HIS SVT( BL @WRTCL STOP THIS ALIEN DATA 2,H0000 ANDI R9,>00FF X IN 9* S R8,R6 Y DELTA ABS R6 S R9,R7 X DELTA ABS R7*" CI R6,4 TOLERANCE& JH NOCO5 NO COINC HERE" CI R7,4 TOLERANCEYES, SO PROCESS2 AI R0,SAL+16 OFFSET INTO SAL FOR ALIEN' MOV R0,R1 SAVE FOR LATER$ BL @RDCL GET HIS Y,X DATA 2,MYWS+12 INTO R6 AI R6,>0404 ADJUST! MOV R6,R7 AND COPYAL) YES, SO PROCESSC5RTRN MOV @TEMPRT,R11# B *R11 AND RETURN&**************************************&* ROUTINE TO SEE IF ALIEN HIT GROUND *&* RETURN IS IN R12. *&**************************************$HITGND MOV R11,R12 SAVE RETURN00) BL @WRTCL PLACE OFF SCREEN DATA 1,HC00 MOVB @H00,@AFLAGS(R1) NO LONGER ON SCREEN5 MOV @ALSLOC,VDPADD WHERE TO SHOW ESCAPED ALIEN4 BL @WRTCL SHOW ONE MORE ESCAPED ALIEN DATA 1,H08TORE SALGAINURN00% B @HGRTRN YES, SO EXITALON MOV R1,VDPADD( SLA VDPADD,2 MULT BY 4 (SAL)+ AI VDPADD,SAL+16 OFFSET INTO ALIENS& BL @RDCL GET Y INTO R2 DATA 1,MYWS+4% SRL R2,8 NOW INTO LSBAGAINURN00+ DATA 1,DIGTLB DIGTLB EQU MYWS+13) MOV R10,R9 SAVE SCORE DIGIT/ ANDI R10,>000F USE ONLY ONE DIGIT NOW' A R10,DIGTHB ADD THAT DIGIT& A CARYHB,DIGTHB AND ANY CARRYPADD EQU 0 (R0) BL @RDCL+*******************************************+* A D D T O S C O R E R O U T I N E *+* VALUE TO BE ADDED PASSED IN R10 (>0050=50+*******************************************.SCORE MOV *R11+,R10 GET THE POINTS TO ADD* INC @ALSLOC POINT TO NEXT LOC) AB @H01,@ONGRND ONE MORE ESCAPED# CB @ONGRND,@H03 IN DANGER? JLE NOWARN NO BL @WRTVCL( DATA CT+20,1,H90 FLASH WALLS RED JMP RUTHRUNOWARN BL @WRTVCLAINURN00# CI R2,19*8-1 IN TRENCH?! JL NEXTA NOT YET!$ MOV VDPADD,R5 SAVE VDPADD% AI VDPADD,>480 POINT TO SVT( BL @WRTCL STOP THIS ALIEN DATA 2,H0000$ MOV R5,VDPADD RESTORE SALGAINURN00 CLR R1 INDEX3HGLOOP MOVB @AFLAGS(R1),R2 IS THIS ALIEN ON SCREEN?' JNE ALON NO, HE'S THERE*NEXTA INC R1 POINT TO NEXT ONE' CI R1,5 DONE WITH ALL?) JL HGLOOP NO, SO TRY AGAINURN00$ MOV R11,R15 SAVE RETURN0 CLR DIGTHB DIGTHB EQU 6 (R6)0 CLR CARYHB CARYHB EQU 7 (R7)2 LI R8,23*32+9 SCREEN ADDR OF LAST DIGIT0RDIGIT MOV R8,VDPADD VDPADD EQU 0 (R0) BL @RDCL' DATA CT+20,1,HE0 WALLS ARE GREY'RUTHRU CB @ONGRND,@H05 HAVE 5 ESCAPED JL NOLOSE NOT YET- B @LOSE YES, SO LOSE ROUTINE,NOLOSE B @NEXTA TRY NEXT ALIEN, NOW)HGRTRN B *R12 RETURN TO CALLERNURN00 / CLR CARYHB THEN CLEAR THE CARRRY( CB @DIGTLB,@H39 H39 BYTE >39, JLE WDIGIT NOT AT AN ASCII '9'+ MOVB @H01,@CARYLB CARYLB EQU MYWS+15. SB @H0A,@DIGTLB MAKE THE DIGIT A ZEROWDIGIT BL @WRTCLBL @RDCL + BL @WRTCL PUT STAR ON SCREEN DATA 1,R2LB, DEC R1 DONE WITH 40 STARS? JNE GROW NOT YET B *R15&**************************************&* ROUTINE TO SHOW REMAINING STATIONS * CI R10,10L  JH GROW# SLA R10,5 MULT BY 32$ MOV R10,VDPADD GOT THE ROW#GCOL BL @RANDNO RANDOM COL ANDI R10,>1F00 SRL R10,80 A R10,VDPADD GOT THE THE SIT ADDRESSF0 SRL R10,4 CI R10,10L ( MOV R15,R9 SAVE OUR RETURN& BL @SHOWTR SHOW TROOPERS+ MOV R9,R15 RESTORE OUR RETURN*)SCORRT B *R15 RETURN TO CALLER&**************************************&* ROUTINE TO PLACE STARS ON THE *RDCL 0 DATA 1,DIGTLB WRITE OUT OUR NEW DIGIT+ MOV R9,R10 RESTORE NEXT DIGIT SRL R10,43 DEC R8 POINT TO NEXT SCREEN DIGIT3 CI R8,23*32+4 SCREEN ADDR OF FIRST DIGIT JHE RDIGITBL @WRTCLBL @RDCL &* ON THE SCREEN. RETURN IS IN R15. *&**************************************$SHOWTR MOV R11,R15 SAVE RETURN. MOVB @TROOPR,R5 GET #TROOPS REMAINING& SRL R5,8 ADJUST TO LSB0 DEC R5 START AT ZERO, ACTUALLY 1 BL @RDCL READ THE CHAR AT THE LOC DATA 1,MYWS+4! SRL R2,8 INTO LSB CI R2,>0020 SPACE?) JNE GROW NO, SO TRY AGAIN& LI R2,>0010 CHARACTER >10 SRL R10,4 CI R10,10L &* SCREEN. RETURN IS IN R15. *&**************************************$STARS MOV R11,R15 SAVE RETURN) LI R1,40 40 STARS, PLEASE#GROW BL @RANDNO RANDOM ROW ANDI R10,>00F0 SRL R10,4 CI R10,10L 1 BL @RDVCL GET SCREEN 10000'S DIGIT DATA 23*32+5,1,MYWS+2! CB R1,@SAVDGT ROLL IT? JEQ SCORRT NOT YET* MOVB R1,@SAVDGT YES, SO NEW DIGIT) AB @H01,@TROOPR ONE MORE TROOPERBL @WRTCLBL @RDCL $CLEAR MOV R11,R15 SAVE RETURN% LI VDPADD,SIT START OF SIT& LI R2,>0180 LENGTH OF SIT# LI R1,>2020 SPACE CHAR*CLEARL BL @WRTCL DATA 2,MYWS+2( INCT VDPADD POINT TO NEXT 2 DEC R2S?Y ( INC VDPADD NEXT SCREEN LOC' INC R6 NEXT CHARACTER) DEC R9 DONE WITH CHARS? JNE VFL1 NOT YET- AI R5,>20 WE FINISHED ONE LINE- DEC R8 DONE WITH ALL LINES?Y &* ROUTINE TO PLACE CONSECUTIVE CHARS *&* ON THE SCREEN. RETURN IS IN R15. *&**************************************!VFOUR MOV *R11+,R5 WHERE TO( MOV *R11+,R6 START CHARACTER( MOV *R11+,R7 HOW MANY ACROSS********CTUALLY 7 CI R5,4 ARE THERE MORE THAN 4 TO SHOW?) JLE OKTSHW NO, SO SHOW THEM$ LI R5,4 JUST SHOW 4*&OKTSHW SLA R5,2 MULTIPLY BY 4* AI R5,REMAIN POINTS INTO CHARS START AT ZERO, ACTUALLY  JNE CLEARL*)CLEARR B *R15 RETURN TO CALLER$************************************$* DELAY LOOP. RETURN IS NORMAL. *$************************************DELAY MOV *R11+,R0DLYOL LI R3,>FFFF DLYIL DEC R3 JNE DLYIL2S?Y  JNE VFL2 NOT YET( B *R15 RETUR TO CALLER&**************************************&* ROUTINE TO CLEAR THE SCREEN. RETURN*&* IS IN R15. *&**************************************E WITH ALL LINES?Y & MOV *R11+,R8 HOW MANY ROWS$ MOV R11,R15 SAVE RETURN)VFL2 MOV R5,VDPADD COPY SIT ADDRESS* MOV R7,R9 AND GET LINE REPS*VFL1 BL @WRTCL WRITE A CHARACTER DATA 1,R6LBNY ACROSS********CTUALLY * MOV R5,WLOC WHERE TO GET DATA) LI WCOUNT,4 4 CHARS TO WRITE+ LI VDPADD,23*32+22 WHERE TO WRITE TO% BL @WRITE SHOW REMAINS# B *R15 AND RETURN&**************************************CTUALLY  DEC R0 JNE DLYOL B *R11&**************************************&* ROUTINE TO STOP ALL SPRITES MOTION *&**************************************$STOPAL MOV R11,R13 SAVE RETURN LI VDPADD,SVTEC R3 JNE DLYIL2S?Y %* SOUND SUBROUTINE *%*************************************%SOUND LIMI 0 DISABLE INTS MOV *R11+,@SNDPNT MOVB @H01,@STRTSD SOCB @H01,@RAMFLG$ LIMI 2 ENABLE INTS********* DLYIL2S?Y &* ROUTINE TO NULLIFY ALL SPRITES *&**************************************$DELAL MOV R11,R13 SAVE RETURN LI VDPADD,SAL# LI R1,32 32 SPRITES&DALOOP BL @WRTCL ZERO IT'S Y,X DATA 2,H0000 JNE DLYIL2S?Y *PAUSL1 BL @SCANKY GO GET SOME INPUT" CB @KEY,@HFF KEY DOWN?0 JNE PAUSL1 HASN'T RELEASED KEY YET)PAUSL2 CLR @TIMOUT TIMOUT EQU >83D6% BL @SCANKY GO GET A KEY% CB @KEY,@HFF KEY PRESSED?S?Y '* THAT IS INCLUDED IN ALL T.I GAMES. *'* THE FIRST LOOP IS A DEBOUNCE LOOP *'* THAT FORCES THE PLAYER TO RELEASE *'* THE PAUSE KEY BEFORE GOING ON TO THE*'* SECOND LOOP, WHICH CHECKS FOR ANY *'* KEY. RETURN LINKAGE IS IN R15. *IL2S?Y ) B *R11 RETURN TO CALLER%*************************************%* STANDARD KEYBOARD SCAN ROUTINE *%*************************************%SCANKY LIMI 0 DISABLE INTS( LWPI GPLWS GPLWS EQU >83E0 DLYIL2S?Y , INCT VDPADD AND PATTERN, COLOR BL @WRTCL DATA 2,H0000 DEC R1 JNE DALOOP/ BL @WRTVCL AND OFFICIALLY KILL IT DATA SAL,1,HD0 B *R13%************************************* DLYIL2S?Y # LI R1,32 32 SPRITES+SALOOP BL @WRTCL ZERO IT'S VELOCITY DATA 2,H0000- C *R0+,*R0+ POINT TO NEXT SPRITE DEC R1 JNE SALOOP B *R13&************************************** JNE DLYIL2S?Y '***************************************PAUSES MOV R11,R15) MOVB @MOTION,R2 MOTION EQU >837A/ MOVB @H00,@MOTION CLEAR AUTO MOTION BYTE) MOVB @KEYBRD,R4 KEYBRD EQU >8374+ CLR @KEYBRD SCAN KEYBOARD ZERO *IL2S?Y ' BL @SCAN SCAN EQU >000E LWPI MYWS$ LIMI 2 ENABLE INTS) B *R11 RETURN TO CALLER'***************************************'* THIS ROUTINE IS THE PAUSE ROUTINE * GPLWS EQU >83E0 DLYIL2S?Y + JEQ PAUSL2 NO KEY PRESSED YET, MOVB R2,@MOTION RESTORE AUTO MOTION) MOVB R4,@KEYBRD RESTORE KEY UNIT B *R15'***************************************'* GENERATES A 16 BIT RANDOM NUMBER AND*F KEY PRESSED?S?Y %* BL @RDVCL *%* DATA SAL,2,MYWS+2 *%*************************************/RDVCL MOV *R11+,VDPADD VDPADD EQU 0 (R0)/RDCL MOV *R11+,RCOUNT RCOUNT EQU 2 (R2) STATEMENT. I.E.: * ENABLE INTS  MOVB VDPADD,@VDPWA >8C02( NOP WASTE SOME TIME+W00010 MOVB *WLOC+,@VDPWD VDPWD EQU >8C00 DEC WCOUNT JGT W00010 LI WCOUNT,>4000' S WCOUNT,VDPADD RESTORE VDPADD$ LIMI 2 ENABLE INTS %* BL @WRTVCL *%* DATA SAL,2,MYWS+2 *%*************************************/WRTVCL MOV *R11+,VDPADD VDPADD EQU 0 (R3)/WRTCL MOV *R11+,WCOUNT WCOUNT EQU 2 (R2)L STATEMENT. I.E.: *KEY PRESSED?S?Y '* PLACES IT IN R10. RETURN IS IN R11. *'***************************************SEED EQU >83C0RANDNO LI R9,28645( MPY @SEED,R9 SEED EQU >83C0 AI R10,31417& MOV R10,@SEED MAKE NEW SEEDBER AND*F KEY PRESSED?S?Y /RDL MOV *R11+,RLOC RLOC EQU 3 (R3)%READ LIMI 0 DISABLE INTS SWPB VDPADD' MOVB VDPADD,@VDPWA MYWS+1,>8C02( SWPB VDPADD WASTE SOME TIME MOVB VDPADD,@VDPWA >8C02NT. I.E.: * ENABLE INTS ) B *R11 RETURN TO CALLER%*************************************%* R E A D F R O M V D P ROUTINE *%* THIS ROUTINE ASSUMES THAT THE *%* PARAMETERS ARE PASSED FOLLOWING *%* THE BL @RDVCL STATEMENT. I.E.: * ENABLE INTS /WRTL MOV *R11+,WLOC WLOC EQU 3 (R3)%WRITE LIMI 0 DISABLE INTS SWPB VDPADD' MOVB VDPADD,@VDPWA MYWS+1,>8C02( SWPB VDPADD WASTE SOME TIME* ORI VDPADD,>4000 SET FLAG TO WRITE *KEY PRESSED?S?Y ) B *R11 RETURN TO CALLER%*************************************%* W R I T E T O V D P ROUTINE *%* THIS ROUTINE ASSUMES THAT THE *%* PARAMETERS ARE PASSED FOLLOWING *%* THE BL @WRTVCL STATEMENT. I.E.: *KEY PRESSED?S?Y  DATA PROG BYTE 0,0,0,0,0,0,0,0 PROG DATA 0 DATA GAME BYTE 12 TEXT 'D-STATION I ' EVEN'***************************************'* MEMORY MAPPED E Q U A T E S *'*************************************** (****************************************(* P R O G R A M T I T L E *(* *(* PROGRAMED BY: *(* PROGRAMED BY: *(* DATE STARTED: * %* THIS INSTANCE CHANGES VDP REG. 7 *%* TO >11 (CHANGES BACKGROUND COLOR) *%* RETURN LINKAGE IS R11. *%*************************************"VWTR MOV *R11+,R0 GET VALUE%VWTRG LIMI 0 DISABLE INTS ********** ENABLE INTS ( NOP WASTE SOME TIME+R00010 MOVB @VDPRD,*RLOC+ VDPRD EQU >8800 DEC RCOUNT JGT R00010$ LIMI 2 ENABLE INTS) B *R11 RETURN TO CALLER%************************************* ENABLE INTS CPURAM EQU >8300 CPURAM.SNDPNT EQU >83CC POINTER TO SOUND LIST#STRTSD EQU >83CE START BYTE$SVVDP1 EQU >83D4 SAVE VDP R1/RAMFLG EQU >83FD VDP RAM FLAG FOR SOUND&VDPRD EQU >8800 VDP READ DATA********** (* *(***************************************** DEF GAME* REF GPLLNK****************************** ROM HEADER FOR CARTRIDGE ****************************** AORG >6000GRMHDR BYTE >AA,1,1,0,0,0 ( MOVB R0,@VDPWA VDPWA EQU >8C02- SWPB R0 NOW SET UP HIGH BYTE MOVB R0,@VDPWA* SWPB R0 RESTORE PARAMETER* LIMI 2 ENABLE INTERRUPTS- B *R11 AND RETURN TO CALLER NABLE INTS %* VDP WRITE TO REGISTER ROUTINE. THE*%* PARAMETER IS PASSED DOWN IN R1 *%* USING THIS FORMAT: (LB, THEN HB) *%* VALUE TO WRITE/8/VDP REG. # *%* I.E. BL @VWTR *%* DATA >1187 ********** ENABLE INTS 'VDPWD EQU >8C00 VDP WRITE DATA/VDPWA EQU >8C02 VDP READ/WRITE ADDRESS1SCAN EQU >000E ADDRESS OF KSCAN ROUTINE+SIT EQU >0000 SCREEN IMAGE TABLE.SAL EQU >0300 SPRITE ATTRIBUTE LISTREAD DATA**********AF3 EQU AF2+1AF4 EQU AF3+1AF5 EQU AF4+1'ALNUM EQU CPURAM+>2D 1 ALIEN NUMBER+DRPDLY EQU CPURAM+>2E 2 DROP DELAY TIMER6ONGRND EQU CPURAM+>30 1 # OF ALIENS REACHING GROUND.SAVDGT EQU CPURAM+>31 1 SAVED 10000'S DIGIT1+1DELAY TIMER'* C P U R A M E Q U A T E S *'***************************************%MYWS EQU >8300 MY WORKSPACE+GUNPOS EQU CPURAM+>20 GUN POSITION (0-F)/FIRFLG EQU CPURAM+>21 FIRE FLAG 0=NOT FIRED*GUNDLY EQU CPURAM+>22 2 GUN DELAY TIMERR0LB EQU MYWS+1 R0R1LB EQU MYWS+3 R1R2LB EQU MYWS+5 R2R3LB EQU MYWS+7 R3R4LB EQU MYWS+9 R4R5LB EQU MYWS+11 R5R6LB EQU MYWS+13 R6DIGTLB EQU R6LBR7LB EQU MYWS+15 R7*ICK XIMER0TIMOUT EQU CPURAM+>D6 SCREEN TIME OUT COUNTER'***************************************'* R E G I S T E R E Q U A T E S *'***************************************VDPADD EQU 0 R0!RCOUNT EQU 3 R3 F VPACE JOYSTICK XIMER0ALSLOC EQU CPURAM+>32 2 SIT LOC OF ALIEN SHOW,LEVEL EQU CPURAM+>34 1 DIFFICULTY 0=EASY*)KEYBRD EQU CPURAM+>74 KEYBOARD TO SCAN%KEY EQU CPURAM+>75 KEY RETURNED#JOYY EQU CPURAM+>76 JOYSTICK Y#JOYX EQU CPURAM+>77 JOYSTICK XIMER****** EQU CPURAM+>23)TROOPR EQU CPURAM+>24 TROOPS REMAINING0SAUCRF EQU CPURAM+>25 1 SAUCER FLAG 0=NOT OUT'SAUDLY EQU CPURAM+>26 2 SAUCER DELAY4AFLAGS EQU CPURAM+>28 ALIEN FLAGS 0=NOT ON SCREENAF1 EQU AFLAGSAF2 EQU AF1+1DELAY TIMER$CT EQU >0380 COLOR TABLE.SVT EQU >0780 SPRITE VELOCITY TABLE/SDL EQU >0400 SPRITE DESCRIPTOR LIST1PDT EQU >0800 PATTERN DESCRIPTOR TABLE'***************************************E LISTREAD DATA**********!WCOUNT EQU 3 R3 O D!RLOC EQU 4 R4 R PWLOC EQU 4 R4 DIGTHB EQU 6 CARYHB EQU 7'***************************************'* WORKSPACE E Q U A T E S *'***************************************ICK XIMER#TIMER EQU CPURAM+>79 TIMER BYTE$STATUS EQU CPURAM+>7C STATUS BYTE$MOTION EQU CPURAM+>7A MOTION BYTE(TEMPRT EQU CPURAM+>7E TEMPRARY RETURN-INTWS EQU CPURAM+>C0 INTERRRUPT WORKSPACE&GPLWS EQU CPURAM+>E0 GPL WORKSPACE JOYSTICK XIMERCARYLB EQU R7LBR8LB EQU MYWS+17 R8R9LB EQU MYWS+19 R9R10LB EQU MYWS+21 R10R11LB EQU MYWS+23 R11R12LB EQU MYWS+25 R12R13LB EQU MYWS+27 R13R14LB EQU MYWS+29 R14R15LB EQU MYWS+31 R15XIMER BYTE 1,>FF,0+SNDEXP BYTE 7,>9F,>BF,>DF,>E7,>F0,>C0,>07,5 BYTE 1,>F1,8 BYTE 1,>F2,10 BYTE 1,>F3,12 BYTE 1,>F4,14 BYTE 1,>F5,16 BYTE 1,>F7,18 BYTE 1,>F9,20 BYTE 1,>FF,0E 4,>CC,>03,>E7,>F0,10* BYTE -108,127,-72,127,-36,127,0,127#AVELSH BYTE 04,09,12,13,11,06,08,03#AVELSE BYTE 02,05,08,06,07,03,04,021EXPVEL BYTE -8,0,-8,8,0,8,8,8,8,0,8,-8,0,-8,-8,-8 SLISTS EQU $SNDFIR BYTE 4,>9A,>BF,>DF,>FF,1 BYTE 3,>80,>12,>90,1FF BYTE >FFH0B BYTE >0BH0C BYTE >0CH0D BYTE >0DH0E BYTE >0EH0F BYTE >0F*H39 BYTE >39 FOR SCORE ROUTINE%H90 BYTE >90 DANGER COLORHC0 BYTE >C0HD0 BYTE >D0+HE0 BYTE >E0 RESTORE WALL COLORHFF BYTE >FF!********************************** SOUND LIST EQUATES!*********************************SNDBUF EQU >1000FIRSND EQU SNDBUFHITSND EQU SNDBUF+44EXPSND EQU HITSND+15SAUSND EQU EXPSND+33"********************************** EQU MYWS+31 R15XIMERSNDSAU BYTE 4,>9F,>BF,>DF,>FA,1 BYTE 2,>E2,>F0,4 BYTE 1,>FE,4 BYTE 1,>F2,4 BYTE 1,>FE,4 BYTE 1,>F4,4 BYTE 1,>FE,4 BYTE 1,>F6,4 BYTE 1,>FF,0%*************************************>CC,>03,>E7,>F0,10 BYTE 3,>80,>14,>91,1 BYTE 3,>80,>18,>92,1 BYTE 3,>80,>1C,>93,1 BYTE 3,>80,>20,>94,1 BYTE 3,>80,>24,>93,1 BYTE 3,>80,>28,>92,1 BYTE 1,>9F,0SNDHIT BYTE 4,>9F,>BF,>DF,>FE,1 BYTE 4,>CC,>03,>E7,>F0,10BLANKS BYTE >20,>20,>20,>20,>20+VDPREG BYTE >00,>E0,>00,>0E,>01,>06,>00,>01* EVEN.BVELS BYTE 0,-128,-36,-128,-72,-128,-108,-128. BYTE -128,-108,-128,-72,-128,-36,-128,0+ BYTE -128,0,-128,36,-128,72,-128,108LL COLORHFF BYTE >FF"* BYTE STATEMENTS NEEDED *"**********************************H00 BYTE >00H01 BYTE >01H02 BYTE >02H03 BYTE >03H04 BYTE >04H05 BYTE >05H06 BYTE >06H07 BYTE >07H08 BYTE >08H09 BYTE >09H0A BYTE >0AXIMER-SAUVEL DATA >00E7,>00E2,>00E0,>00DC NEG VELS- DATA >0019,>001E,>0020,>0024 POS VELS%*************************************%* CHARACTER DEFINITIONS *%*************************************#WALLS DATA >0818,>3878,>7F60,>40800000 SHOW 4% DATA >C07C,>820F BULLET INITS% DATA >C000,>8306 SAUCER INITS DATA >C000,>8402 ALIEN 1 DATA >C000,>8407 ALIEN 2 DATA >C000,>8408 ALIEN 3 DATA >C000,>840A ALIEN 4 DATA >C000,>840D ALIEN 5TSBYTES0OPTH TEXT 'PRESS:' 6OPT1 TEXT '1) EASY LEVEL' 13OPT2 TEXT '2) HARD LEVEL' 13%*************************************%* DATA STATEMENTS NEEDED *%*************************************(COLORS DATA >4080,>F0F0,>F0F0,>F0F0 0-7BYTES0%* TEXT STATEMENTS NEEDED *%*************************************)NAME TEXT 'D - S T A T I O N' 17 BYTES1EGO1 TEXT 'DESIGNED BY: JOHN PHILLIPS' 26 BYTES(XYZMSG TEXT 'DISTRIBUTED BY DATABIOTICS'************************>CC,>03,>E7,>F0,10# DATA >F0F0,>F0F0,>F800,>0000# DATA >0F0F,>0F0F,>1F00,>0000# DATA >1018,>1C1E,>FE06,>0201# DATA >83C3,>00DD,>DD00,>7777# DATA >C3C3,>00DD,>DD00,>7777# DATA >C3C3,>00DD,>DD00,>7777# DATA >C1C3,>00DD,>DD00,>7777*1 DATA >D000 REST OF SPRITES ANNULLED,EXPINI DATA >877C,>8204 EXPLOSION SAL INITSREMAIN DATA >2020,>2020 SHOW 0 DATA >0020,>2020 SHOW 1 DATA >0000,>2020 SHOW 2 DATA >0000,>0020 SHOW 3 DATA >0000,>0000 SHOW 4) DATA >F0F0,>F0F0,>F0F0,>F0F0 8-15* DATA >F0F0,>F0F0,>E0F0,>F0F0 16-23* DATA >F0F0,>F0F0,>F0F0,>F0F0 24-31*)H0000 DATA 0 ZERO SPRITE VELS#SALINI DATA >877C,>8004 BASE INITS# DATA >7F7C,>8104 GUN INITSBYTES01COPYM TEXT '@1988 JOHN PHILLIPS' 20 BYTESSCOREM TEXT 'SCORE:' 6TROOPS TEXT 'TROOPS' 6ZEROES TEXT '000000')OVER TEXT 'G A M E O V E R' 18 BYTES)PRESS TEXT 'PRESS REDO OR BACK' 18 BYTES-BEGIN TEXT 'PRESS ANY KEY TO BEGIN' 22 BYTES0#MOON DATA >0000,>0003,>070F,>1F1F# DATA >0F3F,>FFFF,>FFDF,>AF6F# DATA >F0FC,>FFFF,>FFFF,>FFFF# DATA >0000,>00C0,>E0F0,>F8F8*# DATA >3F3F,>7F7F,>FFFF,>FFFC# DATA >5FBF,>FFFF,>FFFF,>FFFF# DATA >C3BD,>7E7E,>7E7E,>BDC3# DATA >0000,>0000,>4020,>1010# DATA >0000,>0020,>2010,>1010# DATA >0000,>0010,>1010,>1010*# DATA >0000,>0008,>0808,>0808# DATA >0000,>0004,>0408,>0808# DATA >0000,>0000,>0204,>0808# DATA >0000,>0001,>0204,>0808# DATA >FFFF,>FFFF,>FFFF,>3F0F# DATA >FF9F,>6FB7,>D7EF,>FCF0# DATA >F8F8,>F0E0,>C000,>0000*=CPYRT DATA >3C42,>99A1,>A199,>423C COPYRIGHT SYMBOL%*************************************%* SPRITE DEFINITIONS *>BDC3CPURAM EQU >8300 CPURAM.SNDPNT EQU >83CC POINTER TO SOUND LIST#STRTSD EQU >83CE START BYTE$SVVDP1 EQU >83D4 SAVE VDP R1/RAMFLG EQU >83FD VDP RAM FLAG FOR SOUND&VDPRD EQU >8800 VDP READ DATA *(****************************************(* P R O G R A M T I T L E *(* *(* PROGRAMED BY: *(* PROGRAMED BY: *(* DATE STARTED: **# DATA >0000,>0000,>0102,>0408# DATA >0000,>0000,>0001,>0608# DATA >0000,>0000,>0000,>0708# DATA >0000,>0000,>0000,>000F*#BASE DATA >183C,>3C7E,>7EFF,>0000#BULLET DATA >0000,>0010,>0000,>0000 DATA >0000,>0001,>0204,>0808%************************************* EVEN GUNS EQU $# DATA >0000,>0000,>0000,>00F0# DATA >0000,>0000,>0000,>E010# DATA >0000,>0000,>0080,>6010# DATA >0000,>0000,>8040,>2010*# DATA >0000,>0080,>4020,>1010 *>BDC3# DATA >FCFC,>FEFE,>FFFF,>FFFF*# DATA >FBFB,>FCFF,>7F7F,>3F3F# DATA >7F7F,>FFFF,>FFFF,>FFFF# DATA >FFFF,>FFFF,>FFFF,>FFFF# DATA >FFFF,>FFFF,>FEFE,>FCFC*# DATA >1F1F,>0F07,>0300,>0000 DATA >C3BD,>7E7E,>7E7E,>BDC3(* *(***************************************** DEF GAME* REF GPLLNK'***************************************'* MEMORY MAPPED E Q U A T E S *'*************************************** *#SAUCER DATA >003C,>66FF,>7E41,>8822#ALIEN DATA >223C,>2A7F,>2214,>2241#SPLAT DATA >4004,>A104,>9100,>44108# DATA >0000,>0000,>0000,>000F*#BASE DATA >183C,>3C7E,>7EFF,>0000#BULLET DATA >0000,>0010,>0000,>0000 DATA >0000,>0001,>0204,>0808'VDPWD EQU >8C00 VDP WRITE DATA/VDPWA EQU >8C02 VDP READ/WRITE ADDRESS1SCAN EQU >000E ADDRESS OF KSCAN ROUTINE+SIT EQU >0000 SCREEN IMAGE TABLE.SAL EQU >0300 SPRITE ATTRIBUTE LISTREAD DATA *0TIMOUT EQU CPURAM+>D6 SCREEN TIME OUT COUNTER'***************************************'* R E G I S T E R E Q U A T E S *'***************************************VDPADD EQU 0 R0!RCOUNT EQU 3 R3 F VPACE JOYSTICK XIMER0ALSLOC EQU CPURAM+>32 2 SIT LOC OF ALIEN SHOW,LEVEL EQU CPURAM+>34 1 DIFFICULTY 0=EASY*)KEYBRD EQU CPURAM+>74 KEYBOARD TO SCAN%KEY EQU CPURAM+>75 KEY RETURNED#JOYY EQU CPURAM+>76 JOYSTICK Y#JOYX EQU CPURAM+>77 JOYSTICK XIMER****** EQU CPURAM+>23)TROOPR EQU CPURAM+>24 TROOPS REMAINING0SAUCRF EQU CPURAM+>25 1 SAUCER FLAG 0=NOT OUT'SAUDLY EQU CPURAM+>26 2 SAUCER DELAY4AFLAGS EQU CPURAM+>28 ALIEN FLAGS 0=NOT ON SCREENAF1 EQU AFLAGSAF2 EQU AF1+1DELAY TIMER$CT EQU >0380 COLOR TABLE.SVT EQU >0780 SPRITE VELOCITY TABLE/SDL EQU >0400 SPRITE DESCRIPTOR LIST1PDT EQU >0800 PATTERN DESCRIPTOR TABLE'***************************************E LISTREAD DATA *!WCOUNT EQU 3 R3 O D!RLOC EQU 4 R4 R PWLOC EQU 4 R4 DIGTHB EQU 6 CARYHB EQU 7'***************************************'* WORKSPACE E Q U A T E S *'***************************************ICK XIMER#TIMER EQU CPURAM+>79 TIMER BYTE$STATUS EQU CPURAM+>7C STATUS BYTE$MOTION EQU CPURAM+>7A MOTION BYTE(TEMPRT EQU CPURAM+>7E TEMPRARY RETURN-INTWS EQU CPURAM+>C0 INTERRRUPT WORKSPACE&GPLWS EQU CPURAM+>E0 GPL WORKSPACE JOYSTICK XIMERAF3 EQU AF2+1AF4 EQU AF3+1AF5 EQU AF4+1'ALNUM EQU CPURAM+>2D 1 ALIEN NUMBER+DRPDLY EQU CPURAM+>2E 2 DROP DELAY TIMER6ONGRND EQU CPURAM+>30 1 # OF ALIENS REACHING GROUND.SAVDGT EQU CPURAM+>31 1 SAVED 10000'S DIGIT1+1DELAY TIMER'* C P U R A M E Q U A T E S *'***************************************%MYWS EQU >8300 MY WORKSPACE+GUNPOS EQU CPURAM+>20 GUN POSITION (0-F)/FIRFLG EQU CPURAM+>21 FIRE FLAG 0=NOT FIRED*GUNDLY EQU CPURAM+>22 2 GUN DELAY TIMER* BYTE -108,127,-72,127,-36,127,0,127#AVELSH BYTE 04,09,12,13,11,06,08,03#AVELSE BYTE 02,05,08,06,07,03,04,021EXPVEL BYTE -8,0,-8,8,0,8,8,8,8,0,8,-8,0,-8,-8,-8 SLISTS EQU $SNDFIR BYTE 4,>9A,>BF,>DF,>FF,1 BYTE 3,>80,>12,>90,1FF BYTE >FFH0B BYTE >0BH0C BYTE >0CH0D BYTE >0DH0E BYTE >0EH0F BYTE >0F*H39 BYTE >39 FOR SCORE ROUTINE%H90 BYTE >90 DANGER COLORHC0 BYTE >C0HD0 BYTE >D0+HE0 BYTE >E0 RESTORE WALL COLORHFF BYTE >FF!********************************** SOUND LIST EQUATES!*********************************SNDBUF EQU >1000FIRSND EQU SNDBUFHITSND EQU SNDBUF+44EXPSND EQU HITSND+15SAUSND EQU EXPSND+33"********************************** EQU MYWS+31 R15XIMERR0LB EQU MYWS+1 R0R1LB EQU MYWS+3 R1R2LB EQU MYWS+5 R2R3LB EQU MYWS+7 R3R4LB EQU MYWS+9 R4R5LB EQU MYWS+11 R5R6LB EQU MYWS+13 R6DIGTLB EQU R6LBR7LB EQU MYWS+15 R7*ICK XIMER BYTE 3,>80,>14,>91,1 BYTE 3,>80,>18,>92,1 BYTE 3,>80,>1C,>93,1 BYTE 3,>80,>20,>94,1 BYTE 3,>80,>24,>93,1 BYTE 3,>80,>28,>92,1 BYTE 1,>9F,0SNDHIT BYTE 4,>9F,>BF,>DF,>FE,1 BYTE 4,>CC,>03,>E7,>F0,10BLANKS BYTE >20,>20,>20,>20,>20+VDPREG BYTE >00,>E0,>00,>0E,>01,>06,>00,>01* EVEN.BVELS BYTE 0,-128,-36,-128,-72,-128,-108,-128. BYTE -128,-108,-128,-72,-128,-36,-128,0+ BYTE -128,0,-128,36,-128,72,-128,108LL COLORHFF BYTE >FF"* BYTE STATEMENTS NEEDED *"**********************************H00 BYTE >00H01 BYTE >01H02 BYTE >02H03 BYTE >03H04 BYTE >04H05 BYTE >05H06 BYTE >06H07 BYTE >07H08 BYTE >08H09 BYTE >09H0A BYTE >0AXIMERCARYLB EQU R7LBR8LB EQU MYWS+17 R8R9LB EQU MYWS+19 R9R10LB EQU MYWS+21 R10R11LB EQU MYWS+23 R11R12LB EQU MYWS+25 R12R13LB EQU MYWS+27 R13R14LB EQU MYWS+29 R14R15LB EQU MYWS+31 R15XIMER BYTE 1,>FF,0+SNDEXP BYTE 7,>9F,>BF,>DF,>E7,>F0,>C0,>07,5 BYTE 1,>F1,8 BYTE 1,>F2,10 BYTE 1,>F3,12 BYTE 1,>F4,14 BYTE 1,>F5,16 BYTE 1,>F7,18 BYTE 1,>F9,20 BYTE 1,>FF,0E 4,>CC,>03,>E7,>F0,10OPT1 TEXT '1) EASY LEVEL' 13OPT2 TEXT '2) HARD LEVEL' 13%*************************************%* DATA STATEMENTS NEEDED *%*************************************(COLORS DATA >4080,>F0F0,>F0F0,>F0F0 0-7SS:' 6GROUP' 167,>F0,10%* TEXT STATEMENTS NEEDED *%*************************************)NAME TEXT 'D - S T A T I O N' 17 BYTES/DESGNM TEXT 'DESIGNED BY: MARTY MICHAELS' 28©1 TEXT '@1983 INTERNATIONAL' 20©2 TEXT '99/4 USERS GROUP' 167,>F0,10# DATA >F0F0,>F0F0,>F800,>0000# DATA >0F0F,>0F0F,>1F00,>0000# DATA >1018,>1C1E,>FE06,>0201# DATA >83C3,>00DD,>DD00,>7777# DATA >C3C3,>00DD,>DD00,>7777# DATA >C3C3,>00DD,>DD00,>7777# DATA >C1C3,>00DD,>DD00,>7777*1 DATA >D000 REST OF SPRITES ANNULLED,EXPINI DATA >877C,>8204 EXPLOSION SAL INITSREMAIN DATA >2020,>2020 SHOW 0 DATA >0020,>2020 SHOW 1 DATA >0000,>2020 SHOW 2 DATA >0000,>0020 SHOW 3 DATA >0000,>0000 SHOW 4) DATA >F0F0,>F0F0,>F0F0,>F0F0 8-15* DATA >F0F0,>F0F0,>E0F0,>F0F0 16-23* DATA >F0F0,>F0F0,>F0F0,>F0F0 24-31*)H0000 DATA 0 ZERO SPRITE VELS#SALINI DATA >877C,>8004 BASE INITS# DATA >7F7C,>8104 GUN INITS7,>F0,10SCOREM TEXT 'SCORE:' 6TROOPS TEXT 'TROOPS' 6ZEROES TEXT '000000')OVER TEXT 'G A M E O V E R' 18 BYTES)PRESS TEXT 'PRESS REDO OR BACK' 18 BYTES-BEGIN TEXT 'PRESS ANY KEY TO BEGIN' 22 BYTESOPTH TEXT 'PRESS:' 6GROUP' 167,>F0,10SNDSAU BYTE 4,>9F,>BF,>DF,>FA,1 BYTE 2,>E2,>F0,4 BYTE 1,>FE,4 BYTE 1,>F2,4 BYTE 1,>FE,4 BYTE 1,>F4,4 BYTE 1,>FE,4 BYTE 1,>F6,4 BYTE 1,>FF,0%*************************************>CC,>03,>E7,>F0,10-SAUVEL DATA >00E7,>00E2,>00E0,>00DC NEG VELS- DATA >0019,>001E,>0020,>0024 POS VELS%*************************************%* CHARACTER DEFINITIONS *%*************************************#WALLS DATA >0818,>3878,>7F60,>40800000 SHOW 4% DATA >C07C,>820F BULLET INITS% DATA >C000,>8306 SAUCER INITS DATA >C000,>8402 ALIEN 1 DATA >C000,>8407 ALIEN 2 DATA >C000,>8408 ALIEN 3 DATA >C000,>840A ALIEN 4 DATA >C000,>840D ALIEN 5TS7,>F0,10#MOON DATA >0000,>0003,>070F,>1F1F# DATA >0F3F,>FFFF,>FFDF,>AF6F# DATA >F0FC,>FFFF,>FFFF,>FFFF# DATA >0000,>00C0,>E0F0,>F8F8*# DATA >3F3F,>7F7F,>FFFF,>FFFC# DATA >5FBF,>FFFF,>FFFF,>FFFF# DATA >C3BD,>7E7E,>7E7E,>BDC3# DATA >0000,>0008,>0808,>0808# DATA >0000,>0004,>0408,>0808# DATA >0000,>0000,>0204,>0808# DATA >0000,>0001,>0204,>0808*# DATA >0000,>0000,>0102,>0408# DATA >0000,>0000,>0001,>0608# DATA >0000,>0000,>0000,>0708%SLASH DATA >0002,>0408,>1020,>4000 /%*************************************%* SPRITE DEFINITIONS *%************************************* EVEN GUNS EQU $# DATA >0000,>0000,>0000,>00F0# DATA >0000,>0000,>0000,>E010BDC3% DATA >0038,>4404,>0810,>207C 2% DATA >0038,>4404,>1804,>4438 3% DATA >0008,>1828,>487C,>0808 4% DATA >007C,>4078,>0404,>4438 5% DATA >0018,>2040,>7844,>4438 6% DATA >007C,>0408,>1020,>2020 7>3010,>1010,>1038 1>BDC3# DATA >FCFC,>FEFE,>FFFF,>FFFF*# DATA >FBFB,>FCFF,>7F7F,>3F3F# DATA >7F7F,>FFFF,>FFFF,>FFFF# DATA >FFFF,>FFFF,>FFFF,>FFFF# DATA >FFFF,>FFFF,>FEFE,>FCFC*# DATA >1F1F,>0F07,>0300,>0000 DATA >C3BD,>7E7E,>7E7E,>BDC3# DATA >0000,>0000,>0000,>000F*#BASE DATA >183C,>3C7E,>7EFF,>0000#BULLET DATA >0000,>0010,>0000,>0000#SAUCER DATA >003C,>66FF,>7E41,>8822#ALIEN DATA >223C,>2A7F,>2214,>2241#SPLAT DATA >4004,>A104,>9100,>4410 DATA >0000,>0000,>0000,>0708# DATA >0000,>0000,>0080,>6010# DATA >0000,>0000,>8040,>2010*# DATA >0000,>0080,>4020,>1010# DATA >0000,>0000,>4020,>1010# DATA >0000,>0020,>2010,>1010# DATA >0000,>0010,>1010,>1010*DATA >0000,>0000,>0000,>E010BDC3% DATA >0038,>4444,>3844,>4438 8% DATA >0038,>4444,>3C04,>0830 9% DATA >0000,>3030,>0030,>3000 :%CSYM DATA >3C42,>99A1,>A199,>423C @%PARENS DATA >0008,>1020,>2020,>1008 (% DATA >0020,>1008,>0808,>1020 )>3010,>1010,>1038 1>BDC3# DATA >FFFF,>FFFF,>FFFF,>3F0F# DATA >FF9F,>6FB7,>D7EF,>FCF0# DATA >F8F8,>F0E0,>C000,>0000* CHARS OVERWRITTEN BY EB%DASH DATA >0000,>0000,>7C00,>0000 -%NUMS DATA >0038,>4444,>4444,>4438 0% DATA >0010,>3010,>1010,>1038 1>BDC3A0146B4D20B4520B2020B204FB2056B2045B2052B5052B4553B5320B52457F30AF 0016A015CB444FB204FB5220B4241B434BB5052B4553B5320B414EB5920B4B457F2B6F 0017A0172B5920B544FB2042B4547B494EB5052B4553B533AB3129B2045B41537F2D3F 0018A00C2BBFDFBFA01B02E2BF004B01FEB0401BF204B01FEB0401BF404B01FE7F228F 0010A00D8B0401BF604B01FFB0044B202DB2053B2054B2041B2054B2049B204F7F2D2F 0011A00EEB204EB4445B5349B474EB4544B2042B593AB2020B4D41B5254B59207F2A7F 0012A003EBB87FBDC7FB007FB0409B0C0DB0B06B0803B0205B0806B0703B04027F286F 0004A0054BF800BF808B0008B0808B0800B08F8B00F8BF8F8B049ABBFDFBFF017F228F 0005A006AB0380B1290B0103B8014B9101B0380B1892B0103B801CB9301B03807F311F 0006 COPY "DSK2.GAMEDEB"4 COPY "DSK2.GAMEIEB" EXTENDED BASIC VERSION COPY "DSK2.GAMEM" COPY "DSK2.GAMEA" COPY "DSK2.GAMEL" COPY "DSK2.GAMEC" ENDA0188B5920B4C45B5645B4C32B2920B4841B5244B204CB4556B454CB40807F2BBF 0019A019EBF0F0BF0F0BF0F0BF0F0BF0F0BF0F0BF0F0BF0F0BF0F0BE0F0BF0F07F1B0F 0020A01B4BF0F0BF0F0BF0F0BF0F0B0000B877CB8004B7F7CB8104BC07CB820F7F225F 0021A0104B4D49B4348B4145B4C53B4031B3938B3320B2049B4E54B4552B4E417F2C2F 0013A011AB5449B4F4EB414CB3939B2F34B2055B5345B5253B2047B524FB55507F29AF 0014A0130B5343B4F52B453AB5452B4F4FB5053B3030B3030B3030B4720B41207F2EAF 0015A0080B2094B0103B8024B9301B0380B2892B0101B9F00B049FBBFDFBFE017F29AF 0007A0096B04CCB03E7BF00AB01FFB0007B9FBFBDFE7BF0C0B0705B01F1B08017F21CF 0008A00ACBF20AB01F3B0C01BF40EB01F5B1001BF712B01F9B1401BFF00B049F7F255F 000900F24 A0000B0001B0203B0405B0607B0809B0A0BB0C0DB0E0FB39907F2F3F 0001A0012BC0D0BE0FFB2020B2020B2000BE000B0E01B0600B0100B0080BDC807F2D4F 0002A0028BB880B9480B8094B80B8B80DCB8000B8000B8024B8048B806CB947F7F28EF 0003A01CABC000B8306BC000B8402BC000B8407BC000B8408BC000B840ABC0007F2B8F 0022A01E0B840DBD000B877CB8204B2020B2020B0020B2020B0000B2020B00007F31FF 0023A01F6B0020B0000B0000B00E7B00E2B00E0B00DCB0019B001EB0020B00247F2FCF 0024A02D2B0000B0038B4444B4444B4438B0010B3010B1010B1038B0038B44047F332F 0034A02E8B0810B207CB0038B4404B1804B4438B0008B1828B487CB0808B007C7F2CCF 0035A02FEB4078B0404B4438B0018B2040B7844B4438B007CB0408B1020B20207F2F1F 0036A024EB0003B070FB1F1FB0F3FBFFFFBFFDFBAF6FBF0FCBFFFFBFFFFBFFFF7F0E2F 0028A0264B0000B00C0BE0F0BF8F8B3F3FB7F7FBFFFFBFFFCB5FBFBFFFFBFFFF7F120F 0029A027ABFFFFBC3BDB7E7EB7E7EBBDC3BFCFCBFEFEBFFFFBFFFFBFBFBBFCFF7F05BF 0030A041CB0400B0202B0900B0205B0060BC001B06A0C0EE8B0008B830EBC0027F2E1F 0049A0432B0008B830EB0221B0008B0222B0008B0605B16F2B06A0C0EB6B09687F2E0F 0050A0448B0008C02CCB06A0C0EB6B0940B0010C0334B06A0C0EB6B0978B00087F2AEF 0051A0398B0408B0808B0000B0000B0204B0808B0000B0001B0204B0808B00007F355F 0043A03AEB0000B0102B0408B0000B0000B0001B0608B0000B0000B0000B07087F35CF 0044A03C4B0000B0000B0000B000FB183CB3C7EB7EFFB0000B0000B0010B00007F2E8F 0045A0314B0038B4444B3844B4438B0038B4444B3C04B0830B0000B3030B00307F320F 0037A032AB3000B3C42B99A1BA199B423CB0008B1020B2020B1008B0020B10087F2F6F 0038A0340B0808B1020B0002B0408B1020B4000B0000B0000B0000B00F0B00007F36DF 0039A0290B7F7FB3F3FB7F7FBFFFFBFFFFBFFFFBFFFFBFFFFBFFFFBFFFFBFFFF7F041F 0031A02A6BFFFFBFEFEBFCFCB1F1FB0F07B0300B0000BFFFFBFFFFBFFFFB3F0F7F114F 0032A02BCBFF9FB6FB7BD7EFBFCF0BF8F8BF0E0BC000B0000B0000B0000B7C007F1F2F 0033A020CB0818B3878B7F60B4080BF0F0BF0F0BF800B0000B0F0FB0F0FB1F007F25EF 0025A0222B0000B1018B1C1EBFE06B0201B83C3B00DDBDD00B7777BC3C3B00DD7F263F 0026A0238BDD00B7777BC3C3B00DDBDD00B7777BC1C3B00DDBDD00B7777B00007F233F 0027A03DAB0000B003CB66FFB7E41B8822B223CB2A7FB2214B2241B4004BA1047F28DF 0046A03F0B9100B4410B02E0B8300B0200B0080B04C2BD022C001BB06A0C0F0E7F2D2F 0047A0406B0580B0582B0282B0007B12F7B0201B0001BD821C001BB83D4B02017F2FCF 0048A0356B0000B0000BE010B0000B0000B0080B6010B0000B0000B8040B20107F370F 0040A036CB0000B0080B4020B1010B0000B0000B4020B1010B0000B0020B20107F379F 0041A0382B1010B0000B0010B1010B1010B0000B0008B0808B0808B0000B00047F372F 0042A045EC0344B06A0C0EB6B0980B0058C02D4B06A0C0EB6B0A00B0008C032C7F293F 0052A0474B06A0C0DC6B06A0C0EB6B0380B0020C019CB06A0C0EB6B0300B00017F2A5F 0053A048AC0013B06A0C0EB6B0167B0011C00DFB06A0C0EB6B02E5B0016C01667F29AF 0054A062CB8302BD820C0007B8320BD820C0003B8324B0200B3000BD800B83317F2F4F 0073A0642B06A0C0D74BD820C000AB837ABD820C0000B8321B04E0B8322BD8207F2A9F 0074A0658C0000B8325B04E0B8326B04E0B8328B04E0B832ABD820C0000B832C7F2BCF 0075A05A8C0D2CB06A0C0D9EB022EB00A0B0004B0002B0200B0240B0201BA5A57F2B9F 0067A05BEB0202B0007B06A0C0EB8B0002B8302B05C0B0602B16F9B0200B02527F2D4F 0068A05D4B0201BA6A6B0202B0007B06A0C0EB8B0002B8302B05C0B0602B16F97F2BDF 0069A0524B0283B0031B1AF4B0283B0032B1BF1B0202B0031B60C2BD820B83077F2DBF 0061A053AB8334B06A0C0DC6B06A0C0EB6B0380B0020C019CB06A0C0EB6B0D007F279F 0062A0550B00C0C020CB06A0C0EB6B0800B0008C03CCB06A0C0EB6B0840B00087F2A7F 0063A04A0B06A0C0EB6B0022B001CC00F0B06A0C0EB6B0286B0014C010CB06A07F2A3F 0055A04B6C0EB6B02A8B0010C0120B04E0B8374B06A0C0E54B9820B8375C00157F2B2F 0056A04CCB16FAB06A0C0E54B9820B8375C0015B13FAB06A0C0DC6B06A0C0EB67F23EF 0057A066EBD820C0000B832DB0200B0200BC800B832EBD820C0000B8330B02007F2E1F 0076A0684B02EDBC800B8332B06A0C0EB6B0394B0001C0014B06A0C0EB6B03007F2A6F 0077A069AB0025C01BEB06A0C06BCB06A0C07B6B06A0C08E4B06A0C0A7EB06A07F253F 0078A05EAB06A0C0EB6B0287B0011C00DFB06A0C0EB6B02C4B0006C0130B06A07F284F 0070A0600C0EB6B02D5B0006C0136B06A0C0EB6B02E4B0006C013CBD820B83347F2A4F 0071A0616B8334B1603B0201B4500B1002B0201B4800B06A0C0EB6B02C2B00017F30EF 0072A0566C03E4B06A0C0EB6B0880B0008C03D4B06A0C0EB6B0400B0008C03CC7F290F 0064A057CB06A0C0EB6B0408B0008C0384B06A0C0EB6B0410B0028C03D4B06A07F2A3F 0065A0592C0EB6B1000B007BC0064B06A0C0D9EB0044B00A8B0004B0004B06A07F2C5F 0066A04E2B0067B0011C00DFB06A0C0EB6B00C5B0006C017CB06A0C0EB6B01257F291F 0058A04F8B000DC0182B06A0C0EB6B0165B000DC018FB06A0C0E54B9820B83757F28BF 0059A050EC0015B16FAB06A0C0E54B9820B8375C0015B13FABD0E0B8375B09837F27DF 0060A083CB0620B8326B1028BD820B8325B8325B1326B06A0C0EE6B030CB00027F2C0F 0097A0852B830AB0245B00FFB0220B0481B06A0C0EE8B0001B830CBD186B15047F2A9F 0098A0868B0285B0008B1205B1011B0285B00F7B1401B100DB06A0C0EB6B078C7F2CCF 0099A07B8BD020B8321B1339B06A0C0EE6B0788B0002B830ABC185B0245BFF007F288F 0091A07CEB0A86B06A0C0EE6B0308B0002B830EBC207B0247BFF00B0A88BD1867F256F 0092A07E4B1311B1107B0288BF800B1414B0288B0C00B1211B1009BD186B15077F2E5F 0093A0734B0100B0460C0748B0460C0774B06A0C0E6AB0460C06D8B045EBD1607F2BEF 0085A074AB8320BB141B1110B9805C000FB1B0DBD805B8320B0985B0A35B02257F2B4F 0086A0760C034CBC105B0203B0008B0200B0408B06A0C0EBCB0460C06D8BD0207F2C1F 0087A06B0C0832B06A0C09C0B06A0C0B56B10F1BC38BBC820B8322B8322B13037F299F 0079A06C6B0620B8322B100DB0200B0010BC800B8322B04E0B8374BB820C00017F2EDF 0080A06DCB8374B9820B8374C0003B1602B0460C0746B06A0C0E54BD0E0B83757F2A7F 0081A087EB0002C01BCB06A0C0EB6B030CB0001C0012BD820C0000B8325B04607F2CAF 0100A0894C08E2B06A0C0EA4B024AB0007B0A1ABC06AC01FCB06A0C0EA4B024A7F24CF 0101A08AAB03F0B022AB0080B0A4ABD820B8303B8303B1503BD820C0015B83157F2B3F 0102A07FAB1306B0288B0800B120AB0288BF800B1407B9807C0008B1204B02877F2D7F 0094A0810BC000B1401B100DB06A0C0EB6B0788B0002C01BCB06A0C0EB6B03087F2A6F 0095A0826B0001C0012BD820C0000B8321B045CBC34BBC820B8326B8326B13037F2DEF 0096A0776B8321B161CBD160B8320B0985B0A15BC1A5C0024B0201B837CB06A07F2B0F 0088A078CC0EB6B0308B0002B8302B06A0C0EB6B0788B0002B830CBD820C00017F2ACF 0089A07A2B8321BD820B83CEB83CEB1603B06A0C0E3AB1000B0460C06D8BC30B7F265F 0090A06F2B0983B0283B00FFB1310B0283B0002B1315B0283B0003B1316B02837F301F 0082A0708B000DB1317B0283B0012B1314B0283B000BB1313B10DFBC820B83767F2E3F 0083A071EB8376B13DBBD0E0B8377B1505B1100B0201BFF00B0460C0748B02017F2B4F 0084A08C0B06A0C0EB6B030CB0002B8314B0220B0480B06A0C0EB8B0002B83027F2C4F 0103A08D6BD820C0001B8325B06A0C0E3AB105CB045DBC80BB837EBD820B83257F263F 0104A08ECB8325B1365B06A0C0EE6B0308B0008B830AB0225B0404BC185B09857F2A2F 0105A09C8B1326BC820B832EB832EB1303B0620B832EB101FB06A0C0EE6B030C7F27AF 0115A09DEB0002B830CB0226B0400B9820B830DC0008B1214B0205B00F7B98207F2D8F 0116A09F4B830DB830BB140EBD160B832DB0985BD025B8328B1309B0585B02857F289F 0117*********A0944B8C30B06A0C0EB8B0002C01BCB06A0C0EB6B0308B0001C0012BD8207F2A0F 0109A095AC0000B8321B0201B1000B0601B16FEB8C30B06A0C0EB8B0001C00127F2DDF 0110A0970B0201B8300B06A0C0EB6B030EB0001B8302B06A0C0CBEB1000BD8207F2B8F 0111A0B12B0002C01BCBC001B05C0B0202B8500B06A0C0EB8B0001B8304B02027F2DCF 0130A0B28B0800B0602B16FEB0202B8400B06A0C0EB8B0001B8304B0640B06A07F2CCF 0131A0B3EC0EB8B0001C0012BD960C0000B8328B06A0C0CBEB0100BC2E0B837E7F276F 0132BASE PATTERN1A0A8EB1606B0585B0285B0004B12F9B0460C0B50BC005B0A20B0220B03107F2DBF 0124A0AA4BC040B06A0C0EE8B0002B830CB0226B0404BC1C6B0986B0247B00FF7F27CF 0125A0ABAB06A0C0EE6B0308B0002B8310B0228B0404BC248B0988B0249B00FF7F294F 0126*******3,OPT1A0A0AB0005B1A01B04C5BD820B830BB832DB1032BB820C0001B832DB98207F2A8F 0118A0A20B832DC0005B1A03BD820C0000B832DBD960C0001B8328B06A0C0EA47F2A7F 0119A0A36B024AB0FF0B094AB022AB00C8BC80AB832EB0A25B0225B0310BC0057F27CF 01209*32+5,13,OPT1A0986C0000B8325B0200B1500BC800B8326BD820B8330B8330B1310B78207F302F 0112A099CC0001B8330B0620B8332BC020B8332B06A0C0EB8B0001C0016B06A07F2D9F 0113A09B2C0EB6B0394B0001C0014BC2E0B837EB045BBC30BBD820B8325B83257F27AF 0114A0902B0246B00FFB0227B0404BC207B0987B0248B00FFB61C5B0747B62067F2AFF 0106A0918B0748B0287B0004B1B4DB0288B0004B1B4AB06A0C0E3AB102CB02017F2B5F 0107A092EB8500B06A0C0EB6B030EB0001B8302B06A0C0EB6B0788B0002C01BC7F295F 0108A0AD0B6188B0746B61C9B0747B0286B0004B1B04B0287B0004B1B01B10017F2DAF 0127A0AE6B10D4B06A0C0EB6B0788B0002C01BCB06A0C0E3AB102CB06A0C0EB67F24CF 0128A0AFCB0308B0001C0012BD820C0000B8321BC001B0220B0480B06A0C0EB87F2D0F 0129*******3,OPT1A0A4CB06A0C0EB8B0002B830CB06A0C0EA4B024AB0007B04C7BD820B83347F275F 0121A0A62B8334B1603BD1EAC004CB1002BD1EAC0044B0220B0480B06A0C0EB87F28CF 0122A0A78B0002B830EB045CBC80BB837EB04C5BD020B8321B1307BD0A5B83287F276F 01239*32+5,13,OPT1A0B54B045BBC30BB04C1BD0A1B8328B1606B0581B0281B0005B1AF9B04607F29BF 0133A0B6AC0BE6BC001B0A20B0220B0310B06A0C0EE8B0001B8304B0982B02827F2B3F 0134A0B80B0097B1AEEBC140B0220B0480B06A0C0EB8B0002C01BCBC005B06A07F285F 0135BASE PATTERN1A0D22BC24FB06A0C0D74BC3C9B045FBC3CBB0201B0028B06A0C0EA4B024A7F242F 0154A0D38B00F0B094AB028AB000AB1BF8B0A5ABC00AB06A0C0EA4B024AB1F007F247F 0155A0D4EB098ABA00AB06A0C0EE8B0001B8304B0982B0282B0020B16E8B02027F29EF 0156ATIONS'H' OUTA0C9EBC005B06A0C0EB8B0001C0013B06A0C0E3AB103BB06A0C0DE4B00027F27EF 0148A0CB4B06A0C0DF4B06A0C0E0EB045EBC2BBBC3CBB04C6B04C7B0208B02E97F20AF 0149A0CCABC008B06A0C0EE8B0001B830DBC24AB024AB000FBA18ABA187B04C77F235F 0150PUT AN 'H' OUTA0C1AB0012C0142B06A0C0EB6B01C7B0012C0154B04E0B8374B06A0C0E547F2AFF 0142A0C30B9820B8375C0015B13FAB9820B8375C0006B130EB9820B8375C000F7F2B5F 0143A0C46B130CBD0E0B8375B0983B0283B0038B1304B0283B0039B1303B10E87F2CCF 0144ON PATTERN1A0B96C0EB8B0001C0012BD860C0000B8328BC020B8332B06A0C0EB8B00017F2B7F 0136A0BACC0008B05A0B8332BB820C0001B8330B9820B8330C0003B1206B06A07F2DCF 0137A0BC2C0EB6B0394B0001C0011B1005B06A0C0EB6B0394B0001C0014B98207F2D4F 0138OON PATTERN1A0D64B0010B06A0C0EB8B0001B8305B0601B16E0B045FBC3CBBD160B83247F292F 0157A0D7AB0985B0605B0285B0004B1202B0205B0004B0A25B0225C01E8BC1057F2E9F 0158A0D90B0203B0004B0200B02F6B06A0C0EBCB045FBC17BBC1BBBC1FBBC23B7F230F 0159ATIONS'H' OUTA0CE0B9820B830DC0010B1206BD820C0001B830FB7820C000AB830DB06A07F2B3F 0151A0CF6C0EB8B0001B830DBC289B094AB0608B0288B02E4B14E1B06A0C0EE67F251F 0152A0D0CB02E5B0001B8302B9801B8331B1309BD801B8331BB820C0001B83247F2D8F 0153ATIONS'H' OUTA0C5CB0460C053CB0460C0474BC38BB0201B0008B04C2B0205B0300BD8207F2CBF 0145A0C72C0000B837ABC005B06A0C0EB8B0004C01E4B0220B0480BC1A2C00547F2B3F 0146A0C88B06A0C0EB8B0002B830CB05C2B8D75B0601B16EFBD820C000AB837A7F25AF 0147NOT YET*RN1A0BD8B8330C0005B1A02B0460C0BE8B0460C0B60B045CB06A0C0DF4B06A07F286F 0139A0BEEC0E0EB06A0C0C64B06A0C0EB6B02EDB0005C0016B7820C0001B83247F275F 0140A0C04B1307B06A0C0D74B06A0C0DE4B0004B0460C064CB06A0C0EB6B01677F295F 0141OON PATTERN1503F4GAME 7FD5DF 0178: 99/4 AS 0179A0EAEB7AB9BC80AB83C0B045BBC03BBC0FBBC13BB0300B0000B06C0BD8007F21BF 0172A0EC4B8C02B06C0B0260B4000BD800B8C02B1000BD834B8C00B0603B15FC7F294F 0173A0EDAB0203B4000B6003B0300B0002B045BBC03BBC0FBBC13BB0300B00007F2B7F 0174A0E2AB0601B16F5B06A0C0EB6B0300B0001C0013B045DB0300B0000BC83B7F2C3F 0166A0E40B83CCBD820C0001B83CEBF820C0001B83FDB0300B0002B045BB03007F29BF 0167A0E56B0000B02E0B83E0B06A0B000EB02E0B8300B0300B0002B045BBC3CB7F2B2F 0168NIONS'H' OUTA0DA6BC3CBBC005BC247B06A0C0EB8B0001B830DB0580B0586B0609B16F87F259F 0160A0DBCB0225B0020B0608B16F2B045FBC3CBB0200B0000B0202B0180B02017F2D5F 0161A0DD2B2020B06A0C0EB8B0002B8302B05C0B0602B16F9B045FBC03BB02037F29CF 0162ATIONS'H' OUT%*************************************%* PRE-GAME INITIALIZATIONS *%**************************************GAME LWPI MYWS LOAD MY WORKSPACE LI R0,>80 CLR R2LVDPR MOVB @VDPREG(R2),R0A0EF0B06C0BD800B8C02B06C0BD800B8C02B1000BDD20B8800B0603B15FC7F270F 0175A0F06B0300B0002B045BBC03BB0300B0000BD800B8C02B06C0BD800B8C027F2C0F 0176A0F1CB06C0B0300B0002B045B7FA5DF 0177A0E6CBD0A0B837ABD820C0000B837ABD120B8374B04E0B8374B06A0C0E547F268F 0169A0E82B9820B8375C0015B16FAB04E0B83D6B06A0C0E54B9820B8375C00157F28FF 0170A0E98B13F8BD802B837ABD804B8374B045FB0209B6FE5B3A60B83C0B022A7F246F 0171A0DE8BFFFFB0603B16FEB0600B16FAB045BBC34BB0200B0780B0201B00207F25DF 0163A0DFEB06A0C0EB8B0002C01BCB8C30B0601B16F9B045DBC34BB0200B03007F26AF 0164A0E14B0201B0020B06A0C0EB8B0002C01BCB05C0B06A0C0EB8B0002C01BC7F29BF 0165NIONS'H' OUT1 BL @VWTRG INITIALIZE VDP REGISTERS& INC R0 NEXT REGISTER* INC R2 NEXT BYTE OF DATA CI R2,7 DONE? JLE LVDPR NOT YET LI R1,1,R0( DATA 11*32+7,17,NAME PUT UP TITLE BL @WRTVCL DATA 17*32+6,20,COPYM BL @WRTVCL DATA 19*32+3,26,XYZMSG BL @WRTVCL, DATA 23*32+5,22,BEGIN AND KEY MESSAGE CLR @KEYBRDSCANL1 BL @SCANKYRGE CHAR SET BL @WRTVCL- DATA CT,32,COLORS LOAD COLOR SETS* * LIMI 0&* LI R0,>0900 CHAR SET SPOT* MOV R0,@>834A+* CLR @STATUS NO ERROR HERE* BLWP @GPLLNK,* DATA >0016 LOAD LARGE CHAR SETREDO BL @CLEAR* * LIMI 0* LI R0,>0900* MOV R0,@>834A+* CLR @STATUS NO ERROR HERE(* BLWP @GPLLNK SMALL CAPS* DATA >0018 * LIMI 2* BL @WRTVCL***********************************? CB @KEY,@HFF* JNE OPTDEB KEY IS STILL DOWN*GETOPT BL @SCANKY CB @KEY,@HFF JEQ GETOPT NO KEY MOVB @KEY,R3 SRL R3,8 CI R3,>31 '1'? JL GETOPT CI R3,>32 '2'?! CB @KEY,@HFF DEBOUNCE JNE SCANL1'SCANL BL @SCANKY WAIT FOR A KEY CB @KEY,@HFF JEQ SCANL%*************************************%* GET INPUT LEVEL FOR GAME PLAY *%*************************************R SET * LIMI 2*, BL @WRTVCL NULLIFY ALL SPRITES DATA SAL,1,HD0* BL @WRTVCL1 DATA PDT+>200,8,CPYRT LOAD COPYTIGHT CHAR BL @WRTVCL DATA 3,26,EGO1 MY NAME BL @WRTVCL LOAD LARGE CHAR SET/ MOVB @VDPREG(R1),@>83D4 PRESERVE VDP R1%*************************************%* ENTRY POINT FOR BACK KEY. CREATE *%* TITLE SCREEN. *%*************************************%BACK BL @CLEAR CLEAR SCREEN JH GETOPT LI R2,>31 OFFSET S R2,R3 HAS 0,11 MOVB @R3LB,@LEVEL HAVE DIFFICULT LEVEL NOW%*************************************%* LOAD SPRITE PATTERNS, ETC *%*************************************? BL @CLEAR BL @WRTVCL) DATA 3*32+7,17,NAME TITLE AGAIN BL @WRTVCL% DATA 6*32+5,6,OPTH HEADING BL @WRTVCL DATA 9*32+5,13,OPT1 BL @WRTVCL DATA 11*32+5,13,OPT2*OPTDEB BL @SCANKY SET- DATA CT,32,COLORS LOAD COLOR SETS BL @WRTVCL DATA PDT+>500,192,WALLS BL @WRTVCL1 DATA PDT,8,BASE LOAD BASE CHARACTER BL @WRTVCL0 DATA PDT+64,8,ALIEN LOAD ALIEN PATTERN BL @WRTVCL BL @WRTVCL DATA 22*32+21,6,TROOPS BL @WRTVCL DATA 23*32+4,6,ZEROES MOVB @LEVEL,@LEVEL' JNE DISHRD PUT AN 'H' OUT%DISEAS LI R1,>4500 'E' FOR EASY JMP DISLVL%DISHRD LI R1,>4800 'H' FOR HARD% INCT VDPADD POINT OVER 2( DEC R2 DONE WITH REPS? JNE LWALL NOT YET* LI VDPADD,18*32+18" LI R1,>A6A6 WALL CHAR& LI R2,7 14 (7/2) REPSRWALL BL @WRTCLLL CHARS*RTVCL&**************************************&* FORMAT THE SCREEN WITH CHARACTERS *&**************************************& BL @VFOUR DRAW THE MOON DATA 2*32+4 DATA >A8,4,4** BL @STARS CREATE STAR FIELD*RTVCL0 DATA PDT+>80,8,BULLET STAR PATTERN, TOO!* BL @WRTVCL/ DATA SDL,8,BASE LOAD BASE PATTERN BL @WRTVCL5 DATA SDL+8,8,GUNS+56 AND INITIAL GUN PATTERN BL @WRTVCL LOAD ALIEN PATTERN BL @WRTVCLDISLVL BL @WRTVCL DATA 22*32+2,1,MYWS+2*2 MOVB @H07,@GUNPOS GUN IS AT POSITION 73 MOVB @H03,@TROOPR START WITH 3 STATIONS5 LI R0,>3000 10000'S DIGIT IS A ZEROJMP DISLVL%DISHRD LI R1,>4800 'H' FOR HARD+ DATA 2,MYWS+2 WRITE 2 WALL CHARS% INCT VDPADD POINT OVER 2( DEC R2 DONE WITH REPS? JNE RWALL NOT YET* BL @WRTVCL DATA 20*32+7,17,NAME BL @WRTVCL DATA 22*32+4,6,SCOREM& BL @VFOUR CREATE CASTLE DATA 17*32+14 DATA >A0,4,2* LI VDPADD,18*32" LI R1,>A5A5 WALL CHAR& LI R2,7 14 (7/2) REPSLWALL BL @WRTCL+ DATA 2,MYWS+2 WRITE 2 WALL CHARS*RTVCL< DATA SDL+16,40,BULLET LOAD BULLET,SAUC,ALIEN,&SPLAT&**************************************&* LOAD SOUND LISTS *&************************************** BL @WRTVCL DATA SNDBUF,123,SLISTSERN BL @WRTVCL1 BL @VWTRG INITIALIZE VDP REGISTERS& INC R0 NEXT REGISTER* INC R2 NEXT BYTE OF DATA CI R2,7 DONE? JLE LVDPR NOT YET LI R1,1,R0 BL @WRTVCL3 DATA SAL,37,SALINI PUT SPRITES ON SCREEN+13 ADDRESS TO WRITE FIRST ALIEN8 MOV R0,@ALSLOC AND SET CPU FLAG TO SAY TO BL @WRTVCL4 DATA CT+20,1,HE0 MAKE SURE WALL IS GREYED*' FOR HARD2 CLR @AFLAGS NO SAUCERS ON SCREEN CLR @AFLAGS+2 MOVB @H00,@AFLAGS+4*3 MOVB @H00,@ALNUM START WITH ALIEN ZERO LI R0,>0200: MOV R0,@DRPDLY SLIGHT DELAY BEFORE DROPPINGME OUT*ED*' FOR HARD: MOVB R0,@SAVDGT SAVE IT FOR COMPARISON LATER3 BL @SHOWTR SHOW TROOPS REMAINING6 MOVB @H0A,@MOTION ALLOW 3 SPRITE IN MOTION&**************************************&* ENTRY POINT FOR WHEN BASE IS KILLED*' FOR HARD/ MOVB @VDPREG(R1),@>83D4 PRESERVE VDP R1******************************** SECTION TO GET EB CHAR SETS ******************************** LI R1,>400 SOURCE LI R2,>900 DEST! LI R5,>60 96 CHARS%*************************************%* PRE-GAME INITIALIZATIONS *%**************************************GAME LWPI MYWS LOAD MY WORKSPACE LI R0,>80 CLR R2LVDPR MOVB @VDPREG(R2),R01 MOVB @H00,@ONGRND NO ALIENS ON GROUND*: LI R0,23*32+13 ADDRESS TO WRITE FIRST ALIEN8 MOV R0,@ALSLOC AND SET CPU FLAG TO SAY TO BL @WRTVCL4 DATA CT+20,1,HE0 MAKE SURE WALL IS GREYED*' FOR HARD&**************************************0ENTRY MOVB @H00,@FIRFLG NO SHOT FIRED, YET( CLR @GUNDLY OK TO MOVE: MOVB @H00,@SAUCRF NO SAUCER ON THE SCREEN, YET1 CLR @SAUDLY SAUCER CAN COME OUT*ED*' FOR HARDEBCHRL MOV R1,VDPADD BL @RDCL- DATA 8,MYWS+14 7,8,9,10 HAS PATTERN MOV R2,VDPADD& DATA 8,MYWS+14 MOVE THE CHAR AI R1,8 AI R2,8 DEC R5: JNE EBCHRL FINISH LOADING CHARACTER PATTERNS*  DATA SAL,1,HD0* BL @WRTVCL( DATA 11*32+7,17,NAME PUT UP TITLE BL @WRTVCL, DATA 23*32+5,22,BEGIN AND KEY MESSAGE BL @WRTVCL DATA 1*32+2,28,DESGNM BL @WRTVCL DATA 20*32+6,20,COPY1RITESOR SETS %*************************************%* ENTRY POINT FOR BACK KEY. CREATE *%* TITLE SCREEN. *%*************************************%BACK BL @CLEAR CLEAR SCREEN BL @WRTVCL- DATA CT,32,COLORS LOAD COLOR SETS %* LOAD SPRITE PATTERNS, ETC *%*************************************REDO BL @CLEAR* * LIMI 0* LI R0,>0900* MOV R0,@>834A+* CLR @STATUS NO ERROR HERE(* BLWP @GPLLNK SMALL CAPS* DATA >00181  BL @WRTVCL DATA 11*32+5,13,OPT2*OPTDEB BL @SCANKY CB @KEY,@HFF* JNE OPTDEB KEY IS STILL DOWN*GETOPT BL @SCANKY CB @KEY,@HFF JEQ GETOPT NO KEY MOVB @KEY,R3 SRL R3,8A 9*32+5,13,OPT1  BL @WRTVCL DATA 21*32+8,16,COPY2* CLR @KEYBRDSCANL1 BL @SCANKY! CB @KEY,@HFF DEBOUNCE JNE SCANL1'SCANL BL @SCANKY WAIT FOR A KEY CB @KEY,@HFF JEQ SCANL%************************************* * * LIMI 0&* LI R0,>0900 CHAR SET SPOT* MOV R0,@>834A+* CLR @STATUS NO ERROR HERE* BLWP @GPLLNK,* DATA >0016 LOAD LARGE CHAR SET * LIMI 2*, BL @WRTVCL NULLIFY ALL SPRITESOR SETS  BL @WRTVCL DATA PDT+>168,8,DASH BL @WRTVCL DATA PDT+>140,16,PARENS BL @WRTVCL DATA PDT+>178,8,SLASH BL @WRTVCL DATA PDT+>180,11*8,NUMS BL @WRTVCL DATA PDT+>200,8,CSYMPATTERNS*  CI R3,>31 '1'? JL GETOPT CI R3,>32 '2'? JH GETOPT LI R2,>31 OFFSET S R2,R3 HAS 0,11 MOVB @R3LB,@LEVEL HAVE DIFFICULT LEVEL NOW%*************************************3,OPT1 %* GET INPUT LEVEL FOR GAME PLAY *%************************************* BL @CLEAR BL @WRTVCL) DATA 3*32+7,17,NAME TITLE AGAIN BL @WRTVCL% DATA 6*32+5,6,OPTH HEADING BL @WRTVCL DATA 9*32+5,13,OPT1! * LIMI 2* BL @WRTVCL- DATA CT,32,COLORS LOAD COLOR SETS BL @WRTVCL DATA PDT+>500,192,WALLS BL @WRTVCL1 DATA PDT,8,BASE LOAD BASE CHARACTER BL @WRTVCL SMALL CAPS* DATA >00181! DATA 20*32+7,17,NAME BL @WRTVCL DATA 22*32+4,6,SCOREM BL @WRTVCL DATA 22*32+21,6,TROOPS BL @WRTVCL DATA 23*32+4,6,ZEROES MOVB @LEVEL,@LEVEL' JNE DISHRD PUT AN 'H' OUTRTCL4*****81!+ DATA 2,MYWS+2 WRITE 2 WALL CHARS% INCT VDPADD POINT OVER 2( DEC R2 DONE WITH REPS? JNE LWALL NOT YET* LI VDPADD,18*32+18" LI R1,>A6A6 WALL CHARREPSLWALL BL @WRTCL4*****81! BL @WRTVCL DATA SNDBUF,123,SLISTS&**************************************&* FORMAT THE SCREEN WITH CHARACTERS *&**************************************& BL @VFOUR DRAW THE MOON DATA 2*32+4 DATA >A8,4,4*****81!0 DATA PDT+64,8,ALIEN LOAD ALIEN PATTERN BL @WRTVCL0 DATA PDT+>80,8,BULLET STAR PATTERN, TOO!* BL @WRTVCL/ DATA SDL,8,BASE LOAD BASE PATTERN BL @WRTVCL BL @WRTVCL SMALL CAPS* DATA >00181!%DISEAS LI R1,>4500 'E' FOR EASY JMP DISLVL%DISHRD LI R1,>4800 'H' FOR HARDDISLVL BL @WRTVCL DATA 22*32+2,1,MYWS+2*2 MOVB @H07,@GUNPOS GUN IS AT POSITION 73 MOVB @H03,@TROOPR START WITH 3 STATIONS***81!& LI R2,7 14 (7/2) REPSRWALL BL @WRTCL+ DATA 2,MYWS+2 WRITE 2 WALL CHARS% INCT VDPADD POINT OVER 2( DEC R2 DONE WITH REPS? JNE RWALL NOT YET* BL @WRTVCLL @WRTCL4*****81!* BL @STARS CREATE STAR FIELD*& BL @VFOUR CREATE CASTLE DATA 17*32+14 DATA >A0,4,2* LI VDPADD,18*32" LI R1,>A5A5 WALL CHAR& LI R2,7 14 (7/2) REPSLWALL BL @WRTCL4*****81!5 DATA SDL+8,8,GUNS+56 AND INITIAL GUN PATTERN BL @WRTVCL< DATA SDL+16,40,BULLET LOAD BULLET,SAUC,ALIEN,&SPLAT&**************************************&* LOAD SOUND LISTS *&**************************************81"2 BL @WRTVCL BLANK OUT ALIENS ESCAPED DATA 23*32+13,5,BLANKS' SB @H01,@TROOPR 1 LESS TROOPER" JEQ ITOVER GAME OVER0 BL @SHOWTR OTHERWISE SHOW TROOPERS' BL @DELAY 2 SECOND DELAYON"8 MOV R0,@ALSLOC AND SET CPU FLAG TO SAY TO BL @WRTVCL4 DATA CT+20,1,HE0 MAKE SURE WALL IS GREY BL @WRTVCL3 DATA SAL,37,SALINI PUT SPRITES ON SCREEN32+13 ADDRESS TO WRITE FIRST ALIENIONS***81": MOVB @H00,@SAUCRF NO SAUCER ON THE SCREEN, YET1 CLR @SAUDLY SAUCER CAN COME OUT*2 CLR @AFLAGS NO SAUCERS ON SCREEN CLR @AFLAGS+2 MOVB @H00,@AFLAGS+4* MOTION START WITH 3 STATIONS***81"5 LI R0,>3000 10000'S DIGIT IS A ZERO: MOVB R0,@SAVDGT SAVE IT FOR COMPARISON LATER3 BL @SHOWTR SHOW TROOPS REMAINING6 MOVB @H0A,@MOTION ALLOW 3 SPRITE IN MOTION START WITH 3 STATIONS***81" DATA 4' B @ENTRY AND PLAY AGAIN*2ITOVER BL @WRTVCL DISPLAY GAME OVER MESSAGE DATA 11*32+7,18,OVER* BL @WRTVCL AND PRESS MESSAGE DATA 14*32+7,18,PRESS CLR @KEYBRD 2 SECOND DELAYON"&**************************************&* ROUTINE WHEN 5 ALIENS HIT GROUND *&**************************************(LOSE BL @STOPAL STOP ALL ALIENS/ BL @DELAL AND DELETE ALL SPRITES) BL @EXPLOS CREATE EXPLOSION"3 MOVB @H00,@ALNUM START WITH ALIEN ZERO LI R0,>0200: MOV R0,@DRPDLY SLIGHT DELAY BEFORE DROPPING1 MOVB @H00,@ONGRND NO ALIENS ON GROUND*: LI R0,23*32+13 ADDRESS TO WRITE FIRST ALIENIONS***81"&**************************************&* ENTRY POINT FOR WHEN BASE IS KILLED*&**************************************0ENTRY MOVB @H00,@FIRFLG NO SHOT FIRED, YET( CLR @GUNDLY OK TO MOVETE IN MOTION START WITH 3 STATIONS***81""REDBAK BL @SCANKY GET A KEY% CB @KEY,@HFF KEY PRESSED? JEQ REDBAK NOT YET* CB @KEY,@H06 REDO? JEQ GOREDO YES CB @KEY,@H0F BACK? JEQ GOBACK MOVB @KEY,R3 SRL R3,8## INCT R2 NEXT INDEX- C *R5+,*R5+ POINT TO NEXT SPRITE' DEC R1 DONE WITH ALL? JNE EXLOOP NOT YET' MOVB @H0A,@MOTION RESTORE MOTION* MOV R5,VDPADD GET WHERE WE WEREN, YETL R3,8# * IS IN R14.'***************************************$EXPLOS MOV R11,R14 SAVE RETURN* LI R1,8 8 SPRITES TO LOAD CLR R2 INDEX) LI R5,SAL START OF SPRITES' MOVB @H00,@MOTION NO MOTION, YETL R3,8#! JMP MAIN AND LOOP&**************************************&* INPUT SUBROUTINE. RETURN IS IN R14 *&**************************************)INPUT MOV R11,R14 SAVE RETURN LINK& MOV @GUNDLY,@GUNDLY OK TO MOVE?#&**************************************&* M A I N P L A Y I N G L O O P *&**************************************/MAIN BL @INPUT GET AND REACT TO INPUT0 BL @CHKBUL CHECK BULLET BOUNDARIES#4 BL @WRTCL NULLIFY THE REST OF SPRITES DATA 1,HD0 BL @SOUND DATA EXPSND BL @DELAY WAIT DATA 2% BL @STOPAL STOP SPRITES# BL @DELAL AND DELETEHERE WE WEREN, YETL R3,8#EXLOOP MOV R5,VDPADD- BL @WRTCL PUT SPRITE ON SCREEN DATA 4,EXPINI% AI VDPADD,>480 POINT TO SVT* MOV @EXPVEL(R2),R6 GET THE VELOCITY/ BL @WRTCL AND SEND SPRITE MOVING DATA 2,MYWS+12N, YETL R3,8# CI R3,>38 REDO? JEQ GOREDO CI R3,>39 BACK? JEQ GOBACK" JMP REDBAK WRONG KEY*GOREDO B @REDOGOBACK B @BACK'***************************************'* ROUTINE TO CREATE EXPLOSION. RETURN *RL R3,8#/ BL @COINCS DID BULLET HIT SAUCER?/ BL @COINC5 SEE IF WE HIT AN ALIEN, BL @SENDSC SEE IF SAUCER TIME!( BL @DROPAL DROP ANY ALIENS1 BL @HITGND SEE IF ALIENS HIT GROUND#- B *R14 AND RETURN TO CALLERPRITES DATA 1,HD0 BL @SOUND DATA EXPSND BL @DELAY WAIT DATA 2% BL @STOPAL STOP SPRITES# BL @DELAL AND DELETEHERE WE WEREN, YETL R3,8$ JEQ GOFORT YES1 DEC @GUNDLY NO, SO DECREMENT COUNTER# JMP INPEXT AND RETURN*GOFORT LI R0,>10 RESET DELAY VALUE MOV R0,@GUNDLY, CLR @KEYBRD SCAN WHOLE KEYBOARD MOVE?$)INPUTR B *R14 RETURN TO CALLER#***********************************#* ROUTINE TO MOVE GUN RIGHT/LEFT *#***********************************1LFTRGT MOVB @GUNPOS,R5 GET CURRENT GUN POSITION2 AB R1,R5 ADD INCREMENT TO POSITION$ JGT RIGHT JLT LEFT#***********************************#* MID BRANCH POINTS FOR MOVEMENT *#***********************************"LEFT LI R1,>FF00 -1 IN MSB B @LFTRGT"RIGHT LI R1,>0100 +1 IN MSB B @LFTRGTEMENT$ WATKEY CI R3,>0002 S OR J?" JEQ LEFT MOVE LEFT CI R3,>0003 D OR L?# JEQ RIGHT MOVE RIGHT CI R3,>000D . OR V? JEQ FIRE FIRE$ CI R3,>0012 Q,Y, OR JB?*$$BRDINC AB @H01,@KEYBRD SCAN SIDE 1) CB @KEYBRD,@H03 DONE WITH SPLIT?( JNE BINCCT NO, SO CONTINUE,INPEXT B @INPUTR YES, SO EXIT MODULE"BINCCT BL @SCANKY GET INPUT! MOVB @KEY,R3 SAVE KEY$5 JLT NOMOVE WENT NEGATIVE, SO CAN'T MOVE) CB R5,@H0F PAST RIGHT LIMIT4 JH NOMOVE YES, SO CAN'T MOVE THAT WAY%MOVEOK MOVB R5,@GUNPOS NEW POSITION% SRL R5,8 PUT INTO LSBADD INCREMENT TO POSITION$-FIRE B @FIRES GOTO FIRE SUBROUTINE'PAUSE BL @PAUSES GOTO PAUSE SUB* B @BRDINC AND KEEP SCANNING#***********************************#* RETURN POINT FOR MOVEMENT ROUTS *#***********************************@LFTRGTEMENT$ JEQ FIRE FIRE CI R3,>000B P OR T? JEQ PAUSE PAUSE" JMP BRDINC WRONG KEY&CHKJOY MOV @JOYY,@JOYY DID JOY MOVE?! JEQ BRDINC NOT HERE0 MOVB @JOYX,R3 CHECK FOR SIDE MOVEMENT$* SRL R3,8 AND ADJUST TO LSB% CI R3,>00FF KEY PRESSED?. JEQ CHKJOY NO, SO CHECK JOYSTICK$************************************$* DETERMINE WHAT KEY AND BRANCH *$************************************%1 MOVB @FIRFLG,R0 IS A SHOT ON THE SCREEN?& JEQ CBRTRN NO, SO RETURN*' BL @RDVCL GET BULLET Y,X DATA SVT+8,2,MYWS+10 MOV R5,R6 COPY" ANDI R5,>FF00 Y IN R5HBNES ALREADY FIRED?ITION%4 MOVB @STRTSD,@STRTSD IS SOUND AREADY PLAYING?7 JNE FIRERT YES, SO DON'T EXECUTE THIS ONE. BL @SOUND MAKE A SHOOTING SOUND DATA FIRSND*FIRERT B @BRDINC TRY NEXT KEYBOARDT IS ONES ALREADY FIRED?ITION%/ JNE FIRERT YES, SO CAN'T FIRE YET1 MOVB @GUNPOS,R5 GET CURRENT GUN POSITION! SRL R5,8 INTO LSB0 SLA R5,1 MULTIPLY BY 2 (FOR Y,X)/ MOV @BVELS(R5),R6 GET THE TWO VELOCITIES ALREADY FIRED?ITION%& SLA R5,3 MULTIPLY BY 8, AI R5,GUNS POINTS TO A PATTERN. MOV R5,WLOC WHERE TO GET THE DATA' LI WCOUNT,8 HOW MANY BYTES* LI VDPADD,SDL+8 WHERE TO WRITE TOT INTO LSBADD INCREMENT TO POSITION%" SLA R6,8 X IN R6HB - BL @RDVCL GET BULLET POSITIONS DATA SAL+8,2,MYWS+14 MOV R7,R8 COPY" ANDI R7,>FF00 Y IN R7HB" SLA R8,8 X IN R8HB*'TRYPOS MOVB R6,R6 IS X POSITIVE?%(****************************************(* ROUTINE TO CHECK BULLET AGAINST BOUND-(* ARY LIMITS. RETURN IS IN R12 *(****************************************)CHKBUL MOV R11,R12 SAVE RETURN LINKXT KEYBOARDT IS ONES ALREADY FIRED?ITION%- LI R1,>837C PUT BULLET ON SCREEN BL @WRTVCL DATA SAL+8,2,MYWS+22 BL @WRTVCL SET BULLET IN AUTO-MOTION DATA SVT+8,2,MYWS+127 MOVB @H01,@FIRFLG AND SET FLAG TO SAY SHOT IS ONES ALREADY FIRED?ITION%0 BL @WRITE WRITE A NEW GUN PATTERN*NOMOVE B @BRDINC TRY NEXT KEYBOARD"**********************************"* ROUTINE TO FIRE A BULLET *"**********************************/FIRES MOVB @FIRFLG,R0 HAVE WE ALREADY FIRED?ITION%2 JEQ TRYY ZERO, SO JUST CHECK THE Y5 JLT TRYNEG NO, SO CHECK FOR - DIRECTION) CI R8,>F800 PAST COLUMN 247?' JHE DELBUL YES, SO DELETE+ CI R8,>0C00 DID IT WRAP AROUND IS X POSITIVE?& CBRTRN B *R12BUL YES, SO DELETE JMP CBRTRN OK HERE*(DELBUL BL @WRTVCL STOP THE BULLET DATA SVT+8,2,H0000* BL @WRTVCL AND PUT OFFSCREEN DATA SAL+8,1,HC0+ MOVB @H00,@FIRFLG NO SHOT FIRED, NOW*&' JLE DELBUL YES, SO DELETE% CI R8,>F800 DID IT WRAP?' JHE DELBUL YES, SO DELETE*'TRYY CB R7,@H08 AT TOP BORDER?' JLE DELBUL YES, SO DELETE% CI R7,>C000 DID IT WRAP?T LEFT MARGIN?&A:BBBB?BBBoBBBBBBBBB??BBBB_BBBBýF AjB~~B~~BBBBBBBBB??BBBBBBBBBBBBBF ABBBBBBB?BBoBBBBBBB0800 AT LEFT MARGIN?&AB|BB|BB|BBBBBBBBBBB BB BB|BB B B F AB BB BB BBBBBBBBB B$BB8xB`B@BBBBBF A BBBBBBBBBBBwwBBBBwwBBBBwwBBBBwwBF &AB(BBBBBBBB BBBBBBBBB BB BBBBF ABBBBBBBBBBBBBBBBBBBDB -B SB TB AB TF AB IB OB NBDEBSIBGNBEDB BBY:B JBOHBN BPHBILBLIBPSB@1B98B4 B VBIDBEOB MBAGF 'ABBBBBBB`BBB@B BBB@ BBBB@ BBB B BBF ABBBBBBBBBBBBBBBBBBBBBBBBF A*BBBBBBBBBBBB