@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr NNM$MLTN>NMM}M @   q   )~b*H:};3 #3 #  . (*#aNH }v$O }5   Z3(Q2C+'}6Nmw m  &  j&L}!'LoUHR([N F 7 T e * N} e $ F ( v"H})$+3%   R S=:}'" rn$0   }[6F(4  x  t ~pZ'}Y(~    /j/8/w>W@R$}! '*08:"/ 2;G-+}1&%.! !$"&$ '+*H}6+ }6!!"=* 45&$1"  !}  z}::=-K<(+(20&<.3=<L"}P<c=c#}$}%}&}DD.ȺjXDD.ȪX XDD.Ș'}H.XDD.ȖX,XDD.vh:XDD.f\JXDD.VLjXDD.f:@E>Q3Y"\[PE=9?G)N2Q6/*&"   0}    34"11}#2ʴʵDDDDDD);)<&& #'+02331-2} !% )++(" ''(((CC(*****>>*3} 4 4 5 5 5 5 5 5..(($$""$$!!))$$&&-$-$4}) ) + +4)4) ..00-.-..-.-0-0>.>.-335 5} 6} d WLPyũƢ<|H7YZ[+!  7} d WLPyũƢ<|H7YZ[+!  8}1L! v_ \b \LNO CARTRIDGE' 70 2 0P vL RUN FROM8Ti | 5779:S!Z<q !z<:};}R 4* UP<}@ U@UX P UPU Yj* %U@ UPU@U ꪪ=} e` Uh@U * *ePkJ***j>} ** '*j**** U* **^ ?}0** Z  ?@}>*ꪪ*0 ?+00 *A}0 < *<< *V)UB}%U@( UUC}  "D}P UU ^U E} * X *ZF}?ꪀUzʪV* V*<G}* 0*ꪀV* ꪠVH}. V0 U+*j Z*T+?jV@I}.*0ꪠV.* z*Z*J}h*<* K}  *L}**? M}  %@?T N}U*0ꪪ? ?*0O} *ꪪP}****P *TQ} Z *TUj* *U@UR ʪ@@R}j *@ ZU>*jU??ꪪ S}jP3 z@??*Z@0 (kT}<  UUUUUUW@U}UuUuUuUPUUTUUuUuUuUTUuUuUUU@uUuUuUuUtUUUUuUuUuU@V}UPU]U]Q]U]@]U]U]U]U]a]PU]U\DDU]U]U]U]U]U]U]]PU]UQ]]U]W}U]U]U]U]V"]V%eUP@ȋ_UUUuUuQuuQuQUuUuUuU!Uu%u&!U%U@UUu@UuUuEDDuEuDuUuUuX}UuUUuuUU@DuUuPUuUuU5QuuUuUuUuUaV5%u&5U%U@WOOU]UU@U]U]UU]UQUU]U]U]U]QY}Un!]PU]U]PU]U]ULDEUEUEEDD]U]U]TMUX]HI]P\U]U]U]U]U]UU]U]]U]U]UU^%]V]a]U]Z}uUuUuUuUpAuUuUuUuUuUuUuUuUuQuUuUuUuUuUuUuUuUuU@UuUuUuUuUuUuUuUuUuUuuUuUuUuUuUuUuU@EUuUuUuUuUuUuUuUuUuUuUuUuU[}D?U]U]U]U]AQ]U]V-U!U]U]U]U]U]U]T ]U]UU]U]U]U]PU]XU]U]U]U]U]U]T@E]U]UU]U\}]U]U]P@]U]Ub!a]U]U]U]U]U]T]U]UM[efs (8Pp*1H4t}H*1@4H*194rrHr*154llHl*1/4``H`*1*4UUHU*1(4QQHQ*1#u}4HHHH([2 6 ([,*p `!P"@#, 8 M*z2|<*SBO*Fv}GFF<:7FGED*2d_ZP`F@<020(0(J*4_4`D]T^T]D_T]D`T^D_T^T]T]D`T^D_D]T^D_T^D`T]d^T_D`w}4]4_D^4`D]4_D^T^T]R(k}k |k|k |k|k|k|k"|S(T(U*t d!T"D#4$$%&x} \2*IKPRTBVBIBNBPBT"V!Z!]!dnx,[L,[C,[<,[9,[,[-,[*,[%RZB\"dny}765DCRa.=L[jihgfedcbaABCDEFghyjz#$%&'(m,"z}"#$%&'()*+,-./0123456789:;<=>?@Abcdefghijklmnopqmnopq{}BP/O=0G?0>0>0?0=0?0>0>0?0=0?0">0+>03?0|}<=0E?0O>0X>0`?0i=0r?0|>0>0?0=0?0>0>0=0@0 >0 >0@0=0~@0w>0n>0c@0[}}=0Q@0J>0A>06@0+=0*@0,>0 .70240140 +80/40 2-0=+0 7/0;70 >60I40 L50S70 P<0L70 O50Y70 S~}90U.0 U20V70 P30[.0 ^20b:0 _60j+0 m/0w40 q60v.0 y20}:0 w9010 80:0 }00+0 50:0 30}10 ;070 -0+0 5040=0=0=0@0 A0@0A0|@0 pA0j@0^A0X@0G=0I=0J=0U@0 XA0d@0j}A0v@0 |A0@0A0@0=0=0=0@0 sA0m@0aA0[@0 OA0I@0=A07@0&=0.@0,@04C0 :D0FC0LD0X}C0 ^D0jC0pD0|C0}@0@0w@0vC0 jD0dC0XD0RC0 FD0@C04D0.C0@0@0@0(C0 %D0+C0+D01C0 1}D07C07D0=C08@04C03A00A0+C0)@0%C0$A0!A0C0@0C0A0A0 C0@0C0A0A0C0@0}C0A0A0C0@0C0@0B0A0A0B0@0B0#A0,A04B0=@0FB0P>0Y80a90j:0sB0}A0A0}B0@0B0A0@0C0 A0A0C0@0C0A0A0C0@0{C0wA0qA0iC0d@0cC0d@0lC0d@0l@0}d@0lC0d@0l@0d@0lC0d@0l@0d@0lC0^@0ZC0SA0 L:0 E90 ;>0=L0FI0O@0N:0M/0 F0 ?0 2&0+70}170:70B:0M80 U(0 Q0 D 0:.0:40@:0H=0S80 X(0 Q0 D 0:.07407=09F0DD0 I40 B-0 5/01@07@0}:@03C0,A0#A0C0@0C0A0A0C0BC0TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT8j Atari's Small Miracles ====================== by Mark A. Brown - NOVATARI Welcome back to Atari's Small Miracles, th}e column written for the slow and/or lazy typists in this world. Here, programs are written short enough so anybody can ty}pe them in! There are fun programs, useful programs, strange programs, and learning programs. A little for everybody will} appear in these pages. This month's theme is the player/missile graphics features the Atari computer can use. There are} four quick programs to help you exploit this feature to its fullest! I won't even try to explain player/missile graphics} here, I'll simply refer you to the many articles and books written about them. You won't have to look too hard to find so}me. Compute! publishing has put out literally dozens of good tutorials, ANALOG has put out a few, and so on. Almost every }magazine that carries Atari will have covered player/missile graphics at some point. PMEDITOR The first program this m}onth is used to help you create and change player/missile graphics. Type it in, run it, and you can work with any shape yo}u want. The image can be eight pixels wide (obviously) and twenty-four lines high. Use the arrow keys without the contro}l key to move your cursor about (i.e. the "-", "+", "=", and "*" keys move you). Press the space bar to turn on the pixel }the cursor is sitting on, unless it was already on in which case the space bar will flip it off. Note that the numbers to t}he right of the editing area are the decimal numbers of the data you have in the player. If you don't like the player yo}u are creating, you can strike the CLEAR key to erase it and start over. On the other hand, if you like your player, press} the ESCape key to quit and a DATA statement will appear with the numbers needed to re-create that image. You can use it in} PMMOVER, below, or in a program of your own. 10 GRAPHICS 0:POKE 752,1:DIM A$(2048): Z=INT(ADR(A$)/1024)*1024:Z=Z+1024*(}Z Moves cursor" 40 POSITION 17,1:? " marks pixe ls":POSITION 17,2:? " clears pl ayer":POSITION 17,3:? "<}ESC> Ends" 50 D=Y*40+X+S:E=PEEK(D):POKE D,E+128:G ET #1,B:POKE D,E:X=X+(B=42)-(B=43):Y=Y +(B=61)-(B=45):X=X+8*(X=0)-8*(X}=9) 60 Y=Y-24*(Y=24)+24*(Y=-1):IF B=125 OR B=60 THEN RUN 70 IF B=27 THEN ? CHR$(125):? "1000 DA TA ";:FOR A=0 TO 23:? PEE}K(Z+560+A);", ";:NEXT A:? CHR$(126):END 80 IF B<>32 THEN GOTO 50 90 A=Z+560+Y:POKE A,PEEK(A)+(2^(8-X)*( E=0))-(2^(8-X)*(E}<>0)):POSITION 10,Y:? PEEK(A);" ";:POKE D,3*(E=0):GOTO 50 PMMOVER This program is largely instructive, and serves }little purpose on its own. It simply takes a player, pokes some data into it, then moves it around at your joystick's comm}and. That is all. What it IS meant to do is show an easy way to vertically move players and missiles, through the techni}que of strings. This is a fairly simple idea that works quite well for small applications. Study the program for a while }to fully comprehend it, and don't forget to notice the zeros at the beginning and end of the player data. Those make sure t}he player won't leave a stripe of data behind it. Replace them with some other number to see what I mean. 10 POKE 82,0:}GRAPHICS 19:POKE 752,1:DI MA$(2048),P$(24),S(15,2):Z=INT(ADR(A$) /1024)*1024:Z=Z+1024*(Z255) 50 Y=Y+128*(Y<0)-128*(Y>127):GOTO 40:D ATA 1,1,1,-1,1,0,0,0,-1,1,-1,-1,}-1,0,0 ,0,0,1,0,-1,0,0 60 DATA 0,129,66,36,24,24,36,66,129,66 ,36,24,24,36,66,129,66,36,24,24,36,66, 29,0 PLAYER5 } One of the seldom used features of player/missile graphics is the fifth player option. Simply put, turning on bit 4 of loc}ation 623 (GPRIOR) turns all the missiles into one color to let them look like a fifth player if put together. PLAYER5 tak}es care of the tedium of that process, i.e. the continous poking of the four missiles to put them next to each other. POKE} the horizontal position of the fifth player into location 256 and PLAYER5 will automatically move all four missiles to the}ir appropriate places to simulate a single player. Remember that bit 4 of GPRIOR must be on and that the color of the pla}yer is controlled by location 711. 10 FOR A=256 TO 285:READ B:POKE A,B:NE XT A:A=USR(256):POKE 256,128:POKE 5326 5,255}:POKE 623,16 20 DATA 234,104,162,1,160,11,169,6,76, 92,228,173,0,1,160,0,153,4,208,24,105, 2,200,192,4,144,245,76,95,228 } VMOVER And finally a program to suit those of you who couldn't understand PMMOVER. This program is a machine languag}e player/missile graphics mover that will take any player and move it any number of bytes up or down. To do this, in your }program code the following: JUNK=USR(ADR(A$),PMADR,DIRNO) where PMADR is the address of the player you want moved and D}IRNO is the number of bytes you want your player moved down (to go up, subtract the number of lines you want it to go up fr}om 256; for example, to move up one line you would put 256-1 or 255 into DIRNO). And that is all. Your player will be qui}ckly moved to that position. It doesn't matter if it's in single line or double line resolution, VMOVER will adjust automa}tically. 10 DIM A$(67):FOR A=1 TO 67:READ B:A$( A,A)=CHR$(B):NEXT A:DATA 104,104,133,2 13,104,133,212,104,104,133,215,16}0 20 DATA 255,173,47,2,41,16,208,2,160,1 27,132,214,160,0,132,216,177,212,72,15 2,24,101,215,37,214,168,177,212,170 30 DA}TA 104,145,212,196,216,240,5,138, 230,217,208,233,200,165,217,197,214,24 0,6,230,217,208,218,208,216,96 Atari's Small }Miracles is a column that needs a regular source of small, quality programs, and that source is the readers, you! If you ha}ve any good ideas or programs, send them to: Atari's Small Miracles c/o Mark A. Brown 7097 Game Lord Drive Springfield}, VA 22153 If they're less then ten lines and if they're good enough you'll see your name here! See you next month! } [Reprinted from the April, 1986 issue of CURRENT NOTES: The Newsletter for Atari Owners. For more information on CURREN}T NOTES, see the CNOTES file in the NEW PRODUCTS section of the Developers SIG.] 444444444444444444444444444444444444444444}4444444444444444444444444444444444)"@)"@)"@)"@,A99+")"@)+!@*"\ 30 -BSIO documentation dlm17jul83 ;s The following screens add several new } words to FORTH. These words are: -BSIO......This word replaces -DISC as } the fundamental disk I/O word in FORTH. It adds the ability to handle double density (256 byte) sectors and the } ability to write with-out verify. USE-BSIO...This word installs -BSIO as the disk I/O word, all words that } call -DISC now will call -BSIO. USE-DISC...This word installs -DISC as the disk I/O word, it undoes the } change that USE-BSIO made. DOUBLE.....Sets FORTH up in double density mode, all systems constants are } changed to the values needed for double density screens. It also sets D1 to double density operation. } } \ 31 DOC continued dlm17jul83 ;s SINGLE.....This word resets all FOR }TH constants back to their single density values. It also switches D1 to single density. } VERIFY.....Sets write with verify. NO.VERIFY..Sets write without verify. CHK.DRIVE..Checks the configurati }on of the drive whose number is on the stack. SET.DRIVE..Reconfigures the driv }e whose number is on the stack. The variable DENSITY controls the density the drive will be set to. } The constant C/BUF should be set to either 120 (single) or 240 (doub }le) in pns-FORTH, in val-FORTH the values should be 128 and 256. If you have val-FORTHyou should change SINGLE and DO }UBLE to set the different values into the constant. } \ 32 -BSIO, single or double dlm20nov82 hex 57 variable WCMND \ type of write 1 variable DENSITY } code -BSIO \ --- 0 ,x lda, 0= not \ read or write if, 52 # lda, 40 # ldy }, else, wcmnd lda, 80 # ldy, then, 302 sta, 303 sty, 1 # lda, 301 sta, \ set th }e unit # to 1 2 ,x lda, \ get drive # and compute the clc, 30 # adc, 300 sta, \ device id 4 ,x lda, 30a sta, 5 ,x l }da, 30b sta, 6 ,x lda, 304 sta, 7 ,x lda, 305 sta, density lda, 1 # cmp, 0= if, 80 # lda, 00 # l }dy, \ single else, 00 # lda, 01 # ldy, \ double then, 308 sta, 309 sty, 0f # lda, 306 sta, \ ti }me out value xsave stx, e459 jsr, 0< \ error? if, 303 lda, else, 00 # lda, then, xsave ldx, 6 , }x sta, 00 # lda, 7 ,x sta, inx, inx, poptwo jmp, end-code decimal --> } \ 33 Percom disk control dlm12sep82 hex } code SIO \ <>---<> xsave stx, e459 jsr, xsave ldx, next jmp, } end-code 12 c-array BUFF } : SET.CALL \ ---<> 30 + 300 c! \ se }t SIO unit number 0 buff 304 ! 1 30a ! c 308 ! ; : READ.DRIVE \ < }drive #>---<> set.call 4e 302 c! \ Read drive table 40 303 c! sio ; } : WRITE.DRIVE \ ---<> set.call 4f 302 c! \ Write drive table 80 303 c! sio } ; decimal --> } \ 34 Percom disk control dlm04sep82 : CHK.DRIVE }\ ---<> read.drive 0 buff c@ 4 .r ." tracks" cr 1 buff @ } 4 .r ." step rate" cr 3 buff c@ 4 .r ." sectors/track" cr 4 buff c@ 5 spaces if ." }double" else ." single" then ." sided" cr 5 buff c@ 5 spaces if ." } double" else ." single" then ." density" cr 6 buff c@ 256 * 7 buff c@ + 4 .r ." }bytes/sector" cr ; : SET.DRIVE \ ---<> dup r }ead.drive density @ 1 = if 0 5 buff c! 32768 6 buff ! ( SD ) else 4 }5 buff c! 1 6 buff ! ( DD ) then write.drive ; --> } \ 35 -BSIO, control words dlm02sep82 : VER }IFY 87 wcmnd ! ; : NO.VERIFY 80 wcmnd ! ; \ as }sume drive number one : SINGLE \ Set single density operation } 8 ' b/scr ! 128 ' b/buf ! 120 ' c/buf ! 1 density ! 1 set.drive 4 buffers ; } : DOUBLE \ set double density operation 4 ' b/scr ! 256 ' b/buf ! } 240 ' c/buf ! 2 density ! 1 set.drive 4 buffers ; }: USE-BSIO ' -bsio [ ' -disc cfa ] literal ! ; } : USE-DISC ' -disc [ ' -disc cfa ] literal ! ; } ;s 6-8<,X#6-8<,6-8<,# APZ",\ / 0}?p` `tGxa8 ` `/;~# ` ` ` `} ` ` ` ` ` ` ` ` ` ` ` `}#  `@ p?}====================================================}===============,"AUAF:Ad,@$AdAU'$Ǡ堪(}興}興螈܈興興}}====================================================}===============6-@z !6-|6-@$Ҡ堪( ((351046351146351262351360115115 } %('%$ $',*('(%(,1431310.,*('(%(},14310,0386434148=@?=?=<:864341,(%=849!%*-143/*'#;638 #(,/31.}-.1.-.41,.41,.31+.:1+.71'.1.+%/ #" "'%#"# #',/.,.,+)'%#"}# #',/.,+'+.31/./ /38;:8:87531/./,/383/,830,038,8,,8,,6,,6},4148=841=85158=1=11=11;11;19!  %#! !!%*-,*,*)'%}#! !!%*-,*)%),1/-,-*-1398686531/-,-61-*1-*%-*%!*%!96568656-*})*,*)*?689864348=8;98643,8,,8,,6,,6,,5,,5,4=44=4*}3**3*2;22;2(1((1(1=11=1148=841841,630*( %('%$ $',*('(}%(,1431310.,*('(%(,14310,0386434148=@?<=8431,('%}110066551100//..--,,((''%#--,,}&%$%((''%%**##((++((( } !! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< }<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}<<<<<<<<<<<<<<<<<x<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<}}}@@-@96-%%-@AE HOW TO RUN ANY FILES WITH THE '.CRE' EXTENDER DOWNLOADED FROM SIG*ATARI To help you get started, }CRE files are necessary because Compuserve doesn't support transfer of anything other than regular ASCII characters. (Well, }it does, but not in normal use.) Soon, we will have a program that will allow you to send/receive this special data, called} an Exec. Until then, files that have control and inverse characters have to be altered to a format that can be transferred} from/to Compuserve. A former SYSOP of SIG*ATARI named Bill Volk wrote a program originally called CREATO.ATR (hence- the} name CREATOR), which has subsequently been modified and improved by many sig users. The most current version of this pgm i}s located in the XA3 database. When RUN, this BASIC program will generate a new pgm in LISTed ASCII format that will late}r be used to reCREate the source program you would otherwise be unable to transfer. Thus, a file ending with ".CRE" is an} Atari BASIC program that when RUN writes the original file to your disk drive. It reCREates it, if you will. A problem ari}ses if the CRE file will be larger than 12K bytes or so. Many Atari terminal programs have limited buffer sizes for download}ing, and because of this wouldn't be able to download these programs. To solve this, a program will sometimes be broken up }into several parts. Usually, these are notated in the XA by appending a letter to the file name. So, if a file is named TES }T, and it has to be in four parts, it will usually be four pieces named "TESTA.CRE", "TESTB.CRE", "TESTC.CRE" and "TESTD.CRE!}". If a CRE file is in several parts, here's how you work it. ENTER the first file (in our example: ENTER"D:TESTA.CRE") a"}nd RUN it. Then for each of the remaining parts, type NEW to clear memory and then ENTER and RUN the next part. (The NEW is#} important! ENTER doesn't clear memory first like LOAD does.) In any case, you should have guessed that the CRE file must $}be ENTERED before it is RUN. The final file that a CRE file creates may be tokenized BASIC, listed BASIC, a binary load fil%}e, or even a data file with no special format. Check the description or accompanying documentation file to see how you shou&}ld load the final file the CRE file creates. " A 0̛"@ A `Л!"@3 5C#BXBBRBBqJKIIwJIKIKL#MJMH1N\HMNIWCBINMbH7NHPM)MLOKKK}JIQ!(}IIC)B!)}D^BB!*}E EDDPD"D!+}CCCjCAEGGFVE!,}PH+EoGGGGDHDD!-}BE?C;C7C3CCCGCKCOCSC!.}-@A!/} ~!0}-6~:i0J#,unhj^u?'.=!1}G[KJ<K.?:,v(7 //4w6LNuNeIOC?:-2!2}& > JXW    ( P7 OK OW Pi Pw N O V!3}PxMYod'Ro  =@iAj;P!4}i 0J+  p]W*tr^)_)k):);L@!5}(c )iEC96Ab J49CE!6} 2 B|  $ "("(8+05d F<A!7}_v0*;HXeq8' QT!8}]       !9}!:}!;}!<}ҹ֫ܞ !=}      !>}   "  !?} *  *          !@}             !A}             !B}          \DD..~XcDD.nT.XrvT!C}63333MUSICnoteskeyshiftvolumeenvelop SPEED GRAPHICSshapepathscale SPEED TEXTstationaryscroll SPEED REGIONg!D}raphictextcolorpalette SPEED LINKERshiftvolumepathscaleincrement SPEED SHOWEDITORLIVEPERFORMANCEEDITOR SPEED T E !E}L E C O M M U N I C A T I O N S autodialmanualdialdirectoryretryscriptreceivesend V I R T U O S O S O F T W A R E D E S K!F} T O P P E R F O R M A N C E S T U D I O music graphics text ANIMATION TELCOM V I R T U O S O S O F T !G}W A R E W E L C O M E QDD..X@DD.H@X@eDD..XDD..X@DD.X'DD.jNBX@DD.!H} .X.-DD.jNBX@DD.ȐX!DD..X@DD. X@DD.X7DD..X@DD.XDD..X@DD.XFDD..X@DD.!I}XDD..XDD..XDD.hD.X'08?9 0    -.32*(,,499AKMBKFKJKNKRK2K.K*K&K"KKM%c}EE%d}~%e}   %/6;@D~Ft@l  | m _, T7 HB ;P /_ )n 4w E| W%g} f n j \    # , 4 < C} Ew Cp e #*3=LVeov%~}oAXp&<S #7J%}|tj^~TqJaDU>I8>12+!*7 I %}8L  ||MeMe)) ;-%};-{3{3     {q    %} 6<76?k?k=7>8>1x3x%}:?:@6<76?k?k=7>8>1x3x:?:@ %}'      %}Σ)45* ""'' '' ''REAL%}ITYPERSPECTIVERELATIVEPOSITION D E S K T O P P E R F O R M A N C E S T U D I O S + A = O V I R T U %}O S O S O F T W A R E ##   '' '' %}'' dDD.hBX[DD.D.DX@DD.X,DD..X@DD. X (DD..X@DD.X)DD..X@DD.X%}DD..XPDD..X@DD.XfDD..XDD..X@DD.XDD..X@DD.~tXtDD. X@DD.XDD.JF@X%}DD.XjXDD.hnhXDD..X  "" *+%}! .066;;.=-@BCFF<;&# %} Ʊȗ҃xwz,0-"%}      A2AI*8 K% %} #- 5%   +  8 ] Y8## %}             %}               %}        %}            %}                 %}                             %}        %}%}  8 ] Y8## 5%  ũƢ<|H7YZ[+!  %} 8 ] Y8## 5%  ũƢ<|H7YZ[+!  %}dddddddddddddddddddddddddddd to return to this screen.g( Ԡ to quit.'AAH'A A6$ 10 ! DISK CHECKER - DAVE SMALL 13 ! Creative Computing - 15 ! May 1982, pp.186-190 20 ! 30 GOTO 290 40 ' SUBROUTINES P)}LACED IN FRONT 50 ' FOR SPEED, NO COMMENTING. 60 ! 70 ' DISK READ SUBROUTINE 80 POKE DCB+1,DFROM 90 POKE DCB+2,82 100 B)}HI=INT(BUFF/256):BLO=BUFF-(BHI*256) 110 POKE DCB+4,BLO 120 POKE DCB+5,BHI 130 SHI=INT(RSECTOR/256):SLO=RSECTOR-(SHI*256) )}140 POKE DCB+10,SLO:POKE DCB+11,SHI 150 X=USR(CALL) 160 DSTATS=PEEK(DCB+3) 170 RETURN 180 ' DISK WRITE SUBROUTINE - (SAMP)}LE) 190 POKE DCB+1,DTO 200 POKE DCB+2,87 210 BHI=INT(BUFF/256):BLO=BUFF-(BHI*256) 220 POKE DCB+4,BLO 230 POKE DCB+5,BHI )} 240 SHI=INT(RSECTOR/256):SLO=RSECTOR-(SHI*256) 250 POKE DCB+10,SLO:POKE DCB+11,SHI 260 PRINT "ERROR":GRAPHICS 0 270 DSTAT)}S=PEEK(DCB+3) 280 RETURN 290 REM DISK CHECKER 300 ' DOES SECTOR TRACE OF ALL 310 ' FILES IN THE DIRECTORY. 320 ' PRODUCE)}S LISTING WITH OK/BAD. 330 ! 340 ' ASSUMES 48K, MICROSOFT. 350 ! 360 ' GET DISK NUMBER, WELCOME.--- 370 GRAPHICS 0:SETCO)}LOR 8,9,4:POKE 82,0:POKE 83,39 380 CLEAR 390 PRINT " DISK CHECKER " 400 PRINT:PRINT "INPUT DRIVE NUMBER")}; 410 INPUT DF$ 420 IF DF$="" THEN DFROM=1:GOTO 440 430 DFROM=VAL(DF$) 440 DTO=DFROM 450 CALL=&E453 !DSKINV ADDRESS 46)}0 ! NOTE: MICROSOFT CAN CALL 470 ! DSKINV$ DIRECTLY, NO PLA 480 ! NEEDED 490 DCB=&300 500 OPTION RESERVE 20*128 510 B=VA)}RPTR(RESERVE) 520 IF B<0 THEN B=B+65536 530 ! FIRST, READ IN DIRECTORY---- 540 PRINT "GETTING DIRECTORY." 550 INCR=0 560)} FOR RSECTOR=360 TO 368 570 BUFF=B+(128*INCR) !INPUT AREA 580 GOSUB 70 !GET SECTOR 590 IF DSTATS=1 THEN 630 60)}0 PRINT "***DISK RETRY,DIRECTORY SECTOR ";RSECTOR 610 PRINT "***STATUS =";DSTATS 620 GOTO 570 630 INCR=INCR+1 640 PRINT I)}NCR 650 NEXT RSECTOR 660 PRINT 670 PRINT "WAIT -- BUILDING TABLES." 680 ! OK, NOW EXAMINE DIRECTORY. 690 ! PRODUCE L)}ISTING FIRST OFF. 700 !NOTE 360=VTOC, NOT DIR. 710 DIM INFO(64,6) ! FILE INFO 720 DIM NIME$(64) ! NAME INFO 730 )}DIM DEAD(64) ! FILE BOMBED? 740 FOR Z%=1 TO 64:DEAD(Z%)=0:NEXT Z% 750 ' 760 Z=B+128 ! START OF DIR ENTRY 770 ! B)}UILD FLAG AND INFO TABLE 780 FNUM=1 790 FOR LOC=Z TO Z+(64*16) STEP 16 800 ! LOC=ENTRIES' STARTING ADDR 810 FLAG%=PEEK(LO)}C) 820 IF(FLAG% AND &80)=&80 THEN INFO(FNUM,3)=1 830 IF(FLAG% AND &40)=&40 THEN INFO(FNUM,4)=1 840 IF(FLAG% AND &20)=&20 T)}HEN INFO(FNUM,5)=1 850 IF (FLAG% AND 1)=1 THEN INFO(NUM,6)=1 860 ! SECTOR INFO----------------------- 870 INFO(FNUM,1)=PEE)}K(LOC+1)+256*PEEK(LOC+2) 880 INFO(FNUM,2)=PEEK(LOC+3)+256*PEEK(LOC+4) 890 ! NOW GET NAME DATA..--------------- 900 NIME$(F)}NUM)="" 910 FOR Z%=5 TO 15 920 NIME$(FNUM)=NIME$(FNUM)+CHR$(PEEK(LOC+Z%)) 930 NEXT Z% 940 ! CHECK FOR END OF ENTRIES 950)} IF PEEK(LOC+5)=0 THEN 1020 960 ! 970 FNUM=FNUM+1 980 IF FNUM/5=INT(FNUM/5) THEN PRINT FNUM; 990 NEXT LOC 1000 PRINT "DI)}R TOTALLY FULL." 1010 GOTO 1030 1020 PRINT "DIR PARTLY FULL." 1030 FNUM=FNUM-1 1040 PRINT 1050 PRINT "NUMBER OF ENTRIES )}=";FNUM 1060 ! OUTPUT DIRECTORY 1070 ! ENTRY POINT FROM BELOW 1080 IF FNUM=0 THEN 1320 ! EMPTY DISK 1090 PRINT 1100 PRIN)}T " D=DELETED / U=USED / L=LOCKED / O=OPEN" 1110 PRINT " SC=SECTOR COUNT(LEN)" 1120 PRINT " SS=STARTING SECTOR" 1130 PRIN)}T " +=GOOD FILE-=BAD FILE ?=UNKNOWN" 1140 PRINT 1150 FOR F=1 TO FNUM 1160 PRINT USING "##";F; 1170 IF DEAD(F)=-1 THEN PRI)}NT "+"; 1180 IF DEAD(F)=1 THEN PRINT "-"; 1190 IF DEAD(F)=0 THEN PRINT "?"; 1200 PRINT "!";NIME$(F);"!"; 1210 IF INFO(F,3)})=1 THEN PRINT "D"; ELSE PRINT " "; 1220 IF INFO(F,4)=1 THEN PRINT "U"; ELSE PRINT " "; 1230 IF INFO(F,5)=1 THEN PRINT "L";)} ELSE PRINT " "; 1240 IF INFO(F,6)=1 THEN PRINT "O"; ELSE PRINT " "; 1250 PRINT "!SC:"; 1260 PRINT USING "###";INFO(F,1); )} 1270 PRINT "!SS:"; 1280 PRINT USING "###";INFO(F,2) 1290 IF F/20=INT(F/20) THEN INPUT RET$ 1300 NEXT F 1310 GOTO 1390 1)}320 PRINT "EMPTY DISK -- NO ENTRIES" 1330 STOP 1340 PRINT 1350 ! ENTRY POINT (BELOW) 1360 PRINT "PRESS RETURN." 1370 INP)}UT RET$:CLS:GOTO 1420 1380 GOTO 1400 1390 PRINT "PRESS RETURN." 1400 INPUT RET$ 1410 ! NEXT IS ENTRY POINT 1420 PRINT "})}SELECT : 1430 PRINT "1. 'n' A FILE NUMBER TO CHECK." 1440 PRINT "2. 'A' TO CHECK ALL FILES." 1450 PRINT "3. 'D' TO SEE DIR)}ECTORY LIST AGAIN." 1460 PRINT "NOTE: ERRORS SHOW UP ON DIR LISTING" 1470 PRINT " AFTER THEY OCCUR IN SEARCH." 1480 I)}NPUT N$ 1490 IF N$="A" THEN FILE=128:GOTO 1690 1500 IF N$="D" THEN GRAPHICS 0:GOTO 1070 1510 ON ERROR 1540 1520 FILE=VAL()}N$) 1530 GOTO 1560 1540 PRINT "ERROR. RE-ENTER." 1550 RESUME 1420 1560 ! --- PROCESS. CHECK. 1570 IF FILE>FNUM OR FILE<0)} OR FILE<>INT(FILE) THEN PRINT "ERROR.":GOTO 1420 1580 ! SINGLE ENTRY HANDLER 1590 PRINT "TRACING--'SELECT' TO ABORT." 160)}0 SS=INFO(FILE,2) ! STARTING SECT 1610 SC=INFO(FILE,1) ! SECTOR COUNT 1620 RSECTOR =SS 1630 ! GO TRACE IT...ARROR=RETU)}RN 1640 GOSUB 1850 1650 IF ARROR=1 THEN PRINT "***BAD FILE***" 1660 IF ARROR=1 THEN DEAD(FILE)=1 ELSE DEAD(FILE)=-1 1670 )}GOSUB 2110 ! MARK FILE NAME 1680 GOTO 1350 1690 ! ALL ENTRIES HANDLER 1700 FOR FILE=1 TO FNUM 1710 CLS 1720 PRINT)} "TRACING FILE #";FILE 1730 IF LP=1 THEN PRINT #3,"TRACING FILE #";FILE 1740 PRINT "PRESS 'SELECT' TO ABORT." 1750 SS=INFO)}(FILE,2) ! STARTING SECT 1760 SC=INFO(FILE,1) ! SECTOR COUNT 1770 RSECTOR=SS 1780 GOSUB 1850 1790 IF ARROR=1 THEN PRINT ")}***BAD FILE***" **" 1800 IF ARROR=1 THEN DEAD(FILE)=1 ELSE DEAD(FILE)=-1 1810 GOSUB 2110 1820 NEXT FILE 1830 PRINT "COMPL)}ETED." 1840 GOTO 1350 1850 ! TRACING SUBROUTINE 1860 ARROR=0 1870 PRINT 1880 PRINT "---SEC CNT=";SC;" READING SEC ";RSEC)}TOR 1890 POKE &D01F,0 ' CLEAR BUTTONS 1900 GOSUB 70 'READ 1910 ! CHECK BUTTONS 1920 IF PEEK(&D01F)<>7 THEN )}RETURN 1930 IF DSTATS=1 THEN 1960 1940 PRINT "+++ERROR. DSTATS=";DSTATS;" ON SECTOR ";RSECTOR 1950 GOTO 1900 'RETR)}Y 1960 IF SC=0 THEN RETURN 1970 SC=SC-1 ! DECR S COUNT 1980 ! GET FORWARD POINTER + FNUM 1990 FWD=(PEEK(BUFF+12)}5) AND 3)*256 2000 FWD=FWD+PEEK(BUFF+126) 2010 FN=INT((PEEK(BUFF+125) AND &FC)/4) ! HENCE, SHIFTED 2 BITS RIGHT 2020 FN=FN)}+1 ! (DISK STARTS AT 0) 2030 PRINT "---DATA: FILE NUM=";FN;" FWD SEC =";FWD 2040 IF FN<>FILE THEN PRINT "FILE NUMBER ERR)}OR.":ARROR=1 2050 IF FWD>720 OR FWD<0 THEN PRINT "FORWARD PTR OUT OF RANGE, ABORT.:ARROR=1:RETURN 2060 IF FWD=0 THEN 2090 )}2070 RSECTOR=FWD 2080 GOTO 1870 2090 PRINT "COMPLETED." 2100 RETURN 2110 ! MARK A FILE AS BAD IN NAME. 2120 ! SET HIGH B)}IT SO IT SHOWS 2130 ! UP IN INVERSE VODEO.. 2140 IF ARROR=0 THEN RETURN 2150 Z$=NIME$(FILE) 2160 NIME$(FILE)="" 2170 FOR)} Z=1 TO LEN(Z$) 2180 NIME$(FILE)=NIME$(FILE)+CHR$((ASC(MID$(Z$,Z,1)) OR &80)) ! SET HIGH BIT 2190 NEXT Z 2200 RETURN <(z  \ `t  !4`   !! @ KP    -},DD ` o ott   K P     @Pt   -}0H `!p  !0P   !! @ SX     -} , H H  ` g g l l      0 H `       ! !  @ P l     -}    0 L  `         @   `     @   `     @-}   `     @   `     @   `     @   `     -}@   ! `! ! " " " @# # $ `$ $ % % % @& & ' `' ' ( ( ( @) ) * `* * + + -}+ @, , - `- - . . . @/ / 0 `0 0 1 1 1 @2 2 3 `3 3 4 4 4 @5 5 6 `6 6 7 7-} 7 @8 8tttttttttttt 2)232= Awx] A%-@@ 3,  &G    PE P >C C CGLO5}PQQP66>/D*L$6EO5YRBp(lN~5};)aA6a (~ZZMrLsK5} $ 21 21 22 32 53 74 95 96 :6 <7 5}=8 ?: @:@; B;''&&'MXtDD..XDD.<|XV 0 0@ 6}            6}  6}6}          6 }         6 }0 0     6 }    6 }  ""&&**..3388==CCKKVVii6 }    "" !*+,,6}      ! !      #### # **#** * //*6}      6}     $$$$$++$+++00+000550555665 6}*+*?Mee N T__I%<%/  #.??QQA?OO6}M:M;3U3WWX@A&'KK 6}   6}6}  ""&&**..3388==CCKKVVii $ &&$#*6}  ""&&**..3388==CCKKVVii $ &&$#*6}88==CCKKV 6-S:,*T:, (* @p 6-( @F 6-%K!@! @4LLWLNNNMMN:}MM=MMLL]L:}KHLL:}KL+LALJ:}KhK%KJ:}IIIJ: }LLLLLLLLLLL:!}BH:"} :#}j9!o1TRMx 2Hn):$} NbCJK2:%}+ SZE~ Z9 (bE RCC:&} vG@713 2 6:'}h>   " =O`J sj:(} mdv0 *?Ti~ *? _u:)}.D[q'1\q )*+:*}':7*`=HQK]4{\:+}HX  /71:,}G:QO^w)@R:-}8+R7O}Z-/ ! 3 +  `:.}  K _Z;`P ]  9MH^A<:/}@9IEUetuWwYmo:0}mg       :1}:2}:3}:4}:5}:6}:7}:8}:9}::}:;}:<}:=} :>}                    :?}          :@}                 :A}                   :B}         :C}                     :D}     (1!4,392F6N@OISQYUcYm^sgwm|:E}  q +8ALcmx  '%#:F}#)09DD@CO\doyrgdhs~"$&*%*%1+*3A HUWSBFBCAM7T(]e l qn%k5gCgLiIs<~  :G}#2AHNWfnwuqy (1!4,392F6N@OISQYUcYm^sgwm|    :H}  %/79BKM?@BFD<7 40*% % 47B88<:I}% %%77??@@-0"""";";**"????:J}DD>?>?--<-<11-66<6<::6==!=!dd= :K}:L} %/79BKM?@BFD<7 40*% % 47B88<% %%77?:M} %/79BKM?@BFD<7 40*% % 47B88<% %%77?:N}ddddddddddddddddddddddddddddear it play orto edit. (ANTIC disk, 6/85, JC mods)13. PENCILS. A sharp GTIA demo! (GreggTrav8tttttttttu"""""/#ǀGGGGGHG񏗐 """""(#qqqqqx!qAui#ǟ>>P}?IGc 1Hc 1_""c 1b"#w ?qc 18c 1?c13G1fcO1W?>Q}c1`q1fc0y13uc0G f38 `?ϗ f3< 7'36#q 33`q31 at0tu>R}""#'<'<D珲((EK*U(hm ((E D#D$L(>S}$J")($I"#qy#qqttu"""""""""#>T}, rotate, &shift viewing position fairly fast. Seemagazine article for details. ACTION.(Paul Chabot, ANTIC <00@PMP:D:*.* -1FILE-0 -1EXT-0 -1SEC-0 -1FILE-0 -1EXT-0 -1SEC-0 FREE SECTORS AVAILABLE. BV} Desk Menu 00 Info.  Help Print 10 CPI Print 12 CPI Print 17.1 BW}CPI 01------------------ Quit 91n  DISK JACKET MAKER  A Diamond (tm) GOS BX}Application.  For Epson FX (R) printers.  by  David M. Acklam 1991 1h BY} How to us12e this program 1. Insert your disk in drive A. 2. Select print size desired. 3. Disk directory fBZ}or drive A  will then be output to your  printer in the selected size.&hۅ1䅂1   LB5B[}BJKD230E V BJK D0E V BD0EHI V BD0EHI V B\}BD0EHI VBD@EHI V@ɛL3jL4B BD@EHI VBB]}D@EHI VL343 BD@EHI VLs3L4 BD4EHI VL84 B7D4EHB^}I V BD@EHI V B]D0EHI VL4 BD4EHI V BD0EHB_}I V B V B VLB5%45_+141   LB5 v00   B`} L4LB5"LB5 0 L2L2L7BJKD0E V BJK DBa}0E V BD0EHI V56 BD0EHI V BD0EHI VBD@EHBb}I V@ɛLE6jL7B BD@EHI VBD@EHI VLE6 BD@EHBc}I VL#6L6 BŝD6EHI V67L6 BD6EHI V BD@EHI V B]DBd}0EHI VLF7 BED7EHI V BD0EHI V B V B VLB5BJKDBe}0E V BJK D0E V BD780EHI V BD0EHI V B D0EHBf}I V BD0EHI VBD@EHI V@ɛLo8jL9B BD@EHIBg} VBD@EHI VLo8 BD@E89HI VLM8L8 BD8EHI VL9 BDBh}9EHI V BD@EHI V B]D0EHI VLp9 BoD9EHI V BDBi}0EHI V B V B VLB5 BD0EH99I VLB55Bj}@? MasterBlasterFl}E}  ,<EcFm}Fn}E m.`Fo}`Fp}Fq}Fr}Fs}Ft}Fu}Fv}Fw}Cheap RobeFx}Fy}Fz}F{}F|}F}}F~}F}F}F}F}F}F}F}F}F}F}F}F}F}F}F}F}F}F}F}u1F}Du]MFM/MHMLKpIKWKH&H1IcMLM5M H"MLLLKK`IKJIIIHJ}K]KKJvI:IIH,HJ}LJI]I7IuHJ}NNNNN{N)NJ}M0OMsMJ}HxHHGGHONNJ}qNgN]NLLInHdHWHGJ}LGGJ} ~J}        J}   |x#t*q/k7e9^5[(Zp-w)~#*J}?|NvVnYh\`\\VVNSDR=S3Z.b&l#s/rBJ}qXmufXL?5,{#m_HGMLvGj M[J} M_ Ob S` 2$$$ Bd>`7WJ}3P.J#FB7JhPWKKC?9B4N@gKePYODC:J}6>0Q3k@rOrUbUPQ?:J0Y$bXTIMYWDJ}Vd&<Qr/4K}7.F?-IXK  cPE oD=x8J}2%!#PeY=  H^ $1 }1 T0 +J} S  EA Gr0  $= (e>p:x520/J}7@QPG}A|>?BE Up TB  J}2#11111  `h 5J G` +h kd R KN 7R UF IX,J}P  Ia ._._/_2_6\8]:b=g@J}lBqDvH{KNTX \`cd|duds`r]rYrUv J} PV\a  TvRzRT  U}Y}[}_|ay  J} [WUT|RuQqQjPhSeUd[^Y^Y\   N\ J} Q_ Lc N] Ld L^ Ea Giw -> %J}  N-N6N@NHMRMZObSkWoZ{YVQLJ}IKQU[^a \  !.@J}XcnJ}J}  J} J}   2J}DD.rV*XDD.JrX  DD.FX J}DD.X.X2DD..XDD.NXb   J}/;ABB> 2'&** $(157 60%   (4 '%(# "%BQQ$Q3+333J} #Baa"aFa`<````<---- J}    $.&  1& $ J}   J} J}       &"&85 050, J}47C ()I 347C (fh r rrmumb`mhjd jg YJ}]c^e^YYVS^W\UTQPTKKUGXG$)%)M&N&'B'CI?J?.+/+D)E).=0=A9C94-5-;-<,75J}67:4<4 ''& '   ' )((J}$$''''    J}                  J} J}       J}    J}J} J} J}ddddddddddddddddddddddddddddH