Fixes disassembler for SMS

This commit is contained in:
Tastyfish 2017-11-22 22:48:59 -05:00
parent 5eae2d2a9a
commit d0bdfd3d68
10 changed files with 54 additions and 32 deletions

View File

@ -393,7 +393,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0x100 "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0x100
}; };
public string Disassemble(ushort addr, Func<ushort, byte> read, out ushort size) public string Disassemble(ushort addr, Func<ushort, byte> read, out int size)
{ {
ushort start_addr = addr; ushort start_addr = addr;
ushort extra_inc = 0; ushort extra_inc = 0;
@ -434,7 +434,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
addr += extra_inc; addr += extra_inc;
size = (ushort)(addr - start_addr); size = addr - start_addr;
return temp; return temp;
} }
@ -458,10 +458,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
public string Disassemble(MemoryDomain m, uint addr, out int length) public string Disassemble(MemoryDomain m, uint addr, out int length)
{ {
int loc = (int)addr; string ret = Disassemble((ushort)addr, a => m.PeekByte(a), out length);
ushort unused = 0;
string ret = Disassemble((ushort) addr, a => m.PeekByte(a), out unused);
length = loc - (int)addr;
return ret; return ret;
} }

View File

@ -609,7 +609,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A
public TraceInfo State(bool disassemble = true) public TraceInfo State(bool disassemble = true)
{ {
ushort bytes_read = 0; int bytes_read = 0;
string disasm = disassemble ? Disassemble(RegPC, ReadMemory, out bytes_read) : "---"; string disasm = disassemble ? Disassemble(RegPC, ReadMemory, out bytes_read) : "---";
string byte_code = null; string byte_code = null;

View File

@ -40,8 +40,8 @@
void InitCodeMastersMapper() void InitCodeMastersMapper()
{ {
ReadMemory = ReadMemoryCM; ReadMemoryMapper = ReadMemoryCM;
WriteMemory = WriteMemoryCM; WriteMemoryMapper = WriteMemoryCM;
MapMemory = MapMemoryCM; MapMemory = MapMemoryCM;
WriteMemoryCM(0x0000, 0); WriteMemoryCM(0x0000, 0);
WriteMemoryCM(0x4000, 1); WriteMemoryCM(0x4000, 1);
@ -113,8 +113,8 @@
void InitCodeMastersMapperRam() void InitCodeMastersMapperRam()
{ {
ReadMemory = ReadMemoryCMRam; ReadMemoryMapper = ReadMemoryCMRam;
WriteMemory = WriteMemoryCMRam; WriteMemoryMapper = WriteMemoryCMRam;
MapMemory = MapMemoryCMRam; MapMemory = MapMemoryCMRam;
WriteMemoryCM(0x0000, 0); WriteMemoryCM(0x0000, 0);
WriteMemoryCM(0x4000, 1); WriteMemoryCM(0x4000, 1);

View File

@ -122,8 +122,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
void InitEEPROMMapper() void InitEEPROMMapper()
{ {
ReadMemory = ReadMemoryEEPROM; ReadMemoryMapper = ReadMemoryEEPROM;
WriteMemory = WriteMemoryEEPROM; WriteMemoryMapper = WriteMemoryEEPROM;
MapMemory = MapMemoryEEPROM; MapMemory = MapMemoryEEPROM;
WriteMemoryEEPROM(0xFFFC, 0); WriteMemoryEEPROM(0xFFFC, 0);
WriteMemoryEEPROM(0xFFFD, 0); WriteMemoryEEPROM(0xFFFD, 0);

View File

@ -38,8 +38,8 @@
{ {
ExtRam = new byte[size]; ExtRam = new byte[size];
ExtRamMask = size - 1; ExtRamMask = size - 1;
ReadMemory = ReadMemoryExt; ReadMemoryMapper = ReadMemoryExt;
WriteMemory = WriteMemoryExt; WriteMemoryMapper = WriteMemoryExt;
MapMemory = MapMemoryExt; MapMemory = MapMemoryExt;
} }
} }

View File

@ -30,8 +30,8 @@
void InitKoreaMapper() void InitKoreaMapper()
{ {
ReadMemory = ReadMemoryKR; ReadMemoryMapper = ReadMemoryKR;
WriteMemory = WriteMemoryKR; WriteMemoryMapper = WriteMemoryKR;
MapMemory = MapMemoryKR; MapMemory = MapMemoryKR;
RomBank0 = 0; RomBank0 = 0;
RomBank1 = 1; RomBank1 = 1;
@ -101,9 +101,9 @@
void InitMSXMapper() void InitMSXMapper()
{ {
ReadMemory = ReadMemoryMSX; ReadMemoryMapper = ReadMemoryMSX;
WriteMemory = WriteMemoryMSX; WriteMemoryMapper = WriteMemoryMSX;
ReadMemory = ReadMemoryMSX; ReadMemoryMapper = ReadMemoryMSX;
RomBank0 = 0; RomBank0 = 0;
RomBank1 = 0; RomBank1 = 0;
RomBank2 = 0; RomBank2 = 0;
@ -113,7 +113,7 @@
void InitNemesisMapper() void InitNemesisMapper()
{ {
InitMSXMapper(); InitMSXMapper();
ReadMemory = ReadMemoryNemesis; ReadMemoryMapper = ReadMemoryNemesis;
MapMemory = MapMemoryNemesis; MapMemory = MapMemoryNemesis;
} }
} }

View File

@ -132,8 +132,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
void InitSegaMapper() void InitSegaMapper()
{ {
ReadMemory = ReadMemorySega; ReadMemoryMapper = ReadMemorySega;
WriteMemory = WriteMemorySega; WriteMemoryMapper = WriteMemorySega;
MapMemory = MapMemorySega; MapMemory = MapMemorySega;
WriteMemorySega(0xFFFC, 0); WriteMemorySega(0xFFFC, 0);
WriteMemorySega(0xFFFD, 0); WriteMemorySega(0xFFFD, 0);
@ -176,8 +176,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
void InitBiosMapper() void InitBiosMapper()
{ {
ReadMemory = ReadMemoryBIOS; ReadMemoryMapper = ReadMemoryBIOS;
WriteMemory = WriteMemoryBIOS; WriteMemoryMapper = WriteMemoryBIOS;
WriteMemorySega(0xFFFC, 0); WriteMemorySega(0xFFFC, 0);
WriteMemorySega(0xFFFD, 0); WriteMemorySega(0xFFFD, 0);
WriteMemorySega(0xFFFE, 1); WriteMemorySega(0xFFFE, 1);

View File

@ -13,7 +13,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
{ {
Cpu.ReadMemory = ReadMemory; Cpu.ReadMemory = ReadMemory;
Cpu.WriteMemory = WriteMemory; Cpu.WriteMemory = WriteMemory;
Cpu.FetchMemory = FetchMemory_StubThunk; Cpu.FetchMemory = FetchMemory;
} }
else else
{ {

View File

@ -78,10 +78,11 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
{ {
ReadHardware = ReadPort, ReadHardware = ReadPort,
WriteHardware = WritePort, WriteHardware = WritePort,
FetchMemory = ReadMemory, FetchMemory = FetchMemory,
ReadMemory = ReadMemory, ReadMemory = ReadMemory,
WriteMemory = WriteMemory, WriteMemory = WriteMemory,
MemoryCallbacks = MemoryCallbacks MemoryCallbacks = MemoryCallbacks,
OnExecFetch = OnExecMemory
}; };
Vdp = new VDP(this, Cpu, IsGameGear ? VdpMode.GameGear : VdpMode.SMS, Region); Vdp = new VDP(this, Cpu, IsGameGear ? VdpMode.GameGear : VdpMode.SMS, Region);
@ -249,15 +250,39 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem
return DisplayType.NTSC; return DisplayType.NTSC;
} }
private byte ReadMemory(ushort addr)
{
MemoryCallbacks.CallReads(addr, "System Bus");
return ReadMemoryMapper(addr);
}
private void WriteMemory(ushort addr, byte value)
{
WriteMemoryMapper(addr, value);
MemoryCallbacks.CallWrites(addr, "System Bus");
}
private byte FetchMemory(ushort addr)
{
return ReadMemoryMapper(addr);
}
private void OnExecMemory(ushort addr)
{
MemoryCallbacks.CallExecutes(addr, "System Bus");
}
/// <summary> /// <summary>
/// The ReadMemory callback for the mapper /// The ReadMemory callback for the mapper
/// </summary> /// </summary>
private Func<ushort, byte> ReadMemory; private Func<ushort, byte> ReadMemoryMapper;
/// <summary> /// <summary>
/// The WriteMemory callback for the wrapper /// The WriteMemory callback for the wrapper
/// </summary> /// </summary>
private Action<ushort, byte> WriteMemory; private Action<ushort, byte> WriteMemoryMapper;
/// <summary> /// <summary>
/// A dummy FetchMemory that simply reads the memory /// A dummy FetchMemory that simply reads the memory

View File

@ -46,8 +46,8 @@
void InitTerebiOekaki() void InitTerebiOekaki()
{ {
ReadMemory = ReadMemoryTO; ReadMemoryMapper = ReadMemoryTO;
WriteMemory = WriteMemoryTO; WriteMemoryMapper = WriteMemoryTO;
} }
} }
} }