From 8721f551a0c796960b941e3abc4f1cc2c35eaac4 Mon Sep 17 00:00:00 2001 From: kdx Date: Sun, 19 Mar 2023 03:47:59 +0100 Subject: i'm insane --- main.c | 13 ++++++++++--- test.sh | 3 ++- vm.md | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/main.c b/main.c index 8fa5546..41ae0db 100644 --- a/main.c +++ b/main.c @@ -21,8 +21,15 @@ destroy_duplicates(Token **list, unsigned int type) int main(int argc, char **argv) { - if (argc != 2) { - fprintf(stderr, "usage: %s \n", argv[0]); + if (argc < 2 || argc > 3) { + fprintf(stderr, "usage: %s [gyte size]\n", + argv[0]); + return 1; + } + + const int gyte_size = (argc > 2) ? atoi(argv[2]) : 1; + if (gyte_size < 1 || gyte_size > 256) { + fprintf(stderr, "gyte size range is 1 to 256"); return 1; } @@ -72,7 +79,7 @@ main(int argc, char **argv) fprintf(stderr, "memory_create failed\n"); break; } - token_print(tokens, 1, 0); + //token_print(tokens, 1, 0); } while(0); memory_destroy(&memory); token_destroy(tokens); diff --git a/test.sh b/test.sh index 0ded8c7..4c2b89a 100755 --- a/test.sh +++ b/test.sh @@ -1,5 +1,6 @@ #!/bin/sh ./build.sh || exit 1 -./golem /dev/null || exit 1 +./golem /dev/null 1 || exit 1 ./golem onlymain.golem || exit 1 +./golem onlymain.golem 16 || exit 1 valgrind ./golem mvp.golem >/dev/null || exit 1 diff --git a/vm.md b/vm.md index 8cde69d..ba705a5 100644 --- a/vm.md +++ b/vm.md @@ -38,3 +38,35 @@ GOLEM will have two stacks (to not counfound with memory stack): * the instruction stack to be used by instructions and immediate operations * the return stack used to store the program counter on function call and restore it on return + +## manually translated onlymain.golem + +``` +gyte size: 1 +; store stack offset and program counter +call main +; quit +stop +main: + ; stack offset + push s0 + push 2 + add + save s0 + ; argv + push (s0-1) + ; (sub argc 1) + push (s0-2) + push 1 + sub + ; [argv (sub argc 1)] + deref + ; (print [argv (sub argc 1)] + print + ; return (less argc 2) + push (s0-2) + push 2 + sub + ; restore stack offset and program counter + ret +``` -- cgit v1.2.3