Add files via upload
This commit is contained in:
parent
f99f9847b4
commit
321f62a242
|
@ -0,0 +1,93 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using BizHawk.Common;
|
||||||
|
|
||||||
|
namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge
|
||||||
|
{
|
||||||
|
internal sealed class Mapper0007 : CartridgeDevice
|
||||||
|
{
|
||||||
|
private int[,] _banks = new int[16,0x2000];
|
||||||
|
|
||||||
|
private int _bankNumber;
|
||||||
|
private bool _disabled;
|
||||||
|
private int _latchedval;
|
||||||
|
|
||||||
|
// Fun Play mapper
|
||||||
|
// bank switching is done from DE00
|
||||||
|
|
||||||
|
public Mapper0007(IList<int[]> newData, bool game, bool exrom)
|
||||||
|
{
|
||||||
|
pinGame = game;
|
||||||
|
pinExRom = exrom;
|
||||||
|
|
||||||
|
_disabled = false;
|
||||||
|
_latchedval = 0;
|
||||||
|
|
||||||
|
// load data into the banks from the list
|
||||||
|
for (var j = 0; j < 16; j++)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < 0x2000; i++)
|
||||||
|
{
|
||||||
|
_banks[j,i] = newData[j][i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_bankNumber = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void SyncStateInternal(Serializer ser)
|
||||||
|
{
|
||||||
|
ser.Sync("BankNumber", ref _bankNumber);
|
||||||
|
ser.Sync("Disabled", ref _disabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Peek8000(int addr)
|
||||||
|
{
|
||||||
|
if (!_disabled)
|
||||||
|
return _banks[_bankNumber, addr];
|
||||||
|
else
|
||||||
|
return base.Read8000(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void PokeDE00(int addr, int val)
|
||||||
|
{
|
||||||
|
if (addr == 0)
|
||||||
|
{
|
||||||
|
byte temp_bank = (byte)((val & 0x1) << 3);
|
||||||
|
temp_bank |= (byte)((val & 0x38) >> 3);
|
||||||
|
_bankNumber = temp_bank;
|
||||||
|
if (val == 0x86)
|
||||||
|
{
|
||||||
|
_disabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int Read8000(int addr)
|
||||||
|
{
|
||||||
|
if (!_disabled)
|
||||||
|
return _banks[_bankNumber, addr];
|
||||||
|
else
|
||||||
|
return base.Read8000(addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void WriteDE00(int addr, int val)
|
||||||
|
{
|
||||||
|
if (addr == 0)
|
||||||
|
{
|
||||||
|
byte temp_bank = (byte)((val & 0x1) << 3);
|
||||||
|
temp_bank |= (byte)((val & 0x38) >> 3);
|
||||||
|
_bankNumber = temp_bank;
|
||||||
|
if (val==0x86)
|
||||||
|
{
|
||||||
|
_disabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int ReadDF00(int addr)
|
||||||
|
{
|
||||||
|
return _latchedval;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue