projects
/
rrq
/
rrqforth.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
added debug call target. reverted forth sequence compaction
[rrq/rrqforth.git]
/
rrqforth.asm
diff --git
a/rrqforth.asm
b/rrqforth.asm
index da94d056d7ca7da435815ab01f465ab39b64e380..ecea1171612a82f840f91d82ce44931432805576 100644
(file)
--- a/
rrqforth.asm
+++ b/
rrqforth.asm
@@
-73,6
+73,13
@@
dostring:
pushpname rax
next
pushpname rax
next
+ WORD p_calltrace,'calltrace',dovalue
+ ;; Common call point for debugging
+ ;; rax = cfa of called word
+ ;; rsi = cell* of next forth word
+ ;; [$rsp] = from where the call was
+ ret
+
include 'syscalls.asm'
;;; ========================================
include 'syscalls.asm'
;;; ========================================
@@
-176,18
+183,28
@@
include 'stdio.asm'
include 'compile.asm'
WORD p_program_version,'PROGRAM_VERSION',dostring
include 'compile.asm'
WORD p_program_version,'PROGRAM_VERSION',dostring
- STRING 'RRQ Forth version 0.1 - 2021-05-
13
',10
+ STRING 'RRQ Forth version 0.1 - 2021-05-
22
',10
WORD p_stdin,'STDIN',dovalue
;; Initialised to hold a STREAM for fd 0
dq 0
WORD p_stdin,'STDIN',dovalue
;; Initialised to hold a STREAM for fd 0
dq 0
+ WORD p_args,'ARGS',dostring
+ ;; Pointer to initial argument block
+ dq 0 ; *(int argc,(char*[argc]) argv)
+
;;; The main entry point.
;;; The main entry point.
+main:
+ ;; Initial rsp points to the arguments block of size (64 bits)
+ ;; followed by the argument pointers.
+ mov qword [p_args_DFA],rsp
+ jmp p_quit_DFA ; QUIT
+
;;; This word is also the last word before syscalls
last_forth_word:
WORD p_quit,'QUIT',fasm
;; QUIT is the program entry point ********************
;;; This word is also the last word before syscalls
last_forth_word:
WORD p_quit,'QUIT',fasm
;; QUIT is the program entry point ********************
-main:
+
mov rsp,DS_TOP
mov rbp,RS_TOP
cmp qword [p_stdin_DFA],0
mov rsp,DS_TOP
mov rbp,RS_TOP
cmp qword [p_stdin_DFA],0
@@
-204,8
+221,6
@@
p_quit_INITIALIZED:
dq p_program_version
dq p_tell
dq p_stdin
dq p_program_version
dq p_tell
dq p_stdin
- dq p_clear_stream
- dq p_stdin
dq p_evaluate_stream
BRANCH 0,p_quit_ERROR
dq p_false
dq p_evaluate_stream
BRANCH 0,p_quit_ERROR
dq p_false