@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 HdF=EIiX;nX;STREAMLINERs"X;Atari 8-bit Ver 1.00 06-28-86x$X;Copyright 1986 Analog Computing}X;Programmed by JamT}es HagueX;X; SYSTEM EQUATESX;---------------- POKMSK RTCLOK RAMTOPjSDMCTL/COLDSTDU}SDLSTL0SHFLOKINVFLG CH SKCTL- AUDF1 AUDC1AUDCTLCOLOR0COLOR1V}COLOR2COLOR3COLBAK ICCOMB ICBALD ICBAHE ICBLLH ICBLHI ICAX1J W} ICAX2K IRQENSIOINVe CIOVVX;"X; CONSTANTS'X;-----------,EOL;;EOL (CR) char1X;6X; VAX}RIBALES;X;-----------@EX;JFNAME;;FileNAMEOFNAMEL;;FileNAME LengthTFINDEOF;;Check EOF flagYSTARTY};;seg START addr^END;;seg END addrcLSEGEND;;Last SEG ENDhLENDPTR;;Last END PnTRmPERIOD;;"." typed Z}flagrLOCKED;;file LOCKED flgwBYTESR;;bcd BYTES Read|BYTESW;;bcd BYTES WritnEXTRAB;;bcd EXTRA bytes[}EXTRAS;;bcd EXTRA segtsTEMP;;Work areaPNT;;misc. PoiNTerBPNT;;Buffer PoiNTerTSAVE;;Text SAVE\} areaX;!X;X; RESERVED MEMORYX;-----------------DISP;;DISPlay memoryX;X; DISPLAY LISTX;----]}----------DL p=p=p p=p=p G DISP p  p ======= p === A^} DLX; X; MAIN BODYX;-----------MAIN-;;Kill decimal!! SETUP;;Go set-up!&LOOP INIT;;Get ready,+ GET_}NAME;;get name,0 READ;;read file,5GLOOP;;and write it: WRITE;;if no errors!? !LOOPDX;IX; ONE-SHOT SET-UPNX;-`}----------------S SETUPX SIOINV;;Initialize]Q>;;sound hardwareb PSKCTLgQ>p;;Disable breaklPPOKMSK;;key...q a}PIRQENv$>;;Reboot upon{&COLDST;;hitting reset0&AUDC1;;Clear sound&AUDCTL;;channelsPSDMCTL;;Turn off DMb}AX;A;;Clear displayCLSPDISP9;;memory (416PDISP9;;bytes) in 22;;groups of 208(>;;bytes each...HCc}LSX;$>;;Print titlePWLABQTITLE9;;lines... PDISP9QWLAB19;;Window 1 label, PDISP 9QWLAB29;;and wind}dow 2PDISP 9;;label...0 IPWLABX;$>;;Print mainPLABQLAB29;;Print mainPDISP9;;labels inQLAe}B39;;informationPDISP9;;window... QLAB49  PDISP9 QLAB59 PDISP90  IPLAB%X;*$>;;Init color/f}SETCLRQCOLORS9;;regs...4 PCOLOR0990> ISETCLRCX;HQ>4DL;;Point to newMPSDLSTL;;display list...R Q>5DLWPSDg}LSTL\Q>!;;and enale DMAaPSDMCTL;;for narrow pffX;kX;open keyboard for input onpX;channel 2uX;z$> ;;Channeh}l 2Q>;;Set command toPICCOM9;;"open"Q>4KEYBD;;Point toPICBAL9;;keyboardQ>5KEYBD;;filespec... PICBAH9i}Q>;;Specify input PICAX19Q>;;AUX2 is unused PICAX29!CIOV;;Call cio!X;X;title & window labelsX;j}TITLE ASTREAMLINER V1.0A =A BY JAMES HAGA =AUE AWLAB1 =A INFOA =ARMATION WINDOA =Ak}W AWLAB2 =A INTEA =ARACTION WINDOA =AW AX;X;status labelsX;LAB2 ABytesl} Read________A A__ A LAB3 ABytes Written_____A A__ ALAB4 AExtra Bytes_______A A____ALAB5 AExtra Sm}egments____A$ A____A)X;.X;initial colors3X;8COLORS F= ====X;BX;keyboard filespecGX;LKEYBD AK:A=n}EOLQX;VX; SHOW 2 BCD DIGITS[X;-------------------`X;in: a - bcd bytee!X; y - offset from start ofjX; ino}fo windowoBCDt5;;Save bcdy;;;Convert 1st~W?;;digit toV?;;a character...V?V?PDISP@8;;and show it3;;p}Next position7;;Get bcd backM>;;Keep lower halfL>;;Convert it andPDISP@8;;show it!3;;Next space:Xq};X; SHOW BYTES READX;----------------- SHOBR$>;;3 bytes total%>W;;Set positionSBRQBYTESR9;;Get bcd bytr}e BCD;;and show it!0;;Do next digitISBR:X;X; SHOW BYTES WRITTENX;-------------------- SHOBW$>;s};3 bytes total %>w;;Set positionSBWQBYTESW9;;Get bcd byte BCD;;and show it!0;;Get next digitISBW#:(X;-t}X; SHOW EXTRA BYTES2X;------------------7 SHOEB<%>;;Set cursorAQEXTRAB;;Get 1st byteF BCD;;and show it!Ku}QEXTRAB;;Get next oneP!BCD;;and show it!UX;ZX; SHOW EXTRA SEGMENTS_X;---------------------dSHOES%>;;Position cv}ursoriQEXTRAS;;Get 1st byten BCD;;and show itsQEXTRAS;;Get 2nd bytex!BCD;;and display!}X;X; GET KEYPRESSw}X;-------------- GETKEYQ>@;;Clear shift &PSHFLOK;;control keys$> ;;Use IOCB #2Q>;;Set to "getPICCOMx}9;;character" modeQ>PICBLL9;;Buffer lengthPICBLH9;;to zeroPINVFLG;;Inverse key off!CIOV;;Get a keypress!y}X;X; CLOSE IOCB #1X;--------------- CLOSE1$>;;Set IOCB to 1Q> ;;"close" command PICCOM9!CIOV;;Cloz}se it up!X;X; INITIALIZAIONX;---------------INITQ>4BUFFER;;Point toPBPNT;;start of buffer  Q>5BUFFER{} PBPNTX;Q>;;Clear filePLOCKED;;locked flag"$>'CLRBPBYTESR9;;Clear read &,PBYTESW9;;write counters1|}06 ICLRB;X;@$>;;Clear extraECLREPEXTRAB9;;counters...J PEXTRAS9O0T ICLREYX;^$>;;Print filecPRTNO}}NEQFLAB9;;label inhPDISPc9;;informationm0;;window...r IPRTNONEw SHOBR;;Show all other| SHOBW;;status info...~} SHOEB !SHOESX;FLAB AFile_____________A A_____NONEAX;X; PRINT MESSAGEX;---------------X;in: x -} text lo byteX; y - text hi byteX; PRINT&PNT;;Save text'PNT;;address%>;;Print textDOCHARQ@PN}T7;until anR>EOL;;EOL is reached FPADITPDISP`83 HDOCHARX;PADITQ>;;Now pad theDOPAD)> ;;rest} of theEPREXIT;;line withPDISP`8;;blanks...3 HDOPAD  PREXIT:X;X; ERROR SET-UPX;--------------!"X};in: x - error message lo byte&"X; y - error message hi byte+X;0 ERRSET5A;;Save lo byte...:5? CLRLINE;;Clear l}ineDX;IX;Make a "ding" soundNX;S$>;;Initial volumeXQ>;;Set channel 1]PAUDF1;;frequencybLOWER&AUDC1;;and }controlgQ>;;Wait for a fewlPRTCLOK;;jiffies...qDELAYQRTCLOKvR>{ DDELAY0;;and loop until(>;;the volum}e isELOWER;;zeroX;7;;Get lo byte>;;back & print PRINT;;error message!CLRKBD;;Clear keyboardX;X; GE}T FILENAMEX;-------------- GETNAME$>4MSG01;;Print "Enter%>5MSG01;;filename" PRINT;;prompt$>;;Set filen}ame&FNAMEL;;lengthPRTD1QD19;;Load "D1:"PFNAME9;;into FNAME;;;Convert charS> ;;to internalPDISPp9;;}and show it0 IPRTD1 CLRKBD;;Clear keyboard2;;Clear period&PERIOD;;flagX;  X;read filename from keyboard}X;!NEXTKEY$FNAMEL;;Print cursor2;;in correct Q>?;;position...%PDISPp9* GETKEY;;Get a keypress/$FNAMEL};;First char past4(>;;"D1:"?9FFIRSTC;;Yes, skip this>X;CR>EOL;;EOL?HHNOTEOL;;No, its notMQFNAME9;;Yup! Mak}e sureRR> .;;that the lastWHACCEPT;;char is not a\"FNAMEL;;perioda0fACCEPT2;;Tack an EOL tokQ>EOL;;the end of} thepPFNAME9;;filenameu!PFN;;"." then leave!zX;NOTEOLR>~;;Backspace?HNOBAK;;No way Jose!QPERIOD;;Period }flg set?FNODOT;;Nope, ignore it"PERIOD;;Yup, dec it!NODOTQ>;;Print a space2;;on the screenPDISPp9;;an}d shorten"FNAMEL;;the name lengthHNEXTKEY;;Get next char!X;NOBAK%PERIOD;;Is extension)>;;all done?FN}EXTKEY;;Yes, ignore!R> .;;Is key a "."?HNOPER;;No, its not%PERIOD;;Accept only ifHNEXTKEY;;it is the 1st!#}PERIOD;;Set per flag2;;Add 1 to name&FNAMEL;;lengthPFNAME9;;Save "."Q>;;and showPDISPp9;;onscreenH}NEXTKEY;;Get next key!X; NOPERR> 0;;Is key a digit? DNEXT;;Yes, its legal R> :;;since its not DGOODKEY;;the 1st} char! FIRSTCR> [;;Is it a letter? ENEXT;;Yep, then its R> A;;always good!$ EGOODKEY) NEXT!NEXTKEY. X;3 GOODK}EY%PERIOD;;Period set?8 HKEYOK;;No, its OK!= (> ;;Any room?B FNEXT;;Nope, all fullG KEYOK2;;Add 1 to nameL &FNAMEL};;lengthQ PFNAME9;;and save charV ;;;Convert to[ S> ;;internal and` PDISPp9;;show it!e QPERIOD;;Past a period?j }FNEXT;;No, just leave!o #PERIOD;;Yes, inc flagt HNEXT;;and leave!y X;~ "X;now print the filename in its $X;correct spo}t in the info window X; PFNQ>;;Calculate where ;;;to start SFNAMEL;;printing it ? $>;;Now print it! PRNA}MEQFNAME9;;Get a char ;;;convert to S> ;;internal coding PDISPn8;;and print it (FNAMEL;;All done? FPRINTED;;}Yep, go home! 2;;Else, do 3;;another for HPRNAME;;mother! PRINTED:;;Bye y'all! X; X;initial filename X; D1} AD1:A X; X;filename prompt X; MSG01 A Enter filenameA  EOL X; X; CLEAR KEYBOARD X;---------------- CL}RKBD Q> PCH# :( X;- X; SET FILENAME FOR CIO2 X;----------------------7 X;in: x - IOCB #< X;A SETFILEF Q>4FNA}MEK PICBAL9P Q>5FNAMEU PICBAH9Z :_ X;d X; INC EXTRA BYTE COUNTERi X;------------------------n X;in: a - bcd number} to adds X;x ADDEB} <;;Decimal mode! ,;;Add acc. to OEXTRAB;;extra byte PEXTRAB;;counter... Q> OEXTRAB} PEXTRAB -;;Decimal off!  SHOEB;;Print new value : X; X; PUT BYTE IN BUFFER X;-------------------- #X;in: } a - byte to put in buffer X;out: y - $FF for error X; 0 for success X; PUTBUF $RAMTOP;;Any space in (}BPNT;;buffer? HNOTFULL;;Yes, put byte $>4BFMSG;;No, prepare %>5BFMSG;;for an error ERRSET  GETKEY;;Wait fo}r a key %;;Return error :;;code and leave! X; NOTFULL%>;;Put byte into P@BPNT7;;ram buffer QBPNT;;then add} 1 to ,;;the buffer O>;;pointer..." PBPNT' QBPNT, O>1 PBPNT6 %>;;Return success; :;;code and leave!@} X;E X;buffer full error messageJ X;O BFMSG A File too large.AT  A Press a key.AY  EOL^ X;c X; GENERIC IO ERROR }HANDLERh X;--------------------------m X;in: y - error numberr X;out: y - 0 to retry, elsew X; error # (abort)| }X; IOERROR C;;Save error # on 5;;stack twice... 5 $>';;Save text that SAVLINQDISP`9;;is on the PTSAVE9};;interaction 0;;line... ISAVLIN X; $>4IOMSG;;Prepare for %>5IOMSG;;error handling ERRSET Q>;;Print a '1}' on PDISPk;;text line 7;;Get # back ;;;Subtract 100... S>d $>;;Divide result DIV10R> ;;by 10 with the }DDIVIDED;;quotient in x ;;;and remainder S> ;;in acc... 2 HDIV10 DIVIDEDL>;;Convert both to PDISPm;;in}ternal code A;;and print... L> PDISPl X; RORA GETKEY;;Get a keypress! R> R;;(R)etry?& HNOTR;;Nope, not R}+ 7;;It's an R!0 $>';;So, restore the5 RESTOREQTSAVE9;;old text...: PDISP`9? 0D IRESTOREI %>;;& return 0...N} :S NOTRR> A;;(A)bort?X HRORA;;Nope, wait] 7;;Yes, returnb ?;;error code...g :l X;q IOMSG A I/O Error . RAv  }Aetry or Abort?A{  EOL X; X; GET BYTE FROM CHANNEL 1 X;------------------------- #X;out: y - 0=success, or error #} X; a - byte read X; "X;If FINDEOF is not zero and an #X;EOF is found, error processing $X;will be bypassed, but th}e error !X;code will still be returned. X; GET1 $>;;IO channel 1 Q>;;Open command PICCOM9 Q>;;Set length} to PICBLL9;;1 char... PICBLH9  CIOV;;Go get it! GOHNO;;Check error! 5;;Save char <;;Decimal on! QBYTESR;;}Now add 1 to ,;;to "bytes read" O>;;counter... PBYTESR QBYTESR O> PBYTESR;;Can u bonk? QBYTESR} O>;; PBYTESR -;;Decimal off!%  SHOBR;;Show new value!* 7;;Get char back &/ %>;;return success!4 :9 X;> }OHNOQFINDEOF;;Error! FlagC FSOWHAT;;EOF? Nope.H )>;;Yes, is it anM HSOWHAT;;EOF? Nope.R C;;Yes, returnW ?;;error }code!\ :a SOWHAT IOERROR;;Handle af FGET1;;standard errork :;;and return.p X;u X; CLEAR INTERACTION LINEz X;-------}----------------- CLRLINE $>';;Clear 40 bytes Q> CLLPDISP`9 0 ICLL : X; X; READ/COMPRESS FILE X};-------------------- !X;out: y - 0=success, $FF=ugh! X; READ  CLRLINE;;Clear line  CLOSE1;;Close IOCB #1 $>;};Open IOCB #1: Q>;;open command... PICCOM9  SETFILE;;Set filename Q>;;Open for input PICAX19;;only Q>;;C}lear 2nd aux PICAX29;;byte as well as PLSEGEND;;a few vars... PLSEGEND PFINDEOF CIOV;;Open it, Nat!I:O}PENOK;;No errors! X;$>4OEMSG;;Uh-oh: error!%>5OEMSG;;Do error ERRSET;;stuff :NOSIR GETKEY;;Get keypress$R}> R;;(R)etry?)FREAD;;Ja, retry it!.R> A;;(A)bort?3H:NOSIR;;Nah!8F:RETERR;;Yes, stop!=X;BX;make sure file is bi}naryGX;L:OPENOK GET1;;Get 1st byteQI:NOERR;;No read errors!V!:ERR CLOSE1;;Crud! an error![:RETERR%>;;Return }error` :;;flage:NOERRPTEMP;;Save 1st bytej GET1;;Get 2nd byteoG:ERR;;Check errortR>;;Does byte=$FF?yH:NOTBI}N;;No! Not binary~QTEMP;;Check 1st byteR>;;is it $FF?F:BIN;;Yes! Whew!:NOTBIN$>4NBMSG;;The file%>5NBMSG;};is not binary ERRSET;;so abort and GETKEY;;return error!:ERR;;flag in Y. :BIN PUTBUF;;Well, the fileG:ER}R;;is binary soQ>;;put 2 $FF's in PUTBUF;;the RAM buffer G:ERRX;$>4RDMSG;;Print%>5RDMSG;;"Reading..."} PRINT;;messageX;X;read the segment headerX;information and determineX;if a "fake" binary header X;exists}X;:GETST#FINDEOF;;EOF=ok GET1;;Get a byteI:OK;;No errors!)>;;EOF found?H:ERR;;No, an error!  CLOSE1;};Yes, the file%>;;has been read:;;successfully!:OK"FINDEOF;;EOF=badPSTART;;Save start#PTEMP;;address lo b}yte( GET1;;Get hi byte-G:ERR;;Check error2PSTART;;Save byte...7 PTEMP<R>;;If the startAH:GETEND;;addr}ess=$FFFFFQTEMP;;then its notKR>;;the start addr-PH:GETEND;;ess and can beUQ>;;removed...Z ADDEB_!:GETST;};Try again!dX;i :GETEND GET1;;Get end addr-nG:ERR;;ess lo bytesPEND;;and save itx GET1;;Now get hi}G:ERR;;by}te... PENDX;!X;check if this segment can beX;combined with the last oneX;QTEMP;;If this seg-;;;ment's} startS>;;address-1PTEMP;;equals the lastQTEMP;;segment's end-S>;;ing addressPTEMP;;then the two}RLSEGEND;;segments canH:NOCONT;;be combinedQTEMP;;(they areRLSEGEND;;contiguous) H:NOCONTX;%>;;C}ombine 'em!QEND;;Merge the twoP@LENDPTR7;;segments by3;;making the 1stQEND;;have the 2nd'sP@LENDPTR7;;e}nding adrQ>;;Record 4 extra ADDEB;;bytes and<;;1 extra seg...  QEXTRAS,O> PEXTRASQEXTRAS"O>}'PEXTRAS,-1 SHOES;;Show new value6!:NEWEND;;Load seg data!;X;@!:NOCONTQSTART;;Don't combineE PUTBUF;;}so record theJI:GOOD;;new segment'sO:ERR2!:ERR;;header data...T:GOODQSTARTY PUTBUF^ G:ERR2cQBPNT;;(save} the loc.hPLENDPTR;;of the endingmQBPNT;;address...)rPLENDPTRwQEND| PUTBUF G:ERR2 QEND PUTB}UF G:ERR2 :NEWENDQEND;;Record the newPLSEGEND;;ending address QENDPLSEGENDX;!X;read the actual s}egment data X;into RAMX;:LOAD GET1;;Get a byte... G:ERR2 PUTBUF;;& save it G:ERR2QSTART;;All bytes} read?REND;;If so, try toD:MORE;;get anotherQSTART;;segment!REND D:MORE !:GETST :MOREQSTART;;Els}e, add 1 to,;;the byte countO>;;and keep onPSTART;;readin'! QSTART O> PSTART !:LOADX;!X;m}isc. messages&X;+OEMSG ACan't open file. A0 ARetry or Abort?A5 EOL:NBMSG ANot a binary fileA? A. Press a }key.AD EOLIRDMSG A Reading fAN Aile...AS EOLXX;]bX;gX; WRITE BUFFER TO DISKlX;----------------}------q WRITEvQ>;;Clear locked{PLOCKED;;flag CLOSE1;;Close IOCB #1QEXTRAB;;If no bytesH:OPEN;;were remov}edQEXTRAB;;then there isH:OPEN;;no need to$>4NNMSG;;rewrite the%>5NNMSG;;file... ERRSET GETKEY:}X;#X;open the file for input; if itX;is locked, unlock itX;:OPEN CLRLINE;;Clear text$>;;IOCB #1Q>;;}Open command... PICCOM9 SETFILE;;Set filenameQ>;;Input mode... PICAX19Q> PICAX29 CIOV;;Open file!}I:OPENOK;;No errors!)>;;File locked?F:UNLOCK;;Yes, unlock it! IOERROR;;No, its just a F:OPEN;;standard err}or:X; :UNLOCK#LOCKED;;Record this :RETRY$>;;Use IOCB #1%Q>$;;Unlock command* PICCOM9/ SETFILE;;Set fil}ename4Q>;;Clear aux...9 PICAX19> PICAX29C CIOV;;Unlock file!HG:ERR;;Handle error!M CLOSE1;;Close file &R!}:OPEN;;re-open!W:ERR IOERROR;;Handle any\F:RETRY;;IO errorsa:fX;k!X;now dump the buffer to disk,pX;one byte at }a timeuX;z:OPENOK$>4WRMSG;;Print%>5WRMSG;;"Writing..." PRINT;;messageQ>4BUFFER;;Point toPSTART;;start o}f RAMQ>5BUFFER;;buffer... PSTARTX;:DUMP$>;;Prepare to putQ> ;;a byte to diskPICCOM9;;using IOCB #1} SETFILE;;Set filenameQ>;;Set length to 1 PICBLL9 PICBLH9%>;;Get byte fromQ@START7;;RAM buffer & }CIOV;;write to disk!I:NOERR;;No errors! IOERROR;;An error!F:DUMP;;R)etry!CLOSE1;;A)bort:NOERR<;;Decimal o}n!QBYTESW;;Add 1 to the,;;"bytes written"O>;;counter... PBYTESWQBYTESWO> PBYTESWQBYTESW}O>PBYTESW-;;Decimal off!$ SHOBW;;Show new value!)QSTART;;Move to next.,;;byte in buffer3O>8 PS}TART= QSTARTBO>G PSTARTLRBPNT;;If not lastQH:DUMP;;byte then keepVQSTART;;on writin![ RBPNT` H:}DUMPeX;j#X;close file & lock if necessaryoX;t CLOSE1;;Close up fileyQLOCKED;;Re-lock it?~F:BYE;;Nah!:REL$>};;Prepare IOCB 1Q>#;;for re-lockingPICCOM9;;procedure... SETFILEQ> PICAX19 PICAX29 CIOV;;Lock 'er} up!I:BYE;;No errors! IOERRORF:REL;;R)etry :;;A)bort:BYE CLOSE1;;Close IOCB #1$>4DNMSG;;Print "Done"}%>5DNMSG;;message... PRINT CLRKBD;;Clear keyboard!GETKEY;;& wait for keyX;X;misc. messagesX;NNMSG }ANo need to rewritA Ae. Press a key.A EOLWRMSG A Writing fA Aile...A EOL DNMSG A Done.} PresA As a key.A EOLX; BUFFER #X;(- MAIN2riting fA Aile...A EOL DNMSG A Done.G"*ppppppG!pppA" " $ %% '0 (L" e-pҢDʎҎҍ/!!g#!# !# "# }!#!#! $!$0"1!/ B$D$EJKLV342%!-,).%26 }"ytes2ead??????????"ytes7ritten???????%xtra"ytes???????????%xtra3e }gments????????F K:H8jJJJ@!h) @!`W '$`w '$` '$L'$ '$L'$@ BHILV B }LV *$c! ;$ H$ U$La$&ile??????????????????./.%ɛ`" `"`H ' }ҩ࠰h $L%% $%8 p" %膚?p" m$Mɛ.Ɛ詛L%~ƚp"ƐƤ. }и膐p"Ъ0 : [ALD% 膐8 p"8吨8 n!`D1:%nterfilename`DE` }ee U$`j =& $ m$`ii`&iletoolarge0ressakeyHH'`"& $k"h8d 8 } m" l" m$Rh'`"`Ah`)/%rror2etryor!bortBHI V0Hiii ;$h` }` \&`'`"` ' $B %JK Vb( $ m$RA & $` &0 ( $ m$LW' }&0ש &0Т( $ & о $`Ƒ &0 &L' &0 &08ŗ+Ŗ%ȥ & }ii a$L1( &LW' &0 &0祕 &0॔ &0 &0Υŕ ŔL'iiL9(#antopenfile2et }ryor!bort.otabinaryfile0ressakey2eadingfile $ ) $ m$` 'B %JK V/ } \&`曢$B %JK V0 $L( \&`נ) $ * B %HI V \&L$iii H$i }iūдŪЮ $#B %JK V \&` $) $ %Lm$.oneedtorewrite0ressakey7ritingfile }$one0ressakey"%JK V \&` $) $ %Lm$.oneedtorewrite0ressakey7ritingfile "10 REM STREAMLINER V1.0 PATCH20 REM by James Hague30 OPEN #1,12,0,"D:STRLINER.OBJ"40 FOR A=1 TO 908:GET #1,B:NEXT A50 PUT} #1,160:CLOSE #1R V1.0 PATCH20 REM by James Hague30 OPEN #1,12,0,"D:STRLINER.OBJ"40 FOR A=1 TO 908:GET #1,B:NEXT A50 PUT) 7jojL#J 8`)ө    ` p )ө    ۠```H } h0 hɛ)?  C`C`H @ h`  `   ` ԍ ``i` T}"`T#  )` L@ `   ` ԍ ``i` T@ZTITLSETUQUIFILEINBUFLINENUYESNYESCREEERMATCHALLOOUTBUFERROVARCHASCERASEWAIGRAMMERGRAMME}RGRAMMARGRAMMARAAA$Aw!xA A 0 }|xA"hAA AA((Ҡ}Ǡ-by A.A. NOGAS33Copyright 1985 by ANALOG 400/800 Corporation. A A0  ( 57@<@,4}CA6-A ŠҠԛ9AdAU5(LINE NUMBER FOR NEXT INPUT9#? 45(>:AS,LINE} NUMBER INPUT REQUIRED.? @0(h37@<@,20)7@<@,396(^(>:AS,ILLEGAL INPUT-try agai}n.h @02R 6-A:,!B'PH(>:AS, LINE NUMBER TOO LARGE-try again.R @0<S(!(YOUR LINE NUMBER IS }$(9(Is that correct?= I"S @0F##@@E:PŠԛZA A("INPUT} ALLOPHONE CODE/Q=QUIT. BUF:A@&F:A7,d:AdAU!6-.@64Q: nS67B:,%@},.*46-?:C:,:@4,7<,>: }@4,=6-%@A  ff(@ IF PEEK(128)+PEEK(129)*256= THEN OPEN #,8,0,>:@4,T:>:@4},Q*(@:? #;:CLOSE #5@GA7Q @0-EDIT VOCAL STRING"< "(EDIT A}LLOPHONE STRING:<(7@:@(,- AΠҠԛc%6-F:@},%F:@,$AV<F:%@,"@RF A0cCHECK FOR SCREEN SCROLLING H!6-?:C:,<%@@$@,3}@@E-@@H$XΠЛbn@A('} TALKER STRING EDITOR-Copyright 1985.n((}ŠŠld:(>:@(,' PA1-10ms HH1-hey *AE-act NG-angerd(% PA2-30ms HH2-hoe *}AO-song OR-forvZ.(& PA3-50ms KK1-can AR-farm OW-snowZ(' PA4-100ms KK2-sky AW-down OY-voiceX-(% PA5-200ms K}K3-crane *AX-lapel PP-powX(& BB1-rib NN1-thin AY-sky SH-shipY.(& BB2-best NN2-no CH-chip *SS-bestY(& DD1-e}nd RR1-read *EH-end *TH-thinY.(& DD2-do RR2-brain EL-ill *UH-bookY(& DH1-this TT1-parts EY-tray VV-vestX}/(' DH2-bathe TT2-to *FF-food WH-whiteX($ ER1-inner UW1-to *IH-sit WW-weY.(& ER2-burn UW2-food IY-see XR}-pairY(& GG1-gate YY1-cute JH-dodge YR-hearY/(' GG2-green YY2-yes LL-like ZH-beigeY(% GG3-wig *AA-hot MM-}milk ZZ-zooE0((蠪似B@@E$ŠΛV-(%} ****** TALKER S}TRING EDITOR ******0(3(V(For use with the TALKER DEVICEJ&(HANDLER by A. A. Nogas and theJ(CHEEP TALK voice synth}esizer by;(Lee Brilliant M.D..(!(;( copyright 1986 by$!(ANALOG COMPUTING MAGAZINE$$ҠΠ}T-(%}**** TALKER RESERVED CHARACTERS ****0(T(The characters listed below are['(recognized by the TALKER STRING}L( EDITOR and perform the following[( functions:P(+( 1.Slash_____Separates allophones=@@P(within a} word.P-(%2.Space_____Separates words-inserts a?@@P( 50 ms pause.S-(%3.Comma_____Separates clauses-i}nserts?@@S(a 100 ms pause.P,($4.Period____Ends sentences-inserts a>@@P( 200 ms pause.}M'(5.Semicolon_Indicates allophone9@@M(string is to bey@@.(continued-similar to@ }@@W(its usage in PRINTi@@y( statements. $xҠΠX.(&}Using the reserv!}ed character set willX(%allow you to encode a voice string in?*("a way that is similar to writing a?(normal sentence"}.U(+( The TALKER STRING EDITOR createsU(%output command lines for your programT+(#that operate like LPRINT statem#}entsT($to a printer. It is not necessary toS-(%end a voice string with a period. TheS(!period is mandatory for senten$}cesN#(that end within the string.&(N(#NOTE: The computer's text buffer isR(( limited. Do type more thanR(%}%three screen lines of code when askedQ*("to input the allophones. Use the ;Q("operator to continue the string on!(&}the next input prompt.!$@РśJE-@@ A(#}DO YOU WANT TO REVIEW THE PROGRAM?E T"@'}    ^''(}SETUP FOR VOCAL STRING OUTPUT:h ( (PLACE A DISK IN DRIVErM  (2(#Ǡ-INCLUDE (}DEVICE AND DEVICEJ(NUMBER IN FILESPEC.M(|D+(#WHAT IS THE FILESPEC TO BE USED FORD(OUTPUT OF YOUR CODEJAd)}AU A#@@@J AD6-F:A, (>:AS,,"Ae/(D(Š*}Ҡ_Ae(:(#Ҡ-PLEASE CORRECT AND RE-ENTER_(FILESPEC. ERROR NUMBER IS ."@ B"+} A`o B6-(F(%WHAT STRING VARIABLE NAME DO YOU WANTo($TO USE IN YOUR PROGRAM (PRESS P(,}FOR DEFAULT NAME)%4F(DEFAULT VAR. NAME T$ CHOSEN.P APQ 6-B:,E7@<@,2A)7@<@-},3Z)7,0$Q6-@H"@;(>:AS,NOT A LEGAL STRING VARIABLE:>(H A 6.R A.}(6(!TO WHICH CHANNEL SHOULD THE VOCALN(OUTPUT BE DIRECTEDR% 6-P:,"@*@%$P( @P/}(9CHANNELS 0,6, AND 7 ARE RESERVED FOR THE COMPUTER'S USE.7-(%PLEASE USE A CHANNEL BETWEEN 1 AND 5.7 AP?+(>:A0}S,ILLEGAL INPUT-try again.5 B? AӯϠ˛9('(Press Y for yes or N for no.9AdAU1} F:Ad,"AUA &.F:Ad,"@C$6-@'$.-YES0-F:Ad,"@5$6-'$--N2}O: A &&Ԡŭ7(%(Press any key to continue.7AdAU F:Ad,"3}AUA $Ҡś36-@(>:AS,)"A3 A"P"Ah A"`*A4}V&(͠Ů* 0 &(Ҡ-DELIMITER MISSING:0 A"p0 &(Ҡ-ILLEGAL ALLOPHONE:0 A"p5}+ +(Ҡ-OUTPUT BUFFER OVERFLOW:9(7@C:,%A9@4>-PLACE QUOTATION MARK INTO STRINGX -WINDOW ERASE MACHINE CODEl N6.>:,*67A@,.>:}:,967@,.KA6N$'((ҠǠ-by A.A. NOGAS D:TALKER2.BAS,*67A@,.>k%&~  SULINDATUMHEXCKSUBYTDATCHA<} KKTALKER STRING EDITOR DECODE AND MACHINE LANGUAGE LISTER-by A.A. NOGASCopyright 1986. y6-=}6-'6-@J;@,;@,;AP,d(}CHECKING DATA LINES:y(Please stand by."4X >}@p=" -@B:,@36.7<%@,= A (E 6-%'2@@367,.>:,A6-%?}@E 2O%2+"76-E6-%@O @ <I(((ERROR IN DATA LINE %A@}F(Please check your typing.IFm(&(INSERT A FORMATTED DISKETTE<(IN DISK DRIVE #1.[(Press any key to contiA}nue.mAdAUP"F:Ad,"AU" @Z..@@ D:MACHINE.LSTdI"(}CREATING MACHIB}NE LANGUAGE4( LISTING FILE.I(Please stand by.n(@@x?%6-@:7@<@,,&@H1!@C} ?6-&@M6-$@36-@:7@<@,,&@H?!@ M6-&@ 6-%$!!MACHINE LD}ANGUAGE DATA BELOW[[3330373020414C4C4F2428312C3831293D225041B15041B25041B35041B45041B54FD941D945C84B,3482[[4BB350D04AE}C84E4EB149C85454B25252B141D84DCD5454B14448B149D945D94444B15557B141CF41,4909[[C15959B241C54848B14242B154C855C85557B2229B33F}30383020414C4C4F242838322C313630293D,3559[[2241D74444B24747B356D64747B153C85AC85252B246C64B4BB24B4BB15ADA4EC74CCC57D758D2G}57,4958[[C85959B143C84552B14552B24FD74448B253D34E4EB24848B24FD241D259D24747B245CC4242B280,4935[[229B33313030204D41544H}3482428312C3738293D2268A2066895CACAD0FAAD0006F01CA900A2029D,3522[[0006E8E010D0F8AE01068E02069D1006E8E0F0D0F8F0078A9D0006EI}8D0FAA9008D05068D04068D08,4455[[068D09068D0A06AC0306A200B1CDC920F033C9229B33313130204D41544348242837392C31353429,2979[J}[3D222CF02FC92EF02BC92FF027C93BF023C92AF01FE003F0089D0806E8C838B0DAAC0606B1CD0980,4763[[91CDA20086D4E886D560B0B18D0706C8K}8C0306A9008D0C068D0D068D0E06A200AC0406B1CF30229B,4003[[33313230204D4154434824283135352C323330293D22089D0C06E8C838B0F4297FL}9D0C06C88C0406,2939[[AD0806CD0C06D013AD0906CD0D06D00BAD0A06CD0E06D00338B021EE0506AD0506C941F00338B0B3,3511[[AC0606B1CM}D098091CDA20086D4E8E886D560229B33313330204D4154434824283233312C33303629,3717[[3D22B096AE0206AD0506C920D0020940C940D00338BN}00B9D1006EE0206E8E0F0F03CAD0706C92FD0,4085[[0338B029C920D008A9029D100638B015C92CD008A9039D100638B009C92ED02EA9049D1006EE2O}29B,3661[[33313430204D415443482428333037293D220206E8E0F0F009AD03068D060638B0A4AC0606B1CD09,3222[[8091CDC8CC0306D0F4A2P}0086D4A20386D560C93BD0098E0106A9018D000660A9009D10068D000685,4126[[D5E886D4A4D488B9100691CBC000D0F660229B3331373020455241Q}5345243D22686885CC6885CBA9,46773300A891CBC8D0FB8556A9028555A913855460229B,2473X D:TALKER3.BAS31373020455241o. #X;"T:" DEVICE HANDLER FOR "CHEEPX; TALK" BY ANTHONY A. NOGAS#X;Copyright 1985 by ANALOG CORP.X;2X;<X;SYSTE!S}M EQUATESFDOSINI ;;DOS INIT VECTORPLOMEM;;LO MEM POINTERZCLOCK;;SOFTWARE TIMER 1dRUNVEC;;RUN VECTORn!T}MEMLO;;O.S. LO MEM PNTRxHATABS;;HANDLER TABLEIOCB@;;I/O CNTRL BLOCKSDOSST@;;DOS INITPORTA!U};;JOYSTICK PORTSPACTL;;PORT CONTROLLERWSYNC ;;WAIT HORIZ SYNCX;X;ERROR CODES RETURNEDINVCOM;;INVA!V}LID COMMANDTIMOUT;;DEVICE TIMEOUTNOTIMP;;NO FUNCTION IMPX;$X;"T:" DEVICE HANDLER STARTS HEREVEC!W}TAB OPEN CLOSE NOFUNC;;GET NOT IMP" PUT, STATUS6 NOFUNC@ !INITJX;TX;OPEN ROUTINE ST!X}ARTS HERE^!OPENQIOCB 9;;GET CMND CODEhR>;;OUTPUT ONLY?rFOPEN2;;YES,PERFORM OPEN| CLOSE;;NO,ABORT OPEN%>INV!Y}COM;;SIGNAL INVALID:;;RETURN ERROR"OPEN2QPACTL;;GET PORT CONTROLM>;;SETUP TO PROGRAM;DATA LINES PPACTLQ!Z}> PPORTA PIADLY;;GIVE PIA TIME;TO RESPONDQPACTL;;RESTORE PORT;CONTROL REGISTERL>PPACTL;;PORTA R![}ESTORED PIADLY;;GIVE PIA TIME DEVCHK;;CHECK RESPONSE?;;RETURN STATUS:X;&X;CLOSE ROUTINE STARTS HERE0CLO!\}SEQ>;;SIGNAL SILENCE: PUTD SETCLK;;SET TIMEOUT CNTRN!CLLOOPQPACTL;;GET PORT CNTRLXM>;;DATA LINESb PPACTLlQ!]}>;;SET FOR INPUTv PPORTA PIADLY;;GIVE PIA TIME QPACTLL>;;RESET PORT CNTRLPPACTL;;PORTA RESTORED PIADL!^}Y;;GIVE PIA TIME QPORTAICLSAT;;CLOSE SUCCESSFUL CKCLK;;CHECK IF TIMEOUTECLLOOP;;NOT CLOSED%>TIMOUT;;ERROR !_}TIMEOUT:;:RETURN ERRORCLSAT%>;;FLAG SUCCESS:;;RETURN STATUSX; !X;GET AND SPECIAL ROUTINES NOT$X;IMPLIMENTED!`}-ROUTINE STARTS HERENOFUNCQ> %>NOTIMP;;NO FUNCTION*:;;RETURN ERROR4X;>X;PUT ROUTINE STARTS HEREHPUT5;;SAVE !a}OUTPUT DATAR SETCLK;;SET TIMEOUT\PUT2QPORTA;;DEVICE READY?fIOUT;;BRANCH IF READYp CKCLK;;CHECK IF TIMEOUTzEPU!b}T2;;CONTINUE7;;CLEAR STACKQ>TIMOUT;;SET ERROR CODEGSETSTA;;SET ERROR CODEOUT SETCLK;;SET TIMER7;;GET DATA!c}R>;;IS IT EOL?HOUT2;;NO, SEND DATAQ>;;YES, SO SILENCEOUT2M>?;;CONVERT TO 6-BIT SEND;;SEND DATA DCHK!d}3;;CHECK RESPONSE"SETSTAPIOCB9;;STORE STATUS?:X;X;STATUS ROUTINE STARTS HERE$ STATUS%IOCB9;;GET STAT!e}US);OF LAST OPERATION.:;;RETURN STATUS8X;B#X;SEND SUB-ROUTINE BELOW USED BYGX;OPEN,CLOSE,PUT AND DEVICEHX;CHECKIN!f}G ROUTINESLSEND5;;SAVE OUTPUT DATAVL>@;;SET SEND FLAG` PPORTAj PIADLY;;GIVE TIMEt7;;CLEAR SEND FLAG~ PPORTA!g}:X;$X;DEVICE CHECKING ROUTINE-USED BYX; OPEN AND PUT ROUTINESDEVCHK SETCLK;;SET TIMEOUTDCHK1QPORTA;;DEVICE !q}?B%DOS SYSB*)DUP SYSBSSTRLINERM65BSTRLINEROBJBSTRPATCHLSTBTALKER OBJB?TALKER2 BASB;TALKER3 BASB"RTALKER4 M65B*}TALKER5 M65BTALKER6 M65BGWRENCH BASREADY?IDCHK2;;BRANCH IF READY CKCLK;;CHECK IF TIMEOUTEDCHK1;;CONTINUEFAILQ>TIMOUT;;SET ERROR:;;RETURN ERR!r}ORDCHK2 SETCLK;;SET TIMEOUTQ>;;SEND SILENCE SEND  DCHK3QPORTA;;CHECK RESPONSEIOK;;RESPONSE, BRANCH C!s}KCLK;;CHECK IF TIMEOUT(EDCHK3;;CONTINUE2DFAIL;;SIGNAL ERROR<OKQ>;;FLAG SUCCESSFXDEV:;;RETURN STATUSPX;ZX;TI!t}ME DELAY ROUTINESdPIADLYPWSYNC;;WAITn PWSYNCx:X;SETCLKQ>;;2/3 SECONDPCLOCK;;RESET TIMER:X;CKCL!u}K,;;2/3 SEC TIMEOUTQCLOCK;;GET TIMERO>:"X;CKCLK RETURNS WITH CARRY FLAGX;CLEARED UPON TIMEOUTX; X;PLACE!v} "T:" IN HANDLER TABLESETUP$>;;OFFSET IN TABLE%> ;;MAX ENTRIESSULOOPQHATABS9;;GET DEVICER>T;;IS IT ASCII T!w}?"FMEM;;YES, BRANCH,R>;;ENTRY OCCUPIED?6FENTRY;;IF NO, ADD "T:"@2;;YES, NEXT ENTRYJ2T2^1;;UPDATE NUMBERc!x};UPDATE NUMBERhHSULOOP;;SPACE REMAINSr:;;NO SPACE "T:"|ENTRYQ>T;;"T:" DEVICEPHATABS9;;PLACE DEVICEQ>VECTAB!y}PHATABS9Q>VECTABPHATABS9X;Q>INIT;;STEAL DOS INIT PDOSINIQ>INITPDOSINIX;!z}!MEMQ>FINISH;;RESET LO MEM PLOMEM PMEMLOQ>FINISH PLOMEM& PMEMLO0 XSETUP::X;D X;INITIALIZ!{}ATION ROUTINE HERENINIT SETUP;;INITILIZE "T:"X!DOSST;;INITIALIZE DOSb FINISH lX;vX;RUN ADDRESS FOR PROGRAM !|}RUNVEC SETUPINIT SETUP;;INITILIZE "T:"X!DOSST;;INITIALIZE DOSb FINISH lX;vX;RUN ADDRESS FOR PROGRAM  k !X;ENCODING FOR VOICEBOX EDITORX; by A. A. NOGASNX;FORMAT FROM BASIC: X=USR(ADR(MATCH$),ADR(ALLO$),ADR(INBUF$),ADR%~}(OUTBUF$))X;(X;SYSTEM EQUATES2 FR0< ERRFGFX;P%X;DELIMITER EQUATES (ASCII VALUES)Z SPACE d STAR*n %}COMMA,x PERIOD. SLASH/ SEMI;X;X;PROGRAM EQUATES PGSIX CONTFG;;Continuation flgOLDLEN%};;Pntr to bufferOUTOFF;;Pntr to bufferINOFF;;Offset into;input stringCDOFF;;Offset intoCDO%}FF;;decode stringENCODE;;CounterOLDAL;;Offset INBUF$DELIM;;Delimiter storgeBUFIN;;Allopho%}ne bufferBUFMAT ;;matching bufferBUFOUT;;Output buffer"X;,X;PROGRAM ZERO-PAGE VECTORS6 OUTVEC@ INVE%}CJ CDVECTX;^hX;rX;PROGRAM STARTS HERE|X;SETUP ZERO-PAGE VECTORS7;;# OF ARGUMENTS$>;;SET COUNTER%}LOOP17;:MOVE VECT addrsPOUTVEC90;;ARE WE DONE?HLOOP1;;NO, CONTINUEX;"X;CLEAR PAGE 6 POINTERS/BUFFERS%}QCONTFG;;CHECK FOR;CONTINUATIONFCLEAR;;BRANCHX;#X;UPON CONTINUATION CLEAR PAGE 6X;NOT USED BY ROUTINEQ>%}$>;;SKIP CONTFG AND  ;OLDLEN LOOP2PPGSIX9;;CLEAR PROGRAM;POINTERS/COUNTERS2&(>;;ARE WE DONE?0HLOOP2%};;IF NOT, CONTINUE:$OLDLEN;;GET OFFSETD &OUTOFFN LOOP3PBUFOUT9;;CLEAR UNUSEDS;OUTPUT BUFFERX2b(>;;ARE WE DON%}E?lHLOOP3;;NO, CONTINUEvFGET1;;YES, BRANCHX;#X;CLEAR PAGE SIX-no continuationCLEARA;;PUT 0 IN ALOOP4PPGSI%}X92HLOOP4;;CONTINUEX;X;LOAD ALLOPHONE INTO BUFINX;%X;PREPARE TO CODE NEW ALLOPHONE --X;CLEAR INPUT BUFFE%}R GET1Q> PENCODE PCDOFF PBUFIN  PBUFIN PBUFIN X;*#X;GET AN ALLOPHONE TO BE ENCODED4%INOFF;;GET%} OFFSET>$>HLOOP5Q@INVEC7;;NEXT CHARRX;\X;CHECK FOR DELIMITERf R>SPACEpFDLSET;;BRANCH OUTz R>COMMA FDLSE%}T R>PERIOD FDLSET R>SLASH FDLSET R>SEMI FDLSET R>STAR FDLSETX;X;CHECK FOR BUFIN OVERFLOW(>%};;IS BUFFER FULL?FERR1;;BUFFER OVERFLOWX;X;STORE ALLOPHONE CHARACTER X;CHARACTER IS IN ACCUMULATORX;OFFSET IN %}X REGISTER$ PBUFIN9.2;;UPDATE COUNTERS83B;;;FLAG BRANCHLELOOP5;;ALWAYS TAKENVX;`#X;ERROR -- INPUT BUFFER OVERFL%}OWjERR1%OLDAL;;GET POINTERtQ@INVEC7;;FIRST CHAR~L>;;CONVERTP@INVEC7;;STORE BACK$>;;CLEAR F.P.&FR02%};;1=BUFFER OVERFLO &ERRFG:X;X;PASS BRANCH BACK TO GET1GET2EGET1X;X;STORE DELIMITER CHARACTER X;CHARA%}CTER IS IN ACCUMULATOR DLSETPDELIM;;SAVE DELIMITER 3'INOFF;;POINT TO FIRSTX; CHARACTER AFTER DELIMITERX;(!X;%}CLEAR DECODE MATCHING BUFFER2CLRMATQ>< PBUFMATFPBUFMATPPBUFMATZX;d%X;MOVE DECODE ALLOPHONES TO BUFFERn%}$>x %CDOFFLOOP6Q@CDVEC7;;DECODE CHARGEXCODE;;EXIT LOOPPBUFMAT9;;STORE23;;;FLAG BRANCHELOOP6;;A%}LWAYS TAKENX;X;END OF MATCH ALLOPHONEEXCODEM>;;TURN OFF HI BIT PBUFMAT93'CDOFF;;POINT NEXT ALLOX;$%}X;ATTEMPT MATCH OF BUFIN & BUFMAT QBUFIN" RBUFMAT, HNXTRY6 QBUFIN@RBUFMATJ HNXTRYT QBUFIN^RBUFMAT%}h HNXTRYr;;;FLAG BRANCH|ESTORE;;MATCH SUCCESSFULX;"X;FAILURE TO MATCH ALLO IN BUIN!NXTRY#ENCODE;;UPDATE CO%}UNTERQENCODE;;END OF CODES?R>A;;ARE WE DONE?FERR2;;NO, FLAG ERROR;;;FLAG BRANCH ECLRMATX;X;ERROR -- I%}LLEGAL ALLOPHONEERR2%OLDAL;;OFFSET TO ALLOQ@INVEC7;;GET FIRST CHARL>;:CONVERTP@INVEC7;;STORE BACK$>;;F%}.P. REGISTER 0&FR0&202;;2=ILLEGAL ALLO:&ERRFG;;SET ERROR CODED:NX;XX;PASS BRANCH BACK TO GET2bGET3EGET2l%}X;vX;PERFORM ANY TRANSLATIONSTORE$OUTOFFQENCODE;;GET CODE COUNTERR>";;ASCII QUOTATION?HSTORE2;;NO, NULL %}MATCH?L>@;;CONVERT TO "b"STORE2R>@HSTORE3;;STORE ALLO CODE;EDLOUT;;NO OUTPUTSTORE3PBUFOUT9;;CODED AL%}LO#OUTOFF;;UPDATE BUF PNTR2(>;;BUFFER OVERFLOW?FERR3;;GO ERROR ROUTINE X; X;PERFORM DELIMITER FUNCTIONS %}"X;X = OFFSET INTO OUTPUT BUFFER*"DLOUTQDELIM;;RECOVER DELIMITR4 R>SLASH> HDLOUT2H;R ELPBK2\X;fX;CHECK FOR SPA%}CEpDLOUT2R>SPACEz HDLOUT3Q>;;50 ms silence PBUFOUT9; ELPBKX;X;CHECK FOR COMMADLOUT3R>COMMA H%}DLOUT4Q>;;100 ms silence PBUFOUT9; ELPBKX; X;CHECK FOR PERIOD DLOUT4R>PERIOD HDLOUT5$ Q>;;200 m%}s silence. PBUFOUT98 X;B %X;RETURN FOR NXT ALLOPHONE ROUTINEL "LPBK#OUTOFF;;MOVE OUTPUT PNTRV 2` (>;;BUFFER OVERFLOW%}?j FERR3t LPBK2QINOFF~ POLDAL;;ERROR OFFSET ; EGET3 X; !X;ERROR -- OUTPUT BUF OVERFLOW ERR3%OLDAL LOOP7%}Q@INVEC7 L> P@INVEC7 3 )INOFF;;ARE WE DONE? HLOOP7;;NO, CONTINUE $>;;F.P. REGISTER 0 &FR0 $>;;ERRO%}R CODE &ERRFG :( X;2 #X;CONTINUATION OF DELIMITER FUNC< X;CHECK FOR SEMICOLONF DLOUT5R>SEMIP HDLOUT6Z &OLDLEN;;%}SET BUFF POINTERd Q>n PCONTFG;;FLG CONTINUATIONx : X; X;DELIMITER MUST BE * (EOL) DLOUT6Q> PBUFOUT9;;10 ms %}silence PCONTFG;;CLEAR FLAG PERRFG;;CLEAR ERRORS 2;;CONVERT OFFSET &FR0;;STORE LENGTH %FR0;;GET COUNT MOVBUF%}1;;UPDATE POINTER QBUFOUT8;;GET DATA P@OUTVEC7;;PUT INTO STR )>;;ARE WE DONE? HMOVBUF : GET COUNT MOVBUF$jv !X;WINDOW ERASE - STRING EDITORX;Copyright 1985X;(X;ERASE ROUTINE STARTS HERE2<7;;NUM. OF ARGSF7;;HI )}BYTE WINDOWPP;;STORE ZERO PAGEZ7;;LO BYTE WINDOWdPnQ>;;CLEAR CHARACTERx?;;SET COUNTERLOOPP@7;;CLEAR WIN)}DOW3;;UPDATE COUNTERHLOOP;;IF NOT DONEX;CLEAR NEXT SCREEN LOCATIONPV;;SET CURSOR LOCQ>PUQ>PT)}:3;;UPDATE COUNTERHLOOP;;IF NOT DONEX;CLEAR NEXT SCREEN LOCATIONPV;;SET CURSOR LOCQ>PUQ>PT([\#'#PPLAPSCREECHALSTDXTDYPOCHPIPELLVALVVRWARPLECDMSSC-}@ @ @-}@@@ !-}"#$%&'()d ROTO-WRENCH n JOHN HANLEY x-} SACTO. CA 1 +@AY1@@dB7t@d A--@AP-} !6--6-@ %%@ $8@,%%A@ MAIN LOOP "F:@,@ -}" A`<6-P:H:,$,&6-F:B7p,2 A< A:6-F:A2,6-%8,(6-%8,:6-%%@ -}$(F:AD, A`WF:,!A 6-&@.6-%@@-@@"M(@W ApF:-},"ATAF:,"@APF:,A8 6-8,$%%@ $,%26-86-"-}%A A""%A A , A6B6-F:%8<@,,0B7`8<@,BB7aA-}@B"-%8<@,8<@,?B7aB$J2"@ )"@2%8<@,T%%-}@Y%*@b%A^B7a!$h"@Q)"@R$rb"@ )"@4%8<@-},%AFB7aAT6-%@b!AP|$ SLIDE! rB7b)-@@-}A%%@ $^%%@ $8@,%rB7c&@< 6-6- %B7c9%A-}@<${B7b2-@@6@J%%@ $g%%@ $8@,%{B7c@-}&< 6-6- %B7c9%A@<$ GET WRENCH U%%@ $8-@-}6@U-A@d6@d]B7`&@d+B7aA`%3%96-?6-C G S6-}-@d] A VALVES @dAW6-A(6-%@0%@ 8,%B6-%%@ -}$NAUW68,-N6-%@P#-@@"0(@<"@N@T -@-}6@4-@@ L2%@P T `@w$6-F:@,26-&@>"@J-}6-ATV6-AU` A& Ap0>@/6-&+ A`,$@;">$:g8@,-}AT068@,-8@,M-@6@c2@g D66-&@6-%@3@-}@ &6$N DEATH X'AAH'B7ebz -@6? <-A(-}A(\%8<@,8<@,%r2@v z l#"@ A # APv"@A`-}'6-A(6-%@' AP ROTO-WARP @)"$b-@4-AT-}AQ6@:FB7`ZB7aA`%^ b ])6-P:H:,$@,:6-8<@,K-}6-8<@,]6-%%@ $b -@6@4-AQAT:FB7`ZB7aA`%^-} b Q@b%6-&@1-@@#B(@ H6-N6-Q$ GAME OVER ` -@-}6@7-6?PX28<@,@\ ` ,-@@,(@ -}9-@A@,F:AD,"/'9 A   A BONUS -6-P:H:,$,# A-}- A*k+AP:H:,$@,%A896-&@EB7dWB7eAek"@0A 4:-}6-F:A2,6-%8,(6-%8,:6-%%@ $>8F:,!A 6-&@.6-%@8 A`H"-}A RF:,A\8 6-8,$%%@ $,%26-86-f"%A Ap"%A-} A z A LEVEL/ADD BONUS cAAH1-@PAU@M2@@@-}Q cB7eZ"!-@@4(@H-@AL Z6-%A(-@-}@((@u6-+%A,$,-@6@:6-%@L-@@"Y(@] -}q-@APu ]6-%@#-@@0(@>6-%@P-@@#](@q6--}%+ @@,$@ q6-+"@,$A%%+"@,$A%+"@,$Au%+@,$AP6-%+ @%,-}$@}-@@((@ D-@#@5@R%ATV b6-n6-z6--}}$ INITIALIZE 6-F:A,&@&A8AA$JA@\A @6-}nA@"AAH;@ ,;@ ,;A,;@,9A<@,9@<@,9-}@,9@,9@,9@,9-@&68,-568,-9 68@,-6@.-}68@,-@D68@,-6@Y68@,-@n68@,-@Y68@,-@`68@,-@a-}68@,-@b68@,-68@,---@@ ")67<,.>:,- A6-?:C:,,-}6-$AV1-@A'5"=%A $K-AA1"#%' ;-AdA?"G%K .-}B-A+-@@/":68<,-> B 8B-@+-@@/":68<,-> -}B B%%6-F:@,%AV$F:@,L TITLE/PLAY SCREENS V$AY$(@}`ll6.b -} roto warp 85 j# 6.=:,#67@<@-},.tB #A$!-@@%"1-@>(@B ~!AY@4!AVH-@B:,&@-} .-@@H(@7<%@ ,%F:AD,"'% A)-@@   ) A`-}AY!6-@-6-@96-@%E6-APQ6-@]6-@i6-u6-6--}6-A(6- #A%!-@#%"1->(@B TAdfAY-}@4x@ APlPP104,162,4,160,0,177,205,145,203,200,208,249,230,206,230,204,202,208,242,960,1,-}7,15,31,31,31,62!!0,64,240,248,252,252,252,62""28,62,252,252,252,248,240,6428,62,31,31,31,15,7,1$$28,190,25-}5,247,255,255,255,12928,62,31,31,27,31,31,30 ##0,129,255,255,255,247,255,190""28,62,252,252,236,252,252,60 -}0,0,255,255,255,255,255,0*""28,62,255,247,255,255,255,62428,28,28,28,28,28,28,28>0,0,223,159,1,159,223,0H0,-}0,247,239,255,255,255,0R0,0,251,249,128,249,251,0\28,28,24,20,28,28,28,28f28,20,62,8,8,62,28,0p28,20,62,6-}2,28,0,0,0z 12,24,17,19,62,112,224,192!!119,119,119,0,238,238,238,0##60,126,242,224,224,244,126,60##60,126,25-}5,231,231,239,102,5260,126,79,7,7,47,126,60##44,102,247,231,231,255,126,60WW26,11,32,11,45,9,47,9,51,9,53,9,62,-}11,64,11,66,11,72,11,74,11,81,9,83,9,85,9,87,9 bb89,9,91,9,93,9,95,9,102,11,104,11,106,11,108,11,110,11,112,11,114,11,121,-}9,123,9,125,9,127,9 ee131,9,133,9,135,9,142,11,144,11,146,11,152,11,154,11,156,11,161,9,163,9,165,9,173,9,175,9,177,9 ii-}182,11,184,11,194,11,196,11,201,9,203,9,206,11,212,11,215,9,217,9,222,11,224,11,234,11,236,11,241,9$ kk243,9,245,9,253,9,2-}55,9,257,9,262,11,264,11,266,11,272,11,274,11,276,11,281,9,283,9,285,9,287,9,291,9. kk293,9,297,9,302,11,304,11,306,11,308,-}11,310,11,312,11,321,9,323,9,325,9,327,9,329,9,331,9,333,9,337,98 gg342,11,344,11,346,11,352,11,354,11,356,11,363,9,365,9,3-}67,9,371,9,373,9,375,9,377,9,384,11,386,11B NN392,11,394,11,396,11,415,9,417,9,3,5,9,5,15,5,5,10,13,10,9,15,3,17,15,17` ^^-}!))",!)%))%)",!)%))))))%)",+ +,$)'))))))')#,$)'))')#,$))# ll!)'')')'')')'')",+z++ +-}+ ++z+,&)( & * # $ * ( +z$",+ + + +1z+,& * *)* ' ' *)* %))( XX+ + + +,& * * *)*)*)* * ')'#,+ + -} +z+ + +,& * *)*)#z$)*)* * *" YY+ + &( + ++,&)* ( & *)($,+ + &( + +z,& *)* *)"z!)* *)* (z-} YY+ + +z+ + +z,& * * *)*)*)* *)* (!,+ + + +z+ ++,& * *)* % % *)*)* (+ YY+ + + ++,&)*)* * " -}! * * *)*(,+z+ + ++ + ++,+z$'%)%)( &)%)* % (+ ;;+zz+zzzz$)#zzz+ ++,$))# 00 $)))%#, 5 D:WREN-}CH.BAS)*(,+z+ + ++ + ++,+z$'%)%)( &)%)* % (+ ;;+zz+zzzz$)#zzz+ ++,$))# 00 $)))%#, 5 D:WREN,