From 019ab3efe07e463bc4bb0e8f954cf00c916dca10 Mon Sep 17 00:00:00 2001 From: goyuken Date: Wed, 4 Jun 2014 02:03:40 +0000 Subject: [PATCH] bizswan: support rotating the screen at playtime --- .../movie/MnemonicsGenerator.cs | 2 +- BizHawk.Client.Common/movie/MovieMnemonics.cs | 1 + .../Consoles/WonderSwan/BizSwan.cs | 4 +++- .../Consoles/WonderSwan/WonderSwan.cs | 7 +++++-- output/dll/bizswan.dll | Bin 91648 -> 91648 bytes wonderswan/system.cpp | 11 +++++++++-- wonderswan/system.h | 1 + 7 files changed, 20 insertions(+), 6 deletions(-) diff --git a/BizHawk.Client.Common/movie/MnemonicsGenerator.cs b/BizHawk.Client.Common/movie/MnemonicsGenerator.cs index 835e2ce1d5..2ae68342b5 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 bcb24ea9ac..d0d44c77f5 100644 --- a/BizHawk.Client.Common/movie/MovieMnemonics.cs +++ b/BizHawk.Client.Common/movie/MovieMnemonics.cs @@ -211,6 +211,7 @@ namespace BizHawk.Client.Common new Tuple("B", 'B'), new Tuple("A", 'A'), new Tuple("Power", 'P'), + new Tuple("Rotate", 'R'), new Tuple(null, '|'), }; } diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs index c20643ac99..e9fee26375 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs @@ -42,9 +42,10 @@ namespace BizHawk.Emulation.Cores.WonderSwan /// uint32 video output buffer /// int16 sound output buffer /// [In] max hold size of soundbuff [Out] number of samples actually deposited + /// (out) true if the screen is rotated left 90 /// true if lagged [DllImport(dd, CallingConvention = cc)] - public static extern bool bizswan_advance(IntPtr core, Buttons buttons, bool novideo, int[] surface, short[] soundbuff, ref int soundbuffsize); + public static extern bool bizswan_advance(IntPtr core, Buttons buttons, bool novideo, int[] surface, short[] soundbuff, ref int soundbuffsize, ref bool IsRotated); /// /// load rom @@ -170,6 +171,7 @@ namespace BizHawk.Emulation.Cores.WonderSwan Start = 0x0100, A = 0x0200, B = 0x0400, + Rotate = 0x8000, } public enum Language : uint diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index bee8490f59..00267f278f 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -19,7 +19,7 @@ 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" } + BoolButtons = { "Up X", "Down X", "Left X", "Right X", "Up Y", "Down Y", "Left Y", "Right Y", "Start", "B", "A", "Power", "Rotate" } }; public ControllerDefinition ControllerDefinition { get { return WonderSwanController; } } public IController Controller { get; set; } @@ -38,6 +38,7 @@ namespace BizHawk.Emulation.Cores.WonderSwan if (Controller["Start"]) ret |= BizSwan.Buttons.Start; if (Controller["B"]) ret |= BizSwan.Buttons.B; if (Controller["A"]) ret |= BizSwan.Buttons.A; + if (Controller["Rotate"]) ret |= BizSwan.Buttons.Rotate; return ret; } @@ -103,11 +104,13 @@ namespace BizHawk.Emulation.Cores.WonderSwan if (Controller["Power"]) BizSwan.bizswan_reset(Core); + bool rotate = false; int soundbuffsize = sbuff.Length; - IsLagFrame = BizSwan.bizswan_advance(Core, GetButtons(), !render, vbuff, sbuff, ref soundbuffsize); + IsLagFrame = BizSwan.bizswan_advance(Core, GetButtons(), !render, vbuff, sbuff, ref soundbuffsize, ref rotate); if (soundbuffsize == sbuff.Length) throw new Exception(); sbuffcontains = soundbuffsize; + InitVideo(rotate); if (IsLagFrame) LagCount++; diff --git a/output/dll/bizswan.dll b/output/dll/bizswan.dll index a45545bcccef5c1513160d4b3fa4db325e667efd..dcbd9d78425e7ef91734511fed328c7e1e0a805f 100644 GIT binary patch delta 11570 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 aN?Ox2N{q}&)?U_8CYSZf8#S63%>Eyw`!`4c delta 11367 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 (oldbuttons & 0x8000); + oldbuttons = buttons; + memory.WSButtonStatus = rotate ? RotateButtons(buttons) : buttons; memory.Lagged = true; while (!gfx.ExecuteLine(surface, novideo)) @@ -306,6 +310,7 @@ namespace MDFN_IEN_WSWAN SSS(interrupt); NSS(rotate); + NSS(oldbuttons); } void System::SaveRamClearHacky(const SyncSettings &s) @@ -330,9 +335,11 @@ namespace MDFN_IEN_WSWAN s->Reset(); } - EXPORT int bizswan_advance(System *s, uint16 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int *soundbuffsize) + EXPORT int bizswan_advance(System *s, uint16 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int *soundbuffsize, int *IsRotated) { - return s->Advance(buttons, novideo, surface, soundbuff, *soundbuffsize); + int ret = s->Advance(buttons, novideo, surface, soundbuff, *soundbuffsize); + *IsRotated = s->rotate; + return ret; } EXPORT int bizswan_load(System *s, const uint8 *data, int length, const SyncSettings *settings, int *IsRotated) diff --git a/wonderswan/system.h b/wonderswan/system.h index 875d926f53..fb92d91bfe 100644 --- a/wonderswan/system.h +++ b/wonderswan/system.h @@ -57,6 +57,7 @@ public: Interrupt interrupt; bool rotate; // rotate screen and controls left 90 + uint16 oldbuttons; templatevoid SyncState(NewState *ns); };