  /*****
   * CPU<>APU communication ports
   *****/
  uint8 apu_port[4];
  uint8 port_read(uint8 port) { return apu_port[port & 3]; }
  void port_write(uint8 port, uint8 data) { apu_port[port & 3] = data; }

  /*****
   * core CPU bus functions
   *****/
  void op_io();
  uint8 op_read(uint32 addr);
  void op_write(uint32 addr, uint8 data);

  /*****
   * helper memory addressing functions used by CPU core
   *****/
  uint8 op_readpc    ();
  uint8 op_readstack ();
  uint8 op_readstackn();
  uint8 op_readaddr  (uint32 addr);
  uint8 op_readlong  (uint32 addr);
  uint8 op_readdbr   (uint32 addr);
  uint8 op_readpbr   (uint32 addr);
  uint8 op_readdp    (uint32 addr);
  uint8 op_readsp    (uint32 addr);

  void op_writestack (uint8  data);
  void op_writestackn(uint8  data);
  void op_writeaddr  (uint32 addr, uint8 data);
  void op_writelong  (uint32 addr, uint8 data);
  void op_writedbr   (uint32 addr, uint8 data);
  void op_writepbr   (uint32 addr, uint8 data);
  void op_writedp    (uint32 addr, uint8 data);
  void op_writesp    (uint32 addr, uint8 data);
