diff options
author | kdx <kdx@42l.fr> | 2023-03-19 03:47:59 +0100 |
---|---|---|
committer | kdx <kdx@42l.fr> | 2023-03-19 03:47:59 +0100 |
commit | 8721f551a0c796960b941e3abc4f1cc2c35eaac4 (patch) | |
tree | 42c673f896793af712b904664832f39b227e35ef | |
parent | 47c8fc6e1e179427b468bf38eaac9395d74cfcaf (diff) | |
download | golem-8721f551a0c796960b941e3abc4f1cc2c35eaac4.tar.gz |
i'm insane
-rw-r--r-- | main.c | 13 | ||||
-rwxr-xr-x | test.sh | 3 | ||||
-rw-r--r-- | vm.md | 32 |
3 files changed, 44 insertions, 4 deletions
@@ -21,8 +21,15 @@ destroy_duplicates(Token **list, unsigned int type) int main(int argc, char **argv) { - if (argc != 2) { - fprintf(stderr, "usage: %s <source.golem>\n", argv[0]); + if (argc < 2 || argc > 3) { + fprintf(stderr, "usage: %s <source.golem> [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); @@ -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 @@ -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 +``` |