template<> auto M68K::read(uint32 addr) -> uint32 { step(4); return read(0, addr); } template<> auto M68K::read(uint32 addr) -> uint32 { step(4); return read(1, addr); } template<> auto M68K::read(uint32 addr) -> uint32 { step(4); uint32 data = read(1, addr + 0) << 16; step(4); return data | read(1, addr + 2) << 0; } // template<> auto M68K::write(uint32 addr, uint32 data) -> void { step(4); return write(0, addr, data); } template<> auto M68K::write(uint32 addr, uint32 data) -> void { step(4); return write(1, addr, data); } template<> auto M68K::write(uint32 addr, uint32 data) -> void { step(4); write(1, addr + 0, data >> 16); step(4); write(1, addr + 2, data >> 0); } template<> auto M68K::write(uint32 addr, uint32 data) -> void { step(4); return write(0, addr, data); } template<> auto M68K::write(uint32 addr, uint32 data) -> void { step(4); return write(1, addr, data); } template<> auto M68K::write(uint32 addr, uint32 data) -> void { step(4); write(1, addr + 2, data >> 0); step(4); write(1, addr + 0, data >> 16); } // template<> auto M68K::readPC() -> uint32 { step(4); auto data = read(1, r.pc); r.pc += 2; return (uint8)data; } template<> auto M68K::readPC() -> uint32 { step(4); auto data = read(1, r.pc); r.pc += 2; return data; } template<> auto M68K::readPC() -> uint32 { step(4); auto hi = read(1, r.pc); r.pc += 2; step(4); auto lo = read(1, r.pc); r.pc += 2; return hi << 16 | lo << 0; } // template auto M68K::pop() -> uint32 { auto data = read((uint32)r.a[7]); r.a[7] += Size == Long ? 4 : 2; return data; } template auto M68K::push(uint32 data) -> void { r.a[7] -= Size == Long ? 4 : 2; return write((uint32)r.a[7], data); }