From c668433c5d21cdd2762eb3e234d4f5e1605163f2 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Mon, 25 May 2020 07:29:47 -0400 Subject: [PATCH] wip --- blk/367 | 10 ++++++++++ blk/368 | 12 ------------ blk/369 | 23 ++++++++++++----------- blk/370 | 26 ++++++++++++++------------ blk/371 | 24 ++++++++++-------------- emul/forth.bin | Bin 6198 -> 6172 bytes emul/stage.c | 3 ++- 7 files changed, 48 insertions(+), 50 deletions(-) create mode 100644 blk/367 delete mode 100644 blk/368 diff --git a/blk/367 b/blk/367 new file mode 100644 index 0000000..e1f7ae4 --- /dev/null +++ b/blk/367 @@ -0,0 +1,10 @@ +: IMMEDIATE + CURRENT @ 1- + DUP C@ 128 OR SWAP C! ; +: IMMED? 1- C@ 0x80 AND ; +: +! TUCK @ + SWAP ! ; +: -^ SWAP - ; +: / /MOD NIP ; +: MOD /MOD DROP ; +: ALLOT HERE +! ; +: LEAVE R> R> DROP I 1- >R >R ; diff --git a/blk/368 b/blk/368 deleted file mode 100644 index 6121c98..0000000 --- a/blk/368 +++ /dev/null @@ -1,12 +0,0 @@ -: +! TUCK @ + SWAP ! ; -: [entry] ( w -- ) - H@ SWAP - BEGIN C@+ ( w+1 c ) ?DUP IF C, 0 ELSE 1 THEN UNTIL DROP - H@ SWAP - ( sz ) - ( write prev value ) - H@ CURRENT @ - , - C, ( write size ) - H@ CURRENT ! -; - -: (entry) WORD [entry] ; diff --git a/blk/369 b/blk/369 index 35f6b3f..2aad0d2 100644 --- a/blk/369 +++ b/blk/369 @@ -1,11 +1,12 @@ -: IMMEDIATE - CURRENT @ 1- - DUP C@ 128 OR SWAP C! ; -: IMMED? 1- C@ 0x80 AND ; -: -^ SWAP - ; -: / /MOD NIP ; -: MOD /MOD DROP ; -: ALLOT HERE +! ; -: CREATE (entry) 11 ( 11 == cellWord ) C, ; -: VARIABLE CREATE 2 ALLOT ; -: LEAVE R> R> DROP I 1- >R >R ; +: '? WORD FIND ; +: ' + '? (?br) [ 4 , ] EXIT + LIT< (wnf) FIND DROP EXECUTE +; +: ROLL + ?DUP NOT IF EXIT THEN + 1+ DUP PICK ( n val ) + SWAP 2 * (roll) ( val ) + NIP ; +: 2OVER 3 PICK 3 PICK ; +: 2SWAP 3 ROLL 3 ROLL ; diff --git a/blk/370 b/blk/370 index 2aad0d2..b488aa3 100644 --- a/blk/370 +++ b/blk/370 @@ -1,12 +1,14 @@ -: '? WORD FIND ; -: ' - '? (?br) [ 4 , ] EXIT - LIT< (wnf) FIND DROP EXECUTE -; -: ROLL - ?DUP NOT IF EXIT THEN - 1+ DUP PICK ( n val ) - SWAP 2 * (roll) ( val ) - NIP ; -: 2OVER 3 PICK 3 PICK ; -: 2SWAP 3 ROLL 3 ROLL ; +: MOVE ( a1 a2 u -- ) + ( u ) 0 DO ( a1 a2 ) + SWAP C@+ ( a2 a1+1 x ) + ROT C!+ ( a1+1 a2+1 ) + LOOP 2DROP ; +: MOVE- ( a1 a2 u -- ) + TUCK + 1- ( a1 u a2+u-1 ) + ROT 2 PICK + 1- ( u a2+u-1 a1+u-1 ) + ROT ( u ) 0 DO ( a2 a1 ) + C@- ( a2 a1-1 x ) + ROT C!- ( a1-1 a2-1 ) SWAP ( a2 a1 ) + LOOP 2DROP ; +: MOVE, ( a u -- ) H@ OVER ALLOT SWAP MOVE ; +: PREV 3 - DUP @ - ; diff --git a/blk/371 b/blk/371 index b488aa3..1af79e1 100644 --- a/blk/371 +++ b/blk/371 @@ -1,14 +1,10 @@ -: MOVE ( a1 a2 u -- ) - ( u ) 0 DO ( a1 a2 ) - SWAP C@+ ( a2 a1+1 x ) - ROT C!+ ( a1+1 a2+1 ) - LOOP 2DROP ; -: MOVE- ( a1 a2 u -- ) - TUCK + 1- ( a1 u a2+u-1 ) - ROT 2 PICK + 1- ( u a2+u-1 a1+u-1 ) - ROT ( u ) 0 DO ( a2 a1 ) - C@- ( a2 a1-1 x ) - ROT C!- ( a1-1 a2-1 ) SWAP ( a2 a1 ) - LOOP 2DROP ; -: MOVE, ( a u -- ) H@ OVER ALLOT SWAP MOVE ; -: PREV 3 - DUP @ - ; +: [entry] ( w -- ) + 1- C@+ ( w+1 len ) TUCK MOVE, ( len ) + ( write prev value ) + H@ CURRENT @ - , + C, ( write size ) + H@ CURRENT ! +; +: (entry) WORD [entry] ; +: CREATE (entry) 11 ( 11 == cellWord ) C, ; +: VARIABLE CREATE 2 ALLOT ; diff --git a/emul/forth.bin b/emul/forth.bin index e9f80d4eed420ae9fec8ddd9fe7c11c96ea838cc..efb3a2dde14150e3458dec26c59cb529b4b26dde 100644 GIT binary patch delta 1359 zcmYjRT}T{P6h1R|#?_tKnc1EF(Z?@F!C zPALuvD|XtFDJPr!ClalbM@rWv0|=~3^tOCXoR%W|QTn@Fp`X1pK6Ullc|SOmZK2U& zIL2fem5#KTs915{k>k*nvap^DN|di<10?vqEDon*soq#TVd+q+JV7lF(^&MiWU9Mf zqnfKmT9SbOTOJp4WR`Zg+QcXFM%hdB9anz#nacnW3=)TU;-sm9pv;Q~v_n7oGRw4d z-nlGnxpL&Ou!e8julhywTXW^fm-sy84(xI0Nt{ZbCZ*?t3uL@iAo|536(LJRZ-=_NJ3m;>q`YTsQ$EQNZ;cS+L zhtTNA(0NsF%cwZx9t5cv-~=Xhr4A(5p_J%xVH5Y&1+=9Hx|~4J)qo8BO+CteLuIXz z%%}z0uAOY|(14#82c>Nx!Y`6#flat6SOf1W!*>ITZOcrrB=lkp{d9Q~zPisA>3RKMtKuz$tmMtI^}`mj_01`5Ig#raPmu2lHnt?B;>HNc!FV z?l@dfFoLCPLj=J0y9=s;BW0+8M}h%!ji4Sa^ecB5TbP3%_KTRT`&8e+2%=q3BN$(b zg(5s#$ELudXQ6b{xy2BqL-xwTn6I)b;`@~|96MMp>6?S+`yb&ksDEo@bUajtS&MYh*Jm*t@*$=bV)}B# zghdj=@BeV=ReBJF3zOF-;f@>xXV=8#%Oh7NFD27#M(Qnk+#lj*=o|hzE<|tnTk65jj}XO>`d8py6vyf+2t{G!s_?Id&od`6hhP$sKC46 zXFqKS9OK4lZ-6C!J5Vl%{OmlO^}r46KOYDmS(0uCOw4GjyOMnay$K61v=5XeiGCNT LBxtAq1ls=v*fTy0 delta 1472 zcmZ8hTTC2P82)F@440kRnVr3Ylrp8tXZ=vQJ$PU1uA@=YUuA;xy4oGrvYm7@3?~oWC~ehhk-2Y~~*? z*7y{-;GlFvNP+;{LJEG(*YM02C3Ib`@V8>Pwtb;R2TEDx2WD7B^N6GgZj zOIWz(h9c#8Ne2mQnK0Czh_{=z<%1Gs4_A4}V5Due4`K4EWboxO{a6|=v1AZ_2J2&fB-<5cuKM$&4QMm*io^BzEsZ%X%s zX8so05Ey5Tk!pBVS@IZ=Rx@a~n|+Cahz74IAJ7|~;re;?uFytyF;j=ru=og)c{Pce zG2v_@a7vo+8a=K(+5ZKy?tux?s?DqH!TRURojHM!eT^j<>49i~;G<9bYJ{wc^SKpSRbqo=^EvvBuSLqL5#X=PAnG~l@ju1w(`WtF)k{j=twSSDutp4c#?REk{ST-__=BUomQ%<4EARk0vHRLP5)G9ofIBWHFQkN`5= zcCyR?suc?|lj*57z>Wu6;ghoCY%4g!%sE2O1&&qOf!{d2_y~8L4y?d0`L|Hhb(hDd z=jv;5ryPAF&||TVWv5RAwn%G$O>v8i;P*ch_)hyGAdD?sTYyR_0 z6>UHYGNtRH4uxB2pv&qFz;zTJI{~p^;bOGxB;HonF*=FSg;+7PE&>8$#|K)<(YHmb zLMrz&jfQGZ#DeUM4E7Gh?I5f^+9XN}ju9`sf=Ij^YN#;ek3t64Wbq@hzMlTLZH)%u Rb;XeBSD|AB{q!)@@)uYPR#pH2 diff --git a/emul/stage.c b/emul/stage.c index fe00dea..c0f3af4 100644 --- a/emul/stage.c +++ b/emul/stage.c @@ -42,7 +42,8 @@ static uint8_t iord_stdio() static void iowr_stdio(uint8_t val) { - // we don't output stdout in stage0 + // uncomment when you need to debug staging + // putc(val, stderr); } static void iowr_here(uint8_t val)