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:
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user