This commit is contained in:
2026-02-20 20:51:36 -05:00
parent 784f3b9945
commit 9dc4372bf3

View File

@@ -84,38 +84,37 @@ global DictEntry dict[256];
global U8 dict_count = 0; global U8 dict_count = 0;
IA_ void scatter(U4 token, const char* anno_str) { IA_ void scatter(U4 token, const char* anno_str) {
if (tape_arena.used + sizeof(U4) <= tape_arena.capacity && anno_arena.used + sizeof(U8) <= anno_arena.capacity) { if (tape_arena.used + sizeof(U4) <= tape_arena.capacity && anno_arena.used + sizeof(U8) <= anno_arena.capacity) {
U4*r ptr = u4_r(tape_arena.start + tape_arena.used); U4*r ptr = u4_r(tape_arena.start + tape_arena.used);
ptr[0] = token; ptr[0] = token;
tape_arena.used += sizeof(U4); tape_arena.used += sizeof(U4);
U8*r aptr = u8_r(anno_arena.start + anno_arena.used); U8*r aptr = u8_r(anno_arena.start + anno_arena.used);
aptr[0] = 0; aptr[0] = 0;
if (anno_str) { if (anno_str) {
char* dest = (char*)aptr; char* dest = (char*)aptr;
int i = 0; int i = 0; while(i < 8 && anno_str[i]) {
while(i < 8 && anno_str[i]) { dest[i] = anno_str[i];
dest[i] = anno_str[i]; i ++;
i++; }
}
}
anno_arena.used += sizeof(U8);
} }
anno_arena.used += sizeof(U8);
}
} }
// --- Minimal x86-64 Emitter --- // --- Minimal x86-64 Emitter ---
internal void emit8(U1 b) { internal void emit8(U1 b) {
if (code_arena.used + 1 <= code_arena.capacity) { if (code_arena.used + 1 <= code_arena.capacity) {
U1*r ptr = u1_r(code_arena.start + code_arena.used); U1*r ptr = u1_r(code_arena.start + code_arena.used);
ptr[0] = b; ptr[0] = b;
code_arena.used += 1; code_arena.used += 1;
} }
} }
internal void emit32(U4 val) { internal void emit32(U4 val) {
if (code_arena.used + 4 <= code_arena.capacity) { if (code_arena.used + 4 <= code_arena.capacity) {
U4*r ptr = u4_r(code_arena.start + code_arena.used); U4*r ptr = u4_r(code_arena.start + code_arena.used);
ptr[0] = val; ptr[0] = val;
code_arena.used += 4; code_arena.used += 4;
} }
} }
internal void compile_action(U4 val) internal void compile_action(U4 val)
@@ -386,7 +385,7 @@ S8 win_proc(void* hwnd, U4 msg, U8 wparam, S8 lparam)
if (wparam == MS_VK_TAB) { if (wparam == MS_VK_TAB) {
// Cycle Color Tag // Cycle Color Tag
U4 t = tape_ptr[cursor_idx]; U4 t = tape_ptr[cursor_idx];
U4 tag = (unpack_tag(t) + 1) % STag_Count; U4 tag = (unpack_tag(t) + 1) % STag_Count;
tape_ptr[cursor_idx] = pack_token(tag, unpack_val(t)); tape_ptr[cursor_idx] = pack_token(tag, unpack_val(t));
} }
@@ -403,7 +402,6 @@ S8 win_proc(void* hwnd, U4 msg, U8 wparam, S8 lparam)
} }
else return 0; else return 0;
} }
if (tape_count > 0) { if (tape_count > 0) {
U8*r anno_ptr = u8_r(anno_arena.start); U8*r anno_ptr = u8_r(anno_arena.start);
for (U8 i = delete_idx; i < tape_count - 1; i ++) { for (U8 i = delete_idx; i < tape_count - 1; i ++) {
@@ -413,30 +411,31 @@ S8 win_proc(void* hwnd, U4 msg, U8 wparam, S8 lparam)
tape_arena.used -= sizeof(U4); tape_arena.used -= sizeof(U4);
anno_arena.used -= sizeof(U8); anno_arena.used -= sizeof(U8);
} }
} else if (wparam == MS_VK_SPACE || wparam == MS_VK_RETURN) { }
// Insert New Token else if (wparam == MS_VK_SPACE || wparam == MS_VK_RETURN) {
// Shift: insert AFTER cursor | Regular: insert BEFORE cursor // Insert New Token
B4 is_shift = (ms_get_async_key_state(MS_VK_SHIFT) & 0x8000) != 0; // Shift: insert AFTER cursor | Regular: insert BEFORE cursor
U8 insert_idx = cursor_idx; B4 is_shift = (ms_get_async_key_state(MS_VK_SHIFT) & 0x8000) != 0;
if (is_shift) insert_idx ++; U8 insert_idx = cursor_idx;
if (is_shift) insert_idx ++;
if (tape_arena.used + sizeof(U4) <= tape_arena.capacity && anno_arena.used + sizeof(U8) <= anno_arena.capacity) { if (tape_arena.used + sizeof(U4) <= tape_arena.capacity && anno_arena.used + sizeof(U8) <= anno_arena.capacity) {
U8*r anno_ptr = u8_r(anno_arena.start); U8*r anno_ptr = u8_r(anno_arena.start);
for (U8 i = tape_count; i > insert_idx; i--) { for (U8 i = tape_count; i > insert_idx; i --) {
tape_ptr[i] = tape_ptr[i-1]; tape_ptr[i] = tape_ptr[i-1];
anno_ptr[i] = anno_ptr[i-1]; anno_ptr[i] = anno_ptr[i-1];
}
if (wparam == MS_VK_RETURN) {
tape_ptr[insert_idx] = pack_token(STag_Format, 0xA);
anno_ptr[insert_idx] = 0;
} else {
tape_ptr[insert_idx] = pack_token(STag_Comment, id2(' ',' '));
anno_ptr[insert_idx] = 0;
}
if (is_shift) cursor_idx++;
tape_arena.used += sizeof(U4);
anno_arena.used += sizeof(U8);
} }
if (wparam == MS_VK_RETURN) {
tape_ptr[insert_idx] = pack_token(STag_Format, 0xA);
anno_ptr[insert_idx] = 0;
} else {
tape_ptr[insert_idx] = pack_token(STag_Comment, id2(' ',' '));
anno_ptr[insert_idx] = 0;
}
if (is_shift) cursor_idx ++;
tape_arena.used += sizeof(U4);
anno_arena.used += sizeof(U8);
}
} }
// Interaction: Reset VM and compile // Interaction: Reset VM and compile
@@ -535,7 +534,7 @@ S8 win_proc(void* hwnd, U4 msg, U8 wparam, S8 lparam)
} }
} }
else if (unpack_tag(tape_ptr[i]) == STag_Format && unpack_val(tape_ptr[i]) == 0xA) { else if (unpack_tag(tape_ptr[i]) == STag_Format && unpack_val(tape_ptr[i]) == 0xA) {
x = start_x; x = start_x;
y += spacing_y; y += spacing_y;
} }
else { else {
@@ -583,7 +582,7 @@ S8 win_proc(void* hwnd, U4 msg, U8 wparam, S8 lparam)
ms_set_text_color(hdc, 0x00C8C8C8); ms_set_text_color(hdc, 0x00C8C8C8);
ms_text_out_a(hdc, 400, 520, "Global Memory (Contiguous Array):", 33); ms_text_out_a(hdc, 400, 520, "Global Memory (Contiguous Array):", 33);
for (int i=0; i<4; i++) { for (int i=0; i < 4; i ++) {
char glob_str[32] = "[0]: 00000000"; char glob_str[32] = "[0]: 00000000";
glob_str[1] = '0' + i; glob_str[1] = '0' + i;
u64_to_hex(vm_globals[i], glob_str + 5, 8); u64_to_hex(vm_globals[i], glob_str + 5, 8);
@@ -594,7 +593,7 @@ S8 win_proc(void* hwnd, U4 msg, U8 wparam, S8 lparam)
// Print Log // Print Log
ms_set_text_color(hdc, 0x00C8C8C8); ms_set_text_color(hdc, 0x00C8C8C8);
ms_text_out_a(hdc, 750, 520, "Print Log:", 10); ms_text_out_a(hdc, 750, 520, "Print Log:", 10);
for (int i=0; i<log_count && i<4; i++) { for (int i = 0; i<log_count && i < 4; i ++) {
char log_str[32] = "00000000"; char log_str[32] = "00000000";
u64_to_hex(log_buffer[i], log_str, 8); u64_to_hex(log_buffer[i], log_str, 8);
ms_set_text_color(hdc, 0x0094BAA1); ms_set_text_color(hdc, 0x0094BAA1);