diff --git a/src/nvr_ps2.c b/src/nvr_ps2.c index cb0cf554c..b51aab515 100644 --- a/src/nvr_ps2.c +++ b/src/nvr_ps2.c @@ -68,6 +68,7 @@ static void *ps2_nvr_init(device_t *info) switch (romset) { case ROM_IBMPS2_M80: f = nvr_fopen(L"ibmps2_m80_sec.nvr", L"rb"); break; + case ROM_IBMPS2_M80_486: f = nvr_fopen(L"ibmps2_m80-486_sec.nvr", L"rb"); break; } if (f) { @@ -88,6 +89,7 @@ void ps2_nvr_close(void *p) switch (romset) { case ROM_IBMPS2_M80: f = nvr_fopen(L"ibmps2_m80_sec.nvr", L"wb"); break; + case ROM_IBMPS2_M80_486: f = nvr_fopen(L"ibmps2_m80-486_sec.nvr", L"wb"); break; } if (f) { diff --git a/src/scsi/scsi_aha154x.c b/src/scsi/scsi_aha154x.c index 8632b05f7..e569da503 100644 --- a/src/scsi/scsi_aha154x.c +++ b/src/scsi/scsi_aha154x.c @@ -503,7 +503,7 @@ aha_mca_write(int port, uint8_t val, void *priv) /* Get the new assigned I/O base address. */ dev->Base = (dev->pos_regs[3] & 7) << 8; - dev->Base |= ((dev->pos_regs[3] & 0xc0) ? 4 : 0); + dev->Base |= ((dev->pos_regs[3] & 0xc0) ? 0x34 : 0x30); /* Save the new IRQ and DMA channel values. */ dev->Irq = (dev->pos_regs[4] & 0x07) + 8; @@ -578,6 +578,10 @@ aha_mca_write(int port, uint8_t val, void *priv) mem_mapping_enable(&dev->bios.mapping); mem_mapping_set_addr(&dev->bios.mapping, dev->rom_addr, ROM_SIZE); } + + /* Say hello. */ + pclog("AHA-1640: I/O=%04x, IRQ=%d, DMA=%d, BIOS @%05X, HOST ID %i\n", + dev->Base, dev->Irq, dev->DmaChannel, dev->rom_addr, dev->HostID); } } @@ -760,6 +764,7 @@ aha_init(device_t *info) dev->int_geom_writable = 0; dev->cdrom_boot = 0; dev->bit32 = 0; + dev->lba_bios = 0; dev->ven_thread = aha_thread; dev->ven_cmd_is_fast = aha_cmd_is_fast; @@ -838,6 +843,8 @@ aha_init(device_t *info) dev->bios_path = L"roms/scsi/adaptec/aha1640.bin"; dev->fw_rev = "BB01"; + dev->lba_bios = 1; + /* Enable MCA. */ dev->pos_regs[0] = 0x1F; /* MCA board ID */ dev->pos_regs[1] = 0x0F; diff --git a/src/scsi/scsi_buslogic.c b/src/scsi/scsi_buslogic.c index bf004b79c..7cca0e60e 100644 --- a/src/scsi/scsi_buslogic.c +++ b/src/scsi/scsi_buslogic.c @@ -1337,7 +1337,7 @@ buslogic_mca_write(int port, uint8_t val, void *priv) /* Get the new assigned I/O base address. */ if (dev->pos_regs[3]) { dev->Base = dev->pos_regs[3] << 8; - dev->Base |= ((dev->pos_regs[2] & 0x10) ? 4 : 0); + dev->Base |= ((dev->pos_regs[2] & 0x10) ? 0x34 : 0x30); } else { dev->Base = 0x0000; } @@ -1347,7 +1347,7 @@ buslogic_mca_write(int port, uint8_t val, void *priv) dev->DmaChannel = dev->pos_regs[5] & 0x0f; /* Extract the BIOS ROM address info. */ - if (dev->pos_regs[0] & 0xe0) switch(dev->pos_regs[0] & 0xe0) { + if (dev->pos_regs[2] & 0xe0) switch(dev->pos_regs[2] & 0xe0) { case 0xe0: /* [0]=111x xxxx */ bl->bios_addr = 0xDC000; break; @@ -1433,6 +1433,10 @@ buslogic_mca_write(int port, uint8_t val, void *priv) mem_mapping_enable(&bl->bios.mapping); mem_mapping_set_addr(&bl->bios.mapping, bl->bios_addr, ROM_SIZE); } + + /* Say hello. */ + pclog("BT-640A: I/O=%04x, IRQ=%d, DMA=%d, BIOS @%05X, HOST ID %i\n", + dev->Base, dev->Irq, dev->DmaChannel, bl->bios_addr, dev->HostID); } } @@ -1490,6 +1494,7 @@ buslogic_init(device_t *info) dev->int_geom_writable = 1; dev->cdrom_boot = 0; dev->bit32 = 0; + dev->lba_bios = 0; bl->chip = info->local; bl->PCIBase = 0; diff --git a/src/scsi/scsi_x54x.c b/src/scsi/scsi_x54x.c index 72f885573..9e17e3fab 100644 --- a/src/scsi/scsi_x54x.c +++ b/src/scsi/scsi_x54x.c @@ -1609,12 +1609,12 @@ x54x_out(uint16_t port, uint8_t val, void *priv) case CMD_BIOSCMD: /* execute BIOS */ cmd = (BIOSCMD *)dev->CmdBuf; - if (!(dev->bus & DEVICE_MCA)) { + if (!dev->lba_bios) { /* 1640 uses LBA. */ cyl = ((cmd->u.chs.cyl & 0xff) << 8) | ((cmd->u.chs.cyl >> 8) & 0xff); cmd->u.chs.cyl = cyl; } - if (dev->bus & DEVICE_MCA) { + if (dev->lba_bios) { /* 1640 uses LBA. */ x54x_log("BIOS LBA=%06lx (%lu)\n", lba32_blk(cmd), @@ -1627,7 +1627,7 @@ x54x_out(uint16_t port, uint8_t val, void *priv) cmd->u.chs.head, cmd->u.chs.sec); } - dev->DataBuf[0] = x54x_bios_command(dev, dev->max_id, cmd, (dev->bus & DEVICE_MCA)?1:0); + dev->DataBuf[0] = x54x_bios_command(dev, dev->max_id, cmd, (dev->lba_bios)?1:0); x54x_log("BIOS Completion/Status Code %x\n", dev->DataBuf[0]); dev->DataReplyLeft = 1; break; diff --git a/src/scsi/scsi_x54x.h b/src/scsi/scsi_x54x.h index cdc7b5ebf..33c926082 100644 --- a/src/scsi/scsi_x54x.h +++ b/src/scsi/scsi_x54x.h @@ -424,6 +424,7 @@ typedef struct { uint8_t max_id; uint8_t pci_slot; uint8_t bit32; + uint8_t lba_bios; mem_mapping_t mmio_mapping;