diff --git a/src/mame/video/gp9001.c b/src/mame/video/gp9001.c index eeed03cf926..524b5ea30c5 100644 --- a/src/mame/video/gp9001.c +++ b/src/mame/video/gp9001.c @@ -128,6 +128,30 @@ Pipi & Bibis | Fix Eight | V-Five | Snow Bros. 2 | #include "emu.h" #include "gp9001.h" +/* + Single VDP mixing priority note: + + Initial thoughts were that 16 levels of priority exist for both sprites and tilemaps, ie GP9001_PRIMASK 0xf + However the end of level scene rendered on the first VDP in Batsugun strongly suggests otherwise. + + Sprites have 'priority' bits of 0x0600 (level 0x6) set + Tilemaps have 'priority' bits of 0x7000 (level 0x7) set + + If a mask of 0xf is used then the tilemaps render above the sprites, which causes the V bonus items near the + counters to be invisible (in addition to the English character quote text) + + using a mask of 0xe causes both priority levels to be equal, allowing the sprites to render above the tilemap. + + The alternative option of allowing sprites to render a priority level higher than tilemaps breaks at least the + 'Welcome to..' screen in Batrider after selecting your character. + + It is unknown if the current solution breaks anything. The majority of titles don't make extensive use of the + priority system. + +*/ +#define GP9001_PRIMASK (0x000e) + + static WRITE16_DEVICE_HANDLER( gp9001_bg_tilemap_w ) { gp9001vdp_device *vdp = (gp9001vdp_device*)device; @@ -1034,9 +1058,10 @@ void gp9001vdp_device::draw_sprites( running_machine *machine, bitmap_t *bitmap, int attrib, sprite, color, priority, flipx, flipy, sx, sy; int sprite_sizex, sprite_sizey, dim_x, dim_y, sx_base, sy_base; int bank, sprite_num; + UINT16 primask = (GP9001_PRIMASK << 8); attrib = source[offs]; - priority = primap[((attrib & 0x0f00)>>8)]+1; + priority = primap[((attrib & primask)>>8)]+1; if ((attrib & 0x8000)) { @@ -1231,7 +1256,7 @@ void gp9001vdp_device::gp9001_draw_custom_tilemap(running_machine* machine, bitm int realx = (x+scrollx)&0x1ff; UINT16 pixdat = srcptr[realx]; - UINT8 pixpri = ((pixdat & 0xf000)>>12); + UINT8 pixpri = ((pixdat & (GP9001_PRIMASK<<12))>>12); if (pri_enable[pixpri]) {