NUMBER parses negative decimal numbers
[rrq/rrqforth.git] / machine.asm
index 90310145359539274faf91e6aece21e0fffb4e00..7f65bbeb130390cd6f96121a65be3046275e5f6f 100644 (file)
@@ -103,10 +103,6 @@ macro DOFORTH label {
        ENDFORTH
 }
 
-       previous_word = 0       ; Used for chaining the words
-
-       IMMEDIATE = 1           ; optional flag (symbol)
-
 ;;; ========================================
 ;;; Macro WORD starts a FORTH word definition in this code.
 ;;; The layout of a word is as follows:
@@ -122,6 +118,8 @@ macro DOFORTH label {
 ;;; CFA: [8 bytes] pointer to the word's "doer" code
 ;;; DFA: [? bytes] the word's data field
 
+IMMEDIATE = 1          ; optional flag (symbol)
+
 macro WORD label, name, doer, flags, previous, offset {
        local pname
        ;; align 8
@@ -196,11 +194,12 @@ macro dfa2tfa reg {
        sub reg,24
        mov reg,qword [reg]
 }
-macro pushpname rg {   ; ( reg -- chars* length )
-       add rg,8
-       push rg
-       sub rg,8
-       push qword [rg]
+;;; Code snippet to push a pname string with address and 64-bit length field.
+;;; The register is advanced to point at the text part.
+macro pushpname reg {
+       add reg,8
+       push reg
+       push qword [reg-8]
 }
 ;;; ========================================
 ;;; The BLOCK macro lays out the length for a subsequent block to the
@@ -231,7 +230,7 @@ macro BRANCH zero,label {
        if zero in <0>
            dq p_zero_branch
        else
-           dq p_zero_branch
+           dq p_branch
        end if
        dq label - $ - 8
 }