X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=rrqforth.asm;h=db4fe33e1b3df0e3ca777aae77a69fa0c905a97f;hb=c7022e938a1d35c0929374616a871c2caba15598;hp=3607ea8d263f1c1330259e70c5c2dcbbe0ff0d70;hpb=02ef6e814ef0e6c61348c70bd310ba1f0df2506b;p=rrq%2Frrqforth.git diff --git a/rrqforth.asm b/rrqforth.asm index 3607ea8..db4fe33 100644 --- a/rrqforth.asm +++ b/rrqforth.asm @@ -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'