From 00401077f0a699093f9cd1fcfc926e9c36e02436 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Mon, 25 May 2020 20:16:07 -0400 Subject: [PATCH] wip --- blk/288 | 2 +- blk/289 | 2 +- blk/291 | 2 +- blk/298 | 2 +- blk/328 | 1 - blk/357 | 6 +++--- blk/358 | 4 ++-- blk/360 | 8 ++++---- blk/362 | 8 ++++---- blk/366 | 10 ++++------ blk/371 | 2 +- blk/381 | 2 +- blk/392 | 2 +- blk/399 | 2 +- emul/forth.bin | Bin 6217 -> 6217 bytes 15 files changed, 25 insertions(+), 28 deletions(-) diff --git a/blk/288 b/blk/288 index 88c23cb..0ae793b 100644 --- a/blk/288 +++ b/blk/288 @@ -6,5 +6,5 @@ PC ORG @ 0x22 + ! ( litWord, 0xf7, tight on the 0x100 limit ) E (HL) LDrr, D 0 LDrn, DE INCss, DE INCss, DE ADDIYss, - HL INCss, HL PUSHqq, + HL PUSHqq, JPNEXT, diff --git a/blk/289 b/blk/289 index ef40f08..771ae6b 100644 --- a/blk/289 +++ b/blk/289 @@ -1,5 +1,5 @@ ( Name of BOOT word ) -4 A, L1 BSET 'B' A, 'O' A, 'O' A, 'T' A, +L1 BSET 4 A, 'B' A, 'O' A, 'O' A, 'T' A, PC ORG @ 1 + ! ( main ) ( STACK OVERFLOW PROTECTION: See B76 ) diff --git a/blk/291 b/blk/291 index 2fb6dbe..3a22926 100644 --- a/blk/291 +++ b/blk/291 @@ -5,7 +5,7 @@ PC ORG @ 4 + ! ( find ) BC PUSHqq, HL PUSHqq, ( First, figure out string len ) - HL DECss, A (HL) LDrr, A ORr, + A (HL) LDrr, A ORr, ( special case. zero len? we never find anything. ) IFNZ, ( fail-B296 ) ( Let's do something weird: We'll hold HL by the *tail*. diff --git a/blk/298 b/blk/298 index edf2de4..79401ea 100644 --- a/blk/298 +++ b/blk/298 @@ -1,6 +1,6 @@ 6 A, '(' A, 'u' A, 'f' A, 'l' A, 'w' A, ')' A, L2 BSET ( abortUnderflow ) - HL PC 6 - LDddnn, + HL PC 7 - LDddnn, DE RAMSTART 0x02 + LDdd(nn), ( RAM+02 == CURRENT ) 0x03 BCALL, ( find ) 0x33 BJP, ( 33 == execute ) diff --git a/blk/328 b/blk/328 index 5da9201..5b2d2a5 100644 --- a/blk/328 +++ b/blk/328 @@ -1,6 +1,5 @@ CODE S= DE POPqq, HL POPqq, chkPS, - HL DECss, DE DECss, LDA(DE), (HL) CPr, IFZ, ( same size? ) diff --git a/blk/357 b/blk/357 index 93d4dd3..0d3eaf3 100644 --- a/blk/357 +++ b/blk/357 @@ -1,4 +1,4 @@ -: _ ( a len -- n f ) +: _ ( a+1 len -- n f ) OVER C@ ( a len c ) '-' = IF 1- SWAP 1+ SWAP ( a+1 len-1 ) _ 0 ROT ( f 0 n ) @@ -6,6 +6,6 @@ THEN ( a len ) 0 SWAP ( len ) 0 DO ( a r ) OVER I + C@ ( a r c ) _pdacc ( a r f ) - IF DROP 0 UNLOOP EXIT THEN LOOP ( a r ) + IF DROP 1- 0 UNLOOP EXIT THEN LOOP ( a r ) NIP 1 ; -: (parsed) ( a -- n f ) DUP 1- C@ ( a l ) _ ; +: (parsed) ( a -- n f ) C@+ ( a+1 l ) _ ; diff --git a/blk/358 b/blk/358 index d7cb9b0..63ed549 100644 --- a/blk/358 +++ b/blk/358 @@ -3,9 +3,9 @@ : (parsec) ( a -- n f ) ( apostrophe is ASCII 39 ) - DUP C@ 39 = OVER 2+ C@ 39 = AND ( a f ) + DUP 1+ C@ 39 = OVER 3 + C@ 39 = AND ( a f ) NOT IF 0 EXIT THEN ( a 0 ) ( surrounded by apos, good, return ) - 1+ C@ 1 ( n 1 ) + 2+ C@ 1 ( n 1 ) ; diff --git a/blk/360 b/blk/360 index 3166781..4e44983 100644 --- a/blk/360 +++ b/blk/360 @@ -1,9 +1,9 @@ : (parseh) ( a -- n f ) - ( '0': ASCII 0x30 'x': 0x78 0x7830: 30768 ) - DUP @ 30768 = NOT IF 0 EXIT THEN ( a 0 ) + ( '0': ASCII 0x30 'x': 0x78 0x7830 ) + DUP 1+ @ 0x7830 = NOT IF 0 EXIT THEN ( a 0 ) ( We have "0x" prefix ) - DUP 1- C@ ( a len ) - 0 SWAP ( len ) 2 DO ( a r ) + DUP C@ ( a len ) + 0 SWAP 1+ ( len+1 ) 3 DO ( a r ) OVER I + C@ ( a r c ) _ ( a r n ) DUP 0< IF 2DROP 0 UNLOOP EXIT THEN SWAP 4 LSHIFT + ( a r*16+n ) LOOP diff --git a/blk/362 b/blk/362 index 5db77f0..556905b 100644 --- a/blk/362 +++ b/blk/362 @@ -1,9 +1,9 @@ : (parseb) ( a -- n f ) - ( '0': ASCII 0x30 'b': 0x62 0x6230: 25136 ) - DUP @ 25136 = NOT IF 0 EXIT THEN ( a 0 ) + ( '0': ASCII 0x30 'b': 0x62 0x6230 ) + DUP 1+ @ 0x6230 = NOT IF 0 EXIT THEN ( a 0 ) ( We have "0b" prefix ) - DUP 1- C@ ( a len ) - 0 SWAP ( len ) 2 DO ( a r ) + DUP C@ ( a len ) + 0 SWAP 1+ ( len+1 ) 3 DO ( a r ) OVER I + C@ ( a r c ) _ ( a r n ) DUP 0< IF 2DROP 0 UNLOOP EXIT THEN SWAP 1 LSHIFT + ( a r*2+n ) LOOP diff --git a/blk/366 b/blk/366 index d7214ad..bd40900 100644 --- a/blk/366 +++ b/blk/366 @@ -1,15 +1,13 @@ ( Read word from C<, copy to WORDBUF, null-terminate, and return WORDBUF. ) : _wb 0x0e RAM+ ; -: _eot 4 _wb ! _wb ; +: _eot 0x0401 _wb ! _wb ; : WORD _wb 1+ TOWORD ( a c ) DUP EOT? IF 2DROP _eot EXIT THEN BEGIN - ( We take advantage of the fact that char MSB is - always zero to pre-write our null-termination ) - OVER ! 1+ C< ( a c ) - OVER 0x2d ( 2e-1 for NULL ) RAM+ = OVER WS? OR + OVER C! 1+ C< ( a c ) + OVER 0x2e RAM+ = OVER WS? OR UNTIL ( a c ) SWAP _wb - 1- ( ws len ) _wb C! - EOT? IF _eot ELSE _wb 1+ THEN ; + EOT? IF _eot ELSE _wb THEN ; diff --git a/blk/371 b/blk/371 index 1af79e1..f1669c6 100644 --- a/blk/371 +++ b/blk/371 @@ -1,5 +1,5 @@ : [entry] ( w -- ) - 1- C@+ ( w+1 len ) TUCK MOVE, ( len ) + C@+ ( w+1 len ) TUCK MOVE, ( len ) ( write prev value ) H@ CURRENT @ - , C, ( write size ) diff --git a/blk/381 b/blk/381 index a3c3f12..e5f4045 100644 --- a/blk/381 +++ b/blk/381 @@ -1,7 +1,7 @@ : EMIT ( 0x53==(emit) override ) 0x53 RAM+ @ ?DUP IF EXECUTE ELSE (emit) THEN ; -: (print) 1- C@+ ( a len ) 0 DO C@+ EMIT LOOP DROP ; +: (print) C@+ ( a len ) 0 DO C@+ EMIT LOOP DROP ; : BS 8 EMIT ; : LF 10 EMIT ; : CR 13 EMIT ; : CRLF CR LF ; : SPC 32 EMIT ; : NL 0x0a RAM+ @ ( NLPTR ) ?DUP IF EXECUTE ELSE CRLF THEN ; diff --git a/blk/392 b/blk/392 index 4e7bad7..9b1af66 100644 --- a/blk/392 +++ b/blk/392 @@ -1,6 +1,6 @@ : INTERPRET BEGIN - WORD DUP C@ EOT? IF DROP EXIT THEN + WORD DUP @ 0x0401 = ( EOT ) IF DROP EXIT THEN FIND NOT IF (parse) ELSE EXECUTE THEN CHBH$`7wNk7U$QOIHkN3sx@20F26bu2%8EpExvGwiAbMn!sY-8I+6CC>^S*XM zb<(sD@cTUP^Stl#`*~hZ+O^4QO^D)hF?mayd{3J^tWEZ7OZUa(pJ|g9wEN<}#eE^f zB>qo#M}ldEfge>(8AooQc+a2vVr7gAQns3 zf4i1)i#7M?qQ_j^nk78?;*#5 zjqkhk{6{l$-qM9ln>O8EI#}5?_r~9Qjpg{#oNM;)8s|RvI8}+C6CyRDeVpnSsa}nW zeQfof=skX_#(i2_-mfpJTYl+&wD#We&@VqNU;JdVNG;422*B~@K6@(s62x9Ay1%j@ zwa0ChuzmS`>U4XlvJ!~$`Ow}_urnE26SlG$oKrp(k0tFe$K1>Z0B09SY>me{3W>xz@p4N?HrG5-S~S)biaRry+Y;3g4(`b(YHG_=@$=Ej zwk7ws)ZnvGjhA|d296)Esesq#THBwmOdhDMUH(Vl8+cJMql7m#KotABb16x}=Y)50 z7=h}9oq!O}6KaXJ=1S!t*N^^U;EhYih>gV=4pP`3y*u#6KS<=>SiI;7>E8~#@i!71 zjU^=({BORC&~|CYhd80OP-yA^86$PM01LbeOl2j z*8>vlXpgnJp@*b--I@=w-<>KbTmHl4xKH1Zm;Ye5^n}|j?-{Nf0#CD@0M3LX>C>Rw zA=Mb>x;dL`Z1z7Zqr4;Nc0!#G=9c@g-4SeN%u}Fe#qukZAWRWe%t^314+o_BS5v*x zjz6SIss6{Q-W6^K_Jx>NC$aPn9UV?|)Z`+9kQQk~Jb~=Cl`%$axJPjBCA^))V# zEO-46(7r54nrodW)4Ye7tQf@cY(IBL*mHY9; zi{Z9p0pjxmB3n$0*E-cWwK@M=a!2Iurtj_|&ed+brM-58FdZ%-7AuT^2!x}xc?uSU zUkt@V3N}TDB_M*G@pvej+*%;A!1L02T)wb5&RH&!i7s~x%5_^f+M0s{-v;E8Lj+Oqa+4`7c&shp4KfOi0=l}`vm_obPhl)>Zz`MrKTx;?L}Pcd;Orag}Q{EqGGcMX+u0! z?#EfH+BtdC1t?ARXfspnM2d`x&(ew>>RKmS{Sy&r_V0?&Q&YWOgr5J82+w5ywg}fv zCBWz3v2@MvqZUN67`6d1nf`3cR`3gH*dr|7Q~kXv{j!jL36L`dgN;qQ5RopJT~&l& zBMKg1ruap}DP2N~=Sr9TJ@vV>LXU&D}Z*-CF`%QP94Myo{=*HJ_+ zBK3Sa4PJMU7@y8i+riS=V-zDyF;1`o^%yK)Es;npnTt{~Xn89qAgY^K6d&8KLgQ+( z{9BHSk#(`5YIr;riBv#$<$Q+KEClU@h%Bjou^ zrZv5is0LjM_PK?#g7FaClm|C_nd=fcf??Iw5)ZcoBG4ks@fcWL+<;z;6K_65S=E%s z&cb69p+a8Y7K`r=CF##!oLqH+7;Ce)DWKT2R zEOg9H8TLT9F`*LiI~jyu<-v0qxHY+tiR2P5WH4Su(FmAw;1JYx(@_W-Vall{vZsoe zapXLy#-NcfZ{+-yeZtfoW5zA>t2`Q=*KYycSJ3BI_`R#C{eWnTbS7S;VRXkuGz3!| zOp8zVo`$8#!d7KPrDqr5f&VU#P{+DCfLxci(YdenjX*|DG&kw&SC5{?*lGdzDZo%$ z0zrOX|7-_l2BY7 zNUBIU8cI+Q7p_3MChPX@Q=kDCH?^z5%Ow)h@k&pUBpo0_ET5(>r@l$VAgZS?Ht&S_94I)bbt6pW0~NQP1Mgr^dG ziCy(d{T>YL5zgU}?!<PV^r+I@Ei7;FJiUK+Ddv8H!$Ze&h5A$Eks#Bd-2|5m)a3 z2qnoj&t?e9TI~`ZIff|TdQm+81NM%Dlb-L1bCAe`q!_nMm|lBd{;D=^`STo(E0@s6 znWWo2mEtFkKgq8Wmz_)=IgWY?#F*nMa6hmTcL;A99Q13H(pAJ911SrN`rv~MtS;x6 z)B`H+vG69uuOP~H4os>!=Yp*c7P@8njaf*;355fsVn6Rph%dp=v>gl=jiLfv&ALmv zY)MxLemja4r^q2P9FOL zgjv;27kuMn*fAPd2a$gWZJ$o!Z=4UzQJAy}T4hO!9X1NYpEHkIX(z3bC9T55oRtakmj$EZF%-qyp=Y>;)#fH@!wmYOs!oLFO}->da*f@2{i)&6mgNK$k3z>o(sUNOQJ7+AEKOo|*k!WKD zVwneBL7U<5qK>0zzbRDs3G<{?%~Tntss=EzCi3YuX56#PSn7-$IS(yWqNGTTSCs21 z)AoiPaI?}&JwU#3GKNC2NE0718R>l((NZXbk#Hhe0{jKUcE0rN9Hx{vix>;dV$SfR zgjL7~L9>kJYrs)~pBHhYuF_A~r~rMw2%nFNoA78jnheF!Sd*Ms9%Bq*FljPnRE%G> zsDK&ICi7iwKAW&ZFwgaYSCNIb{Dk-y21n1pz(`|F8+^*xVj)ovrR(S#3PV#xVlDhe zM0SPC@VFX7xl#ivSBm?xxFEX@p)sRMbQCM<^;WbMPp9eGO*6Kg!+q*pMyNwRw5D-d z0(K*ndfoE*rR1soQ@D;jr@|O1R;V~zKHo^R;;L3uV9OsV9u>cVqSPQ>%a*TLe0t`y zyaWZQd26|hd_Tk{$jX{1VfzE*-m0GG&1%!l&B4qj$0W9ErZr0!`%!nvlIF2-b*6-A z&2dV-$g3fMt+)U|&2KJMhtqNFIT%Zg8Om@^pYvR?$6!LiikYcacDYgp<|}~4zG5Uw z_<6|~#OKqnwH5!c$Ro@{!>5PEtz3_=2k~`Y_u%l+SVG3aHJIQ~&*4{IrAZmVXAz5> z_*pg!1SYVap}K*Sy~jb#=SgeqS=93?yvZJh3;kF!<@#83@rZ>bu}Ly-igLkgDwwW8fvHg3@=csSX(0eg>uXA5KO&zkS# zsyV643(90?VQw=j(Ub6EzxKaIzX{Kwd!?S3x{=T)H}7TeWf`>PM+i$9WVs)?n) hnsPO}_@$N0?ZPxy<*IgZn&P^7D{vB&TW*5p{{rH2t(^b> literal 6217 zcma)AYi!ill|TQ-%y?$(dH4-3^gs4s&oCIBd>C}1Po zDZxaE0Bhx7+} zNJKOEe-m{4IVC@12jW>Gz2asmEv_!iY$RXru-^g1>S0>#R#rDKsueglnJN}uz3N+9 zty!%B690TBhlWo3%gJ0Z{~Q_G{Bz3ud77X8qcJmoUYVa>GyZixAb%=vw4}F?TCs4` zO_Dd*l6H_*@iAkTpJLN3#h_wcKov~4*g*nlnK5%f<&=U30$N-+Tuvn=s~c*VUJs{I z*`_CJ^B!9Bj6bN>A8ak4YW2ag$D-WSXl4gpUksdo$JdlHleK1Xu4?1`*RC1%s;aiC zz{Y7qbv^!g!B@UmRaG^&e7L52VeH2~Z6&?DVBG#u^TN9y&e!1QWttyVKAaz<`2mGZ z`_SxrdEn$3zvoqD<)HdN9`jSrXnt|QO@PxoKUr6Q8Hz8LJX~EA z_T#h~c)#)?TQ#>_Qv*chr?CUENLMzdD3*$kA*XUSoyywakcE%m1vs~O9mLVDP8Xwq zSY#ix0>RM}2t-R^WHg=XEM_Funf+~@R$jA6;nP%iEbYu=<^-xU9@*<+)a;ho(p|}# z_GQl#w&0U*DSW7Jck#hJXj;PgZ1nZrVfbx zbmoP4d)AE%eV37Ky2)prZJyoadcxcZv0L@!U1Yl4O}BLfHjwTxh#nYPn8NX7ph&`K za$$NQmX1kSr>rSVk*;()mdtK-QvrDPJ&SXZ#W7*J#7rD?$EaAh$CFVz1pW=6p!#h+ zOz~t3LI&KIo^brdsu$5~j9rDxIw*lcQR9nZp!Ir_op()nxIV z9zH%e%7n*Ar+dmS?C#z`ilbk*Lw++thvlr^3w#Tb9Kf^y8k_Af(4e)~#&~NtL#NDw zXE&QZCf1EDNH@(fA%K=<-Y`g|{py%`MOjhC%r{h=*V4SZLO7gvzAtvZFLpZO$#Ss& zEy!8Dpjr#^jr`nQ!g|1MTx{`@hsVB-IHd8FUf~6Kgj9`<;w)J=>-7RsC&W1ybEYwc zPCHQ?k9P#e-zk=%>ADVOzZOapMA;4{sZU%=>ksI zFwNvXqgDww=iq8G`OXXu$g(Ry*=0b^r59;#-Hl8%;BwgsBF$)YfVs3UX>Jh?_I9Cw zxwN-!hSig(`$^LyeH5RNvds;qNz-NE?&NUccs9hHf{S3I$smQe^nmp+mffi!1$UZO zlw%OinRi#skON1p(eF`5Q`!wRs9uKj{h8KAp(AHDdPyqVns1NXB>->B!(LmMvZ?*4 zbkr$YSFQRRIPwjfU5l!3+3u>x=+|pVs58A^5ds}B3Sj@xXkNf=+k|!-LRf?wdfv9( z(XZm7c+19xb5Z>T_M++ps`xk7C~T;Q1kT_$gz)=oLG`w+0mXXTc3G1=zp!QCT$Y12 z+tCq=#@n*717sE5c}eFkVW4pC=8P32t(%}d7Y*;Q+XA@2RkROeFx<&5uRqL~pvtM% zz)iDHt3-uil;Gaer*Y$IOC(a+LNt+4(*=8&>RP!SKDJ$j&2`Lj!!EPrne33=JDo}- zHp6-ueom}AP;@_3t1G-00 z-CHeRzoeS*yI1=(ZU zbx4b(V+d3c0`aRtgY3kq)!mkkw}lh1qrmY6uqsW%GR_sB3(ClDV$f@d87pB31=>^T zJ+UlDbPjjcmLe{h9~R0}qp4V?rBe7RK&;edjsHq!CcH&1oEu3cGugIemb=Iog)ZA) z6!E2fFy4L$bG0KMMDxMy3$f%OBK5H?q#vWlYn%iUxdq3g`VxCXc(QP4o)f7Lga`8} zBfgeLw8&c6nTMm<7rB@WdOnZwNs4B`tOtbnS&w4SkS->g#9l9BCQnM5 zHd}w-MG2b0fr%D>aZ-mIx(vz)m%Gu&@=g5T;g{S@W#m$v72aXF;2ftXA_Kyi3e-Kf z^b1ZL*)HcOn}8x|2^Hm_L_5d!=gyBnndyvhFJaY~F`39S%9~+bhhJk?zEZym7gv*W zWc0|<6UNJfef`4&Cx^~ZJKD6ke>TC?E6&fI)#NxcG~8zl4viWELm(6++p0G~QSR6V zRf{1+M%RlL`b&5`5zkhCmA(y)s!6G!V3ec8V5^36ss?5hILblCV6S2d6$ziSYxU8M+5m zw)40oujoRs)x$%xdPw_EXu~rKkB^f5f-^(E0z>O|FkI5g+&G$hFVk5CT`~A=Xjo#7 z(J(LxHMoqnzfvaxN6L@TMqN;2pZkK7f3bI9LvF86JLf*fV)2L*VxNaHq@Hts?&QSd zY~Wsq3Pf@Tf#;n^`Z!!#3ndB!#SRNA#6RaT$K=OEgSJD~IQ{pU)rEVntE2M>vg0Es zd!s;jg-a828qT=l9;Yv0C|(Y|BYy5TAD}zT;dYe$iJ>K(-x2R20p5cNdt)zpMSgYt zudMzr&g$X5lY>X`tg{G7_k|=LMQkVooetvN&aGBPPFlhk+cTIVSk9WtM)6!R$CiD= zx=diU`~deNQxrW-Hl91h!Ty(F!4uQ@VlF}+s2{C;QH z2T@+h5tUbx`wG1&?i|VKrDUn3e%6E5(px!tzDx6dMH|n_<;-x1C)O=U%fM$$CEvCD z@RIrj{t{v18^_RwOC>7J7e2p^*n^~&xvj3@(sBA73}p+_0lx4hOHf=^?CtV0G^5bg zN|E&~FqlE^s{6|L@&n}ADj(({x#{7}!TctVNqkvzxpCX#+o-2(MX9y$>eVtXX&$HK zTf7bmSW8Qg(EPQfyx&xIGTbbO4C%P_hdi(NhM7PgHHfQHu54l@9n9~53C&AW+P*UW zysQo4b3J9PrHPVi(tAeEj?neOYO+P}Ro;=)BmJq2$c1;{f}Y-^FP&hQa`wK4Jmi_5 zTc#V0-O@W;KlIIklc44YN;FlAUhc))j5|I%H`VFH9pJ@e%$NqPyPW$u?uH~MKDRKJ zjWPI&<8@p{il5{-^m~Nnc{eFyo^xQH<4Ks`xulL@5YAtyE-|nF!1|Bn8TvVAe|wWq z;FvhhAUX5#q*Vqre@B12 zP+nT$*q(TDGhIM?KpyOAizjhI=OnG0*_F)36Xjw2_x`*9^1QeWT{bD~VBH}Xy&>4-6_)#2 f$_N?!g_YqkFwJ?5I)kSvUWc{