X-Git-Url: https://git.rrq.au/?a=blobdiff_plain;f=rrqforth.asm;h=1928fbb80fdb038b125c037b10daccb46d99f357;hb=fe3fcf6fadcb1ede09e8eaa6eb227899fc3fd6ab;hp=f7f310af30754fd9f506a5ee51c1dc6f7b069853;hpb=bf67023324b2a0c5723dd3167ef757209ba62e01;p=rrq%2Frrqforth.git diff --git a/rrqforth.asm b/rrqforth.asm index f7f310a..1928fbb 100644 --- a/rrqforth.asm +++ b/rrqforth.asm @@ -73,7 +73,7 @@ dostring: pushpname rax next - WORD p_calltrace,'calltrace',dovalue + WORD p_calltrace,'[calltrace]',dovalue ;; Common call point for debugging ;; rax = cfa of called word ;; rsi = cell* of next forth word @@ -106,6 +106,8 @@ DS_TOP: ; The initial rsp ;segment readable executable +include 'signals.asm' + ;;; 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. @@ -204,6 +206,8 @@ main: ;; Initial rsp points to the arguments block of size (64 bits) ;; followed by the argument pointers. mov qword [p_args_DFA],rsp + mov rbp,RS_TOP + call p_setup_signals_DFA call main_is_verbose mov qword [p_verboseQ_DFA],rdx jmp p_quit_DFA ; QUIT @@ -212,13 +216,11 @@ main: ;; return boolean in rdx ;; implementation for that 2 byte asciiz string main_is_verbose_data: - dq main_is_verbose_data_end - $ ; length of data db '-v',0 -main_is_verbose_data_end: main_is_verbose: mov rbx,qword [p_args_DFA] ; Pointer to main arguments - mov r8,qword [rbx] + mov r8,qword [rbx] ; r8 = count of pointers xor rdx,rdx cld main_is_verbose_next: @@ -227,13 +229,11 @@ main_is_verbose_next: add rbx,8 mov rsi,qword [rbx] mov rdi,main_is_verbose_data - lodsq - mov rcx,rax main_is_verbose_loop: cmpsb jne main_is_verbose_next - dec rcx - jg main_is_verbose_loop + cmp byte[rsi-1],0 + jne main_is_verbose_loop not rdx main_is_not_verbose: ret @@ -279,7 +279,7 @@ p_quit_ERROR: dq p_tell ENDFORTH mov rbp,RS_TOP ; reset the return stack - jmp main + jmp p_quit_INITIALIZED ;;; ========================================