Video, Storage and MCA changes/fixes.
1. Cirrus Logic GD54xx, Paradise/WD VGA now reset the interlace once a text mode is issued if not done automatically. 2. Paradise/WD's 15/16bpp modes using the 800x600 resolution now have the correct ma_latch, should fix most operating systems drivers using this combo. 3. More fixes (hopefully) to the accelerated pitch and rowoffset of the Trident TGUI cards (9440AGi and 96x0XGi), should fix issues with delayed displays mode changes under various operating systems (e.g.: Win3.1x). 4. Preliminary implementation of the Area Fill command of XGA, which is issued while using various painting and/or calc utilities on Win3.1x (IBM XGA updated drivers, e.g.: 2.12). 5. Preliminary (and incomplete) 4bpp XGA mode. 6. The XGA memory test for the 0xa5 using writes (used by various operating systems) no longer conflicts with DOS' XGAKIT's memory detection. 7. Small ROP fixes to both XGA and 8514/A. 8. Re-organized the mapping of the Mach32 chipset, especially when to enable the ATI mode or switching back to IBM mode, should fix LFB conflicts with various operating systems. 9. According to The OS/2 Museum, the Adaptec AHA-154xB series of SCSI cards fail the ASPI4DOS.SYS 3.36 signature check, so now make the changes accordingly. 10. Remove useless and crashy bios-less option of the Trantor T128. 11. The Image Manager 1024 card can also be used on a XT (although only if it has a V20/V30). 12. Re-organized the IBM PS/2 model 60 initialization as well as its right POS machine ID (though an update to sc.exe is still required for the POST memory amount to work normally).
This commit is contained in:
@@ -1553,10 +1553,14 @@ ncr_init(const device_t *info)
|
||||
ncr_dev->bios_ver = 1;
|
||||
}
|
||||
|
||||
if (ncr_dev->bios_ver == 1)
|
||||
fn = RT1000B_820R_ROM;
|
||||
else
|
||||
fn = RT1000B_810R_ROM;
|
||||
switch (ncr_dev->bios_ver) {
|
||||
case 0:
|
||||
fn = RT1000B_810R_ROM;
|
||||
break;
|
||||
case 1:
|
||||
fn = RT1000B_820R_ROM;
|
||||
break;
|
||||
}
|
||||
|
||||
rom_init(&ncr_dev->bios_rom, fn,
|
||||
ncr_dev->rom_addr, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
@@ -1601,9 +1605,8 @@ ncr_init(const device_t *info)
|
||||
ncr_dev->irq = device_get_config_int("irq");
|
||||
ncr_dev->t128.bios_enabled = device_get_config_int("boot");
|
||||
|
||||
if (ncr_dev->t128.bios_enabled)
|
||||
rom_init(&ncr_dev->bios_rom, T128_ROM,
|
||||
ncr_dev->rom_addr, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
rom_init(&ncr_dev->bios_rom, T128_ROM,
|
||||
ncr_dev->rom_addr, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
|
||||
mem_mapping_add(&ncr_dev->mapping, ncr_dev->rom_addr, 0x4000,
|
||||
t128_read, NULL, NULL,
|
||||
@@ -1635,15 +1638,12 @@ ncr_init(const device_t *info)
|
||||
ncr_log("%s\n", temp);
|
||||
|
||||
ncr_reset(ncr_dev, &ncr_dev->ncr);
|
||||
if (ncr_dev->type < 3 || ncr_dev->type == 4) {
|
||||
if ((ncr_dev->type < 3) || (ncr_dev->type == 4)) {
|
||||
ncr_dev->status_ctrl = STATUS_BUFFER_NOT_READY;
|
||||
ncr_dev->buffer_host_pos = 128;
|
||||
} else {
|
||||
ncr_dev->t128.status = 0x04;
|
||||
ncr_dev->t128.host_pos = 512;
|
||||
|
||||
if (!ncr_dev->t128.bios_enabled)
|
||||
ncr_dev->t128.status |= 0x80;
|
||||
}
|
||||
timer_add(&ncr_dev->timer, ncr_callback, ncr_dev, 0);
|
||||
|
||||
@@ -1894,13 +1894,6 @@ static const device_config_t t128_config[] = {
|
||||
{ .description = "" }
|
||||
},
|
||||
},
|
||||
{
|
||||
.name = "boot",
|
||||
.description = "Enable Boot ROM",
|
||||
.type = CONFIG_BINARY,
|
||||
.default_string = "",
|
||||
.default_int = 1
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
@@ -103,7 +103,7 @@ x54x_irq(x54x_t *dev, int set)
|
||||
else
|
||||
picintc(1 << irq);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -466,6 +466,7 @@ x54x_bios_command(x54x_t *x54x, uint8_t max_id, BIOSCMD *cmd, int8_t islba)
|
||||
}
|
||||
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case 0x02: /* Read Desired Sectors to Memory */
|
||||
case 0x03: /* Write Desired Sectors from Memory */
|
||||
@@ -1341,24 +1342,27 @@ x54x_in(uint16_t port, void *priv)
|
||||
if (dev->flags & X54X_INT_GEOM_WRITABLE)
|
||||
ret = dev->Geometry;
|
||||
else {
|
||||
switch (dev->Geometry) {
|
||||
default:
|
||||
case 0:
|
||||
ret = 'A';
|
||||
break;
|
||||
case 1:
|
||||
ret = 'D';
|
||||
break;
|
||||
case 2:
|
||||
ret = 'A';
|
||||
break;
|
||||
case 3:
|
||||
ret = 'P';
|
||||
break;
|
||||
}
|
||||
ret ^= 1;
|
||||
dev->Geometry++;
|
||||
dev->Geometry &= 0x03;
|
||||
if (dev->flags & X54X_HAS_SIGNATURE) {
|
||||
switch (dev->Geometry) {
|
||||
default:
|
||||
case 0:
|
||||
ret = 'A';
|
||||
break;
|
||||
case 1:
|
||||
ret = 'D';
|
||||
break;
|
||||
case 2:
|
||||
ret = 'A';
|
||||
break;
|
||||
case 3:
|
||||
ret = 'P';
|
||||
break;
|
||||
}
|
||||
ret ^= 1;
|
||||
dev->Geometry++;
|
||||
dev->Geometry &= 0x03;
|
||||
} else
|
||||
ret = 0xff;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user