summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author MetalliC <0vetal0@gmail.com>2020-08-21 23:34:25 +0300
committer MetalliC <0vetal0@gmail.com>2020-08-21 23:34:25 +0300
commit89818f6456d7be391bf950c8410d35035f98047e (patch)
tree6ccfe3b2803eaa39067012725a33e3ad93fb9194
parentfcb4c2eece18c6b19aeae9792ace88a94cceed64 (diff)
midxunit.cpp bad PIC16 dump was manually restored, hooked to driver
-rw-r--r--src/mame/drivers/midxunit.cpp13
-rw-r--r--src/mame/includes/midxunit.h12
-rw-r--r--src/mame/machine/midxunit.cpp27
3 files changed, 29 insertions, 23 deletions
diff --git a/src/mame/drivers/midxunit.cpp b/src/mame/drivers/midxunit.cpp
index 9194d3f793e..023c6f4c4ea 100644
--- a/src/mame/drivers/midxunit.cpp
+++ b/src/mame/drivers/midxunit.cpp
@@ -292,9 +292,12 @@ void midxunit_state::midxunit(machine_config &config)
screen.set_screen_update("maincpu", FUNC(tms34010_device::tms340x0_ind16));
screen.set_palette(m_palette);
- MIDWAY_SERIAL_PIC(config, m_midway_serial_pic, 0);
- /* serial prefixes 419, 420 */
- m_midway_serial_pic->set_upper(419);
+ PIC16C57(config, m_pic, 625000); // need to be verified
+ m_pic->read_a().set([this]() { return m_pic_command; });
+ m_pic->write_b().set([this](u8 data) { m_pic_data = data; });
+ m_pic->read_c().set([this]() { return m_pic_clk ^ 1; });
+ m_pic->write_c().set([this](u8 data) { m_pic_status = BIT(data, 1); });
+ // there also should be PIC16 reset line control, unknown at the moment
adc0848_device &adc(ADC0848(config, "adc"));
adc.intr_callback().set(FUNC(midxunit_state::adc_int_w)); // ADC INT passed through PLSI1032
@@ -335,7 +338,7 @@ ROM_START( revx )
ROM_LOAD32_BYTE( "revx.54", 0x00003, 0x80000, CRC(24471269) SHA1(262345bd147402100785459af422dafd1c562787) )
ROM_REGION( 0x2000, "pic", 0 )
- ROM_LOAD( "revx_16c57.bin", 0x0000000, 0x2000, BAD_DUMP CRC(eb8a8649) SHA1(a1e1d0b7a5e9802e8f889eb7e719259656dc8133) ) // garbage, useless
+ ROM_LOAD( "revx_16c57.bin", 0x0000000, 0x2000, BAD_DUMP CRC(517e0110) SHA1(cd603c66794ff426dd2994fc1a0c0c8e6bbd864b) ) // manually restored
ROM_REGION( 0x1000000, "gfxrom", 0 )
ROM_LOAD32_BYTE( "revx.120", 0x0000000, 0x80000, CRC(523af1f0) SHA1(a67c0fd757e860fc1c1236945952a295b4d5df5a) )
@@ -402,7 +405,7 @@ ROM_START( revxp5 )
ROM_LOAD32_BYTE( "revx_p5.54", 0x00003, 0x80000, CRC(fd684c31) SHA1(db3453792e4d9fc375297d030f0b3f9cc3cad925) )
ROM_REGION( 0x2000, "pic", 0 )
- ROM_LOAD( "revx_16c57.bin", 0x0000000, 0x2000, BAD_DUMP CRC(eb8a8649) SHA1(a1e1d0b7a5e9802e8f889eb7e719259656dc8133) ) // garbage, useless
+ ROM_LOAD( "revx_16c57.bin", 0x0000000, 0x2000, BAD_DUMP CRC(517e0110) SHA1(cd603c66794ff426dd2994fc1a0c0c8e6bbd864b) ) // manually restored
ROM_REGION( 0x1000000, "gfxrom", 0 )
ROM_LOAD32_BYTE( "revx.120", 0x0000000, 0x80000, CRC(523af1f0) SHA1(a67c0fd757e860fc1c1236945952a295b4d5df5a) )
diff --git a/src/mame/includes/midxunit.h b/src/mame/includes/midxunit.h
index 0b3929cbe3d..ea70966c5ea 100644
--- a/src/mame/includes/midxunit.h
+++ b/src/mame/includes/midxunit.h
@@ -12,7 +12,7 @@
#include "audio/dcs.h"
#include "cpu/tms34010/tms34010.h"
-#include "machine/midwayic.h"
+#include "cpu/pic16c5x/pic16c5x.h"
#include "machine/nvram.h"
#include "video/midtunit.h"
#include "emupal.h"
@@ -29,7 +29,7 @@ public:
, m_palette(*this, "palette")
, m_gfxrom(*this, "gfxrom")
, m_nvram(*this, "nvram")
- , m_midway_serial_pic(*this, "serial_pic")
+ , m_pic(*this, "pic")
, m_gun_recoil(*this, "Player%u_Gun_Recoil", 1U)
, m_gun_led(*this, "Player%u_Gun_LED", 1U)
{ }
@@ -65,16 +65,20 @@ private:
required_memory_region m_gfxrom;
required_device<nvram_device> m_nvram;
- required_device<midway_serial_pic_device> m_midway_serial_pic;
+ required_device<pic16c57_device> m_pic;
output_finder<3> m_gun_recoil;
output_finder<3> m_gun_led;
uint8_t m_cmos_write_enable;
uint16_t m_iodata[8];
uint8_t m_uart[8];
- uint8_t m_security_bits;
bool m_adc_int;
std::unique_ptr<uint8_t[]> m_nvram_data;
+
+ uint8_t m_pic_command;
+ uint8_t m_pic_data;
+ uint8_t m_pic_clk;
+ uint8_t m_pic_status;
};
#endif // MAME_INCLUDES_MIDXUNIT_H
diff --git a/src/mame/machine/midxunit.cpp b/src/mame/machine/midxunit.cpp
index dd71a134323..dc7f77e2e71 100644
--- a/src/mame/machine/midxunit.cpp
+++ b/src/mame/machine/midxunit.cpp
@@ -103,7 +103,7 @@ WRITE_LINE_MEMBER(midxunit_state::adc_int_w)
uint16_t midxunit_state::midxunit_status_r()
{
/* low bit indicates whether the ADC is done reading the current input */
- return (m_midway_serial_pic->status_r() << 1) | (m_adc_int ? 1 : 0);
+ return (m_pic_status << 1) | (m_adc_int ? 1 : 0);
}
@@ -247,9 +247,13 @@ void midxunit_state::machine_start()
save_item(NAME(m_cmos_write_enable));
save_item(NAME(m_iodata));
save_item(NAME(m_uart));
- save_item(NAME(m_security_bits));
save_item(NAME(m_adc_int));
save_pointer(NAME(m_nvram_data), 0x2000);
+
+ save_item(NAME(m_pic_command));
+ save_item(NAME(m_pic_data));
+ save_item(NAME(m_pic_clk));
+ save_item(NAME(m_pic_status));
}
void midxunit_state::machine_reset()
@@ -258,7 +262,10 @@ void midxunit_state::machine_reset()
m_dcs->reset_w(0);
m_dcs->reset_w(1);
- m_security_bits = 0;
+ m_pic_command = 0;
+ m_pic_data = 0;
+ m_pic_clk = 0;
+ m_pic_status = 0;
m_dcs->set_io_callbacks(write_line_delegate(*this, FUNC(midxunit_state::midxunit_dcs_output_full)), write_line_delegate(*this));
}
@@ -273,28 +280,20 @@ void midxunit_state::machine_reset()
uint16_t midxunit_state::midxunit_security_r()
{
- return m_midway_serial_pic->read();
+ return m_pic_data;
}
void midxunit_state::midxunit_security_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
if (ACCESSING_BITS_0_7)
- {
- m_security_bits &= ~0xf;
- m_security_bits |= data & 0xf;
- m_midway_serial_pic->write(m_security_bits ^ 0x10);
- }
+ m_pic_command = data & 0x0f;
}
void midxunit_state::midxunit_security_clock_w(offs_t offset, uint16_t data, uint16_t mem_mask)
{
if (offset == 0 && ACCESSING_BITS_0_7)
- {
- m_security_bits &= ~0x10;
- m_security_bits |= BIT(data, 1) << 4;
- m_midway_serial_pic->write(m_security_bits ^ 0x10);
- }
+ m_pic_clk = BIT(data, 1);
}