8#define CHECK_WATCHPOINT \
9if constexpr (PEDDLE_ENABLE_WATCHPOINTS) { \
10if ((flags & CPU_CHECK_WP) && debugger.watchpointMatches(addr)) { \
11watchpointReached(addr); \
14#if PEDDLE_SIMPLE_MEMORY_API == true
16template <CPURevision C> u8
21 if (hasProcessorPort<C>()) {
23 if (addr < 2)
return addr ? readPort() : readPortDir();
25 return read(addr & addrMask<C>());
28template <CPURevision C> u8
29Peddle::readZeroPage(u8 addr)
33 if (hasProcessorPort<C>()) {
35 if (addr < 2)
return addr ? readPort() : readPortDir();
37 return read(addr & addrMask<C>());
40template <CPURevision C> u8
41Peddle::readStack(u8 addr)
44 return read(u16(addr) + 0x100);
47template <CPURevision C>
void
48Peddle::readIdle(u16 addr)
50 if (PEDDLE_EMULATE_IDLE_ACCESSES) {
54 if (hasProcessorPort<C>()) {
56 if (addr < 2)
return addr ? (void)readPort() : (void)readPortDir();
58 (void)read(addr & addrMask<C>());
62template <CPURevision C>
void
63Peddle::readZeroPageIdle(u8 addr)
65 if (PEDDLE_EMULATE_IDLE_ACCESSES) {
69 if (hasProcessorPort<C>()) {
71 if (addr < 2)
return addr ? (void)readPort() : (void)readPortDir();
73 (void)read(u16(addr));
77template <CPURevision C>
void
78Peddle::readStackIdle(u8 addr)
80 if (PEDDLE_EMULATE_IDLE_ACCESSES) {
83 (
void)read(u16(addr) + 0x100);
87template <CPURevision C>
void
88Peddle::write(u16 addr, u8 val)
92 if (hasProcessorPort<C>()) {
94 if (addr < 2) { addr ? writePort(val) : writePortDir(val);
return; }
96 write(addr & addrMask<C>(), val);
99template <CPURevision C>
void
100Peddle::writeZeroPage(u8 addr, u8 val)
104 if (hasProcessorPort<C>()) {
106 if (addr < 2) { addr ? writePort(val) : writePortDir(val);
return; }
108 write(u16(addr), val);
111template <CPURevision C>
void
112Peddle::writeStack(u8 addr, u8 val)
115 write(u16(addr) + 0x100, val);
130Peddle::readResetVector()
132 u16 addr = 0xFFFC & addrMask();
133 return u16(read(addr) | read(addr + 1) << 8);
136template <CPURevision C> u16
137Peddle::readDasm(u16 addr)
const
139 return readDasm(addr & addrMask<C>());
143Peddle::readPort()
const
145 return (reg.pport.data & reg.pport.direction) | (externalPortBits() & ~reg.pport.direction);