ViRGE fixes :
- Create 2D FIFO thread and events on ViRGE 325 as well as DX - fixes crash when blitter first used - Wake 2D FIFO thread when writing to empty/nearly empty FIFO - fixes ViRGE 325 Windows 95 drivers - Read status register on byte access - fixes ViRGE 325 Windows 95 drivers
This commit is contained in:
parent
5da7de098e
commit
75ed8c9641
1 changed files with 18 additions and 0 deletions
|
|
@ -718,10 +718,22 @@ static void s3_virge_wait_fifo_idle(virge_t *virge)
|
||||||
|
|
||||||
static uint8_t s3_virge_mmio_read(uint32_t addr, void *p)
|
static uint8_t s3_virge_mmio_read(uint32_t addr, void *p)
|
||||||
{
|
{
|
||||||
|
virge_t *virge = (virge_t *)p;
|
||||||
|
uint8_t ret;
|
||||||
|
|
||||||
reg_reads++;
|
reg_reads++;
|
||||||
// pclog("New MMIO readb %08X\n", addr);
|
// pclog("New MMIO readb %08X\n", addr);
|
||||||
switch (addr & 0xffff)
|
switch (addr & 0xffff)
|
||||||
{
|
{
|
||||||
|
case 0x8505:
|
||||||
|
if (virge->s3d_busy || virge->virge_busy || !FIFO_EMPTY)
|
||||||
|
ret = 0x10;
|
||||||
|
else
|
||||||
|
ret = 0x10 | (1 << 5);
|
||||||
|
if (!virge->virge_busy)
|
||||||
|
wake_fifo_thread(virge);
|
||||||
|
return ret;
|
||||||
|
|
||||||
case 0x83b0: case 0x83b1: case 0x83b2: case 0x83b3:
|
case 0x83b0: case 0x83b1: case 0x83b2: case 0x83b3:
|
||||||
case 0x83b4: case 0x83b5: case 0x83b6: case 0x83b7:
|
case 0x83b4: case 0x83b5: case 0x83b6: case 0x83b7:
|
||||||
case 0x83b8: case 0x83b9: case 0x83ba: case 0x83bb:
|
case 0x83b8: case 0x83b9: case 0x83ba: case 0x83bb:
|
||||||
|
|
@ -1272,6 +1284,8 @@ static void s3_virge_queue(virge_t *virge, uint32_t addr, uint32_t val, uint32_t
|
||||||
|
|
||||||
if (FIFO_ENTRIES > 0xe000)
|
if (FIFO_ENTRIES > 0xe000)
|
||||||
wake_fifo_thread(virge);
|
wake_fifo_thread(virge);
|
||||||
|
if (FIFO_ENTRIES > 0xe000 || FIFO_ENTRIES < 8)
|
||||||
|
wake_fifo_thread(virge);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void s3_virge_mmio_write(uint32_t addr, uint8_t val, void *p)
|
static void s3_virge_mmio_write(uint32_t addr, uint8_t val, void *p)
|
||||||
|
|
@ -3815,6 +3829,10 @@ static void *s3_virge_init()
|
||||||
virge->not_full_event = thread_create_event();
|
virge->not_full_event = thread_create_event();
|
||||||
virge->render_thread = thread_create(render_thread, virge);
|
virge->render_thread = thread_create(render_thread, virge);
|
||||||
|
|
||||||
|
virge->wake_fifo_thread = thread_create_event();
|
||||||
|
virge->fifo_not_full_event = thread_create_event();
|
||||||
|
virge->fifo_thread = thread_create(fifo_thread, virge);
|
||||||
|
|
||||||
return virge;
|
return virge;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue