From 62463f86b06f569049974ca0212262cc92a69c29 Mon Sep 17 00:00:00 2001 From: Melissa Goad Date: Thu, 20 Apr 2017 20:41:38 -0500 Subject: [PATCH] Fixes --- src/vid_nv_riva128.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/vid_nv_riva128.c b/src/vid_nv_riva128.c index 4040459c4..98a1ec13a 100644 --- a/src/vid_nv_riva128.c +++ b/src/vid_nv_riva128.c @@ -452,6 +452,7 @@ static void riva128_pmc_write(uint32_t addr, uint32_t val, void *p) static void riva128_pmc_interrupt(int num, void *p) { + pclog("RIVA 128 PMC interrupt #%d fired!", num); riva128_t *riva128 = (riva128_t *)p; svga_t *svga = &riva128->svga; @@ -866,6 +867,7 @@ static void riva128_ptimer_write(uint32_t addr, uint32_t val, void *p) static void riva128_ptimer_interrupt(int num, void *p) { + pclog("RIVA 128 PTIMER interrupt #%d fired!", num); riva128_t *riva128 = (riva128_t *)p; svga_t *svga = &riva128->svga; @@ -2008,14 +2010,18 @@ static void riva128_ptimer_tick(void *p) riva128_t *riva128 = (riva128_t *)p; svga_t *svga = &riva128->svga; - uint64_t time = riva128->ptimer.clock_mul - riva128->ptimer.clock_div; + double time = (double)riva128->ptimer.clock_mul / (double)riva128->ptimer.clock_div; time *= 1000; uint64_t tmp = riva128->ptimer.time; - riva128->ptimer.time += time << 5; + riva128->ptimer.time += (uint64_t)time << 5; - if(((uint32_t)tmp < riva128->ptimer.alarm) && ((uint32_t)riva128->ptimer.time >= riva128->ptimer.alarm)) riva128_ptimer_interrupt(0, riva128); + if(((uint32_t)tmp < riva128->ptimer.alarm) && ((uint32_t)riva128->ptimer.time >= riva128->ptimer.alarm)) + { + pclog("RIVA 128 PTIMER ALARM interrupt fired!"); + riva128_ptimer_interrupt(0, riva128); + } } static void riva128_mclk_poll(void *p) @@ -2820,6 +2826,9 @@ static void *riva128_init() pci_add(riva128_pci_read, riva128_pci_write, riva128); + riva128->ptimer.clock_mul = 1; + riva128->ptimer.clock_div = 1; + //Some bullshit default values so that the emulator won't shit itself trying to boot. These'll be overwritten by the video BIOS anyway. riva128->pramdac.m_m = 0x03; riva128->pramdac.m_n = 0xc2;