@L|}6CD l0C)HCC WhL/h `CmCDiD`  R@W1  Y0@R !L` D  C D     )16CS S)  C)D1 p p 0 C9DI pCDL~CiCDiD` D  C D     )16CS S)  C)D1 p p }0 C9DI pCDL~CiCDiD` DD˙` d J)L !}D L(( LL()  L| L( S LH 0p n  } CY?  q  L L  ` )} `A! d߰")-݆ "  $G@LLL&0") $G% }H0 3S8`G ȱG ȱG   Gȭ Gȭ GG}GHiH8(()) G$H% `(0 })8` d)L ݆ & LGȘ ݆LL d  ! LL d)N>Q  HH) }  hyhyB q L> Lm JJ  Ln*` dB%' }8  H H` 1 { LL   !L     Hh SY?  q  1L }  !? S   q 1 L   Ll  Lg E`L   !L)  q 1L}) `L0AM݊L݉ ML  N݆LLLNLMLHG!@}1F GȱGLLEEȩÑEȑEEȑE Ed E7EȩE  q} L !,0,0SGɛ L 1 !L EHEh W G gLLSROTCES EERF } G) *Gȩ GȽG GȌd q q G`  8   0G  `D}CEDC0X:Ȣ Y ȱC* ? 0.. , 0%n ?A[ 0 : L`L  `, 0`Y}`piH n0)բY? 08`0 }  0$L GGȽG L `8L`L}8`  05G)݁,G)ȱGȱGHh0})Hh` B! 8`8iiiLE`}E8FEh( l0`ɃLL L8^~jj8jHi hEEEiEȱEiE` dTE} H8EEȱEEȩEh J E8   . m  i`LI!)E1FR}1LJ舩9GIH`LJJ`HGHh l`} S gL   8 rii `дCDCG W  }C  Lq` X٨`DOS SYS IIIIIIIIIIIIIIIC`0 ߩ0}}} HE |||DDOS DOSDOS SYS }}}}CDOS SYS} 0`BDELV !B }`LVUQ   ]   TU J ]L!T  #      TU  } L ? .  t`GBJ V~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI   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;DELV䌚 !B y`@ʆ 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 V (` 9 V⪍ ઍ  -'}LLu DEHILV 9 .l 9 .l  `` s$B VBH(}I|DE V BLV nB,DE J V* \*` B V BLVDEHI BLVL)}1u H232435; 1 ;  hh@2 e1i1LHҍ 00) 08 109hh@ Ҡ2e*}1i1232435ޥ<<8} 3E:}DISK OPERATING SYSTEM II VERSION 2.0SCOPYRIGHT 1980 ATARIA. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDGE J. D,}UPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRESSF. LOCK F-}ILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES9!&x#!7&p))'&X*./)L''-؆莟.}R'S  vW DEHHI 1A#! @ ~0ɛ8A0.) ȅ 1 1i/}il ! 1L NO SUCH ITEMSELECT ITEM OR FOR MENU! 0 .{z:*{}.|~ 1 0 00}JB 18L^%|DLl%DIRECTORY--SEARCH SPEC,LIST FILE? # 0 0 n&|D! 1L NOT A DISK FILE1}N !B 1L " 1 !BDED:}:1BJ|DE 1DEBH2}I 1 h0ߢ 0.  0?詛 1 ~0YЛ 1 "L<" "L 3} BL1TYPE "Y" TO DELETE...DELETE FILE SPECCOPY--FROM, TO?OPTION NOT ALLOWED COPYING---DN:4}# 0|D .L$A#B#C#JB|DE 1BHIDD#E 1D#0: B5} 1L B#C#C#B# B 1N#$0SYS1}:e#D# d# D# .d#ȽD# d# 𩛙d#X# 1,A#6}PdD#ELO- A.BJdD#E 1 1HH 0hh|DL^%1}:e# Lt% e#dD#EL%7} 1 0 . .0% 1L WILD CARDS NOT ALLOWED IN DESTINATION 0 A.|K@C}//3Hu ξL/L DRIVE TO WRITE DOS FILES TO?WRITING NEW DOS FILESTYPE "Y" TO WRITE DOS TO DRIVE 1.?}D1:DOS.SYSERROR - NOT VERSION 2 FORMAT. , &* բ( 1L `[) 0NΞ 0 L1M) 1@} L BAD LOAD FILELOAD FROM WHAT FILE?) 0 0#B 1L WHAT FILE TO LOCK?) 0 0$B 1L WHAT FILE TO UNLOCK?DUA}P DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO USE PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV. h  ,B}  `)  <0 2 2 0  ,   ,,ޢ* 1L ,K* 1 ~0 0C}FINSERT BOTH DISKS, TYPE RETURNERROR - DRIVES INCOMPATIBLE., 1 ~038  , 1L D}, &*  Lz+, 0 , 1 ~0 + Y,0!,0 ,L+ ,mm  v,"ǭE}0Ξ, 05,Lt+L +,Hh` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNF}INSERT DESTINATION DISK,TYPE RETURN`    `L,8,0( rG}L1(`ߢ) 1* 1 ~0Y`hhL S SL1) 8`NAME OF FILE TO MOVE?- 0 0|DLtH}% A., 1 <0 0 .@L# .BJ 1  DEHIB V L1 ,5 1 <0,L. I} JB|,A#Pd#DE 1 HI BDEHHII 1 B 1 , 1 <0,0Lf- B VJ},A#P, 1 <0 0L#L ߢ) 1* 1 ~0Yj383}mm ݭK}}`8}``|* ? ɛ,`|:(|/ 1L `DESTINATION CANT L}BE DOS.SYS0 0H{ $22Δ $28/L /) $2 Π $2 0 ξM}hAΞB,0 J 1 BޝDEHI,HDE 1HIHIDELSAVE-N}GIVE FILE,START,END(,INIT,RUN)O X0 1`BDEPHI V` X0H 1 L O}0 0 1L0`PLEASE TYPE 1 LETTER,0`hhL <0 1L0LA1 ,;ɛ7,"ɛ:ݦ1ݥP}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{Q}NAME TOO LONG B VL ` L1I H1EӝDL1|mDiE` V0`8d/8 i:"2!22 1R} L ERROR- 128ɛ+,' 20*.. өw2 1``2TOO MANY DIGITSINVALIDS} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uT} HEXADECIMAL PARAMETER800 0 8 00`,0'D800H,ɛh`2L1NEED D1 THRU D4uDo G c v D w D` ^W   sWLE<  )/)&   i05 6 ,WLE`<  V} PW,fL?E )M=tɄ̰ sW ,W =WмW2 )W})5 i5 6P i Jmi XʈLW X ) XX}Y}Z}# "҈,6G9G =G, Ht =G`HHH`*!#T*"" !"[}dJJJJJJ+)?GҬ+,GG#!J}###")?*#`"`"L=G\} ( 0yrlf`[UQLHD@<952/-*(%#!VXY[]ba]`_^]][@QVXY[]ba]`_^]][YXVSUQ\]_]`_]\QVXY[]ba]]}`_^]][YXVSUQؖL͏@VTS@TRQ@RQOMLL@QPOOMLJIHLORVTRLLJLPSXVTSRQOMLL@QPNMLSTY]^}_}IM p p`HEO%N ԍЩp ԩ؍h@I S SHH$EO%N@ Ќ ԩ EO%Nhh@H`}P ԩh@      a}       b} //..-+*(''&'&(*,876543210/.,+*)(................8888888888888888c}****************................ $(,048<@DHLPTX\`89:;<=>?ABCDFHJN@d}`  [S҅ҍЩ>/1oI \ O >O L( e}2Rr h01 hI ;M G IOЭJaJJc hILiLaȌaLLcȌcLL [M\3eg hI hIf} Z D U X _ S Z T hILL~fh` L [MSr N NЭJa)ȌaSrLLWn#`g}aJ5 S T hIL M/ OrDrrr rpԩP6R ?RIRSR'|]R fRh} @S|oRRɀR R _O%L|&T||#SLNɀޢ|i}xf<^|&h/`e`eefDj}6p5 )i| ҅ߊJIi%ff<^|`hhL-M>>>"">>>>"" "??!!a!3!!DHH̄HH2><<<$<<<~}$ 2:2>(L\xxH@@HL|xH<&1+} FZp; <;LY:9ʍ`ɀ)8ɰ3`Ɂ&)ԡiɷ8`` }) :9`- '%Q Y`&Q Y`) `Q}iJ%K|&L|`'&L|%K|hhhh,"#8 G Z hIL0Z )i| ҅8{(8}(@8 01Z`)ЭJa`aMahhLL-0xy _ O`> _}ɀ  w[y8鏍`ةѭ7 Oɀ w[xΩL [ߩ @[ }Z` x_L\W^7= ) )i*^tqu`it )i uLc=:>JJpܰ+ip&?JJJ8q} ^ ^uLcu  uLc cL^JJ|8p ^nJJJ8q ^mnm ^  m08t}18uLc|tum [LcZ ZW`W[ [^.^ Ҭ))`ptL!\qu^}^L]p ^ ^^L]\ ] ^nxp ^mnnRJmnm ] ^nyq ^mnnSJmn8m0!}^x8t18uL!\ ^ ک^08ty8uL!\0xp8001%(xxp2߽x8}0RxL^%(xpxxܭ08xRx1yq8104i(%(yyqܽy8}1SyL^8(%(yqyy٭18ySyRS xt1u`yu0t`Ii`0p ^`1q }^` ^n ^mn`3508t*18u) ) )`IJJn0n ^-}JJJn1n ^m-- ^-ðJJpJJJq`x OЍ`W( )")}| ұ% & ɀ`=<;Z`=p==)/Iéэ;<`0L ? L  @}?> )0@ 8 ЍЎ``΍; < ) L7b as?)O>>>}0)/9???8*#???Ȑ  >! = ЎЩ`?r a }tbMbʈ a bgbʈ a bZbʈ>iiiii`)Ib`>2Bɨ>)7 }a%)(%8 :9`ح?8JJJȢ|@i(>8.JJi`hh"#},L0Z ?w``   P0 p @p P` }pt =WWqu =WWL:,. n@"("(Casette recorder ready?( }Please press Π,##@@A(C:6 @@@E(( TAPE IS DONEG,(,(!If } you want to make another tape,H( type CONTJ&O AD:CASSTAPE.BASM TO MAKE DOG DAZEDELUXE CASS Z$OW<ө  `2  P" 4   #   L 6  7 ` ^   sL< } ).)%   i05 6 ,L<   L" s , =м2 )})5 i5 6P i Jmi ʈL  ) }}}# "҈,69 =, t =``*!#T*"" !"}dJJJJJJ+)?Ҭ+,#!J}###")?*#`"`"L=} ( 0yrlf`[UQLHD@<952/-*(%#!VXY[]ba]`_^]][@QVXY[]ba]`_^]][YXVSUQ\]_]`_]\QVXY[]ba]}`_^]][YXVSUQؖL͏@VTS@TRQ@RQOMLL@QPOOMLJIHLORVTRLLJLPSXVTSRQOMLL@QPNMLSTY]}}IM p p`HEO%N ԍЩ0 ԩ؍h@   HH$EO%N@ Ќ ԩ EO%Nhh@H} ԩh@      }       } //..-+*(''&'&(*,876543210/.,+*)(................8888888888888888}****************................ $(,048<@DHLPTX\`89:;<=>?ABCDFHJN@}`  [҅ҍЩ>/1o  \  > ( }22 (01 h ;  IЭJaJJc h Li aȌaL cȌcL [ \3eg h h }         h L ~fh` [ 2  ЭJa)Ȍa2L W.#`}aJ5   h L / 2D222 20ԩ6 ?IS'<] f}@ @/`e`eefD}6p5 )i< ҅ߊJIi%ff<^<`hhL- ?34567}Ѝ `_` ,1" `<i(i@`y Ѝ`0  Ȑ }1  ؐ `0  Ȑ 1  ؐ ` 000 00}0 00 000000000000 }000 000 ???<<<<<<TTE}TTT TTu/ 0200?<<000000}00_____믯UUUUU3ethandicap 0ress34!245setr}iggerbutton (86t<>>>>"">>>>"" "??!!a!3!!DHH̄HH2><<<$<<<}$ 2:2>(L\xxH@@HL|xH<&1+} Fp; <;L:9ʍ`ɀ)8ɰ3`Ɂ&)ԡiɷ8`` }) :9`- '%Q `&Q `) `Q}iJ%K<&L<`'&L<%K }ɀ  wy8鏍`ةѭ7 ɀ wxΩL ߩ @ }` xLW^7= ) )i*^tqu`it )i uL#=:>JJpܰ+ip&?JJJ8q}  uL#u  uL# #LJJ|8p nJJJ8q mnm   m08t}18uL#|tum [L#Z ZW`W[ [^.^ Ҭ))`ptL!qu^}^Lp  ^L]  nxp mnnRJmnm  nyq mnnSJmn8m0!}^x8t18uL!  ک^08ty8uL!0xp8001%(xxp2߽x8}0RxL%(xpxxܭ08xRx1yq8104i(%(yyqܽy8}1SyL8(%(yqyy٭18ySyRS xt1u`yu0t`Ii`0p `1q }` n mn`3508t*18u) ) )`IJJn0n -}JJJn1n m-- -ðJJpJJJq`x Ѝ`W( )")}< ұ% & @`=<;Z`=p==)/Iéэ;<`0L ? L  @}?> )0@ 8 ЍЎ``΍; < ) L7" !3?)O>>>}0)/9???8*#???Ȑ  >! = ЎЩ`?2 ! }t"M"ʈ ! "g"ʈ ! "Z"ʈ>iiiii`)I"`>2Bɨ>)7 }!%)(%8 :9`ح?8JJJȢ<@i(>8.JJi`hh"#},L0 ?w``   P0 p @p P` }P.fL9 )M=t Ʉ̐`pt =WWqu =WWL<#)}  W` qp8<i i( JIi%oWELh$Q m& & ' &(]O & k& N &E k&@ }&W` & ' & & ) m&V) m&M k&Hʩ* m&L#L&L&Q m& & ) &Q & k& R & k& & Љ }&Ђ' & & ' m&Ы' m& k&ϩ& m&  kL% m& k&8q7P & &+0 k&$ k& &!v m&}z & L&L&uuW([ Z` & k&ҽq1P & &%* k& k& &z m& v &u u} L$Q m&q)A &9 m& & & W`tt ttWZ[L& &" & & &ҩ W` DL&})* & & &t WZ2[t & & &' &D) &Щ m&_ k&Z k&UW` &Њ &= k&}8 k&3 W`) & & k&L% & & k&L%Ll%Lb%(eo'`(n8n }J W )& Z`  W`qu [`pt [`}}}pppB@(A (}$/'$!:%$%,58%by'ray#hangwithmusic}by0hil9oungc 'ray#hang}&/2/.%/247/0,!9%235sejoystickportsand4rytocl}aimmorefirehydrantsthanyouropponent#laimtheflashinghydrantbyrunningthroughitorbyshootingyourboneatit})fyoushootandmiss youmustretrieveyourbonebeforeyoucanuseitagain$ontgethitbythecar!viodthehydra}ntsalreadyclaimedbyyouropponent4rytofillthescoreboardwithyourcolor}0resstostartplaying}pppB@,A ,4hissoftwareiscopyrighte}dbytheauthor4heauthorgrantsyoupermis siontomakeunlimitedcopiesforback upsandfordistributiontoanyo}ne freeofcharge9oumaynotsellorexchangethesoftwareormakeuseofthetitle music etc4heauthordoe }snotreceiveanycompensationforhisefforts otherthanvoluntarycontribu tionsfromusers)fyouuseandenjoyth }isprogram pleasemakeadonation'ray#hang }0/"ox3anta#ruz #!9ourcr }iticism comments andsuggestionsarealsowelcome3uggesteddona }tionadults children purchasersoftheoriginal$og$azeupgrade }ө  `2  P" 4   #   L 6  7 ` ^   sL< 90 CONSTANT >= ( ASSEMBLE TEST FOR GREATER OR EQUAL ZERO ) ( >= IS ONLY CORRECT AFTER SUB, OR CMP, ) CR --> ( USE OF ASSEMBLER WFR-79APR28 ) : C; ( END OF CODE DEFINITION *) CURRENT @ CONTEXT ! ?EXEC ?CSP SMUDGE ; IMMEDIATE FORTH DEFINITIONS : CODE ( CREATE WORD AT ASSEMBLY CODE LEVEL *) ?EXEC CREATE [COMPILE] ASSEMBLER ASSEMBLER MEM !CSP ; IMMEDIATE DECIMAL ;S ( TILL figFORTH IS UP ) ' ASSEMBLER CFA ' ;CODE 8 + ! ( OVER-WRITE SMUDGE ) FORTH DEFINITIONS DECIMAL LATEST 12 +ORIGIN ! ( TOP NFA ) HERE 28 +ORIGIN ! ( FENCE ) HERE 30 +ORIGIN ! ( DP ) ' ASSEMBLER 6 + 32 +ORIGIN ! ( VOC-LINK ) HERE FENCE ! ;S ( LPWORDS FOR JOYSTICK CONTROLLER JACKS ) CODE STROBE BOT LDA, D301 STA, 80 # ORA, D301 STA, POP JMP, C; : PRT D303 C@ FB AND D303 C! FF D301 C! D303 C@ 4 OR D303 C! BEGIN D013 C@ 1 AND 0= UNTIL 7F AND STROBE ; : LYP1 DUP IF 0 DO DUP I + C@ PRT LOOP DROP ELSE DROP DROP THEN ; : LYPE LYP1 20 PRT ; : CRLP 0D PRT 0A PRT ; : FFLP 0C PRT CRLP ; : .LP S->D SWAP OVER DABS <# #S SIGN #> LYPE ; : LISTLP DUP SCR ! CRLP 0E PRT ( [ SCREEN ] LYPE ) .LP 0F PRT 10 0 DO CRLP I DUP .LP LINE C/L -TRAILING LYPE LOOP CRLP ; : SHOWLP 1+ SWAP DO I LISTLP 3 0 DO CRLP LOOP LOOP ; ;S HEX VOCABULARY EDITOR IMMEDIATE 1A LOAD 1B LOAD ( GRAPHICS ) : EDIT SCR ! [COMPILE] EDITOR ; EDITOR DEFINITIONS 0 VARIABLE TOPFLAG : ULL DUP TOPFLAG ! 0 GR. 2203 LMARGN ! 3 0 POS. ( 32 CHAR ) SCR @ BLOCK + 200 TYPE ( PRINT ) CR ." DOIT" CR 0AAAA 2B2 ! ; : UL 0 ULL ; ( SHOW UPPER 16 LINES ) : LL 200 ULL ; ( SHOW LOWER 16 LINES ) : DOIT 10 0 DO -1 2B2 ! 3 I POS. ( POINT CURSOR ) SCR @ BLOCK I 20 * + TOPFLAG @ + ICBAL ! 20 ICBLL ! GET DROP LOOP UPDATE 0 GR. TOPFLAG @ 0= IF UL ELSE LL ENDIF ; : FLUSH 2602 LMARGN ! [COMPILE] FORTH FLUSH ; --> ( TEXT, LINE, WHERE USED IN EDITOR 7/7/80-SRC ) FORTH DEFINITIONS HEX : TEXT ( ACCEPT FOLLOWING TEXT TO PAD *) HERE C/L 1+ BLANKS WORD HERE PAD C/L 1+ CMOVE ; : #OFLINES B/BUF B/SCR * C/L / ; : LINE ( RELATIVE TO SCR, LEAVE ADDRESS OF LINE *) DUP #OFLINES MINUS AND IF ." NOT ON SCREEN" ABORT ENDIF ( KEEP ON THIS SCREEN ) SCR @ (LINE) DROP ; : WHERE ( PRINT SCREEN # AND IMAGE OF ERROR *) DUP B/SCR / DUP SCR ! ." SCR # " . SWAP C/L /MOD C/L * ROT BLOCK + CR C/L TYPE CR HERE C@ - SPACES 5E EMIT [COMPILE] EDITOR QUIT ; --> ( LINE EDITING COMMANDS ) EDITOR DEFINITIONS : -MOVE ( MOVE IN BLOCK BUFFER ADDR FROM-2, LINE TO-1 *) LINE C/L CMOVE UPDATE ; : HL ( HOLD NUMBERED LINE AT PAD *) LINE PAD 1+ C/L DUP PAD C! CMOVE ; : BL ( ERASE LINE-1 WITH BLANKS *) LINE C/L BLANKS UPDATE ; : SL ( SPREAD MAKING LINE # BLANK *) DUP 1 - ( LIMIT ) #OFLINES 2 - ( FIRST TO MOVE ) DO I LINE I 1+ -MOVE -1 +LOOP BL ; : DL ( DELETE LINE-1, BUT HOLD IN PAD *) DUP HL #OFLINES 1 - DUP ROT DO I 1+ LINE I -MOVE LOOP BL ; : CL ( COPY LINE-2 OF SCREEN-1 TO PAD ) SCR @ >R SCR ! HL R> SCR ! ; --> ( LINE EDITING COMMANDS WFR-790105 ) : RL ( REPLACE ON LINE-1, FROM PAD ) PAD 1+ SWAP -MOVE ; : $ ( PUT FOLLOWING TEXT ON LINE-1 ) 1 TEXT RL ; : % ( INSERT TEXT FOLLOWING AFTER LINE-1 *) 1 TEXT 1+ DUP SL RL ; : IL ( INSERT PAD AFTER LINE-1 ) 1+ DUP SL RL ; : TL ( TYPE LINE BY #-1, SAVE ALSO IN PAD *) DUP . ." $ " DUP C/L * R# ! HL PAD 1+ C/L TYPE CR ; --> ( SCREEN EDITING COMMANDS ) FORTH DEFINITIONS : COPY ( DUPLICATE SCREEN-2, ONTO SCREEN-1 *) SWAP BLOCK SWAP BLOCK 400 CMOVE UPDATE FLUSH ; : LIST 2602 LMARGN ! LIST ; : SHOW 1+ SWAP DO I LIST LOOP ; : L SCR @ LIST ( RE-LIST SCR ) ; : N SCR @ 1+ LIST ; ( LIST NEXT SCR) BASE @ DECIMAL ' EDITOR 6 + 32 +ORIGIN ! ( VOC-LINK ) BASE ! ;S ( OS & HDW CONSTANTS ) : CN CONSTANT ; D200 CN F1AUD D201 CN C1AUD D202 CN F2AUD D203 CN C2AUD D204 CN F3AUD D205 CN C3AUD D206 CN F4AUD D207 CN C4AUD D20F CN SKCTL D208 CN AUDCTL 230 CN DLST 22F CN DMCT 14 CN RTCLK 2F0 CN CRSINH 2F4 CN CHBAS 2C4 CN COL0 2C5 CN COL1 2C6 CN COL2 2C7 CN COL3 2C8 CN COL4 D01F CN CONSOL 2FC CN CH 2BF CN BOTSC 52 CN LMARGN 2FB CN ATACHR ;S ( CIO CALL ROUTINES ) 340 VARIABLE IOC 0 VARIABLE IOB : IOCB 7 MIN 0 MAX 10 * DUP IOB ! 340 + IOC ! ; : .IOC @ IOC @ + ; 1 .IOC ICDNO 2 .IOC ICCOM 3 .IOC ICSTA 4 .IOC ICBAL 6 .IOC ICPTL 8 .IOC ICBLL A .IOC I1CAX B .IOC I2CAX CODE CIO TXA, PHA, IOB LDX, E456 JSR, PLA, TAX, NEXT JMP, C; CODE Get XSAVE STX, IOB LDX, E456 JSR, XSAVE LDX, PHA, 0 # LDA, PUSH JMP, C; : GET 7 ICCOM C! Get ; : CLOSE 0C ICCOM C! CIO ; : OPEN 3 ICCOM C! ICBAL ! I1CAX C! I2CAX C! CIO ; CODE ACIO XSAVE STX, BOT LDA, IOB LDX, E456 JSR, XSAVE LDX, POP JMP, C; --> ( EMPTY BLOCK ) ;S ( DISK RPM CHECKER 1 OF 1 ) CODE ZIO XSAVE STX, BOT LDA, E459 JSR, XSAVE LDX, BOT STY, BOT 1+ STA, NEXT JMP, C; 246 CONSTANT DSKTIM : DSIO ( DISK HNDLR VIA SIO ) ( BADDR AUXS UNIT-CMD DATFLG ) 303 C! ( SET DATA-FLAG ) 301 ! ( DUNIT,CMD) 31 300 C! ( DEVICE) 30A ! ( AUXES ) 304 ! ( BUFER-ADDR ) 0 ZIO ; 1 VARIABLE DR# : BIO DSKTIM @ 306 C! 80 308 ! ( BUFLEN) DSIO ; : RDSEC 5200 OR 40 BIO ; ( DISK SPEED CHECKER ) 14 CONSTANT RTCLOCK 2F2 CONSTANT KBCHAR FF CONSTANT EMPTY : READ-SEC PAD 1 DR# C@ RDSEC ; : CLR-KBRD EMPTY KBCHAR C! ; : RPM DECIMAL CLR-KBRD 1 2F0 C! DR# C! 0 17 POS. ." = " BEGIN KBCHAR C@ EMPTY = WHILE READ-SEC DROP 0 RTCLOCK C! 10 1 DO READ-SEC DROP LOOP D2F0B'DOS SYSB*+DUP SYSBZUAUTORUN SYSBCASSTAPEBASBZCASSVERSOBJ( EMPTY BLOCK ) ;S ( EMPTY BLOCK ) ;S ( EMPTY BLOCK ) ;S ( LINE PRINTER WORDS 1/27/81 SRC ) 3A50 VARIABLE P: CODE PCIO XSAVE STX, 70 # LDX, E456 JSR, XSAVE LDX, TYA, PHA, PUSH JMP, C; 0 VARIABLE LPCNT : PERR? DUP 0< IF FF AND ." P: ERROR " ERROR THEN DROP ; : LPOPEN 3 3B2 C! P: 3B4 ! 2 3B8 ! 8 3BA ! PCIO PERR? ; : LYP1 3B8 ! 3B4 ! 0B 3B2 C! PCIO PERR? ; : LPEMIT SP@ 1 LYP1 DROP ; : LPCR 9B LPEMIT 1 LPCNT +! ; : LYPE DUP IF DUP 50 > IF 1 LPCNT +! THEN LYP1 ELSE DROP DROP THEN 20 SP@ 1 LYP1 DROP ; : CRLP LPCR LPCNT @ 3D > IF LPCR LPCR LPCR LPCR 0 LPCNT ! THEN ; : FFLP CRLP BEGIN LPCNT @ WHILE CRLP REPEAT ; : SHRINK 1B LPEMIT 14 LPEMIT CRLP ; : EXPAND 1B LPEMIT 13 LPEMIT CRLP ; : .CLP 0 <# # # #> LYPE ; : .LP 0 <# #S #> LYPE ; : LINELP DUP .CLP SCR @ (LINE) -TRAILING 1 MAX LYPE CRLP ; 4353 VARIABLE SCR# 2052 , 2023 , : LISTLP DUP SCR ! SCR# 6 LYPE .LP LPCR B/SCR B/BUF * C/L / 0 DO I LINELP LOOP ; --> ( MORE LINE PRINTER WORDS 1/27/81 SRC ) : LPSPC 0 DO 20 LPEMIT LOOP ; : SHOWLP 1+ SWAP C/L 20 = IF DO CRLP SCR# 6 LYPE I .LP 1F LPSPC SCR# 6 LYPE I 1+ .LP CRLP I 20 0 DO DUP SCR ! I .CLP I SCR @ (LINE) LYPE 5 LPSPC DUP 1+ SCR ! I LINELP LOOP DROP 2 +LOOP ELSE DO CRLP I LISTLP LOOP ENDIF FFLP ; ( This lists two screens on the printer, side by side) : LPINDEX 1+ SWAP DO I .LP 0 I (LINE) -TRAILING LYPE LPCR LOOP ; ( prints first line of each screen in range specified ) : PON 30 321 C! ; ( PR. ON ) : POFF 0 321 C! ; ( PR. OFF ) ( using this simplified PON, you may lose control of the system if you don't use PON XXX POFF. You may still lose it and have to use the SYSTEM RESET to stop the printer's typeing OK OK . ) LPOPEN ;S ( EMPTY BLOCK ) ;S ( FORMATTED LIST PROGRAM) : THAT ; VOCABULARY FORMY IMMEDIATE FORMY DEFINITIONS : CN CONSTANT ; : OCTAL 8 BASE ! ; BASE @ OCTAL 40 CN SPACBYT 54 CN COMCHR : IARRAY 0 VARIABLE -2 ALLOT ; : 0> DUP 0= IF DROP 0 ELSE 0< 0= THEN ; 0 VARIABLE INDENT 106 CN FCONS 111 CN ICONS 0 VARIABLE TLFLG 0 VARIABLE KERKNT 100 CN MAXLIN : NXSPACE >R 1+ >R 0 R> R> DO SPACBYT I C@ = IF DROP I LEAVE THEN LOOP ; : NXNSPACE >R 1+ >R 0 R> R> DO SPACBYT I C@ = 0= IF DROP I LEAVE THEN LOOP ; : GTNXWD DUP IF + OVER SWAP NXSPACE ELSE DROP THEN DUP IF OVER SWAP NXNSPACE DUP IF OVER OVER NXSPACE DUP IF OVER - ELSE DROP OVER OVER - 1+ THEN ELSE DUP THEN ELSE DUP THEN ; : TORLCR TLFLG @ IF CRLP ELSE CR THEN KERKNT 0SET ; : TORLY DUP 1+ KERKNT +! TLFLG @ IF LYPE ELSE TYPE SPACE THEN ; : DOIND INDENT @ 0> IF INDENT @ 0 DO 0 0 TORLY LOOP THEN ; : PRWORD DUP 1+ KERKNT @ + MAXLIN > IF TORLCR THEN KERKNT @ 0= IF DOIND THEN OVER OVER TORLY ; : 1SET 1 SWAP ! ; --> : ( 51 WORD 6 ALLOT ; : IA IARRAY ; IA L1G 10 , ( :) ( CODE) ( ,CODE) ( SUBROUTINE) ( IA) ( IARRAY) ( LABEL) ( TBL) IA L2G 2 , ( ;) ( C;) IA L3G 2 , ( NXT,) ( NEXT,) IA L4G 6 , ( IF) ( DO) ( IF,) ( CASE) ( BEGIN) ( BEGIN,) IA L5G 3 , ( ELSE,) ( ELSE) ( WHILE) IA L6G 16 , ( THEN,) ( THEN) ( END,) ( END) ( SOB,) ( BACK) ( UNTIL) ( AGAIN) ( REPEAT) ( ENDIF,) ( UNTIL,) ( LOOP) ( +LOOP) ( ENDIF) IA L7G 7 , ( CONSTANT) ( IR) ( VARIABLE) ( CN) ( ARRAY) ( INTEGER) ( ORCON) IA L8G 1 , ( () IA L9G 3 , ( LD,) ( ST,) ( LOAD) IA LAG 1 , ( ;CODE) : CMPWORD DUP >R C@ OVER = R> SWAP IF >R OVER R> SWAP OVER DUP C@ DUP 4 > IF DROP 4 THEN 0 DO I OVER + 1+ C@ >R OVER R> SWAP I + C@ = 0= IF 0 LEAVE THEN LOOP 0= IF DROP DROP 0 THEN ELSE 0 THEN ; --> : GSCAN DUP @ SWAP 2+ SWAP 0 DO CMPWORD IF LEAVE 0 ELSE 6 + THEN LOOP IF 0 ELSE DROP 1 THEN ; : NEWCR KERKNT @ IF TORLCR THEN ; : DUPBC OVER >R >R OVER R> SWAP R> ; : FINDCHAR SWAP >R SWAP 1+ R> DO DUP I C@ = IF DROP I LEAVE 0 THEN LOOP IF 0 THEN ; : PRNEWL PRWORD TORLCR ; : >= OVER OVER = IF DROP DROP 1 ELSE > THEN ; --> : EL1G NEWCR INDENT 0SET PRWORD GTNXWD PRNEWL 10 INDENT ! ; : EL2G NEWCR PRNEWL INDENT 0SET ; : EL3G NEWCR PRNEWL ; : EL4G NEWCR PRNEWL 2 INDENT +! ; : EL5G NEWCR -2 INDENT +! PRNEWL 2 INDENT +! ; : EL6G NEWCR -2 INDENT +! PRNEWL ; : EL7G PRWORD GTNXWD PRNEWL INDENT 0SET ; : EL8G DUPBC 51 FINDCHAR DUP IF SWAP DROP OVER - 1+ PRNEWL ELSE DROP PRWORD THEN ; : EL9G PRNEWL ; : ELAG NEWCR 10 INDENT ! PRNEWL ; : ASSWRD DUP 4 >= IF OVER OVER + 1- C@ COMCHR = IF OVER DUP C@ ICONS = SWAP 1+ C@ FCONS = AND IF 2 ELSE 1 THEN ELSE 0 THEN ELSE 0 THEN ; --> : PRCWRD L1G GSCAN IF EL1G ELSE L2G GSCAN IF EL2G ELSE L3G GSCAN IF EL3G ELSE L4G GSCAN IF EL4G ELSE L5G GSCAN IF EL5G ELSE L6G GSCAN IF EL6G ELSE L7G GSCAN IF EL7G ELSE L8G GSCAN IF EL8G ELSE L9G GSCAN IF EL9G ELSE LAG GSCAN IF ELAG ELSE ASSWRD IF ASSWRD 2 = IF EL4G ELSE PRNEWL THEN ELSE PRWORD THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN THEN ; : FORLST TORLCR DUP TLFLG @ IF LISTLP ELSE TORLCR LIST THEN TORLCR TORLCR DUP BLK ! BLOCK DUP 1777 + SWAP KERKNT 0SET INDENT 0SET 0 BEGIN GTNXWD DUP IF PRCWRD THEN DUP 0= END DROP DROP DROP BLK 0SET ; : ASTER TORLCR 40 0 DO 52 SP@ 1 TORLY DROP LOOP TORLCR ; : FORSHW 1+ OVER DO ASTER I FORLST TORLCR LOOP DROP ; FORTH DEFINITIONS : FLST FORMY TLFLG 0SET FORLST ; : FLSTLP FORMY TLFLG 1SET FORLST FFLP ; : FSHW FORMY TLFLG 0SET FORSHW ; : FSHWLP FORMY TLFLG 1SET FORSHW FFLP ; BASE ! ;S ( EMPTY BLOCK ) ;S ( RS232 SUPPORT ) CODE SIO XSAVE STX, BOT LDA, E459 JSR, ( SIOV) XSAVE LDX, BOT STA, BOT 1+ STY, NEXT JMP, C; : SERR DUP 0< IF 0 100 U/ BASE @ DECIMAL ." SIO ERROR " . BASE ! QUIT ELSE DROP THEN ; CODE DORL XSAVE STX, 506 JSR, HERE 8 + JSR, XSAVE LDX, NEXT JMP, 0C ) JMP, C; : GETR: HERE 2E7 ! ( SET MEMLO ) FLUSH EMPTY-BUFFERS 150 300 ! ( DDEVIC,DUNIT) 403F 302 ! ( ? CMD,EXPECT DATA) 5 306 C! ( TIMEOUT) 500 304 ! ( BUFFER ADDR) 0C 308 ! ( LENGTH ) 0 30A ! ( AUXES ) 0 SIO SERR ( ERRORS?) 500 300 0C CMOVE 0 SIO SERR DORL ( RUN RELOCATOR ) 2E7 @ HERE - ALLOT HERE FENCE ! ; --> ( RS232 ) : R1: " R1: " DROP ; : R1OPEN 0 8 R1: OPEN ICSTA CH? ; : RYPE -DUP IF 1 IOCB 0B ICCOM C! ICBLL ! ICBAL ! CIO 20 ICCOM C! 0 I1CAX ! CIO ELSE DROP THEN ; : CRR 0A9B SP@ 2 RYPE DROP ; : REMIT SP@ 1 RYPE DROP ; : SET9600 1 IOCB 0E I1CAX ! 24 ICCOM C! R1: ICBAL ! CIO ICSTA CH? ; : LINER SCR @ (LINE) -TRAILING RYPE ; 100 VARIABLE LSPD : LISTR DUP SCR ! CRR " SCR#" RYPE 0 <# #S #> RYPE CRR 10 0 DO I 0 <# # # #> RYPE I LINER CRR LOOP ; ;S ( WRITE BOOTABLE OBJECT 1 OF 2 ) BASE @ FORTH DEFINITIONS HEX SAVENFAs ( TOP NFA ) HERE 1C +ORIGIN ! ( FENCE ) HERE 1E +ORIGIN ! ( DP ) HERE DUP FENCE ! 0 +ORIGIN - 80 / 1+ CONSTANT #SECT CODE CALLDK XSAVE STX, E453 JSR, TYA, PHA, ( STATUS ) XSAVE LDX, PUSH JMP, C; : DKIO 301 ! ( CMD, DRIVE # ) 30A ! ( SECT. # ) 304 ! ( RAM BUFFER ADDR ) CALLDK ( JSR DKHND) DUP 0< IF ." ERROR " 0FF AND BASE @ SWAP DECIMAL . BASE ! QUIT ENDIF DROP ; : WTSEC 5701 DKIO ; : RDSEC 5201 DKIO ; : FORMAT ." FORMAT DRIVE " DUP . ." -ARE YOU SURE?" 0 PAD ! PAD 1 EXPECT PAD C@ 59 ( Y) = IF 2100 OR PAD 0 ROT DKIO ELSE DROP THEN ; --> ( WRITE BOOTABLE OBJECT 2 OF 2 ) 0 VARIABLE BOOT ( ->CODE) : WTOBJ FLUSH ." INSERT NEW DISK, TYPE Y" CR 0 PAD ! ( DEFAULT ) PAD 3 EXPECT PAD C@ 59 = IF BOOT @ 1 WTSEC #SECT 0 DO I 80 * +ORIGIN I 2 + WTSEC I 2 + . LOOP ." DONE" CR THEN ; ( FOLLOWING IS BOOT SECTOR CODE ) HERE BOOT ! ( PT TO US ) ASSEMBLER 1FF , 480 , E4C0 , #SECT # LDA, 0= IF, 0 +ORIGIN , 1 , ENDIF, N STA, 52 # LDA, 302 STA, 48C LDA, 30A STA, 48D LDA, 30B STA, ( FIRST SECTOR) 1 # LDA, ( DRV) 301 STA, 48A LDA, 304 STA, 48B LDA, 305 STA, ( ORIGIN) BEGIN, 30A INC, 0= IF, 30B INC, ENDIF, E453 JSR, 303 LDA, .A ASL, CS IF, RTS, ( FRETURN ) ENDIF, 304 LDA, 80 # EOR, 304 STA, 0< NOT IF, 305 INC, ENDIF, ( BUMP PTR.) N DEC, 0= UNTIL, 48A LDA, 0A STA, 48B LDA, 0B STA, CLC, RTS, FORTH BASE ! ." n FORMAT" CR ." to Format Disk Drive n" CR ." WTOBJ to write bootable version of current object" CR ;S ( EMPTY BLOCK ) ;S ( DECUS-FORTH ADDITIONS ) : 1+! 1 SWAP +! ; : 1- 1 - ; : 0SET 0 SWAP ! ; : 2* DUP + ; : HD DUP 0A < IF 30 ELSE 37 ENDIF + EMIT ; : CHH DUP 0F0 AND 10 / HD 0F AND HD ; : CH? C@ CHH ; : HH DUP 0FF00 AND 100 / 0FF AND CHH CHH ; : H? @ HH ; : BDUMP 1+ SWAP DO I HH ." : " I 8 0 DO DUP I + CH? 20 EMIT LOOP DROP CR 8 +LOOP ; : TBL ; : ALLOC DUP + ALLOT ; ( FOR RAM BASED SYSTEMS,) : ARRAY ; ;S ( DISPLAY LIST STUFF ) 0 VARIABLE 3BYT 0 VARIABLE DLADR : DINST DLADR @ C@ DUP 0F AND IF DUP 0F AND 1 = IF 40 AND IF ." JVB " ELSE ." JMP " ENDIF DLADR 1+! DLADR @ @ DUP DLADR ! HH 3BYT 0SET ELSE DUP 0F AND 8 OVER < IF ." MAP" ELSE ." CHR" ENDIF 7 AND . DUP 10 AND IF ." H" THEN DUP 20 AND IF ." V" THEN DUP 80 AND IF ." I" ENDIF DUP 0B0 AND IF DUP 40 AND IF ." ," ENDIF ENDIF 40 AND IF 3 DLADR @ 1+ H? ELSE 1 ENDIF 3BYT ! ENDIF ELSE ." BLK" DUP 80 AND IF ." I," ENDIF 70 AND 10 / . 1 3BYT ! ENDIF CR 3BYT @ DLADR +! ; ;S ( DEBUGGER AIDS -- DUMP , CDUMP ) DECIMAL : ?EXIT ?TERMINAL IF LEAVE ENDIF ; : U.R 0 SWAP D.R ; : LDMP DUP 8 + SWAP DO I C@ 4 .R LOOP ; : DUMP OVER + SWAP DO CR I 5 U.R I LDMP ?EXIT 8 +LOOP CR ; : CDMP DUP 16 + SWAP DO I C@ EMIT LOOP ; HEX : CDUMP OVER + SWAP DO CR I 5 U.R I SPACE 1 2FE C! CDMP 0 2FE C! ?EXIT 10 +LOOP CR ; ;S ( CONSTANT INFO DISPLAY ) TBL XTRN 40 C, 0 C, 20 C, 60 C, CODE ASCINT BOT LDA, .A ROL, .A ROL, .A ROL, .A ROL, 03 # AND, TAY, BOT LDA, 9F # AND, XTRN ,Y ORA, BOT STA, NEXT JMP, C; : SYPE ( addr, straddr, cnt ) OVER + SWAP DO I C@ ASCINT OVER C! 1+ LOOP ; : (") R> DUP COUNT + >R COUNT ; : " COMPILE (") 22 WORD HERE C@ 1+ ALLOT ; IMMEDIATE HERE DUP 3F + FFC0 AND SWAP - ALLOT 28 ARRAY BUF TBL DLIST 5070 , 42 C, BUF , 1 C, 0 , HERE 2 - CN DLPTCH --> ( CONSTANT INFO DISPLAY cont. ) : INIT DLST @ DUP C@ 1 - IF DUP 3 + DLPTCH ! 1 OVER C! DLIST SWAP 1+ ! ELSE DROP THEN ; : DSPLY BUF " TOS=" SYPE >R ASSEMBLER UP FORTH @ 6 + @ SP@ 10 + MIN SP@ BEGIN 2+ OVER OVER > WHILE R> OVER @ 0 <# # # # # #> SYPE 1+ >R REPEAT DROP DROP R> " " SYPE DROP ; : WCR DSPLY INIT CR ; : FIX\ DROP ." " ; : INSTALL ' WCR CFA ' ABORT 6 + ! ' WCR CFA ' QUIT A + ! ' FIX\ CFA ' \ 40 + ! ; INSTALL ;S ( HIGH-LEVEL DISSASSEMBLER ) : TASK ; TASK DOG ' (;CODE) CFA CN .;CODE ' ;S CFA CN .;S ' BRANCH CFA CN .BR ' 0BRANCH CFA CN .0BR ' (DO) CFA CN .DO ' (LOOP) CFA CN .LOOP ' (+LOOP) CFA CN .+LOOP ' LIT CFA CN .LIT 0D6B CN .CLIT ' (.") CFA CN .(.") ' TASK CFA @ CN .: ' DOG CFA @ CN .DOES> ' COMPILE CFA CN .COMP 0 VARIABLE .IP ' BLK CFA @ CN .USR ' .;S CFA @ CN .CON ' .IP CFA @ CN .VAR 60 CN RTS, 40 CN RTI, --> ( HIGH-LEVEL DISSASSEMBLER ) : PRNAME 2+ NFA ID. ; : STRNG ( cfa--cfa prnt strng) DUP .(.") = IF PRNAME .IP @ DUP COUNT ROT OVER + 1+ .IP ! TYPE CR R> DROP ENDIF ; : LIT? ( cfa--cfa prints lit) DUP .LIT = IF PRNAME .IP @ @ . CR 2 .IP +! R> DROP ELSE DUP .CLIT = IF ." CLIT " DROP .IP @ C@ . CR 1 .IP +! R> DROP ENDIF ENDIF ; : COMP? DUP .COMP = IF PRNAME .IP @ @ PRNAME CR 2 .IP +! R> DROP ENDIF ; : PROMPT ." ok " CR ; : ENDEF ( cfa--cfa aborts@end) DUP .;CODE = OVER .;S = OR IF PRNAME CR PROMPT QUIT ENDIF ; : BRNCH ( cfa--cfa prnts dst) DUP .BR = OVER .0BR = OR OVER .LOOP = OR OVER .+LOOP = OR IF PRNAME ." to " .IP @ DUP @ + . CR 2 .IP +! R> DROP ENDIF ; --> ( DECOMP DISSASSEMBLER PBL 82) 3D CN OPTAB 200 CN OPOFF 300 CN MODOFF : 1OP .IP @ DUP HH ." : " C@ 1 .IP +! DUP CHH SPACE ; ( --op) : INDX ( off base--addr) + B/BUF /MOD [ OPTAB B/SCR * ] LITERAL + BLOCK + ; : OPLUK ( op--opind modind #op) DUP + 0 INDX DUP C@ SWAP 1+ C@ 40 /MOD ; : OPANDP ( #bytes--) DUP -DUP IF .IP @ C@ CHH SPACE 1 - IF .IP @ 1+ C@ CHH ELSE 2 SPACES ENDIF ELSE 5 SPACES ENDIF ." - " -DUP IF 1 - IF .IP @ @ 2 ELSE .IP @ C@ 1 ENDIF .IP +! HH SPACE ELSE 5 SPACES ENDIF ; : MODP ( modind--) MODOFF INDX 2 TYPE SPACE ; : OPP ( opind--) OPOFF INDX 3 TYPE ." , " CR ; --> ( DECOMP DISSASSEMBLER PBL 82) : BR? ( mode #op--mode) OVER 10 = IF .IP @ DUP C@ CHH ." - " DUP C@ DUP 80 AND IF FF00 OR ENDIF 1+ + HH .IP +! SPACE ELSE OPANDP ENDIF ; : 1LINE 1OP OPLUK BR? MODP OPP ; : JMPEX ( --f test endef jmps) .IP @ C@ 4C = IF .IP @ 1+ @ DUP ASSEMBLER NEXT = OVER W 1 - = OR OVER POP = OR OVER PUSH = OR OVER PUT = OR SWAP POPTWO FORTH = OR DUP IF ENDIF ELSE 0 ENDIF ; : ;CEND .IP @ C@ DUP RTS, = SWAP RTI, = OR JMPEX OR ; : 1WRD BEGIN 1LINE ;CEND UNTIL 1LINE ; : CSEE 1WRD ; : DIS .IP ! 1WRD ; : NDIS .IP ! 0 DO 1LINE LOOP ; : ISCODE .IP @ DUP 2 - @ = IF ." primitive " CR 1WRD ELSE .IP @ CFA @ DUP 2 - @ SWAP .IP ! .;CODE = IF ." ;CODE word" CR ELSE ." odd entry point" CR ENDIF 1WRD ENDIF ; --> ( HIGH-LEVEL DISSASSEMBLER ) : ISCOL ( -- or ) .IP @ DUP CFA @ .: - IF DUP CFA @ DUP .DOES> = IF .IP @ @ .IP ! ." DOES> word" CR DROP 1 ELSE SWAP DROP DUP .CON = IF ." CONSTANT : " .IP @ @ HH CR DROP ELSE DUP .USR = IF ." USER variable " DROP CR ELSE .VAR = IF ." VARIABLE : " .IP @ DUP HH @ ." = " HH CR ELSE ISCODE ENDIF ENDIF ENDIF 0 ENDIF ELSE 1 ENDIF ; : NXTW 2 SPACES .IP @ DUP HH ." : " @ 2 .IP +! 2 SPACES LIT? BRNCH COMP? STRNG ENDEF PRNAME CR ; : FETCHW [COMPILE] ' .IP ! ISCOL IF NFA C@ 40 AND IF ." immediate" CR ENDIF ELSE PROMPT QUIT ENDIF ; : DECOMP FETCHW BEGIN NXTW ?TERMINAL IF PROMPT QUIT ENDIF AGAIN ; : ZZ DECOMP ; ;S !iDi@ @oiB i PiFiH H*ii WD@@x@uBxxPFHxHxHDH@c@lHBcTHc$PHFHHcH0HHcD@rB{T'PFHD@@@E PFHHJ`BZD]B`@Z@]@ZB`Z]PZF`HZH]J3Z`Z] ( DISK BACKUP USING ONE DRIVE SCREEN #2 ) : BACKUP 1 2D0 CSECTS CR ." BACKUP COMPLETE!" CR ; ( n1 n2 CSECTS copies sectors n1 to n2 inclusive ) ;S ( CLONING WORDS 7/21/80-SRC ) HEX FORTH DEFINITIONS : COPYDISK DR0 4E 0 DO I 0800 + I EDITOR COPY FORTH LOOP ; : CLONE DR0 0 PHYSOFF ! 4E B + 0 DO I 0800 + I EDITOR COPY FORTH LOOP DR0 ; : 1.2TO1.3 DR0 8 OFFSET ! 4E 0 DO I 0803 + I EDITOR COPY FORTH LOOP DR0 ; : 1.3TO1.4 DR0 B PHYSOFF ! 4E 0 DO I 0801 + I COPY LOOP DR0 ; : OBJ DR0 0 PHYSOFF ! C 0 DO I 0800 + I EDITOR COPY FORTH LOOP DR0 ; CR ." INSERT SRCE DISK IN DRIVE 2 " CR ." INSERT DEST DISK IN DRIVE 1" CR ." TYPE CLONE TO COPY ALL OF IT" CR ." INCLUDING BOOT PROGRAM" CR ." TYPE COPYDISK TO COPY" CR ." SCREENS 0 TO 4E" CR ." TYPE OBJ TO COPY JUST" CR ." THE BOOTSTRAP B BLOCKS" CR ." TYPE 1.2TO1.3 TO COPY " CR ." OR TYPE 1.3TO1.4 TO COPY" CR ." YOUR OLD DISK SOURCES " CR ." TO THE NEW VERSION " CR ;S ( EMPTY BLOCK ) ;S