71 lines
1.3 KiB
C#
71 lines
1.3 KiB
C#
using System;
|
|
|
|
namespace BizHawk.Emulation.Computers.Commodore64.MOS
|
|
{
|
|
// ROM chips
|
|
// 2332: 32 kbit (4kbyte)
|
|
// 2364: 64 kbit (8kbyte)
|
|
// 23128: 128 kbit (16kbyte)
|
|
|
|
public enum Chip23XXmodel
|
|
{
|
|
Chip2332,
|
|
Chip2364,
|
|
Chip23128
|
|
}
|
|
|
|
public class Chip23XX
|
|
{
|
|
private uint addrMask;
|
|
private byte[] rom;
|
|
|
|
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)
|
|
{
|
|
return rom[addr & (int)addrMask];
|
|
}
|
|
|
|
public void Poke(int addr, byte val)
|
|
{
|
|
// do nothing (this is rom)
|
|
}
|
|
|
|
public byte Read(ushort addr)
|
|
{
|
|
return rom[addr & addrMask];
|
|
}
|
|
|
|
public void SyncState(Serializer ser)
|
|
{
|
|
ByteBuffer buffer = new ByteBuffer(rom);
|
|
ser.Sync("rom", ref buffer);
|
|
}
|
|
|
|
public void Write(ushort addr, byte val)
|
|
{
|
|
// do nothing (this is rom)
|
|
}
|
|
}
|
|
}
|