should bring ribbit back to where it was.

This commit is contained in:
davidhay 2008-10-11 13:11:18 +00:00
parent 6c9daddd3c
commit 20c0ca98f3
2 changed files with 43 additions and 31 deletions

View File

@ -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;

View File

@ -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;