From ece5d2548a23bdd6fcb348a8657a5a347b25203a Mon Sep 17 00:00:00 2001 From: CasualPokePlayer <50538166+CasualPokePlayer@users.noreply.github.com> Date: Sun, 2 Apr 2023 23:37:48 -0700 Subject: [PATCH] Fix peeks/pokes with the new memory domains in Virtu fixes a311b3b6f36124b0c17e0b971a83e2a37fb2eaa0 --- ExternalCoreProjects/Virtu/Memory.cs | 48 +++++++++++++-------------- References/Virtu.dll | Bin 149504 -> 149504 bytes 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/ExternalCoreProjects/Virtu/Memory.cs b/ExternalCoreProjects/Virtu/Memory.cs index 199110de20..b85abd7fdc 100644 --- a/ExternalCoreProjects/Virtu/Memory.cs +++ b/ExternalCoreProjects/Virtu/Memory.cs @@ -338,12 +338,12 @@ namespace Jellyfish.Virtu { return address switch { - > 0 and < 0x0200 => _ramMainRegion0001[address - 0], - > 0x0200 and < 0xC000 => _ramMainRegion02BF[address - 0x0200], - > 0xC000 and < 0xD000 => _ramMainBank1RegionD0DF[address - 0xC000], - > 0xD000 and < 0xE000 => _ramMainBank2RegionD0DF[address - 0xD000], - > 0xE000 and < 0x10000 => _ramMainRegionE0FF[address - 0xE000], - _ => throw new InvalidOperationException() + >= 0 and < 0x0200 => _ramMainRegion0001[address - 0], + >= 0x0200 and < 0xC000 => _ramMainRegion02BF[address - 0x0200], + >= 0xC000 and < 0xD000 => _ramMainBank1RegionD0DF[address - 0xC000], + >= 0xD000 and < 0xE000 => _ramMainBank2RegionD0DF[address - 0xD000], + >= 0xE000 and < 0x10000 => _ramMainRegionE0FF[address - 0xE000], + _ => throw new InvalidOperationException($"{nameof(address)} out of range ({address})") }; } @@ -351,23 +351,23 @@ namespace Jellyfish.Virtu { switch (address) { - case > 0 and < 0x0200: + case >= 0 and < 0x0200: _ramMainRegion0001[address - 0] = value; break; - case > 0x0200 and < 0xC000: + case >= 0x0200 and < 0xC000: _ramMainRegion02BF[address - 0x0200] = value; break; - case > 0xC000 and < 0xD000: + case >= 0xC000 and < 0xD000: _ramMainBank1RegionD0DF[address - 0xC000] = value; break; - case > 0xD000 and < 0xE000: + case >= 0xD000 and < 0xE000: _ramMainBank2RegionD0DF[address - 0xD000] = value; break; - case > 0xE000 and < 0x10000: + case >= 0xE000 and < 0x10000: _ramMainRegionE0FF[address - 0xE000] = value; break; default: - throw new InvalidOperationException(); + throw new InvalidOperationException($"{nameof(address)} out of range ({address})"); } } @@ -375,12 +375,12 @@ namespace Jellyfish.Virtu { return address switch { - > 0 and < 0x0200 => _ramAuxRegion0001[address - 0], - > 0x0200 and < 0xC000 => _ramAuxRegion02BF[address - 0x0200], - > 0xC000 and < 0xD000 => _ramAuxBank1RegionD0DF[address - 0xC000], - > 0xD000 and < 0xE000 => _ramAuxBank2RegionD0DF[address - 0xD000], - > 0xE000 and < 0x10000 => _ramAuxRegionE0FF[address - 0xE000], - _ => throw new InvalidOperationException() + >= 0 and < 0x0200 => _ramAuxRegion0001[address - 0], + >= 0x0200 and < 0xC000 => _ramAuxRegion02BF[address - 0x0200], + >= 0xC000 and < 0xD000 => _ramAuxBank1RegionD0DF[address - 0xC000], + >= 0xD000 and < 0xE000 => _ramAuxBank2RegionD0DF[address - 0xD000], + >= 0xE000 and < 0x10000 => _ramAuxRegionE0FF[address - 0xE000], + _ => throw new InvalidOperationException($"{nameof(address)} out of range ({address})") }; } @@ -388,23 +388,23 @@ namespace Jellyfish.Virtu { switch (address) { - case > 0 and < 0x0200: + case >= 0 and < 0x0200: _ramAuxRegion0001[address - 0] = value; break; - case > 0x0200 and < 0xC000: + case >= 0x0200 and < 0xC000: _ramAuxRegion02BF[address - 0x0200] = value; break; - case > 0xC000 and < 0xD000: + case >= 0xC000 and < 0xD000: _ramAuxBank1RegionD0DF[address - 0xC000] = value; break; - case > 0xD000 and < 0xE000: + case >= 0xD000 and < 0xE000: _ramAuxBank2RegionD0DF[address - 0xD000] = value; break; - case > 0xE000 and < 0x10000: + case >= 0xE000 and < 0x10000: _ramAuxRegionE0FF[address - 0xE000] = value; break; default: - throw new InvalidOperationException(); + throw new InvalidOperationException($"{nameof(address)} out of range ({address})"); } } diff --git a/References/Virtu.dll b/References/Virtu.dll index c18d3b41495fbc47d09fdbff301e82651f9abb5c..8b0923f61424c6d345c727de3b3bfce27d5087bf 100644 GIT binary patch delta 12327 zcmcJVdt6lI_W#$~!=Bm042lQ@UKwwQpaLRyJ#v-%MS&>oC}F9o<)z5H%}khCnU}Ce zO-&6;%}UeKE~l{6tfOga9Zf4pGb^n;See!FyVlxI==tOK`{(=m&g;c{KcBUpwVvy~ z%pN>T?VhFfr3?M+O%wMlThv9n`rEQCRk*PMF;YK!1)-wBrNuPdf{{3(!He$jlfNPG zCy)L#&|zjLgvnn3pl?|-ChaKGEVE&#SHFgPo{e|^e_EDi|2K2=Hjk2qM|1R!IRlzG12ji8 z2A(uG9n~c5F)i08>0Q%6JOno zb7`rxIoGI%_uQ_5)iQnMj@*NPXbG>1-M}{cJ~7zYP%9Nb7lZ$G!>>E)4k!9)?Qd#$ z=~!oX`bwjZjx|1RFo(a;EF+1vy=R^iQAdVNg<{e^xXvb&2 z_rR{p!vK0#j)a}Gz=1&J;g$K>blgjN(~j^zqjh(gwGX6bR#;sSR(Z443e&PiSrJB9 zYl+|J%*Rrh9jz0Hj)F-<>tN;|BbooHU>+=CcFSk>NM!CyV7@3dSEX|KnWDR`<(_BA zQtrvDWcJINdcb@&8|I+XOF)#Zk-`2ceY77&LIet;^SNaU&(8YRLc2{!xNgGP^VIr~v+ z{&AV7@5{|`FQ&16Fk~6=r84FNgPD1G%%_D`;kV-5ozC{#Qkm|mG(LQpzU0Q`CeJZxN%1HW7K-A|zz*<^8`=KS1JPJ9C_q zsRuH<1u+MAIzXvgQp$)+5)Tr8AHwW1{A2R|E?f0o8US5;;+O;I96>m#G2b4@OparY z7tW98@>TI(X0IE{#NihD#62mND^&=e68n8(|5x$?vIi%hBEFscCGodp9$8QA4Dn(Z zbDD#BDVCWLe}=9WOqOhkfkz~o6U>Z|M73SGoY{>zBZ4`k zH}k$G@qGJ|uZV*#%$Cit6d2TxF zzp0owx*wZf4Ciu0hY`e2fGr0*-%NZkmdi)GGh={LWObfo9fU7*VT-jVGrB$3%nKh) zoYtT7$9y{(y`5H~93R#Kq)W9Kl`=U+(+diAh~o*(^|&%SJC;N_~dZuyL%;VQNO5FD?LI zb=PV1TsYCJawd~*Lr|sE)WSMVhlxsE9>i*nQqvMxEm0~zm(^=Z-JZ$n1Eu~(W6BrP}hZ=+FfSzN5vVURB1w;&)W_ki*B^FgP6%?l|6c+EfB^{F;zlJqb&#; zmAa6##h26`bJ{oBIzhoyvr2hxqwlfy_3rt#9qMq4x#DfMkdqpvg&JL4AL zq(F?Knh9{F&aC-$0zx9>-fyalgSYs$2jV@{rD0Gw%QU_~$uhyK)RKxuTQ=-gYINZi zUttG~qAnG{>e*(%?+J~*`VKgk+QT4ewrdb3QI)^LQjb|>yWZ%l4Z_FTZ?R2+4)vyS z>EJE9{tUvJ5Ulf!=}UoizS(r3`K^N|S8<&M#^ON;b+A^cP+Fz?;W?$c(pc_?mz63W zROdTvX8GRCG7C;BUv(tHEci;PjuCa*Z1_%;*XR_1FdJHx@6$eYzQ09DUq;cP{iC*d z(DiBQuW@_PHs3>0c+tJs_ArcH!^UM{@rAG27Q#+Z^J$~LPU=HZ`;j;Cqwtfcr{Ih1 zCfj2iM4$co!K@E#i%mhQnbb1)JAcua?f$WCIV=~oA2^E-{GMUoexNwFZ3XmNXG#uy z8j9Al^1}SI&unX9p;A#rUyyoFsr>Cu^1W>{N6}}$oV1%^ej_VBX@9b9fo4(X>;?Mwwykj9 z^ce;A?|m03ymqneMcBSk0*nueuh?FKBcjgXm$8kcnw0_#jcri-Jl8yjABLf^9cC!? zQ7js-fJdngTBB_TRBbYAo(gO9JrIKSQ+##>M$Y8eFN z2OICeR8jSiOjGeL98hXaVx6yJf6VFnx@|A~_yUK^g4p(hbE~OnJ$(1|$E4cM#zD5w zhv%h-@sTM+MH%#cTR!ZIHICk(l8oawsA0yxZczEgXE&%3zV-uft{aW!HY3kVOPk_( z`KnFvyqsxMG%vQV+Z50BHxMIZFt_x#uv64i@J7)n<6Agj`XD*0mee0geN}u{JL3YB zy~vpsz~0h(ec=P?u2x?dKY;(DbrYF$N8$vy`d~pKtsECzbI)`Xi*y zno3sZSJ=1R%vm;MiE#yvD|K)AT;nRNc*XS1E%*82VyV3~zT#MnqN$*lLGszJZyJaO z-JF#Ak`%V7HHm2absyTVXJn&cY4cr5MZ>R6+0xL^+f;B`qm6EXDyKHI(MB(sOcl_3 zWR~yeSj-t-r_p;QWlSl2-e^;Ddidks9qi=OW4_IS7k08bCzlE*j($yi&@XeV&l`tP zl^+_Nama2l8Y2phk;)O}HO3cMNtGzy+bJiEE?A{}|4jLu)EMQ9C^%zu#qr7)Q*hpQ zjZ)KO(VHZCCCIJwgmlLWrFcRjut6!F0vB#miU-{TJ2jbcJR!X>S=0h(m-~a!2hS>{ z<+d7;xNr~GTmZev7ljG$nyOQ7tJ~;@Cq#OoA8phaguU$a(yL-L`s3h(rs6F<0H-Qd z;y_~{9#o1qcr5li#5K<$uXr4$D#a@vj|EEA#-l-xRHD4lL2EVK2^e_HY~oZ{tC5Jq zlp5n`HIi|uQeVcl8mZW#)cwJ&MmmPb8R~^a5v|5h%vY*`e8X_AQk%$^iQAQWnS9y! zwNiV@m+QvxPt4{og|r%ZSgh0)SF2HgUZws?fkpVLQq2@tg5N6j4f)Ej>!)UxKgc%% z%awA5wi*@qkWw9cv>H|Tx>D_8T8(OSUsUqb{;kHX=#uM<7cA77(O9We7ZF+_jgn5q+mtG!q|E|y-%r<}8}MyVMT zHwT~m%xyNYkOJr72gV1k^jh`rWn&Q@?{R=b8YZSK*hmfN7y)cggH{dkooJk{W#EnY1 zX@t+=Nu_?Lz)cwNrJ3ecira!2N)3o_HMU~5QWrEUyo5WI`gkC#%gtuonGjZUT1dI6 z`J*u`{p23yg|t{!SCp!ZXO(x>3@j`OAvHy*4nsoVW!$XPE-eJM;Vz{X>LIWl_bGLk zJp^9CV@eHohQJPN5#^>Y5Tzlo6E(RFdf}tO5O@`1l=?O2H{&&YL#aQDLSQ%kpw#P0 zA@Di|pEJ9bK~21YHA>A-41qVXUa23cqi^9xrSfA#;2-$Dsoap|2!XfpTjhL@obRCH z8#8I_$Pj44SfzTTg}@%H7PSoece-Z0ixZW~F4ygQu}-PO*$(@DoTuVm96~R(afwom zq&~!FlyWx?`OWwzzN_T!A?Iv|@Nk<7vVVkMwy7}t5xih3BdsJ0kK)ftS%$E>ChDBM zMwI=$48j;$!M+Ykjn!FoQ);?9k!7@!rzJ2=)H(a5BKBn~^84LL z>4Ato=j^?tYn?>Z871%4_5lc5~a0VzP4XO0Cn5VUZ~F@$1-Mj}ZEr z#4Wb#N*jvsNt=(q8GMS362}h|z3l(OOJ+`apg4j3zmu-f4StL5BxWncS-PLX(IUM- zw?o=u$n|`{$FkezC4su7^zxc1#nsMd@&d9AL*jwiME*`&pc*)Rqxex>tKdd0~4ws}o91DPk4-184EVTO-i-Z7K#}y6@Li97#`;g=zHM zve@<=E|)6Yi46PqSaHd0mZ#$)j{LW&Hs`0?f51^n^)Iu+4|tEL7JNJhNqLldI0@lL z+@#beBM^SVBP#Ao&FJxf8{SyB4 zGyA-BX6M^48HzJty!rAdbSMFW^^zE z@1U>Pq1qy)I`>AnN!z5N*<%F z(?zT9Xa=^>I(5;ODD|%Rb}O|`)KR6zi8`-T=unQ!reAZp`B^#n_AZ)7sYL}==&l9O z@4B?%jjHr4?5>5ll^mZQLe5^I>W%wL%IpzZj8c!5RFX;)bE6}pe^?7g)8swQXYt$lPuTyO2uF#3VUY`(_cTl={!aJ)TIbI|YI zrq2pdT1QhEH>H0{s&kt!kW@eA<0krP@ol~k=%;0fGUq8;D{k{yAzG^>MeWza!`j{U zXzey}*2BO2?zYEhcPMqrxZB=eo1#=#=iT-J+I^z*V+6HMCSoNW85?fBcgK43(|7pC?wH%E^ZJ<)U%g@=8w4z-dhGBVo z_bqt3v|RfQV+sRdHN@t=0F7{GS`voibb8Gdj^l-y8B(U#li`?~J&QQ5g3A$E%oKVt zx)ovyBVa4VjsgS9V1s5r1w2ozhONZWu$?#-UL%f!H;EIVNi*Ew5z~CwM<#kPMO+Gp ziOVI$3Q4gVj+12_{YYoPak2EpFQ^=YTQvtH;2B~vULdC9&%|N)A7VDzEDp%SKw=Sw z6U(p%u>zxs)tEqZkH#T%7>l{Yaac;6fYrpwSVNqOcMS@lE0i+)G@IhluO&Q(_~2N!*0ziCgg!ahn^j(qSiB{2cWB<|Mv_ zA;c!^M%;^$!~+;hJcud8BbZ4%j)lY%SV26Ew-KB1PU2a-hj<=m5-*^a_!B-#yo?RR zE4Z5Y2W}*S_7c%gbMK;qp*0bm+6Tly?IBDPQ(mP30>R@P`C|&H;Wp&xE0KeW%W&3DkKs!8(s7OsCTcy68NZ2z@=- zd+E;+`|2+cWAtsrSp8LEg8l|ES$~J%SAH>R_d1(sklY-Jdu|Z%)d)bIyCA%iJSDk#H})dZF+wy@6_XoyJf6z37d4D#=SaE;{lnKgF5e$BQiI~b>1Z> zblxSWb>1b-GFxYL-X-UC-X#}w-X%Zjyyq_K?j&m9icTv5f9UB{_OoUX4J&uWY2~R7 zwDPnETXV@0W-YW106H=41E3=uB6fxg#GddoF`E7pZvYGurU|paN|r(hCyo@$C}Azc zk!2E$a?@c3Oz_X5H~bs4Ebu4RO1V~*>tU<2UM%%usi(WkF=v+c7}b2w!tCi+4_BQ% z{hpTcv&1a1WQirqk1e%i2@I$eORZSy$S z@#_I20?zma(KybKx0=e_@EP%1boN?w_F8oIT6FeWbnZk?vZM#}6iZLBWVt0EO9HaU z?GDHicb2$o$a)o)x0OWtVWhy#coQ?;*bB-$LB)kNypC*xyAw>7PMt z@vk9X^!F04_^&7WIrjLw8=$?Tg+!1b#AcJMTc}}1~JQ7Lo9H5iRI4q z#A@dr;vLQw;#4Pgpa7?fxYU_JT<>h@z)P^FBeTV17?&|zmPVK%Y>5?noY;jKOt)4e z!Yf=aoS*#yrSQvPM&xn8Fky2km!XUqQ7(4jSfR&cCEM2tn}p3msFEn**zsKU2%|jH zSu_hHW{5+$P8e}7TgEbd4^-nc+Zb(uwn%%@cc~i7-LvfUcvUcu=&(N6R=z!gEl&($ zx)PYxQce?&j$})$)M@R*<%U$|iXzT7CzA85Phe_;m>r{-Nxhj9#o`wB9rU1^Oh?Pu zQKB!nPCJ)P`=R2;sC;V@*Qw8E{+PnVRAxtEZ{e^!wyetJu9S%7*9^8)3}(w$>C1_i z6WJ0qlDVC7(u3~LMJ)Q-nRg6fekh~KFI-7wGhkZjS}IQ}c%FDTWh*hZU_0?|C0ySo zQD*GT6>J%&GwYaFYNj(pD#~=>}gYn>zJp4w2wj#4=bcJ#yGyB1{&VeK)%s zE%nWgnw?&o&GjdxGZ&YxuWhPb#kC(hjcC*~x6rIzXOw+F7QS_AQuGXe#9u2P2 zKL_A2;u7=_m!juC2+Po;Y48L#5gV{c*XUWX$)>@RNDpD~6oS77KKiFsjh-Hd5m#ap zaTR}4hNp2DaWxJL)L;$f5!d2E;xl-FxDN9=Xs{mpb_>#A1NIHp;91;6Y{cE&G}wsA z-8Fa)lYN#k^xy9*cSVoE3zK5{&xTl-3lVS+{ZN0e9PcDfhZ?vW#={*{?o0QcII0u1 zE99RTsnM1FgYreUKK?{(k$2PD?ctlEGIkXm!V&aN)zYqAmoB^39LAB3c!)gUdmOO1 zOrujIm;RD}qyMWrg;X*>TcGmKeR6jXe{IvC_dCD-;cQ>U zDNKo1*83Bcm68Vpc6 OMf)RV7yVoRFZe%Od_ar< delta 12292 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