diff options
Diffstat (limited to 'src/devices/bus/a2bus/mouse.cpp')
-rw-r--r-- | src/devices/bus/a2bus/mouse.cpp | 88 |
1 files changed, 74 insertions, 14 deletions
diff --git a/src/devices/bus/a2bus/mouse.cpp b/src/devices/bus/a2bus/mouse.cpp index e5c2e7fcf84..144c6ed23b8 100644 --- a/src/devices/bus/a2bus/mouse.cpp +++ b/src/devices/bus/a2bus/mouse.cpp @@ -40,8 +40,8 @@ Hookup notes: - PIA port A connects to 68705 port A in its entirety (bi-directional) - PIA PB4-PB7 connects to 68705 PC0-3 (bi-directional) + PIA port A connects to 68705 port A in its entirety (bi-directional with internal pullups) + PIA PB4-PB7 connects to 68705 PC0-3 (bi-directional but should not be pulled up) PIA PB0 is 'sync latch' PIA PB1 is A8 on the EPROM PIA PB2 is A9 on the EPROM @@ -66,6 +66,12 @@ #include "emu.h" #include "mouse.h" +#include "machine/6821pia.h" +#include "cpu/m6805/m68705.h" + + +namespace { + /*************************************************************************** CONSTANTS ***************************************************************************/ @@ -79,11 +85,59 @@ #define MOUSE_YAXIS_TAG "a2mse_y" -/*************************************************************************** - GLOBAL VARIABLES -***************************************************************************/ +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +class a2bus_mouse_device: + public device_t, + public device_a2bus_card_interface +{ +public: + // construction/destruction + a2bus_mouse_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + // optional information overrides + virtual const tiny_rom_entry *device_rom_region() const override; + virtual ioport_constructor device_input_ports() const override; + +protected: + a2bus_mouse_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + virtual void device_add_mconfig(machine_config &config) override; + virtual void device_start() override; + virtual void device_reset() override; + + // overrides of standard a2bus slot functions + virtual uint8_t read_c0nx(uint8_t offset) override; + virtual void write_c0nx(uint8_t offset, uint8_t data) override; + virtual uint8_t read_cnxx(uint8_t offset) override; + + void pia_out_a(uint8_t data); + void pia_out_b(uint8_t data); + void pia_irqa_w(int state); + void pia_irqb_w(int state); + + uint8_t mcu_port_a_r(); + uint8_t mcu_port_b_r(); + void mcu_port_a_w(uint8_t data); + void mcu_port_b_w(uint8_t data); + void mcu_port_c_w(uint8_t data); + + required_device<pia6821_device> m_pia; + required_device<m68705p_device> m_mcu; + required_ioport m_mouseb; + required_ioport_array<2> m_mousexy; + +private: + template <unsigned AXIS, u8 DIR, u8 CLK> void update_axis(); + + required_region_ptr<uint8_t> m_rom; + int m_rom_bank; + uint8_t m_port_a_in, m_port_b_in; + int m_last[2], m_count[2]; +}; -DEFINE_DEVICE_TYPE(A2BUS_MOUSE, a2bus_mouse_device, "a2mouse", "Apple II Mouse Card") ROM_START( mouse ) ROM_REGION(0x800, MOUSE_ROM_REGION, 0) @@ -97,7 +151,7 @@ ROM_START( mouse ) ROM_LOAD( "mmi_pal16r4a,binary.2a", 0x000000, 0x000100, CRC(1da5c745) SHA1(ba267b69a2fda2a2348b140979ece562411bb37b) ) ROM_END -static INPUT_PORTS_START( mouse ) +INPUT_PORTS_START( mouse ) PORT_START(MOUSE_BUTTON_TAG) /* Mouse - button */ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_NAME("Mouse Button") PORT_CODE(MOUSECODE_BUTTON1) @@ -139,6 +193,7 @@ void a2bus_mouse_device::device_add_mconfig(machine_config &config) PIA6821(config, m_pia, 1021800); m_pia->writepa_handler().set(FUNC(a2bus_mouse_device::pia_out_a)); m_pia->writepb_handler().set(FUNC(a2bus_mouse_device::pia_out_b)); + m_pia->tspb_handler().set_constant(0x00); m_pia->irqa_handler().set(FUNC(a2bus_mouse_device::pia_irqa_w)); m_pia->irqb_handler().set(FUNC(a2bus_mouse_device::pia_irqb_w)); } @@ -186,15 +241,11 @@ void a2bus_mouse_device::device_start() save_item(NAME(m_port_b_in)); save_item(NAME(m_last)); save_item(NAME(m_count)); - - m_port_b_in = 0x00; } void a2bus_mouse_device::device_reset() { - m_rom_bank = 0; m_last[0] = m_last[1] = m_count[0] = m_count[1] = 0; - m_port_a_in = 0x00; } /*------------------------------------------------- @@ -231,16 +282,16 @@ void a2bus_mouse_device::pia_out_a(uint8_t data) void a2bus_mouse_device::pia_out_b(uint8_t data) { - m_mcu->pc_w(0xf0 | ((data >> 4) & 0x0f)); + m_mcu->pc_w(data >> 4); m_rom_bank = (data & 0xe) << 7; } -WRITE_LINE_MEMBER(a2bus_mouse_device::pia_irqa_w) +void a2bus_mouse_device::pia_irqa_w(int state) { } -WRITE_LINE_MEMBER(a2bus_mouse_device::pia_irqb_w) +void a2bus_mouse_device::pia_irqb_w(int state) { } @@ -327,3 +378,12 @@ template <unsigned AXIS, u8 DIR, u8 CLK> void a2bus_mouse_device::update_axis() } } } + +} + + +/*************************************************************************** + GLOBAL VARIABLES +***************************************************************************/ + +DEFINE_DEVICE_TYPE_PRIVATE(A2BUS_MOUSE, device_a2bus_card_interface, a2bus_mouse_device, "a2mouse", "Apple II Mouse Card") |