All bits of BusLogic ISR register are read/write. Fixes BusLogic detection on Solaris 2.4.

This commit is contained in:
SarahW 2018-04-15 20:37:55 +01:00
commit 3feeea3bbe

View file

@ -275,7 +275,7 @@ static void process_cmd(aha154x_t *scsi);
static void set_irq(aha154x_t *scsi, uint8_t val) static void set_irq(aha154x_t *scsi, uint8_t val)
{ {
picint(1 << scsi->irq); picint(1 << scsi->irq);
scsi->isr |= val; scsi->isr |= val | ISR_ANYINTR;
} }
static void clear_irq(aha154x_t *scsi) static void clear_irq(aha154x_t *scsi)
@ -348,6 +348,11 @@ static void aha154x_out(uint16_t port, uint8_t val, void *p)
// pclog("Write command %02x %04x(%08x):%08x\n", val, CS,cs,cpu_state.pc); // pclog("Write command %02x %04x(%08x):%08x\n", val, CS,cs,cpu_state.pc);
process_cmd(scsi); process_cmd(scsi);
break; break;
case 2:
if (scsi->type == SCSI_BT545S)
scsi->isr = val;
break;
} }
} }
@ -374,9 +379,10 @@ static uint8_t aha154x_in(uint16_t port, void *p)
break; break;
case 2: /*Interrupt status register*/ case 2: /*Interrupt status register*/
temp = scsi->isr & ~0x70; if (scsi->type == SCSI_BT545S)
if (scsi->isr) temp = scsi->isr;
temp |= ISR_ANYINTR; else
temp = scsi->isr & ~0x70;
break; break;
case 3: /*???*/ case 3: /*???*/