summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author davidhay <davidhay@localhost>2008-10-11 13:11:18 +0000
committer davidhay <davidhay@localhost>2008-10-11 13:11:18 +0000
commit20c0ca98f34ffd52e82f48270b7a2840d20e9120 (patch)
treeb5a59b7c95a8cf7ae6fca988d1a3516c1cde2553 /src
parent6c9daddd3c44c17864115b2ba6c8f383179745be (diff)
should bring ribbit back to where it was.
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/megadriv.c28
-rw-r--r--src/mame/drivers/segac2.c46
2 files changed, 43 insertions, 31 deletions
diff --git a/src/mame/drivers/megadriv.c b/src/mame/drivers/megadriv.c
index 53d90665388..881a36d5ed0 100644
--- a/src/mame/drivers/megadriv.c
+++ b/src/mame/drivers/megadriv.c
@@ -72,6 +72,9 @@ static int megadrive_vblank_flag = 0;
static int megadrive_irq6_pending = 0;
static int megadrive_irq4_pending = 0;
+int segac2_bg_pal_lookup[4] = { 0x00, 0x10, 0x20, 0x30 };
+int segac2_sp_pal_lookup[4] = { 0x00, 0x10, 0x20, 0x30 };
+
// hacks for C2
int genvdp_use_cram = 1; // c2 uses it's own palette ram
int genesis_has_z80 = 1; // c2 doesn't have a z80..
@@ -3015,6 +3018,17 @@ VIDEO_START(megadriv)
memset(megadrive_vdp_palette_lookup_shadow,0x00,0x40*2);
memset(megadrive_vdp_palette_lookup_highlight,0x00,0x40*2);
+
+ /* no special lookups */
+ segac2_bg_pal_lookup[0] = 0x00;
+ segac2_bg_pal_lookup[1] = 0x10;
+ segac2_bg_pal_lookup[2] = 0x20;
+ segac2_bg_pal_lookup[3] = 0x30;
+
+ segac2_sp_pal_lookup[0] = 0x00;
+ segac2_sp_pal_lookup[1] = 0x10;
+ segac2_sp_pal_lookup[2] = 0x20;
+ segac2_sp_pal_lookup[3] = 0x30;
}
VIDEO_UPDATE(megadriv)
@@ -4306,9 +4320,9 @@ static void genesis_render_videobuffer_to_screenbuffer(running_machine *machine,
UINT32 dat;
dat = video_renderline[x];
if (dat&0x10000)
- lineptr[x] = megadrive_vdp_palette_lookup_sprite[dat&0x3f];
+ lineptr[x] = megadrive_vdp_palette_lookup_sprite[(dat&0x0f) | segac2_sp_pal_lookup[(dat&0x30)>>4]];
else
- lineptr[x] = megadrive_vdp_palette_lookup[dat&0x3f];
+ lineptr[x] = megadrive_vdp_palette_lookup[(dat&0x0f) | segac2_bg_pal_lookup[(dat&0x30)>>4]];
}
}
else
@@ -4328,31 +4342,29 @@ static void genesis_render_videobuffer_to_screenbuffer(running_machine *machine,
case 0x10000: // (sprite) low priority, no shadow sprite, no highlight = shadow
case 0x12000: // (sprite) low priority, shadow sprite, no highlight = shadow
case 0x16000: // (sprite) normal pri, shadow sprite, no highlight = shadow?
- lineptr[x] = megadrive_vdp_palette_lookup_shadow[dat&0x3f];
+ lineptr[x] = megadrive_vdp_palette_lookup_shadow[(dat&0x0f) | segac2_bg_pal_lookup[(dat&0x30)>>4]];
break;
case 0x4000: // normal pri, no shadow sprite, no highlight = normal;
case 0x8000: // low pri, highlight sprite = normal;
- lineptr[x] = megadrive_vdp_palette_lookup[dat&0x3f];
+ lineptr[x] = megadrive_vdp_palette_lookup[(dat&0x0f) | segac2_bg_pal_lookup[(dat&0x30)>>4]];
break;
case 0x14000: // (sprite) normal pri, no shadow sprite, no highlight = normal;
case 0x18000: // (sprite) low pri, highlight sprite = normal;
- lineptr[x] = megadrive_vdp_palette_lookup_sprite[dat&0x3f];
+ lineptr[x] = megadrive_vdp_palette_lookup_sprite[(dat&0x0f) | segac2_sp_pal_lookup[(dat&0x30)>>4]];
break;
case 0x0c000: // normal pri, highlight set = highlight?
case 0x1c000: // (sprite) normal pri, highlight set = highlight?
- lineptr[x] = megadrive_vdp_palette_lookup_highlight[dat&0x3f];
+ lineptr[x] = megadrive_vdp_palette_lookup_highlight[(dat&0x0f) | segac2_bg_pal_lookup[(dat&0x30)>>4]];
break;
case 0x0a000: // shadow set, highlight set - not possible
case 0x0e000: // shadow set, highlight set, normal set, not possible
case 0x1a000: // (sprite)shadow set, highlight set - not possible
case 0x1e000: // (sprite)shadow set, highlight set, normal set, not possible
- lineptr[x] = megadrive_vdp_palette_lookup_highlight[mame_rand(machine)&0x3f];
-
default:
lineptr[x] = mame_rand(Machine)&0x3f;
break;
diff --git a/src/mame/drivers/segac2.c b/src/mame/drivers/segac2.c
index e43053b1bb8..548785cbd0c 100644
--- a/src/mame/drivers/segac2.c
+++ b/src/mame/drivers/segac2.c
@@ -100,7 +100,7 @@ static UINT8 prot_write_buf; /* remembers what was written */
static UINT8 prot_read_buf; /* remembers what was returned */
/* palette-related variables */
-static UINT8 alt_palette_mode;
+UINT8 segac2_alt_palette_mode;
static UINT8 palbank;
static UINT8 bg_palbase;
static UINT8 sp_palbase;
@@ -145,7 +145,7 @@ static MACHINE_RESET( segac2 )
/* reset the protection */
prot_write_buf = 0;
prot_read_buf = 0;
- alt_palette_mode = 0;
+ segac2_alt_palette_mode = 0;
palbank = 0;
bg_palbase = 0;
@@ -242,7 +242,7 @@ static WRITE16_HANDLER( segac2_upd7759_w )
static READ16_HANDLER( palette_r )
{
offset &= 0x1ff;
- if (alt_palette_mode)
+ if (segac2_alt_palette_mode)
offset = ((offset << 1) & 0x100) | ((offset << 2) & 0x80) | ((~offset >> 2) & 0x40) | ((offset >> 1) & 0x20) | (offset & 0x1f);
return paletteram16[offset + palbank * 0x200];
}
@@ -253,10 +253,10 @@ extern UINT16* megadrive_vdp_palette_lookup_shadow;
extern UINT16* megadrive_vdp_palette_lookup_highlight;
-UINT16 megadrive_vdp_palette_lookup_segac2[0x800];
-UINT16 megadrive_vdp_palette_lookup_sprite_segac2[0x800];
-UINT16 megadrive_vdp_palette_lookup_shadow_segac2[0x800];
-UINT16 megadrive_vdp_palette_lookup_highlight_segac2[0x800];
+UINT16* megadrive_vdp_palette_lookup_segac2;
+UINT16* megadrive_vdp_palette_lookup_sprite_segac2;
+UINT16* megadrive_vdp_palette_lookup_shadow_segac2;
+UINT16* megadrive_vdp_palette_lookup_highlight_segac2;
/* handle writes to the paletteram */
@@ -267,7 +267,7 @@ static WRITE16_HANDLER( palette_w )
/* adjust for the palette bank */
offset &= 0x1ff;
- if (alt_palette_mode)
+ if (segac2_alt_palette_mode)
offset = ((offset << 1) & 0x100) | ((offset << 2) & 0x80) | ((~offset >> 2) & 0x40) | ((offset >> 1) & 0x20) | (offset & 0x1f);
offset += palbank * 0x200;
@@ -326,36 +326,30 @@ static WRITE16_HANDLER( palette_w )
******************************************************************************/
+extern int segac2_bg_pal_lookup[4];
+extern int segac2_sp_pal_lookup[4];
+
static void recompute_palette_tables(void)
{
int i;
- int genesis_bg_pal_lookup[4];
- int genesis_sp_pal_lookup[4];
-
for (i = 0; i < 4; i++)
{
int bgpal = 0x000 + bg_palbase * 0x40 + i * 0x10;
int sppal = 0x100 + sp_palbase * 0x40 + i * 0x10;
- if (!alt_palette_mode)
+ if (!segac2_alt_palette_mode)
{
- genesis_bg_pal_lookup[i] = bgpal;
- genesis_sp_pal_lookup[i] = sppal;
+ segac2_bg_pal_lookup[i] = 0x200 * palbank + bgpal;
+ segac2_sp_pal_lookup[i] = 0x200 * palbank + sppal;
}
else
{
- genesis_bg_pal_lookup[i] = ((bgpal << 1) & 0x180) + ((~bgpal >> 2) & 0x40) + (bgpal & 0x30);
- genesis_sp_pal_lookup[i] = ((~sppal << 2) & 0x100) + ((sppal << 2) & 0x80) + ((~sppal >> 2) & 0x40) + ((sppal >> 2) & 0x20) + (sppal & 0x10);
+ segac2_bg_pal_lookup[i] = 0x200 * palbank + ((bgpal << 1) & 0x180) + ((~bgpal >> 2) & 0x40) + (bgpal & 0x30);
+ segac2_sp_pal_lookup[i] = 0x200 * palbank + ((~sppal << 2) & 0x100) + ((sppal << 2) & 0x80) + ((~sppal >> 2) & 0x40) + ((sppal >> 2) & 0x20) + (sppal & 0x10);
}
}
- megadrive_vdp_palette_lookup = &megadrive_vdp_palette_lookup_segac2[palbank * 0x200 + bg_palbase * 0x40];
- megadrive_vdp_palette_lookup_sprite = &megadrive_vdp_palette_lookup_sprite_segac2[palbank * 0x200 + 0x100+sp_palbase * 0x40];
- megadrive_vdp_palette_lookup_shadow = &megadrive_vdp_palette_lookup_shadow_segac2[palbank * 0x200 + bg_palbase * 0x40];
- megadrive_vdp_palette_lookup_highlight = &megadrive_vdp_palette_lookup_highlight_segac2[palbank * 0x200 + bg_palbase * 0x40];
-
-
}
@@ -522,7 +516,7 @@ static WRITE16_HANDLER( control_w )
prot_write_buf = prot_read_buf = 0;
/* bit 2 controls palette shuffling; only ribbit and twinsqua use this feature */
- alt_palette_mode = ((~data & 4) >> 2);
+ segac2_alt_palette_mode = ((~data & 4) >> 2);
recompute_palette_tables();
}
@@ -1390,6 +1384,12 @@ VIDEO_START(segac2_new)
{
VIDEO_START_CALL(megadriv);
+
+ megadrive_vdp_palette_lookup_segac2 = auto_malloc(0x1000);
+ megadrive_vdp_palette_lookup_sprite_segac2 = auto_malloc(0x1000);
+ megadrive_vdp_palette_lookup_shadow_segac2 = auto_malloc(0x1000);
+ megadrive_vdp_palette_lookup_highlight_segac2 = auto_malloc(0x1000);
+
megadrive_vdp_palette_lookup = megadrive_vdp_palette_lookup_segac2;
megadrive_vdp_palette_lookup_sprite = megadrive_vdp_palette_lookup_sprite_segac2;
megadrive_vdp_palette_lookup_shadow = megadrive_vdp_palette_lookup_shadow_segac2;