AtariHawk - fixes to the E7 mapper, still broken, don't know why, tired of looking at it
This commit is contained in:
parent
00934939b0
commit
563065d054
|
@ -32,7 +32,7 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
||||||
|
|
||||||
class mE7 : MapperBase
|
class mE7 : MapperBase
|
||||||
{
|
{
|
||||||
int toggle = 0;
|
int rombank_1k = 0;
|
||||||
int rambank1_toggle = 0;
|
int rambank1_toggle = 0;
|
||||||
ByteBuffer rambank0 = new ByteBuffer(1024);
|
ByteBuffer rambank0 = new ByteBuffer(1024);
|
||||||
ByteBuffer rambank1 = new ByteBuffer(1024);
|
ByteBuffer rambank1 = new ByteBuffer(1024);
|
||||||
|
@ -40,32 +40,44 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
||||||
|
|
||||||
public override byte ReadMemory(ushort addr)
|
public override byte ReadMemory(ushort addr)
|
||||||
{
|
{
|
||||||
|
if (addr < 0x1000)
|
||||||
|
{
|
||||||
|
return base.ReadMemory(addr);
|
||||||
|
}
|
||||||
|
|
||||||
Address(addr);
|
Address(addr);
|
||||||
if (addr < 0x1000) return base.ReadMemory(addr);
|
if (addr < 0x1800)
|
||||||
else if (addr < 0x1400)
|
|
||||||
{
|
{
|
||||||
if (EnableRam0)
|
if (EnableRam0)
|
||||||
{
|
{
|
||||||
return rambank0[(addr & 1023)];
|
if (addr < 0x1400) //Reading from the write port
|
||||||
|
{
|
||||||
|
return rambank0[addr & 0x3FF] = 0xFF; //Reading from 1k write port triggers an unwanted write
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return rambank0[addr & 0x3FF];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return core.rom[toggle * 2 * 1024 + (addr & 0x7FF)];
|
return core.rom[(rombank_1k * 0x800) + (addr & 0x7FF)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (addr < 0x1800)
|
else if (addr < 0x1900) //Ram 1 Read port
|
||||||
{
|
{
|
||||||
return core.rom[toggle * 2 * 1024 + (addr & 0x7FF)];
|
return rambank1[(rambank1_toggle * 0x100) + (addr & 0xFF)];
|
||||||
}
|
}
|
||||||
else if (addr < 0x1A00)
|
else if (addr < 0x1A00) //Ram 1 Write port
|
||||||
{
|
{
|
||||||
return rambank1[toggle * 256 + (addr & 0x255)];
|
return rambank1[(rambank1_toggle * 0x100) + (addr & 0xFF)] = 0xFF; //Reading from the 256b write port @1800 riggers an unwanted write
|
||||||
}
|
}
|
||||||
else if (addr < 0x2000)
|
else if (addr < 0x2000)
|
||||||
{
|
{
|
||||||
addr -= 0x1A00;
|
addr -= 0x1A00;
|
||||||
addr &= 0x5FF;
|
addr &= 0x5FF;
|
||||||
return core.rom[14848 + addr]; //Fixed to last 1.5K
|
int offset = core.rom.Length - 0x0600;
|
||||||
|
return core.rom[offset + addr]; //Fixed to last 1.5K
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -85,14 +97,14 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
||||||
}
|
}
|
||||||
else if (addr >= 0x1800 && addr < 0x2000)
|
else if (addr >= 0x1800 && addr < 0x2000)
|
||||||
{
|
{
|
||||||
rambank0[(addr & 0xFF) + (rambank1_toggle * 0x100)] = value;
|
rambank1[(addr & 0xFF) + (rambank1_toggle * 0x100)] = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void SyncState(Serializer ser)
|
public override void SyncState(Serializer ser)
|
||||||
{
|
{
|
||||||
base.SyncState(ser);
|
base.SyncState(ser);
|
||||||
ser.Sync("toggle", ref toggle);
|
ser.Sync("toggle", ref rombank_1k);
|
||||||
ser.Sync("rambank0", ref rambank0);
|
ser.Sync("rambank0", ref rambank0);
|
||||||
ser.Sync("rambank1", ref rambank1);
|
ser.Sync("rambank1", ref rambank1);
|
||||||
ser.Sync("EnableRam0", ref EnableRam0);
|
ser.Sync("EnableRam0", ref EnableRam0);
|
||||||
|
@ -104,25 +116,25 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
|
||||||
switch (addr)
|
switch (addr)
|
||||||
{
|
{
|
||||||
case 0x1FE0:
|
case 0x1FE0:
|
||||||
toggle = 0;
|
rombank_1k = 0;
|
||||||
break;
|
break;
|
||||||
case 0x1FE1:
|
case 0x1FE1:
|
||||||
toggle = 1;
|
rombank_1k = 1;
|
||||||
break;
|
break;
|
||||||
case 0x1FE2:
|
case 0x1FE2:
|
||||||
toggle = 2;
|
rombank_1k = 2;
|
||||||
break;
|
break;
|
||||||
case 0x1FE3:
|
case 0x1FE3:
|
||||||
toggle = 3;
|
rombank_1k = 3;
|
||||||
break;
|
break;
|
||||||
case 0x1FE4:
|
case 0x1FE4:
|
||||||
toggle = 4;
|
rombank_1k = 4;
|
||||||
break;
|
break;
|
||||||
case 0x1FE5:
|
case 0x1FE5:
|
||||||
toggle = 5;
|
rombank_1k = 5;
|
||||||
break;
|
break;
|
||||||
case 0x1FE6:
|
case 0x1FE6:
|
||||||
toggle = 6;
|
rombank_1k = 6;
|
||||||
break;
|
break;
|
||||||
case 0x1FE7:
|
case 0x1FE7:
|
||||||
EnableRam0 = true;
|
EnableRam0 = true;
|
||||||
|
|
Loading…
Reference in New Issue