@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 D8uTHE COMPILER AND LINKER REQUIRE 48K. REMOVE ALL CARTRIDGES BEFORE USING. The ACE C compiler is a newerversion of the T}DEEP BLUE C compilerfrom APX by John Palevich. ACE C,like DEEP BLUE C, is a subset ofstandard C, drawn primarily from RonU}Cain's public domain C-compiler. Most programs written using ACE Ccan be run on any computersupporting standard C withoutV}alteration. If you already haveDEEP BLUE C, be sure to read thefile BLUE.TXT before using ACE C. Programs written with BW}LUE C willnot necessarily run on ACE C. This text will not teach youhow to program in C. If you are notfamiliar witX}h C (and even if youare), I would advise you to obtainthe book "The C ProgrammingLanguage", by Brain W. Kernighan andDennY}is M. Ritchie. It can be toughreading, but it will define the Clanguage. If you have questionsabout ACE C, you may send Z}them witha self-addressed, stamped envelopeto: Ralph E. Walden 1821 Jefferson Eugene, Oregon 97402 All the prog[}rams on this diskuse the normalize function inACECIO.C when requesting filenames. When entering a filename, if you donot \}include a drive (Dn:) then itwill be assumed you want D1:. Inall cases, you do not need toinclude the extension. To ]}run the programs on thisdisk use the "L" option (load) inDOS and type in the full filename. All programs with the extensio^}n".COM" will run automatically whenthey are loaded. If you are usingOS/A DOS, you can run the program bydirectly typing _}its primary name(the ".COM" will be supplied foryou). The programs may be loadedfrom any drive, but the file"ENGINE.OBJ"`} MUST be on D1:. Included on this disk is alibrary of standard functions(ACECIO.CCC), and a librarycontaining severala} graphicsfunctions (GRAPHICS.CCC). For theirdescriptions, see the files of thesame name with the extension ".C".ACE C sb}upports the following:1) The declarations char, int, andpointers (also extern). A charpointer may be used as an unsignedc}int for anything exceptmultiplication and division.2) Single dimension arrays. (Nopointer arrays - they won't generateand} error, but won't work likestandard C.) Note: floating pointfunctions are provided, but you mustdefine a floating point ne}umber as:char name[6];. It will act as achar array except in floating pointfunctions. (See FLOAT.TXT.)3) Unary operatorsf}:+,-,*,&,++,--,!,$- (tilde).4) Binary operators: +,-,*,/,%,|,^,&,==,!=,<<,>>,(op)=,&&,||,?:,(comma),(op)= (example: var +g}= 3(var=var+3).)5) Statements: asm, break, case,continue, default, do, else, for,if, return, switch, while.6) #define anh}d #include.7) Constants: decimal, hexadecimal,octal, backslash.Unsupported features of C (these areNOT in ACE C):1) Stri}uctures, unions.2) Multidimensional arrays.3) Full floating pointimplementation (See FLOAT.TXT).4) Functions returning anj}ything butint.5) Unary operator: sizeof.6) Binary operator: type casting.Differences from standard C:1) The last clausek} of a "switch"statement, either "case" or"default" must be terminated with a"break", "continue", or "return".2) Characterl}s are unsigned, andrange from 0-255.3) Standard C allows lines tocontinue onto the next line. ACE Cis much more particulm}ar. ACE Callows code to begin with linenumbers, therefore, unnumbered linesMUST begin with a non-number (Spaceor charactn}er) or it will be deleted. Strings and comments may NOTcontinue onto the next line.4) C source code lines can be amaximumo} of 199 characters long afterany expansion from #define's.5) Functions may have a maximum of126 arguments.6) When ACE C ep}ncounters a /*, itconsiders that the end of the line. Therefore, comments may not beimbedded within a line, and they maynq}ot cross over to a new line.7) ACE C will do constant evaluationat compile time provided there isnothing (Space, parenthesr}is, etc.)between the numbers and operators: num=5*6; will be num=30; at runtime. num=5*(6); will remain thesame. Evaluas}tion is strictly rightto left, and there is no order ofprecedence: num=5*6+1; is num=35. Use a space or parenthesis toovt}erride constant evaluation.8) A tab character is not "whitespace", i.e. the compiler will tryto compile it. (See CFORMAT.u}TXT forconverting tabs into spaces.)9) ACE C has an assembly languageinterface. Read the file ASM.TXTfor a description ov}f its use. BLUEC users: asm on ACE C is VERYdifferent; be sure to read ASM.TXT!10) Braces in standard C arereplaced withw} $( and $). The tildeis replaced with $-.11) Variables may not be definedwithin a statement.BACKSLASH: Use of the backsx}lashwithin a single or double quote willgenerate the following codes:\b - backspace delete\d - cursor down\e - escape\fy} - clear screen\g - bell\l - cursor left\m - control M (can be used as aRETURN on IDS printers)\n - return\r - cursor rz}ight\t - tab\u - cursor upAdditionly, a back space followed bya number will convert the number toits actual value. "\6{}5\66" wouldgenerate the string "AB". NOTE: youcannot put a control comma (graphicsheart) within a string since this isth|}e end of the string character; youmust use \0.USING ACE C: Here's a brief summaryof how to get a C program running. A mo}}re extensive descriptionfollows.1) Enter the program using the texteditor of your choice and save it todisk with the exte~}nsion ".C", withor without line numbers.2) Load ACEC and compile theprogram.3) Load LINK and link the program.4) Load th}e program (which willautomatically run).1) EDITING: You may use any texteditor that creates aschii files,with or without} line numbers, toenter the source program. Note:CFORMAT.COM will do a lot of theformatting of a C program for you(See CF}ORMAT.TXT). You must savethe file with the extension ".C".2) COMPILING: The compiler andlinker require 48k so you mustr}emove any cartridges before runningthem. You run the compiler fromAtari DOS using the 'L' option. Thecompiler filename i}s ACEC.COM. FromOS/A+ DOS, just type ACEC, and pressRETURN. The compiler will ask forthe filename, which it willnormali}ze with the extension ".C". The compiler will then create a filewith the extension ".CCC" for use bythe linker. When you }press RETURNafter the filename, the screen willbe turned off while the program iscompiled. If any error isencountered al}l compilation willstop, the screen will be turned on,and the line with an error messagewill be displayed. Take note of th}eerror and press a key, which willreturn you to DOS. If compilationis done without errors, the screenwill be turned back} on, and a listof all the functions in the programwill be displayed. Press RETURN togo back to DOS, or type in anotherfi}lename to compile. Note: thelargest ".CCC" file you can have isabout 9K. It's safer to createseveral small files and lin}k themtogether then to have one largefile. Compiler directives in thesource file: #define - whenever the compiler}encounters the first string (allcharacters until the next space) itwill replace it with the secondstring (everything to th}e end of theline or comment). Example: #defineEOL 155; putchar(EOL); - this willbe changed to putchar(155). Note:consta}nt evaluation will be done onthe second string. #include filename - this willinclude the filename specified. Thefilena}me will be normalized with theextension ".H" The included fileis usually used as a header filecontaining extern declara}tions.3) LINKING: The linker joinstogether all files that are to bepart of the same program. You mustfirst create a fi}le with theextension ".LNK" which contains alist of the programs to linktogether. The only file typesallowed are ".CCC" }and ".OBJ"(object). All filenames arenormalized with the extension".CCC", so the extension is neededonly for ".OBJ" file}s. (Assemblylanguage files should have theextension ".OBJ".) The last filemust be either "ENGINE.OBJ" or"ENGLOAD.OBJ". } "ENGLOAD.OBJ" willresult in "ENGINE.OBJ" being loadedfrom D1: whenever the program isrun. "ENGINE.OBJ" is about 4000byt}es long, whereas ENGLOAD.OBJ isonly about 130 bytes. Load the linker in the samemanner as the compiler (the filename}is LINK.COM). The linker willrequest the name of the link file,which will be normalized with theextension ".LNK". The li}nker willthen create a file with theextension ".COM" which is ready torun. ACE C is actually a P-codeinterpreter and the} code to run it,plus numerous IO functions describedin ACECIO.C, is in the fileENGINE.OBJ. To access the IOroutines in E}NGINE.OBJ you must alsoinclude the file ACECIO in your LNKfile. NOTE: both ACEC.COM andLINK.COM require ENGINE.OBJ to be }ondrive #1, as they use ENGLOAD.OBJ. If the linker does not find a LNKfile, it will create the followingfile: filenam}e.CCC ACECIO.CCC ENGLOAD.OBJ4) RUNNING: Run your program thesame way you run the linker andcompiler. The extension w}ill alwaysbe ".COM", which need not beincluded if you are using OS/A+ DOS. When your program is runningcorrectly, you can} use FASTC.COM onthe ".CCC" files which will speed upyour program by 20-30%. (SeeFASTC.TXT.)BE SURE TO READ ALL THE .TX}T FILES,AND LOOK AT THE .C FILES FOREXAMPLES.d upyour program by 20-30%. (SeeFASTC.TXT.)BE SURE TO READ ALL THE .TX2 ACE C has a limited support offloating point by using thefunctions defined in ACECIO.C. Todefine a floating point nu }mber, use: char name[6];. Floating point willbe the same as Basic only instead ofusing operators like + and -, etc.,you }must use one of the followingfunctions: (for the examples, a,b,care presumed to have been previouslydefined as: char a[6], }b[6],c[6];)atof(a,str) - convert the string toa floating point and put it in a. Example: atof(a,"3.14276") - same asBASI }C A=3.14276clog(a,b) same as Basic B=CLOG(A)exp(a,b,c) same as Basic C=A^Bfadd(a,b,c) same as Basic C=A+Bfdiv(a,b,c) sam }e as Basic C=A/Bfmul(a,b,c) same as Basic C=A*Bfsub(a,b,c) same as Basic C=A-Bftoi(a) this will return the integervalue o }f a. This is NOT the same asBasic INT(A). Basic simply removesthe decimal portion, whereas ftoi(a)will round the number }either up ordown. Example: atof(a,"1.9"); x=ftoi(a); - setsx=2. BASIC: A=1.9: X=INT(A) setsX=1.itof(i,a) converts the } integer i tofloating point and puts it in a(opposite of ftoi)log(a,b) same as Basic B=LOG(A)NOTE: any var may be used i }n thefunctions. Example: fadd(a,a,a) isthe same as Basic A=A+A. To dosomething like A=B, usemove(b,a,6);.y be used i r There are several differencesbetween BLUE C and ACE C. The ACE Ccompiler runs 10 to 15 times faster,especially when} using #define's. The Linker runs 4 to 5 times fasterand the execution time of programsis about twice as fast. To maximiz}espeed ACE C eliminates the followingchecks:1) Eliminates check for differentversions. If you link an ACE C".CCC" file }with DEEP BLUE C'sDBC.OBJ your computer will crash.2) Eliminates check for the stackoverwritting into the screen.3) Elimi}nates check for division byzero.Here are the more noticeabledifferences between the twocompilers:1) ACE C does not allo}w imbeddedcomments or comments to continue tothe next line.2) ACE C does not allow the tabcharacter to be used as a space}.3) ACE C does accept programs withline numbers.4) ACE C does do constant evaluationat compile time.5) ACE C asm is VERY} different thenBLUE C. Don't use an assemblyprogram for BLUE C with ACE C. (SeeASM.TXT)6) The fprintf function from BLU}E Cwill work as a printf function inACE C. (printf checks to see if aniocb was included). The printffunction is part of} ENGINE.OBJ.7) Most BLUE C functions have beenrewritten in assembly language andare part of ENGINE.OBJ. They runfaster, }and take up less space.8) BLUE C loads at $3000; ACE Cloads at $2C00.9) The psuedo code has been extendedby 27 instructio}ns. These newinstructions are used when FASTC.COMhas been used on a ".CCC" file. There is no check for a bad codecaused }by a messed up file.10) The usr(addr,arg1,arg2,...) actsjust like the asm function. (SeeASM.TXT)for a bad codecaused g Assembly language runs about 10times faster than ACE C and takes upabout a third of the space. ACE Cprovides the ab}ility to define afunction as an assembly languageroutine via the asm statement. Todefine the function use: func() $( } asm address-of-function; Note that asm acts like aclosing brace, signaling the end ofthe function. You need not incl}udeany arguments in func(). Anyarguments between the parenthesiswill be placed on a stack in theorder that they occur. }When yourroutine gets control, the pointer tothe stack will be at $C6, and thenumber of arguments passed will bein $BF. }To get the low byte of anarguement use: LDY #argumentnumber*2 LDA ($C6),YTo get the high byte, use LDY#arguementnumb}er*2+1. If you want to return aninteger, load A with the low byte,and X with the high byte. To returna character, lo}ad A with thecharacter, and X with a zero. Endyour code with an RTS. The page zero locations whichare free are $80 t}hrough $B5, and$C8 through $CF. ACE C uses theOperating System's floating pointregisters, so though you may usethem, don}'t leave a value in themexpecting it to be there the nexttime your routine is called. Twoadditional locations that may be} ofvalue to you are $B7 - color fromcolor(c), and $B6 the graphics in559 before fast() was used. ENGINE.OBJ starts at} $2C00, soyou may use memory from LOMEM (value in $2E7) up to that. Also$400-$57F, and $600-$6FF is free. ($400-47F is t}he cassette buffer). LINK will tell you where the stackstarts, so you could figure out asafe place well above that. A}ssemble your program with theextension ".OBJ". Be sure toinclude it in the ".LNK" file withthe extension ".OBJ". The or}der itappears is not relevant. Note thatboth ENGINE.OBJ and ENGLOAD.OBJ usethe load/run address at $2E0.OBJ". The oro FASTC.COM will optimize ".CCC"files, lowering execution time20-30%. A ".CCC" file is composedof "psuedo" instructio}ns to beexecuted by ENGINE.OBJ. FASTC looksfor certain sequences ofinstructions, and replaces them witha faster single i}nstruction. RunFASTC by using the "L" option fromDOS. When it requests a filename,specify a file already compiled byACE} C. FASTC will automatically addthe extension ".CCC". The screenwill be turned off while FASTCchanges the file. When it} is done,the number of new instructions willbe displayed.creenwill be turned off while FASTCchanges the file. When it> The printf function enables youto print information to the screenor any device. It takes a variablenumber of argume}nts. If the firstargument is less than 255, it isassumed to be an iocb #, andeverything is sent to that iocb. Otherwise }the output is sent to thescreen (iocb #0). The next argumentis the format string, followed byany additional arguments. E}verything in the format string willbe sent out until a % isencountered. The character(s)following the % determine how the}argument is to be printed. Thefirst % is for the first argumentafter the format string, the secondfor the second argumen}t, and so on. Too few arguments will cause garbageto be printed. The followingcharacters may be used after the %:c - pri}nt a characterd - print an integerf - print a floating point numbers - print a stringx - print a hexadecimal number% - p}rint a percent signNote: A character, integer, orhexadecimal value may be obtainedfrom any variable defined as eitherch}ar or int. A floating pointnumber is assumed to have beendefined as a 6 element char array. A number between the % an}d thecharacter defines the field width. If there aren't enough characters ornumbers in the argument, it will befilled out} with spaces. A '-'before the number will left justifythe field. A decimal point and anumber will determine the decimal}part printed in a floating pointnumber, padded with up to 2 zeros ifthere aren't enough. Here are some examples:print}f(">abcd<"); produces >abcd%s<","abcd"); produces >abcd%10s<","abcd"); produces > abcd<}printf(">%-10s<","abcd"); produces >abcd abcd<e CFORMAT.COM is a means forformatting your C programs. Run itusing the "L" option from DOS. CFORMAT.COM will normali }ze thefilename you give it with ".C". Thebackup option creates a file withthe extension ".BAK" and then copysyour origin }al file to"filename.BAK". This enables you toretrieve the original fromfilename.BAK. CFORMAT examines allof your progra }m that is notsurronded by quotes or comments andmakes the following changes:1) Replace all tabs with spaces (thecompiler }won't accept tabs).2) The lines following a $( will beindented 2 spaces until the closing$).3) The instruction "asm" will } beindented 2 spaces.4) Lines after a "case" or a"default" will be indented 2 spacesuntil a "break;" is encountered. Not }e: you can end a "case" or"default" with a "return" or"continue", which CFORMAT will notinterpret to be the end of thecas }e/default statement. You can getaround this by ALWAYS ending a"case" or "default" with a "break;",even if there was alrea }dy a"continue;" or "return;".5) All spaces at the beginning ofthe line are removed except for theindenting described in 2 }, 3, and 4. Multiple spaces within a line willbe replaced by a single space.6) || and && will have a singlespace around t }hem.7) If a /* is found, a check is madeto see if there is a */ before theend of the line. If not, it willput a /* at th }e beginning of thenext line if there isn't onealready. This continues until thenext */ is found. If none is found,the e }ntire program will be turnedinto a large comment. (A goodreason for using the providedback-up option.) The following } control codes maybe inserted in you source code forspecial effects:1) If a control N is used,everything through the next } returnis deleted. (This is a way tocombine two lines)2) If a control M is used, it isreplaced with a return character, }thereby creating a new line. The source for CFORMAT is inthe CFORMAT.C file so that you cancustomize the program., {K?BLg?Can't find D1:ENGINE.OBJ @ VYD?EBJ V"ND?E BI Vl IHEDB V$}0­D?E?8HI V B VL,ace @(<3T.AUE.AC.A5E.ABOA&$}@sAXA|A4A||dA.7A /E&x@|/E, ||aA|XBFA||aA|ZBFA^B|OA|r"A GEf@$}dB|OA$;@|w"A IEf@tB|OA$;@ni$;@( XABOA=A1A ,, ,,,,,,!,',*,-,0,3,9,B,H$},T,W,Z,o,r,u,~,,,,,,,,,,,,,(fA$At${ArA$A( (rAfArr$}FA|r"AfABrOArA$A( BOAr@AnBRARA1A } The ACEC C Compiler $} by John Palevich and Ralph WaldenCCCC%sCan't open: %sCan't open: %sPress a key to exit to DOScan't open %s$}filename (or RETURN to exit)? niT ViT,0,n XiB 'E1T, 5E 9E OE SE AE KE EE CE =E +E -E }1T," $} QE ME^9E ;EijjxAE&ik~ EEjkU~&9jkU~&!jv$2jk~vp$jk~&Tj$}vp$jl~&ojvp$j l~&j]k$jl~&j$jlq~$i +Ej ;E+EYE+EIE$}A T RiRiViT&\kRin jRin J&PkRiRin :Ri ,,>, 1ERin H:kRin H&Hk1$}E> 1E1E2Rin Ri$j KE&jkl~ WE1TU~3T`UE, 1E&k1E"J&kh`WE,1E $wkhWE, h4lFAhr$}"A KEfk6l~ } missing closing bracketextern char int char int #include#defineCan't nest include filesHOpe$}n failure on include file(sU~&gl( |nzls~sz7E( (|H|ls~||z&ln $}l|zn l|zn  $l|1{ ||z6s|OA:sU~m,n :  $},,< ?E. ?E`z&Ko( sU~^os~$en( 3TUE,&uoEE&|o $psU~&owp$ps~&ow$}p$ps~&oq$ps~os~&obUE*q SE$ps~os~& pbUEwq SE$ps~&$pdq SE$}$ps~6ps~&IpbUEt SE$ps~&dp:rp SE$ps~vpt~&pbUESrp SE$p t~&prp$} SE$pt~pt~&pbUE v SE$pt~&p$pp SESE  tU~p"t~ ^AE4tU~&qEE&q7t~$}$#qeo$qbAE (|Xi|=E|z|reor/ =E XiItU~uqr( |z|ܛreor/ =E$} Xir( ( |Xi|=E|z||z|||rwqreo$reoNtU~ rTt~rpr%}ܛr Xir/ =E|( `zGr/ (||gr( n/nܛ( (B'EH&re%}t~|'E .BZ&rn&r$r .$rjBrvt~n&rnܛ$rnܛ( ]must be cons%}tant]illegal function or declaration%s(missing open paren)illegal argument name),expected commacharint wrong nu%}mber argsasmNeeded address*[,expected commachar int $(if(if while(while do switch(switch returnbreak;break%} continuefor(for ;;missing semicolon$)missing final endelsewhiledo with no whileNo active whilesNo active whiles%}(||| |Xi|=E|z|||GyzIyzKyzNyU~ tVyU~&t\y~|z|%}&u|$9u|n%u|&/uyy~rryU~Luy~yU~ cuyU~&iu$u|z|rܛr%}eoyU~ uyU~ uyU~&u$unܛru&u$t&urܛnr Xir%}/ =E|( ( |Xi|=E|z||z||z||z|||yzyU~`vpryU~vp% }rrܛryU~vyzrܛreorܛr Xir/ =E|( yU~vy~ ((% }( (&w&w`z&w( yU~&-w$2w|H|Bwyz||z&wn ewJ&vwn  $% }wwzyU~&w|Sl&w$w|rrrr1{ $w$wyU~w( $v( ((&x&x`z% }&w( yU~& x$xhH| xyzhz&1xhzyU~&mx|Sl&exbx|>$jx$x% }~xJ&x$xhr=En{ =E~/ =E$x$wyU~x( $w( (T RiRiViT&CyRin %}yRin y| $ y| $+yRin $y| $+y| Ri[Rin Ri$x( ()$(defaultcase 'case' or 'd%}efault' expectedconstant needed:Missing colondefaultcase defaultcase $)(;;)):Missing colon*[,*[,(%}q~y`}~;z`z& z$;z|zu`n}U~8z$;z$y}z&Uzrr$\zr( q%}~}~xz3TUE, }~ }rOA}~ rU~z}~ }~ (TViJ&zrr~&z( n%}$z( (T,0,nXiJ&*{rr~&{( n$z( rz Ri&B{Ri ViT,0,Z&\{}~%}Vi RiVir~Rin  Rin  Rin  Rin  Ri ,,< Vin ViRi rz Ri&{Ri XiT,%}.Z&{~~Xi RiXir~Rin  Rin  Rin  Rin  Ri ,,< Xin XiRi q~3TUE,%} Ab| 3TUE,~~ ^9E 0R9N: 'EB, .H&|-~~ 1E1Ef|'EDD 'EFF`1E*,$|%} |&|'E . 'E 'EB|D~~$}'E . 3TUE, 3T, UE 3TUE,>}EE&3} C}~$}~ &}GEX%}} EE KE 3Ei}GE 3E3T3E~f}3EAKE&} KE$} GE$} $C} ),);illegal symbol name%s already defined%}see abovemissing bracketnot definedGLOBAL symbol table overflowlocal symbol table overflowtoo many active whilesno act%}ive whiles~i~C}~$U~r~ ~~C}~ *N*p*****+f+++?3TOA 1E1EUE~$~^1E$~ %}RA$~CrOA@ hdA UE WE3TUE,~|&^UE$~~3TUE,Ti&Ti 8h`WE,Ti ~~$Ti"h`%}WE,~ 3TUE,"3TUE,nJ~3TUE,\h`WE,~ h`WE,~ $Mh`WE,~ $Ti'h`WE,~ 3T%}UE,'3TUE,X~3TUE,\h`WE,~ h`WE,~ $h`WE,~ $Ti~&~ 1E&HWEhWE,1E%}aA, WE$ 1E3TUE,~1EL:&$q^1E$Nh`WE,~ $k~$h`WE,~ $ hWE, UE 3ThaAn WE h%}H|ȀyzC`5E*,-EnQ-EQ-E,haAn, -E~C`5E*,-EnQQ-E,3TUE,aA 1E-E1En, -E }-Eh>%}k~ %s^ %smissing quotemissing apostrophemacro table full(|ʁ&|r( (|ʁ&|r~&Ɓ|% }ʁ&Á|r$( (|r~&crr0$)~& krr0$)~&&srr0$) ~&@{%!}rr0$)~&Zrr0$)~&trr0$)~&rr0$)~&rr0$)~%"}&‚rr0$)~&܂rr0$)"~&"zn&`|ʁ&|rrJ( $)( %#}( (?zn&M`rr`|&i|rcH}kH&r|͔&Wr"J( ((%$}(1$~H&҃( &r9ED 9E9ED 9Evܛ%%}( (((q~&~H&d( &tr9ED 9E`T3)U~&҄%&}&r`T3$( (((q~,~H&( &%%'}r9ED 9E`T3/U~&&lr`T3$E( ((%(}jq~3TUE,|JJޅ2~Jޅ5~J&( &r&f8~HJ&&;%)}~HJ&\>U~&R`j&Kr$Y( $c( $( ((q~3TUE,^JJ%*}@~J&( &r&C~H& F~&`&r$( $( $(%+} ((އq~3TUE,&JJRH~J&]( &mr&ڇK~HJ&N~%,}HJ&ЇQU~&Ƈ`އ&r$͇( $ׇ( $m( ((q~S~HJ&V%-}~HJ&(( &8r&Y~&g`&`r$\~&`&r%.}$( $8( (({q~_~HJ&a~HJ&c~HJ&f~HJ&%/}( i~J/l~J&:( &Jr&o~&`{&rr*,J%0}*,J&$J$r~&`{&ljr*,J*,J&+$J $3TUE,%1}<HJ&"u~HJ&vUED UE`{&Cr*,Je*,J&o$J$3TUE,%2}>HJ&x~HJ&UED UE`{&r*,J*,J&#$J$( $J%3}( ,+=-=*=/=%=<<=>>=&=^=|==?||||&&&&|||=|||=|^=^=^&=&&&=&==!===!=<><=>=>><<<=>=<<>%4}>(|r.q~X~[~^~b~&( &΋rr&*fU~&`|.&|r%5}$'i~& `|.&|r$'( $΋( (|rq~3TUE,+[3TUE,-J&e( l~wo%6}~&( &rr&}rU~&`|&|rr|͔&ČW|r͔&݌uWucr|$zt%7}~&s`|& |rr|͔&W|r͔&7uWuknPH&f`T3r|%8}$z( $( (|r~q~3TUE,*3TUE,/3TUE,%J&ō( v~y~|~&덂(%9} &rr&zU~&$`|&|rs$w~&J`|~&C|r{$w~&p`|~&i|r%:}$w( $( (U~&Վr~zn&`rr˜nĎ˜rJ( $T~&)r~%;}zn&`rrלnלrJ( $T~&Rr~&Drr( $T~&{r~%<}&mrr( $T~&r~&rr`T3( $T~&r~&Ώrr|n&%=}nn $nn( $T~&zr~+~|nnn n&V( Tr%>}tnn ( $T|r~&鐂zn&`rr˜nĐ˜rJלn%?}ߐל( $T~&Mzn& `rrלn(לrJ˜nC˜( $T( (%@} >><<<<=>>=>><<+=-=+-*=/=%=*/%++---$-!*&illegal address++--(|r|nq~3TUE,%A}[H3TUE,(H&ޒ&ޒڙU~& ܙ~$5n "rr$5n 5~`zn T%B}Wcnnnn $ے~&Ԓy$’n rry$’ry|n%C}$ے( $ꑂ풂( n  Trt( ( (nU~&[|rʁ~&M|rʁ%D}$5z( |H|&||z&rnnn n nnn n ߓ%E}nn ( $( ||z&mn mnnn Dn =nn (%F} Trtnnn ( ||1{ nn( |&”nn( $%G}ɔ~( nݔ n&  n&n&n$In&Innnn%H}nn nen$qn n&n&nM$n& zzr%I} rn&וT7E3$jr&T7E3$j1TU~&f+E 7E3TUE,"23TUE,$2YE`+E,~ $+E%J} .R&H~^UEYE`+E, T7E $j  (|4U~&t6~&3TUE,~|( 3TU%K}E,0^UE3TUE,TiTixHޖTiXH&얀^UE$3TUE,Ti&yTi~|&"|r0Ti0.,$sTih@Ti@%L}P&>TiGL&OTi7.Ti$wTi`P&cTigL&tTiW.Ti$w$y|r0Ti,$sTi*H&3TUEn,~|&ė^UEr%M}n7E0$$sTi/H&3TUEn,~|&^UErn7E2$$sTi+H&3TUEn,~|&6^UErn%N}p7E$$sTi-H&R3TUEn,~|&p^UErn7E.$$s$y^UE$&|@n 7E(  7E8U~%O} ~Ti'J&ƘTi&ݘ7E>, 7E$n7E 3TUE.,TiTi\Ti ~TiTin Tif'}%P} Tit3 Tib?~ TiuK TidW Tilc Tiro Tim{ Tig Tie Ti~|&֙Ti%Q}0.Ti3TUE,~|&֙Ti 03T`UE,0.,Ti$Ti [can't subscriptcan't subscript]((,)invalid expression()st%R}ring space exhausted-+'IE%Ar3 n fn H&wIE%A$IE%Art IE%An%S} : ,,>,=E.3 n ؚn H&IE%A$IE%Ant IE%A$!%T}IE%Aɞ <IE%A$G IE%A  IE%A  IE%A  IE%A=En =E IE%A IE%Art%U}n\=E. =E IE%A IE%An\=E. =Eɞ IE%Ar  IE%Ar IE%Ar%V} .IE%Ar3r =E. 1E1E&SIE%A1E3 IE%A ߞ ߞ ߞ ߞ ߞ %W} ߞ ߞ ߞ ߞ  IE%A !IE%A "IE%A #IE%A $ߞ %ߞ &ߞ 'ߞ (ߞ )%X}ߞ *ߞ +ߞ ,ߞ -ߞ IE%AIE%A<IE%A IE%AIE%A r IE%%Y}AIE%A<IE%A r IE%AIE%A<IE%A IE%AIE%A<IE%A%Z} IE%AIE%A<IE%A IE%AIE%A<IE%A (|rIE%AIE%A%[}<IE%A&vIE%A$IE%A( T.2n' =E. =E =En =E IE%A=E. =E *+ƅɈ%\}ƅȠƅȱƅˠ ``_0:A [ a{``_0:A[a{LJ*Ȫ`%]} ,/`ȱ*눩L* ȱ `ƅɈƅȱʱѠ `ʠ`ƅˈƅʱeȥ%^}iL*`΄̱ȱɠʱ"Ѡ L$+̥ΰ L+ʱ Q*蘠Ș ȱ`_0:A %_}[a{`ٱƅɈƅȠƅȱƅˠʑȱʑ Q*` *``g?Ș ȱ`_0:A $UK?;FLg?Can't find D1:ENGINE.OBJ @ VYD?EBJ V"ND?E BI Vl IHEDB V)a}0­D?E?8HI V B VL,ace @~ì~ˬ~DϴA@&<@$2@۴)b} (V۴|||.,fA~@||., e||E|@( ۴ Eϴ (\)c} r,&@r,.J&@t$@|r|,:E|,&'A|,|,n t$A|, r)d},&]A|,r,n t$8A|, ?E||ϴ @ ˬ˜fŤf>>Code ends at $%x <<<Can't re-readmainNo main()acecan't re-open fileunknown file )w}type.OBJ.CCCunknown file type(|rr`R&0n; $欂ɜ&&rϴ( $( n)x}nѬn&U ,, ˬܬn ܬ$X$\$3ˬܬnܬn>, Ѭ, ˬܬѬn, ܬ$X$;\)z};$ܬnܬn>, Ѭ'R&qѬ'.*,ˬ$Ѭ*,ˬܬn ܬ$X$q\\$Eܬnܬn>,){}'. Ѭܬn ܬܬ,{( (  rϴ@ rr@ϴ @ ìˬ Ŭ ŬEŬpì.E)~}ìɬZˬ Ŭ ì ɬu<ɬu &vv$c :<: ìh)} n ӬѬn& $۬\$`ܬ$$\$Aܬn)}ܬnܬn ܬ$$I\I$wӬܬn,ܬn>,wܬn ܬ$$\$ܬn ܬ$$\$ܬn)}n>, Ѭf'űѬ*,w$ٱѬ'.*,wܬn ܬ$$ű\$+ܬnܬn>, Ѭܬn ܬdѬh%`ܬ)}$$$\3$cˬܬnܬn>,, ˬܬn ܬ$$p\p\p$ܬܬn(n, ܬ$$$ )}$$$$ѰܬެJ&-ܯ  ѬѬ5$Ҳ^Ѭ$Ѭ,2G$GH$H$G\?G$GH$H$G\@G$GH$H$H\AH$HH$H-}$)H\B)H\C)H\D)H\E)H$6HH$H$>H\F>H$KHH$H$XH\GXH\HXH$eHH$H$mH\mH$zHH$H$H\H$HH$H-}$H$H $H$H$H$@ gJNJmMgJ~ gJ .,.,&HgJ~gJ~ xxx$H H-}aIH gJ~n,I nrr)M>BMnH^gJ^PJ gJ~ gJgJ ^PJ (&INM-}SJNMSJ:JMSJrM NJfI>JSJM$yI$I( $yI( %s -- ***ERROR***%s is greater than %dK bytes%d new -}instructions%d new instructionNo new instructionsCCCCan't open: %s.H Fh LhKFF F(gJn J-}I$JgJn JI|gJngJn JgJn JgJnH&-KgJn"JgJn#J;L( $J: M( -}gJn#-KgJn""K=L( $-K< M( NKgJn NKgJn H&K)M)M,BMHgJn-} gJ^PJlJ( KgJn KgJn H&KHH@aIH( 3LgJnkJkJL-}LkJ HLkJH&3LH>aIH( HLgJn H&LgJnkJkJffLkJJ{LkJhzLkJ-}L&LH9aIH( LHAaILHFaIH( -}HaIH HaIH gJ~gJ~n>, gJ~ gJ~n< ,, , ,-},,,,,,!,$,',*,-,0,3,6,9,<,?,B,E,H,K,N,Q,T,W,Z,],`,c,f,i,l,o,r,u,x,{,~,,,,,-},,,,,,,,,,,,,(f5N$+Nt$NrM$%N( (rNfNrrM|rM-}fNNrMrN$HN( NMrMnNMMM can't open %sfilename (or RETURN to exit)?-} g?NNrMrN$HN( NMrMnNMMM can't open %sfilename (or RETURN to exit)?,K?BILg?Can't find D1:ENGINE.OBJ @ VYD?EBJ V"ND?E BI Vl IHEDB V1}0­D?E?8HI V B VL,ace @CI(&@8HCD8H}AH1}8H  ;HGC>H  ;H[C>H ;HoC>H| f@$@D $|@0}EE$@@dD$ 1}@( C,CC,CC,CC,C CCfA$A^C$@CC*,DHn2CC*,DHn2CC*,1}DH.NA$0ACC*,DH.lA$NADHnCC*,n2F$A2HFC CCfCC$A^C$ACC1}C*,CC*,CC*,yF CC*,CC*,,CC*,CC*,,CC*,f)BCC*,$ACC*,h=BCC*1},@$ACC*,f [BCC*,$ACC*,hzBCC*,@$AC@E&@CCC*,DH.CC*,DH1}.B$BCC*,DH.B$BCC*,CC*,,CCC*,CC*,CC*,yF CFDHn1}CC*,n2FrE$A$A A PM Graphics Demo(look at PMDEMO.C)Press a key to restart. 1} HgJnH&CgJnH& DgJnk(j2H .> Gj2H.8Hj2H.> Gjj1}2H.8HHDG)HG<8H( D<8Hjj2Hn8HH (&#E/1}D>$D.8H8HD$DGGGGD$D, Gf E$Et$DЂ,8H$E$1}nE/"8H8HfnE$MEt$,8H Ќ1},8H fEЂ,2H >Ђ,2H:&E$E fE Ђ,2H > Ђ,2H:&F$F G1}G>,G>G >pG)H >n)H r>pG)H nGG>,,1})HЌ,8H GG>, ,>:,8H 8HUrGT8H@@@@1}G p:,2H |:,2H PH:\SG$ZG $bG\bG$jG@ $mG$wG $zG$G$mG PH :\G$G1} $G\G$G@ $G$G $G$G$G $H$,, , ,,,,,,,!,$,',*,-,0,3,6,9,<,?,B,E,H,K,N,Q,1}T,W,Z,],`,c,f,i,l,o,r,u,x,{,~,,,,,,,,,,,,,,,,,,(fH$Ht$vHr1}G$H( (rHfHrr,H|rGfHIr>HrH$H( $I>HrHnIAH1}AHG can't open %sfilename (or RETURN to exit)? g?HIr>HrH$H( $I>HrHnIAH0@K?.JLg?Can't find D1:ENGINE.OBJ @ VYD?EBJ V"ND?E BI Vl IHEDB V5}0­D?E?8HI V B VL,ace @/J(|b|.F*I+G*I&FHH n5}H lH tH vH6IzHIlG*IHNIyn@-IHZIHzHEIzHGI&@HHKI.H pH&@HpH, 5}HGIGzHH*I$@GzH*IzHrH lHf@GzH*I$,@rlHH rHlHHrHZ&6AGrH2*I$,@5}&AHwH xHhiArHxHHxHH$AGH*IHQIYA$,@prH HHn zHwH lHfA5HzH*I$,5}@ HrHH pHR&AHppH $AH A^H$AHHT&F$B^H$AHHdP& BHJ&/B`HF$BH5} =BHH\ HB$gB FH ^B^H$OBbH$F$OB\boB$BHDHI&BvH&BnH. nH vH tH$BtH&BnH. nH t5}HHF$F$B\cB$BHKHI&B tHnHn nHHF$F$B\dB$"CHQHI&C^vHnHn nHHF$F$C\0*C$~CH5}FHnNIxxCHnFHn HHF&uC`HQIF$XCbH$F$xC\$C$CHnHH.HH(CH 5}J&CHJ&CH.J&C FnHn nHHFH)CnH. nH$F$C\& D\| D$zDH.HHHH&?DH5}FHn A r'A3 9;'9M'AM' ;'99}-'A7B <' <'"' .can't open %sfilename (or RETURN to exit)? 'abs'alpha'ato9}f'bgets'bputs'cgetc'cgets'ciov'clear'clog'close'color'copen'cputc'cputs'dpeek 'dpoke9}!'drawto"'exit#'exp$'fadd%'fast&'fdiv''find('fmul)'fsub*'ftoi+'getchar,'getkey-'gets.'graphics/9}'gtime0'itof1'locate2'log3'match4'move5'normaliz6'open7'peek8'plot9'poke:'position;'printf<'putchar9}='rnd>'sfind?'slow@'soundA'stickB'strcatC'strcmpD'strcpyE'strigF'strlenG'tolowerH'toupperI'usrJ'v9}alK'closeallL'getreadM'getnamestickB'strcatC'strcmpD'strcpyE'strigF'strlenG'tolowerH'toupperI'usrJ'v8%' j'  '  j'  ' j'  ' j j'  ' ' =}' ' ' '  '' '   ' j j'7 ' ''=}A /AB > . '  'AB  '' '' AB=}  '@ A3  : A '   / "'  =}'@A3: A ' A ' '  '' F=} F  F '' F F ''A3 A ' A A ' =} 'A3 A ' A A '   '' F ' '=} '!'F 8' A '"'F 7 A '#'9F 8' '$'A7 '=} F ' F A ' F F '%'' F '&' A F  F  ''' F=} ' U9(' TF '       )'*' pF  '+' |F  =}','F -' . .   .'F -'=} . ! "!."#"  $#%$ &%$&''''playbase=}'charbase'playsize'pminit'peek'poke'graphics'pmgraphi'move'pmflush'clear'hitclear'pmcolor=}'pmwidth'hitpf'hitpl 'pmclear!'chget"'chaget#'chput$'plmove%'pladdr&'setcolor''fill('dpoke)'ciov*=}'paddle+'ptrig,'vstick-'stick.'hstick"'chaget#'chput$'plmove%'pladdr&'setcolor''fill('dpoke)'ciov*<.,#?L56L'2L5LP4Lo5Ld5L-L3L+-L 6L5L1L1L3L-L1LW.La.L1L6L4L4LJ5L4L.L4L4L/5L,L,L3L]1L5L4L1L4L5L-L2LA}3L/.L1L=.L1L/L-L3L?2LZ5L5L3L.L.L-L3Lv2L2L2L 2L{.2lȱňı88必ƥDZ…ȱ…ťi ,ԆLA}8 , /6`* 26`L, `ƅˈƅʈƅɈƅ` -ƝB EƝD IƝH ƝJ A}K VIi`` -L,BHI V0ڢ`ȱ G-FȌ- tLw- -ձʑ `ƙȥA}̱ȑ`ƙȄͦʥ``ƅɈƅȢ`ƅȱƅ̠ƅȱȪ̑Ȋ` /.HȱȪh` -ȅȱA}ͥˑȥʈȦͥ`ƅƅ إԅ) ٥0Ԧ`IIi` -L- - 80`` -V/F\/A}G]/\/]/ƅȱƅL*/҅Ɉƅȭ]/\/\/]/V/Ȅʩ΅ϩ %$ U/L0/`( /6 zA}-ԆբL8ȱ% 2-Lp/.Lp/AL/ȱ: 0蝀懲詛 ٥ ԅΤLp/ԅϤLp/A}DL0ȱIՈIiL0Ոƅ إ'0ȄΥΐ U/ R0L0 R0Υ U/LD0 - U/A}Π0. U/Le0)LU/溤`XL0ȄƅՈƅԥH)JJJJi0:i U/h)i0:i U/ A}L0L0/C ʱ U/L0SL 4ʱƅȱƅť K1L0ΰ U/ K1LH1 K1ΰ U/L0 U/A}``BP B VBD1EƝK)IJLt-S:ƅ`ƅVȱƅTƅU` 1 0`Lz- 1`BLt- 1 L1 - A}BIƅɝEƝDȠˆ 2󩛑Lt- - BLt-ƍ&2ƍ%2ƿƿiƐLt0`8Hƪh` -̄ͱʅαB}ͥ``ȱܱƅɈƅȢ`{a `A[i L2 -Π 2Ȉȱ :* B}D1:șȈ..Ȅ̤αʤ̑`@i`ƝDȱƝEBȱƆ 2AB}RWUD`   J V0JJJJ`Lz-ƨx`ƨТ`ȭ Ȑ Ң`ƝEƝDBI VB}0 ($`Lz- -L3 -B0ƝKƝDȱƝELq3FL0ʱƪȱƨ ؠ0.)ȩ.ȩ0ȩL0B})L<4ƅƅ ؠƅȱƅL4ƙșʙ`̈` p4 L4 p4 (L4 p4 fL4 p4 `L4 -șB} ޠʈ`ƅȱƅȱƅȱƅ L4ƪȱƨ ޠƪȱƨ ݠƅȱƅL4 -ș L4ƅɈƅȠșB} ٦ԥ`//B`/B` 5 BLt- 5B VHI`` -ƝIƝHƝEƝD` - ``B}_A [ a{``ҩ҈) ƝҠ) Ƞ)` - ȈȈ`LLiB}06i16i1i1i1i1$i36%i46/©6í@@L 7@"66l iàL 7…B }ȱ…ťiÈԑL 7…ȱ…ťiåՑĈԑL 7ȱňĥԑĥ8ê^; 7_;!7Lt…ȱ…ťiB }ÈąԄL 7…ȱ…ťiñąՈąL 7eȱeL6ȱňĥԑĥȑĈL6ԅԄL 7ԪȱԈՆL 7i‘ȱ‘B }L6…ȱ…L6iԑȑL 7ԱԊȦձՊL 7iȱª¨„ iiȑÈL 7ȱB }688L 7±ŠȦñÊL 7ªȱ…ƈL 7 LW8L6 ȥL==L'=q…q…L6&L 7eԅB }eՅՈL68ԅȱՅՈL6ԅՅȱ :ԥL6 8L8 8ԥL6ȱդL:ԅȱՅՈL6EԅȱB}EՅՈL6%ԅȱ%ՅՈL6ȱJfՈL6ȱL6ȱ*ՈL6ԱL68ԅԩՅL 7EԅB}EՅL 7L 7L 78Ԫȱ`ȱL6ȱԄL6 90 90 90ʊ 90ȱB}ՐɱԐȱՐзԐЭȱՐЎԐL9ȱՐ԰L9&&& L: `B}ɀE ɀf8ਊ n:$ 8$P 8`E0 IIL; 8B}Ff eeFfff$ 8`,"7@7`7666q777777e8778@8W8p888888889 919B}B9j99999999: :: :2:F:[:y8;&+>G>c>>>><<<<>??…ȱ…ťiÈią ȱiB}ՈL 7ȱĈL 7…ȱ…ťiñąՈąiȱiĈL 7…ȱ…ťi8ą԰ ȱąՈL 7ȱąՈL 7…ȱ…B}iñąՈą8ĐL 7ȱĈL 7tmL#=P]L#=…ȱ…8ԈĪCL#=…ȱ…8ԈĪ0)B}L7=8ªԥiàL 7Ԅՠªȱ…Æ L 78ª0ƊL7=˥ԈL7=ФԈL#=B}q…ԥq…L6…ȱ…ťiåqąԥqąՈL 7eȱeťiåiđđL 7eȱeťiB}L<eȱeťiL:<eȱeťiLi<eȱeťiL<eȱeťiőđL6B}eȱeňeԅȱeՅL6eȱeťiñ‘ąՈ‘ąL6eȱeűąՈąL6eȱeňąԄL6B} ԄL 7L 7L?56ȱeťiñ‘ąՈ‘ąL6eȱeűąՈąL6eȱeňąԄL6@%S??Lo?Can't find D1:ENGINE.OBJ @ VaD?EBJ VVD?E BI Vl IHEDB V0ʭDF}?E?8HI V B VL,o? VVD?E BI Vl IHEDB V0ʭDD},to,len) move len# of bytes at address one, to address two. *//* No check is made to see if from string is overwriting to stN?}ring */ asm 0x2C6F;normalize() /* (filename,ext) will convert filename to uppercase, *//* append the extension if there iN@}sn't one already, *//* and add D1: to the front if a drive isn't specified *//* Example: normalize(fname,"C") where fname="NA}test" will change fname to: *//* "D1:TEST.C" *//* One can change the default drive with the statement: *//* poke(dpeek(0x2NB}CB4),'n'); where n is the drive number *//* To make it permanent, you must now save it to ENGINE.OBJ *//* The load parameteNC}rs can be found by using COMPACT.COM. (see COMPACT.TXT) */ asm 0x2C72;open() /* (iocb,ax1,ax2,fname) same as Basic open *ND}/ asm 0x2C75;peek() /* (addr) returns byte at addr (same as Basic) */ asm 0x2C78;plot() /* (x,y) plot point at x,y. PoNE}int color set by color(c) */ asm 0x2C7B;poke() /* (addr,c) poke c into addr, returns previous value */ asm 0x2C7E;positNF}ion() /* (x,y) position cursor at x,y (same as Basic) */ asm 0x2C81;printf() /* see file PRINTF.TXT for explanation */ aNG}sm 0x2C84;putchar() /* (c) send c to the screen */ asm 0x2C87;rnd() /* (n) return random integer between 0 and n inclusivNH}e. *//* if you want 0-255, use rnd(0) which is faster */ asm 0x2C8A;sfind() /* (s1,s2) search for string s2 in s1 and retNI}urn position if found, *//* else return -1 */ asm 0x2C8D;slow() /* turn on screen again after fast() */ asm 0x2C90;souNJ}nd() /* (voice,pitch,distortion,volume) same as Basic */ asm 0x2C93;stick() /* (n) returns value of joystick #n */ asm 0NK}x2C96;strcat() /* (s1,s2) append string 2 to end of string 1 */ asm 0x2C99;strcmp() /* (s1,s2) subtracts string 2 from stNL}ring 1. *//* It will return the first non-zero difference. *//* Example: strcmp("Ab","ab") returns -32 *//* Example: strcmNM}p("ab","Ab") returns 32 *//* Example: strcmp("ab","ab") returns 0 */ asm 0x2C9C;strcpy() /* (to,from) copy string 2 to stNN}ring 1 */ asm 0x2C9F;strig() /* (n) return trigger button value of joystick #n */ asm 0x2CA2;strlen() /* (str) returns NO}length of string */ asm 0x2CA5;tolower() /* (c) return lowercase value of c */ asm 0x2CA8;toupper() /* (c) returns uppeNP}rcase value of c */ asm 0x2CAB;usr() /* (addr,args) does a JSR to addr, returns integer (A=low byte, X=high byte *//* 0xBNQ}F=number of arguements, 0xC6=stack pointer to arguements */ asm 0x2CAE;val() /* (addr) returns integer value of string at NR}addr (same as Basic) */ asm 0x2CB1;closeall() $( /* close all iocb's */ int i; for(i=1;i<8;++i) close(i);$)getreNS}ad(s,ext) /* get the file name from the user, *//* normalize it with the extension, and open it for reading *//* Returns thNT}e iocb number */char s[],ext[];$( int iocb; getname(s); iocb=0; while(iocb<1) $( normalize(s,ext); iocb=copNU}en(s,'r'); if(iocb<1) $( printf("can't open %s\n",s); getname(s); $) $) return iocb;$)getname(s) /*NV} request the filename from the user */char s[];$( printf("filename (or RETURN to exit)? "); gets(s); if(!s[0]) $( NW} putchar(''); putchar(''); exit(); $)$) printf("filename (or RETURN to exit)? "); gets(s); if(!s[0]) $( L5/* graphics and game i/o *//* */#define RAMTOP 0x6A#define PMCOLOR 0x2C0#define SDMCTL 0x22F#define GRACTL 0xD01D#definRY}e CHBASE 0x2F4#define PMBASE 0xD407#define PLSIZE 0xD008#define HPOSPL 0xD000#define PLTOPF 0xD004#define PLTOPL 0xD00CRZ}#define HITCLR 0xD01E#define OLDCHSET 0xE000#define GRAF 0xD00Dchar *playbase,*charbase,playsize;/* *//* initialize playR[}ers *//* */pminit() /* this must be called before any use of the following PM functions */$( int i; charbase=(peek(RAMR\}TOP)-12)<<8; poke(PMBASE,peek(RAMTOP)-8); playbase=(peek(RAMTOP)-8)<<8; poke(RAMTOP,peek(RAMTOP)-16); graphics(0); R]}pmgraphics(0); move(OLDCHSET,charbase,1024); poke(CHBASE,charbase>>8);$)pmflush() /* call this before returning to DOS R^}to turn off PM graphics */$( pmgraphics(0); poke(CHBASE,OLDCHSET>>8); poke(RAMTOP,peek(RAMTOP)+16); graphics(0);$)R_}/* Set up PM graphics *//* i=0 > inhibits PM graphics *//* i=1 > single line resolution *//* i=2 > double line resolution R`}*/pmgraphics(i)int i;$( int j; if(i) $( poke(SDMCTL,i==1 ? 0x3E : 0x2E); /* enable DMA */ poke(GRACTL,3); Ra}playsize= (i==1) ? 8 : 7; clear(playbase,2048); playbase += (i==1) ? 1024 : 512; for(j=0;j<4;++j) poke(HPOSPL+j,0Rb}); $) else $( poke(SDMCTL,0x22); poke(GRACTL,0); for(j=0;j<4;++j) $( poke(HPOSPL+j,0); poke(GRAF+Rc}j,0); $) $)$)hitclear() /* clears the collision registers */$( poke(HITCLR,0);$)pmcolor(n,hue,intensity) /* workRd}s like setcolor(), defines color of player n */char n,hue,intensity;$( poke(PMCOLOR+n,(hue<<4)+intensity);$)/* define pRe}layer width *//* width=0 > normal width *//* width=1 > double normal width *//* width=3 > four times normal width */pmwidRf}th(n,width)char n,width;$( poke(PLSIZE+n,width);$)/* *//* hitpf() and hitpl() return a 1 if who collided with hitwho, Rg}otherwise it will return 0. *//* if hitwho is minus, a collision with any hitwho will return a 1 *//* */hitpf(who,hitwho) Rh}/* player-playfield collisions */int who,hitwho;$( if(hitwho<0) return peek(PLTOPF+who); /* if hitwho is minus, check forRi} any collision */ return (1<200) $( dx[n]=-1; continue; $) if(y[n]223) $( dy[n]=-1; continue; $)/* if wV}e were looking for who we collided with, we would use hitpl(who,hitwho) */ if(hitpl(n,-1)) $( /* did it hit anyone? */V} dx[n]=rnd(3)-1; while(!(dx[n]=rnd(3)-1)); while(!(dy[n]=rnd(3)-1)); y[n]+=dy[n]; plmoV}ve(n,x[n],y[n],shape[n]); pmclear(n); chget(rnd(127)+1,shape[n]+2); /* new shape drawn from character base */V} hitclear(); $) $) $)$) chget(rnd(127)+1,shape[n]+2); /* new shape drawn from character base */T-/* This program formats C files *//* See CFORMAT.TXT for a detailed explanation of what if does *//* */#define PAD 2 /* nuZ}mber of spaces to indent after a "$(" */#define SPACE 32#define TAB 127#define EOL 155int iocb,count,i,length,csflag,dflaZ}g,iocb2;char s[20],c,lastchar,nextchar,*bufptr,*endptr,bak[20];main() $( int backup; char *maxsize,*address; /* addressZ} MUST be the last variable defined!!! */ address=&address+100; /* This is the address for the text */ maxsize=0xBC00-addrZ}ess; /* Maximum text length */ printf("\f\t The ACE C Formatter\n\t by Ralph Walden\n\n"); printf("^M will insert a rZ}eturn\n^N will delete through the next return\n\n"); while(1) $( /* loop until user indicates no more files via getname() fZ}unction */ dflag=csflag=iocb=count=lastchar=c=backup=0; slow(); getname(s); printf("Do you want a back-up? (YZ}/N)"); if(tolower(getkey())=='y') backup=1; putchar('\n'); fast(); closeall(); strcpy(bak,s); normaliZ}ze(s,"C"); if(backup) $( if(i=find(bak,strlen(bak),'.')) *(bak+i)=0; /* erase the period */ normalize(bak,"BAZ}K"); printf("\u%s <<< %s\n\n",s,bak); $) else printf("\u%s (no back-up)\n\n",s); if((iocb=copen(s,'r'))=maxsize) $( printf("Text exceeds %dK\nZ}You wouldn't be able to link\nit either!\n",length/1024); continue; $) if(backup) $( if((iocb2=copen(bak,Z}'w'))>0) $( bputs(address,length,iocb2); /* write all of the text to a backup */ close(iocb2); $) Z} else $( printf("I can't open %s\nShall I continue without a back-up?\n(Y/N)",bak); if(toupper(getkey())!='Y'Z}) continue; $) $) endptr=address+length; /* get the length of the text */ *(endptr+1)=EOL; /* to avoid someZ} checks for end of buffer */ if((iocb=copen(s,'w'))<0) $( printf("Can't open %s\n",s); continue; $) bZ}ufptr=address; while((i=find(address,length,TAB))>=0) *(bufptr+i)=SPACE; /* convert tabs to spaces */ while(*bufptr==Z}SPACE) ++bufptr; /* remove any starting spaces */ for(;bufptr'd') && (c != EOL)) out(*bufptr++); if(c==13) c=EOL; /* convert control M to a RETURN */ switch(c) $( Z} case SPACE: /* remove all but one space */ out(SPACE); while(*bufptr==SPACE) ++bufptr; --bufptZ}r; /* in order to read next character */ break; case 'b': /* handles "break" statements */ if(matZ}ch(bufptr,"break;")) $( if(dflag) $( /* break after a default */ count-=PAD; csflag=dZ}flag=0; $) else if(csflag) $( /* break after a case */ count-=PAD; csflagZ}=0; $) $) out(c); break; case 'c': /* handles "case" statement */ Z} if(match(bufptr,"case ")) $( csflag=1; /* indicate we are dealing with a case */ count+=PAD; /* incrZ}ease the indentation */ $) out(c); break; case 'd': /* handles "default" statement */ Z} if(match(bufptr,"default")) $( ++dflag; /* indicate that we have a default */ count+=PAD; Z} $) out(c); break; case '0': /* convert all hex to upper case */ out(c); Z} if(tolower(*(bufptr+1))=='x') $( out(*(bufptr+1)); bufptr+=2; while(hex(*bufptr)) out(Z}toupper(*bufptr++)); --bufptr; /* so we will read it at top of loop */ $) break; caseZ} '$': /* this handles $( and $) */ nextchar= *(bufptr+1); lastchar= *(bufptr-1); if(nextchar=='Z}(') $( if((lastchar != SPACE) && (lastchar != EOL) && (*(bufptr-2) != EOL)) out(SPACE); /* add a space */ Z} count+=PAD; $) out(c); if(nextchar==')') count-=PAD; break; case '&': /*Z} separate || and && with spaces */ case '|': lastchar= *(bufptr-1); if(lastchar==c) $( Z} out(c); if(*(bufptr+1)!=SPACE) out(SPACE); $) else if((*(bufptr+1)==c) && (lastchar!=SPACE)Z}) $( out(SPACE); out(c); $) else out(c); break; case '/': /* thZ}is handles comments */ if(*(bufptr+1)=='*') $( out(*bufptr++); /* '/' */ out(*bufptr++); /*Z} '*' */ while(1) $( /* find the end of the comment */ while((*bufptr != EOL) && (*bufptr != '*')) $Z}( out(*bufptr++); $) out(*bufptr); if(*bufptr == EOL) $( /* if the Z}comment continues to the next line, we must add a '/*' */ i=1; while(*(bufptr+i)==SPACE) ++i;Z} if(*(bufptr+i) != '/') $( out('/'); /* start the new line with a comment it it isn't alreaZ}dy there */ out('*'); out(SPACE); $) $) else Z}if(*(bufptr+1)=='/') break; /* end of comment */ ++bufptr; /* not the end of the comment, so we continue the loZ}op */ $) $) else out(c); break; case EOL: /* this handles all returns */ Z} out(c); if((bufptr+2)='0' && c<='9') || Z}(tolower(c)>='a' && tolower(c)<='f')) return 1; else return 0;$)haracter or not */char c;$( if((c>='0' && c<='9') || XD/* Sieve of Eratosthenes *//* See BYTE , January 1983, for comparision with other computers *//* Takes about 5 minutes to r^}un, with the screen off */#define TRUE 1#define FALSE 0#define SIZE 8190char flags[SIZE+1];main() $( int i,prime,k,cou^}nt,iter; printf("10 iterations\n"); fast(); dpoke(19,0); for(iter=1;iter <= 10;++iter) $( count=0; for(i=0;i ^}<= SIZE;++i) flags[i]=TRUE; for(i=0;i <= SIZE;++i) $( if(flags[i]) $( prime=i+i+3; for(k=i+prime;k<^}=SIZE;k += prime) flags[k]=FALSE; ++count; $) $) $) k=gtime()/60; slow(); printf("%d primes (1899)\^}n",count); printf("%d seconds\n",k);$)++count; $) $) $) k=gtime()/60; slow(); printf("%d primes (1899)\\*/* File compacter. This will compact files with multiple load segments. *//* It is useful for .COM files produced by C, andb} assembly language object files. *//* Binary file must not exceed 6K! (about 49 sectors) */char *buf,*begin,*end,*place,*enb}dbuf,name[20];main() $(int iocb,tmp; iocb=getread(name,"COM"); buf=0x5000; endbuf=bgets(buf,0x6000,iocb)+buf; if(geb}tint(buf) != 0xFFFF) $( printf("Not a binary file!\n"); getkey(); exit(); $) buf+=2; /* get past the header *b}/ place=buf; while(1) $( if((begin=getint(place))<0) break; /* end of file? */ end=getint(place+2); /* end of firb}st module */ printf("\n%x - %x",begin,end); tmp=(end-begin)+5+place; if(tmp>=endbuf) break; /* end of file */ b} if(getint(tmp)==(end+1)) $( /* compact it */ printf(" Compacted"); *(place+2)=*(tmp+2); *(place+3)=*(tmpb}+3); move(tmp+4,tmp,endbuf-tmp); endbuf-=4; $) else place=tmp; $) close(iocb); copen(name,'w'); bb}uf-=2; /* this is to get the header we discarde at the beginning */ iocb=bputs(buf,endbuf-buf,iocb); close(iocb); putchb}ar(155); slow();$)getint(where)char *where;$( if(where>endbuf) return -1; /* end of the file */ return *where+(*(whb}ere+1)<<8);$)();$)getint(where)char *where;$( if(where>endbuf) return -1; /* end of the file */ return *where+(*(wh`/* File compare *//* This program will compare two files and tell you if they are the same */int n1,n2,count,c,c2,a1,a2,a3;f}char name1[20],name2[20];main() $( printf("Filename #1? "); gets(name1); printf("Filename #2? "); gets(name2); nof}rmalize(name1," "); normalize(name2," "); if((n1=copen(name1,'r'))<0) $( printf("can't open %s\n",name1); getkey(f}); exit(); $) if((n2=copen(name2,'r'))<0) $( printf("can't open %s\n",name2); getkey(); exit(); $) a1f}=a2=a3=count=0; fast(); while((c=cgetc(n1))>=0) $( if(c!=(c2=cgetc(n2))) $( slow(); printf("f} %d\n%s != %s\n%d != %d $%x != $%x",count,name1,name2,c,c2,c,c2); printf(" '%c' != '%c'\n",c,c2); f}printf("$%x $%x $%x >%x< $%x $%x $%x\n",a1,a2,a3,c,cgetc(n1),cgetc(n1),cgetc(n1)); exit(); $) ++count; a1=af}2; a2=a3; a3=c; $) if((cgetc(n2)>0)) $( slow(); printf("%s %s\n",name2,name1); exit();f} $) slow(); printf("%s == %s\n",name1,name2); exit();$) printf("%s %s\n",name2,name1); exit();dA