reworked word lists
[rrq/rrqforth.git] / rrqforth.asm
index b6df047efaa30e720e174f2f9022ecd9233115cc..da94d056d7ca7da435815ab01f465ab39b64e380 100644 (file)
@@ -2,36 +2,12 @@
        format elf64 executable
        entry main
 
-previous_word = 0      ; Used for chaining the words
-
 include 'machine.asm'
 
 ;;; ============================================================
 
-       segment readable executable
-
-;;; This is the very first word
+       segment readable writable executable
        
-       ;; FORTH is the last word of WORDLIST FORTH
-       WORD p_forth,'FORTH',dowordlist
-       ;; ( -- )
-       ;; Change to use this wordlist
-       dq last_forth_word
-       dq inline_code
-
-       WORD p_system,'SYSTEM',dowordlist
-       ;; ( -- )
-       ;; Change to use this wordlist
-       dq last_system_word
-       dq inline_code
-
-last_wordlists_word:
-       WORD p_wordlists,'WORDLISTS',dowordlist
-       ;; ( -- )
-       ;; Change to use this wordlist
-       dq p_wordlists_TFA
-       dq inline_code
-
 ;;; ========================================
 ;;; These are the core "execution semantics" words, which are placed
 ;;; first so as to remain at the same binary address at successive
@@ -49,6 +25,8 @@ last_wordlists_word:
 ;;; rbp = return stack pointer
 ;;; 
 
+previous_word = 0      ; Used for chaining the words
+
        WORD p_dofasm,'doFASM',dovariable
        ;; Execution semantics for assembly words.
 dofasm:
@@ -95,22 +73,12 @@ dostring:
        pushpname rax
        next
 
-       WORD p_dowordlist,'doWORDLIST',dovariable
-       ;; Execution semantics for DOES>
-       ;; [cfa-8] holds the adjustment offset ("does offset")
-dowordlist:
-       pushr rsi
-       lea rsi, [rax+8]        ; rsi = the DFA of the rax word
-       add rsi,qword [rax-8]   ; adjust rsi by the "does offset'
-       next
-
-
 include 'syscalls.asm'
 
 ;;; ========================================
 ;;; The stacks are placed here.
        
-       segment readable writable
+       ;segment readable writable
 
        WORD return_stack,'RETURN-STACK',dovariable
        ;; The return stack
@@ -125,13 +93,22 @@ last_system_word:
        rb 1048576              ; 1 Mb data stack
 DS_TOP:                                ; The initial rsp
 
+
 ;;; ========================================
 ;;; Core execution control words
 
-       segment readable executable
+       ;segment readable executable
 
-; At fasm compilation: reset previous_word to make a new word list
-previous_word = last_wordlists_word
+;;; At fasm compilation: reset previous_word to make a new word list
+;;; Words above belong to the SYSTEM wordlist, and the following
+;;; belong to the FORTH wordlist.
+previous_word = 0
+
+       WORD p_system,'SYSTEM',dovariable
+       ;; ( -- dfa )
+       ;; The SYSTEM word list
+       dq last_system_word     ; tfa of last SYSTEM word
+       dq p_forth_DFA          ; dfa of successor word list
 
        WORD inline_code,'[ASM]',fasm
        ;; ( -- )
@@ -188,7 +165,7 @@ p_zero_branch_SKIP:
 ;;; ========================================
 ;;; Core extension(s)
 
-       segment readable writable executable
+       ;segment readable writable executable
        
 include 'wordlists.asm'
 include 'memory.asm'
@@ -249,7 +226,7 @@ p_quit_ERROR:
 
 ;;; ========================================
 
-       segment readable writable
+       ;segment readable writable
        
 heap_start:
        rb 1048576              ; +1 Mb heap