summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/macadb.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/macadb.h')
-rw-r--r--src/mame/machine/macadb.h110
1 files changed, 110 insertions, 0 deletions
diff --git a/src/mame/machine/macadb.h b/src/mame/machine/macadb.h
index 6a8d16a718e..6b2fff18880 100644
--- a/src/mame/machine/macadb.h
+++ b/src/mame/machine/macadb.h
@@ -1,2 +1,112 @@
// license:BSD-3-Clause
// copyright-holders:R. Belmont
+#ifndef MAME_MACHINE_MACADB_H
+#define MAME_MACHINE_MACADB_H
+
+#pragma once
+
+#include "emu.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> macadb_device
+
+class macadb_device : public device_t
+{
+public:
+ // construction/destruction
+ macadb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ void set_mcu_mode(bool bMCUMode) { m_bIsMCUMode = bMCUMode; }
+ void set_pmu_mode(bool bPMUMode) { m_bIsPMU = bPMUMode; }
+ void set_pmu_is_via1(bool bPMUVIA1) { m_bIsPMUVIA1 = bPMUVIA1; }
+
+ auto via_clock_callback() { return write_via_clock.bind(); }
+ auto via_data_callback() { return write_via_data.bind(); }
+ auto adb_data_callback() { return write_adb_data.bind(); }
+ auto adb_irq_callback() { return write_adb_irq.bind(); }
+
+ required_ioport m_mouse0, m_mouse1, m_mouse2;
+ required_ioport_array<6> m_keys;
+ devcb_write_line write_via_clock, write_via_data, write_adb_data, write_adb_irq;
+
+ DECLARE_WRITE_LINE_MEMBER(adb_data_w);
+ DECLARE_WRITE_LINE_MEMBER(adb_linechange_w);
+
+ void adb_vblank();
+ void mac_adb_newaction(int state);
+ int32_t get_adb_state(void) { return m_adb_state; }
+
+ void pmu_exec();
+ int get_pm_data_recv(void) { return m_pm_data_recv; }
+ int get_pm_ack(void) { return m_pm_ack; }
+ void set_pm_data_send(int data) { m_pm_data_send = data; }
+ DECLARE_WRITE_LINE_MEMBER(pmu_req_w);
+
+protected:
+ // device-level overrides
+ virtual ioport_constructor device_input_ports() const override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ bool m_bIsMCUMode;
+ bool m_bIsPMU;
+ bool m_bIsPMUVIA1;
+
+ uint64_t m_last_adb_time;
+
+ emu_timer *m_adb_timer;
+
+ /* keyboard matrix to detect transition */
+ int m_key_matrix[7];
+
+ // ADB HLE state
+ int32_t m_adb_state, m_adb_waiting_cmd, m_adb_datasize, m_adb_buffer[257];
+ int32_t m_adb_command, m_adb_send, m_adb_timer_ticks, m_adb_extclock, m_adb_direction;
+ int32_t m_adb_listenreg, m_adb_listenaddr, m_adb_last_talk, m_adb_srq_switch;
+ int32_t m_adb_stream_ptr;
+ int32_t m_adb_linestate;
+ bool m_adb_srqflag;
+
+ #define kADBKeyBufSize 32
+ uint8_t m_adb_keybuf[kADBKeyBufSize];
+ uint8_t m_adb_keybuf_start;
+ uint8_t m_adb_keybuf_end;
+
+ // Portable/PB100 Power Manager IC comms (chapter 4, "Guide to the Macintosh Family Hardware", second edition)
+ uint8_t m_pm_ack, m_pm_cmd[32], m_pm_out[32], m_pm_dptr, m_pm_sptr, m_pm_slen, m_pm_state, m_pm_data_recv;
+ uint8_t m_pmu_int_status, m_pmu_last_adb_command, m_pmu_poll, m_pm_req, m_pm_data_send;
+ emu_timer *m_pmu_send_timer;
+
+ // ADB mouse state
+ int m_adb_mouseaddr;
+ int m_adb_lastmousex, m_adb_lastmousey, m_adb_lastbutton, m_adb_mouse_initialized;
+
+ // ADB keyboard state
+ int m_adb_keybaddr;
+ int m_adb_keybinitialized, m_adb_currentkeys[2], m_adb_modifiers;
+
+ // PRAM for ADB MCU HLEs (mostly unused now)
+ uint8_t m_adb_pram[256];
+
+ int adb_pollkbd(int update);
+ int adb_pollmouse();
+ void adb_accummouse( uint8_t *MouseX, uint8_t *MouseY );
+ void adb_talk();
+
+ void pmu_one_byte_reply(uint8_t result);
+ void pmu_three_byte_reply(uint8_t result1, uint8_t result2, uint8_t result3);
+
+ inline void set_adb_line(int linestate) { write_adb_data(linestate); }
+
+ TIMER_CALLBACK_MEMBER(mac_adb_tick); // macadb.c
+ TIMER_CALLBACK_MEMBER(mac_pmu_tick); // macadb.c
+};
+
+// device type definition
+DECLARE_DEVICE_TYPE(MACADB, macadb_device)
+
+#endif // MAME_MACHINE_MACADB_H