mirror of
https://github.com/holub/mame
synced 2025-05-19 03:59:35 +03:00
Fixed 00865: blandia: In Jurane stage, the whole bottom of the screen is filled with solid gray [Pierpaolo Prazzoli]
This commit is contained in:
parent
7a261e4514
commit
d2ff1f0c52
@ -80,7 +80,7 @@ PO-122-A (SZR-001) 95 Zombie Raid American Sammy
|
|||||||
doesn't behave *exactly* the same as the original seta hw
|
doesn't behave *exactly* the same as the original seta hw
|
||||||
(6) To enter test mode press 9 (open door), then F2 (turn function key), then E (bet 3-4).
|
(6) To enter test mode press 9 (open door), then F2 (turn function key), then E (bet 3-4).
|
||||||
(7) Bad tilemaps colors in demo mode are real game bug. Fade-in and fade-out "bad" colors are also right.
|
(7) Bad tilemaps colors in demo mode are real game bug. Fade-in and fade-out "bad" colors are also right.
|
||||||
Bad sprites priorities are real game bugs.
|
Bad sprites priorities are real game bugs. The bad-looking colors in Jurane stage are right.
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
- The NEC D4701 used by Caliber 50 is a mouse interface IC (uPD4701c).
|
- The NEC D4701 used by Caliber 50 is a mouse interface IC (uPD4701c).
|
||||||
@ -1812,7 +1812,7 @@ static ADDRESS_MAP_START( blandia_map, ADDRESS_SPACE_PROGRAM, 16 )
|
|||||||
AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r) // DSW
|
AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r) // DSW
|
||||||
AM_RANGE(0x700000, 0x7003ff) AM_RAM // (rezon,jjsquawk)
|
AM_RANGE(0x700000, 0x7003ff) AM_RAM // (rezon,jjsquawk)
|
||||||
AM_RANGE(0x700400, 0x700fff) AM_RAM AM_BASE_SIZE_MEMBER(seta_state, paletteram, paletteram_size) // Palette
|
AM_RANGE(0x700400, 0x700fff) AM_RAM AM_BASE_SIZE_MEMBER(seta_state, paletteram, paletteram_size) // Palette
|
||||||
AM_RANGE(0x703c00, 0x7047ff) AM_RAM // 2nd palette (?), written in the stage with the tilemap blending (?) effect, or just mirror
|
AM_RANGE(0x703c00, 0x7047ff) AM_RAM AM_BASE_SIZE_MEMBER(seta_state, paletteram2, paletteram2_size) // 2nd Palette for the palette offset effect
|
||||||
/**/AM_RANGE(0x800000, 0x800607) AM_RAM AM_BASE_MEMBER(seta_state, spriteram) // Sprites Y
|
/**/AM_RANGE(0x800000, 0x800607) AM_RAM AM_BASE_MEMBER(seta_state, spriteram) // Sprites Y
|
||||||
AM_RANGE(0x880000, 0x880001) AM_RAM // ? 0xc000
|
AM_RANGE(0x880000, 0x880001) AM_RAM // ? 0xc000
|
||||||
AM_RANGE(0x900000, 0x903fff) AM_RAM AM_BASE_MEMBER(seta_state, spriteram2) // Sprites Code + X + Attr
|
AM_RANGE(0x900000, 0x903fff) AM_RAM AM_BASE_MEMBER(seta_state, spriteram2) // Sprites Code + X + Attr
|
||||||
@ -1846,7 +1846,7 @@ static ADDRESS_MAP_START( blandiap_map, ADDRESS_SPACE_PROGRAM, 16 )
|
|||||||
AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r) // DSW
|
AM_RANGE(0x600000, 0x600003) AM_READ(seta_dsw_r) // DSW
|
||||||
AM_RANGE(0x700000, 0x7003ff) AM_RAM // (rezon,jjsquawk)
|
AM_RANGE(0x700000, 0x7003ff) AM_RAM // (rezon,jjsquawk)
|
||||||
AM_RANGE(0x700400, 0x700fff) AM_RAM AM_BASE_SIZE_MEMBER(seta_state, paletteram, paletteram_size) // Palette
|
AM_RANGE(0x700400, 0x700fff) AM_RAM AM_BASE_SIZE_MEMBER(seta_state, paletteram, paletteram_size) // Palette
|
||||||
AM_RANGE(0x703c00, 0x7047ff) AM_RAM // 2nd palette (?), written in the stage with the tilemap blending (?) effect, or just mirror
|
AM_RANGE(0x703c00, 0x7047ff) AM_RAM AM_BASE_SIZE_MEMBER(seta_state, paletteram2, paletteram2_size) // 2nd Palette for the palette offset effect
|
||||||
AM_RANGE(0x800000, 0x803fff) AM_RAM_WRITE(seta_vram_0_w) AM_BASE_MEMBER(seta_state, vram_0) // VRAM 0&1
|
AM_RANGE(0x800000, 0x803fff) AM_RAM_WRITE(seta_vram_0_w) AM_BASE_MEMBER(seta_state, vram_0) // VRAM 0&1
|
||||||
AM_RANGE(0x804000, 0x80ffff) AM_RAM // (jjsquawk)
|
AM_RANGE(0x804000, 0x80ffff) AM_RAM // (jjsquawk)
|
||||||
AM_RANGE(0x880000, 0x883fff) AM_RAM_WRITE(seta_vram_2_w) AM_BASE_MEMBER(seta_state, vram_2) // VRAM 2&3
|
AM_RANGE(0x880000, 0x883fff) AM_RAM_WRITE(seta_vram_2_w) AM_BASE_MEMBER(seta_state, vram_2) // VRAM 2&3
|
||||||
@ -7193,7 +7193,7 @@ static MACHINE_CONFIG_START( blandia, seta_state )
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1)
|
MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1)
|
||||||
|
|
||||||
MCFG_GFXDECODE(blandia)
|
MCFG_GFXDECODE(blandia)
|
||||||
MCFG_PALETTE_LENGTH(16*32+64*32*4) /* sprites, layer1, layer2 */
|
MCFG_PALETTE_LENGTH((16*32+64*32*4)*2) /* sprites, layer1, layer2, palette effect */
|
||||||
|
|
||||||
MCFG_PALETTE_INIT(blandia) /* layers 1&2 are 6 planes deep */
|
MCFG_PALETTE_INIT(blandia) /* layers 1&2 are 6 planes deep */
|
||||||
MCFG_VIDEO_START(seta_2_layers)
|
MCFG_VIDEO_START(seta_2_layers)
|
||||||
@ -7225,7 +7225,7 @@ static MACHINE_CONFIG_START( blandiap, seta_state )
|
|||||||
MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1)
|
MCFG_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 1*8, 31*8-1)
|
||||||
|
|
||||||
MCFG_GFXDECODE(blandia)
|
MCFG_GFXDECODE(blandia)
|
||||||
MCFG_PALETTE_LENGTH(16*32+64*32*4) /* sprites, layer1, layer2 */
|
MCFG_PALETTE_LENGTH((16*32+64*32*4)*2) /* sprites, layer1, layer2, palette effect */
|
||||||
|
|
||||||
MCFG_PALETTE_INIT(blandia) /* layers 1&2 are 6 planes deep */
|
MCFG_PALETTE_INIT(blandia) /* layers 1&2 are 6 planes deep */
|
||||||
MCFG_VIDEO_START(seta_2_layers)
|
MCFG_VIDEO_START(seta_2_layers)
|
||||||
|
@ -41,6 +41,8 @@ public:
|
|||||||
UINT16 *spriteram2;
|
UINT16 *spriteram2;
|
||||||
UINT16 *paletteram;
|
UINT16 *paletteram;
|
||||||
size_t paletteram_size;
|
size_t paletteram_size;
|
||||||
|
UINT16 *paletteram2;
|
||||||
|
size_t paletteram2_size;
|
||||||
|
|
||||||
int tiles_offset;
|
int tiles_offset;
|
||||||
tilemap_t *tilemap_0;
|
tilemap_t *tilemap_0;
|
||||||
|
@ -565,9 +565,10 @@ PALETTE_INIT( blandia )
|
|||||||
int color, pen;
|
int color, pen;
|
||||||
|
|
||||||
/* allocate the colortable */
|
/* allocate the colortable */
|
||||||
machine->colortable = colortable_alloc(machine, 0x600);
|
machine->colortable = colortable_alloc(machine, 0x600*2);
|
||||||
|
|
||||||
for (color = 0; color < 0x20; color++)
|
for (color = 0; color < 0x20; color++)
|
||||||
|
{
|
||||||
for (pen = 0; pen < 0x40; pen++)
|
for (pen = 0; pen < 0x40; pen++)
|
||||||
{
|
{
|
||||||
// layer 2-3
|
// layer 2-3
|
||||||
@ -578,6 +579,14 @@ PALETTE_INIT( blandia )
|
|||||||
colortable_entry_set_value(machine->colortable, 0x0a00 + ((color << 6) | pen), 0x400 + ((color << 4) | (pen & 0x0f)));
|
colortable_entry_set_value(machine->colortable, 0x0a00 + ((color << 6) | pen), 0x400 + ((color << 4) | (pen & 0x0f)));
|
||||||
colortable_entry_set_value(machine->colortable, 0x1a00 + ((color << 6) | pen), 0x400 + pen);
|
colortable_entry_set_value(machine->colortable, 0x1a00 + ((color << 6) | pen), 0x400 + pen);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// setup the colortable for the effect palette.
|
||||||
|
// what are used for palette from 0x800 to 0xBFF?
|
||||||
|
for(int i = 0; i < 0x2200; i++)
|
||||||
|
{
|
||||||
|
colortable_entry_set_value(machine->colortable, 0x2200 + i, 0x600 + (i & 0x1ff));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -705,6 +714,21 @@ static void set_pens(running_machine *machine)
|
|||||||
else
|
else
|
||||||
palette_set_color(machine, i, color);
|
palette_set_color(machine, i, color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(state->paletteram2 != NULL)
|
||||||
|
{
|
||||||
|
for (i = 0; i < state->paletteram2_size / 2; i++)
|
||||||
|
{
|
||||||
|
UINT16 data = state->paletteram2[i];
|
||||||
|
|
||||||
|
rgb_t color = MAKE_RGB(pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0));
|
||||||
|
|
||||||
|
if (machine->colortable != NULL)
|
||||||
|
colortable_palette_set_color(machine->colortable, i + state->paletteram_size / 2, color);
|
||||||
|
else
|
||||||
|
palette_set_color(machine, i + state->paletteram_size / 2, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -737,7 +761,7 @@ static void usclssic_set_pens(running_machine *machine)
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
static void draw_sprites_map(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
|
static void draw_sprites_map(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||||
{
|
{
|
||||||
seta_state *state = machine->driver_data<seta_state>();
|
seta_state *state = machine->driver_data<seta_state>();
|
||||||
UINT16 *spriteram16 = state->spriteram;
|
UINT16 *spriteram16 = state->spriteram;
|
||||||
@ -842,7 +866,7 @@ twineagl: 000 027 00 0f (test mode)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectangle *cliprect)
|
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
|
||||||
{
|
{
|
||||||
seta_state *state = machine->driver_data<seta_state>();
|
seta_state *state = machine->driver_data<seta_state>();
|
||||||
UINT16 *spriteram16 = state->spriteram;
|
UINT16 *spriteram16 = state->spriteram;
|
||||||
@ -901,7 +925,51 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void draw_tilemap_palette_effect(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect, tilemap_t *tilemap, int scrollx, int scrolly, int gfxnum, int flipscreen)
|
||||||
|
{
|
||||||
|
int y;
|
||||||
|
const gfx_element *gfx_tilemap = machine->gfx[gfxnum];
|
||||||
|
const bitmap_t *src_bitmap = tilemap_get_pixmap(tilemap);
|
||||||
|
int width_mask, height_mask;
|
||||||
|
int opaque_mask = gfx_tilemap->color_granularity - 1;
|
||||||
|
int pixel_effect_mask = gfx_tilemap->color_base + (gfx_tilemap->total_colors - 1) * gfx_tilemap->color_granularity;
|
||||||
|
int p;
|
||||||
|
|
||||||
|
width_mask = src_bitmap->width - 1;
|
||||||
|
height_mask = src_bitmap->height - 1;
|
||||||
|
|
||||||
|
for (y = cliprect->min_y; y <= cliprect->max_y; y++)
|
||||||
|
{
|
||||||
|
UINT16 *dest = BITMAP_ADDR16(bitmap, y, 0);
|
||||||
|
|
||||||
|
int x;
|
||||||
|
for (x = cliprect->min_x; x <= cliprect->max_x; x++)
|
||||||
|
{
|
||||||
|
if(!flipscreen)
|
||||||
|
{
|
||||||
|
p = *BITMAP_ADDR16(src_bitmap, (y + scrolly) & height_mask, (x + scrollx) & width_mask);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
p = *BITMAP_ADDR16(src_bitmap, (y - scrolly - 256) & height_mask, (x - scrollx - 512) & width_mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw not transparent pixels
|
||||||
|
if(p & opaque_mask)
|
||||||
|
{
|
||||||
|
// pixels with the last color are not drawn and the 2nd palette is added to the current bitmap color
|
||||||
|
if((p & pixel_effect_mask) == pixel_effect_mask)
|
||||||
|
{
|
||||||
|
dest[x] = machine->total_colors() / 2 + dest[x];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dest[x] = machine->pens[p];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -928,7 +996,7 @@ static VIDEO_UPDATE( seta_layers )
|
|||||||
{
|
{
|
||||||
seta_state *state = screen->machine->driver_data<seta_state>();
|
seta_state *state = screen->machine->driver_data<seta_state>();
|
||||||
int layers_ctrl = -1;
|
int layers_ctrl = -1;
|
||||||
int enab_0, enab_1, x_0, x_1, y_0, y_1;
|
int enab_0, enab_1, x_0, x_1=0, y_0, y_1=0;
|
||||||
|
|
||||||
int order = 0;
|
int order = 0;
|
||||||
int flip = (state->spriteram[ 0x600/2 ] & 0x40) >> 6;
|
int flip = (state->spriteram[ 0x600/2 ] & 0x40) >> 6;
|
||||||
@ -936,7 +1004,6 @@ static VIDEO_UPDATE( seta_layers )
|
|||||||
const rectangle &visarea = screen->visible_area();
|
const rectangle &visarea = screen->visible_area();
|
||||||
int vis_dimy = visarea.max_y - visarea.min_y + 1;
|
int vis_dimy = visarea.max_y - visarea.min_y + 1;
|
||||||
|
|
||||||
|
|
||||||
// check tilemaps color modes
|
// check tilemaps color modes
|
||||||
|
|
||||||
if(state->current_tilemap_mode[0] != (state->vctrl_0[ 4/2 ] & 0x10))
|
if(state->current_tilemap_mode[0] != (state->vctrl_0[ 4/2 ] & 0x10))
|
||||||
@ -1043,13 +1110,25 @@ if (input_code_pressed(screen->machine, KEYCODE_Z))
|
|||||||
if (order & 2) // layer-sprite priority?
|
if (order & 2) // layer-sprite priority?
|
||||||
{
|
{
|
||||||
if (layers_ctrl & 8) draw_sprites(screen->machine,bitmap,cliprect);
|
if (layers_ctrl & 8) draw_sprites(screen->machine,bitmap,cliprect);
|
||||||
|
|
||||||
|
if(order & 4)
|
||||||
|
{
|
||||||
|
popmessage("Missing palette effect. Contact MAMETesters.");
|
||||||
|
}
|
||||||
|
|
||||||
if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_0, 0, 0);
|
if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_0, 0, 0);
|
||||||
if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_1, 0, 0);
|
if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_1, 0, 0);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if(order & 4)
|
||||||
|
{
|
||||||
|
popmessage("Missing palette effect. Contact MAMETesters.");
|
||||||
|
}
|
||||||
|
|
||||||
if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_0, 0, 0);
|
if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_0, 0, 0);
|
||||||
if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_1, 0, 0);
|
if (layers_ctrl & 1) tilemap_draw(bitmap, cliprect, state->tilemap_1, 0, 0);
|
||||||
|
|
||||||
if (layers_ctrl & 8) draw_sprites(screen->machine, bitmap,cliprect);
|
if (layers_ctrl & 8) draw_sprites(screen->machine, bitmap,cliprect);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1062,18 +1141,56 @@ if (input_code_pressed(screen->machine, KEYCODE_Z))
|
|||||||
{
|
{
|
||||||
if (layers_ctrl & 8) draw_sprites(screen->machine, bitmap,cliprect);
|
if (layers_ctrl & 8) draw_sprites(screen->machine, bitmap,cliprect);
|
||||||
|
|
||||||
if (state->tilemap_2)
|
if((order & 4) && state->paletteram2 != NULL)
|
||||||
{
|
{
|
||||||
if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0);
|
if(tilemap_get_enable(state->tilemap_2))
|
||||||
if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_3, 0, 0);
|
{
|
||||||
|
draw_tilemap_palette_effect(screen->machine, bitmap, cliprect, state->tilemap_2, x_1, y_1, 2 + ((state->vctrl_2[ 4/2 ] & 0x10) >> state->color_mode_shift), flip);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
draw_tilemap_palette_effect(screen->machine, bitmap, cliprect, state->tilemap_3, x_1, y_1, 2 + ((state->vctrl_2[ 4/2 ] & 0x10) >> state->color_mode_shift), flip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(order & 4)
|
||||||
|
{
|
||||||
|
popmessage("Missing palette effect. Contact MAMETesters.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state->tilemap_2)
|
||||||
|
{
|
||||||
|
if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0);
|
||||||
|
if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_3, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (state->tilemap_2)
|
if((order & 4) && state->paletteram2 != NULL)
|
||||||
{
|
{
|
||||||
if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0);
|
if(tilemap_get_enable(state->tilemap_2))
|
||||||
if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_3, 0, 0);
|
{
|
||||||
|
draw_tilemap_palette_effect(screen->machine, bitmap, cliprect, state->tilemap_2, x_1, y_1, 2 + ((state->vctrl_2[ 4/2 ] & 0x10) >> state->color_mode_shift), flip);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
draw_tilemap_palette_effect(screen->machine, bitmap, cliprect, state->tilemap_3, x_1, y_1, 2 + ((state->vctrl_2[ 4/2 ] & 0x10) >> state->color_mode_shift), flip);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(order & 4)
|
||||||
|
{
|
||||||
|
popmessage("Missing palette effect. Contact MAMETesters.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state->tilemap_2)
|
||||||
|
{
|
||||||
|
if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_2, 0, 0);
|
||||||
|
if (layers_ctrl & 2) tilemap_draw(bitmap, cliprect, state->tilemap_3, 0, 0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (layers_ctrl & 8) draw_sprites(screen->machine, bitmap,cliprect);
|
if (layers_ctrl & 8) draw_sprites(screen->machine, bitmap,cliprect);
|
||||||
|
Loading…
Reference in New Issue
Block a user