added
[rrq/rrqforth.git] / machine.fasm
index 92f51a1f3433d103ee650eab2c2ef48273f13f32..ddfb9711fe18abd89b514d3ccffd2989a18140c8 100644 (file)
 ;;;
 ;;; function calling
 
-;;; FORTH model
-;;; rsp = data stack pointer
-;;; rbp = frame pointer
-;;; rdi = frame stack
-;;; rsi = instruction pointer
 
-;;; ========================================
-;;; The next macro "moves" execution to the next FORTH instruction,
-;;; using rsi as instruction pointer.
-
-       macro next {
-       lodsq                   ; mov rax, qword [rsi]
-                               ; add rsi,8
-       jmp qword [rax]         ; goto code of that FORTH word
-       }
-
-;;; ========================================
-;;; The pushr macro pushes x onto the return stack
-;;; The popr macro pops x from the return stack
-       macro pushr x {
-       sub rbp, 8
-       mov qword [rbp], x
-       }
-
-       macro popr x {
-       mov x, [rbp]
-       add rbp, 8
-       }
-
-;;; ========================================
-;;; 
-
-       previous_word = 0
-
-       ;; Macro WORD starts a FORTH word definition in this code
-       macro WORD label, name, doer, flags {
-label#_tfa:
-       ;; TFA
-       dq previous_word
-       ;; PFA
-label#_word:
-       previous_word = label#_word
-       db flags + 0
-       db label - $ - 1
-       db name
-       ;; CFA = pointer to "interpreter"
-label:
-       dq doer
-       }
-
-       ;; Macro WORD_assembler begins an assembler implementation
-       macro WORD_assembler label, name, flags {
-       WORD label, name, label#_code, flags
-label#_code:
-       }