forth-riscv

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

commit 4256663dfb65c71898bc4b3f44a483fde5db2aba
parent ee279aeafca810f2aa70e63a6a29bbc5624fc767
Author: Christian Ermann <christianermann@gmail.com>
Date:   Thu, 21 Nov 2024 16:09:16 -0800

Store name for 'create'd words

Diffstat:
Msrc/forth.s | 32++++++++++++++++++++++++++++++--
1 file changed, 30 insertions(+), 2 deletions(-)

diff --git a/src/forth.s b/src/forth.s @@ -190,6 +190,9 @@ defvar "state", state, 0x783132F6 defvar "dp", dp, 0x491CB0B9 .int __here_start +defvar "mp", mp, 0x532E0998 + .int __meta_start + defvar "latest", latest, 0x41704246 .int name_read_line @@ -1087,14 +1090,40 @@ defword "exit,", exit_comma, 0xD540F80B jal comma exit +defword "create-meta", create_meta, 0x001AE175 + # save meta address + la y, _mp + load_cell x, 0(y) + push_ret x + # store name length + sb w, 0(x) + addi x, x, 1 + # store name + pop y +_create_meta_loop: + # w=len, x=dst, y=src + lb t0, 0(y) + sb t0, 0(x) + addi w, w, -1 + addi x, x, 1 + addi y, y, 1 + bgtz w, _create_meta_loop +_create_meta_done: + # update meta address + la y, _mp + store_cell x, 0(y) + pop_ret w + exit + defword "create", create, 0x26BB595D jal parse_word jal latest # link jal fetch jal comma + jal two_dup jal hash # hash jal comma - push_imm 0 # meta + jal create_meta jal comma push_imm 0 # flags jal char_comma @@ -1363,7 +1392,6 @@ _okay: word_buffer: .space 255 .balign cell -_meta: .int __meta_start _tib: .space 255 _tib_len: .int 255