add basic gates c func

This commit is contained in:
Redo
2022-11-15 11:46:09 -06:00
parent ef99073b23
commit 5ae87d926c
5 changed files with 19630 additions and 20493 deletions

View File

@@ -86,6 +86,48 @@ enum GateFuncs {
GateFunc_Adder8,
GateFunc_Adder16,
GateFunc_Adder32,
GateFunc_And2,
GateFunc_And3,
GateFunc_And4,
GateFunc_And5,
GateFunc_And6,
GateFunc_And7,
GateFunc_And8,
GateFunc_Or2,
GateFunc_Or3,
GateFunc_Or4,
GateFunc_Or5,
GateFunc_Or6,
GateFunc_Or7,
GateFunc_Or8,
GateFunc_Xor2,
GateFunc_Xor3,
GateFunc_Xor4,
GateFunc_Xor5,
GateFunc_Xor6,
GateFunc_Xor7,
GateFunc_Xor8,
GateFunc_Nand2,
GateFunc_Nand3,
GateFunc_Nand4,
GateFunc_Nand5,
GateFunc_Nand6,
GateFunc_Nand7,
GateFunc_Nand8,
GateFunc_Nor2,
GateFunc_Nor3,
GateFunc_Nor4,
GateFunc_Nor5,
GateFunc_Nor6,
GateFunc_Nor7,
GateFunc_Nor8,
GateFunc_Xnor2,
GateFunc_Xnor3,
GateFunc_Xnor4,
GateFunc_Xnor5,
GateFunc_Xnor6,
GateFunc_Xnor7,
GateFunc_Xnor8,
GateFunc_Rom4x1,
GateFunc_Rom4x4,
GateFunc_Rom4x8,
@@ -211,6 +253,48 @@ GATEFUNC(Adder4) { int v = getword(4, 1) + getword(4, 5) + getport(13); setword(
GATEFUNC(Adder8) { int v = getword(8, 1) + getword(8, 9) + getport(25); setword(8, 17, v); setport(26, (v>>8) & 1); }
GATEFUNC(Adder16) { int v = getword(16, 1) + getword(16, 17) + getport(49); setword(16, 33, v); setport(50, (v>>16) & 1); }
GATEFUNC(Adder32) { unsigned long long v = getword(32, 1) + getword(32, 33) + getport(97); setword(32, 65, v); setport(98, (v>>32) & 1); }
GATEFUNC(And2) { setport(3, (getport(1) && getport(2))); }
GATEFUNC(And3) { setport(4, (getport(1) && getport(2) && getport(3))); }
GATEFUNC(And4) { setport(5, (getport(1) && getport(2) && getport(3) && getport(4))); }
GATEFUNC(And5) { setport(6, (getport(1) && getport(2) && getport(3) && getport(4) && getport(5))); }
GATEFUNC(And6) { setport(7, (getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6))); }
GATEFUNC(And7) { setport(8, (getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6) && getport(7))); }
GATEFUNC(And8) { setport(9, (getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6) && getport(7) && getport(8))); }
GATEFUNC(Or2) { setport(3, (getport(1) || getport(2))); }
GATEFUNC(Or3) { setport(4, (getport(1) || getport(2) || getport(3))); }
GATEFUNC(Or4) { setport(5, (getport(1) || getport(2) || getport(3) || getport(4))); }
GATEFUNC(Or5) { setport(6, (getport(1) || getport(2) || getport(3) || getport(4) || getport(5))); }
GATEFUNC(Or6) { setport(7, (getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6))); }
GATEFUNC(Or7) { setport(8, (getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6) || getport(7))); }
GATEFUNC(Or8) { setport(9, (getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6) || getport(7) || getport(8))); }
GATEFUNC(Xor2) { setport(3, (getport(1) ^ getport(2))); }
GATEFUNC(Xor3) { setport(4, (getport(1) ^ getport(2) ^ getport(3))); }
GATEFUNC(Xor4) { setport(5, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4))); }
GATEFUNC(Xor5) { setport(6, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5))); }
GATEFUNC(Xor6) { setport(7, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6))); }
GATEFUNC(Xor7) { setport(8, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6) ^ getport(7))); }
GATEFUNC(Xor8) { setport(9, (getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6) ^ getport(7) ^ getport(8))); }
GATEFUNC(Nand2) { setport(3, !(getport(1) && getport(2))); }
GATEFUNC(Nand3) { setport(4, !(getport(1) && getport(2) && getport(3))); }
GATEFUNC(Nand4) { setport(5, !(getport(1) && getport(2) && getport(3) && getport(4))); }
GATEFUNC(Nand5) { setport(6, !(getport(1) && getport(2) && getport(3) && getport(4) && getport(5))); }
GATEFUNC(Nand6) { setport(7, !(getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6))); }
GATEFUNC(Nand7) { setport(8, !(getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6) && getport(7))); }
GATEFUNC(Nand8) { setport(9, !(getport(1) && getport(2) && getport(3) && getport(4) && getport(5) && getport(6) && getport(7) && getport(8))); }
GATEFUNC(Nor2) { setport(3, !(getport(1) || getport(2))); }
GATEFUNC(Nor3) { setport(4, !(getport(1) || getport(2) || getport(3))); }
GATEFUNC(Nor4) { setport(5, !(getport(1) || getport(2) || getport(3) || getport(4))); }
GATEFUNC(Nor5) { setport(6, !(getport(1) || getport(2) || getport(3) || getport(4) || getport(5))); }
GATEFUNC(Nor6) { setport(7, !(getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6))); }
GATEFUNC(Nor7) { setport(8, !(getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6) || getport(7))); }
GATEFUNC(Nor8) { setport(9, !(getport(1) || getport(2) || getport(3) || getport(4) || getport(5) || getport(6) || getport(7) || getport(8))); }
GATEFUNC(Xnor2) { setport(3, !(getport(1) ^ getport(2))); }
GATEFUNC(Xnor3) { setport(4, !(getport(1) ^ getport(2) ^ getport(3))); }
GATEFUNC(Xnor4) { setport(5, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4))); }
GATEFUNC(Xnor5) { setport(6, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5))); }
GATEFUNC(Xnor6) { setport(7, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6))); }
GATEFUNC(Xnor7) { setport(8, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6) ^ getport(7))); }
GATEFUNC(Xnor8) { setport(9, !(getport(1) ^ getport(2) ^ getport(3) ^ getport(4) ^ getport(5) ^ getport(6) ^ getport(7) ^ getport(8))); }
GATEFUNC(Rom4x1) { if(getport(6)) { int a = getword(4, 1); for(int i=0; i<1; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(1, 5); } }
GATEFUNC(Rom4x4) { if(getport(9)) { int a = getword(4, 1); for(int i=0; i<4; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(4, 5); } }
GATEFUNC(Rom4x8) { if(getport(13)) { int a = getword(4, 1); for(int i=0; i<8; i++) { setport(5+i, getdata(a + i*16)); } } else { clearword(8, 5); } }
@@ -337,6 +421,48 @@ GateFunc sim_logic_functions[] = {
GATEFUNCID(Adder8),
GATEFUNCID(Adder16),
GATEFUNCID(Adder32),
GATEFUNCID(And2),
GATEFUNCID(And3),
GATEFUNCID(And4),
GATEFUNCID(And5),
GATEFUNCID(And6),
GATEFUNCID(And7),
GATEFUNCID(And8),
GATEFUNCID(Or2),
GATEFUNCID(Or3),
GATEFUNCID(Or4),
GATEFUNCID(Or5),
GATEFUNCID(Or6),
GATEFUNCID(Or7),
GATEFUNCID(Or8),
GATEFUNCID(Xor2),
GATEFUNCID(Xor3),
GATEFUNCID(Xor4),
GATEFUNCID(Xor5),
GATEFUNCID(Xor6),
GATEFUNCID(Xor7),
GATEFUNCID(Xor8),
GATEFUNCID(Nand2),
GATEFUNCID(Nand3),
GATEFUNCID(Nand4),
GATEFUNCID(Nand5),
GATEFUNCID(Nand6),
GATEFUNCID(Nand7),
GATEFUNCID(Nand8),
GATEFUNCID(Nor2),
GATEFUNCID(Nor3),
GATEFUNCID(Nor4),
GATEFUNCID(Nor5),
GATEFUNCID(Nor6),
GATEFUNCID(Nor7),
GATEFUNCID(Nor8),
GATEFUNCID(Xnor2),
GATEFUNCID(Xnor3),
GATEFUNCID(Xnor4),
GATEFUNCID(Xnor5),
GATEFUNCID(Xnor6),
GATEFUNCID(Xnor7),
GATEFUNCID(Xnor8),
GATEFUNCID(Rom4x1),
GATEFUNCID(Rom4x4),
GATEFUNCID(Rom4x8),