1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
|
// 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; }
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; }
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;
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;
int m_adb_linein;
#define kADBKeyBufSize 32
uint8_t m_adb_keybuf[kADBKeyBufSize];
uint8_t m_adb_keybuf_start;
uint8_t m_adb_keybuf_end;
// 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;
int adb_pollkbd(int update);
int adb_pollmouse();
void adb_accummouse( uint8_t *MouseX, uint8_t *MouseY );
void adb_talk();
inline void set_adb_line(int linestate) { write_adb_data(linestate); }
TIMER_CALLBACK_MEMBER(mac_adb_tick);
};
// device type definition
DECLARE_DEVICE_TYPE(MACADB, macadb_device)
#endif // MAME_MACHINE_MACADB_H
|