From d1e750dd5574e14bd9ca425f670f081b7d2be16b Mon Sep 17 00:00:00 2001 From: Melissa Goad Date: Thu, 6 Apr 2017 17:45:26 -0500 Subject: [PATCH] Fix various bugs --- src/vid_nv_riva128.c | 88 +++++++++++++++++++++++++++++++------------- 1 file changed, 63 insertions(+), 25 deletions(-) diff --git a/src/vid_nv_riva128.c b/src/vid_nv_riva128.c index a9eb08a54..4040459c4 100644 --- a/src/vid_nv_riva128.c +++ b/src/vid_nv_riva128.c @@ -850,6 +850,14 @@ static void riva128_ptimer_write(uint32_t addr, uint32_t val, void *p) if((val & 0xffff) > riva128->ptimer.clock_div) val = riva128->ptimer.clock_div; riva128->ptimer.clock_mul = val & 0xffff; break; + case 0x009400: + riva128->ptimer.time &= 0x0fffffff00000000ULL; + riva128->ptimer.time |= val & 0xffffffe0; + break; + case 0x009410: + riva128->ptimer.time &= 0xffffffe0; + riva128->ptimer.time |= val & 0x0fffffff00000000ULL; + break; case 0x009420: riva128->ptimer.alarm = val & 0xffffffe0; break; @@ -2007,7 +2015,7 @@ static void riva128_ptimer_tick(void *p) uint64_t tmp = riva128->ptimer.time; riva128->ptimer.time += time << 5; - if((tmp < riva128->ptimer.alarm) && (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)) riva128_ptimer_interrupt(0, riva128); } static void riva128_mclk_poll(void *p) @@ -2025,7 +2033,7 @@ static void riva128_nvclk_poll(void *p) riva128_t *riva128 = (riva128_t *)p; svga_t *svga = &riva128->svga; - if(riva128->card_id > 0x40 && riva128->card_id != 0x03) riva128_ptimer_tick(riva128); + if(riva128->card_id < 0x40 && riva128->card_id != 0x03) riva128_ptimer_tick(riva128); riva128->nvtime += cpuclock / riva128->nvfreq; } @@ -2743,8 +2751,6 @@ static void *riva128_init() riva128->memory_size = device_get_config_int("memory"); - riva128->pgraph.pgraph_speedhack = device_get_config_int("pgraph_speedhack"); - svga_init(&riva128->svga, riva128, riva128->memory_size << 20, riva128_recalctimings, riva128_in, riva128_out, @@ -2810,6 +2816,7 @@ static void *riva128_init() riva128->pbus.intr = 0; riva128->pfifo.intr = 0; riva128->pgraph.intr = 0; + riva128->ptimer.intr = 0; pci_add(riva128_pci_read, riva128_pci_write, riva128); @@ -2892,6 +2899,58 @@ static device_config_t riva128_config[] = }, .default_int = 4 }, + { + .name = "irq", + .description = "IRQ", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "IRQ 3", + .value = 3 + }, + { + .description = "IRQ 4", + .value = 4 + }, + { + .description = "IRQ 5", + .value = 5 + }, + { + .description = "IRQ 7", + .value = 7 + }, + { + .description = "IRQ 9", + .value = 9 + }, + { + .description = "IRQ 10", + .value = 10 + }, + { + .description = "IRQ 11", + .value = 11 + }, + { + .description = "IRQ 12", + .value = 12 + }, + { + .description = "IRQ 14", + .value = 14 + }, + { + .description = "IRQ 15", + .value = 15 + }, + { + .description = "" + } + }, + .default_int = 3 + }, { .type = -1 } @@ -2899,27 +2958,6 @@ static device_config_t riva128_config[] = static device_config_t riva128zx_config[] = { - { - .name = "pgraph_speedhack", - .description = "PGRAPH speedhack", - .type = CONFIG_SELECTION, - .selection = - { - { - .description = "Off", - .value = 0, - }, - { - .description = "On", - .value = 1, - }, - { - .description = "" - } - }, - //DO NOT TURN THIS OFF YET. THE PGRAPH SPEEDHACK IS CURRENTLY NECESSARY FOR WORKING EMULATION. - .default_int = 1 - }, { .name = "memory", .description = "Memory size",