summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author angelosa <lordkale4@gmail.com>2026-04-18 12:02:55 +0200
committer angelosa <lordkale4@gmail.com>2026-04-18 12:07:20 +0200
commit9b93eaa4ceaad736cdcbe82a0c86a1e41183a6dd (patch)
treedd3c11302d13c54ed5ba08060ddb92e9817256e9
parent41a62d10a01b99d1a8fd99cdf663d05618d75bdf (diff)
namco/namcos21_c67.cpp: various fixes:
* hookup video enable bit (solvalou after POST); * remove cybsled specific kickstart delay, fix title screen appearance; * issue a DSP chip reset when the line is high, fix starblad/solvalou 3d graphics after exiting service mode;
-rw-r--r--src/mame/namco/namcos21_c67.cpp43
-rw-r--r--src/mame/namco/namcos21_dsp_c67.cpp13
2 files changed, 39 insertions, 17 deletions
diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp
index 2ec783c0fbd..9c5cabbdc58 100644
--- a/src/mame/namco/namcos21_c67.cpp
+++ b/src/mame/namco/namcos21_c67.cpp
@@ -5,22 +5,31 @@
TODO (2026 update):
- how the 3d rasterizer really selects banks 1 & 2? aircomb is the odd one, it has a red shaded
bank from time to time;
-- aircomb: z-fighting issue on attract mode with the plane renders (after the first title screen);
+- fix 3d/sprite vertical offsets;
+- lamp/vibration outputs, from MCU? (particularly starblad);
+- aircomb: z-fighting issue on attract mode with the plane renders (after the first title screen),
+ and on pilot parachuting with a time over;
- aircomb: sprites blends badly with background pen when warning appears and the src target is the sky color
(i.e. pen 0xff with current handling);
-- aircomb: level select/continue screen draws with a red pen, should be pure black according to refs;
+- aircomb: level select/continue screen draws with a red backdrop pen, should be pure black
+ according to refs;
- aircomb: missing background on attract mode ranking screen (masking? cfr. shared/namco_c355spr.cpp);
+- aircomb: bad sprite colors on debriefing medal screen;
- cybsled: https://mametesters.org/view.php?id=6302
- solvalou: https://mametesters.org/view.php?id=2085
-- solvalou: black screen on service mode (cfr. shared/namco_c355spr.cpp);
-- starblad: 3d freezes after exiting service mode;
+- solvalou: black screen on service mode, is it due of the various hacks or it's in shared/namco_c355spr.cpp?;
+- solvalou: implement cabinet layout, upper part should be Y flipped thru a mirror,
+ unless it's actually sprite responsibility?
+- solvalou: new game transition should fill green on terrain instead of white-ish (comes from 3d
+ render);
+- starblad: service mode has heavy sprite glitches if entered from live gameplay (verify)
+
+NOTES:
+- aircomb: intro cockpit closure is one pixel off on left edge, confirmed btanb from ref;
TODO: namcoic.c: in StarBlade, the sprite list is stored at a different location during startup tests.
What register controls this?
-TODO: Map lamps/vibration outputs as used by StarBlade (and possibly other titles).
- These likely involve the MCU.
-
---------------------------------------------------------------------------
DSP RAM is shared with the 68000 CPUs and master DSP.
@@ -260,9 +269,7 @@ Namco System 21 Video Hardware
*/
#include "emu.h"
-#include "screen.h"
-#include "emupal.h"
-#include "speaker.h"
+
#include "cpu/m68000/m68000.h"
#include "cpu/m6805/m6805.h"
#include "cpu/m6809/m6809.h"
@@ -278,7 +285,10 @@ Namco System 21 Video Hardware
#include "namcos21_3d.h"
#include "sound/c140.h"
#include "sound/ymopm.h"
+
#include "emupal.h"
+#include "screen.h"
+#include "speaker.h"
#define ENABLE_LOGGING 0
@@ -408,6 +418,11 @@ u32 namcos21_c67_state::screen_update(screen_device &screen, bitmap_ind16 &bitma
int pivot = 3;
bitmap.fill(0xff, cliprect);
screen.priority().fill(0, cliprect);
+
+ // solvalou after POST, definitely blanks screen
+ if (!BIT(m_video_enable, 6))
+ return 0;
+
m_c355spr->build_sprite_list_and_render_sprites(cliprect); // TODO : buffered?
const u16 pri1 = (m_palette->read16_ext(0) >> 8) & 7;
@@ -446,12 +461,14 @@ u16 namcos21_c67_state::video_enable_r()
return m_video_enable;
}
+// bit 6: video enable
+// other bits unknown (if ever used)
void namcos21_c67_state::video_enable_w(offs_t offset, u16 data, u16 mem_mask)
{
- COMBINE_DATA( &m_video_enable ); /* 0x40 = enable */
- if (m_video_enable != 0 && m_video_enable != 0x40)
+ COMBINE_DATA( &m_video_enable );
+ if (m_video_enable & ~0x40)
{
- logerror("%s: unexpected video_enable_w=0x%x\n", machine().describe_context(), m_video_enable);
+ popmessage("Video Enable %04x!", m_video_enable);
}
}
diff --git a/src/mame/namco/namcos21_dsp_c67.cpp b/src/mame/namco/namcos21_dsp_c67.cpp
index 62a4f82035d..2e10fa8df5f 100644
--- a/src/mame/namco/namcos21_dsp_c67.cpp
+++ b/src/mame/namco/namcos21_dsp_c67.cpp
@@ -72,10 +72,11 @@ void namcos21_dsp_c67_device::device_reset()
/* DSP startup hacks */
m_mbNeedsKickstart = 20;
- if (m_gametype == NAMCOS21_CYBERSLED)
- {
- m_mbNeedsKickstart = 200;
- }
+ // looks unnecessary, also causes 3d drift on title screen
+// if (m_gametype == NAMCOS21_CYBERSLED)
+// {
+// m_mbNeedsKickstart = 200;
+// }
/* Wipe the framebuffers */
m_renderer->swap_and_clear_poly_framebuffer();
@@ -109,6 +110,10 @@ void namcos21_dsp_c67_device::device_reset()
void namcos21_dsp_c67_device::reset_dsps(int state)
{
+ // starblad/solvalou exiting service mode requires this otherwise 3d becomes non-functional
+ if (state)
+ this->reset();
+
if (m_c67master)
m_c67master->set_input_line(INPUT_LINE_RESET, state);