mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
naomi: no actual improvements yet, just reorganizing some of the existing code slightly while I learn how it works.
This commit is contained in:
parent
c52d73b3a1
commit
5f82f6208d
@ -32,8 +32,7 @@ static UINT32 tafifo_buff[32];
|
|||||||
|
|
||||||
static emu_timer *vbout_timer;
|
static emu_timer *vbout_timer;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct
|
||||||
struct testsprites
|
|
||||||
{
|
{
|
||||||
int positionx, positiony;
|
int positionx, positiony;
|
||||||
int sizex, sizey;
|
int sizex, sizey;
|
||||||
@ -41,15 +40,24 @@ typedef struct {
|
|||||||
float u, v, du, dv;
|
float u, v, du, dv;
|
||||||
int texturemode;
|
int texturemode;
|
||||||
int texturesizex, texturesizey, texturesizes, texturepf, texturepalette;
|
int texturesizex, texturesizey, texturesizes, texturepf, texturepalette;
|
||||||
} showsprites[2048];
|
} testsprites;
|
||||||
|
|
||||||
#if DEBUG_VERTICES
|
#if DEBUG_VERTICES
|
||||||
struct testvertices
|
typedef struct
|
||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
int y;
|
int y;
|
||||||
int endofstrip;
|
int endofstrip;
|
||||||
} showvertices[65536];
|
} testvertices;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
testsprites showsprites[2048];
|
||||||
|
|
||||||
|
#if DEBUG_VERTICES
|
||||||
|
testvertices showvertices[65536];
|
||||||
|
#endif
|
||||||
|
|
||||||
int testsprites_size, testsprites_toerase, testvertices_size;
|
int testsprites_size, testsprites_toerase, testvertices_size;
|
||||||
UINT32 ispbase;
|
UINT32 ispbase;
|
||||||
UINT32 fbwsof1;
|
UINT32 fbwsof1;
|
||||||
@ -342,27 +350,10 @@ WRITE64_HANDLER( pvr_ta_w )
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE64_HANDLER( ta_fifo_poly_w )
|
void process_ta_fifo(running_machine* machine)
|
||||||
{
|
{
|
||||||
UINT32 a;
|
UINT32 a;
|
||||||
|
|
||||||
if (mem_mask == U64(0xffffffffffffffff)) // 64 bit
|
|
||||||
{
|
|
||||||
tafifo_buff[state_ta.tafifo_pos]=(UINT32)data;
|
|
||||||
tafifo_buff[state_ta.tafifo_pos+1]=(UINT32)(data >> 32);
|
|
||||||
#if DEBUG_FIFO_POLY
|
|
||||||
mame_printf_debug("ta_fifo_poly_w: Unmapped write64 %08x = %llx -> %08x %08x\n", 0x10000000+offset*8, data, tafifo_buff[state_ta.tafifo_pos], tafifo_buff[state_ta.tafifo_pos+1]);
|
|
||||||
#endif
|
|
||||||
state_ta.tafifo_pos += 2;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mame_printf_debug("ta_fifo_poly_w: Only 64 bit writes supported!\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
state_ta.tafifo_pos &= state_ta.tafifo_mask;
|
|
||||||
if (state_ta.tafifo_pos == 0)
|
|
||||||
{
|
|
||||||
// Para Control
|
// Para Control
|
||||||
state_ta.paracontrol=(tafifo_buff[0] >> 24) & 0xff;
|
state_ta.paracontrol=(tafifo_buff[0] >> 24) & 0xff;
|
||||||
// 0 end of list
|
// 0 end of list
|
||||||
@ -450,8 +441,9 @@ WRITE64_HANDLER( ta_fifo_poly_w )
|
|||||||
a = 1 << 21;
|
a = 1 << 21;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
dc_sysctrl_regs[SB_ISTNRM] |= a;
|
dc_sysctrl_regs[SB_ISTNRM] |= a;
|
||||||
dc_update_interrupt_status(space->machine);
|
dc_update_interrupt_status(machine);
|
||||||
state_ta.tafifo_listtype= -1; // no list being received
|
state_ta.tafifo_listtype= -1; // no list being received
|
||||||
state_ta.listtype_used |= (2+8);
|
state_ta.listtype_used |= (2+8);
|
||||||
}
|
}
|
||||||
@ -583,24 +575,29 @@ WRITE64_HANDLER( ta_fifo_poly_w )
|
|||||||
#if DEBUG_PVRDLIST
|
#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));
|
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
|
#endif
|
||||||
/* test video start */
|
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].positionx=u2f(tafifo_buff[1]);
|
/* add a sprite to our 'test sprites' list */
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].positiony=u2f(tafifo_buff[2]);
|
/* sprites are used for the Naomi Bios logo + text for example */
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].sizex=u2f(tafifo_buff[4])-u2f(tafifo_buff[1]);
|
/* -- this is wildly inaccurate! */
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].sizey=u2f(tafifo_buff[8])-u2f(tafifo_buff[2]);
|
testsprites* testsprite = &state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size];
|
||||||
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);
|
testsprite->positionx=u2f(tafifo_buff[1]);
|
||||||
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;
|
testsprite->positiony=u2f(tafifo_buff[2]);
|
||||||
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;
|
testsprite->sizex=u2f(tafifo_buff[4])-u2f(tafifo_buff[1]);
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].textureaddress=state_ta.textureaddress;
|
testsprite->sizey=u2f(tafifo_buff[8])-u2f(tafifo_buff[2]);
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturesizex=state_ta.textureusize;
|
testsprite->u=u2f(tafifo_buff[13] & 0xffff0000);
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturesizey=state_ta.texturevsize;
|
testsprite->v=u2f((tafifo_buff[13] & 0xffff) << 16);
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturemode=state_ta.scanorder+state_ta.vqcompressed*2;
|
testsprite->du=u2f(tafifo_buff[14] & 0xffff0000)-testsprite->u;
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturesizes=state_ta.texturesizes;
|
testsprite->dv=u2f((tafifo_buff[15] & 0xffff) << 16)-testsprite->v;
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturepf=state_ta.pixelformat;
|
testsprite->textureaddress=state_ta.textureaddress;
|
||||||
state_ta.grab[state_ta.grabsel].showsprites[state_ta.grab[state_ta.grabsel].testsprites_size].texturepalette=state_ta.paletteselector;
|
testsprite->texturesizex=state_ta.textureusize;
|
||||||
state_ta.grab[state_ta.grabsel].testsprites_size=state_ta.grab[state_ta.grabsel].testsprites_size+1;
|
testsprite->texturesizey=state_ta.texturevsize;
|
||||||
/* test video end */
|
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)
|
else if (state_ta.global_paratype == 4)
|
||||||
@ -613,16 +610,45 @@ WRITE64_HANDLER( ta_fifo_poly_w )
|
|||||||
#if DEBUG_VERTICES
|
#if DEBUG_VERTICES
|
||||||
if (state_ta.grab[state_ta.grabsel].testvertices_size <= 65530)
|
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]);
|
/* add a vertex to our 'testverticies' list */
|
||||||
state_ta.grab[state_ta.grabsel].showvertices[state_ta.grab[state_ta.grabsel].testvertices_size].y=u2f(tafifo_buff[2]);
|
/* this is used for 3d stuff, ie most of the graphics (see guilty gear, confidential mission, maze of the kings etc.) */
|
||||||
state_ta.grab[state_ta.grabsel].showvertices[state_ta.grab[state_ta.grabsel].testvertices_size].endofstrip=state_ta.endofstrip;
|
/* -- 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=state_ta.grab[state_ta.grabsel].testvertices_size+1;
|
state_ta.grab[state_ta.grabsel].testvertices_size++;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} // if (state_ta.tafifo_pos == 0)
|
}
|
||||||
|
|
||||||
|
WRITE64_HANDLER( ta_fifo_poly_w )
|
||||||
|
{
|
||||||
|
|
||||||
|
if (mem_mask == U64(0xffffffffffffffff)) // 64 bit
|
||||||
|
{
|
||||||
|
tafifo_buff[state_ta.tafifo_pos]=(UINT32)data;
|
||||||
|
tafifo_buff[state_ta.tafifo_pos+1]=(UINT32)(data >> 32);
|
||||||
|
#if DEBUG_FIFO_POLY
|
||||||
|
mame_printf_debug("ta_fifo_poly_w: Unmapped write64 %08x = %llx -> %08x %08x\n", 0x10000000+offset*8, data, tafifo_buff[state_ta.tafifo_pos], tafifo_buff[state_ta.tafifo_pos+1]);
|
||||||
|
#endif
|
||||||
|
state_ta.tafifo_pos += 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
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)
|
||||||
|
process_ta_fifo(space->machine);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE64_HANDLER( ta_fifo_yuv_w )
|
WRITE64_HANDLER( ta_fifo_yuv_w )
|
||||||
|
Loading…
Reference in New Issue
Block a user