summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author davidhay <davidhay@localhost>2008-07-06 18:16:43 +0000
committer davidhay <davidhay@localhost>2008-07-06 18:16:43 +0000
commit1017268cf335029b8f274e036eeb454a9ada3763 (patch)
tree60909ab232dd25ad6da667a535f0377794242566 /src
parent122003dad86cf01a2b983bc3cdec42465549d446 (diff)
improved sprite rendering on gaia crusaders (animate at 60fps now, not 30)
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/cave.c27
-rw-r--r--src/mame/video/cave.c27
2 files changed, 38 insertions, 16 deletions
diff --git a/src/mame/drivers/cave.c b/src/mame/drivers/cave.c
index e1e4654be94..15f9b0dd822 100644
--- a/src/mame/drivers/cave.c
+++ b/src/mame/drivers/cave.c
@@ -78,6 +78,8 @@ Versions known to exist but not dumped:
#include "sound/okim6295.h"
#include "sound/ymz280b.h"
+extern UINT16 *cave_spriteram16_2;
+
/***************************************************************************
@@ -93,6 +95,7 @@ static UINT8 sound_irq;
static UINT8 unknown_irq;
static UINT8 agallet_vblank_irq;
+
/* Update the IRQ state based on all possible causes */
static void update_irq_state(running_machine *machine)
{
@@ -504,7 +507,7 @@ static ADDRESS_MAP_START( dfeveron_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x100000, 0x10ffff) AM_WRITE(SMH_RAM ) // RAM
AM_RANGE(0x300000, 0x300003) AM_WRITE(cave_sound_w ) // YMZ280
AM_RANGE(0x400000, 0x407fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
AM_RANGE(0x500000, 0x507fff) AM_WRITE(cave_vram_0_w) AM_BASE(&cave_vram_0 ) // Layer 0
AM_RANGE(0x600000, 0x607fff) AM_WRITE(cave_vram_1_w) AM_BASE(&cave_vram_1 ) // Layer 1
AM_RANGE(0x708000, 0x708fff) AM_WRITE(SMH_RAM) AM_BASE(&paletteram16) AM_SIZE(&cave_paletteram_size) // Palette
@@ -543,7 +546,7 @@ static ADDRESS_MAP_START( ddonpach_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x100000, 0x10ffff) AM_WRITE(SMH_RAM ) // RAM
AM_RANGE(0x300000, 0x300003) AM_WRITE(cave_sound_w ) // YMZ280
AM_RANGE(0x400000, 0x407fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
AM_RANGE(0x500000, 0x507fff) AM_WRITE(cave_vram_0_w) AM_BASE(&cave_vram_0 ) // Layer 0
AM_RANGE(0x600000, 0x607fff) AM_WRITE(cave_vram_1_w) AM_BASE(&cave_vram_1 ) // Layer 1
AM_RANGE(0x700000, 0x70ffff) AM_WRITE(cave_vram_2_8x8_w) AM_BASE(&cave_vram_2 ) // Layer 2
@@ -611,7 +614,7 @@ static ADDRESS_MAP_START( donpachi_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x300000, 0x307fff) AM_WRITE(cave_vram_0_w) AM_BASE(&cave_vram_0 ) // Layer 0
AM_RANGE(0x400000, 0x407fff) AM_WRITE(cave_vram_2_8x8_w) AM_BASE(&cave_vram_2 ) // Layer 2
AM_RANGE(0x500000, 0x507fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0x508000, 0x50ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0x508000, 0x50ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
AM_RANGE(0x600000, 0x600005) AM_WRITE(SMH_RAM) AM_BASE(&cave_vctrl_1 ) // Layer 1 Control
AM_RANGE(0x700000, 0x700005) AM_WRITE(SMH_RAM) AM_BASE(&cave_vctrl_0 ) // Layer 0 Control
AM_RANGE(0x800000, 0x800005) AM_WRITE(SMH_RAM) AM_BASE(&cave_vctrl_2 ) // Layer 2 Control
@@ -651,7 +654,7 @@ static ADDRESS_MAP_START( esprade_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x100000, 0x10ffff) AM_WRITE(SMH_RAM ) // RAM
AM_RANGE(0x300000, 0x300003) AM_WRITE(cave_sound_w ) // YMZ280
AM_RANGE(0x400000, 0x407fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2) // Sprites?
AM_RANGE(0x500000, 0x507fff) AM_WRITE(cave_vram_0_w) AM_BASE(&cave_vram_0 ) // Layer 0
AM_RANGE(0x600000, 0x607fff) AM_WRITE(cave_vram_1_w) AM_BASE(&cave_vram_1 ) // Layer 1
AM_RANGE(0x700000, 0x707fff) AM_WRITE(cave_vram_2_w) AM_BASE(&cave_vram_2 ) // Layer 2
@@ -695,7 +698,7 @@ static ADDRESS_MAP_START( gaia_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x100000, 0x10ffff) AM_WRITE(SMH_RAM ) // RAM
AM_RANGE(0x300000, 0x300003) AM_WRITE(cave_sound_w ) // YMZ280
AM_RANGE(0x400000, 0x407fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprite bank 1
- AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM ) // Sprite bank 2
+ AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2) // Sprite bank 2
AM_RANGE(0x500000, 0x507fff) AM_WRITE(cave_vram_0_w) AM_BASE(&cave_vram_0 ) // Layer 0
AM_RANGE(0x508000, 0x50ffff) AM_WRITE(SMH_RAM ) // More Layer 0, Tested but not used?
AM_RANGE(0x600000, 0x607fff) AM_WRITE(cave_vram_1_w) AM_BASE(&cave_vram_1 ) // Layer 1
@@ -739,7 +742,7 @@ static ADDRESS_MAP_START( guwange_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x200000, 0x20ffff) AM_WRITE(SMH_RAM ) // RAM
AM_RANGE(0x300000, 0x30007f) AM_WRITE(SMH_RAM) AM_BASE(&cave_videoregs ) // Video Regs
AM_RANGE(0x400000, 0x407fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
AM_RANGE(0x500000, 0x507fff) AM_WRITE(cave_vram_0_w) AM_BASE(&cave_vram_0 ) // Layer 0
AM_RANGE(0x600000, 0x607fff) AM_WRITE(cave_vram_1_w) AM_BASE(&cave_vram_1 ) // Layer 1
AM_RANGE(0x700000, 0x707fff) AM_WRITE(cave_vram_2_w) AM_BASE(&cave_vram_2 ) // Layer 2
@@ -791,7 +794,7 @@ static ADDRESS_MAP_START( hotdogst_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0xd00000, 0xd00001) AM_WRITE(hotdogst_eeprom_msb_w ) // EEPROM
AM_RANGE(0xd00002, 0xd00003) AM_WRITE(SMH_NOP ) // ???
AM_RANGE(0xf00000, 0xf07fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0xf08000, 0xf0ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0xf08000, 0xf0ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
ADDRESS_MAP_END
@@ -915,7 +918,7 @@ static ADDRESS_MAP_START( mazinger_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x000000, 0x07ffff) AM_WRITE(SMH_ROM ) // ROM
AM_RANGE(0x100000, 0x10ffff) AM_WRITE(SMH_RAM ) // RAM
AM_RANGE(0x200000, 0x207fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0x208000, 0x20ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0x208000, 0x20ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
AM_RANGE(0x300068, 0x300069) AM_WRITE(watchdog_reset16_w ) // Watchdog
AM_RANGE(0x30006e, 0x30006f) AM_WRITE(sound_cmd_w ) // To Sound CPU
AM_RANGE(0x300000, 0x30007f) AM_WRITE(SMH_RAM) AM_BASE(&cave_videoregs ) // Video Regs
@@ -977,7 +980,7 @@ static ADDRESS_MAP_START( metmqstr_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0xc00000, 0xc00005) AM_WRITE(SMH_RAM) AM_BASE(&cave_vctrl_0 ) // Layer 0 Control
AM_RANGE(0xd00000, 0xd00001) AM_WRITE(metmqstr_eeprom_msb_w ) // EEPROM
AM_RANGE(0xf00000, 0xf07fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0xf08000, 0xf0ffff) AM_WRITE(SMH_RAM ) // RAM
+ AM_RANGE(0xf08000, 0xf0ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
ADDRESS_MAP_END
@@ -1042,7 +1045,7 @@ static ADDRESS_MAP_START( pwrinst2_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x900000, 0x907fff) AM_WRITE(cave_vram_1_w) AM_BASE(&cave_vram_1 ) // Layer 1
AM_RANGE(0x980000, 0x987fff) AM_WRITE(cave_vram_3_8x8_w) AM_BASE(&cave_vram_3 ) // Layer 3
AM_RANGE(0xa00000, 0xa07fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0xa08000, 0xa0ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0xa08000, 0xa0ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
AM_RANGE(0xa10000, 0xa1ffff) AM_WRITE(SMH_RAM ) // Sprites?
AM_RANGE(0xa80000, 0xa8007f) AM_WRITE(SMH_RAM) AM_BASE(&cave_videoregs ) // Video Regs
AM_RANGE(0xb00000, 0xb00005) AM_WRITE(pwrinst2_vctrl_2_w) AM_BASE(&cave_vctrl_2 ) // Layer 2 Control
@@ -1114,7 +1117,7 @@ static ADDRESS_MAP_START( sailormn_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x40c000, 0x40ffff) AM_WRITE(SMH_RAM ) // (agallet)
AM_RANGE(0x410000, 0x410001) AM_WRITE(SMH_RAM ) // (agallet)
AM_RANGE(0x500000, 0x507fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0x508000, 0x50ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0x508000, 0x50ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
AM_RANGE(0x510000, 0x510001) AM_WRITE(SMH_RAM ) // (agallet)
AM_RANGE(0x700000, 0x700001) AM_WRITE(sailormn_eeprom_msb_w ) // EEPROM
AM_RANGE(0x800000, 0x807fff) AM_WRITE(cave_vram_0_w) AM_BASE(&cave_vram_0 ) // Layer 0
@@ -1152,7 +1155,7 @@ static ADDRESS_MAP_START( uopoko_writemem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x100000, 0x10ffff) AM_WRITE(SMH_RAM ) // RAM
AM_RANGE(0x300000, 0x300003) AM_WRITE(cave_sound_w ) // YMZ280
AM_RANGE(0x400000, 0x407fff) AM_WRITE(SMH_RAM) AM_BASE(&spriteram16) AM_SIZE(&spriteram_size ) // Sprites
- AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM ) // Sprites?
+ AM_RANGE(0x408000, 0x40ffff) AM_WRITE(SMH_RAM) AM_BASE(&cave_spriteram16_2)
AM_RANGE(0x500000, 0x507fff) AM_WRITE(cave_vram_0_w) AM_BASE(&cave_vram_0 ) // Layer 0
AM_RANGE(0x600000, 0x60007f) AM_WRITE(SMH_RAM) AM_BASE(&cave_videoregs ) // Video Regs
AM_RANGE(0x700000, 0x700005) AM_WRITE(SMH_RAM) AM_BASE(&cave_vctrl_0 ) // Layer 0 Control
diff --git a/src/mame/video/cave.c b/src/mame/video/cave.c
index 9caa68facd5..8c4524cfd39 100644
--- a/src/mame/video/cave.c
+++ b/src/mame/video/cave.c
@@ -58,8 +58,10 @@ UINT16 *cave_vram_0, *cave_vctrl_0;
UINT16 *cave_vram_1, *cave_vctrl_1;
UINT16 *cave_vram_2, *cave_vctrl_2;
UINT16 *cave_vram_3, *cave_vctrl_3;
+UINT16 *cave_spriteram16_2;
size_t cave_paletteram_size;
+
/* Variables only used here: */
static tilemap *tilemap_0;
@@ -564,8 +566,10 @@ static void get_sprite_info_cave(running_machine *machine)
const UINT8 *base_gfx = memory_region(machine, region);
int code_max = memory_region_length(machine, region) / (16*16);
- UINT16 *source = spriteram16 + ((spriteram_size/2) / 2) * spriteram_bank;
- UINT16 *finish = source + ((spriteram_size/2) / 2);
+
+
+ UINT16 *source;
+ UINT16 *finish;
struct sprite_cave *sprite = sprite_cave;
@@ -575,6 +579,14 @@ static void get_sprite_info_cave(running_machine *machine)
int max_x = video_screen_get_width(machine->primary_screen);
int max_y = video_screen_get_height(machine->primary_screen);
+ source = spriteram16 + ((spriteram_size/2) / 2) * spriteram_bank;
+
+ if (cave_videoregs[ 4 ] & 0x02)
+ if (cave_spriteram16_2) source = cave_spriteram16_2 + ((spriteram_size/2) / 2) * spriteram_bank;
+
+ finish = source + ((spriteram_size/2) / 2);
+
+
for (; source < finish; source+=8 )
{
int x,y,attr,code,zoomx,zoomy,size,flipx,flipy;
@@ -685,8 +697,8 @@ static void get_sprite_info_donpachi(running_machine *machine)
const UINT8 *base_gfx = memory_region(machine, region);
int code_max = memory_region_length(machine, region) / (16*16);
- UINT16 *source = spriteram16 + ((spriteram_size/2) / 2) * spriteram_bank;
- UINT16 *finish = source + ((spriteram_size/2) / 2);
+ UINT16 *source;
+ UINT16 *finish;
struct sprite_cave *sprite = sprite_cave;
@@ -696,6 +708,13 @@ static void get_sprite_info_donpachi(running_machine *machine)
int max_x = video_screen_get_width(machine->primary_screen);
int max_y = video_screen_get_height(machine->primary_screen);
+ source = spriteram16 + ((spriteram_size/2) / 2) * spriteram_bank;
+
+ if (cave_videoregs[ 4 ] & 0x02)
+ if (cave_spriteram16_2) source = cave_spriteram16_2 + ((spriteram_size/2) / 2) * spriteram_bank;
+
+ finish = source + ((spriteram_size/2) / 2);
+
for (; source < finish; source+=8 )
{
int x,y,attr,code,size,flipx,flipy;