Files
LithosAnanake/src/word_registry.c
T
Robert Allan JamesandClaude Sonnet 5 63b8b3bc29
Build / build-aarch64-iso (push) Canceled after 0s
Build / build-amd64-iso (push) Canceled after 0s
Build / build-riscv64-img (push) Canceled after 0s
Migrate Hera->Artemis storage-attach to a real message round-trip
Hera still polls xHCI and sig-checks attached drives, but the storage
registration step (blk_subsys_attach_device(), now wrapped as the
BLK-ATTACH primitive) moves to Artemis's own dictionary, reached via
HERA-BLK-ATTACH-REQ/BLK-ATTACH-ACK (VM-EXEC, since Hera can't load her
own messaging.4th -- see the doc comment in repl.c). Identity birth
(Zuse genesis / WIREBIND) is deferred until the ack confirms storage
actually succeeded, instead of running synchronously underneath a
storage call that might fail ("wait for ack, safer for identity data").

Caught and fixed a real bug live during acceptance testing: Artemis's
ACK-APPEND-NUM fed a single-cell value into <# #S #> (which expects a
double-cell pair), causing a stack underflow the first time
HERA-BLK-ATTACH-REQ ran. Fixed with the same `0 SWAP` convention every
other numeric-append helper in this codebase already uses.

Verified booting clean to (zuse) ok> with no VM-EXEC errors on all
three architectures (amd64/aarch64/riscv64).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014Ec88YKxxhZGG1RNnune78
2026-09-07 21:22:04 -04:00

