Skip to content

Commit 10ba45d

Browse files
committed
BSNESv115+: actually provide IBoardInfo properly
1 parent abeaa2a commit 10ba45d

File tree

6 files changed

+52
-85
lines changed

6 files changed

+52
-85
lines changed

Assets/dll/bsnes.wbx.zst

3.37 KB
Binary file not shown.

src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesApi.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public abstract class BsnesCoreImpl
3333
[BizImport(CallingConvention.Cdecl)]
3434
public abstract BsnesApi.SNES_REGION snes_get_region();
3535
[BizImport(CallingConvention.Cdecl)]
36-
public abstract BsnesApi.SNES_MAPPER snes_get_mapper();
36+
public abstract IntPtr snes_get_board();
3737
[BizImport(CallingConvention.Cdecl)]
3838
public abstract IntPtr snes_get_memory_region(int id, out int size, out int wordSize);
3939
[BizImport(CallingConvention.Cdecl)]

src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesApi_Enums.cs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -151,21 +151,6 @@ public enum ENTROPY
151151
High
152152
}
153153

154-
public enum SNES_MAPPER : byte
155-
{
156-
LOROM = 0,
157-
HIROM = 1,
158-
EXLOROM = 2,
159-
EXHIROM = 3,
160-
SUPERFXROM = 4,
161-
SA1ROM = 5,
162-
SPC7110ROM = 6,
163-
BSCLOROM = 7,
164-
BSCHIROM = 8,
165-
BSXROM = 9,
166-
STROM = 10
167-
}
168-
169154
public enum SNES_REGION : uint
170155
{
171156
NTSC = 0,

src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/BsnesCore.cs

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.IO;
3+
using System.Runtime.InteropServices;
34
using BizHawk.Common;
45
using BizHawk.Emulation.Common;
56
using BizHawk.Emulation.Common.Base_Implementations;
@@ -12,7 +13,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.BSNES
1213
{
1314
[PortedCore(CoreNames.Bsnes115, "bsnes team", "v115+", "https://github.com/bsnes-emu/bsnes")]
1415
[ServiceNotApplicable(new[] { typeof(IDriveLight) })]
15-
public partial class BsnesCore : IEmulator, IDebuggable, IVideoProvider, ISaveRam, IStatable, IInputPollable, IRegionable, ISettable<BsnesCore.SnesSettings, BsnesCore.SnesSyncSettings>, IBSNESForGfxDebugger
16+
public partial class BsnesCore : IEmulator, IDebuggable, IVideoProvider, ISaveRam, IStatable, IInputPollable, IRegionable, ISettable<BsnesCore.SnesSettings, BsnesCore.SnesSyncSettings>, IBSNESForGfxDebugger, IBoardInfo
1617
{
1718
[CoreConstructor(VSystemID.Raw.SGB)]
1819
[CoreConstructor(VSystemID.Raw.SNES)]
@@ -85,8 +86,6 @@ public BsnesCore(CoreLoadParameters<SnesSettings, SnesSyncSettings> loadParamete
8586

8687
if (IsSGB)
8788
{
88-
ser.Register<IBoardInfo>(new SGBBoardInfo());
89-
9089
Api.core.snes_load_cartridge_super_gameboy(sgbRomData, loadParameters.Roms[0].RomData,
9190
sgbRomData!.Length, loadParameters.Roms[0].RomData.Length);
9291
}
@@ -95,6 +94,7 @@ public BsnesCore(CoreLoadParameters<SnesSettings, SnesSyncSettings> loadParamete
9594
Api.core.snes_load_cartridge_normal(loadParameters.Roms[0].RomData, loadParameters.Roms[0].RomData.Length);
9695
}
9796

97+
using (Api.EnterExit()) this.BoardName = Marshal.PtrToStringAnsi(Api.core.snes_get_board());
9898
_region = Api.core.snes_get_region();
9999
if (_region == BsnesApi.SNES_REGION.NTSC)
100100
{
@@ -130,11 +130,7 @@ public BsnesCore(CoreLoadParameters<SnesSettings, SnesSyncSettings> loadParamete
130130
private bool _disposed;
131131

132132
public bool IsSGB { get; }
133-
134-
private class SGBBoardInfo : IBoardInfo
135-
{
136-
public string BoardName => "SGB";
137-
}
133+
public string BoardName { get; }
138134

139135
internal BsnesApi Api { get; }
140136

src/BizHawk.Emulation.Cores/Consoles/Nintendo/BSNES/SubBsnesCore.cs

Lines changed: 41 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,12 @@ public SubBsnesCore(CoreLoadParameters<BsnesCore.SnesSettings, BsnesCore.SnesSyn
2626
ser.Register(_bsnesCore.ServiceProvider.GetService<IInputPollable>());
2727
ser.Register(_bsnesCore.ServiceProvider.GetService<IRegionable>());
2828
ser.Register(_bsnesCore.ServiceProvider.GetService<ISettable<BsnesCore.SnesSettings, BsnesCore.SnesSyncSettings>>());
29+
ser.Register(_bsnesCore.ServiceProvider.GetService<IBSNESForGfxDebugger>());
30+
ser.Register(_bsnesCore.ServiceProvider.GetService<IBoardInfo>());
2931
ser.Register(_bsnesCore.ServiceProvider.GetService<ISoundProvider>());
3032
ser.Register(_bsnesCore.ServiceProvider.GetService<IMemoryDomains>());
3133
ser.Register(_bsnesCore.ServiceProvider.GetService<IDisassemblable>());
3234
ser.Register(_bsnesCore.ServiceProvider.GetService<ITraceable>());
33-
ser.Register(_bsnesCore.ServiceProvider.GetService<IBSNESForGfxDebugger>());
34-
if (IsSGB)
35-
{
36-
// board info is only set in SGB mode
37-
ser.Register(_bsnesCore.ServiceProvider.GetService<IBoardInfo>());
38-
}
3935
ServiceProvider = ser;
4036
}
4137

@@ -50,45 +46,45 @@ public SubBsnesCore(CoreLoadParameters<BsnesCore.SnesSettings, BsnesCore.SnesSyn
5046
public bool FrameAdvance(IController controller, bool render, bool renderSound = true)
5147
{
5248
using (_bsnesCore.Api.EnterExit())
53-
{
54-
_bsnesCore.FrameAdvancePre(controller, render, renderSound);
55-
56-
_bsnesCore.IsLagFrame = true;
57-
bool framePassed = false;
58-
59-
bool resetSignal = controller.IsPressed("Reset");
60-
bool powerSignal = controller.IsPressed("Power");
61-
62-
if (resetSignal || powerSignal)
63-
{
64-
int resetInstruction = controller.AxisValue("Reset Instruction");
65-
for (int i = 0; i < resetInstruction; i++)
66-
{
67-
framePassed = _bsnesCore.Api.core.snes_cpu_step();
68-
if (framePassed) break;
69-
}
70-
71-
if (resetSignal)
72-
{
73-
_bsnesCore.Api.core.snes_reset();
74-
}
75-
76-
if (powerSignal)
77-
{
78-
_bsnesCore.Api.core.snes_power();
79-
}
80-
}
81-
else
82-
{
83-
// run the core for one (sub-)frame
84-
bool subFrameRequested = controller.IsPressed("Subframe");
85-
framePassed = _bsnesCore.Api.core.snes_run(subFrameRequested);
86-
}
87-
88-
if (!framePassed) _bsnesCore.IsLagFrame = false;
89-
_bsnesCore.FrameAdvancePost();
90-
91-
return true;
49+
{
50+
_bsnesCore.FrameAdvancePre(controller, render, renderSound);
51+
52+
_bsnesCore.IsLagFrame = true;
53+
bool framePassed = false;
54+
55+
bool resetSignal = controller.IsPressed("Reset");
56+
bool powerSignal = controller.IsPressed("Power");
57+
58+
if (resetSignal || powerSignal)
59+
{
60+
int resetInstruction = controller.AxisValue("Reset Instruction");
61+
for (int i = 0; i < resetInstruction; i++)
62+
{
63+
framePassed = _bsnesCore.Api.core.snes_cpu_step();
64+
if (framePassed) break;
65+
}
66+
67+
if (resetSignal)
68+
{
69+
_bsnesCore.Api.core.snes_reset();
70+
}
71+
72+
if (powerSignal)
73+
{
74+
_bsnesCore.Api.core.snes_power();
75+
}
76+
}
77+
else
78+
{
79+
// run the core for one (sub-)frame
80+
bool subFrameRequested = controller.IsPressed("Subframe");
81+
framePassed = _bsnesCore.Api.core.snes_run(subFrameRequested);
82+
}
83+
84+
if (!framePassed) _bsnesCore.IsLagFrame = false;
85+
_bsnesCore.FrameAdvancePost();
86+
87+
return true;
9288
}
9389
}
9490

waterbox/bsnescore/bsnes/target-bsnescore/bsnescore.cpp

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -312,22 +312,12 @@ EXPORT short* snes_get_audiobuffer_and_size(int& out_size) {
312312
return audioBuffer.data();
313313
}
314314

315-
EXPORT char snes_get_mapper(void) {
316-
string board = program->superFamicom.document["game/board"].text();
317-
string mapper = board.split('-', 1)[0];
318-
if (mapper == "LOROM") return 0;
319-
if (mapper == "HIROM") return 1;
320-
if (mapper == "EXLOROM") return 2;
321-
if (mapper == "EXHIROM") return 3;
322-
if (mapper == "SUPERFXROM") return 4;
323-
if (mapper == "SA1ROM") return 5;
324-
if (mapper == "SPC7110ROM") return 6;
325-
if (mapper == "BSCLOROM") return 7;
326-
if (mapper == "BSCHIROM") return 8;
327-
if (mapper == "BSXROM") return 9;
328-
if (mapper == "STROM") return 10;
329-
330-
return -1;
315+
const char* board;
316+
EXPORT const char* snes_get_board(void)
317+
{
318+
if (!board) board = program->superFamicom.document["game/board"].text().data();
319+
320+
return board;
331321
}
332322

333323
EXPORT void* snes_get_memory_region(int id, int* size, int* word_size)

0 commit comments

Comments
 (0)