如何定义VALUE和TO

时间:2013-02-16 20:39:35

标签: forth 6502

我想在RPC / 8(Minecraft mod中的模拟计算机)上实现Forth字VALUETO。只要我在编译时不使用它,我最好的尝试就会给我一组工作正常的单词。更具体的VALUE有效,但TO没有。

: VALUE CREATE , DOES> @ ;
: TO ' 3 + ! ;

我已经尝试了一切我能想到的工作,我的最佳尝试让我得到了这个:

['] NameOfAValue 3 + !

请注意,处理器不是纯粹的6502,而是65EL0265816的自定义变体。

编辑#1:不知怎的,我忘了调用CREATE的价值。应该一直都在那里。 编辑#2:我还在TO ... oops中切换了3+。它本来应该是另一种方式。

3 个答案:

答案 0 :(得分:2)

好了经过大量的试验和错误以及大量搜索后我发现了一些应该有效的东西,但由于redFORTH中的两个错误,没有。

VALUE

\ Works fine, now to reset the value.
: VALUE \ n <name> --
    CREATE ,
    DOES> @
;

\ Works if not compiling, LITERAL and POSTPONE are broken.
: TO
    TIBWORD FIND 3 +
    STATE @ IF
        POSTPONE LITERAL
        POSTPONE !
    ELSE
        !
    THEN
; IMMEDIATE

LITERAL中的错误演示

\ fails, very wierd error.
: TESTLIT [ 42 ] LITERAL ;
\ TESTLIT Unknown Token: TESTLIT
\ FORGET TESTLIT Unknown Token: TESTLIT
\ WORDS TESTLIT COLD SORTMATCH ...

演示POSTPONE中的错误

\ fails, postpone is directly equivelent to [']
: TESTPOST POSTPONE + ; IMMEDIATE
: TEST 2 2 TESTPOST . ;
\ . 1935
\ ' + . 1935

我要提交错误报告....

编辑#1:经过一些更多的试验和错误而且没有一点咒骂(我对FORTH不好)我找到了一种方法让它发挥作用。

: TO
    TIBWORD FIND 3 +
    STATE @ IF
        (lit) (lit) , , \ store address
        (lit) ! ,
ELSE
        !
    THEN
; IMMEDIATE

答案 1 :(得分:1)

最简单的解决方案是

VARIABLE TO-MESSAGE   \ 0 : FROM ,  1 : TO .           
: TO 1 TO-MESSAGE ! ;

: VALUE CREATE , DOES> TO-MESSAGE @ IF ! ELSE @ THEN 
 0 TO_MESSAGE ! ; 

答案 2 :(得分:0)

我不确定你的Forth如何处理解释与编译时间,但是TO的定义是试图将值存储到地址3.看起来很可疑。