Vendor-specific ECP configuration register B readout, assorted Super I/O chip fixes, and gave the IBM ValuePointer 433/DXi its Super I/O chip.

This commit is contained in:
OBattler
2025-08-12 17:59:59 +02:00
parent c4ef6d6eeb
commit a4bdac000f
20 changed files with 125 additions and 57 deletions

View File

@@ -123,8 +123,9 @@ lpt_handler(pc87306_t *dev)
{
int temp;
uint16_t lptba;
uint16_t lpt_port = LPT1_ADDR;
uint8_t lpt_irq = LPT2_IRQ;
uint16_t lpt_port = LPT1_ADDR;
uint8_t lpt_irq = LPT2_IRQ;
uint8_t cnfgb_readout = 0x08;
lpt_port_remove(dev->lpt);
@@ -159,6 +160,10 @@ lpt_handler(pc87306_t *dev)
if (dev->regs[0x1b] & 0x10)
lpt_irq = (dev->regs[0x1b] & 0x20) ? 7 : 5;
cnfgb_readout |= (lpt_irq == 5) ? 0x30 : 0x00;
cnfgb_readout |= (dev->regs[0x18] & 0x06) >> 1;
lpt_set_cnfgb_readout(dev->lpt, cnfgb_readout);
lpt_set_ext(dev->lpt, !!(dev->regs[0x02] & 0x80));
lpt_set_epp(dev->lpt, !!(dev->regs[0x04] & 0x01));
@@ -168,6 +173,9 @@ lpt_handler(pc87306_t *dev)
lpt_port_setup(dev->lpt, lpt_port);
lpt_port_irq(dev->lpt, lpt_irq);
if ((dev->regs[0x18] & 0x06) != 0x00)
lpt_port_dma(dev->lpt, (dev->regs[0x18] & 0x08) ? 3 : 1);
}
static void
@@ -382,7 +390,7 @@ pc87306_write(uint16_t port, uint8_t val, void *priv)
pc87306_gpio_handler(dev);
break;
case 0x18:
if (valxor & (0x06)) {
if (valxor & (0x0e)) {
lpt_port_remove(dev->lpt);
if ((dev->regs[0x00] & 0x01) && !(dev->regs[0x02] & 0x01))
lpt_handler(dev);
@@ -430,15 +438,21 @@ pc87306_read(uint16_t port, void *priv)
index = (port & 1) ? 0 : 1;
dev->tries = 0;
if (index)
if (dev->tries == 0xff) {
ret = 0x88;
dev->tries = 0xfe;
} else if (dev->tries == 0xfe) {
ret = 0x00;
dev->tries = 0;
} else if (index) {
ret = dev->cur_reg & 0x1f;
else {
dev->tries = 0;
} else {
if (dev->cur_reg == 8)
ret = 0x70;
else if (dev->cur_reg < 28)
ret = dev->regs[dev->cur_reg];
dev->tries = 0;
}
return ret;
@@ -451,6 +465,8 @@ pc87306_reset_common(void *priv)
memset(dev->regs, 0, 29);
dev->tries = 0xff;
dev->regs[0x00] = 0x0B;
dev->regs[0x01] = 0x01;
dev->regs[0x03] = 0x01;