add string example
This commit is contained in:
parent
6b23fd2119
commit
a9f3ec694c
|
@ -10,9 +10,17 @@ int main(int argc, char **argv) {
|
||||||
vm.stack_size = STACK_SIZE;
|
vm.stack_size = STACK_SIZE;
|
||||||
vm.memory_size = MEMORY_SIZE;
|
vm.memory_size = MEMORY_SIZE;
|
||||||
|
|
||||||
uint32_t end = test_loop_compile(vm.memory);
|
uint32_t end = 0;
|
||||||
|
|
||||||
|
/* test_add_compile(vm.memory); */
|
||||||
/* test_add_function_compile(vm.memory); */
|
/* test_add_function_compile(vm.memory); */
|
||||||
|
/* test_loop_compile(vm.memory); */
|
||||||
|
test_hello_world_compile(vm.memory);
|
||||||
/* test_recursive_function_compile(vm.memory); */
|
/* test_recursive_function_compile(vm.memory); */
|
||||||
|
while (step_vm(&vm));
|
||||||
|
core_dump(&vm);
|
||||||
|
return 0;
|
||||||
|
|
||||||
uint32_t buffer_size = 640 * 480 * sizeof(uint32_t);
|
uint32_t buffer_size = 640 * 480 * sizeof(uint32_t);
|
||||||
|
|
||||||
Device screen;
|
Device screen;
|
||||||
|
@ -25,9 +33,10 @@ int main(int argc, char **argv) {
|
||||||
vm.mp += buffer_size;
|
vm.mp += buffer_size;
|
||||||
|
|
||||||
/* Create window and renderer */
|
/* Create window and renderer */
|
||||||
SDL_Window *window = SDL_CreateWindow(
|
SDL_Window *window =
|
||||||
"Reality Engine VM", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
|
SDL_CreateWindow("Reality Engine VM", SDL_WINDOWPOS_CENTERED,
|
||||||
screen.s.width, screen.s.height, SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
|
SDL_WINDOWPOS_CENTERED, screen.s.width, screen.s.height,
|
||||||
|
SDL_WINDOW_SHOWN | SDL_WINDOW_ALLOW_HIGHDPI);
|
||||||
|
|
||||||
SDL_Renderer *renderer = SDL_CreateRenderer(
|
SDL_Renderer *renderer = SDL_CreateRenderer(
|
||||||
window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
|
||||||
|
@ -40,25 +49,28 @@ int main(int argc, char **argv) {
|
||||||
/* Enable nearest-neighbor scaling (preserves pixel art) */
|
/* Enable nearest-neighbor scaling (preserves pixel art) */
|
||||||
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); /* "0" = nearest-neighbor */
|
SDL_SetHint(SDL_HINT_RENDER_SCALE_QUALITY, "0"); /* "0" = nearest-neighbor */
|
||||||
|
|
||||||
while (step_vm(&vm)) {
|
bool running = true;
|
||||||
|
while (running) {
|
||||||
|
step_vm(&vm);
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
return 0;
|
running = false;
|
||||||
case SDL_MOUSEBUTTONDOWN:
|
case SDL_MOUSEBUTTONDOWN:
|
||||||
/* event.button.x, event.button.y, event.button.button */
|
printf("mouse_down: x=%d, y=%d, btn=%d\n", event.button.x,
|
||||||
|
event.button.y, event.button.button);
|
||||||
break;
|
break;
|
||||||
case SDL_MOUSEMOTION:
|
case SDL_MOUSEMOTION:
|
||||||
/* handleInput(event.motion.x, event.motion.y, 0); 0 for no button */
|
printf("mouse_move: x=%d, y=%d\n", event.motion.x, event.motion.y);
|
||||||
break;
|
break;
|
||||||
case SDL_FINGERDOWN:
|
case SDL_FINGERDOWN:
|
||||||
/* handleInput(event.tfinger.x * screen.s.width, */
|
printf("touch_down x=%f, y=%f\n", event.tfinger.x * screen.s.width,
|
||||||
/* event.tfinger.y * screen.s.height, 1); // 1 for touch */
|
event.tfinger.y * screen.s.height);
|
||||||
break;
|
break;
|
||||||
case SDL_FINGERMOTION:
|
case SDL_FINGERMOTION:
|
||||||
/* handleInput(event.tfinger.x * screen.s.width, */
|
printf("touch_move x=%f, y=%f\n", event.tfinger.x * screen.s.width,
|
||||||
/* event.tfinger.y * screen.s.height, 0); // 0 for no button */
|
event.tfinger.y * screen.s.height);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -68,7 +80,6 @@ int main(int argc, char **argv) {
|
||||||
|
|
||||||
SDL_RenderClear(renderer);
|
SDL_RenderClear(renderer);
|
||||||
|
|
||||||
/* Optional: Set logical size to maintain 640x480 aspect ratio */
|
|
||||||
/* (Scales to fit screen while preserving pixel grid) */
|
/* (Scales to fit screen while preserving pixel grid) */
|
||||||
SDL_Rect output_rect;
|
SDL_Rect output_rect;
|
||||||
SDL_RenderGetViewport(renderer, &output_rect);
|
SDL_RenderGetViewport(renderer, &output_rect);
|
||||||
|
@ -84,6 +95,5 @@ int main(int argc, char **argv) {
|
||||||
SDL_RenderCopy(renderer, texture, NULL, &dstrect);
|
SDL_RenderCopy(renderer, texture, NULL, &dstrect);
|
||||||
SDL_RenderPresent(renderer);
|
SDL_RenderPresent(renderer);
|
||||||
}
|
}
|
||||||
core_dump(&vm);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,11 @@ typedef struct slice_s {
|
||||||
uint32_t end;
|
uint32_t end;
|
||||||
} Slice;
|
} Slice;
|
||||||
|
|
||||||
|
typedef struct cell_s {
|
||||||
|
uint32_t car;
|
||||||
|
uint32_t cdr;
|
||||||
|
} Cell;
|
||||||
|
|
||||||
#define MAX_REGS 32
|
#define MAX_REGS 32
|
||||||
typedef struct frame_s {
|
typedef struct frame_s {
|
||||||
Value registers[MAX_REGS]; /* R0-R31 */
|
Value registers[MAX_REGS]; /* R0-R31 */
|
||||||
|
|
24
src/test.c
24
src/test.c
|
@ -1,5 +1,27 @@
|
||||||
#include "test.h"
|
#include "test.h"
|
||||||
|
|
||||||
|
uint32_t test_hello_world_compile(Value *memory) {
|
||||||
|
uint32_t i = 0;
|
||||||
|
memory[i++].u = OP(OP_LOADU, 1, 0, 0);
|
||||||
|
memory[i++].u = 4;
|
||||||
|
memory[i++].u = OP(OP_PRINT_STRING, 0, 1, 0); /* print("nuqneH 'u'?"); */
|
||||||
|
memory[i++].u = OP(OP_HALT, 0, 0, 0); /* explicit halt */
|
||||||
|
memory[i++].u = 12;
|
||||||
|
memory[i].c[0] = 'n';
|
||||||
|
memory[i].c[1] = 'u';
|
||||||
|
memory[i].c[2] = 'q';
|
||||||
|
memory[i++].c[3] = 'n';
|
||||||
|
memory[i].c[0] = 'e';
|
||||||
|
memory[i].c[1] = 'H';
|
||||||
|
memory[i].c[2] = ' ';
|
||||||
|
memory[i++].c[3] = '\'';
|
||||||
|
memory[i].c[0] = 'u';
|
||||||
|
memory[i].c[1] = '\'';
|
||||||
|
memory[i].c[2] = '?';
|
||||||
|
memory[i++].c[3] = '\0';
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t test_add_compile(Value *memory) {
|
uint32_t test_add_compile(Value *memory) {
|
||||||
uint32_t i = 0;
|
uint32_t i = 0;
|
||||||
memory[i++].u = OP(OP_LOADU, 0, 0, 0);
|
memory[i++].u = OP(OP_LOADU, 0, 0, 0);
|
||||||
|
@ -18,7 +40,7 @@ uint32_t test_loop_compile(Value *memory) {
|
||||||
memory[i++].u = OP(OP_LOADF, 0, 0, 0); /* let a = 5.0 */
|
memory[i++].u = OP(OP_LOADF, 0, 0, 0); /* let a = 5.0 */
|
||||||
memory[i++].f = 5.0f;
|
memory[i++].f = 5.0f;
|
||||||
memory[i++].u = OP(OP_LOADI, 1, 0, 0); /* do (i = 5, 0, -1) { */
|
memory[i++].u = OP(OP_LOADI, 1, 0, 0); /* do (i = 5, 0, -1) { */
|
||||||
memory[i++].i = 5;
|
memory[i++].i = 5000;
|
||||||
memory[i++].u = OP(OP_LOADI, 2, 0, 0); /* loop check value */
|
memory[i++].u = OP(OP_LOADI, 2, 0, 0); /* loop check value */
|
||||||
memory[i++].i = 0;
|
memory[i++].i = 0;
|
||||||
memory[i++].u = OP(OP_LOADI, 3, 0, 0); /* loop incriment value */
|
memory[i++].u = OP(OP_LOADI, 3, 0, 0); /* loop incriment value */
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include "opcodes.h"
|
#include "opcodes.h"
|
||||||
|
|
||||||
|
uint32_t test_hello_world_compile (Value *memory);
|
||||||
uint32_t test_add_compile (Value *memory);
|
uint32_t test_add_compile (Value *memory);
|
||||||
uint32_t test_loop_compile (Value *memory);
|
uint32_t test_loop_compile (Value *memory);
|
||||||
uint32_t test_add_function_compile(Value *memory);
|
uint32_t test_add_function_compile(Value *memory);
|
||||||
|
|
Loading…
Reference in New Issue