diff options
Diffstat (limited to 'src/mame/machine/amstrad.cpp')
-rw-r--r-- | src/mame/machine/amstrad.cpp | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/src/mame/machine/amstrad.cpp b/src/mame/machine/amstrad.cpp index 13109d4da1f..7a6ba398b73 100644 --- a/src/mame/machine/amstrad.cpp +++ b/src/mame/machine/amstrad.cpp @@ -2698,13 +2698,28 @@ uint8_t amstrad_state::amstrad_psg_porta_read() { if(m_system_type != SYSTEM_GX4000) { - if (m_io_ctrltype.read_safe(0) == 1 && (m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F) == 9) + if (m_io_ctrltype.read_safe(0) == 0 && (m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F) == 9) { - return m_amx_mouse_data; + return (m_io_kbrow[m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F].read_safe(0) & 0x80) | 0x7f; } + // AMX mouse if (m_io_ctrltype.read_safe(0) == 2 && (m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F) == 9) { - return (m_io_kbrow[m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F].read_safe(0) & 0x80) | 0x7f; + return m_amx_mouse_data; + } + // Cheetah 125 Special rotational joystick + if (m_io_ctrltype.read_safe(0) == 4 && (m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F) == 9) + { + return (m_io_kbrow[m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F].read_safe(0) & 0x80) | (m_io_cheetah->read() & 0x1f) | 0x60; + } + if (m_io_ctrltype.read_safe(0) == 4 && (m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F) == 6) + { + uint8_t p = (m_io_kbrow[m_ppi_port_outputs[amstrad_ppi_PortC] & 0x0F].read_safe(0)); + if(!(m_io_cheetah->read() & 0x20)) + p &= ~0x04; + if(!(m_io_cheetah->read() & 0x40)) + p &= ~0x08; + return p; } } @@ -2743,7 +2758,7 @@ IRQ_CALLBACK_MEMBER(amstrad_state::amstrad_cpu_acknowledge_int) if(m_system_type != SYSTEM_GX4000) { // update AMX mouse inputs (normally done every 1/300th of a second) - if (m_io_ctrltype.read_safe(0) == 1) + if (m_io_ctrltype.read_safe(0) == 2) { static uint8_t prev_x,prev_y; uint8_t data_x, data_y; |