Skip to content

Commit

Permalink
Report linear mapping properly
Browse files Browse the repository at this point in the history
  • Loading branch information
Cacodemon345 committed Jan 31, 2024
1 parent f018ef2 commit 2b0a494
Showing 1 changed file with 42 additions and 15 deletions.
57 changes: 42 additions & 15 deletions src/video/vid_c&t_69000.c
Original file line number Diff line number Diff line change
Expand Up @@ -707,46 +707,65 @@ uint8_t
chips_69000_read_ext_reg(chips_69000_t* chips)
{
uint8_t index = chips->ext_index;
uint8_t val = chips->ext_regs[index];
switch (index) {
case 0x00:
return 0x2C;
val = 0x2C;
break;
case 0x01:
return 0x10;
val = 0x10;
break;
case 0x02:
return 0xC0;
val = 0xC0;
break;
case 0x03:
return 0x00;
val = 0x00;
break;
case 0x04:
return 0x62;
val = 0x62;
break;
case 0x05:
val = 0x00;
break;
case 0x06:
return 0x00;
val = chips->linear_mapping.base >> 24;
break;
case 0x08:
return 0x02;
val = 0x02;
break;
case 0x0A:
return chips->ext_regs[index] & 0x37;
val = chips->ext_regs[index] & 0x37;
break;
case 0x63:
{
uint8_t val = chips->ext_regs[index];
val = chips->ext_regs[index];
if (!(chips->ext_regs[0x62] & 0x8))
val = (val & ~8) | (i2c_gpio_get_scl(chips->i2c_ddc) << 3);

if (!(chips->ext_regs[0x62] & 0x4))
val = (val & ~4) | (i2c_gpio_get_sda(chips->i2c_ddc) << 2);

return val;
break;
}
case 0x70:
return 0x3;
val = 0x3;
break;
case 0x71:
return 0x0;
val = 0x0;
break;
}
return chips->ext_regs[index];
//if (chips->ext_index != 0x4E && chips->ext_index != 0x4F
// && (chips->ext_index < 0xE0 || chips->ext_index > 0xEB))
// pclog("C&T: Read ext reg 0x%02X, ret = 0x%02X\n", index, val);
return val;
}

void
chips_69000_write_ext_reg(chips_69000_t* chips, uint8_t val)
{
//if (chips->ext_index != 0x4E && chips->ext_index != 0x4F
//&& (chips->ext_index < 0xE0 || chips->ext_index > 0xEB))
// pclog("C&T: Write ext reg 0x%02X, ret = 0x%02X\n", chips->ext_index, val);
switch (chips->ext_index) {
case 0xA:
chips->ext_regs[chips->ext_index] = val & 0x37;
Expand Down Expand Up @@ -809,6 +828,8 @@ chips_69000_write_ext_reg(chips_69000_t* chips, uint8_t val)
chips->ext_regs[chips->ext_index] = val & 0x1f;
svga_recalctimings(&chips->svga);
break;
case 0xD2:
break;
default:
chips->ext_regs[chips->ext_index] = val;
break;
Expand Down Expand Up @@ -1002,11 +1023,13 @@ chips_69000_pci_read(int func, int addr, void *p)
{
switch (addr) {
case 0x00:
return 0x2C;
case 0x01:
return (0x102C >> ((addr & 1) * 8)) & 0xFF;
return 0x10;
case 0x02:
return 0xC0;
case 0x03:
return (0x00C0 >> ((addr & 1) * 8)) & 0xFF;
return 0x00;
case 0x04:
return chips->pci_conf_status;
case 0x07:
Expand Down Expand Up @@ -1074,6 +1097,10 @@ chips_69000_pci_write(int func, int addr, uint8_t val, void *p)
}
case 0x13:
{
if (!(chips->pci_conf_status & PCI_COMMAND_MEM)) {
chips->linear_mapping.base = val << 24;
break;
}
mem_mapping_set_addr(&chips->linear_mapping, val << 24, (1 << 24));
break;
}
Expand Down

0 comments on commit 2b0a494

Please sign in to comment.