diff --git a/src/devices/cpu/cop400/cop400.cpp b/src/devices/cpu/cop400/cop400.cpp index dc9ca865e3f..51af8f2cdff 100644 --- a/src/devices/cpu/cop400/cop400.cpp +++ b/src/devices/cpu/cop400/cop400.cpp @@ -176,6 +176,7 @@ cop400_cpu_device::cop400_cpu_device(const machine_config &mconfig, device_type , m_program_config("program", ENDIANNESS_LITTLE, 8, program_addr_bits, 0, internal_map_program) , m_data_config("data", ENDIANNESS_LITTLE, 8, data_addr_bits, 0, internal_map_data) // data width is really 4 , m_read_l(*this) + , m_read_l_tristate(*this) , m_write_l(*this) , m_read_g(*this) , m_write_g(*this) @@ -904,6 +905,7 @@ void cop400_cpu_device::device_start() /* find i/o handlers */ m_read_l.resolve_safe(0); + m_read_l_tristate.resolve_safe(0); m_write_l.resolve_safe(); m_read_g.resolve_safe(0); m_write_g.resolve_safe(); diff --git a/src/devices/cpu/cop400/cop400.h b/src/devices/cpu/cop400/cop400.h index bace4710008..2f907afc933 100644 --- a/src/devices/cpu/cop400/cop400.h +++ b/src/devices/cpu/cop400/cop400.h @@ -20,6 +20,9 @@ cop400_cpu_device::set_read_l_callback(*device, DEVCB_##_devcb); #define MCFG_COP400_WRITE_L_CB(_devcb) \ cop400_cpu_device::set_write_l_callback(*device, DEVCB_##_devcb); +// output state when pins are in tri-state, default 0 +#define MCFG_COP400_READ_L_TRISTATE_CB(_devcb) \ + cop400_cpu_device::set_read_l_tristate_callback(*device, DEVCB_##_devcb); // G pins: 4-bit bi-directional #define MCFG_COP400_READ_G_CB(_devcb) \ @@ -125,6 +128,7 @@ public: // static configuration helpers template static devcb_base &set_read_l_callback(device_t &device, _Object object) { return downcast(device).m_read_l.set_callback(object); } + template static devcb_base &set_read_l_tristate_callback(device_t &device, _Object object) { return downcast(device).m_read_l_tristate.set_callback(object); } template static devcb_base &set_write_l_callback(device_t &device, _Object object) { return downcast(device).m_write_l.set_callback(object); } template static devcb_base &set_read_g_callback(device_t &device, _Object object) { return downcast(device).m_read_g.set_callback(object); } template static devcb_base &set_write_g_callback(device_t &device, _Object object) { return downcast(device).m_write_g.set_callback(object); } @@ -176,6 +180,7 @@ protected: // i/o handlers devcb_read8 m_read_l; + devcb_read8 m_read_l_tristate; devcb_write8 m_write_l; devcb_read8 m_read_g; devcb_write8 m_write_g; diff --git a/src/devices/cpu/cop400/cop400op.hxx b/src/devices/cpu/cop400/cop400op.hxx index 156f77bbad6..a99a0271471 100644 --- a/src/devices/cpu/cop400/cop400op.hxx +++ b/src/devices/cpu/cop400/cop400op.hxx @@ -950,7 +950,8 @@ INSTRUCTION( lei ) } else { - OUT_L(0); + // tri-state(floating) pins + OUT_L(m_read_l_tristate(0, 0xff)); } } diff --git a/src/mame/drivers/hh_cop400.cpp b/src/mame/drivers/hh_cop400.cpp index d56a149e5d2..9e2557192fa 100644 --- a/src/mame/drivers/hh_cop400.cpp +++ b/src/mame/drivers/hh_cop400.cpp @@ -718,6 +718,7 @@ public: DECLARE_WRITE8_MEMBER(write_d); DECLARE_WRITE8_MEMBER(write_l); DECLARE_WRITE8_MEMBER(write_g); + DECLARE_READ8_MEMBER(read_l_tristate) { return 0xff; } DECLARE_INPUT_CHANGED_MEMBER(reset_button); }; @@ -735,7 +736,7 @@ WRITE8_MEMBER(funrlgl_state::write_l) { // L0-L3: led state // L4-L7: N/C - m_l = data & 0xf; + m_l = ~data & 0xf; display_matrix(4, 4, m_l, m_d); } @@ -775,6 +776,7 @@ static MACHINE_CONFIG_START( funrlgl, funrlgl_state ) MCFG_COP400_CONFIG(COP400_CKI_DIVISOR_8, COP400_CKO_OSCILLATOR_OUTPUT, true) // guessed MCFG_COP400_WRITE_D_CB(WRITE8(funrlgl_state, write_d)) MCFG_COP400_WRITE_L_CB(WRITE8(funrlgl_state, write_l)) + MCFG_COP400_READ_L_TRISTATE_CB(READ8(funrlgl_state, read_l_tristate)) MCFG_COP400_WRITE_G_CB(WRITE8(funrlgl_state, write_g)) MCFG_COP400_READ_G_CB(IOPORT("IN.0")) @@ -1344,7 +1346,7 @@ CONS( 1980, h2hbaskb, 0, 0, h2hbaskb, h2hbaskb, driver_device, 0, "Col CONS( 1981, einvaderc, einvader, 0, einvaderc, einvaderc, driver_device, 0, "Entex", "Space Invader (Entex, COP444L version)", MACHINE_SUPPORTS_SAVE | MACHINE_REQUIRES_ARTWORK ) CONS( 1979, funjacks, 0, 0, funjacks, funjacks, driver_device, 0, "Mattel", "Funtronics Jacks", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) -CONS( 1979, funrlgl, 0, 0, funrlgl, funrlgl, driver_device, 0, "Mattel", "Funtronics Red Light Green Light", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) +CONS( 1979, funrlgl, 0, 0, funrlgl, funrlgl, driver_device, 0, "Mattel", "Funtronics Red Light Green Light", MACHINE_SUPPORTS_SAVE ) CONS( 1980, plus1, 0, 0, plus1, plus1, driver_device, 0, "Milton Bradley", "Plus One", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // *** CONS( 1981, lightfgt, 0, 0, lightfgt, lightfgt, driver_device, 0, "Milton Bradley", "Lightfight", MACHINE_SUPPORTS_SAVE | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/layout/funrlgl.lay b/src/mame/layout/funrlgl.lay index 408152ab748..27141d341f9 100644 --- a/src/mame/layout/funrlgl.lay +++ b/src/mame/layout/funrlgl.lay @@ -18,9 +18,9 @@ - + - + @@ -40,27 +40,5 @@ - - - - - - - - - - - - - - - - - - - - - -