Added another bit to the object RAM, used for screen masking on the sides

This commit is contained in:
Angelo Salese 2011-08-23 02:37:59 +00:00
parent 479c16a848
commit adacaf4eee
2 changed files with 27 additions and 5 deletions

View File

@ -341,10 +341,9 @@ Notes:
TODO: TODO:
- dendeg intro object RAM usage has various gfx bugs (check video file) - dendeg intro object RAM usage has various gfx bugs (check video file)
- dendeg title screen builds up and it shouldn't - dendeg title screen builds up and it shouldn't
- dendeg/dendeg2 doesn't show the odometer; - dendeg/dendeg2 doesn't show the odometer (btanb, thanks ANY);
- landgear has some weird crashes (after playing one round, after a couple of loops in attract mode) (needs testing -AS) - landgear has some weird crashes (after playing one round, after a couple of loops in attract mode) (needs testing -AS)
- landgear has huge 3d problems on gameplay (CPU comms?) - landgear has huge 3d problems on gameplay (CPU comms?)
- All dendeg games have random wrong textures/palettes. (can't see any ... -AS)
- dendeg2 shows a debug string during gameplay? - dendeg2 shows a debug string during gameplay?
- Train board (external sound board with OKI6295) is not emulated. - Train board (external sound board with OKI6295) is not emulated.
- dangcurv DSP program crashes very soon, so no 3d is currently shown. - dangcurv DSP program crashes very soon, so no 3d is currently shown.

View File

@ -107,8 +107,10 @@ static void draw_object(running_machine &machine, bitmap_t *bitmap, const rectan
UINT32 address; UINT32 address;
UINT8 *v; UINT8 *v;
UINT8 color_depth; UINT8 color_depth;
UINT8 mask_screen;
color_depth = (w2 & 0x10000) >> 16; color_depth = (w2 & 0x10000) >> 16;
mask_screen = (w2 & 0x20000) >> 17;
address = (w2 & 0x7fff) * 0x20; address = (w2 & 0x7fff) * 0x20;
if (w2 & 0x4000) if (w2 & 0x4000)
@ -127,6 +129,8 @@ static void draw_object(running_machine &machine, bitmap_t *bitmap, const rectan
palette = ((w2 >> 22) & 0x7f) << 8; palette = ((w2 >> 22) & 0x7f) << 8;
/* TODO: untangle this! */ /* TODO: untangle this! */
if(address >= 0xff000)
v = (UINT8*)&state->m_objlist[(address-0xff000)/4];
if(address >= 0xfc000) if(address >= 0xfc000)
v = (UINT8*)&state->m_char_ram[(address-0xfc000)/4]; v = (UINT8*)&state->m_char_ram[(address-0xfc000)/4];
else if(address >= 0xf8000) else if(address >= 0xf8000)
@ -177,7 +181,25 @@ static void draw_object(running_machine &machine, bitmap_t *bitmap, const rectan
y2 = cliprect->max_y; y2 = cliprect->max_y;
} }
if(!color_depth) // Densya de Go 2/2X "credit text", 4bpp /* this bit seems to set up border at left/right of screen (reads at 0xffc00) */
if(mask_screen)
{
for (j=y1; j < y2; j++)
{
UINT16 *d = BITMAP_ADDR16(bitmap, j, 0);
//int index = (iy * (width / 8)) + ix;
for (i=x1; i < x2; i++)
{
d[i] = v[0];
//index++;
}
//iy++;
}
}
else if(!color_depth) // Densya de Go 2/2X "credit text", 4bpp
{ {
for (j=y1; j < y2; j++) for (j=y1; j < y2; j++)
{ {
@ -216,6 +238,7 @@ static void draw_object(running_machine &machine, bitmap_t *bitmap, const rectan
{ {
d[i] = palette + pen; d[i] = palette + pen;
} }
index++; index++;
} }
@ -277,8 +300,8 @@ static void draw_object_bank(running_machine &machine, bitmap_t *bitmap, const r
UINT32 w1 = state->m_objlist[i + 0]; UINT32 w1 = state->m_objlist[i + 0];
UINT32 w2 = state->m_objlist[i + 1]; UINT32 w2 = state->m_objlist[i + 1];
if(i < 6) // don't try to draw non-video stuff //if(i < 6) // don't try to draw non-video stuff
return; // return;
if (((w2 & 0x200000) >> 21) == pri) if (((w2 & 0x200000) >> 21) == pri)
{ {