Atari - attempt the 3E mapper, seems broken

This commit is contained in:
adelikat 2012-10-20 01:51:38 +00:00
parent 4f045eb20d
commit 9a1cbbb34c
3 changed files with 90 additions and 1 deletions

View File

@ -265,5 +265,6 @@ namespace BizHawk
public virtual byte ReadMemory(ushort addr) { return core.BaseReadMemory(addr); }
public virtual void WriteMemory(ushort addr, byte value) { core.BaseWriteMemory(addr, value); }
public virtual void SyncState(Serializer ser) { }
public virtual void Dispose() { }
}
}

View File

@ -25,6 +25,91 @@ namespace BizHawk.Emulation.Consoles.Atari._2600
*/
class m3E : MapperBase
{
int lowbank_2k = 0;
int rambank_1k = 0;
bool hasRam = false;
ByteBuffer ram = new ByteBuffer(262144); //Up to 256k
public override void SyncState(Serializer ser)
{
base.SyncState(ser);
ser.Sync("lowbank_2k", ref lowbank_2k);
ser.Sync("rambank_1k", ref rambank_1k);
ser.Sync("cart_ram", ref ram);
ser.Sync("hasRam", ref hasRam);
}
public override void Dispose()
{
base.Dispose();
ram.Dispose();
}
public override byte ReadMemory(ushort addr)
{
if (addr < 0x1000)
{
return base.ReadMemory(addr);
}
else if (addr < 0x17FF) //Low 2k Bank
{
if (hasRam)
{
if (addr < 0x13FF)
{
return ram[(addr & 0x03FF) + (rambank_1k << 10)];
}
else
{
return ram[(addr & 0x03FF) + (rambank_1k << 10)] = 0xFF; //Reading from the write port triggers an unwanted write
}
}
else
{
int a = addr & 0x07FF; //2K
int bank = lowbank_2k << 11;
return core.rom[bank + a];
}
}
else if (addr < 0x2000) //High bank fixed to last 2k of ROM
{
return core.rom[(core.rom.Length - 2048) + (addr & 0x07FF)];
}
return base.ReadMemory(addr);
}
public override void WriteMemory(ushort addr, byte value)
{
if (addr < 0x1000)
{
if (addr == 0x003E)
{
hasRam = true;
rambank_1k = value;
}
else if (addr == 0x003F)
{
hasRam = false;
if ((value << 11) < core.rom.Length)
{
lowbank_2k = value;
}
else
{
lowbank_2k = value & (core.rom.Length >> 11);
}
}
base.WriteMemory(addr, value);
}
else if (addr < 0x1400)
{
//Writing to the read port, for shame!
}
else if (addr < 0x1800) //Write port
{
ram[(rambank_1k << 10) + (addr & 0x3FF)] = value;
}
}
}
}

View File

@ -2693,4 +2693,7 @@ sha1:86BBE6E62DACF6E5CD771BD9249C4ED51BF60092 dungeon_rc4 A26 m=F4
sha1:C11F59AE0ECD376AF52AE57B5BE8B6F039DE0D0E MegaBoy (X07 Bankswitching Conversion) (2008) (Fred Quimby) A26 m=X07
sha1:54399CE15B443E789B8537306BC5AC3BB48B888D MegaBoy (EF Bankswitching Conversion) (2008) (Fred Quimby) A26 m=EF
sha1:3797959E4A3236B6562CE15AF7D96633F6720FC8 Fu Kung! - 2 Dancing Babies Demo (3F Bankswitching) (Andrew Davie) A26 m=3F
sha1:95D67B058EC40E8C5525365714D221E4C6B3C97D Ruby Runner Demo (4A50 Bankswitching) (2006) (John Payson) (WIP) A26 m=4A50
sha1:95D67B058EC40E8C5525365714D221E4C6B3C97D Ruby Runner Demo (4A50 Bankswitching) (2006) (John Payson) (WIP) A26 m=4A50
sha1:9CD8217DCCBE60F9A25A930D614EE5384F432A83 Boulder Dash (2005) (Andrew Davie) (WIP) A26 m=3E
sha1:00CCF622E7BA4D0A39DCBABAB771CE815B0FB8FE Boulder Dash (2005) (Andrew Davie) (WIP) (PAL A26 m=3E
sha1:650DA2339D41D1D2F180A6CAFE8DC311AC588ACD Boulder Dash Intro Tune (2005) (Erik Ehrling) A26 m=3E