aboutsummaryrefslogtreecommitdiff
path: root/examples/fib.c
diff options
context:
space:
mode:
Diffstat (limited to 'examples/fib.c')
-rw-r--r--examples/fib.c80
1 files changed, 0 insertions, 80 deletions
diff --git a/examples/fib.c b/examples/fib.c
deleted file mode 100644
index aceab48..0000000
--- a/examples/fib.c
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright (C) 2023 Aryadev Chavali
-
- * You may distribute and modify this code under the terms of the
- * GPLv2 license. You should have received a copy of the GPLv2
- * license with this file. If not, please write to:
- * aryadev@aryadevchavali.com.
-
- * Created: 2023-10-23
- * Author: Aryadev Chavali
- * Description: An example virtual machine program which computes and
- * prints fibonacci numbers. Note that by default the virtual machine
- * just rolls overflows over, so this program will never terminate.
- */
-
-#include <assert.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <lib/inst.h>
-#include <vm/runtime.h>
-
-int main(void)
-{
- inst_t instructions[] = {
- // MOV the values 1 and 1 to REG[0] and REG[1] respectively
- INST_PUSH(WORD, 1),
- INST_MOV(WORD, 0),
- INST_PUSH(WORD, 1),
- INST_MOV(WORD, 1),
-
- // Print value at register 0 with newline.
- INST_PUSH_REG(WORD, 0), // <-- #
- INST_PRINT(WORD),
- INST_PUSH(BYTE, '\n'),
- INST_PRINT(CHAR),
-
- // Print value at register 1 with newline
- INST_PUSH_REG(WORD, 1),
- INST_PRINT(WORD),
- INST_PUSH(BYTE, '\n'),
- INST_PRINT(CHAR),
-
- /* Compute the next pair of fibonacci numbers */
- // REG[0] + REG[1]
- INST_PUSH_REG(WORD, 0),
- INST_PUSH_REG(WORD, 1),
- INST_PLUS(WORD),
-
- // Mov REG[0] + REG[1] to REG[0]
- INST_MOV(WORD, 0),
-
- // REG[0] + REG[1]
- INST_PUSH_REG(WORD, 0),
- INST_PUSH_REG(WORD, 1),
- INST_PLUS(WORD),
-
- // Mov REG[0] + REG[1] to REG[1]
- INST_MOV(WORD, 1),
-
- // Jump to the point #
- INST_JUMP_ABS(4),
- INST_HALT,
- };
-
- byte stack[256];
- vm_t vm = {0};
- vm_load_stack(&vm, stack, ARR_SIZE(stack));
- vm_load_program(&vm, instructions, ARR_SIZE(instructions));
- err_t err = vm_execute_all(&vm);
-
- if (err)
- {
- const char *error_str = err_as_cstr(err);
- fprintf(stderr, "[ERROR]: %s\n", error_str);
- fprintf(stderr, "[ERROR]: VM Trace:\n");
- vm_print_all(&vm, stderr);
- return 255 - err;
- }
- return 0;
-}