GBHawk: MBC3 state
This commit is contained in:
parent
cbd217d479
commit
68e32e93e4
|
@ -10,7 +10,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
||||||
public int ROM_bank;
|
public int ROM_bank;
|
||||||
public int RAM_bank;
|
public int RAM_bank;
|
||||||
public bool RAM_enable;
|
public bool RAM_enable;
|
||||||
public bool sel_mode;
|
|
||||||
public int ROM_mask;
|
public int ROM_mask;
|
||||||
public int RAM_mask;
|
public int RAM_mask;
|
||||||
public byte[] RTC_regs = new byte[5];
|
public byte[] RTC_regs = new byte[5];
|
||||||
|
@ -18,13 +17,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
||||||
public bool RTC_regs_latch_wr;
|
public bool RTC_regs_latch_wr;
|
||||||
public int RTC_timer;
|
public int RTC_timer;
|
||||||
public int RTC_low_clock;
|
public int RTC_low_clock;
|
||||||
|
public bool halt;
|
||||||
|
|
||||||
public override void Initialize()
|
public override void Initialize()
|
||||||
{
|
{
|
||||||
ROM_bank = 1;
|
ROM_bank = 1;
|
||||||
RAM_bank = 0;
|
RAM_bank = 0;
|
||||||
RAM_enable = false;
|
RAM_enable = false;
|
||||||
sel_mode = false;
|
|
||||||
ROM_mask = Core._rom.Length / 0x4000 - 1;
|
ROM_mask = Core._rom.Length / 0x4000 - 1;
|
||||||
|
|
||||||
// some games have sizes that result in a degenerate ROM, account for it here
|
// some games have sizes that result in a degenerate ROM, account for it here
|
||||||
|
@ -50,15 +49,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
||||||
{
|
{
|
||||||
if (addr < 0x4000)
|
if (addr < 0x4000)
|
||||||
{
|
{
|
||||||
// lowest bank is fixed, but is still effected by mode
|
return Core._rom[addr];
|
||||||
if (sel_mode)
|
|
||||||
{
|
|
||||||
return Core._rom[(ROM_bank & 0x60) * 0x4000 + addr];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return Core._rom[addr];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (addr < 0x8000)
|
else if (addr < 0x8000)
|
||||||
{
|
{
|
||||||
|
@ -150,6 +141,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
||||||
else if ((RAM_bank >= 8) && (RAM_bank < 0xC))
|
else if ((RAM_bank >= 8) && (RAM_bank < 0xC))
|
||||||
{
|
{
|
||||||
RTC_regs[RAM_bank - 8] = value;
|
RTC_regs[RAM_bank - 8] = value;
|
||||||
|
|
||||||
|
halt = (RTC_regs[4] & 0x40) > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -167,45 +160,48 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
||||||
|
|
||||||
public override void RTC_Tick()
|
public override void RTC_Tick()
|
||||||
{
|
{
|
||||||
RTC_timer++;
|
if (!halt)
|
||||||
|
|
||||||
if (RTC_timer == 128)
|
|
||||||
{
|
{
|
||||||
RTC_timer = 0;
|
RTC_timer++;
|
||||||
|
|
||||||
RTC_low_clock++;
|
if (RTC_timer == 128)
|
||||||
|
|
||||||
if (RTC_low_clock == 32768)
|
|
||||||
{
|
{
|
||||||
RTC_low_clock = 0;
|
RTC_timer = 0;
|
||||||
|
|
||||||
RTC_regs[0]++;
|
RTC_low_clock++;
|
||||||
if (RTC_regs[0] > 59)
|
|
||||||
|
if (RTC_low_clock == 32768)
|
||||||
{
|
{
|
||||||
RTC_regs[0] = 0;
|
RTC_low_clock = 0;
|
||||||
RTC_regs[1]++;
|
|
||||||
if (RTC_regs[1] > 59)
|
|
||||||
{
|
|
||||||
RTC_regs[2]++;
|
|
||||||
if (RTC_regs[2] > 23)
|
|
||||||
{
|
|
||||||
RTC_regs[2] = 0;
|
|
||||||
if (RTC_regs[3] < 0xFF)
|
|
||||||
{
|
|
||||||
RTC_regs[3]++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
RTC_regs[3] = 0;
|
|
||||||
|
|
||||||
if ((RTC_regs[4] & 1) == 0)
|
RTC_regs[0]++;
|
||||||
|
if (RTC_regs[0] > 59)
|
||||||
|
{
|
||||||
|
RTC_regs[0] = 0;
|
||||||
|
RTC_regs[1]++;
|
||||||
|
if (RTC_regs[1] > 59)
|
||||||
|
{
|
||||||
|
RTC_regs[2]++;
|
||||||
|
if (RTC_regs[2] > 23)
|
||||||
|
{
|
||||||
|
RTC_regs[2] = 0;
|
||||||
|
if (RTC_regs[3] < 0xFF)
|
||||||
{
|
{
|
||||||
RTC_regs[4] |= 1;
|
RTC_regs[3]++;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
RTC_regs[4] &= 0xFE;
|
RTC_regs[3] = 0;
|
||||||
RTC_regs[4] |= 0x80;
|
|
||||||
|
if ((RTC_regs[4] & 1) == 0)
|
||||||
|
{
|
||||||
|
RTC_regs[4] |= 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
RTC_regs[4] &= 0xFE;
|
||||||
|
RTC_regs[4] |= 0x80;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -223,7 +219,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
||||||
ser.Sync("RAM_Bank", ref RAM_bank);
|
ser.Sync("RAM_Bank", ref RAM_bank);
|
||||||
ser.Sync("RAM_Mask", ref RAM_mask);
|
ser.Sync("RAM_Mask", ref RAM_mask);
|
||||||
ser.Sync("RAM_enable", ref RAM_enable);
|
ser.Sync("RAM_enable", ref RAM_enable);
|
||||||
ser.Sync("sel_mode", ref sel_mode);
|
ser.Sync("halt", ref halt);
|
||||||
|
ser.Sync("RTC_regs", ref RTC_regs, false);
|
||||||
|
ser.Sync("RTC_regs_latch", ref RTC_regs_latch, false);
|
||||||
|
ser.Sync("RTC_regs_latch_wr", ref RTC_regs_latch_wr);
|
||||||
|
ser.Sync("RTC_timer", ref RTC_timer);
|
||||||
|
ser.Sync("RTC_low_clock", ref RTC_low_clock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue