summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/namco/namcos21_c67.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/namco/namcos21_c67.cpp')
-rw-r--r--src/mame/namco/namcos21_c67.cpp49
1 files changed, 20 insertions, 29 deletions
diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp
index bd5dafbd1dd..1a0d429c54d 100644
--- a/src/mame/namco/namcos21_c67.cpp
+++ b/src/mame/namco/namcos21_c67.cpp
@@ -2,7 +2,9 @@
// copyright-holders:Phil Stroffolino
/*
-TODO (2026 update):
+Namco System 21 (later hardware with 5 TMS320C25 DSPs)
+
+TODO:
- lamp/vibration outputs, from MCU? (particularly starblad);
- verify DSP clocks, they should be 40MHz, currently underclocked on purpose on MAME, otherwise polygons
may disappear on some frames (try playing starblad until after the asteroids), tightening quantum by
@@ -24,9 +26,8 @@ BTANB:
- aircomb: intro cockpit closure is one pixel off on left edge;
- solvalou: sprites on top of foreground polygons (eg. explosions, water splash)
-TODO:
-- namcoic.c: in StarBlade, the sprite list is stored at a different location during startup tests.
- What register controls this?
+Reversed AD Stick Y control in starblad/solvalou is correct (just like aircomb). It may seem backwards
+when playing it on an MAME (eg. with mouse), so just change analog reverse setting in the UI.
---------------------------------------------------------------------------
@@ -316,7 +317,6 @@ public:
m_namcos21_dsp_c67(*this, "namcos21dsp_c67")
{ }
- void configure_c148_standard(machine_config &config);
void namcos21(machine_config &config);
void cybsled(machine_config &config);
void solvalou(machine_config &config);
@@ -779,7 +779,6 @@ void namcos21_c67_state::sound_reset_w(u8 data)
{
/* Resume execution */
m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE);
- m_maincpu->yield();
}
else
{
@@ -796,9 +795,6 @@ void namcos21_c67_state::sound_reset_w(u8 data)
void namcos21_c67_state::system_reset_w(u8 data)
{
reset_all_subcpus(data & 1 ? CLEAR_LINE : ASSERT_LINE);
-
- if (data & 0x01)
- m_maincpu->yield();
}
void namcos21_c67_state::reset_all_subcpus(int state)
@@ -846,7 +842,6 @@ void namcos21_c67_state::machine_start()
TIMER_DEVICE_CALLBACK_MEMBER(namcos21_c67_state::screen_scanline)
{
int scanline = param;
-// int cur_posirq = get_posirq_scanline()*2;
if (scanline == 240*2)
{
@@ -856,17 +851,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcos21_c67_state::screen_scanline)
}
}
-void namcos21_c67_state::configure_c148_standard(machine_config &config)
-{
- NAMCO_C148(config, m_master_intc, 0, m_maincpu, true);
- m_master_intc->link_c148_device(m_slave_intc);
- m_master_intc->out_ext1_callback().set(FUNC(namcos21_c67_state::sound_reset_w));
- m_master_intc->out_ext2_callback().set(FUNC(namcos21_c67_state::system_reset_w));
-
- NAMCO_C148(config, m_slave_intc, 0, m_slave, false);
- m_slave_intc->link_c148_device(m_master_intc);
-}
-
// starblad, solvalou, aircomb, cybsled base state
void namcos21_c67_state::namcos21(machine_config &config)
{
@@ -901,7 +885,14 @@ void namcos21_c67_state::namcos21(machine_config &config)
m_namcos21_3d->set_depth_reverse(false);
m_namcos21_3d->set_framebuffer_size(496, 480);
- configure_c148_standard(config);
+ NAMCO_C148(config, m_master_intc, 0, m_maincpu, true);
+ m_master_intc->link_c148_device(m_slave_intc);
+ m_master_intc->out_ext1_callback().set(FUNC(namcos21_c67_state::sound_reset_w));
+ m_master_intc->out_ext2_callback().set(FUNC(namcos21_c67_state::system_reset_w));
+
+ NAMCO_C148(config, m_slave_intc, 0, m_slave, false);
+ m_slave_intc->link_c148_device(m_master_intc);
+
NAMCO_C139(config, m_sci, 0);
PALETTE(config, m_palette).set_format(palette_device::xBRG_888, 0x10000/2);
@@ -1308,13 +1299,13 @@ void namcos21_c67_state::init_solvalou()
/* YEAR NAME PARENT MACHINE INPUT CLASS INIT MONITOR COMPANY FULLNAME FLAGS */
// uses 5x TMS320C25 (C67, has internal ROM - dumped)
-GAME( 1991, starblad, 0, starblad, starblad, namcos21_c67_state, empty_init, ROT0, "Namco", "Starblade (ST2, World)", MACHINE_IMPERFECT_GRAPHICS )
-GAME( 1991, starbladj, starblad, starblad, starblad, namcos21_c67_state, empty_init, ROT0, "Namco", "Starblade (ST1, Japan)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1991, starblad, 0, starblad, starblad, namcos21_c67_state, empty_init, ROT0, "Namco", "Starblade (ST2, World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
+GAME( 1991, starbladj, starblad, starblad, starblad, namcos21_c67_state, empty_init, ROT0, "Namco", "Starblade (ST1, Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAMEL(1991, solvalou, 0, solvalou, solvalou, namcos21_c67_state, init_solvalou, ROT0, "Namco", "Solvalou (SV1, Japan)", MACHINE_IMPERFECT_GRAPHICS, layout_solvalou )
+GAMEL(1991, solvalou, 0, solvalou, solvalou, namcos21_c67_state, init_solvalou, ROT0, "Namco", "Solvalou (SV1, Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE, layout_solvalou )
-GAME( 1992, aircomb, 0, aircomb, aircomb, namcos21_c67_state, empty_init, ROT0, "Namco", "Air Combat (AC2, US)", MACHINE_IMPERFECT_GRAPHICS ) // There's code for a SCI, is it even possible to play multiplayer?
-GAME( 1992, aircombj, aircomb, aircomb, aircomb, namcos21_c67_state, empty_init, ROT0, "Namco", "Air Combat (AC1, Japan)", MACHINE_IMPERFECT_GRAPHICS )
+GAME( 1992, aircomb, 0, aircomb, aircomb, namcos21_c67_state, empty_init, ROT0, "Namco", "Air Combat (AC2, US)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // There's code for a SCI, is it even possible to play multiplayer?
+GAME( 1992, aircombj, aircomb, aircomb, aircomb, namcos21_c67_state, empty_init, ROT0, "Namco", "Air Combat (AC1, Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE )
-GAME( 1993, cybsled, 0, cybsled, cybsled, namcos21_c67_state, empty_init, ROT0, "Namco", "Cyber Sled (CY2, World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN )
-GAME( 1993, cybsleda, cybsled, cybsled, cybsled, namcos21_c67_state, empty_init, ROT0, "Namco", "Cyber Sled (CY1, World?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN ) // usually an 'xx1' set would be Japan, but this shows neither a warning nor Japanese text, verify on hardware
+GAME( 1993, cybsled, 0, cybsled, cybsled, namcos21_c67_state, empty_init, ROT0, "Namco", "Cyber Sled (CY2, World)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE )
+GAME( 1993, cybsleda, cybsled, cybsled, cybsled, namcos21_c67_state, empty_init, ROT0, "Namco", "Cyber Sled (CY1, World?)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NODEVICE_LAN | MACHINE_SUPPORTS_SAVE ) // usually an 'xx1' set would be Japan, but this shows neither a warning nor Japanese text, verify on hardware