fixed NUMBER
[rrq/rrqforth.git] / rrqforth.asm
index 3607ea8d263f1c1330259e70c5c2dcbbe0ff0d70..db4fe33e1b3df0e3ca777aae77a69fa0c905a97f 100644 (file)
@@ -106,6 +106,10 @@ p_zero_branch_SKIP:
        add rsi,8
        next
 
+;;; Execution semantics for a "fasm" WORD
+dofasm:
+       add rax,8
+       jmp rax
 ;;; Execution semantics for FORTH defition word
 ;;; At entry, rsi points into the calling definition, at the cell
 ;;; following the cell indicating this word, rax points to the CFA of
@@ -165,28 +169,41 @@ last_forth_word:
 main:
        mov rsp,DS_TOP
        mov rbp,RS_TOP
-       ;; Initialize STREAM STDIN
+       cmp qword [p_stdin_DFA],0
+       jne p_quit_INITIALIZED
+       ;; Initialize STDIN
        push 0
        push 10000
        DOFORTH p_stream
-       pop qword [p_stdin_DFA]
+       pop qword [p_stdin_DFA] ; Assign STDIN
 
+p_quit_INITIALIZED:
        ;; Initial blurb
        FORTH
        dq p_program_version
        dq p_tell
        dq p_stdin
-       dq p_read_word
+       dq p_clear_stream
+       dq p_stdin
+       dq p_evaluate_stream
+       BRANCH 0,p_quit_ERROR
+       dq p_false
+       dq sys_exit
+p_quit_ERROR:
+       dq p_literal_string
+       STRING 10,'*** Unknown word: '
+       dq p_tell
+       dq p_this_word
+       dq p_2get
+       dq p_tell
+       dq p_literal_string
+       STRING 10
        dq p_tell
-       dq p_nl
-       dq p_emit
        ENDFORTH
-       
-       ;; DOFORTH p_words
-       
-       push 0
-       DOFORTH sys_exit
+       mov rbp,RS_TOP          ; reset the return stack
+       jmp main
 
+       ;; At fasm compilation: reset to make a new word list
        previous_word = last_wordlists_word
 
 include 'syscalls.asm'