From 30e7604e62820a15f3bc727c46b15c20f6d815e6 Mon Sep 17 00:00:00 2001 From: 5225225 <5225225@mailbox.org> Date: Sat, 6 Jun 2020 19:20:58 +0100 Subject: [PATCH] more work..more work.... --- out.tar | Bin 0 -> 30720 bytes src/main.rs | 53 +++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 out.tar diff --git a/out.tar b/out.tar new file mode 100644 index 0000000000000000000000000000000000000000..8a0d783b41de584c40612a23f13b19a19f885a52 GIT binary patch literal 30720 zcmeHPU5s4WQ8pn!(h-jk5=3-8My5wQzH|S7+CRzc*xt3{KW6Ogt}Qb;_uO-58uxV1 z_K!UiuTkJ3Prw620`WqE#8ZTjkRlOQY5}Q=bro5 z-D7*zixQ=K*VA2f>YQ6ur>ag>-P?V@4tI8YgM{^V_5@4C@WkR@7G6ORoS=8Sn(r9& zPS`FeLeKSFALF*?yY7kI#j`TK;$$>tLtJt=7>uV!OU%>8m29PO<;?HtPrhUD!T!GJ zkI&mIv(hm1LqD~{%!*S#u>(JKSZa$zc-&4Bk8$RFn7D-?rwiD6wfv7 zxroU%0{D2-MRFMKZZ-YiwS2^j=eo+n;S|8+#aT`^wz^xHI_@Aqk&*#3dp8}JA3 zoFvElzio$hIPL$oyY&BeZcB=lPZ_uOx+5d&_Jo0VHW?50*|^JDuXkj8WLNaXkc~xZ zBu9oamDVZa%9u#|1HAReqMu?o8w`zo)}OGRAyS+u{av$l@7@9957@4_f4|jd`@%SH ztR&rW))l>UrS(t@N8Lf6kd|q?rnAx-4JJb_$%bOLI~os9W(c0_2$E3LT#^w{pGCV*`^roCYPd1j}=$wb6MKjBD- znUncp$kH_S?JTlgFN)&C3u8a^LN5rI?=hc8UXTW{9mMWD{*T6DFhri;5WqFP1q)zB z+>00!w(X=|B+@vuf;e$q-;D%|g)3riCZ1SUhrVm_jNJ z$T9l7D@L%!do5$-7YE5m3}N;wYpwgUjSJh-eF*P+2;nRK0pnV{c_n`2B!T7namwt# zVzC#7LPS<(!-~={@;D)am^*eTGKZ(B2eZO93Fd-oricf_0Y9_P_;BDrNMq&o$zUwx zr_oV=zSsiJJ!O!-2@_suL`Yy-L1J@Z!<{TIav+J7rl|{?%(!JasBWMF*lQH~o)ZX* z1y0NY?pQ3%#5|9p>bbUEmg$<-f_aaV*p6e@Wo{fMVa(l7xNZ`{P#p&M;gLuJfohGV zkrfL+$})-?VVXF?_52VHGBcWW$6`1h40`o&W|{HA1#luSv!g8X1NaSeEFu=iHn>j{ z&*6y`My})YI1WT=IYAo39PLCAQK4M^0#2oCf?Xg}HeaqC1Y<6wy+|QItecka_dY z(f(wAN8nGxbNq!Ho}bymfu3XTIgt}#Z@3?1z85EOc{(*kkU0^Hd~5?kIZJuwX1;|k zNa)*P07ss&F_l0~aZU@fBk>gR<^=dAVSV=&FTBU%%tnCESY)LU%N$#z!gV6Vb5EoZ zdTy47vkXBIhi@80aL|~A9BGjsM6rXAH$(U`%Ab)Lm<;eG^0`8PIW1qSt`U3TS&6W% z)JqV9Y~SM%JTHlZEDchYT5-q|_-z!paACpGm0&#fk~mB4M8KFSZsA~_p%LWFz4@D7 z$_Ov79P74;NE9vjpg@=rf$Q2VvT@dB=-*j5$$bj2SsICe$1VWqh>J|?HO6dV<$x_pV&fV z9y+dmB3y<@jx5)*+}I5uDRM#!ZrGxCk?p9x2rs$cvNI%Y4^C!svN1O05*7r)_g=UL<1V@{G=7 zB+D}c7;$@M#Ij>jkCLP+EVjw?-Z^1I+jcnuG!v=Aecz7k3_TXaHaH!26G+RB+yru3 ze#8**64av+>VKsE!b`)M!sc1Av7$se8qGhG3W}=Cw5xXT&IyeTbmG8A@q)XUzMBZ2 zp?r%`JjaO@g)q!4KqiV>(+Y4zMQO@V0XeCK0u{B+Y)3@fgQBf0Ht9oIxe-(p3PoS< zSwEs1$M=6N%M0D<{x9zTF7N+5zpkHmM$w}!TC~R|3g{2-4TiF%wSs;Z z{coJhKYV1Lb$iL+&>ReRFRa{e$wsj1@H%jF#NSiKwh+cXZZ;YZ#1Xp9{nS9~r#m!K zk#+m%8xQ)xjt$-RO$Xd8`n|O7I;Z;;>qCTxA-Zc~9ZlzMCPrg(Z@k|_gs*1j_ggw| zp@wkYq}6#%wed`0Lcs|AE3HH)IBJ?~jq1uxlOb(+UR8fj((^rZ`bB?NnEQO3y)!I6 z&Hr7`p7Q@7be8`A&TL0*)&0%eciW#||8Ckp@#IHOyz6~Gd*+j0**NjnumAnuzWIAU z)Oz)EFMj*WzuEhZqj&xByFdNOyKCS1{lN!MeCM;@e(ThKf9c&n;(X^rkACi)^=I$d z{r7(fe*5FU{Ju|(zw)17*}fB8{nTs!{E+?5!!LaNBR~0pw;uh<2mk0_fAyu$U;L-9 zeQo>ZuYK!{8|VJ_n{WKbSHI}}$!E@<`2Ty$NGhcY`iQZ4WS^4ihZ(0BNrJo4j|A(vJeDLY$>nFZ= z{U6Tlzw%@3!~Y}x{K~ig%GpcW9~fAF`Hh25e!V8`5@>2*H00||+@fLfe>_(-|M?F* z6V`bC%ckeW{6#Y|YrP-v=Rauwac=j`;b@k27J@rI{!>SJ>iIv{UdI20=>BPoOhy9t z_VatfozCMeJOuh8;L)YS@tSe%(v!0-B0+-G>2wF3&gNt|8VoB)KIo$*Htuw8509?& z$Ah!27Vg|n_}IA4_+Ga!jK?hludP=*#>5U#tq|~96}VdkZg0JGy9#gL-T-`=x=;Ds z&5diL0c7QdmCdP6Z{;md_hg$zH(yTE^qN`I*HmgNBL@&oAsO&wWObn^U#maH3Nvr}0FJXkQe`WOvQD^!l1{ ziw(zJ)}xP`gM%ad?G5^373DrkJ6Ux8k&HF}SXv?3+*(UV zS#28ms_<((cs3xv##3Tq*gnj|DO`CQ4p6Z!<;#Z^4B4Aa21b+=Rn@f#O)sZ1lryac z48yGq<#OmDuQF7MrbqqCXeq584JxCh0`%xkIjVG`2P)fCv^hE*-S9Y>OPn9Y^7xcW zs%Qcy_h@WfzI$owCTzgM0}Hj6eYS|ZIpw9Fzk`rGMQK}8l-CgUn{>7{O-JWRgAQcV zbemgrq}3^jaGLVUjmr%}NjFWneW^~T$Y#*h*UQOrx+i3!$9jo&jGMQh`Ik4OVhrmL ztQ%{s8#jSIZ%Eh%eC5Wb1|5JGFBPB*aO2`dJ?a76zVo66eSp{H-pHi_ntSDAdNfpX zi?t#(xqxH9TbDM9#Ww)IvUP>FMlSav;LTg4e+g~^yk3DX0=`m#FA@3mLaxgIH*V;~ zZ4&$DR=$=^LW7p9iq^JC>TBCClgcGbVsBMolKa-3?U(g934W{4Ax?2Dclp{&dYB|v z=bT!OB;UHdbwiI!$!~9IP1z***6o5D5**~3ngrjxq6M=_?iaUTDPWTO>YYMxn*_gl zSNayo;*jK5;X?Ux4#|GCum^`kzbgGfQj_FYH>K4}m?Xcdj9bDa`BiDd5+up5Zfm_c zQts!$WTn?e^xXbMiMFomYzrxF9N)Z3|ff@5lwUL4Muqu{V|9^5m>kk2Yq!8p0CLKU2o z=dQJ6B5{DbCH!QyDyXCp&2y}h>0NqVpJN*oUh|4x7ql`@K=!RNscp)s%lL44IM|ov zw+soD>4*s##;VC%Wt3vW?BtCS6;c2ZmsLYOivx{R((yFPdlXHF3YpGgAh!MIJ5!xVh zLFmj}(JBco5c(kW&Q51XFrz#ry@KSE+C=mnkjK)3a1XF!)K#K(l?``CsuP2f25lUD z^njL4dShu=^=1=n3#-v!TOK!!s-OYVZpu#4L%~npvv#l#XN>^QnFKqtN=cYX$9P6k z@`Yz6RvoALD;N1VF)WMxyfN14T&5^f8>d#4UH6JD3dkM9YGA2HW*y?GgseG$R$7yo zs+(yndV5VmboiPm^!X~NxsgYQn$5jQ|3PjW(0N<;@$%|;o76RhB!yRz+E%KI$!r8) zY-*n_@{!Z`u<7^ni;;S3ISC>3OD=@m0hc+Hy@$iP*7UgK?pO-R>J&vqE#UKj4M$>! zlP22KPwe&&CgYAF<3rJtrJk)c^Qw?Nf$k%|fF*Y1m!pt%%DJX&sZ65wsyXRD8nT0S z9&(7DZUm3_8l-m6>72WE=|XLWG&Pz+Or>nhFbVt9>GZ`Ty&`=lYzJ30EYr+aR*p`p zq&eonWVF|=vNhvcIeXYgnwD=%MXqv58LqYZu|0H&N+(4gk$PC}PJ=)mn3_OtPJ^Ht z@mH`T{lTNY(lMmO7tqk>TtOHtnai&(t3+%j;@A!!O#0)t4&66z$$gViCO1AMp&|f^ zvQkwxUNGJZ?;%)~jU_D0Mu2d48kS{a3Cgk&prb}**;swGY%IrR*;slS4v2gjezq@tFo~iS7l=ftFp1A zmt|uKsmfdQtC=Az_rLqykIj^d0EMZkPmW!#fu>#Ao zu>w=sSOHaAUbC*s#>%iP8!IrCja5*l%X;>vEE~&VRW_EeEE@r8bCP9a39GWP2CL;k zPY$eoK?SyMnFPr2Mt7oc)T?MLU87ye6V_B`SKl@{7$RBe^-s1}9(PVz&f$m2`%cRx z?jhtv_bZW&!W4C}Cj0oZDjG?+OGVsJ1Vf?#Og-;t=d0)?BnYZ}b=x%Wt1PHk^M&&U z8fL|!jDx!LcU;3%F5O-QR|OfdMcECAtI@MIuDhHnbbwMb-^~nM=7M1vr%#gY_mtX6%l5x8PMP?Qy_fROf7sVgRHc+DlUKF!g&MfGLh4ZPR?$AayBF= zxhFzBh%Z6+@u>E=jpUVXeykOZc-*zEwaRg^)99nxc#$R2BKkGWht5SLnPe(G%-MqF zm8_5=$@ri~b$oR}R}Rw!WXV=B(t6S)k8V8*bE}WalUt9%aO$J-RG##a*Wg*Uq$ld- zZSHKuf?`ebS?8@@B~omBY}7PEv&l_W!m?4nTa{PABV<rkGlO|!XSM1HJE5&^v$rm2wXui9db$$6vX=h?WEY101>e}yrs@L4?=uwO6_ zxD|y`+-uhIu1*)AGw)hqM{{%C(zlfKhuqj`8>l>2TPeE%Ijjqeat+G#Mmt^ns8ZU+ z4-}M5Pb^UJiaeFA->;&LsN2_$EHd)O%?c}AUjGCG>!TXTFSXKe4Y|_XN=1#z9XzfI znf;st?zL z`hM;z&fH4ClEL|OV|jhFk{0Rm13HBpG$sWSeHKqe2h6C)hHCyj6ywPdT`SfbiMmf$ zvvNG_P;+V;%af-1(wa*)+(mR$Pj*ms)>N7ag3&#zDm_i5mkhkaU4+l4O}FPwKg846 zloClUeu3U9H~!RB47Iqr1Kw0;&fJ84B=i#0ZpSb1UyY#Rn@o1>Y;7n$%lkD%W{6DcxE`u!99h>7}< zlX7IG!KGZdw%|11d7*I(+uI+NOv@I`ECvhKHMiCG2Ip^sL0yGSbC{bKS?8Q>H*1k@ z#>M5v9Ai25eHpf!+fNdzJ(bV0OdF0g*BN$06GfSFaXg|x`}p{YfxhPBj;s-AE)I!$ zXi{D_{n^-AE!=UkwjJH7Tv6 z3@I~&ud`N%WJ3D5YK0RNo(BhmA^nh&?(EAB~4(VC<+FA^(>C}@{Bo)YFRUy z_rC~~jNxQN?WRssc}AjVU4}Mv)`gs^%k6Zse^5P$N3z_;b2GZsRvLY@N52Dg^3d## zcEtX{_y|>6scU(ncjXyA`v5meMlP;OS4_}B zl#=!)sX*?44gmtRX|C75x}rm~WK#W<>6(!YQkiRD4RdtR>*7wvxb5XvWFsn>cEsx^ z+Xej!eIKH_R4VYBQwKu{_IE;pvvMHaKRh`l5YT!a{ z5iv~5fwbD~m5-0|(J*J0s76u~bBKzyRI4Ku-9B2}Sd`XAc}V^4>LrPcekd!yaY91n zH%!jTrS?rEj`z^%IFHNf`P9d4uinS+a2*`&(A~S8QLoF9;+7;iznD%vR=GfxgLx}d zX^2fcE{fN**`9vN!dgUS$@`|vQ(?qpUQc@#dO5z-z)}NC4J u16 { + let v = self.SSK[self.RSK as usize]; + self.RSK += 1; + v + } +} + impl Machine { fn write_reg(&mut self, reg: Register, val: u16) { match reg { @@ -440,6 +453,8 @@ impl Machine { let oc = cur_instruction.def.opcode(); + let mut should_inc_ip = true; + match oc { OP::HALT => return false, OP::NOOP => {}, @@ -453,8 +468,21 @@ impl Machine { OP::CALL => { if self.RTRGT == 0 { } else { - - unimplemented!("calling not implemented"); + self.push_stack(self.RCALL); + self.push_stack(self.RSTAT.bits()); + self.push_stack(self.RX); + self.push_stack(self.RY); + self.push_stack(self.RZ); + self.push_stack(u16::try_from(inc_by).unwrap()); + self.RSR = self.RSK; + self.RX = self.read(cur_instruction.args[0]); + self.RY = self.read(cur_instruction.args[1]); + self.RZ = self.read(cur_instruction.args[2]); + self.RCALL = self.IP; + self.IP = self.RTRGT; + should_inc_ip = false; + self.RTRGT = 0; + self.RSTAT = Flags::empty(); } } OP::POP => { @@ -481,13 +509,28 @@ impl Machine { } OP::JEQU => { if self.RSTAT.contains(Flags::FEQUL) { - unimplemented!("{:?}", self.RTRGT); + self.IP = self.RTRGT; + should_inc_ip = false; } } + OP::INC => { + let mut val = self.read(cur_instruction.args[0]); + val += 1; + self.write(cur_instruction.args[0], val); + self.RSTAT.set(Flags::FZERO, val == 0); + } + OP::READ => { + let input = 50; + + self.write(cur_instruction.args[0], input); + self.RSTAT.set(Flags::FZERO, input == 0); + } _ => { eprintln!("unsupported opcode {:?}, continuing", oc); return false; } } - self.IP += inc_by as u16; + if should_inc_ip { + self.IP += inc_by as u16; + } true }