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 zcmYc?2=nw+FxN9-U|?VnU|?{~?2hbXZ(}&f#lVnVlvrAv3X;H&OEL?R4Nc7OD`H?^ zsDl`&Uy@%LpP5&ZT2xS!T9R6%UtE-|pPQJOr zp#ey{vXY{Luuv$7If_R^U^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qNC=b^Ff!CLFfcGd z{i^|`8PRAcca$0pfzc2c4S~@R7!85Z5Eu=C(GVC7fzc2c4S~@R7!85Z5Ez0XkeI^2 zV8z40@QnvD{}1c`zvpLQxWdoCaG9Th;Q&7a!+w4Sh7J4-40HJz7^d+vFihoVV3@+s zz);N3z);A~z!1dGz+l7Az@W^}z`)JV!0?Wbf#DJ#1H(l=28OwO3=DJl7#J$}7#Irp z7#O1X7#J-07#PI)7#NuN7#ObdGB7OTWngILWnd`bWnl2&WnfU{Wnd8EWnkdqWnkdo zWnf_EWnf_AWnlOLb?Xa|dxv0nk2-lY1V%$(Gz3ONU^E0qLtr!nMnhmU1V%%E_90Nq zprD|jP?TCyT9l_?fXcIGU|>*S(ANj4fXIMYsX4`|3I)m9+SXvLAR!PgNVZK$EJ=({ zOi3xyC`!zYE=Z2mL@3Ej(@3pIO)f1-)yOZ1PtH$C)qyM5(JD&J)zpL=r<|IXl9>kQ zf=tg%%ue-4t#B#LEzl?_Doxb^=|GqcQc_TqnOBmgq2!oSlv-SzYNeo>5|gKdum#C6 z$jbc#6rA%@K*~!&%At-!QmmYrmXeyL;Nt2O>JE1k-0ik$nRzMkAg)Gc5t1&bISRH4 z>8U00`2`>!qpHX(Qm|Ek29z~4l&hh1c}8YVszy<1o`Ra1LP4^PMv$X#e6VMftFED@ zCIi?NnQ0oCd6^}di8-0YsqsaLxu8JTNi0fF1`%bNwzj&4ny`p9w1#L(%FoXMc^-s8 zrrRoj0uvIBnRz83VK4^y2ON{O1`x^8%)Amqvv{zIf@B3-1tf6`h_C|G%a|H6i?A63 z@;c00vDOUL3?K)9mb+_!7+{YmBxfWRDQG1YrI$s=YBDe|Af*iDl+?7$yi`cMC@?5z zrsaX6$qy1w49b~#$vLGdsWyql#i>OldKq>Ma4`iXJ^hr_q|$T*9?T+kWZ)5naz`&4QlvrAv3X;H&OEL?R4Nc7OD`H?^ zsDl`&Uy@%LpP5&ZT2xS!T9R6%UtE+764T2dXu_z1(GVC70kT4%v?NW}f|tSA$j|_! zUs*{}L0Bjh#2m$=Aut*OqaiRF0;3@?8UmvsFd71*Aut*OBP0Y$3K$vc85kItp#Bwt z(u`;{lsig|hQMeDjE2By2#kinXb6mkz-S1JhQMeDjE2By2#kinXb23!5J*g6V9@1b zV3^1Ung56N|3C3FFg)RBV0g^Wz;J<|fng6n1H*ED28PM}3=EU_85pYh85olI85k1z z85k1y85mUf85n-?F)&=^V_=xc$G|WHYUUx3xkE5qMx8tw0;3@?8UmvsFd71*Aut*O zqaiRF0;3@?8UmvsK-&;dR!+@J$xLHlNXpO8QAn*wO)f1-)hNx(E3t?#QOGZdPtH$C z)ltaID^W;EEJ=({Oi3xy0ZAL0#g`~(6(#0sS~GxT(=zi?;z3Hln!&P}dBr6~rO73k z`FWbw3?NM)Gt*N`;`0kY#^O>5GA=VOvm`SyC$l&;z9=ylp%P>x#5svY>B%|@$r*`7 z3R+r;Md@V8s}hGuYyAV*(_n2CX + +#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