X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=rrqforth.asm;h=da94d056d7ca7da435815ab01f465ab39b64e380;hb=6a23dde51ebab1df2c43912b3f730f27e71b4d8f;hp=73147ab1450a2bb952863d6df8d8f5bd659fa028;hpb=bdaa235a728bbfa87718c3da18e5fb64ca6b6662;p=rrq%2Frrqforth.git diff --git a/rrqforth.asm b/rrqforth.asm index 73147ab..da94d05 100644 --- a/rrqforth.asm +++ b/rrqforth.asm @@ -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,15 +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 ;;; Words above belong to the SYSTEM wordlist, and the following ;;; belong to the FORTH wordlist. -previous_word = last_wordlists_word +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 ;; ( -- ) @@ -190,7 +165,7 @@ p_zero_branch_SKIP: ;;; ======================================== ;;; Core extension(s) - segment readable writable executable + ;segment readable writable executable include 'wordlists.asm' include 'memory.asm' @@ -251,7 +226,7 @@ p_quit_ERROR: ;;; ======================================== - segment readable writable + ;segment readable writable heap_start: rb 1048576 ; +1 Mb heap