blegh
This commit is contained in:
parent
7445ff887c
commit
1475d55da1
|
@ -23,7 +23,6 @@ Madoo Granzort - Graphics issues because SGX VPC renderer is not using new fr
|
||||||
MML Demo - Echo channels are too loud (equal volume!)
|
MML Demo - Echo channels are too loud (equal volume!)
|
||||||
Outrun - OK currently but timing sensitive game for future testing
|
Outrun - OK currently but timing sensitive game for future testing
|
||||||
Paranoia - Game hits BREAK on 3rd level. need to investigate
|
Paranoia - Game hits BREAK on 3rd level. need to investigate
|
||||||
Populous - Game freezes on starting new game - unclear if related to battery RAM
|
|
||||||
Power Drift - Timing glitch... starting new game runs slower than it should
|
Power Drift - Timing glitch... starting new game runs slower than it should
|
||||||
Power Tennis - Elaborate intro screen doesnt display right
|
Power Tennis - Elaborate intro screen doesnt display right
|
||||||
Raiden - Sprites and BG get out of sync with current timing
|
Raiden - Sprites and BG get out of sync with current timing
|
||||||
|
@ -52,7 +51,7 @@ Side Arms - Screen is like 4 pixels too tall
|
||||||
Stuff I Fixed That's Not In Other Docs:
|
Stuff I Fixed That's Not In Other Docs:
|
||||||
|
|
||||||
+ Street Fighter II special mapper
|
+ Street Fighter II special mapper
|
||||||
+ Populous has special BRAM / saveRAM (I have not yet fixed this)
|
+ Populous has special SaveRAM, 32k starting at page $40.
|
||||||
+ After Burner - There is a 1-instruction delay on changes to IRQ Control Byte taking effect
|
+ After Burner - There is a 1-instruction delay on changes to IRQ Control Byte taking effect
|
||||||
+ There is a one-instruction delay on changes to the I flag taking effect
|
+ There is a one-instruction delay on changes to the I flag taking effect
|
||||||
- Affects (Not a complete list): Blodia, Body Conquest 2, Champions Forever Boxing,
|
- Affects (Not a complete list): Blodia, Body Conquest 2, Champions Forever Boxing,
|
||||||
|
|
|
@ -0,0 +1,62 @@
|
||||||
|
namespace BizHawk.Emulation.Consoles.TurboGrafx
|
||||||
|
{
|
||||||
|
public partial class PCEngine
|
||||||
|
{
|
||||||
|
// The Populous HuCard is the only traditional HuCard to have battery-backed saveRAM
|
||||||
|
// built into it. There is 32k of save-RAM mapped at pages $40 - $44.
|
||||||
|
|
||||||
|
private byte[] PopulousRAM;
|
||||||
|
|
||||||
|
private byte ReadMemoryPopulous(int addr)
|
||||||
|
{
|
||||||
|
if (addr >= 0x80000 && addr < 0x88000)
|
||||||
|
return PopulousRAM[addr & 0x7FFF];
|
||||||
|
|
||||||
|
if (addr < 0xFFFFF) // read ROM
|
||||||
|
return RomData[addr % RomLength];
|
||||||
|
|
||||||
|
if (addr >= 0x1F0000 && addr < 0x1F8000) // read RAM
|
||||||
|
return Ram[addr & 0x1FFF];
|
||||||
|
|
||||||
|
if (addr >= 0x1FE000) // hardware page.
|
||||||
|
{
|
||||||
|
if (addr < 0x1FE400) return VDC1.ReadVDC(addr);
|
||||||
|
if (addr < 0x1FE800) { Cpu.PendingCycles--; return VCE.ReadVCE(addr); }
|
||||||
|
if (addr < 0x1FEC00) return IOBuffer;
|
||||||
|
if (addr < 0x1FF000) { IOBuffer = (byte)(Cpu.ReadTimerValue() | (IOBuffer & 0x80)); return IOBuffer; }
|
||||||
|
if (addr >= 0x1FF000 &&
|
||||||
|
addr < 0x1FF400) { IOBuffer = ReadInput(); return IOBuffer; }
|
||||||
|
if ((addr & ~1) == 0x1FF400) return IOBuffer;
|
||||||
|
if (addr == 0x1FF402) { IOBuffer = (byte)(Cpu.IRQControlByte | (IOBuffer & 0xF8)); return IOBuffer; }
|
||||||
|
if (addr == 0x1FF403) { IOBuffer = (byte)(Cpu.ReadIrqStatus() | (IOBuffer & 0xF8)); return IOBuffer; }
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.Error("MEM", "UNHANDLED READ: {0:X6}", addr);
|
||||||
|
return 0xFF;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void WriteMemoryPopulous(int addr, byte value)
|
||||||
|
{
|
||||||
|
if (addr >= 0x1F0000 && addr < 0x1F8000) // write RAM.
|
||||||
|
Ram[addr & 0x1FFF] = value;
|
||||||
|
|
||||||
|
else if (addr >= 0x1FE000) // hardware page.
|
||||||
|
{
|
||||||
|
if (addr < 0x1FE400) VDC1.WriteVDC(addr, value);
|
||||||
|
else if (addr < 0x1FE800) { Cpu.PendingCycles--; VCE.WriteVCE(addr, value); }
|
||||||
|
else if (addr < 0x1FEC00) { IOBuffer = value; PSG.WritePSG((byte)addr, value, Cpu.TotalExecutedCycles); }
|
||||||
|
else if (addr == 0x1FEC00) { IOBuffer = value; Cpu.WriteTimer(value); }
|
||||||
|
else if (addr == 0x1FEC01) { IOBuffer = value; Cpu.WriteTimerEnable(value); }
|
||||||
|
else if (addr >= 0x1FF000 &&
|
||||||
|
addr < 0x1FF400) { IOBuffer = value; WriteInput(value); }
|
||||||
|
else if (addr == 0x1FF402) { IOBuffer = value; Cpu.WriteIrqControl(value); }
|
||||||
|
else if (addr == 0x1FF403) { IOBuffer = value; Cpu.WriteIrqStatus(); }
|
||||||
|
else Log.Error("MEM", "unhandled hardware write [{0:X6}] : {1:X2}", addr, value);
|
||||||
|
}
|
||||||
|
else if (addr >= 0x80000 && addr < 0x88000)
|
||||||
|
PopulousRAM[addr & 0x7FFF] = value;
|
||||||
|
else
|
||||||
|
Log.Error("MEM","UNHANDLED WRITE: {0:X6}:{1:X2}",addr,value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue