From a4767738137966f45ed166ce36b79e86e3845016 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 10 May 2020 08:40:49 -0400 Subject: [PATCH] Add words BIT@ and BIT! --- blk/050 | 4 ++-- blk/051 | 2 ++ blk/404 | 10 ++++++---- emul/forth.bin | Bin 5913 -> 5987 bytes 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/blk/050 b/blk/050 index e0be481..9845275 100644 --- a/blk/050 +++ b/blk/050 @@ -4,6 +4,8 @@ Memory ! n a -- Store n in address a ? a -- Print value of addr a +! n a -- Increase value of addr a by n +BIT@ b a -- f Get bit b from addr a. +BIT! f b a -- Set bit b to f in addr a. C@ a -- c Set c to byte at address a C@+ a -- a+1 c Fetch c from a and inc a. C@- a -- a-1 c Fetch c from a and dec a. @@ -11,6 +13,4 @@ C! c a -- Store byte c in address a C!+ c a -- a+1 Store byte c in a and inc a. C!- c a -- a-1 Store byte c in a and dec a. CURRENT -- a Set a to wordref of last added entry. -CURRENT* -- a A pointer to active CURRENT*. Useful - when we have multiple active dicts. (cont.) diff --git a/blk/051 b/blk/051 index 54e8d4d..dea8c4e 100644 --- a/blk/051 +++ b/blk/051 @@ -1,3 +1,5 @@ +CURRENT* -- a A pointer to active CURRENT*. Useful + when we have multiple active dicts. FILL a n b -- Fill n bytes at addr a with val b. HERE -- a Push HERE's address H@ -- a HERE @ diff --git a/blk/404 b/blk/404 index de0f8e1..dbb9719 100644 --- a/blk/404 +++ b/blk/404 @@ -4,9 +4,11 @@ DUP NOT IF DROP 0x0c RAM+ @ THEN ( 0c == C<* ) EXECUTE ; - : , HERE @ ! HERE @ 2+ HERE ! ; - : C, HERE @ C! HERE @ 1+ HERE ! ; - - +: BIT@ ( bit addr -- f ) C@ SWAP RSHIFT 0x01 AND ; +: BIT! ( f bit addr -- ) + SWAP 0x01 SWAP LSHIFT ROT ( addr mask f ) + IF OVER C@ OR + ELSE 0xff XOR OVER C@ AND THEN ( addr flg ) + SWAP C! ; diff --git a/emul/forth.bin b/emul/forth.bin index ec04e62be851dd0a7b86148e2506473475696e11..f9614a414bca0d1c2bb6ec6e21955328e3f6c6af 100644 GIT binary patch delta 2041 zcmZ8ie`phT6o22lOU>oS-Q`zn?YdsmR1+&zT(@E8W_wAhsj(@!)Yf*TI%|WqHqLG< zlS$R8*<`en+hm3@WYEC~g>4i9y6qq5Kq~0iA7c(=qp%;aSr93#|8(!&MF#sLIo`YX zKJVA(y}R1H)GXe-3OBCkCRi|S$7)M3Kh%GPPW5PJAqCkm$<9)7|NK zMgdWpGgifWoaQj@I9_H+BjP+bywyP{k~k-xv1OqW3hZ-d7VK~eg9)%=*P#N=+dp#Z z@Bl*(Z38yI;H;!MG#IP^Cf(tSOoL=1qdU!vg6MM>T<M&Z}FVviMKf#Npy7WwYSH=f+>8yLj{=V^^yNN@euicF#ZI=@^A73M%z<!MQPQzCpUI3$Tx6UnqC7O=3s|e z87JD|G$n^AMbnn#E=$P{H|95@^eGzX-BE|hX%%LTT}oZ+8>lo#tztS0^0X3!$=u0d zbv*Z)I+A;Rd>GT9fZ^P+h>9>|kUNIT%f^R_9+{P|35(pHN&)w32RuNYR^T#d7+HtE zaCW8C++U$vPzuw`z>Gvh%XOXxvxtq4+JGoEQ< z$`f$V%V}j%z@C2W+0r>HyQM7rvUZ=Z;x1zev7UY1$1%M=g*M!dF-o}K0?Z3Emm40k zUNx<0@3fu{y?+a=Yifg^4Zk-yH0mXF*lG<2mKbqir~18%0*T?H<0E4c88<&KT=Ev! zX|Io`QKJ5piAVtTr@amQCGU6G0=ft!eI=09w9;vO;8jC2NZRnp;j!_027;=9n;4wJHDEXc0h30ZuXd{Fb^GY}tgiJbm%J24gLEv} zwQ~cGk&L5!!8~xL3!Vr8F8C~cUU*X;599~88>_lQ;HvXnA}^x*@f=3MrFlIL^pyc%dyM>>Ki$iHDSxb{zQ(L1of)` zLXnPja&JgR3`*&M85-LmQqF@FQ!g1=MDGSHwS*`x2F zE!&T3n#zKeaGM9s@A?ajT&yM&Wl8q&jV6QzTfY&V4Ko}vbvtbpO~wJ=(~xa2tst*| z^#`YxFm(lpX_I*EHw2~?7205uU*tyoMUH&hu%9JH?`beCfh?jFSz4mOSX}$Jk(ZZ3iuzi*dj#pWSV{Q7G-wcJfhSPGJpWuE;bE z@Bk*v#Rn3|KQUPo6<^e_kmyq*^0tJ;%qXS_50Ffw!4P6ZeOL%F!EeOQn-4EU4sQR~6p@e8FQ@ax|4u zU|y}u77ULLr!q1cA;@Fcx_pZ#%y_1dN_%a0>3{C9jui$V0!8+R;%l$VCh*XU*$VrT z86TEfXvxXGbxz-%}*?m_ZUzb^%+N&(1BLt1w*vo3gG?5qqOx1#e*;kSV z=2;MHLXFF{E^sGXmtE|8b%@6=hjyUbtyH;3YO2K$eo)Wgrv=HwsY1^>Xh9lq0B5zW z+&1=^wuwu!@3g^=tJ;F7N+Fomh?`+6n=1r5;XU;WwqEbuKdpU@1F-U)I1Cd9oYZhw zBTn0rZ7ZH@Sgxj(9&urPUAn4UkROZ7AmBk0lI(rGdq+Py!7J)Yf(J_mGapW z=4|DEnE@N0QogafSa_uW}|tVHKs<3QHVzsO8}| z6x!Ya6iQH7)!A|Pw(-xAZ5^KQ>)lC>9t#Ezci5E!_k>Tl6K<5IiYF-C4h&M|67Hyu zd4cGyazViag4WPazpRMJ@gsNt{-n0-D#1_B?+fkxD7KUsKREU#maFPD4CTO_HI9^U zQ=~v|xe5KuM$>9p<0JW_{m|AIgKO-#Coo}p$Q^D_#Y4l4D9D`dSrN$$pPHSTiD=M@ zgO7Qt+@Qx0Xtd~meJ5tgyu}87j zNikJvK~%hka9uq0%%E1Nf(U}28A0JOKIgdxz=DzVczz$PlHv^tMD?`ShR56ppZ8Wd zI?`Z{bV;@$Jg`GF!uD*!!%S3|?rRsLIx4l#7r3~Hb?Ub0DtIN|^^you4K@DSR3mBaR#R&eM^W7`$rJ#ovj^JF2Wf?~!-C(`j;y=yA HZs7g_A9RPl