naomi: no actual improvements yet, just reorganizing some of the existing code slightly while I learn how it works.

This commit is contained in:
davidhay 2009-03-22 19:02:57 +00:00
parent c52d73b3a1
commit 5f82f6208d

View File

@ -32,24 +32,32 @@ static UINT32 tafifo_buff[32];
static emu_timer *vbout_timer;
typedef struct {
struct testsprites
{
int positionx, positiony;
int sizex, sizey;
UINT32 textureaddress;
float u, v, du, dv;
int texturemode;
int texturesizex, texturesizey, texturesizes, texturepf, texturepalette;
} showsprites[2048];
typedef struct
{
int positionx, positiony;
int sizex, sizey;
UINT32 textureaddress;
float u, v, du, dv;
int texturemode;
int texturesizex, texturesizey, texturesizes, texturepf, texturepalette;
} testsprites;
#if DEBUG_VERTICES
struct testvertices
{
int x;
int y;
int endofstrip;
} showvertices[65536];
typedef struct
{
int x;
int y;
int endofstrip;
} testvertices;
#endif
typedef struct {
testsprites showsprites[2048];
#if DEBUG_VERTICES
testvertices showvertices[65536];
#endif
int testsprites_size, testsprites_toerase, testvertices_size;
UINT32 ispbase;
UINT32 fbwsof1;
@ -342,10 +350,285 @@ WRITE64_HANDLER( pvr_ta_w )
#endif
}
WRITE64_HANDLER( ta_fifo_poly_w )
void process_ta_fifo(running_machine* machine)
{
UINT32 a;
// Para Control
state_ta.paracontrol=(tafifo_buff[0] >> 24) & 0xff;
// 0 end of list
// 1 user tile clip
// 2 object list set
// 3 reserved
// 4 polygon/modifier volume
// 5 sprite
// 6 reserved
// 7 vertex
state_ta.paratype=(state_ta.paracontrol >> 5) & 7;
state_ta.endofstrip=(state_ta.paracontrol >> 4) & 1;
state_ta.listtype=(state_ta.paracontrol >> 0) & 7;
if ((state_ta.paratype >= 4) && (state_ta.paratype <= 6))
{
state_ta.global_paratype = state_ta.paratype;
// Group Control
state_ta.groupcontrol=(tafifo_buff[0] >> 16) & 0xff;
state_ta.groupen=(state_ta.groupcontrol >> 7) & 1;
state_ta.striplen=(state_ta.groupcontrol >> 2) & 3;
state_ta.userclip=(state_ta.groupcontrol >> 0) & 3;
// Obj Control
state_ta.objcontrol=(tafifo_buff[0] >> 0) & 0xffff;
state_ta.shadow=(state_ta.objcontrol >> 7) & 1;
state_ta.volume=(state_ta.objcontrol >> 6) & 1;
state_ta.coltype=(state_ta.objcontrol >> 4) & 3;
state_ta.texture=(state_ta.objcontrol >> 3) & 1;
state_ta.offfset=(state_ta.objcontrol >> 2) & 1;
state_ta.gouraud=(state_ta.objcontrol >> 1) & 1;
state_ta.uv16bit=(state_ta.objcontrol >> 0) & 1;
}
// check if we need 8 words more
if (state_ta.tafifo_mask == 7)
{
state_ta.parameterconfig = pvr_parameterconfig[state_ta.objcontrol & 0x3d];
// decide number of words per vertex
if (state_ta.paratype == 7)
{
if ((state_ta.global_paratype == 5) || (state_ta.tafifo_listtype == 1) || (state_ta.tafifo_listtype == 3))
state_ta.tafifo_vertexwords = 16;
if (state_ta.tafifo_vertexwords == 16)
{
state_ta.tafifo_mask = 15;
state_ta.tafifo_pos = 8;
return;
}
}
// decide number of words when not a vertex
state_ta.tafifo_vertexwords=pvr_wordsvertex[state_ta.parameterconfig];
if ((state_ta.paratype == 4) && ((state_ta.listtype != 1) && (state_ta.listtype != 3)))
if (pvr_wordspolygon[state_ta.parameterconfig] == 16)
{
state_ta.tafifo_mask = 15;
state_ta.tafifo_pos = 8;
return;
}
}
state_ta.tafifo_mask = 7;
// now we heve all the needed words
// here we should generate the data for the various tiles
// for now, just interpret their meaning
if (state_ta.paratype == 0)
{ // end of list
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type 0 End of List\n");
#endif
a=0; // 6-10 0-3
switch (state_ta.tafifo_listtype)
{
case 0:
a = 1 << 7;
break;
case 1:
a = 1 << 8;
break;
case 2:
a = 1 << 9;
break;
case 3:
a = 1 << 10;
break;
case 4:
a = 1 << 21;
break;
}
dc_sysctrl_regs[SB_ISTNRM] |= a;
dc_update_interrupt_status(machine);
state_ta.tafifo_listtype= -1; // no list being received
state_ta.listtype_used |= (2+8);
}
else if (state_ta.paratype == 1)
{ // user tile clip
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type 1 User Tile Clip\n");
mame_printf_verbose(" (%d , %d)-(%d , %d)\n", tafifo_buff[4], tafifo_buff[5], tafifo_buff[6], tafifo_buff[7]);
#endif
}
else if (state_ta.paratype == 2)
{ // object list set
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type 2 Object List Set at %08x\n", tafifo_buff[1]);
mame_printf_verbose(" (%d , %d)-(%d , %d)\n", tafifo_buff[4], tafifo_buff[5], tafifo_buff[6], tafifo_buff[7]);
#endif
}
else if (state_ta.paratype == 3)
{
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type %x Unknown!\n", tafifo_buff[0]);
#endif
}
else
{ // global parameter or vertex parameter
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type %d", state_ta.paratype);
if (state_ta.paratype == 7)
mame_printf_verbose(" End of Strip %d", state_ta.endofstrip);
if (state_ta.listtype_used & 3)
mame_printf_verbose(" List Type %d", state_ta.listtype);
mame_printf_verbose("\n");
#endif
// set type of list currently being recieved
if ((state_ta.paratype == 4) || (state_ta.paratype == 5) || (state_ta.paratype == 6))
{
if (state_ta.tafifo_listtype < 0)
{
state_ta.tafifo_listtype = state_ta.listtype;
}
}
state_ta.listtype_used = state_ta.listtype_used ^ (state_ta.listtype_used & 3);
if ((state_ta.paratype == 4) || (state_ta.paratype == 5))
{ // quad or polygon
state_ta.depthcomparemode=(tafifo_buff[1] >> 29) & 7;
state_ta.cullingmode=(tafifo_buff[1] >> 27) & 3;
state_ta.zwritedisable=(tafifo_buff[1] >> 26) & 1;
state_ta.cachebypass=(tafifo_buff[1] >> 21) & 1;
state_ta.dcalcctrl=(tafifo_buff[1] >> 20) & 1;
state_ta.volumeinstruction=(tafifo_buff[1] >> 29) & 7;
state_ta.textureusize=1 << (3+((tafifo_buff[2] >> 3) & 7));
state_ta.texturevsize=1 << (3+(tafifo_buff[2] & 7));
state_ta.texturesizes=tafifo_buff[2] & 0x3f;
state_ta.srcalphainstr=(tafifo_buff[2] >> 29) & 7;
state_ta.dstalphainstr=(tafifo_buff[2] >> 26) & 7;
state_ta.srcselect=(tafifo_buff[2] >> 25) & 1;
state_ta.dstselect=(tafifo_buff[2] >> 24) & 1;
state_ta.fogcontrol=(tafifo_buff[2] >> 22) & 3;
state_ta.colorclamp=(tafifo_buff[2] >> 21) & 1;
state_ta.usealpha=(tafifo_buff[2] >> 20) & 1;
state_ta.ignoretexalpha=(tafifo_buff[2] >> 19) & 1;
state_ta.flipuv=(tafifo_buff[2] >> 17) & 3;
state_ta.clampuv=(tafifo_buff[2] >> 15) & 3;
state_ta.filtermode=(tafifo_buff[2] >> 13) & 3;
state_ta.sstexture=(tafifo_buff[2] >> 12) & 1;
state_ta.mmdadjust=(tafifo_buff[2] >> 8) & 1;
state_ta.tsinstruction=(tafifo_buff[2] >> 6) & 3;
if (state_ta.texture == 1)
{
state_ta.textureaddress=(tafifo_buff[3] & 0x1FFFFF) << 3;
state_ta.scanorder=(tafifo_buff[3] >> 26) & 1;
state_ta.pixelformat=(tafifo_buff[3] >> 27) & 7;
state_ta.mipmapped=(tafifo_buff[3] >> 31) & 1;
state_ta.vqcompressed=(tafifo_buff[3] >> 30) & 1;
state_ta.strideselect=(tafifo_buff[3] >> 25) & 1;
state_ta.paletteselector=(tafifo_buff[3] >> 21) & 0x3F;
#if DEBUG_PVRDLIST
mame_printf_verbose(" Texture %d x %d at %08x format %d\n", state_ta.textureusize, state_ta.texturevsize, (tafifo_buff[3] & 0x1FFFFF) << 3, state_ta.pixelformat);
#endif
}
if (state_ta.paratype == 4)
{ // polygon or mv
if ((state_ta.tafifo_listtype == 1) || (state_ta.tafifo_listtype == 3))
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Modifier Volume\n");
#endif
}
else
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Polygon\n");
#endif
}
}
if (state_ta.paratype == 5)
{ // quad
#if DEBUG_PVRDLIST
mame_printf_verbose(" Sprite\n");
#endif
}
}
if (state_ta.paratype == 7)
{ // vertex
if ((state_ta.tafifo_listtype == 1) || (state_ta.tafifo_listtype == 3))
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Vertex modifier volume");
mame_printf_verbose(" A(%f,%f,%f) B(%f,%f,%f) C(%f,%f,%f)", u2f(tafifo_buff[1]), u2f(tafifo_buff[2]),
u2f(tafifo_buff[3]), u2f(tafifo_buff[4]), u2f(tafifo_buff[5]), u2f(tafifo_buff[6]), u2f(tafifo_buff[7]),
u2f(tafifo_buff[8]), u2f(tafifo_buff[9]));
mame_printf_verbose("\n");
#endif
}
else if (state_ta.global_paratype == 5)
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Vertex sprite");
mame_printf_verbose(" A(%f,%f,%f) B(%f,%f,%f) C(%f,%f,%f) D(%f,%f,)", u2f(tafifo_buff[1]), u2f(tafifo_buff[2]),
u2f(tafifo_buff[3]), u2f(tafifo_buff[4]), u2f(tafifo_buff[5]), u2f(tafifo_buff[6]), u2f(tafifo_buff[7]),
u2f(tafifo_buff[8]), u2f(tafifo_buff[9]), u2f(tafifo_buff[10]), u2f(tafifo_buff[11]));
mame_printf_verbose("\n");
#endif
if (state_ta.texture == 1)
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" A(%f,%f) B(%f,%f) C(%f,%f)\n",u2f(tafifo_buff[13] & 0xffff0000),u2f((tafifo_buff[13] & 0xffff) << 16),u2f(tafifo_buff[14] & 0xffff0000),u2f((tafifo_buff[14] & 0xffff) << 16),u2f(tafifo_buff[15] & 0xffff0000),u2f((tafifo_buff[15] & 0xffff) << 16));
#endif
/* add a sprite to our 'test sprites' list */
/* sprites are used for the Naomi Bios logo + text for example */
/* -- this is wildly inaccurate! */
testsprites* testsprite = &state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size];
testsprite->positionx=u2f(tafifo_buff[1]);
testsprite->positiony=u2f(tafifo_buff[2]);
testsprite->sizex=u2f(tafifo_buff[4])-u2f(tafifo_buff[1]);
testsprite->sizey=u2f(tafifo_buff[8])-u2f(tafifo_buff[2]);
testsprite->u=u2f(tafifo_buff[13] & 0xffff0000);
testsprite->v=u2f((tafifo_buff[13] & 0xffff) << 16);
testsprite->du=u2f(tafifo_buff[14] & 0xffff0000)-testsprite->u;
testsprite->dv=u2f((tafifo_buff[15] & 0xffff) << 16)-testsprite->v;
testsprite->textureaddress=state_ta.textureaddress;
testsprite->texturesizex=state_ta.textureusize;
testsprite->texturesizey=state_ta.texturevsize;
testsprite->texturemode=state_ta.scanorder+state_ta.vqcompressed*2;
testsprite->texturesizes=state_ta.texturesizes;
testsprite->texturepf=state_ta.pixelformat;
testsprite->texturepalette=state_ta.paletteselector;
state_ta.grab[state_ta.grabsel].testsprites_size++;
}
}
else if (state_ta.global_paratype == 4)
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Vertex polygon");
mame_printf_verbose(" V(%f,%f,%f)", u2f(tafifo_buff[1]), u2f(tafifo_buff[2]), u2f(tafifo_buff[3]));
mame_printf_verbose("\n");
#endif
#if DEBUG_VERTICES
if (state_ta.grab[state_ta.grabsel].testvertices_size <= 65530)
{
/* add a vertex to our 'testverticies' list */
/* this is used for 3d stuff, ie most of the graphics (see guilty gear, confidential mission, maze of the kings etc.) */
/* -- this is also wildly inaccurate! */
testvertices* testvertex = &state_ta.grab[state_ta.grabsel].showvertices[state_ta.grab[state_ta.grabsel].testvertices_size];
testvertex->x=u2f(tafifo_buff[1]);
testvertex->y=u2f(tafifo_buff[2]);
testvertex->endofstrip=state_ta.endofstrip;
}
state_ta.grab[state_ta.grabsel].testvertices_size++;
#endif
}
}
}
}
WRITE64_HANDLER( ta_fifo_poly_w )
{
if (mem_mask == U64(0xffffffffffffffff)) // 64 bit
{
tafifo_buff[state_ta.tafifo_pos]=(UINT32)data;
@ -357,272 +640,15 @@ WRITE64_HANDLER( ta_fifo_poly_w )
}
else
{
mame_printf_debug("ta_fifo_poly_w: Only 64 bit writes supported!\n");
fatalerror("ta_fifo_poly_w: Only 64 bit writes supported!\n");
}
state_ta.tafifo_pos &= state_ta.tafifo_mask;
// if the command is complete, process it
if (state_ta.tafifo_pos == 0)
{
// Para Control
state_ta.paracontrol=(tafifo_buff[0] >> 24) & 0xff;
// 0 end of list
// 1 user tile clip
// 2 object list set
// 3 reserved
// 4 polygon/modifier volume
// 5 sprite
// 6 reserved
// 7 vertex
state_ta.paratype=(state_ta.paracontrol >> 5) & 7;
state_ta.endofstrip=(state_ta.paracontrol >> 4) & 1;
state_ta.listtype=(state_ta.paracontrol >> 0) & 7;
if ((state_ta.paratype >= 4) && (state_ta.paratype <= 6))
{
state_ta.global_paratype = state_ta.paratype;
// Group Control
state_ta.groupcontrol=(tafifo_buff[0] >> 16) & 0xff;
state_ta.groupen=(state_ta.groupcontrol >> 7) & 1;
state_ta.striplen=(state_ta.groupcontrol >> 2) & 3;
state_ta.userclip=(state_ta.groupcontrol >> 0) & 3;
// Obj Control
state_ta.objcontrol=(tafifo_buff[0] >> 0) & 0xffff;
state_ta.shadow=(state_ta.objcontrol >> 7) & 1;
state_ta.volume=(state_ta.objcontrol >> 6) & 1;
state_ta.coltype=(state_ta.objcontrol >> 4) & 3;
state_ta.texture=(state_ta.objcontrol >> 3) & 1;
state_ta.offfset=(state_ta.objcontrol >> 2) & 1;
state_ta.gouraud=(state_ta.objcontrol >> 1) & 1;
state_ta.uv16bit=(state_ta.objcontrol >> 0) & 1;
}
process_ta_fifo(space->machine);
// check if we need 8 words more
if (state_ta.tafifo_mask == 7)
{
state_ta.parameterconfig = pvr_parameterconfig[state_ta.objcontrol & 0x3d];
// decide number of words per vertex
if (state_ta.paratype == 7)
{
if ((state_ta.global_paratype == 5) || (state_ta.tafifo_listtype == 1) || (state_ta.tafifo_listtype == 3))
state_ta.tafifo_vertexwords = 16;
if (state_ta.tafifo_vertexwords == 16)
{
state_ta.tafifo_mask = 15;
state_ta.tafifo_pos = 8;
return;
}
}
// decide number of words when not a vertex
state_ta.tafifo_vertexwords=pvr_wordsvertex[state_ta.parameterconfig];
if ((state_ta.paratype == 4) && ((state_ta.listtype != 1) && (state_ta.listtype != 3)))
if (pvr_wordspolygon[state_ta.parameterconfig] == 16)
{
state_ta.tafifo_mask = 15;
state_ta.tafifo_pos = 8;
return;
}
}
state_ta.tafifo_mask = 7;
// now we heve all the needed words
// here we should generate the data for the various tiles
// for now, just interpret their meaning
if (state_ta.paratype == 0)
{ // end of list
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type 0 End of List\n");
#endif
a=0; // 6-10 0-3
switch (state_ta.tafifo_listtype)
{
case 0:
a = 1 << 7;
break;
case 1:
a = 1 << 8;
break;
case 2:
a = 1 << 9;
break;
case 3:
a = 1 << 10;
break;
case 4:
a = 1 << 21;
break;
}
dc_sysctrl_regs[SB_ISTNRM] |= a;
dc_update_interrupt_status(space->machine);
state_ta.tafifo_listtype= -1; // no list being received
state_ta.listtype_used |= (2+8);
}
else if (state_ta.paratype == 1)
{ // user tile clip
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type 1 User Tile Clip\n");
mame_printf_verbose(" (%d , %d)-(%d , %d)\n", tafifo_buff[4], tafifo_buff[5], tafifo_buff[6], tafifo_buff[7]);
#endif
}
else if (state_ta.paratype == 2)
{ // object list set
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type 2 Object List Set at %08x\n", tafifo_buff[1]);
mame_printf_verbose(" (%d , %d)-(%d , %d)\n", tafifo_buff[4], tafifo_buff[5], tafifo_buff[6], tafifo_buff[7]);
#endif
}
else if (state_ta.paratype == 3)
{
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type %x Unknown!\n", tafifo_buff[0]);
#endif
}
else
{ // global parameter or vertex parameter
#if DEBUG_PVRDLIST
mame_printf_verbose("Para Type %d", state_ta.paratype);
if (state_ta.paratype == 7)
mame_printf_verbose(" End of Strip %d", state_ta.endofstrip);
if (state_ta.listtype_used & 3)
mame_printf_verbose(" List Type %d", state_ta.listtype);
mame_printf_verbose("\n");
#endif
// set type of list currently being recieved
if ((state_ta.paratype == 4) || (state_ta.paratype == 5) || (state_ta.paratype == 6))
{
if (state_ta.tafifo_listtype < 0)
{
state_ta.tafifo_listtype = state_ta.listtype;
}
}
state_ta.listtype_used = state_ta.listtype_used ^ (state_ta.listtype_used & 3);
if ((state_ta.paratype == 4) || (state_ta.paratype == 5))
{ // quad or polygon
state_ta.depthcomparemode=(tafifo_buff[1] >> 29) & 7;
state_ta.cullingmode=(tafifo_buff[1] >> 27) & 3;
state_ta.zwritedisable=(tafifo_buff[1] >> 26) & 1;
state_ta.cachebypass=(tafifo_buff[1] >> 21) & 1;
state_ta.dcalcctrl=(tafifo_buff[1] >> 20) & 1;
state_ta.volumeinstruction=(tafifo_buff[1] >> 29) & 7;
state_ta.textureusize=1 << (3+((tafifo_buff[2] >> 3) & 7));
state_ta.texturevsize=1 << (3+(tafifo_buff[2] & 7));
state_ta.texturesizes=tafifo_buff[2] & 0x3f;
state_ta.srcalphainstr=(tafifo_buff[2] >> 29) & 7;
state_ta.dstalphainstr=(tafifo_buff[2] >> 26) & 7;
state_ta.srcselect=(tafifo_buff[2] >> 25) & 1;
state_ta.dstselect=(tafifo_buff[2] >> 24) & 1;
state_ta.fogcontrol=(tafifo_buff[2] >> 22) & 3;
state_ta.colorclamp=(tafifo_buff[2] >> 21) & 1;
state_ta.usealpha=(tafifo_buff[2] >> 20) & 1;
state_ta.ignoretexalpha=(tafifo_buff[2] >> 19) & 1;
state_ta.flipuv=(tafifo_buff[2] >> 17) & 3;
state_ta.clampuv=(tafifo_buff[2] >> 15) & 3;
state_ta.filtermode=(tafifo_buff[2] >> 13) & 3;
state_ta.sstexture=(tafifo_buff[2] >> 12) & 1;
state_ta.mmdadjust=(tafifo_buff[2] >> 8) & 1;
state_ta.tsinstruction=(tafifo_buff[2] >> 6) & 3;
if (state_ta.texture == 1)
{
state_ta.textureaddress=(tafifo_buff[3] & 0x1FFFFF) << 3;
state_ta.scanorder=(tafifo_buff[3] >> 26) & 1;
state_ta.pixelformat=(tafifo_buff[3] >> 27) & 7;
state_ta.mipmapped=(tafifo_buff[3] >> 31) & 1;
state_ta.vqcompressed=(tafifo_buff[3] >> 30) & 1;
state_ta.strideselect=(tafifo_buff[3] >> 25) & 1;
state_ta.paletteselector=(tafifo_buff[3] >> 21) & 0x3F;
#if DEBUG_PVRDLIST
mame_printf_verbose(" Texture %d x %d at %08x format %d\n", state_ta.textureusize, state_ta.texturevsize, (tafifo_buff[3] & 0x1FFFFF) << 3, state_ta.pixelformat);
#endif
}
if (state_ta.paratype == 4)
{ // polygon or mv
if ((state_ta.tafifo_listtype == 1) || (state_ta.tafifo_listtype == 3))
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Modifier Volume\n");
#endif
}
else
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Polygon\n");
#endif
}
}
if (state_ta.paratype == 5)
{ // quad
#if DEBUG_PVRDLIST
mame_printf_verbose(" Sprite\n");
#endif
}
}
if (state_ta.paratype == 7)
{ // vertex
if ((state_ta.tafifo_listtype == 1) || (state_ta.tafifo_listtype == 3))
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Vertex modifier volume");
mame_printf_verbose(" A(%f,%f,%f) B(%f,%f,%f) C(%f,%f,%f)", u2f(tafifo_buff[1]), u2f(tafifo_buff[2]),
u2f(tafifo_buff[3]), u2f(tafifo_buff[4]), u2f(tafifo_buff[5]), u2f(tafifo_buff[6]), u2f(tafifo_buff[7]),
u2f(tafifo_buff[8]), u2f(tafifo_buff[9]));
mame_printf_verbose("\n");
#endif
}
else if (state_ta.global_paratype == 5)
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Vertex sprite");
mame_printf_verbose(" A(%f,%f,%f) B(%f,%f,%f) C(%f,%f,%f) D(%f,%f,)", u2f(tafifo_buff[1]), u2f(tafifo_buff[2]),
u2f(tafifo_buff[3]), u2f(tafifo_buff[4]), u2f(tafifo_buff[5]), u2f(tafifo_buff[6]), u2f(tafifo_buff[7]),
u2f(tafifo_buff[8]), u2f(tafifo_buff[9]), u2f(tafifo_buff[10]), u2f(tafifo_buff[11]));
mame_printf_verbose("\n");
#endif
if (state_ta.texture == 1)
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" A(%f,%f) B(%f,%f) C(%f,%f)\n",u2f(tafifo_buff[13] & 0xffff0000),u2f((tafifo_buff[13] & 0xffff) << 16),u2f(tafifo_buff[14] & 0xffff0000),u2f((tafifo_buff[14] & 0xffff) << 16),u2f(tafifo_buff[15] & 0xffff0000),u2f((tafifo_buff[15] & 0xffff) << 16));
#endif
/* test video start */
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].positionx=u2f(tafifo_buff[1]);
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].positiony=u2f(tafifo_buff[2]);
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].sizex=u2f(tafifo_buff[4])-u2f(tafifo_buff[1]);
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].sizey=u2f(tafifo_buff[8])-u2f(tafifo_buff[2]);
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].u=u2f(tafifo_buff[13] & 0xffff0000);
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].v=u2f((tafifo_buff[13] & 0xffff) << 16);
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].du=u2f(tafifo_buff[14] & 0xffff0000)-state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].u;
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].dv=u2f((tafifo_buff[15] & 0xffff) << 16)-state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].v;
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].textureaddress=state_ta.textureaddress;
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturesizex=state_ta.textureusize;
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturesizey=state_ta.texturevsize;
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturemode=state_ta.scanorder+state_ta.vqcompressed*2;
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturesizes=state_ta.texturesizes;
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturepf=state_ta.pixelformat;
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturepalette=state_ta.paletteselector;
state_ta.grab[state_ta.grabsel].testsprites_size=state_ta.grab[state_ta.grabsel].testsprites_size+1;
/* test video end */
}
}
else if (state_ta.global_paratype == 4)
{
#if DEBUG_PVRDLIST
mame_printf_verbose(" Vertex polygon");
mame_printf_verbose(" V(%f,%f,%f)", u2f(tafifo_buff[1]), u2f(tafifo_buff[2]), u2f(tafifo_buff[3]));
mame_printf_verbose("\n");
#endif
#if DEBUG_VERTICES
if (state_ta.grab[state_ta.grabsel].testvertices_size <= 65530)
{
state_ta.grab[state_ta.grabsel].showvertices[state_ta.grab[state_ta.grabsel].testvertices_size].x=u2f(tafifo_buff[1]);
state_ta.grab[state_ta.grabsel].showvertices[state_ta.grab[state_ta.grabsel].testvertices_size].y=u2f(tafifo_buff[2]);
state_ta.grab[state_ta.grabsel].showvertices[state_ta.grab[state_ta.grabsel].testvertices_size].endofstrip=state_ta.endofstrip;
}
state_ta.grab[state_ta.grabsel].testvertices_size=state_ta.grab[state_ta.grabsel].testvertices_size+1;
#endif
}
}
}
} // if (state_ta.tafifo_pos == 0)
}
WRITE64_HANDLER( ta_fifo_yuv_w )