From 57bc88f02c3a1abf122d0060e3c07af6a0337948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Banaan=20Ananas?= Date: Sun, 11 Aug 2013 13:10:52 +0000 Subject: [PATCH] fix cybrcycc dspram error (the video/namcos22.c change is just code relocating) --- src/mame/drivers/namcos22.c | 2 +- src/mame/video/namcos22.c | 170 ++++++++++++++++++------------------ 2 files changed, 86 insertions(+), 86 deletions(-) diff --git a/src/mame/drivers/namcos22.c b/src/mame/drivers/namcos22.c index e4d4ed26173..da0efa442c4 100644 --- a/src/mame/drivers/namcos22.c +++ b/src/mame/drivers/namcos22.c @@ -1558,7 +1558,7 @@ WRITE32_MEMBER(namcos22_state::namcos22s_nvmem_w) READ32_MEMBER(namcos22_state::namcos22_dspram_r) { - return signed24(m_polygonram[offset]); // only d0-23 are connected + return m_polygonram[offset] | 0xff000000; // only d0-23 are connected } WRITE32_MEMBER(namcos22_state::namcos22_dspram_w) diff --git a/src/mame/video/namcos22.c b/src/mame/video/namcos22.c index fef27a3daa3..f2d17c99a88 100644 --- a/src/mame/video/namcos22.c +++ b/src/mame/video/namcos22.c @@ -1436,91 +1436,6 @@ void namcos22_state::draw_polygons(bitmap_rgb32 &bitmap) -/*********************************************************************************************/ - -WRITE32_MEMBER(namcos22_state::namcos22s_czram_w) -{ - int bank = nthword(m_czattr, 0xa/2) & 3; - UINT32 prev = (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1]; - UINT32 temp = prev; - COMBINE_DATA(&temp); - data = temp; - m_banked_czram[bank][offset * 2] = data >> 16; - m_banked_czram[bank][offset * 2 + 1] = data & 0xffff; - m_cz_was_written[bank] |= (prev ^ data); -} - -READ32_MEMBER(namcos22_state::namcos22s_czram_r) -{ - int bank = nthword(m_czattr, 0xa/2) & 3; - return (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1]; -} - -void namcos22_state::recalc_czram() -{ - for (int table = 0; table < 4; table++) - { - // as documented above, ss22 czram is 'just' a big compare table - // this is very slow when emulating, so let's recalculate it to a simpler lookup table - if (m_cz_was_written[table]) - { - int small_val = 0x2000; - int small_offset = 0; - int large_val = 0; - int large_offset = 0; - int prev = 0x2000; - - for (int i = 0; i < 0x100; i++) - { - int val = m_banked_czram[table][i]; - - // discard if larger than 1fff - if (val > 0x1fff) val = prev; - if (prev > 0x1fff) - { - prev = val; - continue; - } - - int start = prev; - int end = val; - if (start > end) - { - start = val; - end = prev; - } - prev = val; - - // fill range - for (int j = start; j < end; j++) - m_recalc_czram[table][j] = i; - - // remember largest/smallest for later - if (val < small_val) - { - small_val = val; - small_offset = i; - } - if (val > large_val) - { - large_val = val; - large_offset = i; - } - } - - // fill possible leftover ranges - for (int j = 0; j < small_val; j++) - m_recalc_czram[table][j] = small_offset; - for (int j = large_val; j < 0x2000; j++) - m_recalc_czram[table][j] = large_offset; - - m_cz_was_written[table] = 0; - } - } -} - - - /*********************************************************************************************/ void namcos22_state::draw_sprite_group(bitmap_rgb32 &bitmap, const rectangle &cliprect, const UINT32 *src, const UINT32 *attr, int num_sprites, int deltax, int deltay, int y_lowres) @@ -2137,6 +2052,88 @@ void namcos22_state::update_palette() } +WRITE32_MEMBER(namcos22_state::namcos22s_czram_w) +{ + int bank = nthword(m_czattr, 0xa/2) & 3; + UINT32 prev = (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1]; + UINT32 temp = prev; + COMBINE_DATA(&temp); + data = temp; + m_banked_czram[bank][offset * 2] = data >> 16; + m_banked_czram[bank][offset * 2 + 1] = data & 0xffff; + m_cz_was_written[bank] |= (prev ^ data); +} + +READ32_MEMBER(namcos22_state::namcos22s_czram_r) +{ + int bank = nthword(m_czattr, 0xa/2) & 3; + return (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1]; +} + +void namcos22_state::recalc_czram() +{ + for (int table = 0; table < 4; table++) + { + // as documented above, ss22 czram is 'just' a big compare table + // this is very slow when emulating, so let's recalculate it to a simpler lookup table + if (m_cz_was_written[table]) + { + int small_val = 0x2000; + int small_offset = 0; + int large_val = 0; + int large_offset = 0; + int prev = 0x2000; + + for (int i = 0; i < 0x100; i++) + { + int val = m_banked_czram[table][i]; + + // discard if larger than 1fff + if (val > 0x1fff) val = prev; + if (prev > 0x1fff) + { + prev = val; + continue; + } + + int start = prev; + int end = val; + if (start > end) + { + start = val; + end = prev; + } + prev = val; + + // fill range + for (int j = start; j < end; j++) + m_recalc_czram[table][j] = i; + + // remember largest/smallest for later + if (val < small_val) + { + small_val = val; + small_offset = i; + } + if (val > large_val) + { + large_val = val; + large_offset = i; + } + } + + // fill possible leftover ranges + for (int j = 0; j < small_val; j++) + m_recalc_czram[table][j] = small_offset; + for (int j = large_val; j < 0x2000; j++) + m_recalc_czram[table][j] = large_offset; + + m_cz_was_written[table] = 0; + } + } +} + + void namcos22_state::update_mixer() { int i; @@ -2268,6 +2265,9 @@ void namcos22_state::update_mixer() } + +/*********************************************************************************************/ + UINT32 namcos22_state::screen_update_namcos22s(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { update_mixer();