forth-riscv

My forth
git clone git://git.electrosoup.com/forth-riscv
Log | Files | Refs

commit 545d769623e91ad9316fdae0d9da00ba41dd6867
parent 2e793f6c848c7b76a1c13d76b6c30815356bedeb
Author: Christian Ermann <christianermann@gmail.com>
Date:   Wed, 30 Oct 2024 12:47:54 -0700

Fix 'link'

Diffstat:
Mforth.s | 26+++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)

diff --git a/forth.s b/forth.s @@ -185,7 +185,7 @@ accept_impl: pop_ret ra ret -defword "refill-buffer", 13, 0, 0x4B9E9FEE, refill_buffer, accept +defword "refill-buffer", 13, 0, 0x4B9E9FEE, refill_buffer, accept_file # ( addr max-len -- recv'd-len ) .int two_dup, accept, dup, q_branch, _refill_buffer_failed .int source_len, store @@ -234,7 +234,7 @@ defcode "source-id", 9, 0, 0x965ED1E2, source_id, source_offset push w next -defcode "tib", 3, 0, 0xC90B0194, tib, source_len +defcode "tib", 3, 0, 0xC90B0194, tib, source_id # ( -- addr len ) la w, _tib push w @@ -252,7 +252,7 @@ defcode "fib", 3, 0, 0xBCE49236, fib, tib push w next -defcode "parse-word", 10, 0, 0xB218226F, parse_word, source +defcode "parse-word", 10, 0, 0xB218226F, parse_word, fib la w, _source load_cell w, 0(w) # buff addr la x, _source_len @@ -452,7 +452,7 @@ defcode "lit", 3, 0, 0x404CD5B6, lit, latest push w next -defword "allot", 5, 0, 0xADB1A69F, allot, drop +defword "allot", 5, 0, 0xADB1A69F, allot, lit .int dp, add_store .int exit @@ -466,7 +466,7 @@ defword "c,", 2, 0, 0xA32A0A5A, char_comma, comma .int lit, 1, allot # increment 'here' .int exit -defcode "align", 5, 0, 0xC73174DF, align, aligned +defcode "align", 5, 0, 0xC73174DF, align, char_comma la w, _here load_cell x, 0(w) addi x, x, 3 @@ -478,7 +478,7 @@ defcode "align", 5, 0, 0xC73174DF, align, aligned # stack manipulation # ----------------------------------------------------------------------------- -defcode "dup", 3, 0, 0xD330F226, dup, lit +defcode "dup", 3, 0, 0xD330F226, dup, align load_cell w, 0(psp) push w next @@ -494,7 +494,7 @@ defcode "drop", 4, 0, 0xA9A58D8C, drop, swap pop zero next -defcode "2dup", 3, 0, 0xD330F226, two_dup, lit +defcode "2dup", 3, 0, 0xD330F226, two_dup, drop load_cell w, 0(psp) load_cell x, cell(psp) push x @@ -505,14 +505,14 @@ defcode "2dup", 3, 0, 0xD330F226, two_dup, lit # math and logic # ----------------------------------------------------------------------------- -defcode "+", 1, 0, 0xC4ADC675, plus, align +defcode "+", 1, 0, 0xC4ADC675, plus, two_dup pop w pop x add w, w, x push w next -defcode "aligned", 7, 0, 0xC73174DF, aligned, char_comma +defcode "aligned", 7, 0, 0xC73174DF, aligned, plus pop w addi w, w, 3 andi w, w, 0xFFFFFFFC @@ -523,7 +523,7 @@ defcode "aligned", 7, 0, 0xC73174DF, aligned, char_comma # compiler # ----------------------------------------------------------------------------- -defword "create", 6, 0, 0x26BB595D, create, plus +defword "create", 6, 0, 0x26BB595D, create, aligned .int latest, fetch, comma # link .int hash, comma # hash .int lit, 0, comma # meta @@ -585,14 +585,14 @@ defword ";", 1, flag_immediate, 0x3E0CB6DA, semicolon, colon .int l_bracket # enter 'immediate' mode .int exit -defcode "compiling?", 10, 0, 0x94652AE2, compiling_q, execute +defcode "compiling?", 10, 0, 0x94652AE2, compiling_q, semicolon la w, _state load_cell w, 0(w) andi w, w, state_compile push w next -defcode "immediate?", 10, 0, 0x89F23E9F, immediate_q, execute +defcode "immediate?", 10, 0, 0x89F23E9F, immediate_q, compiling_q pop w addi w, w, flag_offset - code_offset lb w, 0(w) @@ -637,7 +637,7 @@ version_string: word_buffer: .space 255 .balign cell -_latest: .int name_semicolon +_latest: .int name_immediate_q _here: .int __here_start _meta: .int __meta_start