From f29f500d0caa0670c77f6be42fff95b82c747233 Mon Sep 17 00:00:00 2001 From: nils polek Date: Sun, 14 Jan 2024 20:09:51 +0000 Subject: [PATCH] added some shit --- SDA.c | 8 ++-- consts.c | 2 +- nja/nja5 | Bin 648 -> 56947 bytes njvm.c | 98 +++++++++++++++++++++++--------------------- programs/prog04.asm | 32 +++++++++++++++ reg.c | 49 ++++++++++++++++++++++ stack.c | 9 ++-- stackslot.c | 55 +++++++++++++++++++++++++ test.bin | Bin 0 -> 120 bytes 9 files changed, 197 insertions(+), 56 deletions(-) create mode 100644 programs/prog04.asm create mode 100755 reg.c create mode 100644 stackslot.c create mode 100644 test.bin diff --git a/SDA.c b/SDA.c index ff50bd2..2ea0509 100644 --- a/SDA.c +++ b/SDA.c @@ -4,17 +4,17 @@ #ifndef SDA #define SDA #include - +#include "stackslot.c" struct sda { int *size; - unsigned int *sda; + ObjRef *sda; }; -unsigned int getSDA(int i, struct sda s) { +ObjRef getSDA(int i, struct sda s) { return s.sda[i]; } -void setSDA(int point, int val, struct sda s) { +void setSDA(int point, ObjRef val, struct sda s) { s.sda[point] = val; } diff --git a/consts.c b/consts.c index 348d59a..f9e447a 100644 --- a/consts.c +++ b/consts.c @@ -1,6 +1,6 @@ #ifndef CONSTS #define CONSTS -#define VERSION 8 +#define VERSION 5 #endif /* ifndef CONSTS #define CONSTS diff --git a/nja/nja5 b/nja/nja5 index 1e6a1ce88565a9aa2e34636912a0de08b7394e85..67ee60f8c046085c6f865e14b26e33ac8fc0f02d 100755 GIT binary patch literal 56947 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%0DI%?gR?Kr^KkaV>BZR}=K!1o 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 +#include #include #include "instruktion.c" #include "code.c" @@ -6,16 +7,17 @@ #include "program.c" #include "codeReader.c" #include "SDA.c" +#include "reg.c" // Debug -int debug = 0; +int debug = 1; // Stack struct stack stack; #define SIZE 1000 //Register -struct stack reg; +struct reg reg; // Program struct program program; @@ -37,73 +39,74 @@ void execute(struct program program) { int intInput; unsigned int temp; char charInput; + StackSlot tempSlot; for (i = 0; i < *program.size; ++i) { if (debug == 1) printf("=== DEBUG: Stack before instruction %i ===\n", i); if (debug == 1) printStack(stack, fp); if (debug == 1) printf("=== DEBUG: Instruction %i ===\n", i); - + switch (program.program[i] >> 24) { case HALT: if (debug == 1) printf("halt\n"); goto end; case PUSHC: if (debug == 1) printf("pushc: %i\n", IMMEDIATE(program.program[i])); - push(stack, SIGN_EXTEND(IMMEDIATE(program.program[i]))); + push(stack, stackSlotWithObjRef(getIntObj(SIGN_EXTEND(IMMEDIATE(program.program[i]))))); break; case ADD: - if (debug == 1) printf("add: %i + %i\n", peek(stack, 2), peek(stack, 1)); - push(stack, pop(stack) + pop(stack)); + if (debug == 1) printf("add: %i + %i\n", * (int *)peek(stack, 2).u.objRef->data, * (int *)peek(stack, 1).u.objRef); + push(stack, stackSlotWithObjRef(getIntObj(getIntValfromStackSlot(pop(stack)) + getIntValfromStackSlot(pop(stack))))); break; case SUB: if (debug == 1) printf("sub: %i - %i\n", peek(stack, 2), peek(stack, 1)); - temp = pop(stack); - push(stack, pop(stack) - temp); + temp = getIntValfromStackSlot(pop(stack)); + push(stack, stackSlotWithObjRef(getIntObj(getIntValfromStackSlot(pop(stack)) - temp))); break; case MUL: if (debug == 1) printf("mul: %i * %i\n", peek(stack, 2), peek(stack, 1)); - push(stack, pop(stack) * pop(stack)); + push(stack, stackSlotWithObjRef(getIntObj(getIntValfromStackSlot(pop(stack)) * getIntValfromStackSlot(pop(stack))))); break; case DIV: if (debug == 1) printf("div: %i / %i\n", peek(stack, 2), peek(stack, 1)); - temp = pop(stack); - push(stack, pop(stack) / temp); + temp = getIntValfromStackSlot(pop(stack)); + push(stack, stackSlotWithObjRef(getIntObj(getIntValfromStackSlot(pop(stack)) / temp))); break; case MOD: if (debug == 1) printf("mod: %i %% %i\n", peek(stack, 2), peek(stack, 1)); - temp = pop(stack); - push(stack, pop(stack) % temp); + temp = getIntValfromStackSlot(pop(stack)); + push(stack, stackSlotWithObjRef(getIntObj(getIntValfromStackSlot(pop(stack))))); break; case RDINT: if (debug == 1) printf("rdint\n"); scanf("%i", &intInput); - push(stack, intInput); + push(stack, stackSlotWithObjRef(getIntObj(intInput))); if (debug == 1) printf("pushed %i\n", intInput); break; case WRINT: if (debug == 1) printf("wrint: %i\n", peek(stack, 1)); - printf("%i", pop(stack)); + printf("%i", getIntValfromStackSlot(pop(stack))); break; case RDCHR: if (debug == 1) printf("rdchr\n"); scanf("%c", &charInput); - push(stack, charInput); + push(stack, stackSlotWithObjRef(getIntObj(charInput))); if (debug == 1) printf("pushed %c\n", charInput); break; case WRCHR: if (debug == 1) printf("wrchr: %c\n", peek(stack, 1)); - printf("%c", pop(stack)); + printf("%c", getIntValfromStackSlot(pop(stack))); break; case PUSHG: if (debug == 1) printf("pushg: %i\n", SIGN_EXTEND(IMMEDIATE(program.program[i]))); - push(stack, getSDA(SIGN_EXTEND(IMMEDIATE(program.program[i])), sda)); + push(stack, stackSlotWithObjRef(getSDA(SIGN_EXTEND(IMMEDIATE(program.program[i])), sda))); break; case POPG: if (debug == 1) printf("popg: %i\n", SIGN_EXTEND(IMMEDIATE(program.program[i]))); - setSDA(SIGN_EXTEND(IMMEDIATE(program.program[i])), pop(stack), sda); + setSDA(SIGN_EXTEND(IMMEDIATE(program.program[i])), pop(stack).u.objRef, sda); break; case ASF: if (debug == 1) printf("asf: %i\n", SIGN_EXTEND(IMMEDIATE(program.program[i]))); - push(stack, fp); + push(stack, stackSlotWitchNumber(fp)); fp = *stack.current; *stack.current = *stack.current + SIGN_EXTEND(IMMEDIATE(program.program[i])); break; @@ -111,7 +114,8 @@ void execute(struct program program) { if (debug == 1) printf("rsf: %i\n", SIGN_EXTEND(IMMEDIATE(program.program[i]))); *stack.current = fp; if (debug == 1) printf("pop: %i\n", peek(stack, 1)); - fp = pop(stack); + tempSlot = pop(stack) ; + fp = getIntValfromStackSlot(tempSlot); break; case POPL: if (debug == 1) printf("popl: %i\n", SIGN_EXTEND(IMMEDIATE(program.program[i]))); @@ -123,42 +127,42 @@ void execute(struct program program) { break; case NE: if (debug == 1) printf("ne: %i != %i\n", peek(stack, 2), peek(stack, 1)); - if (pop(stack) != pop(stack)) push(stack, 1); - else push(stack, 0); + if (getIntValfromStackSlot(pop(stack)) != getIntValfromStackSlot(pop(stack))) push(stack, stackSlotWitchNumber(1)); + else push(stack, stackSlotWitchNumber(0)); break; case EQ: if (debug == 1) printf("eq: %i == %i\n", peek(stack, 2), peek(stack, 1)); - if (pop(stack) == pop(stack)) push(stack, 1); - else push(stack, 0); + if (getIntValfromStackSlot(pop(stack)) == getIntValfromStackSlot(pop(stack))) push(stack, stackSlotWitchNumber(1)); + else push(stack, stackSlotWitchNumber(0)); break; case LT: if (debug == 1) printf("lt: %i < %i\n", peek(stack, 2), peek(stack, 1)); - temp = pop(stack); - if (pop(stack) < temp) push(stack, 1); - else push(stack, 0); + temp = getIntValfromStackSlot(pop(stack)); + if (getIntValfromStackSlot(pop(stack)) < temp) push(stack, stackSlotWitchNumber(1)); + else push(stack, stackSlotWitchNumber(0)); break; case LE: if (debug == 1) printf("le: %i <= %i\n", peek(stack, 2), peek(stack, 1)); - temp = pop(stack); - if (pop(stack) <= temp) push(stack, 1); - else push(stack, 0); + temp = getIntValfromStackSlot(pop(stack)); + if (getIntValfromStackSlot(pop(stack)) <= temp) push(stack, stackSlotWitchNumber(1)); + else push(stack, stackSlotWitchNumber(0)); break; case GT: if (debug == 1) printf("gt: %i > %i\n", peek(stack, 2), peek(stack, 1)); - temp = pop(stack); - if (pop(stack) > temp) push(stack, 1); - else push(stack, 0); + temp = getIntValfromStackSlot(pop(stack)); + if (getIntValfromStackSlot(pop(stack)) > temp) push(stack, stackSlotWitchNumber(1)); + else push(stack, stackSlotWitchNumber(0)); break; case GE: if (debug == 1) printf("ge: %i >= %i\n", peek(stack, 2), peek(stack, 1)); - temp = pop(stack); - if (pop(stack) >= temp) push(stack, 1); - else push(stack, 0); + temp = getIntValfromStackSlot(pop(stack)); + if (getIntValfromStackSlot(pop(stack)) >= temp) push(stack, stackSlotWitchNumber(1)); + else push(stack, stackSlotWitchNumber(0)); break; case BRF: if (debug == 1) printf("brf: %i\n", SIGN_EXTEND(IMMEDIATE(program.program[i]))); if (debug == 1) printf("pop: %i\n", peek(stack, 1)); - if (pop(stack) == 0) { + if (getIntValfromStackSlot(pop(stack)) == 0) { i = SIGN_EXTEND(IMMEDIATE(program.program[i])) - 1; if (debug == 1) printf("new i: %i\n", i); } @@ -166,7 +170,7 @@ void execute(struct program program) { case BRT: if (debug == 1) printf("brt: %i\n", SIGN_EXTEND(IMMEDIATE(program.program[i]))); if (debug == 1) printf("pop: %i\n", peek(stack, 1)); - if (pop(stack) == 1) { + if (getIntValfromStackSlot(pop(stack)) == 1) { i = SIGN_EXTEND(IMMEDIATE(program.program[i])) - 1; if (debug == 1) printf("new i: %i\n", i); } @@ -178,7 +182,7 @@ void execute(struct program program) { break; case CALL: if (debug == 1) printf("call: %i\n", SIGN_EXTEND(IMMEDIATE(program.program[i]))); - push(stack, i); + push(stack, stackSlotWitchNumber(i)); if (debug == 1) printf("push: %i\n", i + 1); i = SIGN_EXTEND(IMMEDIATE(program.program[i])) - 1; if (debug == 1) printf("new i: %i\n", i); @@ -186,23 +190,23 @@ void execute(struct program program) { case RET: if (debug == 1) printf("ret\n"); if (debug == 1) printf("pop: %i\n", peek(stack, 1)); - i = pop(stack); + i = getIntValfromStackSlot(pop(stack)); if (debug == 1) printf("new i: %i\n", i); break; case DROP: *stack.current = *stack.current - SIGN_EXTEND(IMMEDIATE(program.program[i])); break; case DUP: - temp = pop(stack); - push(stack, temp); - push(stack, temp); + temp = getIntValfromStackSlot(pop(stack)); + push(stack, stackSlotWitchNumber(temp)); + push(stack, stackSlotWitchNumber(temp)); break; case PUSHR: //TODO - push(reg, SIGN_EXTEND(IMMEDIATE(program.program[i]))); + pushR(reg, SIGN_EXTEND(IMMEDIATE(program.program[i]))); break; case POPR: - push(stack, pop(reg)); + push(stack, stackSlotWitchNumber(popR(reg))); break; } @@ -275,7 +279,7 @@ int main(int argc, char *argv[]) { if (run) { printf("Ninja Virtual Machine started\n"); - unsigned int s[sizeSDA]; + ObjRef s[sizeSDA]; sda.size = &sizeSDA; sda.sda = s; if (debug == 1) printProgram(program); diff --git a/programs/prog04.asm b/programs/prog04.asm new file mode 100644 index 0000000..a1fec33 --- /dev/null +++ b/programs/prog04.asm @@ -0,0 +1,32 @@ +// +// prog04.asm -- call/ret with args, and with ret value +// + + asf 3 + pushc 11 + wrint + pushc '\n' + wrchr + pushc 11 + pushc 33 + call proc + drop 2 + pushr + wrint + pushc '\n' + wrchr + pushc 33 + wrint + pushc '\n' + wrchr + rsf + halt + +proc: + asf 2 + pushl -3 + pushl -4 + sub + popr + rsf + ret diff --git a/reg.c b/reg.c new file mode 100755 index 0000000..65b3ce5 --- /dev/null +++ b/reg.c @@ -0,0 +1,49 @@ +// +// Created by Nils on 29.10.2023. +// +#ifndef REG +#define REG + +#include +#include + +struct reg { + int* size; + int* current; + unsigned int *stack; +}; + +void printStackR(struct reg stack, int fp) { + printf("Stack\nSize:\t\t%i\nCurrent:\t%i\n", *stack.size, *stack.current); + for (int i = 0; i < *stack.current; ++i) { + if(fp == i) printf("|FP|\n"); + printf("|%i|\n", stack.stack[i]); + } +} + +void pushR(struct reg s, unsigned int value) { + if (*s.current >= *s.size) { + printf("Stack Overflow\n"); + exit(EXIT_FAILURE); + } + s.stack[*s.current] = value; + *s.current=*s.current + 1; +} + +unsigned int popR(struct reg s) { + if (*s.current == 0) { + printf("Stack Underflow\n"); + exit(EXIT_FAILURE); + } + *s.current = *s.current -1; + return s.stack[*s.current]; +} + +unsigned int peekR(struct reg s, int steps) { + if (*s.current - steps < 0) { + printf("Stack Underflow\n"); + exit(EXIT_FAILURE); + } + return s.stack[*s.current - steps]; +} +#endif diff --git a/stack.c b/stack.c index 10feff0..f481085 100755 --- a/stack.c +++ b/stack.c @@ -6,11 +6,12 @@ #include #include +#include "stackslot.c" struct stack { int* size; int* current; - unsigned int *stack; + StackSlot *stack; }; void printStack(struct stack stack, int fp) { @@ -21,7 +22,7 @@ void printStack(struct stack stack, int fp) { } } -void push(struct stack s, unsigned int value) { +void push(struct stack s, StackSlot value) { if (*s.current >= *s.size) { printf("Stack Overflow\n"); exit(EXIT_FAILURE); @@ -30,7 +31,7 @@ void push(struct stack s, unsigned int value) { *s.current=*s.current + 1; } -unsigned int pop(struct stack s) { +StackSlot pop(struct stack s) { if (*s.current == 0) { printf("Stack Underflow\n"); exit(EXIT_FAILURE); @@ -39,7 +40,7 @@ unsigned int pop(struct stack s) { return s.stack[*s.current]; } -unsigned int peek(struct stack s, int steps) { +StackSlot peek(struct stack s, int steps) { if (*s.current - steps < 0) { printf("Stack Underflow\n"); exit(EXIT_FAILURE); diff --git a/stackslot.c b/stackslot.c new file mode 100644 index 0000000..5cbd04a --- /dev/null +++ b/stackslot.c @@ -0,0 +1,55 @@ +#include +#include +#include +#ifndef STACKSLOT +#define STACKSLOT +typedef int Object; +typedef struct { + unsigned int size; + unsigned char data[1]; +} *ObjRef; + +typedef struct{ + bool isObjRef; + union { + ObjRef objRef; + int number; + } u; +} StackSlot; + +ObjRef getIntObj(int val){ + ObjRef intObject; + unsigned int objSize = sizeof(unsigned int) + sizeof(int); + if ((intObject = malloc(objSize)) == NULL) { + perror("malloc"); + } + *(int *)intObject->data=val; + return intObject; +} +int getValFromIntObj(ObjRef iref){ + return *(int *)iref->data; +} +int getIntValfromStackSlot(StackSlot s){ + if(s.isObjRef){ + return *(int *)s.u.objRef->data; + } + return s.u.number; +} +void setValIntObj(ObjRef iref, int val){ + *(int *)iref->data=val; +} +StackSlot stackSlotWithObjRef(ObjRef val){ + StackSlot *stackSlot; + stackSlot=malloc(sizeof(StackSlot)); + stackSlot->isObjRef=true; + stackSlot->u.objRef=val; + return *stackSlot; +} +StackSlot stackSlotWitchNumber(int val){ + StackSlot *stackSlot; + stackSlot= malloc(sizeof(StackSlot)); + stackSlot->isObjRef=false; + stackSlot->u.number=val; + return *stackSlot; +} +#endif diff --git a/test.bin b/test.bin new file mode 100644 index 0000000000000000000000000000000000000000..9a783d0011ce9d7d65c24c8dc73eb1d97dfb6557 GIT binary patch literal 120 zcmebCa&lv3U|^5}Vh~_vVBqCuU|<9?Ik+G+7l^M2#KJ&jObiS%Ksi}td5|13AIRnd aVg{gE-oO9<^Zx;2AQxyfgB%cp