Implemented bare bones timing for the blitter status and fixed vertical half line counter

This commit is contained in:
Angelo Salese 2010-05-12 22:58:36 +00:00
parent ff57271d13
commit 021eef3ca4
3 changed files with 23 additions and 2 deletions

View File

@ -371,6 +371,9 @@ static MACHINE_RESET( cojag )
/* halt the CPUs */ /* halt the CPUs */
jaguargpu_ctrl_w(devtag_get_device(machine, "gpu"), G_CTRL, 0, 0xffffffff); jaguargpu_ctrl_w(devtag_get_device(machine, "gpu"), G_CTRL, 0, 0xffffffff);
jaguardsp_ctrl_w(devtag_get_device(machine, "audiocpu"), D_CTRL, 0, 0xffffffff); jaguardsp_ctrl_w(devtag_get_device(machine, "audiocpu"), D_CTRL, 0, 0xffffffff);
/* set blitter idle flag */
blitter_status = 1;
} }

View File

@ -26,6 +26,7 @@ extern UINT32 *jaguar_gpu_clut;
extern UINT32 *jaguar_dsp_ram; extern UINT32 *jaguar_dsp_ram;
extern UINT32 *jaguar_wave_rom; extern UINT32 *jaguar_wave_rom;
extern UINT8 blitter_status;
/*----------- defined in audio/jaguar.c -----------*/ /*----------- defined in audio/jaguar.c -----------*/

View File

@ -200,6 +200,7 @@ static bitmap_t *screen_bitmap;
static pen_t *pen_table; static pen_t *pen_table;
UINT8 blitter_status;
/************************************* /*************************************
@ -602,13 +603,17 @@ if (++reps % 100 == 99)
profiler_mark_end(); profiler_mark_end();
} }
static TIMER_CALLBACK( blitter_done )
{
blitter_status = 1;
}
READ32_HANDLER( jaguar_blitter_r ) READ32_HANDLER( jaguar_blitter_r )
{ {
switch (offset) switch (offset)
{ {
case B_CMD: /* B_CMD */ case B_CMD: /* B_CMD */
return 1; return blitter_status & 3;
default: default:
logerror("%08X:Blitter read register @ F022%02X\n", cpu_get_previouspc(space->cpu), offset * 4); logerror("%08X:Blitter read register @ F022%02X\n", cpu_get_previouspc(space->cpu), offset * 4);
@ -621,7 +626,11 @@ WRITE32_HANDLER( jaguar_blitter_w )
{ {
COMBINE_DATA(&blitter_regs[offset]); COMBINE_DATA(&blitter_regs[offset]);
if (offset == B_CMD) if (offset == B_CMD)
{
blitter_status = 0;
timer_set(space->machine, ATTOTIME_IN_USEC(100), NULL, 0, blitter_done);
blitter_run(space->machine); blitter_run(space->machine);
}
if (LOG_BLITTER_WRITE) if (LOG_BLITTER_WRITE)
logerror("%08X:Blitter write register @ F022%02X = %08X\n", cpu_get_previouspc(space->cpu), offset * 4, data); logerror("%08X:Blitter write register @ F022%02X = %08X\n", cpu_get_previouspc(space->cpu), offset * 4, data);
@ -649,8 +658,16 @@ READ16_HANDLER( jaguar_tom_regs_r )
return video_screen_get_hpos(space->machine->primary_screen) % (video_screen_get_width(space->machine->primary_screen) / 2); return video_screen_get_hpos(space->machine->primary_screen) % (video_screen_get_width(space->machine->primary_screen) / 2);
case VC: case VC:
return video_screen_get_vpos(space->machine->primary_screen) * 2 + gpu_regs[VBE]; {
UINT8 half_line;
if(video_screen_get_hpos(space->machine->primary_screen) >= (video_screen_get_width(space->machine->primary_screen) / 2))
half_line = 1;
else
half_line = 0;
return video_screen_get_vpos(space->machine->primary_screen) * 2 + half_line;
}
} }
return gpu_regs[offset]; return gpu_regs[offset];