Merge pull request #2395 from DavidHaywood/200617

use dumped M68705 for fieldday / undoukai [ShouTime, brizzo]
This commit is contained in:
R. Belmont 2017-06-20 12:04:41 -04:00 committed by GitHub
commit 2c96a26af2
2 changed files with 11 additions and 291 deletions

View File

@ -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) )

View File

@ -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);