2012-11-27 05:11:40 +00:00
|
|
|
|
using System;
|
2013-11-04 00:36:15 +00:00
|
|
|
|
using BizHawk.Common;
|
2012-11-27 05:11:40 +00:00
|
|
|
|
|
|
|
|
|
namespace BizHawk.Emulation.Computers.Commodore64.MOS
|
|
|
|
|
{
|
|
|
|
|
// ROM chips
|
|
|
|
|
// 2332: 32 kbit (4kbyte)
|
|
|
|
|
// 2364: 64 kbit (8kbyte)
|
|
|
|
|
// 23128: 128 kbit (16kbyte)
|
|
|
|
|
|
2013-08-24 17:30:46 +00:00
|
|
|
|
public enum Chip23XXmodel
|
2012-11-27 05:11:40 +00:00
|
|
|
|
{
|
|
|
|
|
Chip2332,
|
|
|
|
|
Chip2364,
|
|
|
|
|
Chip23128
|
|
|
|
|
}
|
|
|
|
|
|
2013-08-24 17:30:46 +00:00
|
|
|
|
sealed public class Chip23XX
|
2012-11-27 05:11:40 +00:00
|
|
|
|
{
|
2013-08-24 17:30:46 +00:00
|
|
|
|
int addrMask;
|
|
|
|
|
byte[] rom;
|
2012-11-27 05:11:40 +00:00
|
|
|
|
|
|
|
|
|
public Chip23XX(Chip23XXmodel model, byte[] data)
|
|
|
|
|
{
|
|
|
|
|
switch (model)
|
|
|
|
|
{
|
|
|
|
|
case Chip23XXmodel.Chip2332:
|
|
|
|
|
rom = new byte[0x1000];
|
|
|
|
|
addrMask = 0xFFF;
|
|
|
|
|
break;
|
|
|
|
|
case Chip23XXmodel.Chip2364:
|
|
|
|
|
rom = new byte[0x2000];
|
|
|
|
|
addrMask = 0x1FFF;
|
|
|
|
|
break;
|
|
|
|
|
case Chip23XXmodel.Chip23128:
|
|
|
|
|
rom = new byte[0x4000];
|
|
|
|
|
addrMask = 0x3FFF;
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
throw new Exception("Invalid chip model.");
|
|
|
|
|
}
|
|
|
|
|
Array.Copy(data, rom, rom.Length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public byte Peek(int addr)
|
|
|
|
|
{
|
2013-08-14 05:05:17 +00:00
|
|
|
|
return rom[addr & addrMask];
|
2012-11-27 05:11:40 +00:00
|
|
|
|
}
|
|
|
|
|
|
2013-08-14 05:05:17 +00:00
|
|
|
|
public byte Read(int addr)
|
2012-11-27 05:11:40 +00:00
|
|
|
|
{
|
|
|
|
|
return rom[addr & addrMask];
|
|
|
|
|
}
|
|
|
|
|
|
2012-12-03 08:38:12 +00:00
|
|
|
|
public void SyncState(Serializer ser)
|
|
|
|
|
{
|
2013-11-04 00:36:15 +00:00
|
|
|
|
SaveState.SyncObject(ser, this);
|
2013-08-19 03:42:40 +00:00
|
|
|
|
}
|
2012-11-27 05:11:40 +00:00
|
|
|
|
}
|
|
|
|
|
}
|