Files
LithosAnanake/src/word_registry.c
T
Robert Allan JamesandClaude Sonnet 5 59458a0a16 Cursor indicator + HB-ON/HB-OFF runtime DoE instrumentation toggle
Cursor (Captain Bob: "the only thing we need is a cursor"):
vt100_draw_cursor() draws a solid block at the terminal's current
position, called from repl.c after the prompt prints and after every
keystroke/backspace. vt100_erase_cursor() cleans up the one gap a static
cursor has -- Enter/newline moves away from the cursor cell without a
character draw ever overwriting it, which left a stray block behind
until this fix.

HB-ON/HB-OFF (Captain Bob: run a program with or without instrumentation
without rebuilding):
Converted per-tick DoE logging from a build-time flag (HEARTBEAT_DOE_LOG)
to a runtime one. doe_log_tick_row() now self-gates on g_doe_log_enabled
(default 1, matching the old default) instead of being compiled out
entirely; the call site in vm_runtime.c is unconditional. Two new FORTH
words, HB-ON and HB-OFF, flip the flag live. Removed the now-dead
HEARTBEAT_DOE_LOG plumbing: the Kconfig symbol, and the -D forwarding in
both LOADER_CFLAGS and KERNEL_CFLAGS.

Verified: three-arch clean QEMU boot + logs; dictionary word count 466
(463 baseline + ALT+TAB + HB-ON + HB-OFF, exactly the three words added
across this session); amd64 screendump confirms the cursor renders
correctly after real interactive typing.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-12 16:22:09 -04:00

147 lines
6.8 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) 20232025 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) 20232025 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"
#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.md 4.4q) */
#ifdef __STARKERNEL__
register_doe_log_words(vm); /* Module 32: DoE instrumentation runtime toggle (HB-ON/HB-OFF) */
#endif
log_message(LOG_INFO, "FORTH-79 Standard word set registration complete");
}