@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u./*DATHEXLINDATLIDDBYTPASCHKSUTOTAIN@T} *** ACCESS DOS III ***C BC0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12U},13,14,15(r;@,9@",/-@"3"<68,-@ L6-A V#A` A r( CHECKING DATA2V}86-%@(LINE:!"8B:,@A <F%6-F:A,%F:A,$AV+C(LINE  MISSING!FW}Fe-@@@36-@:7,,&@HO6-@:7%@,,&@He6-8,$@%8,P."@*@X} $". @PZ% 6-%!A %6-&Ad  ""@Pn A x F:A,@A Y}"A*@A$)*@@<*@A%O*@@b*@@"Z}u*@@2@<-@@**@. 9@<g+("INSERT DISK WITH DOS, PRE[}SS RETURN8;@,<g@@ D:AUTORUN.SYSu*@AU)*@AU<*@\}O*@@2b*@A%u*@@AM(( WRITING FILE#6-@/6-A 9#AC A]} M @P(BAD DATA: LINE dd453A9B4B3A9B443A2020202020202020202020009B00A9048D4B28A9008DDC02AD1FD0C906D00^}38DC626A230A9,750dd039D4203A90C9D4A03A9209D4503A9009D44032056E4A9008DC602A240A9039D4203A90C9D4A03A9209D4503A9,715dd03_}9D44032056E4206126A901204D28A90085568DF002A9128555A9158554A230A90B9D4203A9009D48039D4903,611ddA97C2056E4A920A20B9D0720CAD`}0FA8E152020AD28C97EF01DC916F01CC99BF012C92EF076C93090E9C95BB0E5,549ddC9419013B01A4C98214C4A21A909204D2820B0264C4A21C93AB0a}CAAD1520F0C5ADAC28AC1520990820C88C1520,876ddA230A90B9D4203A9009D48039D4903ADAC282056E4AD1520C908F025C90BD098A230A90B9D420b}3A9009D48039D,315$dd4903A91E2056E420AD28C99BF07CC97EF02AD0F3A91C8555A9008556A9158554A230A90B9D4203A9009D48039D,345.dd49c}03A97C2056E4A9088D15204C9920A9008D15208556A9138555A9158554AC1520A230A90B9D4203A9009D4803,3298dd9D4903B97C21F0092056E4EE152d}04C59214C64202E2E2E2E2E2E2E2E7C7C2E2E2E00A900204D2820B02620B026,760Bdd4C4A21A9018DF002202224A906204D284CAC2100000000A9108De}AA21A9008DAB21A92A8DA921A9808DA821A901,609Lcc8D0103ADAA218D0A03A9008D0B03ADA8218D0403ADA9218D0503A9522053E4AD0303C901D0A2Ef}EAA21ADAA21C9,17Vdd18F011ADA8211869808DA82190C3EEA9214CC021A9008D3922A001A92A85D2A98085D1B1D1D90720D007C8C00C,367`ddD0Fg}4F02518A91065D185D19002E6D2EE3922AD3922C93EF005A001D0D900A90A204D2820B0264C9D21A000B1D1,616jdd2940F0D3A907204D28A9008D7624h}8DC3228DC422A00CB1D18D71248D7224C8B1D18D7324C8B1D18D7424C8B1D1,184tdd8D7524A9018D0103A9188D0A03A9008D0B03A92A8D0503A9008D0i}403A9522053E4AD0303C901D022AD73242078,834~cc24CE7124F02DADA921186906CDE602B011AC7324B9002A8D73244CA1224C8A210000AC7324B900j}2A8D7324A901,22dd8DC4224CDB22A9008DC422A904204D2820AD28C97ED0034C4A21C99BD0F2A9018D0103A9528D0203A92A8D0503,428ddA900k}8D0403A9008D0B03A9108D0A032053E4AD0303C901D0AAAD0F2AC9A5F0BEA90B204D28ADC322D034A002B9,874dd10209911208810F7A92E8D1020A00l}0B90820C920F007C8C008D0F4F014983869078D5423A000B91020990820C8,270ddC005D0F5A220A9039D4203A9209D4503A9069D4403A9080DC3229Dm}4A032056E4C001D057A90B9D4203A92A9D45,675dd03A9809D4403ADC422D00FAD74249D4803AD75249D49034CAF23ADA82138E9809D4803ADA921E92n}A9D49032056,255ddE4C001D01CA90C9D42032056E4C001D010ADC422D02AA905204D2820B0264C4A21A900204D28A220A90C9D4203,406dd2056o}E430EF20B026A903204D2820B0264C4A21AD722438ED71240A0A8DC526AD752438EDC5268D7524AD71248D,807dd7224A9008D7624A9018DC32220222p}44C792268684C4A21A902204D2820AD28ADAC28C97EF0ECC99BD0F2A9018D,555dd0103A9528D0203A92A8D0503A9808D0403A9008D0B03A9108D0A03q}2053E4AD0303C901F0034CD223A00FB9802A,242ddC9A5D0B98888B9802AD0B2600000000000000048A9008DAA218DAB21680A2EAB210A2EAB210A2EAr}B211869198D,219ddAA219003EEAB21AD7624D00AA92A8DA921A9808DA821A9008D7724A9018D0103ADAA218D0A03ADAB218D0B03AD,764ddA821s}8D0403ADA9218D0503A9522053E4AD0303C901D026EEAA21D003EEAB21ADA8211869808DA8219003EEA921,512ddEE7724AD7724C908D0B7A9FF8D762t}4604C8A217D1D1D1D1D1D2041434345535320444F5320494949011C1E1E1E,263 dd1E1E1E1E1E1E1E1E1E1E1E1EA0A0A0A0A0A0A0A0A0A0A0A0A0A0A0u}A01D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E,691dd1EA0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A01C1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1EA0C1C3C3C5Dv}3D3A0C4CFD3,925ddA0C9C9C9A01D1D1D1D1D1E1E1E1E1E1E1E1E1E1E61207574696C6974792070726F6772616D1D1D1E1E1E1E1E1E,240(dd6279w}204D617474686577204A6F6E65731C1C1E1E1E1E1E1E1E1E1E1E1E1E1E1E1C1C1C1C1C1E1E1E66726F6D20,9382dd415441524920444F5320322E011D1x}D1D1D1D1D1D1D1D1D1D1D1D1D1D1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E,643<dd1112121212121212120511121212051D1E1E1E1E1E1E1E1E1E1E1Ey}1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E1E4649,867Fdd4C454E414D45206973207C2E2E2E2E2E2E2E2E7C7C2E2E2E7C1D1E1E1E1E1E1E1E1E1E1E1E1E1E1z}E1E1A121212,146Pdd1212121212031A121212030000A9248D7026A9008D6026AC6026B9FF24F026C901F02548A230A9009D48039D49,714Zdd03A9{}0B9D4203682056E4EE6026AD6026D0D8EE70264C6B264CC726ADC626D0EA20B026AD1FD0C906D0E08DC626,123dddF0DBA9058DC526A200A00088D0FDC|}AD0F8CEC526D0F1600000A510297F85108D0ED260464154414C204552524F,358ndd522D20436865636B20796F7572206469736B2064726976652E0050}}6C6561736520656E7465722074686520444F,273xdd53204949492066696C656E616D6500496E7365727420444F5320494949206469736B2C207072657~}37320524554,973dd55524E0046696C65207472616E7366657220696E636F6D706C6574652E00496E7365727420444F532032206469,863dd736B}2C2070726573732052455455524E005472616E73666572206F662066696C6520636F6D706C6574652E0053,778dd6561726368696E6720666F7220666}96C652E2E2E2E2E2E2E2E00466F756E642066696C652C204C6F6164696E67,520cc2E2E2E2E2E2E0050726573732044454C45544520746F2072657374}6172740056657273696F6E20312E31206279,21dd204D617474686577204A6F6E65730046696C65206E6F7420666F756E642C20506C65617365207265}7472792E00,973dd536176696E672066696C652C20706C656173652077616974202E2E2E0026D126F52717273927532773278E27A9,739dd27C32}7DB27F828160000488D4C28A9128554A9008556AD4B288555A230A9009D48039D4903A90B9D4203A97E20,784dd56E4A555C903D0E6680AA8B933288D}9D28B934288D9C28A230A9009D48039D4903A90B9D4203A455888888B900,592dd00F0062056E44C8928A5558D4B286000ADFC02C9FFD012AD1FD0D00}34C74E4ADDC020DB602D01FF0E7A9008DB6,985dd028DFF02A9408DBE02ADFC02C927F009C93CF04CD051080000A5558DE228AD4C288DE128ADE02820}4D28A9008D,989ddDC028DB602A9FF8DFC0220B026ADE128204D28ADE2288555A9148554A230A90B9D4203A9009D48039D4903A91D,699dd2056E}44CAD28A9FF8DFC02D0F6A240A9079D4203A9009D48039D49032056E430048DAC2860A9808511A9FF8DFC,980dd0268684C4A21000000000000000000}000000000000000000000000000000000000000000000000000000000000,373D2:ACCESS3.BAS80dd0268684C4A21000000000000000000W@d(X; **********************************n(X; ****** ACCESS DOS III ******x(X; *** WRITTEN BY M. JONES 1984 *** }(X; **********************************X;&X; This program was written for two&X; reasons. To fulfill a need, and"X; } as an experimental exercise.%X; Therefore, the actual coding is&X; to be taken as such, as much has$X; altered since i }t started life."X; Seemingly meaningless labels'X; probably did mean something once!'X; I hope the comments provided he }lp%X; you understand what you want to'X; know, each section was written as#X; a module so that should help.X; - Matt }hew JonesX;"X; Operating System Equates,X; ------------------------6X;@POKMSK;;mask IRQ enableJBRKKEY;;B }REAK flagTROWCRST;;cursor row pntr^COLCRSU;;and column pntrhDIRPTR;;directory pntrrINVFLG;;inv video f }lag|SHFLK;;shift-lock flagCOLOR2;;playfield 2HELPFG;;HELP key flagMEMTOP;;top of free memC }RSINH;;cursor inhibitCH;;char bufferSSFLAG;;start/stop flgDUNIT;;unit numberDCOMND;;bus c }ommandDSTATS;;status returnDBUFLO;;buffer pntrDBUFHI DAUX1  DAUX2 ICCOMB;;CIO comm }and ICBALD ICBAHE& ICBLLH0 ICBLHI: ICAX1JDDSKINVS;;disk vectorNCIOVV;;CIO vectorXWA }RMSVt;;warmstartbX;lX; Hardware RegistersvX;CONSOL;;console keysIRQEN;;IRQ enable maskX;  }X;OPENE AE:A=OPENK AK:A=OPEND AD:AFILEST A A== FNPTR X;X; INITIALIZEX; - }---------X; "X; Program actually starts hereX;  PRGSTRTQ>;;initialize data* PLLENG4Q>>PHELPFG;;clear help } flagHQCONSOL;;speed up titleRR>;;check START\HOPEN;;pressed? No.f PTPFLAGpX;zX; OPEN CHANNELS FOR I/OX; - }--------------------X;OPEN$>0;;iocb #3 Q>;;open PICCOM9Q> ;;read and write PICAX19Q>5OPENE;;fname = } "E:" PICBAH9 Q>4OPENE PICBAL9 CIOV;;open editorQ> PCOLOR2X;X; E: NOW OPEN ON CHANNEL 3$X;.$> }@;;iocb #48 Q>;;openB PICCOM9LQ> ;;read and writeV PICAX19`Q>5OPENK;;fname = "K:"j PICBAH9t Q>4OPENK~ PICB }AL9 CIOV;;open editorX;X; K: NOW OPEN ON CHANNEL 4X;X; START OF PROGRAM PROPERX; ----------------------- }X; TITLESTARTQ>;;filename prompt MSGPX;X; INITIALIZE FOR DATA INPUTX; Q>;;< 256 columns!PCOLC }RSPCRSINH;;cursor on(Q>2 PCOLCRS<Q>FPROWCRS;;cursor at 18,21P$>0;;iocb #3 E:ZQ> ;;put charactersd }PICCOM9nQ>;;buflen = 0xPICBLL9;;data to Acc PICBLH9Q>|;;horiz line char CIOVX;X; CURSOR NOW ON DOT }X;Q> ;;SPACE char$> "FWIPEPFILEST9;;clear fname0 HFWIPE&FNPTR;;clear FN pntrX;$X; CHARACTER CH }ECKING AFTER INPUT$X; ------------------------------X;"INFILE KEYCHK;;get a key,R>~;;DELETE?6FFNDEL2;;Yes. del }ete@R>;;CTRL/V?JFVERSN;;version no.TR>;;RETURN?^FEOFN2;;Yes. go checkshR>.;;full stop?rFEXTEND;;Yes. exte }nder|R>0;;less than 0?DINFILE;;yes. refuse itR>[;;larger than Z?EINFILE;;Yes. refuse itR>A;;less than A? }DNUTEST;;Yes. number?EPLCHAR;;insert charX;EOFN2!EOFN;;jumps for longFNDEL2!FNDEL;;branchesX;VERSNQ }> ;;version message MSGP PAUSE !FNDELX;!NUTESTR> 9;;larger than 9?&EINFILE;;Yes. throw out0QFNPTR; };test first char:FINFILE;;#'s not allowedDPLCHARQKEYN %FNPTRXPFILEST8;;put in fnameb3l'FNPTR;;save itv$>0 };;iocb3 E:Q> ;;put characters PICCOM9Q>;;buflen = 0PICBLL9;;data to Acc PICBLH9QKEY CIOVQFNPTR };;is eight charR>;;limit reached?FEXTEND;;yes. extenderR> ;;end file line?HINFILE;;No.X;X; 11 CHARACTE }RS INPUT NOW X; -----------------------X; %X; ONLY RETURN OR DELETE NOW VALID*X;4$>0;;iocb3 E:>Q> ;;put byteH }PICCOM9RQ>;;zero length\PICBLL9;;a dataf PICBLH9pQ>;;cursor leftz CIOVEOFL KEYCHK;;get a keyR>;;re }turn?FEOFN;;go for checksR>~;;delete?FFNDEL;;Yes.HEOFL;;No. loopX;$X; EXTEND ROUTINE MOVES CURSOR TO$X }; EXTENDER POSITION UPON RECEIPT#X; OF A DOT INPUT (REGARDLESS OF"X; POSITION IN LINE AT PRESENT)X;EXTENDQ>;;cur }sor position PCOLCRS Q> PCOLCRS$ Q>. PROWCRS;;cursor at 28,218 $>0;;iocb3 E:B Q> ;;put charactersL PI }CCOM9V Q>;;buflen zero` PICBLL9;;data in aj PICBLH9t Q>|;;vertical line~ CIOV Q> PFNPTR !INFILE X; " }X; CURSOR NOW IN EXTENDER BLOCK X; &X; DELETE OPTION HAS BEEN SELECTED, X; WHOLE LINE WILL BE DELETED X; FNDELQ> } PFNPTR;;no longer valid PCOLCRS Q> PCOLCRS Q> PROWCRS;;cursor at 19,21( REDEL%FNPTR2 $>0;;iocb3 E }:< Q> ;;put byteF PICCOM9P Q>Z PICBLL9d PICBLH9n QDELSTR8x FDELEND;;end of data CIOV #FNPTR !REDEL }X; DELEND!START X; DELSTR A........||...A= X; DERRORQ>;;disk hardware  MSGP;;error or bad  PAUSE;;d }iskette PAUSE !FNDEL X; X; WE HAVE END OF FILE NAME! X; -------------------------" X;, &X; PROGRAM COMES HERE W }HEN USER HAS6 (X; PRESSED RETURN TO ENTER THE FNAME.@ X;J EOFNQ>;;disable cursorT PCRSINH^ "DOSERR IIIDSK;;ensure DO }S IIIh Q>;;search messager MSGP| !DOKAY X; X; DISK NOW KNOWN TO BE OKAY X; ------------------------- X; BU }FPTR ;;set up - fetch SECTOR ;;of directory X; DOKAYQ>;;start directory PSECTOR Q> PSECTOR Q>5D }ATBUF PBUFPTR Q>4DATBUF PBUFPTR X;& X; NOW GET DIRECTORY SECTORS0 X;: GETDIRQ>;;drive 1D PDUNITN QSEC }TOR;;sector numberX PDAUX1b Q>l PDAUX2v QBUFPTR;;buffer pointer PDBUFLO QBUFPTR PDBUFHI Q>R;;get sect }or DSKINV QDSTATS R>;;okay? HDERROR #SECTOR QSECTOR R>;;last sector? FFNSEAR;;Yes. QBUFPTR , } O> PBUFPTR DGETDIR* #BUFPTR4 !GETDIR> X;H X; SEARCH FOR FILENAMER X; -------------------\ X;f FNSEARQ> };;init str searchp PFCTR;;filecounterz %>;;fine pntr Q>5DATBUF;;course pntr PDIRPTR Q>4DATBUF PDIRPTR }DIRSERQ@DIRPTR7 RFILEST8 HNXTFL;;wrong 3 )> HDIRSER;;found it? No. FFONDFL;;check status X; NXTF }L,;;set pointer toQ>;;next entry ODIRPTR PDIRPTR$ DNXT0.#DIRPTR;;add in carry8NXT0#FCTR;;file counterB } QFCTRLR>>VFNFF;;no file found`%>jHDIRSER;;exam next entrytX;~FCTR ;;file counterX;NFFQ> ;;file } not found MSGP PAUSE !DOSERRX;FONDFL%>;;file statusQ@DIRPTR7;;status byteM>@;;mask bit 6FNXT }FL;;file not in useQ> MSGPQ>  PKFLAG PAPPFLG PMORFLG(X;2$X; GET DATA FROM DIRECTORY BLOCKS<$X; ---- }--------------------------FX;P%> ZQ@DIRPTR7;;# of blocksd PNOBLOKn PONOBLOKx3Q@DIRPTR7;;first block PNXT }BLK3Q@DIRPTR7;;pointer low PPEOF3Q@DIRPTR7;;pointer high PPEOFGVTOCQ>;;drive 1 PDUNITQ>; };vtoc sector PDAUX1Q> PDAUX2Q>5VTOC;;vtoc buffer PDBUFHI" Q>4VTOC, PDBUFLO6Q>R@ DSKINVJ QDSTATS }TR>;;okay?^ HDERRhX;rX; LOAD BLOCKS FROM FILE|X; ---------------------X;QNXTBLK;;next block #LOADBK K }BLOCK;;get it "NOBLOKFSAVBUF;;all in- save itQBUFPTR;;high of buffer,;;add 1.5KO>;;for safetyRMEMTO }P ENOMEMX;X; OKAY, GET NEXT BLOCKX;%NXTBLK;;pntr for nextQVTOC8;;block fetch PNXTBLK& !LOADBK0X };:X; RANGE JUMPERSDX;NDERR!DERRORXX;bAPPFLG ;;append flaglMORFLG ;;more data flagvX; NOMEM%NXTBLK;; }fetch pointerQVTOC8;;for next time PNXTBLKQ> PMORFLG !BUFSAVX;X; DATA SAVEX; ---------X;X; D }ATA NOW ALL IN MEMORYX; SAVE IT USING DOS 2X; X; FIRST CHECK FOR DOS 2 DISK X;SAVBUFQ> PMORFLG;;last of ap }pends*BUFSAVQ>;;'INSERT DOS4 MSGP;;2 DISK'>S2 KEYCHKHR>~;;DELETE?RHS1\ !FNDELfX;pS1R>;;RETURN?zH }S2Q> PDUNITQ>R;;get sector PDCOMNDQ>5VTOC;;use vtoc buffer PDBUFHI Q>4VTOC PDBUFLOQ>;;direc }toryPDAUX2;;sectorQ> PDAUX1 DSKINV QDSTATSR> HDERR$ QVTOC.R>;;DOS III?8FBUFSAV;;loop u }ntil IIBQ> L MSGP;;'SAVING FILE'VX;`X; EXTENDER MOVERjX;t QAPPFLG~ HESKIP%>;;3 bytes to moveEMOVEQF }ILEST8;;extenderPFILEST 81 IEMOVEQ>.;;fullstopPFILESTX;X; NOW NEED TO MOVE EXTENDERX; UP T }O FILENAME FOR OSX;%>MLOOPQFILEST8 R> ;;SPACE?FMOVE;;Yes. extender3()>;;end of fname?2HMLOOP;;N }o.<FESKIP;;no spacesFX;PMOVEC;;prepare to moveZ;dO>4FILEST;;fancy stuffnPMLABELx%>;;actual move }MLOOP2QFILEST8!MLABELPFILEST8;;this will be3;;filest+(y),y)>;;all moved?HMLOOP2;;No.ESKIP$> ;;iocb 2 } Q>;;open PICCOM9 Q>5OPEND PICBAH9 Q>4OPEND PICBAL9Q>;;outputLAPPFLG;;and append? PICAX19 }CIOV")>,HSERROR;;error->6Q> ;;put chars@ PICCOM9J Q>5DATBUFT PICBAH9^ Q>4DATBUFh PICBAL9r QMORFLG| HA }LLBUF QPEOF PICBLL9 QPEOF PICBLH9 !DUMPX;ALLBUFQBUFPTR; S>4DATBUF PICBLL9QBUFPTR }S>5DATBUF PICBLH9DUMP CIOV)>HSERROR;;error->&Q> ;;close iocb20 PICCOM9: CIOVD)>N HSERRORX Q }MORFLGb HMORElQ>v MSGP;;'COMPLETED' PAUSE!FNDEL;;loop for nextX;SERRORQ>;;fatal error MSGP$> } Q> ;;close #2 PICCOM9 CIOVGSERROR;;loop if error PAUSEQ>;;transfer was MSGP;;incomplete PAU }SE !FNDEL;;restartX;  MOREQONOBLOK;;orig # blocks*;4SNOBLOK;;get difference>T?;;times 2HT?;;times 4R PPTE }MP\ QPEOFf;p SPTEMPz PPEOFQNOBLOK;;update info PONOBLOKQ> PKFLAGQ> PAPPFLGX;)X; DET }AILS DONE, NOW GET III DISK BACKX; IIIDSK !GVTOCX;X; DOS III DISK CONFIRMATIONX; ------------------------- }X;DELJMP7;;clear jsr push$7. !FNDEL8X;BIIIDSKQ>L MSGPVIII KEYCHK`QKEYjR>~;;DELETE?tFDELJMP; };yep restart~R>;;RETURN?HIIIQ> PDUNITQ>R;;get sector PDCOMND Q>5DATBUF PDBUFHI Q>4DATBUF P }DBUFLOQ> PDAUX2Q>;;dir sector PDAUX1  DSKINV QDSTATSR>( FDOSCHK2 !SERROR<X;FDOSCHK%>;;D }OS IIIPQDATBUF8;;identifierZ R>;;byted HIIIDSKn1x1 QDATBUF8 HIIIDSK:X;X; NOTE NO CHECK TO ENSURE }!X; SAME DISK SECOND TIME ROUNDX; NOBLOK ONOBLOK  NXTBLK  PEOF KFLAG ;;if <>0, bufferKTEMP };;pntr not resetX;KBLOCK5;;K blk # in AccQ>;;clear sector #" PSECTOR,PSECTOR67;;sector=8*kb+25@ T?;; }kb*2JUSECTOR;;if carry +1T T?;;kb*4^USECTORh T?;;kb*8rUSECTOR|,O> PSECTORDK1#SECTOR; };sector set upK1QKFLAG;;reset pointer?HK3 Q>5DATBUFPBUFPTR Q>4DATBUF PBUFPTR K3Q>PKTEMP;;se }ctor countKSECQ>;;drive 1 PDUNIT QSECTOR PDAUX1&QSECTOR0 PDAUX2: QBUFPTRD PDBUFLONQBUFPTRX }PDBUFHIbQ>R;;get sectorl DSKINVv QDSTATSR>;;okay? HKERROR #SECTORHK2;;0? byte cycled#SECTOR;;i }nc high byteK2QBUFPTR,O> PBUFPTRDK2A#BUFPTRK2A#KTEMP QKTEMPR>;;got 8 sectors? HKSE }C;;No.Q> PKFLAG;;stop alteration*:;;of pointer4X;>KERROR!DERRORHX;RX; TITLE SEQUENCE DATA\X; ---------- }---------fX;p%X; NOW FOLLOWS BYTES OF TITLE INFOzX;TITLST }===== A ACCESS DOS IIIA ===== }== ====== = =A A =A A ====== ====== } === =A A =A A ===== ====== === =A } ACCESS DOSA$ =A III A. =8 ======B =====L Aa utility programAV ===== }=` =Aby Matthew JonesAj ======t ======~ ====== == Afrom } ATARI DOS 2.A= ====== ====== ====== ====== == }==== ======= ======= ====== ====== == }==== ==  AFILENAME is |....A A....||...|A ====( ======2 ==== }==< =======F ====P TCOUNT ZX;dX; TITLE PRINTING ROUTINEnX; --------------------- }-xX;TITLEQ>5TITLST PTINCQ>;;reset pointer PTCOUNTTPRINT%TCOUNT;;set index!TINCQTITLST8;;load ch }aracterFTEND;;0 = end of dataR>;;1 = pause it FJPAUSE5;;push byte$>0;;iocb #3Q>;;length = 0 PICBLL }9 PICBLH9Q> ;;cio put byte PICCOM9"7, CIOV6TNEXT#TCOUNT@ QTCOUNTJ HTPRINTT #TINC^!TPRINT;;loop } until donehX;rTEND!BRKDIS;;disable break|X;JPAUSEQTPFLAG HTNEXT PAUSE QCONSOLR> HTNEXT PTP }FLAG FTNEXTX; PAUSEQ> PPTEMP PLOOP$> XLOOP%> YLOOP1 HYLOOP 0& HXLOOP0 "PTEMP: HPLOOPD  }:N X;X PTEMP b TPFLAG l X;v X; END OF TITLE PRINT X; "BRKDISQPOKMSK;;current status M>;;disable BREAK P }POKMSK;;put it back PIRQEN;;and to hardware : X; "X; NOW COMES THE PROMPT PRINTER "X; ---------------------------- } X; MSG0 AFATAL ERROR- Check A  Ayour disk drive.A= MSG1 APlease enter the DOSA! A III filenameA= ! MSG2 }AInsert DOS III disk,A! A press RETURNA= !MSG3 AFile transfer A*! Aincomplete.A=4!MSG4 AInsert DOS 2 disk, A> }! Apress RETURNA=H!MSG5 ATransfer of file AR! Acomplete.A=\!MSG6 ASearching for Af! Afile........A=p!MSG7 } AFound file, Az! ALoading......A=!MSG8 APress DELETE to A! ArestartA=!MSG9 AVersion 1.1 by A! AMatthew }JonesA=!MSGA AFile not found, A! APlease retry.A=! MSGB ASaving file, please A! Await ...A=!X;!X;!"M }SGTBL MSG0=MSG1=MSG2=MSG3! MSG4=MSG5=MSG6=MSG7! MSG8=MSG9=MSGA=MSGB" LLENG " LSTMSG "X;$"X; PROMPT } MESSAGE PRINTER."X; ----------------------8"X;B"MSGP5;;save lineL"PLSTMSG;;for 'HELP' useV"Q>;;19 lines down`" PRO }WCRSj"Q>;;<256 columnst"PCOLCRS~"QLLENG;;set line length"PCOLCRS;;to column #"DELETE$>0"Q>;;buflen = 0" }PICBLL9;;data to Acc" PICBLH9"Q> ;;cio put byte" PICCOM9"Q>~;;BACKSPACE" CIOV"QCOLCRS;;all deleted?"R> }"HDELETE;;No. do another#7;;pop message # #T?;;times 2#?;;use as index#QMSGTBL8;;msg addr hi(#PMSGSTR2#QMSGT }BL8;;msg addr lo<#PMSGSTRF#$>0;;iocb#3P#PPRINTQ>;;buflen = 0Z# PICBLL9d# PICBLH9n#Q> ;;put bytex# PICCOM9 }#%COLCRS;;get the y index#1#1#1;;goto beginning#MSGSTRQ8;;filled earlier#FPEND;;finish? Yes.# CIOV#!PPR }INT;;loop round#X;# PENDQCOLCRS;;how much data?#PLLENG;;save it#:#X;$X; KEY INPUT ROUTINE$X; ---------------- }-$X;"$ KEY ,$X;6$KEYCHKQCH;;get key@$R>J$HKEYIN;;anything?T$QCONSOL;;console keys^$HKEYC1;;all pressed?h$! }WARMSV;;Yes. RESETr$KEYC1QHELPFG;;help?|$LINVFLG;;inverse?$ HHELP$ FKEYCHK$X;$KEYINQ>;;key pressed$PINVFL }G;;clear inverse$PSSFLAG;;clr STOP flg$Q>@;;and shifts$ PSHFLK$QCH$R>';;atari logo key?$ FHELP$R><;;caps l }ock?$FNOGO;;not allowed% HGETKEY%X;%HELPMSG &%HLSTMSG 0%HELPCOL :%X;D%HELPQCOLCRS;;saveN%PHELPCOL;; }cursor positionX%QLSTMSG;;saveb%PHLSTMSG;;last message #l%QHELPMSG;;get currentv% MSGP;;help message%Q>;;clr help } flags% PHELPFG% PINVFLG%Q>%PCH% PAUSE;;wait a moment%QHLSTMSG;;restore% MSGP;;last message% QHELPCOL% } PCOLCRS%Q>% PROWCRS%$>0;;iocb3 e:&Q> ;;put chars & PICCOM9&Q>;;buflen = 0 &PICBLL9;;data to Acc*& PICBL }H94&Q>;;cursor down>& CIOVH&HPX!KEYCHKR&X;\& NOGOQ>f&PCH;;clear keypressp&HHPXz&GETKEY$>@;;K: is iocb 4& }Q>;;get character& PICCOM9&Q>;;buflen = 0&PICBLL9;;data to Acc& PICBLH9& CIOV&GKEYBRK;;break or ctrl3&P }KEY&:&X;&KEYBRKQ>;;BREAK! restart&PBRKKEY;;clr break flag&Q>;;and key'PCH'7;;clear jsr'7$' !FNDEL.'X };8'VTOC  B'DATBUFVTOCL'X;V'`' PRGSTRTj'g&Q>;;and key'PCH'7;;clear jsr'7$' !FNDEL.'X D12$$$DSDATHEXLINDATLIDDBYTPASCHKSUTOTAIN@} *** COSMIC DEFENDER ***I @ 1(MAKE CASSETTE (0), OR DISK (}1)5I!@@ C BC0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,0,10,11,12,13,14,15(r;@,9@",/}-@"3"<68,-@ L6-A V#A` A r( CHECKING DATA286-%@(LINE:!"8B:,}@A <F%6-F:A,%F:A,$AV+C(LINE  MISSING!FFq-@@@56-@:7}<,,&@H[6-@:7%@<%@,,&@Hq6-8,$@%8,P."@*@ $". @PZ% 6}-%!A %6-&Ad  ""@Pn A x F:A,@A "Ap}(A`*@A$)*@@<*@A%O*@@b*@u*@}@2@<-@@**@. 9@<(Ag+("INSERT DISK WITH DOS,} PRESS RETURN8;@,<g@@ D:AUTORUN.SYS*@AU)*@AU<*@}O*@@2b*@Au*@@D A{((READY CASSETTE AND PRESS RETURNH@}@A(C:R#A0f-@@@j"w*@{ M(( WRITING FILE#6-@/6-A 9#}AC A M @P(BAD DATA: LINE ``0,26,216,31,255,31,169,0,141,47,2,169,60,141,2,211,169,0,141,231,}2,133,14,169,56,141,232,2--133,15,169,0,133,10,169,32,133,11,24,96ddD8A085A222A907205CE4A93E8D2F02A9038D1DD0A9228D6F0}2A9058D0CD0A9648DC402A9268DC502A9388DC602,917ddA9D48DC702A9008DC802A9AA8DC002A9368DC102A9008D07D4A000B900E099000899000C99}0010B900E1990009,550dd99000D99001188D0E5A077B9622B990808B9DA2B99080CB9522C9908108810EBA9088DF40220752120A320205C,824dd}21208B21203F2920D12520B62020F727203A21AD1FD0C903D0F6F0DC2065E4A9008590A0078D08D29900D28810,540ddFA60AD182B38E911A8A90085}D6B931218591AAAD0AD2C9FAB0F9A8AD0AD2293EC928B0F7690120FC20D0E8A691,601ddAD0AD2C93090F9C9FFF0F5A8AD0AD2293EC928B0F720FC20D }0E66018693085D7B1D6C811D6E6D7E6D711D68811,376$ddD6D01FC6D7C6D7A90191D6A902C891D6E6D7E6D7A90491D6A9038891D6A93085D7CA60283C!}46647D46645064AD,784.dd00D0F0028581AD08D029FCF0028582AD04D0D007AD0CD029FDF00585808D1ED060A95A85D7A20086D6A0008A91,5118cc"}D6C8D0FAC6D7A92FC5D7D0F260A900A8990003990004990005990006990007C8D0EE60A9008585858085818582,60Bdd85978598858A858B85958593A#}9308596A9138D052B8583A9548DAF2A8D1ED0A9328599A964859A858460A594D0,808Ldd278587858B8D01D0A901859420A320209923A9648584A9148D$}08D2A9C88D06D2A9878D05D28D07D2AD0AD22906,901Vdd8D12D08D13D0AD0AD28D00D2AD0AD28D02D2AD0AD229DF8D01D28D03D2C684D03220A320A93%}285998D1ED0A964,457`dd859AA90085948580CE052BAD052BC910F017A9008595A93085968D1ED020D92320752120F7274C62E420752120,140jdd&}A320A9008580A9018D1ED08583A9198DAD2A8DB32AA92B8DAE2A8DB42AA94E8DB02AA92B8DB12AA9468DAF2AA9,366tddFF8D2E028D2002AD2E02D0FB4'}C7F20A90085D8A583D044854DA582F00620782820DD28A580F0034CBF21ADFC02,489~ddC921D00BA9FF8DFC02A58549FF8585A585D01B20912520BC26(}20E222200E2320522320EA2420482820AD2320D9,115dd23A59EF00AA9BD8D0002A9298D01024C62E4AD00D3A69A4AB006E020F002C69A4AB006E0BEF)}002E69AA6994AB0,655dd06E032F002C6994AB006E064F002E69960A6998E00D0E8E88E05D0A49AA208BD4923990004B9000329F3990003,887dd*}C8CA10EEA49AB90303090C990303B904030904990403B90503090C9905036000C07000730070C000A59BD021AD,525dd10D0D051A901859BA49AA9039+}904038489A9258D01D2A9328586A59969068588E688E688A5888D04D0E686E686,271ddA5868D00D2A9CDC588900AA581F019203824205C24A9008D01,}D2859B8581A489B9040329FC99040360AD2A0205,960cc93D01FAD182B38E911A8B904248D1C028D2A02A497881008E695D002E696A0038497A6978E0-}4D460A032A596C4,23dd96D009C693D01E204925A93048A214A006A59599922AC86899922A18690248C8C8CA10ED686003030202020202,326dd0.}101FEF92ABDF92AC91AF00588F00BD0F1A9109DF92A858FD0F2A58FF00C8AF009CAA001A900858FF0D84CB025,520ddA58938E91D4A4A29FE186D992A/}858EA5970A18658838E9274A4A186595858D9002E68E60A58D85D6A58E85D78D,860dd1ED0A000B1D6D00AC8B1D6D005C8B1D6F0E4C901F03CC902D000}5C6D64CB724C903F006C904D009C6D6C6D7C6D7,465dd4CB724C90AD00BA90D91D6E6D7E6D74CD024C909D0B3A90D91D6C6D7C6D7C6D7C6D74CD024A91}0091D6E6D7E6D7,469dd91D6C891D6C6D7C6D791D6A203A005D00EA90091D6E6D7E6D791D6A202A0028581200D24A91985904C7828A590,586ddF2}02DAD2C02D028C690A5908D2C02F01FA8B91C258D02D2AD0AD209C08D04D2B9352509408D03D28D05D2A9028D,537 dd1E0260F5F4F3F2F2F0F2F5E9E03}EFF0F1F2F3F4F5F4F1F5F2F3F4F5F50000010203040505060607070808090909,797dd0A0A0AEE182BAD182BC91AD005A9148D182BA9408D0ED4087824}05C21A9008595859B20A320A930859620D9238D,985dd1ED020D12520B620A900A20A95B5CA10FB20F727EE052B28A9C08D0ED460AD2E02D019A9048D5}20028D2E02ADF4,763(dd02C910F005186904D002A9088DF40260A000B9F92AD90B2BF0049014B005C8C004D0EFA000B9F92A990B2BC8C0,8042dd06}4D0F560AD182B38E911AABD63268591A000A9308592BD6C2685D6A59285D7A207A90591D6E6D7E6D7A90691D6,800<ccE6D7E6D7A90791D6E6D7E6D7CA7}D0E5AD0AD2291FC914B0F7C90590F3C6D60A18659285D7A90891D6C6D7C6D7A9,28Fdd0991D6C6D7C6D7A98C91D6C8A90091D6C6D7C6D791D688A98B918}D6C6D7C6D7A90A91D6C6D7C6D7A90891D6A5D6,711Pdd659185D6908EE692A592C931F08660FF963C1E1E3C3C5A46FFC8644B323232C864488A48A6D8E9}6D8B5AA8D03D0,695Zdd8D02D0B5C08D14D0B5CB8D15D0E00AD00AA9A08D0002A9268D010268AA684048A9F88D16D0A9988D17D0A9268D,160ddd19:}D0A9758D0002A9268D01026840A20086D8B59FF013B5AA38F59FD004959FA9FE95AAE8E00AD0EA60A5930D0A,864nddD2D0F3A901AC0AD2C00FB002A90;}2959FAD182BC9169002F69F4CD12600000000000078FC780000000000000000,780xdd0000001C3E7F6B7F5D221C000000000000000000007FF87F0000<}000000000000000000183C7E3C5A667E3C1800,560dd000000000000070F0E1C001C0E0F070000000000000000002C242F3D090F00000000000000000=}00010387C3810,168dd000000000000000000000000020702000000000000000000070E3C00FC003C0E07000000000000000000000014,613cc00>}221C00000000000000000003073F3F3F0703000000000000000018244281C3E7FF7E3C18000000000000000F,45dd000000FC0000000F000000000000?}00F09090D00B09090F00000000000000000010284492442810000000000000,486dd0000000000000200000000000000AD182BC911F049A90A8591A00@}FA5910A0A0A0A186922AAB977279D0006B9F7,512dd269D0007CA88D0F0C691D0E0A20AA9FE95AAA900959FCA10F5A209A90418695095C0CA10F8A209A}A98818693095,291ccCBCA10F860A58BF02BC68CD027C68BA58B0A0A0A0907AAA9088592A48ABD9528990005CAC8C692D0F4A906858C,25ddA58BB}D0038D01D060A207A9088592A48A206028A589858AA5888D01D0A909858BA901858C600000000000000000,294dd81000000000000818142000000004C}2818942248001244291084A24C00324521D08082CE007341010000808781E,558dd101000000008381C1000000000001818000000A58938E91C4A4A4AD}4AAAA900959FA9FE95AAF6B5B5B585918692,397ddA8A202200D24A692A491C0089006A90095B58591A91785908A0A0A0A0A186931A8A5910A0A0A0A8E}591090FAABD,562dd7727990006BDF72699000788CAE491D0EE8E1ED0A90085824C9923A9058D3002A92A8D3102207521A9C08D0ED4,424ddE69EF}ADBC298D182BAD1FD0C905D017EE182BAD182BC91AD002A9118D182BA91E8D20028D2E02AD182B8D7C2A20,789dd9125AD10D0F007AD1FD0C906D029AG}9928D3002A92A8D3102A9758D0002A9268D0102A910A00599F82A88D0FA84,691cc83849EAD182B8DBC2960AD2E02D0BDF09D11488A48A20FA59D859CH}A59C8D0AD48D16D0186902859CCA10F0A20F,30ddA59C8D0AD48D16D038E902859CCA10F0AD2C02D00AA9018D2C028D1E02E69DA9A08D0002A9268D01I}0268AA6840,742"dd707046DE2A70F047302A473E2A7070464C2A465B2AF0477E2A70C66C2A70707070707046DE2A060641052A0000,672,dd00000J}00000232F332D292300000000000000242526252E242532808080808080808080A2B98080808080808080,7666dd80F0E8E9ECEC80F2EFE5F980800000K}0073656C656374006C6576656C1A00008080E1EEE1ECEFE780E3EFEDF0F5,582@ddF4E9EEE780807070C6DE2A540000D40000540000D40000540000D40L}000540000D40000540000D40000540000D4,246Jdd0000540000D40000540000D40000540000D40000540000D40000540000C6DE2A060641922A8E8E8EM}8E8E8E8E8E,377Tdd8E8E8E8E8E8E8E8E8E8E8E8E80F3E3EFF2E59A1010101010006C697665731A13000068691A101010101000006C,638^dd65766N}56C1A11000000000000000000000000000000000000000000000000000000000000000000000000000000,109hdd000000000000000000000000000000O}0000000027212D2500002F362532000000000000010114111A1555004050,766rdd506454455159591A15110501006958545450400000FFFFD7D7D7D7FP}FFFFFFFC3C3C3C3FFFFFFFFEBEBEBEBFFFF,573|dd0F03030F0F03030F3FF5F5EAEAF5F53F3FF5F5EAEAF5F53FC33C00C33C00C33C00C33C00C33C00C3Q}3FF0F0C0C0,190ddF0F03FFF494949494949FF001E212D292D211E00010114111A1555004050506454455159591A15110501006958,108dd54545R}0400000FFFFEBEBEBEBFFFFFFFFD7D7D7D7FFFFFFFFC3C3C3C3FFFF0F03030F0F03030F3FF5F5C0C0F5F5,559dd3F3FF5F5C0C0F5F53F00C33C00C33CS}00C33C00C33C00C33C003FF0F0C0C0F0F03FFF929292929292FF001E212D,351cc292D211E00010114111A1555004050506454455159591A151105010T}06958545450400000FFFFC3C3C3C3FFFFFF,37ddFFEBEBEBEBFFFFFFFFD7D7D7D7FFFF0F03030F0F03030F3FF5F5D5D5F5F53F3FF5F5D5D5F5F53F3C0U}0C33C00C3,268dd3C00C33C00C33C00C33C3FF0F0C0C0F0F03FFF242424242424FF001E212D292D211E0000000000000000000000,546 D2:CV}OSMIC.BAS268dd3C00C33C00C33C00C33C3FF0F0C0C0F0F03FFF242424242424FF001E212D292D211E0000000000000000000000,546 D2:C [dX*******************nX* COSMIC DEFENDER *xX* BY *X* PHILLIP ROEY *X*******************X;X}X; OPERATING SYSTEM EQUATESX;AUDCTLҾ SKCTL AUDF1 AUDC1 AUDF2 AUDC2 AUDF3Y} AUDC3 AUDF4 AUDC4 ATRACTM" VERTI,DMACTL/6 DLST0@GRACTLJGPRIORoTPZ}MBASE^COLPM0hCOLPM1rHCOLPM0|HCOLPM1ІHCOLPM2АHCOLPM3К COLP0 COLP1[} COLP2 COLP3 COLBKHCOLP0HCOLP1HCOLP3CONSOL KEYHPOSP0 STI\}CK TRIG0TIMER3&TIMER40TIMER5 :TIMERF3*DTIMERF4,NTIMERF5.X NMIENbSE]}TVBV\lXITVBVbvSIOINIeHSCROLԊ WSYNC Ԕ CHBAS SIZEM Ш M0PFв M0PLм P0PF^} P0PL HITCLR CHORGRANDOM X;X; PAGE ZERO EQUATESX; X; KILLU;COLLISION*KI_}LLIT;FLAGS4KILLPL;DITTO>OVER;GAMEOVER?HFRAME;COUNTERRPAUSE;PAUSE FLAG\SNDF1;MISSLE SNDfSN`}D1;LOCATIONSpOXM0;MISSLE XzOYM0;MISSLE YXPY;EXPLOSION YXPIMAGE;EXP. IMAGE#EXPTIME;EXP. TIa}MER TEMPLO TEMPHISCRTEMPEXPLODE;EXP. SOUND CNTR TEMP TEMP2NONEW1;SCROLL FLAGb}XPLON;EXP. FLAGABX;SCREEN POS. LSBABY;SCREEN POS. MSB FX FYOX;PLAYER X$OY;PLAYER Y.c}MSL0;MISSLE FLG8CSHIFT;DLI COLORBDSHIFT;SHIFT USELTITLF;TITLE SCRN FLAGVROCKSPD `ROCKPOS ;Nd}ASTY X LOCj RIMAGE tCOLOR2 ;COLORS OF~COLOR3 ;NASTIES ADRDLINE;NASTY COUNTERX;X; MISCELLANEOe}US EQUATESX;X;SCRN0;SCREEN MEM.PLAYER;PMG MEMORYX; ;ORIGINX;X; INITIALIZATION OF GAMEX;f}  START-%>4MAIN;POINT TO$>5MAIN;VBI ROUTINE(Q>2 SETVBV<Q>>;ENABLE PMGF PDMACTLPQ>Z PGRACTLdQ>"g}n PGPRIORxQ>;SET MISSLEPSIZEM;SIZEQ>dPCOLP0;SETQ>&;PLAYFIELDPCOLP1;AND P/MQ>8;COLORS PCOLP2q}B%DOS SYSB*)DUP SYSB6SACCESS3 BASBACCESS3 M65BICOSMIC BASBWCOSMIC M65BHOMETRANBASB+INSTALL M65B:PATCHES M65BV@REVERSE BASBSHAPES ACTWRITEOS M65Q> PCOLP3Q> PCOLBKQ> PCOLPM0Q>6 PCOLPM1Q>5PLAYER;POINT TO"PPMBASE;P/M AREA,X;6X; MAKr}E 3 COPIES OF CHAR SET@X;J%>TCOPYQCHORG8^PPLAYER8hPPLAYER 8rPPLAYER8|QCHORG8PPLAYERs} 8PPLAYER 8PPLAYER81 HCOPYX;X; INSTALL CUSTOM CHARACTERSX;%>wINSTQCHSET8PPLAYERt}8 QCHSET28PPLAYER 8 QCHSET38PPLAYER81& IINST0Q>5PLAYER;POINT TO:PCHBAS;NEW CHAR. SETDu}X;NX; EACH NEW GAME STARTS HEREXX;bBEGIN PLRINT;CLEAR P/Ml SNDINT;KILL SOUNDv CLRSCRN;CLR SCREEN VARINT;INv}ITIALIZE VARIABLES TITLE;DISPLAY TITLES GRID;ADD FFIELDS ROCKS;AND ROCKS ROCKINT;AND NASTIESX;X; MAIN Gw}AME LOOPX;&MLOOP COLDET;CHECK FOR COLLISIONSQCONSOL;ABORT GAME?R>;(OPTION)HMLOOP;NO,LOOPFBEGIN;YES,REx}STARTX; X; INITIALIZE SOUND CHANNELSX; SNDINT SIOINI*Q>4 PEXPLODE>%>H PAUDCTLRSN1PAUDF18\1fIy}SN1p:zX;X; ADD ROCKS TO SCREENX;ROCKSQLEVEL;GET NUMBER;;OF ROCKS,S>;AND PUT IN ?;X REGQ>PADz}R QNUMROCK8PTEMP;AND TEMP>R1QRANDOM;GET A VALIDR>;RANDOM ER1;LOCATION ? R2QRANDOM$ M>>. R>(8{} ER2B O>;CHECK IF ITL  EMPTY;IS EMPTYV HR1;NEXT!` $TEMP;GET # OF ROCKS FORj #R3QRANDOM;2ND PAGE OF SCRN MEMt R>|}0;GET A VALID~ DR3;LOCATION R> FR3 ? R4QRANDOM M>> R>( ER4 " EMPTY;LOOK FOR AN EMPTY SEAT. HR3;}}NEXT! : X; EMPTY,;CHECK TO MAKE O>5SCRN;SURE THE SPACE PADR;FOR ALL FOUR Q@ADR7;PARTS IS VACANT 3( L@A~}DR72 #ADR< #ADRF L@ADR7P 1Z L@ADR7d HRX;NO VACANCY! EXITn "ADR;POKE 4x "ADR;PART ROCK Q>;INTO} P@ADR7;SCREEN Q>;MEMORY 3;IN LIVING P@ADR7;COLOR... #ADR #ADR Q> P@ADR7 Q> 1 P@ADR7 } Q>5SCRN PADR 0;DEC COUNTER RX:" X;, &NUMROCK (=<=F=d=}=F=d=P=d6 X;@ X; CHECK FOR COLLISIONSJ X;T }COLDETQM0PF;HAS MISSLE HIT?^ FC1;NO,CONT...h PKILLIT;YES,SET FLGr C1QM0PL;HIT NASTY?| M> FC2;NO,CONT... PKI}LLPL;YES,SET FLG C2QP0PF;HIT WALL OR ROCK? HDIE;YES,SET FLAG QP0PL;DID WE RUN M>;INTO NASTY? FNODIE;NO. EXIT} DIEPKILLU PHITCLR NODIE: X; +X; CLEAR OUT SCROLLING PORTION OF SCREEN X; !CLRSCRNQ>*5SCRN;21 LINES * P}ADR;2 PAGES + SCRN ADDR $>& &ADR0 %>: CL1A;LOOP UNTILD P@ADR7;WE'VE GOTN 3;LOTS OFX HCL1;NOTHINGb "ADR}l Q>5SCRNv RADR HCL1 : X; X; ZERO OUT P/M MEMORY X; PLRINTQ> ? PL1PPLAYER8 PPLAYER}8 PPLAYER8 PPLAYER8 PPLAYER8 3 HPL1 : X; !X; REINITIALIZE GAME VARIABLES* X;4 VARINTQ>>} PPAUSEH PKILLUR PKILLIT\ PKILLPLf PFXp PFYz PXPY PXPIMAGE PABX PNONEW1 Q>5SCRN PABY Q> P}LIVES POVER Q>T;LOAD MEMORY SCAN PML2 PHITCLR Q>2 POXQ>dPOY PFRAME$:.X;8"X; PLAYER BUYS CEM}ENT OVERSHOESBX;L$BITEITQXPLON;ALREADY BITING IT?VHBT1;YES,CONT...`PSND1;KILL SOUNDj PXPIMAGEtPHPOSP0;EXPL}OSION~Q>;SET DEATHPXPLON;FLAG SNDINT;KILL REST OF SOUND MISEND;AND MISSLEQ>d;SET TIMER PFRAMEQ>}PAUDCTL;MAKE DEATHQ>;TYPE NOISES PAUDF4Q> PAUDC3 PAUDC4BT1QRANDOM;FLASH  M>;SHIPPHCOLPM0;IN }A NICEPHCOLPM1;GREY(QRANDOM;PALLOR.2PAUDF1;MORE NOISE< QRANDOMF PAUDF2P QRANDOMZM>d PAUDC1n PAUDC2x}"FRAME;DONE KILLING?HDEDEND;NO. SNDINT;KILL NOISEQ>2;REST SHIPPOX;LOCATION PHITCLRQ>dPOYQ>}PXPLON;CLEAR FLAGS PKILLU"LIVES;ZAP A LIFEQLIVES;ANY LEFT?R>FGMOVER;NO? THE BIG SLEEP!Q>;YES,RESET}PABX;TO START"Q>5SCRN;OF SCREEN,PABY6 PHITCLR@ SCREEN;CLEAN UPJ PLRINT;SCREEN ANDT ROCKINT;NASTIES^DE}DEND!XITVBVhX;rGMOVER PLRINT;CLEAN UP| SNDINT;SCREEN + Q>;SOUNDPKILLU;ANDQ>;SET GAMEPHITCLR;OVER}POVER;FLAGQ>4BLANK;PUT GAMEPML1;OVERPML3;INTO THEQ>5BLANK;MIDDLE OFPML1;THE SCREEN PML3}Q>4MESSAGE PML2Q>5MESSAGE PML2Q>F&PML20Q>:PTIMERF5;HANGDPTIMER5;AROUNDNGM1QTIMERF5;AW}HILEX HGM1;THENb!BEGIN;ALL OVERlX;vX; VERTICAL BLANK INTERRUPT&X; THIS IS WHERE ALL THE ACTION IS!X; MAINQ>}PDLINE;POINT TOQOVER;IS GAME ASLEEP?HENDVB;YES,BYE...PATRACT;NO ATTRACT MODEQKILLPL;HIT NASTY?FMA2;N}O,CONT.. XPINIT;YES,KILL KILLPLR;ITMA2QKILLU;HIT US?FMA1;NO,CONT...!BITEIT;YES,SUICIDE MA1QKEY;SPACE}BARR>!;PRESSED HNOKEY;NO,BYE*Q>;YES TOGGLE4PKEY;PAUSE>QPAUSE;FLAGHN>R PPAUSE\NOKEYQPAUSE;FLAG SET?}fHENDVB;YES,BYE...p ANIMATE;ROTATE CHAR SETSz ATTACK;MOVE NASTYS RSTICK;READ JOYSTICK MOVE;MOVE SHIP MIS}L;AND MISSLES SOUND;BOOM XPLODE;FIREWORKS SCROLL;SCROLL SCREEN SCREEN;UPDATE DISP. LISTENDVBQTITLF;TITLE}S?FEN1;NO,BYE... Q>4TDLI PVERTI Q>5TDLI PVERTIEN1!XITVBVX;X; READ JOYSTICK$X;.RSTICKQSTIC}K;GET STICK8$OY;CHECK STICK FORBV?;MOVEMENT IN ALERS1;DIRECTION ANDV(> ;CHECK IF WE ARE`FRS1;AT OUR LIMITS INj}"OY;THAT DIRECTIONt RS1V?~ERS2(>FRS2#OY RS2$OXV?ERS3(>2FRS3"OX RS3V?ERS4}(>dFRS4 #OXRS4:X;(*X; MOVE PLAYER0 AND MISSLE1 (YOUR SHIP)2X;< MOVE$OXF &HPOSP0P2Z2d&HPOSP0n}%OYx$>MO0QSHAPE9PPLAYER8QPLAYER8M>PPLAYER830IMO0%OYQPLAYER8}L> PPLAYER8QPLAYER8L>PPLAYER8QPLAYER8"L> ,PPLAYER86:@X;JX; SHIP SHAPE (}ARGH!)TX;^$SHAPE ==p==s==p==hX;r"X; MOVE MISSLE AND MISSLE SOUND|X;MISLQMSL0;ACTIVE?HMSMOV;Y}ES,MOVE ITQTRIG0;TRIGGER PRESSED?HMSLEND;NO,BYE...Q>;SET FLAG PMSL0%OY;GET Y COORDQ>;PUT MISSLE ON S}CREENPPLAYER8'OYM0;STORE YQ>%;INITIALIZEPAUDC1;MISSLE Q>2;SOUND PSNDF1QOX;CALCULATEO>;INIT}IAL X&POXM0;COORD0MSMOV#OXM0;MOVE MISSLE:#OXM0;RIGHTD QOXM0NPHPOSP0X#SNDF1;DECREASEb#SNDF1;FREQUENCYl} QSNDF1v PAUDF1Q>;MISSLE AT EDGE? ROXM0DMISEND;YES,KILL MISSLEQKILLIT;DID MISSLE HIT?FMSLEND;NO,BYE..}. LOCATE;YES,BUT WHAT&WHERE ERASE;ZAP ITMISENDQ>;MISSLE DEADPAUDC1;SO KILL SOUNDPMSL0;CLEAR FLAG PKI}LLIT%OYM0;ERASE MISSLEQPLAYER8M> PPLAYER8 MSLEND: X;*X; SCROLL SCREEN4X;>SCROLLQTIMERF3;}TIME YET?HLNONEW1;OR AT END OF LEVEL?RHM2;THEN DON'T SCROLL\QLEVEL;GET SCROLLf ;;SPEEDpS>;AND DROPz?;IT IN TI}MERQSPEED8;3 AND RESETPTIMER3;FLAG PTIMERF3%FX;SCROLLED WHOLE1;CHARACTER?IM15;NO,CONT... #ABX;YES, U}PDATE SCREEN ADD.HM14;WHOLE PAGE DONE?#ABY;YES, BUMP SCREEN PAGEM14%>;RESETM15'FX;SCROLL CNTR M2$FX }&HSCROL:X; X; UPDATE SCREEN MEMORY IN DL$X;. SCREEN%>5SCRN;ARE WE AT8QABY;THE END OFB)ABY;2ND PAGE OF} SCREEN?LHS11;NO,CONT..V$"NONEW1;YES,DELAY TILL NEW LEVEL`HSXIT;BYE...j LEVELUP;SET UP NEW LEVELtQ>5SCRN;RESET }TO SCRN START~S115!$>;# OF LINES TO BE SCROLLED%>;OFFSET IN DLS0QABX;GET LSB ANDPDSP8;STORE IN DL3}7;GET MSB ANDPDSP8;STORE IN DL ,;ADD TWO O>;PAGES#5;AND HIDE IT ON STACK TILL NEXT 3;LOOP3;INC DL POINTER }0;DONE? IS0;NO,LOOP..7;YES, CLEAR STACK SXIT:(X;2$SPEED ========<X;F#X; SCORE ROUTINE:ENTRY} CONDITIONP!X; XREG: SCORE DIGIT TO CHANGEZ"X; YREG: AMOUNT TO ADD TO DIGITdX;nSCOREIT#SCORE9;GET DIGITxQSCORE9;AN}D BUMP ITR>;DIGIT>9?FBIGSCR;YES. FIX ITSCR1;NO. ARE WEFSCREND;DONE? YES.HSCOREIT;NO. LOOPBIGSCRQ>;}DIGIT=0PSCORE9;STORE ITPSCRTEMP;SCORE CARRY FLAGHSCR;LOOP...X;SCRENDQSCRTEMP;FLAG SET? FSC1;NO.A;LA}ST DIGIT? FSC1;YES. 0;SET XREG%>;AND YREG"Q>;CLEAR FLAG,PSCRTEMP;AND START6FSCOREIT;ALL OVER@$SC1!HIGH}SC;CHECK FOR HIGH SCOREJX;TX; FIND OUT WHERE WE HIT^X;hLOCATEQOYM0;GET Y COORDr;;AND CONVERT|S>;TO IRG4 V?;}SCREENV?;COORDINATESM>;ADD THE ,;START OFODSP;SCREEN MEM.)PTEMPHI;SHAKE WELL AND VIOLA! THE MSBQFX;GE}T LSB OF T?;SCREEN,;ADD THE MISSLESOOXM0;X COORD ;;CONVERTS>';TO IRG4V?;COORDINATESV?;ADD SCROLL,O}ABX;AND WE GET&PTEMPLO;THE LSB0DLOC1;OVER BORDER THEN:#TEMPHI;BUMP MSBD LOC1:NX;XX; FIND OUT WHAT WE HITbX;}lERASEQTEMPLO;GET SCREENvPADR;MEMORY ANDQTEMPHI;SEARCH TILLPADR;WE FIND APHITCLR;NONZERO%>;CHARACT}ERQ@ADR7;(A VICTIM!) HGOTIT3 Q@ADR7 HGOTIT3 Q@ADR7 FLOC1GOTITR>;IF CHAR ISFERASE4;1-4,ITS }A  R>;ROCK.HGOT1;SET TO TOP "ADR;RIGHT CHAR*!ERASE4;OF ROCK,4GOT1R>;THEN JUMP>FGOT2;TO ERASE4HR>R H}GOT4\"ADRfGOT2"ADRp "ADRz !ERASE4GOT4R> ;GENERATOR?HGOT5;NO,CONT..Q> ;YES,KILL ITP@ADR7;SE}T TO TOP#ADR;OF FIELD. #ADR!ERASE2V;ERASE IT!GOT5R> ;LOWER GENERATOR?HLOC1;NO,BYE..Q> ;YES,KILL} ITP@ADR7;SET TO TOP"ADR;OF FORCE"ADR;FIELD. "ADR "ADR!ERASE2V;ERASE IT.$X;.ERASE4Q>};ERASE THE8P@ADR7;FOUR PARTB#ADR;ROCK BYL#ADR;STORING AVP@ADR7;BLANK IN` 3;EACH OFjP@ADR7;THE FOURt"}ADR;FORMER~"ADR;POSITIONS P@ADR7$>;SET SCORE%>;TO 50 PTS.HER2X;ERASE2VQ>;STORE AP@ADR7};BLANK CHAR#ADR;IN THE 2#ADR;FORCE FIELDP@ADR7;POSITIONS$>;SET SCORE%>;TO 200 PTS.!ER2PKILLIT};CLR COLLISION FLG  SCOREITQ>;SET BOOMPEXPLODE;COUNTER(!XPINIT;FIREWORKS2X;< X; BOOM!FX;PSOUNDQEXPLOD}E;FLAG SET?ZFSNDEND;NO,BYE...dQTIMERF4;TIME YET?nHSNDEND;NO,BYE...x"EXPLODE;SET TO NEXTQEXPLODE;TONE+CONTRL}PTIMERF4;RESET FLAGFSNDEND;ANY LEFT? NO,BYE ?;YES,GETQEXPSND8;THE NEXTPAUDF2;TONE + CTLQRANDOM;AND PUT'EM}L>;IN (THE)PAUDF3;POKEY QEXPTONE8L>@ PAUDC2 PAUDC3Q> PTIMER4 SNDEND:"X;,EXPSND ==}==6 ====@ ====J ====T ====^)EXPTONE =========h! }==== = = = = = rX;|X; NEXT LEVEL,PLEASE....X;LEVELUP#LEVEL;BUMP LEVELQLEVEL;LVL>9?R>HLV2};NO,CONT...Q>;YES,BACK TOPLEVEL;LEVEL FOURLV2Q>@;DISABLE INTERRUPTSPNMIEN;AND TELL COMPUTER6;TO STAY PUT}=;TILL NOTIFIED! CLRSCRN;CLEAR SCRNQ>;RESET TO PABX;SCRN START PMSL0;KILL MISSLE  SNDINT;AND SOUND& Q>5}SCRN;PAGE 1 OF0 PABY;SCREEN:  SCREEN;UPDATE DLD PHITCLR;CLEAR COLLISIONSN  GRID;ADD GRIDSX  ROCKS;AND ROCKSb Q>};RESET ANDl $> ;ADD NASTIESv LV1PRIMAGE9 0 ILV1 ROCKINT #LIVES;ADD AN EXTRA LIFE 8;AND BACK TO Q>;THE }REAL PNMIEN;WORLD.... : X; X; ROTATE CHARACTER SETS X; ANIMATEQTIMERF5;TIME YET? HAN3!Q>;RESET TIMER !}PTIMER5;AND FLAG! PTIMERF5 ! QCHBAS*!R>5PLAYER;3RD SET?4!FAN2;OOPS..>!,;NO,ADD 1KH!O>5;TO CHBASR!HAN1;JMP} ALWAYS\!AN2Q>5PLAYER;RESET TOf!AN1PCHBAS;1ST CHARp!AN3:;SET AND BYEz!X;!X; HIGH SCORE?!?!?!!X;!HIGHSC%>};CHECK SCORE!HI1QSCORE8;FROM MS TO!RHIGH8;LS DIGIT!FHI3;EQUAL LOOP!DHSCOREND;LOWER,CONT!ENEWHIGH;REPLACE HIG}H SCORE!HI33!)>!HHI1;LOOP....!NEWHIGH%>;COPY!NH1QSCORE8;SCORE INTO"PHIGH8;HIGH SCORE"3")>$"HNH1};LOOP...." HSCOREND:8"X;B"X; ADD FORCE FIELD GRIDSL"X;V"GRIDQLEVEL;GET SPACE`" ;;BETWEENj"S>;GRIDS FOR LEVELt">~"}QGATES9;AND THROW"PTEMP;IN TEMP"%>;THEN GET"Q>5SCRN;OFFSET AND"PTEMP2;ADD IT TO"QOFFSET9;START OF"PADR;SC}REEN MEM."GR1QTEMP2;POKE THE"PADR;3 GRID"$>;CHARACTERS"GR2Q>;INTO"P@ADR7;MEMORY" #ADR# #ADR #}Q># P@ADR7# #ADR(# #ADR2#Q><# P@ADR7F# #ADRP# #ADRZ#0d#HGR2n#GR3QRANDOM;FIND Ax#M>;VALID G}ATE#R>;LOCATION#EGR3#R>#DGR3#"ADR;AND ADD THE#T?;FORCE FIELD#,;AND#OTEMP2;GENERATORS# PADR#Q>}# P@ADR7# "ADR# "ADR$Q> $ P@ADR7$ "ADR"$ "ADR,$Q>;FORCEFIELD6$ P@ADR7@$3J$Q>T$ P@ADR7^$ "}ADRh$ "ADRr$ P@ADR7|$1$Q>;FORCEFIELD$ P@ADR7$ "ADR$ "ADR$Q> $ P@ADR7$ "ADR$ "ADR$Q}>$ P@ADR7$QADR;ADD SPACE$OTEMP;AND SCREEN$PADR;LOCATION%DGR1;BUMP MSB% #TEMP2;IF%QTEMP2;NECESSARY&%R>5}SCRN;OUT OF ROOM?0%FGR1;NO,LOOP..:%:D%X;N%$GATES ==<===<=<=Z=FX%%OFFSET ==d=K=2=2=2==db%X};l%X; MAIN GAME DLIv%X;%DLI5;SAVE XREG%A;AND A REG%5%$DLINE;INC NASTY% #DLINE%QROCKPOS9;GET LOCATION% PHPO}SP0;AND STORE IN PLR2%PHPOSP0;AND PLR3%QCOLOR29;PUT COLOR%PHCOLPM2;DIRECTLY%QCOLOR39;INTO%PHCOLPM3;HARDW}ARE REGISTERS%(> ;ANY LEFT?&HDL1;YES,LOOP.. &Q>4DLI2;NO,POINT&PVERTI;TO NEXT &Q>5DLI2;DLI*& PVERTI4&DL17;R}ESTORE A>& >;AND XH&7R&9\&X;f& DLI25p&Q>;POKE SCOREz&PHCOLP0;COLORS&Q>;DIRECTLY&PHCOLP1;INTO&Q>&;HARDWARE}&PHCOLP3;REGISTERS&Q>4DLI;POINT TO&PVERTI;MAIN&Q>5DLI;DLI& PVERTI&7&9&X;&X; ATTACTING NASTIES.....&}X;'ATTACK$>' &DLINE'AT3QROCKSPD9;NASTY ACTIVE?$'FAT1;NO,GIVE IT LIFE!.'QROCKPOS9;YES MOVE8';;ITB'SROCKSPD9;}LEFTL'HAT2;STILL ON SCREEN?V' PROCKSPD9;NO, RESET POSITION`'Q>;AND SPEEDj'AT2PROCKPOS9t' AT42;MORE~'(> ;NASTIES?}'HAT3;YES,LOOP..':'!AT1QNONEW1;NOT END OF LEVEL?' LRANDOM;CAN WE GIVE IT LIFE?'HAT4;NO,DRATS..'Q>' %RANDOM}')>;A FAST ONE?'EAT0'Q>;YES. FUN!!!'AT0PROCKSPD9'QLEVEL;LVL>6?(R> (DAT10;NO. LOOP(#ROCKSPD9;SPEED T}HINGS UP(AT10!AT4;LOOP....((X;2("IMAGE2 ======x=<( x=======F( =====>==kP(} =]="=====Z( =======d( =======n( =====<=~=;PAST THE 1ST LEVE}L?)FRK7;NO,BYE..)Q> ;READ THE)PTEMP;IMAGES OF)RK1%>;THE NASTIES)QTEMP;(PLAYERS)T?;2 AND 3))T?;INTO PMG)} T?;MEMORY)T?;WHERE THE) ,;DLI WILL*O>";FIND'EM.*>*RK2QIMAGE18&*PPLAYER90* QIMAGE28:*PPLAYER9D*0N*}1X*HRK2b* "TEMPl*HRK1v*$> ;SET INITIAL POSITION*RK4Q>;OFF SCREEN AND*PROCKPOS9;ZERO SPEED*Q>;SO THEY*PR}OCKSPD9;STAY*0;PUT UNTIL*IRK4;WE ACTIVATE* $> ;THEM*Q>*RK5,*O>P;GIVE EACH*PCOLOR29;ONE TWO*0;DIFFERENT}*IRK5;COLORS+$> +Q>+RK6, +O>0*+ PCOLOR394+0>+IRK6H+RK7:R+X;\+X; EXPLOSION (FIREWORKS)f+X;p+%XPLODEQX}PIMAGE;GET IMAGE NUMBER.z+FEXPEND;ANY LEFT? NO,BYE...+"EXPTIME;TIME YET?+HEXPEND;NO,BYE...+"XPIMAGE;NEXT IMAGE+ Q}XPIMAGE+T?;OFFSET IN+T?;IMAGE DATA+T?+L>+>+Q>+ PTEMP2+%XPY+XPLOOPQXPLOD9;STORE IMAGE,PPLAYER}8;IN PLAYER1,0,3;NEXT BYTE$,"TEMP2;ANY LEFT?.,HXPLOOP;YES,LOOP8,Q>;NO SETB,PEXPTIME;TIMERL, QXPIMAGEV, HEXPEND}`,PHPOSP0j, EXPEND:t,XPINIT$>;INITIALIZE~,Q>;EXPLOSION, PTEMP2,%XPY;GET IT'S, XPLOOP;LOCATION,QOYM0;A}ND PUT IT,PXPY;ON THE,QOXM0;SCREEN THEN,PHPOSP0,Q> ;SET IMAGE,PXPIMAGE;POINTER,Q>;AND TIMER, PEXPTIME},:-X; -X; EXPLOSION SHAPE DATA-X;-!XPLOD =======(- =======2- =B=====B=}<- =B=$===$=B=F- =J=$===$=R=P- ==,===4==Z- ===x====d- ===8}====n- =======x-X;-X; KILL ATTACKING NASTIES!-X;-KILLPLRQOYM0;GET Y COORD-;;AND CONVERT-}S>;TO GET #-V?;OF NASTY- V?;WE HIT-V?-V?->- Q>;RESET SPEED AND POSITION- PROCKSPD9-Q>. PROCKPOS9.#R}IMAGE9;SET TO.QRIMAGE9;NEXT NASTY".PTEMP;IMAGE,.&TEMP2;SCORE= 1006.?;TIMES IMAGE@.$>;NUMBER+1J. SCOREITT. $TEMP}2^.%TEMP;ANY IMAGESh. )>;LEFT?r.DKL1;YES,NEXT|.Q>;NO,RESET.PRIMAGE9;TO IMAGE #0. PTEMP. KL1Q>. PEXPLODE.}A.T?;READ NEW. T?;NASTY.T?;INTO PMG. T?;MEMORY.,.O>1.?. QTEMP/T?/T?/T?&/T?0/ PTEMP:/L>D/>N/KL2Q}IMAGE19X/PPLAYER8b/ QIMAGE29l/PPLAYER8v/1/0/(TEMP;DONE?/HKL2;NO,LOOP.../&HITCLR;YES,CLEAR/Q>;CO}LL. FLAG/ PKILLPL/!MISEND;KILL MISSLE/X;/X; TITLE SCREEN/X;/TITLEQ>4TITLEPG;PUT/PDLST;TITLE/Q>5TITLEPG;P}AGE ON0PDLST;SCREEN 0 PLRINT;GET RID OF PMG0Q>;ENABLE DLI'S FOR 0PNMIEN;RAINBOW EFFECT*0#TITLF;SET FLAG40QS}TLEVEL;UPDATE>0PLEVEL;LEVELH0LOOPQCONSOL;IS SELECTR0R>;PRESSED?\0HLOOP2;NO,CONT..f0#LEVEL;YES,INCp0QLEVEL;LEVEL}z0R>;LVL>9?0HLP2;NO,CONT..0 Q>;LVL=10LP2PLEVEL0Q>;DELAY 1/20PTIMER5;SECOND0 PTIMERF50LOOP2QLEVEL;PU}T NEW0PTITLE4;LEVEL0 ANIMATE;ON SCREEN0QTRIG0;IF TRIGGER0FLP7;OR START0QCONSOL;IS PRESSED0R>;CONTINUE, }IF NOT1HLP3;LOOP...1LP7Q>4DSP;POINT TO1PDLST;MAIN GAME$1Q>5DSP;SCREEN.1 PDLST81 Q>4DLIB1 PVERTIL1 Q>5DLIV1} PVERTI`1 Q> 0 j1%>t1LP5PSCORE8~111HLP51'OVER;CLR FLAG1 'TITLF1QLEVEL;SET LEVEL1 PSTLEVEL1:1}LP3QTIMERF5;DELAY LOOP1 HLOOP21 FLOOP1X;1STLEVEL 1X;2X; TITLE SCREEN DLI 2X;2TDLI5;SAVE X AND2A;A REGI}STERS(2522$><2QDSHIFT;GET COLORF2 PCSHIFTP2TDLI1QCSHIFTZ2!PWSYNC;WAIT FOR NEW SCAN LINEd2 PHCOLP0;STORE IT IN HAR}DWAREn2 ,;ADD TWOx2O>2 PCSHIFT20;ANY MORE LINES?2ITDLI1;YES,LOOP2$>;RESET COUNT2TDLI2QCSHIFT;GET COLOR2P}WSYNC;WAIT FOR NEW LINE2PHCOLP0;STORE IT2;;SUBTRACT 22S>;TO GET THE2PCSHIFT;MIRROR EFFECT20;ANY MORE?2ITDLI2};YES,LOOP2QTIMERF4;TIME YET?3HTDLIX;NO,CONT..3Q>;YES,RESET3PTIMERF4;TIMER AND"3PTIMER4;FLAG AND,3#DSHIFT;INC} THE START COLOR63TDLIXQ>4DLI2;POINT TO@3PVERTI;NEXT DLIJ3 Q>5DLI2T3 PVERTI^3 7;RESTOREh3>;REGISTERSr37|393X;}3X; TITLE PAGE DISPLAY LIST3X;3TITLEPG p=p=F3 SCORELN3 p==G3 TITLE13 G3 TITLE63 p=p=F3 TIT}LE23 F3 TITLE34 =G4 TITLE54 p=&4 TITLE404 p=p=p:4 p=p=p=FD4 SCORELNN4 ==AX4 TITLEPGb4 }X;l4TITLE1 A COSMIC Av4TITLE6 A DEFENDERA4!TITLE2 =A BY A4#TITLE3 =A phill roey  } A4 TITLE4 A select level: A4&TITLE5 =A analog computing A4X;4X; DISPLAY LIST4X;4DSP p=p=4  } SCORELN4 T4 4 4 5 T 5 5  5 *5 T45 >5 H5 R5 T\5 f5 ML1 p5 z5 ML2 T5  }5 ML3 Ԙ5 5 T5 5 5 5 T5 5 5 5 T5 6 6 6 T$6 .6 86 B6 TL6 V }6 `6 j6 Tt6 ~6 ƈ6 SCORELN6 ==A6 DSP6X;6'SCORELN =A....................A6 =A score:A6}SCORE A00000A6 A lives:A6LIVES A3A6 A hi:A6HIGH A00000A6 A level:A7LEVEL A1A 7BBLANK A } A7#MESSAGE A GAME OVER A7X;(7X; CHARACTER SET #127X;<7!CHSET =}======UF7 =@=P=P=d=T=E=QP7 Y=Y======Z7 i=X=T=T=P=@==d7 =======}n7 =======x7 =======7 =======7 ?=======?7 ?====}===?7 =<===<===<7 ==<===<==ô7 ?=======?7 =I=I=I=I=I=I=7 }==!=-=)=-=!=7X;7X; CHARACTER SET #27X;7"CHSET2 =======U7 =@=P=P=d=T=E=Q8 Y=Y=}=====8 i=X=T=T=P=@==8 ======="8 =======,8 =======6}8 =======@8 ?=======?J8 ?=======?T8 ==<===<==^8 <===<=}==<=h8 ?=======?r8 =======|8 ==!=-=)=-=!=8X;8X; CHARACTER SET #38X;8"}CHSET3 =======U8 =@=P=P=d=T=E=Q8 Y=Y======8 i=X=T=T=P=@==8 ===}====8 =======8 =======8 =======8 ?=======?8} ?=======?9 <===<===<=9 =<===<===<9 ?=======?&9 =$=$=$=$=}$=$=09 ==!=-=)=-=!=:9X;D9;RUN PROGRAMN9 STARTX9==<9 ?=======?&9 =$=$=$=$=H2I 6-B"""6@@@! 6-%@! @ (..}@@ D:AUTORUN.SYS2)*@AU)*@AU<)*@)*@@VF)}*@AU)*@@P6-?:B",Z A d"n*@ AxO*@A$)*}@@<*@A%O*@@)*@)*@@H@TT104,160,0,}162,0,185,0,216,157,0,49,232,200,16,246,32,42,48,162,0,185,0,216,157VV0,49,232,200,208,246,32,42,48,238,7,48,238,22,48,20 }8,216,96,162,16,169,11,157,66PP3,169,0,157,68,3,169,49,157,69,3,169,128,157,72,3,169,0,157,73,3,152,72,3286,228,104!},168,96,-1@@255,255,231,70,233,70,234,234,234,190,72,192,72,76,216,2529946,81,48,81,32,68,242,63,82,67,82,201,208,208"},28,96<<103,82,104,82,208,218,116,82,118,82,76,63,242,10,89,10>>89,96,251,86,253,86,234,234,234,195,94,195,94,144,216#},92<<226,92,173,31,208,240,3,108,36,2,76,119,228,131,82,13382,234,234,234PP0,48,216,48,169,12,141,66,3,162,0,32$},86,228,160,14,185,202,48,153,26,3,136VV16,247,169,199,141,68,3,169,48,141,69,3,169,3,141,66,3,169,12,141,74,3,32,86,228%}UU169,11,141,66,3,169,152,141,68,3,169,48,141,69,3,169,19,141,72,3,169,0,141,73,3VV169,1,141,240,2,32,86,228,173,1,211&},41,2,208,23,169,171,141,68,3,169,48,141,69,3"XX169,28,141,72,3,169,0,141,73,3,32,86,228,173,31,208,201,5,208,249,169,0,14'}1,14,212,[[141,14,210,173,1,211,41,254,141,1,211,160,0,185,0,56,153,0,216,200,208,247,238,134,486^^238,137,48,208,237,7(}6,119,228,125,29,29,29,127,127,80,82,69,83,83,32,211,197,204,197,195@SS212,155,29,29,127,32,32,32,32,32,32,40,67,65,82,84,)}82,73,68,71,69,32,80,82,69JOO83,69,78,84,41,69,58,155,80,48,228,67,64,228,69,0,228,83,16,228,75,32,228D2:HOMETRAN.*}BAS3,68,71,69,32,80,82,69JOO83,69,78,84,41,69,58,155,80,48,228,67,64,228,69,0,228,83,16,228,75,32,228D2:HOMETRAN.dEIn X; TRANSLATOR FOR ATARI 800XLxX; by A. GIAMBRAX;X; INSTALL TRANSLATORX; X; EQUATESX;HATABS,}ICCMDB;;I/O COMMANDICBALD;;BUFFER ADDRESS ICBLLH ICAX1JCIOVV;;OS I/O ROUTINERESETw;-};OS RESET ROUTINEPUTC ;;PUT CHARACTERSCONSOL;;START BUTTONPORTB;;ROM SELECTNMIEN;;NMI REGISTER".}IRQEN;;IRQ REGISTER,INHIB;;CURSOR INHIBIT6 CR@DOWN;;DOWN ARROWJ TABT CLEAR}^X;h0rX/};|Q> ;;CLOSE EDITOR PICCMD$> CIOVX;X;RESET DEVICE HANDLER TABLE X;(NECESSARY FOR ATARIWRITER)X;%0}>DTRESETQDTBL8 PHATABS81 IDTRESETX;Q>4EDITOR;;OPEN EDITOR PICBAL Q>5EDITOR& PICBAL0Q>:1} PICCMDDQ> N PICAX1X CIOVb Q>PUTClPICCMD;;PUT CHARACTERSvQ>4MSG;;STORE MESSAGEPICBAL;;ADDRESS Q>5MSG2} PICBALQ>4MSG1MSGPICBLL;;STORE LENGTHQ>5MSG1MSG PICBLLQ>;;INHIBIT CURSOR PINHIB CIOV;;3}WRITE MESSAGE QPORTBM> HWAITQ>4MSG1;;STORE MESSAGE PICBAL;;ADDRESS Q>5MSG1  PICBAL*Q>4ENDMSG144}PICBLL;;STORE LENGTH>Q>5ENDMSG1H PICBLLR CIOV;;WRITE MESSAGE\!WAITQCONSOL;;SELECT PRESSED?fR>pHWAIT5};;NOT YETzQ>PNMIEN;;SHUT OFF NMIPIRQEN;;SHUT OFF IRQ QPORTBM>;;DESELECT OS ROM PPORTB INITY%>6}MOVEITQ88;;MOVE OLD OSP8;;INTO RAM3 HMOVEIT#MOVEIT;;INC ADDRESSES#MOVEIT HINITY!RESET;;GO 7}TO COLD STARTX; MSG CLEAR=DOWN=DOWN=DOWN$! TAB=TAB=APRESS A=CR.MSG1 DOWN=DOWN=TAB8 A (CART8}RIDGE PRESENT)ABENDLEDITOR AE:A=VDTBL P=0=;;P:` C=@=;;C:j E==;;E:t S==;;S:~ K= =;;K9}: PRESENT)ABENDLEDITOR AE:A=VDTBL P=0=;;P:` C=@=;;C:j E==;;E:t S==;;S:~ K= =;;K X; PATCHES TO 800 OSX;%X; 800 OS IS FIRST LOADED INTO RAM('X; AT $3800 THRU $5FFF THESE PATCHES2(X; ARE THEN LO";}ADED OVER THE CODE, AND<"X; IT IT THEN MOVED UP INTO RAMFX; BEGINNING AT $D800PX;ZX; by A. GIAMBRAdX;nFx4;;DO"<}N'T TOUCH $D30144X;H;;INTERCEPT VB!X;.Q;;CHANGE ENTRY POINT FOR D;;SPECIAL ROUTINEX;"=}?RR>;;TOP OF RAM?H_R:;;YES, RETURNX;gRHCR"X;,tR6!?;;CHECK FOR RAMTOP@X;J YT:;;DISA">}BLE BELL ROUTINE^X;hVr4;;NO KEYCLICK|44X;^ ;;NEW BACKGROUND COLORX;\Q;;DO THEY WAN"?}TFRESET;;SYSTEM RESET? !@$: RESET!wX;R4;;DON'T TOUCH $D30144X;\Q;;DO THEY WAN _$d*z*KKKKKKKKK1KPASXYMOVPMCURSOPMATEMPTEMPGRIDVDDTEMDESTDESTROVSCABDPLC&A}CPMBASSPIBRIT &B} @@&C} !"#$%@&'()*+,&D}-./0123 Π٠Рӛ,"&E},1,2,3,4,5,6,7,8,10(1+AR%A @1A2( -((INITIALIZING SUPEREVERSION<0 -&F}0("RELAX, THIS TAKES ABOUT 40 SECONDSFI-AP ,-@6?%8A < I(>:A%,P%AY&G}AR% A`ZA6-@)dΠЛn+ -@w+A%$+",x.-@&H}@! ( ."A`6-$+",6-$+",>6-@h%A$+",)6-@h>6-?:<<<<<<,a&I}-62@`<2@)%@$+",]AF:A,%+",&+",a * 6-*8,%AAP&J}AP  6-& A` AҧӠΛ% 6-6-6--%-8<,&K}Ap 6--6-6 A`8%<%,"&A Ap  '  6-6-6-&L}' Ap5 - A(6-8%$<%$,5(A`""A,  A`6 6-%@ ")"6&M}-$J ")"6-$T")")")"6-'^.!)+"*H:,!?P,"6-(6-.6-h A`r(A&N}0|+6-A$%$&$+6-@@%$+%, 6-%!@6-+6-%++!,&+ ,,$+6-%+!,&+ ,6&O}-?:<<<%<<<,"*"A` AΧӠΛ# 6-6-# AP%R:8,&,-  6-%&P}6-#6-?P- Ap. !6-&6-$6-6?P. Ap-  *!6-%6-&#6-- Ap. &Q} 6-%6-6$6-?P. Ap5!6-&6-6+6-6?P5 Ap. !* 6-&6-%$6&R}-6. Ap-  * 6-%6-%#6-- Ap. !*!6-&6-&$6-6. Ap 6-%!@&S}6-$6-?:<<<%<<<,$ A5 -6-%6-%#6-%/!@56-6-?:<<<%<<<,&T} (T:8,&,A`.F:Ad,"$AdAU. A  AP6-?:<<<<<<,>-@@&U}! (I PASS(6-%3-6>-6C2@`12@)%@$+",5 9 C A&Р&V}ӛ0)6-?:<<<<<<,)8<,A@: -6-6D AN8%<%,"&A X" A &W} "(A@b Al5 - A(6-8%$<%$,5(Av"AP  A$(&X}68&,-8&,%$ A  !6-& 6--& 6-%6-% A # 6-&$+&,#6-&$+&&Y}, Aӛ)6-@%%&&!6-%%)1=+"A)"@#,*"%-=(>:@,>:&Z}@ ,=+"A)"@%,*"%-=(>:@!,>:@",=+"A)"@,*"%-=(>:@#,>:@$&[},=+"A)"@!,*"%-=(>:@%,>:@&,@-62@`<2@)%@$+",&\}@  168,-8,%#68&,-8&,&.68<,-1$ԠӠîӛ 7-@(8, ,-@6@&]}7(8, *%-%@&$+",@ %( 48,")8,"A`> ApH8-@6? *2@r&^}. 8 APRΛ\%%6-F:A`,%F:Aa,$AVf3%@i%'-@(/%&_}3 p!!9<,9,9,;@@,z226.( COMPUTER STICK ONE STICK TWO COMPUTER L;A0r,6-C:,06-+P:'A&`}$,%,$@6-$AV&LAV= 6-%BBy%6-$AV1B2w=A#3 6-6-%A%&a}6-%@36-%@ !-A"%! ff216,104,104,104,133,213,104,24,105,2,133,206,104,133,205,104&b},133,204,104,133,203,104,104,133,208ff104,104,133,209,104,104,24,101,209,133,207,166,213,240,16,165,205,24,105,128,133,20&c}5,165,206,105aa0,133,206,202,208,240,160,0,162,0,196,209,144,19,196,207,176,15,132,212,138,168,177,203,164``212,145,2&d}05,232,169,0,240,4,169,0,145,205,200,192,128,208,224,166,213,165,208,157,0,208,96AA28,62,127,127,127,62,28,8,28,62,62,62,&e}28,8,8,8,28,28,28,8,8778,8,8,8,8,8,8,8,8,28,28,28,8,8,8,28,62,62,62,28,8CC28,62,127,127,127,62,28,0,28,62,127,62,28,0&f},0,0,28,127,28,0,0;;0,0,0,127,0,0,0,0,0,28,127,28,0,0,0,28,62,127,62,28,0QQ255,129,129,255,238,1,129,221,119,128,129,&g}187,187,129,128,119,221,129,1,238 0,2,4,6,8,12,14,12,8,6,4,2#-A "%%# 990,0,0,0,0,0,0,0,12,&h}12,12,12,0,8,4,0,0,0,0,0,0,0,0,0$XX0,3,15,63,255,254,250,234,0,3,15,63,255,253,245,213,255,253,245,213,85,149,165,169.^^&i}255,254,250,234,170,106,90,86,255,127,95,87,85,86,90,106,255,191,175,171,170,169,165,1498]]0,192,240,252,255,191,175,171,&j}0,192,240,252,255,127,95,87,170,234,250,254,255,127,95,87B^^85,213,245,253,255,127,95,87,170,169,165,149,85,213,245,253,85&k},86,90,106,170,234,250,254LGG0,21,42,63,42,21,0,0,12,51,51,51,63,42,4,0,12,60,12,12,63,42,21,0VFF60,3,12,48,63,42,21,0,&l}63,3,12,3,63,42,20,0,51,51,63,15,15,10,5,0`FF63,48,60,3,63,42,20,0,15,48,60,51,63,42,4,0,63,3,3,12,12,40,20,0jLL12,51,1&m}2,51,63,42,4,0,12,51,15,3,63,42,20,0,170,106,90,86,85,86,90,106t^^85,149,165,169,170,169,165,149,170,169,165,149,85,149,16&n}5,169,85,86,90,106,170,106,90,86~MM255,127,95,87,85,21,5,1,255,254,250,234,170,168,160,128,0,0,0,0,0,0,0,0II12,51,51,6&o}3,51,34,17,0,60,51,60,51,63,42,20,0,15,48,48,48,63,42,5,0JJ60,51,51,51,63,42,20,0,63,48,60,48,63,42,21,0,63,48,60,48,48,3&p}2,16,0II15,48,51,51,63,42,5,0,51,51,63,51,51,34,17,0,63,12,12,12,63,42,21,0FF3,3,3,3,63,42,20,0,51,51,60,51,51,34,17,&q}0,48,48,48,48,63,42,21,0II51,63,63,51,51,34,17,0,60,51,51,51,51,34,17,0,12,51,51,51,63,42,4,0II60,51,51,60,48,32,16,0&r},12,51,51,51,63,40,5,0,60,51,51,60,51,34,17,0FF15,48,12,3,63,42,20,0,63,12,12,12,12,8,4,0,51,51,51,51,63,42,4,0HH51,5&s}1,51,51,63,8,4,0,51,51,51,63,63,34,17,0,51,51,12,51,51,34,17,0KK51,51,12,12,12,8,4,0,63,3,12,48,63,42,21,0,170,106,90,86,&t}85,87,95,127aa85,149,165,169,170,171,175,191,170,171,175,191,255,254,250,234,85,87,95,127,255,254,250,234OO255,127,95&u},87,85,87,95,127,0,3,15,63,255,127,95,87,0,0,1,6,26,106,106,106UU0,0,85,170,170,170,170,170,0,0,85,170,171,175,131,160,0,&v}0,85,170,255,192,255,15VV0,0,85,170,239,143,143,207,0,0,85,170,239,207,207,207,0,0,85,170,255,207,255,255 VV0,0,85,170&w},175,207,207,143,0,0,85,170,255,192,254,202,0,0,85,170,239,143,143,143VV0,0,85,170,171,239,195,160,0,0,85,170,239,131,163&x},227,0,0,85,170,254,250,248,248VV0,0,85,170,191,252,252,252,0,0,85,170,250,252,252,252,0,0,85,170,255,252,252,252(WW0,&y}0,85,170,250,254,254,254,0,0,64,144,164,169,169,169,95,124,255,255,255,63,79,802__245,61,223,255,255,252,241,5,175,188,255&z},255,255,63,143,160,250,62,207,255,255,252,242,10<LL80,67,0,0,0,192,112,95,5,193,48,0,0,3,13,245,160,131,0,0,0,192,176,175&{}F<<10,194,48,0,0,3,14,250,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0P550,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0ZVV255,25&|}3,245,213,85,213,245,253,106,106,106,26,6,1,0,0,170,170,170,170,170,85,0,0dTT143,143,143,128,170,85,0,0,255,255,255,2,170,&}}85,0,0,207,207,131,160,170,85,0,0nVV207,207,143,128,170,85,0,0,194,234,234,170,170,85,0,0,143,143,143,128,170,85,0,0xTT&~}255,255,255,0,170,85,0,0,207,207,207,128,170,85,0,0,195,224,232,170,170,85,0,0SS255,254,58,42,170,85,0,0,239,207,143,128,&}170,85,0,0,252,252,252,10,170,85,0,0PP255,255,63,0,170,85,0,0,252,252,248,40,170,85,0,0,252,252,252,8,170,85,0,0RR254&},254,254,10,170,85,0,0,169,169,169,164,144,64,0,0,85,85,85,85,85,85,85,85MM170,170,170,170,170,170,170,170,0,0,0,0,0,3,15&},63,0,0,0,0,0,192,240,252MM85,21,5,1,0,0,0,0,170,168,160,128,0,0,0,0,0,192,240,252,255,254,250,234ŭŠЛ&}EAA -A@9AEA4 #A-!-@5%"-(>:,1 4(PP1&},2,2,3,4,5,6,6,7,8,9,10,7,8,9,10,6,6,9,10,7,11,4,12,13,14,15,16,17,2,2,18. -.( abbcdedfghijjjiklhijjjdmnopqrbbs 6&}---W!-@%%&&@%%W(>:A%,>:A%,>:@X%,>:@`%, 6-( 6-&}(  6--<-@&&%<(>:AF,>:Ac%,>:Ae%,<-@!%%%<(>:Ag%,>:A&}i%,>:AG,"M-@&&@&M(>:A ,>:A,>:Aq%,>:As%,,M-@!%%@&M(&}>:A%,>:A!%,>:A,>:A!,6 6-( @3 -"-"#+,%/ 3 J[[18,3,3,&}246,163,169,247,3,11,1,128,224,35,11,1,223,250,17,19,5,120,190,171,221,191,121TMM19,20,1,120,121,19,10,1,25,26,19,12,1,25,&}26,17,11,1,19,20,21,11,1,19,20^)-@ )(PRESS /START/ TO PLAYh? -( PLAYER ONE-,( STICK ONE2-?(&}/OPTION/rP-@(( PLAYER TWO*-@)7(COMPUTERC-@)P(/SELECT/|L-@(WHITE%-@&}1(SCORE 2=-@ L( RESERVE 30^-@3@(BLACK1-@0@=(SCORE 2O-@(@ ^( R&}ESERVE 30B2vA& --68<,-" & /68<,-68<,-$68<,-/68<,-- 68,&}-68,-68,-'68,--6-AY@FҠΛ;-@"AF:%,;A@&}&F:%,U(6-?:<<<%$<@f<@ <,U6-?:<<<%@w&$<A<@ <,=F:B2y," 68,-8&},%&-=(78,$%<8,$%,CF:B2y," 68,-8,%,-@)C(78,$%<8,$%, 8,!68,-&} 8,!68,-F:B2y,"A   A@cA@!AB6-?:<<<<@f<@ <&},c6-?:<<<<A<@ <,&U-@ )( /-<( H-@)U( 0 &}@:ŠқDK6-?:<<<<<<, -/6-F:A,GA%+ ,&+!,K N<8,"8,!-@@&}!2( IT IS A TIE.< AX"-@@!"(PLAYER b8,!8,( ONE WINS!l8,!8,( TWO WINS!&}v-A 3-AA%-F:,6+/ 3 &(>:A%,AY& ApD2:REVER&}SE.BASA 3-AA%-F:,6+/ 3 &(>:A%,AY& ApD2:REVER$; COLOR THE SHAPES;; by Rebecca Guber and Sol GuberMODULEBYTE ARRAY R(100),USED(60),PLAYER(20),B(90), CLS=704,A(10)*},GAR(60), INTER=[72 169 0 141 10 212 141 27 208 104 64], TX=[0 252 0 4],TY=[248 0 8 0], TEST=[246 255 10 1], *} COLORS=[8 122 88 28 132 248 190 14 190], STAR=[0 0 0 0 24 126 60 60 126 24 0 0 0 0]CARD SC1,YP1,YP,Y1*}BYTE CFLAG,COL,PLAYNUM,COUNT,DX,DY, OLDX,OLDY,X,Y,TURN,QUITPROC SETUP()CARD ZZ=PEEKC(560)POKE(Z+166,143)POKEC(512,*}INTER)POKE(54286,192)POKE(87,10)POKE(623,160)FOR Z=0 TO 8 DO CLS(Z)=PEEK(COLORS+Z)ODRETURNPROC BLOCK(BYTE I)BYTE J*}FOR J=152 TO 157 DO PLOT (I,J) DRAWTO(I+5,J)ODRETURNPROC NEWDIR(BYTE A,B)DX=0DY=0IF LOCATE(A+1,B)>0 THEN DX=1E*}LSEIF LOCATE(A-1,B)>0 THEN DX=-1ELSEIF LOCATE(A,B-1)>0 THEN DY=-1ELSE DY=1FIRETURNBYTE FUNC LINE(BYTE A,B)BYTE Z*},JZ=LOCATE(A+1,B)J=LOCATE(A-1,B)Z==+JJ=LOCATE(A,B+1)Z==+JJ=LOCATE(A,B-1)Z==+JIF Z>6 THEN RETURN(Z)FINEWDIR(A,B)R*}ETURN(1)PROC REMOVE(BYTE A,B)DO PLOT(A,B) A==+DX B==+DY UNTIL LINE(A,B)<>1ODRETURNPROC GRID()BYTE I,X,Y,Z,XOL*}D,YOLD,Y1COLOR=6I=2WHILE I<157 DO PLOT(3,I) DRAWTO(74,I) I==+16ODI=3WHILE I<79 DO PLOT(I,2) DRAWTO(I,145) I*}==+8ODFOR I=2 TO 5 DO COLOR=I BLOCK((I-2)*10+5)ODCOLOR=6PLOT(45,153)DRAWTO(50,153)DRAWTO(50,157)DRAWTO(45,157)DR*}AWTO(45,153)PLOT(51,158)COLOR=0FOR I=1 TO 40 DO DO X=RAND(8)*8+7 Y=RAND(16)*8+10 Y1=Y-10 IF Y1/8=(Y1/16)*}*2 THEN X==+4 FI UNTIL LOCATE(X,Y)<>0 OD XOLD=X YOLD=Y IF Y1/8=(Y1/16)*2 THEN DX=0 DY=-1 RE*}MOVE(X,Y) DX=0 DY=1 REMOVE(XOLD,YOLD) ELSE DY=0 DX=-1 REMOVE(X,Y) DY=0 DX=1 REMOVE(XOLD*},YOLD) FIODRETURNPROC TITLE()BYTE X,Y,C,K1,K2CARD SC,JSC1=PEEKC(88)GRAPHICS(19)SC=PEEKC(560)FOR J=7 TO 9 DO POK*}E(SC+J,7)ODPOKE(87,2)COLOR=0PLOT(0,1)PRINTDE(6,"COLOR THE SHAPES")PRINTDE(6," by rebecca guber")PRINTDE(6," Ġ̠*}")POKE(87,3)FOR J=1 TO 1000 DO FOR K2=1 TO 500 DO OD X=RAND(39) Y=RAND(12)+8 C=RAND(255) SOUND(0,C,8,8) CO*}LOR=RAND(4) PLOT(X,Y)ODSOUND(0,0,0,0)RETURNBYTE FUNC NEWSPOT(BYTE J,COUNT)BYTE K,Y1,X1,Z,K1R(J)==+128Y1=((J-1)/10)**}16+10X1=((J-1) MOD 10)*8+7FOR K=0 TO 3 DO Z=LOCATE(X1+TX(K),Y1+TY(K)) K1=J+TEST(K) IF Z=0 AND R(K1)=0 THEN R(K1)=*}COUNT RETURN(K1) FIODRETURN(0)BYTE FUNC OLDSPOT(BYTE J,COUNT)BYTE K,K1R(J)==-128K=3WHILE K<>255 DO K1=J+TEST(*}K) IF K1>0 AND K1<100 THEN IF R(K1)>128 THEN R(K1)==-128 RETURN(K1) FI FI K==-1ODRETURN(0)PROC *}FIND(BYTE J,COUNT)BYTE K,K1R(J)=COUNTDO K=NEWSPOT(J,COUNT) IF K=0 THEN K1=OLDSPOT(J,COUNT) J=K1 ELSE J=K*} FI UNTIL J=0ODRETURNPROC SEARCH()BYTE J,COUNT,K,K1ZERO(R,100)COUNT=1FOR J=1 TO 89 DO IF R(J)=0 AND J MOD 10<>0*} THEN FIND(J,COUNT) COUNT==+1 FIODFOR J=1 TO 89 DO IF R(J)>128 THEN R(J)==-128 FIODRETURN; PMG.ACT FR*}OM THE ACTION! TOOLKITINCLUDE "D1:PMG.ACT"BYTE FUNC SIZE(BYTE K)BYTE J FOR J=K+1 TO K+9 DO IF R(J)=COUNT THEN RE*}TURN(1) FIODRETURN(0)PROC CHECK_BOARD()BYTE J,KCOUNT=1FOR J=1 TO 99 DO IF J MOD 10 <>0 THEN WHILE R(J)5 THEN J=(J/50)*20+60 PMHPOS(1)=*}J FI IF PEEK(636)=0 OR PEEK(637)=0 THEN BEEP() SHIFT(J) RETURN(1) FI ODFIDO DO *} S=STICK(0) TR=STRIG(0) IF TR=0 THEN BEEP() SHIFT(X1) RETURN(1) FI UNTIL S<>15 OD IF S=*}7 THEN X1==+20 IF X1=160 THEN X1=60 FI FI IF S=11 THEN X1==-20 IF X1=40 THEN X1=140 F*}I FI PMHPOS(1)=X1 FOR I1=1 TO 6000 DO ODODRETURN(1)BYTE FUNC GOOD_COLOR(BYTE SPOT,COL)BYTE TOP,BOT,BLOCK,IBLOCK*}=R(SPOT)TOP=GAR(BLOCK)BOT=(TOP MOD 10)*10TOP=(TOP/10)*10WHILE BOTJ THEN RETURN(-1)FIRETURN(1)PROC MOVE()BYTE Q,DELCARD KIF OLDX<>X THEN Q=OLDX DEL*}=SGN(OLDX,X) WHILE Q<>X DO PMMOVE(1,Q,OLDY) Q==+DEL OD OLDX=X FOR K=1 TO 2000 DO ODFIIF OLDY<>Y THEN Q=*}OLDY DEL=SGN(OLDY,Y) WHILE Q<>Y DO PMMOVE(1,X,Q) Q==+DEL OD OLDY=YFIRETURNBYTE FUNC TRIGGER()IF CFLAG=1 *}THEN IF PEEK(636)=0 OR PEEK(637)=0 THEN RETURN(0) FIELSE IF STRIG(0)=0 THEN RETURN(0) FIFIRETURN(1)BYTE *}FUNC ABS(BYTE A,B)IF A>B THEN RETURN(A-B)FIRETURN(B-A)BYTE FUNC JOYSTICK()BYTE P,X1IF CFLAG=1 THEN X1=PEEK(624) *}Y1=PEEK(625) IF X1<5 OR Y1<5 THEN RETURN(0) FI X1=56+(X1/28)*16 Y1=36+(Y1/28)*16 IF ABS(X1,OLDX)<5 THEN RET*}URN(0) ELSEIF ABS(Y1,OLDY)<5 THEN RETURN(0) FI X=X1 Y=Y1 RETURN(1)FIP=STICK(0)IF P=15 THEN RETURN(0)FIIF*} P=11 AND OLDX>60 THEN X=OLDX-16 RETURN(1)ELSEIF P=7 AND OLDX<180 THEN X=OLDX+16 RETURN(1)ELSEIF P=14 AND OLDY>51 T*}HEN Y=OLDY-16 RETURN(1)ELSEIF P=13 AND OLDY<152 THEN Y=OLDY+16 RETURN(1)FIRETURN(0)BYTE FUNC COMPLETE()BYTE JF*}OR J=1 TO COUNT-1 DO IF USED(J)=0 THEN RETURN(0) FIODRETURN(1)PROC NAME()BYTE JPUT(125)FOR J=TURN*10+1 TO TURN*}*10+10 DO PUT(PLAYER(J)) IF PLAYER(J+1)=0 THEN EXIT FIODPRINTE("'S TURN")RETURNPROC COLOR_IN(BYTE SPOT)BYTE K*}CARD K1IF B(SPOT)<>0 THEN DO UNTIL PICK_COLOR()<>0 OD MOVE() IF QUIT=1 THEN RETURN FI X=OLDX Y=OLDY *} MOVE() RETURNFIIF GOOD_COLOR(SPOT,COL)=0 THEN BEEP() PRINT("YOU CANNOT USE THAT") PRINTE(" COLOR THERE") BEEP()*} RETURNFICOLOR=COLFILL_IN(SPOT)IF PLAYNUM=2 THEN TURN==! 1FINAME()FOR K1=1 TO 2000 DOODRETURNPROC SHAPES()BYTE*} A,SPOT,JDO TITLE() GRAPHICS(8) QUIT=0 PMGRAPHICS(1) SETUP() POKE(705,22) POKE(623,160) PMCLEAR(1) MAKEPM(*}STAR,14,1,2,156,126) X=56 Y=36 OLDX=0 OLDY=0 MOVE() COLOR=3 COL=3 GRID() TURN=0 SEARCH() CHECK_BOARD()*} INIT() NAME() DO IF TRIGGER()=0 THEN COLOR_IN(SPOT) FI IF JOYSTICK()=1 THEN MOVE() FI S*}POT=(X-38)/16+10*(Y-36)/16 UNTIL COMPLETE()=1 OR QUIT=1 OD IF COMPLETE()=1 THEN FOR J=TURN*10+1 TO TURN*10+10 DO*} PUT(PLAYER(J)) IF PLAYER(J+1)=0 THEN EXIT FI OD PRINTE(" IS THE WINNER") FI PRINTE("PLA*}Y AGAIN?") A=INPUTB() UNTIL A='NODRETURN EXIT FI OD PRINTE(" IS THE WINNER") FI PRINTE("PLA(0d X; TRANSLATOR FOR ATARI 800XLnX; by A. GIAMBRAxX;X; THIS PROGRAM READS THEX; OS FROM THE 800 COMPUTERX; A.}ND WRITES IT TO DISKX; X; EQUATESX;ICCMDB;;I/O COMMANDICBALD;;BUFFER ADDRESSICBLLH;;BUFFER LENGT.}HBUFF1;;BUFFERCIOVV;;OS I/O ROUTINEPUTC ;;PUT CHARACTERSX;07;;PULL BYTE OFF STACKINITY%>.};;INIT REGISTERS"$>,"FILLBUFQ8;;GET THE ATARI OS6PBUFF9;;AND PUT IN BUFFER@2J3TIFILLBUF;;DO 128 BYTES^ .}WRITEBUF;;WRITE ITh$>rAGAINQ8;;GET NEXT|PBUFF9;;128 BYTES23 HAGAIN WRITEBUF;;WRITE IT#FILLBUF.};;INC ADDRESSES #AGAINHINITY;;DO MORE:X;WRITEBUF$>;;CHANNEL 1Q>PUTC;;PUT COMMAND PICCMD9Q>4.}BUFF;;STORE BUFF ADDRESS PICBAL9 Q>5BUFF!PICBAL9;;STORE BUFF LENGTH&Q>0 PICBLL9:Q>DPICBLL9NC;;.}SAVE THE Y REGISTERX5b CIOV;;DO I/Ol7v?;;RESTORE Y:STORE BUFF LENGTH&Q>0 PICBLL9:Q>DPICBLL9NC;;,?