summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/ms32.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/ms32.cpp')
-rw-r--r--src/mame/video/ms32.cpp67
1 files changed, 26 insertions, 41 deletions
diff --git a/src/mame/video/ms32.cpp b/src/mame/video/ms32.cpp
index 2811d62696f..08aac4de5fc 100644
--- a/src/mame/video/ms32.cpp
+++ b/src/mame/video/ms32.cpp
@@ -411,54 +411,38 @@ uint32_t ms32_state::screen_update_ms32(screen_device &screen, bitmap_rgb32 &bit
else
scr_pri++;
- if((m_priram[0x3a00 / 2] & 0x00ff) == 0x000c)
+ // Suchiepai 2 title & Gratia gameplay intermissions uses 0x0f
+ // hayaosi3 uses 0x09 during flames screen on attract
+ // this is otherwise 0x17 most of the time except for 0x15 in hayaosi3, tetris plus 2 & world pk soccer 2
+ // kirarast flips between 0x16 in gameplay and 0x17 otherwise
+ if((m_priram[0x3a00 / 2] & 0x0030) == 0x00)
scr_pri++;
else
rot_pri++;
- if (rot_pri == 0)
- draw_roz(screen, m_temp_bitmap_tilemaps, cliprect, 1 << 1);
- else if (scr_pri == 0)
- if (m_tilemaplayoutcontrol&1)
- {
- m_bg_tilemap_alt->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 0);
- }
- else
- {
- m_bg_tilemap->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 0);
- }
- else if (asc_pri == 0)
- m_tx_tilemap->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 2);
-
- if (rot_pri == 1)
- draw_roz(screen, m_temp_bitmap_tilemaps, cliprect, 1 << 1);
- else if (scr_pri == 1)
- if (m_tilemaplayoutcontrol&1)
- {
- m_bg_tilemap_alt->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 0);
- }
- else
- {
- m_bg_tilemap->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 0);
- }
- else if (asc_pri == 1)
- m_tx_tilemap->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 2);
-
- if (rot_pri == 2)
- draw_roz(screen, m_temp_bitmap_tilemaps, cliprect, 1 << 1);
- else if (scr_pri == 2)
- if (m_tilemaplayoutcontrol&1)
- {
- m_bg_tilemap_alt->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 0);
- }
- else
+// popmessage("%02x %02x %02x",m_priram[0x2b00 / 2],m_priram[0x2e00 / 2],m_priram[0x3a00 / 2]);
+
+ // tile-tile mixing
+ for(int prin=0;prin<3;prin++)
+ {
+ if(rot_pri == prin)
+ draw_roz(screen, m_temp_bitmap_tilemaps, cliprect, 1 << 1);
+ else if (scr_pri == prin)
{
- m_bg_tilemap->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 0);
+ if (m_tilemaplayoutcontrol&1)
+ {
+ m_bg_tilemap_alt->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 0);
+ }
+ else
+ {
+ m_bg_tilemap->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 0);
+ }
}
- else if (asc_pri == 2)
- m_tx_tilemap->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 2);
+ else if(asc_pri == prin)
+ m_tx_tilemap->draw(screen, m_temp_bitmap_tilemaps, cliprect, 0, 1 << 2);
+ }
- /* MIX it! */
+ // tile-sprite mixing
/* this mixing isn't 100% accurate, it should be using ALL the data in
the priority ram, probably for per-pixel / pen mixing, or more levels
than are supported here.. I don't know, it will need hw tests I think */
@@ -505,6 +489,7 @@ uint32_t ms32_state::screen_update_ms32(screen_device &screen, bitmap_rgb32 &bit
if (m_priram[(spritepri | 0x0a00 | 0x0000) / 2] & 0x38) primask |= 1 << 7;
+ // TODO: spaghetti code ...
if (primask == 0x00)
{
if (src_tilepri==0x00)