diff options
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 |
commit | db658231bba8ae6221d24581a5638e9318c1490f (patch) | |
tree | 590c3cda9bb3dd4cedf3095b393a43140381b88b | |
parent | a246b83834d033dbd6df0d413fed907b02774241 (diff) |
cave graphics fix (nw)
-rw-r--r-- | src/mame/drivers/cave.cpp | 20 | ||||
-rw-r--r-- | src/mame/includes/cave.h | 1 |
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); |