149 lines
6.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
StarForth — Steady-State Virtual Machine Runtime
Copyright (c) 2023–2025 Robert A. James
All rights reserved.
This file is part of the StarForth project.
Licensed under the StarForth License, Version 1.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at:
https://github.com/star.4th@proton.me/StarForth/LICENSE.txt
This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
express or implied, including but not limited to the warranties of
merchantability, fitness for a particular purpose, and noninfringement.
See the License for the specific language governing permissions and
limitations under the License.
StarForth — Steady-State Virtual Machine Runtime
Copyright (c) 2023–2025 Robert A. James
All rights reserved.
This file is part of the StarForth project.
Licensed under the StarForth License, Version 1.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at:
https://github.com/star.4th@proton.me/StarForth/LICENSE.txt
This software is provided "AS IS", WITHOUT WARRANTY OF ANY KIND,
express or implied, including but not limited to the warranties of
merchantability, fitness for a particular purpose, and noninfringement.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "../include/word_registry.h"
#include "../include/log.h"
#include <string.h>
/* Include all FORTH-79 word module headers + extensions */
#include "word_source/include/acl_words.h"
#include "word_source/include/stack_words.h"
#include "word_source/include/return_stack_words.h"
#include "word_source/include/memory_words.h"
#include "word_source/include/dictionary_words.h"
#include "word_source/include/arithmetic_words.h"
#include "word_source/include/double_words.h"
#include "word_source/include/mixed_arithmetic_words.h"
#include "word_source/include/logical_words.h"
#include "word_source/include/io_words.h"
#include "word_source/include/format_words.h"
#include "word_source/include/string_words.h"
#include "word_source/include/control_words.h"
#include "word_source/include/defining_words.h"
#include "word_source/include/dictionary_manipulation_words.h"
#include "word_source/include/vocabulary_words.h"
#include "word_source/include/block_words.h"
#include "word_source/include/editor_words.h"
#include "word_source/include/system_words.h"
#include "word_source/include/starforth_words.h"
#include "word_source/include/physics_benchmark_words.h"
#include "word_source/include/physics_pipelining_diagnostic_words.h"
#include "word_source/include/physics_freeze_words.h"
#include "word_source/include/dictionary_heat_diagnostic_words.h"
#include "word_source/include/log_words.h"
#include "word_source/include/q48_words.h"
#include "word_source/include/inference_words.h"
#include "word_source/include/defer_words.h"
#include "word_source/include/framebuffer_words.h"
#include "word_source/include/keyboard_words.h"
#include "word_source/include/ttf_words.h"
#include "word_source/include/scroll_words.h"
#ifdef __STARKERNEL__
#include "starkernel/doe_log.h"
#include "starkernel/repl.h"
#endif
/**
* @brief Registers a single FORTH word in the virtual machine
* @param vm Pointer to the virtual machine instance
* @param name Name of the FORTH word to register
* @param func Function pointer to the word's implementation
*/
void register_word(VM *vm, const char *name, word_func_t func) {
DictEntry *entry = vm_create_word(vm, name, strlen(name), func);
if (entry) {
log_message(LOG_DEBUG, "Registered word: %s", name);
} else {
log_message(LOG_ERROR, "Failed to register word: %s", name);
}
}
/**
* @brief Registers all standard FORTH-79 words in the virtual machine
* @param vm Pointer to the virtual machine instance
* @details Registers all 18 FORTH-79 word modules in dependency order,
* starting with fundamental stack operations and building up to
* more complex functionality like control flow and editing.
*/
void register_forth79_words(VM *vm) {
log_message(LOG_INFO, "Registering FORTH-79 Standard word set...");
/* Register all 18 FORTH-79 word modules IN DEPENDENCY ORDER */
register_stack_words(vm); /* Module 1: Stack Operations - FOUNDATION */
register_return_stack_words(vm); /* Module 2: Return Stack Operations */
register_memory_words(vm); /* Module 3: Memory Operations */
register_arithmetic_words(vm); /* Module 4: Arithmetic Operations */
register_logical_words(vm); /* Module 5: Logical & Comparison */
register_mixed_arithmetic_words(vm); /* Module 6: Mixed Arithmetic - needs arithmetic + stack */
register_double_words(vm); /* Module 7: Double Number Arithmetic */
register_format_words(vm); /* Module 8: Formatting & Conversion */
register_string_words(vm); /* Module 9: String & Text Processing */
register_io_words(vm); /* Module 10: I/O & Terminal */
register_block_words(vm); /* Module 11: Block & Mass Storage */
register_dictionary_words(vm); /* Module 12: Dictionary & Compilation */
register_dictionary_manipulation_words(vm); /* Module 13: Dictionary Manipulation */
register_vocabulary_words(vm); /* Module 14: Vocabulary System */
register_system_words(vm); /* Module 15: System & Environment */
register_editor_words(vm); /* Module 16: Line Editor */
register_defining_words(vm); /* Module 17: Defining Words */
register_control_words(vm); /* Module 18: Control Flow */
register_starforth_words(vm); /* Module 19: StarForth Implementation Extensions */
register_acl_words(vm); /* Module 20: Word-Level ACL System */
register_physics_benchmark_words(vm); /* Module 21: Physics Benchmark Words */
register_physics_pipelining_diagnostic_words(vm); /* Module 21: Pipelining Diagnostics */
register_physics_freeze_words(vm); /* Module 22: Phase 2 Freeze/Decay Control Words */
register_dictionary_heat_diagnostic_words(vm); /* Module 23: Dictionary Heat Optimization */
register_log_words(vm); /* Module 24: Log Level Control */
register_q48_words(vm); /* Module 25: Q48.16 Fixed-Point Math */
register_inference_words(vm); /* Module 26: SSM Inference + Jacquard */
register_defer_words(vm); /* Module 27: DEFER / IS late binding */
register_framebuffer_words(vm); /* Module 28: Console fabric -- raw framebuffer primitives */
register_keyboard_words(vm); /* Module 29: Console fabric -- raw keyboard scancode diagnostic */
register_ttf_words(vm); /* Module 30: TrueType text entry point */
register_scroll_words(vm); /* Module 31: REPL scrollback (FABRIC-0.md 4.4q) */
#ifdef __STARKERNEL__
register_doe_log_words(vm); /* Module 32: DoE instrumentation runtime toggle (HB-ON/HB-OFF) */
sk_repl_register_words(vm); /* Module 33: BLK-ATTACH-ACK, Artemis's storage-attach reply target */
#endif
log_message(LOG_INFO, "FORTH-79 Standard word set registration complete");
}