From ad6f5a5854c7a9e3a68ee9eff9e392f9f0a5a178 Mon Sep 17 00:00:00 2001 From: lux Date: Wed, 9 Aug 2017 22:51:27 +0200 Subject: [PATCH] Partially implement the Accu --- makefile | 7 +++---- src/.main.c.swp | Bin 0 -> 12288 bytes src/.toy.h.swp | Bin 0 -> 12288 bytes src/main.c | 25 +++++++++++++++++-------- src/toy.c | 28 ++++++++++++++++++++++++++-- src/toy.h | 1 + 6 files changed, 47 insertions(+), 14 deletions(-) create mode 100644 src/.main.c.swp create mode 100644 src/.toy.h.swp diff --git a/makefile b/makefile index 500b13a..9ce8ebf 100644 --- a/makefile +++ b/makefile @@ -1,8 +1,8 @@ #-------------Makro-Part------------------ CC = gcc -CFLAGS = -Wall -std=c99 +CFLAGS = -Wall -pedantic -std=c99 LDFLAGs = -DEBUG = +DEBUG = -DNDEBUG VPATH = src src/debug @@ -21,5 +21,4 @@ debug.o : debug.c debug.h $(CC) $(DEBUG) $(CFLAGS) -o $@ -c $< clean : - rm -f *.o - + rm -f *.o coredump*.toy diff --git a/src/.main.c.swp b/src/.main.c.swp new file mode 100644 index 0000000000000000000000000000000000000000..c26b609196f0e9211774750b6b07aeb7b823ee1b GIT binary patch literal 12288 zcmeI2O-~a+7{><=Vo=oJ!Ry!tvW3zYB}gbWK_S8cH5g0;$!5Ddr4!oiI^9(aQ4c0w zOgyP4xq9{+s2{<%@8C&q#-sm--O}Om%~2G{@_U;}J`4X^<=zy{a=8(;&6(17C!F?C#sAAtV< z-~Rpo{iG0|!6)zzyajK-Hh2kMfajnE?tmpQ4btEk_;x~wkKhB?2Cu*-2*3)M1ZO}m z_%a~GYw#F^U>*#CLC_D5f7O7(JM18jf|umLu}2G{@_U;}J`4gAHx10m7y zzHwxHS=c)&Azq4no+9EE`b*VYN(S!eXi3np-2%7lIiX`ao@XrMG*$z5Ez=3nRZDFu zHwu;23~aaQsqAieb_DU6jA*AyE8o-A-62gkoDDUvHfN(oV1*`9S=!ObP9cH8yVF%G zHRBo8YN;tX*iKtRyc`NDf)pT81Ci3O*FkDYtOEZi1jfIuDu_8PP zssKW@uS4zBbxYaEL(;R3S$FAiH&ZSnwtcZhTqSL)G@EtmsZsW_B$=^C*oznN>>RHU zFGg4`PS`sUfs1`z^ONzkOpg5L25rh+;q5eZ^!BmVN@7b;0ra{%&K1g?gGjgL7&$`c zSzW`qMb|eYjZ4wKitj}V+>%e%bTz&wjD5Erd1~6hcfo|Y+C}V6=42|D_f#cXkDs|( Ls%r@^;nTz~lOqkt literal 0 HcmV?d00001 diff --git a/src/.toy.h.swp b/src/.toy.h.swp new file mode 100644 index 0000000000000000000000000000000000000000..16bf9ea8504aadae7bf1307680756964e7c271ce GIT binary patch literal 12288 zcmeI&&rTCT90%~hizojCUtn}Kfu@vJn~K4Z7&Vat!GLJsGER4vJf}y zht-eg-;3W;hz+l+(#FEcS8zqzYIjavgzDR2!|9N}RxS(H7vAD?y7XzBYxMuyfeR== zfl~=op*J;iLEO68YR3J^wX5>V_{ynTaT5h7KmiI+fC3bt00k&;HU&a4Cf?!b=SIgL zAKk}}+($#+C_n)UP=Epypa2CZKmiI+fC3aag96$JF?CUhO(g#QzyJRK^O6uhkX>XO z`G$N&J|SDk8>EY9_mmXi_fSa^FpP$v2}^DG&*Rdjq&wZZgo(vdHrH?R>W%0Wk$s% zdz<&FE-Qnt(%|w8i}ri2+o19yw*A-2*v@4xI6ZKsRd~kX%J{_LakO7g>oVt&aIW3F)4`6!W$BY + +#ifndef NDEBUG + #define DEBUG +#endif + + int main(int argc, char *argv[]) { uint16_t ram[RAM_SIZE]; - uint16_t ir; + uint16_t ir=0; uint8_t op_code; uint16_t pc = 0; - uint16_t accu = 0; int data_addr=0; bool run = true; if(initialise_ram(ram,argc,argv)==-1) return 1; -// makeHexDump(true,ram); // while(run && pc<(RAM_SIZE-1)) // { - ir = ram[2]; - pc++; + ir = ram[pc]; op_code = get_opcode(ir); - printf("OP Code: %u\n",op_code); data_addr=find_data(ir); - printf("Adresse: %d\n",data_addr); + #ifdef DEBUG + printf("OP Code: %u\n",op_code); + printf("Adresse: %d\n",data_addr); + makeHexDump(true,ram); + #endif + if(execute(op_code,data_addr,*ram)) + pc=data_addr(ram[pc]); + else pc++; // } - return 0; } diff --git a/src/toy.c b/src/toy.c index 0b2dd72..e85843f 100644 --- a/src/toy.c +++ b/src/toy.c @@ -5,7 +5,6 @@ int initialise_ram(uint16_t *ram, int argc, char **argv ) { //open Input Stream - FILE *fp; int j=0; char tempS[CPU_WORD_SIZE+1]; //+1 for "\0" @@ -66,4 +65,29 @@ int find_data(uint16_t instruction) return instr; } - +bool execute(uint8_t op_code, int data_addr, uint16_t *ram) // jump when 1 +{ + + //vorsicht uint16 und Zweierkomplement noch nicht stringent !!! + //Vorsicht bool ops bei sigend int typs sind undefiniert ! + static uint16_t accu; + switch(op_code) + { + case 0: ram[data_addr]=accu; break; + case 1: accu=ram[data_addr]; break; +// case 2: if(!accu) break; + case 3: accu=accu + ram[data_addr]; break; + case 4: accu=accu - ram[data_addr]; break; + case 5: accu=accu | ram[data_addr]; break; + case 6: accu=accu & ram[data_addr]; break; + case 7: accu=accu & ram[data_addr]; break; + case 8: break; + case 9: break; + case 10: break; + case 11: break; + case 12: break; + case 13: break; + case 14: break; + case 15: break; +} + diff --git a/src/toy.h b/src/toy.h index d76c427..ac0f288 100644 --- a/src/toy.h +++ b/src/toy.h @@ -13,5 +13,6 @@ int initialise_ram(uint16_t *ram, int argc, char **argv ); uint8_t get_opcode(uint16_t instruction); int find_data(uint16_t instruction); +bool execute(uint8_t op_code, int data_addr,uint16_t *ram); #endif