' JJJJ ?\>' L-=l>  ԠéԠˠ#~?  xDIR ERA TYPESAVEREN USERY!yO#< Ty#O 3ǯ21y_͸2y2ͽ:ķ˜1͘A͌>>͌92^ :˷¥.!_~#fow]ɭʎʥ!v"!çREAD ERRORçNO FILE^:˷#͘*~ "Ʒ"͌#>?͌͘ =_.:;<> Oƅo$>!Y2*O"ʉ@G:ʐ:wÖx2p0ʹ#*©6?ëw˜0ï#6 ¹.0#*6?w0#6 #6"  Ň!˶2:2a{_:˷ʖ:˷>Ľʖ:=2–!B!6#5ʖ:˷Ľ!ͬʧ )!F#xʺ~0wëw!" !~6ͽ:ý(!\X COPYRIGHT (C) 1979, DIGITAL RESEARCH _͌> ͒> Ò> Ò͘~#͌ì _2<į2: :):>:(y2E!|"*wɍ`JX)^>EE??++ ԩ  [\ ĭ ?  JL ``LLL $Lq<`ΧԠĠڸčԠԠ͠Ԡ؍2>o:= gw8H<8H=` }Hx / hJ Leh<> > @A @A>i =<>+ LeÍڍh@(L>*// -П( ( $8` %  ZNx`. }x$50x.$50xL JJJJ`Hjf5 }h $50x`  Ȍ` Hx  -(hL(h8֩`Lx (`H݌hHhHh݌>?F؅G(jf5(  ;  R( FGj 0x j $xxH` ( Rh RL.xxH h  !"#$%&'()*+,-./0123456789:;<=>?x&& 8 , P ; ' / \ ; & ; x)*++`FGG8`0($ p,&" cI꽌ɪVɭ&Y & &Y &   꽌ɪ\8`&&꽌ɪɖ'*&%&,E'зЮ꽌ɪФ`V0 ^ *^ *>`+*xS&x'8*3IxiU ,>J>V J>V `8'x0| &HhHh V Y V '&Y V x ꪽV ' `Hh` ! ~ 3#0 Wx x ƀ Ƃ G ~ # 3x~#B!Y~ɯ2:˷=!˾ý:˷=!˾:ý^T!~  6?#ˆ:`O> K{͘A͒>:͒͢>:͒͢xK > K > ͒x  ͢ØÆ^ BRͧ9!5‚#~Y‚#"T<ÆALL (Y/N)?^ Tʧ͘!6!~ڇ ɯw4!Y~ʆ͌†t=ʆf ^ T ɯ2o&)|+!<ͧЯ2*C!!~~#~O~G#n,-.‹! w! yG!x͢.:E<ʄ! q!pQ:E<. ʄ$.:E<ʄi6}2ExN! ~态O>G~G!~G} *C!r#r#r ^ͥ_y#x#{2>2T*CGͻ:ẅ́n>2;O ^DM;}H>"*C :ٷ:ddslO s#r:EϷ͊:==»y==»*Ww#*"͸*:G#š"͸:!پw4!iw:Z!E~=26 w ~>2!E5T*C!"C"C!w# F! w͌xѯ2͢*C ~<wʃG:٠!٦ʎì 4~ʶ¬:<ʶ$ʶïZͻЯx>2>2ͻ:!پZկ2:EϷẅ́͊Ͳ> *C ^OT *C~wD -'  -@ͦ~^*C Ox! N!Fwyxʋ>ڋ>*Cw~#+w#w+ɯ2E22i^ *C :ٷ~w~͔͔# # ::/GyO>2!q*C"͡ʔ*JҔ^:Oyʃ?|x | sӖ-|N-# S:2E!~Яw>T D^6k-äPYy 5*{zBK5:AϾ#~$=2Ek͌ ):BO!yoxg*:BO}!N#F "*#*s#r^ ~!J! J*:مo$*C~i6iw**{#zr+s{ozg**͕** Ѿ,w͜͸Ͳ!!N#F$**O!~#O: \зSЀ*C :ٷqn& ^#V>O^"*}:*)=":O:١o"*C *C!ͮ~2~2ͦ:٦2ͮ:ЯO:فw:w |g}o*ٯ# 2E>! ^#V w#P:BO|^#V#"##"##"##"!O*!O*|!6ʝ6>گ*w#w*w#w'û*ڷ! J*""!N#F*^#V*~#foyx*{_zW+*x: 2 p&x~+é7ͯ2 H! >w_: ! Ͼ5ͤNkͱ¦ͱxʊ#Nx: Ϸ! ϖ2 ͤ! 5™#wO~x½p Hy<< ڷʑ :!qMD# O͐  :ϷE B 2>: Ϸb# : Ϸy! 4 5~yy5 6yҐ^H@Oy H H: –ͬ  #H: ! Ͼ Hù H H $O͐: 2 *CN# ʽY̙̥̫̱"C{2!"E9"1Aϯ22!ty)K!G_^#V*Cΐ~؃E؜إث ,&-AGMSϛ!!ô!ô!Bdos Err On : $Bad Sector$Select$File R/O$:BA2!~6=qf^!~2>`~2˯2\!!B!~> >#0~O#Cx2͘1)ͽÂf zͧÆBAD LOADCOMf^: !˶ Â$$$ SUBÆNO SPACE^ :Ty!B*O=?_s#"^sG!~Yʸpsp2mÆÆf ͧÆFILE EXISTS _: É: :˷ʉ=2)ͽÉ T!@k!}|qs+p+q-*C ͥ!!q#p#w*:BOYG}*MD "ã:!BϾw!>2*C~=2u:B2~2wE:A*C϶w>"!""ٯ2B!"!rQQQâ~?ͦ~?rQ*"CQ-Q͜QüQrQ$Q*):B"*)*)Q;*"E:;:A2AQÓQÜQ*C}/_|/*٤W}_*"}o|g":ٷʑ*C6:ٷʑw:2E**E}DQ>2C0T"I !>"H>2J: !͢:d::d!s~B#1!P!J߇o~,foɷp:BB Apple ][ CP/M 56K Ver. 2.20B (C) 1980 Microsoft ;ۯ2>EE??++B#1!P!J߇o~,foɷp;ۯ2:޷;ۯ2e ]~6(*} *:޽ y(3:޷s:2G<2x/a2:oa":޷zޯ2{![:޷ <2:>sɯ2>!>2!;:*     1>2>2*"?ۯ2:08 !"Y"BT"->2:8Y"/:8Y"F~!xq!;`~0,~!M;!x~1.~8[q>:޷ 2y2!!{o!:=8 ~y!3w.y2Cɯ2>!w#w#wOa."y .:g"*"!~((5:# :*޽ :޼ $| 8g,"ޯ2!"_!ޅoN!޷((+! ~O#O:x >2ޯ2:޷*(*D*:wk*(:$_"~28 ?@wx( !;!܅ony 2$8!2E!y>>?22!ɯog"$2E!.B...X&*}(8.|8&"$պ`~(,qy2E[22G: 2:O*:P!O#~#'۹~y/:02?"2O: K*:*(0**:8'(*:08* *: 8(*7!w˹#~(=5:!( +_ywɷ+ͱ*:]lc_O{- OMG!~_ :( 6>83! ~èCfuÇKmVÉÎÓãݯ`iޓښ:ޓڦJޓڲZޓھjޓzޓߊ / !~ `66= !; !{g1:Q!͢گ22>2!"2!"͎>2DEBUG COMZ DEV VOMzSL5 COMP !"#$%&'ASSEM COMr()*+,-./0123456SYSMAKE COM789:;<=>?@ABCDEFSYSMAKE COM.GHIJKLCOLD SL5MNOPSL5 DOC QR]ttrt))tXltkltdl&>EOWSEz])])W~CEX]@W ;`o2EoW EtmW E BBBBB/)lEBEC///B!0#2*y N#fi4##4N#fi4+r+s+p+q4!9 B0~#fo4##4##N#F++p+q4 N#F4ììEbM/ECOMMOD SL5 STDEBUG SL5UVWKERNEL SL5XYZ[\]^_`abcdefgKERNEL SL5`hijklmnopqrsASSEM SL5Dtuvwxyz{|ICOND SL5}MUSIMP $$$4^#V#~#~33+r+s4^#V#4 2B2yoxg2yoxg2yoxg2#2+2!R2q#p3^#V2n&2q3^#V r+s3N#Fp+q3N#F p+q3322N#F#4+p+q422322y!9# S{!j-}]L}]N#F#Etz!80)y 2} *7)0{(7R0 R<8702M*EbEbiih&2i3)tE)WtƸ:ByӋpt__x.R"A:#NN#F#^#V3^#V2^#V)2;[";b>;i;p;w;~;; ;;;;; ;;;;;C=( #Ns#FrPY= 3&})9+=( Fr+Ns+PY= 3!92344+)9N#F3VtVX|m}lg2y(< 2y(% 233y! #2x!(#2x! y(#2/// E  EO _| Xp9 WQ |X)* ;;ttXt)t))t)tv |Bv |7v   E tE S #LSTWl4llj4jEN)N)lWN)NlNE_Npy|pW |X)"(C) COPYRIGHT 1980 THE STACKWORKS  ABORT NXN|  b ? D/0 Q-*ESTACK UNDERFLOWQW9*ERETURN STACK UNDERFLOWQ E *  ~ E<   E< *    7E_ W} X )   E  E * W E~  >  E W@ E  S *ESC*    W< 0/tE.t)XW8pENEaXWoEmWoqESE)tWqy)trt)EtErt/WWqE)t)DEBUG COMLMNO?F6q; S #CRTW( X* S . )*      X S READ PAST EOF. S FILE NOT OPENED FOR READING. S FILE NOT OPENED FOR WRITING. S FILE DOESN'T EXIST. S DISK WRITE ERROR. S FILE CAN'T BElNlWytN<E2D>S QNWytN<EVD>S Q)t|Bt7EmWtEytN|X/NN|X/l/dtl]ylrt/]tlt _p    E>)0)E]b-Xt*Ea_)pytF_*p_)p llE0 E, ]]t E,  W< XXCl /37E  X ) l  W    E  W l  l} lW *  EY E' tE W  } tlWq"ltE/S N|XWW;NXN|* "ltEdN|XWWhbtEUNBALANCED NESTINGQ]ttdltBEEREDEF b  N4;N)_{BtBE* / tBBEHtBE`tq Er v  l  l6v 6 l6 llttm1üE _|X CREATED.S      tmv |B v  l} l  ) ); v |B E  ~  E  ~ ~ E  E7 7NXEXE#N/]N l _ # G !2#^#Vz #^#V|2^#VrtdtNWN|NX|-EX]W_|9E@E/W   Ei E9 tE-W1We} t )} tl Ec WeWo* B_|BXpWU   EK* WU} lW_* } tEt Wv  E} t t3E , Eq WxW} t )|W* , E* WxBq E7ytll)lN))Wt))N)Wt))ttldtrt))t|)|FXXtE)tVlXSET, EOF* FERRS SHOW-FNAME SERIAL FFLAGS|! FFLAGS@& FCB BUFAD SCHAN# BUFLEN} BUFP'v FFLAGS3q EOFCHR@l BUFSIZEIS $C"T* CTYPE^ COUTg CISpCIN}CALLCPMOP-VER#BLANKreadyllN!INSTR!MAKECOM COMUP ?SYMTAB USERPAD USERPF SYMDUMP = SYM'SYMTYPE!*UB*.*BREAK*<$*BREAK*IBREAKADTqRSDMP_^PSDMPi1SDMPulMODIFY1HEXDDUMPDMP E:E+@/WGXX/X]E.ECE{)XWCEX]WWOWX X|#EX|L lWv N|lNlLXEXECUTE4B,,OCTALHEXDECIMALB.X..HEX?F.)NASCIICRSPACES'SPACE2CHECK;D/0Jq UNDEFINEDUbPNAME`QABORTl'CRIGHTu$T"TYPERESTART$REStrt))t|)]|dtrt)XtE )tE{ tW W XtEM ; ;  tE Ntrtyt//ylrl@Pl tmW! Vl tmt]tl)`)ylXyt/yl]t)lrt/tkltdlkt]lVWNl]ttrt))tNNNlERECURSEREPEAT~WHILEq DEFINITIONS' VOCABULARYFORGET$FORGETVLIST SETfBARRAY DARRAY'5(.(]5[D  IMMEDIATEMIMPZCOMPILEdLOOPo+LOOPwDOENDBEGINENDIFDASCIIaCOLDSN [END-OF-FILE]#FLOAD$FLOADNAMIT$NAMITGCHRWLNWPTR@iFALLOC `$NEXTHL+W$NEXT6N$PUSHdGEDOCK2;CODEU)CODEj" ASSEMBLER>q"}CASEND;;=:CAS|)Xll PtEBN|XWWL P t_)ttl)pjtrl/yllB }7E.*E_|p_|TARTOUTINITtININITUGCHECHFIB^TCHGCH6OUTFILEINFILEqWCH WBYTERCHxRBYTE(aFLUSH3 WRITE= READIF RENAMET OPENW_ OPENRk DELETEv CLOSE BUFADSET~ FRES; RE l tE>!ytNrtyt/@rtyt/N)W@!NS Program size = S / F _ @ po! o?Set the variable ?SYMTAB to 0 if the symbol table isn't needed.(Execute 'MAKECOM program.com' when NlNX|&'" l"2NXWXN )N )N)4W;";tEt|W  qELSEVIF=;:&;:VARIABLECONSTANT$CODE CUR@@CON!jDC=T" C"''S$$'S,'B5y$'BAPINTRLPMNUMBERWFINDbWFIND1jGS=tWORDDELIM=LINKLITERA7W XW%XWu*EZttz)W4-)19)1;BREAK: trt))X|)lP]tttXpW_)p0/ EL/BEjE)E)EW% EW%1EEW EW1E FILLURMOVE@BMOVE9FORTH&$VOCAB$:;CODENOCASE$;;$=:$CASE ZOUTZINMOD%//i/MOD:*U/MODA*I @XRMAX[MINc--lCOMuABS|KJIEXIT]ttrt))tXltkltdl&>EOWSEz])])W~CEX]@W ;`o2EoW EtmW E BBBBBBB/)lEBECB&7|/-)+$;$:$FMAKE$SETLITRSTACKSTACKRSIZE SSIZEDEPTH#FLAGS.INFOF= DELIMITERHUPPERRBASE]STATEhD/0ADtGOQIAD RESTARTADySYMPTRrS///B!0#2*y N#fi4##4N#fi4+r+s+p+q4!9 B0~#fo4##4##N#F++p+q4 N#F4ììEbM/Ep$+LOOP_$DOW$ELSEE$IF<U<=3U>=*U>U<>=<=><<> =NOT0>%0<-0=9$RMOVEE$BMOVEN<-LW->LbzBSWAPpoGO-OPSYSxmGO`COUNTWDP+!NHER4^#V#~#~33+r+s4^#V#4 2B2yoxg2yoxg2yoxg2#2+2!R2q#p3^#V2n&2q3^#V r+s3N#Fp+q3N#F p+q3322N#F#4+p+q422322y!9# S,_=}]L}]N#F#YMTPkCVOCdCONTEXT]CURRENTVDPL$ARRAYC$BARRAY; $CONSTANT2$$PUSHpS-|23 Lev 12 12345 - line executed. Entering Proc name - 12345678 :.!.Etz!80)y 2} *7)0{(7R0 R<8702M*EbEbiih&2i3)tE)WtƸ:ByӋpt__x.R"A:#NN#F#^#V3^#V2^#V)2;[O-;b>;i;p>;w;~;;+;;;;; ;;;;;CECPICK>RP!9RP@4SP!-SP@-ROLLROLL2SWAP2DUP2DROPROT SWAP>RR>'OVER0DUP:DROPC1-!L1+!T+!\B!d|B@kt@rl!}bMINUS]1-X1+MX|=( #Ns#FrPY= 3&})9+=( Fr+Ns+PY= 3!92344+)9N#F3VtVX|m}lg2y(< 2y(% 233y! #2x!(#2x! y(#2/// E  EO _| Xp9 WQ |X)* ;;ttXt)t))t)tv |Bv |7v   E tE S #LSTWl4llj4jEN)N)lWN)NlNE_Npy|pW |X)"(C) COPYRIGHT 1980 THE STACKWORKS  ABORT NXN|  b ? D/0 Q-*ESTACK UNDERFLOWQW9*ERETURN STACK UNDERFLOWQ E *  ~ E<   E< *    7E_ W} X )   E  E * W E~  >  E W@ E  S *ESC*    W< 0/tE.t)XW8pENEaXWoEmWoqESE)tWqy)trt)EtErt/WWqE)t)DEV COMmnop?F6q; S #CRTW( X* S . )*      X S READ PAST EOF. S FILE NOT OPENED FOR READING. S FILE NOT OPENED FOR WRITING. S FILE DOESN'T EXIST. S DISK WRITE ERROR. S FILE CAN'T BElNlWytN<E2D>S QNWytN<EVD>S Q)t|Bt7EmWtEytN|X/NN|X/l/dtl]ylrt/]tlt _p    E>)0)E]b-Xt*Ea_)pytF_*p_)p llE0 E, ]]t E,  W< XXCl /37E  X ) l  W    E  W l  l} lW *  EY E' tE W  } tlWq"ltE/S N|XWW;NXN|* "ltEdN|XWWhbtEUNBALANCED NESTINGQ]ttdltBEEREDEF b  N4;N)_{BtBE* / tBBEHtBE`tq Er v  l  l6v 6 l6 llttm1üE _|X CREATED.S      tmv |B v  l} l  ) ); v |B E  ~  E  ~ ~ E  E7 7NXEXE#N/]N l _ # G !2#^#Vz #^#V|2^#VrtdtNWN|NX|-EX]W_|9E@E/W   Ei E9 tE-W1We} t )} tl Ec WeWo* B_|BXpWU   EK* WU} lW_* } tEt Wv  E} t t3E , Eq WxW} t )|W* , E* WxBq E7ytll)lN))Wt))N)Wt))ttldtrt))t|)|FXXtE)tVlXE(lW (/]"MES( )4N4Wi()4N44N(N]N(N"ME( )4N/]4W()44N/]4B }E!"/ )4W'" E" E^"/))4W"E"E")/)4W"E"#)W"E"#)W"d4)44+"+"E#W  E:E+@/WGXX/X]E.ECE{)XWCEX]WWOWX X|#EX|L lWv N|lNl &4WA&`E%&:4WA&bE;&WWA&_W(`E&Ei&24W&E&9)M"4W&E&"4W&4/C)4W(bE&GW(cE&OW( E'4)4W d44))4@ Ef 4])4Wz d44)4E E E E  E (E 8E  BE ]))4W!E!d)t]tl)`)ylXyt/yl]t)lrt/tkltdlkt]lVWNl]ttrt))tNNNl4W$" )44aEN$4//@))4WZ$)44$$E$E$)/))4W$/)4)4~$~$E%4#0/E #4W,#")4EG#4WS#")4)E#4W# E#44W#!E#44W#E#4W#")444E$4|)Xll PtEBN|XWWL P t_)ttl)pjtrl/yllz;ltz)lW(E'4W(E'E'`Eo'EQ'*4Wk'4/K)4W'E'4W'9)M{W'/X4W(E'9)ME'*W'!4W(dE']p)44W(644444W!)444/)4  0 ( 8 E!J!W! E!B!W! 7E!/)4E! W!/ )4W'"NlNX|&'" l"2NXWXN )N )N)4W;V-;tEt|W  Wd%E%4Wd%E0%4Wd%EL%44Wd%Ed%44 EE& E%E%]])@)4W%])44WA&ORBE%m]F)44WA& E% 4WA&E7$P$Q$`$a$b$c44'4/44444v444?474DDDDDDDDDDDFDVD^DoDMDMDEDDDDDDDDE  E 4)] BtBt|4tP/)4MM$$$$$$$$$$$$$$$$ $$$$ $!$0$1$2$4$5$6$7E).*EH)_|p")_|(p4)WJ)_))pQ)0/ E)/BE)Ec*E))L)E)W_* E)W_*k)ESF* FERRS SHOW-FNAME SERIAL FFLAGS|! FFLAGS@& FCB BUFAD SCHAN# BUFLEN} BUFP'v FFLAGS3q EOFCHR@l BUFSIZEIS $C"T* CTYPE^ COUTg CISpCIN}CALLCPMOP-VER#BLANKFILLIXSPHLDEBCAF'AFLHEDC{BvAmIXYPR2dIXYP1&MIXYP1=2BYTR<-1BYTRGNSETPRPARM1]PARM2gSETPsARESET}PARM16*8*2*R,ylrl@Pl+tm-W;,+Vl+tm+l+tEx,ytNrtyt/@rtyt/N)Wz,NS Program size = S / F _ @ p, o?Set the variable ?SYMTAB to 0 if the symbol tUTE4B,,OCTALHEXDECIMALB.X..HEX?F.)NASCIICRSPACES'SPACE2CHECK;D/0Jq UNDEFINEDUbPNAME`QABORTl'CRIGHTu$T"TYPERESTART$RESTARTOOUTDOTIROUTIINDRINDINIRINIRETNRETIRRD RLDIM2IM1&IM0/NEG9CPDRBCPDLzCPIRUuCPI_pLDDRhkLDDrfLDIR{aLDI\NOPWSCFRCCFMEI*E*WO* E5*WK*k)EE*7WG*XW_*XW)*E*ttz(()Wn*-)k*9)k*;*BREAK: trt))X|)*RSEREPEAT~WHILEq DEFINITIONS' VOCABULARYFORGET$FORGETVLIST SETfBARRAY DARRAY'5(.(]5[D  IMMEDIATEMIMPZCOMPILEdLOOPo+LOOPwDOENDBEGINENDIFqELSEaCOLDSN [END-OF-FILE]#FLOAD$FLOADNAMIT$NAMITGCHRWLNWPTR@iFALLOC `$NEXTHL+W$NEXT6N$PUSHdGEDOCK2;CODEU)CODEj" ASSEMBLER>q"}CASEND;;=:CASERECUable isn't needed.(Execute 'MAKECOM program.com' when readyllN,INSTR=,MAKECOM+COMUP +?SYMTAB-+USERPAD8+USERPE+SYMDUMPOw+SYM'\.+SYMTYPEf+*UB*s+*BREAK**$*BREAK**BREAKAD*RSDMP*PSUTINITtININITUGCHECHFIB^TCHGCH6OUTFILEINFILEqWCH WBYTERCHxRBYTE(aFLUSH3 WRITE= READIF RENAMET OPENW_ OPENRk DELETEv CLOSE BUFADSET~ FRES; RESET, EOHDICHALT>RRA9RRCA4RLA/RLCA*CPL%DAA EXXRIR (C) ^IY+"IX+)M0P8PE@POHNCOZWNZa(IY)k(IX)u(SP)(HL)(DE)(BC)IYlP*]tt*tXtrt))t|)]|.+dtrt).+XtE+)tE+tW+W+XtE+;++;++tE+,Ntrtyt//VIF=;:&;:VARIABLECONSTANT$CODE CUR@@CON!jDC=T" C"''S$$'S,'B5y$'BAPINTRLPMNUMBERWFINDbWFIND1jGS=tWORDDELIM=LINKLITERALXEXECRET #CALL"CONDS"DEC"INC+"DOP!ADD!SBCh!ADC]!CPR!XOR G!OREOWSEz])])W~CEX]@W ;`o2EoW EtmW E C|/-)+$;$:$FMAKE$SETLITRSTACKSTACKRSIZE SSIZEDEPTH#FLAGS.INFOF= DELIMITERHUPPERRBASE]STATEhD/0ADtGOQIAD RESTARTADySYMPTRrSYMTPkC///B!0#2*y N#fi4##4N#fi4+r+s+p+q4!9 B0~#fo4##4##N#F++p+q4 N#F4ììEbM/E_$DOW$ELSEE$IF<U<=3U>=*U>U<>=<=><<> =NOT0>%0<-0=9$RMOVEE$BMOVEN<-LW->LbzBSWAPpoGO-OPSYSxmGO`COUNTWDP+!NHERECPICK4^#V#~#~33+r+s4^#V#4 2B2yoxg2yoxg2yoxg2#2+2!R2q#p3^#V2n&2q3^#V r+s3N#Fp+q3N#F p+q3322N#F#4+p+q422322y!9#N#F#VOCdCONTEXT]CURRENTVDPL$ARRAYC$BARRAY; $CONSTANT2$$PUSHl\ttclWw=q-nr m`Dm m ۡgmEtz!80)y 2} *7)0{(7R0 R<8702M*EbEbiih&2i3)tE)WtðƸ:ByӋpt__x.R"A:#NN#F#^#V3^#V2^#V)2;[;b;i;p;we;~;;;;;;; ;;;;;C>RP!9RP@4SP!-SP@-ROLLROLL2SWAP2DUP2DROPROT SWAP>RR>'OVER0DUP:DROPC1-!L1+!T+!\B!d|B@kt@rl!}bMINUS]1-X1+MX|B&7=( #Ns#FrPY= 3&})9+=( Fr+Ns+PY= 3!92344+)9N#F3VtVX|m}lg2y(< 2y(% 233y! #2x!(#2x! y(#2/// E  EO _| Xp9 WQ |X)* ;;ttXt)t))t)tv |Bv |7v   E tE S #LSTWl4llj4jEN)N)lWN)NlNE_Npy|pW |X)"(C) COPYRIGHT 1980 THE STACKWORKS  ABORT NXN|  b ? D/0 Q-*ESTACK UNDERFLOWQW9*ERETURN STACK UNDERFLOWQ E *  ~ E<   E< *    7E_ W} X )   E  E * W E~  >  E W@ E  S *ESC*    W< 0/tE.t)XW8pENEaXWoEmWoqESE)tWqy)trt)EtErt/WWqE)t)?F6q; S #CRTW( X* S . )*      X S READ PAST EOF. S FILE NOT OPENED FOR READING. S FILE NOT OPENED FOR WRITING. S FILE DOESN'T EXIST. S DISK WRITE ERROR. S FILE CAN'T BElNlWytN<E2D>S QNWytN<EVD>S Q)t|Bt7EmWtEytN|X/NN|X/l/dtl]ylrt/]tlt _p    E>)0)E]b-Xt*Ea_)pytF_*p_)p llE0 E, ]]t E,  W< XXCl /37E  X ) l  W    E  W l  l} lW *  EY E' tE W  } tlWq"ltE/S N|XWW;NXN|* "ltEdN|XWWhbtEUNBALANCED NESTINGQ]ttdltBEEREDEF b  N4;N)_{BtBE* / tBBEHtBE`tq Er v  l  l6v 6 l6 llttm1üE _|X CREATED.S      tmv |B v  l} l  ) ); v |B E  ~  E  ~ ~ E  E7 7NXEXE#N/]N l _ # G !2#^#Vz #^#V|2^#VrtdtNWN|NX|-EX]W_|9E@E/W   Ei E9 tE-W1We} t )} tl Ec WeWo* B_|BXpWU   EK* WU} lW_* } tEt Wv  E} t t3E , Eq WxW} t )|W* , E* WxBq E7ytll)lN))Wt))N)Wt))ttldtrt))t|)|FXXtE)tVlX]CURRENTVDPL$ARRAYC$BARRAY; $CONSTANT2$$PUSHTADySYMPTRrSYMTPkCVOCdCONTEXTN]N(N"ME( )4N/]4W()44N/]4B }UGCHECHFIB^TCHGCH6OUTFILEINFILEqWCH WBYTERCHxRBYTE(aFLUSH3 WRITE= READIF RENAMET OPENW_ OPENRk DELETEv CLOSE BUFADSET~ FRES; RESET, EOF* FERRS  E:E+@/WGXX/X]E.ECE{)XWCEX]WWOWX X|#EX|L lWv N|lNl4SP!-SP@-ROLLROLL2SWAP2DUP2DROPROT SWAP>RR>'OVER0DUP:DROPC1-!L1+!T+!\B!d|B@kt@rl!}bMINUS]1-X1+MX|B&7|/-)+&;:VARIABLECONSTANT$CODE CUR@@CON!jDC=T" C"''S$$'S,'B5y$'BAPINTRLPMNUMBERWFINDbWFIND1jGS=tWORDDELIM=LINKLITERALXEXECUTE4B,,t]tl)`)ylXyt/yl]t)lrt/tkltdlkt]lVWNl]ttrt))tNNNlVE9FORTH&$VOCAB$:;CODENOCASE$;;$=:$CASE ZOUTZINMOD%//i/MOD:*U/MODA*I @XRMAX[MINc--lCOMuABS|KJIEXITp$+LOOP_$DOW$ELSSHOW-FNAME SERIAL FFLAGS|! FFLAGS@& FCB BUFAD SCHAN# BUFLEN} BUFP'v FFLAGS3q EOFCHR@l BUFSIZEIS $C"T* CTYPE^ COUTg CISpCIN}CALLCPMOP-VER#BLANKFILLURMOVE@BMO|)Xll PtEBN|XWWL P t_)ttl)pjtrl/yll1!#!b !!a[b>iP>'aCOLDSN [END$;$:$FMAKE$SETLITRSTACKSTACKRSIZE SSIZEDEPTH#FLAGS.INFOF= DELIMITERHUPPERRBASE]STATEhD/0ADtGOQIAD RESTARTADySYMPTRrSYMTPkCVOCdCONTEXTOCTALHEXDECIMALB.X..HEX?F.)NASCIICRSPACES'SPACE2CHECK;D/0Jq UNDEFINEDUbPNAME`QABORTl'CRIGHTu$T"TYPERESTART$RESTARTOUTINITtININITNlNX|&'" l"2NXWXN )N )N)4W;;tEt|W  EE$IF<U<=3U>=*U>U<>=<=><<> =NOT0>%0<-0=9$RMOVEE$BMOVEN<-LW->LbzBSWAPpoGO-OPSYSxmGO`COUNTWDP+!NHERECPICK>RP!9RP@~WHILEq DEFINITIONS' VOCABULARYFORGET$FORGETVLIST SETfBARRAY DARRAY'5(.(]5[D  IMMEDIATEMIMPZCOMPILEdLOOPo+LOOPwDOENDBEGINENDIFqELSEVIF=;:-OF-FILE]#FLOAD$FLOADNAMIT$NAMITGCHRWLNWPTR@iFALLOC `$NEXTHL+W$NEXT6N$PUSHdGEDOCK2;CODEU)CODEj" ASSEMBLER>q"}CASEND;;=:CASERECURSEREPEATƸ:ByӋpt__x.R"A:#NN#F#^#V3^#V2^#V)2;[l*;b>;i;p>;w;~;;(;;;;; ;;;;;CASSEM COM^_`a?F6q; S #CRTW( X* S . )*      X S READ PAST EOF. S FILE NOT OPENED FOR READING. S FILE NOT OPENED FOR WRITING. S FILE DOESN'T EXIST. S DISK WRITE ERROR. S FILE CAN'T BE4^#V#~#~33+r+s4^#V#4 2B2yoxg2yoxg2yoxg2#2+2!R2q#p3^#V2n&2q3^#V r+s3N#Fp+q3N#F p+q3322N#F#4+p+q422322y!9#_|BXpWU   EK* WU} lW_* } tEt Wv  E} t t3E , Eq WxW} t )|W* , E* WxBq E]ttrt))tXltkltdl&>EOWSEz])])W~CEX]@W ;`o2EoW EtmW E BBBBBBB/)lEBEC *  ~ E<   E< *    7E_ W} X )   E  E * W E~  >  E W@ E  S *ESC*    W<  CREATED.S      tmv |B v  l} l  ) ); v |B E  ~  E  ~ ~ E  E=( #Ns#FrPY= 3&})9+=( Fr+Ns+PY= 3!92344+)9N#F3VtVX|m}lg2y(< 2y(% 233y! #2x!(#2x! y(#2///   Ei E9 tE-W1We} t )} tl Ec WeWo* B E  EO _| Xp9 WQ |X)* ;;ttXt)t))t)tv |Bv |7v   E tE S #LSTW S)9}]L}]N#F#E0 E, ]]t E,  W< XXCl /37E  X ) l  W    E  W l  l} lW *  EY E' tE W  } tlEtz!80)y 2} *7)0{(7R0 R<8702M*EbEbiih&2i3)tE)Wt///B!0#2*y N#fi4##4N#fi4+r+s+p+q4!9 B0~#fo4##4##N#F++p+q4 N#F4ììEbM/E_{BtBE* / tBBEHtBE`tq Er v  l  l6v 6 l6 llttm1üE _|X)4W d44))4@ Ef 4])4Wz d44)4E E E E  E (E 8E  BE ]))4W!E!d)t]tl)`)ylXyt/yl]t)lrt/tkltdlkt]lVWNl]ttrt))tNNNllNlWytN<E2D>S QNWytN<EVD>S Q)t|Bt7EmWtEytN|X/NN|X/l/dtl]ylrt/]tlt  BtBt|4tP/)4MM$$$$$$$$$$$$$$$$ $$$$ $!$0$1$2$4$5$6$l4llj4jEN)N)lWN)NlNE_Npy|pW |X)"(C) COPYRIGHT 1980 THE STACKWORKS  ABORT NXN|  b ? D/0 Q-*ESTACK UNDERFLOWQW9*ERETURN STACK UNDERFLOWQ E E:E+@/WGXX/X]E.ECE{)XWCEX]WWOWX X|#EX|L lWv N|lNlNlNX|&'" l"2NXWXN )N )N)4W;u*;tEt|W  7 7NXEXE#N/]N l _ # G !2#^#Vz #^#V|2^#VrtdtNWN|NX|-EX]W_|9E@E/W7$P$Q$`$a$b$c44'4/44444v444?474DDDDDDDDDDDFDVD^DoDMDMDEDDDDDDDDE  E 4)]7ytll)lN))Wt))N)Wt))ttldtrt))t|)|FXXtE)tVlX_p    E>)0)E]b-Xt*Ea_)pytF_*p_)p ll|)Xll PtEBN|XWWL P t_)ttl)pjtrl/yllz;ltz)lWq"ltE/S N|XWW;NXN|* "ltEdN|XWWhbtEUNBALANCED NESTINGQ]ttdltBEEREDEF b  N4;N)0/tE.t)XW8pENEaXWoEmWoqESE)tWqy)trt)EtErt/WWqE)t)44W!)444/)4  0 ( 8 E!J!W! E!B!W! 7E!/)4E! W!/ )4W'"$PUSHdGEDOCK2;CODEU)CODEj" ASSEMBLER>q"}CASEND;;=:CASERECURSEREPEAT~WHILEq DEFINITIONS' VOCABULARYFORGET$FORGETVLIST SETfBARRAY DARRAY'5(.(] ?SYMTAB to 0 if the symbol table isn't needed.(Execute 'MAKECOM program.com' when readyllN)INSTRZ)MAKECOM(COMUP(?SYMTAB(USERPAD(USERP(REPEAT,(END,(BEGIN,(ENDIF,m(ELSE,&"(IF,1(LIN4W$" )44aEN$4//@))4WZ$)44$$E$E$)/))4W$/)4)4~$~$E%4P8PE@POHNCOZWNZa(IY)k(IX)u(SP)(HL)(DE)(BC)IYIXSPHLDEBCAF'AFLHEDC{BvAmIXYPR2dIXYP1&MIXYP1=2BYE(lW (/]"MES( )4N4Wi()4N44N(N]N(N"ME( )4N/]4W()44N/]4;((;(E!"/ )4W'" E" E^"/))4W"E"E")/)4W"E"#)W"E"#)W"d4)44+"+"E#W SRL? SRAH SLAP RRY RRCa RLj~ RLCsE SOP|: SET/ RES$ BITBOPOTDROUTDOTIROUTIINDRINDINIRINIRETNRETIRRD RLDIM2IM1&IM0/NEGK,9h%LDA$EXJ$POPT$PUSH_~$STKOPgi$INp^$OUTy$IOP#JR#DJNZf#JPW#RST2#RET #CALL"CONDS"DEC"INC+"DOP!ADD!SBCh!ADC]!CPR!XOR G!ORRRA9RRCA4RLA/RLCA*CPL%DAA EXXRIR (C) ^IY+"IX+)M0W(E'4W(E'E'`Eo'EQ'*4Wk'4/K)4W'E'4W'9)M{W'/X4W(E'9)ME'*W'!4W(dE']p)44W(6444 &4WA&`E%&:4WA&bE;&WWA&_W(`E&Ei&24W&E&9)M"4W&E&"4W&4/C)4W(bE&GW(cE&OW( E'45[D  IMMEDIATEMIMPZCOMPILEdLOOPo+LOOPwDOENDBEGINENDIFqELSEVIF=;:&;:VARIABLECONSTANT$CODE CUR@@CON!jDC=T" C"''S$$'S,'B54^#V#~#~33+r+s4^#V#4 2B2yoxg2yoxg2yoxg2#2+2!R2q#p3^#V2n&2q3^#V r+s3N#Fp+q3N#F p+q3322N#F#4+p+q422322y!9#RITE= READIF RENAMET OPENW_ OPENRk DELETEv CLOSE BUFADSET~ FRES; RESET, EOF* FERRS SHOW-FNAME SERIAL FFLAGS|! FFLAGS@& FCB BUFAD SCHAN# BUFLEN} BUFP'v FFLAGS3q EOBBBBBBBBB)B)B)mCP:DROPC1-!L1+!T+!\B!d|B@kt@rl!}bMINUS]1-X1+MX|B&7|/-)+$;$:$FMAKE$SETLITRSTACKSTACKRSIZE SSIZEDEPTH#FLAGS.INFOFy$'BAPINTRLPMNUMBERWFINDbWFIND1jGS=tWORDDELIM=LINKLITERALXEXECUTE4B,,OCTALHEXDECIMALB.X..HEX?F.)NASCIICRSPACES'SPACE2CHFCHR@l BUFSIZEIS $C"T* CTYPE^ COUTg CISpCIN}CALLCPMOP-VER#BLANKFILLURMOVE@BMOVE9FORTH&$VOCAB$:;CODENOCASE$;;$=:$CASE ZOUTZINMOD%//i/MOD %sA}]L}]N#F#= DELIMITERHUPPERRBASE]STATEhD/0ADtGOQIAD RESTARTADySYMPTRrSYMTPkCVOCdCONTEXT]CURRENTVDPL$ARRAYC$BARRAY; $CONSTANT2$$PUSH@) W9H2]1) W{:92O92RBECK;D/0Jq UNDEFINEDUbPNAME`QABORTl'CRIGHTu$T"TYPERESTART$RESTARTOUTINITtININITUGCHECHFIB^TCHGCH6OUTFILEINFILEqWCH WBYTERCHxRBYTE(aFLUSH3 WƸ:ByӋpt__x.R"A:#NN#F#^#V3^#V2^#V)2;[{A;b;im;p;w;~s;;@;;;;; ;;;;;C$RMOVEE$BMOVEN<-LW->LbzBSWAPpoGO-OPSYSxmGO`COUNTWDP+!NHERECPICK>RP!9RP@4SP!-SP@-ROLLROLL2SWAP2DUP2DROPROT SWAP>RR>'OVER0DU:*U/MODA*I @XRMAX[MINc--lCOMuABS|KJIEXITp$+LOOP_$DOW$ELSEE$IF<U<=3U>=*U>U<>=<=><<> =NOT0>%0<-0=9=( #Ns#FrPY= 3&})9+=( Fr+Ns+PY= 3!92344+)9N#F3VtVX|m}lg2y(< 2y(% 233y! #2x!(#2x! y(#2///lNlWytN<E2D>S QNWytN<EVD>S Q)t|Bt7EmWtEytN|X/NN|X/l/dtl]ylrt/]tlt _|BXpWU   EK* WU} lW_* } tEt Wv  E} t t3E , Eq WxW} t )|W* , E* WxBq E]ttrt))tXltkltdl&>EOWSEz])])W~CEX]@W ;`o2EoW EtmW E pW |X)"(C) COPYRIGHT 1980 THE STACKWORKS  ABORT NXN|  b ? D/0 Q-*ESTACK UNDERFLOWQW9*ERETURN STACK UNDERFLOWQ E *  ~ E<   E< *    7E_ W} X )   E  E * W E~  >  E W@ E  S *ESC*    W< ///B!0#2*y N#fi4##4N#fi4+r+s+p+q4!9 B0~#fo4##4##N#F++p+q4 N#F4ììEbM/E 0 GO ; DOIT SYSMAKE SL5\STU[?F6q;   Ei E9 tE-W1We} t )} tl Ec WeWo* BQIAD ! CR CR T" TYPE 'SAVE " SYMTP @ SYMPTR @ - HERE + 100 / DECIMAL . HEX T" SYSMAKE.COM'."  E  EO _| Xp9 WQ |X)* ;;ttXt)t))t)tv |Bv |7v   E tE S #LSTW_p    E>)0)E]b-Xt*Ea_)pytF_*p_)p llE0 E, ]]t E,  W< XXCl /37E  X ) l  W    E  W l  l} lW *  EY E' tE W  } tlEtz!80)y 2} *7)0{(7R0 R<8702M*EbEbiih&2i3)tE)Wt_{BtBE* / tBBEHtBE`tq Er v  l  l6v 6 l6 llttm1üE _|X CREATED.S      tmv |B v  l} l  ) ); v |B E  ~  E  ~ ~ E  E S #CRTW( X* S . )*      X S READ PAST EOF. S FILE NOT OPENED FOR READING. S FILE NOT OPENED FOR WRITING. S FILE DOESN'T EXIST. S DISK WRITE ERROR. S FILE CAN'T BE7 7NXEXE#N/]N l _ # G !2#^#Vz #^#V|2^#VrtdtNWN|NX|-EX]W_|9E@E/WtE'$]!E!$)tW#$A!W)$y$W#tEa$]!E[$)t)W#W]$A!Wc$tE$]!E$tE$p!$'S t/ W$W#W$A!W$$ tE$e$|7W$l\ttcl` ]!E % TARGE;;t); w'SYIT$NAMITGCHR;L;S;Z;a;h;o;v;};;;;ͪ+ WORDS >q"}CASEND;;=:CASERECURSEREPEATl4llj4jEN)N)lWN)NlNE_Npy|C7W"E!E."W2"!bxxt tt3Ek" SYS ERROR #1o t tXl t)l  tE" t_XtE"W"p" t_|)p" E:E+@/WGXX/X]E.ECE{)XWCEX]WWOWX X|#EX|L lWv N|lNl0/tE.t)XW8pENEaXWoEmWoqESE)tWqy)trt)EtErt/WWqE)t) SYS ERROR #3 o; ;$ ;+  t) t- & t-  l tE  t- - _|py C tE Utt/  t& t3E COMP. BUFFER OVERFLOW.o8  UUtlW 4tE !B ~WHILEq DEFINITIONS' VOCABULARYFORGET$FORGETVLIST        Ot Xl  BVt`tyt3E SYS ERROR #2 oW tVt<E 7ytll)lN))Wt))N)Wt))ttldtrt))t|)|FXXtE)tVlXGt"lGt)"lGGtEU#Gt_"t)tlp9#tEx#tEt#p!LIT Wz#tE#UW#VttE#Vt|)btX\ttl)|#l)Vt|X@tt/\tlW$|#|)Xll PtEBN|XWWL P t_)ttl)pjtrl/yll^m^;;;;;;;;;@;Wq"ltE/S N|XWW;NXN|* "ltEdN|XWWhbtEUNBALANCED NESTINGQ]ttdltBEEREDEF b  N4;N) W!E=!` _p#!Ub IS UNDEFINED.otctVtW`)tctWE!)tW!A!p! N|XW:E!W!E!E"+:E "CNlNX|&'" l"2NXWXN )N )N)4W;;tEt|W  t]tl)`)ylXyt/yl]t)lrt/tkltdlkt]lVWNl]ttrt))tNNNlT REDEF b#\ttcltE=%$$ p!$: W?%tEi%\ttcllp!$; Wk%&tE%p!$:;CODE llW%2tE%p!$:;CODE  p!$: W%=tE%` l$W%)lq# ~2~2~2~2H2EZ4H2 EB4 1)H2]) WZ42  1)) 2@444H2 E4 H2]) W42  ) 24444 4(48 8080 - CP/M`)B)s-VtltlWqtxlVt l& tWytNt/llUtlltBE.COMPILER DIRECTIVE: VtXVt|XtET/]!E/|BE/E..W/E.W#W/q"tXjl)tcltE/(w'W1('t/lt/lcl\l$ t% p!$VOCAB tE(6" W(|#) |# tE"tXjl)tcltE(jttl)\lW)q;22l2tz)2l2 B2tB &t(2 &|  &t1P/ 21) H22922^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2^2 R> p!2DROP |#lW,tE<,$p!$SET %W>,tE,$ p!$FMAKE tEv,6" W,|#)     W,qtE,tE,$6"6"@,W,|#)|#)@,UW,i`)B; lttEM&$ %p! $CONSTANT %WO&tE&$ tE&6"E"%p! $CONSTANT W&|#)%p! $CONSTANT |#) |#E" %W&ttBE'p!$C" "lVt|X_ed = qtxt//)tED0Dictionary size = tt//)Total memory used = /` t_|E0Xt)tpt0  ,,Ƹ:ByӋpt__x.R"ھE0,A:#NW1E1,W/)t WP/EB/|BE./.W>/E/qWP/EN/W#WP/qW~/tEb/Wd/Ep/XW~/E|/W#W~/qE.F/ FSuccessful compilationProgram size = tt//tE0Variable space ustE%)p!$IF 8 |#) W')VtEZ)|#)lp!$ELSE 8 |#) W\)qtEs)|#lWu)tE)|#W)tE)p!$IF W))tE)tE)p!$ELSE  |#lW)tE *\ttt)^2^2^2^2 ^2!^20^21^22^24^25^26^27^2P^2Q^2`^2a^2b^2cn2n2'n2/n2n2n2n2n2vn2n2n2?n27n2~2~2~2~2~2~2~2~2~2D~2F~2V~2^~2o~2M~2M~2E~2~2~2~2)|)B_| Xp-, "l|#|X_| XpS-|)B_X|)Bp-Sysmake version s-E- Z80 - CP/MW.E. | Xp'W'ttBEb'p!$T" "lVt|X_| XpL'Wd'=VtX|W#t/l\t)l)t#$ t%p!$VOCAB t/tE'6" W'|#) |# E$oTaml/Utll` $#tt_|pE1|)Xll .tE1tE1p!$FLOAD Vt|X_| Xp1W1 .W1tE1U1 |#|XWW1#z RRAY tE+6" W(+|#) !*%W2+f"EZ+ADDRESS NOT FOUND )t"Ew+E"W+)ltE+p!$CASE 8  W+tE+p!$=: 8  W+tE+p!$;; |#lW+tE,p!)t W *tE)*p!$DO UtW+*tEI*p!$+LOOP WK*tEo*W#p!$+LOOP Wq*%t))%t)tE*$ p!$ARRAY )tE*6" W*|#) !s*%W*DtE0+$ p!$BA4H2 H2BE,5H2])) WL5H2EB52) WL5) 2 92/ 2) 25 505(585H2E5JP5W55H2E5BP5W55H2H27E96H23RETN3RETI3RRD3RLD!3IM2*3IM133IM0<3NEGF3CPDRO3CPDY3CPIRb3CPIl3LDDRu3LDD3LDIR3LDI3NOP3SCF3CCF3EI3DI}3HALTx3RRAs3RRCAn3RLAi3RLCAd3CPL_3based system (All values are shown in hex/decimal form(Maximum number of variables (VAR-MAX) = t/(Temporary symbol table space (TSYMSP) = Nt/!Compiler buffer size (CB-SIZE) = & t/!Starting program address (TDP) = Ut W8$71) 2 2H2EA8 WO8$71 ) 2H2aE8 /92/1@)) W81) 2S892H22(2(2S8H2E8E8)/ 2)) W 9/ 21)=REPEAT,<END,<BEGIN,<ENDIF,*<ELSE,3^<IF,>?<LINK,F9LDN%9EXW9POPa9PUSHl8STKOPt8IN}8OUTS8IOP*8JR8DJNZ7JP7RSTl7RETE7CALL$7CONDS7DEC7INCe6DOP5ADD5S <*W<! W;<292E1<92]p) W;<6 2EP<|#lW\<8 /]$7ME<1 ) 8  W<1) 8  2  ?<8 ]?<|#$7ME<1 ) |#/] W =/ 21) H292E#6 W-692/ 2 ) Wa6H2E[692/ 2 ) Wa652H2E 7H2 E6H2/1)) W 7H2E 7H2E61)H2/ 2) W 7H2E61#)1W 7H2E61#)1W 72llU1COLD.SL5oEnter first address in ROM EP@UlWs@Not a valid hex number !! E@Enter highest RAM address E@XqlW@Not a valid hex number !! Ew@l?|#trtyt//yl/_B+.l03(Enter object file name `Enter Kernel source file name z1More input (Y/N) ? ?YE?Enter source file name z1W?Ef?#Do you want a symbol table (Y/N) ? ?YE?lW@ ) 288H2E>9 W9H2ET9 W992Ej9 W992E9  W992E9  2H2 E:92 E992E9H2]192])@) W9H2]1) W{:92O92RBBC5ADC5CP5XOR5ORv5AND(k5SUB1P5AR2:5AR1C4SRLL4SRAU4SLA]4RRf4RRCn4RLw4RLC4SOPt4SETi4RES^4BIT4BOP4OTDR 4OUTD4OTIR3OUTI3INDR3IND3INIR3INI1) 2 |#/] tE:=p!$$PUSHW<=q"=X"=)tEu=l\ttclWw=q-"Enter 'STAT' to examine parameters.Enter 'RAMGEN' to generate a RAM based system .Enter 'ROMGEN' to generate a ROM 4) 2e6e6H2E;7WC7H20/H2EZ7 Wf7$71) 2H2E7 W7$71) 21) H2E7 W8H2 E7  W8H2!E7  W8H2E 8rl@y=Plyt|#rtyt/@@l TYPE 'SAVE rtyt/|#)F SYSMAKE.COM'.mwADOIT@COMUP@DUMMY@ROMGEN?RAMGEN?RESP>STATy=ISYST=EDOCG=$NEXTHL>=$NEXT"=$PUSHbE;G1W;<<> =NOT0>%0<-0=9$RMOVEE$BMOVEN<-LW->LbzBSWAPpoGO-OPSYSxmGO`COUNTWDP+!NHERECPICK>RP!9RP@4SP!-SP@-ROLLROLL2SWAP2DUPGETVLIST SETfBARRAY DARRAY'5(.(]5[D  IMMEDIATEMIMPZCOMPILEdLOOPo+LOOPwDOENDBEGINENDIFqELSEVIF=;:&;:VARIABLECONSTANT$CODE CUR@@COYs*XARRAY M*LOOP-*+LOOP*DO))RECURSE5)REPEAT@)WHILEI)ENDTw)BEGIN_^)ENDIFi))ELSEq)IF( DEFINITIONSj( BASEVOCAB3( VOCABBASE( VOCABULARYw' TVOCABULARYf'"'T"&C"Q&VARIABLE &CONSTA BUFAD SCHAN# BUFLEN} BUFP'v FFLAGS3q EOFCHR@l BUFSIZEIS $C"T* CTYPE^ COUTg CISpCIN}CALLCPMOP-VER#BLANKFILLURMOVE@BMOVE9FORTH&$VOCAB$:;CODENOCASE$;; TVAR-SIZE TVAR-TOPVAR-MAX$LTDP.CSAD:INITDPDASSMNSGEN[?SYMTABeROMFsMACHINE# ASSEMBLER TRANSITION>aCOLDSN [END-OF-FILE]#FLOAD$FLOADNAMIT$NAMITGC2E2D2C 2B2A2IXYPR2)2IXYP132IXYP>w22BYTRIg21BYTRTW2NSETP_H2PARM1j92PARM2t(2SETP2ARESET2PARM 216*18*12*1R,z1FLOADU1$FLOAD41WRITESYM1 COLDSTART 1FINISHED0?F.)NASCIICRSPACES'SPACE2CHECK;D/0Jq UNDEFINEDUbPNAME`QABORTl'CRIGHTu$T"TYPERESTART$RESTARTOUTINITtININITUGCHECHFIB^TCHGCH6OUTFILEINFN!jDC=T" C"''S$$'S,'B5y$'BAPINTRLPMNUMBERWFINDbWFIND1jGS=tWORDDELIM=LINKLITERALXEXECUTE4B,,OCTALHEXDECIMALB.X..HEXNT& XCONSTANT% TCONSTANT%CODE$%;:/m%;CODE6A%;=%:J%TCO=TCUU$$CODE_$COMPh$IMPu$COMPILE}e$'S4$'+$'B$$'B#LINK|#HEREW#LITERAL$# UPDATE-SYMTAB# VOCAB-ENTRY"NVALS" FIND-AD$=:$CASE ZOUTZINMOD%//i/MOD:*U/MODA*I @XRMAX[MINc--lCOMuABS|KJIEXITp$+LOOP_$DOW$ELSEE$IF<U<=3U>=*U>U<>=<=HRWLNWPTR@iFALLOC `$NEXTHL+W$NEXT6N$PUSHdGEDOCK2;CODEU)CODEj" ASSEMBLER>q"}CASEND;;=:CASERECURSEREPEAT~WHILEq DEFINITIONS' VOCABULARYFORGET$FORPUTJMPe0 WRITEVARS/ STATISTICS!/H/D,.SLOOP:.COMP-DIRE+.VINITR-SIGN-ON^s-DECODEk.-ENCODE"y,$ENCODE",FALLOC@,FMAKE,SET+CASEND+;;+=:+CASEd+T!4+T@*BARRAY*ARRAY*XBARRAILEqWCH WBYTERCHxRBYTE(aFLUSH3 WRITE= READIF RENAMET OPENW_ OPENRk DELETEv CLOSE BUFADSET~ FRES; RESET, EOF* FERRS SHOW-FNAME SERIAL FFLAGS|! FFLAGS@& FCBNAMEWWORD WBYTEmWRITEJMP%`SETUP1OOPENRW>COMFILEHTCURSVHEAD`TSYMPTRlTSYMTPuxTVP~qTVSjTCVOCcTCONTEXT\TCURRENTUTDPNTSYMSPGTRVOP"TRVOSTINFOFTRVS TRVPDRE" MAKE-ENTRY6"DALLOC" IFDEFINED+!IFTRUE:! OTHERWISEE!IFENDM!'CVp!$C'a]!TFINDqA! TUNDEFINED{!DPAD , B,` CBFLUSHC CCLEAR8 CBUFP- CBUFF& CB-SIZE CBP CBT SYS-CHECK SHOW-2DROPROT SWAP>RR>'OVER0DUP:DROPC1-!L1+!T+!\B!d|B@kt@rl!}bMINUS]1-X1+MX|B&7|/-)+$;$:$FMAKE$SETLITRSTACK= ) ROMF @ ?SYMTAB @ NOT & IFTRUE : COLDS 0 DO ( INITIALIZE MEMORY LOCATIONS ) DUP 2 + @ OVER @ ! 4 + LOOP DROP RESTART ; COLDSTART SSIZE STACK SP LD RSIZE RSTACK DE LD EXX HERE 0B + HL LD HL PUSH ======================================================== ) ROMF @ NOT ?SYMTAB @ NOT & IFTRUE : COLDS 0 DO ( INITIALIZE MEMORY LOCATIONS ) DUP 2 + @ OVER @ ! 4 + LOOP DROP 'B RESTART SWAP ! RESTART ; TDP @ DTVP @ 20 - DP T! ( SET DP TO TVP-20 ) COLDSTART SSIZE STACK SP LD RSIZE RSTACK DE LD EXX TSYMTP @ TSYMPTR @ - HL LD HL PUSH HERE 0B + HL LD HL PUSH NVALS HL LD HL PUSH 'B COLDS JP EDOC WRITEVARS WRITESYM FINISHED COLDSTART ( FIRST INITIALIZE THE STACKS ) SSIZE STACK SP LD RSIZE RSTACK DE LD EXX INITDP @ HL LD HL INC HL PUSH TSYMTP @ TSYMPTR @ - HL LD HL PUSH HERE 0B + HL LD HL PUSH NVALS HL LD HL PUSH 'B COLSTACKRSIZE SSIZEDEPTH#FLAGS.INFOF= DELIMITERHUPPERRBASE]STATEhD/0ADtGOQIAD RESTARTADySYMPTRrSYMTPkCVOCdCONTEXT]CURRENTVDPL$ARRAYC$BARRAY; $CONSTANT2 IFEND ( ===================================================================== ) ( ROM BASED WITH SYMBOL TABLE ) ( ===================================================================== ) ROMF @ ?P T! ( SET DP ) COLDSTART SSIZE STACK SP LD RSIZE RSTACK DE LD EXX INITDP @ HL LD HL INC HL PUSH HERE 0B + HL LD HL PUSH NVALS HL LD HL PUSH 'B COLDS JP EDOC WRITEVARS FINISHED [END-OF-FILE] ( COLDSTART FILE ) ( ===================================================================== ) ( RAM BASED WITH SYMBOL TABLE ) ( ===================================================================== ) [END-OF-FILE] IFEND ( ===================================================================== ) ( ROM BASED WITHOUT SYMBOL TABLE ) ( ====================================================================DS JP EDOC WRITEVARS WRITESYM FINISHED [END-OF-FILE] IFEND ( ===================================================================== ) ( RAM BASED WITHOUT SYMBOL TABLE ) ( =============$$PUSHSYMTAB @ & IFTRUE : COLDS 0 DO ( INITIALIZE MEMORY LOCATIONS ) DUP 2 + @ OVER @ ! 4 + LOOP DUP SYMPTR ! + SYMTP ! RESTART ; TCONTEXT @ CONTEXT T! ( SET CONTEXT ) TCUR @ CURRENT T! ( SET CURRENT ) ( MOVE THE SYMBOL TABLE ) 'B RESTART SWAP ! RESTART ; ( SPECIAL VARIABLE SETTING ) TDP @ DP T! ( SET THE DP ) TCONTEXT @ CONTEXT T! ( SET CONTEXT ) TCUR @ CURRENT T! ( SET CURRENT ) ROMF @ NOT ?SYMTAB @ & IFTRUE : COLDS 0 DO ( INITIALIZE VARIABLES ) DUP 2 + @ OVER @ ! 4 + LOOP ( NOW SET SYMTP & SYMPTR ACCORDING TO MEMSIZE ) SWAP 6 @ DUP SYMTP ! OVER - DUP SYMPTR ! SWAP $BMOVE NVALS HL LD HL PUSH 'B COLDS JP EDOC WRITEVARS FINISHED [END-OF-FILE] IFEND ( ===================================================================== ) ( =========================================== ?SYMTAB @ IF SYMPTR @ HERE SYMTP @ SYMPTR @ - BMOVE ( MOVE THE SYMBOL TABLE ) SYMTP @ SYMPTR @ - HERE + ELSE HERE ENDIF CR C" Program size = " DUP X. C" / " DUP DECIMAL . HEX INFILE OPENW 100 DO I INFILE BUF ! ( set to lower case ) HEX : USERP ; 'B USERP VARIABLE USERPAD ( SET USERPAD TO DUMMY INITIALIZATION ROUTINE ) 1 VARIABLE ?SYMTAB ( IF SYMBOL TABLE ISN'T USED, SET ?SYMTAB TO 0 ) : COMUP ?SYMTAB @ IF HERE 6 @ SYM based systems. KERNEL.SL5 The source code of the kernel. (Object Modules) ICOND.SL5 The source code for the interpreter conditionals. (Glossary) DEBUG.SL5 The source code for the debugging package. (Debug) ASSEM.SL5 Th========================== )  E} t t3E , Eq WxW} t )|W* , E* WxBq E This is ` short description of the files which reside on this diskette. Sections of the manual which pertain to these files are indicated in parenthesis after the description. File name Description ==MTP @ SYMPTR @ - 2DUP - DUP SYMPTR ! RO SYMT SWA BMOV B INTRLP GOQIAD ! USERPAD @ GO FORGET USERP RESTART ELSE 'B USERP DP ! USERPAD @ GO RESTART ENDIF ; : MAKECOM INFILE NAMIT 'B COMUP GOQIAD !e source for the Z80 assembler. (Assembler) COMMOD.SL5 The "COM" module generator source. (Object Modules) M!>))덑o|gҘ =†DM!>))ҭ =¥~ ³^#V) ½^#V|g}o _{ozgi`N#Fogo&og_{_===== ( Copyright 1980 The Stackworks. All rights reserved ) ( COMMOD Version 1.2 ) ( 3/25/80 ) INFOF @ 0 INFOF ! ( TURN OFF ECHO AND REDEF MESSAGE ) UPPER @ 0 UPPEResent. (Debug) ASSEM.COM The same as SL5.COM plus the assembler. (Assembler) DEV.COM This version contains the assembler & the debugging package. (Assembler, Debug) SYSMAKE.COM The Target Compiler for RAM and RO======= =========== SL5.COM The binary form of "KERNEL.SL5" . (Tutorial, Reference, Glossary ) DEBUG.COM This is the same as SL5.COM with the debugging package being prAD 80 BMOVE INFILE WRITE 80 +LOOP INFILE CLOSE GO-OPSYS ; : INSTR CR CR T" Set the variable ?SYMTAB to 0 if the symbol table isn't needed." CR T" Execute 'MAKECOM program.com' when ready" CR CR UPPER ! ( RESTORE UPPELE DUP @ X. DUP @ DUP BSWAP DASCII DASCII CR 2 + REPEAT 2DROP ; : PSDMP SSIZE STACK SP@ 2 + SDMP ; : RSDMP RSIZE RSTACK RP@ 2 + SDMP ; ( BREAKPOINT WORDS ) 0 VARIABLE BREAKAD : $*BREAK* CR T" BREAK: " DROP 0 ELSE DUP 0D = IF 2DROP DROP DUP ELSE HEXD IF | OVER B! ELSE DROP ENDIFR ) INFOF ! ( RESTORE INFOF ) [END-OF-FILE] ; INSTR & !sc*&P :w:9 ұ2  E!4!p+q*0w!a4 DUP X. SPACE DUP 1+ @ DUP X. SYMTP @ + X. SPACE SPACE DUP 3 + @ X. SPACE SPACE DUP B@ B. SPACE 6 + DUP 1- B@ TYPE CR ; : SYM' COMPILE 'S SYMTYPE ; : SYMDUMP CONTEXT @ BEGIN SYMTP @ + DUP SYMTYPE DUP 1+ @ 0= IF 3 +R> DUP @ SYMTP @ + 5 + DUP 1+ SWAP B@ TYPE SPACE 2 + DUP X. CR BREAKAD ! INTRLP ; : *BREAK* 'B $*BREAK* , CURRENT @ @ , ; IMP *BREAK* : *UB* R> R> R> 2DROP DROP BREAKAD @ >R ; ( SYM' , SYMDUMP ) : SYMTYPE ( Copyright 1980 The Stackworks. All rights reserved ) ( DEBUGGING UTILITIES ) : DASCII 7F & DUP 20 < OVER 7D > | IF DROP 2E ENDIF TCH ; : DMP 2DUP U> IF 2DUP DO I B@ B. LOOP SPACE D 1+ SPACE ENDIF 1 ENDIF ELSE 2 SPACES 1+ 1 ENDIF ENDIF ENDIF REPEAT 2DROP DROP CR ; ( STACK DUMPING ROUTINES ) : SDMP BEGIN 2DUP U> WHI @ DUP IF @ 0 ELSE DROP 1 ENDIF ELSE 1+ @ 0 ENDIF END ; [END-OF-FILE]  : MODIFY DUP 1 BEGIN WHILE 2DUP = IF CR 10 + SWAP 2DUP DUMP DUP X. ENDIF CIN DUP 1B = IF 0 ELSE DUP 0D = IF 2DROP DUP 1 ELSE HEXD IF 4 <-L CIN DUP 1B = IF O I B@ DASCII LOOP CR ELSE 2DROP ENDIF ; : DUMP DO I X. I 10 + I DMP 10 +LOOP ; : HEXD 30 - DUP 9 > IF 7 - ENDIF DUP 0 >= OVER 10 < & DUP NOT IF SWAP DROP ENDIF ; ( Copyright 1980 The Stackworks. All rights reserved ) ( Z80 VERSION 1.2 - CP/M ) ( 3/25/80 ) CODE $$PUSH HL PUSH EXX (HL) C LD HL INC (HL) B LD DROP HL POP $NEXT JP EDOC CODE DUP HL POP HL PUSH $PUSH JP EDOC CODE OVER BC POP HL POP HL PUSH BC PUSH $PUSH JP EDOC CODE R> EXX HL DE EX (HL) C LD HL INC (HL) B LD HL INC BC PUSH HL DE EX $NEXTHL JP EDOC C E (HL) LD HL DE EX HL POP $NEXTHL JP EDOC CODE $; EXX HL DE EX (HL) E LD HL INC (HL) D LD HL INC HL DE EX $NEXTHL JP EDOC ( ARITHMETIC OPERATIONS ) CODE + BC POP HL POP BC HL ADD $ ) 1 XCONSTANT ?FILESYS ( COMPILE FILE SYSTEM SECTION ) 0 XCONSTANT ?OWNIO ( COMPILE USER I/O SECTION ) 1 XCONSTANT ?CRT ( COMPILE CRT I/O WORDS ) 1 XCONSTANT ?INTERP ( COMPILE INTERPRETER SECTION ) 1 XCONSTANT ?COMPILE ( COMPILE DE B! HL POP BC POP C (HL) LD $NEXT JP EDOC CODE +! HL POP BC POP (HL) E LD HL INC (HL) D LD HL DE EX BC HL ADD HL DE EX D (HL) LD HL DEC E (HL) LD $NEXT JP EDOC CODE 1+! HL POP (HL) C LD HL INC (HL) B L CONSTANT SSIZE 100 CONSTANT RSIZE ( STACKS & BUFFERS ) SSIZE 10 + BARRAY STACK RSIZE 10 + BARRAY RSTACK CODE LIT EXX (HL) C LD HL INC (HL) B LD HL INC BC PUSH $NEXTHL JP EDOC CODE HL INC BC PUSH EXX RET EDOC CODE $CONSTANT HL POP (HL) E LD HL INC (HL) D LD DE PUSH $NEXT JP EDOC CODE $BARRAY HL POP (HL) E LD HL INC (HL) D LD HL POP DE HL ADD $PUSH JP EDOC EDOC CODE X| BC POP HL POP C A LD L XOR A L LD B A LD H XOR A H LD $PUSH JP EDOC CODE 1+ HL POP HL INC $PUSH JP EDOC CODE 1- HL POP HL DEC $PUSH JP EDOC CODE MINUS DE POP 0 HL LD A AND DE HL SBC $PUSH JP EDOC PUSH JP EDOC CODE - BC POP HL POP A AND BC HL SBC $PUSH JP EDOC CODE | BC POP HL POP C A LD L OR A L LD B A LD H OR A H LD $PUSH JP EDOC CODE & BC POP HL POP C A LD L AND A L LD B A LD H AND A H LD $PUSH JP THE COMPILER SECTION ) ( NOTES: [1] CRT SECTION NEEDS OWNIO OR FILESYS ) ( [2] INTERPRETER NEEDS CRT SECTION ) ( [3] COMPILER NEEDS INTERPRETER TO RUN. ) ( [4] DO NOT COMPILE BOTH OWNIO AND FILE SYSTEM. ) ( ===============D BC INC B (HL) LD HL DEC C (HL) LD $NEXT JP EDOC CODE 1-! HL POP (HL) C LD HL INC (HL) B LD BC DEC B (HL) LD HL DEC C (HL) LD $NEXT JP EDOC ( STACK MANIPULATIONS ) CODE$SET HL POP (HL) E LD HL INC (HL) D LD HL INC (HL) A LD A (DE) LD HL INC DE INC (HL) A LD A (DE) LD $NEXT JP EDOC CODE $FMAKE $NEXT JP EDOC CODE $: EXX HL DE EX HL DEC D (HL) LD HL DE CODE $ARRAY HL POP (HL) E LD HL INC (HL) D LD HL POP HL HL ADD DE HL ADD $PUSH JP EDOC ( ==================================================================== ) ( CONDITIONAL COMPILATION CONSTANTS ( MEMORY OPERATIONS ) CODE ! HL POP BC POP C (HL) LD HL INC B (HL) LD $NEXT JP EDOC CODE @ HL POP (HL) E LD HL INC (HL) D LD HL DE EX $PUSH JP EDOC CODE B@ HL POP (HL) L LD 0 H LD $PUSH JP EDOC COIABLE SYMPTR 0 VARIABLE RESTARTAD 0 VARIABLE GOQIAD 0 VARIABLE D/0AD 0 VARIABLE STATE 10 VARIABLE BASE 1 VARIABLE UPPER 20 VARIABLE DELIMITER 07F VARIABLE INFOF 0 VARIABLE FLAGS 0 VARIABLE DEPTH 100===================================================== ) ( VARIABLES & CONSTANTS ) 0 VARIABLE DP 0 VARIABLE CURRENT 0 VARIABLE CONTEXT 0 VARIABLE CVOC 6580 VARIABLE SYMTP 0 VARCODE >R EXX BC POP HL DE EX HL DEC B (HL) LD HL DEC C (HL) LD HL DE EX $NEXTHL JP EDOC CODE SWAP HL POP HL (SP) EX $PUSH JP EDOC CODE ROT BC POP DE POP HL POP DE PUSH BC PUSH $PUSH JP EDOC CODE 2DROP HL POP BL INC (HL) B LD HL DEC HL DEC B (HL) LD HL DEC C (HL) LD HL DE EX $NEXTHL JP EDOC CODE I EXX 0 BC LD HERE HL DE EX HL PUSH BC HL ADD (HL) C LD HL INC (HL) B LD HL POP BC PUSH HL DE EX $NEXTHL 0 HL LD Z IF, HL INC ENDIF, $PUSH JP EDOC CODE 0< BC POP B 7 BIT 0 HL LD NZ IF, HL INC ENDIF, $PUSH JP EDOC CODE 0> BC POP B 7 BIT 0 HL LD Z IF, C A LD B OR NZ IF, HL INC ENDIF, ENDIF, $PUSH JP ENDIF, DE PUSH $NEXT JP EDOC CODE -ROLL HL POP 0 H LD L A LD HL HL ADD SP HL ADD HL DEC DE POP A DEC NZ IF, BEGIN, (HL) B LD D (HL) LD HL DEC ( HL DEC C (HL) LD DE POP HL DE EX $NEXTHL JP EDOC CODE $+LOOP EXX BC POP HL PUSH DE PUSH 0 HL LD SP HL ADD HL DE EX HL SP LD HL POP BC HL ADD BC POP BC PUSH HL PUSH A AND BC HL SBC HL DE EX EGIN, H SRL L RR C DEC Z END, ENDIF, $PUSH JP EDOC CODE <-L BC POP HL POP C A LD A OR NZ IF, BEGIN, L SLA H RL C DEC Z END, C POP $NEXT JP EDOC CODE 2DUP HL POP BC POP BC PUSH HL PUSH BC PUSH $PUSH JP EDOC CODE 2SWAP BC POP DE POP HL POP IX POP DE PUSH BC PUSH IX PUSH $PUSH JP EDOC CODE ROLL BC POP C A LD 0 HL LD SP HL ADD : U>= U< 0= ; : U<= U> 0= ; ( CONDITIONAL BASICS ) CODE $IF BC POP C A LD B OR EXX Z IF, (HL) C LD HL INC (HL) H LD C L LD $NEXTHL JP ENDIF, HL INC HL INC $NEXTHL JP EDOC CODE EDOC : NOT 0= ; : = - 0= ; : <> - 0= 0= ; : < - 0< ; : > - 0> ; : <= - 0> 0= ; : >= - 0< 0= ; CODE U< BC POP HL POP A AND BC HL SBC 0 HL LD C IF, HL INC ENDIF, $PUSH JP EDOC : U> SWAP U< ; HL) C LD E (HL) LD HL DEC B D LD C E LD A DEC Z END, ENDIF, DE PUSH $NEXT JP EDOC CODE SP@ 0 HL LD SP HL ADD $PUSH JP EDOC CODE SP! HL POP HL SP LD $NEXT JP EDOC CODE R HL SP LD DE POP HL POP C IF, (HL) A LD HL INC (HL) H LD A L LD $NEXTHL JP ENDIF, DE INC DE INC DE INC DE INC HL INC HL INC $NEXTHL JP EDOC CODE EXIT EXX HL DE EX HL INC HL INC (HL) C LD H ENDIF, $PUSH JP EDOC CODE $BMOVE BC POP DE POP HL POP LDIR $NEXT JP EDOC CODE $RMOVE BC POP DE POP HL POP LDDR $NEXT JP EDOC ( HIGH LEVEL CONDITION SETTINGS ) CODE 0= BC POP C A LD B OR HL INC DE POP A DEC NZ IF, BEGIN, HL INC (HL) C LD E (HL) LD HL INC (HL) B LD D (HL) LD B D LD C E LD A DEC Z END, $ELSE EXX (HL) C LD HL INC (HL) H LD C L LD $NEXTHL JP EDOC ( DO LOOPS - $DO, $+LOOP, EXIT, I, J, K ) CODE $DO EXX BC POP HL (SP) EX HL DE EX HL DEC D (HL) LD HL DEC E (HL) LD HL DEC B (HL) LD ORDS ) : HERE DP @ ; : DP+! DP +! ; : COUNT DUP 1+ SWAP B@ ; CODE GO HL POP (HL) JP EDOC : GO-OPSYS 0 GO ; CODE BSWAP HL POP L A LD H L LD A H LD $PUSH JP CODE ->L BC POP HL POP C A LD A OR NZ IF, BP@ EXX DE PUSH $NEXTHL JP EDOC CODE RP! EXX DE POP $NEXTHL JP EDOC CODE PICK HL POP HL DEC HL HL ADD SP HL ADD (HL) C LD HL INC (HL) B LD BC PUSH $NEXT JP EDOC ( MISC. W JP EDOC CODE J EXX 4 BC LD DUP JP EDOC CODE K EXX 8 BC LD JP EDOC ( MORE ARITHMETIC OPERATIONS ) : ABS DUP 0< IF MINUS ENDIF ; : COM FFFF X| ; : -- SWAP - ; : MIN 2DUP > IF SWAP END ;; CASEND C" " SHOW-FNAME 0D COUT 0A COUT RESTARTAD @ GO ; : EOF FFLAGS B@ 1 & ; : RESET 0FE FFLAGS@& OVER FFLAGS B! 0 OVER 2DUP BUFLEN ! BUFP ! FCB 0 OVER 0C + B! 4 SWAP 20 + 0 FILL ; : FRES DUP RESET DUPUMBER, SET BY ININIT ) ( CHARACTER LEVEL INTERFACES TO CP/M ) CODE CALLCPM BC POP DE POP 05 CALL B H LD A L LD $PUSH JP EDOC : CIN 1 DUP CALLCPM DUP 3 = IF GO-OPSYS ( CTRL-C ) (SP) EX BC HL ADD HL (SP) EX HL DE EX A AND DE HL SBC HL DE EX ENDIF, H SRL L RR B SRL C RR ELSE, SCF ENDIF, C END, HL POP DE PUSH $PUSH JP EDOC : /MOD OVER 0< OVER 0< OVER X| 2SWSHOW-FNAME SERIAL IF SCHAN# @ IF C" #LST" ELSE C" #CRT" ENDIF ELSE FCB DUP 1+ 8 CTYPE C" ." 9 + 3 CTYPE ENDIF ; : FERRS 0D COUT 0A COUT CASE 2 =: C" READ PAST EOF." ;; 3 =: C" FIL2DROP ENDIF ; : RMOVE DUP IF SWAP OVER 1- + SWAP ROT OVER 1- + ROT ROT $RMOVE ELSE DROP 2DROP ENDIF ; : FILL 3 PICK IF OVER B! DUP 1+ ROT 1- BMOVE ELSE 2DROP DROP ENDIF ; : BLANK 20 FILL ; ( ========================IF DROP ; : MAX 2DUP < IF SWAP ENDIF DROP ; : @X @ BSWAP ; CODE * 0 HL LD BC POP DE POP BEGIN, B SRL C RR C IF, DE HL ADD ENDIF, HL DE EX HL HL ADD HL DE EX C A LD B OR Z END, $PUSH JP EDOC CODE U/MOD HL POP DEDROP ; ( CTYPE, $C" ) : CTYPE DUP IF 0 DO DUP B@ COUT 1+ LOOP DROP ELSE 2DROP ENDIF ; : $C" R> DUP B@ SWAP 1+ SWAP 2DUP + >R CTYPE ; ( FILE INTERFACES ) ELSE DUP 12 = IF RESTARTAD @ GO ( CTRL-R ) ELSE DUP 13 = IF DROP RECURSE ( CTRL-S ) ENDIF ENDIF ENDIF ; : CIS 0B DUP CALLCPM IF CIN DROP ENDIF ; : COUT CIS 2 CALLCPM AP SWAP ABS SWAP ABS U/MOD ROT IF MINUS ENDIF ROT IF SWAP MINUS SWAP ENDIF ; : / /MOD SWAP DROP ; : MOD /MOD DROP ; ( ZIN, ZOUT - Z80 VERSION ONLY ) CODE ZIN BC POP (C) L IN 0 HE NOT OPENED FOR READING." ;; 4 =: C" FILE NOT OPENED FOR WRITING." ;; 5 =: C" FILE DOESN'T EXIST." ;; 6 =: C" DISK WRITE ERROR." ;; 7 =: C" FILE CAN'T BE CREATED." ============================================ ) ( FILE SYSTEM SECTION ) ( ==================================================================== ) ?FILESYS IFTRUE 0 VARIABLE OP-VER# ( CONTAINS CP/M VERSION N POP 0 BC LD BC PUSH L A LD H OR Z IF, D/0AD ^ HL LD (HL) JP ENDIF, SCF BEGIN, C RL B RL HL HL ADD C END, H RR L RR BEGIN, E A LD D OR NZ IF, HL PUSH SCF DE HL SBC HL POP C IF, HL 80 CONSTANT BUFSIZE 1A CONSTANT EOFCHR : FFLAGS @ ; : BUFP @ 1+ ; : BUFLEN @ 3 + ; : SCHAN# @ 5 + ; : BUFAD 2 + @ ; : FCB 4 + @ ; : FFLAGS@& OVER FFLAGS B@ & ; : FFLAGS|! OVER FFLAGS B@ | OVER FFLAGS B! ; : SERIAL 80 FFLAGS@& ; : DROP ; : NOCASE DUP ; ( $;CODE ;: ) : $:;CODE R> CURRENT @ @ SYMTP @ + 3 + @ 1+ ! ; : $VOCAB @ DUP CVOC ! @ CONTEXT ! ; BASEVOCAB FORTH FORTH DEFINITIONS ( BMOVE, RMOVE, FILL ) : BMOVE DUP IF $BMOVE ELSE DROP LD $PUSH JP EDOC CODE ZOUT BC POP HL POP L (C) OUT $NEXT JP EDOC ( BASIC CASE WORDS ) : $CASE R> DUP 2 + SWAP @ >R >R ; : $=: OVER = IF DROP R> 2 + >R ELSE R> @ >R ENDIF ; : $;; R> FFLAGS DUP B@ 80 & SWAP B! ; : BUFADSET 1A CALLCPM DROP ; : CLOSE SERIAL NOT IF DUP FCB 10 CALLCPM DROP ENDIF FRES DROP ; : DELETE SERIAL NOT IF DUP FCB 13 CALLCPM DROP ENDIF FRES DROP ; : OPENR FRES SERIAL NOT IF ?OWNIO IFTRUE 80 BARRAY TBUFF 0 VARIABLE TBUFP 0 VARIABLE BUFSIZE : COUT BEGIN 0ED ZIN 1 & END 0EC ZOUT ; : CIN BEGIN 0ED ZIN 2 & END 0EC ZIN 7F & DUP COUT ; : CIS ; ( C ELSE DUP RBYTE 7F & SWAP OVER EOFCHR = IF 1 FFLAGS|! ( EOF ) ENDIF DROP ENDIF ; : WBYTE CIS 4 FFLAGS@& IF SERIAL IF SCHAN# @ IF 5 ( PRINTER ) ELSE 2 ENDIF CALLCPM DROP ( DO SERIAL OUTPUT DIRECTLY ) EL BUFAD " > COUT BEGIN CIN DUP 0D = IF DROP 1 ELSE DUP 1B = IF 2DROP DROP 0 OVER BUFAD ( ESCAPE ) C" *ESC*" 0D COUT 0A COUT ELSE DUP 08 = IF DROP OVER IF ( CTRL-H ) 1- SWAP 1- SWAP OP-VER# @ 20 OUTFILE OPENW ; IFEND ( ==================================================================== ) ( END FILE SYSTEM SECTION ) ( =================================================== ELSE 0 SWAP BUFP ! ENDIF ENDIF ELSE 4 FERRS ( NOT OPENED FOR WRITING ) ENDIF ; : FLUSH DUP BUFP @ IF WRITE ELSE DROP ENDIF ; : RBYTE CIS 2 FFLAGS@& IF DUP BUFP @ OVER BUFLEN @ U>= IF DUP READ DUP EOF DUP FCB 0F CALLCPM 0FF = IF 5 FERRS ( NON EXISTANT FILE ) ENDIF ENDIF 2 FFLAGS|! DROP ; : OPENW FRES SERIAL NOT IF DUP DELETE DUP FCB 16 CALLCPM 0FF = IF 7 FERRS ( FILE CAN'T BE CREATED ) ENDIF ENDIF 4 FFLAGS|! INFILE FALLOC OUTFILE : GCH INFILE RCH ; : TCH OUTFILE WCH ; 0 VARIABLE ECHFIB^ : UGCH GCH DUP 5F > OVER 7B < & UPPER @ & IF 20 - ENDIF INFILE SERIAL NOT INFOF @ 4 & NOT NOT & IF OVER TCH ENDIF DROP INFOF @ 80 & IF SE SWAP OVER DUP BUFP @ SWAP BUFAD + B! DUP BUFP DUP 1+! @ BUFSIZE = IF WRITE ( BUFFER FULL ) ELSE DROP ENDIF ENDIF ELSE 4 FERRS ( NOT OPENED FOR WRITING ) ENDIF ; : WCH SWAP 7F & SWAP WBYTE ; FALLOC < IF 08 COUT ENDIF ENDIF ELSE OVER B! 1+ SWAP 1+ SWAP ENDIF ENDIF 0 ENDIF 3 PICK BUFSIZE 2 - U>= | END 0D OVER B! 1+ 0A SWAP B! 2 + OVER BUFLEN ! 0A COUT ELSE DUP BUFAD BUFADSET ================= ) ( ==================================================================== ) ( OWNIO SECTION ) ( ==================================================================== ) IF ( BUFFER EMPTY ) DROP EOFCHR ELSE RECURSE ENDIF ELSE DUP BUFP DUP @ SWAP 1+! SWAP BUFAD + B@ ENDIF ELSE 3 FERRS ( NOT OPENED FOR READING ) ENDIF ; : RCH DUP EOF IF 2 FERRS ( READ PAST EOF ) DROP ; : RENAME SWAP SERIAL ROT SERIAL ROT | IF 2DROP ELSE FCB 1+ OVER FCB 11 + 0B $BMOVE FCB 17 CALLCPM DROP ENDIF ; : READ 2 FFLAGS@& IF 1 FFLAGS@& IF 2 FERRS ( READ PAST EOF ) ELSE SERIAL IF 0 OVERDUP ECHFIB^ @ WCH ( echo onto echfib if bit 7 set ) ENDIF DUP 09 = IF DROP 20 ENDIF ; : ININIT 80 INFILE FFLAGS B! 0 INFILE SCHAN# ! INFILE OPENR 0 0C CALLCPM OP-VER# ! ; : OUTINIT 80 OUTFILE FFLAGS B! 0 OUTFILE SCHAN# ! DUP SCHAN# @ IF 5 ELSE 2 ENDIF OVER BUFAD ROT BUFP DUP @ 0 ROT ! 0 DO 2DUP B@ 7F & SWAP CALLCPM DROP 1+ LOOP 2DROP ELSE DUP BUFAD BUFADSET DUP FCB 15 CALLCPM 80 BUFADSET IF 6 FERRS ( WRITE ERRORS ) DUP FCB 14 CALLCPM 80 BUFADSET IF 1 FFLAGS|! 0 ( EOF ) ELSE BUFSIZE ENDIF OVER BUFLEN ! ENDIF 0 SWAP BUFP ! ENDIF ELSE 3 FERRS ( NOT OPENED FOR READING ) ENDIF ; : WRITE 4 FFLAGS@& IF SERIAL IF TYPE, $C" ) : CTYPE DUP IF 0 DO DUP B@ COUT 1+ LOOP DROP ELSE 2DROP ENDIF ; : $C" R> DUP B@ SWAP 1+ SWAP 2DUP + >R CTYPE ; : TCH COUT ; : TGET " > COUT 0 TBUFP ! BEGIN CIN DUP TBUFP @ TBUFF B! CASE CONVERSION WORDS ) : DECIMAL 0A BASE ! ; : HEX 10 BASE ! ; : OCTAL 8 BASE ! ; ( , B, ) : , HERE ! 2 DP+! SYMPTR @ HERE U<= IF T" D>S " ABORT ENDIF ; : B, HERE B! 1 DP+! SYMPTR @ HERE U<= IF T" D>S " ABORT ENDIF ; EFINED 0D TCH 0A TCH PNAME T" ? " RESTART ; : D/0 T" D/0 " ABORT ; 'B D/0 D/0AD T! ( STACK CHECK ) : CHECK SP@ 100 STACK U> IF T" STACK UNDERFLOW" ABORT ELSE RP@ 100 RSTACK U> IF T" ================================================================== ) ( END OWNIO SECTION ) ( ==================================================================== ) ( ============================================== IFEND ( ==================================================================== ) ( END OF CRT I/O SECTION ) ( ==================================================================== ) ( ====================================================================================== ) ?CRT IFTRUE ( TYPE, $T" ) : TYPE DUP IF 0 DO DUP B@ TCH 1+ LOOP DROP ELSE 2DROP ENDIF ; : $T" R> DUP B@ SWAP 1+ SE 0D =: TBUFP 1+! 0A COUT 1 ;; ( CR ) 1B =: C" *ESC*" 0D COUT 0A COUT 0 TBUFP ! 0 ;; ( ESC ) 08 =: TBUFP @ IF ( BS ) TBUFP 1-! ENDIF 0 ;; NOCASE =: TBUFP 1+! 0 ;; CASEND END TIF 30 + ; : . >R CHECK R> DUP 0< IF MINUS T" -" ENDIF 0 BEGIN 1+ SWAP BASE @ U/MOD ROT OVER 0= END SWAP DO NASCII TCH LOOP SPACE ; : ? @ . ; : .HEX >R >R CHECK R> R> DUP 0 DO SWAP 10 U/MOD ROT LOOP SWAP DROP 0 DO RETURN STACK UNDERFLOW" ABORT ENDIF ENDIF ; ( OUTPUT WORDS ) : SPACE 20 TCH ; : SPACES DUP IF DUP 0 DO SPACE LOOP ENDIF DROP ; : CR 0D TCH 0A TCH ; : NASCII DUP 9 > IF 7 + END====================== ) ( ==================================================================== ) ?FILESYS NOT ?OWNIO NOT & IFTRUE : ININIT ; : OUTINIT ; IFEND ( =========================================================================== ) ( INTERPRETER SECTION ) ( ==================================================================== ) ?INTERP IFTRUE ( BASWAP 2DUP + >R TYPE ; ( CRIGHT - COPYRIGHT NOTICE ) : CRIGHT T" (c) Copyright 1980 The Stackworks " ; ( ABORTS ) : ABORT T" ABORT " RESTART ; : PNAME HERE 1+ HERE B@ TYPE ; : UNDBUFP @ BUFSIZE ! 0 TBUFP ! ; : GCH TBUFP @ BUFSIZE @ >= IF TGET RECURSE ELSE TBUFP @ TBUFF B@ TBUFP 1+! ENDIF ; : UGCH GCH ; : OUTINIT ; : ININIT 0 TBUFP ! 0 BUFSIZE ! ; IFEND ( == NASCII TCH LOOP SPACE ; : X. 4 .HEX ; : B. 2 .HEX ; ( ==================================================================== ) OTHERWISE : D/0 RESTART ; 'B D/0 D/0AD T! SSIZE STACK SP LD RSIZE RSTACK DE LD EXX 'B $RESTART JP EDOC 'B RESTART RESTARTAD T! ( ==================================================================== ) ( CRT I/O SECTION ) ( =========================================== ) ( ==================================================================== ) ( RESTART ) : $RESTART 0 STATE ! 0 FLAGS ! ININIT OUTINIT GOQIAD @ GO ; CODE RESTART ( EXECUTE, LITERAL, LINK ) : EXECUTE DUP 3 + @ SWAP B@ 80 & STATE @ NOT | IF GO ELSE , ENDIF ; : LITERAL STATE @ IF 'B LIT , , ENDIF ; : LINK SYMPTR @ HERE B@ 1+ - HERE OVER HERE B@ 1+ $BMOVE 2 - SWAP OVER DUP 2 + , ; : ENDIF HERE SWAP ! DEPTH 1-! ; IMP IF IMP ELSE IMP ENDIF : BEGIN HERE DEPTH 1+! ; : END 'B $IF , , DEPTH 1-! ; IMP BEGIN IMP END : DO 'B $DO , HERE DEPTH 1+! ; : +LOOP 'B $+LOOP , , DEPTH + @ 3 + LITERAL ELSE UNDEFINED ENDIF ; IFEND ( ==================================================================== ) ( END OF INTERPRETER SECTION ) ( =======================BC) A LD (HL) CP NZ RET HL INC BC INC E DEC Z END, RET EDOC CODE FIND1 BC POP HL POP BEGIN, DE POP DE PUSH DE HL ADD HL PUSH BC PUSH 'B S= CALL BC POP HL POP Z IF, ( FOUND ) HL (SP) EX 1 HL LD $PUSH JP ENDON! WORD INFOF @ 1 & IF FIND IF DROP T" REDEF " PNAME 0D TCH 0A TCH ENDIF ENDIF HERE LINK ; : CONSTANT $CODE 0CD B, 'B $CONSTANT , , CUR@@CON! ; : VARIABLE HERE 5 + CONSTANT , ; : : 1 STATE ! $CODE 0CD B, 'B $: , 0 DEPTH ! ; RLP - THE MAIN LOOP FOR THE OUTER INTERPETER ) : INTRLP BEGIN WORD FIND IF EXECUTE ELSE NUMBER IF LITERAL ELSE UNDEFINED ENDIF ENDIF 0 END ; 'B INTRLP GOQIAD T! : $'B WORD FIND IF 3 + @ ! 2 - CONTEXT @ OVER ! 1- 0 OVER B! DUP SYMPTR ! SYMTP @ - CURRENT @ ! ; ( WORD - PARSE OUT A WORD FROM THE INPUT STREAM ) : DELIM= DUP DELIMITER @ = OVER 0A = | OVER 0D = | ; : WORD HERE 1+ DUP BEGIN ==== ) ?COMPILE IFTRUE ( C", T" ) : C" 22 DELIMITER ! STATE @ IF 'B $C" , WORD HERE B@ 1+ DP+! ELSE WORD HERE 1+ HERE B@ CTYPE ENDIF ; IMP C" : T" 22 DELIMITER ! STATE @ IF 'B $T" , WOR============================================= ) ( ==================================================================== ) ( COMPILER SECTION ) ( ================================================================IF, HL INC (HL) E LD HL INC (HL) D LD D A LD E OR Z IF, ( END OF VOCAB ) HL INC (HL) E LD HL INC (HL) D LD HL DE EX H A LD L OR DE POP $PUSH Z JP ( END OF DICT. ) DE PUSH (HL) E LD HL INC (HL) D LD : ; CUR@@CON! 0 STATE ! 'B $; , DC ; IMP ; : ;: 'B $:;CODE , 0CD B, 'B $: , DC ; IMP ;: ( CONDITIONAL BRANCHING ) : IF 'B $IF , HERE DUP 2 + , DEPTH 1+! ; : ELSE HERE 4 + SWAP ! 'B $ELSE , HERE ELSE UNDEFINED ENDIF ; : 'B $'B LITERAL ; IMP 'B : $'S R> DUP 2 + >R @ SYMTP @ + ; : 'S WORD FIND IF STATE @ IF 'B $'S , SYMTP @ - , ELSE LITERAL ENDIF ELSE UNDEFINED ENDIF ; : ' WORD FIND IF 3 DROP UGCH DELIM= NOT END BEGIN OVER B! 1+ UGCH DELIM= END DROP HERE - 1- HERE B! 20 DELIMITER ! ; ( FIND ) CODE S= 5 DE LD DE HL ADD (BC) A LD A E LD E INC BEGIN, (D HERE B@ 1+ DP+! ELSE WORD PNAME ENDIF ; IMP T" : DC DEPTH @ IF CR CR T" UNBALANCED NESTING" ABORT ENDIF ; ( CUR@@CON!, $CODE, CONSTANT, VARIABLE, :, ;, ;: ) : CUR@@CON! CURRENT @ @ CONTEXT ! ; : $CODE CUR@@C40 > IF 7 - ELSE DROP 80 ENDIF ENDIF 30 - DUP BASE @ U< IF ROT BASE @ * + SWAP 1+ 1 ELSE 2DROP 2DROP 0 EXIT ENDIF LOOP DUP IF 2DROP * 1 ENDIF ; ( INT ENDIF, HL DE EX REPEAT, EDOC : FIND SYMTP @ CONTEXT @ HERE FIND1 ; : NUMBER HERE B@ HERE 1+ DUP B@ 2D = IF 1+ SWAP 1- SWAP -1 ELSE 1 ENDIF 0 2SWAP SWAP 0 SWAP 0 DO DROP DUP B@ DUP 39 > IF DUP 1-! ; : LOOP 1 LITERAL +LOOP ; IMP DO IMP +LOOP IMP LOOP : COMPILE $'B , ; : IMP 'S DUP B@ 80 | SWAP B! ; : IMMEDIATE 80 SYMPTR @ B! ; IMP 'S IMP ' IMP COMPILE : [ 0 STATE ! ; IMP [ ND ( ==================================================================== ) ( END OF COMPILER/FILE SYSTEM SECTION ) ( ==================================================================== ) [END-OF-FILE] ======================================================== ) ?FILESYS ?COMPILE & IFTRUE ( MORE FILE RELETED WORDS ) : FALLOC HERE 9 + CONSTANT HERE 0B + , HERE 89 + , 0 B, 0 , 0 , 0 , A4 DP+! 1+ @ CURRENT @ ! CUR@@CON! 5 + COUNT + SYMPTR ! ; : FORGET COMPILE 'S 'S $FORGET EXECUTE ; IMP FORGET : VOCABULARY SYMPTR @ 6 - DUP SYMPTR ! 6 OVER 0 FILL CURRENT @ OVER 3 + ! SYMTP @ - VARIABLE ;: @ DUP CVOC ! @ CONTEXT ! ; FCB 1+ DUP B@ " # = IF 1+ B@ " L = OVER SCHAN# ! 80 ELSE DROP 0 ENDIF SWAP FFLAGS B! ; : NAMIT WORD HERE B@ WLN ! HERE WPTR ! $NAMIT ; : $FLOAD R> DUP B@ 2DUP + 1+ >R WLN ! WPTR ! INFILE $NAMIT INFILE OPENR R@@CON! ; : $PUSH 'B $$PUSH ; : $NEXT $PUSH 1+ ; : $NEXTHL $NEXT 1+ ; FORTH DEFINITIONS IFEND ( ==================================================================== ) ( END OF COMPILER: ] 1 STATE ! ; IMP ] : ( 29 DELIMITER ! WORD ; IMP ( ( DATA STRUCTURE CONSTRUCTIONS ) : ARRAY HERE 5 + CONSTANT DUP + DP+! ;: @ OVER + + ; : BARRAY HERE 5 + CONSTANT DP+! ;: @ + ; : SET CONSTANT , ;: DUP 2 + @ S GCHR DROP GCHR IF DUP " : = IF DROP 40 - OVER B! ( UNIT SPECIFIED ) ELSE ROT 1+ ROT OVER B! 1+ SWAP OVER B! SWAP 2 - SWAP ENDIF 1+ SWAP 1- SWAP BEGIN GCHR WHILE DUP " . = IF DROP 3 P;: ; ( NAMIT - FIB^ NAMIT FILENAME -- NAME THE FILE ASSOCIATED WITH FIB^ ) 0 VARIABLE WPTR 0 VARIABLE WLN : GCHR WLN @ IF WPTR 1+! WLN 1-! WPTR @ B@ 1 ELSE 0 ENDIF ; : $NAMIT DUP FCB 0C OVER BLANK 0 OVER B! 0 9 ROT : DEFINITIONS CVOC @ CURRENT ! ; ( PROGRAM CONTROL CONSTRUCTIONS ) : WHILE COMPILE IF DEPTH 1-! ; : REPEAT 'B $ELSE , SWAP , HERE SWAP ! DEPTH 1-! ; IMP WHILE IMP REPEAT : RECURSE CURRENT @ @ SYMTP @ + 3 + @ , ; INTRLP ; : FLOAD STATE @ IF 'B $FLOAD , WORD HERE B@ 1+ DP+! ELSE INFILE NAMIT INFILE OPENR INTRLP ENDIF ; IMP FLOAD : [END-OF-FILE] CR INFILE CLOSE R> R> 2DROP ININIT ; IFE SECTION ) ( ==================================================================== ) ( ==================================================================== ) ( COMPILER/FILE SYSTEM SECTION ) ( ============WAP @ ! ; ( VOCABULARY WORDS ) : VLIST CONTEXT @ BEGIN SYMTP @ + DUP 3 + @ X. SPACE DUP B@ B. SPACE DUP 5 + DUP B@ DUP . SWAP 1+ SWAP TYPE CR 1+ @ DUP 0= END DROP ; : $FORGET DUP 3 + @ DP ! DUPICK 0= IF + SWAP 1+ 3 ROT ENDIF ELSE 3 PICK IF OVER B! 1+ SWAP 1- SWAP ELSE DROP ENDIF ENDIF REPEAT ELSE OVER 1+ B! ENDIF 2DROP DROP DUPEND : " WORD HERE 1+ B@ LITERAL ; IMP " ( ASSEMBLER BASICS - CODE, ;CODE, EDOC, $PUSH, $NEXT ) VOCABULARY ASSEMBLER : CODE $CODE ASSEMBLER ; : ;CODE ' $:;CODE , 0 STATE ! ASSEMBLER ; IMP ;CODE ASSEMBLER DEFINITIONS : EDOC CU IMP RECURSE ( CASE ) : CASE 'B $CASE , HERE 0 , DEPTH 1+! ; : =: 'B $=: , HERE 0 , ; : ;; 'B $;; , HERE SWAP ! ; : CASEND 'B R> , 'B 2DROP , HERE SWAP ! DEPTH 1-! ; IMP CASE IMP =: IMP ;; IMP CAS ( Copyright 1980 The Stackworks. All rights reserved ) ( Z80 ASSEMBLER - 8/14/79 - MOB ) ASSEMBLER DEFINITIONS HEX : R, BSWAP , ; : 2* 2 * ; : 8* 8 * ; : 16* 10 * ; 0 VARIABLE PARM : ARESET 0 PA ( BRANCHING MNEMONICS ) : CONDS PARM1 2 = IF 3 ELSE PARM1 30 - ENDIF ; : CALL PARM1 0= IF CD B, ELSE CONDS 8* C4 + B, ENDIF , ARESET ; : RET PARM1 0= IF C9 B, ELSE CONDS 8* P ; : RRC 8 SOP ; : RR 18 SOP ; : SLA 20 SOP ; : SRA 28 SOP ; : SRL 38 SOP ; ( ARITHMETIC MNEMONICS ) : AR1 PARM1 9 < PARM1 0> & IF PARM1 1- + 80 + B, ELSE PARM1 IF SETP IX 18 NSETP IY 9 NSETP (BC) 10 NSETP (DE) 7 NSETP (HL) 11 NSETP (SP) 20 NSETP (IX) 21 NSETP (IY) 30 NSETP NZ 31 NSETP Z 32 NSETP NC 34 NSETP PO 35 NSETP PE 36 NSETP P 37 NSETP M 50 NSETP IX+ 51 NSETP IY+ 60 NSETP ^ ELSE PARM1 12 > IF PARM1 17 < IF 8* 3 + PARM1 13 - 16* + B, ELSE PARM1 17 = IF 8* DD23 + R, ELSE PARM1 18 = IF 8* FD23 + R, YTR OTIR EDAB 2BYTR OUTD EDBB 2BYTR OTDR ( BIT OPERATIONS ) : BOP SWAP PARM1 0> IF PARM1 9 < IF CB B, 8* + PARM1 1- + B, ELSE IXYP1 CB B, ROT B, 8* + 6 + B, ENDIF ENDIF ARESET ; : BIT 40 BORM ! ; : SETP PARM @ BSWAP + PARM ! ; : PARM2 PARM @X 0FF & ; : PARM1 PARM @ 0FF & ; : NSETP CONSTANT ;: @ SETP ; : 1BYTR CONSTANT ;: B@ B, ; : 2BYTR CONSTANT ;: @ R, ; : IXYP 50 - 16* 2* DD + B, ; : IXYP1 PARM1 IXYP ; ELSE 08 AR1 ENDIF ; : SBC PARM1 15 = IF 42 AR2 ELSE 18 AR1 ENDIF ; : ADD PARM1 17 = PARM1 18 = | IF PARM1 17 - 16* 2* DD + B, PARM1 PARM2 = IF 20 ELSE PARM2 13 - 1 IXYP1 86 + B, B, ELSE C6 + B, B, ENDIF ENDIF ARESET ; : AR2 ED B, PARM2 13 - 16* + B, ARESET ; : SUB 10 AR1 ; : AND 20 AR1 ; : OR 30 AR1 ; : XOR 28 AR1 ; : CP 38 AR1 ; : ADC PARM1 15 = IF 4A AR2 61 NSETP (C) 62 NSETP IR 63 NSETP R ( MNEMONICS WOTHOUT ANY OPERANDS ) D9 1BYTR EXX 27 1BYTR DAA 2F 1BYTR CPL 07 1BYTR RLCA 17 1BYTR RLA 0F 1BYTR RRCA 1F 1BYTR RRA 76 1BYTR HALT ELSE IXYP1 34 + B, B, ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ARESET ; : INC 0 DOP ; : DEC 1 DOP ; P ; : RES 80 BOP ; : SET C0 BOP ; ( SHIFT MNEMONICS ) : SOP PARM1 9 < IF CB B, PARM1 1- + B, ELSE IXYP1 CB B, SWAP B, 6 + B, ENDIF ARESET ; : RLC 0 SOP ; : RL 10 SO : IXYPR2 PARM2 IXYP ; ( OPPERAND SETTINGS ) 8 NSETP A 1 NSETP B 2 NSETP C 3 NSETP D 4 NSETP E 5 NSETP H 6 NSETP L 12 NSETP AF 19 NSETP AF' 13 NSETP BC 14 NSETP DE 15 NSETP HL 16 NSETP SP 17 N6* ENDIF 9 + B, ELSE PARM1 15 = IF PARM2 13 - 16* 9 + B, ELSE 0 AR1 ENDIF ENDIF ARESET ; : DOP PARM1 0 > IF PARM1 9 < IF PARM1 1 - 8* + 4 + B, 44 2BYTR NEG ED46 2BYTR IM0 ED56 2BYTR IM1 ED5E 2BYTR IM2 ED6F 2BYTR RLD ED4D 2BYTR RRD ED4D 2BYTR RETI ED45 2BYTR RETN EDA2 2BYTR INI EDB2 2BYTR INIR EDAA 2BYTR IND EDBA 2BYTR INDR EDA3 2BYTR OUTI EDB3 2B F3 1BYTR DI FB 1BYTR EI 3F 1BYTR CCF 37 1BYTR SCF 0 1BYTR NOP EDA0 2BYTR LDI EDB0 2BYTR LDIR EDA8 2BYTR LDD EDB8 2BYTR LDDR EDA1 2BYTR CPI EDB1 2BYTR CPIR EDA9 2BYTR CPD EDB9 2BYTR CPDR EDC0 + B, ENDIF ARESET ; : RST 8* C7 + , ; : JP PARM1 7 = IF E9 B, ELSE PARM1 20 = IF DD B, E9 B, ELSE PARM1 21 = IF FD B, E9 B, ELSE PARM1 0 = IF C3 B, , ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ARESET ; ELSE ED B, PARM2 13 - 8* 2* 43 + B, , ENDIF ENDIF ENDIF ELSE PARM1 62 = IF ED47 R, ELSE PARM1 63 = IF ED4F R, EIF DUP 12 = IF 4 + ENDIF 13 - 16* C1 + + B, ELSE 17 - 16* 2* DD + B, E1 + B, ENDIF ARESET ; : PUSH 4 STKOP ; : POP 0 STKOP ; ( DATA MANIPULATION MNEMONICS ) : EX PARM1 14 = IF ELSE PARM1 13 - 16* 1+ B, , ENDIF ELSE PARM1 19 < IF PARM1 39 + IXYP PARM2 IF 2A ELSE PARM2 62 = IF ED57 R, ELSE ED5F R, ENDIF ENDIF ENDIF ENDIF ELSE CONDS 8* C2 + B, , ENDIF ENDIF ENDIF ENDIF ARESET ; : DJNZ 10 B, B, ARESET ; : JR PARM1 0= IF 18 B, B, ELSE CONDS 8* 20 + B, B, ENDIF ARESET ; ( I PARM1 15 = IF 2A B, , ELSE ED B, PARM1 13 - 16* 4B + B, , ENDIF LSE PARM1 9 = IF 02 B, ELSE PARM1 10 = IF 12 B, ELSE PARM1 17 < IF PARM2 IF PARM2 60 = IF EB B, ELSE PARM1 12 = IF 08 B, ELSE PARM2 15 = IF E3 B, ELSE PARM2 17 = IF DD B, E3 B, ELSE PARM2 18 = IF FD B, E3 B, END ELSE 21 ENDIF B, , ELSE IXYP1 PARM2 IF PARM2 1- 70 + B, B, ELSE 36 B, B, B, ENDIF ENDIF ELSE PARM1 60 = IF PARM2 8 = IF 32 B, , ELSE PARM2 16 > IF PARM2 39 + IXYP 22 B, , ELSE PARM2 15 = IF 22 B, , N, OUT ) : IOP PARM1 61 = IF ED B, 1 - ABS PARM2 1 - 8* 40 + + B, ELSE 8* D3 + B, B, ENDIF ARESET ; : OUT 0 IOP ; : IN PARM2 PARM1 ARESET SETP SETP 1 IOP ; ( PUSH, POP ) : STKOP PARM1 DUP 16 < ELSE PARM2 15 = IF F9 B, ELSE PARM2 39 + IXYP F9 B ENDIF ENDIF ARM2 52 < & IF IXYPR2 PARM1 1- 8* 46 + B, B, ELSE PARM2 9 = IF 0A B, ELSE PARM2 10 = IF 1A B, ELSE PARM2 60 = IF 3A B, , IF ENDIF ENDIF ENDIF ENDIF ARESET ; : LD PARM1 9 < IF PARM2 9 < IF PARM2 IF PARM1 1- 8* PARM2 1- + 40 + B, ELSE PARM1 1- 8* 6 + B, B, ENDIF ELSE PARM2 4F > P ( ASSEMBLER CONDITIONALS ) : LINK, SWAP IF SWAP ! ELSE OVER - 1- SWAP B! ENDIF ; : IF, CONDS 1 X| DUP 4 < IF 8* 20 + B, HERE 0 0 B, ELSE 8* C2 + B, HERE 1 0 , ENDIF ARESET ; : ELSE, 18 B, 0 B, HERE LINK, HERE 1- $BT]#####~+ngk&E ^#V#!&ͭ5!&ͭd^#V#k ü 5!&ͭX!&ͭd5 `i':$ 5:$ 4DM:$ `iN#F:$DM5:$bk#####~+ng &E ^#V#!&ͭ,^#V#͝ ü 4!&ͭO5# : !&&" &!8&"8&}|&:$:$?͍7{7!7$?Zah0:?A[?a{?ɧ"%͍().[], Z?O:$0Gyz{xy{#zͭ>>>=G+>:$514j~# j҄ʄDM#%&+~*$w#61ͳ-jb-:$Tn>2$2$á:$ڄ:$ҙͮ BK`i"%ïͦî:$ڄڄB:$ڄBͭʄ|&DMڡ:$^#V#~ڄ^#V#:$+5:$0 ; : ENDIF, HERE LINK, ; : BEGIN, HERE ; : END, CONDS 1 X| DUP 4 < IF 8* 20 + B, HERE - 1- B, ELSE 8* C2 + B, , ENDIF ARESET ; : REPEAT, 18 B, HERE - 1- B, ; FORTH DEFINITIONS [END-OF-FILE] &bk*$ͭ####s#rs#rs#r+:$DM##^#V=p+q>҄~=z+~Á:$z!&.z!&:$ڄ!&'z!&>҄„~=Ü>҄ʄz*$ÁÁ..ڄͭl.z>҄>҄„>҄zlOww# ʄ5##~#fo##~#fo~#fo##~#fo##~#fo##~#fo^#V#~#fo.##~##~#fo7:$####->?~=7+~ɯ2$N?>:$2$~=ʵ*$ 5:$ҙ _ GKt:$q ? 7 7Î>~+=´!=¼n&~+fo:$5:$:$s#r*$++++++&:  1O$!ͱ! muSIMP-80 2.02 COPYRIGHT (C) 1980 MICROSOFT LICENSED FROM THE SOFT WAREHOUSEÒ~# m~+ v}o|gɯ|g}o†!" %!$w* %&!N#F#zͳ¬.$"$"$"$͓##"$"$$++"$#6s#r#"%"%$"%"%* %!`&w:$Ҳz55'4Äz:$X:$҄4@mDM:$5z[{[!&BK:$ڙ:$5:${{{7:$5:$ҙPY™7-r--r-Ä*$6DM:$SWAP 3 PICK = | ELSE 0 ENDIF END 2DROP ENDIF ; : IFDEFINED WORD FIND IF DROP 1 ELSE 0 ENDIF IFTRUE ; [END-OF-FILE]