From 5145bae1a49117d15cdcbbdccd6d55f493c6e2f8 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Fri, 16 Sep 2016 14:56:54 +0200 Subject: [PATCH] -cmi2x: Fixed inverted data writes to I8214 PICUs [Ryan Holtz] --- src/mame/drivers/cmi.cpp | 47 +++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/src/mame/drivers/cmi.cpp b/src/mame/drivers/cmi.cpp index 2279fe5477d..587324249f3 100644 --- a/src/mame/drivers/cmi.cpp +++ b/src/mame/drivers/cmi.cpp @@ -343,7 +343,7 @@ void cmi01a_device::device_start() m_zx_timer = timer_alloc(TIMER_ZX); m_zx_timer->adjust(attotime::never); - m_stream = stream_alloc(0,1,44100); + m_stream = stream_alloc(0, 1, 44100); } void cmi01a_device::device_reset() @@ -1965,6 +1965,7 @@ WRITE8_MEMBER( cmi_state::cmi02_w ) case 0x30: m_maincpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + data ^= 0xff; m_i8214_2->b_w(data & 0x7); m_i8214_2->sgs_w((data >> 3) & 1); break; @@ -1996,7 +1997,9 @@ void cmi_state::install_video_ram(int cpunum) WRITE8_MEMBER( cmi_state::i8214_cpu1_w ) { + //printf("i8214_cpu1_w: %02x\n", data); m_maincpu1->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + data ^= 0xff; m_i8214_0->b_w(data & 0x7); m_i8214_0->sgs_w((data >> 3) & 1); } @@ -2005,6 +2008,7 @@ WRITE8_MEMBER( cmi_state::i8214_cpu1_w ) WRITE8_MEMBER( cmi_state::i8214_cpu2_w ) { m_maincpu2->set_input_line(M6809_IRQ_LINE, CLEAR_LINE); + data ^= 0xff; m_i8214_1->b_w(data & 0x7); m_i8214_1->sgs_w((data >> 3) & 1); } @@ -2158,14 +2162,16 @@ IRQ_CALLBACK_MEMBER( cmi_state::cpu2_interrupt_callback ) void cmi_state::set_interrupt(int cpunum, int level, int state) { -// printf("CPU%d Int: %x State: %x (Cur: %x)\n", cpunum, level, state, m_int_state[cpunum]); + //printf("CPU%d Int: %x State: %x (Cur: %x)\n", cpunum, level, state, m_int_state[cpunum]); if (state == ASSERT_LINE) m_int_state[cpunum] |= (1 << level); else m_int_state[cpunum] &= ~(1 << level); - if (cpunum == 0) + //printf("New int state: %02x\n", m_int_state[cpunum]); + + if (cpunum == CPU_1) { if (level < 8) m_i8214_2->r_w(~m_int_state[cpunum]); @@ -2173,21 +2179,26 @@ void cmi_state::set_interrupt(int cpunum, int level, int state) m_i8214_0->r_w(~(m_int_state[cpunum] >> 8)); } else + { m_i8214_1->r_w(~m_int_state[cpunum]); + } } WRITE_LINE_MEMBER( cmi_state::i8214_1_int_w ) { + //printf("i8214_1_int_w: %d\n", state); m_maincpu1->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); } WRITE_LINE_MEMBER( cmi_state::i8214_2_int_w ) { + //printf("i8214_2_int_w: %d\n", state); m_maincpu2->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); } WRITE_LINE_MEMBER( cmi_state::i8214_3_int_w ) { + //printf("i8214_3_int_w: %d\n", state); //if (state) m_hp_int = state; m_maincpu1->set_input_line(M6809_IRQ_LINE, state ? ASSERT_LINE : CLEAR_LINE); @@ -2718,16 +2729,6 @@ static MACHINE_CONFIG_START( cmi2x, cmi_state ) MCFG_FLOPPY_DRIVE_ADD("wd1791:0", cmi2x_floppies, "8dsdd", floppy_image_device::default_floppy_formats) MCFG_FLOPPY_DRIVE_ADD("wd1791:1", cmi2x_floppies, "8dsdd", floppy_image_device::default_floppy_formats) - // Channel cards - MCFG_CMI01A_ADD("cmi01a_0", 0) - MCFG_CMI01A_ADD("cmi01a_1", 1) - MCFG_CMI01A_ADD("cmi01a_2", 2) - MCFG_CMI01A_ADD("cmi01a_3", 3) - MCFG_CMI01A_ADD("cmi01a_4", 4) - MCFG_CMI01A_ADD("cmi01a_5", 5) - MCFG_CMI01A_ADD("cmi01a_6", 6) - MCFG_CMI01A_ADD("cmi01a_7", 7) - /* Musical keyboard */ MCFG_DEVICE_ADD("cmi10_pia_u20", PIA6821, 0) MCFG_PIA_READCB1_HANDLER(READLINE(cmi_state, cmi10_u20_cb1_r)) @@ -2738,6 +2739,26 @@ static MACHINE_CONFIG_START( cmi2x, cmi_state ) MCFG_DEVICE_ADD("cmi10_pia_u21", PIA6821, 0) MCFG_PIA_READPA_HANDLER(READ8(cmi_state, cmi10_u21_a_r)) MCFG_PIA_CB2_HANDLER(WRITELINE(cmi_state, cmi10_u21_cb2_w)) + + MCFG_SPEAKER_STANDARD_MONO("mono") + + // Channel cards + MCFG_CMI01A_ADD("cmi01a_0", 0) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + MCFG_CMI01A_ADD("cmi01a_1", 1) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + MCFG_CMI01A_ADD("cmi01a_2", 2) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + MCFG_CMI01A_ADD("cmi01a_3", 3) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + MCFG_CMI01A_ADD("cmi01a_4", 4) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + MCFG_CMI01A_ADD("cmi01a_5", 5) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + MCFG_CMI01A_ADD("cmi01a_6", 6) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) + MCFG_CMI01A_ADD("cmi01a_7", 7) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MACHINE_CONFIG_END ROM_START( cmi2x )