hng64: implemented screen disable when the visible area regs are equal to zero and fixed back layer [Angelo Salese]

This commit is contained in:
Angelo Salese 2009-11-29 20:39:09 +00:00
parent 47af70d471
commit d638e3b6b3
2 changed files with 37 additions and 17 deletions

View File

@ -474,10 +474,12 @@ extern UINT32 *hng64_3dregs;
extern UINT32 hng64_dls[2][0x81] ; extern UINT32 hng64_dls[2][0x81] ;
extern UINT8 hng64_screen_dis;
VIDEO_START( hng64 ) ; VIDEO_START( hng64 ) ;
VIDEO_UPDATE( hng64 ) ; VIDEO_UPDATE( hng64 ) ;
static UINT32 activeBuffer ; static UINT32 activeBuffer;
static UINT32 no_machine_error_code; static UINT32 no_machine_error_code;
@ -925,8 +927,13 @@ static WRITE32_HANDLER( tcram_w )
max_x = (hng64_tcram[2] & 0xffff0000) >> 16; max_x = (hng64_tcram[2] & 0xffff0000) >> 16;
max_y = (hng64_tcram[2] & 0x0000ffff) >> 0; max_y = (hng64_tcram[2] & 0x0000ffff) >> 0;
if(max_x == 0 || max_y == 0) //bail out if values are invalid if(max_x == 0 || max_y == 0) //bail out if values are invalid, Fatal Fury WA sets this to disable the screen.
{
hng64_screen_dis = 1;
return; return;
}
hng64_screen_dis = 0;
visarea.min_x = min_x; visarea.min_x = min_x;
visarea.max_x = min_x + max_x - 1; visarea.max_x = min_x + max_x - 1;

View File

