Manually applied mooch's RIVA 128 commit;

Fixed the RIVA 128 in a way that does not affect other cards' operation.
This commit is contained in:
OBattler
2017-02-15 22:41:39 +01:00
parent 419b0b0c58
commit 77013e34c9
3 changed files with 21 additions and 14 deletions

View File

@@ -27,12 +27,13 @@ static uint8_t card_piix[256], card_piix_ide[256];
void piix_write(int func, int addr, uint8_t val, void *priv)
{
uint16_t old_base = (card_piix_ide[0x20] & 0xf0) | (card_piix_ide[0x21] << 8);
// pclog("piix_write: func=%d addr=%02x val=%02x %04x:%08x\n", func, addr, val, CS, pc);
// pclog("piix_write: func=%d addr=%02x val=%02x %04x:%08x\n", func, addr, val, CS, cpu_state.pc);
if (func > 1)
return;
if (func == 1) /*IDE*/
{
// pclog("piix_write (IDE): func=%d addr=%02x val=%02x %04x:%08x\n", func, addr, val, CS, cpu_state.pc);
switch (addr)
{
case 0x04:

View File

@@ -518,7 +518,7 @@ static uint8_t riva128_pfifo_read(uint32_t addr, void *p)
svga_t *svga = &riva128->svga;
uint8_t ret = 0;
pclog("RIVA 128 PFIFO read %08X %04X:%08X\n", addr, CS, cpu_state.pc);
// pclog("RIVA 128 PFIFO read %08X %04X:%08X\n", addr, CS, cpu_state.pc);
switch(addr)
{
@@ -646,7 +646,7 @@ static void riva128_pfifo_write(uint32_t addr, uint32_t val, void *p)
{
riva128_t *riva128 = (riva128_t *)p;
svga_t *svga = &riva128->svga;
pclog("RIVA 128 PFIFO write %08X %08X %04X:%08X\n", addr, val, CS, cpu_state.pc);
// pclog("RIVA 128 PFIFO write %08X %08X %04X:%08X\n", addr, val, CS, cpu_state.pc);
switch(addr)
{
@@ -1734,8 +1734,8 @@ static uint8_t riva128_mmio_read(uint32_t addr, void *p)
addr &= 0xffffff;
//This logging condition is necessary to prevent A CATASTROPHIC LOG BLOWUP when polling PTIMER. DO NOT REMOVE.
if(!((addr >= 0x009000) && (addr <= 0x009fff))) pclog("RIVA 128 MMIO read %08X %04X:%08X\n", addr, CS, cpu_state.pc);
//This logging condition is necessary to prevent A CATASTROPHIC LOG BLOWUP when polling PTIMER or PFIFO. DO NOT REMOVE.
if(!((addr >= 0x009000) && (addr <= 0x009fff)) && !((addr >= 0x002000) && (addr <- 0x003fff))) pclog("RIVA 128 MMIO read %08X %04X:%08X\n", addr, CS, cpu_state.pc);
switch(addr)
{

View File

@@ -382,19 +382,23 @@ uint8_t svga_in(uint16_t addr, void *p)
case 0x3C1:
return svga->attrregs[svga->attraddr];
case 0x3c2:
#if 0
if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x50)
temp = 0;
else
temp = 0x10;
#endif
if (svga_get_input_status_0_ss(svga))
if (gfxcard == GFX_RIVA128)
{
temp |= 0x10;
if ((svga->vgapal[0].r + svga->vgapal[0].g + svga->vgapal[0].b) >= 0x4e)
temp = 0;
else
temp = 0x10;
}
else
{
temp &= ~0x10;
if (svga_get_input_status_0_ss(svga))
{
temp |= 0x10;
}
else
{
temp &= ~0x10;
}
}
return temp;
case 0x3C4:
@@ -966,6 +970,8 @@ int svga_init(svga_t *svga, void *p, int memsize,
mem_mapping_add(&svga->mapping, 0xa0000, 0x20000, svga_read, svga_readw, svga_readl, svga_write, svga_writew, svga_writel, NULL, 0, svga);
memset(svga->vgapal, 0, sizeof(PALETTE));
timer_add(svga_poll, &svga->vidtime, TIMER_ALWAYS_ENABLED, svga);
svga_pri = svga;