From 75299209b8725f0b65a527aac54b2f51c9552640 Mon Sep 17 00:00:00 2001 From: Redo Date: Sat, 5 Nov 2022 13:01:07 -0600 Subject: [PATCH] add c func and data --- sim/compiled_sim.c | 2 ++ sim/compiled_sim.dll | Bin 56563 -> 57075 bytes sim/compiled_sim_gates.c | 4 ++-- sim/gatedef.lua | 6 +++--- sim/network.lua | 11 +++++++---- 5 files changed, 14 insertions(+), 9 deletions(-) diff --git a/sim/compiled_sim.c b/sim/compiled_sim.c index 09b28bd..800e3f6 100644 --- a/sim/compiled_sim.c +++ b/sim/compiled_sim.c @@ -144,8 +144,10 @@ void sim_gate_set_port(struct Gate* gate, int port, int state) { } int sim_gate_get_data(struct Gate* gate, int addr) { + assert(addr>=0 && addrdata_size); return gate->data[addr]; } void sim_gate_set_data(struct Gate* gate, int addr, int val) { + assert(addr>=0 && addrdata_size); gate->data[addr] = val; } diff --git a/sim/compiled_sim.dll b/sim/compiled_sim.dll index 2da4b15c5558465723a67a9068e420e90d1c5345..cfdeab143d5eb51ccf0c371f8739c635bada01bd 100644 GIT binary patch delta 5780 zcmaJ_3s{p!x}Nz%5WGN?1d!`b5-{E{2q<+GLyPj)x)ob(?V}Y?K`X2vMrBg?4IZR&og=7 zdFPvNX1@7m{vUokuKMwm%DE+O%Hgu5>}kd(hcMQ|(&QnMl*G~)V>5T|pCrAtYUkB; z+(mQw^ucB$R1HcR?crlbj|02sv9Ll3d1b6$(|2qWP-fl&gy2v*|I_DE=@#jo&JI z1;5pF8Nci34ykWswWy((l6=bun`=mbgo08I(ajQQ?<#vFs{?@Eyk zH!$?^Wc+kLB2zBrD?{tM{`JtS4iR5>Vr{Ea-uIzl;2700kksC4_1 z7`rje=kt|06^HIMNN8yhEnky&P;~4UqJ1dZoq6--KmORGO8qyo;>eyr5n&1OBO(}k zu&F!aiqiDA?w{lRm8Pqr(nT}ECPaTQjIrhieD!zvIvI9>rUSG!%&aVdwcV4~biul? z{ujRXX!qGLfAWiUawoO6D!wg zDgjHSTSuH_>5<6|2oz)fMVpkRSlDIz=QUCHJ(2TtgyNWKafIwv>MxiUEt4xb zEU%qJXq$)KK&4yjcX_W_S!8lPW4%%IJIrtDfX{?F;WS1#ZJH{a$_p14o$s9hyg%so z{(QjuHsSr4R!n$+y)*b=k4%a~ot-Kym}2)>6MdZ!j6!HG3{xDIFr`VS6IHus?SEiA zs@FtI=O@z(np_@5S2d>bTbGFqvW8+7m~)4E9qM9lZmb@V3}(fVc*aN*hRf1hMw&Z3 zdaSxp3~M#YKHXJ2V$yWMr~3?~={=wBd!W)h+h}U)@acZFQ_Jv)VJ0KACS3+y8lIp0 z;!?(Zx<+B&&tB84xaxg(P5rul8u>9EPTs5E82g`P^2 zI(h}5Jv@YY0*R#ldAabVe%K(IXY_zR8lZQ5I_{s&Fny*NREvsF_jCheCq#Fp>8wxJ zgIf1PQNqKFSa|n{L7HbEdXjoR^^ABB!I}~^I_!xSp=Uor%X44du9H^+8oiU~CjyJV*QI+L`ylrHH;V$|!pw3K38QyuCl=q4T<)FKGV z=nG17zEQ>kOf)`vGS8vX==_9NMd8>mr|EFiF{4%Z?XJcxiWxZEOJdLQn8Fg#e{HH_|JEu)HjNjPm_)ycGewSGg1gC# zJ{fnA#_?1gw|dBHu*Z4!=~`>)c3h)$x5&LN-p*4pp!;;c*&rsK7=nso|J<6XIL5d8 zrD=JTkT^E=>tZzck6qD|iZ3-CZGm$Yyq-)B_3On{k(f1ho3L!E3G?Y%elL8g7Yd?jIP$>sA&NvV{+PNU-~xzeFD`di9Au6FO%Kg35i zi4zi;-=)~^L^kY&*RuLt1VL@5UkxLX+0n-2x;g$+w8$uTe~WPu+`kyHA~B`485i@8 zkB~WHe{*)T`ZNrEx*V%msmhvPe^tS&`n$Zzs65g^O8+{{BR5Rvu`chvH;+`OGrLk$LQ+=ru zgLQonM+8v{;?328{#Sx{E{KO$yJx38$J00C)h_%`38FrTf5*E*=zIM2-piU6n5y!9 zsXwd=G=3SxD?vOL#KS?{AH4W&~O_LG+pfbc zQcWmDOU$+sT;3aPUylz7rV+Rp4 z8?Xzd4crUV;m!UoxD0GWxgg>Sd>f?`yiMo{jC~?>;Fd(jz7iaG2IVJk4=@v-EWd(V zfDfRAVLuCj^H7GaW_7F>WEqME4OPHtG6n^=0DnQEnZX&d)`g5#zy)qgg%fZmaQ!I8 ziotEbnmAh^JrC{AGmj2KhL*ly7@Li2RSm(!hGLFk2Q>$2s3J#HxoTWCm&?`aYIC)_ zC|8M9xem0s=PM^U_tNlLb9kq_WY*h!uy=gG*NAj?-0Uk!y53xl-HU7(HYI#;xJu4) z^YSSiJ*HO3A>8YJvdSc()>w@XaWAD<3s8B=x>uF+S@0D0qQrJq^zwfXwuM966*Aaj zOL?hRy5-KTImd_gp5a@tbm!& L|`c_IC|Hd%cZYb*A%{{)l44ERGvv>0&*It9ZG z_+70*U5I)W6>ZGs7NOFSjnTXfEZ%*6V}vTjHdwqMWG1n6YiSKGV%DY#yfReWGzgy- zlvkHbS(_C6A@WY+$RSf?j;ghE6Db6QYmN`Uy?97hn?4 z;1}z&8=^eJ?j7kiI(actBIz5)L|Gzw+j_k?si?7>|AdiuAZ->tlgy>U2y)izTbzSi z>~VB%OP3JjhNSqE5Cr$1925$LKB5>h?+Occirs3IhH`S%>8W_DA{85`)1DM+LI0`< zy1X?@vS=v8p{L8Wvie=98vhpE05emi!yv(Gmt!TO;zI?!job8GO9k5sxJ)~?l}jv2 zOh{dbh`T7cxj^g0-wgw|3nm+yS4s*ei(OA)+l{=3#&0i>Y%yXkv}?Nw!l~_sw5r(N zu3}@xg<>`%dzIcGp;PFNm3#%Q-cc^~j0}XQBFM<;^i#O4TP3>VUJlGfINSuqJV0?m z5%+k%%^}eXH+8>q4vM(P`<1IuItM7?UyMB@6BoPEG-ALxvgq`LP zs(H3us3PB;uZ0Qv*mEoSSLjzRnfrB6p?CZJd7oD#i@z?T;1pRL%V@ESk64u->s)@3g!e2brb3Fh>( z;ujSJK(u}V=JK;edlla5XIH`6{A|HKg|~xk#E}-(^IlT;2Yz-1tkcg5T?+5=v&*gu z$t#QG9NmVQUmkRZL@dLH(Un!X-|0#+%P(il0 z!|7t{68ieUgW!{B*+GT=2lyqhwrvs>A5!S=z%LF}V2x*6%jxJV6;$)iBwFyQ6DvI1 zx{@Ak{hgnEO4h@Z=<;g{{Q#W(x!3LSYH}lQ0`wJ7#XvpoTB$Ig>_6fZcZNvMeFqfU_pcSb z)%2rXQm43!0x23adia=F+w;c^QjQ3AoJi)Y$4u%lBQ}q&ZH^)DvmtJMyOB#h|7YhO z`t-O#vPhIm{?2hHOlnPE=fx-DBo;y&PRx{KBb_^ug~9&ogh8_DDdD6ZnLPbuw$@}2 ziGmls$P>0GoH0aY%SpZH`R2(itw+8$kv>QJ7CrrRvNoy*J;ZAv(6JbAEf>|lTdtJ{ zIJ^j5qax{4mex7IQwrWni0Q0T`lxpOy;I0TgNN!)Wk)gG%Kalap?j(0R5=bx=IJN2 z?E~B`5#JUna-FV?QU*+b;hp5931J zn@m+_XG&EvwV%z3Vq(uQL?D*yB5`w)?`(lor6=Xwb|fx!o!dUyCEvRhw={t-gZ^nr z!_jYmCk>P?+Izl09E0oU7vTI%zmP2wc-@6s9FiX|l;ff*de4w*hMRs*L!dToDJ6s=u_?J8$AdRow-$3p(lVMtxk=c&5nsWq52 T+tR0$RhJ5ZwYtxDn05aPD7ln~ delta 5616 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 diff --git a/sim/compiled_sim_gates.c b/sim/compiled_sim_gates.c index f7a7213..9a47598 100644 --- a/sim/compiled_sim_gates.c +++ b/sim/compiled_sim_gates.c @@ -10,8 +10,8 @@ GATEFUNC(Not) { enum GateFuncs { GateFunc_None, - GateFunc_Diode, - GateFunc_Not, + GateFunc_Diode = 1, + GateFunc_Not = 2, }; GateFunc sim_logic_functions[] = { diff --git a/sim/gatedef.lua b/sim/gatedef.lua index 203ea99..198a486 100644 --- a/sim/gatedef.lua +++ b/sim/gatedef.lua @@ -7,7 +7,7 @@ GateDefinition = { input = function(gate, argv) end } -function GateDefinition.new(objref, name, description, init, logic, input, global, ports) +function GateDefinition.new(objref, name, description, init, logic, input, global, ports, datasize, logicfuncc) name = collapseescape(name) init = collapseescape(init) @@ -23,8 +23,8 @@ function GateDefinition.new(objref, name, description, init, logic, input, globa ports = ports or {}, num_in_ports = 0, num_out_ports = 0, - data_size_c = 0, -- todo - logic_function_c = 0, -- todo + data_size_c = datasize, + logic_function_c = logicfuncc, } local initfunc = loadstring(tostring(init)) diff --git a/sim/network.lua b/sim/network.lua index 55411a0..a70ed54 100644 --- a/sim/network.lua +++ b/sim/network.lua @@ -75,10 +75,13 @@ function network_update() local logic = data[i+5] local input = data[i+6] local global = data[i+7] - local numports = tonumber(data[i+8]) + local datasize = tonumber(data[i+8]) + local logicfuncc = tonumber(data[i+9]) + local numports = tonumber(data[i+10]) local ports = {} + i = i + 10 - for a = i+9, numports*5+i+8, 5 do + for a = i+1, numports*5+i, 5 do local portd = { type = tonumber(data[a]), position = vectotable(data[a+1]), @@ -91,10 +94,10 @@ function network_update() if not portd.direction then print(line) end end - local definition = GateDefinition.new(objref, name, desc, init, logic, input, global, ports) + local definition = GateDefinition.new(objref, name, desc, init, logic, input, global, ports, datasize, logicfuncc) Simulation.addgatedefinition(sim, definition) - i = i + 8 + numports*5 + i = i + numports*5 elseif data[i] == "SL" then local wire = Simulation.getwirebyref(sim, tonumber(data[i+1])) if wire ~= nil then