如何定义VALUE和TO

Mil*_*sen 8 6502 forth

我想要实现的第四字VALUETO(在仿真计算机一个RPC/8 的Minecraft MOD).只要我在编译时不使用它,我最好的尝试就会给我一组工作正常的单词.更具体的VALUE工作,但TO没有.

: VALUE CREATE , DOES> @ ;
: TO ' 3 + ! ;
Run Code Online (Sandbox Code Playgroud)

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

['] NameOfAValue 3 + !
Run Code Online (Sandbox Code Playgroud)

需要注意的是该处理器是不是一个纯粹的6502,但一个65EL02的自定义变种65816.

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

Mil*_*sen 2

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

价值

\ Works fine, now to reset the value.
: VALUE \ n <name> --
    CREATE ,
    DOES> @
;
Run Code Online (Sandbox Code Playgroud)

\ Works if not compiling, LITERAL and POSTPONE are broken.
: TO
    TIBWORD FIND 3 +
    STATE @ IF
        POSTPONE LITERAL
        POSTPONE !
    ELSE
        !
    THEN
; IMMEDIATE
Run Code Online (Sandbox Code Playgroud)

LITERAL 中的 bug 演示

\ fails, very wierd error.
: TESTLIT [ 42 ] LITERAL ;
\ TESTLIT Unknown Token: TESTLIT
\ FORGET TESTLIT Unknown Token: TESTLIT
\ WORDS TESTLIT COLD SORTMATCH ...
Run Code Online (Sandbox Code Playgroud)

POSTPONE 中的错误演示

\ fails, postpone is directly equivelent to [']
: TESTPOST POSTPONE + ; IMMEDIATE
: TEST 2 2 TESTPOST . ;
\ . 1935
\ ' + . 1935
Run Code Online (Sandbox Code Playgroud)

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

编辑#1:经过更多的尝试和错误,并且没有一点咒骂(我不擅长FORTH),我找到了一种让它发挥作用的方法。

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