#pragma once //Hitachi HG51B169 (HG51BS family/derivative?) namespace Processor { struct HG51B { auto exec(uint24 addr) -> void; virtual auto read(uint24 addr) -> uint8 = 0; virtual auto write(uint24 addr, uint8 data) -> void = 0; auto power() -> void; auto serialize(serializer&) -> void; //uint16 programROM[2][256]; uint24 dataROM[1024]; uint8 dataRAM[3072]; protected: auto push() -> void; auto pull() -> void; auto sa() -> uint; auto ri() -> uint; auto np() -> uint; auto instruction() -> void; //registers.cpp auto registerRead(uint8 addr) const -> uint24; auto registerWrite(uint8 addr, uint24 data) -> void; struct Registers { bool halt; uint24 pc; uint16 p; bool n; bool z; bool c; uint24 a; uint24 acch; uint24 accl; uint24 busdata; uint24 romdata; uint24 ramdata; uint24 busaddr; uint24 ramaddr; uint24 gpr[16]; } regs; uint24 stack[8]; uint16 opcode; }; }