Added SiS 550x, 558x, 559x, (5)600, UMC UM8890, UMC UM8663 Super I/O Chips, UMC UM8673F and Winbond W83769F IDE Contollers, and a number of machines, and fixes to the UM888x 486 chipset.

This commit is contained in:
OBattler
2024-02-22 00:52:20 +01:00
parent c902282dbf
commit 58a0c840c1
54 changed files with 10672 additions and 2289 deletions

View File

@@ -52,12 +52,14 @@ extern "C" {
#define ACPI_ENABLE 0xf1
#define ACPI_DISABLE 0xf0
#define VEN_ALI 0x010b9
#define VEN_INTEL 0x08086
#define VEN_SIS 0x01039
#define VEN_SMC 0x01055
#define VEN_VIA 0x01106
#define VEN_VIA_596B 0x11106
#define VEN_ALI 0x010b9
#define VEN_INTEL 0x08086
#define VEN_SIS_5582 0x01039
#define VEN_SIS_5595_1997 0x11039
#define VEN_SIS_5595 0x21039
#define VEN_SMC 0x01055
#define VEN_VIA 0x01106
#define VEN_VIA_596B 0x11106
typedef struct acpi_regs_t {
uint8_t acpitst;
@@ -76,6 +78,25 @@ typedef struct acpi_regs_t {
uint8_t gporeg[4];
uint8_t extiotrapsts;
uint8_t extiotrapen;
uint8_t enter_c2_ps;
uint8_t enter_c3_ps;
uint8_t reg_12;
uint8_t reg_13;
uint8_t smi_cmd;
uint8_t reg_24;
uint8_t reg_25;
uint8_t reg_26;
uint8_t smi_en_val;
uint8_t smi_dis_val;
uint8_t mail_box;
uint8_t reg_2b;
uint8_t gp_tmr;
uint8_t leg_sts;
uint8_t leg_en;
uint8_t tst_ctl;
uint8_t reg_34;
uint8_t index;
uint8_t reg_ff;
uint16_t pmsts;
uint16_t pmen;
uint16_t pmcntrl;
@@ -91,6 +112,15 @@ typedef struct acpi_regs_t {
uint16_t gpsmien;
uint16_t pscntrl;
uint16_t gpscists;
uint16_t reg_14;
uint16_t reg_16;
uint16_t reg_18;
uint16_t reg_1a;
uint16_t reg_1c;
uint16_t gpe_mul;
uint16_t gpe_ctl;
uint16_t gpe_smi;
uint16_t gpe_rl;
int smi_lock;
int smi_active;
uint32_t pcntrl;
@@ -107,7 +137,12 @@ typedef struct acpi_regs_t {
uint32_t gpo_val;
uint32_t gpi_val;
uint32_t extsmi_val;
uint32_t pad0;
uint32_t reg_0c;
uint32_t gpe_sts;
uint32_t gpe_en;
uint32_t gpe_pin;
uint32_t gpe_io;
uint32_t gpe_pol;
} acpi_regs_t;
typedef struct acpi_t {
@@ -128,11 +163,15 @@ typedef struct acpi_t {
pc_timer_t timer;
pc_timer_t resume_timer;
pc_timer_t pwrbtn_timer;
pc_timer_t gp_timer;
pc_timer_t per_timer;
nvr_t *nvr;
apm_t *apm;
void *i2c;
void (*trap_update)(void *priv);
void *trap_priv;
void *smbus;
void *priv;
} acpi_t;
/* Global variables. */
@@ -145,6 +184,9 @@ extern const device_t acpi_intel_device;
extern const device_t acpi_smc_device;
extern const device_t acpi_via_device;
extern const device_t acpi_via_596b_device;
extern const device_t acpi_sis_5582_device;
extern const device_t acpi_sis_5595_1997_device;
extern const device_t acpi_sis_5595_device;
/* Functions */
extern void acpi_update_irq(acpi_t *dev);
@@ -163,6 +205,12 @@ extern void acpi_set_nvr(acpi_t *dev, nvr_t *nvr);
extern void acpi_set_trap_update(acpi_t *dev, void (*update)(void *priv), void *priv);
extern uint8_t acpi_ali_soft_smi_status_read(acpi_t *dev);
extern void acpi_ali_soft_smi_status_write(acpi_t *dev, uint8_t soft_smi);
extern void * acpi_get_smbus(void *priv);
extern void acpi_sis5582_pmu_event(void *priv);
extern void acpi_sis5595_smi_raise(void *priv);
extern void acpi_sis5595_pmu_event(void *priv);
extern void acpi_sis5595_smbus_event(void *priv);
extern void acpi_sis5595_software_smi(void *priv);
#ifdef __cplusplus
}

View File

@@ -130,8 +130,16 @@ extern const device_t sis_85c471_device;
extern const device_t sis_85c496_device;
extern const device_t sis_85c496_ls486e_device;
extern const device_t sis_85c50x_device;
extern const device_t sis_550x_85c503_device;
extern const device_t sis_85c50x_5503_device;
extern const device_t sis_550x_device;
extern const device_t sis_5511_device;
extern const device_t sis_5571_device;
extern const device_t sis_5581_device;
extern const device_t sis_5591_1997_device;
extern const device_t sis_5591_device;
extern const device_t sis_5600_1997_device;
extern const device_t sis_5600_device;
/* ST */
extern const device_t stpc_client_device;
@@ -144,6 +152,8 @@ extern const device_t stpc_lpt_device;
/* UMC */
extern const device_t umc_8886f_device;
extern const device_t umc_8886af_device;
extern const device_t umc_8886bf_device;
extern const device_t umc_8890_device;
extern const device_t umc_hb4_device;
/* VIA */

View File

@@ -202,6 +202,7 @@ extern void device_context(const device_t *dev);
extern void device_context_inst(const device_t *dev, int inst);
extern void device_context_restore(void);
extern void *device_add(const device_t *d);
extern void *device_add_linked(const device_t *d, void *priv);
extern void *device_add_parameters(const device_t *dev, void *params);
extern void device_add_ex(const device_t *dev, void *priv);
extern void device_add_ex_parameters(const device_t *dev, void *priv, void *params);
@@ -217,6 +218,7 @@ extern void *device_cadd_inst(const device_t *dev, const device_t *cd, int inst)
extern void *device_cadd_inst_parameters(const device_t *dev, const device_t *cd, int inst, void *params);
extern void device_cadd_inst_ex(const device_t *dev, const device_t *cd, void *priv, int inst);
extern void device_cadd_inst_ex_parameters(const device_t *dev, const device_t *cd, void *priv, int inst, void *params);
extern void *device_get_common_priv(void);
extern void device_close_all(void);
extern void device_reset_all(uint32_t match_flags);
extern void *device_find_first_priv(uint32_t match_flags);

View File

@@ -77,8 +77,16 @@ extern const device_t ide_cmd646_device; /* CMD PCI-646 *
extern const device_t ide_cmd646_legacy_only_device; /* CMD PCI-646 (Legacy Mode Only) */
extern const device_t ide_cmd646_single_channel_device; /* CMD PCI-646 (Only primary channel) */
extern const device_t ide_opti611_vlb_device; /* OPTi 82c611/611A VLB */
extern const device_t ide_opti611_vlb_sec_device; /* OPTi 82c611/611A VLB (Secondary channel) */
extern const device_t ide_opti611_vlb_device; /* OPTi 82c611/611A VLB */
extern const device_t ide_opti611_vlb_sec_device; /* OPTi 82c611/611A VLB (Secondary channel) */
extern const device_t ide_um8673f_device; /* UMC UM8673F */
extern const device_t ide_um8886af_device; /* UMC UM8886AF */
extern const device_t ide_w83769f_vlb_device; /* Winbond W83769F VLB */
extern const device_t ide_w83769f_vlb_34_device; /* Winbond W83769F VLB (Port 34h) */
extern const device_t ide_w83769f_pci_device; /* Winbond W83769F PCI */
extern const device_t ide_w83769f_pci_34_device; /* Winbond W83769F PCI (Port 34h) */
extern const device_t ide_ter_device;
extern const device_t ide_ter_pnp_device;

View File

@@ -43,6 +43,7 @@ typedef struct sff8038i_t
uint8_t irq_state;
uint8_t channel;
uint8_t irq_line;
uint8_t mirq;
uint16_t base;
uint16_t pad;
uint32_t ptr;
@@ -72,10 +73,9 @@ extern void sff_bus_master_reset(sff8038i_t *dev);
extern void sff_set_slot(sff8038i_t *dev, int slot);
extern void sff_set_irq_line(sff8038i_t *dev, int irq_line);
extern void sff_set_irq_mode(sff8038i_t *dev, int irq_mode);
extern void sff_set_irq_pin(sff8038i_t *dev, int irq_pin);
extern void sff_set_irq_level(sff8038i_t *dev, int irq_level);
extern void sff_set_mirq(sff8038i_t *dev, uint8_t mirq);
#endif /*EMU_HDC_IDE_SFF8038I_H*/

View File

@@ -245,8 +245,12 @@ enum {
MACHINE_CHIPSET_SIS_471,
MACHINE_CHIPSET_SIS_496,
MACHINE_CHIPSET_SIS_501,
MACHINE_CHIPSET_SIS_5501,
MACHINE_CHIPSET_SIS_5511,
MACHINE_CHIPSET_SIS_5571,
MACHINE_CHIPSET_SIS_5581,
MACHINE_CHIPSET_SIS_5591,
MACHINE_CHIPSET_SIS_5600,
MACHINE_CHIPSET_SMSC_VICTORYBX_66,
MACHINE_CHIPSET_STPC_CLIENT,
MACHINE_CHIPSET_STPC_CONSUMER_II,
@@ -641,6 +645,11 @@ extern int machine_at_p54sp4_init(const machine_t *);
extern int machine_at_sq588_init(const machine_t *);
extern int machine_at_p54sps_init(const machine_t *);
extern int machine_at_ms5109_init(const machine_t *);
extern int machine_at_torino_init(const machine_t *);
extern int machine_at_hot539_init(const machine_t *);
/* m_at_socket7_3v.c */
extern int machine_at_p54tp4xe_init(const machine_t *);
extern int machine_at_p54tp4xe_mr_init(const machine_t *);
@@ -669,6 +678,8 @@ extern int machine_at_ms5124_init(const machine_t *);
extern int machine_at_amis727_init(const machine_t *);
extern int machine_at_vectra54_init(const machine_t *);
extern int machine_at_5sbm2_init(const machine_t *);
/* m_at_socket7.c */
extern int machine_at_acerv35n_init(const machine_t *);
extern int machine_at_p55t2p4_init(const machine_t *);
@@ -718,6 +729,12 @@ extern int machine_at_cb52xsi_init(const machine_t *);
extern int machine_at_m560_init(const machine_t *);
extern int machine_at_ms5164_init(const machine_t *);
extern int machine_at_sp97xv_init(const machine_t *);
extern int machine_at_sq578_init(const machine_t *);
extern int machine_at_5sg100_init(const machine_t *);
extern int machine_at_ms5172_init(const machine_t *);
/* m_at_sockets7.c */
extern int machine_at_p5a_init(const machine_t *);
extern int machine_at_m579_init(const machine_t *);
@@ -780,6 +797,8 @@ extern int machine_at_vei8_init(const machine_t *);
extern int machine_at_borapro_init(const machine_t *);
extern int machine_at_ms6168_init(const machine_t *);
extern int machine_at_p6f99_init(const machine_t *);
/* m_at_slot2.c */
extern int machine_at_6gxu_init(const machine_t *);
extern int machine_at_s2dge_init(const machine_t *);

View File

@@ -122,6 +122,8 @@ extern void nvr_at_handler(int set, uint16_t base, nvr_t *nvr);
extern void nvr_at_sec_handler(int set, uint16_t base, nvr_t *nvr);
extern void nvr_at_index_read_handler(int set, uint16_t base, nvr_t *nvr);
extern void nvr_read_addr_set(int set, nvr_t *nvr);
extern uint8_t nvr_get_index(void *priv, uint8_t addr_id);
extern void nvr_at_data_port(int set, nvr_t *nvr);
extern void nvr_wp_set(int set, int h, nvr_t *nvr);
extern void nvr_via_wp_set(int set, int reg, nvr_t *nvr);
extern void nvr_bank_set(int base, uint8_t bank, nvr_t *nvr);

View File

@@ -286,6 +286,7 @@ extern const device_t via_vp3_agp_device;
extern const device_t via_mvp3_agp_device;
extern const device_t via_apro_agp_device;
extern const device_t via_vt8601_agp_device;
extern const device_t sis_5xxx_agp_device;
#endif
#endif /*EMU_PCI_H*/

View File

@@ -75,6 +75,12 @@ extern const device_t ps1_m2133_sio;
#if defined(DEV_BRANCH) && defined(USE_SIO_DETECT)
extern const device_t sio_detect_device;
#endif
extern const device_t um8663af_device;
extern const device_t um8663af_ide_device;
extern const device_t um8663af_sec_device;
extern const device_t um8663bf_device;
extern const device_t um8663bf_ide_device;
extern const device_t um8663bf_sec_device;
extern const device_t um8669f_device;
extern const device_t um8669f_ide_device;
extern const device_t um8669f_ide_sec_device;

View File

@@ -0,0 +1,78 @@
/*
* 86Box A hypervisor and IBM PC system emulator that specializes in
* running old operating systems and software designed for IBM
* PC systems and compatibles from 1981 through fairly recent
* system designs based on the PCI bus.
*
* This file is part of the 86Box distribution.
*
* Header for the implementation of the SiS 55xx Pentium
* PCI/ISA Chipsets.
*
* Authors: Miran Grca, <mgrca8@gmail.com>
*
* Copyright 2019-2020 Miran Grca.
*/
#ifndef EMU_SIS_55XX_H
#define EMU_SIS_55XX_H
typedef struct
{
uint8_t sb_pci_slot;
uint8_t ide_bits_1_3_writable;
uint8_t usb_enabled;
uint8_t *pmu_regs;
sff8038i_t *bm[2];
acpi_t *acpi;
} sis_55xx_common_t;
extern void sis_5511_host_to_pci_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5511_host_to_pci_read(int addr, void *priv);
extern void sis_5571_host_to_pci_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5571_host_to_pci_read(int addr, void *priv);
extern void sis_5581_host_to_pci_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5581_host_to_pci_read(int addr, void *priv);
extern void sis_5591_host_to_pci_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5591_host_to_pci_read(int addr, void *priv);
extern void sis_5600_host_to_pci_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5600_host_to_pci_read(int addr, void *priv);
extern void sis_5513_pci_to_isa_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5513_pci_to_isa_read(int addr, void *priv);
extern void sis_5513_ide_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5513_ide_read(int addr, void *priv);
extern void sis_5572_usb_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5572_usb_read(int addr, void *priv);
extern void sis_5595_pmu_write(int addr, uint8_t val, void *priv);
extern uint8_t sis_5595_pmu_read(int addr, void *priv);
extern const device_t sis_5511_h2p_device;
extern const device_t sis_5571_h2p_device;
extern const device_t sis_5581_h2p_device;
extern const device_t sis_5591_h2p_device;
extern const device_t sis_5600_h2p_device;
extern const device_t sis_5513_p2i_device;
extern const device_t sis_5572_p2i_device;
extern const device_t sis_5582_p2i_device;
extern const device_t sis_5595_1997_p2i_device;
extern const device_t sis_5595_p2i_device;
extern const device_t sis_5513_ide_device;
extern const device_t sis_5572_ide_device;
extern const device_t sis_5582_ide_device;
extern const device_t sis_5591_5600_ide_device;
extern const device_t sis_5572_usb_device;
extern const device_t sis_5582_usb_device;
extern const device_t sis_5595_usb_device;
extern const device_t sis_5595_pmu_device;
extern const device_t sis_5595_1997_pmu_device;
extern const device_t sis_55xx_common_device;
#endif /*EMU_SIS_55XX_H*/

View File

@@ -15,8 +15,8 @@
* Copyright 2020 RichardG.
*/
#ifndef EMU_SMBUS_PIIX4_H
#define EMU_SMBUS_PIIX4_H
#ifndef EMU_SMBUS_H
#define EMU_SMBUS_H
#define SMBUS_PIIX4_BLOCK_DATA_SIZE 32
#define SMBUS_PIIX4_BLOCK_DATA_MASK (SMBUS_PIIX4_BLOCK_DATA_SIZE - 1)
@@ -24,6 +24,9 @@
#define SMBUS_ALI7101_BLOCK_DATA_SIZE 32
#define SMBUS_ALI7101_BLOCK_DATA_MASK (SMBUS_ALI7101_BLOCK_DATA_SIZE - 1)
#define SMBUS_SIS5595_BLOCK_DATA_SIZE 32
#define SMBUS_SIS5595_BLOCK_DATA_MASK (SMBUS_ALI7101_BLOCK_DATA_SIZE - 1)
enum {
SMBUS_PIIX4 = 0,
SMBUS_VIA = 1
@@ -63,16 +66,47 @@ typedef struct smbus_ali7101_t {
void *i2c;
} smbus_ali7101_t;
extern void smbus_piix4_remap(smbus_piix4_t *dev, uint16_t new_io_base, uint8_t enable);
extern void smbus_piix4_setclock(smbus_piix4_t *dev, int clock);
typedef struct smbus_sis5595_t {
uint32_t local;
uint16_t stat;
uint16_t next_stat;
uint16_t ctl;
uint8_t cmd;
uint8_t addr;
uint8_t saved_addr;
uint8_t block_ptr;
uint8_t count;
uint8_t data0;
uint8_t data1;
uint8_t alias;
uint8_t reg_ff;
uint8_t index;
uint8_t irq_enable;
uint8_t irq_state;
uint8_t data[SMBUS_SIS5595_BLOCK_DATA_SIZE];
pc_timer_t response_timer;
void *i2c;
} smbus_sis5595_t;
extern void smbus_ali7101_remap(smbus_ali7101_t *dev, uint16_t new_io_base, uint8_t enable);
extern void smbus_piix4_remap(smbus_piix4_t *dev, uint16_t new_io_base, uint8_t enable);
extern void smbus_piix4_setclock(smbus_piix4_t *dev, int clock);
extern void smbus_ali7101_remap(smbus_ali7101_t *dev, uint16_t new_io_base, uint8_t enable);
extern void smbus_sis5595_irq_enable(void *priv, uint8_t enable);
extern uint8_t smbus_sis5595_read_index(void *priv);
extern uint8_t smbus_sis5595_read_data(void *priv);
extern void smbus_sis5595_write_index(void *priv, uint8_t val);
extern void smbus_sis5595_write_data(void *priv, uint8_t val);
#ifdef EMU_DEVICE_H
extern const device_t piix4_smbus_device;
extern const device_t via_smbus_device;
extern const device_t ali7101_smbus_device;
extern const device_t sis5595_smbus_device;
#endif
#endif /*EMU_SMBUS_PIIX4_H*/
#endif /*EMU_SMBUS_H*/

View File

@@ -368,8 +368,9 @@ extern const device_t gd5434_onboard_pci_device;
extern const device_t gd5434_vlb_device;
extern const device_t gd5434_pci_device;
extern const device_t gd5436_pci_device;
extern const device_t gd5440_onboard_pci_device;
extern const device_t gd5436_onboard_pci_device;
extern const device_t gd5440_pci_device;
extern const device_t gd5440_onboard_pci_device;
extern const device_t gd5446_pci_device;
extern const device_t gd5446_stb_pci_device;
extern const device_t gd5480_pci_device;
@@ -539,6 +540,7 @@ extern const device_t tgui9440_vlb_device;
extern const device_t tgui9440_pci_device;
extern const device_t tgui9440_onboard_pci_device;
extern const device_t tgui9660_pci_device;
extern const device_t tgui9660_onboard_pci_device;
extern const device_t tgui9680_pci_device;
/* IBM PS/1 (S)VGA */