diff --git a/njvm.c b/njvm.c index e964fc9..111ed01 100644 --- a/njvm.c +++ b/njvm.c @@ -13,15 +13,10 @@ #define DEBUG +unsigned int* programmSpeicher; - -unsigned int programmSpeicher[1000]; - - -void copyToProgramm(const unsigned int codeToCopy[], int length){ - for (int i = 0; i < length; i++) { - programmSpeicher[i] = codeToCopy[i]; - } +void copyToProgramm(unsigned int codeToCopy[]){ + programmSpeicher = codeToCopy; } // Stack @@ -66,13 +61,57 @@ void useption(int argc, char *argv[]) { } } } - +void printProgramm(){ + int i = 0; + char c[10]; + while (programmSpeicher[i] != 0) + { + switch (programmSpeicher[i] >> 24) { + case PUSHC: + strcpy(c,"pushc"); + break; + case ADD: + strcpy(c,"add"); + break; + case SUB: + strcpy(c,"sub"); + break; + case MUL: + strcpy(c,"mul"); + break; + case DIV: + strcpy(c,"div"); + break; + case MOD: + strcpy(c,"mod"); + break; + case RDINT: + strcpy(c,"rdint"); + break; + case WRINT: + strcpy(c,"wrint"); + break; + case RDCHR: + strcpy(c,"rdchr"); + break; + case WRCHR: + strcpy(c,"wrchr"); + break; + default: + strcpy(c,"halt"); + break; + } + IMMEDIATE(programmSpeicher[i])? printf("%03i:\t%s\t%i\n",i,c,IMMEDIATE(programmSpeicher[i])) : printf("%03i:\t%s\n",i,c); + i++; + } + printf("%03i:\thalt\n",i); +} void execute(void) { int i = 0; int intInput; int temp; char charInput; - while (programmSpeicher[i] != 0) { + while (1) { switch (programmSpeicher[i] >> 24) { case HALT: @@ -104,20 +143,20 @@ void execute(void) { stackPush(intInput); break; case WRINT: - printf("%i\n",stackPop()); + printf("%i",stackPop()); break; case RDCHR: scanf("%c",&charInput); stackPush(charInput); break; case WRCHR: - printf("%c\n",stackPop()); + printf("%c",stackPop()); break; } i++; } end: - printf("Finished\n"); + return; } #ifdef DEBUG @@ -132,7 +171,8 @@ void printStack(void){ void tests(void){ printf("Runnig debug mode\n"); - copyToProgramm(code1,sizeof(code1)/sizeof(code1[0])); + copyToProgramm(code1); + printProgramm(); execute(); }