@ -36,6 +36,8 @@ UINT32 *hng64_3dregs;
UINT32 *hng64_tcram ; UINT32 *hng64_tcram ;
UINT8 hng64_screen_dis;
void hng64_mark_all_tiles_dirty( int tilemap ) void hng64_mark_all_tiles_dirty( int tilemap )
{ {
if (tilemap == 0) if (tilemap == 0)
@ -434,8 +436,8 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
} }
/* Transition_Control Memory Region Map /* Transition Control Video Registers
* ------------------------------ * ----------------------------------
* *
* UINT32 | Bits | Use * UINT32 | Bits | Use
* | 3322 2222 2222 1111 1111 11 | * | 3322 2222 2222 1111 1111 11 |
@ -445,17 +447,28 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
* 2 | xxxx xxxx xxxx xxxx yyyy yyyy yyyy yyyy | Max X / Max Y visible area rectangle values (added up with the Min X / Min Y) * 2 | xxxx xxxx xxxx xxxx yyyy yyyy yyyy yyyy | Max X / Max Y visible area rectangle values (added up with the Min X / Min Y)
* 3 | | * 3 | |
* 4 | | * 4 | |
* 5 | | * 5 | ---- ---- ---- ---? ---- --?? ???? ???? | Global Fade In/Fade Out control
* 6 | ---- ---- xxxx xxxx xxxx xxxx xxxx xxxx | I popped into Buriki and saw some of these values changing to the same as 7. hmmmm... * 6 | |
* 7 | ---- ---- xxxx xxxx xxxx xxxx xxxx xxxx | Almost certainly RGB darkening * 7 | ---- ---- xxxx xxxx xxxx xxxx xxxx xxxx | Port A of RGB fade (subtraction)
* 8 | | * 8 | |
* 9 | | * 9 | ---- ---- ---- ---? ---- ---- ---- ???? | Per-layer Fade In/Fade Out control
* 10 | ---- ---- xxxx xxxx xxxx xxxx xxxx xxxx | Almost certainly RGB brightening * 10 | ---- ---- xxxx xxxx xxxx xxxx xxxx xxxx | Port B of RGB fade (additive)
* 11 | xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx | Unknown - looks like an ARGB value - it seems to change when the scene changes * 11 | xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx | Unknown - looks like an ARGB value - it seems to change when the scene changes
* 12 | | * 12 | |
* 13 | | * 13 | |
* 14 | | * 14 | |
* 15 | | * 15 | |
* 16 | |
* 17 | |
* 18 | xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx | V-Blank related stuff
* 19 | |
* 20 | ---- ---- ---- ---x ---- ---- ---- ---- | Back layer control register?
* 21 | |
* 22 | |
* 23 | |
* 24 | |
*
*
* *
* Various bits change depending on what is happening in the scene. * Various bits change depending on what is happening in the scene.
* These bits may set which 'layer' is affected by the blending. * These bits may set which 'layer' is affected by the blending.
@ -465,7 +478,6 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
*/ */
/* this is broken for the 'How to Play' screen in Buriki after attract, disabled for now */ /* this is broken for the 'How to Play' screen in Buriki after attract, disabled for now */
#if 0
static void transition_control(bitmap_t *bitmap, const rectangle *cliprect) static void transition_control(bitmap_t *bitmap, const rectangle *cliprect)
{ {
int i, j ; int i, j ;
@ -557,7 +569,6 @@ static void transition_control(bitmap_t *bitmap, const rectangle *cliprect)
} }
} }
} }
#endif
/* /*
* 3d 'Sprite' Format * 3d 'Sprite' Format
@ -1741,9 +1752,12 @@ VIDEO_UPDATE( hng64 )
UINT16 tileflags0, tileflags1; UINT16 tileflags0, tileflags1;
UINT16 tileflags2, tileflags3; UINT16 tileflags2, tileflags3;
bitmap_fill(bitmap, 0, screen->machine->pens[0]); //FIXME: Fatal Fury WA test mode doesn't use pen 0... bitmap_fill(bitmap, 0, hng64_tcram[0x50/4] & 0x10000 ? get_black_pen(screen->machine) : screen->machine->pens[0]); //FIXME: Is the register correct? check with HW tests
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0x00); bitmap_fill(screen->machine->priority_bitmap, cliprect, 0x00);
if(hng64_screen_dis)
return 0;
animmask = hng64_videoregs[0x0b]; animmask = hng64_videoregs[0x0b];
animbits = hng64_videoregs[0x0c]; animbits = hng64_videoregs[0x0c];
tileflags0 = hng64_videoregs[0x02]>>16; tileflags0 = hng64_videoregs[0x02]>>16;
@ -1820,9 +1834,8 @@ VIDEO_UPDATE( hng64 )
if (hng64_mcu_type != RACING_MCU) // disable on racing games until it stops crashing MAME! if (hng64_mcu_type != RACING_MCU) // disable on racing games until it stops crashing MAME!
draw3d(screen->machine, bitmap, cliprect); draw3d(screen->machine, bitmap, cliprect);
#if 0 if(0)
transition_control(bitmap, cliprect) ; transition_control(bitmap, cliprect) ;
#endif
if (0) if (0)
popmessage("%08x %08x %08x %08x %08x", hng64_spriteregs[0], hng64_spriteregs[1], hng64_spriteregs[2], hng64_spriteregs[3], hng64_spriteregs[4]); popmessage("%08x %08x %08x %08x %08x", hng64_spriteregs[0], hng64_spriteregs[1], hng64_spriteregs[2], hng64_spriteregs[3], hng64_spriteregs[4]);
@ -1849,13 +1862,13 @@ VIDEO_UPDATE( hng64 )
hng64_videoregs[0x0d], hng64_videoregs[0x0d],
hng64_videoregs[0x0e]); hng64_videoregs[0x0e]);
if (1) if (0)
popmessage("3D: %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x", popmessage("3D: %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x",
hng64_3dregs[0x00/4],hng64_3dregs[0x04/4],hng64_3dregs[0x08/4],hng64_3dregs[0x0c/4], hng64_3dregs[0x00/4],hng64_3dregs[0x04/4],hng64_3dregs[0x08/4],hng64_3dregs[0x0c/4],
hng64_3dregs[0x10/4],hng64_3dregs[0x14/4],hng64_3dregs[0x18/4],hng64_3dregs[0x1c/4], hng64_3dregs[0x10/4],hng64_3dregs[0x14/4],hng64_3dregs[0x18/4],hng64_3dregs[0x1c/4],
hng64_3dregs[0x20/4],hng64_3dregs[0x24/4],hng64_3dregs[0x28/4],hng64_3dregs[0x2c/4]); hng64_3dregs[0x20/4],hng64_3dregs[0x24/4],hng64_3dregs[0x28/4],hng64_3dregs[0x2c/4]);
if (0) if (1)
popmessage("TC: %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x", popmessage("TC: %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x : %08x %08x %08x %08x",
hng64_tcram[0x00/4], hng64_tcram[0x00/4],
hng64_tcram[0x04/4], hng64_tcram[0x04/4],