draft EVALUATE-STREAM
[rrq/rrqforth.git] / machine.asm
index 74b1060427dbce1cfc4321e405ae19f8e2484f1b..90310145359539274faf91e6aece21e0fffb4e00 100644 (file)
@@ -134,6 +134,7 @@ label#_TFA:
        end if
        previous_word = label#_TFA
        ;; PFA
+label#_pCFA:
        dq label#_CFA           ; link to CFA of word
        dq flags + 0
 label#_PFA:
@@ -141,6 +142,7 @@ label#_PFA:
        db name
 pname:  db 0                   ; extra NUL byte
        ;; align 8
+label#_pTFA:
        dq label#_TFA           ; link to TFA of word
 label#_OFF:
        dq offset + 0           ; The DOES offset. Defaults to 0.
@@ -151,7 +153,7 @@ label:
            dq doforth
        else
            if doer in <fasm>
-               dq label#_DFA
+               dq dofasm ; label#_DFA
            else
                dq doer
            end if
@@ -163,10 +165,17 @@ label#_DFA:
 macro tfa2cfa reg {
        mov reg,qword [reg+8]
 }
+macro tfa2does reg {
+       tfa2cfa reg
+       sub reg,8
+}
 macro tfa2dfa reg {
        tfa2cfa reg
        add reg,8
 }
+macro tfa2flags reg {
+       add reg,16
+}
 macro tfa2pfa reg {
        add reg,24
 }
@@ -216,3 +225,13 @@ common
 dataend:
        }
 
+;;; ========================================
+;;; The BRANCH macro lays out FORTH words BRANCH and 0BRANCH with offset
+macro BRANCH zero,label {
+       if zero in <0>
+           dq p_zero_branch
+       else
+           dq p_zero_branch
+       end if
+       dq label - $ - 8
+}