From b760c2d35341299f86ba79050e247aa2ea2c388b Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Tue, 12 May 2020 07:36:20 -0400 Subject: [PATCH] SCPY: don't copy the NULL This makes [entry] much simpler. Also, remove unused LITS word. --- blk/058 | 5 ++--- blk/268 | 2 +- blk/407 | 10 ++++------ blk/408 | 12 ++++-------- blk/422 | 3 +-- blk/424 | 2 +- emul/forth.bin | Bin 5974 -> 5964 bytes 7 files changed, 13 insertions(+), 21 deletions(-) diff --git a/blk/058 b/blk/058 index 43f9284..e9718b2 100644 --- a/blk/058 +++ b/blk/058 @@ -4,10 +4,9 @@ LIT -- Write a LIT entry. You're expected to write actual string to HERE right afterwards. LIT< x -- Read following word and write to HERE as a string literal. -LITS a -- Write word at addr a as a atring literal. S= a1 a2 -- f Returns whether string a1 == a2. -SCPY a -- Copy string at addr a into HERE. - +SCPY a -- Copy string at addr a into HERE, without + NULL termination. diff --git a/blk/268 b/blk/268 index 57d20d5..e1e312b 100644 --- a/blk/268 +++ b/blk/268 @@ -8,7 +8,7 @@ DUP LIT< ( S= IF DROP [COMPILE] ( ELSE - SCPY 0x20 H@ 1- C! + SCPY 0x20 C, THEN 0 ( loop again ) ELSE 1 ( stop looping ) THEN UNTIL diff --git a/blk/407 b/blk/407 index f927ae3..fa8978a 100644 --- a/blk/407 +++ b/blk/407 @@ -1,8 +1,6 @@ : SCPY - BEGIN ( a ) - C@+ ( a+1 c ) - DUP C, ( a c ) - NOT IF DROP EXIT THEN + BEGIN ( a ) + C@+ ( a+1 c ) + DUP NOT IF 2DROP EXIT THEN + C, ( a c ) AGAIN ; - - diff --git a/blk/408 b/blk/408 index 1fce040..fb4a6c0 100644 --- a/blk/408 +++ b/blk/408 @@ -1,14 +1,10 @@ : [entry] - HERE @ ( w h ) - SWAP SCPY ( h ) - ( Adjust HERE -1 because SCPY copies the null ) - HERE @ 1- ( h h' ) - DUP HERE ! ( h h' ) - SWAP - ( sz ) + HERE @ ( w h ) + SWAP SCPY ( h ) + HERE @ SWAP - ( sz ) ( write prev value ) HERE @ CURRENT @ - , - ( write size ) - C, + C, ( write size ) HERE @ CURRENT ! ; diff --git a/blk/422 b/blk/422 index e2ca7c8..445bcf4 100644 --- a/blk/422 +++ b/blk/422 @@ -1,7 +1,6 @@ : [ INTERPRET ; IMMEDIATE : ] R> DROP ; -: LITS 34 , SCPY ; -: LIT< WORD LITS ; IMMEDIATE +: LIT< WORD 34 , SCPY 0 C, ; IMMEDIATE : LITA 36 , , ; : '? WORD (find) ; : ' diff --git a/blk/424 b/blk/424 index 4bcb673..7bd64ff 100644 --- a/blk/424 +++ b/blk/424 @@ -7,7 +7,7 @@ 40 is ASCII for '('. We do this to simplify XPACK's task of not mistakenly consider '(' definition as a comment. - LITS: 34 == litWord + LIT<: 34 == litWord LITA: 36 == addrWord COMPILE: Tough one. Get addr of caller word (example above (br)) and then call LITA on it. ) diff --git a/emul/forth.bin b/emul/forth.bin index 26c548f639520792db04392a907a9fcaacbbdf0d..c9db31e0c321c61d7d93a3b3cad6b07e162bb2f1 100644 GIT binary patch delta 1796 zcmX|CU1(c%6hHSP*-dV8@6D%nS-QJ4)MRbyP`0veQ8?|EjH61_pwPwCpX0w9G%{>7)X$D(GPEIsE&|j!nq`BY7y5b->GtgpFF?fMCE-&I#wRYg54T?6$L8zUADM!eF*zJC*13jG}`88O4B1?(w7tL}fv2 z3QaC$UF1$!Z#mhj($C}LA7!Mo>}YU4bHXwO4RoL+$Sg=Km&8WM%*V&tD zH&TR|&Z=EUR?bxRDzxgaYu2^0OL-YZmfF&J@e_s0$ekfnJ-Rnm!HsnYo#h z)nd6)$GmG61Tr549*0C8Rb*jUHZ8kpCB|Bovu&k^op^u|Z9p?1FOMedAYi5rRraE` zJ#iepk@{RQs^h@R>a2!M>y_#Z=yR2M(2Esp-EJDGoQ`&3DKn;W8og&Rc~WCPYS~Ct zT^85)n_7d@VK01(TC)Nvr>f@R4^-B{J`__xaIsO>p7E2&kOmuk##L46V?f{04)X}W zZSZwh-Gy}(OrUD}uttNcyJj^V6-z`kxPYJog*MSoZ&pQQ<0n^dM^(M$EWxjLZwe|; z(+!PhMxVx+2bk{mZM)*4w|C692Bfma_;CJMFKp=L-5f3dh>OjO2 z?p2Y@$f>zvIjSN%3u4XP;EHZpAkxwQR4wX5f6*NfYVPZZfCvVV^?^uHv)aQr&`5G3 zWD+nAx+Q=|xwni2SNI*2c%(X0o|}$_V2fGmoLS0_gxPUVMEHjJJr8XsNQi!FV}*Bd zFd8L*qg=pd{p^G%xM#`zx0~*aJ9h`Pnwv&2U~DLzJ+Kw2rr`Z%dk2^)cms$q=P9zL zXIlp?+!HvUEF|27`U*cUFS*0;8vD)Dzj)h&3QUje*y+GRw3%(kVRZ`(tK2?9#T z3EQ4XD?++wN6F54kxX#~?=>tMR?$Q4C(QPEMsXf35wEZX@t{{0mc_*wK3Wq*F*xQ8 z2toW*xmJJy!|Cz-VOqe0=q4K8@|xj;E)4(J+u$grg&awgY*|pu60Nd3x-t2J*$$=o z2<;QWZHKRjRS{-27Yq8j7T0ld&6H$CxFQNZlIS2*gf%|rUEwKZ5TR>wO`&3f9rTs3 z$O^YxA+TFo{k^SKQsyUZWlkPL?U(FSKx|X2@}sorx%f~=`^;|(>{DN7*SeSR>od^` zL&Ha^AmT2FgggC;HT*r?I_vd!ZlQy(@K@Opzdz=3oz<@TsO?|vwp4wrrwb`-#WhW! z=m2AE$=_qoc`KORE8wo(@b^x&%>B5EB4p56f1KS^8-^vnf+&aK mYkv@*pLs$sS$n<)8@3Q6D&_LjGqsa?E^l5c^yf1<0Nnr7KYaH9 delta 1847 zcmX|Ce`p(Z6o22lOPAy>cbA{*7M!;xMj4{bz{~6c87{UoQk@HfS&%%x_&!ZMZGeS-(Rx|8zy!OJ=)! zjrG*US*1_ZAz4TziYX7Y$r1BCaeN};)<6b_>#A$kQGyWE*+a1ePMBf_2(a!n5cj!v?WlLj-of2&mKr;QZl?RqrfES`8gNj>tm6JuE{ObfrizBS!?Vd#6|Hx%$wXc?4bRCP zm;R4V=5t0dkt_PaDPI!TogaC^ybc3-57dyh$rJuBo=y?ub!QZ8zRmJEZ4^(;!>Fu7 zHh(bX#}3R1O}@#}ZS(9%8_4F8+{@wPS9xelRjRXR6qJRRl@k8dA$2%i+}aKfr06k= zN)NkkE-Ia@X5La>nEy(d6CAE6+*Iha2|ZsZM#Au(yskuH$w9u@+40HQxR<1a=`%-< zO=xG!$4^X+PgZ6zYsrCqG{V4PiB6~~D8is zmm7G@)SzaT)u;PTqBk~M9*=8S?oDMzjlgVW>bO>}oYBTB$lGF!RVFY*kSU-tfzFGV zIHs6itGQTBxgxA^->Y?|!OQRn$ITwunqt6jI9z?*I8R|dYz}%~96p8GsIbNz^41jk z>Ck<6lT|*jHEzMX;6+>+69{b=o}tbbyfZ3t14&S4VO|3YZK9vPEDNZ^L+|#TH3j4n z{P^S>Ug4;^f#K|dQ&{ql+C(TPayD5BVQvTn^syJyp7U*FKb!k}k+D&q4(VLXZVm^w z8JDnES>LiiX6$5nd@`<}Ds#dGU!9%yi9Cso{!TnwgUk=n6rP!UO8;@*}Z?_<9*sYzI zyx2nP-bvd<0=VG;DJ{T^8aDmGj_@j0u3AG{;cp0@APsFlRQMHc#C$Cne6=fB!lVXE z$<%avT7POyD^2dF);muB>p1-tH*p9pkrnPu+Vgy3U=y9u{3O`Xu^Jdb!fvZEQMekU zfgz0+1!^(9^_YJJx6Q8x3@qzDZjJrDb+IGXw##@hI(>t?8?@mID!Oh6P1fWqv}@jr z>fIm}_eZNZs-dv01BJ8`n^yZ8xLQX-c<~Jy{Zt`Jh#N{*Xx6+Q3c5!E6(rftZY)WFEII!PZSFlEh{Cl{J2pQGk3(Jf{K6lBvFUfFVa*kRWMy*l=;`SbTHdg3 LANof%winpHPN#f&