@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@W!( 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 ALLOWED697 FREE SECTORS COPYING---D8:COPY32.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- 160ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8 uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8 uvolksForth, Copyright (c) 1985-2005, Forthgesellschaft e.V. (www.forth-ev.de)All rights reserved.Redistribution and use T}in source and binary forms, with or without modification, are permitted provided that the following conditions are met: U} * Redistributions of source code must retain the above copyright notice, this list of conditions and V}the following disclaimer. * Redistributions in binary form must reproduce the above copy- right notice, thisW} list of conditions and the following disclaimer in the documentation and/or other materials provided X} with the distribution. * Neither the name of the Forthgesellschaft e.V. nor the names of its contributY}ors may be used to endorse or promote products derived from this software without specific prior wZ}ritten permission.THIS SOFTWARE IS PROVIDED BY THE COPY-RIGHT HOLDERS AND CONTRIBUTORS "AS IS"AND ANY EXPRESS OR IMPLIED [}WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITYAND FITNESS FOR A PARTICULAR PURPOSE A\}RE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECI]}AL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS ^}OFUSE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, ST_}RICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OFTHIS SOFTWARE, EVEN IF ADV`}ISED OF THE POSSIBILITY OF SUCH DAMAGE.) 7SLJL KL E7S LL\B[Q b}$VOLKSFORTH-83 3 c}.8 COMPILED 11AUG06CSil歰 END-TRACE5!iL'!RECOVER9hhƻƺL:J!NOOP d}i!ORIGIN; t!S0;!R0; !DP; !OFFSET;!BASE;!OUTPUT;!INPUT;! ERRORHANDLER;!V e}OC-LINK;!UDP; !SP@ "¥â¥8ƦL "SP!7"L /"UP@O"L" G"UP!^" f}iL V"RP@"L" }"RP!"L`" ">R"8ơLm" "R>"8ƦeL "R g}@"8ƦL "RDROP" #EXIT#L" #?EXIT-#i(L##EXECUTEQ#iL h}E#PERFORM:#O##i#C@#±éL}#C!#±ȱˆiL#CTOGGLE:4%#&C$###@#± i}ñ‘L#!#±ȱȱL##+!$±ȱaȱqL$$DROPm"1$SWAPE$Š Ȣ¡ j}L<$DUPr$8ƦȱLj$?DUP$LLr$$OVER$8ƦȱL$ROT$à k}¥Ñ‘ȱáÑL$-ROT:$$# %NIP:C$8$#%UNDER:C$$#,%PICK:&- "%##>%R l}OLL:p$"E% "p$&"&-/8$#U%2SWAP:$"$"#x%2DROP#%2DUP:$$#%+%ȡqqLi"%OR%ȡ m}Li"%AND%ȡ11Li"%XOR&ȡQQLi"&-#&ȱ8ᥑȱLi"&NOTC&᥁񥑥L n};&NEGATE^&8S&DNEGATEo&8񥑥Ȋ񥑥᥁񥑥L e榢`c&D+& &ȱeđȱeőeeÑ o}L&1+&aLiL&2+&&3+''''1-!'8LL'2-?'8'TRUE; p}D'FALSE;Q'"-1K'_'!0Y'h'1;p'2;z'3;'4;'ON:K'C$##'OFF:Y'C$##'CLIT'8 q}ƦL'LIT'8ƦiL'LITERAL:p$'%>+ 0'0#0'0# (0<=($ r}L6(0=S(L(UWITHINi( &±ð ıŰLD( ](<(±åi榥Q0±L?( (U<(± s}i榡±ðLA(LD(:'%)#!(>:C$(#!(0>:\&(#!(0<>:Q(A&#! )U>:C$(#!)=:!&Q(#!))D0=:% t}Q(#!7)D=:m&&=)#!G)D<:$%!&>+ ("%"%+%(#: #>+C$8$#"X)MIN:%(y)")MAX:%(y)")UMAX:%(y)")U u}MIN:%)y)")EXTEND:p$(#")DABS:)>+m&#")ABS:)>+\&#: #"&p$"$"C$""##)(DO:$!&*#*(?DO:$! v}&$>+*"p$#%"8$##/*BOUNDS:$%C$##T*ENDLOOPu*L"$i*(LOOP*a iLL$|*(+LOOP* w}aqjQi(L%*I*8ƦqqL%*J +&+BRANCH+a¥q…L& x}+?BRANCH@+i(L''4+>MARK:0Y'0#'X+>RESOLVE:0$!&C$##'l++`+t'#),THE z}N:)t'+w+#)),ELSE:t'+0+`+C$w+K'#)>,BEGIN:+~'#)[,WHILE:~'+~'0>+`+'%#:+p$'-)>+ 8$w++#)m,RE {}PEAT:~'+0+,#),UNTIL:~'+0>+,#*,DO:0%*`+'#*,?DO:06*`+'#*,LOOP:'+0*0s*w+#*-+LOOP:'+ |}0*0s*w+#*-LEAVE:s*"='p$#%"#+7-UM*[-¡ȆĆŢ&&&eŅȱeąĐܥőȥđ‘ÁL, }}S-M*:p$(p$">+\&C$p$(>+ \&"A&"Y-">+m&#,-*:Y-8$#,-2*- *L:p$%#:K'BDIVISION OVERFLOW#-- ~}UM/MOD,.DZƥi榡ñȱȱĢf8Ǩư&Ȑ„&&&&ߠffÐ V!.#đȥÑȥ‘L/!.M/ }MOD:p$")$(>+4%%C$*."(>+\&$>+ C$"%C$' ##/.2/. jjL0./MOD:")".#0./:."%#0/MOD: }.8$#0/*/MOD:"-".#0%/*/:-/"%#0;/U/MOD:Y'C$*.#0J/UD/MOD:"Y'"*."C$"*."#1^/CMOVE/ & L }ƑL/2/CMOVE>/ &eŅeDžäƑĘL2/MOVE:"%(>+"/#"/#3/PLACE:$" }$$&"/##3 0COUNT10ii8ƦL#3'0ERASE:Y'k0#4R0FILLm0 &¦ L5 }d0HERE:!##50PAD:0'B%#50ALLOT:!$#50,:0#~'0#50C,:0#t'0#50COMPILE:"p$&"#0#60#T }IB96 1>TIB961>IN96&1BLK9621SPAN96>1TIB: 1##6K1QUERY:Q1'PIE1#1#,1'81'#7[1SCAN:"p$ }>+$#"!&>+'C$&C$+ ##71SKIP:"p$>+$#"-)>+'C$&C$+ ##71/STRING:$)$$%%!&#a{8 `81 }CAPITAL2 1L9 2 CAPITALIZE02±á…ĈLȱ 1L=2S2Ƞ.1eąĭ/1eŅ8.1¥/1ð .1 }/1L2=ѥťL2ąƥŅǡѥť(ȥ8.1ȥ/1e榠 ȱÈȑ }±  L=!2SOURCE:Q11##=3WORD:!3Q2#=-3PARSE:"!3,1#1$C$"1"$!&p$")!&,1$#=>3NAME:B43.2# }#>p3STATE9>3EASCII:B43#>+(#>3,":'"F30$&00#>3"LIT:""4%/0%""#>3(":3#>3":0 }33#?3(.":3/0H#?4.":0 43#?4A(:')F3%#?)4B.(:')F3H#?;4A\:,1#D /&D-,1##?N4B\\:M,1##?j }4\NEEDS:w3U>"%>+R4#?{4HEX:'!##?4DECIMAL:' !##@4DIGIT?:'0!&p$' )>+'!&p$' )>+!#$) }$+#8$Y'#@4 ACCUMULATE:C$"C$!#Y-8$$!#Y-&"#@5CONVERT:&/04>+5+'#:*6#Q(#:/0K'*6$#:'/0#A25D }PL9:>+ #%8$ #Y'#:>+ #8$">+m&$8$x5#&$+#8$K'#:'&+>+ ' K'#'$+>+ 'K'#'H+>+ 'K'#'%+> }+~'K'#Y'#:',$-)C$'.-)%#:x5#K'-)+#t'x5$#9Cr5NUMBER?:!VAp$/0*6#x5'Y'"''$R5|5\5'-+>+ #K'" }R5|5\55>+ !#R5|5\54Q(|556R55\54Q(>+h56Q(|5x5'R55\5+#C06NUMBER::6$Q(B?(>+)#D6LAST9:6#$ }#D6HIDE:6>+ ='#<###D6REVEAL:6>+ ='<###D 7RECURSIVE:7#:6>+ 4%#%$#8$#D*7 IMMEDIATE:'@<7# }DT7RESTRICT:'<7#El7 CLEARSTACK7ȱLE7HALLOT:!#$!&C$ "&p$$!&p$!#~'E%$!&/7!##E7HEAP: }!#'#E7HEAP?:7M"g(#:p$0$!&p$77C$/7$!&6$7#8ơiqeHeL+:"6#V:##F7DO }ES>:0O8'L00$8#:p$'%'-)!&#:0'%'-)>+p$p$&0$!&&/t'6$t'0#G_8?HEAD9G8|:8#+#K'8## }H8WARNING9:8#+#6#<#="%>+CC6#: 4EXISTS ^H#H8CREATE:081#0<##0w3#p$t'' g(A&B INVALID NAME0 }6#&088#>+ t'8$p$y808' <7y8!#+88$7Y'0O8LC89Ʊǥi榡ıLD(đáāLi }áH8)e…h) H…håаЪL&J!9>NAME:!#p$>+%'!&C$9$>+%%#+"%#:/0'%%#J :NAME>: }p$>:C$#' %>+##JN:>BODY:&#Jp:.NAME:$>+p$7>+ 4|/0'%H+ 4???CC#K:::*96<##<#?Y'O88 }ơieLK:;:Y'+0#?7#K:CONSTANT:*90O88ƦȱLK;VARIABLE:*9~'0#L8; }UALLOT:p$"#%')B USERAREA FULL"#C$"$#LO;USER:*9~'X;0O88ƦeeLL;ALIAS:*96#p$# }' %>+ '0+' <7>:##M;VP9<<<M;CURRENT9+^Hp$&:CC+8$#Pa=(FIND=)Ơªȱ…ÆLD( })e…ǩeÅȤƱˈȑǑLA(=±á…)8e…å) L">‘8Ʀ 0IȘ }$LT=FIND:#+='4%#=>+"%=#$;&)>+ C$='+"%Y'#TN>':w3U>Q(BWHAT?#T>[COMPILE]: }>0#T>[']:>(#T> NULLSTRING?:p$#Q(p$>+"%#iȱiLU> >INTERPRET>]?V ?NOTFOUND"@??V? NO.EXTEN }SIONS:BWHAT?#V/? INTERPRET:?:@w3U>$>+t'%>+O#?B COMPILE ONLY>+#:6Q(>+)??:@w3U>$>+)>+O#?0?>+#: }6$>+)>+C$((+)??WM?A[:']?<@?3'#W?]:'?<@?3'#:K'BCRASH#X?DEFER:*9'?0O8HȱhL }X@(IS:"p$&"###:#')?#$-)C$'?#-)%A&B NOT DEFERRED#X6@BIS:>p$L@x:3#>+ 0<@0###:A' (B TIGHT }STACK76>+p$7>+V:+'!&jGK'BDICTIONARY FULL#Y{@?STACK@ 8ȥ  V!@#ťȱ妠L V!K'B STACK }EMPTYZ@.STATUS"@p!9""##Z5APUSH:"C$p$"#"CA""#[OARDEPTH:!#"&!&.#[nADEPTH: "!#C$!&.#:3#>+ } 4] # 4 OK#\A(QUIT:?AHc1Y?A+\A'QUIT"@A\AQUIT:!#"?A\A STANDARDI/O:' !'/#\A'ABORT"@p!\B }ABORT:73! BBA]&BSCR9]+BB#,1#MB#A]SB(ABORT":3C$>+"7"!s }##8$#:3C$>+!s##8$#^BABORT":0B3#^BERROR":0B3#_BBL; _B -TRAILINGC &eÅŤ }ØHL+L+`BSPACE:BH#`;CSPACES:Y'6*CC*s*#:0='#aMCHOLD:K'fC$fC###apC<#:fCfC##aC#> }:%fC#fC$!&#aCSIGN:(>+'-wC#aC#:!#g/$' $(>+'%'0%wC#aC#S:C%=)>+#bCD.R:%4%)C }C$CC$$)$!&VCH#b D.R:C$)$D#b5DU.R:Y'C$D#bHDD.:Y'DCC#bZD.:)_D#bkDU.:Y'_D#cyD.S: "!#$!& }' )]*6**#~D~'*s*#cDC/L;(cDL/S;dDPAUSEdDLOCK:p$#M"-)>+8$#p$#>+D+M"C$##dDUNLOCK:p }$D'#h8hLȱi榢L`"e EFILE;eSEPREV99e_EB/BUF;ppELIMIT;p~EFIRS }T9:#' %#:V:4%&(C$7%#:7!#""#$>+^p$"'!&""#"$'p$"(C$"&V:(%>+."7>+"&E>+$"&E>+ } "&>:&)+ #+#*Fiȱiɠ…ʱ…5ȥɐ ĥLoFʥ˰ ʁ±ʑLFʅ¥˅LFFLm": }!#$>+p$"'!&(F"+#:M"&p$#M"!&>+(%#C$0g(>+p$#&#$#'+#+%#:!(F1<%* %*#%g(>+ '<*#' }*s*%<#%g(>+ '<<##:$FFF7C$!&7!#Y'6##uECLEAR:0p$M"&G!##uFG(FORGET:p$7B IS SYMBOLE&G#u`G }FORGET:>p$' #(B PROTECTED:p$7>+V:+='='jG#uGEMPTY:' #M"&G'" #"##vGSAVE:0M"&G!#p$='='#$='# }#$Q(>+M"}!'/#vGBYE:p!M#:YIK-)>+K' ##vHSTOP?:eI>+*H*HY'#v>H?CR:ID' !&)>+H#:*9p$0&O8L }$8#!#%s##wXHOUTPUT::*9?O8L$8!##wHEMITHwHCRHwHTYPEHwHDELHwHPAGEHwHATH wHAT?H wH }ROW:H8$#wHCOL:H"%#:*9p$0&O8L$8#!#%s##w IINPUT::*9?O8L$8!##w7IKEY&IwSIKEY?&Iw^IDECODE&IwjI }EXPECT&IxSEAL:Y''+ }#:Y'fE#EE##yxI'COLD"@p!:IIJ= 4volksFORTH-83 REV 3.81.03HKy J'RESTART"@p!:'A<@AQJ' #!#'p!<@"B.B }zFJCOLDJJHHX i­ iù J J  ! i iȱ ȱhhK } L{wJRESTART KJHWHLJ;KiL+%H$H`,K !KL+;@KLJKLBKJ65KEY:>KDK>+HK*K#QK }#BS;~mK#CR;yK#ESC;K65DECODE:sK+>+p$>+H'#K+>+ p$E1##"%%"C$#"H&#K65EXPECT:E1#Y' }p$E1#(>+ YIsI+%CC#KKEYBOARDHIYKKKKHH`L(EMIT3L LLm";()L65EMIT:1L#JL65CR:KSL }#[L65DEL:sKSLCCsKSL#lL65PAGE:'}H#L65AT:'U#'T##L65AT?:'T#'U##L65TYPE:]*6* *#H*s }*#LDISPLAYHSLbLLtLLLLMJ J l LB/BLK;MR/O;$MW/O;0MR/W; +Y?+P#NB File Error#[PINCLUDED:P#"*MNp$'(>+8$jP0'PZ01#,1 }#+ 4 FileError:oD.B"P##PFILE":P'PBk00'PBk0'"43/0PC$/PY'#PHINCLUDE":PP#|#QFORTH-83:#}8Q } ASSEMBLER<RR<}PUSHA;+}_QPUSH0A;+}mQPUSH;+}|QRP;}QUP;}QSP;}QIP;}QN;}QPUTA; }}QW;}QSETUP;&~QNEXT;~QXYNEXT;J~QPOPTWO;#~RPOP;m"IQ SAVE-SYSTEM:''#}!'!&'#0 }'#P6MN8$p$''$O8$p$}!'!&0}!'!&!&&$O8$''#''#' '#p$''$O8$N8$#:'Np$'(>+ }CR .( Compiling Debug VolksForth )CRINCLUDE" D:TAS65.F"INCLUDE" D:TOOLS.F"INCLUDE" D:UNNEST.F"INCLUDE" D:CREATE.F"INCLU}DE" D:TRACER.F"CRSAVESAVE-SYSTEM D:DEBUG.COMCR.( Debug VolksForth created!)CRU\ transient Assembler clv10oct87 \ Basis: Forth Dimensions VOL III No. 5) \ internal loading 04may85BP/re) \ Fort}h-6502 Assembler clv10oct87 \ Basis: Forth Dimensions VOL III No. 5) CR .( Loading 6502 transient Assembler...) CR}Onlyforth Assembler also definitions here $800 hallot heap dp ! \ Forth-83 6502-Assembler 20oct87re} : end-code context 2- @ context ! ; Create index$0909 , $1505 , $0115 , $8011 ,$8009 , $1D0D , $8019 , $8080 ,$0}080 , $1404 , $8014 , $8080 ,$8080 , $1C0C , $801C , $2C80 ,| Variable mode: Mode: ( n -) Create c, Does> ( -) } c@ mode ! ;0 Mode: .A 1 Mode: # 2 | Mode: mem 3 Mode: ,X4 Mode: ,Y 5 Mode: X)6 Mod}e: )Y $F Mode: ) \ upmode cpu 20oct87re | : upmode ( addr0 f0 - addr1 f1) IF mode @ 8 or mod}e ! THEN 1 mode @ $F and ?dup IF 0 DO dup + LOOP THEN over 1+ @ and 0= ;: cpu ( 8b -) Create c, Does> ( -)} c@ c, mem ; 00 cpu brk $18 cpu clc $D8 cpu cld$58 cpu cli $B8 cpu clv $CA cpu dex$88 cpu dey $E8 cpu inx $C8 cpu iny}$EA cpu nop $48 cpu pha $08 cpu php$68 cpu pla $28 cpu plp $40 cpu rti$60 cpu rts $38 cpu sec $F8 cpu sed$78 cpu sei $AA c}pu tax $A8 cpu tay$BA cpu tsx $8A cpu txa $9A cpu txs$98 cpu tya \ m/cpu 20oct87re : m/cpu ( }mode opcode -) Create c, , Does> dup 1+ @ $80 and IF $10 mode +! THEN over $FF00 and upmode upmode IF mem true Abort"} invalid" THEN c@ mode @ index + c@ + c, mode @ 7 and IF mode @ $F and 7 < IF c, ELSE , THEN THEN mem ;$1C6E $60 m/c}pu adc $1C6E $20 m/cpu and $1C6E $C0 m/cpu cmp $1C6E $40 m/cpu eor $1C6E $A0 m/cpu lda $1C6E $00 m/cpu ora $1C6E $E0 m/}cpu sbc $1C6C $80 m/cpu sta $0D0D $01 m/cpu asl $0C0C $C1 m/cpu dec $0C0C $E1 m/cpu inc $0D0D $41 m/cpu lsr $0D0D $21 m}/cpu rol $0D0D $61 m/cpu ror $0414 $81 m/cpu stx $0486 $E0 m/cpu cpx $0486 $C0 m/cpu cpy $1496 $A2 m/cpu ldx $0C8E $A0 }m/cpu ldy $048C $80 m/cpu sty $0480 $14 m/cpu jsr $8480 $40 m/cpu jmp $0484 $20 m/cpu bit\ Assembler conditionals } 20oct87re | : range? ( branch -- branch ) dup abs $7F u> Abort" out of range " ; : [[ ( BEGIN) here ;: ?] ( UNTI}L) c, here 1+ - range? c, ; : ?[ ( IF) c, here 0 c, ;: ?[[ ( WHILE) ?[ swap ;: ]? ( THEN) here over c@ IF swap} ! ELSE over 1+ - range? swap c! THEN ; : ][ ( ELSE) here 1+ 1 jmp swap here over 1+ - range? swap c! ; : ]]} ( AGAIN) jmp ;: ]]? ( REPEAT) jmp ]? ; \ Assembler conditionals 20oct87re $90 Constant CS $B0 Constant CC}$D0 Constant 0= $F0 Constant 0<>$10 Constant 0< $30 Constant 0>=$50 Constant VS $70 Constant VC: not $20 }[ Forth ] xor ;: beq 0<> ?] ; : bmi 0>= ?] ;: bne 0= ?] ; : bpl 0< ?] ;: bcc CS ?] ; : bvc VS ?]} ;: bcs CC ?] ; : bvs VC ?] ;\ 2inc/2dec winc/wdec 20oct87re : 2inc ( adr -- ) dup lda clc 2 # adc} dup sta CS ?[ swap 1+ inc ]? ;: 2dec ( adr -- ) dup lda sec 2 # sbc dup sta CC ?[ swap 1+ dec ]? ;}: winc ( adr -- ) dup inc 0= ?[ swap 1+ inc ]? ;: wdec ( adr -- ) dup lda 0= ?[ over 1+ dec ]? dec ; : ;c: } recover jsr end-code ] 0 last ! 0 ; \ ;code Code code> bp/re03feb85 Onlyforth : Assembler Assembler [} Assembler ] mem ;: ;Code [compile] Does> -3 allot [compile] ; -2 allot Assembler ; immediate : Code Create h}ere dup 2- ! Assembler ; : >label ( adr -) here | Create immediate swap , 4 hallot heap 1 and hallot ( 6502-alig) h}ere 4 - heap 4 cmove heap last @ count $1F and + ! dp ! Does> ( - adr) @ state @ IF [compile] Literal THE}N ; : Label [ Assembler ] here >label Assembler ; dp ! Onlyforth CR .( }Assembler loaded...) CRcode unnest rp x) lda ip sta rp )y lda ip 1+ sta poptwo jmp end-codeO: CREATE: create hide current @ context ! 0 ] ;=\ TOOLS LOADSCREEN 22MAR85RE ONLYFORTH\needs codeVOCABULARY TOOLSTOOLS ALSO DEFINITIONSdecimal ONLYFORTH\ HANDL }E STEPS BP 10 02 85ASSEMBLER ALSO DEFINITIONSONLY FORTH ALSO TOOLS ALSO DEFINITIONS| VARIABLE (W | VARIABLE RPT }| CODE STEPRPT DEC RP X) LDA IP STARP )Y LDA IP 1+ STA RP 2INC(W LDA W STA (W 1+ LDA W 1+ STAW 1- JMP END-CO }DE| CREATE NEXTSTEP ] STEP [\ THROW STATUS ON R-STACK B 23JUL85RE)| CREATE NPULL 0 ]RP@ COUNT 2DUP + RP! R> SWA }P CMOVE ;: NPUSH ( ADDR LEN -)R> -ROT OVER >R RP@ OVER 1+ - DUP RP! PLACENPULL >R >R ;| : ONELINE .STATUS SPACE } QUERY INTERPRET-82 ALLOT RDROP ( DELETE QUIT FROM TNEXT ) ;\ TRAP AND DISPLAY KS 26MAR85RE)HEXLABEL TNEXT }IP 2INC RP LDA RPT CMP 0<> ?[[[ W 1- JMP SWAP ]?RP 1+ LDA RPT 1+ CMP 0= ?]LABEL DOTRACERPT INC ( DIS }ABLE TRACER )W LDA (W STA W 1+ LDA (W 1+ STA;C: R@ NEXTSTEP >RINPUT PUSH KEYBOARDOUTPUT PUSH DISPLAYCR 2- DUP } 4 U.R @ DUP 5 U.R 2 SPACES>NAME .NAME 1C COL - 0 MAX SPACES .SSTATE PUSH BLK PUSH >IN PUSH[ ' 'QUIT >BODY ] LITE }RAL PUSH[ ' >INTERPRET >BODY ] LITERAL PUSH#TIB PUSH TIB #TIB @ NPUSH R0 PUSHRP@ R0 ! 082 ALLOT['] ONELINE IS 'QUIT } QUIT ; -2 ALLOT\ TRACER COMMANDS BP 23JUL85RE)| CODE (TRACE TNEXT 0 100 M/MOD# LDA NEXT 0C + STA# LDA NEXT } 0B + STA04C # LDA NEXT 0A + STA NEXT JMP END-CODE: TRACE' RP@ 2- RPT ! ' (TRACE EXECUTE END-TRACE ;: BREAK RP@ 2+ RP }T ! (TRACE ; RESTRICT: TRACEL: CREATE , DOES> @ RPT +! ;-6 TRACEL: +DO 6 TRACEL: -DO-2 TRACEL: +R 2 TRA }CEL: -R-6 TRACEL: +PUSH 6 TRACEL: -PUSH\ WATCH TRAP BP 10 02 85 )| VARIABLE WATCHPT 2 ALLOTLABEL WN }EXT IP 2INCWATCHPT LDA N STA WATCHPT 1+ LDA N 1+ STAN X) LDA WATCHPT 2+ CMP 0<> ?[[[ RP LDA RPT STA } RP 1+ LDA RPT 1+ STA( SET TO TNEXT) TNEXT 0 100 M/MOD# LDA NEXT 0C + STA # LDA NEXT 0B + STADOTRACE JMP } SWAP ]?N )Y LDA WATCHPT 3 + CMP 0= ?] W 1- JMP END-CODE\ WATCH COMMANDS BP 10 02 85 )| CODE (WATCH WNEXT } 0 100 M/MOD# LDA NEXT 0C + STA# LDA NEXT 0B + STA04C # LDA NEXT 0A + STA NEXT JMP END-CODE: WATCH' ( ADR -- )DUP } WATCHPT ! @ WATCHPT 2+ ! ' (WATCH EXECUTE END-TRACE ;: CONT ( -) WATCHPT @ @ WATCHPT 2+ ! (WATCH ;( SYNTAX : WATCH' )\ TOOLS FOR DECOMPILING, KS 4 APR 83 )( INTERACTIVE USE )| : ?: DUP 4 U.!}R ." :" ;| : @? DUP @ 6 U.R ;| : C? DUP C@ 3 .R ;| : BL 024 COL - 0 MAX SPACES ;: S ( ADR - ADR+) ( PRINT LITERAL !}STRING)?: SPACE C? 4 SPACES DUP COUNT TYPEDUP C@ + 1+ BL ; ( COUNT + RE): N ( ADR - ADR+2) ( PRINT NAME OF NEXT WORD!} BY ITS CFA)?: @? 2 SPACES DUP @ >NAME .NAME 2+ BL ;: L ( ADR - ADR+2) ( PRINT LITERAL VALUE) ?: @? 2+ BL ;: D ( ADR N!} - ADR+N) ( DUMP N BYTES)2DUP SWAP ?: 3 SPACES SWAP 0 DO C? 1+ LOOP4 SPACES -ROT TYPE BL ;: C ( ADR - ADR+1) ( PRINT !}BYTE AS UNSIGNED VALUE) 1 D ;: B ( ADR - ADR+2) ( PRINT BRANCH TARGET LOCATION )?: @? DUP @ OVER + 6 U.R 2+ BL ;( USE!}D FOR : )( NAME STRING LITERAL DUMP CLIT BRANCH )( - - - - - - )\ DEBUGGING UTILITIES BP 19 !}02 85 ): UNRAVEL \ UNRAVEL PERFORM (ABORT"RDROP RDROP RDROP CR ." TRACE DUMP IS " CRBEGIN RP@ R0 @ -WHILE R> !}DUP 8 U.R SPACE 2- @ >NAME .NAME CRREPEAT (ERROR ;' UNRAVEL ERRORHANDLER ! R\ tracer: loadscreen clv12oct87 Onlyforth\needs Code \ Trans Assembler\needs Tools Vocabulary ToolsTools al% }so definitionsOnlyforth\ tracer: wcmp variables clv04aug87 Assembler also definitions: wcmp ( adr1 adr2--) \ Assem% }bler-Macro over lda dup cmp swap \ compares word 1+ lda 1+ sbc ;Only Forth also Tools also definitions | Vari% }able (W| Variable | Variable nest? | Variable trap?| Variable last' | Variable #spaces\ tracer:cp% }ush oneline clv12oct87 | Create cpull 0 ] rp@ count 2dup + rp! r> swap%} cmove ;: cpush ( addr len -) r> -rot over >r rp@ over 1+ - dup rp! place cpull >r >r ;| : oneline &82 allot ke%}yboard display .status space query interpret -&82 allot rdrop ( delete quit from tnext ) ;: range ( adr--) \ ermit%}telt ip> off dup ! ;\ tracer:step tnext c%}lv04aug87 | Code step $ff # lda trap? sta trap? 1+ sta RP X) lda IP sta RP )Y lda IP 1+ sta RP 2inc (W lda%} W sta (W 1+ lda W 1+ staLabel W1- W 1- jmp end-code| Create: nextstep step ;Label tnext IP 2inc trap? lda W1-%} beq nest? lda 0= \ low(!)Byte test ?[ IP wcmp W1- bcs ][ nest? stx \ low(!)Byte clear ]? %} trap? dup stx 1+ stx \ disable tracer W lda (W sta W 1+ lda (W 1+ sta\ tracer:..tnext clv12oct87 ;%}c: nest? @ IF nest? off r> ip> push r THEN r@ nextstep >r input %}push output push 2- dup last' ! cr #spaces @ spaces dup 4 u.r @ dup 5 u.r space >name .name $10 col - 0 max spaces .s%} state push blk push >in push [ ' 'quit >body ] Literal push [ ' >interpret >body ] Literal push #tib push tib %}#tib @ cpush r0 push rp@ r0 ! ['] oneline Is 'quit quit ;\ tracer:do-trace traceable clv12oct87 | Code do-trace \ i%}nstalls TNEXT tnext 0 $100 m/mod # lda Next $c + sta # lda Next $b + sta $4C # lda Next $a + sta Next jmpend%}-code| : traceable ( cfa--body exit THEN ['] key @ case? IF >body c%}@ Input @ + @ traceable exit THEN ['] type @ case? IF >body c@ Output @ + @ traceable%} exit THEN ['] r/w @ case? IF >body @ traceable exit THEN @ [ ' Forth @ @ ] Literal = %} IF @ 3 + exit THEN \ fuer def.Worte mit does> >name .name ." can't be DEBUGged" quit ;\ tracer:Benutzer/innen-Worte cl%}v12oct87 : nest \ trace into current word last' @ @ traceable drop nest? on ;: unnest \ proceeds at calling word off ; \ clears trap range: endloop last' @ 4 + name .name 2+ bl ;: k ( adr - adr+2) ( print literal value) ?: @? 2+ bl ;( tools for dec)'}ompiling, interactive ): d ( adr n - adr+n) ( dump n bytes) 2dup swap ?: 3 spaces swap 0 DO c? 1+ LOOP 4 spaces -rot )(}type bl ;: c ( adr - adr+1) ( print byte as unsigned value) 1 d ;: b ( adr - adr+2) ( print branch target location )))} ?: @? dup @ over + 6 u.r 2+ bl ;( used for : )( Name String Literal Dump Clit Branch ) ( - - - - - )*}- ) ( debugging utilities bp 19 02 85 ) : unravel \ unravel perform (abort" rdrop rdrop rdrop cr ." tra)+}ce dump is " cr BEGIN rp@ r0 @ - WHILE r> dup 8 u.r space 2- @ >name .name cr REPEAT (error ;' unrav),}el errorhandler !(CR .( Decompiler Tools loading ...)\needs CODE INCLUDE" D:TAS65.F"\needs CREATE INCLUDE" D:CREATE.F"\needs UNNEST INC-.}LUDE" D:UNNEST.F"\needs tools INCLUDE" D:TOOLS.F"' DROP ALIAS DIS\needs see INCLUDE" D:DECOMP.F",mCR .( Decompiler Tools loading ...)\needs CODE INCLUDE" D:TAS65.F"\needs CREATE INCLUDE" D:CREATE.F"\needs UNNEST INC10}LUDE" D:UNNEST.F"\needs tools INCLUDE" D:TOOLS.F"\needs DIS INCLUDE" D:DISAS.F" \needs SEE INCLUDE" D:DECOMP.F"11}0\ disassembler 6502 loadscr 06mar86re Onlyforth\needs Tools Vocabulary ToolsTools also definitions hex( FWORD is WOR53}D for Fileload ): FWORD >IN @ #TIB @ = IF REFILL $7F > IF ABORT" FileError" 54} THEN THEN TIB #TIB @ 3251 EXECUTE ; | : tabelle ( +n -- ) Create 0 DO $20 fwo55}rd number drop , LOOP Does> ( 8b1 -- 8b2 +n ) + count swap c@ ;\ dis shortcode0base @ hex$80 | tabelle shortcode56}00B10 0000 0000 0341 2510 0320 0000 03320AC1 0000 0000 03A1 0E10 0000 0000 03621D32 0000 0741 2841 2710 2820 0732 283208C57}1 0000 0000 28A1 2D10 0000 0000 28622A10 0000 0000 2141 2410 2120 1C32 21320CC1 0000 0000 21A1 1010 0000 0000 21622B10 00058}0 0000 2941 2610 2920 1CD2 29320DC1 0000 0000 29A1 2F10 0000 0000 29620000 0000 3241 3141 1710 3610 3232 313204C1 0000 32A59}1 31B1 3810 3710 0000 00002051 1F51 2041 1F41 3410 3310 2032 1F3205C1 0000 20A1 1FB1 1110 3510 2062 1F721451 0000 1441 1545:}1 1B10 1610 1432 153209C1 0000 0000 15A1 0F10 0000 0000 15621351 0000 1341 1941 1A10 2210 1332 193206C1 0000 0000 19A1 2E15;}0 0000 0000 1962base !\ dis scode adrmode| Create scode $23 c, $02 c, $18 c, $01 c, $30 c, $1e c, $12 c, $2c c,| Cr5<}eate adrmode $81 c, $41 c, $51 c, $32 c, $91 c, $a1 c, $72 c, $62 c, | : shortcode1 ( 8b1 - 8b2 + n) 2/ dup 1 and IF5=} 0= 0 exit THEN 2/ dup $7 and adrmode + c@ swap 2/ 2/ 2/ $7 and scode + c@ ;| Variable mode | Variab5>}le length \ dis shortcode texttab| : shortcode ( 8b1 -- +n ) dup 1 and ( uneven codes) IF dup $89 = IF5?} drop 2 THEN shortcode1 ELSE shortcode0 ( even codes) THEN swap dup 3 and length ! 2/ 2/ 2/ 2/ mode ! ;| : texttab5@} ( char +n 8b -- ) Create dup c, swap 0 DO >r dup fword 1+ here r@ cmove r@ allot r> LOOP 2drop Does> ( +n -- ) coun5A}t >r swap r@ * + r> type ;\ dis text-tabellen$20 $39 3 | texttab .mnemonic*by adc and asl bcc bcs beq bit bmi bnebpl br5B}k bvc bvs clc cld cli clv cmp cpxcpy dec dex dey eor inc inx iny jmp jsrlda ldx ldy lsr nop ora pha php pla plprol ror rti5C} rts sbc sec sed sei sta stxsty tax tay tsx txa txs tya( +n -- )Ascii / $E 1 | texttab .before / /a/ /z/#/ / /(/(/z/z/ /5D}(/Ascii / $E 3 | texttab .after / / / / / /,x /,y /,x)/),y//,x /,y / /) /\ dis 2u.r 4u.r: 4u.r ( u -)5E} 0 <# # # # # #> type ;: 2u.r ( u -) 0 <# # # #> type ;\ disForth definitions: dis ( adr -- ) base push hexBEGI5F}N cr dup 4u.r space dup c@ dup 2u.r space shortcode >r length @ dup IF over 1+ c@ 2u.r space THEN dup 2 = IF over5G} 2+ c@ 2u.r space THEN 2 swap - 3 * spaces r> .mnemonic space 1+ mode @ dup .before $C = IF dup c@ dup $80 and IF $100 -5H} THEN over + 1+ 4u.r ELSE length @ dup 2 swap - 2* spaces ?dup IF 2 = IF dup @ 4u.r ELSE dup c@ 2u.r THEN TH5I}EN THEN mode @ .after length @ + stop? UNTIL drop ;49\ Loadscreen for Decompiler \ nach F83 by Henry Laxen / Mike Perry Vocabulary ToolsCR .( Decompiler loading...) CR9K}ONLYFORTH Tools also definitions ' drop | Alias dis clear| : case: ( n -) Create , 0 ] Does> 9L}2+ swap 2* + perform ;| : associative: Create , ( n -) Does> ( n - index) dup @ -rot dup @ 0 DO 2+ 2dup @ = 9M} IF 2drop drop I 0 0 LEAVE THEN LOOP 2drop ;Defer (see| Variable maxbranch| Variable thenbranch\ decompile each ty9N}pe of word| : .word ( IP - IP') dup @ >name .name 2+ ;| : .lit ( IP - IP') .word dup @ . 2+ ;| : .clit ( IP - 9O}IP') .word dup c@ . 1+ ;| : .string ( IP - IP') cr .word count 2dup type ascii " emit space + ;| : .do ( IP - IP') 9P}." DO " 4 + ;| : .loop ( IP - IP') ." LOOP " 4 + ;| : .exit ( IP - IP' f) dup maxbranch @ u< IF .word exit THEN d9Q}up @ [ Forth ] ['] unnest = IF ." ; " ELSE .word ." ; -2 allot " THEN 0= ;\ branch, ?branch| : .to ." back to " .w9R}ord drop ;| : .branch ( IP - IP') 2+ dup @ 2dup + swap 0< IF cr ." REPEAT to " .exit 0<> swap 2+ and exit THEN c9S}r ." ELSE " dup thenbranch ! dup maxbranch @ u> IF maxbranch ! ELSE drop THEN 2+ ;| : .?branch ( IP - IP') 2+ dup @9T} 2dup + swap 0< IF cr ." UNTIL " .to 2+ exit THEN cr dup 4 - @ [ ' branch ] literal = over 2- @ 0< and IF ." WHILE "9U} ELSE ." IF " dup thenbranch ! THEN dup maxbranch @ u> IF maxbranch ! ELSE drop THEN 2+ ;\ decompile does> ;code ;9V}| : does? ( IP - IP' f) dup 3 + swap dup c@ $4C = swap \ jmp-opcode 1+ @ ['] Forth @ 1+ @ = \ (dodoes> and ;9W}| : .(;code ( IP - IP' f) 2+ does? IF cr ." Does> " ELSE ." ;Code " 3 - dis 0 THEN ;| : .compile ( IP -- IP' )9X} .word .word ;\ classify each word&18 associative: execution-classForth' lit , ' clit , ' ?branch ,' branch ,9Y} ' (DO , ' (." ,' (abort" , ' Does> 4 + @ , \ (;code' exit , ' abort , ' quit ,' 'quit , ' (quit , ' unne9Z}st ,' (" , ' (?DO , ' (LOOP ,' compile ,&19 case: .execution-class.lit .clit .?branch.branch 9[} .do .string.string .(;code.exit .exit .exit.exit .exit .exit.string .do 9\} .loop.compile .word ;\ decompile a :-definition: .pfa ( cfa -) >body BEGIN ?cr dup dup thenbranch @ = 9]} IF ." THEN " ?cr THEN @ execution-class .execution-class dup 0= stop? or UNTIL drop ;: .immediate ( cfa -) >name 9^}c@ dup ?cr $40 and IF ." Immediate " THEN ?cr $80 and IF ." restrict" THEN ;: .constant ( cfa -) dup >body @ . ." Cons9_}tant " >name .name ;: .variable ( cfa -) dup >body . ." Variable " dup >name .name cr ." Value = " >body @ . ;\ di9`}splay category of word: .: ( cfa -) ." : " dup >name .name cr .pfa ;: .does> ( cfa -) cr ." Does> " 2- .pfa ;: 9a}.user-variable ( cfa -) dup >body c@ . ." User-Variable " dup >name .name cr ." Value = " execute @ . ;: .defer ( cfa9b} -) ." deferred " dup >name .name ." Is " >body @ (see ;: .other ( cfa -) dup >name .name dup @ over >body = IF ." i9c}s Code" @ dis exit THEN dup @ does? IF .does> drop exit THEN drop ." maybe Code" @ dis ;\ Classify a word5 associative:9d} definition-class' quit @ , ' 0 @ ,' scr @ , ' base @ ,' 'cold @ ,6 case: .definition-class.: 9e} .constant.variable .user-variable.defer .other ;\ Top level of Decompiler: ((see ( cfa -) m9f}axbranch off thenbranch off cr dup dup @ definition-class .definition-class .immediate ;' ((see Is (seeForth definiti9g}ons: see ' (see ;8@b%DOS SYSb*)DUP SYSbSCOPYING bia4TH COMbDEBUG F b TAS65 F bUNNEST F bCREATE F bTOOLS F b TRACER F b #DEBUGT F b-SEE F b/SEE2 F b2DISAS F bJDECOMP F bqMTASK F bMTDEMO F bDIS F b SPARTA F bCALL F bLAUNCH F bSPAR4TH F bTEST F bTEST2 F bTEST3 F bDECOMP COMg'VFORTH COM\ Multitasker BP 13.9.84 )CR .( Loading Multitasker...) CROnlyforth\ Multitasker\needs Code INCLUDE" D:TAS65.F"Code s=r}top SP 2dec IP lda SP X) sta IP 1+ lda SP )Y sta SP 2dec RP lda SP X) sta RP 1+ lda SP )Y s=s}ta 6 # ldy SP lda UP )Y sta iny SP 1+ lda UP )Y sta 1 # ldy tya clc UP adc W sta txa UP 1+ adc W 1+ sta=t} W 1- jmp end-code| Create taskpause Assembler $2C # lda UP X) sta ' stop @ jmpend-code: singletask [ ' pause @=u} ] Literal ['] pause ! ;: multitask taskpause ['] pause ! ;\ pass activate: pass ( n0 .. nr-1 Tadr r -- ) BEGIN =v}[ rot ( Trick ! ) ] swap $2C over c! \ awake Task r> -rot \ IP r addr 8 + >r \ s0 of Task r@ 2+=w} @ swap \ IP r0 r 2+ 2* \ bytes on Taskstack \ incl. r0 & IP r@ @ over - \ new=x} SP dup r> 2- ! \ into ssave swap bounds ?DO I ! 2 +LOOP ;restrict: activate ( Tadr --) 0 [ -rot ( Trick ! =y}) ] REPEAT ;-2 allot restrict: sleep ( Tadr --) $4C swap c! ; \ JMP-Opcode: wake ( Tadr --) $2C swap c! ; =z} \ BIT-Opcode\ building a Task| : taskerror ( string -) standardi/o singletask ." Task error : " count type multi={}task stop ;: Task ( rlen slen -- ) allot \ Stack here $FF and $FE = IF 1 allot THEN \ 6502-align up@ =|}here $100 cmove \ init user area here $4C c, \ JMP opcode \ to sleep Task up@ 1+ @ , dup up@ 1=}}+ ! \ link Task 3 allot \ allot JSR wake dup 6 - dup , , \ ssave and s0 2dup + , \ here + rle=~}n = r0 under + here - 2+ allot ['] taskerror over [ ' errorhandler >body c@ ] Literal + ! Constant ;\ more Tasks: r=}endezvous ( semaphoradr -) dup unlock pause lock ;| : statesmart state @ IF [compile] Literal THEN ;: 's ( Tadr - adr=}.of.taskuservar) ' >body c@ + statesmart ; immediate\ Syntax: 2 Demotask 's base !\ makes Demotask working binary: =}tasks ( -) ." MAIN " cr up@ dup 1+ @ BEGIN 2dup - WHILE dup [ ' r0 >body c@ ] Literal + @ 6 + name> >name .name dup=} c@ $4C = IF ." sleeping" THEN cr 1+ @ REPEAT 2drop ;CR .( Multitasker loaded! ) CR<Y( Multi Tasking Demo "RatRace )CR .( Loading Multitask Demo...) CR\needs task INCLUDE" D:MTASK.F"USER X 10 X !A}USER Y 02 Y !USER DELAY 100 DELAY !' PAGE ALIAS CLS: RND ( -- 8b ) ( Atari 8bit specific ) $D20A C@ ;$80 $A}100 TASK R1$80 $100 TASK R2$80 $100 TASK R3$80 $100 TASK R4: RAT DELAY @ 0 DO PAUSE LOOP 1 X +! ;: RACE 20 0 DO A} RAT AT? ( save cursor position ) Y @ X @ AT ASCII # EMIT AT ( restore cursor poition ) LOOP ;: START ( y A}Tadr -- ) 1 PASS Y ! Y @ 1 AT ." -->" RND &10 * DELAY ! RACE STOP ;CLSMULTITASK7 R1 START8 R2 START9 R3 STARA}T6 R4 START12 1 AT TASKS CR1 1 AT.( RatRace Running ) 17 1 AT@FCR .( Disassembler Tools loading ...)INCLUDE" D:TAS65.F"INCLUDE" D:CREATE.F"INCLUDE" D:UNNEST.F"INCLUDE" D:TOOLS.F"INCLUE}DE" D:DISAS.F" D( Sparta DOS routines )DECIMAL: ?SPARTA ( -- f ) ( returns 1 if this is Sparta DOS ) $700 C@ $53 = ;: COMTAB ( -- aI}ddr ) ( gets COMTAB base address ) 10 @ ;: BUFOFS ( -- addr ) ( adress of bufferoffset ) COMTAB 10 + ;: ZCRNAME (I} -- ) ( gets next cmd-line parm to COMFNAME ) COMTAB 3 + CALL DROP ;: GETPARM ( addr -- addr n ) ( gets current paramI}eter, needs address ) DUP DUP DUP 28 + SWAP DO I C@ 155 = IF I LEAVE THEN LOOP SWAP - ;: FNAME ( -- addI}r n ) ( get next param as filename ) COMTAB 33 + GETPARM ;: PARM ( -- addr n ) ( get next param without Dx: ) COMTAI}B 36 + GETPARM ;: RESETBUF ( -- ) ( Resets buffer offset ) 0 BUFOFS C! ZCRNAME ;: PARAMS ( -- n ) ( number of paramI}eters on the cmd-line ) RESETBUF 0 BEGIN ZCRNAME PARM SWAP DROP DUP IF SWAP 1+ SWAP THEN I} 0= UNTIL RESETBUF ;: (TIME) ( n -- time ) ( internal routine to access time ) COMTAB + C@ ;: HOUR ( -- hh ) ( I}get the current hour ) 16 (TIME) ;: MINUTE ( -- mm ) ( get the current minute ) 17 (TIME) ;: SECOND ( -- ss ) ( gI}et the current seconds ) 18 (TIME) ;CR .( Sparta DOS Extensions loaded... ) CRHS( Call Machine Routine at "addr" )( return value is A-Reg and Y-Reg)HEX CODE CALL ( addr -- res ) 4C # lda n sta SM}P x) lda n 1+ sta SP )y lda n 2+ sta n jsr n sta n 1+ sty 00 # ldx 01 # ldy n lda SP x) sta n 1M}+ lda SP )y sta next jmp end-codeL&( LAUNCH FORTH Source from Sparta DOS )( Command line ): LAUNCH ( -- ) PARAMS ( do we have cmdlinQ}e params? ) IF ( yes ) CR ZCRNAME ( get next filename ) FNAME INCLUDED ( and include ) THEN ;PoCR .( build Sparta Dos volksForth )\needs CODE INCLUDE" D:TAS65.F"\needs DIR INCLUDE" D:DIR.F"\needs CALL INCLUU}DE" D:CALL.F"\needs ?SPARTA INCLUDE" D:SPARTA.F"\needs LAUNCH INCLUDE" D:LAUNCH.F"' LAUNCH IS 'COLDSAVESAVE-SYSTEM D:SU}PAR4TH.COMCR .( Sparta Dos Forth saved as )CR .( D:SPAR4TH.COM )TFCR .( in TEST1.F ) CRINCLUDE" D:TEST2.F".( back in TEST1.F ) XC.( in Test2.F ) CRINCLUDE" D:TEST3.F".( back in TEST2.F ) CR\@.( in TEST3.F ) CR .( Stacktrace ) .S CR`* 4 File Error:oD.B8$P#H''P#vO'(>+8$'C$H+%P#N8$H#RDIR:3D:*.*/0R#SDIR":PR#  I |R:3D:*.*/0R#:SDIR": QR#  4 File Error:oD.B8$9P#H''9P#O'(>+8$'C$H+%9P#N8$H#ERDI ) `LJL KL EaS ML\BQe}$VOLKSFORTH-83 3e}.8 COMPILED 11AUG06CSil歰 END-TRACE5!iL'!RECOVER9hhƻƺL:J!NOOPe}i!ORIGIN; t!S0;!R0; !DP; !OFFSET;!BASE;!OUTPUT;!INPUT;! ERRORHANDLER;!Ve}OC-LINK;!UDP; !SP@ "¥â¥8ƦL "SP!7"L /"UP@O"L" G"UP!^"e}iL V"RP@"L" }"RP!"L`" ">R"8ơLm" "R>"8ƦeL "Re}@"8ƦL "RDROP" #EXIT#L" #?EXIT-#i(L##EXECUTEQ#iLe}E#PERFORM:#O##i#C@#±éL}#C!#±ȱˆiL#CTOGGLE:4%#&C$###@#±e}ñ‘L#!#±ȱȱL##+!$±ȱaȱqL$$DROPm"1$SWAPE$Š Ȣ¡e}L<$DUPr$8ƦȱLj$?DUP$LLr$$OVER$8ƦȱL$ROT$àe}¥Ñ‘ȱáÑL$-ROT:$$# %NIP:C$8$#%UNDER:C$$#,%PICK:&- "%##>%Re}OLL:p$"E% "p$&"&-/8$#U%2SWAP:$"$"#x%2DROP#%2DUP:$$#%+%ȡqqLi"%OR%ȡe}Li"%AND%ȡ11Li"%XOR&ȡQQLi"&-#&ȱ8ᥑȱLi"&NOTC&᥁񥑥Le};&NEGATE^&8S&DNEGATEo&8񥑥Ȋ񥑥᥁񥑥L e榢`c&D+& &ȱeđȱeőeeÑe}L&1+&aLiL&2+&&3+''''1-!'8LL'2-?'8'TRUE;e}D'FALSE;Q'"-1K'_'!0Y'h'1;p'2;z'3;'4;'ON:K'C$##'OFF:Y'C$##'CLIT'8e}ƦL'LIT'8ƦiL'LITERAL:p$'%>+ 0'0#0'0# (0<=($e}L6(0=S(L(UWITHINi( &±ð ıŰLD( ](<(±åi榥Q0±L?( (U<(±e}i榡±ðLA(LD(:'%)#!(>:C$(#!(0>:\&(#!(0<>:Q(A&#! )U>:C$(#!)=:!&Q(#!))D0=:%e}Q(#!7)D=:m&&=)#!G)D<:$%!&>+ ("%"%+%(#: #>+C$8$#"X)MIN:%(y)")MAX:%(y)")UMAX:%(y)")Ue}MIN:%)y)")EXTEND:p$(#")DABS:)>+m&#")ABS:)>+\&#: #"&p$"$"C$""##)(DO:$!&*#*(?DO:$!e}&$>+*"p$#%"8$##/*BOUNDS:$%C$##T*ENDLOOPu*L"$i*(LOOP*a iLL$|*(+LOOP*e}aqjQi(L%*I*8ƦqqL%*J +&+BRANCH+a¥q…L&e}+?BRANCH@+i(L''4+>MARK:0Y'0#'X+>RESOLVE:0$!&C$##'l++`+t'#),THEe}N:)t'+w+#)),ELSE:t'+0+`+C$w+K'#)>,BEGIN:+~'#)[,WHILE:~'+~'0>+`+'%#:+p$'-)>+ 8$w++#)m,REe}PEAT:~'+0+,#),UNTIL:~'+0>+,#*,DO:0%*`+'#*,?DO:06*`+'#*,LOOP:'+0*0s*w+#*-+LOOP:'+e}0*0s*w+#*-LEAVE:s*"='p$#%"#+7-UM*[-¡ȆĆŢ&&&eŅȱeąĐܥőȥđ‘ÁL,e}S-M*:p$(p$">+\&C$p$(>+ \&"A&"Y-">+m&#,-*:Y-8$#,-2*- *L:p$%#:K'BDIVISION OVERFLOW#--e}UM/MOD,.DZƥi榡ñȱȱĢf8Ǩư&Ȑ„&&&&ߠffÐ V!.#đȥÑȥ‘L/!.M/e}MOD:p$")$(>+4%%C$*."(>+\&$>+ C$"%C$' ##/.2/. jjL0./MOD:")".#0./:."%#0/MOD:e}.8$#0/*/MOD:"-".#0%/*/:-/"%#0;/U/MOD:Y'C$*.#0J/UD/MOD:"Y'"*."C$"*."#1^/CMOVE/ & Le}ƑL/2/CMOVE>/ &eŅeDžäƑĘL2/MOVE:"%(>+"/#"/#3/PLACE:$"e}$$&"/##3 0COUNT10ii8ƦL#3'0ERASE:Y'k0#4R0FILLm0 &¦ L5e}d0HERE:!##50PAD:0'B%#50ALLOT:!$#50,:0#~'0#50C,:0#t'0#50COMPILE:"p$&"#0#60#Te}IB96 1>TIB961>IN96&1BLK9621SPAN96>1TIB: 1##6K1QUERY:Q1'PIE1#1#,1'81'#7[1SCAN:"p$e}>+$#"!&>+'C$&C$+ ##71SKIP:"p$>+$#"-)>+'C$&C$+ ##71/STRING:$)$$%%!&#a{8 `81e}CAPITAL2 1L9 2 CAPITALIZE02±á…ĈLȱ 1L=2S2Ƞ.1eąĭ/1eŅ8.1¥/1ð .1e}/1L2=ѥťL2ąƥŅǡѥť(ȥ8.1ȥ/1e榠 ȱÈȑe}±  L=!2SOURCE:Q11##=3WORD:!3Q2#=-3PARSE:"!3,1#1$C$"1"$!&p$")!&,1$#=>3NAME:B43.2#e}#>p3STATE9>3EASCII:B43#>+(#>3,":'"F30$&00#>3"LIT:""4%/0%""#>3(":3#>3":0e}33#?3(.":3/0H#?4.":0 43#?4A(:')F3%#?)4B.(:')F3H#?;4A\:,1#D /&D-,1##?N4B\\:GM,1##?je}4\NEEDS:w3U>"%>+R4#?{4HEX:'!##?4DECIMAL:' !##@4DIGIT?:'0!&p$' )>+'!&p$' )>+!#$)e}$+#8$Y'#@4 ACCUMULATE:C$"C$!#Y-8$$!#Y-&"#@5CONVERT:&/04>+5+'#:*6#Q(#:/0K'*6$#:'/0#A25De}PL9:>+ #%8$ #Y'#:>+ #8$">+m&$8$x5#&$+#8$K'#:'&+>+ ' K'#'$+>+ 'K'#'H+>+ 'K'#'%+>e}+~'K'#Y'#:',$-)C$'.-)%#:x5#K'-)+#t'x5$#9Cr5NUMBER?:!VAp$/0*6#x5'Y'"''$R5|5\5'-+>+ #K'"e}R5|5\55>+ !#R5|5\54Q(|556R55\54Q(>+h56Q(|5x5'R55\5+#C06NUMBER::6$Q(B?(>+)#D6LAST9`:6#$e}#D6HIDE:6>+ ='#<###D6REVEAL:6>+ ='<###D 7RECURSIVE:7#:6>+ 4%#%$#8$#D*7 IMMEDIATE:'@<7#e}DT7RESTRICT:'<7#El7 CLEARSTACK7ȱLE7HALLOT:!#$!&C$ "&p$$!&p$!#~'E%$!&/7!##E7HEAP:e}!#'#E7HEAP?:7M"g(#:p$0$!&p$77C$/7$!&6$7#8ơiqeHeL+:"6#V:##F7DOe}ES>:0O8'L00$8#:p$'%'-)!&#:0'%'-)>+p$p$&0$!&&/t'6$t'0#G_8?HEAD9G8|:8#+#K'8##e}H8WARNING9:8#+#6#<#="%>+CC6#: 4EXISTS ^H#H8CREATE:081#0<##0w3#p$t'' g(A&B INVALID NAME0e}6#&088#>+ t'8$p$y808' <7y8!#+88$7Y'0O8LC89Ʊǥi榡ıLD(đáāLie}áH8)e…h) H…håаЪL&J!9>NAME:!#p$>+%'!&C$9$>+%%#+"%#:/0'%%#J :NAME>:e}p$>:C$#' %>+##JN:>BODY:&#Jp:.NAME:$>+p$7>+ 4|/0'%H+ 4???CC#K:::*96<##<#?Y'O88e}ơieLK:;:Y'+0#?7#K:CONSTANT:*90O88ƦȱLK;VARIABLE:*9~'0#L8;e}UALLOT:p$"#%')B USERAREA FULL"#C$"$#LO;USER:*9~'X;0O88ƦeeLL;ALIAS:*96#p$#e}' %>+ '0+' <7>:##M;VP9<+^Hp$&:CC+8$#Pa=(FIND=)Ơªȱ…ÆLD(e})e…ǩeÅȤƱˈȑǑLA(=±á…)8e…å) L">‘8Ʀ 0IȘe}$LT=FIND:#+='4%#=>+"%=#$;&)>+ C$='+"%Y'#TN>':w3U>Q(BWHAT?#T>[COMPILE]:e}>0#T>[']:>(#T> NULLSTRING?:p$#Q(p$>+"%#iȱiLU> >INTERPRET>]?V ?NOTFOUND"@??V? NO.EXTENe}SIONS:BWHAT?#V/? INTERPRET:?:@w3U>$>+t'%>+O#?B COMPILE ONLY>+#:6Q(>+)??:@w3U>$>+)>+O#?0?>+#:e}6$>+)>+C$((+)??WM?A[:']?<@?3'#W?]:'?<@?3'#:K'BCRASH#X?DEFER:*9'?0O8HȱhLe}X@(IS:"p$&"###:#')?#$-)C$'?#-)%A&B NOT DEFERRED#X6@BIS:>p$L@x:3#>+ 0<@0###:A' (B TIGHT e}STACK76>+p$7>+V:+'!&jGK'BDICTIONARY FULL#Y{@?STACK@ 8ȥ  V!@#ťȱ妠L V!K'B STACK e}EMPTYZ@.STATUS"@p!9""##Z5APUSH:"C$p$"#"CA""#[OARDEPTH:!#"&!&.#[nADEPTH: "!#C$!&.#:3#>+ e} 4] # 4 OK#\A(QUIT:?AHc1Y?A+\A'QUIT"@A\AQUIT:!#"?A\A STANDARDI/O:' !'/#\A'ABORT"@p!\Be}ABORT:73! BBA]&BSCR9]+BB#,1#MB#A]SB(ABORT":3C$>+"7"!se}##8$#:3C$>+!s##8$#^BABORT":0B3#^BERROR":0B3#_BBL; _B -TRAILINGC &eÅŤ e}ØHL+L+`BSPACE:BH#`;CSPACES:Y'6*CC*s*#:0='#aMCHOLD:K'fC$fC###apC<#:fCfC##aC#>e}:%fC#fC$!&#aCSIGN:(>+'-wC#aC#:!#g/$' $(>+'%'0%wC#aC#S:C%=)>+#bCD.R:%4%)Ce}C$CC$$)$!&VCH#b D.R:C$)$D#b5DU.R:Y'C$D#bHDD.:Y'DCC#bZD.:)_D#bkDU.:Y'_D#cyD.S: "!#$!&e}' )]*6**#~D~'*s*#cDC/L;(cDL/S;dDPAUSEdDLOCK:p$#M"-)>+8$#p$#>+D+M"C$##dDUNLOCK:pe}$D'#h8hLȱi榢L`"e EFILE;eSEPREV99e_EB/BUF;ppELIMIT;p~EFIRSe}T9:#' %#:V:4%&(C$7%#:7!#""#$>+^p$"'!&""#"$'p$"(C$"&V:(%>+."7>+"&E>+$"&E>+e} "&>:&)+ #+#*Fiȱiɠ…ʱ…5ȥɐ ĥLoFʥ˰ ʁ±ʑLFʅ¥˅LFFLm":e}!#$>+p$"'!&(F"+#:M"&p$#M"!&>+(%#C$0g(>+p$#&#$#'+#+%#:!(F1<%* %*#%g(>+ '<*#'e}*s*%<#%g(>+ '<<##:$FFF7C$!&7!#Y'6##uECLEAR:0p$M"&G!##uFG(FORGET:p$7B IS SYMBOLE&G#u`Ge}FORGET:>p$' #(B PROTECTED:p$7>+V:+='='jG#uGEMPTY:' #M"&G'" #"##vGSAVE:0M"&G!#p$='='#$='#e}#$Q(>+M"}!'/#vGBYE:p!.M#:YIK-)>+K' ##vHSTOP?:eI>+*H*HY'#v>H?CR:ID' !&)>+H#:*9p$0&O8Le}$8#!#%s##wXHOUTPUT::*9?O8L$8!##wHEMITHwHCRHwHTYPEHwHDELHwHPAGEHwHATH wHAT?H wHe}ROW:H8$#wHCOL:H"%#:*9p$0&O8L$8#!#%s##w IINPUT::*9?O8L$8!##w7IKEY&IwSIKEY?&Iw^IDECODE&IwjIe}EXPECT&IxSEAL:Y''+e}#:Y'fE#EE##yxI'COLD"@p!:IIHJ= 4volksFORTH-83 REV 3.81.03H Ky J'RESTART"@p!:'A<@ASJ' #!#'p!<@"Be}.BzHJCOLDJJHHX i­ iù J J @ ! i iȱ ȱhhK e} L{yJRESTART KJHYHLJ;KiL+%H$H`/K $KL+;CKLMKLEKK65KEY:AKDK>+KK-K#e}TK#BS;~pK#CR;|K#ESC;K65DECODE:vK+>+p$>+H'#K+>+ p$E1##"%%"C$#"H&#K65EXPECT:E1e}#Y'p$E1#(>+ YIsI+%CC#KKEYBOARDHI\KKKKHH` L(EMIT6L LLm"9i;(,L65EMIT:t'GL$4L#Qe}L65CR:KZLGL#KL /&KL-GL##hL65DEL:vKZLCCvKZL'GL$#L65PAGE:GL'#L65AT:C$KL-%GL##L65AT?:GL#Ke}L.')C$#L65TYPE:]*6* *#H*s*#LDISPLAYHZLoLLLLLL0MJ J l MB/BLK;?MR/O;MMW/O;e}YMR/W; eMIO-OPEN;qM IO-GETREC;M IO-GETCHR;M IO-PUTREC; M IO-PUTCHR; MIO-CLOSE; MICFf}LG;@MICCOM;BMICSTA;CMICBAL;DNICBAH;ENICBLL;H NICBLH;I.NICAX1;J+Y?+9P#NB File Error#PINCLUDEDf}:9P#"SMNp$'(>+8$P0'PZ01#,1#+ 4 FileError:oD.B"9P##PFILE":GP'PBk00'PBk0'"43/0GPC$/GPY'#f}QHINCLUDE": QP#|LQFORTH-83:#}aQ ASSEMBLER<9R9R<}PUSHA;+}QPUSH0A;+}QPUSH;+}QRP;}QUP;}f}QSP;}QIP;}QN;}QPUTA;}QW;}QSETUP;&~RNEXT;~RXYNEXT;J~RPOPTWO;#~*RPOP;m"f }rQ SAVE-SYSTEM:''#}!'!&'#0'# Q_MN8$p$''$O8$p$}!'!&0}!'!&!&&$O8$''#''#' 'f }#p$''$O8$N8$#:'Np$'(>+ 4 File Error:oD.B8$9P#H''9P#O'(>+8$'C$H+%9P#N8$H#ERDIf }R:3D:*.*/0R#:SDIR": QR#RSUNNESTnSL#cSTOOLSUO#3!#UCONT:dU##dU&#U#:p$'ND 4:#:p$#'ND#:p$#':D#:'$I!&Y')VCf}#US:UCCV'VCp$/0Hp$#%&V#0VN:UV~'VCp$#::&V#TVL:UV&V#rVD:%C$U'VCC$Y'%* V&*s*'VC%f}HV#VC:t'V#VB:UVp$#$%'ND&V#VUNRAVEL: # # #H 4TRACE DUMP IS H"!#!&>+"p$'NDCC='#::Hf}+\B#VFWORD:,1#1#-)>+VP'(>+B FileErrorQ11#'Q2O##:*9Y'%*' 9W68$0*s*O8L$8%/0C$##W A% f}2 b2AA(' (22((-b(*A!$ !22! !b!+A)& )2) )/b)A2A1f}622212187Q QA A432 2 5b rQAA22 bQAA"22.b9#f}0,9AQ2rb:.p$t'%>+Q(Y'#.p$'%X%#C$...'%X%##99:p$t'%>+p$'-)>+8$~'X+WC$p$'%X#f}....X##:*9p$0C$Y'%*"p$9W&0"/"0"*s*%O8L$8/0"C$"-%"H#UY*byadcandaslbccbcsbeqbitbmibnebplbrkbvcbvscf}lccldcliclvcmpcpxcpydecdexdeyeorincinxinyjmpjsrldaldxldylsrnoporaphaphpplaplprolrorrtirtssbcsecsedseistastxstytaxtaytsxtxatxsf}tyaUY a z# ((zz (UY ,x ,y ,x)),y,x ,y ) 1W4U.R:Y'CCCCCCH#XZ2U.R:Y'CCCCH#{SDf}IS:!VA4Hp$_ZCCp$#p$|ZCCX"X#p$>+ $&#|ZCCp$~'-)>+ $&#|ZCC~'C$!&'-VC"jYCC&X#p$Z' -)>+#p$#p$'%>+f}'!&$%&_Z+0X#p$~'C$!&-VC$>+~'-)>+ p$#_Z+p$#|ZX#)ZX#%FH>+>8$#ZTOOLS+%8$*Y'Y'?-*s*%#(SEE"@}`99:p$#::&#:[p$#oD&#:[p$#oD&f}#:H[/0%H'"HCC%#: 4DO '%#: 4LOOP '%#:p$[#(>+[#p$#'lS-)>+ 4; +[ 4 ; -2 allot Q(#: 4backf} to [8$#:&p$#%%C$;(>+H 4 REPEAT to @\)C$&%#H 4ELSE p$[#p$[#)>+ [#+8$&#:&p$#%%C$;(>+H 4Uf}NTIL }\&#Hp$'!&#'+-)$='#;(%>+ 4WHILE + 4IF p$[#p$[#)>+ [#+8$&#:p$'%C$p$#'L-)C$&#'<#&f }#-)%#:&_]>+H 4Does> + 4;Code '!&ZY'#:[[#%EXECUTION-CLASS[''>++%* 4BO8#.BAAAlS36**0]f!}.EXECUTION-CLASS[[[\\"\ \ \]@\@\@\@\@\@\ \"\0\][#].PFA:x:^Hp$p$[#-)>+ 4THEN ^H#] ^p$Q(FH%>+8$#;^f"} .IMMEDIATE::#p$^H'@%>+ 4 Immediate ^H'%>+ 4restrict#x^ .CONSTANT:p$x:#oD 4 Constant ::#^ .VARIABLE:f#}p$x:oD 4 Variable p$::H 4Value = x:#oD#^.:: 4: p$::HB^#&_.DOES>:H 4Does> ='B^#@_.USER-VARIABLE:p$xf$}:#oD 4User-Variable p$::H 4Value = O##oD#^_.DEFER: 4 deferred p$:: 4Is x:#[#_.OTHER:p$::p$#$x:-)>+f%} 4is Code#Z#p$#_]>+I_8$#8$ 4 maybe Code#Z#_DEFINITION-CLASS[:;9;"@*`.DEFINITION-CLASS[+_^^o_f&}__#M`((SEE:['['Hp$p$#=`a`^#f[SEE:>[#  NITION-CLASS[:;9;"@*`.DEFINITION-CLASS[+_^^o_d@ RLJL KL ER LL\B[Qj(}$VOLKSFORTH-83 3j)}.8 COMPILED 11AUG06CSil歰 END-TRACE5!iL'!RECOVER9hhƻƺL:J!NOOPj*}i!ORIGIN; t!S0;!R0; !DP; !OFFSET;!BASE;!OUTPUT;!INPUT;! ERRORHANDLER;!Vj+}OC-LINK;!UDP; !SP@ "¥â¥8ƦL "SP!7"L /"UP@O"L" G"UP!^"j,}iL V"RP@"L" }"RP!"L`" ">R"8ơLm" "R>"8ƦeL "Rj-}@"8ƦL "RDROP" #EXIT#L" #?EXIT-#i(L##EXECUTEQ#iLj.}E#PERFORM:#O##i#C@#±éL}#C!#±ȱˆiL#CTOGGLE:4%#&C$###@#±j/}ñ‘L#!#±ȱȱL##+!$±ȱaȱqL$$DROPm"1$SWAPE$Š Ȣ¡j0}L<$DUPr$8ƦȱLj$?DUP$LLr$$OVER$8ƦȱL$ROT$àj1}¥Ñ‘ȱáÑL$-ROT:$$# %NIP:C$8$#%UNDER:C$$#,%PICK:&- "%##>%Rj2}OLL:p$"E% "p$&"&-/8$#U%2SWAP:$"$"#x%2DROP#%2DUP:$$#%+%ȡqqLi"%OR%ȡj3}Li"%AND%ȡ11Li"%XOR&ȡQQLi"&-#&ȱ8ᥑȱLi"&NOTC&᥁񥑥Lj4};&NEGATE^&8S&DNEGATEo&8񥑥Ȋ񥑥᥁񥑥L e榢`c&D+& &ȱeđȱeőeeÑj5}L&1+&aLiL&2+&&3+''''1-!'8LL'2-?'8'TRUE;j6}D'FALSE;Q'"-1K'_'!0Y'h'1;p'2;z'3;'4;'ON:K'C$##'OFF:Y'C$##'CLIT'8j7}ƦL'LIT'8ƦiL'LITERAL:p$'%>+ 0'0#0'0# (0<=($j8}L6(0=S(L(UWITHINi( &±ð ıŰLD( ](<(±åi榥Q0±L?( (U<(±j9}i榡±ðLA(LD(:'%)#!(>:C$(#!(0>:\&(#!(0<>:Q(A&#! )U>:C$(#!)=:!&Q(#!))D0=:%j:}Q(#!7)D=:m&&=)#!G)D<:$%!&>+ ("%"%+%(#: #>+C$8$#"X)MIN:%(y)")MAX:%(y)")UMAX:%(y)")Uj;}MIN:%)y)")EXTEND:p$(#")DABS:)>+m&#")ABS:)>+\&#: #"&p$"$"C$""##)(DO:$!&*#*(?DO:$!j<}&$>+*"p$#%"8$##/*BOUNDS:$%C$##T*ENDLOOPu*L"$i*(LOOP*a iLL$|*(+LOOP*j=}aqjQi(L%*I*8ƦqqL%*J +&+BRANCH+a¥q…L&j>}+?BRANCH@+i(L''4+>MARK:0Y'0#'X+>RESOLVE:0$!&C$##'l++`+t'#),THEj@}N:)t'+w+#)),ELSE:t'+0+`+C$w+K'#)>,BEGIN:+~'#)[,WHILE:~'+~'0>+`+'%#:+p$'-)>+ 8$w++#)m,REjA}PEAT:~'+0+,#),UNTIL:~'+0>+,#*,DO:0%*`+'#*,?DO:06*`+'#*,LOOP:'+0*0s*w+#*-+LOOP:'+jB}0*0s*w+#*-LEAVE:s*"='p$#%"#+7-UM*[-¡ȆĆŢ&&&eŅȱeąĐܥőȥđ‘ÁL,jC}S-M*:p$(p$">+\&C$p$(>+ \&"A&"Y-">+m&#,-*:Y-8$#,-2*- *L:p$%#:K'BDIVISION OVERFLOW#--jD}UM/MOD,.DZƥi榡ñȱȱĢf8Ǩư&Ȑ„&&&&ߠffÐ V!.#đȥÑȥ‘L/!.M/jE}MOD:p$")$(>+4%%C$*."(>+\&$>+ C$"%C$' ##/.2/. jjL0./MOD:")".#0./:."%#0/MOD:jF}.8$#0/*/MOD:"-".#0%/*/:-/"%#0;/U/MOD:Y'C$*.#0J/UD/MOD:"Y'"*."C$"*."#1^/CMOVE/ & LjG}ƑL/2/CMOVE>/ &eŅeDžäƑĘL2/MOVE:"%(>+"/#"/#3/PLACE:$"jH}$$&"/##3 0COUNT10ii8ƦL#3'0ERASE:Y'k0#4R0FILLm0 &¦ L5jI}d0HERE:!##50PAD:0'B%#50ALLOT:!$#50,:0#~'0#50C,:0#t'0#50COMPILE:"p$&"#0#60#TjJ}IB96 1>TIB961>IN96&1BLK9621SPAN96>1TIB: 1##6K1QUERY:Q1'PIE1#1#,1'81'#7[1SCAN:"p$jK}>+$#"!&>+'C$&C$+ ##71SKIP:"p$>+$#"-)>+'C$&C$+ ##71/STRING:$)$$%%!&#a{8 `81jL}CAPITAL2 1L9 2 CAPITALIZE02±á…ĈLȱ 1L=2S2Ƞ.1eąĭ/1eŅ8.1¥/1ð .1jM}/1L2=ѥťL2ąƥŅǡѥť(ȥ8.1ȥ/1e榠 ȱÈȑjN}±  L=!2SOURCE:Q11##=3WORD:!3Q2#=-3PARSE:"!3,1#1$C$"1"$!&p$")!&,1$#=>3NAME:B43.2#jO}#>p3STATE9>3EASCII:B43#>+(#>3,":'"F30$&00#>3"LIT:""4%/0%""#>3(":3#>3":0jP}33#?3(.":3/0H#?4.":0 43#?4A(:')F3%#?)4B.(:')F3H#?;4A\:,1#D /&D-,1##?N4B\\:M,1##?jjQ}4\NEEDS:w3U>"%>+R4#?{4HEX:'!##?4DECIMAL:' !##@4DIGIT?:'0!&p$' )>+'!&p$' )>+!#$)jR}$+#8$Y'#@4 ACCUMULATE:C$"C$!#Y-8$$!#Y-&"#@5CONVERT:&/04>+5+'#:*6#Q(#:/0K'*6$#:'/0#A25DjS}PL9:>+ #%8$ #Y'#:>+ #8$">+m&$8$x5#&$+#8$K'#:'&+>+ ' K'#'$+>+ 'K'#'H+>+ 'K'#'%+>jT}+~'K'#Y'#:',$-)C$'.-)%#:x5#K'-)+#t'x5$#9Cr5NUMBER?:!VAp$/0*6#x5'Y'"''$R5|5\5'-+>+ #K'"jU}R5|5\55>+ !#R5|5\54Q(|556R55\54Q(>+h56Q(|5x5'R55\5+#C06NUMBER::6$Q(B?(>+)#D6LAST9:6#$jV}#D6HIDE:6>+ ='#<###D6REVEAL:6>+ ='<###D 7RECURSIVE:7#:6>+ 4%#%$#8$#D*7 IMMEDIATE:'@<7#jW}DT7RESTRICT:'<7#El7 CLEARSTACK7ȱLE7HALLOT:!#$!&C$ "&p$$!&p$!#~'E%$!&/7!##E7HEAP:jX}!#'#E7HEAP?:7M"g(#:p$0$!&p$77C$/7$!&6$7#8ơiqeHeL+:"6#V:##F7DOjY}ES>:0O8'L00$8#:p$'%'-)!&#:0'%'-)>+p$p$&0$!&&/t'6$t'0#G_8?HEAD9G8|:8#+#K'8##jZ}H8WARNING9:8#+#6#<#="%>+CC6#: 4EXISTS ^H#H8CREATE:081#0<##0w3#p$t'' g(A&B INVALID NAME0j[}6#&088#>+ t'8$p$y808' <7y8!#+88$7Y'0O8LC89Ʊǥi榡ıLD(đáāLij\}áH8)e…h) H…håаЪL&J!9>NAME:!#p$>+%'!&C$9$>+%%#+"%#:/0'%%#J :NAME>:j]}p$>:C$#' %>+##JN:>BODY:&#Jp:.NAME:$>+p$7>+ 4|/0'%H+ 4???CC#K:::*96<##<#?Y'O88j^}ơieLK:;:Y'+0#?7#K:CONSTANT:*90O88ƦȱLK;VARIABLE:*9~'0#L8;j_}UALLOT:p$"#%')B USERAREA FULL"#C$"$#LO;USER:*9~'X;0O88ƦeeLL;ALIAS:*96#p$#j`}' %>+ '0+' <7>:##M;VP9M;CURRENT9M <CONTEXT:;p$#%&#:;&#<#M<ALSO:;#'ja} (BVOCABULARY STACK FULL#<#~';$#<##M=<TOSS:';$#Nz< VOCABULARY:*9Y'0Y'00!#0!#O8L$8#<##N<FORTHjb}<IQN<ONLY<I+^Hp$&:CC+8$#Pa=(FIND=)Ơªȱ…ÆLD(jd})e…ǩeÅȤƱˈȑǑLA(=±á…)8e…å) L">‘8Ʀ 0IȘje}$LT=FIND:#+='4%#=>+"%=#$;&)>+ C$='+"%Y'#TN>':w3U>Q(BWHAT?#T>[COMPILE]:jf}>0#T>[']:>(#T> NULLSTRING?:p$#Q(p$>+"%#iȱiLU> >INTERPRET>]?V ?NOTFOUND"@??V? NO.EXTENjg}SIONS:BWHAT?#V/? INTERPRET:?:@w3U>$>+t'%>+O#?B COMPILE ONLY>+#:6Q(>+)??:@w3U>$>+)>+O#?0?>+#:jh}6$>+)>+C$((+)??WM?A[:']?<@?3'#W?]:'?<@?3'#:K'BCRASH#X?DEFER:*9'?0O8HȱhLji}X@(IS:"p$&"###:#')?#$-)C$'?#-)%A&B NOT DEFERRED#X6@BIS:>p$L@x:3#>+ 0<@0###:A' (B TIGHT jj}STACK76>+p$7>+V:+'!&jGK'BDICTIONARY FULL#Y{@?STACK@ 8ȥ  V!@#ťȱ妠L V!K'B STACK jk}EMPTYZ@.STATUS"@p!9""##Z5APUSH:"C$p$"#"CA""#[OARDEPTH:!#"&!&.#[nADEPTH: "!#C$!&.#:3#>+ jl} 4] # 4 OK#\A(QUIT:?AHc1Y?A+\A'QUIT"@A\AQUIT:!#"?A\A STANDARDI/O:' !'/#\A'ABORT"@p!\Bjm}ABORT:73! BBA]&BSCR9]+BB#,1#MB#A]SB(ABORT":3C$>+"7"!sjn}##8$#:3C$>+!s##8$#^BABORT":0B3#^BERROR":0B3#_BBL; _B -TRAILINGC &eÅŤ jo}ØHL+L+`BSPACE:BH#`;CSPACES:Y'6*CC*s*#:0='#aMCHOLD:K'fC$fC###apC<#:fCfC##aC#>jp}:%fC#fC$!&#aCSIGN:(>+'-wC#aC#:!#g/$' $(>+'%'0%wC#aC#S:C%=)>+#bCD.R:%4%)Cjq}C$CC$$)$!&VCH#b D.R:C$)$D#b5DU.R:Y'C$D#bHDD.:Y'DCC#bZD.:)_D#bkDU.:Y'_D#cyD.S: "!#$!&jr}' )]*6**#~D~'*s*#cDC/L;(cDL/S;dDPAUSEdDLOCK:p$#M"-)>+8$#p$#>+D+M"C$##dDUNLOCK:pjs}$D'#h8hLȱi榢L`"e EFILE;eSEPREV99e_EB/BUF;ppELIMIT;p~EFIRSjt}T9:#' %#:V:4%&(C$7%#:7!#""#$>+^p$"'!&""#"$'p$"(C$"&V:(%>+."7>+"&E>+$"&E>+ju} "&>:&)+ #+#*Fiȱiɠ…ʱ…5ȥɐ ĥLoFʥ˰ ʁ±ʑLFʅ¥˅LFFLm":jv}!#$>+p$"'!&(F"+#:M"&p$#M"!&>+(%#C$0g(>+p$#&#$#'+#+%#:!(F1<%* %*#%g(>+ '<*#'jw}*s*%<#%g(>+ '<<##:$FFF7C$!&7!#Y'6##uECLEAR:0p$M"&G!##uFG(FORGET:p$7B IS SYMBOLE&G#u`Gjx}FORGET:>p$' #(B PROTECTED:p$7>+V:+='='jG#uGEMPTY:' #M"&G'" #"##vGSAVE:0M"&G!#p$='='#$='#jy}#$Q(>+M"}!'/#vGBYE:p!M#:YIK-)>+K' ##vHSTOP?:eI>+*H*HY'#v>H?CR:ID' !&)>+H#:*9p$0&O8Ljz}$8#!#%s##wXHOUTPUT::*9?O8L$8!##wHEMITHwHCRHwHTYPEHwHDELHwHPAGEHwHATH wHAT?H wHj{}ROW:H8$#wHCOL:H"%#:*9p$0&O8L$8#!#%s##w IINPUT::*9?O8L$8!##w7IKEY&IwSIKEY?&Iw^IDECODE&IwjIj|}EXPECT&IxSEAL:Y''+j}}#:Y'fE#EE##yxI'COLD"@p!:IIJ= 4volksFORTH-83 REV 3.81.03HKy J'RESTART"@p!:'A<@AQJ' #!#'p!<@"B.Bj~}zFJCOLDJJHHX i­ iù J J t ! i iȱ ȱhhK j} L{wJRESTART KJHWHLJ;KiL+%H$H`,K !KL+;@KLJKLBKJ65KEY:>KDK>+HK*K#QKj}#BS;~mK#CR;yK#ESC;K65DECODE:sK+>+p$>+H'#K+>+ p$E1##"%%"C$#"H&#K65EXPECT:E1#Y'j}p$E1#(>+ YIsI+%CC#KKEYBOARDHIYKKKKHH`L(EMIT3L LLm";()L65EMIT:1L#JL65CR:KSLj}#[L65DEL:sKSLCCsKSL#lL65PAGE:'}H#L65AT:'U#'T##L65AT?:'T#'U##L65TYPE:]*6* *#H*sj}*#LDISPLAYHSLbLLtLLLLMJ J l LB/BLK;MR/O;$MW/O;0MR/W; +Y?+P#NB File Error#[PINCLUDED:P#"*MNp$'(>+8$jP0'PZ01#,1j}#+ 4 FileError:oD.B"P##PFILE":P'PBk00'PBk0'"43/0PC$/PY'#PHINCLUDE":PP#|#QFORTH-83:#}8Qj} ASSEMBLER<R<}PUSHA;+}_QPUSH0A;+}mQPUSH;+}|QRP;}QUP;}QSP;}QIP;}QN;}QPUTA;j}}QW;}QSETUP;&~QNEXT;~QXYNEXT;J~QPOPTWO;#~RPOP;m"hY@/