Hacked around the mask screen thing (any idea here is welcome)

This commit is contained in:
Angelo Salese 2011-08-24 02:25:15 +00:00
parent b9924e9b22
commit d25ed31d97
2 changed files with 38 additions and 26 deletions

View File

@ -28,10 +28,10 @@
Taito custom chips on motherboard: Taito custom chips on motherboard:
TC0630 FDP - Playfield generator? (Nearest tile roms) TC0630FDP - Playfield generator? (Nearest tile roms)
TC0640 FI0 - I/O & watchdog? TC0640FIO - I/O & watchdog?
TC0650 FDA - Priority mixer? (Near paletteram & video output) TC0650FDA - Priority mixer? (Near paletteram & video output)
TC0660 FCM - Sprites? (Nearest sprite roms) TC0660FCM - Sprites? (Nearest sprite roms)
***************************************************************************/ ***************************************************************************/

View File

@ -184,14 +184,21 @@ static void draw_object(running_machine &machine, bitmap_t *bitmap, const rectan
/* this bit seems to set up border at left/right of screen (reads at 0xffc00) */ /* this bit seems to set up border at left/right of screen (reads at 0xffc00) */
if(mask_screen) if(mask_screen)
{ {
if(address != 0xffc00)
{
popmessage("mask screen with %08x, contact MAMEdev",address);
return;
}
for (j=y1; j < y2; j++) for (j=y1; j < y2; j++)
{ {
UINT16 *d = BITMAP_ADDR16(bitmap, j, 0); UINT16 *d = BITMAP_ADDR16(bitmap, j, 0);
//int index = (iy * (width / 8)) + ix;
UINT8 pen = state->m_objlist[(address-0xff000)/4];
for (i=x1; i < x2; i++) for (i=x1; i < x2; i++)
{ {
d[i] = v[0]; d[i] = pen;
//index++; //index++;
} }
@ -210,14 +217,12 @@ static void draw_object(running_machine &machine, bitmap_t *bitmap, const rectan
{ {
UINT8 pen = (v[BYTE4_XOR_BE(index)] & 0xf0) >> 4; UINT8 pen = (v[BYTE4_XOR_BE(index)] & 0xf0) >> 4;
if (pen != 0) if (pen != 0)
{
d[i] = palette + pen; d[i] = palette + pen;
}
pen = (v[BYTE4_XOR_BE(index)] & 0x0f); pen = (v[BYTE4_XOR_BE(index)] & 0x0f);
if (pen != 0) if (pen != 0)
{
d[i+1] = palette + pen; d[i+1] = palette + pen;
}
index++; index++;
} }
@ -226,23 +231,25 @@ static void draw_object(running_machine &machine, bitmap_t *bitmap, const rectan
} }
else // 8bpp else // 8bpp
{ {
for (j=y1; j < y2; j++)
{ {
UINT16 *d = BITMAP_ADDR16(bitmap, j, 0); for (j=y1; j < y2; j++)
int index = (iy * width) + ix;
for (i=x1; i < x2; i++)
{ {
UINT8 pen = v[BYTE4_XOR_BE(index)]; UINT16 *d = BITMAP_ADDR16(bitmap, j, 0);
if (pen != 0) int index = (iy * width) + ix;
for (i=x1; i < x2; i++)
{ {
d[i] = palette + pen; UINT8 pen = v[BYTE4_XOR_BE(index)];
if (pen != 0)
{
d[i] = palette + pen;
}
index++;
} }
index++; iy++;
} }
iy++;
} }
} }
} }
@ -291,18 +298,21 @@ static void draw_object_bank(running_machine &machine, bitmap_t *bitmap, const r
{ {
taitojc_state *state = machine.driver_data<taitojc_state>(); taitojc_state *state = machine.driver_data<taitojc_state>();
UINT16 start_offs; UINT16 start_offs;
// UINT8 double_xy;
int i; int i;
start_offs = ((bank_type+1)*0x400)/4; start_offs = ((bank_type+1)*0x400)/4;
// double_xy = (state->m_objlist[(0xd1c+bank_type*0x10)/4] & 0x20000000) >> 29;
/* probably a core bug in there (otherwise objects sticks on screen in Densya de Go) */
if(bank_type == 1 && (!(state->m_objlist[0xfc4/4] & 0x2000)))
return;
for (i=start_offs-2; i >= (start_offs-0x400/4); i-=2) for (i=start_offs-2; i >= (start_offs-0x400/4); i-=2)
{ {
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
// return;
if (((w2 & 0x200000) >> 21) == pri) if (((w2 & 0x200000) >> 21) == pri)
{ {
draw_object(machine, bitmap, cliprect, w1, w2, bank_type); draw_object(machine, bitmap, cliprect, w1, w2, bank_type);
@ -338,12 +348,14 @@ SCREEN_UPDATE( taitojc )
//popmessage("%08x %08x %08x %08x",state->m_objlist[0xd20/4],state->m_objlist[0xd24/4],state->m_objlist[0xd28/4],state->m_objlist[0xd2c/4]); //popmessage("%08x %08x %08x %08x",state->m_objlist[0xd20/4],state->m_objlist[0xd24/4],state->m_objlist[0xd28/4],state->m_objlist[0xd2c/4]);
draw_object_bank(screen->machine(), bitmap, cliprect, ((state->m_objlist[0xfc4/4] & 0x2000) >> 13), 0); draw_object_bank(screen->machine(), bitmap, cliprect, 0, 0);
draw_object_bank(screen->machine(), bitmap, cliprect, 1, 0);
draw_object_bank(screen->machine(), bitmap, cliprect, 2, 0); draw_object_bank(screen->machine(), bitmap, cliprect, 2, 0);
copybitmap_trans(bitmap, state->m_framebuffer, 0, 0, 0, 0, cliprect, 0); copybitmap_trans(bitmap, state->m_framebuffer, 0, 0, 0, 0, cliprect, 0);
draw_object_bank(screen->machine(), bitmap, cliprect, ((state->m_objlist[0xfc4/4] & 0x2000) >> 13), 1); draw_object_bank(screen->machine(), bitmap, cliprect, 0, 1);
draw_object_bank(screen->machine(), bitmap, cliprect, 1, 1);
draw_object_bank(screen->machine(), bitmap, cliprect, 2, 1); draw_object_bank(screen->machine(), bitmap, cliprect, 2, 1);
tilemap_draw(bitmap, cliprect, state->m_tilemap, 0,0); tilemap_draw(bitmap, cliprect, state->m_tilemap, 0,0);