Fix cdimono1 and quizard crash bugs, nw

This commit is contained in:
therealmogminer@gmail.com 2015-12-30 01:13:00 +01:00
parent e298126108
commit 46d8122241
2 changed files with 24 additions and 17 deletions

View File

@ -163,14 +163,14 @@ INPUT_CHANGED_MEMBER(cdi_state::mcu_input)
static INPUT_PORTS_START( cdi )
PORT_START("MOUSEX")
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED_MEMBER("slave", cdislave_device, mouse_update, 0)
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0)
PORT_START("MOUSEY")
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED_MEMBER("slave", cdislave_device, mouse_update, 0)
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0)
PORT_START("MOUSEBTN")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 1") PORT_CHANGED_MEMBER("slave", cdislave_device, mouse_update, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 2") PORT_CHANGED_MEMBER("slave", cdislave_device, mouse_update, 0)
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 1") PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 2") PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0)
PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("DEBUG")
@ -204,14 +204,14 @@ INPUT_PORTS_END
static INPUT_PORTS_START( cdimono2 )
PORT_START("MOUSEX")
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) //PORT_CHANGED_MEMBER("slave", cdislave_device, mouse_update, 0)
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) //PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0)
PORT_START("MOUSEY")
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) //PORT_CHANGED_MEMBER("slave", cdislave_device, mouse_update, 0)
PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) //PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0)
PORT_START("MOUSEBTN")
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 1") //PORT_CHANGED_MEMBER("slave", cdislave_device, mouse_update, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 2") //PORT_CHANGED_MEMBER("slave", cdislave_device, mouse_update, 0)
PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 1") //PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0)
PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 2") //PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0)
PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_START("DEBUG")
@ -276,6 +276,7 @@ MACHINE_RESET_MEMBER( cdi_state, cdimono1 )
UINT16 *dst = m_planea;
memcpy(dst, src, 0x8);
memset(m_servo_io_regs, 0, 0x20);
memset(m_slave_io_regs, 0, 0x20);
m_maincpu->reset();
@ -408,10 +409,11 @@ READ8_MEMBER( cdi_state::servo_io_r )
verboselog(*this, 1, "SERVO Port A Data read (%02x)\n", ret);
break;
case m68hc05eg_io_reg_t::PORT_B_DATA:
ret = 0x08;
verboselog(*this, 1, "SERVO Port B Data read (%02x)\n", ret);
ret |= 0x08;
break;
case m68hc05eg_io_reg_t::PORT_C_DATA:
ret |= INV_CADDYSWITCH_IN;
verboselog(*this, 1, "SERVO Port C Data read (%02x)\n", ret);
break;
case m68hc05eg_io_reg_t::PORT_D_INPUT:
@ -511,13 +513,13 @@ WRITE8_MEMBER( cdi_state::servo_io_w )
{
case m68hc05eg_io_reg_t::PORT_A_DATA:
verboselog(*this, 1, "SERVO Port A Data write (%02x)\n", data);
break;
return;
case m68hc05eg_io_reg_t::PORT_B_DATA:
verboselog(*this, 1, "SERVO Port B Data write (%02x)\n", data);
break;
return;
case m68hc05eg_io_reg_t::PORT_C_DATA:
verboselog(*this, 1, "SERVO Port C Data write (%02x)\n", data);
break;
return;
case m68hc05eg_io_reg_t::PORT_D_INPUT:
verboselog(*this, 1, "SERVO Port D Input write (%02x)\n", data);
return;
@ -708,13 +710,13 @@ WRITE8_MEMBER( cdi_state::slave_io_w )
{
case m68hc05eg_io_reg_t::PORT_A_DATA:
verboselog(*this, 1, "SLAVE Port A Data write (%02x)\n", data);
break;
return;
case m68hc05eg_io_reg_t::PORT_B_DATA:
verboselog(*this, 1, "SLAVE Port B Data write (%02x)\n", data);
break;
return;
case m68hc05eg_io_reg_t::PORT_C_DATA:
verboselog(*this, 1, "SLAVE Port C Data write (%02x)\n", data);
break;
return;
case m68hc05eg_io_reg_t::PORT_D_INPUT:
verboselog(*this, 1, "SLAVE Port D Input write (%02x)\n", data);
return;
@ -868,8 +870,6 @@ static MACHINE_CONFIG_START( cdimono2, cdi_state )
MCFG_MACHINE_RESET_OVERRIDE( cdi_state, cdimono2 )
MCFG_CDI68070_ADD("scc68070")
//MCFG_CDICDIC_ADD("cdic")
//MCFG_CDISLAVE_ADD("slave")
MCFG_CPU_ADD("servo", M68HC05EG, 2000000) /* Unknown clock speed, docs say 2MHz internal clock */
MCFG_CPU_PROGRAM_MAP(cdimono2_servo_mem)
MCFG_CPU_ADD("slave", M68HC05EG, 2000000) /* Unknown clock speed, docs say 2MHz internal clock */

View File

@ -64,6 +64,13 @@ public:
ACOUNT_LO = 0x1b
};
enum servo_portc_bit_t
{
INV_JUC_OUT = (1 << 2),
INV_DIV4_IN = (1 << 5),
INV_CADDYSWITCH_IN = (1 << 7)
};
required_device<cpu_device> m_maincpu;
required_shared_ptr<UINT16> m_planea;
required_shared_ptr<UINT16> m_planeb;