Namco System 23 texturing improvements + boot fix for aking (#12941)

New clones marked not working
-----------------------------
Crisis Zone (World, CSZO2 Ver. B) [Guru]

-namcos23.cpp: Improved texturing in Super System 23 games. [Ryan Holtz]
* Added missing address-map setter.
This commit is contained in:
MooglyGuy 2024-11-06 16:10:10 +01:00 committed by GitHub
parent 88079a1bf3
commit ae250c58d0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -110,20 +110,14 @@ c8000000:
':maincpu' (801143E0): unmapped program memory write to 0C800010 = 00000000 & 0000FFFF
Game status:
rapidrvr,v2c Glitchy graphics.
rapidrvrp Same as above.
finfurl Same as above.
motoxgo(all) Glitchy graphics.
downhill Extremely glitchy graphics.
downhillu Same as above.
timecrs2(all) Glitchy graphics but otherwise playable.
panicprk,j,j2 Glitchy graphics. Coins up. Partly to fully playable depending on mini-game.
gunwars,a Extremely glitchy graphics.
all games: Glitchy graphics.
downhill/u Extremely glitchy graphics.
panicprk/j/j2 Some mini-games are not playable due to Z-sorting issues.
gunwars/a Extremely glitchy graphics.
raceon Locks up after POST.
aking Locks up after displaying legal-notice screen or test menu. Inputs unresponsive.
500gp Extremely glitchy graphics. Partly playable.
finfurl2,j Glitchy graphics.
crszone(all) Glitchy graphics.
aking Inputs unresponsive.
500gp Occasional lockups.
crszone(all) Input issues.
****************************************************************************
@ -1446,6 +1440,8 @@ struct namcos23_render_entry
int type;
u16 absolute_priority;
u16 model_blend_factor;
u16 camera_power;
u16 camera_ambient;
u8 poly_fade_r;
u8 poly_fade_g;
u8 poly_fade_b;
@ -1665,12 +1661,8 @@ public:
m_lamps(*this, "lamp%u", 0U)
{ }
void ss23(machine_config &config);
void s23(machine_config &config);
void timecrs2(machine_config &config);
void timecrs2v4a(machine_config &config);
void _500gp(machine_config &config);
void aking(machine_config &config);
void downhill(machine_config &config);
void panicprk(machine_config &config);
@ -1814,6 +1806,8 @@ protected:
void c435_scaling_set();
void c435_model_blend_factor_set();
void c435_absolute_priority_set();
void c435_camera_power_set();
void c435_camera_ambient_set();
void c435_render();
void c435_flush();
@ -1906,6 +1900,8 @@ protected:
u16 m_absolute_priority;
u16 m_model_blend_factor;
u16 m_camera_power;
u16 m_camera_ambient;
float m_proj_matrix[8*3];
u8 m_proj_matrix_line;
@ -2077,11 +2073,30 @@ protected:
u16 m_sensor[4];
};
class namcos23_gmen_state : public namcos23_state
class namcoss23_state : public namcos23_state
{
public:
namcos23_gmen_state(const machine_config &mconfig, device_type type, const char *tag) :
namcos23_state(mconfig, type, tag),
namcoss23_state(const machine_config &mconfig, device_type type, const char *tag) :
namcos23_state(mconfig, type, tag)
{ }
void ss23(machine_config &config);
void timecrs2v4a(machine_config &config);
void _500gp(machine_config &config);
void aking(machine_config &config);
protected:
void mips_map(address_map &map) ATTR_COLD;
private:
void c435_c361_ack_w(offs_t offset, u32 data);
};
class namcoss23_gmen_state : public namcoss23_state
{
public:
namcoss23_gmen_state(const machine_config &mconfig, device_type type, const char *tag) :
namcoss23_state(mconfig, type, tag),
m_sh2(*this, "sh2"),
m_vpx(*this, "vpx"),
m_firewire(*this, "firewire"),
@ -2091,8 +2106,8 @@ public:
void gmen(machine_config &config);
void gunwars(machine_config &config);
void finfurl2(machine_config &config);
void raceon(machine_config &config);
void finfurl2(machine_config &config);
protected:
virtual void machine_start() override ATTR_COLD;
@ -2129,11 +2144,11 @@ private:
u32 m_sh2_unk;
};
class crszone_state : public namcos23_state
class crszone_state : public namcoss23_state
{
public:
crszone_state(const machine_config &mconfig, device_type type, const char *tag) :
namcos23_state(mconfig, type, tag),
namcoss23_state(mconfig, type, tag),
m_acia(*this, "acia")
{ }
@ -2642,6 +2657,8 @@ void namcos23_state::c435_state_set(u16 type, const u16 *param)
re->fade_flags = m_c404.fade_flags;
re->absolute_priority = m_absolute_priority;
re->model_blend_factor = 0;
re->camera_power = m_camera_power;
re->camera_ambient = m_camera_ambient;
if (m_c435.buffer[0] == 0x4f38)
{
re->immediate.type = param[ 0];
@ -2719,6 +2736,8 @@ void namcos23_state::c435_state_set(u16 type, const u16 *param)
re->type = IMMEDIATE;
re->absolute_priority = m_absolute_priority;
re->model_blend_factor = 0;
re->camera_power = m_camera_power;
re->camera_ambient = m_camera_ambient;
/*
3-e0: 1110 0000, has shade+tex+pos
3-a0: 1010 0000, has tex+pos
@ -2797,6 +2816,8 @@ void namcos23_state::c435_state_set(u16 type, const u16 *param)
re->type = IMMEDIATE;
re->absolute_priority = m_absolute_priority;
re->model_blend_factor = 0;
re->camera_power = m_camera_power;
re->camera_ambient = m_camera_ambient;
re->immediate.type = param[ 0];
re->immediate.h = (param[ 1] << 16) | param[ 2];
re->immediate.pal = (param[ 3] << 16) | param[ 4];
@ -2870,14 +2891,24 @@ void namcos23_state::c435_state_set() // 4.f
c435_state_set(m_c435.buffer[1], m_c435.buffer + 2);
}
void namcos23_state::c435_absolute_priority_set() // 4.1
{
m_absolute_priority = m_c435.buffer[1];
}
void namcos23_state::c435_model_blend_factor_set() // 4.5
{
m_model_blend_factor = m_c435.buffer[1];
}
void namcos23_state::c435_absolute_priority_set() // 4.1
void namcos23_state::c435_camera_power_set() // 4.7
{
m_absolute_priority = m_c435.buffer[1];
m_camera_power = m_c435.buffer[1];
}
void namcos23_state::c435_camera_ambient_set() // 4.8
{
m_camera_ambient = m_c435.buffer[1];
}
void namcos23_state::c435_render() // 8
@ -2907,6 +2938,8 @@ void namcos23_state::c435_render() // 8
re->model.transpose = transpose;
re->absolute_priority = m_absolute_priority;
re->model_blend_factor = m_model_blend_factor;
re->camera_power = m_camera_power;
re->camera_ambient = m_camera_ambient;
re->model.light_vector[0] = m_light_vector[0];
re->model.light_vector[1] = m_light_vector[1];
re->model.light_vector[2] = m_light_vector[2];
@ -3018,6 +3051,12 @@ void namcos23_state::c435_pio_w(offs_t offset, u16 data)
case 0x0500:
c435_model_blend_factor_set();
break;
case 0x0700:
c435_camera_power_set();
break;
case 0x0800:
c435_camera_ambient_set();
break;
case 0x0f00:
c435_state_set();
break;
@ -3182,6 +3221,11 @@ u32 namcos23_state::c435_busy_flag_r()
return 1;
}
void namcoss23_state::c435_c361_ack_w(offs_t offset, u32 data)
{
irq_update(m_main_irqcause & ~MAIN_C361_IRQ);
}
void namcos23_state::c435_dma_addr_w(offs_t offset, u32 data, u32 mem_mask)
{
LOGMASKED(LOG_C435_REG, "%s: c435 write address: %08x & %08x\n", machine().describe_context(), data, mem_mask);
@ -3480,8 +3524,8 @@ void namcos23_state::render_direct_poly(const namcos23_render_entry *re)
p->rd.shade_enabled = true;
p->rd.rgb = 0x00ffffff;
p->rd.flags = flags;
p->rd.tbase = (re->direct.d[2] & 0x000f) << 12;
p->rd.cmode = (re->direct.d[2] & 0x00f0) >> 4;
p->rd.tbase = ((re->direct.d[2] & 0x000f) << 12) | (BIT(re->direct.d[2], 7) << 16);
p->rd.cmode = (re->direct.d[2] & 0x0070) >> 4;
p->rd.cz_value = (re->direct.d[3] >> 2) & 0x1fff;
p->rd.cz_type = re->direct.d[3] & 3;
p->rd.prioverchar = ((p->rd.cmode & 7) == 1) ? 7 : 0;
@ -3727,8 +3771,8 @@ void namcos23_state::render_model(const namcos23_render_entry *re)
u32 type = data[offs++];
u32 h = data[offs++];
u32 cmode = (type & 0xf0000000) >> 28;
u32 tbase = ((type & 0x0f000000) >> 24) << 12;
u32 cmode = (type & 0x70000000) >> 29;
u32 tbase = (((type & 0x0f000000) >> 24) << 12) | (BIT(type, 31) << 16);
u8 color = (h >> 24) & 0x7f;
int lmode = (type >> 19) & 3;
int ne = (type >> 8) & 15;
@ -3830,27 +3874,21 @@ void namcos23_state::render_model(const namcos23_render_entry *re)
nrz /= length;
}
float light_vector[3] =
{
util::sext(re->model.light_vector[0], 24) / 16384.f,
util::sext(re->model.light_vector[1], 24) / 16384.f,
util::sext(re->model.light_vector[2], 24) / 16384.f
};
length = sqrtf(light_vector[0] * light_vector[0] + light_vector[1] * light_vector[1] + light_vector[2] * light_vector[2]);
float cx, cy, cz;
render_apply_matrot(re->model.light_vector[0], re->model.light_vector[1], re->model.light_vector[2], re, cx, cy, cz);
length = sqrtf(cx * cx + cy * cy + cz * cz);
if (length != 0.0f)
{
light_vector[0] /= length;
light_vector[1] /= length;
light_vector[2] /= length;
cx /= length;
cy /= length;
cz /= length;
}
float lsi = nrx * light_vector[0] + nry * light_vector[1] + nrz * light_vector[2];
float lsi = nrx * cx + nry * cy + nrz * cz;
if (lsi < 0)
lsi = 0;
// Mapping taken out of a hat
pv[i].p[3] = std::clamp(16.f + 96.f * lsi, 0.f, 64.f);
pv[i].p[3] = std::clamp(re->camera_ambient + re->camera_power * lsi, 0.f, 64.f);
} break;
}
}
@ -4455,7 +4493,7 @@ void namcos23_state::mix_text_layer(screen_device &screen, bitmap_rgb32 &bitmap,
// apply alpha
if (m_c404.alpha_factor && ((pen & 0xf) == m_c404.alpha_mask || (pen >= m_c404.alpha_check12 && pen <= m_c404.alpha_check13)))
rgb.blend(rgbaint_t(dst[x]), 0xff - m_c404.alpha_factor);
rgb.blend(rgbaint_t(*dst), 0xff - m_c404.alpha_factor);
*dst = rgb.to_rgba();
}
@ -5043,7 +5081,9 @@ void namcos23_state::apply_text_scroll()
// apply current frame x scroll updates to tilemap
for (int i = 0; i < 480; i++)
{
m_bgtilemap->set_scrollx((i + scroll_y + 4) & 0x3ff, m_c404.rowscroll[i]);
}
}
void namcos23_state::c361_xscroll_w(offs_t offset, u16 data)
@ -5547,9 +5587,15 @@ void namcos23_state::c404_map(address_map &map, const u32 addr)
map(addr + 0x03e, addr + 0x03f).w(FUNC(namcos23_state::c404_layer_flags_w));
}
void namcoss23_state::mips_map(address_map &map)
{
namcos23_state::mips_map(map);
map(0x0100005c, 0x0100005f).w(FUNC(namcoss23_state::c435_c361_ack_w));
}
// GMEN interface
u32 namcos23_gmen_state::sh2_trigger_r()
u32 namcoss23_gmen_state::sh2_trigger_r()
{
LOGMASKED(LOG_SH2, "%s: sh2_trigger_r: booting SH-2\n", machine().describe_context());
m_sh2->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
@ -5557,81 +5603,81 @@ u32 namcos23_gmen_state::sh2_trigger_r()
return 0;
}
u32 namcos23_gmen_state::sh2_shared_r(offs_t offset, u32 mem_mask)
u32 namcoss23_gmen_state::sh2_shared_r(offs_t offset, u32 mem_mask)
{
return m_sh2_shared[offset];
}
void namcos23_gmen_state::sh2_shared_w(offs_t offset, u32 data, u32 mem_mask)
void namcoss23_gmen_state::sh2_shared_w(offs_t offset, u32 data, u32 mem_mask)
{
COMBINE_DATA(&m_sh2_shared[offset]);
}
u32 namcos23_gmen_state::sh2_dsw_r(offs_t offset, u32 mem_mask)
u32 namcoss23_gmen_state::sh2_dsw_r(offs_t offset, u32 mem_mask)
{
return m_dsw->read() << 24;
}
u32 namcos23_gmen_state::mips_sh2_unk_r(offs_t offset, u32 mem_mask)
u32 namcoss23_gmen_state::mips_sh2_unk_r(offs_t offset, u32 mem_mask)
{
logerror("%s: mips_sh2_unk_r: %08x & %08x\n", machine().describe_context().c_str(), m_sh2_unk, mem_mask);
return m_sh2_unk;
}
u32 namcos23_gmen_state::sh2_unk_r(offs_t offset, u32 mem_mask)
u32 namcoss23_gmen_state::sh2_unk_r(offs_t offset, u32 mem_mask)
{
return 0;
}
void namcos23_gmen_state::sh2_unk_w(offs_t offset, u32 data, u32 mem_mask)
void namcoss23_gmen_state::sh2_unk_w(offs_t offset, u32 data, u32 mem_mask)
{
COMBINE_DATA(&m_sh2_unk);
}
u32 namcos23_gmen_state::sh2_unk6200000_r(offs_t offset, u32 mem_mask)
u32 namcoss23_gmen_state::sh2_unk6200000_r(offs_t offset, u32 mem_mask)
{
return 0x04000000;
}
void namcos23_gmen_state::vpx_i2c_sdao_w(int state)
void namcoss23_gmen_state::vpx_i2c_sdao_w(int state)
{
m_vpx_sdao = state;
}
u8 namcos23_gmen_state::vpx_i2c_r() {
u8 namcoss23_gmen_state::vpx_i2c_r() {
//LOGMASKED(LOG_GMEN, "%s: vpx_i2c_r: %02x\n", machine().describe_context().c_str(), m_vpx_sdao);
return m_vpx_sdao;
}
void namcos23_gmen_state::vpx_i2c_w(u8 data) {
void namcoss23_gmen_state::vpx_i2c_w(u8 data) {
//LOGMASKED(LOG_GMEN, "%s: vpx_i2c_w: %02x\n", machine().describe_context().c_str(), data);
m_vpx->sda_write(BIT(data, 0));
m_vpx->scl_write(BIT(data, 1));
}
u32 namcos23_gmen_state::sh2_kludge_r()
u32 namcoss23_gmen_state::sh2_kludge_r()
{
return 0x22115566;
}
void namcos23_gmen_state::mips_map(address_map &map)
void namcoss23_gmen_state::mips_map(address_map &map)
{
namcos23_state::mips_map(map);
map(0x0e400000, 0x0e400003).r(FUNC(namcos23_gmen_state::sh2_trigger_r));
map(0x0e600000, 0x0e600003).r(FUNC(namcos23_gmen_state::mips_sh2_unk_r));
map(0x0e700000, 0x0e70ffff).rw(FUNC(namcos23_gmen_state::sh2_shared_r), FUNC(namcos23_gmen_state::sh2_shared_w));
map(0x0e70c000, 0x0e70c003).r(FUNC(namcos23_gmen_state::sh2_kludge_r));
namcoss23_state::mips_map(map);
map(0x0e400000, 0x0e400003).r(FUNC(namcoss23_gmen_state::sh2_trigger_r));
map(0x0e600000, 0x0e600003).r(FUNC(namcoss23_gmen_state::mips_sh2_unk_r));
map(0x0e700000, 0x0e70ffff).rw(FUNC(namcoss23_gmen_state::sh2_shared_r), FUNC(namcoss23_gmen_state::sh2_shared_w));
map(0x0e70c000, 0x0e70c003).r(FUNC(namcoss23_gmen_state::sh2_kludge_r));
}
void namcos23_gmen_state::sh2_map(address_map &map)
void namcoss23_gmen_state::sh2_map(address_map &map)
{
map(0x00000000, 0x0000ffff).mirror(0x01000000).rw(FUNC(namcos23_gmen_state::sh2_shared_r), FUNC(namcos23_gmen_state::sh2_shared_w));
map(0x00000000, 0x0000ffff).mirror(0x01000000).rw(FUNC(namcoss23_gmen_state::sh2_shared_r), FUNC(namcoss23_gmen_state::sh2_shared_w));
map(0x04000000, 0x043fffff).ram(); // SH-2 main work RAM (SDRAM)
map(0x01800000, 0x01bfffff).ram();
map(0x02800000, 0x02800003).rw(FUNC(namcos23_gmen_state::sh2_unk_r), FUNC(namcos23_gmen_state::sh2_unk_w));
map(0x03000000, 0x03000003).r(FUNC(namcos23_gmen_state::sh2_dsw_r));
map(0x06000000, 0x06000003).umask32(0xff000000).rw(FUNC(namcos23_gmen_state::vpx_i2c_r), FUNC(namcos23_gmen_state::vpx_i2c_w));
map(0x06200000, 0x06200003).r(FUNC(namcos23_gmen_state::sh2_unk6200000_r));
map(0x02800000, 0x02800003).rw(FUNC(namcoss23_gmen_state::sh2_unk_r), FUNC(namcoss23_gmen_state::sh2_unk_w));
map(0x03000000, 0x03000003).r(FUNC(namcoss23_gmen_state::sh2_dsw_r));
map(0x06000000, 0x06000003).umask32(0xff000000).rw(FUNC(namcoss23_gmen_state::vpx_i2c_r), FUNC(namcoss23_gmen_state::vpx_i2c_w));
map(0x06200000, 0x06200003).r(FUNC(namcoss23_gmen_state::sh2_unk6200000_r));
//map(0x06600000, 0x06600003).nopw();
map(0x00c00000, 0x00c0006b).m(m_firewire, FUNC(md8412b_device::map));
}
@ -5922,6 +5968,8 @@ void namcos23_state::machine_start()
save_item(NAME(m_absolute_priority));
save_item(NAME(m_model_blend_factor));
save_item(NAME(m_camera_power));
save_item(NAME(m_camera_ambient));
save_item(NAME(m_matrices));
save_item(NAME(m_vectors));
save_item(NAME(m_light_vector));
@ -6022,15 +6070,15 @@ void gorgon_state::machine_reset()
m_subcpu_scanline_off_timer->adjust(attotime::never);
}
void namcos23_gmen_state::machine_start()
void namcoss23_gmen_state::machine_start()
{
namcos23_state::machine_start();
m_sh2_irq_timer = timer_alloc(FUNC(namcos23_gmen_state::sh2_irq_off), this);
m_sh2_irq_timer = timer_alloc(FUNC(namcoss23_gmen_state::sh2_irq_off), this);
save_item(NAME(m_vpx_sdao));
}
void namcos23_gmen_state::machine_reset()
void namcoss23_gmen_state::machine_reset()
{
namcos23_state::machine_reset();
@ -6043,7 +6091,7 @@ void namcos23_gmen_state::machine_reset()
m_vpx_sdao = 0;
}
TIMER_CALLBACK_MEMBER(namcos23_gmen_state::sh2_irq_off)
TIMER_CALLBACK_MEMBER(namcoss23_gmen_state::sh2_irq_off)
{
m_sh2->set_input_line(m_sh2_irq, CLEAR_LINE);
m_sh2_irq = -1;
@ -6263,57 +6311,58 @@ void namcos23_state::timecrs2(machine_config &config)
m_jvs->set_default_option("namco_tssio");
}
void namcos23_state::ss23(machine_config &config)
void namcoss23_state::ss23(machine_config &config)
{
s23(config);
m_maincpu->set_addrmap(AS_PROGRAM, &namcoss23_state::mips_map);
}
void namcos23_state::timecrs2v4a(machine_config &config)
void namcoss23_state::timecrs2v4a(machine_config &config)
{
ss23(config);
m_jvs->set_default_option("namco_tssio");
}
void namcos23_state::_500gp(machine_config &config)
void namcoss23_state::_500gp(machine_config &config)
{
ss23(config);
m_jvs->set_default_option("namco_fca10");
}
void namcos23_state::aking(machine_config &config)
void namcoss23_state::aking(machine_config &config)
{
ss23(config);
m_jvs->set_default_option("namco_fca10");
}
void namcos23_gmen_state::gmen(machine_config &config)
void namcoss23_gmen_state::gmen(machine_config &config)
{
ss23(config);
m_maincpu->set_addrmap(AS_PROGRAM, &namcos23_gmen_state::mips_map);
m_maincpu->set_addrmap(AS_PROGRAM, &namcoss23_gmen_state::mips_map);
SH7604(config, m_sh2, XTAL(28'700'000));
m_sh2->set_addrmap(AS_PROGRAM, &namcos23_gmen_state::sh2_map);
m_sh2->set_addrmap(AS_PROGRAM, &namcoss23_gmen_state::sh2_map);
VPX3220A(config, m_vpx, 0);
m_vpx->sda_callback().set(FUNC(namcos23_gmen_state::vpx_i2c_sdao_w));
m_vpx->sda_callback().set(FUNC(namcoss23_gmen_state::vpx_i2c_sdao_w));
MD8412B(config, m_firewire, 0);
}
void namcos23_gmen_state::gunwars(machine_config &config)
void namcoss23_gmen_state::gunwars(machine_config &config)
{
gmen(config);
m_jvs->set_default_option("namco_asca5");
}
void namcos23_gmen_state::raceon(machine_config &config)
void namcoss23_gmen_state::raceon(machine_config &config)
{
gmen(config);
m_jvs->set_default_option("namco_asca5");
}
void namcos23_gmen_state::finfurl2(machine_config &config)
void namcoss23_gmen_state::finfurl2(machine_config &config)
{
gmen(config);
m_jvs->set_default_option("namco_asca3a");
@ -6350,15 +6399,21 @@ void crszone_state::crszone(machine_config &config)
***************************************************************************/
static INPUT_PORTS_START(s23)
// You can go to the pcb test mode by pressing P1-A, and it doesn't crash anymore somehow
// You can go to the pcb test mode by pressing P1-A in some games.
// Use P1-A to select, P1-Sel+P1-A to exit, up/down to navigate
PORT_START("P1")
PORT_BIT(0x001, IP_ACTIVE_LOW, IPT_BUTTON5) PORT_PLAYER(2) PORT_NAME("Dev Service P1-D")
PORT_BIT(0x002, IP_ACTIVE_LOW, IPT_BUTTON6) PORT_PLAYER(2) PORT_NAME("Dev Service P1-E")
PORT_BIT(0x004, IP_ACTIVE_LOW, IPT_BUTTON7) PORT_PLAYER(2) PORT_NAME("Dev Service P1-F")
PORT_BIT(0x008, IP_ACTIVE_LOW, IPT_BUTTON1) PORT_PLAYER(2) PORT_NAME("Dev Service P1-A")
PORT_BIT(0x010, IP_ACTIVE_LOW, IPT_BUTTON8) PORT_PLAYER(2) PORT_NAME("Dev Service P1-G")
PORT_BIT(0x020, IP_ACTIVE_LOW, IPT_BUTTON9) PORT_PLAYER(2) PORT_NAME("Dev Service P1-H")
PORT_BIT(0x040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN) PORT_PLAYER(2) PORT_NAME("Dev Service Down")
PORT_BIT(0x080, IP_ACTIVE_LOW, IPT_JOYSTICK_UP) PORT_PLAYER(2) PORT_NAME("Dev Service Up")
PORT_BIT(0x100, IP_ACTIVE_LOW, IPT_START2) PORT_NAME("Dev Service Start")
PORT_BIT(0x200, IP_ACTIVE_LOW, IPT_BUTTON2) PORT_PLAYER(2) PORT_NAME("Dev Service P1-Sel")
PORT_BIT(0xc37, IP_ACTIVE_LOW, IPT_UNKNOWN)
PORT_BIT(0x400, IP_ACTIVE_LOW, IPT_BUTTON3) PORT_PLAYER(2) PORT_NAME("Dev Service P1-B")
PORT_BIT(0x800, IP_ACTIVE_LOW, IPT_BUTTON4) PORT_PLAYER(2) PORT_NAME("Dev Service P1-C")
PORT_START("P2")
PORT_BIT(0xfff, IP_ACTIVE_LOW, IPT_UNKNOWN)
@ -7536,14 +7591,14 @@ ROM_START( raceon )
ROM_LOAD( "ro1ccrh.7e", 0x000000, 0x200000, CRC(1c958de2) SHA1(4893350999d5d377e68b9577187828de7a4c77c2) )
ROM_REGION32_LE( 0x2000000, "pointrom", 0 ) /* 3D model data */
ROM_LOAD32_WORD_SWAP( "ro1pt0h.7a", 0x0000000, 0x400000, CRC(6ef742ab) SHA1(500ce413b2463a555237de7bcc9627d1082c9b52) )
ROM_LOAD32_WORD_SWAP( "ro1pt0l.7c", 0x0000002, 0x400000, CRC(f4b88bd0) SHA1(cc642d959645730b03ef01e6dbb5d0077bce7163) )
ROM_LOAD32_WORD_SWAP( "ro1pt1h.5a", 0x0800000, 0x400000, CRC(428bf573) SHA1(6be159e1cf7ef38639610c347fd2322ab9911a70) )
ROM_LOAD32_WORD_SWAP( "ro1pt1l.5c", 0x0800002, 0x400000, CRC(f3df1d13) SHA1(9f96c99bd3537940a532d3dccb69a1c7d8c6be63) )
ROM_LOAD32_WORD_SWAP( "ro1pt2h.4a", 0x1000000, 0x400000, CRC(e1abdbc9) SHA1(91827af01cb83f4422d7329c8eea52bb57d7d57e) )
ROM_LOAD32_WORD_SWAP( "ro1pt2l.4c", 0x1000002, 0x400000, CRC(c64f5cdc) SHA1(e7261f3a56718f304127cc85c08d0b32525dc1cd) )
ROM_LOAD32_WORD_SWAP( "ro1pt3h.3a", 0x1800000, 0x400000, CRC(ef4685f6) SHA1(930037cac4aae9892278aa322844d03c773c70f7) )
ROM_LOAD32_WORD_SWAP( "ro1pt3l.3c", 0x1800002, 0x400000, CRC(07d27009) SHA1(770001bee9d7ace337db8a42bf377678b2b5d5fb) )
ROM_LOAD32_WORD_SWAP( "ro1pt0h.7a", 0x0000000, 0x400000, CRC(b052c0dc) SHA1(ed60e2df68315da02a48a701841cd861e8dd46c2) )
ROM_LOAD32_WORD_SWAP( "ro1pt0l.7c", 0x0000002, 0x400000, CRC(4f09e946) SHA1(4c0e1edb0e807b580849510aa45313ceb700b8b9) )
ROM_LOAD32_WORD_SWAP( "ro1pt1h.5a", 0x0800000, 0x400000, CRC(94c6be22) SHA1(27fb80975a3332fe2ec91996d2c74b2f4fb5a2de) )
ROM_LOAD32_WORD_SWAP( "ro1pt1l.5c", 0x0800002, 0x400000, CRC(307b30f2) SHA1(24e0e5d392751e1e4126a604c7a18f90be1e6771) )
ROM_LOAD32_WORD_SWAP( "ro1pt2h.4a", 0x1000000, 0x400000, CRC(b77886f2) SHA1(efdeb11c9783dbd7eb776c2a99204fb2e55ecb6d) )
ROM_LOAD32_WORD_SWAP( "ro1pt2l.4c", 0x1000002, 0x400000, CRC(6eaec66b) SHA1(d96d96d3b11a5109fed07e455e2abc9a8450080c) )
ROM_LOAD32_WORD_SWAP( "ro1pt3h.3a", 0x1800000, 0x400000, CRC(87b8f7c5) SHA1(51f996199f7fc020f12c4ebd3e47acbc04341ce3) )
ROM_LOAD32_WORD_SWAP( "ro1pt3l.3c", 0x1800002, 0x400000, CRC(ee1a4d1d) SHA1(4fa71edd26edcb3efc56b71f603fabcafcc2d3f3) )
ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
ROM_LOAD( "ro1wavel.2c", 0x000000, 0x800000, CRC(c6aca840) SHA1(09a021459b6326fe161ffcee36376648a5bf0e00) )
@ -7587,14 +7642,14 @@ ROM_START( raceonj )
ROM_LOAD( "ro1ccrh.7e", 0x000000, 0x200000, CRC(1c958de2) SHA1(4893350999d5d377e68b9577187828de7a4c77c2) )
ROM_REGION32_LE( 0x2000000, "pointrom", 0 ) /* 3D model data */
ROM_LOAD32_WORD_SWAP( "ro1pt0h.7a", 0x0000000, 0x400000, CRC(6ef742ab) SHA1(500ce413b2463a555237de7bcc9627d1082c9b52) )
ROM_LOAD32_WORD_SWAP( "ro1pt0l.7c", 0x0000002, 0x400000, CRC(f4b88bd0) SHA1(cc642d959645730b03ef01e6dbb5d0077bce7163) )
ROM_LOAD32_WORD_SWAP( "ro1pt1h.5a", 0x0800000, 0x400000, CRC(428bf573) SHA1(6be159e1cf7ef38639610c347fd2322ab9911a70) )
ROM_LOAD32_WORD_SWAP( "ro1pt1l.5c", 0x0800002, 0x400000, CRC(f3df1d13) SHA1(9f96c99bd3537940a532d3dccb69a1c7d8c6be63) )
ROM_LOAD32_WORD_SWAP( "ro1pt2h.4a", 0x1000000, 0x400000, CRC(e1abdbc9) SHA1(91827af01cb83f4422d7329c8eea52bb57d7d57e) )
ROM_LOAD32_WORD_SWAP( "ro1pt2l.4c", 0x1000002, 0x400000, CRC(c64f5cdc) SHA1(e7261f3a56718f304127cc85c08d0b32525dc1cd) )
ROM_LOAD32_WORD_SWAP( "ro1pt3h.3a", 0x1800000, 0x400000, CRC(ef4685f6) SHA1(930037cac4aae9892278aa322844d03c773c70f7) )
ROM_LOAD32_WORD_SWAP( "ro1pt3l.3c", 0x1800002, 0x400000, CRC(07d27009) SHA1(770001bee9d7ace337db8a42bf377678b2b5d5fb) )
ROM_LOAD32_WORD_SWAP( "ro1pt0h.7a", 0x0000000, 0x400000, CRC(b052c0dc) SHA1(ed60e2df68315da02a48a701841cd861e8dd46c2) )
ROM_LOAD32_WORD_SWAP( "ro1pt0l.7c", 0x0000002, 0x400000, CRC(4f09e946) SHA1(4c0e1edb0e807b580849510aa45313ceb700b8b9) )
ROM_LOAD32_WORD_SWAP( "ro1pt1h.5a", 0x0800000, 0x400000, CRC(94c6be22) SHA1(27fb80975a3332fe2ec91996d2c74b2f4fb5a2de) )
ROM_LOAD32_WORD_SWAP( "ro1pt1l.5c", 0x0800002, 0x400000, CRC(307b30f2) SHA1(24e0e5d392751e1e4126a604c7a18f90be1e6771) )
ROM_LOAD32_WORD_SWAP( "ro1pt2h.4a", 0x1000000, 0x400000, CRC(b77886f2) SHA1(efdeb11c9783dbd7eb776c2a99204fb2e55ecb6d) )
ROM_LOAD32_WORD_SWAP( "ro1pt2l.4c", 0x1000002, 0x400000, CRC(6eaec66b) SHA1(d96d96d3b11a5109fed07e455e2abc9a8450080c) )
ROM_LOAD32_WORD_SWAP( "ro1pt3h.3a", 0x1800000, 0x400000, CRC(87b8f7c5) SHA1(51f996199f7fc020f12c4ebd3e47acbc04341ce3) )
ROM_LOAD32_WORD_SWAP( "ro1pt3l.3c", 0x1800002, 0x400000, CRC(ee1a4d1d) SHA1(4fa71edd26edcb3efc56b71f603fabcafcc2d3f3) )
ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
ROM_LOAD( "ro1wavel.2c", 0x000000, 0x800000, CRC(c6aca840) SHA1(09a021459b6326fe161ffcee36376648a5bf0e00) )
@ -8306,42 +8361,91 @@ ROM_START( crszonev2a )
ROM_LOAD( "csz1ccrh.7k", 0x000000, 0x200000, CRC(bc2fa03c) SHA1(e63d8e75494a383bf9a213edfa9c472a010f8efe) )
ROM_END
ROM_START( crszonev2b )
ROM_REGION32_BE( 0x800000, "user1", 0 ) /* 8 megs for main R4650 code */
ROM_LOAD16_WORD_SWAP( "cszo2verb.ic4", 0x000000, 0x800000, CRC(1426d8d0) SHA1(e8049df1b2db1180f9edf6e5fa9fe8692ae81086) )
ROM_REGION( 0x80000, "subcpu", 0 ) /* Hitachi H8/3002 MCU code */
ROM_LOAD16_WORD_SWAP( "cszo3verb.ic1", 0x000000, 0x080000, CRC(c790743b) SHA1(5fa7b83a7a1b1105a3aa0870b782cf2741b7d11c) )
ROM_REGION32_BE( 0x2000000, "data", 0 ) /* data ROMs */
ROM_LOAD16_BYTE( "csz1mtah.2j", 0x0000000, 0x800000, CRC(66b076ad) SHA1(edd32e0b380f01a9626d32f5eec860f841c8be8a) )
ROM_LOAD16_BYTE( "csz1mtal.2h", 0x0000001, 0x800000, CRC(38dc639a) SHA1(aa9b5b35174c1b007a57a4bd7a53bc3f479b5b71) )
ROM_LOAD16_BYTE( "csz1mtbh.2m", 0x1000000, 0x800000, CRC(bdec4188) SHA1(a098651fbd8a69a0afc17f4b6c93350926cacd6b) )
ROM_LOAD16_BYTE( "csz1mtbl.2f", 0x1000001, 0x800000, CRC(9c8f8d7a) SHA1(f61bcc9763df15428c82931a605ee40334d5ad98) )
ROM_REGION( 0x2000000, "textile", 0 ) /* texture tiles */
ROM_LOAD( "csz1cgll.4m", 0x0000000, 0x800000, CRC(0bcd41f2) SHA1(80b74f9398e8bd074f79a14490d06cfeb875c874) )
ROM_LOAD( "csz1cglm.4k", 0x0800000, 0x800000, CRC(d4af93d1) SHA1(0df37b793ce8da02d14f714722382786ae5d3ce2) )
ROM_LOAD( "csz1cgum.4j", 0x1000000, 0x800000, CRC(913c98b5) SHA1(b952dbc19053796077d4f33e8da836893e933b12) )
ROM_LOAD( "csz1cguu.5f", 0x1800000, 0x800000, CRC(e1d1bf24) SHA1(daf2c68e2d9a8f313d262d221cc990c93dfdf22f) )
ROM_REGION16_LE( 0x400000, "textilemapl", 0 ) /* texture tilemap 0-15 */
ROM_LOAD( "csz1ccrl.7f", 0x000000, 0x400000, CRC(1c20768d) SHA1(6cf4280e26f3625d6f750837bf344163e7e93c3d) )
ROM_REGION( 0x200000, "textilemaph", 0 ) /* texture tilemap 16-17 + attr */
ROM_LOAD( "csz1ccrh.7e", 0x000000, 0x200000, CRC(bc2fa03c) SHA1(e63d8e75494a383bf9a213edfa9c472a010f8efe) )
ROM_REGION32_BE( 0x2000000, "pointrom", 0 ) /* 3D model data */
ROM_LOAD32_WORD_SWAP( "csz1pt0h.7a", 0x0000000, 0x400000, CRC(e82f1abb) SHA1(b1c57152cc27835e06e429fd1659fe0973638142) )
ROM_LOAD32_WORD_SWAP( "csz1pt0l.7c", 0x0000002, 0x400000, CRC(b0d66afe) SHA1(7cda4eebf1bb1191d17e4b5e616be2fbe4ae9328) )
ROM_LOAD32_WORD_SWAP( "csz1pt1h.5a", 0x0800000, 0x400000, CRC(e54f80ad) SHA1(3b3fbb3001e630d800b02ec8e653d74878ac5116) )
ROM_LOAD32_WORD_SWAP( "csz1pt1l.5c", 0x0800002, 0x400000, CRC(527171c8) SHA1(0b2ce3858f40bdedf1543309a6bc28d780415250) )
ROM_LOAD32_WORD_SWAP( "csz1pt2h.4a", 0x1000000, 0x400000, CRC(e295137a) SHA1(37b18af1b3d9f0e69b45135f89b49a1ceec79127) )
ROM_LOAD32_WORD_SWAP( "csz1pt2l.4c", 0x1000002, 0x400000, CRC(c87d6dbd) SHA1(686f39073c521d6b21ef8bc1161b41b680697c63) )
ROM_LOAD32_WORD_SWAP( "csz1pt3h.3a", 0x1800000, 0x400000, CRC(05f65bdf) SHA1(0c349fe5381fe7aeb81f9365a2b44a212f6bd33e) )
ROM_LOAD32_WORD_SWAP( "csz1pt3l.3c", 0x1800002, 0x400000, CRC(5d077c0f) SHA1(a4fd0167d89bf9417766405726e0334e7c7eaec3) )
ROM_REGION( 0x1000000, "c352", 0 ) /* C352 PCM samples */
ROM_LOAD( "csz1wavel.2c", 0x000000, 0x800000, CRC(d0d74132) SHA1(a293d93bca8e12e388a088a592cfa7bcb9a976f7) )
ROM_LOAD( "csz1waveh.2a", 0x800000, 0x800000, CRC(de9d14a8) SHA1(e5006861928bb1d29bf80c7304f1a6d044b094fd) )
ROM_REGION( 0x800000, "dups", 0 ) /* duplicate ROMs */
ROM_LOAD( "csz1cguu.4f", 0x000000, 0x800000, CRC(e1d1bf24) SHA1(daf2c68e2d9a8f313d262d221cc990c93dfdf22f) )
ROM_LOAD( "csz1cgum.5j", 0x000000, 0x800000, CRC(913c98b5) SHA1(b952dbc19053796077d4f33e8da836893e933b12) )
ROM_LOAD( "csz1cgll.5m", 0x000000, 0x800000, CRC(0bcd41f2) SHA1(80b74f9398e8bd074f79a14490d06cfeb875c874) )
ROM_LOAD( "csz1cglm.5k", 0x000000, 0x800000, CRC(d4af93d1) SHA1(0df37b793ce8da02d14f714722382786ae5d3ce2) )
ROM_LOAD( "csz1ccrl.7m", 0x000000, 0x400000, CRC(1c20768d) SHA1(6cf4280e26f3625d6f750837bf344163e7e93c3d) )
ROM_LOAD( "csz1ccrh.7k", 0x000000, 0x200000, CRC(bc2fa03c) SHA1(e63d8e75494a383bf9a213edfa9c472a010f8efe) )
ROM_END
} // anonymous namespace
/* Games */
#define GAME_FLAGS ( MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
// YEAR, NAME, PARENT, MACHINE, INPUT, CLASS, INIT, MNTR, COMPANY, FULLNAME, FLAGS
GAME( 1997, rapidrvr, 0, rapidrvr, rapidrvr, rapidrvr_state, empty_init, ROT0, "Namco", "Rapid River (US, RD3 Ver. C)", GAME_FLAGS ) // 97/11/27, USA
GAME( 1997, rapidrvrv2c, rapidrvr, rapidrvr, rapidrvr, rapidrvr_state, empty_init, ROT0, "Namco", "Rapid River (World, RD2 Ver. C)", GAME_FLAGS ) // 97/11/27, Europe
GAME( 1997, rapidrvrp, rapidrvr, rapidrvr, rapidrvrp, rapidrvr_state, empty_init, ROT0, "Namco", "Rapid River (prototype)", GAME_FLAGS ) // 97/11/10, USA
GAME( 1997, finfurl, 0, finfurl, finfurl, gorgon_state, empty_init, ROT0, "Namco", "Final Furlong (World, FF2 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, downhill, 0, downhill, downhill, namcos23_state, empty_init, ROT0, "Namco", "Downhill Bikers (World, DH2 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, downhillu, downhill, downhill, downhill, namcos23_state, empty_init, ROT0, "Namco", "Downhill Bikers (US, DH3 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgo, 0, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (US, MG3 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgov2a, motoxgo, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (World, MG2 Ver. A, set 1)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgov2a2, motoxgo, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (World, MG2 Ver. A, set 2)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgov1a, motoxgo, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (Japan, MG1 Ver. A, set 1)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgov1a2, motoxgo, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (Japan, MG1 Ver. A, set 2)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2, 0, timecrs2, timecrs2, namcos23_state, empty_init, ROT0, "Namco", "Time Crisis II (US, TSS3 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2v2b, timecrs2, timecrs2, timecrs2, namcos23_state, empty_init, ROT0, "Namco", "Time Crisis II (World, TSS2 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2v1b, timecrs2, timecrs2, timecrs2, namcos23_state, empty_init, ROT0, "Namco", "Time Crisis II (Japan, TSS1 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2v4a, timecrs2, timecrs2v4a, timecrs2, namcos23_state, empty_init, ROT0, "Namco", "Time Crisis II (World, TSS4 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2v5a, timecrs2, timecrs2v4a, timecrs2, namcos23_state, empty_init, ROT0, "Namco", "Time Crisis II (US, TSS5 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, panicprk, 0, panicprk, panicprk, namcos23_state, empty_init, ROT0, "Namco", "Panic Park (World, PNP2 Ver. A)", GAME_FLAGS )
GAME( 1997, panicprkj, panicprk, panicprk, panicprk, namcos23_state, empty_init, ROT0, "Namco", "Panic Park (Japan, PNP1 Ver. B, set 1)", GAME_FLAGS )
GAME( 1997, panicprkj2, panicprk, panicprk, panicprk, namcos23_state, empty_init, ROT0, "Namco", "Panic Park (Japan, PNP1 Ver. B, set 2)", GAME_FLAGS )
GAME( 1998, gunwars, 0, gunwars, gunwars, namcos23_gmen_state, empty_init, ROT0, "Namco", "Gunmen Wars (Japan, GM1 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, gunwarsa, gunwars, gunwars, gunwars, namcos23_gmen_state, empty_init, ROT0, "Namco", "Gunmen Wars (Japan, GM1 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, raceon, 0, raceon, raceon, namcos23_gmen_state, empty_init, ROT0, "Namco", "Race On! (World, RO2 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, raceonj, raceon, raceon, raceon, namcos23_gmen_state, empty_init, ROT0, "Namco", "Race On! (Japan, RO1 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, 500gp, 0, _500gp, 500gp, namcos23_state, empty_init, ROT0, "Namco", "500 GP (US, 5GP3 Ver. C)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, aking, 0, aking, aking, namcos23_state, empty_init, ROT0, "Namco", "Angler King (Japan, AG1 Ver. A)", GAME_FLAGS )
GAME( 1998, finfurl2, 0, finfurl2, finfurl2, namcos23_gmen_state, empty_init, ROT0, "Namco", "Final Furlong 2 (World)", GAME_FLAGS | MACHINE_NODEVICE_LAN ) // 99/02/26 15:08:47 Overseas
GAME( 1998, finfurl2j, finfurl2, finfurl2, finfurl2, namcos23_gmen_state, empty_init, ROT0, "Namco", "Final Furlong 2 (Japan, FFS1 Ver.A)", GAME_FLAGS | MACHINE_NODEVICE_LAN ) // 99/02/26 15:03:14 Japanese
GAME( 1999, crszone, 0, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (World, CSZO4 Ver. B)", GAME_FLAGS )
GAME( 1999, crszonev4a, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (World, CSZO4 Ver. A)", GAME_FLAGS )
GAME( 1999, crszonev3b, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (US, CSZO3 Ver. B, set 1)", GAME_FLAGS )
GAME( 1999, crszonev3b2, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (US, CSZO3 Ver. B, set 2)", GAME_FLAGS )
GAME( 1999, crszonev3a, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (US, CSZO3 Ver. A)", GAME_FLAGS )
GAME( 1999, crszonev2a, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (World, CSZO2 Ver. A)", GAME_FLAGS )
// YEAR, NAME, PARENT, MACHINE, INPUT, CLASS, INIT, MNTR, COMPANY, FULLNAME, FLAGS
GAME( 1997, rapidrvr, 0, rapidrvr, rapidrvr, rapidrvr_state, empty_init, ROT0, "Namco", "Rapid River (US, RD3 Ver. C)", GAME_FLAGS ) // 97/11/27, USA
GAME( 1997, rapidrvrv2c, rapidrvr, rapidrvr, rapidrvr, rapidrvr_state, empty_init, ROT0, "Namco", "Rapid River (World, RD2 Ver. C)", GAME_FLAGS ) // 97/11/27, Europe
GAME( 1997, rapidrvrp, rapidrvr, rapidrvr, rapidrvrp, rapidrvr_state, empty_init, ROT0, "Namco", "Rapid River (prototype)", GAME_FLAGS ) // 97/11/10, USA
GAME( 1997, finfurl, 0, finfurl, finfurl, gorgon_state, empty_init, ROT0, "Namco", "Final Furlong (World, FF2 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, downhill, 0, downhill, downhill, namcos23_state, empty_init, ROT0, "Namco", "Downhill Bikers (World, DH2 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, downhillu, downhill, downhill, downhill, namcos23_state, empty_init, ROT0, "Namco", "Downhill Bikers (US, DH3 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgo, 0, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (US, MG3 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgov2a, motoxgo, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (World, MG2 Ver. A, set 1)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgov2a2, motoxgo, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (World, MG2 Ver. A, set 2)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgov1a, motoxgo, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (Japan, MG1 Ver. A, set 1)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, motoxgov1a2, motoxgo, motoxgo, motoxgo, motoxgo_state, empty_init, ROT0, "Namco", "Motocross Go! (Japan, MG1 Ver. A, set 2)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2, 0, timecrs2, timecrs2, namcos23_state, empty_init, ROT0, "Namco", "Time Crisis II (US, TSS3 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2v2b, timecrs2, timecrs2, timecrs2, namcos23_state, empty_init, ROT0, "Namco", "Time Crisis II (World, TSS2 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2v1b, timecrs2, timecrs2, timecrs2, namcos23_state, empty_init, ROT0, "Namco", "Time Crisis II (Japan, TSS1 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2v4a, timecrs2, timecrs2v4a, timecrs2, namcoss23_state, empty_init, ROT0, "Namco", "Time Crisis II (World, TSS4 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, timecrs2v5a, timecrs2, timecrs2v4a, timecrs2, namcoss23_state, empty_init, ROT0, "Namco", "Time Crisis II (US, TSS5 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1997, panicprk, 0, panicprk, panicprk, namcos23_state, empty_init, ROT0, "Namco", "Panic Park (World, PNP2 Ver. A)", GAME_FLAGS )
GAME( 1997, panicprkj, panicprk, panicprk, panicprk, namcos23_state, empty_init, ROT0, "Namco", "Panic Park (Japan, PNP1 Ver. B, set 1)", GAME_FLAGS )
GAME( 1997, panicprkj2, panicprk, panicprk, panicprk, namcos23_state, empty_init, ROT0, "Namco", "Panic Park (Japan, PNP1 Ver. B, set 2)", GAME_FLAGS )
GAME( 1998, gunwars, 0, gunwars, gunwars, namcoss23_gmen_state, empty_init, ROT0, "Namco", "Gunmen Wars (Japan, GM1 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, gunwarsa, gunwars, gunwars, gunwars, namcoss23_gmen_state, empty_init, ROT0, "Namco", "Gunmen Wars (Japan, GM1 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, raceon, 0, raceon, raceon, namcoss23_gmen_state, empty_init, ROT0, "Namco", "Race On! (World, RO2 Ver. A)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, raceonj, raceon, raceon, raceon, namcoss23_gmen_state, empty_init, ROT0, "Namco", "Race On! (Japan, RO1 Ver. B)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, 500gp, 0, _500gp, 500gp, namcoss23_state, empty_init, ROT0, "Namco", "500 GP (US, 5GP3 Ver. C)", GAME_FLAGS | MACHINE_NODEVICE_LAN )
GAME( 1998, aking, 0, aking, aking, namcoss23_state, empty_init, ROT0, "Namco", "Angler King (Japan, AG1 Ver. A)", GAME_FLAGS )
GAME( 1998, finfurl2, 0, finfurl2, finfurl2, namcoss23_gmen_state, empty_init, ROT0, "Namco", "Final Furlong 2 (World)", GAME_FLAGS | MACHINE_NODEVICE_LAN ) // 99/02/26 15:08:47 Overseas
GAME( 1998, finfurl2j, finfurl2, finfurl2, finfurl2, namcoss23_gmen_state, empty_init, ROT0, "Namco", "Final Furlong 2 (Japan, FFS1 Ver.A)", GAME_FLAGS | MACHINE_NODEVICE_LAN ) // 99/02/26 15:03:14 Japanese
GAME( 1999, crszone, 0, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (World, CSZO4 Ver. B)", GAME_FLAGS )
GAME( 1999, crszonev4a, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (World, CSZO4 Ver. A)", GAME_FLAGS )
GAME( 1999, crszonev3b, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (US, CSZO3 Ver. B, set 1)", GAME_FLAGS )
GAME( 1999, crszonev3b2, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (US, CSZO3 Ver. B, set 2)", GAME_FLAGS )
GAME( 1999, crszonev3a, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (US, CSZO3 Ver. A)", GAME_FLAGS )
GAME( 1999, crszonev2a, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (World, CSZO2 Ver. A)", GAME_FLAGS )
GAME( 1999, crszonev2b, crszone, crszone, crszone, crszone_state, empty_init, ROT0, "Namco", "Crisis Zone (World, CSZO2 Ver. B)", GAME_FLAGS )