From d249f7394e1c21840cabab7e08c9d37c7cdd7268 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Tue, 20 Jun 2017 16:44:02 +0100 Subject: use dumped M68705 for fieldday / undoukai [ShouTime, brizzo] --- src/mame/drivers/40love.cpp | 291 ++------------------------------------------ src/mame/includes/40love.h | 11 -- 2 files changed, 11 insertions(+), 291 deletions(-) diff --git a/src/mame/drivers/40love.cpp b/src/mame/drivers/40love.cpp index 50302081763..40abe27ebf1 100644 --- a/src/mame/drivers/40love.cpp +++ b/src/mame/drivers/40love.cpp @@ -342,245 +342,6 @@ READ8_MEMBER(fortyl_state::pix2_r) } -/**************************************************************************** - fake MCU (undoukai and field day) -****************************************************************************/ - -static const uint8_t mcu_data0[0x80] = -{ - 0x0a,0x08,0x0f,0x07,0x06,0x05,0x04,0x00, - 0x0a,0x0b,0x15,0x02,0x03,0x15,0x0a,0x08, - 0x0f,0x07,0x06,0x05,0x04,0x0c,0x01,0x0c, - 0x01,0x15,0x0b,0x0a,0x00,0x0d,0x0e,0x15, - 0x0a,0x08,0x0f,0x07,0x06,0x05,0x04,0x0b, - 0x09,0x0c,0x01,0x0c,0x01,0x15,0x0a,0x08, - 0x0f,0x07,0x06,0x05,0x04,0x0c,0x0c,0x01, - 0x0c,0x0c,0xff,0xe1,0x23,0xc5,0xc9,0x15, - - 0x3e,0x4a,0xcd,0x2b,0x00,0x4e,0x79,0xf6, - 0xa0,0xe6,0xa2,0xcb,0xcf,0xf5,0x0e,0x62, - 0xcd,0x35,0x00,0xcb,0xc9,0x79,0xe6,0x02, - 0x5f,0xe1,0x4b,0x69,0x3e,0x00,0x2e,0x38, - 0xb5,0x6f,0x06,0x23,0x11,0xfe,0xdf,0x1a, - 0x27,0x77,0xe6,0x01,0x5f,0x16,0x00,0xcb, - 0xfe,0x19,0x05,0x78,0x20,0xee,0xc1,0xe1, - 0x23,0xc5,0xc9,0xee,0x37,0x28,0xc0,0xc5 -}; - -static const uint8_t mcu_data1[0x80] = -{ - 0x00,0x78,0xef,0x66,0xdc,0x50,0xc2,0x33, - 0xa1,0x0c,0x74,0xd9,0x3a,0x96,0xef,0x42, - 0x90,0xd9,0x1c,0x58,0x8f,0xbe,0xe6,0x07, - 0x20,0x31,0x39,0x39,0x2f,0x1c,0x00,0xda, - 0xa9,0x6d,0x27,0xd6,0x79,0x11,0x9c,0x1b, - 0x8e,0xf3,0x4c,0x97,0xd5,0x05,0x27,0x3a, - 0x3f,0x35,0x1b,0xf3,0xbb,0x73,0x1c,0xb4, - 0x3c,0xb3,0x1a,0x6f,0xb4,0xe7,0x09,0x19, - 0x17,0x04,0xde,0xa6,0x5c,0xff,0x90,0x0e, - 0x78,0xd0,0x15,0x47,0x65,0x70,0x68,0x4c, - 0x1c,0xd9,0x82,0x18,0x99,0x07,0x60,0xa6, - 0xd8,0xf6,0x00,0x30,0x08,0x31,0x02,0xb7, - 0x81,0xfa,0x30,0x02,0x01,0x01,0x14,0x30, - 0x07,0xd6,0x7e,0x30,0x1d,0x15,0x25,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -}; - -static const uint8_t mcu_data2[0x80] = -{ - 0x00,0x04,0x08,0x00,0x11,0x16,0x1a,0x1f, - 0x23,0x28,0x2c,0x30,0x35,0x39,0x3d,0x42, - 0x46,0x4a,0x4f,0x53,0x57,0x5b,0x5f,0x64, - 0x68,0x6c,0x70,0x74,0x78,0x7c,0x80,0x83, - 0x87,0x8b,0x8f,0x92,0x96,0x9a,0x90,0xa1, - 0xa4,0xa7,0xa8,0xae,0xb1,0xb5,0xb8,0xbb, - 0xbe,0xc1,0xc4,0xc6,0xc9,0xcc,0xcf,0xd1, - 0xd4,0xd6,0xd9,0xdb,0xdd,0xdf,0xe2,0xe4, - 0xe6,0xe8,0xe9,0xeb,0xed,0xee,0xf0,0xf2, - 0xf3,0xf4,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb, - 0xfc,0xfc,0xfd,0xfe,0xfe,0xff,0xff,0xff, - 0xff,0xff,0x00,0x3d,0x26,0xbe,0xd6,0x6c, - 0x30,0xa6,0xb7,0x81,0x01,0x04,0x14,0xb6, - 0xa4,0x97,0x02,0xb7,0x81,0x1b,0x13,0x23, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, - 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff -}; - - -WRITE8_MEMBER(fortyl_state::undoukai_mcu_w) -{ - int ram_adr = m_mcu_ram[0x1b5] * 0x100 + m_mcu_ram[0x1b4]; - - int d, i; - - // logerror("mcu_w %02x\n", data); - - - if (m_mcu_cmd != -1) - { - m_mcu_in[(m_mcu_cmd & 0x10) >> 4][m_mcu_cmd & 0x0f] = data; - m_mcu_cmd = -1; - } - else - { - switch (data) - { - case 0xc0: - case 0xc1: - case 0xc2: - case 0xc3: - case 0xc4: - case 0xc5: - case 0xc6: - case 0xc7: - m_mcu_cmd = (data & 0x0f) | 0x10; - break; - - case 0xb0: - case 0xb1: - case 0xb2: - case 0xb3: - m_mcu_cmd = data & 0x0f; - break; - - case 0x30: - case 0x31: - case 0x32: - case 0x33: - case 0x34: - case 0x35: - case 0x36: - case 0x37: - case 0x38: - case 0x39: - m_from_mcu = m_mcu_out[0][data & 0x0f]; - break; - - case 0x40: - case 0x41: - case 0x42: - m_from_mcu = m_mcu_out[1][data & 0x0f]; - break; - - - case 0x01: - m_mcu_out[0][0] = (m_mcu_in[0][0] ^ (m_mcu_in[0][0] >> 4)) & 0x0f; - break; - - case 0x02: - if (m_mcu_in[0][3] != 0x00) - { - m_mcu_out[0][1] = 0x0c; - m_mcu_out[0][2] = 0x00; - } - else - { - m_mcu_out[0][2] = 0xa2; - switch (m_mcu_in[0][0] & 0x03) - { - case 0: m_mcu_out[0][1] = 0x55; break; - case 1: m_mcu_out[0][1] = 0x3d; break; - case 2: m_mcu_out[0][1] = 0x45; break; - case 3: m_mcu_out[0][1] = 0x4d; break; - } - } - break; - - case 0x03: - m_mcu_out[0][1] = (((m_mcu_in[0][0] * 8) & 0x38) -1) & 0xff ; - - if (m_mcu_in[0][1] | m_mcu_in[0][2]) - d = 0x40; - else - d = 0x00; - - for (i = 0; i < 8; i++) - m_mcu_out[0][i + 2] = mcu_data0[((m_mcu_out[0][1] + i) & 0x3f) + d]; - break; - - case 0x04: - m_mcu_out[0][0] = ((m_mcu_in[0][0] & 0x0f) << 4) + (m_mcu_in[0][1] & 0x0f); - m_mcu_out[0][1] = ((m_mcu_in[0][2] & 0x0f) << 4) + (m_mcu_in[0][3] & 0x0f); - break; - - case 0x05: -// m_mcu_out[0][0] = 255 * cos(PI * m_mcu_in[0][0] / 180); -// m_mcu_out[0][1] = 255 * sin(PI * m_mcu_in[0][0] / 180); - - d = m_mcu_in[0][0] & 0x7f; - m_mcu_out[0][0] = mcu_data1[d]; - m_mcu_out[0][1] = mcu_data2[d]; - break; - - case 0x06: - if (m_mcu_in[0][0] != 0x00) - m_mcu_out[0][0] = 0xfa; - else - switch (m_mcu_in[0][1]) - { - case 0x00: m_mcu_out[0][0] = 0x02; break; - case 0x01: m_mcu_out[0][0] = 0x01; break; - case 0x02: m_mcu_out[0][0] = 0x01; break; - case 0x03: m_mcu_out[0][0] = 0x04; break; - case 0x04: m_mcu_out[0][0] = 0x01; break; - case 0x05: m_mcu_out[0][0] = 0x14; break; - case 0x06: m_mcu_out[0][0] = 0x14; break; - case 0x07: m_mcu_out[0][0] = 0xb6; break; - default: - // popmessage("cmd06: %02x %02x", m_mcu_in[0][0], m_mcu_in[0][1]); - logerror("cmd06: %02x %02x\n", m_mcu_in[0][0], m_mcu_in[0][1]); - } - break; - - case 0x07: - switch (m_mcu_in[0][0] & 7) - { - case 0: m_mcu_out[0][0] = 0x1d; break; - case 1: m_mcu_out[0][0] = 0x1b; break; - case 2: m_mcu_out[0][0] = 0x15; break; - case 3: m_mcu_out[0][0] = 0x13; break; - case 4: m_mcu_out[0][0] = 0x25; break; - case 5: m_mcu_out[0][0] = 0x23; break; - case 6: m_mcu_out[0][0] = 0xff; break; - case 7: m_mcu_out[0][0] = 0xff; break; - } - break; - - case 0x0e: - - if(ram_adr >= 0xa000 && ram_adr < 0xa800) - { - ram_adr = ram_adr - 0xa000; - m_mcu_out[1][0] = m_mcu_ram[ram_adr]; - m_mcu_out[1][1] = m_mcu_ram[ram_adr + 1]; - m_mcu_out[1][2] = m_mcu_ram[ram_adr + 2] & 0x0f; - } - break; - - default: - m_from_mcu = 0x5d; - -// popmessage("unknown cmd%02x: %02x %02x %02x %02x", data, m_mcu_in[0][0], m_mcu_in[0][1], m_mcu_in[0][2], m_mcu_in[0][3]); -// logerror("unknown cmd%02x: %02x %02x %02x %02x\n", data, m_mcu_in[0][0], m_mcu_in[0][1], m_mcu_in[0][2], m_mcu_in[0][3]); - } - } -} - -READ8_MEMBER(fortyl_state::undoukai_mcu_r) -{ - // logerror("mcu_r %02x\n", m_from_mcu); - - return m_from_mcu; -} - -READ8_MEMBER(fortyl_state::undoukai_mcu_status_r) -{ - int res = 3; - - return res; -} - /***************************************************************************/ DRIVER_INIT_MEMBER(fortyl_state,undoukai) @@ -668,8 +429,8 @@ static ADDRESS_MAP_START( undoukai_map, AS_PROGRAM, 8, fortyl_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8000, 0x9fff) AM_ROMBANK("bank1") AM_RANGE(0xa000, 0xa7ff) AM_RAM AM_SHARE("mcu_ram") /* M5517P on main board */ - AM_RANGE(0xa800, 0xa800) AM_READWRITE(undoukai_mcu_r, undoukai_mcu_w) - AM_RANGE(0xa801, 0xa801) AM_READWRITE(undoukai_mcu_status_r, pix1_w) //pixel layer related + AM_RANGE(0xa800, 0xa800) AM_DEVREADWRITE("bmcu", taito68705_mcu_device, data_r, data_w) + AM_RANGE(0xa801, 0xa801) AM_READWRITE(fortyl_mcu_status_r, pix1_w) //pixel layer related AM_RANGE(0xa802, 0xa802) AM_WRITE(bank_select_w) AM_RANGE(0xa803, 0xa803) AM_READWRITE(pix2_r, pix2_w) //pixel layer related AM_RANGE(0xa804, 0xa804) AM_READWRITE(from_snd_r, sound_command_w) @@ -988,18 +749,6 @@ MACHINE_START_MEMBER(fortyl_state,40love) save_item(NAME(m_snd_ctrl3)); } -MACHINE_START_MEMBER(fortyl_state,undoukai) -{ - MACHINE_START_CALL_MEMBER(40love); - - /* fake mcu */ - save_item(NAME(m_from_mcu)); - save_item(NAME(m_mcu_cmd)); - save_item(NAME(m_mcu_in[0])); - save_item(NAME(m_mcu_in[1])); - save_item(NAME(m_mcu_out[0])); - save_item(NAME(m_mcu_out[1])); -} MACHINE_RESET_MEMBER(fortyl_state,common) { @@ -1027,25 +776,6 @@ MACHINE_RESET_MEMBER(fortyl_state,40love) MACHINE_RESET_CALL_MEMBER(common); } -MACHINE_RESET_MEMBER(fortyl_state,undoukai) -{ - int i; - - MACHINE_RESET_CALL_MEMBER(common); - - /* fake mcu */ - m_from_mcu = 0xff; - m_mcu_cmd = -1; - - for (i = 0; i < 16; i++) - { - m_mcu_in[0][i] = 0; - m_mcu_in[1][i] = 0; - m_mcu_out[0][i] = 0; - m_mcu_out[1][i] = 0; - } -} - static MACHINE_CONFIG_START( 40love ) /* basic machine hardware */ @@ -1115,10 +845,11 @@ static MACHINE_CONFIG_START( undoukai ) MCFG_CPU_PROGRAM_MAP(sound_map) MCFG_CPU_PERIODIC_INT_DRIVER(fortyl_state, irq0_line_hold, 2*60) /* source/number of IRQs is unknown */ -// MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, 18432000/6) - - MCFG_MACHINE_START_OVERRIDE(fortyl_state,undoukai) - MCFG_MACHINE_RESET_OVERRIDE(fortyl_state,undoukai) /* init machine */ + MCFG_DEVICE_ADD("bmcu", TAITO68705_MCU, 18432000/6) + + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) + MCFG_MACHINE_START_OVERRIDE(fortyl_state,40love) + MCFG_MACHINE_RESET_OVERRIDE(fortyl_state,40love) /* init machine */ /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -1221,8 +952,8 @@ ROM_START( fieldday ) ROM_LOAD( "a17_28.bin", 0x8000, 0x2000, CRC(1a4d1dae) SHA1(fbc3c55ad9f15ead432c136eec648fe22e523ea7) ) ROM_LOAD( "a17_29.bin", 0xa000, 0x2000, CRC(3c540007) SHA1(549e7ff260214c538913ff548dcb088987845911) ) - ROM_REGION( 0x0800, "cpu2", 0 ) /* 2k for the microcontroller */ - ROM_LOAD( "a17_14.bin", 0x0000, 0x0800, NO_DUMP ) + ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */ + ROM_LOAD( "a17_14.bin", 0x0000, 0x0800, CRC(a686894d) SHA1(0578747a1869db98ee1962822491103f3f082cba) ) ROM_REGION( 0x8000, "gfx1", 0 ) ROM_LOAD( "a17_36.bin", 0x0000, 0x2000, CRC(e3dd51f7) SHA1(95a97ea925c5bc7bdc00887e6d17d817b36befc4) ) @@ -1259,8 +990,8 @@ ROM_START( undoukai ) ROM_LOAD( "a17-12.38s", 0x8000, 0x2000, CRC(cb7e6dcd) SHA1(5286c6d340c1d465caebae5dd7e3d4ff8b7f8f5e) ) ROM_LOAD( "a17-13.39s", 0xa000, 0x2000, CRC(0a40930e) SHA1(8c4b9fa0aed67a3e269c2136ef81791fc8acd1da) ) - ROM_REGION( 0x0800, "cpu2", 0 ) /* 2k for the microcontroller */ - ROM_LOAD( "a17-14.41c", 0x0000, 0x0800, NO_DUMP ) + ROM_REGION( 0x0800, "bmcu:mcu", 0 ) /* 2k for the microcontroller */ + ROM_LOAD( "a17_14.bin", 0x0000, 0x0800, CRC(a686894d) SHA1(0578747a1869db98ee1962822491103f3f082cba) ) ROM_REGION( 0x8000, "gfx1", 0 ) ROM_LOAD( "a17-04.18v", 0x0000, 0x4000, CRC(84dabee2) SHA1(698f12ee4201665988248853dafbf4b16dfc6517) ) diff --git a/src/mame/includes/40love.h b/src/mame/includes/40love.h index 94eeaf5b276..f3c9f6ccde1 100644 --- a/src/mame/includes/40love.h +++ b/src/mame/includes/40love.h @@ -51,12 +51,6 @@ public: int m_sound_nmi_enable; int m_pending_nmi; - /* fake mcu */ - uint8_t m_from_mcu; - uint8_t m_mcu_in[2][16]; - uint8_t m_mcu_out[2][16]; - int m_mcu_cmd; - /* misc */ int m_pix_color[4]; uint8_t m_pix1; @@ -85,9 +79,6 @@ public: DECLARE_WRITE8_MEMBER(pix1_w); DECLARE_WRITE8_MEMBER(pix2_w); DECLARE_READ8_MEMBER(pix2_r); - DECLARE_WRITE8_MEMBER(undoukai_mcu_w); - DECLARE_READ8_MEMBER(undoukai_mcu_r); - DECLARE_READ8_MEMBER(undoukai_mcu_status_r); DECLARE_READ8_MEMBER(from_snd_r); DECLARE_READ8_MEMBER(snd_flag_r); DECLARE_WRITE8_MEMBER(to_main_w); @@ -110,8 +101,6 @@ public: virtual void video_start() override; DECLARE_MACHINE_START(40love); DECLARE_MACHINE_RESET(40love); - DECLARE_MACHINE_START(undoukai); - DECLARE_MACHINE_RESET(undoukai); DECLARE_MACHINE_RESET(common); DECLARE_MACHINE_RESET(ta7630); uint32_t screen_update_fortyl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); -- cgit v1.2.3