IMD 1.16: 31/05/2007 19:54:39 FOGCPM.106 ååååååååååååååå--FOGCPM106F83 COM€ F83 COM?-07-00 86 ¤CLOCK BLK` !"#$%&CPU8080 BLK€'()*+,-./0123456CPU8080 BLK€789:;<=>?@ABCDEFCPU8080 BLKHGHIJKLMNO-CPM106 DOC ¥¦EXPAND80BLK(PQRSTEXTEND80BLK€UVWXYZ[\]^_`abcdEXTEND80BLKpefghijklmnopqrMETA80 BLK€stuvwxyz{|}~€�‚META80 BLK€ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’META80 BLK€“”•–—˜™š›œ�žŸ ¡¢META80 BLK£åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååThis is the disk name. ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååÃ".Ã.Õå o g^#Vëé…FORTÈ…+Þ^N_¸^h^‚RÐ{¸â*4+p+q"4KBà „EXIÔQ*4N#F#"4à H†UNNESÔQ*4+p+q"4ÁÕà Õà `‚UÐ{X.*‰^#VÉå*‰Ñs#rÉë^#VÕà ë^#V*‰åà …(LIT©¿ o gà  -†BRANCÈÕ`iN#Fà  ‡?BRANCÈëá}´ÊÕà *4"4à  µ†(LOOP©*44Â#4ÊöÃÕë*4s#rÃÕ ‡(+LOOP©9*4^#Vá|·úLÚöÃ!Ú!Ãö -„(DO©6w›%B؇w%…%%i U…(?DO©6• `阅 ›%Ó°w›%B؇w%…%%i ʆBOUNDÓ6—d‡i´…>NEXÔ� ‚‡EXECUTÅãáÃz‡PERFORÍõá^#VëÃëÃöë^#VÍ‹ëÃß‚GÏÉÉ„NOOÐ#à é…PAUSÅ2à ×�É=*4^#V#~#foà �ÊT*4Ã@(‡(LEAVE©l*4####N#F#"4à `ˆ(?LEAVE©Œá|µÂlà �À�á^#VÕà 7�¡­áÑs#rà ‚CÀ¾án&à ·‚C¡ÎáÑsà Ç…CMOVÅà`iÁÑãx±Êò~# ÃåÁà Ö†CMOVE¾`iÁÑã +ë +ëx±Ê~+ ÃÁà øƒSPÀ)!9à !ƒSP¡:áùà NƒRPÀI*4à AƒRP¡Yá"4à —„DROÐkáà bƒDUÐyáåà 2„SWAЉáãà €„OVEÒ™ÑáåÃq„TUC˪áÑåÃQƒNIкáÑà ²ƒROÔÉÑáãç„-ROÔÚáÑãëÃÁ„FLIÐìÑcjà �„?DUÐ6wéwiã‚R¾*4^#V#"4Õà  ‚>Ò'Ñ*4++"4s#rà  ‚RÀ?*4^#VÕà ¡„PICËTá)9^#VÕà 8„ROLÌ6%=R'wB4ìiiуANÄ‹Ñá{¥oz¤gà ô‚OÒŸÑá{µoz´gà KƒXOÒ´Ñá{­oz¬gà `ƒNOÔÉá}/o|/gà ¬„TRUÅ�ÿÿÁ…FALSÅ�!ÿÿà !à ˜„CSEÔáÑ~³wà ü†CRESEÔáÑ{/_~£wà ‡CTOGGLÅ3áÑ~«wà '‚OÎD!ÿÿãåí=ƒOFÆV!ãåíN�«fÑáà â†NEGATÅyá+åÃɃ�­‡Ñáz/W{/_à �ƒABÓžáå|·úyà `‚+¡±áÑ~ƒw#~Šwà Õ�°�–�±�n�²�ª�³�Ó‚2ªîá)à ç‚2¯üá|g}oà ɃU2¯á·|g}oà ¿‚8ª&á)))à  ‚1«6á#à õ‚2«Dá##à /‚1­Sá+à =‚2­aá++à !)ÒtÎ)Ò|Î ÂlÉLƒUMª‹ÑáÅD}ÍgågxDÍgÑJ ÎUlgÁÃU*Ä6‰i_|‘g{˜ÒÎ|�g{È)Ò´_|‘g{˜,ÂÃÉ!ÿÿÁåà ¨†UM/MOÄé`iÁÑãë}‘|˜ÒÔ|ejÕÍÃÑåkÍÃW\ÁaÁÕà ‚0½á}´ÊîÃô‚0¼)á)ÚîÃô"‚0¾:á|·úôµÂîÃô3ƒ0<¾Qá}´ÂîÃôÞ�½báÑ}»Âô|ºÂôÃîI‚<¾6`Çi݇?NEGATÅ6'é–wi\‚U¼¡áÑ|ºÚôÂî}»ÚôÂîÃôš‚U¾¿Ñáãs�¼ÌáÑzî€W|î€Ã¤Z�¾àÑáÃθƒMIÎ6• Þéù‡iiçƒMAØ6• Êé ‡iiÚ‡BETWEEÎ6%—Þ‡Þ�Çi‚†WITHIÎ6Q! i ‚2ÀQ á^#VÕýÿ^#VÕà J ‚2¡n áÑs#r#Ñs#rà  g …2DROЇ ááà  } „2DUЗ áÑÕåÃ Ž …2SWAЪ áÑãå!9~rW+~s_áà   …2OVEÒÉ !9V+^Õ+V+^Õà  7 „3DUÐ6wÇ Çi Æ„4DUÐ6Ç Ç i ¿ „2ROÔ6½g½gi!î ‚D« !9^q#VpÁáëá}‰o|ˆgÁÃ! ‡DNEGATÅE áÑ—“_>šW>�o>œgÃ!Û ƒS>Äc Ñ!zæ€Ên +Ã!9 „DABÓ| áå|·úE à "s ƒD2ª� áÑ{_zW}o|gÃ"ˆ ƒD2¯« áÑ|g}ozW{_Ã"£ ‚D­6C  i"[ ˆ?DNEGATÅ6'éä C i#À ƒD0½6�i#è ‚D½6Å î i#ø ƒDU¼6LJ• Ÿé% … … ÜÓ5 xé3 … êÓ5 Ÿi# ‚D¼6×R—`éR ÓZ ¸ÇiÊi#9 ‚D¾6¨ > i#^ „DMIÎ6õ c é€ ¨ … i#m „DMAØ6õ > é™ ¨ … i$ÿ ‚*Ä6• ²%œ‡œ‰Ú i$ÿ…M/MOÄ6ûé w%• ²%%z =œç‡Œ‡'é w—é Q=Ç…‡ii$¼ †MU/MOÄ6%Ã=ç‡%çi%Ÿ �ª6‰ii%Ï „/MOÄ6%a Ä i%9 �¯6@ ¸i% ƒMOÄ6@ ii%+ …*/MOÄ6%¤ Ä i%l ‚*¯6t ¸i&† ƒTOÓ¦&\ …ENTRÙ¦&‘ „LIN˦&N ƒSP°¦&‚ ƒRP°¦&« ‚DЦ &¸ „#OUÔ¦ &Û …#LINŦ&è †OFFSEÔ¦&Ä „BASŦ&Ð ƒHLĦ& „FILŦ&� ‡IN-FILŦ& ˆPRINTINǦ'+ „EMIÔ'ö ƒSCÒ{'; …PRIOÒ{!'Y …STATÅ{'s ‡WARNINÇ{ÿÿ'e ƒDPÌ{ÿÿ' ‚R£{'‘ „LASÔ{‚w'� ƒCSÐ{ä'µ ‡CURRENÔ{!'Á …#VOCÓ�'Ñ ‡CONTEXÔ{!!Z0(ß „'TIÂ{â(ÿ …WIDTÈ{(� ˆVOC-LINË{wN(ƒBLË{(+ƒ>IÎ{{( „SPAÎ{(C„#TIÂ{(L „END¿{)7‚BÌ� )j‚BÓ�)u„BELÌ�)P„CAPÓ{ÿÿ)€„FILÌ£`iÑÁãëx±Êµ} éÁà )]…ERASÅ6ái)š…BLANË6o¡i)�…COUNÔéá^#ëÃ)¨ †LENGTÈÿá^#VÃí)»„MOVÅ6Ø• Ÿé#ÇÓ'ÇÞiþaØþ{ÐÖ É*ƒUPÃ<á}Í)oåà *4…UPPEÒRÑáz³Êc~Í)w#ÃTà *ô„HERÅ6Õ ›i*hƒPAÄ6o½Pdi*H‰-TRAILINÇ6w·• dQ¼oxŠQ£i+ß„COMÐÄi`ÁÑãx±Êî~ë¾ëÂÛ# Ãëòä!Ãç!ÿÿÁà ÃÉ!Áà ,»‰CAPS-COMÐi`ÁÑãx±Ê9~Í)ÅOë~Í)¹ÁëÂ&# Ã6ò/!Ã2!ÿÿÁà à !Áà ,÷‡COMPARÅ6”›é\Ó^Âi-Í„BDOÓkáÑÅMÍ&oÁà -b„BIOÓ„*ÑÑÅBK•Õé&oÁà -y†(KEY?©6ÃׂOi-ž…(KEY©60§é¿Ãá‚i-µ‰(CONSOLE©60½‚iÍâ ¯i.B„KEY¿ý§.óƒKEÙý½.‚CÒý{.чPR-STAÔ6Üi.‡(PRINT©60!é5½‚iÍâ ¯i.)†(EMIT©6F ›énw3½ÿÿâ ¯Ýi. „CRLÆ6½ S ½ S â TÍð ¯i.O„TYPÅ6®çS ¦ii.t…SPACÅ6oS i.´†SPACEÓ6à Âá¼Ûi.{ŠBACKSPACEÓ6ÂzS úi.å„BEEÐ6‡S i/…BS-IÎ6iwé1QzÓ3‡S i/—ˆ(DEL-IN©6iwé\QzS ¼zÓ^‡S i/‡BACK-UÐ6iwòwÏòÃi/d†RES-IÎ6Üq&Reseti/9„P-IÎ6iF ›ÇF «i0Æ…CR-IÎ6iJ«—oS i0�†(CHAR©6â S dÌ4i0¶„CHAÒýÙ0ІDEL-IÎýD0é‚CÃ{0ˆCC-FORTÈ{ððð‹ðððððððð¾ðð¤ððððnððnððððððð1�†EXPECÔ6wJ«‡Ã×R—…é´woÊéœwì ›dóÓ°w½`é®ÿÓ°ðÓt… ii1öƒTIÂ6›i1_…QUERÙ6½PhJ›W«1T=Ti2ˆ#BUFFERÓ�2‚…B/BUÆ�2…B/REÃ�€2‡REC/BLË�2…B/FCÂ�*2¼ŠDISK-ERROÒ{2=…LIMIÔ�ó2/…>SIZÅ�*2^…FIRSÔ�ã2̇INIT-R°�Ôï2lˆ>BUFFERÓ6tf…i2Š„>ENÄ6t_i2¡‡BUFFER£6$•di2²‡>UPDATÅ6ͼ½di3ÈŠREAD-BLOCËý=3ò‹WRITE-BLOCËýp3â….FILÅ6çûé'½@dS ç$:½• ™ždç$.áž¼i3 …FILE¿6% ›i3õ†SWITCÈ6% ›5 ›% «5 «i3PƒDOÓ…+x3>3Ö4ÿ4)3†!FILEÓ6w% «5 «i3ŠDISK-ABORÔ6žç$ in ¤&i3‹?DISK-ERROÒ6wJ«éîÐ$ Disk error®Óðii4„FCB±{ 4Á‡CLR-FCÂ6w7Ã4½ Õi4)‡SET-DMÁ6½iii4ô‡RECORD£6½!di4ˆ‡MAXREC£6½&di4uˆIN-RANGÅ6w›—i›ŸwJ«éÇͼBÐ$ Out of Range®i4_ˆREC-REAÄ6w–½!iÏi4ˉREC-WRITÅ6w–½"iÏi5G†SET-IÏ6wO )/ —i«‡½d›)Ãi5è‰FILE-REAÄ6\]• QwÖ͇i¯dE… i51ŠFILE-WRITÅ6\�• Qwô͇i¯dx… i5c‡FILE-IÏ6½=í,ï½pí,i6UˆCAPACITÙ6% ››4ýç¸i6t‡LATEST¿6JT‡ÿ ›d• ͼO ý é… Í¼½d›êii6z‡ABSENT¿6åêý4×\Si• ;¼O ý éM… ;jÓOê3ûé�¼w•½Þ%•w½d—‡…ͼ½d›êÓ“•l Üi7†UPDATÅ6ÒBi7Û‡DISCARÄ6ÍÒ«i7—‡MISSINÇ6¨_›'éè¨_T¨½…¨½…›•½d«Í•½d«•w½dý$i7ªˆ(BUFFER©60#é?Êͼ½d›i7A†BUFFEÒ6% ›'i7‡(BLOCK©6'Ò›8é€Í¼wï½dTi7C…BLOCË6% ›bi7ÀˆIN-BLOCË65 ›bi8˜�EMPTY-BUFFERÓ6tX—…Õý4$ÃtͼýÃ\wB½d• «‡ d‡½dã… i8¶ŒSAVE-BUFFERÓ6ͼýÃ\Xw›4éTw½d›'éNww½dT½d&ii8„…FLUSÈ6ÃŒi¿i8^…VIEW£6% ›½(di9–‰FILE-SIZÅ6w½#iii›i9¡ˆDOS-ERR¿6½ÿ`i9‰OPEN-FILÅ65 ›w½i¹éôÐ$ Open error®wšQ‡«i9®‡DOS-FCÂ�\9X‡DEFAULÔ6ûw5 «w% «34¼oxéJû½ ÞÑi9†(LOAD©6% ›%1›%=›%=T1«5 ›% «(-=«1«‘i9N„LOAÄýW:‘…DIGIÔ¨áÑÕ{Ö0úôþ ú½Öþ úô½òô_áÕÃî:ž‡DOUBLE¿6— ›4Oi: ‡CONVERÔ64w%¼ ›¦é%‡ ›‰iÇ ›‰ ÓéÍ— ¯Óíii;ɉ(NUMBER?©6ÃÃÇw4¼½-`w%…½ÿÿ— «ëw¼½,½/! éy× «Ó[ØéƒC Ǽo`i;v‡NUMBER¿6ê—罂Á;¼ ›¦¸é½iÜj§éË9ÓÓiÃÃêi;-ˆ(NUMBER©6™Ç}$i;�†NUMBEÒýâ<ׄHOLÄ6½ÿÿ ¯ ›Ìi<ý‚<£6 «i<á‚#¾6…  ›—…i<)„SIGÎ6'éU½-i<@�£6 › ǽ —Êéy½d½0di<Y‚#Ó6]• �éŒi<ƒHEØ6½ «i<œ‡DECIMAÌ6½ «i<……OCTAÌ6½ «i=°„(U.©6Ê.i=¯‚U®6åž¼i=óƒU.Ò6%å—…Ïži=Þƒ(.©6wœÃŠÇG.i=î�®6$ž¼i=:‚.Ò6%$—…Ïži=…(UD.©6Š.i=ƒUD®6kž¼i=w„UD.Ò6%k—…Ïži=c„(D.©6¨z ŠÇG.i=¤‚D®6«ž¼i=¿ƒD.Ò6%«—…ÏžiÁåÕà >È„SKIÐù`iÁÑãz³Ê ~¹Âè#ÃþÃè>ð„SCAÎ`iÁÑãz³Ê/~¹Êè#à Ãè?‡/STRINÇ6—íÇ—dØ…i?Ð…PLACÅ6â 4‡Ìii?Rˆ(SOURCE©61›û鋌 Ó‘ÂW›i?4†SOURCÅýw?lŠPARSE-WORÄ6%ž¨=›>=÷—‡%—…ÇwOd…=«i?¤…PARSÅ6%ž=›>—‡%—…wO…=¯i@•…'WORÄ6oi@ „WORÄ6± Z wçdo‡Ìi@J…>TYPÅ6¨‡Þ‡ži@H Â.¨6½)íP i@åÁ¨6½)í… i@w Â\Ó6dBiA‰ ˆTRAVERSÅ¥ Ñá>¾ò© à A˜ …DONE¿6{ ›xd›�dTiAd ˆFORTH-8³6ž+”TiBÑ †N>LINË6_iB³ †L>NAMÅ6BiBê …BODY¾6_iB !…NAME¾6Í£ 4iBû …LINK¾6!$!iB!…>BODÙ6BiBB!…>NAMÅ6Q½ÿÿ£ iBR!…>LINË6Z!ó iBh!…>VIE×6p!_iBz!…VIEW¾6B8!iC0!„HASȧ!Ñá#~æo&)à Cž!†(FIND©Â!á|µÊôÑÕå##®æ?Âñ!#®‡Âñ!ÒÔ!#Ñãë##~æ@Êî!à á^#Vë|µÂÈ!ÃôD' ˆ#THREADÓ�DŒ!„FINÄ6w¼ér"m TêÙ Ã\n"ié ;ìd›wéj"wm ›—m «`é\"iêÓj"—‡¥!›À!wŠ0"Ó~"idB½!ÍiD"Š?UPPERCASÅ6”›éŸ"wçPiD·!‡DEFINEÄ6o. �""iE‚"†?STACË6'¾ ›‡Ÿq&Stack Underflow'Ÿq&Stack OverflowiE»"†STATUÓýE‰‰INTERPREÔ6Ä"­"é(#áÓ4#÷ÓÇé4#iê» é#iF #…ALLOÔ6Õ ¯iF£"�¬6o«×H#iFý"‚C¬6oÌÍH#iF@#ÅALIGÎ6iFw#ÄEVEÎ6iFd#‡COMPILÅ6wB%›V#iF…#‰IMMEDIATÅ6½@¯ ›iFR#ÇLITERAÌ6œ#½V#iFÊ#ÈDLITERAÌ6‡Ô#Ô#iF®#ÅASCIÉ6o. 4¼{ ›é$Ô#iF’#ÇCONTROÌ6o. 4¼½‰{ ›é;$Ô#iG$…CRASÈ6Üq& Uninitialized execution vector.iG?$ˆ?MISSINÇ6é�$ çžÜq& ?iGr$�§6­"}$iG”$Ã['Ý6˜$Ô#iG¤$É[COMPILEÝ6˜$V#iGà#ƒ("©6ç• d%iGÊ$„(."©6ç• d%žiGà$‚,¢6½"í¨ Z4H#iG"Â.¢6œ#ç$þ$iG%Á¢6œ#Ð$þ$iH%%…FENCÅ{X_Hù$„TRIÍ6 "Ã\t%• ›• ½Çéh%›ÓX%¸—«BT%… iHC%ˆ(FORGET©6w=%›Ÿq& Below fencew%›• Ÿé±%›Ó£%w%«¸wéÏ%• "ì…J%›Ó¹%iÕ «iH5%†FORGEÔ6o. �"wË ›¥!›À!}$‚!…%iI´$…WHERÅý!I&†?ERROÒý*&Iz%ˆ(?ERROR©6é`&%%¾ ›8F T1›éP&=›1› &¼ž¼Q-Ób&… iI&ˆ(ABORT"©6=çÇ&çd%iI÷#ÆABORT¢6œ#q&þ$iI‡&…ABORÔ6Üq&iJ&Š?CONDITIOÎ6Çq&Conditionals WrongiJÙ%…>MARË6oÃV#iJÙ&ˆ>RESOLVÅ6o‡«iJf&…MARË6Üá&iJ''‰?>RESOLVÅ6‡¼&ø&iJ:'†?*ÁÛ6{ TiNð)�Ý6{ BÄ"­"wéª*8é¤*áÓ¦*V#Ó¾*i÷Óéº*ë#Ó¾*iÔ#Ü» éŽ*iN³)�º6a)Ë ›é «L)™)ˆ*Þ)6Nv*Á»6t)œ#i¼)z*iOÊ*ÉRECURSIVÅ6¼)iOæ*ˆCONSTANÔ6L)V#Þ)�Oú*ˆVARIABLÅ6L)ÃV#Þ){OX*…DEFEÒ6L)½G$V#Þ)ýO%+ŠVOCABULARÙ6L) "Ã\w+ÃV#o+o%›V#%«.*Íké «iO>+‹DEFINITIONÓ6é ›Ë «iPV+‰2CONSTANÔ6L)V#V#.*ÍkO iP¬+‰2VARIABLÅ6Ãø+.*ÍkiP„*„AVOÃ{!P+„CODÅ6L)™)ow_«é ›ï+«ü)iPˆEND-CODÅ6ï+›é «¼)iQõ+…#USEÒ{Qè+„USEÒ…+˜,V,�,h,*Q…ALLOÔ6;,¯iQ†CREATÅ6L);,›V#Þ)¦QˆVARIABLÅ6q,×^,iQ…DEFEÒ6Œ,Þ)RË+ƒ>IÓ6w›w½¦`‡w½`‡i�éà,J!›‡›dÓâ,J!iR�+„(IS©6=›°,«B%iRA,ÂIÓ6{ ›é-œ#í,Ó-˜$°,«iSª,ƒRUÎ6{ ›éD-ˆ*{ ›Çé@-#ÓF-#iS-„QUIÔ6¾ ›«1Tz*Ê ›W#Ô(-{ ›Çé}-ç$ okÓa-iS"-„BOOÔýæ^S3,„WARÍ6Üq& Warm StartiS’-„COLÄ6Œ-Q-iTJ-‡INITIAÌ�T®-‚OË6É-˜iTÏ-…STARÔ6¿iT…-ƒBYÅ6oýç¸4ºøç$PagesÃÃii!™-Ã*."Zð"vÖÿ"4åÍ“á8ÿå"áåÍ“áù!µ-ÃÏÃZ.âÖâX_Ò) £_vvXWæ,…DEPTÈ6'¾ ›‡…úiWð-‚.Ó6€.ûéÅ.Ã\Á.€.;…QR½ ¼úЧ.ÓÎ.ç$Empty iW’.ƒ.IÄ6w4w¼Ç¼½‰Ã‚/w½‰S ½€‰é/½_½€�Ó/4w¼ò.… ¼iWx.„DUMÐ6Ã\a/w½O¼½Ã\Y/w¼áO4K/½75/iiXÒ.ÇRECURSÅ6¯ ›$!V#i Þ-ƒC/Ì�@ &/…L/SCÒ� ‹/ÁÜ6=›w…/b =¯i ™/Â(Ó6{ i /�¿6›>i ¾/‡?ENOUGÈ6€.QÞq&Not enough Parametersi ±/„THRÕ6×Ö/4‡‚0;˜0i Ì/…+THRÕ61›d‡1›d‡0i ¿-Ã--¾6=TÍ1¯i g/„ROOÔ…+1f0l1BR, „ALSÏ6é wBÙ _ìi „ONLÙ6½X0J!é Ù Qì• Ãd«X0i �0„SEAÌ6˜$J!é Ù ìÃé «i ˆPREVIOUÓ6é wB‡Ù _ìÞé Ù _ìdTi …FORTÈ6i Ã0‹DEFINITIONÓ6ž+i ¦0…ORDEÒ6ç$ Context: é Ù Ã\N1w›ûéH1!Z!Ø.B81iç$ Current: Ë ›!Z!Ø.i ð0„VOCÓ6%›w "ì…!Z!Ø.›wéy1ii Ž„FCB²{F83 COM@a=>?@ABCDEFGHIa —1…RESEÔ6ý iii Å…CLOSÅ6½i¹q& Close errori ä1‡SEARCH°6½ii 2†SEARCÈ6½ii †DELETÅ6½ii Ì1„REAÄ6½i¹q& Read errori 2…WRITÅ6½i¹q& Write errori ‹‰MAKE-FILÅ6½i¹q&Can't MAKE File i 32†(!FCB©6w7Ãw4½ Õ%—4¼½:`éú2—¼½@…=Ì×>4ØÃ\83w¼½.`é$3‡½;…dÓ03• ¼‡Ì‡4‡43… i Ž2„!FCÂ6o. ç”›éY3• PÇÄ2i j2†SELECÔ6½iii »2†HEADEÒý! a3„SAVÅ6ž1wE3w<2iwš2Ø�3½‚º3;Qwr2½€7ª3ì1i ;0„MORÅ6ÍÖ/Á‡w$% ›¯½‚ñ3;L Õ ã3% ›ì1i 0‹CREATE-FILÅ6ž1w‘wE3š2Ç3i H2….NAMÅ6â ›…/Þé74½ / d4½• ž¼dážáÏi ú/ƒDIÒ6Ð$ ????????.???ž1Ä2Qž12'4ž1'2w¹é€4ii [4†DRIVE¿6ýi½AdS ç$: i À3‚Aº6Ãj3i Q0‚Bº6Íj3i 4…FILEº6=›L)=«ow7H#E3.*Ík‘i ‡3‡?DEFINÅ6=›­"é5¸J!Ó%5i=«Þ4i ”4†DEFINÅ6 5ii ý3„OPEÎ6 5‘Ñi Ç4„FROÍ6 55 «Ñi <5‹SAVE-SYSTEÍ6½oŽ3i O5ŠVIEW-FILEÓ{æ5#6_6›6 €5…VIEWÓ6 5• ½(d«!‡ì�5d«i d5ŒKERNEL80.BLËö4KERNEL80BLK ¸4ŒEXTEND80.BLËö4EXTEND80BLK ×5‹CPU8080.BLËö4CPU8080 BLK€€ÕÖרÙÚÛÜ G 6‹UTILITY.BLËö4UTILITY BLK€€z{|}~€�7¸o0)5…LABEÌ6L)ü)i0É6‡DOES-OÐ�Í0Û6‰DOES-SIZÅ�0ë6…DOES¿6w÷6d‡¼å6`i0‚C»6#,i0,„INIÔ6i07‚C¬ýi#0�¬ýV#037†?>MARËý0'0H7‰?>RESOLVÅýF'0W7†?7…HPUSÈ� 0Š7…DPUSÈ�0&7�Á�0x7…WPUSÈ�0�Â�0°7�Ã�0˜7�Ä�0¦7�Å�0Ü7�É�0æ7‚I§�0È7�×�0û7‚W§�0ð7‚IÐ�08ƒIP§�0Ò7�È�0'8�Ì�08�Í�018ƒPS×�08‚SÐ�0Q8�Ó�0;8ƒ1MÉ6L)87.*Ík¼87i0¾7ƒ2MÉ6L)87.*Ík¼d87i0\8ƒ3MÉ6L)87.*Ík¼‡$d87i0E8ƒ4MÉ6L)87.*Ík¼8787i0f8ƒ5MÉ6L)87.*Ík¼87B7i08ƒNOÐt80¹8ƒHLÔt8v0ú8‚DÉt8ó0Ô8‚EÉt8û0ï8ƒRLÃt809ƒRRÃt80$9ƒRAÌt80/9ƒRAÒt809„PCHÌt8é0E9„XCHÇt8ë0:9ƒREÔt8É0]9ƒRNÚt8À0h9‚RÚt8È0s9ƒRNÃt8Ð0}9‚RÃt8Ø0š8ƒCMÁt8/0’9ƒSTÃt870�9ƒCMÃt8?0¨9„SPHÌt8ù0Q9„XTHÌt8ã0ˆ9ƒRPÏt8à0Ë9ƒRPÅt8è0Ö9‚RÍt8ø0¿9ƒDAÁt8'09ƒADÄ�8€0ö9ƒADÃ�8ˆ0³9ƒSUÂ�8�0 :ƒSBÂ�8˜0:ƒANÁ�8 0ë9ƒXRÁ�8¨0:ƒORÁ�8°08:ƒCMÐ�8¸0C:„STAب80":ƒINÒ¨80Z:ƒINب80-:ƒDAĨ8 0p:ƒDCب8 0{:ƒPOШ8Á0†:„PUSȨ8Å0á9ƒRSÔ¨8Ç0‘:ƒDCÒ¨80¨:„LDAب8 0N:ƒOUÔÇ8Ó0e:‚IÎÇ8Û0Ê:ƒADÉÇ8Æ0Ô:ƒACÉÇ8Î0¿:ƒSUÉÇ8Ö0ê:ƒSBÉÇ8Þ0ß:ƒANÉÇ8æ0³:ƒXRÉÇ8î0õ:ƒORÉÇ8ö0;ƒCPÉÇ8þ0!;„SHLÄâ8"0,;„CALÌâ8Í0 ;„LHLÄâ8*08;ƒSTÁâ820D;ƒLDÁâ8:0�:ƒJMÐâ8Ã0f;ƒJNÚâ8Â0q;‚JÚâ8Ê0|;ƒJNÃâ8Ò0†;‚JÃâ8Ú0‘;ƒJPÏâ8â0›;ƒJPÅâ8ê0¦;‚JÐâ8ò0±;‚JÍâ8ú0P;ƒC0½�Ú0Å;„C0<¾�Ò0Ñ;‚CÓ�Ò0[;‚0½�Â0é;ƒ0<¾�Ê0ô;‚PÅ�â0<‚0¼�ò0 <ƒ0>½�ú0»;ƒNOÔ6½²i0"<„NEXÔ6Ñl;i0;ƒMOÖ6$½@dd87i0E<ƒMVÉ6$½d8787i0<ƒLXÉ6$487B7i0]<‚IÆ687Q7i0u<„THEÎ6c7i0‰<„ELSÅ6½ÃŽ<¨ Ÿ 2 >2 >o2 É 0/=…DNEXÔ{ o g^#Vëé 0¬=†DNEXT±�¼= 0Ã=‡DEBNEXÔ{PYÍ=Ò>:O=<2O=þÂ>¯2O=Íš=Å*^=ü=ö= 0Ò=…PNEXÔ>>Ã2 !Þ=" à  0�6…UNBUÇ)>Íš=à 0ý6‡(PAUSE©=>Å*4å!9ë*‰s#r##é0=‡RESTARÔ^>!ýÿÑ"‰^#Vëùá"4Áà 01>…LOCAÌ6‡›…di0u>…@LINË6² ›i0>…!LINË6² «i0Q6…SLEEÐ6Ç¥ }>Ìi0¯>„WAKÅ6½χ¥ }>Ìi0Ç>„STOÐ6‡›·>0i0à>†SINGLÅ6½0J!½0«i0�>…MULTÉ6½ý̽\>›½ «½;>›½0«i0‹>ƒPCÀH?Ñ!N?sÛo&à 0@?ƒPC¡_?Ñ!g?sá}Óà @R>…FUDGÅ{d@?‚MÓ6š?u?›Ã‚–?’?ˆ?i@{?ƒU<½6½Çi@ž?ƒU>½6ŸÇi@W?‚<½6ÞÇi@m?‚>½6ÊÇi@¾?ƒ0>½6'Çi@Ü?ƒ0<½68Çi@ì?†HIDDEÎ…+ý[%V•ZÔY+=@ü?‡LMARGIÎ{@Í?‡RMARGIÎ{F@õ>…?LINÅ6â ›d-@›ÞéU@@›Ïi@3@ƒ?CÒ6Ã;@i@#@„.SCÒ6ç$Scr # _ Â/½ÏIi@@„LISÔ6ÍÖ/w_ «p@“/Ã\Î@;áO¼wŒ;…// d…/™P úŠª@ii@‹@…TRIAÄ6½ S áR á/ á½\þ@;’@ö@i@i@†.LINE°6wáb éAwáO¼Œ…/™P i@®?…INDEØ6×Ö/4‡\OA; AGAi@1AƒINÄ6w A4úé]Aii@Ö@‡LARGESÔ6—ÇÇÃ\£A• ›Ÿé�AØ… w›—B‰Aii@Y@…WORDÓ6@›Ïé ›o "ìÞo "yAwéûAw!w¼½‰;@Ø.¼¼›‡«úé÷AOÓÇA… i@1…WORDÓ6±Ai@©A†#TIMEÓ{@oA…TIMEÓ6ÍB¯B›ÊéDBÍB«ÓHB=Ti@UA„MANÙ6úÇéaB=Ti@A‚:º6™)o%½6V#a)ˆ*=áÕ «i@eB�Î6Í_ ¯JTi@ŠB�Â6½ÿÿ_ ¯JTi@ B�Ì6_ ›’@i@LB‰ESTABLISÈ6% ›‡Í¼l i@´B†(COPY©6ÿ ›d‡£iÐB i@B„COPÙ6fëBfi@âB…@VIE×6‚!›w½ÿ‰wq&entered at terminal.‡½R ½‰i@žB„VIE×6˜$Cûé•Cì�5d›ç$is in • J!ç$screen >áÑÓÀCç$may be in current file: Iç$screen w>’@i@C†HOPPEÄ{@ÄBƒU/Ä{@C‹CONVEY-COPÙýëB@ÆCƒHOÐ6ÏC«i@WCƒ.TÏ6—>ç$to w>i@õCˆ(CONVEY©6ÂPDúŠwwÏC›d DïCÛC›d4Dfi@áC†CONVEÙ6fÏC›'éyD4—…ÍÓ…Dw4Ç…½ÿÿÛC«ý@ %,D¡Dý,D™Dii@!D‚TÏ6‡o. ÷i—…ûC‡i @D…FOUNÄ{ @VDˆSCAN-1SÔ6”›éíDiÓïDi @ÒD†SEARCÈ6ÌDT‡%• ¤?éZE—…4×R¼=Ø%=ÝDwéFE%â ‡LéDEÌDBiÃ%wéTEÍ>Ó E… Ø… …ÌD›i @§D†DELETÅ6—í%=…w8é•E• ‡w=d؇ÞdÕi @ÕC†INSERÔ6Ç—í%=…—w=dÇÞi @ÄD‡REPLACÅ6ÇíÞi @ÊE„BLOÔý¯O @ŸE…-LINÅý! @íE‚AÔFœOÍkØ• ð «â «Çói @hE„DARË&FÆOÍkóð Tâ Ti @ûE†EDITOÒ…+VRŠR™R3P@ @‡.SCREEÎýäO @„AUTÏá+# @^FˆEDITING¿{ @‡CHANGEÄ{ @mF‡INSTALÌ6xF›Çé¸F½XFeF›«m0xFBˆFTJTi@~F…C/SCÒ�@ƒTOÐ6¢ Ti@ÀF�Ã6¢ ›dÈFb ¢ «i@ÎF�Ô6ÔF…// âFi@ÞF†CURSOÒ6¢ ›i@öF…LINE£6G…/R i@G„COL£6G…/b i@/G‚+Ô6#GdúFi@BG†'STARÔ6_ ›Œi@SG‡'CURSOÒ6\GGdi@hG…'LINÅ6rG6G…i@~G†#AFTEÒ6…/6G…i@’GŠ#REMAININÇ6 G…i@§G„#ENÄ6´G6Gdi@ŽFˆMODIFIEÄ6ˆFB i@ÓGƒEOÓ�^@ÀG…?TEXÔ6%ðGíwéH=…/4Õ=ZÓH… çi@öG…C/PAÄ�T@&H‡'INSERÔ6.Hdi@4H…'FINÄ6>H.Hdi@JH†'VIDEÏ6RH.Hdi@NF‡.FRAMEÄ6ç$'çžç$'i@sH….BUFÓ6ç$I >H}Hç$F RH}Hi@^Hˆ?MISSINÇ6éÜHiRH}Hç$ not found Q-i@³H„KEEÐ6†G…/>HZi@àH�Ë6RH.HÞ>HRH.HÞ>H.HÞi@õH�×6i@I„'C#Á6rG›GÞGi@Gƒ(I©6>HþG¨*Ii@6I†(TILL©6RHþG*IüD¾Hi@#Iƒ'F«6RH¼di@êG†ID-LEÎ� @uI‚IÄ{ @cI…STAMÐ6‰I\G…/d~IQ…~IQÞi@˜I†?STAMÐ6ˆF›éÓI IˆFTi@„I�É6HþGi†G…/ÞÞGi@×I�Õ6…/âF†G…/—ÇG¨EûIi@÷I�Ø6çH†GÇG…/qEÞGi@çI…SPLIÔ6…/• ÕrG´G¨EÞGi@�H„JOIÎ6†G…/d…/*I¨Ei@?J„WIPÅ6\G ÕÞGi@J�Í6Üq&Use G !i@vJ�Ç6…// ‡£d…/>HZ…/wâFJ…/âFi@]J…BRINÇ64‡\ãJw;¥JÙJii@ÇJ…FIND¿6RHþGrG´GüDi@éJ�Æ6ñJ¾HiIâFi@¡J�Ó6ÍÖ/ñJé)KiIâFOiê—_ ›\hKŽBÔFRHçrG´GüDéWKiIâFiÜjÓYKiúq&Break!7K¾Hi@‹J�Å6RH¼wwâF*IÇqEi@)J�Ä6KrKi@K�Ò6rKÛIi@ˆK„TILÌ6*ISIiIqEi@–K�Ê6*ISIqEi@K‚KÔ6rGSIiI>HZi@¤K‚DØ�@ÞK‚DÙ�@¹K….LINÅ6#G×O¼†G6GP ½^S rG›GP i@ôK‰REDISPLAÙ6×îKdFw×O¼w…// \Gd…/ž¼>â ›çEi@ÉKˆCHANGED¿6…// w\Gd‡gHd…/Âi@L„.ALÌ6J›éàLãKÃFp@â ›çEÃI“/Ã\¸L;cLé´L;(L¨L\GgH ÞýFüKýFõEýFâ Ti@nK‡EDIT-AÔ6G…/@ ‡ãKd‡îKdFi@}LƒNE×6“/‡\>M;úFîL=TÔJ›é2MûIÓ8M;(LjXFMXFi@XL†GET-IÄ6‰I~I™¸é�Mç$Enter your ID: ~IÃ\ƒM½.S yM~Iò‰I~Ihi@F„DONÅ6xF›éÎMÎ0xFT_ Â/Ò›'Çé¿Mç$Unç$modifiedÃIIJTeFO «i@7F‚EÄ6MM˜F@FgH Ã"F„Li@ÜM„EDIÔ6ÍÖ/_ «ÔFáMi@àEƒFIØ6=›˜$Cûé0Nì�5dóÑþM=«Ki@‘M‡(WHERE©6J›é`NþMQâF çRHZi@óD†SHADO×…+ NsOu\JF@ŒDISPLACEMENÔ6›4ýç¸i@{N‰(>SHADOW©6ŠN• Êé¾NdÓÀN…i@‡>SHADO×6% ›¬Ni@ÄNŠ>IN-SHADO×65 ›¬Ni@÷M�Á6_ ›ÎN_ «i@„COPÙ6f• ëBÎN‡çN‡ëBfi@O†CONVEÙ6• _DçN‡çN‡ÃÎNÃçN…ÏC¯_Di@&O�Ç6• ¥J÷N…/wâF‡çN‡¥J I÷Ni@ÚN…BRINÇ64‡\�Ow;UO…Oii@éK„(AT©6… i@•O†(BLOT©6…/‡…Ïi@¦O†(DARK©6½Ã\ØOÒOi@M….DUMÂ6üKi@½O„DUMÂ6½½#J!eFl ½äOí,XF½œOí,F½¯Oí,çE½!í,õE½ÆOí,"Fi@DM…SMARÔ6½{½J!eFl ½„Lí,XFi@äL‡ANSI-AÔ6 ›Øº½S ½[S 4ÃO½;S 4ÃO½HS «i@WP‰ANSI-BLOÔ6i½S ç$[Ki@—P‰ANSI-DARË6½S ç$[2Ji@¶PŠANSI--LINÅ6½S ç$[1Mi@ÔP„ANSÉ6;P½aPí,F½ÂPí,"F½áPí,õE½£Pí,çEi@ðO†H19-AÔ6½S ½YS ½ dS ½ dS i@"QˆH19-DARË6½S ½ES i@MQˆH19-BLOÔ6i½S ½KS i@jQ‰H19--LINÅ6½S ½MS i@‰Q…HEATÈ6;P½+Qí,F½XQí,"F½•Qí,õE½uQí,çEi@§Q†TVI-AÔ6½S ½=S ½ dS ½ dS i@×QˆTVI-BLOÔ6i½S ½TS i@RˆTVI-DARË6½S i@!R‰TVI--LINÅ6½S ½RS i@8R‰TELEVIDEÏ6;P½àQí,F½,Rí,"F½DRí,õE½ Rí,çEi@óP„QUMÅ6bRi@ÜO…FALCÏ6bRi@N‚.²6Ã]].ž¼i@Q-i @ÞRƒMAÐ6• ›ŸéÒTB‡ìdÓÔThTi @bT…CASEº6+™)ˆ*.*ÍkºTói!@´TŒASSOCIATIVEº6+.*Íkw›Øw›Ã\9UB• ›`é5U… i;ÃÃjU… i"@GT…(SEE©ýÏX"@….WORÄ6w›Z!Ø.Bi"@MU‡.INLINÅ6UUw›>Bi"@eU‡.BRANCÈ6UUw›—…>Bi"@U†.QUOTÅ6UUUUi"@�U‡.STRINÇ6UUç• ž¼di#@°Uˆ.(;CODE©6UU7éîUç$DOES> ÓòUiêi#@ÌU‡.UNNESÔ6ç$; iÃi#@öU‡.FINISÈ6UUiÃi$@�EXECUTION-CLASÓ U½éÓ7\œ#ç$q&.*iÐ$‚Þ)%@V�.EXECUTION-CLASÓêToU‰U‰U‰U‰U‰U¦UºUºU×UVºU‰UVUUi&@YV„.PFÁ6J!_@w›7VlVwú�é�Vii&@’VŠ.IMMEDIATÅ6Z!¼½@‰éâVç$ IMMEDIATEi'@¹V‰.CONSTANÔ6wJ!Â/ç$ CONSTANT Z!Ø.i'@æV‰.VARIABLÅ6wJ!>ç$ VARIABLE wZ!Ø.ç$Value = J!Â/i'@W‚.º6ç$: wZ!Ø.×Ï™Vi'@GW†.DOES¾6ç$DOES> !™Vi'@cWŽ.USER-VARIABLÅ6wJ!Â/ç$USER VARIABLE wZ!Ø.ç$Value = °,Â/i(@W†.DEFEÒ6ç$ DEFERRED wZ!Ø.ç$IS °,›GUi(@ÂW‹.USER-DEFEÒ6ç$USER DEFERRED wZ!Ø.ç$IS °,›GUi(@ïW†.OTHEÒ6wZ!Ø.w›—J!`éSXiç$is CodeOw›7écXlWiO… ç$ is Unknowni)@�DEFINITION-CLASÓ U6�{¦ý)@&X‘.DEFINITION-CLASÓêTLWòVW�WËWýW/Xi*@vX‡((SEE)©6ww›‰X¯XÆVi*@ØTƒSEÅ6˜$GUi,@õT…EPSOÎ6½S i,@óX‡INIT-PÒý!,@•S‡FOOTINÇý[,@?U†L/PAGÅ�B,@'Y„LOGÏ�,@ãX…#PAGÅ{,@6Y„PAGÅ\YšYÍkóÍKY¯ð Tâ Ti,@Y‰FORM-FEEÄ6½ S ½ S i,@QY†(PAGE©60Yð ›—í‚°YªYi,@‘Y‡(SEMIT©6F ›éÎY3ÓÐYÝi,@…SCR#Ó{ALLOT •#i Ö-@ÅX…TEXT¿6Œw¼o½~! éZ ™¸OÓZêi-@îY‚PÒ6wÁÒ?é1Zi=YÍÜY¯ÜYw›ìd«i-@›Xƒ2PÒ6w×O¼…// %½�Õ‡Œ=d…/ÞŒd…/d4…/Þ½�™ži-@GZ„2SCÒ6½Ï—½O½=Ïw½O½Ã\ÒZ• ;MZÈZ… i.@Z‰P-HEADINÇ6½Ïç$Page# KYÂ/½ÏIi.@ØZ‰P-FOOTINÇ6½:Ïç$Forth 83 ModelXYi/@ [ˆPR-STARÔ6F Bð T½¾Yí,S ÜYTÍKY«Yi/@:[‡PR-STOÐ6½Xí,S F Ti/@g[‡PR-PAGÅ6äZÜYTÜYBáÃ\·[w›—½d›œZB¡[i!Yi/@ƒ[‰PR-S-PAGÅ6äZÜYTÜYBáÃ\õ[w›—B›œZ½dß[i!Yi/@¿[ˆPR-FLUSÈ6ÜY›wé.\ÜY›½Êé*\Ã!ZÓ\=Y!ZOi0@CY„SHO×6E[4‡‚g\;öYéS\;!ZÜY›½`éc\�[G\\éo\�[q[i0@QO„SHO×6E[4‡‚®\;öYéš\;!Z;ÎN!ZÜY›½`éª\Ë[ˆ\\é¶\Ë[q[i0@´Y‡LISTINÇ6ÃÁúQ|\i2@>„L.IÄ6‡wØ.w$!Q…dÏi2@t=„SLO×{2@�=ƒREÓ{2@Ö\‡(DEBUG©6ÍM=«A=«5=« >i2@õ\‡'UNNESÔ64w›½i`é:]i3@]…TRACÅ6%—.›Z!½ Ý\ü\›Çú�éÏ]ü\T]Tç$ --> :½C—`é£]ü\›Çü\«½F—`é½]iÔ(-]›é±]½Q—`q&Unbugi >i3@¼\…DEBUÇ6˜$_w8]]i3@sY†RESUMÅ6]Bà >i5@Õ]…TASKº6L)— o;,›Þ“>‡›Øo‡«¥>wodwÊ «½d…¾ «‡‡«o¥ }>¥>o;,›doÕ }>«o·>H#i5@4\ˆSET-TASË6w¾ }>›_Ç—«_—Ê }>›—«‡— }>«i5@YˆACTIVATÅ6—s^Î>i6@í]‹BACKGROUNDº6½� ^o“>_s^a)ˆ*i ^…HELLÏ6ç$8080 Forth 83 Modelç$Version 2.1.0 Modified 01Jun84 ¿ˆ0m0ž+i Ÿ^„MARË6L).*Ík…%ž+i 4_…EMPTÙA_ B:F83.COM M BLËö4HUFFMAN BLK€€ OZ_ƒD+¡6wO Ç% l iN_…ARRAÙ6L)ìH#.*Ík‡ìdi¸^†2ARRAÙ6L)½/ H#.*Ík‡ììdi–_„0OR±6O͉iõ_…HAPPÙ`ÿÿÍkw›é4`Tç$ ...Working Ó<`B½ Ͻ òiÏ_ˆREADING¿{°_ˆIO-ARRAÙ6L)wV#ìH#.*Íkw›Q`›é…`i4‡‚®\;öYéš\;!Z;ÎN!ZÜY›½`éª\Ë[ˆ\\é¶\Ë[q[i0@´Y‡LISTINÇ6ÃÁúQ|\i2@>„L.IÄ6‡wØ.w$!Q…dÏi2@t=„SLO×{ \ System Support 1 Load screen 13Apr84map1 4 +THRU CR .( Clock Loaded ) EXIT \ Months and Days 07Apr84map: "ARRAY ( compile: string-length -- ) ( run: -- a n ) CREATE C, ASCII " WORD COUNT >R HERE R@ MOVE R> ALLOT DOES> COUNT >R SWAP R@ * + R> ; 3 "ARRAY "MONTH "JanFebMarAprMayJunJulAugSepOctNovDec" 3 "ARRAY "DAY "SunMonTueWedThuFriSat" HEX 5A CONSTANT CLK-C CLK-C 1+ CONSTANT CLK-D : CLK@ (S n -- nib ) 10 OR CLK-C PC! CLK-D PC@ ; : CLK! (S n a -- ) 40 CLK-C PC! 40 OR DUP CLK-C PC! SWAP CLK-D PC! DUP 60 OR CLK-C PC! CLK-C PC! ; : CLOCK? (S -- f ) 0 CLK@ 0F0 AND 0= ; DECIMAL  \ Clock 07Apr84map: CLK# (S n -- ) CLK@ 48 OR HOLD ; : (DATE) (S -- a n ) <# 11 CLK# 12 CLK# 9 CLK@ 10 CLK@ 10 * + 1- "MONTH DUP NEGATE HLD +! HLD @ SWAP CMOVE 7 CLK# 8 CLK# 0 0 #> ; : (TIME) (S -- a n ) 0. <# 0 CLK# 1 CLK# ASCII : HOLD 2 CLK# 3 CLK# ASCII : HOLD 4 CLK# 5 CLK@ 3 AND 48 OR HOLD #> ; : ?AM/PM (S -- ) 5 CLK@ DUP 8 AND 0= IF 4 AND IF ." PM" ELSE ." AM" THEN ELSE DROP THEN ; : DAY (S -- ) 6 CLK@ "DAY TYPE SPACE ; : DATE (S -- ) (DATE) TYPE SPACE ; : TIME (S -- ) (TIME) TYPE SPACE ; : NOW (S -- ) CLOCK? IF DAY DATE TIME ?AM/PM THEN ; \ Set Time 07Apr84map: INPUT? ( -- [n] f ) QUERY BL WORD NUMBER? NIP DUP 0= IF NIP THEN ; : SET-TIME (S -- ) CR ." Day of week? ( 0 to 6 ) " INPUT? IF 6 CLK! THEN CR ." Day of month? " INPUT? IF 10 /MOD 8 CLK! 7 CLK! THEN CR ." Month? " INPUT? IF 10 /MOD 10 CLK! 9 CLK! THEN CR ." Year? " INPUT? IF 10 /MOD 12 CLK! 11 CLK! THEN CR ." Hour? " INPUT? IF DUP 12 > IF 12 - 4 ELSE 0 THEN SWAP 10 /MOD ROT OR 5 CLK! 4 CLK! THEN CR ." Minute? " INPUT? IF 10 /MOD 3 CLK! 2 CLK! THEN 0 1 CLK! 0 0 CLK! CR ." Hit any key to start." CR KEY DROP 0 CLK-C PC! ; \ Automatic EDITOR ID 10Apr84map: (WHO) (S -- ) " map" ; : WHO (S -- ) (WHO) TYPE SPACE ; : SET-ID (S -- ) CLOCK? IF (DATE) [ EDITOR ] ID SWAP CMOVE (WHO) ID 7 + SWAP CMOVE THEN HELLO ; ' SET-ID IS BOOT    \ Months and Days 07Apr84map"ARRAY ( compile: string-length -- ) ( run: -- a n ) Defining word for string arrays. "MONTH Array of the names of the months. "DAY Array of the names of the days of the week. CLK-C CLK-D addresses of the clock IO ports. CLK@ get a byte from the clock. CLK! give a byte to the clock. CLOCK? test for presence of the clock. \ Clock 07Apr84mapCLK# (S n -- ) prefix a number from the clock to the output.(DATE) (S -- a n ) Build an output string representing the date. Leave its address and length. (TIME) (S -- a n ) Build an output string representing the time. Leave its address and length. ?AM/PM (S -- ) If in 12 hour mode, print AM or PM. DAY (S -- ) print the name of the day. DATE (S -- ) print the date. TIME (S -- ) print the time. NOW (S -- ) if there is a clock, print the day, date, and time. \ Set Time 07Apr84mapINPUT? ( -- [n] f ) wait for user to type a number. Leave number and true, or just false if no input. SET-TIME Set the clock. Prompt for input. Entering just a Carraige Return will leave the present value unchanged. \ Automatic EDITOR ID 07Apr84map(WHO) leave address and length of string containing user id. Change this if your initials happen to be different. WHO print user id. SET-ID This replaces the usual cold boot routine. After the usual HELLO, if there is a clock, the EDITOR ID is set to contain the present date and user initials. Set BOOT to use SET-ID. If the executable image of the system is now saved, then when it is run COLD will use SET-ID. \ The Rest is Silence 26Sep83map************************************************************* ************************************************************* *** *** *** Please direct all questions, comments, and *** *** miscellaneous personal abuse to: *** *** *** *** Henry Laxen or Michael Perry *** *** 1259 Cornell Avenue 1125 Bancroft Way *** *** Berkeley, California Berkeley, California *** *** 94706 94702 *** *** *** *** (415) 525-8582 (415) 644-3421 *** *** *** ************************************************************* *************************************************************  \ Load Screen for 8080 Dependent Code 07Apr84map ONLY FORTH ALSO DEFINITIONS DECIMAL 3 LOAD ( The Assembler ) 9 LOAD ( The Low Level for the Debugger ) 15 LOAD ( The Low Level for the MultiTasker ) 18 LOAD ( The Machine Dependent IO words ) CR .( 8080 Machine Dependent Code Loaded )  \ 8080 Assembler Load Screen 09Apr84mapONLY FORTH ALSO DEFINITIONS 1 4 +THRU ONLY FORTH ALSO DEFINITIONS EXIT The 8080 Assembler is largely due to John Cassady, who recently published it in Forth Dimensions. It implements the full 8080 instruction set as well as structured conditionals. To create an Assembler language definition, use the defining word CODE. It may, but does not have to be, terminated with C;. How the assembler operates is a very interesting example of the power of CREATE DOES> Basically, the instructions are categoriezed and a defining word is created for each category. When the mnemonic for the instruction is interpreted, it compiles itself. \ 8080 Assembler Defining Words & Registers 11Apr84map: LABEL CREATE ASSEMBLER ; 205 CONSTANT DOES-OP 3 CONSTANT DOES-SIZE : DOES? (S IP -- IP' F ) DUP DOES-SIZE + SWAP C@ DOES-OP = ; ASSEMBLER DEFINITIONS : C; END-CODE ; : INIT ; DEFER C, FORTH ' C, ASSEMBLER IS C, DEFER , FORTH ' , ASSEMBLER IS , DEFER ?>MARK FORTH ' ?>MARK ASSEMBLER IS ?>MARK DEFER ?>RESOLVE FORTH ' ?>RESOLVE ASSEMBLER IS ?>RESOLVE DEFER ?NEXT 1- CONSTANT HPUSH >NEXT 2- CONSTANT DPUSH 7 CONSTANT A DPUSH CONSTANT WPUSH 0 CONSTANT B 1 CONSTANT C 2 CONSTANT D 3 CONSTANT E 0 CONSTANT I 1 CONSTANT I' 2 CONSTANT W 3 CONSTANT W' 0 CONSTANT IP 1 CONSTANT IP' 4 CONSTANT H 5 CONSTANT L 6 CONSTANT M 6 CONSTANT PSW 6 CONSTANT SP 6 CONSTANT S : 1MI CREATE C, DOES> C@ C, ; : 2MI CREATE C, DOES> C@ + C, ; : 3MI CREATE C, DOES> C@ SWAP 8* + C, ; : 4MI CREATE C, DOES> C@ C, C, ; : 5MI CREATE C, DOES> C@ C, , ;  \ 8080 Assembler mnemonics 09MAR83HHLHEX 00 1MI NOP 76 1MI HLT F3 1MI DI FB 1MI EI 07 1MI RLC 0F 1MI RRC 17 1MI RAL 1F 1MI RAR E9 1MI PCHL EB 1MI XCHG C9 1MI RET C0 1MI RNZ C8 1MI RZ D0 1MI RNC D8 1MI RC 2F 1MI CMA 37 1MI STC 3F 1MI CMC F9 1MI SPHL E3 1MI XTHL E0 1MI RPO E8 1MI RPE F8 1MI RM 27 1MI DAA 80 2MI ADD 88 2MI ADC 90 2MI SUB 98 2MI SBB A0 2MI ANA A8 2MI XRA B0 2MI ORA B8 2MI CMP 02 3MI STAX 04 3MI INR 03 3MI INX 09 3MI DAD 0B 3MI DCX C1 3MI POP C5 3MI PUSH C7 3MI RST 05 3MI DCR 0A 3MI LDAX D3 4MI OUT DB 4MI IN C6 4MI ADI CE 4MI ACI D6 4MI SUI DE 4MI SBI E6 4MI ANI EE 4MI XRI F6 4MI ORI FE 4MI CPI 22 5MI SHLD CD 5MI CALL 2A 5MI LHLD 32 5MI STA 3A 5MI LDA C3 5MI JMP C2 5MI JNZ CA 5MI JZ D2 5MI JNC DA 5MI JC E2 5MI JPO EA 5MI JPE F2 5MI JP FA 5MI JM \ 8080 Assembler Branches 08Apr84mapDA CONSTANT C0= D2 CONSTANT C0<> D2 CONSTANT CS C2 CONSTANT 0= CA CONSTANT 0<> E2 CONSTANT PE F2 CONSTANT 0< FA CONSTANT 0>= : NOT 8 [ FORTH ] XOR ; : NEXT >NEXT JMP ; : MOV 8* 40 + + C, ; : MVI 8* 6 + C, C, ; : LXI 8* 1+ C, , ; : IF C, ?>MARK ; : THEN ?>RESOLVE ; : ELSE C3 ( JMP ) IF 2SWAP THEN ; : BEGIN ? VARIABLE CNT VARIABLE 'DEBUG ASSEMBLER LABEL SSUB ( HL = HL - DE ) L A MOV E SUB A L MOV ( LOW BYTE ) H A MOV D SBB A H MOV ( HI BYTE ) RET LABEL ?RANGE ( COMPARE DE WITH LOW & HI ) ( RETURNS CS IF IN RANGE ) LHLD SSUB CALL CMC RET  \ Subroutine to Patch NEXT 26MAY83HHLASSEMBLER HEX LABEL FNEXT 0A A MVI >NEXT STA ( B LDAX ) 03 A MVI >NEXT 1+ STA ( B INX ) 6F A MVI >NEXT 2+ STA ( A L MOV ) RET LABEL DNEXT B LDAX B INX A L MOV B LDAX B INX A H MOV HERE M E MOV H INX M D MOV XCHG PCHL CONSTANT DNEXT1 DECIMAL \ Debug version of Next 04Apr84mapASSEMBLER LABEL DEBNEXT B D MOV C E MOV ?RANGE CALL CS IF CNT LDA A INR CNT STA 2 CPI 0= IF A XRA CNT STA FNEXT CALL B PUSH 'DEBUG LHLD DNEXT1 JMP THEN THEN DNEXT JMP \ Patch and Fix NEXT 13Apr84mapHEX CODE PNEXT C3 A MVI >NEXT STA DEBNEXT H LXI >NEXT 1+ SHLD >NEXT JMP C; FORTH DEFINITIONS CODE UNBUG (S -- ) BUG FNEXT ASSEMBLER CALL >NEXT JMP C; DECIMAL  \ Load Screen for the MultiTasker 18APR83HHLONLY FORTH ALSO DEFINITIONS 1 2 +THRU CR .( MultiTasker Low Level Loaded ) ONLY FORTH ALSO DEFINITIONS EXIT The MultiTasker is loaded as an application on top of the regular Forth System. There is support for it in the nucleus in the form of USER variables and PAUSEs inserted inside of KEY EMIT and BLOCK. The Forth multitasking scheme is co-operative instead of interruptive. All IO operations cause a PAUSE to occur, and the multitasking loop looks around at all of the current task for something to do. \ Multitasking low level 30Sep83mapCODE (PAUSE) (S -- ) B PUSH ( IP to stack ) RP LHLD H PUSH ( RP to stack ) 0 H LXI SP DAD XCHG ( SP in DE ) UP LHLD E M MOV H INX D M MOV H INX ( SP to USER area ) H INX PCHL ( Jump to USER+3 ) C; CODE RESTART (S -- ) -3 H LXI D POP D DAD UP SHLD ( Set UP to new user ) M E MOV H INX M D MOV XCHG SPHL ( Restore stack ) H POP RP SHLD ( Return stack ) B POP ( Restore IP ) NEXT C; HEX C3CF ENTRY ! ( RST1 then JMP ) DECIMAL ENTRY LINK ! ( only task points to itself ) \ Manipulate Tasks 12Oct83map: LOCAL (S base addr -- addr' ) UP @ - + ; : @LINK (S -- addr ) LINK @ ; : !LINK (S addr -- ) LINK ! ; : SLEEP (S addr -- ) 0 SWAP ENTRY LOCAL C! ; : WAKE (S addr -- ) 207 SWAP ENTRY LOCAL C! ; : STOP (S -- ) UP @ SLEEP PAUSE ; : SINGLE (S -- ) ['] PAUSE >BODY ['] PAUSE ! ; : MULTI (S -- ) 195 ( JMP ) 8 C! ['] RESTART @ 9 ! ['] (PAUSE) @ ['] PAUSE ! ; \ Load Screen for Machine Dependent IO Words 04Apr84mapONLY FORTH ALSO DEFINITIONS 1 1 +THRU CR .( Machine Dependent IO Words Loaded ) ONLY FORTH ALSO DEFINITIONS EXIT Since the 8080 has a seperate IO path, we define a Forth interface to it. Use PC@ and PC! to read or write directly to the 8080 IO ports. \ Machine dependent IO words 04Apr84mapCODE PC@ (S port# -- n ) D POP HERE 5 + H LXI ( Sorry ) E M MOV 0 IN A L MOV 0 H MVI HPUSH JMP C; CODE PC! (S n port# -- ) D POP HERE 7 + H LXI ( Sorry again ) E M MOV H POP L A MOV 0 OUT NEXT C;  \ Load Screen for 8080 Dependent Code 26MAY83HHL All of the Machine Dependent Code for a Particular Forth Implementation is factored out and placed into this file. For The 8080 there are 3 different components. The 8080 assembler, The run time debugger, which must have knowledge of how NEXT is implemented, and the MultiTasker, which uses code words to WAKE tasks and put them to SLEEP.   \ 8080 Assembler Defining Words & Registers 11Apr84mapLABEL marks the start of a subroutine whose name returns its address. DOES-OP Is the op code of the call instruction used for DOES> U C; A synonym for END-CODE INIT does nothing for the 8080. Deferring the definitions of the commas, marks, and resolves allows the same assembler to serve for both the system and the Meta-Compiler. \ 8080 Assembler Defining Words & Registers 09MAR83HHL On the 8080, register names are constants. Nearly all instructions fall into the one of the five classes 1MI thru 5MI. \ 8080 Assembler mnemonics 26MAY83HHL Each mnemonic is defined as a member of a class, with an associated op code byte. \ 8080 Assembler Branches 26MAY83HHLIt is convenient to rename some of the branches for use with the structured conditionals. NEXT is a macro which assembles a jump to >NEXT. There are a few special case instructions not handled in the 1MI thru 5MI schema. The structured conditionals make it easier to write correct and understandable code, and reduce the need for forward reference and meaningless labels with silly names.   \ 16 Bit Subtract Subroutine 04Apr84mapBUG The vocabulary that holds the Debugging Words The range of IP values we are interested in CNT is a pass counter. 'DEBUG contains the address of the TRACE routine. SSUB A machine language subroutine that performs a 16 bit subtract. Thank you Intel for making it so simple! ?RANGE A machine language subroutine that sets the carry flag if the IP is in the Range we are interested in. \ Subroutine to Patch NEXT 26MAY83HHL FNEXT A machine language subroutine that Fixes NEXT back to the way it used to be. DNEXT A copy of next that gets exeucted instead of the normal one. DNEXT1 The rest of NEXT \ Debug version of Next 26MAY83HHL DEBNEXT is the debugger's version of next If the IP is between then the contents of the execution variable 'DEBUG are executed. First the IP is pushed onto the parameter stack. The word pointed to by 'DEBUG can be any high or low level word so long as it discards the IP that was pushed before it is called, and it must terminate by callingPNEXT to patch next once again for more tracing. \ Patch and Fix NEXT 26MAY83HHL PNEXT patches Forth's Next to jump to DEBNEXT. This puts us into DEBUG mode and allows for tracing. FIX restores Forth's Next to its original condition. Effectively disabling tracing.   \ Multitasking low level 26MAY83HHL(PAUSE) (S -- ) Puts a task to sleep by storing the IP and the RP on the parameter stack. It then saves the pointer to the parameter stack in the user area and jumps to the code pointed at by USER+3, switching tasks. RESTART (S -- ) Sets the user pointer to point to a new user area and restores the parameter stack that was previously saved in the USER area. Then pops the RP and IP off of the stack and resumes execution. The inverse of PAUSE. Initialize current User area to a single task. \ Manipulate Tasks 12Oct83mapLOCAL Map a User variable from the current task to another task@LINK Return a pointer the the next tasks entry point !LINK Set the link field of the current task (perhaps relative)SLEEP makes a task pause indefinitely. WAKE lets a task start again. STOP makes a task pause indefinitely. SINGLE removes the multi-tasker's scheduler/dispatcher loop. MULTI installs the multi-tasker's scheduler/dispatcher loop. By patching the appropriate INT vector and enabling PAUSE.  \ Machine dependent IO words 04Apr84mapPC@ (S port# -- n ) Fetch the value at the given input port and push it onto the stack. Sorry about the self modifying code!. PC! (S n port# -- ) Write the value to the specified port number. See P@ for apology.  \ The Rest is Silence 04Apr84map************************************************************* ************************************************************* *** *** *** Please direct all questions, comments, and *** *** miscellaneous personal abuse to: *** *** *** *** Henry Laxen or Michael Perry *** *** 1259 Cornell Avenue 1125 Bancroft Way *** *** Berkeley, California Berkeley, California *** *** 94706 94702 *** *** *** ************************************************************* ************************************************************* \ Expand the Huffman encoded files for F83 01May84mapFROM HUFFMAN.BLK OK : PROMPT (S -- ) CR ." To expand your F83 system, make sure this disk" CR ." is in drive A: and that an empty, formatted disk is" CR ." in drive B:. You will need three disks." CR ." When ready, press any key to continue. " HERE 1 EXPECT ( Give user a chance to get out ) ; : WAKE-USER (S -- ) 100 0 DO BEEP KEY? ?LEAVE LOOP ; : SWITCH-DISKS (S -- ) WAKE-USER CR ." Your disk is now full, please" CR ." remove it and insert another empty, formatted disk" CR ." in drive B: and press any key to continue. " HERE 1 EXPECT [ DOS ] 0 25 BDOS RESET SELECT ; --> \ Expand the Huffman encoded files for F83 24Apr84map: HI HELLO CR ." To expand your system, type XYZZY " ; ' HI IS BOOT DEFINE EXPAND80.BLK : XYZZY (S -- ) CR ." This takes a long long long time, and bells will " CR ." ring when you are needed, so I suggest you get it" CR ." started and have a long cool drink." PROMPT EXPAND80.BLK [ DOS ] OPEN-FILE [ FORTH ] 3 LOAD ; : EXPAND CR >IN @ ." Expanding: " BL WORD COUNT TYPE ." into " BL WORD COUNT TYPE SPACE >IN ! EXPAND ; : COMPRESS CR >IN @ ." Compressing: " BL WORD COUNT TYPE ." into " BL WORD COUNT TYPE SPACE >IN ! COMPRESS ; MARK THEN SAVE-SYSTEM RUNME.COM \ Expand the Huffman encoded files for F83 03MAY84HHL THEN EXPAND E80.HUF B:EXTEND80.BLK THEN EXPAND C80.HUF B:CPU8080.BLK THEN EXPAND UT.HUF B:UTILITY.BLK SWITCH-DISKS THEN EXPAND HF.HUF B:HUFFMAN.BLK THEN EXPAND CK.HUF B:CLOCK.BLK THEN EXPAND FX.HUF B:F83-FIXS.TXT WAKE-USER EMPTY ' HELLO IS BOOT SAVE-SYSTEM B:F83.COM CR .( Congratulations, you have a full) CR .( F83 system. May the Forth be with you.) ( These are all of the files that are distributed with a Perry & Laxen public domain Forth system. They will be expanded with this utility. Please be patient. ) \ Expand the Huffman encoded files for F83 24Apr84mapTHEN COMPRESS META80.BLK M80.HUF THEN COMPRESS KERNEL80.BLK K80.HUF THEN COMPRESS EXTEND80.BLK E80.HUF THEN COMPRESS CPU8080.BLK C80.HUF THEN COMPRESS UTILITY.BLK UT.HUF THEN COMPRESS HUFFMAN.BLK HF.HUF THEN COMPRESS CLOCK.BLK CK.HUF THEN COMPRESS F83-FIXS.TXT FX.HUF WAKE-USER \ The Rest is Silence 03Apr84map************************************************************* ************************************************************* *** *** *** Please direct all questions, comments, and *** *** miscellaneous personal abuse to: *** *** *** *** Henry Laxen or Michael Perry *** *** 1259 Cornell Avenue 1125 Bancroft Way *** *** Berkeley, California Berkeley, California *** *** 94706 94702 *** *** *** ************************************************************* ************************************************************* ( Load Screen to Bring up Standard System 07Apr84map) CR .( Loading system extensions.) CR 2 VIEW# ! ( This will be view file# 2 ) WARNING OFF 3 LOAD ( BASICS ) 6 LOAD ( FILE-INTERFACE ) FROM CPU8080.BLK 1 LOAD ( Machine Dependent Code ) FROM UTILITY.BLK 1 LOAD ( Standard System Utilities ) WARNING ON --> \ Load up the system 26May84map: HELLO (S -- ) CR ." 8080 Forth 83 Model" CR ." Version 2.1.0 Modified 01Jun84 " EMPTY-BUFFERS ONLY FORTH ALSO DEFINITIONS DEFAULT ; ' HELLO IS BOOT \ 13 LOAD ( Configuration: change and load as desired. ) : MARK (S -- ) CREATE DOES> (FORGET) FORTH DEFINITIONS ; MARK EMPTY HERE FENCE ! CR .( System has been loaded, Size = ) HERE U. SAVE-SYSTEM F83.COM CR .( System saved as F83.COM ) ( Commenting and Loading Words 16Oct83map) 64 CONSTANT C/L 16 CONSTANT L/SCR : \ ( -- ) >IN @ NEGATE C/L MOD >IN +! ; IMMEDIATE : (S ( -- ) [COMPILE] ( ; IMMEDIATE : ? (S adr -- ) @ . ; : ?ENOUGH (S n -- ) DEPTH 1- > ABORT" Not enough Parameters" ; : THRU (S n1 n2 -- ) 2 ?ENOUGH 1+ SWAP ?DO I LOAD LOOP ; : +THRU (S n1 n2 -- ) BLK @ + SWAP BLK @ + SWAP THRU ; : --> (S -- ) >IN OFF 1 BLK +! ; IMMEDIATE 1 2 +THRU ( Rest of Basic Utilities ) \ The ALSO and ONLY Concept 07Feb84mapCONTEXT DUP @ SWAP 2+ ! ( Make FORTH also ) VOCABULARY ROOT ROOT DEFINITIONS : ALSO (S -- ) CONTEXT DUP 2+ #VOCS 2- 2* CMOVE> ; : ONLY (S -- ) ['] ROOT >BODY CONTEXT #VOCS 1- 2* 2DUP ERASE + ! ROOT ; : SEAL (S -- ) ' >BODY CONTEXT #VOCS 2* ERASE CONTEXT ! ; : PREVIOUS (S -- ) CONTEXT DUP 2+ SWAP #VOCS 2- 2* CMOVE CONTEXT #VOCS 2- 2* + OFF ; \ The ALSO and ONLY Concept 28AUG83HHL: FORTH FORTH ; : DEFINITIONS DEFINITIONS ; : ORDER (S -- ) CR ." Context: " CONTEXT #VOCS 0 DO DUP @ ?DUP IF BODY> >NAME .ID THEN 2+ LOOP DROP CR ." Current: " CURRENT @ BODY> >NAME .ID ; : VOCS (S -- ) VOC-LINK @ BEGIN DUP #THREADS 2* - BODY> >NAME .ID @ DUP 0= UNTIL DROP ; ONLY FORTH ALSO DEFINITIONS \ Load Screen for DOS Interface 07Apr84mapDOS DEFINITIONS 1 6 +THRU FORTH DEFINITIONS CR .( File Interface Loaded ) \S The DOS interface consists of a set of words that access the BDOS functions of DOS, such as making, opening, and deleting files. There is also a word that parses a string and creates a file control block. Finally the word SAVE can be used to save the contents of memory as a DOS file. \ DOS Interface 10Apr84mapCREATE FCB2 B/FCB ALLOT : RESET (S -- ) 0 13 BDOS DROP ; : CLOSE (S fcb -- ) 16 BDOS DOS-ERR? ABORT" Close error" ; : SEARCH0 (S fcb -- n ) 17 BDOS ; : SEARCH (S fcb -- n ) 18 BDOS ; : DELETE (S fcb -- n ) 19 BDOS ; : READ (S fcb -- ) 20 BDOS DOS-ERR? ABORT" Read error" ; : WRITE (S fcb -- ) 21 BDOS DOS-ERR? ABORT" Write error" ; : MAKE-FILE (S fcb -- ) 22 BDOS DOS-ERR? ABORT" Can't MAKE File " ; \ Create File Control Blocks 24Apr84map: (!FCB) (S Addr len FCB-addr --- ) DUP B/FCB ERASE DUP 1+ 11 BLANK >R OVER 1+ C@ ASCII : = IF OVER C@ [ ASCII A 1- ] LITERAL - R@ C! 2 /STRING THEN R> 1+ -ROT 0 DO DUP C@ ASCII . = IF SWAP 8 I - + ELSE 2DUP C@ SWAP C! SWAP 1+ THEN SWAP 1+ LOOP 2DROP ; : !FCB (S FCB-addr ) BL WORD COUNT CAPS @ IF 2DUP UPPER THEN ROT (!FCB) ; : SELECT (S drive -- ) ( DUP 9 BIOS 0= ABORT" Illegal drive " ) 14 BDOS DROP ; \ Save a Core Image as a File on Disk 04Apr84mapDEFER HEADER ' NOOP IS HEADER : SAVE (S Addr len --- ) FCB2 DUP !FCB DUP DELETE DROP DUP MAKE-FILE -ROT HEADER BOUNDS ?DO I SET-DMA DUP WRITE 128 +LOOP CLOSE ; FORTH DEFINITIONS : MORE (S n -- ) [ DOS ] 1 ?ENOUGH CAPACITY SWAP DUP 8* FILE @ MAXREC# +! BOUNDS ?DO I BUFFER B/BUF BLANK UPDATE LOOP SAVE-BUFFERS FILE @ CLOSE ; : CREATE-FILE (S #blocks -- ) [ DOS ] FCB2 DUP !FILES DUP !FCB MAKE-FILE MORE ; \ Display Directory 13Apr84mapDOS DEFINITIONS : .NAME (S n -- ) #OUT @ C/L > IF CR THEN 32 * PAD + 1+ 8 2DUP TYPE SPACE + 3 TYPE 3 SPACES ; FORTH DEFINITIONS : DIR (S -- ) [ DOS ] " ????????.???" FCB2 (!FCB) CR PAD SET-DMA FCB2 SEARCH0 BEGIN .NAME FCB2 SEARCH DUP DOS-ERR? UNTIL DROP ; : DRIVE? (S -- ) 0 25 BDOS ASCII A + EMIT ." : " ; : A: (S -- ) [ DOS ] 0 SELECT ; : B: (S -- ) [ DOS ] 1 SELECT ; DOS DEFINITIONS \ Define and Open files 04Apr84map: FILE: (S -- fcb ) >IN @ CREATE >IN ! HERE DUP B/FCB ALLOT !FCB DOES> !FILES ; : ?DEFINE (S -- fcb ) >IN @ DEFINED IF NIP >BODY ELSE DROP >IN ! FILE: THEN ; FORTH DEFINITIONS : DEFINE (S -- ) [ DOS ] ?DEFINE DROP ; : OPEN (S -- ) [ DOS ] ?DEFINE !FILES OPEN-FILE ; : FROM (S -- ) [ DOS ] ?DEFINE IN-FILE ! OPEN-FILE ; : SAVE-SYSTEM (S -- ) [ DOS HEX ] 100 HERE SAVE ; DECIMAL \ Viewing Source Screens 26May84mapCREATE VIEW-FILES 32 ALLOT VIEW-FILES 32 ERASE : VIEWS (S n -- ) [ DOS ] ?DEFINE 2DUP 40 + ! BODY> SWAP 2* VIEW-FILES + ! ; 1 VIEWS KERNEL80.BLK 2 VIEWS EXTEND80.BLK 3 VIEWS CPU8080.BLK 4 VIEWS UTILITY.BLK \ My normal configuration 07Apr84mapCAPS ON ' EPSON IS INIT-PR ' FORM-FEED IS PAGE ' (WHERE) IS WHERE EDITOR QUME FORTH 5 VIEWS CLOCK.BLK FROM CLOCK.BLK 1 LOAD   ( Load Screen to Bring up Standard System 04Apr84map) This is set so that definitions in this file can be VIEWed. BASICS are needed by everything else. FILE-INTERFACE allows convenient use of files. CPU8080.BLK Contains all of the 8080 machine dependent stuff such as the Assembler, the Debug Utility which patches NEXT, and the MultiTasker, which needs some code words in order to function efficiently. UTILITY.BLK Contains all of the standard utilities that are usually resident in a Forth system, such as the editor, the decompiler, a print utility, etc. \ Load up the system 07Apr84mapHELLO (S -- ) Gives the user the sign on message, making him foolishly believe that he is running an 83 Standard System. It also does all of the one time start up code required, such as relocating the heads and opening the screen file, if any. Load configuration. Personalize here. MARK (S -- ) A Defining word that allows you to restore the dictionary to a known state. EMPTY The current state of the dictionary. ( Commenting and Loading Words 25Jul83map) C/L The number of characters per line. L/SCR The number of lines per screen. \ A comment word. Ignores the rest of the line (S Used for Stack Comments. Behaves just like ( ? Displays the contents of an address. ?ENOUGH (S n -- ) Issue an error message if too few parameters on the stack. THRU (S n1 n2 -- ) Load a bunch of screens. +THRU (S n1 n2 -- ) Load a bunch of screens relative to the current screen. --> (S -- ) Load the next screen. \ The ALSO and ONLY Concept 03Apr84map ROOT A small vocabulary for controlling search order. ALSO (S -- ) Adds another vocabulary to the search order. ONLY Erases the search order and forces the ROOT vocabulary to be the first and last. SEAL Usage: SEAL FORTH will change the search order such that only FORTH will be searched. Used for turn-key applications. PREVIOUS The inverse of ALSO, removes the most recently referenced vocabulary from the search order. \ The ALSO and ONLY Concept 03Apr84mapWe initialize the ROOT vocabulary with a few definitions that allow us to do vocabulary related things. ORDER (S -- ) Displays the search order currently in effect. Also displays the CURRENT vocabulary, which is were definitions are placed. VOCS (S -- ) Lists all of the vocabularies that have been defined so far, in the order of their definition.  \ DOS BDOS Interface 10Apr84mapFCB2 Space for a second FCB when needed. RESET Reset the DOS disk system CLOSE Close the given file, and report errors. SEARCH0 Search for the first occurance SEARCH Search for the next occurance. DELETE Remove an old file. READ Read the next sequential record, and report errors. WRITE Write the next sequential record, and report errors. MAKE-FILE create a directory entry for a new file, and report errors. \ Create File Control Blocks 11Apr84map(!FCB) (S Addr len FCB-addr --- ) Set up the filce control block per the specified string. This is the primitive file parse word, which breaks the drive/file name string into a drive specifier, file name, and extension, and leaves the parsed result in the given file control block address. !FCB (S FCB-addr ) Parse the next word in the input stream as a file. If CAPS is false, allow lower case names. SELECT make given drive the default. \ Save a Core Image as a File on Disk 22FEB84MAPHEADER This is different for CP/M-80, CP/M-86, and CP/M-68K. SAVE (S addr len -- ) Save the string specified as a CP/M file whose name is specified following the SAVE word. The current screen file is not disturbed. MORE Extend the size of the current file by n Blocks. CREATE-FILE creates a new file containing the given number of blocks. \ Display Directory 30Mar84map .NAME prints one filename. DIR prints a directory of the current dirve. DRIVE? prints currently selected drive. A: selects drive A as the default. B: selects drive B as the default. \ Open files and list directories 29Mar84mapFILE: (S -- fcb ) Define the next word as a file by allocating an FCB in the dictionary and parsing the next word as a file name. Leave the address of the file control block. ?DEFINE (S -- fcb ) Define the next word as a file if it does not already exist. Leave the address of the file control block. DEFINE (S -- ) Define the following word as a file name without opening it. OPEN (S -- ) Open the following file and make it the current file. FROM (S -- ) Open the following file and make it the current input file. SAVE-SYSTEM (S -- ) Usage: SAVE-SYSTEM NEWNAME.68K Saves an executable image of the system as a file. \ Set up VIEW-FILES table 07Apr84mapVIEW-FILES is an array of pointers to fcbs. VIEWS installs a file into the VIEW-FILES array, and sets the fcb to contain the matching view number. Now initialize the VIEW-FILES array: KERNEL80.BLK was used to generate the precompile code. EXTEND80.BLK was opened on the execute line, loads all extras. CPU8080.BLK has the machine dependent post-compile code. UTILITY.BLK has the machine independent post-compile code.   \ The Rest is Silence 04Apr84map************************************************************* ************************************************************* *** *** *** Please direct all questions, comments, and *** *** miscellaneous personal abuse to: *** *** *** *** Henry Laxen or Michael Perry *** *** 1259 Cornell Avenue 1125 Bancroft Way *** *** Berkeley, California Berkeley, California *** *** 94706 94702 *** *** *** ************************************************************* ************************************************************* \ Load Screen for Pre-Compile 04Apr84mapONLY FORTH ALSO DEFINITIONS FENCE OFF FORGET OUT WARNING OFF : NLOAD CR .S (LOAD) ; ' NLOAD IS LOAD 3 21 THRU ( The Meta Compiler ) ONLY FORTH DEFINITIONS ALSO CR .( Meta Compiler Loaded ) FROM KERNEL80.BLK 1 LOAD  \ Vocabulary Helpers 10Jan84mapONLY FORTH ALSO VOCABULARY META META ALSO META DEFINITIONS VARIABLE DP-T : [FORTH] FORTH ; IMMEDIATE : [META] META ; IMMEDIATE : [ASSEMBLER] ASSEMBLER ; IMMEDIATE : SWITCH (S -- ) NOOP ( Context ) NOOP ( Current ) DOES> DUP @ CONTEXT @ SWAP CONTEXT ! OVER ! 2+ DUP @ CURRENT @ SWAP CURRENT ! SWAP ! ; SWITCH ( Redefine itself ) \ Memory Access Words 04Apr84map0 CONSTANT TARGET-ORIGIN : THERE (S taddr -- addr ) TARGET-ORIGIN + ; : C@-T (S taddr -- char ) THERE C@ ; : @-T (S taddr -- n ) THERE @ ; : C!-T (S char taddr -- ) THERE C! ; : !-T (S n taddr -- ) THERE ! ; : HERE-T (S -- taddr ) DP-T @ ; : ALLOT-T (S n -- ) DP-T +! ; : C,-T (S char -- ) HERE-T C!-T 1 ALLOT-T ; : ,-T (S n -- ) HERE-T !-T 2 ALLOT-T ; : S,-T (S addr len -- ) 0 ?DO COUNT C,-T LOOP DROP ; \ Define Symbol Table Vocabularies 21Dec83mapVOCABULARY TARGET VOCABULARY TRANSITION VOCABULARY FORWARD VOCABULARY USER ONLY DEFINITIONS FORTH ALSO META ALSO : META META ; : TARGET TARGET ; : TRANSITION TRANSITION ; : FORWARD FORWARD ; : USER USER ; : ASSEMBLER ASSEMBLER ; ONLY FORTH ALSO META ALSO DEFINITIONS  \ 8080 Meta Assembler 01AUG83HHL: ?>MARK (S -- f addr ) TRUE HERE-T 0 ,-T ; : ?>RESOLVE (S f addr -- ) HERE-T SWAP !-T ?CONDITION ; : ?MARK ASSEMBLER IS ?>MARK META ' ?>RESOLVE ASSEMBLER IS ?>RESOLVE META ' ? FORWARD-CODE ; \ Create Headers in Target Image 08SEP83HHLVARIABLE WIDTH 31 WIDTH ! VARIABLE LAST-T VARIABLE CONTEXT-T VARIABLE CURRENT-T : HASH (S str-addr voc-addr -- thread ) SWAP 1+ C@ 3 AND 2* + ; : HEADER (S -- ) BL WORD C@ 1+ WIDTH @ MIN ?DUP IF ALIGN BLK @ 4096 + ,-T ( Lay down view field ) HERE CURRENT-T @ HASH DUP @-T ,-T HERE-T 2- SWAP !-T HERE-T HERE ROT S,-T ALIGN DUP LAST-T ! 128 SWAP THERE CSET 128 HERE-T 1- THERE CSET THEN ; \ Meta Compiler Create Target Image 04Apr84map: TARGET-CREATE (S -- ) >IN @ HEADER >IN ! IN-TARGET CREATE IN-META HERE-T , TRUE , DOES> MAKE-CODE ; : RECREATE (S -- ) >IN @ TARGET-CREATE >IN ! ; : CODE (S -- ) TARGET-CREATE HERE-T 2+ ,-T ASSEMBLER !CSP ; ASSEMBLER ALSO DEFINITIONS : END-CODE IN-META ?CSP ; : C; END-CODE ; META IN-META \ Force compilation of target & forward words 07SEP83HHL: 'T (S -- cfa ) CONTEXT @ TARGET DEFINED ROT CONTEXT ! 0= ?MISSING ; : [TARGET] (S -- ) 'T , ; IMMEDIATE : 'F (S -- cfa ) CONTEXT @ FORWARD DEFINED ROT CONTEXT ! 0= ?MISSING ; : [FORWARD] (S -- ) 'F , ; IMMEDIATE \ Meta Compiler Branching & Defining Words 07SEP83HHL: T: (S -- ) SWITCH TRANSITION DEFINITIONS CREATE SWITCH ] DOES> >R ; : T; (S -- ) SWITCH TRANSITION DEFINITIONS [COMPILE] ; SWITCH ; IMMEDIATE : DIGIT? (S CHAR -- F ) BASE @ DIGIT NIP ; : PUNCT? (S CHAR -- F ) ASCII . OVER = SWAP ASCII - OVER = SWAP ASCII / OVER = SWAP DROP OR OR ; : NUMERIC? (S ADDR LEN -- F ) DUP 1 = IF DROP C@ DIGIT? EXIT THEN 1 -ROT 0 ?DO DUP C@ DUP DIGIT? SWAP PUNCT? OR ROT AND SWAP 1+ LOOP DROP ; \ Meta Compiler Transition Words 11Mar84mapT: ( [COMPILE] ( T; T: (S [COMPILE] (S T; T: \ [COMPILE] \ T; : STRING,-T (S -- ) ASCII " PARSE DUP C,-T S,-T ALIGN ; FORWARD: <(.")> T: ." [FORWARD] <(.")> STRING,-T T; FORWARD: <(")> T: " [FORWARD] <(")> STRING,-T T; FORWARD: <(ABORT")> T: ABORT" [FORWARD] <(ABORT")> STRING,-T T; \ Meta Compiler Defining Words 06SEP83HHLFORWARD: : CREATE RECREATE [FORWARD] HERE-T CONSTANT ; : VARIABLE (S -- ) CREATE 0 ,-T ; FORWARD: : DEFER (S -- ) TARGET-CREATE [FORWARD] 0 ,-T ; \ Meta Compiler Defining Words 07SEP83HHLFORTH VARIABLE #USER-T META ALSO USER DEFINITIONS : ALLOT (S n -- ) #USER-T +! ; FORWARD: : VARIABLE (S -- ) SWITCH RECREATE [FORWARD] #USER-T @ DUP ,-T 2 ALLOT META DEFINITIONS CONSTANT SWITCH ; FORWARD: : DEFER (S -- ) SWITCH TARGET-CREATE [FORWARD] SWITCH #USER-T @ ,-T 2 ALLOT ; ONLY FORTH ALSO META ALSO DEFINITIONS \ Meta Compiler Transition Words 04Apr84mapFORTH VARIABLE VOC-LINK-T META FORWARD: : VOCABULARY (S -- ) RECREATE [FORWARD] HERE-T #THREADS 0 DO 0 ,-T LOOP HERE-T VOC-LINK-T @ ,-T VOC-LINK-T ! CONSTANT DOES> @ CONTEXT-T ! ; : IMMEDIATE (S -- ) WIDTH @ IF ( Headers present? ) 64 ( Precedence Bit ) LAST-T @ THERE CSET THEN ; \ Meta Compiler Transition Words 04Apr84mapFORWARD: <(;USES)> FORTH VARIABLE STATE-T META T: ;USES (S -- ) [FORWARD] <(;USES)> IN-META ASSEMBLER !CSP STATE-T OFF T; T: [COMPILE] 'T EXECUTE T; FORWARD: <(IS)> T: IS [FORWARD] <(IS)> T; : IS 'T >BODY @ >BODY !-T ; T: ALIGN T; T: EVEN T; \ Display an unformatted Symbol Table 26Sep83map: .SYMBOLS (S -- ) TARGET CONTEXT @ HERE #THREADS 2* CMOVE BEGIN HERE 4 LARGEST DUP WHILE ?CR ." [[ " DUP .ID DUP NAME> >BODY @ U. ." ]] " N>LINK @ SWAP ! KEY? IF EXIT THEN REPEAT 2DROP IN-META ; \ Meta Compiler Resolve Forward References 07Jan84map: .UNRESOLVED (S -- ) FORWARD CONTEXT @ HERE #THREADS 2* CMOVE BEGIN HERE #THREADS LARGEST DUP WHILE ?CR DUP L>NAME NAME> >BODY RESOLVED? 0= IF DUP L>NAME .ID THEN @ SWAP ! REPEAT 2DROP IN-META ; : FIND-UNRESOLVED (S -- cfa f ) 'F DUP >BODY RESOLVED? ; : RESOLVE (S taddr cfa -- ) >BODY 2DUP TRUE OVER 2+ ! @ BEGIN DUP WHILE 2DUP @-T -ROT SWAP !-T REPEAT 2DROP ! ; : RESOLVES (S taddr -- ) FIND-UNRESOLVED IF >NAME .ID ." Already Resolved" DROP ELSE RESOLVE THEN ; \ Interpretive words for Meta 07SEP83HHL: H: [COMPILE] : ; H: ' 'T >BODY @ ; H: , ,-T ; H: C, C,-T ; H: HERE HERE-T ; H: ALLOT ALLOT-T ; H: DEFINITIONS DEFINITIONS CONTEXT-T @ CURRENT-T ! ;    \ Load Screen for Pre-Compile 10MAR83HHLMeta Compiling is a term to describe the process of regeneratinga Forth system by compiling itself. It is similar in idea to the ordinary notion of compiling in Forth, but has some important differences. First the code that is generated by the Meta Compiler is generally not immediately executable. This maybe for a variety of reasons, such as that the object code generated physically resides at a different address from where it must be to execute correctly. Also, it is possible through Meta Compilation to generate a Forth System for a totally different CPU than the one the Meta Compiler is running on. In such a case, the object code of course is not executable on the Host System. This Screen is the load screen for the Meta Compiler itself. The purpose of this section of the Meta Compiler is to compile Code Words correctly. \ Target System Setup 10MAR83HHL Make Room for HOST definitions Set up the address where Target Compiled Code begins Set up the address where the Target Headers begin Set up the HOST address where Target Image resides Load the Source Screens that define the System Save the System as a CP/M file, ready to be executed \ Vocabulary Helpers 07SEP83HHL META The Meta Compiler Environment, many redefintions DP-T The dictionary Pointer while meta compiling [FORTH] For convenience, an immediate version [META] For convenience, an immediate version SWITCH Exchange the saved values of CONTEXT and CURRENT with themselves. This should be used in pairs, and is only really meaningful in the second occurance. Its purpose is to save and restore the CONTEXT and CURRENT vocabularies. Following the first occurance you should invoke a vocabulary and perhaps DEFINITIONS. \ Memory Access Words 27Jan84mapTARGET-ORIGIN The Offset where the Target Image resides THERE Map a Target address to a Host address C@-T Fetch a byte at the given Target address @-T Fetch a word at the given Target address C!-T Store a byte at the given Target address !-T Store a word at the given Target address HERE-T Target address of next available dictionary byteALLOT-T Allocate more space in the Target dictionary C,-T Add a byte to the Target dictionary ,-T Add a word to the Target dictionary S,-T Add a string to the Target dictionary ALIGN Makes the dictionary even. \ Define Symbol Table Vocabularies 07SEP83HHLTARGET The symbol table for Target definitions TRANSITION Holds special case compiling words, like ." and [ FORWARD Holds all forward references, not neccessary but niceUSER Holds USER version of defining words We add all of the vocabulary names to the ONLY vocabulary so that they are always accessible. This is mainly a convienence during debugging, when something fails and we need to look at different words in various vocabularies to figure out what is going on. Now we are guaranteed that we can reference all of the vocabularies inside META without standing on our heads.   \ 68000 Meta Assembler 12Jan84map?>MARK Set up for a forward branch. ?>RESOLVE Resolve a forward branch. ? Run time forward reference for code compiled by ." ." Compile the unknown run time code, followed by the string. <(")> Run time forward reference for code compiled by " " Compile unknown run time code, followed by string. <(ABORT")> Run time forward ref. for code compiled by ABORT" ABORT" Compile the unknown run time code, followed by the string. \ Meta Compiler Transition Words 06SEP83HHL Forward reference for run time of CREATE & VARIABLECREATE Create a target word whose run time is the run time for VARIABLE. Also create a host word to rreturn Target Here addrVARIABLE Make a variable in the Target Image. Forward reference for run time of DEFER DEFER An execution vector in the Target System. "\ Meta Compiler Transition Words 06SEP83HHL#USER-T Counts the number of user variables defined so far. ALLOT Allocate space in the USER area. Forward reference for run time of USER vars. VARIABLE Create a User variable, which is task local. Forward reference for run time of USER vectorsDEFER Create a task local execution vector. \ Meta Compiler Transition Words 10MAR83HHLVOC-LINK-T Links defined Vocabularies together. Forward reference for run time of VOCABULARY VOCABULARY Create a target word that behaves like a vocabulary. Only one target vocabulary can contain definitions in this meta compiler, but several can be defined. IMMEDIATE If heads are compiled, flip the Target IMMEDIATE bit. \ Meta Compiler Transition Words 12Jan84map<(;USES)> Forward reference for code compiled by ;USES STATE-T True if compiling inside : def. False if outside. ;USES This is a new syntax that can be used to compile a code field whose code already exists. Similar to ;CODE [COMPILE] Compile a TARGET word rather than execute its TRANSITION counterpart. <(IS)> Forward reference for run time of IS IS Compiles the unknown code field of <(IS)> IS The Meta Version of IS actually does the patch. \ Display an unformatted Symbol Table 10MAR83HHL.SYMBOLS Print a primitive unformatted symbol table on the display. This is very useful if you ever need to debug with DDT, you have no idea where the addresses are. You can make it pretty if you like. \ Meta Compiler Resolve Forward References 10MAR83HHL.UNRESOLVED Display all the words in the FORWARD vocabulary that have not already been resolved. You had better resolve them before saving a system, or else they will surely crash when you execute them. FIND-UNRESOLVED Search for a word in the FORWARD vocabulary and return statusRESOLVE Run through the linked list of forward reference and resolve each of the with the given address. RESOLVES The user interface for resolving forward references. Used as follows: ' resolution-name RESOLVES forward-name #\ Interpretive words for Meta 02AUG83HHLH: Save a version of old : for later. Will be redefined. ' How ' should behave during Target Compilation. , How , should behave during Target Compilation. C, How C, should behave during Target Compilation. HERE How HERE should behave during Target Compilation. ALLOT How ALLOT should behave during Target Compilation. DEFINITIONS How DEFINITIONS should behave when interpreted.   \ Meta Compiler Resolve Forward References 10MAR83HHL.UNRESOLVED CPU8080 BLK€'()*+,-./0123456CPU8080 BLK€789:;<=>?@ABCDEFCPU8080 BLKHGHIJKLMNOEXPAND80BLK(PQRSTEXTEND80BLK€UVWXYZ[\]^_`abcdEXTEND80BLKpefghijklmnopqrMETA80 $$$€stuvwxyz{|}~€�‚META80 $$$€ƒ„…†‡ˆ‰Š‹Œ�Ž��‘’META80 $$$€“”•–—˜™š›œ�žŸ ¡¢META80 $$$åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå This is the release date of the disk. åååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå$ Fog Library Disk FOG-CPM.106 Copyright (1986) by Fog International Computer Users Group to the extent not copyrighted by the original author for the exclusive use and enjoyment of its members. Any reproduction or distribution for profit or personal gain is strictly forbidden. For information, contact FOG, P. O. Box 3474, Daly City, CA. 94015-0474. as part of the description of a file indicates that the program is distributed on a "try first, pay if you like it" basis. If you find the program(s) meet your need, please refer to the author's documentation for information on becoming a registered user. Only by registering and paying for the programs you like and use will the authors of such programs continue development. Often, more complete documentation, additional modules, and new releases are available only to registered users. Disk 1 of 3. FORTH 83 -- for all CPM systems. Filename Description -07-00 .86 This is the release date of the disk. -CPM106 .DOC This is the description of the disk contents. F83 .COM 7066 24K ver. 83 [Forth83 1 of 10] This is MVP (Mountain View Press) Forth83. CLOCK .BLK B37D 12K ver. 83 [Forth83 2 of 10] CPU8080 .BLK 4A63 41K ver. 83 [Forth83 3 of 10] EXPAND80.BLK 26C4 5K ver. 83 [Forth83 4 of 10] EXTEND80.BLK AAF7 30K ver. 83 [Forth83 5 of 10] META80 .BLK 5B47 49K ver. 83 [Forth83 6 of 10] escription -07-00 .86 This is the release date of ååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååååå%ååååå&ååååå'ååååå