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:
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