GBHawk: Bug Fixes
This commit is contained in:
parent
d9183ede93
commit
ffbb1f3399
|
@ -33,22 +33,27 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
|||
|
||||
if (ppu.DMA_start)
|
||||
{
|
||||
if ((addr >= 0xFE00) && (addr < 0xFEA0) && ppu.DMA_OAM_access)
|
||||
if (addr < 0x4000)
|
||||
{
|
||||
return OAM[addr - 0xFE00];
|
||||
}
|
||||
else if ((addr >= 0xFF80))
|
||||
{
|
||||
return ZP_RAM[addr - 0xFF80];
|
||||
return mapper.ReadMemory(addr); // some of gekkio's tests require this to be accessible during DMA
|
||||
}
|
||||
else if ((addr >= 0xE000) && (addr < 0xFE00))
|
||||
{
|
||||
return RAM[addr - 0xE000]; // some of gekkio's tests require this to be accessible during DMA
|
||||
}
|
||||
else if (addr < 0x4000)
|
||||
else if ((addr >= 0xFE00) && (addr < 0xFEA0) && ppu.DMA_OAM_access)
|
||||
{
|
||||
return mapper.ReadMemory(addr); // some of gekkio's tests require this to be accessible during DMA
|
||||
return OAM[addr - 0xFE00];
|
||||
}
|
||||
else if ((addr >= 0xFF00) && (addr < 0xFF80)) // The game GOAL! Requires Hardware Regs to be accessible
|
||||
{
|
||||
return Read_Registers(addr);
|
||||
}
|
||||
else if ((addr >= 0xFF80))
|
||||
{
|
||||
return ZP_RAM[addr - 0xFF80];
|
||||
}
|
||||
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
|
@ -126,22 +131,22 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
|||
|
||||
if (ppu.DMA_start)
|
||||
{
|
||||
if ((addr >= 0xFE00) && (addr < 0xFEA0) && ppu.DMA_OAM_access)
|
||||
if ((addr >= 0xE000) && (addr < 0xFE00))
|
||||
{
|
||||
RAM[addr - 0xE000] = value; // some of gekkio's tests require this to be accessible during DMA
|
||||
}
|
||||
else if ((addr >= 0xFE00) && (addr < 0xFEA0) && ppu.DMA_OAM_access)
|
||||
{
|
||||
OAM[addr - 0xFE00] = value;
|
||||
}
|
||||
else if ((addr >= 0xFF00) && (addr < 0xFF80)) // The game GOAL! Requires Hardware Regs to be accessible
|
||||
{
|
||||
Write_Registers(addr, value);
|
||||
}
|
||||
else if ((addr >= 0xFF80))
|
||||
{
|
||||
ZP_RAM[addr - 0xFF80] = value;
|
||||
}
|
||||
else if (addr == 0xFF46)
|
||||
{
|
||||
Write_Registers(addr, value); // a second DMA can start, but what about other registers?
|
||||
}
|
||||
else if ((addr >= 0xE000) && (addr < 0xFE00))
|
||||
{
|
||||
RAM[addr - 0xE000] = value; // some of gekkio's tests require this to be accessible during DMA
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -211,22 +216,27 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
|||
{
|
||||
if (ppu.DMA_start)
|
||||
{
|
||||
if ((addr >= 0xFE00) && (addr < 0xFEA0) && ppu.DMA_OAM_access)
|
||||
if (addr < 0x4000)
|
||||
{
|
||||
return OAM[addr - 0xFE00];
|
||||
}
|
||||
else if ((addr >= 0xFF80))
|
||||
{
|
||||
return ZP_RAM[addr - 0xFF80];
|
||||
return mapper.ReadMemory(addr); // some of gekkio's tests require this to be accessible during DMA
|
||||
}
|
||||
else if ((addr >= 0xE000) && (addr < 0xFE00))
|
||||
{
|
||||
return RAM[addr - 0xE000]; // some of gekkio's tests require this to be accessible during DMA
|
||||
}
|
||||
else if (addr < 0x4000)
|
||||
else if ((addr >= 0xFE00) && (addr < 0xFEA0) && ppu.DMA_OAM_access)
|
||||
{
|
||||
return mapper.PeekMemory(addr); // some of gekkio's tests require this to be accessible during DMA
|
||||
return OAM[addr - 0xFE00];
|
||||
}
|
||||
else if ((addr >= 0xFF00) && (addr < 0xFF80)) // The game GOAL! Requires Hardware Regs to be accessible
|
||||
{
|
||||
return Read_Registers(addr);
|
||||
}
|
||||
else if ((addr >= 0xFF80))
|
||||
{
|
||||
return ZP_RAM[addr - 0xFF80];
|
||||
}
|
||||
|
||||
return 0xFF;
|
||||
}
|
||||
|
||||
|
|
|
@ -117,6 +117,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
|||
switch (addr)
|
||||
{
|
||||
case 0xFF40: // LCDC
|
||||
if (LCDC.Bit(7) && !value.Bit(7))
|
||||
{
|
||||
VRAM_access_read = true;
|
||||
VRAM_access_write = true;
|
||||
OAM_access_read = true;
|
||||
OAM_access_write = true;
|
||||
}
|
||||
|
||||
LCDC = value;
|
||||
break;
|
||||
case 0xFF41: // STAT
|
||||
|
@ -1047,8 +1055,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk
|
|||
BGP = 0xFF;
|
||||
obj_pal_0 = 0xFF;
|
||||
obj_pal_1 = 0xFF;
|
||||
window_y = 0;
|
||||
window_x = 0;
|
||||
window_y = 0x0;
|
||||
window_x = 0x0;
|
||||
LY_inc = 1;
|
||||
no_scan = false;
|
||||
OAM_access_read = true;
|
||||
|
|
Loading…
Reference in New Issue