2 𩓍ЩЍЩR     S `I0ݭ  Ql`&jDoLLjjAIiciiFihmiiLI: HʕhiLm H `EXECUTŐ LBRANCȨ eHȱehLT 0BRANC iLR (LOOP  h[L (+LOOPHH}h}hL(DOOHHHH_LR % nHLK 4 [DIGIԇ80HLM  LLHLM H(FIND s Q)?/ȱQ %_ʀieeHLK ǠȱеHLK ENCLOS$ s 88LR LR D8Upǔ666uuuuLR CMOV s LR LU666ǐuuuLR U" *66866L]dAN_5H5LM OtHLM XOҊUHULM SPHLK SPLR jRPLR ;hhLR iLEAVLR >RHHLR RhhLR %HLK 0;ȔLR 60P*LR UbHLhHLh~PIHLhHLhuuLR zDuuuuL[]MINU8LR DMINU8LoOVE HLK DRO]SWA'HLM DU?HLK +NuuL[9TOGGLoUL[K~HLM ICLR YL[CL[!i%s|f?9HHieLR CONSTAN? 9HȱLK VARIABL 9iHeLK USE 9eHeLK zkB sC/ #LINK"FIRSfLIMI {B/BUB/SC[HIME+ORIGI8 TIJ WIDTJ WARNINJFENCJD VOC-LINJBLJcIJOUUSCJ?OFFSEJICONTEXJ ^CURRENJ"kSTATJ$.BASJ&DPJ( FLJ*xCSJ,RJ.HLJ07INPJ2PHYSOFJ41e2mHER|ALLOTGLmCe?+-9%|RO%%SPAC~"7-DU= = TRAVERSŏuuL]LATES]]Ms|fk |  ` % aCFm-CNFu-8 PFeuLFm-!CSR?ERRO%  1?COM~|9k 8L?EXE~|k 8c?PAIR-k 8x?CS|-k 8?LOADIN2|9k 8COMPILR=| ]~qk ~SMUDGǭk mHEk DECIMAk  (;CODE;COD9) >#EXPEC] %M"=9 f]f  QUER|k x?]:2| *e2L]:2|e-]9 i  FIL s LR 8ERAS]OBLANK~HOL8 L|PAk DWOR2|v  |:|%"k ":L -#97BITӋ s )LR ((NUMBER=| &|n]| eL NUMBE]]S=k -9=8 =~- =k .-]8]  HASe-]==m-FIN~>f|C=9 f|s|- s|C>(ABORT~cERRO|N # ? !2|v :|%NoID,k k _= -,%,k ]=,=k ]%#gCREAT|k `m8] i k !g=|Tk 9=k me-k ms| Cm-  |%m-m 8OMPILEi9]8 qLITERA~| 8 DLITERA~| %?STACk |%`e8k |`k 8INTERPREi ~||     |   CIMMEDIATk @mVOCABULARg)| )]Ms|fk m 8  wfFORTȃic"kj_l-kjnjDEFINITIONf|sk )>QUI]2TuM~|9  oK IABORǭTfig-FORTH 1.4S]8 .NCOLIJ# " #     ةlLGS->=N+N "D+N xAB=!DAB=%MI  E %PMA  | %h%ǂM  7%7%M F#7 #%%/MO%MO*/MO*%M/MO]# % <PTA1  ALLOT-V @PRE1G3AL1L"EMPTY-BUFFERl|k b|M]fk k ADR]Yk DR8 Yk BFN]%l|k b|M=f|9 fk  %f%k BUFFE==9 l|#|#|#k =b|- '=k - k k -=b|9  b|k b|=b| - 5b|k k ] b||b||]O$]b|k b|b|| BLOCY|=b||-b|k 9r 8& =b|k 9 b||eO$eb|k   b|m|](LINE Dž.LINd!e8 #]8 rMESSAG| Kv A=k E k -m k Y|-k @ k @# MSG # <(LOA2|:|]:2M:2!--]:2| -2LhICCBa"ICLHl"ICAD "TCIO֊" VHLK KE|"k f"eq"" ~=k 9 ]?"EMIe#"Ck "?TERMINA]"TYPv k f"q"|"" ~  #DECMAD#&*&   ee8 (iiǕLR "SIύ# YLR #SECI8 8 k ]m9 k @ k 8 k 8 k 18 ]#v k !;#DIk 8 #8 |k 8 #DDI8 8 #8 |8 8  R/ k R k P8 %8 ]8  =u]8 %k %=k ] E8 k r8 k ] ] 8 %k ]M=B#$  Dk ] mk ]M='$ "|k k ]M=$ !FLUSl|k b|Mfk k ] f|f|]O$efk k "UPDATk b|k "i9]8&%FORGEs|f|-k 8%=|`k 8)|# ` .|=) ]M=mfk =m|=l` % |v9 m-K$BAC- 6&BEGIRes%ENDIRm -%"$THE_&u&DMu&LOOu ;&#+LOOu;&Y&UNTIe ;&&EN&w"AGAIe ;&G&REPEAG&m-_&&I ] m&ELSm ] %m_&m%WHIL'&SPACE]lv ]Mg &<,7Y'#|, -'SIGSN k -'|(Sk | k k 0'#'  r9 z'D.% F}'''' -`'#'D]'g%.')(|k 9  ](I'|<((LIS"=MSCR # <(]M"fu,(gfM|! "'INDE"%M"fu,(g]f!#  e(TRIAuuu %M"fj( "k !"k ":(VLIS]M(2f|fk |ff ]Mff| eM  ` % = 4]Mffǜ| 9 =|ff v 92 2(ASSEMBLE҃/../2///-XSAVUpI)PO]*POPTW["*PUM /*PUSK *NEXR SETUs *INDE1  tx} ǀ,)MOD1D*.]*O*e**MEm*,u**,8 *9*X8 *[*)8 **ǩ8 * BO*]*SE*m+RP*8 *UPMOD *8 ]9 8 *Le*8 ]v ]M= |]9+CPgw*++BRK++CLC++CLD+غ+CLI+X+CLV+*DEX++DEY+*INX++INY+Ȑ*NOP+*PHA+H,PHP+&,PLA+h2,PLP+(+RTI+@J,RTS+`+SEC+8b,SED+n,SEI+x+TAX+,TAY+,TSX+,TXA+,TXS+,TYA+;+M/CPg w=8 ] 8 *L 8 ]B+B+ *"u*a**8 ] *8 ]8 |   *,ADC,`nR-AND, nz,CMP,n,EORǬ,@n,LDA,n)ORA,nn-SBC,n-STA,l`-ASL, -DEC, -INC, -LSR,A V,ROL,ǃ,! -ROR,a -STX,.CPX,%.CPY,-LDX,A.LDY, 3.STY, .JSR,k.JMP,@y.BIT, .BEGINe|-UNTILie--IF]m.ENDIFim  % -%.ELSEme~.% -%mO.THEN. /END.,NO8 ].C>,0f/0M/>x/VP]/Cs|fi'CODi?)*%o/xe/hihiHHLR /xec/hhl@/EXEC8 /Gp. 8 / )1+e%L01e-]!0SE]%&2=/0H=8 | 8 0 8 7"/CH=8 ]I8 P08 ]P0r0CHv0M0H=8 ]8 8 ]v0v00H|0(TBgw"0ALLO=0ARRAg0w0:|:)NO9('U](0C 0("=@0D18 ">1DEPT8 -m1."v1 (8 8 v1m-C0-%Mf[(8  e!51SAVENFA]M8 8 f8 |8 "fC0 1DžV1.42 R'SЍ`2ve8 %2v8 U|8 | 8 8 U "8 U|8 | 8 8 U "62v"]8 p1TO-FLA12Tϣ22LR }2VA 92HȱLK L22ȑL]2VALU]2@1PIC2 eHLM V1ROL3 HhhhʈLR 1CASR|%8 Y(O8  9 ] 8 x(1ENDO8  ] %m_&8 3ENDCAS8 |99 m_& B3CH3CH43CH8! fff`<|fl0fF68of;880@A GI 0O^0f< 80 0 ~~`0 0`f``f<&fzbx`bbx``||ff~fff xlxxl```bv~nf<~f<)ff|``<|<.fZ<fff<<f<f`f< |v000|000`~`|fff8<f<`lxxl8fk<oۀfff`<|~fff;bt8|lf<|~L2~<~~<h8x8 fff`<|fl0fF68of;880@A GI 0O^0f< 80 0 ~~`0 0`f``f<&fzbx`bbx``||ff~fff xlxxl```bv~nf<~f<[)ff|``<|<.fZ<fff<<f<f`f< |v000|000`~`|fff8<f<`lxxl8fk<oۀfff`<|~fff;bt8|lf<|~L2~<~~<h8x83CHRS14BIC>Y3OCTA8 [>OCa>=TASgw=MSBYT]8  %{>LSBYT8 ]>MS>>LS>c<>=>8 %>0IO1P>IO1>IOC8 T]l8 =>8 @>>.IOg w|>|>ICDNσ3???ICCO̓3?M?ICST3?[?ICBÃ3?i?ICPT̃3?w?ICBL̃3??I1CA؃3? ?I2CA؃3?  VhLR o>Ge?> VHLK ?GE8 S???CLOS8 S?dz??OPEuS?o?????ACI,@> VL]&?F1AU?C1AU=@F2AUI@C2AUU@F3AUa@C3AUm@F4AUy@C4AUґ@SKCT%@AUDCT>DLS0@DMACT/O>RTCL@CRSIN@CHBA@COL@COL@COL ACOLACOLACONSO*AC@BOTS@LMARGR@ATACH>MEMTOYAATRACMLAdžDRKMSN7ACOLRSO@WSYN ԍAS1S:ACOLOR1sAQbas12PBASA|AGRe??]?=8 ]%8 0]8 G8 A @mA|e8 ]8 -=A8 mAAPOS8 T8 UALOC7B?AC=A`AXBSP|8 ]8 -m=A8 2BPU8 S?*@BPL7BA|B@FILDAkBSE%8 %8 IBDR7B8 S?A=`AB?AGRAPHICABPLOBBLOCATNBBSETCOLOB7CCOLO[BCPOSITIO7B(CDRAWTBHCCLEA]]7B8 }BVCXIO1=B`A8 S??vCSOUNu8 Ҹ]8 Ҹ%8 8 %m8 ҜCPADDL8 pCPTRI8 |CSTIC8 xDSTRI8 @ARN8 ґ CGRACTCPMBASXDPRIOлBVDELA'DCOLPKDGPRIOoeDPLAYEA_DuRDm- 8  8 @|8 ]r@DHPOS8 М~DSIZE8 МDdžCOLPMDqDNOPLRD408 8 ]gCTHERmA|EFRE5E-fAEOUT1DPOUT1PEECH1hEEVTB1ALLOT \EPPUTÖEldE`sEEPUTäEoEHHoE EhhlXEEPO8 |VE8 6|bE8 8 {E8 8 E%08 {E8 8 {E8 !EPOF8 8 !ESIF YLR FSER=N )]8  |$ SIO ERROR <(N /EDORtF  FLR l DGETR8 ,%8 P8 8 ?@8 8 8 8 8 8 8 ]8 ]F6F8 8 8 ]F6FrF8 |-Ǡ;DR1D1R1: 1F3BY1mFDLAD1$GDINS*G|=8 ] =8 ]e9 88 @] JVB JMP *G0*G||=*G0G40 =8 ]8  | MAP CHR8 ]<(=8 ] H=8 ] V=8 ] I=8 ] =8 @] ,8 @] u*G|0 eG -BLK=8 ] I,8 p]8 <(eG"G|*GLGr/8 e9 | ]EUNLIN8 iH8 Q$8 0GLIN8 ~8 Q$8 HTMPHYӷ2GSETPHY8 8 8 2H=>8 Ǹ>8 cHRESPHYH|=>8 >8 HEDITO҃),iK_\l`~\)`z`6IEDIM F=IHTEX>,H#OFLINExILIN=I]  NOT ON SCREEN~M|d!FWHER==MSCR # <(%S "#"-`'8 ^"=IN-MOVIz%HI,=, BIz%S=e-Im-MfIf4J8 ^JD=EJIe-=SMfIf4J ^JlJCM|MEJM[JR,%4JJe}IJ.JeG}I=oJJI=oJJJT=<($ =EJ,#"ICOP% % 8 z%,%IDOǃ>?E.;COD9nK.;{K.B K.0B K.DMK.LOO K.+LOOK.LI8 K.CLIk K.(."K.K.DOESK.COMK.I1L.USJ L.COL.VA1IRTS`-LRTI@FPRNAMGKSTRN=K9 JLL|=S L#"dKLIT=K9 JLL||<("mLL *=K9 CLIT L|<("eLLVLCOMP=K9 JLL||JL"mLLCLPROMP]8 ok "eIENDE=uK9 K9r JL"MN8LBRNC=K9 K9r K9r K9r "JLto L|=|<("mLLIOPTAMOPOF*MMODOFA1OL|=0: eLL=v0gMIND8  MOPLU=]M=%8 @NOPAND=v *L|v0ge- L|v0 m`' 8 `' - v *e- L||qm L|eLL0g 8 `'MMODMMm#g'NOPMMu#, "PMBR 8 9 ;L|=v0u - ==8 ] 8 r0LLg .NM1LINM NNNNNJMPEL|8 L9 FL||=I*9 )e-9r *9r >*9r 3*9r%)*9r=  ]L;CENL|=2L9%=L9r?Or#O1WR)OO )OOCSEOLDILO"LNDIL]M)O OISCODL|=m-|9  primitive "O IL||=m-|%LuK9  ;CODE word" odd entry point"O PISCOL|=|K- =|=K9 #L||L DOES> word"e %=L9  CONSTANT : L||0" U=L9 USER variable " 2'L9 ( VARIABLE : L|=0| = 0" P] eONXTm`'L|=0 : |mLLm`'ǏLVML\L0MJL"[QFETCH%LP "8 @]  immediate" MNODECOMe8 Q`Q# MN 9OZQQBDUMe8 %Mf0gf8 ]M=f0g "8 ]8 QFIXQR8 ]M8 f-|8 L|fmmVRN MXTR΃0@ `PASCINRP*))RLR OSYP %MfR  ALLOT$ $@ORBUƃ04/3 d|fig &/24(3&/24(3QDLISԃ0pPBJS#SDLPTCSRABORT1"SQUIT1"SINI]@@|=e- =uSe GS% 8 "@SDSPLFSD1TOS->R*|8 |8 T  E  |]}''''''R D1#  fig-FORTH 1.4SRRSS#TS"|=8 9 8 D8  @=8 9 8 8  &=m9 8 8  =8 8  <@TSTACKO8 T8 8 8 T8 P8 8 XR8 fR8 @USTACKOFS|8 8 S|8 P8 8 |8 ]A8 8 cUSTO'UUSTOlUN8 ~}I8 ]M=,f%f ,VRNUCDUMe8 %Mf0  f8 ]M=f" g8 ~""8 ]8 RPATC%%=8 BSJMЀVǵlzVJSғV VL]JCOL11VCOL21JEDLɾVHHVEO%NVEO%N ԎЍhh@VCOLSEA=8 ]V8 ]AǑ8 ]VKTOPFLA1WL#FLǷ2VSPTCȷ2,WSFLǷ2VEDVE÷28WSOUNDOe2=WOWSOUNDOF]2=WUSNDOFM]]]CBJP8 22W=W 8 (]M]2W8 8 C ]WCWEDBƃ0f f* WDLSTMЃ036A A PWEDLSԃ0@U@GWA XDLSE8 |2IW8 V8 WW|<9 D1UPP D1LOWRD1ER HALF SCR # RM|]}'''RD1@ R@|JX8 JX@|8 8 8 8 Ը}cWKBDV1XKCH YT h@lXDXEDKI%Yx Đ XX Y XLR YEDKINYxXX XLR FYEDCLA|A|]AAA <@aYEDLgYV]@dX8 "@#Y8 "SA$A=8 ]%8 8 ]@YEDL8 8 ԸIW8 LY8 28 8 R8 28 8 S]@&X@|8 8 8 "@8 8 Ը".L&W 8 ]M=]f7Bf<( u8 7BYUL=WM|YY Yu]7B8 e=8 8 #"DOIT8 8 uZU]yZ]EZ]=8 8 8 W^XL8 yZ8 EZ]=8 8 8 WZDOI8 ]M8 8 uf7BM| f8 W|o?8 ?? z%W|9 Z ZAZFORTYYCOP{[LKu[FLUS{[,%[F[[L#Oe2&W|E8  [[L#OF]2&W[VVH8 8 TD$8 D8 VBC>8 8 \B8 8 UW8 8 8\G8 8 bRN8 ʔ8 [LjIZZUjIZ[8 WM|jIZW8 WM|%0jIZq\M|jIZ\8 W8 Wl||jIZ[S=oJ8 | Z GZNED=I]U=I\[L=It\!]L]=@"8 "@.]Lj(O]M|j(^\M|j([M|%0j(h]Nj(xWSHO%Mfj( Z]L=Ie%8 '8 SMf"K ]SAVE-BUFFER,%]ERASE-COR]TRCR]l||j(]^ H LK ]EMPT]8 ^CDAԃ0... Y.Yg ^DAT%Mf 8 7J^%8 z%,% ]NEWDAT"DATE: J^8 #=Nj^DATE8 }I,J^8 \DATM| 8 J^%8 zb%Z^LISYj(_L _^N->M}'''%\ZERO-BLOCM| ==8 8 D1$\ scr#g rempty blocky 1/1 ;S S%8 &_S%z%,%^LZER%MfMC_ JZERO-BLOCYC_ ]Z\NUZ_NLZ_LOA[v19 M|"_T8 W8 Wl||jIZ_N8 WM|ejIZ\P8 WM|e-jIZWIP_ `DRAI_` to wipe, N to abort "8 N 19 d`_DRAIK\WIPC_/^EBL1E^SBL1x]PSBL1`DIS`|8 `GTPA`|`|]``MVIaMf `e`L &aMOVOaY|%Y|%Mf& `%e`Lz%,% `DUPLICAT```|`|-DE8 -8 E  TOO MANY N"+aINSERT DESTINATION DISK "RETURN TO CONTINUE ""Oa`CPS"? Incorrect screen range"NbCPN"scr# %=<( --> %=<(=,%!_FIN0dd]M, cc%Mf==g<( wd.c " "" Search ended"cP1P:ePCI+ep VHLK aLPCN1$ePERR=N 8 ] P: ERROR ;eLPOPEu8 Ǹe8 m8 8 8 )eMeqeLYP8 8 8 8 )eMeeLPEMIeeeLPC8 eeAeLeLYP= G=8 PE eAeLe 8 ee~cCRLeAe|8 =E eeee]AedFFL3fAe| 3f .fSHRIN8 еe8 e3fcEXPAN8 e8 e3fWf.CL]}''''ef.L]}'''eeLINEL=fM|d!ele3frfSCR1SCR # fLISTL=Mf8 efe]Mff gLPSP]M8 e fSHOWL%8 9 hM3ff8 eff8 >gf8 eff3ff8 ]M=MfffM|d!e8 >g=Mff m M3ff g \f8gLPINDE%Mff]fd!ee RgSETSYSA|=>8 28 >8 28 A|=>8 28 >8 28 $A>8 28 GeHOO%8 2fUNHOO8 8 2gtranslat=9 8  ==8 `E%8 {|] 8 -htrnsbl8 ]M=f=h% nhPNSCOP% =h% 8 z%,%D`PNYM| hz% ]ZhDR8 fVERIF8 W8 ^$ViNOVERIF8 P8 ^$Ǹ hSY]@8 "8 "@iCLON8 "dGOBOOԿiLwiG'UN\8_Z)iWARNOeiWARNOF]i#SECjCALLDj SHLK FiDKI8 8 8 j=N !ERROR 8 ]|%$<(NiWTSE%8 8 tjGxX^saZ2jWARNOejWARNOF]Vj#SECjCALLDj SHLK iDKI8 8 8 j=Device Timeout@ aDevice NAK (Negative AcKnowledge) Serial Bus input framing error@ SCursor out of range Serial Bus data-frame overrun@ eSerial Bus data-frame checksum error. Device-done error@ ^Read-after-write compare error #Function not implemented in handler@ PInsufficient RAM F0( ERROR MESSAGES ) 135 159 9 8 7 10 ;S@ Kempty stack Edictionary full@ Zhas incorrect address mode isn't unique disc range ??@ Lfull stack ! disc error ! THIS IS IT@ HHELP ME! ( USER INDEX SCR ... .F ;S ̠ԺΠSCR #|M UContents` l00/00| INDEX 01/01| COVER SCREEN 502/06| ERROR MESSAGES@ \07/0A| BOOT MAKER - call SYSe f|  | 70B/0B| disk RPM checker@ K0C/0E| FREE` |0F/0F| low level DECOMP info 5ϠԠŠŠӠ17/18| REV.G COMMENTS@ O10/23| TUTORIAL` 24/2A| COMMAND SUMMARY/REV NOTES30/32| DUMB TERMINAL V.1.0 K33/37| Formatted LIST program 38/3F| FREEe f|  |% &|E F|e f| `ϠŠϠŠԠƠŠˠBGL^ξ* fig-FORTH MODEL * e |Through the courtesy of F ZFORTH INTEREST GROUPi wP. O. BOX 1105 C SAN CARLOS, CA. 94070G YImplemented on thei wATARI 800/400  by* 6Steve CalfeeM T1/26/81m t4/01/82  PETER LIPSON/ROBIN ZIEGLER- 44/10/82I XHARALD STRIEPEh y5/5/82 - 10/16/82  XL Mods - John Stanley 18Jun85% 1RELEASE 1.4S6 ;REV.HE [WITH COMPILER SECURITYe {VARIABLE LENGTH NAMES SWITCHABLE TOP OF STACK DISPLAY% =DECOMPILER/DISSASSEMBLERB ENHANCED SCREEN EDITOR & FAST EDIT WORDS, BASE BORDER DISPLAY ENHANCED SYSTEM SET UP/BOOTMKR' :DRIVE 2 LINK/UNLINKE ^Further distribution muste include the above notice. Abort.@ RIOCB already open. Non-existant device.@ SIOCB is write-only. !Invalid command (for this device)@ XDevice or file not open. Bad IOCB #@ QIOCB is read-only End Of File@ PTruncated Record Device Timeout@ aDevice NAK (Negative AcKnowledge) Serial Bus input framing error@ SCursor out of range Serial Bus data-frame overrun@ eSerial Bus data-frame checksum error. Device-done error@ ^Read-after-write compare error #Function not implemented in handler@ PInsufficient RAM F0( ERROR MESSAGES ) 135 159 9 8 7 10 ;S@ Kempty stack dictionary full@ Zhas incorrect address mode isn't unique disc range ??@ Lfull stack ! disc error ! THIS IS IT@ HHELP ME! ( ERROR MESSAGES )@ ccompilation only, use in definition execution only@ Wconditionals not paired definition not finished@ Win protected dictionary use only when loading@ Zoff current editing screen declare vocabulary@ \outside allocated file space writing off current line C@ Ustring stack empty !!  !( TARGET COMPILER ERROR MESSAGES2 ?WFR-79JUN02 ) #below lower bound of virtual memory@ gdisc compiler assembly error in mode of can't find in TARGET@ Mtarget redef. !T: error, is it paired with T; ?@ [above virtual memory bounds ( SYS/BOOTMAKER 1/4 )# :FORTH DEFINITIONS HEXC KSAVENFAsa HERE 1C +ORIGIN ! ( FENCE ) ! :HERE 1E +ORIGIN ! ( DP )a HERE DUP FENCE ! 0 +ORIGIN - ! 980 / 1+ CONSTANT #SECTb CODE CALLDK XSAVE STX, E453  JSR, TYA, PHA, ( STATUS )" 9XSAVE LDX, PUSH JMP, C; : DKIO 301 ! ( CMD, DRIVE # )" 930A ! ( SECT. # ) 304 !B ( RAM BUFFER ) CALLDK ( DKHND) DUP 0< IF ." ERROR " 0FF AND  BASE @ SWAP DECIMAL" <. BASE ! QUIT ENDIF DROP ;@ \: WTSEC SWAP 304 ! 130 300 !` ( verif $57->) 50 302 C! SECIO ; : RDSEC SWAP 304 ! 130 300 !) <52 302 C! SECIO ;@ : FORMAT ." FORMAT DRIVE " DUP . ." -ARE YOU SURE?" 0 PAD ! PAD 1 @EXPECT PAD C@ 59 ( Y) = IF 2100 OR PAD 0 ROT DKIO ELSEH SDROP THEN ;a 0 VARIABLE BOOT ( ->CODE ) --> C( SYS SET UP/BOOTMKR 2/4 ) : MAKEBOOT FLUSH EMPTY-BUFFERS ." INSERT NEW DISK, TYPE Y" CR 0 PAD ! ( DEFAULT ) PAD 3 EXPECT PAD C@ 59 = IF 1 52 C! CR! ." Writing sectors:" CR CR BOOT @ 1 DUP . WTSEC #SECT 0 DO I 80 * +ORIGIN I 2 + WTSEC I 2 + = . LOOP 0 52 C! CR ." BOOT COMPLETED" CR THEN ; ( BOOT CODE:)A YHERE BOOT ! ( PT TO US )a ASSEMBLER 1FF , 480 , ' V1.4S ,2 #SECT # LDA, 0= IF, 0 +ORIGIN , 1 , ENDIF, N STA,6 <2C8 C@A [# LDA, 2C8 STA, D01A STA,d 2C6 C@ # LDA, 2C6 STA, D018 STA,! 52 # LDA, 302 STA, 48C LDA, 30A STA, 48D LDA, 30B STA, ( SCT1 ) 1 # LDA, 301 STA, 48A LDA, 304 @STA, 48B LDA, 305 STA, ( ORIGIN) BEGIN, 30A INC, 0= IF, 30B INC,G ENDIF, E453 JSR, 303 LDA, .A ASL, CS IF, RTS, ( FRETURN ) =ENDIF, 304 LDA, 80 # EOR, 304 STA, 0< NOT IF, 305 INC,A ENDIF, ( BUMP PTR.) N DEC, 0= UNTIL, 48A LDA, 0A STA, 48B LDA,? 0B STA, E C@ # LDA, 2E7 STA, F C@ # LDA, 2E8 STA, CLC, RTS,C HFORTHb e--> ( BACKUP HES 82AUG15 3/4 ) ( 35F ARRAY BUCD BLK @ BLOCK A0 + BUCD 35F CMOVE CODE bg E474 JMP, C; : BACKUP BUCD 480 35F CMOVE 480 C ! bg ; ) --> j8iR'Sx867X /E /XB / / / /1    I  Lȍ /ɠ R    /  ` /! 8  /Q P  `詀R@ YLii    R `Я` /m L / / L  ` LwPpM`W7 ` / Lfig-FORTH 1.4S FAST BACKUP Vers.1.2 BY H.E.STRIEPE 1982 START - commence I/O SELECT - write with verify OPTION - REBOOTInsert source disk and press START, or select OPTION to REBOOTReading SOURCE disk...Insert destination disk, press START, or SELECTWriting DESTINATION disk...*, DUPLICATION SUCCESSFUL 2*49*S DISK I/O ERROR!TRY AGAIN X*Z`*x BREAK KEY INTERRUPT! ~*( SYS SET UP/BOOTMKR 4/4 )! @: DoFORget ( Forgets below )E `' TEXT NFA FENCE ! ( fence)e u0 FORGET TEXT ; # &HEXC YLMARGN @ 2700 LMARGN !` ." }fig-FORTH 1.4S SYSTEM SET-CUP Vers.1.1 " CR CR M." DoFORget WORD forgets below FENCE." CR CR` l." n SETPHYSr permanently ch$ anges the 5OFFSET of screen #0." CR CR@ J." RESPHYSR jresets the OFFSET to itsz original value; use" CR "."2 Hn SETPHYS twice to setZ wRESPHYS to a new value" CR CR ." n FORMAT 2formats disk in drive n. " CR CR` k." MAKEBOOTr writes out com piled boot' 3sectors." CR@ I." SETSYSR psets booton parameters:" CR ." )screen margins, colors" CR CR ( ." BACKUP2 Sfast single drive utility " CR )a LMARGN ! EMPTY-BUFFERS SP! ;S ( DISK RPM CHECKER 1/1 ) > DECOMP DISASSEMBLER STUFF << DO NOT MOVE FROM THIS SCREEN ! ( Greetings from )* 24 LIST = crib sheet > welcomes you to the world of Atari fig-Forth. We aretrying to make FORTH easy for you to learn and use. Since we are learning too, we would be pleased to get any feed back youmay have on this version of fig-FORTH, and the included documen-tation. Please send any commentsto Team Atari, 4029 Payne Ave., \San Jose, Ca., 95117 or leave E-mail on Compuserve for [70525,434] We'll try to answer all` correspondence. (TYPE LL) ȫThis disk is an attempt to writea self-tutorial on using this version of fig-FORTH. Just read the text and try the examples by[placing the cursor on the line with the example and pressing the key. Have fun.d 0 LIST is a catalogue. ;Let's try out a couple of words.( UPPER LIST & LOWER LIST )` Ok To begin, type in the lower {screen area. First type UL then to return here type LL , then to go to the next screen by pressing C( PREVIOUS, NEXT, TOGGLE )Now type P and then use the T command to get back here. OK, N = next, P = previous and T = Z|toggle; FORTH stores the last two screens you LOADed or LISTedor EDITed in two buffers which you can toggle by using . This is especially handy to \compare screens from different areas of a disk, or from two` pdifferent disks. XThe next handy-dandy command to learn is the INDEX word.f y(TYPE LL TO CONT.) and then typing 0 4D INDEX.f y( Must be in caps ) {<."> is a FORTH word pronounced DOT QUOTE that works with <"> pronounced QUOTE to print the text included between them. 宮!<ϠΠŠŠB\報b{̠ \Now to print the Index, you needto get your printer all ready, type LPOPEN, and then type-` 0 4D LPINDEX. This will print itout. To print any single screen you type xx LISTLP (xx being thescreen number). Two screens may be shown side by side on a page from the printer by typing - `xx SHOWLP. This will print scrn.xx and the next screen after xx. >ҠϠΠŠ`` ( BACKUP/CSECTS/WARN/GS/WS/N/+ )By now you may have wondered howto copy this disk. You can't do it using standard DOS as there [is no Directory on a FORTH disk.You can use 'SUPERDUP', ARCHIVE,or any other sector copier.` The word SYS will load several Cuseful words like FORMAT and vMAKEBOOT. MAKEBOOT makes a boot-able disk with all the words youhave defined included.z SYS liwill load a menu screen giving instructions. NOTE: DO NOT MOVE any of the screens 1 through B and F !!!v (type LL) To turn on the english error \message system, type WARNON. To turn them off and get only #` rmsgs type WARNOFF. The options available now for screen color are GS=green scrn, WS=white screen, NS=normal scrn,<1> key to stop and start the scrolling of the screen. ~ \The next screen is blank so you can try some screen editing.` Type N to go there and then type|on the screen. When done use thecursor arrow keys to move down to the line with "DOIT" on it & press the key. Then :type FH or FLUSH to save it to the disk. To erase it type@ Z16 WIPE, or W while in the` editor (TYPE 17 UE TO SKIP THAT)\ scr# 16 empty block %1/1HELLO /( scr# 17 REV.G COMMENTS ) ;S ( HES 82SEP27; <)@ REV.G has a number of bug fixes for REV.A OS. It also interceptsthe DOSINI vector during BOOT, and at WARMSTART (RESET). This makes it possible to set screen colors and margins at boot up and reset. ;Simply set your margins and@ screen colors before calling SYSSelect STACKON or STACKOFF. Thenecommand SETSYS, and MAKEBOOT. Your new disk will now boot in your colors, and have your mar-gins.l p zYou can also hook in an ML SUB- ROUT.at this time. It must have been defined prior calling SYS. After calling SYS, command HOOK word (356-3921,c or you can leave MESSAGES at  the following BBS's:# 5TABBS <408> ???-9?9C GIBBSK Y<408> 298-6930a (The latter is the preferred  communications technique.) rSince DAVE FLORY is distributingthis package, naturally he can also be contacted. . You will see them showon the stack display at the top of your monitor screen. To turn it off when unwanted STACKOFF. You will find the STACK display very useful to you as you start defining your own words as you can go through each step in the word singly and watch what it does to the stack. The stack is the single most difficult (LL) \ scr# 24 empty block #1/1 ;S L,N,P - List current,next- Bor previous screensLLK ^- List lower 1/2 ofm current edit screenUL - List upper 1/2 of- Dcurrent edit screenDOITK ^- Take top 16 linesm of screen and place them into the top- ?or bottom 1/2 ( LLM `or UL ) of the editm tscreen. x y COPY - Copy block x to- ?block y. No changeM Wto block xb n LIST - Set SCR to n and list the block ?x y SHOW - List blocks x to yM Vinclusive` x y INDEX - List first line of blocks x thru y# @FLUSH - Return to FORTH vocM ^and write out allm {updated blocks C UPDATE - Mark block (SCR) as- 4updated` fig-FORTH 1.4S comnds next block ԠԠB XEDT - same as EDITORb FORTH - exits EDITOR without action" ;n UE - same as n EDIT ULB [n LE - same as n EDIT LLd N - edit next upper scrn  N. - edit next lower scrn$ >P - edit prev upper scrnD ^p. - edit prev lower scrnd T - edit other upper scrn in buffer$ ?T. - edit other lower scrnJ Sin bufferd wFH - same as FLUSH WIPE - clr scrn to be edited$ %W) <- WIPE,will respondK `with question, RETURNk |or Y will execute LOAD - FLUSH scrn edited,and+ /LOADB n LOAD - will flush and load n L#OFF - off LINE # display  L#ON - on LINE # display" (PAD) n HL -o uline ny >(PAD) > n DL - Delete line n >(PAD) n IL - Insert (PAD) after nB ^n RL - Replace n with (PAD)b zn SL - Spread at line n  n BL - Blank line nB `n $_ - Text following $_ willj replace line n and go to PAD" @n %_ - Text following %_ willJ `be inserted after linej yn and go to PAD s n CL - Move line n of block s* 0to PAD *** NOTE ***A ^>(PAD) : Means that line n isj {also moved to PAD ! >( fig-FORTH 1.4S COMNDS NXT )  ȠӠ@ On1 n2 n3 COPIESh - move scrns n1 to n2 C to location starting* >at scrn n3 (n1-->n3,J [n1+1-->n3+1 etc.)` on1 n2 DUPLICATE  - will duplicate scrns* ;on a single drive@ CSYSH ]- loads bootmaker andj zrelated words on SCREEN # $7 STACKON - turn stackdisplay on STACKOFF- turn stackdisplay off NOTE: BORDER REFLECTS # BASE  STON - STACKON! 2STOF - STACKOFFA ]WARNON - display warning txta WARNOFF- just display error #  DRAIN - EMPTY-BUFFERS! ,n1 n2 LZEROH j- CLEARS scrns n1 to n2 n SETPHYS  - set PHYSOFF to n! @RESPHYS- reset PHYSOFF to orgnlJ ^value, use n STEPHYSj twice to chnge RESPHYS DCP - DECOMP! #ZZ( 0- DECOMPA x y CDUMP - dump char. x to y, USE LIKE BDUMP- cont nxt scrn ȠӠ D٠ ӯàŠn > will !k n will @ n MSB - shortform MSBYTE %n LSB) ;- shortform LSBYTE` ٠ҮĠšӠx y FIND text - search for text starting with scr# x to y, willsearch all scr of DR1 as defaultabort by pressing START button NS,GS,WS,BS) W- change screen colors n U. - n . unsignedb sVERIFY & NOVERIFY - change diskhandler+ 8write commandB _n SNDOFF - turn off channel nk (e.g. n 0 0 0 SOUND)  THERE - returns adr below+ 2displayB WFREE - THERE HERE -b {OCTAL - change BASE to 8  BINARY - change BASE to 2" 7HX,DX,BX - shortformsB PON now does not require POFF in same expression. (contd.)( fig-FORTH 1.4S COMMANDS ) ;S@ \n CHR selects between threei character sets, 0 is the normal ATARI vers@ Zn .CHRSET prints out thel wdesired set @ |read the TUTORIAL on the use of BDUMP and CDUMP ( note that C CDUMP has a bug, and cannot$ 0handle 's ) There are several ways to accessthe second drive in a two drive system. Screens starting at $800will access the second drive. If;you are in the LINKed mode, SCR#$0 will start with the same@ PHYSOFF as dr 1. UNLINK starts drive two on the first sector. You can also use the standard Forth procedure and call DR0 fordr 1, and DR1 for dr 2. Each inthis case have their own PHYSOFFX, which can be set with XXYY SETPHYS, where YY is the PHYSOFF for dr1, and XX for dr2.k p< N > \ scr# 2A REV H NOTES HESA yNote that a 2 SETPHYS will set the PHYSOFF for dr2 to 0. NEWDATE lets you enter your initials and date that will be usedin the EDITOR by DATE to date the comment line. In FORTH, DATE requires a screen range on the stack. ( Works well with LZERO ).PNS will convert a PNS screen that you might be editing. Just doi the normal n UE (n is scr#), than command PNS. The \ comment line is now also acceptable to fig-Forth. PICK and ROLL also have been added. n PICK will take the nth item on the stack, and duplicate iton top, n ROLL just rolls it to the top. SETSYS, HOOK/UNHOOK are now partof the std. vocabulary. JMP andJSR permit ML experiments, just)leave the address of your routine on TOS.@ DR2 adds $800 to scr# (makes it easier when using DECIMAL mode). ( scr# 2B empty block 1/1 ) ;S F/( scr# 2C empty block 1/1 ) ;S ( scr# 2D empty block 1/1 ) ;S FA( scr# 2E empty block 1/1 ) ;S ( scr# 2F empty block 1/1 ) ;S ( FORTH TERMINAL HES 1/3 ) '( V.1.0+ 6HES 82AUG24; <)@ \( USES IOCB #2/R1:,HANDLER )` p( already booted{ |) C FORTH DEFINITIONS HEX@ \( OPEN #2,R1: INPUT/OUTPUT )a |: OPNR: 2 IOCB ( IOCB #2 ) S 0 D R1: OPEN ( INP/OUT )" <( ICSTA CH? ) ; ( STATUS )` ( CONFIG.#2,NO TRANSL,ATASCII )  : CNFGR: 2 IOCB ( IOCB #2 )% <26 ICCOM C! R1: ICBAL !E S20 I1CAX ! CIOb ( ICSTA CH? ) ; ( STATUS )  0 VARIABLE STR: /( COMMAND n ---7 8)A R: STATR: 2 IOCBe |D ICCOM C! ( COMMAND )  CIO ; ( STATUS ) 7( START CONCURRENT IO )A ^: STRTR: 2 IOCB 28 ICCOM C!e {R1: ICBAL ! 0 I1CAX C!  CIO ( ICSTA CH? ) ; ,( CLOSE R: )A Z: CLSR: 2 IOCB CLOSE ;` t( CHECK R:BUFFER )  : ?RBUF% 3STATR: 2EB @ ;B E--> ( FORTHTERM V.1.0 2/3 ) 0( CHECK KEYBOARDA ]: ?CHLEAVE CH C@ FF = NOT IFe FF CH C! ." Leaving "  CR LEAVE THEN ; ) 2( GET R: ROUTINE )A G: GETRK W2 IOCB GET ; ( PUT R: ROUTINE )! ': PUTR+ 72 IOCB PUT ;` |( K: routines use IOCB #3 )  : K: " K: " DROP ;@ R( Open for INPUT )a : OPNK: 3 IOCB ( IOCB #3 )  0 4 K: OPEN ( INPUT ONLY )# >( ICSTA CH? ) ; ( STATUS )` i( CLOSE )  : CLSK: 3 IOCB CLOSE ;@ T( GET INPUT --- n )a w: GETK 3 IOCB GET ; B E--> ( FORTHTERM V.1.0 3/3 )@ Q: TERMINAL CR CR` |." fig-FORTH TERMINAL V.1.0" CR CR ." % --> exit" CR CR@ ." mode, " CR CR 0 2BE C! ( lower case )  OPNK: OPNR: CNFGR: STRTR:a fBEGIN C ?RBUF IF ( BUFFER ?? )% >GETR EMIT THEN ( GETIT )B ^CH C@ FF = NOT ( KEY PRESS )b IF GETK PUTR THEN ( SEND IT) e0 ?CONSOL 7 AND UNTIL ( EXIT ) CLSK: CLSR: CRc CR ." Leaving terminal mode." 40 2BE C! CR CR ; ! #;S ( FORMATTED LIST PROG. 1/5 )A ]VOCABULARY FORMY IMMEDIATEa tFORMY DEFINITIONS r 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 y DROP I LEAVE THEN LOOP ; : GTNXWD DUP IF + OVER SWAP NXSPACE ELSE DROP THEN DUP IF OVER SWAP NXNSPACE DUP IF OVER OVER IF INDENT @ 0 DO 0 0 TORLY LOOP THEyN ; : PRWORD DUP 1+ KERKNT @ + MAXLIN > IF TORLCR THEN KERKNT @ 0= IF DOIND THEN OVER OVER TORLY ; : 1SET 1 SWAP ! ; --> ( FORMATTED LIST PROG. 2/5 ) 5: ( 51 WORD 6 ALLOT ;@ : IA IARRAY ; IA L1G 10 , ( :) ( CODE) ( ,CODE) ( SUBROUTINE) 6 ( IA) ( IARRAY) ( LABEL) ( TBL) IA L2G 2 , ( ;) ( C;)A zIA L3G 2 , ( NXT,) ( NEXT,) IA L4G 6 , ( IF) ( DO) ( IF,) 8 ( CASE) ( BEGIN) ( BEGIN,) IA L5G 3 , ( ELSE,) ( ELSE)B ( WHILE) IA L6G 16 , ( THEN,) ( THEN) ( END,) ( END) ( SOB,) -( BACK) ( UNTIL) ( AGAIN) ( REPEAT) ( ENDIF,)B |( UNTIL,) ( LOOP) ( +LOOP) ( ENDIF) IA L7G 7 , ( CONSTANT) ( IR) ( VARIABLE) <( CN) ( ARRAY) ( INTEGER) ( ORCON)C sIA L8G 1 , ( () IA L9G 3 , ( LD,) ( ST,) ( LOAD) CIA LAG 1 , ( ;CODE)@ o: CMPWORD DUP >R C@ OVER = R> SWAP IF >R OVER w. R> SWAP OVER DUP C@ DUP 4 > IF DROP 4 THEN 0B kDO I OVER + 1+ C@ >R OVER R> SWAP I + C@  = 0= IF 0 LEAVE THEN LOOPB l0= IF DROP DROP 0 THEN ELSE 0 THEN ; --> ( FORMATTED LIST PROG. 3/5 ) P: GSCAN DUP @ SWAP 2+ SWAP 0 DO CMPWORD IF LEAVEb 0 ELSE 6 + THEN LOOP IF 0 ELSE DROP 1 THEN ; A: NEWCR KERKNT @ IF TORLCR THEN ;` : DUPBC OVER >R >R OVER R> SWAP R> ; M: FINDCHAR SWAP >R SWAP 1+ R> DO DUP I C@ =b IF DROP I LEAVE 0 THEN LOOP IF 0 THEN ; 8: PRNEWL PRWORD TORLCR ;@ u: >= OVER OVER = IF DROP DROP 1 ELSE > THEN ; --> ( FORMATTED LIST PROG. 4/5 ) M: EL1G NEWCR INDENT 0SET PRWORD GTNXWD PRNEWLb o10 INDENT ! ; !: EL2G NEWCR PRNEWL INDENT 0SET ;@ U: EL3G NEWCR PRNEWL ; !: EL4G NEWCR PRNEWL 2 INDENT +! ;@ n: EL5G NEWCR -2 INDENT +! PRNEWL 2 INDENT +! ; ": EL6G NEWCR -2 INDENT +! PRNEWL ;@ i: EL7G PRWORD GTNXWD PRNEWL INDENT 0SET ; : EL8G DUPBC 51 FINDCHAR DUPB wIF SWAP DROP OVER - 1+ PRNEWL ELSE DROP PRWORD THEN ; : EL9G PRNEWL ;@ a: ELAG NEWCR 10 INDENT ! PRNEWL ; 2: ASSWRD DUP 4 >= IF OVER OVER + 1- C@ COMCHR = IFC nOVER DUP C@ ICONS = SWAP 1+ C@ FCONS = AND C, IF 2 ELSE 1 THEN ELSE 0 THEN ELSE 0 THEN ;@ C--> ( FORMATTED LIST PROG. 5/5 ) V: PRCWRD L1G GSCAN IF EL1G ELSE L2G GSCAN IF EL2G ELSEb L3G GSCAN IF EL3G ELSE L4G GSCAN IF EL4G ELSE L5G GSCAN" WIF EL5G ELSE L6G GSCAN IF EL6G ELSE L7G GSCAN IF EL7Gb ELSE L8G GSCAN IF EL8G ELSE L9G GSCAN IF EL9G ELSE" MLAG GSCAN IF ELAG ELSE ASSWRD IF ASSWRD 2 =b IF EL4G ELSE PRNEWL THEN ELSE jPRWORD 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 !B BLOCK DUP 1777 + SWAP KERKNT 0SET INDENT 0SET 0 BEGIN GTNXWD 9 DUP IF PRCWRD THEN DUP 0= END DROP DROP DROP BLK 0SET ;@ x: ASTER TORLCR 40 0 DO 52 SP@ 1 TORLY DROP LOOP TORLCR ; 5: FORSHW 1+ OVER DO ASTER I FORLST TORLCR LOOP DROP ;@ FORTH DEFINITIONS : FLST FORMY TLFLG 0SET FORLST ; : FLSTLP FORMrY TLFLG 1SET FORLST FFLP ; : FSHW FORMY TLFLG 0SET FORSHW ; : FSHWLP FORMY TLFLG 1SET FORSHW FFLP ; LPOPEN ;S \ scr# 38 empty block #1/1 ;S ( scr# 39 empty block 1/1 ) ;S C FF\ scr# 3F empty block #1/1 ;S FEE