Atari - attempt the 3E mapper, seems broken
This commit is contained in:
parent
4f045eb20d
commit
9a1cbbb34c
|
@ -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() { }
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue