mirror of
https://github.com/86Box/86Box.git
synced 2026-02-22 01:25:33 -07:00
Merge pull request #6814 from win2kgamer/cirrus-vbios
Cirrus: Improve VBIOS loading behavior for some machines
This commit is contained in:
@@ -84,7 +84,10 @@ opti499_recalc(opti499_t *dev)
|
||||
base = 0xd0000 + (i << 14);
|
||||
|
||||
if ((dev->regs[0x22] & ((base >= 0xe0000) ? 0x20 : 0x40)) && (dev->regs[0x23] & (1 << i))) {
|
||||
shflags = MEM_READ_INTERNAL;
|
||||
if (dev->regs[0x2d] & (1 << ((i >> 1) + 2)))
|
||||
shflags = MEM_READ_EXTANY;
|
||||
else
|
||||
shflags = MEM_READ_INTERNAL;
|
||||
shflags |= (dev->regs[0x22] & ((base >= 0xe0000) ? 0x08 : 0x10)) ? MEM_WRITE_DISABLED : MEM_WRITE_INTERNAL;
|
||||
} else {
|
||||
if (dev->regs[0x2d] & (1 << ((i >> 1) + 2)))
|
||||
|
||||
@@ -52,6 +52,14 @@
|
||||
Bit 0 = ????
|
||||
*/
|
||||
|
||||
/*
|
||||
Intel Monsoon bit meanings:
|
||||
Bit 5 = Password enable
|
||||
Bit 4 = Onboard video: 1 = disabled, 0 = enabled
|
||||
Bit 3 = CMOS Setup enable
|
||||
Bit 2 = CMOS clear: 1 = normal, 0 = clear CMOS
|
||||
*/
|
||||
|
||||
typedef struct phoenix_486_jumper_t {
|
||||
uint8_t type;
|
||||
uint8_t jumper;
|
||||
@@ -84,7 +92,11 @@ phoenix_486_jumper_write(UNUSED(uint16_t addr), uint8_t val, void *priv)
|
||||
dev->jumper = val & 0xbf;
|
||||
else if (dev->type == 2) /* PB600 */
|
||||
dev->jumper = ((val & 0xbf) | 0x02);
|
||||
else
|
||||
else if (dev->type == 3) { /* Intel Monsoon */
|
||||
dev->jumper = ((val & 0xef) | 0x2c);
|
||||
if (gfxcard[0] != 0x01)
|
||||
dev->jumper |= 0x10;
|
||||
} else
|
||||
dev->jumper = val;
|
||||
}
|
||||
|
||||
@@ -106,7 +118,11 @@ phoenix_486_jumper_reset(void *priv)
|
||||
dev->jumper = 0x00;
|
||||
else if (dev->type == 2) /* PB600 */
|
||||
dev->jumper = 0x02;
|
||||
else {
|
||||
else if (dev->type == 3) { /* Intel Monsoon */
|
||||
dev->jumper = 0x2c;
|
||||
if (gfxcard[0] != 0x01)
|
||||
dev->jumper |= 0x10;
|
||||
} else {
|
||||
dev->jumper = 0x9f;
|
||||
if (gfxcard[0] != 0x01)
|
||||
dev->jumper |= 0x40;
|
||||
@@ -176,3 +192,18 @@ const device_t phoenix_486_jumper_pci_pb600_device = {
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t phoenix_486_jumper_monsoon_device = {
|
||||
.name = "Phoenix 486 Jumper Readout (Monsoon)",
|
||||
.internal_name = "phoenix_486_jumper_monsoon",
|
||||
.flags = 0,
|
||||
.local = 3,
|
||||
.init = phoenix_486_jumper_init,
|
||||
.close = phoenix_486_jumper_close,
|
||||
.reset = phoenix_486_jumper_reset,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
|
||||
@@ -234,6 +234,7 @@ extern const device_t nec_mate_unk_device;
|
||||
extern const device_t phoenix_486_jumper_device;
|
||||
extern const device_t phoenix_486_jumper_pci_device;
|
||||
extern const device_t phoenix_486_jumper_pci_pb600_device;
|
||||
extern const device_t phoenix_486_jumper_monsoon_device;
|
||||
|
||||
extern const device_t ast_readout_device;
|
||||
extern const device_t ast_nvr_device;
|
||||
|
||||
@@ -375,6 +375,7 @@ extern const device_t gd5401_isa_device;
|
||||
extern const device_t gd5401_onboard_device;
|
||||
extern const device_t gd5402_isa_device;
|
||||
extern const device_t gd5402_onboard_device;
|
||||
extern const device_t gd5402_onboard_commodore_device;
|
||||
extern const device_t gd5420_isa_device;
|
||||
extern const device_t gd5420_onboard_device;
|
||||
extern const device_t gd5422_isa_device;
|
||||
|
||||
@@ -586,7 +586,7 @@ machine_at_cmdsl386sx25_init(const machine_t *model)
|
||||
return ret;
|
||||
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
device_add(&gd5402_onboard_device);
|
||||
device_add(&gd5402_onboard_commodore_device);
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
|
||||
@@ -389,6 +389,7 @@ machine_at_monsoon_init(const machine_t *model)
|
||||
device_add_params(&fdc37c6xx_device, (void *) (FDC37C651 | FDC37C6XX_IDE_PRI));
|
||||
|
||||
device_add(&intel_flash_bxt_device);
|
||||
device_add(&phoenix_486_jumper_monsoon_device);
|
||||
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
device_add(machine_get_vid_device(machine));
|
||||
|
||||
@@ -5905,7 +5905,7 @@ const machine_t machines[] = {
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &gd5402_onboard_device,
|
||||
.vid_device = &gd5402_onboard_commodore_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
|
||||
@@ -53,6 +53,9 @@
|
||||
#define BIOS_GD5428_DIAMOND_B1_VLB_PATH "roms/video/cirruslogic/Diamond SpeedStar PRO VLB v3.04.bin"
|
||||
#define BIOS_GD5428_ISA_PATH "roms/video/cirruslogic/5428.bin"
|
||||
#define BIOS_GD5428_MCA_PATH "roms/video/cirruslogic/SVGA141.ROM"
|
||||
#define BIOS_GD5428_ONBOARD_ACER_PATH "roms/machines/acera1g/4alo001.bin"
|
||||
#define BIOS_GD5428_ONBOARD_HP_PATH "roms/machines/vect486vl/aa0500.ami"
|
||||
#define BIOS_GD5428_ONBOARD_SNI_PATH "roms/machines/d824/fts-biosupdated824noflashbiosepromv320-320334-160.bin"
|
||||
#define BIOS_GD5428_PATH "roms/video/cirruslogic/vlbusjapan.BIN"
|
||||
#define BIOS_GD5428_BOCA_ISA_PATH_1 "roms/video/cirruslogic/boca_gd5428_1.30b_1.bin"
|
||||
#define BIOS_GD5428_BOCA_ISA_PATH_2 "roms/video/cirruslogic/boca_gd5428_1.30b_2.bin"
|
||||
@@ -4284,6 +4287,8 @@ gd54xx_init(const device_t *info)
|
||||
|
||||
case CIRRUS_ID_CLGD5402:
|
||||
if (info->local & 0x200)
|
||||
romfn = NULL;
|
||||
else if (info->local & 0x100)
|
||||
romfn = BIOS_GD5402_ONBOARD_PATH;
|
||||
else
|
||||
romfn = BIOS_GD5402_PATH;
|
||||
@@ -4326,7 +4331,14 @@ gd54xx_init(const device_t *info)
|
||||
|
||||
case CIRRUS_ID_CLGD5428:
|
||||
if (info->local & 0x200) {
|
||||
romfn = NULL;
|
||||
if (machines[machine].init == machine_at_vect486vl_init)
|
||||
romfn = BIOS_GD5428_ONBOARD_HP_PATH;
|
||||
else if (machines[machine].init == machine_at_d824_init)
|
||||
romfn = BIOS_GD5428_ONBOARD_SNI_PATH;
|
||||
else if (machines[machine].init == machine_at_acera1g_init)
|
||||
romfn = BIOS_GD5428_ONBOARD_ACER_PATH;
|
||||
else
|
||||
romfn = NULL;
|
||||
gd54xx->has_bios = 0;
|
||||
} else if (info->local & 0x100)
|
||||
if (gd54xx->vlb)
|
||||
@@ -5032,6 +5044,20 @@ const device_t gd5402_onboard_device = {
|
||||
.config = NULL,
|
||||
};
|
||||
|
||||
const device_t gd5402_onboard_commodore_device = {
|
||||
.name = "Cirrus Logic GD5402 (ISA) (ACUMOS AVGA2) (On-Board) (Commodore)",
|
||||
.internal_name = "cl_gd5402_onboard_commodore",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = CIRRUS_ID_CLGD5402 | 0x100,
|
||||
.init = gd54xx_init,
|
||||
.close = gd54xx_close,
|
||||
.reset = gd54xx_reset,
|
||||
.available = NULL,
|
||||
.speed_changed = gd54xx_speed_changed,
|
||||
.force_redraw = gd54xx_force_redraw,
|
||||
.config = NULL,
|
||||
};
|
||||
|
||||
const device_t gd5420_isa_device = {
|
||||
.name = "Cirrus Logic GD5420 (ISA)",
|
||||
.internal_name = "cl_gd5420_isa",
|
||||
@@ -5248,7 +5274,7 @@ const device_t gd5428_onboard_device = {
|
||||
.name = "Cirrus Logic GD5428 (ISA) (On-Board)",
|
||||
.internal_name = "cl_gd5428_onboard",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = CIRRUS_ID_CLGD5428,
|
||||
.local = CIRRUS_ID_CLGD5428 | 0x200,
|
||||
.init = gd54xx_init,
|
||||
.close = gd54xx_close,
|
||||
.reset = gd54xx_reset,
|
||||
@@ -5262,7 +5288,7 @@ const device_t gd5428_vlb_onboard_device = {
|
||||
.name = "Cirrus Logic GD5428 (VLB) (On-Board)",
|
||||
.internal_name = "cl_gd5428_vlb_onboard",
|
||||
.flags = DEVICE_VLB,
|
||||
.local = CIRRUS_ID_CLGD5428,
|
||||
.local = CIRRUS_ID_CLGD5428 | 0x200,
|
||||
.init = gd54xx_init,
|
||||
.close = gd54xx_close,
|
||||
.reset = gd54xx_reset,
|
||||
|
||||
Reference in New Issue
Block a user