+{
+#if DEBUG
+ zstate_t old = zstate;
+#endif
+ switch (zstate) {
+ case RESET:
+ break;
+ case RESET_AQRD:
+ z80_setup_dbus_in();
+ z80_setup_addrbus_tristate();
+ Z80_O_RST = 0;
+ Z80_O_BUSREQ = 1;
+ zstate = RESET;
+ break;
+ case RUN:
+ break;
+ case RUN_AQRD:
+ z80_setup_dbus_in();
+ z80_setup_addrbus_tristate();
+ Z80_O_BUSREQ = 1;
+ zstate = RUN;
+ break;
+ }
+
+ debug("z80_release_bus: state: %02x --> %02x\n", old, zstate);
+}
+
+/*
+ * Do nothing, if we have the bus allready
+ *
+ * return previous state
+ */
+zstate_t z80_request_bus_save(void)
+{
+ zstate_t state;
+
+ state = z80_runstate();
+ if (!(state & ZST_ACQUIRED))
+ z80_request_bus();
+
+ return state;
+}
+
+/*
+ * Do nothing, if we had the bus before
+ */
+void z80_release_bus_save(zstate_t prev)
+{
+ if (!(prev & ZST_ACQUIRED))
+ z80_release_bus();
+}
+
+void z80_run(void)
+{
+#if DEBUG
+ zstate_t old = zstate;
+#endif
+ switch (zstate) {
+ case RESET:
+ Z80_O_RST = 1;
+ zstate = RUN;
+ break;
+
+ case RESET_AQRD:
+ z80_setup_dbus_in();
+ z80_setup_addrbus_tristate();
+ Z80_O_RST = 0;
+ _delay_us(10);
+ Z80_O_RST = 1;
+ z80_setup_addrbus_active();
+ zstate = RUN_AQRD;
+ break;
+
+ case RUN:
+ break;
+ case RUN_AQRD:
+ break;
+ }
+
+ debug("z80_run: state: %02x --> %02x\n", old, zstate);
+}
+
+void z80_busreq_hpulse(void)