summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2017-06-20 12:04:41 -0400
committer GitHub <noreply@github.com>2017-06-20 12:04:41 -0400
commit2c96a26af21eceb389b2372ec61723a4d3a9245e (patch)
tree2d73e6f2e7b87880b534e3dfbae0ae20356202db
parent39b8b76a1588a3f5716d36692d1238087dd4d9ff (diff)
parentd249f7394e1c21840cabab7e08c9d37c7cdd7268 (diff)
Merge pull request #2395 from DavidHaywood/200617
use dumped M68705 for fieldday / undoukai [ShouTime, brizzo]
-rw-r--r--src/mame/drivers/40love.cpp291
-rw-r--r--src/mame/includes/40love.h11
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);