summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2018-02-24 21:09:24 +0100
committer Olivier Galibert <galibert@pobox.com>2018-02-24 21:09:39 +0100
commitdb658231bba8ae6221d24581a5638e9318c1490f (patch)
tree590c3cda9bb3dd4cedf3095b393a43140381b88b
parenta246b83834d033dbd6df0d413fed907b02774241 (diff)
cave graphics fix (nw)
-rw-r--r--src/mame/drivers/cave.cpp20
-rw-r--r--src/mame/includes/cave.h1
2 files changed, 19 insertions, 2 deletions
diff --git a/src/mame/drivers/cave.cpp b/src/mame/drivers/cave.cpp
index b8f3a0e0536..3df9d155d4f 100644
--- a/src/mame/drivers/cave.cpp
+++ b/src/mame/drivers/cave.cpp
@@ -2947,6 +2947,22 @@ void cave_state::unpack_sprites(int chip)
}
+/* 4 bits -> 8 bits. Even and odd pixels are not swapped */
+void cave_state::ddp_unpack_sprites(int chip)
+{
+ const uint32_t len = m_spriteregion[chip]->bytes();
+ uint8_t *rgn = m_spriteregion[chip]->base();
+ uint8_t *src = rgn + len / 2 - 1;
+ uint8_t *dst = rgn + len - 1;
+
+ while(dst > src)
+ {
+ uint8_t data = *src--;
+ *dst-- = data & 0xf; *dst-- = data >> 4;
+ }
+}
+
+
/* 2 pages of 4 bits -> 8 bits */
void cave_state::esprade_unpack_sprites(int chip)
{
@@ -5155,7 +5171,7 @@ DRIVER_INIT_MEMBER(cave_state,ddonpach)
{
init_cave();
- unpack_sprites(0);
+ ddp_unpack_sprites(0);
m_spritetype[0] = 1; // "different" sprites (no zooming?)
m_time_vblank_irq = 90;
}
@@ -5164,7 +5180,7 @@ DRIVER_INIT_MEMBER(cave_state,donpachi)
{
init_cave();
- unpack_sprites(0);
+ ddp_unpack_sprites(0);
m_spritetype[0] = 1; // "different" sprites (no zooming?)
m_time_vblank_irq = 90;
}
diff --git a/src/mame/includes/cave.h b/src/mame/includes/cave.h
index 55925834755..629e67ea3e7 100644
--- a/src/mame/includes/cave.h
+++ b/src/mame/includes/cave.h
@@ -258,6 +258,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(sound_irq_gen);
void update_irq_state();
void unpack_sprites(int chip);
+ void ddp_unpack_sprites(int chip);
void esprade_unpack_sprites(int chip);
void sailormn_unpack_tiles(int chip);