using System; namespace BizHawk.Emulation.Computers.Commodore64.MOS { static public class Port { static public byte CPUWrite(byte latch, byte val, byte dir) { byte result; result = (byte)(latch & (dir ^ 0xFF)); result |= (byte)(val & dir); return result; } static public byte ExternalWrite(byte latch, byte val, byte dir) { byte result; result = (byte)(latch & dir); result |= (byte)(val & (dir ^ 0xFF)); return result; } static public PortAdapter GetAdapter(Func newRead, Action newWrite, Action newWriteForce) { return new PortAdapter(newRead, newWrite, newWriteForce); } } public class PortAdapter { private Action actWrite; private Action actWriteMask; private Func funcRead; public PortAdapter(Func newRead, Action newWrite, Action newWriteMask) { funcRead = newRead; actWrite = newWrite; actWriteMask = newWriteMask; } public byte Data { get { return funcRead(); } set { actWrite(value); } } public void MaskWrite(byte val) { actWriteMask(val); } } }