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
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'