PIC rewrite, proper SMRAM API, complete SiS 471 rewrite and addition of 40x, 460, and 461, changes to mem.c/h, disabled Voodoo memory dumping on exit, bumped SDL Hardware scale quality to 2, bumped IDE/ATAPI drives to ATA-6, finally bumped emulator version to 3.0, redid the bus type ID's to allow for planned ATAPI hard disks, made SST flash set its high mappings to the correct address if the CPU is 16-bit, and added the SiS 401 AMI 486 Clone, AOpen Vi15G, and the Soyo 4SA2 (486 with SiS 496/497 that can boot from CD-ROM), assorted 286+ protected mode fixes (for slightly more accuracy), and fixes to 808x emulation (MS Word 1.0 and 1.10 for DOS now work correctly from floppy).
This commit is contained in:
@@ -150,7 +150,7 @@ irq_lower(esdi_t *esdi)
|
||||
static __inline void
|
||||
irq_update(esdi_t *esdi)
|
||||
{
|
||||
if (esdi->irqstat && !((pic2.pend | pic2.ins) & 0x40) && !(esdi->fdisk & 2))
|
||||
if (esdi->irqstat && !((pic2.irr | pic2.isr) & 0x40) && !(esdi->fdisk & 2))
|
||||
picint(1 << 14);
|
||||
}
|
||||
|
||||
|
||||
@@ -486,7 +486,7 @@ static void ide_hd_identify(ide_t *ide)
|
||||
ide_log("Default CHS translation: %i, %i, %i\n", ide->buffer[1], ide->buffer[3], ide->buffer[6]);
|
||||
|
||||
ide_padstr((char *) (ide->buffer + 10), "", 20); /* Serial Number */
|
||||
ide_padstr((char *) (ide->buffer + 23), EMU_VERSION, 8); /* Firmware */
|
||||
ide_padstr((char *) (ide->buffer + 23), EMU_VERSION_EX, 8); /* Firmware */
|
||||
ide_padstr((char *) (ide->buffer + 27), device_identify, 40); /* Model */
|
||||
ide->buffer[20] = 3; /*Buffer type*/
|
||||
ide->buffer[21] = 512; /*Buffer size*/
|
||||
@@ -533,8 +533,8 @@ static void ide_hd_identify(ide_t *ide)
|
||||
|
||||
if (!ide_boards[ide->board]->force_ata3 && ide_bm[ide->board]) {
|
||||
ide->buffer[47] = 32 | 0x8000; /*Max sectors on multiple transfer command*/
|
||||
ide->buffer[80] = 0x1e; /*ATA-1 to ATA-4 supported*/
|
||||
ide->buffer[81] = 0x18; /*ATA-4 revision 18 supported*/
|
||||
ide->buffer[80] = 0x7e; /*ATA-1 to ATA-6 supported*/
|
||||
ide->buffer[81] = 0x19; /*ATA-6 revision 3a supported*/
|
||||
} else {
|
||||
ide->buffer[47] = 16 | 0x8000; /*Max sectors on multiple transfer command*/
|
||||
ide->buffer[80] = 0x0e; /*ATA-1 to ATA-3 supported*/
|
||||
@@ -594,6 +594,12 @@ ide_identify(ide_t *ide)
|
||||
ide->buffer[53] |= 0x0004;
|
||||
for (i = 0; i <= max_udma; i++)
|
||||
ide->buffer[88] |= (1 << i);
|
||||
if (max_udma >= 4)
|
||||
ide->buffer[93] = 0x6000; /* Drive reports 80-conductor cable */
|
||||
if (ide->channel)
|
||||
ide->buffer[93] |= 0x0d00;
|
||||
else
|
||||
ide->buffer[93] |= 0x007d;
|
||||
}
|
||||
|
||||
if ((max_sdma != -1) || (max_mdma != -1) || (max_udma != -1)) {
|
||||
@@ -620,9 +626,6 @@ ide_identify(ide_t *ide)
|
||||
ide->buffer[88] |= d;
|
||||
ide_log("PIDENTIFY DMA Mode: %04X, %04X\n", ide->buffer[62], ide->buffer[63]);
|
||||
}
|
||||
|
||||
if (max_udma >= 4)
|
||||
ide->buffer[93] = 0x6000; /* Drive reports 80-conductor cable */
|
||||
}
|
||||
|
||||
|
||||
@@ -724,7 +727,7 @@ ide_set_features(ide_t *ide)
|
||||
mode = (features_data >> 3);
|
||||
submode = features_data & 7;
|
||||
|
||||
switch(mode) {
|
||||
switch (mode) {
|
||||
case 0x00: /* PIO default */
|
||||
if (submode != 0)
|
||||
return 0;
|
||||
|
||||
@@ -165,7 +165,7 @@ irq_lower(mfm_t *mfm)
|
||||
static void
|
||||
irq_update(mfm_t *mfm)
|
||||
{
|
||||
if (mfm->irqstat && !((pic2.pend | pic2.ins) & 0x40) && !(mfm->fdisk & 2))
|
||||
if (mfm->irqstat && !((pic2.irr | pic2.isr) & 0x40) && !(mfm->fdisk & 2))
|
||||
picint(1 << 14);
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ hdd_string_to_bus(char *str, int cdrom)
|
||||
if (! strcmp(str, "none"))
|
||||
return(HDD_BUS_DISABLED);
|
||||
|
||||
if (! strcmp(str, "mfm")) {
|
||||
if (! strcmp(str, "mfm") || ! strcmp(str, "rll")) {
|
||||
if (cdrom) {
|
||||
no_cdrom:
|
||||
ui_msgbox_header(MBX_ERROR, (wchar_t *) IDS_2130, (wchar_t *) IDS_4099);
|
||||
@@ -70,10 +70,10 @@ no_cdrom:
|
||||
return(HDD_BUS_IDE);
|
||||
|
||||
if (! strcmp(str, "atapi_pio_only"))
|
||||
return(HDD_BUS_IDE);
|
||||
return(HDD_BUS_ATAPI);
|
||||
|
||||
if (! strcmp(str, "atapi"))
|
||||
return(HDD_BUS_IDE);
|
||||
return(HDD_BUS_ATAPI);
|
||||
|
||||
if (! strcmp(str, "eide"))
|
||||
return(HDD_BUS_IDE);
|
||||
@@ -88,7 +88,7 @@ no_cdrom:
|
||||
return(HDD_BUS_IDE);
|
||||
|
||||
if (! strcmp(str, "atapi_pio_and_dma"))
|
||||
return(HDD_BUS_IDE);
|
||||
return(HDD_BUS_ATAPI);
|
||||
|
||||
if (! strcmp(str, "scsi"))
|
||||
return(HDD_BUS_SCSI);
|
||||
@@ -120,7 +120,11 @@ hdd_bus_to_string(int bus, int cdrom)
|
||||
break;
|
||||
|
||||
case HDD_BUS_IDE:
|
||||
s = cdrom ? "atapi" : "ide";
|
||||
s = "ide";
|
||||
break;
|
||||
|
||||
case HDD_BUS_ATAPI:
|
||||
s = "atapi";
|
||||
break;
|
||||
|
||||
case HDD_BUS_SCSI:
|
||||
|
||||
@@ -1736,7 +1736,7 @@ mo_command(scsi_common_t *sc, uint8_t *cdb)
|
||||
} else {
|
||||
ide_padstr8(dev->buffer + 8, 8, EMU_NAME); /* Vendor */
|
||||
ide_padstr8(dev->buffer + 16, 16, device_identify); /* Product */
|
||||
ide_padstr8(dev->buffer + 32, 4, EMU_VERSION); /* Revision */
|
||||
ide_padstr8(dev->buffer + 32, 4, EMU_VERSION_EX); /* Revision */
|
||||
}
|
||||
idx = 36;
|
||||
|
||||
@@ -2059,13 +2059,13 @@ mo_do_identify(ide_t *ide, int ide_has_dma)
|
||||
ide_padstr((char *) (ide->buffer + 27), model, 40); /* Model */
|
||||
} else {
|
||||
snprintf(model, 40, "%s %s%02i", EMU_NAME, "86B_MO", mo->id);
|
||||
ide_padstr((char *) (ide->buffer + 23), EMU_VERSION, 8); /* Firmware */
|
||||
ide_padstr((char *) (ide->buffer + 23), EMU_VERSION_EX, 8); /* Firmware */
|
||||
ide_padstr((char *) (ide->buffer + 27), model, 40); /* Model */
|
||||
}
|
||||
|
||||
if (ide_has_dma) {
|
||||
ide->buffer[80] = 0x30; /*Supported ATA versions : ATA/ATAPI-4 ATA/ATAPI-5*/
|
||||
ide->buffer[81] = 0x15; /*Maximum ATA revision supported : ATA/ATAPI-5 T13 1321D revision 1*/
|
||||
ide->buffer[80] = 0x70; /*Supported ATA versions : ATA/ATAPI-4 ATA/ATAPI-6*/
|
||||
ide->buffer[81] = 0x19; /*Maximum ATA revision supported : ATA/ATAPI-6 T13 1410D revision 3a*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2289,8 +2289,8 @@ zip_250_identify(ide_t *ide, int ide_has_dma)
|
||||
ide_padstr((char *) (ide->buffer + 27), "IOMEGA ZIP 250 ATAPI", 40); /* Model */
|
||||
|
||||
if (ide_has_dma) {
|
||||
ide->buffer[80] = 0x30; /*Supported ATA versions : ATA/ATAPI-4 ATA/ATAPI-5*/
|
||||
ide->buffer[81] = 0x15; /*Maximum ATA revision supported : ATA/ATAPI-5 T13 1321D revision 1*/
|
||||
ide->buffer[80] = 0x70; /*Supported ATA versions : ATA/ATAPI-4 ATA/ATAPI-6*/
|
||||
ide->buffer[81] = 0x19; /*Maximum ATA revision supported : ATA/ATAPI-6 T13 1410D revision 3a*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user