Device-ified asic65.c. (nw)

This commit is contained in:
Ivan Vangelista 2013-11-07 17:50:23 +00:00
parent 3c24c33a86
commit 1c0ffa52af
7 changed files with 334 additions and 263 deletions

View File

@ -20,7 +20,6 @@
***************************************************************************/ ***************************************************************************/
#include "emu.h" #include "emu.h"
#include "machine/asic65.h"
#include "video/atarirle.h" #include "video/atarirle.h"
#include "includes/atarig42.h" #include "includes/atarig42.h"
@ -92,7 +91,7 @@ WRITE16_MEMBER(atarig42_state::io_latch_w)
if (ACCESSING_BITS_8_15) if (ACCESSING_BITS_8_15)
{ {
/* bit 14 controls the ASIC65 reset line */ /* bit 14 controls the ASIC65 reset line */
asic65_reset(machine(), (~data >> 14) & 1); m_asic65->reset_line((~data >> 14) & 1);
/* bits 13-11 are the MO control bits */ /* bits 13-11 are the MO control bits */
m_rle->control_write(space, 0, (data >> 11) & 7); m_rle->control_write(space, 0, (data >> 11) & 7);
@ -344,9 +343,9 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, atarig42_state )
AM_RANGE(0xe03000, 0xe03001) AM_WRITE(video_int_ack_w) AM_RANGE(0xe03000, 0xe03001) AM_WRITE(video_int_ack_w)
AM_RANGE(0xe03800, 0xe03801) AM_WRITE(watchdog_reset16_w) AM_RANGE(0xe03800, 0xe03801) AM_WRITE(watchdog_reset16_w)
AM_RANGE(0xe80000, 0xe80fff) AM_RAM AM_RANGE(0xe80000, 0xe80fff) AM_RAM
AM_RANGE(0xf40000, 0xf40001) AM_READ_LEGACY(asic65_io_r) AM_RANGE(0xf40000, 0xf40001) AM_DEVREAD("asic65", asic65_device, io_r)
AM_RANGE(0xf60000, 0xf60001) AM_READ_LEGACY(asic65_r) AM_RANGE(0xf60000, 0xf60001) AM_DEVREAD("asic65", asic65_device, read)
AM_RANGE(0xf80000, 0xf80003) AM_WRITE_LEGACY(asic65_data_w) AM_RANGE(0xf80000, 0xf80003) AM_DEVWRITE("asic65", asic65_device, data_w)
AM_RANGE(0xfa0000, 0xfa0fff) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff) AM_RANGE(0xfa0000, 0xfa0fff) AM_DEVREADWRITE8("eeprom", atari_eeprom_device, read, write, 0x00ff)
AM_RANGE(0xfc0000, 0xfc0fff) AM_RAM_WRITE(paletteram_666_w) AM_SHARE("paletteram") AM_RANGE(0xfc0000, 0xfc0fff) AM_RAM_WRITE(paletteram_666_w) AM_SHARE("paletteram")
AM_RANGE(0xff0000, 0xff0fff) AM_RAM AM_SHARE("rle") AM_RANGE(0xff0000, 0xff0fff) AM_RAM AM_SHARE("rle")
@ -539,9 +538,6 @@ static MACHINE_CONFIG_START( atarig42, atarig42_state )
MCFG_CPU_PROGRAM_MAP(main_map) MCFG_CPU_PROGRAM_MAP(main_map)
MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen) MCFG_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen)
/* ASIC65 */
MCFG_FRAGMENT_ADD(asic65)
MCFG_MACHINE_START_OVERRIDE(atarig42_state,atarig42) MCFG_MACHINE_START_OVERRIDE(atarig42_state,atarig42)
MCFG_MACHINE_RESET_OVERRIDE(atarig42_state,atarig42) MCFG_MACHINE_RESET_OVERRIDE(atarig42_state,atarig42)
@ -573,10 +569,16 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( atarig42_0x200, atarig42 ) static MACHINE_CONFIG_DERIVED( atarig42_0x200, atarig42 )
MCFG_ATARIRLE_ADD("rle", modesc_0x200) MCFG_ATARIRLE_ADD("rle", modesc_0x200)
/* ASIC65 */
MCFG_ASIC65_ADD("asic65", ASIC65_ROMBASED)
MACHINE_CONFIG_END MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( atarig42_0x400, atarig42 ) static MACHINE_CONFIG_DERIVED( atarig42_0x400, atarig42 )
MCFG_ATARIRLE_ADD("rle", modesc_0x400) MCFG_ATARIRLE_ADD("rle", modesc_0x400)
/* ASIC65 */
MCFG_ASIC65_ADD("asic65", ASIC65_GUARDIANS)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -595,7 +597,7 @@ ROM_START( roadriot )
ROM_LOAD16_BYTE( "136089-2016.9d", 0x40000, 0x20000, CRC(6191653c) SHA1(97d1a84a585149e8f2c49cab7af22dc755dff350) ) ROM_LOAD16_BYTE( "136089-2016.9d", 0x40000, 0x20000, CRC(6191653c) SHA1(97d1a84a585149e8f2c49cab7af22dc755dff350) )
ROM_LOAD16_BYTE( "136089-2015.9c", 0x40001, 0x20000, CRC(0d34419a) SHA1(f16e9fb4cd537d727611cb7dd5537c030671fe1e) ) ROM_LOAD16_BYTE( "136089-2015.9c", 0x40001, 0x20000, CRC(0d34419a) SHA1(f16e9fb4cd537d727611cb7dd5537c030671fe1e) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) ) ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) )
ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */ ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
@ -653,7 +655,7 @@ ROM_START( roadrioto )
ROM_LOAD16_BYTE( "136089-2016.9d", 0x40000, 0x20000, CRC(6191653c) SHA1(97d1a84a585149e8f2c49cab7af22dc755dff350) ) /* PALs & BPROMs in White labels */ ROM_LOAD16_BYTE( "136089-2016.9d", 0x40000, 0x20000, CRC(6191653c) SHA1(97d1a84a585149e8f2c49cab7af22dc755dff350) ) /* PALs & BPROMs in White labels */
ROM_LOAD16_BYTE( "136089-2015.9c", 0x40001, 0x20000, CRC(0d34419a) SHA1(f16e9fb4cd537d727611cb7dd5537c030671fe1e) ) ROM_LOAD16_BYTE( "136089-2015.9c", 0x40001, 0x20000, CRC(0d34419a) SHA1(f16e9fb4cd537d727611cb7dd5537c030671fe1e) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) ) ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, CRC(7c5498e7) SHA1(9d8b235baf7b75bef8ef9b168647c5b2b80b2cb3) )
ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */ ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
@ -712,7 +714,7 @@ ROM_START( guardian )
ROM_LOAD16_BYTE( "136092-2023.9e", 0x40000, 0x20000, CRC(cfa29316) SHA1(4e0e76304e29ee59bc2ce9a704e3f651dc9d473c) ) ROM_LOAD16_BYTE( "136092-2023.9e", 0x40000, 0x20000, CRC(cfa29316) SHA1(4e0e76304e29ee59bc2ce9a704e3f651dc9d473c) )
ROM_LOAD16_BYTE( "136092-2022.9cd", 0x40001, 0x20000, CRC(ed2abc91) SHA1(81531040d5663f6ab82e924210056e3737e17a8d) ) ROM_LOAD16_BYTE( "136092-2022.9cd", 0x40001, 0x20000, CRC(ed2abc91) SHA1(81531040d5663f6ab82e924210056e3737e17a8d) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, NO_DUMP ) ROM_LOAD( "136089-1012.3f", 0x00000, 0x0a80, NO_DUMP )
ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */ ROM_REGION( 0x14000, "jsa:cpu", 0 ) /* 6502 code */
@ -780,8 +782,7 @@ DRIVER_INIT_MEMBER(atarig42_state,roadriot)
m_sloop_base = main.install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::roadriot_sloop_data_r),this), write16_delegate(FUNC(atarig42_state::roadriot_sloop_data_w),this)); m_sloop_base = main.install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::roadriot_sloop_data_r),this), write16_delegate(FUNC(atarig42_state::roadriot_sloop_data_w),this));
main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this)); main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this));
asic65_config(machine(), ASIC65_ROMBASED); /*
/*
Road Riot color MUX Road Riot color MUX
CRA10=!MGEP*!AN.VID7*AN.0 -- if (mopri < pfpri) && (!alpha) CRA10=!MGEP*!AN.VID7*AN.0 -- if (mopri < pfpri) && (!alpha)
@ -816,8 +817,7 @@ DRIVER_INIT_MEMBER(atarig42_state,guardian)
m_sloop_base = main.install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::guardians_sloop_data_r),this), write16_delegate(FUNC(atarig42_state::guardians_sloop_data_w),this)); m_sloop_base = main.install_readwrite_handler(0x000000, 0x07ffff, read16_delegate(FUNC(atarig42_state::guardians_sloop_data_r),this), write16_delegate(FUNC(atarig42_state::guardians_sloop_data_w),this));
main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this)); main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this));
asic65_config(machine(), ASIC65_GUARDIANS); /*
/*
Guardians color MUX Guardians color MUX
CRA10=MGEP*!AN.VID7*AN.0*!MO.0 -- if (mopri >= pfpri) && (!alpha) && (mopix != 0) CRA10=MGEP*!AN.VID7*AN.0*!MO.0 -- if (mopri >= pfpri) && (!alpha) && (mopix != 0)

View File

@ -326,8 +326,6 @@ Notes:
#include "emu.h" #include "emu.h"
#include "machine/atarigen.h"
#include "machine/asic65.h"
#include "sound/dac.h" #include "sound/dac.h"
#include "includes/slapstic.h" #include "includes/slapstic.h"
#include "includes/harddriv.h" #include "includes/harddriv.h"
@ -1482,7 +1480,7 @@ static MACHINE_CONFIG_FRAGMENT( dsk )
MCFG_CPU_PROGRAM_MAP(dsk_dsp32_map) MCFG_CPU_PROGRAM_MAP(dsk_dsp32_map)
/* ASIC65 */ /* ASIC65 */
MCFG_FRAGMENT_ADD( asic65 ) MCFG_ASIC65_ADD("asic65", ASIC65_STANDARD)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -1495,7 +1493,7 @@ static MACHINE_CONFIG_FRAGMENT( dsk2 )
MCFG_CPU_PROGRAM_MAP(dsk2_dsp32_map) MCFG_CPU_PROGRAM_MAP(dsk2_dsp32_map)
/* ASIC65 */ /* ASIC65 */
MCFG_FRAGMENT_ADD( asic65 ) MCFG_ASIC65_ADD("asic65", ASIC65_STANDARD)
MACHINE_CONFIG_END MACHINE_CONFIG_END
@ -1597,7 +1595,7 @@ static MACHINE_CONFIG_DERIVED( steeltal, multisync_msp )
MCFG_DEVICE_REMOVE("lspeaker") MCFG_DEVICE_REMOVE("lspeaker")
MCFG_DEVICE_REMOVE("rspeaker") MCFG_DEVICE_REMOVE("rspeaker")
MCFG_FRAGMENT_ADD( asic65 ) /* ASIC65 on DSPCOM board */ MCFG_ASIC65_ADD("asic65", ASIC65_STEELTAL) /* ASIC65 on DSPCOM board */
/* sund hardware */ /* sund hardware */
MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SPEAKER_STANDARD_MONO("mono")
@ -2562,7 +2560,7 @@ ROM_START( racedriv )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2610,7 +2608,7 @@ ROM_START( racedrivb )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2658,7 +2656,7 @@ ROM_START( racedrivg )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2706,7 +2704,7 @@ ROM_START( racedriv4 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2754,7 +2752,7 @@ ROM_START( racedrivb4 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2802,7 +2800,7 @@ ROM_START( racedrivg4 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) ) ROM_LOAD16_BYTE( "136077-4015.210y", 0x0e0001, 0x010000, CRC(725806f3) SHA1(0fa4601465dc94f27c71db789ad625bbcd254169) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2850,7 +2848,7 @@ ROM_START( racedriv3 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2898,7 +2896,7 @@ ROM_START( racedriv2 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2946,7 +2944,7 @@ ROM_START( racedriv1 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -2994,7 +2992,7 @@ ROM_START( racedrivg1 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3042,7 +3040,7 @@ ROM_START( racedrivb1 )
ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) ) ROM_LOAD16_BYTE( "136077-1016.200y", 0x0e0000, 0x010000, CRC(e83a9c99) SHA1(1d4093902133bb6da981f294e6947544c3564393) )
ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) ) ROM_LOAD16_BYTE( "136077-1015.210y", 0x0e0001, 0x010000, CRC(c51f2702) SHA1(2279f15c4c09af92fe9b87dc0ed842092ca64906) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3090,7 +3088,7 @@ ROM_START( racedrivc )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3138,7 +3136,7 @@ ROM_START( racedrivcb )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3186,7 +3184,7 @@ ROM_START( racedrivcg )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3234,7 +3232,7 @@ ROM_START( racedrivc4 )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3282,7 +3280,7 @@ ROM_START( racedrivcb4 )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3330,7 +3328,7 @@ ROM_START( racedrivcg4 )
ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) ) ROM_LOAD16_BYTE( "136078-4016.200y", 0x0e0000, 0x010000, CRC(aa296776) SHA1(991e33568e47a82cb183724f7df1f835850c30fa) )
ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) ) ROM_LOAD16_BYTE( "136078-4015.210y", 0x0e0001, 0x010000, CRC(030c803d) SHA1(bb249c9d1d28f6851a529b93c4f96d80665f2bce) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3378,7 +3376,7 @@ ROM_START( racedrivc2 )
ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) ) ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) )
ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) ) ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3426,7 +3424,7 @@ ROM_START( racedrivc1 )
ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) ) ROM_LOAD16_BYTE( "136078-1015.210y", 0x0e0001, 0x010000, CRC(64dd6040) SHA1(bcadf4f1d9a0685ca39af903d3342d590850513c) )
ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) ) ROM_LOAD16_BYTE( "136078-1016.200y", 0x0e0000, 0x010000, CRC(a2a0ed28) SHA1(6f308a38594f7e54ebdd6983d28664ba595bc525) )
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */ ROM_REGION( 0x20000, "soundcpu", 0 ) /* 2*64k for audio 68000 code */
@ -3578,7 +3576,7 @@ ROM_START( racedrivpan )
/* ----------------------- */ /* ----------------------- */
ROM_REGION( 0x2000, "asic65", 0 ) /* ASIC65 TMS32015 code */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* ASIC65 TMS32015 code */
ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP ) ROM_LOAD( "136077-1027.30j", 0x00000, 0x02000, NO_DUMP )
/* ADSP board */ /* ADSP board */
@ -3627,7 +3625,7 @@ ROM_START( steeltal )
ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_CONTINUE( 0x004000, 0x00c000 ) ROM_CONTINUE( 0x004000, 0x00c000 )
ROM_REGION( 0x2000, "asic65", 0 ) /* 64k for ASIC65 */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) ) ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */ ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */
@ -3688,7 +3686,7 @@ ROM_START( steeltalg )
ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_CONTINUE( 0x004000, 0x00c000 ) ROM_CONTINUE( 0x004000, 0x00c000 )
ROM_REGION( 0x2000, "asic65", 0 ) /* 64k for ASIC65 */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) ) ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */ ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */
@ -3749,7 +3747,7 @@ ROM_START( steeltal1 )
ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_CONTINUE( 0x004000, 0x00c000 ) ROM_CONTINUE( 0x004000, 0x00c000 )
ROM_REGION( 0x2000, "asic65", 0 ) /* 64k for ASIC65 */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) ) ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */ ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */
@ -3810,7 +3808,7 @@ ROM_START( steeltalp )
ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) )
ROM_CONTINUE( 0x004000, 0x00c000 ) ROM_CONTINUE( 0x004000, 0x00c000 )
ROM_REGION( 0x2000, "asic65", 0 ) /* 64k for ASIC65 */ ROM_REGION( 0x2000, "asic65:asic65cpu", 0 ) /* 64k for ASIC65 */
ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) ) ROM_LOAD( "136087-9007.10c", 0x000000, 0x002000, CRC(2956984f) SHA1(63c9a99b00c3cbb63aca908b076c2c4d3f70f386) )
ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */ ROM_REGION( 0x10000, "cpu6", 0 ) /* 64k for DSP communications */
@ -3867,7 +3865,7 @@ ROM_START( strtdriv )
ROM_LOAD16_BYTE( "136091-0016.200y", 0x0e0000, 0x010000, CRC(f85ad532) SHA1(f9d2480104a7487c23d33b05aa044b7f4ca08c67) ) ROM_LOAD16_BYTE( "136091-0016.200y", 0x0e0000, 0x010000, CRC(f85ad532) SHA1(f9d2480104a7487c23d33b05aa044b7f4ca08c67) )
ROM_LOAD16_BYTE( "136091-0015.210y", 0x0e0001, 0x010000, CRC(a2e406f3) SHA1(a7266508011c892cb1032fa4d77ccbafedc844e8) ) ROM_LOAD16_BYTE( "136091-0015.210y", 0x0e0001, 0x010000, CRC(a2e406f3) SHA1(a7266508011c892cb1032fa4d77ccbafedc844e8) )
ROM_REGION( 0x10000 + 0x10000, "asic65", 0 ) /* dummy region for ADSP 2105 */ ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
ROM_LOAD( "136091-0033.10j", 0x000000, 0x010000, CRC(57504ab6) SHA1(ec8361b7da964c07ca0da48a87537badc3986fe0) ) ROM_LOAD( "136091-0033.10j", 0x000000, 0x010000, CRC(57504ab6) SHA1(ec8361b7da964c07ca0da48a87537badc3986fe0) )
ROM_REGION( 0x60000, "user1", 0 ) /* 384k for object ROM */ ROM_REGION( 0x60000, "user1", 0 ) /* 384k for object ROM */
@ -3920,7 +3918,7 @@ ROM_START( hdrivair )
ROM_LOAD16_BYTE( "coprochi.bin",0x1c0000, 0x20000, CRC(5d2ca109) SHA1(e1a94d3fbfd5d542732555bf60268e73d66b3a06) ) ROM_LOAD16_BYTE( "coprochi.bin",0x1c0000, 0x20000, CRC(5d2ca109) SHA1(e1a94d3fbfd5d542732555bf60268e73d66b3a06) )
ROM_LOAD16_BYTE( "coproclo.bin",0x1c0001, 0x20000, CRC(5f98b04d) SHA1(9c4fa4092fd85f1d67be44f2ff91a907a87db51a) ) ROM_LOAD16_BYTE( "coproclo.bin",0x1c0001, 0x20000, CRC(5f98b04d) SHA1(9c4fa4092fd85f1d67be44f2ff91a907a87db51a) )
ROM_REGION( 0x10000 + 0x10000, "asic65", 0 ) /* dummy region for ADSP 2105 */ ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
ROM_LOAD( "sboot.bin", 0x000000, 0x010000, CRC(cde4d010) SHA1(853f4b813ff70fe74cd87e92131c46fca045610d) ) ROM_LOAD( "sboot.bin", 0x000000, 0x010000, CRC(cde4d010) SHA1(853f4b813ff70fe74cd87e92131c46fca045610d) )
ROM_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */ ROM_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */
@ -3980,7 +3978,7 @@ ROM_START( hdrivairp )
ROM_REGION( 0x10000 + 0x10000, "dsp32", 0 ) /* dummy region for ADSP 2105 */ ROM_REGION( 0x10000 + 0x10000, "dsp32", 0 ) /* dummy region for ADSP 2105 */
ROM_LOAD( "sboota.bin", 0x10000 + 0x00000, 0x10000, CRC(3ef819cd) SHA1(c547b869a3a37a82fb46584fe0ef0cfe21a4f882) ) ROM_LOAD( "sboota.bin", 0x10000 + 0x00000, 0x10000, CRC(3ef819cd) SHA1(c547b869a3a37a82fb46584fe0ef0cfe21a4f882) )
ROM_REGION( 0x10000 + 0x10000, "asic65", 0 ) /* dummy region for ADSP 2105 */ ROM_REGION( 0x10000 + 0x10000, "asic65:asic65cpu", 0 ) /* dummy region for ADSP 2105 */
ROM_LOAD( "xboota.bin", 0x10000 + 0x00000, 0x10000, CRC(d9c49901) SHA1(9f90ae3a47eb1ef00c3ec3661f60402c2eae2108) ) ROM_LOAD( "xboota.bin", 0x10000 + 0x00000, 0x10000, CRC(d9c49901) SHA1(9f90ae3a47eb1ef00c3ec3661f60402c2eae2108) )
ROM_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */ ROM_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */
@ -4191,16 +4189,13 @@ void harddriv_state::init_dsk()
m_dsk_zram = (UINT16 *)(usr3 + 0x50000); m_dsk_zram = (UINT16 *)(usr3 + 0x50000);
/* install ASIC65 */ /* install ASIC65 */
m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x914000, 0x917fff, FUNC(asic65_data_w)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x914000, 0x917fff, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65));
m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x914000, 0x917fff, FUNC(asic65_r)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x914000, 0x917fff, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65));
m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x918000, 0x91bfff, FUNC(asic65_io_r)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x918000, 0x91bfff, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65));
/* install extra ROM */ /* install extra ROM */
m_maincpu->space(AS_PROGRAM).install_read_handler(0x940000, 0x9fffff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_small_rom_r), this)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x940000, 0x9fffff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_small_rom_r), this));
m_dsk_rom = (UINT16 *)(usr3 + 0x00000); m_dsk_rom = (UINT16 *)(usr3 + 0x00000);
/* set up the ASIC65 */
asic65_config(machine(), ASIC65_STANDARD);
} }
@ -4210,9 +4205,9 @@ void harddriv_state::init_dsk2()
UINT8 *usr3 = memregion("user3")->base(); UINT8 *usr3 = memregion("user3")->base();
/* install ASIC65 */ /* install ASIC65 */
m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x824000, 0x824003, FUNC(asic65_data_w)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x824000, 0x824003, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65));
m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x824000, 0x824003, FUNC(asic65_r)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x824000, 0x824003, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65));
m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x825000, 0x825001, FUNC(asic65_io_r)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x825000, 0x825001, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65));
/* install ASIC61 */ /* install ASIC61 */
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x827000, 0x8277ff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_dsp32_r), this), write16_delegate(FUNC(harddriv_state::hd68k_dsk_dsp32_w), this)); m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x827000, 0x8277ff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_dsp32_r), this), write16_delegate(FUNC(harddriv_state::hd68k_dsk_dsp32_w), this));
@ -4227,9 +4222,6 @@ void harddriv_state::init_dsk2()
/* install extra ROM */ /* install extra ROM */
m_maincpu->space(AS_PROGRAM).install_read_handler(0x900000, 0x9fffff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_rom_r), this)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x900000, 0x9fffff, read16_delegate(FUNC(harddriv_state::hd68k_dsk_rom_r), this));
m_dsk_rom = (UINT16 *)(usr3 + 0x000000); m_dsk_rom = (UINT16 *)(usr3 + 0x000000);
/* set up the ASIC65 */
asic65_config(machine(), ASIC65_STANDARD);
} }
@ -4237,12 +4229,9 @@ void harddriv_state::init_dsk2()
void harddriv_state::init_dspcom() void harddriv_state::init_dspcom()
{ {
/* install ASIC65 */ /* install ASIC65 */
m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x900000, 0x900003, FUNC(asic65_data_w)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x900000, 0x900003, write16_delegate(FUNC(asic65_device::data_w), (asic65_device*)m_asic65));
m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x900000, 0x900003, FUNC(asic65_r)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x900000, 0x900003, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65));
m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x901000, 0x910001, FUNC(asic65_io_r)); m_maincpu->space(AS_PROGRAM).install_read_handler(0x901000, 0x910001, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65));
/* set up the ASIC65 */
asic65_config(machine(), ASIC65_STEELTAL);
/* install DSPCOM control */ /* install DSPCOM control */
m_maincpu->space(AS_PROGRAM).install_write_handler(0x904000, 0x90401f, write16_delegate(FUNC(harddriv_state::hddspcom_control_w), this)); m_maincpu->space(AS_PROGRAM).install_write_handler(0x904000, 0x90401f, write16_delegate(FUNC(harddriv_state::hddspcom_control_w), this));

View File

@ -9,6 +9,7 @@
#include "machine/atarigen.h" #include "machine/atarigen.h"
#include "audio/atarijsa.h" #include "audio/atarijsa.h"
#include "cpu/m68000/m68000.h" #include "cpu/m68000/m68000.h"
#include "machine/asic65.h"
class atarig42_state : public atarigen_state class atarig42_state : public atarigen_state
{ {
@ -20,6 +21,7 @@ public:
m_playfield_tilemap(*this, "playfield"), m_playfield_tilemap(*this, "playfield"),
m_alpha_tilemap(*this, "alpha"), m_alpha_tilemap(*this, "alpha"),
m_rle(*this, "rle"), m_rle(*this, "rle"),
m_asic65(*this, "asic65"),
m_mo_command(*this, "mo_command") { } m_mo_command(*this, "mo_command") { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
@ -28,6 +30,7 @@ public:
required_device<tilemap_device> m_playfield_tilemap; required_device<tilemap_device> m_playfield_tilemap;
required_device<tilemap_device> m_alpha_tilemap; required_device<tilemap_device> m_alpha_tilemap;
required_device<atari_rle_objects_device> m_rle; required_device<atari_rle_objects_device> m_rle;
required_device<asic65_device> m_asic65;
UINT16 m_playfield_base; UINT16 m_playfield_base;

View File

@ -15,6 +15,7 @@
#include "sound/dac.h" #include "sound/dac.h"
#include "machine/atarigen.h" #include "machine/atarigen.h"
#include "machine/n68681.h" #include "machine/n68681.h"
#include "machine/asic65.h"
#define HARDDRIV_MASTER_CLOCK XTAL_32MHz #define HARDDRIV_MASTER_CLOCK XTAL_32MHz
#define HARDDRIV_GSP_CLOCK XTAL_48MHz #define HARDDRIV_GSP_CLOCK XTAL_48MHz
@ -53,7 +54,8 @@ public:
m_ds3sdsp_internal_timer(*this, "ds3sdsp_timer"), m_ds3sdsp_internal_timer(*this, "ds3sdsp_timer"),
m_ds3xdsp_internal_timer(*this, "ds3xdsp_timer"), m_ds3xdsp_internal_timer(*this, "ds3xdsp_timer"),
m_dac(*this, "dac"), m_dac(*this, "dac"),
m_duart(*this, "duartn68681") { } m_duart(*this, "duartn68681"),
m_asic65(*this, "asic65") { }
required_device<cpu_device> m_maincpu; required_device<cpu_device> m_maincpu;
required_device<tms34010_device> m_gsp; required_device<tms34010_device> m_gsp;
@ -282,6 +284,7 @@ public:
DECLARE_WRITE16_MEMBER(hdsnddsp_dac_w); DECLARE_WRITE16_MEMBER(hdsnddsp_dac_w);
optional_device<dac_device> m_dac; optional_device<dac_device> m_dac;
required_device<duartn68681_device> m_duart; required_device<duartn68681_device> m_duart;
optional_device<asic65_device> m_asic65;
DECLARE_WRITE_LINE_MEMBER(harddriv_duart_irq_handler); DECLARE_WRITE_LINE_MEMBER(harddriv_duart_irq_handler);
/*----------- defined in audio/harddriv.c -----------*/ /*----------- defined in audio/harddriv.c -----------*/

View File

@ -7,43 +7,12 @@
*************************************/ *************************************/
#include "emu.h" #include "emu.h"
#include "cpu/tms32010/tms32010.h"
#include "asic65.h" #include "asic65.h"
#define LOG_ASIC 0 #define LOG_ASIC 0
/*************************************
*
* !$#@$ asic
*
*************************************/
static struct _asic65_t
{
UINT8 type;
int command;
UINT16 param[32];
UINT16 yorigin;
UINT8 param_index;
UINT8 result_index;
UINT8 reset_state;
UINT8 last_bank;
/* ROM-based interface states */
device_t *cpu;
UINT8 tfull;
UINT8 _68full;
UINT8 cmd;
UINT8 xflg;
UINT16 _68data;
UINT16 tdata;
FILE * log;
} asic65;
#define PARAM_WRITE 0 #define PARAM_WRITE 0
#define COMMAND_WRITE 1 #define COMMAND_WRITE 1
#define DATA_READ 2 #define DATA_READ 2
@ -113,139 +82,185 @@ static const UINT8 command_map[3][MAX_COMMANDS] =
} }
}; };
const device_type ASIC65 = &device_creator<asic65_device>;
asic65_device::asic65_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
/************************************* : device_t(mconfig, ASIC65, "ASIC65", tag, owner, clock, "asic65", __FILE__),
* m_asic65_type(0),
* Configure the chip m_command(0),
* m_yorigin(0x1800),
*************************************/ m_param_index(0),
m_result_index(0),
void asic65_config(running_machine &machine, int asictype) m_reset_state(0),
m_last_bank(0),
m_ourcpu(*this, "asic65cpu"),
m_tfull(0),
m_68full(0),
m_cmd(0),
m_xflg(0),
m_68data(0),
m_tdata(0),
m_log(NULL)
{ {
memset(&asic65, 0, sizeof(asic65)); for (int i = 0; i < 32; i++)
asic65.type = asictype; {
asic65.yorigin = 0x1800; m_param[i] = 0;
if (asic65.type == ASIC65_ROMBASED) }
asic65.cpu = machine.device("asic65");
} }
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
void asic65_device::device_config_complete()
/*************************************
*
* Reset the chip
*
*************************************/
void asic65_reset(running_machine &machine, int state)
{ {
address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); }
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void asic65_device::device_start()
{
save_item(NAME(m_asic65_type));
save_item(NAME(m_command));
save_item(NAME(m_yorigin));
save_item(NAME(m_param_index));
save_item(NAME(m_result_index));
save_item(NAME(m_reset_state));
save_item(NAME(m_last_bank));
save_item(NAME(m_tfull));
save_item(NAME(m_68full));
save_item(NAME(m_cmd));
save_item(NAME(m_xflg));
save_item(NAME(m_68data));
save_item(NAME(m_tdata));
save_item(NAME(m_param));
}
//-------------------------------------------------
// device_reset - device-specific startup
//-------------------------------------------------
void asic65_device::device_reset()
{
}
void asic65_device::reset_line(int state)
{
address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
/* rom-based means reset and clear states */ /* rom-based means reset and clear states */
if (asic65.cpu != NULL) if (m_asic65_type == ASIC65_ROMBASED)
asic65.cpu->execute().set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); m_ourcpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE);
/* otherwise, do it manually */ /* otherwise, do it manually */
else else
{ {
machine.device<cpu_device>("asic65")->suspend(SUSPEND_REASON_DISABLE, 1); m_ourcpu->suspend(SUSPEND_REASON_DISABLE, 1);
/* if reset is being signalled, clear everything */ /* if reset is being signalled, clear everything */
if (state && !asic65.reset_state) if (state && !m_reset_state)
asic65.command = -1; m_command = -1;
/* if reset is going high, latch the command */ /* if reset is going high, latch the command */
else if (!state && asic65.reset_state) else if (!state && m_reset_state)
{ {
if (asic65.command != -1) if (m_command != -1)
asic65_data_w(space, 1, asic65.command, 0xffff); data_w(space, 1, m_command, 0xffff);
} }
/* update the state */ /* update the state */
asic65.reset_state = state; m_reset_state = state;
} }
} }
/************************************* /*************************************
* *
* Handle writes to the chip * Handle writes to the chip
* *
*************************************/ *************************************/
static TIMER_CALLBACK( m68k_asic65_deferred_w ) void asic65_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{ {
asic65.tfull = 1; switch (id)
asic65.cmd = param >> 16; {
asic65.tdata = param; case TIMER_M68K_ASIC65_DEFERRED_W:
if (asic65.cpu != NULL) m_tfull = 1;
asic65.cpu->execute().set_input_line(0, ASSERT_LINE); m_cmd = param >> 16;
m_tdata = param;
if (m_asic65_type == ASIC65_ROMBASED)
m_ourcpu->set_input_line(0, ASSERT_LINE);
break;
default:
assert_always(FALSE, "Unknown id in asic65_device::device_timer");
}
} }
WRITE16_HANDLER( asic65_data_w ) WRITE16_MEMBER( asic65_device::data_w )
{ {
/* logging */ /* logging */
if (LOG_ASIC && !asic65.log) asic65.log = fopen("asic65.log", "w"); if (LOG_ASIC && !m_log) m_log = fopen("m_log", "w");
/* rom-based use a deferred write mechanism */ /* rom-based use a deferred write mechanism */
if (asic65.type == ASIC65_ROMBASED) if (m_asic65_type == ASIC65_ROMBASED)
{ {
space.machine().scheduler().synchronize(FUNC(m68k_asic65_deferred_w), data | (offset << 16)); synchronize(TIMER_M68K_ASIC65_DEFERRED_W, data | (offset << 16));
space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20)); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20));
return; return;
} }
/* parameters go to offset 0 */ /* parameters go to offset 0 */
if (!(offset & 1)) if (!(offset & 1))
{ {
if (asic65.log) fprintf(asic65.log, " W=%04X", data); if (m_log) fprintf(m_log, " W=%04X", data);
/* add to the parameter list, but don't overflow */ /* add to the parameter list, but don't overflow */
asic65.param[asic65.param_index++] = data; m_param[m_param_index++] = data;
if (asic65.param_index >= 32) if (m_param_index >= 32)
asic65.param_index = 32; m_param_index = 32;
} }
/* commands go to offset 2 */ /* commands go to offset 2 */
else else
{ {
int command = (data < MAX_COMMANDS) ? command_map[asic65.type][data] : OP_UNKNOWN; int command = (data < MAX_COMMANDS) ? command_map[m_asic65_type][data] : OP_UNKNOWN;
if (asic65.log) fprintf(asic65.log, "\n(%06X)%c%04X:", space.device().safe_pcbase(), (command == OP_UNKNOWN) ? '*' : ' ', data); if (m_log) fprintf(m_log, "\n(%06X)%c%04X:", safe_pcbase(), (command == OP_UNKNOWN) ? '*' : ' ', data);
/* set the command number and reset the parameter/result indices */ /* set the command number and reset the parameter/result indices */
asic65.command = data; m_command = data;
asic65.result_index = asic65.param_index = 0; m_result_index = m_param_index = 0;
} }
} }
READ16_HANDLER( asic65_r ) READ16_MEMBER( asic65_device::read )
{ {
int command = (asic65.command < MAX_COMMANDS) ? command_map[asic65.type][asic65.command] : OP_UNKNOWN; int command = (m_command < MAX_COMMANDS) ? command_map[m_asic65_type][m_command] : OP_UNKNOWN;
INT64 element, result64 = 0; INT64 element, result64 = 0;
UINT16 result = 0; UINT16 result = 0;
/* rom-based just returns latched data */ /* rom-based just returns latched data */
if (asic65.type == ASIC65_ROMBASED) if (m_asic65_type == ASIC65_ROMBASED)
{ {
asic65._68full = 0; m_68full = 0;
space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5));
return asic65._68data; return m_68data;
} }
/* update results */ /* update results */
switch (command) switch (command)
{ {
case OP_UNKNOWN: /* return bogus data */ case OP_UNKNOWN: /* return bogus data */
popmessage("ASIC65: Unknown cmd %02X", asic65.command); popmessage("ASIC65: Unknown cmd %02X", m_command);
break; break;
case OP_REFLECT: /* reflect data */ case OP_REFLECT: /* reflect data */
if (asic65.param_index >= 1) if (m_param_index >= 1)
result = asic65.param[--asic65.param_index]; result = m_param[--m_param_index];
break; break;
case OP_CHECKSUM: /* compute checksum (should be XX27) */ case OP_CHECKSUM: /* compute checksum (should be XX27) */
@ -261,24 +276,24 @@ READ16_HANDLER( asic65_r )
break; break;
case OP_RESET: /* reset */ case OP_RESET: /* reset */
asic65.result_index = asic65.param_index = 0; m_result_index = m_param_index = 0;
break; break;
case OP_SIN: /* sin */ case OP_SIN: /* sin */
if (asic65.param_index >= 1) if (m_param_index >= 1)
result = (int)(16384. * sin(M_PI * (double)(INT16)asic65.param[0] / 32768.)); result = (int)(16384. * sin(M_PI * (double)(INT16)m_param[0] / 32768.));
break; break;
case OP_COS: /* cos */ case OP_COS: /* cos */
if (asic65.param_index >= 1) if (m_param_index >= 1)
result = (int)(16384. * cos(M_PI * (double)(INT16)asic65.param[0] / 32768.)); result = (int)(16384. * cos(M_PI * (double)(INT16)m_param[0] / 32768.));
break; break;
case OP_ATAN: /* vector angle */ case OP_ATAN: /* vector angle */
if (asic65.param_index >= 4) if (m_param_index >= 4)
{ {
INT32 xint = (INT32)((asic65.param[0] << 16) | asic65.param[1]); INT32 xint = (INT32)((m_param[0] << 16) | m_param[1]);
INT32 yint = (INT32)((asic65.param[2] << 16) | asic65.param[3]); INT32 yint = (INT32)((m_param[2] << 16) | m_param[3]);
double a = atan2((double)yint, (double)xint); double a = atan2((double)yint, (double)xint);
result = (INT16)(a * 32768. / M_PI); result = (INT16)(a * 32768. / M_PI);
} }
@ -287,84 +302,84 @@ READ16_HANDLER( asic65_r )
case OP_TMATRIXMULT: /* matrix multiply by transpose */ case OP_TMATRIXMULT: /* matrix multiply by transpose */
/* if this is wrong, the labels on the car selection screen */ /* if this is wrong, the labels on the car selection screen */
/* in Race Drivin' will be off */ /* in Race Drivin' will be off */
if (asic65.param_index >= 9+6) if (m_param_index >= 9+6)
{ {
INT32 v0 = (INT32)((asic65.param[9] << 16) | asic65.param[10]); INT32 v0 = (INT32)((m_param[9] << 16) | m_param[10]);
INT32 v1 = (INT32)((asic65.param[11] << 16) | asic65.param[12]); INT32 v1 = (INT32)((m_param[11] << 16) | m_param[12]);
INT32 v2 = (INT32)((asic65.param[13] << 16) | asic65.param[14]); INT32 v2 = (INT32)((m_param[13] << 16) | m_param[14]);
/* 2 results per element */ /* 2 results per element */
switch (asic65.result_index / 2) switch (m_result_index / 2)
{ {
case 0: case 0:
result64 = (INT64)v0 * (INT16)asic65.param[0] + result64 = (INT64)v0 * (INT16)m_param[0] +
(INT64)v1 * (INT16)asic65.param[3] + (INT64)v1 * (INT16)m_param[3] +
(INT64)v2 * (INT16)asic65.param[6]; (INT64)v2 * (INT16)m_param[6];
break; break;
case 1: case 1:
result64 = (INT64)v0 * (INT16)asic65.param[1] + result64 = (INT64)v0 * (INT16)m_param[1] +
(INT64)v1 * (INT16)asic65.param[4] + (INT64)v1 * (INT16)m_param[4] +
(INT64)v2 * (INT16)asic65.param[7]; (INT64)v2 * (INT16)m_param[7];
break; break;
case 2: case 2:
result64 = (INT64)v0 * (INT16)asic65.param[2] + result64 = (INT64)v0 * (INT16)m_param[2] +
(INT64)v1 * (INT16)asic65.param[5] + (INT64)v1 * (INT16)m_param[5] +
(INT64)v2 * (INT16)asic65.param[8]; (INT64)v2 * (INT16)m_param[8];
break; break;
} }
/* remove lower 14 bits and pass back either upper or lower words */ /* remove lower 14 bits and pass back either upper or lower words */
result64 >>= 14; result64 >>= 14;
result = (asic65.result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); result = (m_result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff);
asic65.result_index++; m_result_index++;
} }
break; break;
case OP_MATRIXMULT: /* matrix multiply???? */ case OP_MATRIXMULT: /* matrix multiply???? */
if (asic65.param_index >= 9+6) if (m_param_index >= 9+6)
{ {
INT32 v0 = (INT32)((asic65.param[9] << 16) | asic65.param[10]); INT32 v0 = (INT32)((m_param[9] << 16) | m_param[10]);
INT32 v1 = (INT32)((asic65.param[11] << 16) | asic65.param[12]); INT32 v1 = (INT32)((m_param[11] << 16) | m_param[12]);
INT32 v2 = (INT32)((asic65.param[13] << 16) | asic65.param[14]); INT32 v2 = (INT32)((m_param[13] << 16) | m_param[14]);
/* 2 results per element */ /* 2 results per element */
switch (asic65.result_index / 2) switch (m_result_index / 2)
{ {
case 0: case 0:
result64 = (INT64)v0 * (INT16)asic65.param[0] + result64 = (INT64)v0 * (INT16)m_param[0] +
(INT64)v1 * (INT16)asic65.param[1] + (INT64)v1 * (INT16)m_param[1] +
(INT64)v2 * (INT16)asic65.param[2]; (INT64)v2 * (INT16)m_param[2];
break; break;
case 1: case 1:
result64 = (INT64)v0 * (INT16)asic65.param[3] + result64 = (INT64)v0 * (INT16)m_param[3] +
(INT64)v1 * (INT16)asic65.param[4] + (INT64)v1 * (INT16)m_param[4] +
(INT64)v2 * (INT16)asic65.param[5]; (INT64)v2 * (INT16)m_param[5];
break; break;
case 2: case 2:
result64 = (INT64)v0 * (INT16)asic65.param[6] + result64 = (INT64)v0 * (INT16)m_param[6] +
(INT64)v1 * (INT16)asic65.param[7] + (INT64)v1 * (INT16)m_param[7] +
(INT64)v2 * (INT16)asic65.param[8]; (INT64)v2 * (INT16)m_param[8];
break; break;
} }
/* remove lower 14 bits and pass back either upper or lower words */ /* remove lower 14 bits and pass back either upper or lower words */
result64 >>= 14; result64 >>= 14;
result = (asic65.result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); result = (m_result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff);
asic65.result_index++; m_result_index++;
} }
break; break;
case OP_YORIGIN: case OP_YORIGIN:
if (asic65.param_index >= 1) if (m_param_index >= 1)
asic65.yorigin = asic65.param[asic65.param_index - 1]; m_yorigin = m_param[m_param_index - 1];
break; break;
case OP_TRANSFORM: /* 3d transform */ case OP_TRANSFORM: /* 3d transform */
if (asic65.param_index >= 2) if (m_param_index >= 2)
{ {
/* param 0 == 1/z */ /* param 0 == 1/z */
/* param 1 == height */ /* param 1 == height */
@ -373,29 +388,29 @@ READ16_HANDLER( asic65_r )
/* return 0 == scale factor for 1/z */ /* return 0 == scale factor for 1/z */
/* return 1 == transformed X */ /* return 1 == transformed X */
/* return 2 == transformed Y, taking height into account */ /* return 2 == transformed Y, taking height into account */
element = (INT16)asic65.param[0]; element = (INT16)m_param[0];
if (asic65.param_index == 2) if (m_param_index == 2)
{ {
result64 = (element * (INT16)asic65.param[1]) >> 8; result64 = (element * (INT16)m_param[1]) >> 8;
result64 -= 1; result64 -= 1;
if (result64 > 0x3fff) result64 = 0; if (result64 > 0x3fff) result64 = 0;
} }
else if (asic65.param_index == 3) else if (m_param_index == 3)
{ {
result64 = (element * (INT16)asic65.param[2]) >> 15; result64 = (element * (INT16)m_param[2]) >> 15;
result64 += 0xa8; result64 += 0xa8;
} }
else if (asic65.param_index == 4) else if (m_param_index == 4)
{ {
result64 = (INT16)((element * (INT16)asic65.param[3]) >> 10); result64 = (INT16)((element * (INT16)m_param[3]) >> 10);
result64 = (INT16)asic65.yorigin - result64 - (result64 << 1); result64 = (INT16)m_yorigin - result64 - (result64 << 1);
} }
result = result64 & 0xffff; result = result64 & 0xffff;
} }
break; break;
case OP_INITBANKS: /* initialize banking */ case OP_INITBANKS: /* initialize banking */
asic65.last_bank = 0; m_last_bank = 0;
break; break;
case OP_SETBANK: /* set a bank */ case OP_SETBANK: /* set a bank */
@ -414,12 +429,12 @@ READ16_HANDLER( asic65_r )
{ 0x77f0,0x77fe,0x77f2,0x77fc,0x77f4,0x77fa,0x77f6,0x77f8 }, { 0x77f0,0x77fe,0x77f2,0x77fc,0x77f4,0x77fa,0x77f6,0x77f8 },
{ 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 }, { 0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000 },
}; };
if (asic65.param_index >= 1) if (m_param_index >= 1)
{ {
if (asic65.param_index < sizeof(banklist) && banklist[asic65.param[0]] < 4) if (m_param_index < sizeof(banklist) && banklist[m_param[0]] < 4)
asic65.last_bank = banklist[asic65.param[0]]; m_last_bank = banklist[m_param[0]];
result = bankaddr[asic65.last_bank][(asic65.result_index < 8) ? asic65.result_index : 7]; result = bankaddr[m_last_bank][(m_result_index < 8) ? m_result_index : 7];
asic65.result_index++; m_result_index++;
} }
break; break;
} }
@ -430,28 +445,28 @@ READ16_HANDLER( asic65_r )
{ {
0x0eb2,0x1000,0x171b,0x3d28 0x0eb2,0x1000,0x171b,0x3d28
}; };
result = bankverify[asic65.last_bank]; result = bankverify[m_last_bank];
break; break;
} }
} }
if (LOG_ASIC && !asic65.log) asic65.log = fopen("asic65.log", "w"); if (LOG_ASIC && !m_log) m_log = fopen("m_log", "w");
if (asic65.log) fprintf(asic65.log, " (R=%04X)", result); if (m_log) fprintf(m_log, " (R=%04X)", result);
return result; return result;
} }
READ16_HANDLER( asic65_io_r ) READ16_MEMBER( asic65_device::io_r )
{ {
if (asic65.type == ASIC65_ROMBASED) if (m_asic65_type == ASIC65_ROMBASED)
{ {
/* bit 15 = TFULL */ /* bit 15 = TFULL */
/* bit 14 = 68FULL */ /* bit 14 = 68FULL */
/* bit 13 = XFLG */ /* bit 13 = XFLG */
/* bit 12 = controlled by jumper */ /* bit 12 = controlled by jumper */
space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5));
return (asic65.tfull << 15) | (asic65._68full << 14) | (asic65.xflg << 13) | 0x0000; return (m_tfull << 15) | (m_68full << 14) | (m_xflg << 13) | 0x0000;
} }
else else
{ {
@ -468,43 +483,43 @@ READ16_HANDLER( asic65_io_r )
* *
*************************************/ *************************************/
static WRITE16_HANDLER( asic65_68k_w ) WRITE16_MEMBER( asic65_device::m68k_w )
{ {
asic65._68full = 1; m_68full = 1;
asic65._68data = data; m_68data = data;
} }
static READ16_HANDLER( asic65_68k_r ) READ16_MEMBER( asic65_device::m68k_r )
{ {
asic65.tfull = 0; m_tfull = 0;
if (asic65.cpu != NULL) if (m_asic65_type == ASIC65_ROMBASED)
asic65.cpu->execute().set_input_line(0, CLEAR_LINE); m_ourcpu->set_input_line(0, CLEAR_LINE);
return asic65.tdata; return m_tdata;
} }
static WRITE16_HANDLER( asic65_stat_w ) WRITE16_MEMBER( asic65_device::stat_w )
{ {
asic65.xflg = data & 1; m_xflg = data & 1;
} }
static READ16_HANDLER( asic65_stat_r ) READ16_MEMBER( asic65_device::stat_r )
{ {
/* bit 15 = 68FULL */ /* bit 15 = 68FULL */
/* bit 14 = TFULL */ /* bit 14 = TFULL */
/* bit 13 = CMD */ /* bit 13 = CMD */
/* bit 12 = controlled by jumper (0 = test?) */ /* bit 12 = controlled by jumper (0 = test?) */
return (asic65._68full << 15) | (asic65.tfull << 14) | (asic65.cmd << 13) | 0x1000; return (m_68full << 15) | (m_tfull << 14) | (m_cmd << 13) | 0x1000;
} }
static READ16_HANDLER( asci65_get_bio ) READ16_MEMBER( asic65_device::get_bio )
{ {
if (!asic65.tfull) if (!m_tfull)
space.device().execute().spin_until_interrupt(); space.device().execute().spin_until_interrupt();
return asic65.tfull ? CLEAR_LINE : ASSERT_LINE; return m_tfull ? CLEAR_LINE : ASSERT_LINE;
} }
@ -515,15 +530,15 @@ static READ16_HANDLER( asci65_get_bio )
* *
*************************************/ *************************************/
static ADDRESS_MAP_START( asic65_program_map, AS_PROGRAM, 16, driver_device ) static ADDRESS_MAP_START( asic65_program_map, AS_PROGRAM, 16, asic65_device )
ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x000, 0xfff) AM_ROM AM_RANGE(0x000, 0xfff) AM_ROM
ADDRESS_MAP_END ADDRESS_MAP_END
static ADDRESS_MAP_START( asic65_io_map, AS_IO, 16, driver_device ) static ADDRESS_MAP_START( asic65_io_map, AS_IO, 16, asic65_device )
AM_RANGE(0, 0) AM_MIRROR(6) AM_READWRITE_LEGACY(asic65_68k_r, asic65_68k_w) AM_RANGE(0, 0) AM_MIRROR(6) AM_READWRITE(m68k_r, m68k_w)
AM_RANGE(1, 1) AM_MIRROR(6) AM_READWRITE_LEGACY(asic65_stat_r, asic65_stat_w) AM_RANGE(1, 1) AM_MIRROR(6) AM_READWRITE(stat_r, stat_w)
AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ_LEGACY(asci65_get_bio) AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(get_bio)
ADDRESS_MAP_END ADDRESS_MAP_END
@ -537,11 +552,21 @@ ADDRESS_MAP_END
MACHINE_CONFIG_FRAGMENT( asic65 ) MACHINE_CONFIG_FRAGMENT( asic65 )
/* ASIC65 */ /* ASIC65 */
MCFG_CPU_ADD("asic65", TMS32010, 20000000) MCFG_CPU_ADD("asic65cpu", TMS32010, 20000000)
MCFG_CPU_PROGRAM_MAP(asic65_program_map) MCFG_CPU_PROGRAM_MAP(asic65_program_map)
MCFG_CPU_IO_MAP(asic65_io_map) MCFG_CPU_IO_MAP(asic65_io_map)
MACHINE_CONFIG_END MACHINE_CONFIG_END
//-------------------------------------------------
// machine_config_additions - device-specific
// machine configurations
//-------------------------------------------------
machine_config_constructor asic65_device::device_mconfig_additions() const
{
return MACHINE_CONFIG_NAME( asic65 );
}
/*********************************************************************** /***********************************************************************

View File

@ -6,15 +6,72 @@
* *
*************************************/ *************************************/
#define ASIC65_STANDARD 0 #include "cpu/tms32010/tms32010.h"
#define ASIC65_STEELTAL 1
#define ASIC65_GUARDIANS 2
#define ASIC65_ROMBASED 3
void asic65_config(running_machine &machine, int asictype); enum {
void asic65_reset(running_machine &machine, int state); ASIC65_STANDARD,
DECLARE_WRITE16_HANDLER( asic65_data_w ); ASIC65_STEELTAL,
DECLARE_READ16_HANDLER( asic65_r ); ASIC65_GUARDIANS,
DECLARE_READ16_HANDLER( asic65_io_r ); ASIC65_ROMBASED
};
MACHINE_CONFIG_EXTERN( asic65 ); class asic65_device : public device_t
{
public:
asic65_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// (static) configuration helpers
static void set_type(device_t &device, int type) { downcast<asic65_device &>(device).m_asic65_type = type; }
void reset_line(int state);
DECLARE_WRITE16_MEMBER( data_w );
DECLARE_READ16_MEMBER( read );
DECLARE_READ16_MEMBER( io_r );
TIMER_CALLBACK_MEMBER( m68k_asic65_deferred_w );
WRITE16_MEMBER( m68k_w );
READ16_MEMBER( m68k_r );
WRITE16_MEMBER( stat_w );
READ16_MEMBER( stat_r );
READ16_MEMBER( get_bio );
enum
{
TIMER_M68K_ASIC65_DEFERRED_W
};
protected:
// device-level overrides
virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual machine_config_constructor device_mconfig_additions() const;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
private:
UINT8 m_asic65_type;
int m_command;
UINT16 m_param[32];
UINT16 m_yorigin;
UINT8 m_param_index;
UINT8 m_result_index;
UINT8 m_reset_state;
UINT8 m_last_bank;
/* ROM-based interface states */
required_device<legacy_cpu_device> m_ourcpu;
UINT8 m_tfull;
UINT8 m_68full;
UINT8 m_cmd;
UINT8 m_xflg;
UINT16 m_68data;
UINT16 m_tdata;
FILE * m_log;
};
extern const device_type ASIC65;
#define MCFG_ASIC65_ADD(_tag, _type) \
MCFG_DEVICE_ADD(_tag, ASIC65, 0) \
asic65_device::set_type(*device, _type);

View File

@ -7,13 +7,7 @@
****************************************************************************/ ****************************************************************************/
#include "emu.h" #include "emu.h"
#include "cpu/tms34010/tms34010.h"
#include "cpu/adsp2100/adsp2100.h"
#include "cpu/m68000/m68000.h"
#include "cpu/dsp32/dsp32.h"
#include "sound/dac.h" #include "sound/dac.h"
#include "machine/atarigen.h"
#include "machine/asic65.h"
#include "includes/slapstic.h" #include "includes/slapstic.h"
#include "includes/harddriv.h" #include "includes/harddriv.h"
@ -1543,7 +1537,7 @@ WRITE16_MEMBER( harddriv_state::hd68k_dsk_control_w )
break; break;
case 4: /* ASIC65 reset */ case 4: /* ASIC65 reset */
asic65_reset(space.machine(), !val); m_asic65->reset_line(!val);
break; break;
case 7: /* LED */ case 7: /* LED */
@ -1686,7 +1680,7 @@ WRITE16_MEMBER( harddriv_state::hddspcom_control_w )
switch (offset & 7) switch (offset & 7)
{ {
case 2: /* ASIC65 reset */ case 2: /* ASIC65 reset */
asic65_reset(space.machine(), !val); m_asic65->reset_line(!val);
break; break;
default: default: