-void execute_init(int32_t _memory_size, uint8_t *_memory, uint16_t *_chipreg);
+struct cpu_stop {
+ uint32_t pc;
+ int event;
+};
+
+void execute_init(int32_t _memory_size, uint8_t *_memory, uint16_t *_chipreg, uint16_t (*io_read)(uint32_t address), void (*io_write)(uint32_t address, uint16_t value));
void reset_cpu(void);
-int execute_cpu(int irq, const uint32_t stop_at[]);
-uint16_t emulate_io_read(uint32_t address);
-void emulate_io_write(uint32_t address, uint16_t value);
+int execute_cpu(int irq, const struct cpu_stop stop_at[], int *event);