diff options
Diffstat (limited to 'src/mame/drivers/model2.cpp')
-rw-r--r-- | src/mame/drivers/model2.cpp | 1173 |
1 files changed, 560 insertions, 613 deletions
diff --git a/src/mame/drivers/model2.cpp b/src/mame/drivers/model2.cpp index 624bd2eb24d..e304ab9ed16 100644 --- a/src/mame/drivers/model2.cpp +++ b/src/mame/drivers/model2.cpp @@ -11,7 +11,6 @@ TODO: - z-sort, focal distance, color gamma and Mip Mapping still needs to be properly sorted in the renderer; - - FIFO needs to be properly emulated in the various CPU cores (we currently rely on some workarounds); - sound comms still needs some work (sometimes m68k doesn't get some commands or play them with a delay); - 2C games needs TGPx4 emulation; - outputs and artwork (for gearbox indicators); @@ -92,9 +91,6 @@ #include "cpu/i960/i960.h" #include "cpu/m68000/m68000.h" -#include "cpu/mb86233/mb86233.h" -#include "cpu/mb86235/mb86235.h" -#include "cpu/sharc/sharc.h" #include "cpu/z80/z80.h" #include "machine/clock.h" #include "machine/cxd1095.h" @@ -107,205 +103,6 @@ #include "speaker.h" -enum { - DSP_TYPE_TGP = 1, - DSP_TYPE_SHARC = 2, - DSP_TYPE_TGPX4 = 3 -}; - - -#define COPRO_FIFOIN_SIZE 32000 -bool model2_state::copro_fifoin_pop(device_t *device, uint32_t *result,uint32_t offset, uint32_t mem_mask) -{ - uint32_t r; - - if (m_copro_fifoin_num == 0) - { - if (m_dsp_type == DSP_TYPE_TGP) - return false; - - fatalerror("Copro FIFOIN underflow (at %08X)\n", device->safe_pc()); - } - - r = m_copro_fifoin_data[m_copro_fifoin_rpos++]; - - if (m_copro_fifoin_rpos == COPRO_FIFOIN_SIZE) - { - m_copro_fifoin_rpos = 0; - } - - m_copro_fifoin_num--; - if (m_dsp_type == DSP_TYPE_SHARC) - { - if (m_copro_fifoin_num == 0) - { - dynamic_cast<adsp21062_device *>(device)->set_flag_input(0, ASSERT_LINE); - } - else - { - dynamic_cast<adsp21062_device *>(device)->set_flag_input(0, CLEAR_LINE); - } - } - - *result = r; - - return true; -} - -READ_LINE_MEMBER(model2_state::copro_tgp_fifoin_pop_ok) -{ - if (m_copro_fifoin_num == 0) - { - return CLEAR_LINE; - } - - return ASSERT_LINE; -} - - -READ32_MEMBER(model2_state::copro_tgp_fifoin_pop) -{ - uint32_t r = m_copro_fifoin_data[m_copro_fifoin_rpos++]; - - - if (m_copro_fifoin_rpos == COPRO_FIFOIN_SIZE) - { - m_copro_fifoin_rpos = 0; - } - - m_copro_fifoin_num--; - - return r; -} - - -void model2_state::copro_fifoin_push(device_t *device, uint32_t data, uint32_t offset, uint32_t mem_mask) -{ - if (m_copro_fifoin_num == COPRO_FIFOIN_SIZE) - { - fatalerror("Copro FIFOIN overflow (at %08X)\n", device->safe_pc()); - } - - //printf("COPRO FIFOIN at %08X, %08X, %f\n", device->safe_pc(), data, *(float*)&data); - - m_copro_fifoin_data[m_copro_fifoin_wpos++] = data; - if (m_copro_fifoin_wpos == COPRO_FIFOIN_SIZE) - { - m_copro_fifoin_wpos = 0; - } - - m_copro_fifoin_num++; - - // clear FIFO empty flag on SHARC - if (m_dsp_type == DSP_TYPE_SHARC) - { - dynamic_cast<adsp21062_device *>(device)->set_flag_input(0, CLEAR_LINE); - } -} - - -#define COPRO_FIFOOUT_SIZE 32000 -uint32_t model2_state::copro_fifoout_pop(address_space &space,uint32_t offset, uint32_t mem_mask) -{ - uint32_t r; - - m_maincpu->i960_noburst(); - - if (m_copro_fifoout_num == 0) - { - /* Reading from empty FIFO causes the i960 to enter wait state */ - m_maincpu->i960_stall(); - - /* spin the main cpu and let the TGP catch up */ - // TODO: Daytona needs a much shorter spin time (like 25 usecs), but that breaks other games even moreso - // @seealso http://www.mameworld.info/ubbthreads/showflat.php?Cat=&Number=358069&page=&view=&sb=5&o=&vc=1 - // Update: skytargt needs an ever smaller time otherwise gameplay is too slow. - m_maincpu->spin_until_time(attotime::from_usec(1)); - - // fix ld rN, (rN) case, ask desert, pltkids, zerogun ... - return 0x00884000+offset*4; - } - - r = m_copro_fifoout_data[m_copro_fifoout_rpos++]; - - if (m_copro_fifoout_rpos == COPRO_FIFOOUT_SIZE) - { - m_copro_fifoout_rpos = 0; - } - - m_copro_fifoout_num--; - -// logerror("COPRO FIFOOUT POP %08X, %f, %d\n", r, *(float*)&r,m_copro_fifoout_num); - - // set SHARC flag 1: 0 if space available, 1 if FIFO full - if (m_dsp_type == DSP_TYPE_SHARC) - { - if (m_copro_fifoout_num == COPRO_FIFOOUT_SIZE) - { - machine().device<adsp21062_device>("dsp")->set_flag_input(1, ASSERT_LINE); - } - else - { - machine().device<adsp21062_device>("dsp")->set_flag_input(1, CLEAR_LINE); - } - } - - return r; -} - -void model2_state::copro_fifoout_push(device_t *device, uint32_t data,uint32_t offset,uint32_t mem_mask) -{ - if (m_copro_fifoout_num == COPRO_FIFOOUT_SIZE) - { - fatalerror("Copro FIFOOUT overflow (at %08X)\n", device->safe_pc()); - } - -// logerror("COPRO FIFOOUT PUSH %08X, %f, %d\n", data, *(float*)&data,m_copro_fifoout_num); - - m_copro_fifoout_data[m_copro_fifoout_wpos++] = data; - if (m_copro_fifoout_wpos == COPRO_FIFOOUT_SIZE) - { - m_copro_fifoout_wpos = 0; - } - - m_copro_fifoout_num++; - - // set SHARC flag 1: 0 if space available, 1 if FIFO full - if (m_dsp_type == DSP_TYPE_SHARC) - { - if (m_copro_fifoout_num == COPRO_FIFOOUT_SIZE) - { - dynamic_cast<adsp21062_device *>(device)->set_flag_input(1, ASSERT_LINE); - - //device->execute().set_input_line(SHARC_INPUT_FLAG1, ASSERT_LINE); - } - else - { - dynamic_cast<adsp21062_device *>(device)->set_flag_input(1, CLEAR_LINE); - - //device->execute().set_input_line(SHARC_INPUT_FLAG1, CLEAR_LINE); - } - } -} - -WRITE32_MEMBER(model2_state::copro_tgp_fifoout_push) -{ - if (m_copro_fifoout_num == COPRO_FIFOOUT_SIZE) - { - fatalerror("Copro FIFOOUT overflow (at %08X)\n", m_tgp->pc()); - } - -// logerror("COPRO FIFOOUT PUSH %08X, %f, %d\n", data, *(float*)&data,m_copro_fifoout_num); - - m_copro_fifoout_data[m_copro_fifoout_wpos++] = data; - if (m_copro_fifoout_wpos == COPRO_FIFOOUT_SIZE) - { - m_copro_fifoout_wpos = 0; - } - - m_copro_fifoout_num++; -} - /* Timers - these count down at 25 MHz and pull IRQ2 when they hit 0 */ READ32_MEMBER(model2_state::timers_r) { @@ -359,9 +156,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(model2_state::model2_timer_cb) MACHINE_START_MEMBER(model2_state,model2) { - m_copro_fifoin_data = make_unique_clear<uint32_t[]>(COPRO_FIFOIN_SIZE); - m_copro_fifoout_data = make_unique_clear<uint32_t[]>(COPRO_FIFOOUT_SIZE); - m_port_1c00004 = 1; m_port_1c00006 = 2; m_port_1c00010 = 0; @@ -388,20 +182,94 @@ MACHINE_START_MEMBER(model2_state,model2) save_item(NAME(m_timerrun[2])); save_item(NAME(m_timerrun[3])); - save_item(NAME(m_copro_fifoin_rpos)); - save_item(NAME(m_copro_fifoin_wpos)); - save_item(NAME(m_copro_fifoin_num)); - save_item(NAME(m_copro_fifoout_rpos)); - save_item(NAME(m_copro_fifoout_wpos)); - save_item(NAME(m_copro_fifoout_num)); save_item(NAME(m_geo_write_start_address)); save_item(NAME(m_geo_read_start_address)); } -MACHINE_START_MEMBER(model2_state,srallyc) +MACHINE_START_MEMBER(model2_tgp_state,model2_tgp) +{ + MACHINE_START_CALL_MEMBER(model2); + + m_copro_fifo_in->setup(16, + [this]() { m_copro_tgp->stall(); }, + [this]() { m_copro_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_copro_tgp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }); + m_copro_fifo_out->setup(16, + [this]() { m_maincpu->i960_stall(); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [this]() { m_copro_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_copro_tgp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }); +} + +MACHINE_START_MEMBER(model2b_state,model2b) { MACHINE_START_CALL_MEMBER(model2); + m_copro_fifo_in->setup(16, + [this]() { }, + [this]() { }, + [this]() { }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [this]() { m_copro_adsp->set_flag_input(0, m_copro_fifo_in->is_empty()); }, + [this]() { m_copro_adsp->set_flag_input(0, m_copro_fifo_in->is_empty()); }); + m_copro_fifo_out->setup(16, + [this]() { m_maincpu->i960_stall(); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [this]() { }, + [this]() { }, + [this]() { m_copro_adsp->set_flag_input(1, m_copro_fifo_in->is_full()); }, + [this]() { m_copro_adsp->set_flag_input(1, m_copro_fifo_in->is_full()); }); +} + +MACHINE_START_MEMBER(model2c_state,model2c) +{ + MACHINE_START_CALL_MEMBER(model2); + + m_copro_fifo_in->setup(16, + [this]() { }, + [this]() { }, + [this]() { }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }); + m_copro_fifo_out->setup(16, + [this]() { m_maincpu->i960_stall(); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); }, + [this]() { m_maincpu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); }, + [this]() { }, + [this]() { }); +} + +MACHINE_START_MEMBER(model2_tgp_state,srallyc) +{ + MACHINE_START_CALL_MEMBER(model2_tgp); + + m_port_1c00004 = 2; + m_port_1c00006 = 3; + m_port_1c00010 = 0; + m_port_1c00012 = 1; + m_port_1c00014 = 4; +} + +MACHINE_START_MEMBER(model2b_state,srallyc) +{ + MACHINE_START_CALL_MEMBER(model2b); + + m_port_1c00004 = 2; + m_port_1c00006 = 3; + m_port_1c00010 = 0; + m_port_1c00012 = 1; + m_port_1c00014 = 4; +} + +MACHINE_START_MEMBER(model2c_state,srallyc) +{ + MACHINE_START_CALL_MEMBER(model2c); + m_port_1c00004 = 2; m_port_1c00006 = 3; m_port_1c00010 = 0; @@ -443,26 +311,12 @@ MACHINE_RESET_MEMBER(model2_state,model2_common) for (i=0;i<0x20000/4;i++) m_bufferram[i] = 0x07800f0f; - m_copro_fifoin_rpos = 0; - m_copro_fifoin_wpos = 0; - m_copro_fifoin_num = 0; - m_copro_fifoout_rpos = 0; - m_copro_fifoout_wpos = 0; - m_copro_fifoout_num = 0; + m_copro_fifo_in->clear(); + m_copro_fifo_out->clear(); m_geo_write_start_address = 0; m_geo_read_start_address = 0; } -MACHINE_RESET_MEMBER(model2_state,model2o) -{ - MACHINE_RESET_CALL_MEMBER(model2_common); - - // hold TGP in halt until we have code - m_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); - - m_dsp_type = DSP_TYPE_TGP; -} - MACHINE_RESET_MEMBER(model2_state,model2_scsp) { membank("bank4")->set_base(memregion("scsp")->base() + 0x200000); @@ -474,51 +328,51 @@ MACHINE_RESET_MEMBER(model2_state,model2_scsp) m_scsp->set_ram_base(m_soundram); } -MACHINE_RESET_MEMBER(model2_state,model2) +MACHINE_RESET_MEMBER(model2_tgp_state,model2_tgp) { MACHINE_RESET_CALL_MEMBER(model2_common); - MACHINE_RESET_CALL_MEMBER(model2_scsp); // hold TGP in halt until we have code - m_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); + m_copro_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); +} - m_dsp_type = DSP_TYPE_TGP; +MACHINE_RESET_MEMBER(model2o_state,model2o) +{ + MACHINE_RESET_CALL_MEMBER(model2_tgp); +} + +MACHINE_RESET_MEMBER(model2a_state,model2a) +{ + MACHINE_RESET_CALL_MEMBER(model2_tgp); + MACHINE_RESET_CALL_MEMBER(model2_scsp); } -MACHINE_RESET_MEMBER(model2_state,model2b) +MACHINE_RESET_MEMBER(model2b_state,model2b) { MACHINE_RESET_CALL_MEMBER(model2_common); MACHINE_RESET_CALL_MEMBER(model2_scsp); - m_dsp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); + m_copro_adsp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); // set FIFOIN empty flag on SHARC - m_dsp->set_input_line(SHARC_INPUT_FLAG0, ASSERT_LINE); + m_copro_adsp->set_input_line(SHARC_INPUT_FLAG0, ASSERT_LINE); // clear FIFOOUT buffer full flag on SHARC - m_dsp->set_input_line(SHARC_INPUT_FLAG1, CLEAR_LINE); - - m_dsp_type = DSP_TYPE_SHARC; + m_copro_adsp->set_input_line(SHARC_INPUT_FLAG1, CLEAR_LINE); } -MACHINE_RESET_MEMBER(model2_state,model2c) +MACHINE_RESET_MEMBER(model2c_state,model2c) { MACHINE_RESET_CALL_MEMBER(model2_common); MACHINE_RESET_CALL_MEMBER(model2_scsp); - m_tgpx4->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); - - m_dsp_type = DSP_TYPE_TGPX4; -} - -static void chcolor(palette_device &palette, pen_t color, uint16_t data) -{ - palette.set_pen_color(color, pal5bit(data >> 0), pal5bit(data >> 5), pal5bit(data >> 10)); + m_copro_tgpx4->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); } WRITE16_MEMBER(model2_state::palette_w) { COMBINE_DATA(&m_palram[offset]); - chcolor(*m_palette, offset, m_palram[offset]); + u16 color = m_palram[offset]; + m_palette->set_pen_color(offset, pal5bit(color >> 0), pal5bit(color >> 5), pal5bit(color >> 10)); } READ16_MEMBER(model2_state::palette_r) @@ -557,7 +411,7 @@ READ32_MEMBER(model2_state::fifo_control_2a_r) { uint32_t r = 0; - if (m_copro_fifoout_num == 0) + if (m_copro_fifo_out->is_empty()) { r |= 1; } @@ -779,38 +633,12 @@ WRITE32_MEMBER(model2_state::srallyc_devices_w) } } -/*****************************************************************************/ -/* COPRO */ - +// Coprocessor - Common READ32_MEMBER(model2_state::copro_prg_r) { return 0xffffffff; } - -WRITE32_MEMBER(model2_state::copro_prg_w) -{ - if (m_coproctl & 0x80000000) - { - logerror("copro_prg_w: %08X: %08X\n", m_coprocnt, data); - if (m_coprocnt & 1) - { - m_tgpx4_program[m_coprocnt / 2] &= 0xffffffffU; - m_tgpx4_program[m_coprocnt / 2] |= u64(data) << 32; - } - else - { - m_tgpx4_program[m_coprocnt / 2] &= 0xffffffff00000000U; - m_tgpx4_program[m_coprocnt / 2] |= data; - } - m_coprocnt++; - } - else - { - //osd_printf_debug("COPRO: push %08X\n", data); - } -} - READ32_MEMBER(model2_state::copro_ctl1_r) { return m_coproctl; @@ -825,155 +653,259 @@ WRITE32_MEMBER(model2_state::copro_ctl1_w) { logerror("Start copro upload\n"); m_coprocnt = 0; - - if(m_dsp_type == DSP_TYPE_TGP) - m_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); + copro_halt(); } else { logerror("Boot copro, %d dwords\n", m_coprocnt); - switch(m_dsp_type) - { - case DSP_TYPE_TGP: - // Model 2 / 2A games needs to reset TGP when exiting service mode - m_tgp->set_input_line(INPUT_LINE_RESET, PULSE_LINE); - m_tgp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); - break; - case DSP_TYPE_SHARC: - m_dsp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); - break; - case DSP_TYPE_TGPX4: - m_tgpx4->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); - break; - } + copro_boot(); } } COMBINE_DATA(&m_coproctl); } -WRITE32_MEMBER(model2_state::copro_function_port_w) + + +// Coprocessor - TGP +void model2_tgp_state::copro_tgp_prog_map(address_map &map) +{ + map(0x000, 0xfff).ram().share("copro_tgp_program"); +} + +void model2_tgp_state::copro_tgp_data_map(address_map &map) +{ + map(0x0000, 0x00ff).ram(); + map(0x0200, 0x03ff).ram(); +} + +void model2_tgp_state::copro_tgp_bank_map(address_map &map) +{ + map(0x00020, 0x00023).rw(this, FUNC(model2_tgp_state::copro_sincos_r), FUNC(model2_tgp_state::copro_sincos_w)); + map(0x00024, 0x00027).rw(this, FUNC(model2_tgp_state::copro_atan_r), FUNC(model2_tgp_state::copro_atan_w)); + map(0x00028, 0x00029).rw(this, FUNC(model2_tgp_state::copro_inv_r), FUNC(model2_tgp_state::copro_inv_w)); + map(0x0002a, 0x0002b).rw(this, FUNC(model2_tgp_state::copro_isqrt_r), FUNC(model2_tgp_state::copro_isqrt_w)); + + map(0x10000, 0x1ffff).rw(this, FUNC(model2_tgp_state::copro_tgp_memory_r), FUNC(model2_tgp_state::copro_tgp_memory_w)); +} + +void model2_tgp_state::copro_tgp_io_map(address_map &map) +{ + map(0x0000, 0xffff).m(m_copro_tgp_bank, FUNC(address_map_bank_device::amap32)); +} + +void model2_tgp_state::copro_tgp_rf_map(address_map &map) +{ + map(0x0, 0x0).nopw(); // leds? busy flag? + map(0x1, 0x1).r(m_copro_fifo_in, FUNC(generic_fifo_u32_device::read)); + map(0x2, 0x2).w(m_copro_fifo_out, FUNC(generic_fifo_u32_device::write)); + map(0x3, 0x3).w(this, FUNC(model2_tgp_state::copro_tgp_bank_w)); +} + +READ32_MEMBER(model2_tgp_state::copro_tgp_memory_r) +{ + offs_t adr = (m_copro_tgp_bank_reg & 0xff0000) | offset; + + if(adr & 0x800000) { + adr &= (m_copro_data->bytes() >> 2) - 1; + return m_copro_data->as_u32(adr); + } + + if(adr & 0x400000) { + adr &= 0x7fff; + return m_bufferram[adr]; + } + + return 0; +} + +WRITE32_MEMBER(model2_tgp_state::copro_tgp_memory_w) +{ + offs_t adr = (m_copro_tgp_bank_reg & 0xff0000) | offset; + if(adr & 0x400000) { + adr &= 0x7fff; + COMBINE_DATA(&m_bufferram[adr]); + } +} + +WRITE32_MEMBER(model2_tgp_state::copro_tgp_bank_w) +{ + COMBINE_DATA(&m_copro_tgp_bank_reg); + m_copro_tgp_bank->set_bank(m_copro_tgp_bank_reg & 0xc00000 ? 1 : 0); +} + +WRITE32_MEMBER(model2_tgp_state::copro_sincos_w) +{ + COMBINE_DATA(&m_copro_sincos_base); +} + +READ32_MEMBER(model2_tgp_state::copro_sincos_r) +{ + offs_t ang = m_copro_sincos_base + offset * 0x4000; + offs_t index = ang & 0x3fff; + if(ang & 0x4000) + index ^= 0x3fff; + u32 result = m_copro_tgp_tables[index]; + if(ang & 0x8000) + result ^= 0x80000000; + return result; +} + +WRITE32_MEMBER(model2_tgp_state::copro_inv_w) +{ + COMBINE_DATA(&m_copro_inv_base); +} + +READ32_MEMBER(model2_tgp_state::copro_inv_r) +{ + offs_t index = ((m_copro_inv_base >> 9) & 0x3ffe) | (offset & 1); + u32 result = m_copro_tgp_tables[index | 0x8000]; + u8 bexp = (m_copro_inv_base >> 23) & 0xff; + u8 exp = (result >> 23) + (0x7f - bexp); + result = (result & 0x807fffff) | (exp << 23); + if(m_copro_inv_base & 0x80000000) + result ^= 0x80000000; + return result; +} + +WRITE32_MEMBER(model2_tgp_state::copro_isqrt_w) +{ + COMBINE_DATA(&m_copro_isqrt_base); +} + +READ32_MEMBER(model2_tgp_state::copro_isqrt_r) +{ + offs_t index = 0x2000 ^ (((m_copro_isqrt_base>> 10) & 0x3ffe) | (offset & 1)); + u32 result = m_copro_tgp_tables[index | 0xc000]; + u8 bexp = (m_copro_isqrt_base >> 24) & 0x7f; + u8 exp = (result >> 23) + (0x3f - bexp); + result = (result & 0x807fffff) | (exp << 23); + if(!(offset & 1)) + result &= 0x7fffffff; + return result; +} + +WRITE32_MEMBER(model2_tgp_state::copro_atan_w) +{ + COMBINE_DATA(&m_copro_atan_base[offset]); + m_copro_tgp->gpio0_w((m_copro_atan_base[0] & 0x7fffffff) <= (m_copro_atan_base[1] & 0x7fffffff)); +} + +READ32_MEMBER(model2_tgp_state::copro_atan_r) +{ + u8 ie = 0x88 - (m_copro_atan_base[3] >> 23); + + bool s0 = m_copro_atan_base[0] & 0x80000000; + bool s1 = m_copro_atan_base[1] & 0x80000000; + bool s2 = (m_copro_atan_base[0] & 0x7fffffff) <= (m_copro_atan_base[1] & 0x7fffffff); + + offs_t im = m_copro_atan_base[3] & 0x7fffff; + offs_t index = ie <= 0x17 ? (im | 0x800000) >> ie : 0; + if(index == 0x4000) + index = 0x3fff; + + u32 result = m_copro_tgp_tables[index | 0x4000]; + + if(s0 ^ s1 ^ s2) + result >>= 16; + if(s2) + result += 0x4000; + if((s0 && !s2) || (s1 && s2)) + result += 0x8000; + + return result & 0xffff; +} + +WRITE32_MEMBER(model2_tgp_state::copro_function_port_w) { uint32_t d = data & 0x800fffff; uint32_t a = (offset >> 2) & 0xff; d |= a << 23; - //logerror("copro_function_port_w: %08X, %08X, %08X\n", data, offset, mem_mask); - if (m_dsp_type == DSP_TYPE_SHARC) - copro_fifoin_push(machine().device("dsp"), d,offset,mem_mask); - else if (m_dsp_type == DSP_TYPE_TGP) - copro_fifoin_push(machine().device("tgp"), d,offset,mem_mask); - else if (m_dsp_type == DSP_TYPE_TGPX4) - { - m_maincpu->i960_noburst(); + m_copro_fifo_in->push(u32(d)); +} - if (m_tgpx4->is_fifoin_full()) - { - //fatalerror("model2.cpp: unsupported i960->tgpx4 fifo full"); - /* Writing to full FIFO causes the i960 to enter wait state */ - m_maincpu->i960_stall(); - /* spin the main cpu and let the TGP catch up */ - m_maincpu->spin_until_time(attotime::from_usec(1)); - return; - } +void model2_tgp_state::copro_halt() +{ + m_copro_tgp->set_input_line(INPUT_LINE_HALT, ASSERT_LINE); +} - m_tgpx4->fifoin_w(d); - } +void model2_tgp_state::copro_boot() +{ + m_copro_tgp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); + m_copro_tgp->set_input_line(INPUT_LINE_RESET, PULSE_LINE); } -READ32_MEMBER(model2_state::copro_fifo_r) +READ32_MEMBER(model2_tgp_state::copro_fifo_r) { - //logerror("copro_fifo_r: %08X, %08X\n", offset, mem_mask); - if (m_dsp_type == DSP_TYPE_SHARC || m_dsp_type == DSP_TYPE_TGP) + m_maincpu->i960_noburst(); + return m_copro_fifo_out->pop(); +} + +WRITE32_MEMBER(model2_tgp_state::copro_fifo_w) +{ + m_maincpu->i960_noburst(); + if (m_coproctl & 0x80000000) { - return copro_fifoout_pop(space, offset, mem_mask); + m_copro_tgp_program[m_coprocnt] = data; + m_coprocnt++; } else - { - // TODO -// printf("FIFO OUT read\n"); - if (m_tgpx4->is_fifoout0_empty()) - { - /* Reading from empty FIFO causes the i960 to enter wait state */ - downcast<i960_cpu_device &>(*m_maincpu).i960_stall(); - /* spin the main cpu and let the TGP catch up */ - m_maincpu->spin_until_time(attotime::from_usec(1)); + m_copro_fifo_in->push(u32(data)); +} - return 0x00884000+offset*4; - } - else - { - return (uint32_t)(m_tgpx4->fifoout0_r()); - } - } - return 0; + + +// Coprocessor - SHARC + +READ32_MEMBER(model2b_state::copro_sharc_buffer_r) +{ + return m_bufferram[offset & 0x7fff]; } -READ32_MEMBER(model2c_state::fifo_control_2c_r) +WRITE32_MEMBER(model2b_state::copro_sharc_buffer_w) { - return (m_tgpx4->is_fifoout0_empty() == true) ? 1 : 0; + m_bufferram[offset & 0x7fff] = data; } -WRITE32_MEMBER(model2_state::copro_fifo_w) +void model2b_state::copro_sharc_map(address_map &map) { + map(0x0400000, 0x0bfffff).r(m_copro_fifo_in, FUNC(generic_fifo_u32_device::read)); + map(0x0c00000, 0x13fffff).w(m_copro_fifo_out, FUNC(generic_fifo_u32_device::write)); + map(0x1400000, 0x1bfffff).rw(this, FUNC(model2b_state::copro_sharc_buffer_r), FUNC(model2b_state::copro_sharc_buffer_w)); + map(0x1c00000, 0x1dfffff).rom().region("copro_data", 0); +} + +void model2b_state::copro_halt() +{ +} + +void model2b_state::copro_boot() +{ + m_copro_adsp->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); +} + +READ32_MEMBER(model2b_state::copro_fifo_r) +{ + m_maincpu->i960_noburst(); + return m_copro_fifo_out->pop(); +} + +WRITE32_MEMBER(model2b_state::copro_fifo_w) +{ + m_maincpu->i960_noburst(); if (m_coproctl & 0x80000000) { - if (m_dsp_type == DSP_TYPE_SHARC) - { - machine().device<adsp21062_device>("dsp")->external_dma_write(m_coprocnt, data & 0xffff); - } - else if (m_dsp_type == DSP_TYPE_TGP) - { - m_tgp_program[m_coprocnt] = data; - } - else if (m_dsp_type == DSP_TYPE_TGPX4) - { - if (m_coprocnt & 1) - { - m_tgpx4_program[m_coprocnt / 2] &= 0xffffffffU; - m_tgpx4_program[m_coprocnt / 2] |= u64(data) << 32; - } - else - { - m_tgpx4_program[m_coprocnt / 2] &= 0xffffffff00000000U; - m_tgpx4_program[m_coprocnt / 2] |= data; - } - } - + m_copro_adsp->external_dma_write(m_coprocnt, data & 0xffff); m_coprocnt++; } else { -// if(m_coprocnt == 0) -// return; - - //osd_printf_debug("copro_fifo_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, m_maincpu->pc()); - if (m_dsp_type == DSP_TYPE_SHARC) - copro_fifoin_push(machine().device("dsp"), data,offset,mem_mask); - else if (m_dsp_type == DSP_TYPE_TGP) - copro_fifoin_push(machine().device("tgp"), data,offset,mem_mask); - else if (m_dsp_type == DSP_TYPE_TGPX4) - { - m_maincpu->i960_noburst(); - - if (m_tgpx4->is_fifoin_full()) - { - //fatalerror("model2.cpp: unsupported i960->tgpx4 fifo full"); - /* Writing to full FIFO causes the i960 to enter wait state */ - m_maincpu->i960_stall(); - /* spin the main cpu and let the TGP catch up */ - m_maincpu->spin_until_time(attotime::from_usec(1)); - } - else - { -// printf("push %08X at %08X\n", data, m_maincpu->pc()); - m_tgpx4->fifoin_w(data); - } - } + m_copro_fifo_in->push(u32(data)); } } -WRITE32_MEMBER(model2_state::copro_sharc_iop_w) +WRITE32_MEMBER(model2b_state::copro_sharc_iop_w) { /* FIXME: clean this mess */ if ((strcmp(machine().system().name, "schamp" ) == 0) || @@ -987,13 +919,13 @@ WRITE32_MEMBER(model2_state::copro_sharc_iop_w) (strcmp(machine().system().name, "vonj" ) == 0) || (strcmp(machine().system().name, "rchase2" ) == 0)) { - machine().device<adsp21062_device>("dsp")->external_iop_write(offset, data); + m_copro_adsp->external_iop_write(offset, data); } else { if(offset == 0x10/4) { - machine().device<adsp21062_device>("dsp")->external_iop_write(offset, data); + m_copro_adsp->external_iop_write(offset, data); return; } @@ -1004,14 +936,83 @@ WRITE32_MEMBER(model2_state::copro_sharc_iop_w) else { m_iop_data |= (data & 0xffff) << 16; - machine().device<adsp21062_device>("dsp")->external_iop_write(offset, m_iop_data); + m_copro_adsp->external_iop_write(offset, m_iop_data); } m_iop_write_num++; } } +WRITE32_MEMBER(model2b_state::copro_function_port_w) +{ + uint32_t d = data & 0x800fffff; + uint32_t a = (offset >> 2) & 0xff; + d |= a << 23; + + m_copro_fifo_in->push(u32(d)); +} + + + +// Coprocessor - TGPx4 +void model2c_state::copro_halt() +{ +} + +void model2c_state::copro_boot() +{ + m_copro_tgpx4->set_input_line(INPUT_LINE_HALT, CLEAR_LINE); +} + +READ32_MEMBER(model2c_state::copro_fifo_r) +{ + m_maincpu->i960_noburst(); + return m_copro_fifo_out->pop(); +} + +WRITE32_MEMBER(model2c_state::copro_fifo_w) +{ + m_maincpu->i960_noburst(); + if (m_coproctl & 0x80000000) + { + if (m_coprocnt & 1) + { + m_copro_tgpx4_program[m_coprocnt / 2] &= 0xffffffffU; + m_copro_tgpx4_program[m_coprocnt / 2] |= u64(data) << 32; + } + else + { + m_copro_tgpx4_program[m_coprocnt / 2] &= 0xffffffff00000000U; + m_copro_tgpx4_program[m_coprocnt / 2] |= data; + } + + m_coprocnt++; + } + else + { + m_copro_fifo_in->push(u32(data)); + } +} + +WRITE32_MEMBER(model2c_state::copro_function_port_w) +{ + uint32_t d = data & 0x800fffff; + uint32_t a = (offset >> 2) & 0xff; + d |= a << 23; + + m_copro_fifo_in->push(u32(d)); +} +void model2c_state::copro_tgpx4_map(address_map &map) +{ + map(0x00000000, 0x00007fff).ram().share("copro_tgpx4_program"); +} +void model2c_state::copro_tgpx4_data_map(address_map &map) +{ +// map(0x00000000, 0x000003ff) internal RAM + map(0x00400000, 0x00407fff).ram().share("bufferram").mirror(0x003f8000); + map(0x00800000, 0x008fffff).rom().region("copro_data",0); // ROM data +} /*****************************************************************************/ @@ -1343,7 +1344,7 @@ WRITE32_MEMBER(model2_state::render_mode_w) // osd_printf_debug("Mode = %08X\n", data); } -WRITE32_MEMBER(model2_state::model2o_tex_w0) +WRITE32_MEMBER(model2_tgp_state::tex0_w) { if ( (offset & 1) == 0 ) { @@ -1357,7 +1358,7 @@ WRITE32_MEMBER(model2_state::model2o_tex_w0) } } -WRITE32_MEMBER(model2_state::model2o_tex_w1) +WRITE32_MEMBER(model2_tgp_state::tex1_w) { if ( (offset & 1) == 0 ) { @@ -1513,25 +1514,31 @@ READ8_MEMBER(model2o_state::model2o_in_r) } } +/* model 2/2a common memory map */ +void model2_tgp_state::model2_tgp_mem(address_map &map) +{ + model2_base_mem(map); + + map(0x00804000, 0x00807fff).rw(this, FUNC(model2_tgp_state::geo_prg_r), FUNC(model2_tgp_state::geo_prg_w)); + map(0x00880000, 0x00883fff).w(this, FUNC(model2_tgp_state::copro_function_port_w)); + map(0x00884000, 0x00887fff).rw(this, FUNC(model2_tgp_state::copro_fifo_r), FUNC(model2_tgp_state::copro_fifo_w)); + + map(0x00980000, 0x00980003).rw(this, FUNC(model2_tgp_state::copro_ctl1_r), FUNC(model2_tgp_state::copro_ctl1_w)); + map(0x00980008, 0x0098000b).w(this, FUNC(model2_tgp_state::geo_ctl1_w)); + map(0x009c0000, 0x009cffff).rw(this, FUNC(model2_tgp_state::model2_serial_r), FUNC(model2_tgp_state::model2_serial_w)); + + map(0x12000000, 0x121fffff).ram().w(this, FUNC(model2o_state::tex0_w)).mirror(0x200000).share("textureram0"); // texture RAM 0 + map(0x12400000, 0x125fffff).ram().w(this, FUNC(model2o_state::tex1_w)).mirror(0x200000).share("textureram1"); // texture RAM 1 +} + /* original Model 2 overrides */ void model2o_state::model2o_mem(address_map &map) { - model2_base_mem(map); + model2_tgp_mem(map); map(0x00200000, 0x0021ffff).ram(); map(0x00220000, 0x0023ffff).rom().region("maincpu", 0x20000); - - map(0x00804000, 0x00807fff).rw(this, FUNC(model2o_state::geo_prg_r), FUNC(model2o_state::geo_prg_w)); - map(0x00880000, 0x00883fff).w(this, FUNC(model2o_state::copro_function_port_w)); - map(0x00884000, 0x00887fff).rw(this, FUNC(model2o_state::copro_fifo_r), FUNC(model2o_state::copro_fifo_w)); - - map(0x00980000, 0x00980003).rw(this, FUNC(model2o_state::copro_ctl1_r), FUNC(model2o_state::copro_ctl1_w)); map(0x00980004, 0x00980007).r(this, FUNC(model2o_state::fifo_control_2o_r)); - map(0x00980008, 0x0098000b).w(this, FUNC(model2o_state::geo_ctl1_w)); - map(0x009c0000, 0x009cffff).rw(this, FUNC(model2o_state::model2_serial_r), FUNC(model2o_state::model2_serial_w)); - - map(0x12000000, 0x121fffff).ram().w(this, FUNC(model2o_state::model2o_tex_w0)).mirror(0x200000).share("textureram0"); // texture RAM 0 - map(0x12400000, 0x125fffff).ram().w(this, FUNC(model2o_state::model2o_tex_w1)).mirror(0x200000).share("textureram1"); // texture RAM 1 map(0x01c00000, 0x01c0001f).r(this, FUNC(model2o_state::model2o_in_r)).umask32(0x00ff00ff); map(0x01c00040, 0x01c00043).r(this, FUNC(model2o_state::daytona_unk_r)); @@ -1603,10 +1610,11 @@ READ8_MEMBER(model2o_gtx_state::gtx_r) return ROM[m_gtx_state*0x100000+offset]; } -ADDRESS_MAP_START(model2o_gtx_state::model2o_gtx_mem) - AM_IMPORT_FROM(model2o_mem) - AM_RANGE(0x02c00000,0x02cfffff) AM_READ8(gtx_r,0xffffffff) -ADDRESS_MAP_END +void model2o_gtx_state::model2o_gtx_mem(address_map &map) +{ + model2o_mem(map); + map(0x02c00000,0x02cfffff).r(this, FUNC(model2o_gtx_state::gtx_r)); +} /* TODO: read by Sonic the Fighters (bit 1), unknown purpose */ READ32_MEMBER(model2_state::copro_status_r) @@ -1620,22 +1628,10 @@ READ32_MEMBER(model2_state::copro_status_r) /* 2A-CRX overrides */ void model2a_state::model2a_crx_mem(address_map &map) { - model2_base_mem(map); + model2_tgp_mem(map); map(0x00200000, 0x0023ffff).ram(); - map(0x00804000, 0x00807fff).rw(this, FUNC(model2a_state::geo_prg_r), FUNC(model2a_state::geo_prg_w)); - map(0x00880000, 0x00883fff).w(this, FUNC(model2a_state::copro_function_port_w)); - map(0x00884000, 0x00887fff).rw(this, FUNC(model2a_state::copro_fifo_r), FUNC(model2a_state::copro_fifo_w)); - - map(0x00980000, 0x00980003).rw(this, FUNC(model2a_state::copro_ctl1_r), FUNC(model2a_state::copro_ctl1_w)); - map(0x00980008, 0x0098000b).w(this, FUNC(model2a_state::geo_ctl1_w)); - map(0x00980014, 0x00980017).r(this, FUNC(model2a_state::copro_status_r)); - map(0x009c0000, 0x009cffff).rw(this, FUNC(model2a_state::model2_serial_r), FUNC(model2a_state::model2_serial_w)); - - map(0x12000000, 0x121fffff).ram().w(this, FUNC(model2a_state::model2o_tex_w0)).mirror(0x200000).share("textureram0"); // texture RAM 0 - map(0x12400000, 0x125fffff).ram().w(this, FUNC(model2a_state::model2o_tex_w1)).mirror(0x200000).share("textureram1"); // texture RAM 1 - map(0x01c00000, 0x01c0001f).r(this, FUNC(model2a_state::model2_crx_in_r)).umask32(0x00ff00ff); map(0x01c00000, 0x01c00003).w(this, FUNC(model2a_state::ctrl0_w)); map(0x01c00008, 0x01c0000f).nopw(); @@ -1709,7 +1705,6 @@ void model2c_state::model2c_crx_mem(address_map &map) map(0x00884000, 0x00887fff).rw(this, FUNC(model2c_state::copro_fifo_r), FUNC(model2c_state::copro_fifo_w)); map(0x00980000, 0x00980003).rw(this, FUNC(model2c_state::copro_ctl1_r), FUNC(model2c_state::copro_ctl1_w)); - map(0x00980004, 0x00980007).r(this, FUNC(model2c_state::fifo_control_2c_r)); map(0x00980008, 0x0098000b).w(this, FUNC(model2c_state::geo_ctl1_w)); map(0x00980014, 0x00980017).r(this, FUNC(model2c_state::copro_status_r)); map(0x009c0000, 0x009cffff).rw(this, FUNC(model2c_state::model2_serial_r), FUNC(model2c_state::model2_serial_w)); @@ -2336,7 +2331,7 @@ WRITE_LINE_MEMBER(model2_state::sound_ready_w) } #endif -TIMER_DEVICE_CALLBACK_MEMBER(model2_state::model2c_interrupt) +TIMER_DEVICE_CALLBACK_MEMBER(model2c_state::model2c_interrupt) { int scanline = param; @@ -2390,86 +2385,23 @@ WRITE16_MEMBER(model2_state::model2snd_ctrl) } } -ADDRESS_MAP_START(model2_state::model2_snd) - AM_RANGE(0x000000, 0x07ffff) AM_RAM AM_REGION("audiocpu", 0) AM_SHARE("soundram") - AM_RANGE(0x100000, 0x100fff) AM_DEVREADWRITE("scsp", scsp_device, read, write) - AM_RANGE(0x400000, 0x400001) AM_WRITE(model2snd_ctrl) - AM_RANGE(0x600000, 0x67ffff) AM_ROM AM_REGION("audiocpu", 0x80000) - AM_RANGE(0x800000, 0x9fffff) AM_ROM AM_REGION("scsp", 0) - AM_RANGE(0xa00000, 0xdfffff) AM_ROMBANK("bank4") - AM_RANGE(0xe00000, 0xffffff) AM_ROMBANK("bank5") -ADDRESS_MAP_END - - -WRITE8_MEMBER(model2_state::scsp_irq) +void model2_state::model2_snd(address_map &map) { - m_audiocpu->set_input_line(offset, data); + map(0x000000, 0x07ffff).ram().region("audiocpu", 0).share("soundram"); + map(0x100000, 0x100fff).rw(m_scsp, FUNC(scsp_device::read), FUNC(scsp_device::write)); + map(0x400000, 0x400001).w(this, FUNC(model2_state::model2snd_ctrl)); + map(0x600000, 0x67ffff).rom().region("audiocpu", 0x80000); + map(0x800000, 0x9fffff).rom().region("scsp", 0); + map(0xa00000, 0xdfffff).bankr("bank4"); + map(0xe00000, 0xffffff).bankr("bank5"); } -/*****************************************************************************/ -// SHARC memory maps - -READ32_MEMBER(model2_state::copro_sharc_input_fifo_r) -{ - uint32_t result = 0; - bool type; - - type = copro_fifoin_pop(machine().device("dsp"), &result,offset,mem_mask); - if(type == false) - printf("Read from empty FIFO?\n"); - return result; -} - -WRITE32_MEMBER(model2_state::copro_sharc_output_fifo_w) -{ - //osd_printf_debug("SHARC FIFOOUT push %08X\n", data); - copro_fifoout_push(machine().device("dsp"), data,offset,mem_mask); -} - -READ32_MEMBER(model2_state::copro_sharc_buffer_r) -{ - return m_bufferram[offset & 0x7fff]; -} - -WRITE32_MEMBER(model2_state::copro_sharc_buffer_w) -{ - m_bufferram[offset & 0x7fff] = data; -} - -ADDRESS_MAP_START(model2_state::copro_sharc_map) - AM_RANGE(0x0400000, 0x0bfffff) AM_READ(copro_sharc_input_fifo_r) - AM_RANGE(0x0c00000, 0x13fffff) AM_WRITE(copro_sharc_output_fifo_w) - AM_RANGE(0x1400000, 0x1bfffff) AM_READWRITE(copro_sharc_buffer_r, copro_sharc_buffer_w) - AM_RANGE(0x1c00000, 0x1dfffff) AM_ROM AM_REGION("copro_data", 0) -// AM_RANGE(0xffff8000, 0xffffffff) AM_READWRITE(copro_sharc_buffer_r, copro_sharc_buffer_w) // last bronx, cpu core bug? -ADDRESS_MAP_END - -#if 0 -ADDRESS_MAP_START(model2_state::geo_sharc_map) -ADDRESS_MAP_END -#endif - -/*****************************************************************************/ -/* TGP memory maps */ - -READ32_MEMBER(model2_state::copro_tgp_buffer_r) -{ - return m_bufferram[offset & 0x7fff]; -} - -WRITE32_MEMBER(model2_state::copro_tgp_buffer_w) +WRITE8_MEMBER(model2_state::scsp_irq) { - m_bufferram[offset&0x7fff] = data; + m_audiocpu->set_input_line(offset, data); } -ADDRESS_MAP_START(model2_state::copro_tgp_map) - AM_RANGE(0x00000000, 0x00007fff) AM_RAM AM_SHARE("tgp_program") - AM_RANGE(0x00400000, 0x00407fff) AM_READWRITE(copro_tgp_buffer_r, copro_tgp_buffer_w) - AM_RANGE(0x00800000, 0x009fffff) AM_ROM AM_REGION("tgp", 0) - AM_RANGE(0xff800000, 0xff9fffff) AM_ROM AM_REGION("tgp", 0) -ADDRESS_MAP_END - /*****************************************************************************/ #define VIDEO_CLOCK XTAL(32'000'000) @@ -2526,15 +2458,25 @@ MACHINE_CONFIG_START(model2o_state::model2o) MCFG_CPU_PROGRAM_MAP(model2o_mem) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model2_state, model2_interrupt, "screen", 0, 1) - MCFG_CPU_ADD("tgp", MB86233, 16000000) - MCFG_CPU_PROGRAM_MAP(copro_tgp_map) - MCFG_MB86233_FIFO_READ_CB(READ32(model2_state,copro_tgp_fifoin_pop)) - MCFG_MB86233_FIFO_READ_OK_CB(READLINE(model2_state,copro_tgp_fifoin_pop_ok)) - MCFG_MB86233_FIFO_WRITE_CB(WRITE32(model2_state,copro_tgp_fifoout_push)) - MCFG_MB86233_TABLE_REGION("copro_data") - - MCFG_MACHINE_START_OVERRIDE(model2_state,model2) - MCFG_MACHINE_RESET_OVERRIDE(model2_state,model2o) + MCFG_CPU_ADD("copro_tgp", MB86234, 16000000) + MCFG_CPU_PROGRAM_MAP(copro_tgp_prog_map) + MCFG_CPU_DATA_MAP(copro_tgp_data_map) + MCFG_CPU_IO_MAP(copro_tgp_io_map) + MCFG_DEVICE_ADDRESS_MAP(mb86233_device::AS_RF, copro_tgp_rf_map) + + MCFG_DEVICE_ADD("copro_tgp_bank", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(copro_tgp_bank_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(17) + MCFG_ADDRESS_MAP_BANK_SHIFT(-2) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000) + + MCFG_DEVICE_ADD("copro_fifo_in", GENERIC_FIFO_U32, 0) + MCFG_DEVICE_ADD("copro_fifo_out", GENERIC_FIFO_U32, 0) + + MCFG_MACHINE_START_OVERRIDE(model2_tgp_state,model2_tgp) + MCFG_MACHINE_RESET_OVERRIDE(model2o_state,model2o) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") MCFG_NVRAM_ADD_1FILL("backup1") @@ -2629,15 +2571,25 @@ MACHINE_CONFIG_START(model2a_state::model2a) MCFG_CPU_PROGRAM_MAP(model2a_crx_mem) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model2_state, model2_interrupt, "screen", 0, 1) - MCFG_CPU_ADD("tgp", MB86233, 16000000) - MCFG_CPU_PROGRAM_MAP(copro_tgp_map) - MCFG_MB86233_FIFO_READ_CB(READ32(model2_state,copro_tgp_fifoin_pop)) - MCFG_MB86233_FIFO_READ_OK_CB(READLINE(model2_state,copro_tgp_fifoin_pop_ok)) - MCFG_MB86233_FIFO_WRITE_CB(WRITE32(model2_state,copro_tgp_fifoout_push)) - MCFG_MB86233_TABLE_REGION("copro_data") - - MCFG_MACHINE_START_OVERRIDE(model2_state,model2) - MCFG_MACHINE_RESET_OVERRIDE(model2_state,model2) + MCFG_CPU_ADD("copro_tgp", MB86234, 16000000) + MCFG_CPU_PROGRAM_MAP(copro_tgp_prog_map) + MCFG_CPU_DATA_MAP(copro_tgp_data_map) + MCFG_CPU_IO_MAP(copro_tgp_io_map) + MCFG_DEVICE_ADDRESS_MAP(mb86233_device::AS_RF, copro_tgp_rf_map) + + MCFG_DEVICE_ADD("copro_tgp_bank", ADDRESS_MAP_BANK, 0) + MCFG_DEVICE_PROGRAM_MAP(copro_tgp_bank_map) + MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE) + MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(32) + MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(17) + MCFG_ADDRESS_MAP_BANK_SHIFT(-2) + MCFG_ADDRESS_MAP_BANK_STRIDE(0x10000) + + MCFG_DEVICE_ADD("copro_fifo_in", GENERIC_FIFO_U32, 0) + MCFG_DEVICE_ADD("copro_fifo_out", GENERIC_FIFO_U32, 0) + + MCFG_MACHINE_START_OVERRIDE(model2_tgp_state,model2_tgp) + MCFG_MACHINE_RESET_OVERRIDE(model2a_state,model2a) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") MCFG_NVRAM_ADD_1FILL("backup1") @@ -2651,7 +2603,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(model2a_state::manxtt) model2a(config); - MCFG_MACHINE_START_OVERRIDE(model2_state,srallyc) + MCFG_MACHINE_START_OVERRIDE(model2a_state,srallyc) MACHINE_CONFIG_END MACHINE_CONFIG_START(model2a_state::manxttdx) /* Includes a Model 1 Sound board for additional sounds - Deluxe version only */ @@ -2687,7 +2639,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(model2a_state::srallyc) model2a(config); - MCFG_MACHINE_START_OVERRIDE(model2_state,srallyc) + MCFG_MACHINE_START_OVERRIDE(model2a_state,srallyc) sj25_0207_01(config); MACHINE_CONFIG_END @@ -2697,7 +2649,7 @@ MACHINE_CONFIG_START(model2b_state::model2b) MCFG_CPU_PROGRAM_MAP(model2b_crx_mem) MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model2_state, model2_interrupt, "screen", 0, 1) - MCFG_CPU_ADD("dsp", ADSP21062, 40000000) + MCFG_CPU_ADD("copro_adsp", ADSP21062, 40000000) MCFG_SHARC_BOOT_MODE(BOOT_MODE_HOST) MCFG_CPU_DATA_MAP(copro_sharc_map) @@ -2707,8 +2659,11 @@ MACHINE_CONFIG_START(model2b_state::model2b) MCFG_QUANTUM_TIME(attotime::from_hz(18000)) - MCFG_MACHINE_START_OVERRIDE(model2_state,model2) - MCFG_MACHINE_RESET_OVERRIDE(model2_state,model2b) + MCFG_DEVICE_ADD("copro_fifo_in", GENERIC_FIFO_U32, 0) + MCFG_DEVICE_ADD("copro_fifo_out", GENERIC_FIFO_U32, 0) + + MCFG_MACHINE_START_OVERRIDE(model2b_state,model2b) + MCFG_MACHINE_RESET_OVERRIDE(model2b_state,model2b) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") MCFG_NVRAM_ADD_1FILL("backup1") @@ -2739,7 +2694,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(model2b_state::indy500) model2b(config); - MCFG_MACHINE_START_OVERRIDE(model2_state,srallyc) + MCFG_MACHINE_START_OVERRIDE(model2b_state,srallyc) MACHINE_CONFIG_END @@ -2764,31 +2719,23 @@ MACHINE_CONFIG_START(model2b_state::rchase2) MCFG_DEVICE_ADD("ioexp", CXD1095, 0) MACHINE_CONFIG_END - -void model2c_state::copro_tgpx4_map(address_map &map) -{ - map(0x00000000, 0x00007fff).ram().share("tgpx4_program"); -} - -void model2c_state::copro_tgpx4_data_map(address_map &map) -{ -// map(0x00000000, 0x000003ff) internal RAM - map(0x00400000, 0x007fffff).rw(this, FUNC(model2_state::copro_tgp_buffer_r),FUNC(model2_state::copro_tgp_buffer_w)); // bufferram - map(0x00800000, 0x008fffff).rom().region("copro_data",0); // ROM data -} - /* 2C-CRX */ MACHINE_CONFIG_START(model2c_state::model2c) MCFG_CPU_ADD("maincpu", I960, 25000000) MCFG_CPU_PROGRAM_MAP(model2c_crx_mem) - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model2_state, model2c_interrupt, "screen", 0, 1) + MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", model2c_state, model2c_interrupt, "screen", 0, 1) - MCFG_CPU_ADD("tgpx4", MB86235, 40000000) + MCFG_CPU_ADD("copro_tgpx4", MB86235, 40000000) MCFG_CPU_PROGRAM_MAP(copro_tgpx4_map) MCFG_CPU_DATA_MAP(copro_tgpx4_data_map) + MCFG_MB86235_FIFOIN(":copro_fifo_in") + MCFG_MB86235_FIFOOUT0(":copro_fifo_out") - MCFG_MACHINE_START_OVERRIDE(model2_state,model2) - MCFG_MACHINE_RESET_OVERRIDE(model2_state,model2c) + MCFG_DEVICE_ADD("copro_fifo_in", GENERIC_FIFO_U32, 0) + MCFG_DEVICE_ADD("copro_fifo_out", GENERIC_FIFO_U32, 0) + + MCFG_MACHINE_START_OVERRIDE(model2c_state,model2c) + MCFG_MACHINE_RESET_OVERRIDE(model2c_state,model2c) MCFG_EEPROM_SERIAL_93C46_ADD("eeprom") MCFG_NVRAM_ADD_1FILL("backup1") @@ -2822,7 +2769,7 @@ MACHINE_CONFIG_END MACHINE_CONFIG_START(model2c_state::overrev2c) model2c(config); - MCFG_MACHINE_START_OVERRIDE(model2_state,srallyc) + MCFG_MACHINE_START_OVERRIDE(model2c_state,srallyc) MACHINE_CONFIG_END @@ -2842,25 +2789,31 @@ OPR-14747 / Linked to 315-5679B */ // TODO: roms 58/59 and 62/63 aren't really used so far, actually they should be 32_word loaded too? +// the 'a' versions have the atan table fixed compared to model 1 #define MODEL2_CPU_BOARD \ - ROM_REGION( 0xc0000, "copro_data", 0 ) \ + ROM_REGION32_LE( 0x40000, "copro_tgp_tables", 0 ) \ ROM_LOAD32_WORD("opr-14742a.45", 0x000000, 0x20000, CRC(90c6b117) SHA1(f46429fffcee17d056f56d5fe035a33f1fd6c27e) ) \ ROM_LOAD32_WORD("opr-14743a.46", 0x000002, 0x20000, CRC(ae7f446b) SHA1(5b9f1fc47caf21e061e930c0d72804e4ec8c7bca) ) \ - ROM_LOAD("opr-14744.58", 0x040000, 0x20000, CRC(730ea9e0) SHA1(651f1db4089a400d073b19ada299b4b08b08f372) ) \ - ROM_LOAD("opr-14745.59", 0x060000, 0x20000, CRC(4c934d96) SHA1(e3349ece0e47f684d61ad11bfea4a90602287350) ) \ - ROM_LOAD("opr-14746.62", 0x080000, 0x20000, CRC(2a266cbd) SHA1(34e047a93459406c22acf4c25089d1a4955f94ca) ) \ - ROM_LOAD("opr-14747.63", 0x0a0000, 0x20000, CRC(a4ad5e19) SHA1(7d7ec300eeb9a8de1590011e37108688c092f329) ) + \ + ROM_REGION32_LE( 0x80000, "other_data", 0 ) \ + /* 1/x table */ \ + ROM_LOAD32_WORD("opr-14744.58", 0x000000, 0x20000, CRC(730ea9e0) SHA1(651f1db4089a400d073b19ada299b4b08b08f372) ) \ + ROM_LOAD32_WORD("opr-14745.59", 0x000002, 0x20000, CRC(4c934d96) SHA1(e3349ece0e47f684d61ad11bfea4a90602287350) ) \ + /* 1/sqrt(x) table */ \ + ROM_LOAD32_WORD("opr-14746.62", 0x040000, 0x20000, CRC(2a266cbd) SHA1(34e047a93459406c22acf4c25089d1a4955f94ca) ) \ + ROM_LOAD32_WORD("opr-14747.63", 0x040002, 0x20000, CRC(a4ad5e19) SHA1(7d7ec300eeb9a8de1590011e37108688c092f329) ) /* These are smt ROMs found on Sega Model 2A Video board They are linked to a QFP208 IC labelled 315-5645 */ // TODO: are these present on model2o too? +// 1/(1+x) table, 0.19 input, 1.23 output (bottom 4 bits zero though, and first bit always 1, so 19 real bits) #define MODEL2A_VID_BOARD \ - ROM_REGION( 0x180000, "video_unk", 0 ) \ - ROM_LOAD("mpr-16310.15", 0x000000, 0x80000, CRC(c078a780) SHA1(0ad5b49774172743e2708b7ca4c061acfe10957a) ) \ - ROM_LOAD("mpr-16311.16", 0x080000, 0x80000, CRC(452a492b) SHA1(88c2f6c2dbfd0c1b39a7bf15c74455fb68c7274e) ) \ - ROM_LOAD("mpr-16312.14", 0x100000, 0x80000, CRC(a25fef5b) SHA1(c6a37856b97f5bc4996cb6b66209f47af392cc38) ) + ROM_REGION32_LE( 0x200000, "video_unk", ROMREGION_ERASE00 ) \ + ROM_LOAD32_BYTE("mpr-16310.15", 0x000000, 0x80000, CRC(c078a780) SHA1(0ad5b49774172743e2708b7ca4c061acfe10957a) ) \ + ROM_LOAD32_BYTE("mpr-16311.16", 0x000001, 0x80000, CRC(452a492b) SHA1(88c2f6c2dbfd0c1b39a7bf15c74455fb68c7274e) ) \ + ROM_LOAD32_BYTE("mpr-16312.14", 0x000002, 0x80000, CRC(a25fef5b) SHA1(c6a37856b97f5bc4996cb6b66209f47af392cc38) ) /* Is there an undumped Zero Gunner with program roms EPR-20292 & EPR-20293? Numbering would suggest so, Japan Model2C or Model2A US? */ ROM_START( zeroguna ) /* Zero Gunner (Export), Model 2A */ @@ -2874,7 +2827,7 @@ ROM_START( zeroguna ) /* Zero Gunner (Export), Model 2A */ ROM_LOAD32_WORD("mpr-20294.9", 0x800000, 0x400000, CRC(a0bd1474) SHA1(c0c032adac69bd545e3aab481878b08f3c3edab8) ) ROM_LOAD32_WORD("mpr-20295.10", 0x800002, 0x400000, CRC(c548cced) SHA1(d34f2fc9b4481c75a6824aa4bdd3f1884188d35b) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_REGION( 0x800000, "polygons", 0 ) // Models ROM_LOAD32_WORD("mpr-20298.17", 0x000000, 0x400000, CRC(8ab782fc) SHA1(595f6fc2e9c58ce9763d51798ceead8d470f0a33) ) @@ -2909,7 +2862,7 @@ ROM_START( zerogunaj ) /* Zero Gunner (Japan), Model 2A - Sega game ID# 833-1134 ROM_LOAD32_WORD("mpr-20294.9", 0x800000, 0x400000, CRC(a0bd1474) SHA1(c0c032adac69bd545e3aab481878b08f3c3edab8) ) ROM_LOAD32_WORD("mpr-20295.10", 0x800002, 0x400000, CRC(c548cced) SHA1(d34f2fc9b4481c75a6824aa4bdd3f1884188d35b) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x800000, "polygons", 0 ) // Models ROM_LOAD32_WORD("mpr-20298.17", 0x000000, 0x400000, CRC(8ab782fc) SHA1(595f6fc2e9c58ce9763d51798ceead8d470f0a33) ) @@ -2952,7 +2905,7 @@ ROM_START( zerogun ) /* Zero Gunner (Export), Model 2B */ ROM_LOAD32_WORD("mpr-20301.27", 0x000000, 0x200000, CRC(52010fb2) SHA1(8dce67c6f9e48d749c64b11d4569df413dc40e07) ) ROM_LOAD32_WORD("mpr-20300.25", 0x000002, 0x200000, CRC(6f042792) SHA1(75db68e57ec3fbc7af377342eef81f26fae4e1c4) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-20302.31", 0x080000, 0x80000, CRC(44ff50d2) SHA1(6ffec81042fd5708e8a5df47b63f9809f93bf0f8) ) @@ -2984,7 +2937,7 @@ ROM_START( zerogunj ) /* Zero Gunner (Japan), Model 2B */ ROM_LOAD32_WORD("mpr-20301.27", 0x000000, 0x200000, CRC(52010fb2) SHA1(8dce67c6f9e48d749c64b11d4569df413dc40e07) ) ROM_LOAD32_WORD("mpr-20300.25", 0x000002, 0x200000, CRC(6f042792) SHA1(75db68e57ec3fbc7af377342eef81f26fae4e1c4) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-20302.31", 0x080000, 0x80000, CRC(44ff50d2) SHA1(6ffec81042fd5708e8a5df47b63f9809f93bf0f8) ) @@ -3008,7 +2961,7 @@ ROM_START( gunblade ) /* Gunblade NY Revision A, Model 2B, Sega game ID# 833-125 ROM_LOAD32_WORD("mpr-18976.9", 0x800000, 0x400000, CRC(c95c15eb) SHA1(892063e91b2ed20e0600d4b188da1e9f45a19692) ) ROM_LOAD32_WORD("mpr-18977.10", 0x800002, 0x400000, CRC(db8f5b6f) SHA1(c11d2c9e1e215aa7b2ebb777639c8cd651901f52) ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("mpr-18986.29", 0x000000, 0x400000, CRC(04820f7b) SHA1(5eb6682399b358d77658d82e612b02b724e3f3e1) ) ROM_LOAD32_WORD("mpr-18987.30", 0x000002, 0x400000, CRC(2419367f) SHA1(0a04a1049d2da486dc9dbb97b383bd24259b78c8) ) @@ -3047,7 +3000,7 @@ ROM_START( vf2 ) /* Virtua Fighter 2 Version 2.1, Model 2A */ ROM_LOAD32_WORD( "mpr-17564.4", 0xc00000, 0x200000, CRC(d8062489) SHA1(57666b6937f79bb65c43ed02b04a454882d01e61) ) ROM_LOAD32_WORD( "mpr-17565.5", 0xc00002, 0x200000, CRC(0517c6e9) SHA1(d9ba93998286713758385033119416714674c8d8) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-17554.16", 0x000000, 0x200000, CRC(27896d82) SHA1(c0624e58de2e427465daaa10dbb02ea2a1fd0f1b) ) @@ -3093,7 +3046,7 @@ ROM_START( vf2b ) /* Virtua Fighter 2 Revision B, Model 2A */ ROM_LOAD32_WORD( "mpr-17564.4", 0xc00000, 0x200000, CRC(d8062489) SHA1(57666b6937f79bb65c43ed02b04a454882d01e61) ) ROM_LOAD32_WORD( "mpr-17565.5", 0xc00002, 0x200000, CRC(0517c6e9) SHA1(d9ba93998286713758385033119416714674c8d8) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-17554.16", 0x000000, 0x200000, CRC(27896d82) SHA1(c0624e58de2e427465daaa10dbb02ea2a1fd0f1b) ) @@ -3139,7 +3092,7 @@ ROM_START( vf2a ) /* Virtua Fighter 2 Revision A, Model 2A */ ROM_LOAD32_WORD( "mpr-17564.4", 0xc00000, 0x200000, CRC(d8062489) SHA1(57666b6937f79bb65c43ed02b04a454882d01e61) ) ROM_LOAD32_WORD( "mpr-17565.5", 0xc00002, 0x200000, CRC(0517c6e9) SHA1(d9ba93998286713758385033119416714674c8d8) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-17554.16", 0x000000, 0x200000, CRC(27896d82) SHA1(c0624e58de2e427465daaa10dbb02ea2a1fd0f1b) ) @@ -3185,7 +3138,7 @@ ROM_START( vf2o ) /* Virtua Fighter 2, Model 2A */ ROM_LOAD32_WORD( "mpr-17564.4", 0xc00000, 0x200000, CRC(d8062489) SHA1(57666b6937f79bb65c43ed02b04a454882d01e61) ) ROM_LOAD32_WORD( "mpr-17565.5", 0xc00002, 0x200000, CRC(0517c6e9) SHA1(d9ba93998286713758385033119416714674c8d8) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-17554.16", 0x000000, 0x200000, CRC(27896d82) SHA1(c0624e58de2e427465daaa10dbb02ea2a1fd0f1b) ) @@ -3228,7 +3181,7 @@ ROM_START( srallyc ) ROM_LOAD32_WORD( "mpr-17884.6", 0x800000, 0x200000, CRC(4cfc95e1) SHA1(81d927b8c4f9d0c4c5e29d676b30f30f83751fdc) ) ROM_LOAD32_WORD( "mpr-17885.7", 0x800002, 0x200000, CRC(a08d2467) SHA1(9449ac8f8f9ce8d8e536b05a91e46841fed7f2d0) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) @@ -3274,7 +3227,7 @@ ROM_START( srallycb ) /* Sega Rally Championship Revision B, Model 2A, Sega game ROM_LOAD32_WORD( "mpr-17884.6", 0x800000, 0x200000, CRC(4cfc95e1) SHA1(81d927b8c4f9d0c4c5e29d676b30f30f83751fdc) ) ROM_LOAD32_WORD( "mpr-17885.7", 0x800002, 0x200000, CRC(a08d2467) SHA1(9449ac8f8f9ce8d8e536b05a91e46841fed7f2d0) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) @@ -3320,7 +3273,7 @@ ROM_START( srallycdx ) /* Sega Rally Championship DX Revision A, Model 2A - Sing ROM_LOAD32_WORD( "mpr-17764a.6", 0x800000, 0x200000, CRC(dcb91e31) SHA1(2725268e97b9f4c14d56c040af38bc82f5020e3e) ) // IC 6 and 7 likely EPROMs ROM_LOAD32_WORD( "mpr-17765a.7", 0x800002, 0x200000, CRC(b657dc48) SHA1(ae0f1bc6e2479fa51ca36f8be3a1785981c4dfe9) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) @@ -3370,7 +3323,7 @@ ROM_START( srallycdxa ) // Sega Rally Championship DX, Model 2A? - Single player ROM_LOAD32_WORD( "epr-17764.6", 0x800000, 0x100000, CRC(68254fcf) SHA1(d90d962b5f81d6598fc9d94c44d9cee71767fc26) ) // NEC D27C8000D EPROM ROM_LOAD32_WORD( "epr-17765.7", 0x800002, 0x100000, CRC(81112ea5) SHA1(a0251b4f5f18ae2e2d0576087a687dd7c2e49c34) ) // NEC D27C8000D EPROM - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD( "mpr-17754.28", 0x000000, 0x200000, CRC(81a84f67) SHA1(c0a9b690523a529e4015e9af10dc3fb2a1726f08) ) // not present in this rev memory test, why ? ROM_LOAD32_WORD( "mpr-17755.29", 0x000002, 0x200000, CRC(2a6e7da4) SHA1(e60803ae951489fe47d66731d15c32249ca547b4) ) // @@ -3468,7 +3421,7 @@ ROM_START( manxtt ) /* Manx TT Superbike Twin Revision D, Model 2A - Can be set ROM_LOAD32_WORD( "mpr-18755.18", 0x800000, 0x200000, CRC(bf094d9e) SHA1(2cd7130b226a28098191a6caf6fd761bb0bfac7b) ) ROM_LOAD32_WORD( "mpr-18758.22", 0x800002, 0x200000, CRC(1b5473d0) SHA1(658e33503f6990f4d9a954c63efad5f53d15f3a4) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD( "mpr-18761.28", 0x000000, 0x200000, CRC(4e39ec05) SHA1(50696cd320f1a6492e0c193713acbce085d959cd) ) ROM_LOAD32_WORD( "mpr-18762.29", 0x000002, 0x200000, CRC(4ab165d8) SHA1(7ff42a4c7236fec76f94f2d0c5537e503bcc98e5) ) @@ -3528,12 +3481,10 @@ ROM_START( manxttc ) /* Manx TT Superbike Twin Revision C, Model 2A */ ROM_LOAD32_WORD( "mpr-18755.18", 0x800000, 0x200000, CRC(bf094d9e) SHA1(2cd7130b226a28098191a6caf6fd761bb0bfac7b) ) ROM_LOAD32_WORD( "mpr-18758.22", 0x800002, 0x200000, CRC(1b5473d0) SHA1(658e33503f6990f4d9a954c63efad5f53d15f3a4) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD( "mpr-18761.28", 0x000000, 0x200000, CRC(4e39ec05) SHA1(50696cd320f1a6492e0c193713acbce085d959cd) ) ROM_LOAD32_WORD( "mpr-18762.29", 0x000002, 0x200000, CRC(4ab165d8) SHA1(7ff42a4c7236fec76f94f2d0c5537e503bcc98e5) ) - ROM_REGION( 0x800000, "tgpextra", ROMREGION_ERASEFF) // Coprocessor Data ROM - ROM_REGION( 0x1000000, "textures", 0 ) // Textures ROM_LOAD32_WORD( "mpr-18760.25", 0x000000, 0x200000, CRC(4e3a4a89) SHA1(bba6cd2a15b3f963388a3a87880da86b10f6e0a2) ) ROM_LOAD32_WORD( "mpr-18759.24", 0x000002, 0x200000, CRC(278d8742) SHA1(5f285fc8cfe88c00ba2bbe1b509b49abd38e00ec) ) @@ -3587,12 +3538,10 @@ ROM_START( motoraid ) /* Motor Raid, Model 2A, Sega game ID# 833-13232 MOTOR RAI ROM_LOAD32_WORD( "mpr-20025.18", 0x1000000, 0x400000, CRC(d4ecd0be) SHA1(9df0d1db32b818dad28f9eeab3bc19c56d27ec6d) ) ROM_LOAD32_WORD( "mpr-20028.22", 0x1000002, 0x400000, CRC(3147e0e1) SHA1(9aa0e13c8dc5073a603279a538cc7662531dfd19) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD( "epr-20011.28", 0x000000, 0x100000, CRC(794c026c) SHA1(85abd667491fd019ee18ba256fd580356f4e1fe9) ) ROM_LOAD32_WORD( "epr-20012.29", 0x000002, 0x100000, CRC(f53db4e3) SHA1(4474610eed52248e5e36be438eff5d39f076b134) ) - ROM_REGION( 0x800000, "tgpextra", ROMREGION_ERASEFF) // Coprocessor Data ROM - ROM_REGION( 0x1000000, "textures", 0 ) // Textures ROM_LOAD32_WORD( "mpr-20022.25", 0x000000, 0x400000, CRC(9e47b3c2) SHA1(c73279e837f56c0417c07ba3c642af28fe9a24fa) ) ROM_LOAD32_WORD( "mpr-20021.24", 0x000002, 0x400000, CRC(3cbf36cb) SHA1(059cea17f9d6f5960d9fd869c36ffb6fcf230c1a) ) @@ -3640,12 +3589,10 @@ ROM_START( motoraiddx ) /* Motor Raid DX, Model 2A, Sega ROM board ID# 834-13231 ROM_LOAD32_WORD( "mpr-20025.18", 0x1000000, 0x400000, CRC(d4ecd0be) SHA1(9df0d1db32b818dad28f9eeab3bc19c56d27ec6d) ) ROM_LOAD32_WORD( "mpr-20028.22", 0x1000002, 0x400000, CRC(3147e0e1) SHA1(9aa0e13c8dc5073a603279a538cc7662531dfd19) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD( "epr-20011.28", 0x000000, 0x100000, CRC(794c026c) SHA1(85abd667491fd019ee18ba256fd580356f4e1fe9) ) ROM_LOAD32_WORD( "epr-20012.29", 0x000002, 0x100000, CRC(f53db4e3) SHA1(4474610eed52248e5e36be438eff5d39f076b134) ) - ROM_REGION( 0x800000, "tgpextra", ROMREGION_ERASEFF) // Coprocessor Data ROM - ROM_REGION( 0x1000000, "textures", 0 ) // Textures ROM_LOAD32_WORD( "mpr-20022.25", 0x000000, 0x400000, CRC(9e47b3c2) SHA1(c73279e837f56c0417c07ba3c642af28fe9a24fa) ) ROM_LOAD32_WORD( "mpr-20021.24", 0x000002, 0x400000, CRC(3cbf36cb) SHA1(059cea17f9d6f5960d9fd869c36ffb6fcf230c1a) ) @@ -3694,7 +3641,7 @@ ROM_START( skytargt ) /* Sky Target, Model 2A */ ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD( "mpr-18420.28", 0x000000, 0x200000, CRC(92b87817) SHA1(b6949b745d0bedeecd6d0240f8911cb345c16d8d) ) ROM_LOAD32_WORD( "mpr-18419.29", 0x000002, 0x200000, CRC(74542d87) SHA1(37230e96dd526fb47fcbde5778e5466d8955a969) ) @@ -3741,7 +3688,7 @@ ROM_START( vcop2 ) /* Virtua Cop 2, Model 2A, Sega Game ID# 833-12266, ROM board ROM_COPY( "main_data", 0xc00000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0xc00000, 0xf00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-18513.16", 0x000000, 0x200000, CRC(777a3633) SHA1(edc2798c4d88975ce67b54fc0db008e7d24db6ef) ) @@ -3809,7 +3756,7 @@ ROM_START( dynamcop ) /* Dynamite Cop (Export), Model 2A, Sega Game ID# 833-1134 ROM_LOAD32_WORD("mpr-20791.4", 0x1800000, 0x400000, CRC(4883d0df) SHA1(b98af63e81f6c1b2766d7e96acbd1821bba000d4) ) ROM_LOAD32_WORD("mpr-20792.5", 0x1800002, 0x400000, CRC(47becfa2) SHA1(a333885872a64b322f3cb464a70352d73654b1b3) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD("mpr-20799.16", 0x0000000, 0x400000, CRC(424571bf) SHA1(18a4e8d0e968fff3b645b59a0023b0ef38d51924) ) @@ -3860,7 +3807,7 @@ ROM_START( dyndeka2 ) /* Dynamite Deka 2 (Japan), Model 2A */ ROM_LOAD32_WORD("mpr-20791.4", 0x1800000, 0x400000, CRC(4883d0df) SHA1(b98af63e81f6c1b2766d7e96acbd1821bba000d4) ) ROM_LOAD32_WORD("mpr-20792.5", 0x1800002, 0x400000, CRC(47becfa2) SHA1(a333885872a64b322f3cb464a70352d73654b1b3) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD("mpr-20799.16", 0x0000000, 0x400000, CRC(424571bf) SHA1(18a4e8d0e968fff3b645b59a0023b0ef38d51924) ) @@ -3927,7 +3874,7 @@ ROM_START( dynamcopb ) /* Dynamite Cop (Export), Model 2B */ ROM_LOAD32_WORD("mpr-20810.27", 0x0800000, 0x400000, CRC(838a10a7) SHA1(a658f1864829058b1d419e7c001e47cd0ab06a20) ) ROM_LOAD32_WORD("mpr-20808.26", 0x0800002, 0x400000, CRC(706bd495) SHA1(f857b303afda6301b19d97dfe5c313126261716e) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-20811.30", 0x080000, 0x80000, CRC(a154b83e) SHA1(2640c6b6966f4a888329e583b6b713bd0e779b6b) ) @@ -3975,7 +3922,7 @@ ROM_START( dyndeka2b ) /* Dynamite Deka 2 (Japan), Model 2B */ ROM_LOAD32_WORD("mpr-20810.27", 0x0800000, 0x400000, CRC(838a10a7) SHA1(a658f1864829058b1d419e7c001e47cd0ab06a20) ) ROM_LOAD32_WORD("mpr-20808.26", 0x0800002, 0x400000, CRC(706bd495) SHA1(f857b303afda6301b19d97dfe5c313126261716e) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-20811.30", 0x080000, 0x80000, CRC(a154b83e) SHA1(2640c6b6966f4a888329e583b6b713bd0e779b6b) ) @@ -4066,7 +4013,7 @@ ROM_START( schamp ) /* Sonic Championship, Model 2B - Sega ROM board ID# 834-127 ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("mpr-19015.29", 0x000000, 0x200000, CRC(c74d99e3) SHA1(9914be9925b86af6af670745b5eba3a9e4f24af9) ) ROM_LOAD32_WORD("mpr-19016.30", 0x000002, 0x200000, CRC(746ae931) SHA1(a6f0f589ad174a34493ee24dc0cb509ead3aed70) ) @@ -4120,7 +4067,7 @@ ROM_START( sfight ) /* Sonic The Fighters, Model 2B */ ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("mpr-19015.29", 0x000000, 0x200000, CRC(c74d99e3) SHA1(9914be9925b86af6af670745b5eba3a9e4f24af9) ) ROM_LOAD32_WORD("mpr-19016.30", 0x000002, 0x200000, CRC(746ae931) SHA1(a6f0f589ad174a34493ee24dc0cb509ead3aed70) ) @@ -4499,7 +4446,7 @@ ROM_START( lastbrnx ) /* Last Bronx Revision A (Export), Model 2B */ ROM_LOAD32_WORD("mpr-19055.27", 0x000000, 0x200000, CRC(85a57d49) SHA1(99c49fe135dc46fa861337b5bac654ae8478778a) ) ROM_LOAD32_WORD("mpr-19054.25", 0x000002, 0x200000, CRC(05366277) SHA1(f618e2b9b26a1f7eccebfc8f8e17ef8ad9029be8) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("mpr-19056.31", 0x080000, 0x80000, CRC(22a22918) SHA1(baa039cd86650b6cd81f295916c4d256e60cb29c) ) @@ -4528,7 +4475,7 @@ ROM_START( lastbrnxu ) /* Last Bronx Revision A (USA), Model 2B - Sega ROM board ROM_LOAD32_WORD("mpr-19055.27", 0x000000, 0x200000, CRC(85a57d49) SHA1(99c49fe135dc46fa861337b5bac654ae8478778a) ) ROM_LOAD32_WORD("mpr-19054.25", 0x000002, 0x200000, CRC(05366277) SHA1(f618e2b9b26a1f7eccebfc8f8e17ef8ad9029be8) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("mpr-19056.31", 0x080000, 0x80000, CRC(22a22918) SHA1(baa039cd86650b6cd81f295916c4d256e60cb29c) ) @@ -4557,7 +4504,7 @@ ROM_START( lastbrnxj ) /* Last Bronx Revision A (Japan), Model 2B */ ROM_LOAD32_WORD("mpr-19055.27", 0x000000, 0x200000, CRC(85a57d49) SHA1(99c49fe135dc46fa861337b5bac654ae8478778a) ) ROM_LOAD32_WORD("mpr-19054.25", 0x000002, 0x200000, CRC(05366277) SHA1(f618e2b9b26a1f7eccebfc8f8e17ef8ad9029be8) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("mpr-19056.31", 0x080000, 0x80000, CRC(22a22918) SHA1(baa039cd86650b6cd81f295916c4d256e60cb29c) ) @@ -4576,7 +4523,7 @@ ROM_START( pltkidsa ) /* Pilot Kids, Model 2A */ ROM_LOAD32_WORD("mpr-21262.da0", 0x000000, 0x400000, CRC(aa71353e) SHA1(6eb5e8284734f01beec1dbbee049b6b7672e2504) ) ROM_LOAD32_WORD("mpr-21263.da1", 0x000002, 0x400000, CRC(d55d4509) SHA1(641db6ec3e9266f8265a4b541bcd8c2f7d164cc3) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", 0 ) // Models ROM_LOAD32_WORD("mpr-21264.tp0", 0x0000000, 0x400000, CRC(6b35204d) SHA1(3a07701b140eb3088fad29c8b2d9c1e1e7ef9471) ) @@ -4635,7 +4582,7 @@ ROM_START( pltkids ) /* Pilot Kids Revision A, Model 2B */ ROM_LOAD32_WORD("mpr-21275.tx3", 0x0800000, 0x400000, CRC(c4870b7c) SHA1(feb8a34acb620a36ed5aea92d22622a76d7e1b29) ) ROM_LOAD32_WORD("mpr-21273.tx2", 0x0800002, 0x400000, CRC(722ec8a2) SHA1(1a1dc92488cde6284a96acce80e47a9cceccde76) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-21276.sd0", 0x080000, 0x080000, CRC(8f415bc3) SHA1(4e8e1ccbe025deca42fcf2582f3da46fa34780b7) ) @@ -4678,7 +4625,7 @@ ROM_START( indy500 ) /* Defaults to Twin (Stand Alone) Cab version. 2 credits t ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("epr-18249.29", 0x000000, 0x080000, CRC(a399f023) SHA1(8b453313c16d935701ed7dbf71c1607c40aede63) ) ROM_LOAD32_WORD("epr-18250.30", 0x000002, 0x080000, CRC(7479ad52) SHA1(d453e25709cd5970cd21bdc8b4785bc8eb5a50d7) ) @@ -4730,7 +4677,7 @@ ROM_START( indy500d ) /* Defaults to Deluxe (Stand Alone) Cab version. 3 credits ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("epr-18249.29", 0x000000, 0x080000, CRC(a399f023) SHA1(8b453313c16d935701ed7dbf71c1607c40aede63) ) ROM_LOAD32_WORD("epr-18250.30", 0x000002, 0x080000, CRC(7479ad52) SHA1(d453e25709cd5970cd21bdc8b4785bc8eb5a50d7) ) @@ -4782,7 +4729,7 @@ ROM_START( indy500to ) /* Defaults to Twin (Stand Alone) Cab version. 2 credits ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("epr-18249.29", 0x000000, 0x080000, CRC(a399f023) SHA1(8b453313c16d935701ed7dbf71c1607c40aede63) ) ROM_LOAD32_WORD("epr-18250.30", 0x000002, 0x080000, CRC(7479ad52) SHA1(d453e25709cd5970cd21bdc8b4785bc8eb5a50d7) ) @@ -4834,7 +4781,7 @@ ROM_START( waverunr ) /* Wave Runner Revision A (Japan), Model 2C, Sega Game ID# ROM_COPY( "main_data", 0x1000000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1000000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("epr-19280.29", 0x000000, 0x080000, CRC(c6b59fb9) SHA1(909663f440d19a34591d1f9707972c313e34f909) ) ROM_LOAD32_WORD("epr-19281.30", 0x000002, 0x080000, CRC(5a6110e7) SHA1(39ba8a35fdcfdd6c88b44ab392ca0e958da44767) ) @@ -4898,7 +4845,7 @@ ROM_START( rchase2 ) /* Rail Chase 2 Revision A, Model 2B. Sega game ID# 833-118 ROM_LOAD32_WORD("mpr-18043.5", 0xc00000, 0x200000, CRC(ff84dfd6) SHA1(82833bf4cb1f367aea5fec6cffb7023cbbd3c8cb) ) ROM_LOAD32_WORD("mpr-18044.6", 0xc00002, 0x200000, CRC(ab9b406d) SHA1(62e95ceea6f71eedbebae59e188aac03e6129e62) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASEFF ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASEFF ) // Copro extra data (collision/height map/etc) /* empty?? */ ROM_REGION( 0x1000000, "polygons", 0 ) // Models @@ -5071,7 +5018,7 @@ ROM_START( overrevb ) /* Over Rev Revision B, Model 2B, Sega Game ID# 836-13274, ROM_LOAD32_WORD( "mpr-19994.9", 0x800000, 0x400000, CRC(e691fbd5) SHA1(b99c2f3f2a682966d792917dfcb8ed8e53bc0b7a) ) ROM_LOAD32_WORD( "mpr-19995.10", 0x800002, 0x400000, CRC(82a7828e) SHA1(4336a12a07a67f94091b4a9b491bab02c375dd15) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x800000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-19998.17", 0x000000, 0x200000, CRC(6a834574) SHA1(8be19bf42dbb157d6acde62a2018ef4c0d41aab4) ) @@ -5303,7 +5250,7 @@ ROM_START( doaa ) /* Dead or Alive Revision A, Model 2A, Sega Game ID# 833-11341 ROM_LOAD32_WORD("mpr-19313.6", 0x1800002, 0x200000, CRC(8c63055e) SHA1(9f375b3f4a8884163ffcf364989499f2cd21e18b) ) ROM_COPY("main_data", 0x1800000, 0x1c00000, 0x400000 ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP data (COPRO sockets) + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x2000000, "polygons", ROMREGION_ERASEFF ) // Models ROM_LOAD32_WORD("mpr-19322.17", 0x0000000, 0x400000, CRC(d0e6ecf0) SHA1(1b87f6337b4286fd738856da899462e7baa92601) ) @@ -5358,7 +5305,7 @@ ROM_START( doa ) /* Dead or Alive Revision B, Model 2B, 837-12880 security board ROM_LOAD32_WORD("mpr-19321.27", 0x000000, 0x400000, CRC(9c49e845) SHA1(344839640d9814263fa5ed00c2043cd6f18d5cb2) ) ROM_LOAD32_WORD("mpr-19320.25", 0x000002, 0x400000, CRC(190c017f) SHA1(4c3250b9abe39fc5c8fd0fcdb5fb7ea131434516) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-19328.30", 0x080000, 0x80000, CRC(400bdbfb) SHA1(54db969fa54cf3c502d77aa6a6aaeef5d7db9f04) ) @@ -5389,7 +5336,7 @@ ROM_START( sgt24h ) /* Super GT 24h, Model 2B */ ROM_LOAD32_WORD("mpr-19153.27", 0x000000, 0x200000, CRC(136adfd0) SHA1(70ce4e609c8b003ff04518044c18d29089e6a353) ) ROM_LOAD32_WORD("mpr-19152.25", 0x000002, 0x200000, CRC(363769a2) SHA1(51b2f11a01fb72e151025771f8a8496993e605c2) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x20000, "cpu4", 0) // Communication program ROM_LOAD16_WORD_SWAP("epr-18643a.7", 0x000000, 0x20000, CRC(b5e048ec) SHA1(8182e05a2ffebd590a936c1359c81e60caa79c2a) ) @@ -5414,7 +5361,7 @@ ROM_START( von ) /* Virtual On Cyber Troopers Revision B (US), Model 2B, Sega Ga ROM_LOAD32_WORD("mpr-18650.9", 0x800000, 0x400000, CRC(89a855b9) SHA1(5096db1da1f7e175000e89fca2a1dd3fd53030ea) ) ROM_LOAD32_WORD("mpr-18651.10", 0x800002, 0x400000, CRC(f4c23107) SHA1(f65984614111b12dd414db80751efe64fcf5ef16) ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("mpr-18662.29", 0x000000, 0x200000, CRC(a33d3335) SHA1(991bbe9dcbef8bfa96682e9d142623fc9b7c0879) ) ROM_LOAD32_WORD("mpr-18663.30", 0x000002, 0x200000, CRC(ea74a641) SHA1(a684e13c0afe2ef3f3108ae9b73389121368fc4e) ) @@ -5454,7 +5401,7 @@ ROM_START( vonj ) /* Virtual On Cyber Troopers Revision B (Japan), Model 2B */ ROM_LOAD32_WORD("mpr-18650.9", 0x800000, 0x400000, CRC(89a855b9) SHA1(5096db1da1f7e175000e89fca2a1dd3fd53030ea) ) ROM_LOAD32_WORD("mpr-18651.10", 0x800002, 0x400000, CRC(f4c23107) SHA1(f65984614111b12dd414db80751efe64fcf5ef16) ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("mpr-18662.29", 0x000000, 0x200000, CRC(a33d3335) SHA1(991bbe9dcbef8bfa96682e9d142623fc9b7c0879) ) ROM_LOAD32_WORD("mpr-18663.30", 0x000002, 0x200000, CRC(ea74a641) SHA1(a684e13c0afe2ef3f3108ae9b73389121368fc4e) ) @@ -5506,7 +5453,7 @@ ROM_START( vstriker ) /* Virtua Striker Revision A, Model 2B */ ROM_LOAD32_WORD("mpr-18062.27", 0x000000, 0x200000, CRC(126e7de3) SHA1(0810364934dee8d5035cef623d01dfbacc64bf2b) ) ROM_LOAD32_WORD("mpr-18061.25", 0x000002, 0x200000, CRC(c37f1c67) SHA1(c917046c2d98af17c59ceb0ea4f89d215cc0ead8) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-18072.31", 0x080000, 0x20000, CRC(73eabb58) SHA1(4f6d70d6e0d7b469c5f2527efb08f208f4aa017e) ) @@ -5542,7 +5489,7 @@ ROM_START( vstrikero ) /* Virtua Striker, Model 2B */ ROM_LOAD32_WORD("mpr-18062.27", 0x000000, 0x200000, CRC(126e7de3) SHA1(0810364934dee8d5035cef623d01dfbacc64bf2b) ) ROM_LOAD32_WORD("mpr-18061.25", 0x000002, 0x200000, CRC(c37f1c67) SHA1(c917046c2d98af17c59ceb0ea4f89d215cc0ead8) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-18072.31", 0x080000, 0x20000, CRC(73eabb58) SHA1(4f6d70d6e0d7b469c5f2527efb08f208f4aa017e) ) @@ -5580,7 +5527,7 @@ ROM_START( dynabb ) /* Dynamite Baseball, Model 2B. Sega game ID# 833-12803 DYNA ROM_LOAD32_WORD("mpr-19183.27", 0x000000, 0x400000, CRC(5e29074b) SHA1(f4dfa396653aeb649ec170c9584ea1a74377929a) ) ROM_LOAD32_WORD("mpr-19182.25", 0x000002, 0x400000, CRC(c899923d) SHA1(15cc86c885329227d3c19e9837363eaf6c38829b) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-19184.31", 0x080000, 0x80000, CRC(c013a163) SHA1(c564df8295e3c19082ead0eb22478dc651e0b430) ) @@ -5618,7 +5565,7 @@ ROM_START( dynabb97 ) /* Dynamite Baseball 97 Revision A, Model 2B */ ROM_LOAD32_WORD("mpr-19848.27", 0x000000, 0x400000, CRC(4c0526b7) SHA1(e8db7125be8a052e41a00c69cc08ca0d75b3b96f) ) ROM_LOAD32_WORD("mpr-19847.25", 0x000002, 0x400000, CRC(fe55edbd) SHA1(b0b6135b23349d7d6ae007002d8df83748cab7b1) ) - ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) // Copro extra data (collision/height map/etc) ROM_REGION( 0x100000, "audiocpu", 0 ) // Sound program ROM_LOAD16_WORD_SWAP("epr-19849.31", 0x080000, 0x80000, CRC(b0d5bff0) SHA1(1fb824adaf3ed330a8039be726a87eb85c00abd7) ) @@ -5661,7 +5608,7 @@ ROM_START( fvipers ) /* Fighting Vipers Revision D, Model 2B, Sega Game ID# 833- ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("mpr-18622.29", 0x000000, 0x200000, CRC(c74d99e3) SHA1(9914be9925b86af6af670745b5eba3a9e4f24af9) ) ROM_LOAD32_WORD("mpr-18623.30", 0x000002, 0x200000, CRC(746ae931) SHA1(a6f0f589ad174a34493ee24dc0cb509ead3aed70) ) @@ -5720,7 +5667,7 @@ ROM_START( fvipersb ) /* Fighting Vipers Revision B, Model 2B, Sega Game ID# 833 ROM_COPY( "main_data", 0x1800000, 0x1e00000, 0x100000 ) ROM_COPY( "main_data", 0x1800000, 0x1f00000, 0x100000 ) - ROM_REGION( 0x800000, "copro_data", 0 ) // Coprocessor Data ROM + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) ROM_LOAD32_WORD("mpr-18622.29", 0x000000, 0x200000, CRC(c74d99e3) SHA1(9914be9925b86af6af670745b5eba3a9e4f24af9) ) ROM_LOAD32_WORD("mpr-18623.30", 0x000002, 0x200000, CRC(746ae931) SHA1(a6f0f589ad174a34493ee24dc0cb509ead3aed70) ) @@ -5768,7 +5715,7 @@ ROM_START( daytona ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Mode ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) @@ -5832,7 +5779,7 @@ ROM_START( daytonase ) /* Daytona USA (Japan, Revision A), Original Model 2 w/Mo ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) @@ -5895,7 +5842,7 @@ ROM_START( daytona93 ) /* Daytona USA (Deluxe cabinet, '93 version. There is sai ROM_COPY( "main_data", 0x900000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0x900000, 0xf00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) @@ -5959,7 +5906,7 @@ ROM_START( daytonas ) /* Daytona USA (With Saturn Adverts) */ ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) @@ -6025,7 +5972,7 @@ ROM_START( daytonat )/* Daytona USA (Japan, Turbo hack) */ ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) @@ -6089,7 +6036,7 @@ ROM_START( daytonata )/* Daytona USA (Japan, Turbo hack) */ ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) @@ -6164,7 +6111,7 @@ ROM_START( daytonam ) /* Daytona USA (Japan, To The MAXX) */ ROM_COPY( "main_data", 0x800000, 0xe00000, 0x100000 ) ROM_COPY( "main_data", 0x800000, 0xf00000, 0x100000 ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) @@ -6235,7 +6182,7 @@ ROM_START( daytonagtx ) ROM_LOAD32_WORD("bank0.bin", 0x000002, 0x080000, CRC(21b603b4) SHA1(3f8f83fbf2ce5055fa85075c95da617fe2a8738a) ) ROM_LOAD32_WORD("bank1.bin", 0x100002, 0x080000, CRC(c1971f23) SHA1(3db88552ff2166f6eb2a9200e8609b52c1266274) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("mpr-16537.ic28", 0x000000, 0x200000, CRC(36b7c35a) SHA1(b32fd1d3fc8983fb5f2a7b236b665a8c9b52769f) ) ROM_LOAD32_WORD("mpr-16536.ic29", 0x000002, 0x200000, CRC(6d6afed9) SHA1(2018468d7d849854b3d0cfbcd217317e2fc93555) ) @@ -6294,7 +6241,7 @@ ROM_START( vcop ) /* Virtua Cop Revision B, Model 2 */ ROM_LOAD32_WORD( "epr-17168a.6", 0x800000, 0x080000, CRC(59091a37) SHA1(14591c7015aaf126755be584aa94c04e6de222fa) ) ROM_LOAD32_WORD( "epr-17169a.7", 0x800002, 0x080000, CRC(0495808d) SHA1(5b86a9a68c2b52f942aa8d858ee7a491f546a921) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP program + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) ROM_REGION( 0x1000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-17159.16", 0x000000, 0x200000, CRC(e218727d) SHA1(1458d01d49936a0b8d497b62ff9ea940ca753b37) ) @@ -6337,7 +6284,7 @@ ROM_START( vcopa ) /* Virtua Cop Revision A, Model 2 */ ROM_LOAD32_WORD( "epr-17168a.6", 0x800000, 0x080000, CRC(59091a37) SHA1(14591c7015aaf126755be584aa94c04e6de222fa) ) ROM_LOAD32_WORD( "epr-17169a.7", 0x800002, 0x080000, CRC(0495808d) SHA1(5b86a9a68c2b52f942aa8d858ee7a491f546a921) ) - ROM_REGION( 0x800000, "tgp", ROMREGION_ERASE00 ) // TGP program + ROM_REGION( 0x800000, "copro_data", ROMREGION_ERASE00 ) ROM_REGION( 0x1000000, "polygons", 0 ) // Models ROM_LOAD32_WORD( "mpr-17159.16", 0x000000, 0x200000, CRC(e218727d) SHA1(1458d01d49936a0b8d497b62ff9ea940ca753b37) ) @@ -6380,7 +6327,7 @@ ROM_START( desert ) /* Desert Tank, Model 2 */ ROM_LOAD32_WORD("epr-16978.6", 0x800000, 0x080000, CRC(38b3e574) SHA1(a1133df608b0fbb9c53bbeb29138650c87845d2c) ) ROM_LOAD32_WORD("epr-16979.7", 0x800002, 0x080000, CRC(c314eb8b) SHA1(0c851dedd5c42b026195faed7d028924698a8b27) ) - ROM_REGION( 0x800000, "tgp", 0 ) // TGP program? (COPRO socket) + ROM_REGION( 0x800000, "copro_data", 0 ) // Copro extra data (collision/height map/etc) (COPRO socket) ROM_LOAD32_WORD("epr-16981.28", 0x000000, 0x080000, CRC(ae847571) SHA1(32d0f9e685667ae9fddacea0b9f4ad6fb3a6fdad) ) ROM_LOAD32_WORD("epr-16980.29", 0x000002, 0x080000, CRC(5239b864) SHA1(e889556e0f1ea80de52afff563b0923f87cef7ab) ) @@ -6441,12 +6388,12 @@ DRIVER_INIT_MEMBER(model2_state,doa) DRIVER_INIT_MEMBER(model2_state,rchase2) { - m_maincpu->space(AS_PROGRAM).install_write_handler(0x01c00008, 0x01c0000b, write32_delegate(FUNC(model2_state::rchase2_devices_w),this)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x01c00008, 0x01c0000b, write32_delegate(FUNC(model2_state::rchase2_devices_w), this)); } DRIVER_INIT_MEMBER(model2_state,srallyc) { - m_maincpu->space(AS_PROGRAM).install_write_handler(0x01c00008, 0x01c0000b, write32_delegate(FUNC(model2_state::srallyc_devices_w),this)); + m_maincpu->space(AS_PROGRAM).install_write_handler(0x01c00008, 0x01c0000b, write32_delegate(FUNC(model2_state::srallyc_devices_w), this)); } |