diff --git a/src/mame/drivers/atarig42.c b/src/mame/drivers/atarig42.c index 63d438aa8a4..9b41dc8cdf9 100644 --- a/src/mame/drivers/atarig42.c +++ b/src/mame/drivers/atarig42.c @@ -20,7 +20,6 @@ ***************************************************************************/ #include "emu.h" -#include "machine/asic65.h" #include "video/atarirle.h" #include "includes/atarig42.h" @@ -92,7 +91,7 @@ WRITE16_MEMBER(atarig42_state::io_latch_w) if (ACCESSING_BITS_8_15) { /* 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 */ 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(0xe03800, 0xe03801) AM_WRITE(watchdog_reset16_w) AM_RANGE(0xe80000, 0xe80fff) AM_RAM - AM_RANGE(0xf40000, 0xf40001) AM_READ_LEGACY(asic65_io_r) - AM_RANGE(0xf60000, 0xf60001) AM_READ_LEGACY(asic65_r) - AM_RANGE(0xf80000, 0xf80003) AM_WRITE_LEGACY(asic65_data_w) + AM_RANGE(0xf40000, 0xf40001) AM_DEVREAD("asic65", asic65_device, io_r) + AM_RANGE(0xf60000, 0xf60001) AM_DEVREAD("asic65", asic65_device, read) + 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(0xfc0000, 0xfc0fff) AM_RAM_WRITE(paletteram_666_w) AM_SHARE("paletteram") 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_DEVICE_VBLANK_INT_DRIVER("screen", atarigen_state, video_int_gen) - /* ASIC65 */ - MCFG_FRAGMENT_ADD(asic65) - MCFG_MACHINE_START_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 ) MCFG_ATARIRLE_ADD("rle", modesc_0x200) + + /* ASIC65 */ + MCFG_ASIC65_ADD("asic65", ASIC65_ROMBASED) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( atarig42_0x400, atarig42 ) MCFG_ATARIRLE_ADD("rle", modesc_0x400) + + /* ASIC65 */ + MCFG_ASIC65_ADD("asic65", ASIC65_GUARDIANS) 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-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_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-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_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-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_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)); 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 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)); main.set_direct_update_handler(direct_update_delegate(FUNC(atarig42_state::atarig42_sloop_direct_handler), this)); - asic65_config(machine(), ASIC65_GUARDIANS); -/* + /* Guardians color MUX CRA10=MGEP*!AN.VID7*AN.0*!MO.0 -- if (mopri >= pfpri) && (!alpha) && (mopix != 0) diff --git a/src/mame/drivers/harddriv.c b/src/mame/drivers/harddriv.c index 44e4f24cce9..7af2c57c017 100644 --- a/src/mame/drivers/harddriv.c +++ b/src/mame/drivers/harddriv.c @@ -326,8 +326,6 @@ Notes: #include "emu.h" -#include "machine/atarigen.h" -#include "machine/asic65.h" #include "sound/dac.h" #include "includes/slapstic.h" #include "includes/harddriv.h" @@ -1482,7 +1480,7 @@ static MACHINE_CONFIG_FRAGMENT( dsk ) MCFG_CPU_PROGRAM_MAP(dsk_dsp32_map) /* ASIC65 */ - MCFG_FRAGMENT_ADD( asic65 ) + MCFG_ASIC65_ADD("asic65", ASIC65_STANDARD) MACHINE_CONFIG_END @@ -1495,7 +1493,7 @@ static MACHINE_CONFIG_FRAGMENT( dsk2 ) MCFG_CPU_PROGRAM_MAP(dsk2_dsp32_map) /* ASIC65 */ - MCFG_FRAGMENT_ADD( asic65 ) + MCFG_ASIC65_ADD("asic65", ASIC65_STANDARD) MACHINE_CONFIG_END @@ -1597,8 +1595,8 @@ static MACHINE_CONFIG_DERIVED( steeltal, multisync_msp ) MCFG_DEVICE_REMOVE("lspeaker") MCFG_DEVICE_REMOVE("rspeaker") - MCFG_FRAGMENT_ADD( asic65 ) /* ASIC65 on DSPCOM board */ - + MCFG_ASIC65_ADD("asic65", ASIC65_STEELTAL) /* ASIC65 on DSPCOM board */ + /* sund hardware */ 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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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-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_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 ) /* ADSP board */ @@ -3627,7 +3625,7 @@ ROM_START( steeltal ) ROM_LOAD( "136087-5001.1f", 0x010000, 0x004000, CRC(c52d8218) SHA1(3511c8c65583c7e44242f4cc48d7cc46fc748868) ) 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_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_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_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_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_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_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_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-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_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( "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_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_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_REGION( 0xc0000, "user1", 0 ) /* 768k for object ROM */ @@ -4191,16 +4189,13 @@ void harddriv_state::init_dsk() m_dsk_zram = (UINT16 *)(usr3 + 0x50000); /* install ASIC65 */ - m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x914000, 0x917fff, FUNC(asic65_data_w)); - m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x914000, 0x917fff, FUNC(asic65_r)); - m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x918000, 0x91bfff, FUNC(asic65_io_r)); + 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_read_handler(0x914000, 0x917fff, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x918000, 0x91bfff, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65)); /* 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_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(); /* install ASIC65 */ - m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x824000, 0x824003, FUNC(asic65_data_w)); - m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x824000, 0x824003, FUNC(asic65_r)); - m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x825000, 0x825001, FUNC(asic65_io_r)); + 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_read_handler(0x824000, 0x824003, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x825000, 0x825001, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65)); /* 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)); @@ -4227,9 +4222,6 @@ void harddriv_state::init_dsk2() /* install extra ROM */ 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); - - /* set up the ASIC65 */ - asic65_config(machine(), ASIC65_STANDARD); } @@ -4237,12 +4229,9 @@ void harddriv_state::init_dsk2() void harddriv_state::init_dspcom() { /* install ASIC65 */ - m_maincpu->space(AS_PROGRAM).install_legacy_write_handler(0x900000, 0x900003, FUNC(asic65_data_w)); - m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x900000, 0x900003, FUNC(asic65_r)); - m_maincpu->space(AS_PROGRAM).install_legacy_read_handler(0x901000, 0x910001, FUNC(asic65_io_r)); - - /* set up the ASIC65 */ - asic65_config(machine(), ASIC65_STEELTAL); + 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_read_handler(0x900000, 0x900003, read16_delegate(FUNC(asic65_device::read), (asic65_device*)m_asic65)); + m_maincpu->space(AS_PROGRAM).install_read_handler(0x901000, 0x910001, read16_delegate(FUNC(asic65_device::io_r), (asic65_device*)m_asic65)); /* install DSPCOM control */ m_maincpu->space(AS_PROGRAM).install_write_handler(0x904000, 0x90401f, write16_delegate(FUNC(harddriv_state::hddspcom_control_w), this)); diff --git a/src/mame/includes/atarig42.h b/src/mame/includes/atarig42.h index ca2854a8662..fa092dbce13 100644 --- a/src/mame/includes/atarig42.h +++ b/src/mame/includes/atarig42.h @@ -9,6 +9,7 @@ #include "machine/atarigen.h" #include "audio/atarijsa.h" #include "cpu/m68000/m68000.h" +#include "machine/asic65.h" class atarig42_state : public atarigen_state { @@ -20,6 +21,7 @@ public: m_playfield_tilemap(*this, "playfield"), m_alpha_tilemap(*this, "alpha"), m_rle(*this, "rle"), + m_asic65(*this, "asic65"), m_mo_command(*this, "mo_command") { } required_device m_maincpu; @@ -28,6 +30,7 @@ public: required_device m_playfield_tilemap; required_device m_alpha_tilemap; required_device m_rle; + required_device m_asic65; UINT16 m_playfield_base; diff --git a/src/mame/includes/harddriv.h b/src/mame/includes/harddriv.h index e885998db1d..d30f64027ed 100644 --- a/src/mame/includes/harddriv.h +++ b/src/mame/includes/harddriv.h @@ -15,6 +15,7 @@ #include "sound/dac.h" #include "machine/atarigen.h" #include "machine/n68681.h" +#include "machine/asic65.h" #define HARDDRIV_MASTER_CLOCK XTAL_32MHz #define HARDDRIV_GSP_CLOCK XTAL_48MHz @@ -53,7 +54,8 @@ public: m_ds3sdsp_internal_timer(*this, "ds3sdsp_timer"), m_ds3xdsp_internal_timer(*this, "ds3xdsp_timer"), m_dac(*this, "dac"), - m_duart(*this, "duartn68681") { } + m_duart(*this, "duartn68681"), + m_asic65(*this, "asic65") { } required_device m_maincpu; required_device m_gsp; @@ -282,6 +284,7 @@ public: DECLARE_WRITE16_MEMBER(hdsnddsp_dac_w); optional_device m_dac; required_device m_duart; + optional_device m_asic65; DECLARE_WRITE_LINE_MEMBER(harddriv_duart_irq_handler); /*----------- defined in audio/harddriv.c -----------*/ diff --git a/src/mame/machine/asic65.c b/src/mame/machine/asic65.c index 1db3e14007d..088fd32605f 100644 --- a/src/mame/machine/asic65.c +++ b/src/mame/machine/asic65.c @@ -7,43 +7,12 @@ *************************************/ #include "emu.h" -#include "cpu/tms32010/tms32010.h" #include "asic65.h" #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 COMMAND_WRITE 1 #define DATA_READ 2 @@ -113,139 +82,185 @@ static const UINT8 command_map[3][MAX_COMMANDS] = } }; +const device_type ASIC65 = &device_creator; - -/************************************* - * - * Configure the chip - * - *************************************/ - -void asic65_config(running_machine &machine, int asictype) +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), + m_command(0), + m_yorigin(0x1800), + m_param_index(0), + m_result_index(0), + 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)); - asic65.type = asictype; - asic65.yorigin = 0x1800; - if (asic65.type == ASIC65_ROMBASED) - asic65.cpu = machine.device("asic65"); + for (int i = 0; i < 32; i++) + { + m_param[i] = 0; + } } +//------------------------------------------------- +// device_config_complete - perform any +// operations now that the configuration is +// complete +//------------------------------------------------- - -/************************************* - * - * Reset the chip - * - *************************************/ - -void asic65_reset(running_machine &machine, int state) +void asic65_device::device_config_complete() { - 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 */ - if (asic65.cpu != NULL) - asic65.cpu->execute().set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); + if (m_asic65_type == ASIC65_ROMBASED) + m_ourcpu->set_input_line(INPUT_LINE_RESET, state ? ASSERT_LINE : CLEAR_LINE); /* otherwise, do it manually */ else { - machine.device("asic65")->suspend(SUSPEND_REASON_DISABLE, 1); + m_ourcpu->suspend(SUSPEND_REASON_DISABLE, 1); /* if reset is being signalled, clear everything */ - if (state && !asic65.reset_state) - asic65.command = -1; + if (state && !m_reset_state) + m_command = -1; /* if reset is going high, latch the command */ - else if (!state && asic65.reset_state) + else if (!state && m_reset_state) { - if (asic65.command != -1) - asic65_data_w(space, 1, asic65.command, 0xffff); + if (m_command != -1) + data_w(space, 1, m_command, 0xffff); } /* update the state */ - asic65.reset_state = state; + m_reset_state = state; } } - - /************************************* * * 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; - asic65.cmd = param >> 16; - asic65.tdata = param; - if (asic65.cpu != NULL) - asic65.cpu->execute().set_input_line(0, ASSERT_LINE); + switch (id) + { + case TIMER_M68K_ASIC65_DEFERRED_W: + m_tfull = 1; + 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 */ - 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 */ - if (asic65.type == ASIC65_ROMBASED) + if (m_asic65_type == ASIC65_ROMBASED) { - space.machine().scheduler().synchronize(FUNC(m68k_asic65_deferred_w), data | (offset << 16)); - space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20)); + synchronize(TIMER_M68K_ASIC65_DEFERRED_W, data | (offset << 16)); + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(20)); return; } /* parameters go to offset 0 */ 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 */ - asic65.param[asic65.param_index++] = data; - if (asic65.param_index >= 32) - asic65.param_index = 32; + m_param[m_param_index++] = data; + if (m_param_index >= 32) + m_param_index = 32; } /* commands go to offset 2 */ else { - int command = (data < MAX_COMMANDS) ? command_map[asic65.type][data] : OP_UNKNOWN; - if (asic65.log) fprintf(asic65.log, "\n(%06X)%c%04X:", space.device().safe_pcbase(), (command == OP_UNKNOWN) ? '*' : ' ', data); + int command = (data < MAX_COMMANDS) ? command_map[m_asic65_type][data] : OP_UNKNOWN; + 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 */ - asic65.command = data; - asic65.result_index = asic65.param_index = 0; + m_command = data; + 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; UINT16 result = 0; /* rom-based just returns latched data */ - if (asic65.type == ASIC65_ROMBASED) + if (m_asic65_type == ASIC65_ROMBASED) { - asic65._68full = 0; - space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); - return asic65._68data; + m_68full = 0; + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); + return m_68data; } /* update results */ switch (command) { case OP_UNKNOWN: /* return bogus data */ - popmessage("ASIC65: Unknown cmd %02X", asic65.command); + popmessage("ASIC65: Unknown cmd %02X", m_command); break; case OP_REFLECT: /* reflect data */ - if (asic65.param_index >= 1) - result = asic65.param[--asic65.param_index]; + if (m_param_index >= 1) + result = m_param[--m_param_index]; break; case OP_CHECKSUM: /* compute checksum (should be XX27) */ @@ -261,24 +276,24 @@ READ16_HANDLER( asic65_r ) break; case OP_RESET: /* reset */ - asic65.result_index = asic65.param_index = 0; + m_result_index = m_param_index = 0; break; case OP_SIN: /* sin */ - if (asic65.param_index >= 1) - result = (int)(16384. * sin(M_PI * (double)(INT16)asic65.param[0] / 32768.)); + if (m_param_index >= 1) + result = (int)(16384. * sin(M_PI * (double)(INT16)m_param[0] / 32768.)); break; case OP_COS: /* cos */ - if (asic65.param_index >= 1) - result = (int)(16384. * cos(M_PI * (double)(INT16)asic65.param[0] / 32768.)); + if (m_param_index >= 1) + result = (int)(16384. * cos(M_PI * (double)(INT16)m_param[0] / 32768.)); break; 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 yint = (INT32)((asic65.param[2] << 16) | asic65.param[3]); + INT32 xint = (INT32)((m_param[0] << 16) | m_param[1]); + INT32 yint = (INT32)((m_param[2] << 16) | m_param[3]); double a = atan2((double)yint, (double)xint); result = (INT16)(a * 32768. / M_PI); } @@ -287,84 +302,84 @@ READ16_HANDLER( asic65_r ) case OP_TMATRIXMULT: /* matrix multiply by transpose */ /* if this is wrong, the labels on the car selection screen */ /* 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 v1 = (INT32)((asic65.param[11] << 16) | asic65.param[12]); - INT32 v2 = (INT32)((asic65.param[13] << 16) | asic65.param[14]); + INT32 v0 = (INT32)((m_param[9] << 16) | m_param[10]); + INT32 v1 = (INT32)((m_param[11] << 16) | m_param[12]); + INT32 v2 = (INT32)((m_param[13] << 16) | m_param[14]); /* 2 results per element */ - switch (asic65.result_index / 2) + switch (m_result_index / 2) { case 0: - result64 = (INT64)v0 * (INT16)asic65.param[0] + - (INT64)v1 * (INT16)asic65.param[3] + - (INT64)v2 * (INT16)asic65.param[6]; + result64 = (INT64)v0 * (INT16)m_param[0] + + (INT64)v1 * (INT16)m_param[3] + + (INT64)v2 * (INT16)m_param[6]; break; case 1: - result64 = (INT64)v0 * (INT16)asic65.param[1] + - (INT64)v1 * (INT16)asic65.param[4] + - (INT64)v2 * (INT16)asic65.param[7]; + result64 = (INT64)v0 * (INT16)m_param[1] + + (INT64)v1 * (INT16)m_param[4] + + (INT64)v2 * (INT16)m_param[7]; break; case 2: - result64 = (INT64)v0 * (INT16)asic65.param[2] + - (INT64)v1 * (INT16)asic65.param[5] + - (INT64)v2 * (INT16)asic65.param[8]; + result64 = (INT64)v0 * (INT16)m_param[2] + + (INT64)v1 * (INT16)m_param[5] + + (INT64)v2 * (INT16)m_param[8]; break; } /* remove lower 14 bits and pass back either upper or lower words */ result64 >>= 14; - result = (asic65.result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); - asic65.result_index++; + result = (m_result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); + m_result_index++; } break; 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 v1 = (INT32)((asic65.param[11] << 16) | asic65.param[12]); - INT32 v2 = (INT32)((asic65.param[13] << 16) | asic65.param[14]); + INT32 v0 = (INT32)((m_param[9] << 16) | m_param[10]); + INT32 v1 = (INT32)((m_param[11] << 16) | m_param[12]); + INT32 v2 = (INT32)((m_param[13] << 16) | m_param[14]); /* 2 results per element */ - switch (asic65.result_index / 2) + switch (m_result_index / 2) { case 0: - result64 = (INT64)v0 * (INT16)asic65.param[0] + - (INT64)v1 * (INT16)asic65.param[1] + - (INT64)v2 * (INT16)asic65.param[2]; + result64 = (INT64)v0 * (INT16)m_param[0] + + (INT64)v1 * (INT16)m_param[1] + + (INT64)v2 * (INT16)m_param[2]; break; case 1: - result64 = (INT64)v0 * (INT16)asic65.param[3] + - (INT64)v1 * (INT16)asic65.param[4] + - (INT64)v2 * (INT16)asic65.param[5]; + result64 = (INT64)v0 * (INT16)m_param[3] + + (INT64)v1 * (INT16)m_param[4] + + (INT64)v2 * (INT16)m_param[5]; break; case 2: - result64 = (INT64)v0 * (INT16)asic65.param[6] + - (INT64)v1 * (INT16)asic65.param[7] + - (INT64)v2 * (INT16)asic65.param[8]; + result64 = (INT64)v0 * (INT16)m_param[6] + + (INT64)v1 * (INT16)m_param[7] + + (INT64)v2 * (INT16)m_param[8]; break; } /* remove lower 14 bits and pass back either upper or lower words */ result64 >>= 14; - result = (asic65.result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); - asic65.result_index++; + result = (m_result_index & 1) ? (result64 & 0xffff) : ((result64 >> 16) & 0xffff); + m_result_index++; } break; case OP_YORIGIN: - if (asic65.param_index >= 1) - asic65.yorigin = asic65.param[asic65.param_index - 1]; + if (m_param_index >= 1) + m_yorigin = m_param[m_param_index - 1]; break; case OP_TRANSFORM: /* 3d transform */ - if (asic65.param_index >= 2) + if (m_param_index >= 2) { /* param 0 == 1/z */ /* param 1 == height */ @@ -373,29 +388,29 @@ READ16_HANDLER( asic65_r ) /* return 0 == scale factor for 1/z */ /* return 1 == transformed X */ /* return 2 == transformed Y, taking height into account */ - element = (INT16)asic65.param[0]; - if (asic65.param_index == 2) + element = (INT16)m_param[0]; + if (m_param_index == 2) { - result64 = (element * (INT16)asic65.param[1]) >> 8; + result64 = (element * (INT16)m_param[1]) >> 8; result64 -= 1; 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; } - else if (asic65.param_index == 4) + else if (m_param_index == 4) { - result64 = (INT16)((element * (INT16)asic65.param[3]) >> 10); - result64 = (INT16)asic65.yorigin - result64 - (result64 << 1); + result64 = (INT16)((element * (INT16)m_param[3]) >> 10); + result64 = (INT16)m_yorigin - result64 - (result64 << 1); } result = result64 & 0xffff; } break; case OP_INITBANKS: /* initialize banking */ - asic65.last_bank = 0; + m_last_bank = 0; break; case OP_SETBANK: /* set a bank */ @@ -414,12 +429,12 @@ READ16_HANDLER( asic65_r ) { 0x77f0,0x77fe,0x77f2,0x77fc,0x77f4,0x77fa,0x77f6,0x77f8 }, { 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) - asic65.last_bank = banklist[asic65.param[0]]; - result = bankaddr[asic65.last_bank][(asic65.result_index < 8) ? asic65.result_index : 7]; - asic65.result_index++; + if (m_param_index < sizeof(banklist) && banklist[m_param[0]] < 4) + m_last_bank = banklist[m_param[0]]; + result = bankaddr[m_last_bank][(m_result_index < 8) ? m_result_index : 7]; + m_result_index++; } break; } @@ -430,28 +445,28 @@ READ16_HANDLER( asic65_r ) { 0x0eb2,0x1000,0x171b,0x3d28 }; - result = bankverify[asic65.last_bank]; + result = bankverify[m_last_bank]; break; } } - if (LOG_ASIC && !asic65.log) asic65.log = fopen("asic65.log", "w"); - if (asic65.log) fprintf(asic65.log, " (R=%04X)", result); + if (LOG_ASIC && !m_log) m_log = fopen("m_log", "w"); + if (m_log) fprintf(m_log, " (R=%04X)", 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 14 = 68FULL */ /* bit 13 = XFLG */ /* bit 12 = controlled by jumper */ - space.machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); - return (asic65.tfull << 15) | (asic65._68full << 14) | (asic65.xflg << 13) | 0x0000; + machine().scheduler().boost_interleave(attotime::zero, attotime::from_usec(5)); + return (m_tfull << 15) | (m_68full << 14) | (m_xflg << 13) | 0x0000; } 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; - asic65._68data = data; + m_68full = 1; + m_68data = data; } -static READ16_HANDLER( asic65_68k_r ) +READ16_MEMBER( asic65_device::m68k_r ) { - asic65.tfull = 0; - if (asic65.cpu != NULL) - asic65.cpu->execute().set_input_line(0, CLEAR_LINE); - return asic65.tdata; + m_tfull = 0; + if (m_asic65_type == ASIC65_ROMBASED) + m_ourcpu->set_input_line(0, CLEAR_LINE); + 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 14 = TFULL */ /* bit 13 = CMD */ /* 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(); - 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 AM_RANGE(0x000, 0xfff) AM_ROM ADDRESS_MAP_END -static ADDRESS_MAP_START( asic65_io_map, AS_IO, 16, driver_device ) - AM_RANGE(0, 0) AM_MIRROR(6) AM_READWRITE_LEGACY(asic65_68k_r, asic65_68k_w) - AM_RANGE(1, 1) AM_MIRROR(6) AM_READWRITE_LEGACY(asic65_stat_r, asic65_stat_w) - AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ_LEGACY(asci65_get_bio) +static ADDRESS_MAP_START( asic65_io_map, AS_IO, 16, asic65_device ) + AM_RANGE(0, 0) AM_MIRROR(6) AM_READWRITE(m68k_r, m68k_w) + AM_RANGE(1, 1) AM_MIRROR(6) AM_READWRITE(stat_r, stat_w) + AM_RANGE(TMS32010_BIO, TMS32010_BIO) AM_READ(get_bio) ADDRESS_MAP_END @@ -537,10 +552,20 @@ ADDRESS_MAP_END MACHINE_CONFIG_FRAGMENT( asic65 ) /* ASIC65 */ - MCFG_CPU_ADD("asic65", TMS32010, 20000000) + MCFG_CPU_ADD("asic65cpu", TMS32010, 20000000) MCFG_CPU_PROGRAM_MAP(asic65_program_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 ); +} diff --git a/src/mame/machine/asic65.h b/src/mame/machine/asic65.h index 9ff84e55a2c..f1604df2e75 100644 --- a/src/mame/machine/asic65.h +++ b/src/mame/machine/asic65.h @@ -5,16 +5,73 @@ * Implementation of ASIC65 * *************************************/ + + #include "cpu/tms32010/tms32010.h" + + enum { + ASIC65_STANDARD, + ASIC65_STEELTAL, + ASIC65_GUARDIANS, + ASIC65_ROMBASED +}; -#define ASIC65_STANDARD 0 -#define ASIC65_STEELTAL 1 -#define ASIC65_GUARDIANS 2 -#define ASIC65_ROMBASED 3 +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(device).m_asic65_type = type; } -void asic65_config(running_machine &machine, int asictype); -void asic65_reset(running_machine &machine, int state); -DECLARE_WRITE16_HANDLER( asic65_data_w ); -DECLARE_READ16_HANDLER( asic65_r ); -DECLARE_READ16_HANDLER( asic65_io_r ); + 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 + }; -MACHINE_CONFIG_EXTERN( asic65 ); +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 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); diff --git a/src/mame/machine/harddriv.c b/src/mame/machine/harddriv.c index dbeccf03edc..64518607ace 100644 --- a/src/mame/machine/harddriv.c +++ b/src/mame/machine/harddriv.c @@ -7,13 +7,7 @@ ****************************************************************************/ #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 "machine/atarigen.h" -#include "machine/asic65.h" #include "includes/slapstic.h" #include "includes/harddriv.h" @@ -1543,7 +1537,7 @@ WRITE16_MEMBER( harddriv_state::hd68k_dsk_control_w ) break; case 4: /* ASIC65 reset */ - asic65_reset(space.machine(), !val); + m_asic65->reset_line(!val); break; case 7: /* LED */ @@ -1686,7 +1680,7 @@ WRITE16_MEMBER( harddriv_state::hddspcom_control_w ) switch (offset & 7) { case 2: /* ASIC65 reset */ - asic65_reset(space.machine(), !val); + m_asic65->reset_line(!val); break; default: