From ef6fbe3130c958177759bd99cf24a6c3edc4693c Mon Sep 17 00:00:00 2001 From: Joshua Wise Date: Mon, 31 Mar 2008 02:22:45 -0400 Subject: [PATCH] Add CALL (untested) and ROM and internal RAM --- FPGABoy.ise | Bin 212181 -> 213283 bytes GBZ80Core.v | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 111 insertions(+), 4 deletions(-) diff --git a/FPGABoy.ise b/FPGABoy.ise index 50f4b037e792441108860c831baa37e5746f45e7..5ae17656173495f68671d066bd7c8f6f5c756bc5 100644 GIT binary patch delta 66076 zcmb4s1$-38`}aIEvzv<%LV{Z$Sa5f@;O_1k+@Wwdv`{R-QJ^>!N^xk>;!qq~+$rwv z_C7Ov&)$(V`TgJFliAssXP)n4BP+L@c^|NNWZ>H4$pU8-Df8W|Q;ey<0@3S|ri(st zKPWm%q;Q%Bvs0yZR`JwKqo`w$RlfGsC~23s$sZkqt@@egWd|xxD9k1~hFJBcuWae~ zPM1MGU}en5R{f0qJgZ}lm9H!*xA~f_yx6 zE`LTobd0d*|9xi^C*iJlgPD$zR(m!mTCqA7@@5(16bDa#leI~>TMxt&;y?5>|AWfa%J7dCAJo6WE4IXDlob9U zqRb=MY`cD_%t1`=)b@F8YgWcl#$5)piCjnS^LYyy9p77)3ufS;vcE8Pkh?$EHOf1j z?%}jC14~FQID82bIDW7?*BZf^P!Kh*%zh(* zCk*7(NQk0`pdXc!C4*n6oc1*ERZ)h(+N9z?QItlOGJbV~0S946 z{(!bDA2IsnikXc9cH0)whDJ??{UVI4*z6wMr~0h5WIa;gUOA_HO`0tjZ%7KFN5Ar8 zWQkhU&2|K^H?w?3oo_rgyHojG66j7sCuze4@yyvn+6wrOGOJVl?!4wLjivN|JrbT$ zglF3)pAggQcll(hukg1|De~FBy+vLUu9Yb^P`Ph?XiG5>y4z?#d>-CnS;<-(f@N!} zzZVYWozyw_Fw7tqr1q5yN#iNN&ypEyCo`JUO!u&_JV!LHk9-CBxbhcxK|FJu6_<(U z;0I_%$Edk`gfL&1lm#t#!%;!Kk~T*Tq%Vy zhqPaH%3S1*8wh-D{6fHI6SAblXU`w3Je8we!k30+V`qN8nk1^49nKP1mXyW-V)U-N zY(^`gk)8LZKr7voB_XD}Z%Tji{isFeVCsAEmhq0veyxd5T2k`r0cfw>s`XDi4RTRK zz+~2%CY z(r^|gfS0F?vn1)4QS2af_O0j>LI9U<^OfX+Dz$xr?D~iNGFh(96evdZ0Rzmg#Q)53 zUYdZ5q+mrYWl;b5Lqra0XmLh4>aM zaUhrTloZH$_wzI~`Q*Lr6Gl9*?(@m#aJrY*>sQPcZta2PcC>aAL11d*Z`&$mjMr3t z-e3MhCUphLRHWtUYH}^j{{aqj4AC5_ZKk8X_gAwSw2nB9E#_<@I#L1plNpo$E0fyV zbl~}^zVIR=Bhk;lDNVB6$Z$AGuF13v@{pDR6WB5WGlcj^bBXho8I6|K@dvz&QN#_# zu1_*r6TlLuIgq6O>H~igSa=WCf?QCqq4At(o+n{_sXomYF^%ZEN3%T?Pl3Ta0S&+0 zKRa0s>M*dmd5WYy;cq^r^675o4KnZRyF4KczuZe99ceT2BbrX*v*+kx2&y@K)r4l0{)20i?Mmnh;I zOgCT)mD5k)@2PLY0GMm{tz>p~lIhO<4xNc8NpCjY_Ss&Mh&nWR!p@Qz6NH%C$wJ3w ziYV&a`4|3~EY#o=|3IUl!Dar56l?IwNbDYEPMi!xMbe+Xh!8u zLS&$F^L?Tm`La!ZSWo42D~+e5*wvJ5iml8`v6%YyDZ%pF`~PLXurxHg{l0~@rKC_n(OiWn&=7%xnct?YGSl2|}|dd^}T%2<0nc1ZRmFu$6tKPix6 zkWoy{6MFnzyDX-VkGp;1J;{uvJDI~sh=b30Cjuzt!&(xfItfH)s_#_DSWNV5f>|=M z==Ps|+K?6RRugq84%&@m&P#ScjpL_Dh+2C^2${FpMtDF0g?qOtWTEJjtQ84S^KZF= zta5R_DQr`>KQcY3j3NND-qSWPsa6R|qvnjV#9ad$mPgO{iIpvVt$ zI|{Aik6l>9{w6I`W-)e?bZbw+5OPPd*{nV>?KE55Ci?G&iA_Y)w}g3=ggy}>W{}Hz zev}p57GlqO%NZo->FiE+i!=`G36F_swj5$NN!q^?TVZQ?n-3(W<(`6Vp@6A|F9|*8 ziq8uY;$tNLg#xg0e_oFI7TIdl(ymeZFFMWc5^$H^U|+S2DkdwEq<61#`$k008fGE# z>yBk+CIa3%LTo2K{r-TxM3Z5U3FNY;6O5BYzkafu;3T41i}(YQuHISp7g@!35o<(d zZ+*R6k~t983OtQHEzDe-}tAuaIV!2bwFWeDt)Dhqh}kma=E0Ou#2&Gzsx*Hg?V4 z|0j6J0%*4SGn=sQ0Su~TmM07Cc_tE*g_@3M3v4Y*v58bR)AFN4Q|p%5oBHm5CtOtD z5R;Bc?m0X&&qtOhc+RkIM7)~M?WH+S4s#{(IUZ)* zC2PF~vlMCk=X>#q?g0#+z>6st=FO2@w#@w%GLrSa*tp+(n@t36$uP zPfh~9euM9$Xs`Z}t+V@1Hun(Cu^(6m;#0N^bEYJ-|F~Ctpw7;T=6ITV&pd_7R3E(6 z(cjGof*y#$WYVs;fRoS(zlXGT`6hf%v6AAlEJg8g`$t1q@qzk3PHrY3KW!PtZcyi- z#9{|&+3%w~L1vtphfgQq$U8C-^&RsF7Epay67Ems+?(WP>N~9=&rN&Af{Yz?INdji z{E`?Ih|z{BMo;qJyUFHtlKPE9EFq@7mx;|Z*86@hYSCoXt_}P^BPhi!Igxm}{*sr8 z&*jH_2+=#sPBr^eG_u}iUy}4dK2eX%-fkpZCrdY7_^ zf6r#s$lu@HfU=}Oq7Uo>^0DUs1l46}nka4^Ht$mTb$Zc@wCT*iB#qO(WeF&5{%X%w z+JSaLULpl%U15cZW?ms5x}sutYw$0`r(tQQY)BKuJ!Tvtv!Bgl?zAO<06TeCGIgncc_i^H@~e1F zLFb&ymXnh5DMUI(TJgt%*TW6+S;SByHG$0!5ce-KdB_sm|20FX{*PQ@ zBni=VKZ_#Q1%Ry#MqTk(`gTm7K=kyaq3k{6w7}Rf58#S-?=1lO~qmYVwmLT&)7EIRQ7A!%7p)%=x@14evtj zj4Bj2%U}6CvG4zUc*1&8=ZNb*_RYwT6?|F{@SRKMAQI?nWz)V{{j{=dPfRBk=HWDd z*4+WjM&?@Td~7w?k5RJq5)(<|Zc#=T zV!Eslze_%@S6KW>00Rz)Gvt~31QSVvlu?Gg zeO@=vctk_-Rz>kE`Lfqnb29ZkbVt4*AznG52}O9wRk4i9y{@q@Bt+0_SgY%m{^_E5 zH!@3^q~J@MRVV_tsXl8f^CC?epHA`!sxMGTu5xP(0aL{ws*f5Xd%Fb!-qAGA9w;$t`WO-YUALLB8wIFCQ&qxC0ug|KIwGw=Bv~!HN;tvA58~;)yZ*0izeO#4|?0Y*{%J3Sb zO|e$+9Zg)x78x#zgH;RIc$>bu>}tEQo)+-ue&zn-llZV}OU*-ZP& z=3`}HKOY(vVU!>XU9SdTsPD_}#xtsamKy|VoG-#WPF6V)B-)aTJM5QzlqHn@;J2P{ zC*bP6_sX6_)S$EJ(+MBlMGTTj}{QF1z2Wl|F8OKwVfTHGb~ z4V%cEUuj4rOu-jXL*=pNZv=2W4XaHvW3TD58wun$jTI*|&aG^mao4l2E5&pYs7F>u zgqshD{33{~(j=)cEiBZ(aWx}1neq8do`E{&=dwBlk#Q2n(Kt@APc$b%J4T7sq*?Ea zu$#&mn)8=buD_6_AVGh4&-|%;w2!#&aJt_{7}`vXpblL}un}ZNbG}iB0&{VY&p5Km z!+%+BV)W~L<9E{j^DJWu(f_thlp;af+!VQ~+`1qyOvBY#s2MvJzHdpp1 z4c`0>zmW^lWrSx`&hB7|NT9vvWNxCr`x7rnV1@efDnws2FAF64olALt@_m`>@E5r< z<4UJkLF2gBSJsCDEnRu}J8600mGOkiPrI;YMAPULJ5QENkQ*A45TOa=a&p0xYli)_ z{8LrI$wG~~i@)_yRQeD6%jY8b^<5NOYn$sQCLEKIK&3q5D`_@7t9(a8YtFAMJ!!eQ z7jHpAlDA?byqcp=6=5>)1wH zxURei)fZ~V?Wd#_3z!8-xFhHJe&SPO6uhT$jud8Aw}qT+ds6umN%Xk6I7cQLTpUu9 zc>{CGN;JFO-6^k9`Eo7@CBHV^4u>hKGwwA$5zVvOP=c%*(8t(JO0u^`PR9r<{@A~L zc~t@~ItJblqwGKMGGx-C_t;p{-fV5y&+?Z^VP8dcEy0J;6kB$kgKq7B*aOFif2JVl zL_Cu^eMNt2=zNJ^qK3K=#vi1?=e+z0nY!Kq^Cn%ezFy2XlAu-Bv2comKUNz5ke2YB zaezk3x&DyPw!}DDSk){2L1u)81e~~qC`e!}-yVV_IoW35z_%5WLeVS-ZG;P#mf5- zR*5v8v_*~}nj4vYnv>9Xu9&k(&?8A48EmX&qNF7#>fd%Sw;vQ%TqXXZC>`*Nq>Bge z75pA))`{D7Zqt2>VHR?{e^xfU_@>MaU9&5=wi6IwO_nLi{@ok)h-c z=h(C?HJNeI5Wba&s$CSr39M@g@jU@_Pbr&|3r=5vk>sWnNu>Q4_VRA|fP(khVBVQ{ zmZ~b&6Q911%yZ~&J^moUcAv^*qFd>qH!)3GLY$&t8Tgl|PMzEDlCwyINtLCO;wGpx z-$H$>%@pEWb2CrvB`x-ygId}lcOlP0Br zzvXWP?7tse#58pT>q7KJim-b`AGpTIMy|QpnDx*!O8@Mcp*U$D&`?@5YvRq_;RYRyw%61|G2=YMv=ely0OaE{<$3J7Mi_z!J9hCHzoYpBVrn` zT>L<$?l#&;Lspr$)RE0C5QrgAh=dDpvcwcayWaA86tKna$n0)lFoW5B60}b*0$YU?+TGHVK`2oxDSV_HPceC7JijQn83=diCL> zsa(DzyGcq0HZ_wvoI3s(+nm(gMgYfV2|w~>=1 z-=B9Un$pAJCY7^IF$2k>TkAki;-BOJPfX=J`$P>zuk~*qA=8pX;|7TeWcD`2x4 zPZl^uoijaPf6!VWtBOB}zHbGi1MykfQr@DVJKe+dC96C+z?&1F5(}8~Gx;Ovq%n~? zue>SiQinS?STund|G)v#GE;Anh1}G9qxm~o?${!*Z$uA220JL|!n5%y1Y9u*D`f>N z>hGG&4Es?_a_K{_QH`u*J|qpU1@p`VT(Gr~i(GJv3rY1&2C^rlOyEAzm%uuYXFrev zW&yJ}x#rIfaL?g%zpq|U4VWsPZ)X*q%0x7CZ* zh6V&2(wlvxzCn}3Byv-?zG4np&e>xJ+e<`_Eo?uPeFKbMr2V_Kq7Dtqc7x#zX`E#} z6eP0;i~#$|XtMQuHYpQ1N)#r6S`7mr{t4U3MQBB9{5=Tb7l~=zT|VK&^jeU7OB&A| z3HF;3S*P=HL|?(+)>ay4(pn|NKmzOXJ5(YqgSYx*w0SmSIcTz4+u12=QJ}rQB<)vb zram^NxqS?NxrA-f_I_+W`O>H??2D6O-S`9oEC1SH6d#Y?v(-c|SFtsAc`;ZwJC*+F z_OjPx7QY|N2{hI({mShtp(-;(M%oiJpKjzMnip+k9a7+SR+viKr<%*{TW~d&7*)xN z%aa(7sqeFBG1o~!(PM{^ouvNvcaew8+iE_0Ny7OK%vWEVUd=6)@%mrL}R+d zP9r}Jzn3qJ!_@igSviTcnej!~`@T`jSat$iGY&3NFlO=h*+W9V8Va=uD^Xb={eqj; z|HC8mK7rl$;dyE2Q*eg4!0lrQJZ)Ace_!fk*0%+E!}1XDikaIC7G4oHSnFid7`ADSeEu6!}k&iOK}rHmTW^ z0QOWj>|a;>bDM=y--F4G50(O`|KnkX{iBnOpV-eNgwfpij@DnzkfE>nj|5g>sLx08@yEH$NeY z{)SdF?H?2EOC&o}pq>7}$`Qa+r+iOwFnhD;NWyhoz>d(6^L@|zlAvX(N_*ovK9KJs z#j0Nt_6u&E-Z^0yX`ei+>_X;xQ^n{`{`)1ZyifJl=0JS{4#^2e$*&oYu$=@vrWzz7 znxRwVHR^k%7OW!QXNVBiE1XLIo)v_>`VHA&PIq?zK2{p`D5wUTNYM1fgngf2NDBUj z>KlB=ekI?_3!)JT(Z0FZO67iGrbz-l8Kdr8xL-gU(VKOo$)_}kZB*Z{ow1J0zGe@9 zN*dQYz>1M;e$L36Qs1V5EHBkB-^L4&#)bW5Hg^DmtYFejC@1izK6xp6uU})Csq?C~ zChc?~aGH_U9kF2E6!z1M!45OZj+M>Ac1^nj+#aH3(?b*mY?3B21u3&FgL&TZofUtO zU=HM<;o<*SbS0^~lr&3I9Q-*)6e8_gz5)A31*uOO_M1)XeqkRd7=wBlQ%SgsiRDUi zYd}qYo2*;cxlmjurbGN>HPX`P#v2h)@xDHn$U^VB81~frU_E!f~>hp{Q`tX2Xr`4~{aPu_PpD?6@`i@E@6If-`e{_BbBCr~zn8Psz z$0Vi`sm)8|zfY6cFp}E5AyN^ereDN&WcIG9jTK~xa}9VMsxNk&pQpK@_9}UUEOfOP z>*sK~e;}A@8xJKR@(ky%2%!FLR-J~{;Q8!dGGkCyb2VvpY(2k4ed{(iHc-H>dCr~_ zz2hybLL+O;2A+c~=PZ!fpaq7VJIe+USa40BHw5spl$c2)qGvnPK_lhKQudSp0`9UB z1Td$UIhBMsJi_NO@%iw~EJF1=&ak0qQEU8}PkC!HS4lsxUz1GKmLI43TB+eOX_=)a zdr!bY^~{AdY7#VNKarb^39_m^;f!M^h~BT8$Vq%!W^o!#NSlW<%mEbPY?Js*Q}6J~ zvOD?p?O-;60L*Mqgft5nB9joGV;{kOKP+_-^8xk!H&AY(VL5fX9Iok={%<0Dnh~Qr z*VsrK;CrJf1xeY^d`3o(n_(c@?FfXYL&vnwQAg5B%|m3`aFH>B~; zEyR8@d;g=nq#Mi03Xd`ll8Mf}F^`cYP6Ug0H13_FeWp_Vqqkx?)%SWUAJg6N8<8-J zqB?a1ETeMTZu}Vm*Y^|l?}Gb}2fTx7#UBg10V7EJq?`k;2W8h+!WMW?x4QsotN0}Hb8x|E=@RRR>3s#S(=Wf z{R4y7ZA^QUa=sw9-+(N;8=ez=E(gy;$`mZi+mj_qW`#>s&f*X0)ug2LA900Mpg5Se z7n+fIL*Bq0@^RMO<{8o;VNO<;H0zcKRugdgx5A$Q8W-m-;uBd&*cY4dc+H=6I@je|W(C+Tw=SYa!O@#dtQvcz?e$3Y444X^tGddb`$@k_w zo`tMZ;HXGQe3~>in-L9P4hQY$zZoyF<1}piYO!vlP2RzVx=pSUh<)6C%c){#Zr>TN zRl?EIEi?qCllIT`-+vO31l(pHx8I~J-4kw+aL%mnjqNo2K3_EFyUhiG;YMQ`T92e0 zO(y-2nsp}OiaEtq^6?PvGoCE>@H#6(@wA|(I7>ndx-Z(1i#z%{0+8Msf1f{?qiAUT zwLsn_fo`l421(lZCVxxiMny$y0`9Pbr6RD|Jy=^3u5zdxK)ydy$_Gfe3z=9X(NCV? z_Jvl?%x{A{C~O0hNNH{%G+u$MB4$BuDU{IQ|c#03KTu8L1v zGTq%OMrG=};+@D&z%8aq`!$?<2iQRJapITIk@zHCAcj$pb}hhO+1mdI35ict=Vx(% zOf(=N^L0$sW1SuSO-vw5bgO6D?}qQZ#fKApxgx^e9SvM=gwYVaP}%1LDe!R~t4x-g z@Kxp|cfYF)1r&|eKVXzxLY*JvVzbDk#vEfg)t}u2qX;-f6XPYB_jv=@K*5!6g9s#= z#(TtQ(lRQUu)ixXAQ!h^WN0{=JDbt`U!sLPLYu=GHNpNxr2lfbKxWJ$z=xQoT_=iD zxpf!lLe@%B)=1>m5&}-MUgVn03&eX86n|gvgQWoKf3BePBdJFXH6uxgU88&wlNm4H zkOhdTIh6a7kMrE*JqWmTEps!`ADhSR-Beu%yrUtFFS%AHp^K$5m(lZIcJD5$MUwV8 zYjQI0lk~8WI;Y!U(2q&k&292$5_ED#qb|`u%m=wih=3ni2>E{h4sJi3u9DiYzkuL; zFpd8}<}Lr&s7cYjq#EBrTGlMaSCQ0J?irzOFmUW2YfHypyjOb=Zs>zC=N#7=JupfbAx%3n4Sm}`N-5Q&$3LU*@lM@OhWjVFdtFC zUj0khZ&h|q$mZBV-OIQ`mfMueY1lUe=JoZlHMoAsuy2<=$}G3iusN2R6(ZmzA;w2C z`{P|Qqdm8u6ZSj719utpjF^2|!=~Co+;=3@iYfiSES5nOfMYU?VpMLORBR-T`(}ia zWQl-YGMogu@HySu8CHy7jKXiT-hMHkyPm`@vBA{(rJXd=4>+Jjm_0 z)ho-18w97g39|Ak!BYvl$)wcp0;+SSlVm`rOZ`T}WP5iaHRlg&c9dNtM z$$TSt6Y_oWL-3ITFh>b)|F|SySAK^As_rYppgH`}_v|}co3Ca!^8ML9GMe~Idf|w+ zU_JSPn#=2LiumzrK)VeoTi@{ydtdG^p5yhybH$yb>uotae0hV&HWMcuI%1r8biBjt zejA2w2=2DaNI188m&NyQR;zd*&C(Z1x20VleX4g@SVRTiquG9KAKrakz|6r{yNtV3 zb!Uq<;hoyHNR}()@1h0QY=Az)bJWUMDd(zw?FSB?UTwtKqS@YTs#Ixe?U_BEJ^iEV zkU>Q;pv-6&CiakSaRaR1r>J9YuaO2*%wLf7df!_ z-KCJs6?z_@6TN#um{XSiJ1BAGsgW0&t-k$ZSo_gC%QYJD!Y?~ty5rKcwGCR2+gNs0 zik!v6*S#9QFKxilqksHay7k$#^?vXB>${hWgWL3(lA&_p_etJeO;FvuKj&f2B};y; zR&L(TkemA#9*Z1#E9ao`N6Xainq+9s{j-xVJKCs>u_dr<&WWAARLE84-=C@;JeUSX zN2gmDRysk2ZMojg4oNvPL#AvuSB&^!L522LmsVLceDCJ|b+Y=rU3#>fOmuSHqWrmX z{gdeS)mgJYR_pPljblgjq${&Juj%r`x(%%tu8mBXci!O)SB6!nKQV35kx{>?F0R%xptO?dNzF3n8LLd|pLlQ^|$sjqlrO<60QbH;`ORdj@I)gNLo>raX zqeKY9&gmdMO0on01U7|ZZ3bpQMm#TzgsN7x0g8%`UI8%ApfZ-3eZ@R0`+|86_8Ifs z>=WksP)+=58vB5GA@&~gBJ3UJMcKcY7h^XtFV3#3rK|+Ih9@Q2Rm@AVE0~vNmoYEP zE@57tUBtX1yMTEmb{_L8>@4Qh*cr@gu+x~=VoxylMdvdXh~dCk0(KkoAa)D$gzP5f z!KgoDi81mSGcW`g^I=bw{tosho|sI1a?OuD!rUL@hOq!NA7jbUz>K9t!!wo|UBXye zj8Deuu#=eAV{b99&)#6(fW5}NAx1U69nFqo-jp4~yg56Hc}sQ#^VaMz=55&_%-gfS zFfY`Ry~0B$3^&F)WB4)Fg&o8^iXFhbJB~?w)`20)STD90^FG>(eWS~~OCFX9&zY(H z5c&8ZdK{BH-0k6<2gW%=pC<9LC)xluhT`t zo8$pd97;e*-Bc<%>`f{t9bMwhK9n5Md~LMosc)J^PkEIX|04cBwW5Ci)z|qx%+MIo z|NkYlV|wix_t*U}-qPTwCDP(w82+Whzw}Thdd`Q!THs`A#6{-u@?Tkf$NX$7@g38fTKc=j5&fP<`WOO)!rhLT&RiG+V zgX&NNYN|dg6Vr5&PrF5Fdfs8W8hub+pJm2&sO4&%8bhzdLg3<`e5=&=LJN-vP1AYM+Ty%| zXk}xgHHd{)U!jGW&=49yGN829;97WHBu+t+Y2ca`dAF}AwB~Q**gYgUyDLR#_f%~ zpy@o2J6CGRj}00UiVID{8=PdSPdBSa^Cgu$$!gAK51Jibt~ABXQ? zsPctt5(l%&DT@a4_{K;f+y`Rv$o=yYEw|-2Qo;)&6h>%ftT6s#fLMMoTzkW{O@MEekyb0_fG|#Sk4Fwa zzy$4ylM>7bwa>Ove4Z%I{&szpkT_thrY(V6Hn-_RVWQQ&1n%D${K!iBA#F7S!mCVj zGgc;vdnzgpn$BaAL36c9#>7UN91{s9SswUofN#VUFSxipP#mVXa+#>f=-B+H#^OK4 zZSrXl4bxqVaAQ+=h7H5ic10z9v?e0=`0<#0Cbn~M!7RN(sAhnlR41L{vw3NY4h>UF z)AG_uv|(^%##BZ{skJ7D!faiIb!Cvfo+y5@3{%>Hp*hED#XLSglm<=bfh&a;LX2qL z`x`iPkV;-~bG+bwwpuZdZzPlkP3M6tc}v4h)4jien`bffg8SL+mie#%7P@XbATum- z1^Pm=w2N6e2XoJg9w*?mflgQo%d`_zGpH*ocZ$ym!nI4{ARK9f?TOB?gy)2HLStbNY}zN5K^gU>vlQ&4%GGr z+}FZdw;XuL>MrUdtYeiNc*&xZ$1m&goWlm#sOO{k{y1%`>lG`-=a$N#>1WZ}hf2f?LR+qX~g3YX&RFz&tTU@IXKoVE00PqPU z={RhKZLWo*Ah*jA1mVq|Cx-2;I@kL!r6s@)H%C>Dd-AJn(RuWEx?JnATKD$SqYS8v zQ%qiZ5Cnd_LpS}079NsaT8q%9YR&gZ7fTO_smE^3T4nLYR%Ot1UV8XxJyz-7-{`T& zV(6s@K>+O4ZU3Q%hh(49BXuBEe5*jFWR@4usptzPU_TsygIKDe!`0O|2!ac%t8I6R z@IJyJR@1?HTUFq00XU2$4oBdqo;y@CfV!NwQhY&L%cAob<;Zbu6eSR2wefBR%^kld z#JS@HtK$d9tckR0LY%ixS`e7W7eci_(|Ms3()Z!fsG z*Uws@={#_UasDXHV1I15e=LSxaDVGr#Dvpu2F|+11>+9poQ=w|xQqG-=kabi-s;fF z5`?wS|e4KKL3y-^=Dod@ohdm8R^ zY`A}8!QF6s<0jmK+pdElkOl6zo`v8ldKZ5lgEyOW^4K0(qwVj*18sZN3}9G9x*WId zn^<%nF~`=?V&2xho3bXh?Moy^+dpE>{J_wwXe|rou@_9-#%}_e&I2=MvxdQ)1tu?; zPKrEG~Q!ve6^@rkWVcN%;TH*nt-PBf(+1*H+AoCAfLs8eCl?h0Dn!}k#%r~VDbcstlk}2 zN8}vhnx7IfRSEUt7?) zsyt>-jTM}y;c1oGbE#$kJ2K)jyP{%IAZDhA~VmzBV0eHfru1YZCx3ut&cpF>v|eU?3)eSInT~>=#?=F&w%H& z`@|9Qii$;9bhfCh&M_^jwKI)npIjDGThyGkeJs%2UZC+gMbmkK7S*8E1}qk6o*1CH zV}R!M0*%ipn$81S8>a?zN@m?V7HGa0pm{B)D?by?8N~GaZhPf||HDZc44SF?k4HbgI-_ zT{YCi4pLVQG4Sd7+8Vh zmpXY|P!Z2LkK~nHBf=qNmCEieO5(Wpj{Uf%^GKY0gqFCR?%kjDv%OKp;@4l@_tcj+ zyt1~B+S4gnfLHZGjC*+Wv*TD-QaLq@z6R>w6dBW~jB;?Gg=NwQ8JAJoHh&g=6Ada6>*0M?4D2;*}^ zltpI?8Sr+x9>BF#M_i9^*=XolHe44ofxp?94aPSXT+MUg{VWM}|)+GT}p!HCgcDz%2rj#%KLuT+?|$;9jIO z<1J%Cgt)`Ysb1gU2<68+X-~L*%YqZ28gy2Q&kMu2rt_dB?y1pQ=&oK0g}CQ*FSIU} z3!->8-raRC0)xMYD`8d)e!WM+?V?H^gCk=!crV^t2fu0t^)`(=#UK2d&KA=DEly@( zjH~UfJNUi#OzIw>u6OU50`w55r4e~ws}b|~oDgNvc@W=h(1;j*m}0G$YJacmEkv## z+vyQuf#RI#PVxC7ifcL#=<7QgRP8SQ19X7JQjG|;HRS!ZJMcpXgZN-<8tLkl6Otwv z*t@4zS=}M#LtM49qkr_hwhmTzkAJ?y3eJb}VcI{c88}9kJH_XpQ5Ky?@CHS65GgV6 zM~Z9|jf#-rx(2I8BX@NZj5~G6s>#Db9AQyl9-n_kaZTqztiMDf4${575l6;C91#O? zlow*$tHda->AVoRMjRLm5mi&kOUF^xKpDfw@^P+iIU#f5@fMBBQ@M-!$iK%Awc$%i zI(c041Dw~@#Q@zmQ_P{tk)m1t- zsxl@P`)RS*Pt_(*6wRme8Q7={s2?w2CCErWXkOy2B&witM^pX*^?WuDcFd3^KI1g_~k%Iw1{Ayg(> z_x47c9}8`s_Jgs2FXW3{AM-+r6pL+4mcm`sN4~_BD<59YEyYUCm+@be(KD-68u)U% zPaH;fh2@8&t_AtP3|ORTr?AOn;sh(K-cuMxA^+9YGe6$JSn0(vZo^LIn$Dy7@;X}c zg)uQge)|T4P4(mYp{rKPzsfS~8orjVbLB07 zmt^a05N2KA<9m~;if>@i4%WtM^#u1u)xBxPx>Fo>R#a@dMdz`~go@fK z>vZ24Y&u!q^-DnrG&i%Eevr_Wt{~pG*h2gfEN-(;=bFv~(9gOmTN@J~WUIw*2E#$l z6%gNIg?F)nxCPqgg%-Ejr*lo`g;r3jvnCeW_E>1!EHCWffAXEK0flfEy3597)*TOK z9rit%XUJa`gV_w{Lyo-tkW^oM4=s#_Kjg(e zZo~h?HJwL;roFTVJ7S?7j)iu}GW-#Klpk|#DFWee+;yc0&g3WX)9I|0Mei~5Nvz=f z6#rYBSvBK}WEPPw$32rrS#%yD%RbYavSYfp-US6J4E)6zHs95%Fxq-oQMC10 zFPyk-9mUVOo)$%0AN^0p!RIV4-B1r??}yad+&hY*xz7{A|G41NbRJF0;O;Jr@gx5Y zcp(PhdCTG#`6YhY^|}~jg)6SG;%M=!_`fFMoqwG?7Qcq)oL}cRw8d33KvIiHm*ckh zB8x8aY4-?C@4p_sSDNw5`fM>n3WYKwH6xSG+ zVq%2cw)ib(xNdR8^5eI(<<*YWLcHUJ7D`}~2c zWJ$=J;-QU+FVkB|ANeDfvm`E}kFk#PC;X|he&!Z<1{~woo#L2QTs=$SBKoW(E}{=K z<#P55**d{&cE>2uAtI5j_$=`|0Wju*V?dY-|~0-JvRQT2_hfAe>Sj>=c4I@Yi?-_ z^CfJO1Aj)KlPAnS;yLG^_-7sFsu}nfi%6B@*&?pA=n%~^t!R&2OEWD9W52PLWcrY= z7Qf%H68A4^Z}G)4%XekKQB~Mz@p@sUMdyKQi!&I)z0=)2aLGc2TRRV)VBUD#28?gh zxKe034_=%38t-jvJhuj3cwFIynL-Lfn6AxbaeDW0T`r4WaNvgsSu;xl+Y7=ME4c6z z{@M$w8Gyz`{9cH%=pvs+;Ut48!L1Q$QWT~>Q`5T$u%~yKNCfJ7b?-|gU~BQEF<0)k zklMAg9NypYUbo|(dZL7;^B~^D!HkGT9Edp2s6>b&$nwSZayan^TW$aAPMgqlUWjNf zM3ipEF?CF2akUYH-QEZhp(3&CRe1%{IE`m&0{-N<}n(8ZZ9wnP1b{ z#t3|Z;ev3MbTQ!)iL~Fq`H3`^`G2g4Gg25KZi;UtM2Rrh&WboAg=q4a5Wyl{3<%ea z)R5ejyB7Ew=|#B6;L06|8_SFYhQFe67xhtO!Y|t5OB_0Zy9GpMEOC)VL?{oq7DVDk zB)PjW{t>Ymu}?&zxEVD07Pi?v5#h{`)#9*);r?7?V_W@{oGSiLRze44_u?P712zjy z=W#&WC2C?2;j!Uz#Do*sE$bhvgx1gL1sC^vuvz4EeXWG*q>s%%S1kVekseMwxkVn4 z*VVf+hI&35M!g=PlRk?4t~Hf0)C*u07X?KjW$0Xu@eIH-JmLs-Ma6dDL-*h+C|X|4 z^-uh9pZmR!P*GS{;g90}L`xT8JN=MWS-O@65JjzK#U`HXs2vuaJqPo3xT8W-=ZTG1 zEGC{PYMDByDw?{u7hK$?-XV&+%2Y*ta>wRhA{PJR?pdXzC?!g}Hde*k$7NiXtKuAA zmhE=1Mpg$;K$pV`F3O7vdX87kASzl!svOTsyT_u7e3o;DrVqG)v4&#Awed&r_#;c5JRYip=Umhk_4Jg}9e?-Z@~;{14}T7d`ie*7 zvmq7~%)(g?wNOGa{AK1r+cVv2;;U&5*&#one5RR^cVhf zL+WR0=%Qw#xoCk+hcyB6s^+R%3z8RZsn2y5;4bQ;Xoa5?RWCKFBCbkwaXi_a-X@c|ho zFWwjq$lKawd+`ntofM(MJBAkOz>ebx-5r6e&*j=UWI9`on8)Xjqe9bp&_>MGXllFo zjV7U@i>~rU>#S$1jH0WE65X)%gr-1VH9Pm|+%0F@ZrYl9)O2?(sDrau4|dXl@3rdW zaYRo%=c1R;55Zic>O!J;eiwI2^ikbC5_jiXVkH2>AL*a6ZU3+?PF(%iKWG-nj%FEN z7tPXNlc_8|C!7+R&I6);g^EtV9FrGFs2HHDuzdr4AM)lC~q`mN+>qO}ivg09w? zue+#^Twhn$wW>TGnurx#{3s^rwWL);T!$ySyT$LIi$c?Rbh&S6U6g1Hzh!Wd926?1 zSPUI_C^Vf1?p`kq_r31@4cxR?aQY!tGM9#n_JWJs zQx}D%^T6Fbs^M_2f$1B#=@vsT?V`1(@c)(QOzKJwun?Yo}qKqqVvf9_Z=;}5{2Q{C$5rbT+5r_ z(3#J!Hpn0V}gYesVjk60|0h^5$gLlYpYsslSmb?!b;tt_3p z>s3oTW|?b#Q*_KP_$^)aD-xAFj#-XpT&xhk>Jc-tS-dODO|eq-_DH=Q2OL^SNx|4H z{8k4|V-K34FIKVJe!~4g%h?Qlv0BrqEIwb{6q?S1vaN$gS)zM;p@fPx7Q&=>cuW{ns3=(uUodGNMo(s+ww;suMfG4NcqnnI>T>%@Ao0b4LIF)2s54mXDs zg*WPRotf^UJ_>!QQp>9HxMCAlaPhnNLyr;F3}UmppR!oo_rC91bRG@nUDp~Yq10z} z?vh_Z1g@G^-95CJb%F||5NM~yIjx;GNssUquO7F zz_}h}=;|ud3a`xfV3~`(!g{t=Q?-cwia@9M-0;Anv+q#^<*%wG-KBdz#365As2{Mn zJyc(-(Ql!O{gz?ow?;o4v|2Hb&kqlTrt`q%Lw}=TcE*PLD;AvlxtoHEIOGKv_b_=N z4!KUX#_RMyWAi^8i@$!-hK4^Pj*4Th@@?>z$Z;EnNq12n#R=DlHfZ>hSjojHVLfeA zmskMF>^|`s{)t6rTOzRVU2O^6^<#R9Ul_6t|BuD+Db_M^nmzNwH-GUCNqChrRs-ho z+58DUrNiWfR81q{dWz{Aq_esT>j+7l(JodOgjzX)doOp2FaDocbRNh;I5DA{kLbSN zK%TeQc|o3Y$NvR!QCxD3ZHIRRt@T?|3OBqyiYxdXYgXN=^2|zCv4V?h;=1cbJAC0W z#N9=iDeejBC1^U2%<3*8%8XkkOt0{RNwiSBZI27ZzwEUigjn|kC%4B<+f6T&xbF$R z#HV?2ls}=M39Pv_UIuBfCjA&Hq zg6{ndoV5~o!`*f};;y(S?z{f#fX^l#xE^)Dby+V47)2_1%#QN{n*EV@tQP~-43J2X z=oFvr-&%AYG5b5UnAT$W4!?TkwtcX8VsU$?zV4+K16Pms5SB}W35;5Iif=r;6;Ee& z!Z`uwcT8T)L&YQ+t`UdiauEILE zK7Qi4HhUKFQoItcvGu*Cz_sMZ$g)ie=PuWycl(_BLKg7TPU4L#duQ~>Tl_CA@FQG? z#m&k=AW!tjd+|YeBuXvhLVb))e6-2pHk83Wicjp5_>4c?NyR?nC)~bR{ZNugy1&>} zfUz*9h2%m}e#P&yi7$wG#p&2M9n9wD*Y5;Ad57w1b4PO4)g{KY+_W$gk)n0x6kN(;5#8xDh ze;P^$GDLB0|D@CBRu)qUU#!-q_gHC16AyC?415ac@sm^P%R&9v(ehJRJk0$q=C~Z{ z!DN5m(&`fTl%QN0fUXQg@SPZayKtcB5fGWd9!=ZPY#2>1kr$T%NE*YJ_}`&eFyu?N z+chr=vZkf6R9|W0u=xI;ef7bs&;QX^+f&(s#`0An8Ki}@eZ_XUYIcKE8C9*vBimYe zSj6;5kVNyUFv@QVopy5HQu2 z4fHF5_=!?gmZ7fQ{qYUWjaBi?{k=*oAvI)?iDeR*)CH5EW;dGX_WUf9fe!~MlY>JE zF-%h{PARa&Wy)`aK`xL9A|%?$OB_hO7y(j)ueUg=yO3#QS{df*H5}5rj&+At71Mzq z#yT!BDRrJy<(eCJzcKXq<0P!Z6tv0u6r1N0Xc?4FNR7XTdEO1OxaRbLOwRNWU@=r8 z`FVZ16F=N3_VX|Lm6=ExE;GoCG85!LGh~)oWQ5Erv&rl-hs-H+$=ouJ%q#QB{IY;7 zC=1ELvWQG2i=x4bp~;HN60)Q$B}>aPvaBp8lgje4f~+VbWhLpV*Ao&uWj$G6HjoWv zBiUFskxgYY*&MCZLbjBxWNX<5Me~onD~|p0i1pCX^Q>=uANBQ7v^2fi5ZJCr?9CiB zwcPPEN&(?OS)1N^Q19vXCWD#3qX4O|H{KhGQ}K9g`S{P9kCvpLBCxM_%R;EppzQeDf6k#v*$$&{NL(i z7ui)t$!@Z{>>+!~Ub46BBm2sJvcDXF(K}EMvOW`Ve>!AqxZ$2044IXHLm-P1FdEsZ z1m6f|)qJN8xMKdTj!bq*fiXQ4vU-cAhp`-{MtHdM52WJw3EWUT8rFAp`EvaheQ=DS z=aj?c2su)YlB4AqIaZF745~8L;*$%R%ej!(TLKgcng6UpG@UmdPSY0NY&j3|DZKfRU*T=G@hAe_ z6|wQMTtU1AP{13nqQ+aOheYCu>crMj$VGCoT;j%^B9}rzg}V$2DO?q!DuJA473@5g zp6O9W`3n^G#x1A2F4wrF2C5SqHRdzkNgvgtB?ZRk)4_kg~D_f}qa-&tS^H|V06$r3Zp_}dvM%3-MBElL^P^@xtM zz>j#K-jepSz|FLkYYcCJ$fFx_JU;KJ{y{#Dgx1+d6A29+F zM?S<=@)`a;!Ie|3s<*Lx8S2QVczl6%kD#u6j^zhXPu@ez-N&+8RUhL%Ozq9?A`LF8 zdO_{DA%T1e^_5>nASYmM$k+0Xd@J9{_qx`~;#fwToIjRep_!39A}1-Hh{9^_ja$STBw+kG72 z5<)9)I2EQ~;7iG9=?aI{i4B?3NMwY>Tu6;jX)mQlVtaqJ9k?k|Q z3uI^6MP4Yo%5Ji|>>+!~Ub46BBW?0pf-}rm7vMxp_JxVI6qx*H=OP+pKl~?O$^2P! zp>p)$-uOVpfmSgEol#>x8edxWmjmR*@)9{v4w9G3!E%TkDla3#GkjG30Qyrt^rtH; zGpk|A{4AL><~!*A1&bjy2Ti(&w;YJSq4>KPp9e#l9D?_k!X!ync(}A72f<|Ob-E0= z9ImE>8wOJ-;kFvF6uZP^ATm(kQvQDTsb$dU1x%b-hI z$}3QkXPF7gjN&r<7NrnNdq|st|4hx z!Az3&P{14{Ff?6IE@56d>oB z6slCblb&L#CRM0`1B;)P^Wi2Ey#Q_|(f0+?K$_8Wg6tBaho3^x3t>^B=!Qo0O-8g= zOw}`1rE1K8dIO6emN&yOm(^FW5 zt-OtL3E<%n5xEqWkvvQ;<3Q5tOrk3xZvb|vav3a7lvfWaKrT1(x)##_JD#*vagbJY z=0TcVVHY9KFicySFiguIyb6j)+10Rul)WX;40~NFH|%(Kx_LortCf7TSZAlV7Z2DgI~M`>Qu>=8|5Z>ue?v*FCU;a8M#?L zC?AqrdX|Ww{BP})rQbCe@kl}QLyh~`&Ypni1(T*pMl#+k7wZy(qm&x zk320*|3SV3K>IQtEMWz!=zh9c!YGjDUc6I+K}fNHF|9=YLpI-CTdjE zXp~_!+OrM@4XOl>k%-FhIEh#o6Hz|63omCB@xoas;v9G)QACyzQN@U;@bm>CJzkN8 zs+v@(j$kW1s2V&;8dQg;NP`6d0jP2bq;z{m4W51pHK+kQ5;e#~FsMwUL8Zr55pCe4 z%Cb7Bnl_lyWU92-DY2X-auQ3DA;)g?XZ zXe^Q?BcC?xrNycqJVSD`;aQS9FD5tTf04Vc0?Mrq&sn*ZNTRV^5UPR7QMvx9dtkcA z!#<$#i%=EIeKo(w2FR>ltn%S`j%ZE>UPMJ_a2khq{udjdjgNb<<)c&#P=xuI264yH zLTsa8yJ`q8km`-#MN*yGEpnjDSl8G(SRd3euyHuU-kbLt%TZ0>B^!lO#K3$R2vk$% zKeQ3X4sHf7b9hBHhgV33|=oa}Bah$lpAjPfzi2(Jj$H(k!W3S{7WCYG0dj;(YWzD!ic~u=!a|VKp#d|LxUl7 zC?)W@;xKzI*=N*ZfBy_TBc@su%9sqUh~aMLc2XVSO-hiCu!j;PtVWN9` zZ{R@LL^=M7T?Q=k{ZLHxF0j`o3MB`aQpDATsw+NGqR;`Yw5ys}tadM@=fFkO`H_mM zTR7OH86l0c&=8FdQ7uV(r|J&-h;xukb~28e^yU4Ag;3_IbPP%?!aYXKLBIc8xGhQQX&E)0igQ$+aACs|Iqz7%s3w_{zdXp)mQaX z{nY@uQ(cTvy5xTu1+AZ^2EyB<-XM5~)VniK$0`Q+A=|ifGa#iot^}&V@UB(QD8@33 zdP7LPI_0v}P<5HQTn$shlLn;aqc#gu+B8rj;2_B#3Gb2oyJGSaC6i|f>20t9Rae0K ziP?_}@(3J-{{nwhBPj3PTCsp$;fWXX_#I-=e>Yv?#ruCO@VKCmOD$ThXsr3_9p?RL zI7E@d{doxZJA7K?*Hs$cNBx0R&B^c)gwQ`E+uj=vlB|00w3GlGx=tEIZ#s(PQGE`^ykin(y=nL zo7z4wFSZHxr5G&6;&UmJXVcVlHA7vaW@28=icoEflzh$I;3*atVK{Qa7p=dfo460Y z^II~{u#r5AQdZ4EwXebTX-rWy9ge7(n5r`{g)src)u7gKWm~Fi;S)-t*>IGS=yno? zE;(_mkJGf(!{k)g!KXHXY~xMsEmw0?l&(aDjⅆS9arYf$D;F|G$lQO*I!j`}f9s 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 OOZcV7R7wX@;Qs(8scSa? delta 64759 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 Di=wf| diff --git a/GBZ80Core.v b/GBZ80Core.v index 338c2d7..cb231c2 100644 --- a/GBZ80Core.v +++ b/GBZ80Core.v @@ -36,6 +36,7 @@ `define INSN_NOP 8'b00000000 `define INSN_RST 8'b11xxx111 `define INSN_RET 8'b110x1001 // 1 = RETI, 0 = RET +`define INSN_CALL 8'b11001101 `define INSN_reg_A 3'b111 `define INSN_reg_B 3'b000 @@ -80,7 +81,7 @@ module GBZ80Core( reg [7:0] rdata, wdata; /* Read data from this bus cycle, or write data for the next. */ reg rd = 1, wr = 0, newcycle = 1; - reg [7:0] tmp; /* Generic temporary reg. */ + reg [7:0] tmp, tmp2; /* Generic temporary regs. */ reg [7:0] buswdata; assign busdata = buswr ? buswdata : 8'bzzzzzzzz; @@ -381,6 +382,34 @@ module GBZ80Core( end endcase end + `INSN_CALL: begin + case (cycle) + 0: begin + `EXEC_INC_PC; + `EXEC_NEXTADDR_PCINC; + rd <= 1; + end + 1: begin + `EXEC_INC_PC; + `EXEC_NEXTADDR_PCINC; + rd <= 1; + end + 2: begin + address <= {registers[`REG_SPH],registers[`REG_SPL]} - 1; + wdata <= registers[`REG_PCH]; + wr <= 1; + end + 3: begin + address <= {registers[`REG_SPH],registers[`REG_SPL]} - 2; + wdata <= registers[`REG_PCL]; + wr <= 1; + end + 4: begin /* nothing happens on the bus next cycle! */ end + 5: begin + `EXEC_NEWCYCLE; /* do NOT increment the PC */ + end + endcase + end default: $stop; endcase @@ -638,6 +667,34 @@ module GBZ80Core( end endcase end + `INSN_CALL: begin + case (cycle) + 0: cycle <= 1; + 1: begin + cycle <= 2; + tmp <= rdata; // tmp contains newpcl + end + 2: begin + cycle <= 3; + tmp2 <= rdata; // tmp2 contains newpch + end + 3: begin + cycle <= 4; + registers[`REG_PCH] <= tmp2; + end + 4: begin + cycle <= 5; + registers[`REG_PCL] <= tmp; + end + 5: begin + {registers[`REG_SPH],registers[`REG_SPL]} <= + {registers[`REG_SPH],registers[`REG_SPL]} - 2; + cycle <= 0; + end + endcase + end + default: + $stop; endcase state <= `STATE_FETCH; end @@ -645,14 +702,53 @@ module GBZ80Core( endmodule `timescale 1ns / 1ps +module ROM( + input [15:0] address, + inout [7:0] data, + input wr, rd); + + reg [7:0] rom [2047:0]; + initial $readmemh("rom.hex", rom); + + wire decode = address[15:13] == 0; + reg [7:0] odata; + wire idata = data; + assign data = (rd && decode) ? odata : 8'bzzzzzzzz; + + always @(wr or rd) + begin + if (decode && rd) + odata <= rom[address]; + end +endmodule + +module InternalRAM( + input [15:0] address, + inout [7:0] data, + input wr, rd); + + reg [7:0] ram [8191:0]; + + wire decode = (address >= 16'hC000) && (address < 16'hFE00); + reg [7:0] odata; + wire idata = data; + assign data = (rd && decode) ? odata : 8'bzzzzzzzz; + + always @(rd or wr) + begin + if (decode && rd) + odata <= ram[address]; + else if (decode && wr) + ram[address] <= idata; + end +endmodule + module TestBench(); reg clk = 0; wire [15:0] addr; wire [7:0] data; wire wr, rd; - reg [7:0] rom [2047:0]; - initial $readmemh("rom.hex", rom); always #10 clk <= ~clk; GBZ80Core core( .clk(clk), @@ -660,5 +756,16 @@ module TestBench(); .busdata(data), .buswr(wr), .busrd(rd)); - assign data = rd ? rom[addr] : 8'bzzzzzzzz; + + ROM rom( + .address(addr), + .data(data), + .wr(wr), + .rd(rd)); + + InternalRAM ram( + .address(addr), + .data(data), + .wr(wr), + .rd(rd)); endmodule -- 2.39.2