using System; namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { // MOS technology 6526 "CIA" // // emulation notes: // * CS, R/W and RS# pins are not emulated. (not needed) // * A low RES pin is emulated via HardReset(). public static class Chip6526 { public static Cia Create(C64.CiaType type, Func readIec) { switch (type) { case C64.CiaType.Ntsc: return new Cia(14318181, 14 * 60, readIec) { DelayedInterrupts = true }; case C64.CiaType.NtscRevA: return new Cia(14318181, 14 * 60, readIec) { DelayedInterrupts = false }; case C64.CiaType.Pal: return new Cia(17734472, 18 * 50, readIec) { DelayedInterrupts = true }; case C64.CiaType.PalRevA: return new Cia(17734472, 18 * 50, readIec) { DelayedInterrupts = false }; default: throw new Exception("Unrecognized CIA timer type."); } } public static Cia Create(C64.CiaType type, Func keyboard, Func joysticks) { switch (type) { case C64.CiaType.Ntsc: return new Cia(14318181, 14 * 60, keyboard, joysticks) { DelayedInterrupts = true }; case C64.CiaType.NtscRevA: return new Cia(14318181, 14 * 60, keyboard, joysticks) { DelayedInterrupts = false }; case C64.CiaType.Pal: return new Cia(17734472, 18 * 50, keyboard, joysticks) { DelayedInterrupts = true }; case C64.CiaType.PalRevA: return new Cia(17734472, 18 * 50, keyboard, joysticks) { DelayedInterrupts = false }; default: throw new Exception("Unrecognized CIA timer type."); } } } }