From 5bb38cb1c22fa24cfe17f3ed550970f2fd353e7d Mon Sep 17 00:00:00 2001 From: goyuken Date: Wed, 4 Jun 2014 23:26:57 +0000 Subject: [PATCH] wonderswan: rework how controls are handled for rotated situation. all savestates are invalid. you should probably delete the wonderswan portion of your control configuration. --- .../movie/MnemonicsGenerator.cs | 2 +- BizHawk.Client.Common/movie/MovieMnemonics.cs | 33 ++++++--- .../config/ControllerConfig.cs | 6 +- .../Consoles/WonderSwan/BizSwan.cs | 39 +++++++---- .../Consoles/WonderSwan/WonderSwan.cs | 65 ++++++++++++++---- output/defctrl.json | 50 ++++++++------ output/dll/bizswan.dll | Bin 91648 -> 91648 bytes wonderswan/system.cpp | 21 ++---- wonderswan/system.h | 4 +- 9 files changed, 140 insertions(+), 80 deletions(-) diff --git a/BizHawk.Client.Common/movie/MnemonicsGenerator.cs b/BizHawk.Client.Common/movie/MnemonicsGenerator.cs index 2ae68342b5..489aa02c9f 100644 --- a/BizHawk.Client.Common/movie/MnemonicsGenerator.cs +++ b/BizHawk.Client.Common/movie/MnemonicsGenerator.cs @@ -76,7 +76,7 @@ namespace BizHawk.Client.Common case "SAT": return "|.|.............|.............|"; case "WSWAN": - return "|....|....|.....|"; + return "|...........|...........|..|"; } } } diff --git a/BizHawk.Client.Common/movie/MovieMnemonics.cs b/BizHawk.Client.Common/movie/MovieMnemonics.cs index d0d44c77f5..48a2541f92 100644 --- a/BizHawk.Client.Common/movie/MovieMnemonics.cs +++ b/BizHawk.Client.Common/movie/MovieMnemonics.cs @@ -197,19 +197,30 @@ namespace BizHawk.Client.Common public static Tuple[] WSMnemonic = new[] { new Tuple(null, '|'), - new Tuple("Up X", 'U'), - new Tuple("Down X", 'D'), - new Tuple("Left X", 'L'), - new Tuple("Right X", 'R'), + new Tuple("P1 Up X", 'U'), + new Tuple("P1 Down X", 'D'), + new Tuple("P1 Left X", 'L'), + new Tuple("P1 Right X", 'R'), + new Tuple("P1 Up Y", 'U'), + new Tuple("P1 Down Y", 'D'), + new Tuple("P1 Left Y", 'L'), + new Tuple("P1 Right Y", 'R'), + new Tuple("P1 Start", 'S'), + new Tuple("P1 B", 'B'), + new Tuple("P1 A", 'A'), new Tuple(null, '|'), - new Tuple("Up Y", 'U'), - new Tuple("Down Y", 'D'), - new Tuple("Left Y", 'L'), - new Tuple("Right Y", 'R'), + new Tuple("P2 Up X", 'U'), + new Tuple("P2 Down X", 'D'), + new Tuple("P2 Left X", 'L'), + new Tuple("P2 Right X", 'R'), + new Tuple("P2 Up Y", 'U'), + new Tuple("P2 Down Y", 'D'), + new Tuple("P2 Left Y", 'L'), + new Tuple("P2 Right Y", 'R'), + new Tuple("P2 Start", 'S'), + new Tuple("P2 B", 'B'), + new Tuple("P2 A", 'A'), new Tuple(null, '|'), - new Tuple("Start", 'S'), - new Tuple("B", 'B'), - new Tuple("A", 'A'), new Tuple("Power", 'P'), new Tuple("Rotate", 'R'), new Tuple(null, '|'), diff --git a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs index 799c6d7799..68d114af88 100644 --- a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs +++ b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs @@ -129,7 +129,8 @@ namespace BizHawk.Client.EmuHawk { if (buckets[i].Count > 0) { - tt.TabPages.Add("Player " + i); + string tabname = Global.Emulator.SystemId == "WSWAN" ? i == 1 ? "Normal" : "Rotated" : "Player " + i; // hack + tt.TabPages.Add(tabname); tt.TabPages[pageidx].Controls.Add(createpanel(settings, buckets[i], tt.Size)); pageidx++; } @@ -137,7 +138,8 @@ namespace BizHawk.Client.EmuHawk if (buckets[0].Count > 0) { - tt.TabPages.Add(Global.Emulator.SystemId == "C64" ? "Keyboard" : "Console"); + string tabname = Global.Emulator.SystemId == "C64" ? "Keyboard" : "Console"; // hack + tt.TabPages.Add(tabname); tt.TabPages[pageidx].Controls.Add(createpanel(settings, buckets[0], tt.Size)); } } diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs index e9fee26375..7b02df92e8 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs @@ -158,20 +158,33 @@ namespace BizHawk.Emulation.Cores.WonderSwan }; [Flags] - public enum Buttons : ushort + public enum Buttons : uint { - UpX = 0x0001, - RightX = 0x0002, - DownX = 0x0004, - LeftX = 0x0008, - UpY = 0x0010, - RightY = 0x0020, - DownY = 0x0040, - LeftY = 0x0080, - Start = 0x0100, - A = 0x0200, - B = 0x0400, - Rotate = 0x8000, + UpX = 0x00000001, + RightX = 0x00000002, + DownX = 0x00000004, + LeftX = 0x00000008, + UpY = 0x00000010, + RightY = 0x00000020, + DownY = 0x00000040, + LeftY = 0x00000080, + Start = 0x00000100, + A = 0x00000200, + B = 0x00000400, + + R_UpX = 0x00010000, + R_RightX = 0x00020000, + R_DownX = 0x00040000, + R_LeftX = 0x00080000, + R_UpY = 0x00100000, + R_RightY = 0x00200000, + R_DownY = 0x00400000, + R_LeftY = 0x00800000, + R_Start = 0x01000000, + R_A = 0x02000000, + R_B = 0x04000000, + + Rotate = 0x80000000, } public enum Language : uint diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index 0894f7ac55..5b3d403dc2 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -19,7 +19,35 @@ namespace BizHawk.Emulation.Cores.WonderSwan public static readonly ControllerDefinition WonderSwanController = new ControllerDefinition { Name = "WonderSwan Controller", - BoolButtons = { "Up X", "Down X", "Left X", "Right X", "Up Y", "Down Y", "Left Y", "Right Y", "Start", "B", "A", "Power", "Rotate" } + BoolButtons = + { + "P1 Up X", + "P1 Down X", + "P1 Left X", + "P1 Right X", + "P1 Up Y", + "P1 Down Y", + "P1 Left Y", + "P1 Right Y", + "P1 Start", + "P1 B", + "P1 A", + + "P2 Up X", + "P2 Down X", + "P2 Left X", + "P2 Right X", + "P2 Up Y", + "P2 Down Y", + "P2 Left Y", + "P2 Right Y", + "P2 Start", + "P2 B", + "P2 A", + + "Power", + "Rotate" + } }; public ControllerDefinition ControllerDefinition { get { return WonderSwanController; } } public IController Controller { get; set; } @@ -27,17 +55,30 @@ namespace BizHawk.Emulation.Cores.WonderSwan BizSwan.Buttons GetButtons() { BizSwan.Buttons ret = 0; - if (Controller["Up X"]) ret |= BizSwan.Buttons.UpX; - if (Controller["Down X"]) ret |= BizSwan.Buttons.DownX; - if (Controller["Left X"]) ret |= BizSwan.Buttons.LeftX; - if (Controller["Right X"]) ret |= BizSwan.Buttons.RightX; - if (Controller["Up Y"]) ret |= BizSwan.Buttons.UpY; - if (Controller["Down Y"]) ret |= BizSwan.Buttons.DownY; - if (Controller["Left Y"]) ret |= BizSwan.Buttons.LeftY; - if (Controller["Right Y"]) ret |= BizSwan.Buttons.RightY; - if (Controller["Start"]) ret |= BizSwan.Buttons.Start; - if (Controller["B"]) ret |= BizSwan.Buttons.B; - if (Controller["A"]) ret |= BizSwan.Buttons.A; + if (Controller["P1 Up X"]) ret |= BizSwan.Buttons.UpX; + if (Controller["P1 Down X"]) ret |= BizSwan.Buttons.DownX; + if (Controller["P1 Left X"]) ret |= BizSwan.Buttons.LeftX; + if (Controller["P1 Right X"]) ret |= BizSwan.Buttons.RightX; + if (Controller["P1 Up Y"]) ret |= BizSwan.Buttons.UpY; + if (Controller["P1 Down Y"]) ret |= BizSwan.Buttons.DownY; + if (Controller["P1 Left Y"]) ret |= BizSwan.Buttons.LeftY; + if (Controller["P1 Right Y"]) ret |= BizSwan.Buttons.RightY; + if (Controller["P1 Start"]) ret |= BizSwan.Buttons.Start; + if (Controller["P1 B"]) ret |= BizSwan.Buttons.B; + if (Controller["P1 A"]) ret |= BizSwan.Buttons.A; + + if (Controller["P2 Up X"]) ret |= BizSwan.Buttons.R_UpX; + if (Controller["P2 Down X"]) ret |= BizSwan.Buttons.R_DownX; + if (Controller["P2 Left X"]) ret |= BizSwan.Buttons.R_LeftX; + if (Controller["P2 Right X"]) ret |= BizSwan.Buttons.R_RightX; + if (Controller["P2 Up Y"]) ret |= BizSwan.Buttons.R_UpY; + if (Controller["P2 Down Y"]) ret |= BizSwan.Buttons.R_DownY; + if (Controller["P2 Left Y"]) ret |= BizSwan.Buttons.R_LeftY; + if (Controller["P2 Right Y"]) ret |= BizSwan.Buttons.R_RightY; + if (Controller["P2 Start"]) ret |= BizSwan.Buttons.R_Start; + if (Controller["P2 B"]) ret |= BizSwan.Buttons.R_B; + if (Controller["P2 A"]) ret |= BizSwan.Buttons.R_A; + if (Controller["Rotate"]) ret |= BizSwan.Buttons.Rotate; return ret; } diff --git a/output/defctrl.json b/output/defctrl.json index f7ff06bf88..a7fb541d32 100644 --- a/output/defctrl.json +++ b/output/defctrl.json @@ -558,17 +558,30 @@ "Reset": "" }, "WonderSwan Controller": { - "Up X": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "Down X": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "Left X": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "Right X": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "Up Y": "NumberPad8, J1 RotationZ-, X1 RStickUp", - "Down Y": "NumberPad2, J1 RotationZ+, X1 RStickDown", - "Left Y": "NumberPad4, J1 Z-, X1 RStickLeft", - "Right Y": "NumberPad6, J1 Z+, X1 RStickRight", - "Start": "Return, J1 B10, X1 Start", - "B": "Z, J1 B1, X1 X", - "A": "X, J1 B2, X1 A", + "P1 Up X": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down X": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left X": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right X": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Up Y": "NumberPad8, J1 RotationZ-, X1 RStickUp", + "P1 Down Y": "NumberPad2, J1 RotationZ+, X1 RStickDown", + "P1 Left Y": "NumberPad4, J1 Z-, X1 RStickLeft", + "P1 Right Y": "NumberPad6, J1 Z+, X1 RStickRight", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 B": "Z, J1 B1, X1 X", + "P1 A": "X, J1 B2, X1 A", + + "P2 Up X": "", + "P2 Down X": "X, J1 B2, X1 A", + "P2 Left X": "Z, J1 B1, X1 X", + "P2 Right X": "", + "P2 Up Y": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P2 Down Y": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P2 Left Y": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P2 Right Y": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P2 Start": "Return, J1 B10, X1 Start", + "P2 B": "", + "P2 A": "", + "Power": "" } }, @@ -736,17 +749,10 @@ "Power": "" }, "WonderSwan Controller": { - "Up X": "", - "Down X": "", - "Left X": "", - "Right X": "", - "Up Y": "", - "Down Y": "", - "Left Y": "", - "Right Y": "", - "Start": "", - "B": "A, J1 B4, X1 Y", - "A": "S, J1 B3, X1 B", + "P1 B": "A, J1 B4, X1 Y", + "P1 A": "S, J1 B3, X1 B", + "P2 Left X": "A, J1 B4, X1 Y", + "P2 Down X": "S, J1 B3, X1 B", "Power": "" } }, diff --git a/output/dll/bizswan.dll b/output/dll/bizswan.dll index 1da87c81a5ecc0c7504966eeeca06d5c3f5c8739..baf1af5707ddb049ddaa82a8975bc5826062ad1a 100644 GIT binary patch delta 10036 zcmaKy2UrwW_weUjP*(&QVUZ#TC@Mu|`z~8SkywJFMA3*X1#1i@#6+V4V#AeUj=I<* z_7X)5&u!?-A5a1&ave~iPM{sJpe*6b|&iY}7dE^8widk#m3WDy_e4bc2# zSVLJb*0^Y4Gdj1hLICEs2#1=IvKD#<3rn84U2&3b4+d@w$2e{rmwAL^9^4@N@{&8P z#x{ZRILLb*w8cx_J=w{YC1F0l04%^4z5%T#`U-V`<0|eu=ghwI(&0!-un)nmepey9 z#IsExgLhCFunjh1UBE$DRurR1EEWw9C`ysbvNAQ|vFbn&KS)J+~99{}j zboi`!<4|&Pg@GjYx4-{7XUU{qlrzBIA2s2_*keh_;_&HC(zGUj*T@rUjN|&-N0oH! zI>{M!mlP-tHHV0jWMflj7>@5pTcB;p+GsfdhbLpSP=#*YbdZN}bRC50bPd40-E{2g zb$rxK({0;zjtqln=MYzf}HYU-~-BeNUW+Yer-C%r~=JiK0|yACKd@pM_qS z5i4a+Jn`Mw4&Wvx_Ij2qiTxNn=icQwr#Ok{AlCs2)+5&Ec8v%6#C7!S`_KGWtxEdG z*}!|UhrhXMPuV4DR*H zbK=c^$Op7UdGF4ik^jv9%?(p~&+uGj|A&0M8$zF8&vF0E_jN;cpFsbN-$d0Ovc4TM z&H7G=>+qqF2DN zpX135vOcs{WnShuE+dm#;4%zH-E9>z>jEmvC=;$+l6ATyJ4+BwbE>fO9URR#E+so_ zTOUvENY-|`LX!1oyZ1haV^(?E6YFQZwe^6UEN-wTmtgJTYX9xA!;#%|z9>0jcx6_| z6l#-`aNN*g2VJ?Ek~{B?2j=w(ha?9|4v*t_M@Y^(%t%i0okNR>CTN|rj`}bhN^6-g z#&rZO{)y;F_J{uHKP;N@FLC&=V7QAJ!;0Vn%7-uv)f3JtwdI>K~J zrRx#2rIfPVyO=QA?(CddnUBUXo!Q|Zuy;xa_Ua@~O6dR^EFH6-g$gnqaQWD3QLbd% zxKG_79eW&4=5YM&W;yFZ1k+YVzYLni@s-?2;TrAywRn@% zk%F_@b*Y_8HD&XtWTAtQnAvPiDn>hHQ5@C`h{Rskip1uec$xdu}i3 zGkYV0`S^J540DSuRD58tltM(jB(riw9}h0ZTA7kPJlb9>6va#2_nfg-R{Sopm;arv z&8l#+Ryv)tZ^s?;yr2MonAe$EH)DtS?bzte*lT_`GiqjaEO=mf zMV%zOhs0WKt+ZPyM{K;@sVY1EWlkSz(LVW2v7A1Pvfjr(v%_ErhRkmdYV0{bf;HbH zHVxOXV16cZ+JbGYzR(lZ)>v4JepWxQ<6>(&_z?G6gJ2z=wZ`+BjnsYVAU-Egn4i5A zH475>Qycy(GYOY0i1e{FW_HWG;&5&Bq!5QJ z^oJWbdEr2yP8Tlla9;EGfEum;7{`5;?Xsy8@Q%I`N1QWeE^P}j=#M_2Lp7?|qt!T~ zFdB;R8%%+*C|zV^uB)-tDSw=}NDlk)>qSyJmF-@XN&%?jVmWKF3WqF?hC{e)@eB%Q zzDxSHe!7A>%}t>5ir{szA-tf3I-I^_HoS{Ywux{XKe0ssEhXCw7>NM|?ZJpK1#)(4 z8Ak8-hZ{A{g(D@>9^G3$aIv`@^YW4ap0P2PfWP(FAQht5Rdn%u(2m= zwb0i9Y_Y6A3o5{0UimTS0-U2aVzh4vV|^9~ow6){*ILg$`8n!1}9OW9^ zw^jey17Ezq#G+E!Ox3i@uoxN(|pV2`X^K z_6VA6)%ID8pM`yQEN7o)HO|rWECfKAnk!{KlXFd%t7msIr2KFskz-Fe4 zP8N*;yOP=OGsHG%&9Ox@#PQR1wd+0RKLfk%juqmQ4n}nZN zw1eMqSw#et;*pB>fOxAy&SEBs%c1=wG#pg2d#RKPz?_3Bwp@7h7uFFadWs1ao{FkN zO7`?)v4|qZAr&iZNX){sl<3!xps;Ybmk_HD$4S4Q_+~5-_lz8@Jsc|ifC?J-&Danh z>oMygdLeWDVVv~(M^xkO5LaPy76L47&%fgQACweS5By*N+BJWO^YRyjUdLgv+2$YN zz$5KEu1)y6dVRwdbpo@G%z}Q{va++FzRGa+d_3O2-`bYo1D)93@uCN=#qTOR0{LuZ zvD=U18jfakREP_~g%_nbp{g|=ty%~7@Z%r91r>%J?aQu>!SJI&xb$cbn1Pp$#!#FO zt{zM(o?4wQ46@q7+K%JjdmNuiFZt!idwC>|{72gqMSl%%;Z4~o1@5KgnJ;injW>?|m6zOU zs9jZ({%aG)&I}V*KZSymu@H~^sR8WIWKm_;@QYLZ*y3byWhbJ`X)PGA+i9~9Zcq1R zIYUWGiq}r}rfRY?Vstn&mYlizOd`EI1fG>M*LQKi*|*8dSD!V&Ogw*f2n!v8vIl<5 zbqEeP*Gq_H=RP2-z~g!WP%kFp&1; z7Y+MzQkk$Xm%MkeCrFFm`HzD&9spM3f!|cpaSa6&1716B5;nbLV1`8T{OFyCqc4TC z+XEU7d6gx5E}aGGPyPSZ+;_P4vdlS~3b54{Kg|ElPulhO^pbqh-~oe6LT*L^3+sskZygf0+uPke zxSs!56SP_1?nqyA7T-2YPBhfpRdW8e4+!rYcUI83b>ZDM&b6^*mxSstVOPJ~Q8*0T zYu7fa$N%=KfF2lgFOHpz6{CGAZlFYJtmv$fv7)v6 zRxEzlkzR$*K5PSH@ae-LtYwV2QXb*>N1cUNjz@CZ6pqq!3O;`n3MLGCtYV=S>{QW? zIa_e*wqg*qx7L@r)M$Mqn3OX%-(u(7{9y!SZHKa?bdFEOt}yQ>hyb6macEiIVv zq#biHW7?B=dU-zh#K?x5#jS*9@w5+nV#4!xJHStv|Fm7e7SsP$Xf7Ums%3*rG<+YY zV|G2ZfA$u8WE7Q0(f*l=tu~77X5xisBUz9U&CkcMJqAI56&P^-GbMZ9AWHN=pZY%V z2Yyhm7UDy_P9p0nh72Ch)h9z7YX6uD)mZ$;Zsw)Kv43VkKHmLPE_m+?bC5$zlYPAl zH3oxQlu5I9s&9;`i(c@O1r3c(z-=#v27IQWTB4<_xx(9N#cfGqbY_KkN}#vFmzM&j zsQInZ9B`L2bhIt17k8< zvJ(u1t+rw(F!B>4h30A-?H?q!{pAGe&@eIgjP=*X{IfD)S-UpOH75}oXL`^!)EP8h z)m_Cl=Eu1@UBi%LI`z>m%>vZGi@5-SrOS!R3N z4H99$?Q1t^D_PNyIkNPK8%%a)LBSL|eQik|5YWjUL<2fTo||=9M<-W4>kpm#+&vkB zd9pdV*j63Y7Q^$}((gQAKfpEH7gFfP3fqb&0#bt%0(8j@!bZALtY}MtBBbJqv(rK0 zIGocH1n;x=Y5TVUUhkDUTL&)~2X{;Jz2FA0Yi-1^zQeZN8|JXkHa3k9#IS3AVo$ZU z93SwN>}}|&z_#57M!?6mmcEb<_ieep&>pI7#lFy+jr47d60tU4Kl+I!%m>eu2eYO= z!a>=V>jzSH&bz@k_Sh=@AdLmn```nqL|h~GCO)K(fU);j+o3?WN#BCgZgP8OU$8ROvw{v_MQL}@-xE67I&Q30!Z(2;BVTr>;XbH!! zA|~wOc<0?5znXYVe7=X{e;`6jX<)?My&V6FIR7oj_xg_GZxOmO`jktw+Q;#ih|l+P zyvG5KPa$p*y6-uD0TEHo@sEhFD>y#&U^+E&kmJ8N#PLT6JJI4W$M+;=69)+gVf=yP zrx1IHABhXZeS#g~crPN9Fc5u-Z-`5Tw2}r#u?pyVL37dz9n9 zBrXz`YL5T;Cyo!PZBVJ8);9_Hg;Yy?f1KmJf8}^ML24xehzKHz$RySfWyEg;oaFen zL^6>@Y#@Fld`@wE`e?e;5@Dw~ekO67=yHzZM_wem{l@W{%N$=pOu54Gir-14S2=zf z!LE@yiTLXre~n1IL0YquCf9Mi>?ZjM@d<&%F5)EdjPSn2@k(MaQFxo||Ltx1CQ6(n z9^B!0(_N1LmiX`^7yv7NX@ zbbrM0D~N1*{()#q&!0ac``6M#*kfvtI8Ugakdr+l!9O@&|0i`otbRcb^O98ficIwv z*_Z>K4pDpn1O5bYk5D@SKZNjd2A+Z^f2uj~Ygzz5)eZPV#28j;ru`0GTb2k>P?E#ct_yn(1}^qJ}Oe94E(1Asq9+$K5% z0l&T-@cW6Ag!&d;9E7wz@L|LiV(l5S72!knm!IYMG{QjaAZ`(!wm$;F5^Orp@e7Hw zMCb+bEux5cLWyOR{sC34GDtipi3OTh1f|rh!J(WJ<{EKK-PopI!5~m5jKVFM`Lze5< zgsevFBTf_Vk|oCxjjg0N1HPpM_|C*6VlL5&4Bee*6v=P_zL>a4gpvJw5msUu(I}GY z3Vc3MO*|x| z;0F_Hh^s^=vj3MvHNgRMvIU2LvTaM}CQX~QY$<8((!$j(&=>efB8uovOt(!6p`Mn~ z<7Fbm5BSlVO zi-f1GO9!%275S$;82HbKtwas+fQTU%Z4}82A*B)O4#009_ICvSH)0@tCKr{bwE1)d zFF0)LN>U=kxL*^Kr|&*5{1M@q6M*y*h%am%4}hsUT1lPu&1I1gZs|w8EaiuAp z58erpY;_NcyKOV{}yb87E8^*b&UaTcnmBI_Ohk+0-vyz zQ4I}_rTcV(J`~aqC>&SQco))7^c3H0J9|MOOtt+Y+%&d_y`YU-wTTo?kc=b9=Gz-0 zAfdEJZ#d@6c5Jn^?g#C1gi>Z_nlskWKUN7qi*Q`b+oQ}?6px~@}H@2FP#_;md`{U-f3eUW~bey@I? zzFgnYpfv0@mKjeN?;BlA?M<7?qS>ZVFija7ZF%2%yYZBrdmomSmey;OOsJE_&`zUpN4XX-5VLiHx~K6S17 zvbtXFs`1mvHCzVA>1YsF%{R^W%#Y1ZmgW}T;%zZlqAfivy)B8BA(oMr(H5&E-?G@U z%(B+9*-~UFwQ%`l1gcjlKa_5EnCYpO<9z5=pj)j|7@`brW~uotOJ56D$8q$w$N6ZR z>v-K-!)5~|9yCi7Lq+JF@_q)7$+E0jcLX&jMI!6##zRB#wuftv6ifM#(2S4 zXS`~(8$(TboC8nZ94AxB4Ow}ycY}V}2lxZ$&ZfRa@j_0)yvB6V8b2wjS9ye?Juxo(zjv94J6z3#LwJSr(_b=2voi&4Kv z-Hf^)^)%{bl#|{?-%9VJ57c+mch#qB^k#i;eWHG_ez<;&ev*Egex5!@zfxaFYj?Z; zu)bP?{Jg^&4V`q&Q32cNwiTV2`1+g!t^uAsE}A$Zt|-AtHK*+Y1H z@B_@NbmCet{{lm7FOuItWOtLi0(-$z`|_~Hp2NT*NFz%it%*CCZkpFbO`5!J(@+)( zXYCc_6j(bLh!*l3LP@>ppo5B%Qqvo!`&Pm`0fZUJP=*=J%s9bN7beMk##G&Glnq%0 zNzLbxc(~iVGqrIxweh$}$RYUP>EpiIldD4*ru4aW&g|-Xi=|(JIUCx0Js<;2t}Xm1 znFUgxZR9#s`IM2eyWz}+^ImK&Nh z4kc$HH;~?mX84q|EUgRX^fJ$Y@X*0DsEKK5=yWULdYgZ0K7A%-6H(%;OdK4m%YjdO9#Y|P&Ed3G~i6wA!3V083NG6gbYgmj5B z42Wro>gN*4&ZcEC6SyWh_DV3EFuXNia{`aJR<7w^=Kt(uN{lm-=2xD6 zULmJgnv`&a z*w4M+kZf`v)V(IsCihG`dIb~m2VChr2{t9?n_l%!v4-gWVI&>K_dk(wBh_G7nB&SM z8OmBRnGAD;yQBu4OI4RT8%so43$QHnAa`X_vw@RzE-stg!Emx=4Z|=wGRAPCw9eY$ zMAkiLt5b#-r5~*wUhqX(kDMJ&%(%~37{;NjrNxe`pS7)_%NaxoN^k$DtT2bZ~xR}Y%a12*@T#oqsSTLDwGcS2GtfaG*mcnzr~U> zmmg_GY&|zB^JddGLlX#@40}@+hCUg~u=HDo^+A+KB67CzFKJ{Rs?p-MAc3$W^I+Vt z&KOaOF*=68qhS*@SKe4GoMc}^wISBq(8I&fmrXK!C+KIGE=)-5W$5c@IAP9sYq2=* zUC7zR(AR&c^WKtd`yqqNO-sINZAEJ~!I5tUkUrp<+6tF&1YVcHh}2>l{}=d=Fk90Z z6$`;}WLvuAIC!PDq`zH-$kdj^7UqsTOw8anq7{r8b%qx+sYXw7COzTTDSo5_oSU)^ zWBJ6XL+!)%SuCl`Q?25>VA|9qat0*RhT4xQ{*bTP?*^yz+ND6F2IOV96yjOo5)2gIl6Qa?UHEhey} zFQns5d=ZW_BbOfC#V2rY$jqhAe1bmT3C=SX(xE%~B0U_LkxO?JVZsl_&HP@TFdNOB ziI*cqcsYGIE0{d)8ex5bzX{mc;F%TJj+uuwQ}A-61TP2t zvl-T4!77>9L`bKXDc3t6RBh6<}&=5)xI=SD`t z(s^y^z(RPP9Y__0;5k2(Iusg*dXhl;crz%nlhxm1FX(fnRf6nTf#Hmy!aR`cmutMl z>ST70`kZdqqB-t!v7Bxcv!rl3yA5drwb?<$20Z46(VLt2rpX={Ie!MdTnJC+dlC<@ zF~rbG4T*j5jUkZ8VV=Psmsg>o2Wz_t`!7ynb8@)}n&*P;f&_Ns#{bF;fz$;ZJVrET zM$Ncy!BEs#;ocV5zMzYbEngV#g`-YzE{^jqt+KW%Z4|Kw*PMyXf7tMkwz1s9>ZGBZ zQ~5B+&+#N9U~f(!iGiCr1IbB{FKk8Dz@UXjmnQ2Q>on^5-8!(zRpU7!GS`i4gnqdz zNLzT3+mo$a!wopj+qswibRvW&OXJ;-=VPA>6Yy}ud0k8} z%juv9dMukwLgDhVapWLG8N)~}j5DU=QR0~~h&V#CZla_;}D2B9y3oA#^OI$f^tr|_=ECWG)FO2O2^TWvZFgJe~ zk-?MvQ2JykKbTFB^z&$#}+#OoK+jtfyz2shVvq<`k{onFm> zHXG((tS{Oynci3ctu}_@wwAatm3#yHHnyQH7I2-?zYRb(#nQb7oV*95Y!Y$9+!RJ5 z43M@W+4a%=2-OEi<=Yat!#dj5ryG&PBuTvG+0n5CKyr+d()@$ z`1#_%w~QgZVat|$x_2(8X}igDxwcCnb8Qe*oOOlcTZ1_7+S-#Io5MGQVSQUa+HVe2 zuk(iTZSCzH=5RGmK8bk?1wZ@Kd$T`Hdhu+&#&pQsK80Ap`|W9D5sdvc3@5w%*IBeG z3w(F1qS0B6vvh|0I|3Zv&Ey9lEq`*)%s2SkOm5OHllc74ob4-ERrD3L%;4Q?Kg8@z zq$6fDPTC1dcDA9eGkB$c%v`)n#F=DQZ~9{xq{1+-TN?_(@HGYz7q zbiN60$qi5EhmV`p?yqR|ba2@d!-a)CBdBirr#U|ViSOgqPcUP<0tW7tl5vo`cO11$ z1Iyk}dU+az6=#rMrme+iDAxYrKoFS;s}870C%AS%Ox!?lP)4i12i-v_*$NX6#*kDf zJ}4t%s6Hrjs{f8tMpBC>i61Q%I9KXJc7gL@AADUJbtsx9d=Du#-b4atF!9%S5K-ns zzJvCMqsRhCLn$1|;i#Z6u8rb&AzJkS_u`Z4yrV2NJ0{rC>U>TXAC{Xy?cpeTVlwaW zo1yQKXgYi{-!z6dOi;drK9~evM-y-aV~z&lYf0|WFm9pYvkva!vkN$s1ku0JKvWV+ z%3xqg5LpcwB_X(;Ho;lU^9`|)61E~UrE^Kuw4%4Kw7 zL!u89V#2Q>fl;Bn3m2-7#R(^j`#hBJTgG50IM!My!vfS7w{OM-dl=3e%FO{#d2F*;J6fn>cZn{g1hGNIJfGt|7!N;SZH}7&}9!-!dI_r*rC=# z{}Z!_AKW?7mQ!FwD6JR+N1wYJ{XIwsoi~Q}z)3K_q7^}(t=Q$XVsyjF437$N!7%K$ z5Hu&S8GZNmP@`q8UWAVtk<8&m(`4^{?QORA;WN?E#qo=P@ zA@iaPkJb@qThk?}aQ9+}bNUHx+S&DCxJd=)+%OfK-Ac$#=zgw~%c$X8(Pzsq88(~? z<-+>85Ii8%ol^-0wdJcRL3JKTPt&>cMFdab85iZW^Du}!8^TTVVh6#Y2C?Pfc4;d4 z7V<82aS2NKqH&C(mqHyL59Q|STwF5a1Eig84vNdHz`GsaNu8THSKdi4zq#=E|9j>WEU)+~JH0;a$4s!dlNpib05zg%M z9|vnZ0E~x)cVt3ULjgvCPmUV`*Y2pPLvQ~4__!A+?uOEXy&4XAM$??TH;M4)#D6t6 zA12)sS@*{RxL4=}DR;bt0soe23eWGM1`{Cgemk-q67DO6-zEI3E!6h?{%(SQ7rgEX zP5zM6JMj?lM=s}Ne_v3 zelsjE?x`wD&OdD=jf7XgS3_J_;Z4&#x-RfBkH2W)#ZiwLn z{#^JT6A>|-vl0tfp0~hH5-nQP>=l-C!v3z z#G|@Dz9A%9l{I!Z6pp-#^RCmO|KUfQPjTImi{Lqq&CPdo;9na^Z)qW>wgJ+RI27B+`#;{8-Dwg)ycWoP^T26G}t@> zw$u$G?qK(BDt_ji`ECz=sDO^|vq%aYelO-6_r1>lyaMO?<(t3(%*4rC)is9G;U8GR zp@v5D;inG+ePYA07H=oRLhjA9^r@hC#Eeq@jDT-~AMW~ek^gUrc2HBlgG`5lzgys` z{?Ok_2LVdso{{}ium`YbJCJkG;iFdI(Sh^brFEvsAG;C!uvlV=c6}$|B{_pMyh)fP zOWjGVU~+?OpFLlbdxY#W#!}LQj5a=}#NAj(Ni1o~J*(-Z4#u`tq%WCfoM}ZgtgZvs z+=WK-*NBYgtcbkzyY^h}4a4Qe{6Z18x*Z$ln$w#!&UCRc%$kI|t>UFG%#U+y6!(%^ zEJm?45rri+G=xQ;+PaJrXlQ7DoYQ~WI%K@awe`9kmNsttjZyi2JEOM^38$yqHU!*_ z#vg2mO4#k+l1k%o8xrkS+xA~=+-qy}u_YaZMGZxt$M&C%DYisU1{(`(NwmjJZ1q1g z?f1`2%ZwjvNtksi>Vcb>t5Iu5ge}yV{LfTA2?sYy1w++h2RbawXmKQNO^)#f$|>q# z^l>7+=<`rxniFw%UTe+0gJye+_%KyfEEAAZ*3{CHuOyhsbhOxpI14VG@eQT>S?lhd!nQ-oBZsGfn zoFgzjmU>xj0JO$>4o=zIm zJ;+d^H{S6e8RV#Oh$jgmtBf-}NmnZJY={y<;}cK(E#_Tw*jy4ouQlh6$;KgGL`b(Z zZ}5#dMxz&*OkXs|I3X19Ys7rDxv@+AHZiQnW`-S$)F7c)w`C#2UP7Fy_mLauBvWa2OA^E!*R&m%#5 z@k1^08c8n3fg#2F7`EMhhIKf=uu~APgA6+oIfFzVVp!+HSOSDSt5nVBjg?8c!FX55D5~CBqL*x zbmTVTT*0t0$Q0xV@(O8vl3@oUN0ES244Z{K%)m>R(+s;6aXQ1WId;4Jzf- z`Z;|rqH2-nml(FwWrh`BLA4@1kb%f3WG8YFd5Sc>iZVz%vH&q5*N}He=W7g`VZ;k_ zoniYUyO0()aFn+gHt#mt?GD4H-ecGoNa1~k{pt@?=>vw{hDaWwI+5v*7}o7E&Ib9> zjGA1}uqjW_Pmr}pIr0Fp`IBK=A)Sz~k$K3ar)d8tPZ{nT^~*yk0WwB;+izAJeaqczoXU z67A2t!r3Fc5QkcZ9ge(zgM#lEcJzDf06G5w9i|>t_&1vBBifiDY-d8)9+a@wR)qCM zzCp5)SZl&Ec7(OHC+tNB!ftUQ>?@>AQ^Lj|3qB{~^F-tGdb~5vgw-H(kn@O;CG13` z7;$Sx*rSNM3t@L6PZ7qIuu;euuBsd|h4RmZRjBpF$a*u7)eu1KTEZM0mH4O$JU zM(k_}J0DqzG>Ys%!|DWt9fYhwijl}Bgq?&miWH&U?<1aQ`~JujDN5q2(e5fQo*wjXjHiEU2U zdB{aX=z;mjR^$W15Nc(75k#cEO|5Ng?V2_fG_iMZbn1yNf}j4`QOG1@yD>5tdpd=W z&AbTP2f8=&0fgOv{EpNk{^+Y|NTbM3^w5BoxZaR!2)?YaP4VmaY=l>y)M#!= z+(@nQV@q;EE|w5>KXL>qM@}N)$ZyCcBK}j%NZciDB~g-O$vDX@$x2C)&K=P~PpyZZQrjRB47ZN4ip4BrTU-lRlQ#OEXxRk4!2X zESo6Hl&z3$l9kBL$tq>9a274(ZROGOe)4bR>GB2g4RVvbRDMHVEoZ`;g|`mZgm(=e z7LFsxWEdshgnCcCuRcgG)pyiK=sW4h=qKpE(@)iB>9h5DdZYfJzC?dqe_DT8e^Xzj zf2?Qn&~OZs!Mqi}(sj^d3l|v118*ml=apZnN2#^C7~K#0bUjmrjbnaiMMq_X^0NA- z8WS~qWyV_`B)_bkLZ>5MwYAOH7<+B3{EQLSjBY`d&DVK8}5GR~?msIRDRs4LY~>IZ7Gx>{YMu2t8m zl^TsELKCCutm&>v(DczHYnE&BH3gdWn$4PRnj+0^%|1DHcz_*t(dPZ(5}}$(3-W?+8VTIowi=f=pt~wops$abP2jXx@6rT zUB0eBw_dkdw@p{1+pXKDtJBr%7`?S#pm)@>dZE6LK3P9VpQ0bGAE_UU+Ah-X*6-6F zLOoaMALz~cYJH8qR$r&D*E1r*oWxHWjL2Ff5IKrikx=9zN)ZhgjTDU)O%UaYmWY;% z@pavlf%=)v%=?vuMXc5ekS~8_@nTr;ms6Y ziZDgAB3Ut5@wH-_B2%$Ik*`>*C{&avPM{0CRM;z7Wsovj*+)54IYOD6pJqNfJE~gM2bHz@D|Na0BKpUD^=q}g#!VBZiPrSc%-7_i z7wpmesGY9O)o#}gDAiVI+v{XH6`D2?7j2quq3(BGmF}(1OCN&kM6Hk3_tgKW&(tr_ xFV-*Duhy^EZ$T^WMH{}+GZ780OVMI3qV}RAqL-o$VwpHaoF^`>9!7-L{|^*${Z0S? diff --git a/wonderswan/system.cpp b/wonderswan/system.cpp index 5b46cae4ec..18af564154 100644 --- a/wonderswan/system.cpp +++ b/wonderswan/system.cpp @@ -64,27 +64,14 @@ namespace MDFN_IEN_WSWAN cpu.set_reg(NEC_SS,0); cpu.set_reg(NEC_SP,0x2000); } - - static uint16 RotateButtons(uint16 input) - { - int groupx = input & 0xf; - groupx <<= 1; - groupx |= groupx >> 4; - groupx &= 0x0f; - int groupy = input & 0xf0; - groupy <<= 1; - groupy |= groupy >> 4; - groupy &= 0xf0; - return input & 0xff00 | groupx | groupy; - } - bool System::Advance(uint16 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int &soundbuffsize) + bool System::Advance(uint32 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int &soundbuffsize) { // we hijack the top bit of the buttons input and use it as a positive edge sensitive toggle to the rotate input - rotate ^= (buttons & 0x8000) > (oldbuttons & 0x8000); + rotate ^= (buttons & 0x80000000) > (oldbuttons & 0x80000000); oldbuttons = buttons; - memory.WSButtonStatus = rotate ? RotateButtons(buttons) : buttons; + memory.WSButtonStatus = rotate ? buttons >> 16 : buttons; memory.WSButtonStatus &= 0x7ff; // mask out "rotate" bit and other unused bits memory.Lagged = true; while (!gfx.ExecuteLine(surface, novideo)) @@ -336,7 +323,7 @@ namespace MDFN_IEN_WSWAN s->Reset(); } - EXPORT int bizswan_advance(System *s, uint16 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int *soundbuffsize, int *IsRotated) + EXPORT int bizswan_advance(System *s, uint32 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int *soundbuffsize, int *IsRotated) { int ret = s->Advance(buttons, novideo, surface, soundbuff, *soundbuffsize); *IsRotated = s->rotate; diff --git a/wonderswan/system.h b/wonderswan/system.h index fb92d91bfe..beeffe27ff 100644 --- a/wonderswan/system.h +++ b/wonderswan/system.h @@ -33,7 +33,7 @@ public: static void* operator new(std::size_t size); void Reset(); - bool Advance(uint16 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int &soundbuffsize); + bool Advance(uint32 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int &soundbuffsize); bool Load(const uint8 *data, int length, const SyncSettings &s); void PutSettings(const Settings &s); @@ -57,7 +57,7 @@ public: Interrupt interrupt; bool rotate; // rotate screen and controls left 90 - uint16 oldbuttons; + uint32 oldbuttons; templatevoid SyncState(NewState *ns); };