Merge pull request #1159 from richardg867/master

Finish work on clock generators
This commit is contained in:
Miran Grča
2020-12-08 22:19:37 +01:00
committed by GitHub
11 changed files with 703 additions and 536 deletions

View File

@@ -202,15 +202,12 @@ pipc_reset_hard(void *priv)
switch (dev->local) {
case VIA_PIPC_586A:
case VIA_PIPC_586B:
case VIA_PIPC_596A:
dev->usb_regs[i][0x08] = 0x02;
break;
case VIA_PIPC_596A:
dev->usb_regs[i][0x08] = 0x08;
break;
case VIA_PIPC_596B:
dev->usb_regs[i][0x08] = 0x11;
dev->usb_regs[i][0x08] = 0x08;
break;
case VIA_PIPC_686A:
@@ -218,7 +215,7 @@ pipc_reset_hard(void *priv)
break;
case VIA_PIPC_686B:
dev->usb_regs[i][0x08] = 0x16;
dev->usb_regs[i][0x08] = 0x1a;
break;
}

View File

@@ -541,6 +541,7 @@ load_machine(void)
if (machine >= machine_count())
machine = machine_count() - 1;
cpu_override = config_get_int(cat, "cpu_override", 0);
cpu_f = NULL;
p = config_get_string(cat, "cpu_family", NULL);
if (p) {
@@ -627,7 +628,6 @@ load_machine(void)
}
}
cpu_s = (CPU *) &cpu_f->cpus[cpu];
cpu_override = config_get_int(cat, "cpu_override", 0);
cpu_waitstates = config_get_int(cat, "cpu_waitstates", 0);
@@ -1897,7 +1897,7 @@ save_machine(void)
continue;
i = 0;
do {
while (cpu_legacy_table[c].tables[legacy_mfg][i].family) {
legacy_table_entry = (cpu_legacy_table_t *) &cpu_legacy_table[c].tables[legacy_mfg][i];
/* Match the family name, speed and multiplier. */
@@ -1911,7 +1911,9 @@ save_machine(void)
closest_legacy_cpu = i;
}
}
} while (cpu_legacy_table[c].tables[legacy_mfg][++i].family);
i++;
}
/* Use the closest speed match if no exact match was found. */
if ((legacy_cpu == -1) && (closest_legacy_cpu > -1)) {

View File

@@ -1611,40 +1611,40 @@ static const cpu_legacy_table_t cpus_Cyrix3[] = {
{NULL, 0, 0}
};
static const cpu_legacy_table_t *cputables_8088[] = {cpus_8088};
static const cpu_legacy_table_t *cputables_pcjr[] = {cpus_pcjr};
static const cpu_legacy_table_t *cputables_europc[] = {cpus_europc};
static const cpu_legacy_table_t *cputables_pc1512[] = {cpus_pc1512};
static const cpu_legacy_table_t *cputables_8086[] = {cpus_8086};
static const cpu_legacy_table_t *cputables_286[] = {cpus_286};
static const cpu_legacy_table_t *cputables_ibmat[] = {cpus_ibmat};
static const cpu_legacy_table_t *cputables_ps1_m2011[] = {cpus_ps1_m2011};
static const cpu_legacy_table_t *cputables_ps2_m30_286_IBM486SLC[] = {cpus_ps2_m30_286, cpus_IBM486SLC};
static const cpu_legacy_table_t *cputables_ibmxt286[] = {cpus_ibmxt286};
static const cpu_legacy_table_t *cputables_i386SX_Am386SX_486SLC[] = {cpus_i386SX, cpus_Am386SX, cpus_486SLC};
static const cpu_legacy_table_t *cputables_ALiM6117[] = {cpus_ALiM6117};
static const cpu_legacy_table_t *cputables_i386SX_Am386SX_486SLC_IBM486SLC[] = {cpus_i386SX, cpus_Am386SX, cpus_486SLC, cpus_IBM486SLC};
static const cpu_legacy_table_t *cputables_i386DX_Am386DX_486DLC[] = {cpus_i386DX, cpus_Am386DX, cpus_486DLC};
static const cpu_legacy_table_t *cputables_i386DX_Am386DX_486DLC_IBM486BL[] = {cpus_i386DX, cpus_Am386DX, cpus_486DLC, cpus_IBM486BL};
static const cpu_legacy_table_t *cputables_i486_Am486_Cx486[] = {cpus_i486, cpus_Am486, cpus_Cx486};
static const cpu_legacy_table_t *cputables_i486S1_Am486S1_Cx486S1[] = {cpus_i486S1, cpus_Am486S1, cpus_Cx486S1};
static const cpu_legacy_table_t *cputables_IBM486SLC[] = {cpus_IBM486SLC};
static const cpu_legacy_table_t *cputables_i486_PC330[] = {cpus_i486_PC330};
static const cpu_legacy_table_t *cputables_STPCDX[] = {cpus_STPCDX};
static const cpu_legacy_table_t *cputables_STPCDX2[] = {cpus_STPCDX2};
static const cpu_legacy_table_t *cputables_Pentium5V[] = {cpus_Pentium5V};
static const cpu_legacy_table_t *cputables_PentiumS5_WinChip_K5[] = {cpus_PentiumS5, cpus_WinChip, cpus_K5};
static const cpu_legacy_table_t *cputables_Pentium3V_WinChip_K5_6x863V[] = {cpus_Pentium3V, cpus_WinChip, cpus_K5, cpus_6x863V};
static const cpu_legacy_table_t *cputables_Pentium3V_K5[] = {cpus_Pentium3V, cpus_K5};
static const cpu_legacy_table_t *cputables_Pentium_WinChip_K56_6x86[] = {cpus_Pentium, cpus_WinChip, cpus_K56, cpus_6x86};
static const cpu_legacy_table_t *cputables_Pentium_WinChip_SS7_K56_SS7_6x86SS7[] = {cpus_Pentium, cpus_WinChip_SS7, cpus_K56_SS7, cpus_6x86SS7};
static const cpu_legacy_table_t *cputables_PentiumPro[] = {cpus_PentiumPro};
static const cpu_legacy_table_t *cputables_PentiumII66[] = {cpus_PentiumII66};
static const cpu_legacy_table_t *cputables_PentiumII_Celeron_Cyrix3[] = {cpus_PentiumII, cpus_Celeron, cpus_Cyrix3};
static const cpu_legacy_table_t *cputables_Xeon[] = {cpus_Xeon};
static const cpu_legacy_table_t *cputables_Celeron_Cyrix3[] = {cpus_Celeron, cpus_Cyrix3};
static const cpu_legacy_table_t *cputables_Celeron[] = {cpus_Celeron};
static const cpu_legacy_table_t *cputables_PentiumIID_Celeron[] = {cpus_PentiumIID, cpus_Celeron};
static const cpu_legacy_table_t *cputables_8088[4] = {cpus_8088};
static const cpu_legacy_table_t *cputables_pcjr[4] = {cpus_pcjr};
static const cpu_legacy_table_t *cputables_europc[4] = {cpus_europc};
static const cpu_legacy_table_t *cputables_pc1512[4] = {cpus_pc1512};
static const cpu_legacy_table_t *cputables_8086[4] = {cpus_8086};
static const cpu_legacy_table_t *cputables_286[4] = {cpus_286};
static const cpu_legacy_table_t *cputables_ibmat[4] = {cpus_ibmat};
static const cpu_legacy_table_t *cputables_ps1_m2011[4] = {cpus_ps1_m2011};
static const cpu_legacy_table_t *cputables_ps2_m30_286_IBM486SLC[4] = {cpus_ps2_m30_286, cpus_IBM486SLC};
static const cpu_legacy_table_t *cputables_ibmxt286[4] = {cpus_ibmxt286};
static const cpu_legacy_table_t *cputables_i386SX_Am386SX_486SLC[4] = {cpus_i386SX, cpus_Am386SX, cpus_486SLC};
static const cpu_legacy_table_t *cputables_ALiM6117[4] = {cpus_ALiM6117};
static const cpu_legacy_table_t *cputables_i386SX_Am386SX_486SLC_IBM486SLC[4] = {cpus_i386SX, cpus_Am386SX, cpus_486SLC, cpus_IBM486SLC};
static const cpu_legacy_table_t *cputables_i386DX_Am386DX_486DLC[4] = {cpus_i386DX, cpus_Am386DX, cpus_486DLC};
static const cpu_legacy_table_t *cputables_i386DX_Am386DX_486DLC_IBM486BL[4] = {cpus_i386DX, cpus_Am386DX, cpus_486DLC, cpus_IBM486BL};
static const cpu_legacy_table_t *cputables_i486_Am486_Cx486[4] = {cpus_i486, cpus_Am486, cpus_Cx486};
static const cpu_legacy_table_t *cputables_i486S1_Am486S1_Cx486S1[4] = {cpus_i486S1, cpus_Am486S1, cpus_Cx486S1};
static const cpu_legacy_table_t *cputables_IBM486SLC[4] = {cpus_IBM486SLC};
static const cpu_legacy_table_t *cputables_i486_PC330[4] = {cpus_i486_PC330};
static const cpu_legacy_table_t *cputables_STPCDX[4] = {cpus_STPCDX};
static const cpu_legacy_table_t *cputables_STPCDX2[4] = {cpus_STPCDX2};
static const cpu_legacy_table_t *cputables_Pentium5V[4] = {cpus_Pentium5V};
static const cpu_legacy_table_t *cputables_PentiumS5_WinChip_K5[4] = {cpus_PentiumS5, cpus_WinChip, cpus_K5};
static const cpu_legacy_table_t *cputables_Pentium3V_WinChip_K5_6x863V[4] = {cpus_Pentium3V, cpus_WinChip, cpus_K5, cpus_6x863V};
static const cpu_legacy_table_t *cputables_Pentium3V_K5[4] = {cpus_Pentium3V, cpus_K5};
static const cpu_legacy_table_t *cputables_Pentium_WinChip_K56_6x86[4] = {cpus_Pentium, cpus_WinChip, cpus_K56, cpus_6x86};
static const cpu_legacy_table_t *cputables_Pentium_WinChip_SS7_K56_SS7_6x86SS7[4] = {cpus_Pentium, cpus_WinChip_SS7, cpus_K56_SS7, cpus_6x86SS7};
static const cpu_legacy_table_t *cputables_PentiumPro[4] = {cpus_PentiumPro};
static const cpu_legacy_table_t *cputables_PentiumII66[4] = {cpus_PentiumII66};
static const cpu_legacy_table_t *cputables_PentiumII_Celeron_Cyrix3[4] = {cpus_PentiumII, cpus_Celeron, cpus_Cyrix3};
static const cpu_legacy_table_t *cputables_Xeon[4] = {cpus_Xeon};
static const cpu_legacy_table_t *cputables_Celeron_Cyrix3[4] = {cpus_Celeron, cpus_Cyrix3};
static const cpu_legacy_table_t *cputables_Celeron[4] = {cpus_Celeron};
static const cpu_legacy_table_t *cputables_PentiumIID_Celeron[4] = {cpus_PentiumIID, cpus_Celeron};
const cpu_legacy_machine_t cpu_legacy_table[] = {
{"ibmpc", cputables_8088},

File diff suppressed because it is too large Load Diff

View File

@@ -213,20 +213,6 @@ i2c_handler(int set, void *bus_handle, uint8_t base, int size,
}
uint8_t
i2c_has_device(void *bus_handle, uint8_t addr)
{
i2c_bus_t *bus = (i2c_bus_t *) bus_handle;
if (!bus)
return 0;
i2c_log("I2C: has_device(%s, %02X) = %d\n", bus->name, addr, !!bus->devices[addr]);
return(!!bus->devices[addr]);
}
uint8_t
i2c_start(void *bus_handle, uint8_t addr, uint8_t read)
{
@@ -247,7 +233,7 @@ i2c_start(void *bus_handle, uint8_t addr, uint8_t read)
}
}
i2c_log("I2C: start(%s, %02X)\n", bus->name, addr);
i2c_log("I2C %s: start(%02X) = %d\n", bus->name, addr, ret);
return(ret);
}
@@ -274,7 +260,7 @@ i2c_read(void *bus_handle, uint8_t addr)
}
}
i2c_log("I2C: read(%s, %02X) = %02X\n", bus->name, addr, ret);
i2c_log("I2C %s: read(%02X) = %02X\n", bus->name, addr, ret);
return(ret);
}
@@ -300,7 +286,7 @@ i2c_write(void *bus_handle, uint8_t addr, uint8_t data)
}
}
i2c_log("I2C: write(%s, %02X, %02X) = %d\n", bus->name, addr, data, ret);
i2c_log("I2C %s: write(%02X, %02X) = %d\n", bus->name, addr, data, ret);
return(ret);
}
@@ -325,5 +311,5 @@ i2c_stop(void *bus_handle, uint8_t addr)
}
}
i2c_log("I2C: stop(%s, %02X)\n", bus->name, addr);
i2c_log("I2C %s: stop(%02X)\n", bus->name, addr);
}

View File

@@ -95,11 +95,15 @@ i2c_gpio_set(void *dev_handle, uint8_t scl, uint8_t sda)
i2c_gpio_log(2, "I2C GPIO %s: Start condition\n", dev->bus_name);
dev->started = 1;
dev->pos = 0;
dev->slave_addr = 0xff;
dev->slave_read = 2; /* start with address transfer */
dev->slave_sda = 1;
} else if (!dev->prev_sda && sda) {
i2c_gpio_log(2, "I2C GPIO %s: Stop condition\n", dev->bus_name);
dev->started = 0;
if (dev->slave_addr != 0xff)
i2c_stop(dev->i2c, dev->slave_addr);
dev->slave_addr = 0xff;
dev->slave_sda = 1;
}
} else if (!dev->prev_scl && scl && dev->started) {
@@ -125,7 +129,7 @@ i2c_gpio_set(void *dev_handle, uint8_t scl, uint8_t sda)
dev->slave_read = dev->byte & 1;
/* slave ACKs? */
dev->slave_sda = !(i2c_has_device(dev->i2c, dev->slave_addr) && i2c_start(dev->i2c, dev->slave_addr, dev->slave_read));
dev->slave_sda = !i2c_start(dev->i2c, dev->slave_addr, dev->slave_read);
i2c_gpio_log(2, "I2C GPIO %s: Slave %02X %s %sACK\n", dev->bus_name, dev->slave_addr, dev->slave_read ? "read" : "write", dev->slave_sda ? "N" : "");
if (!dev->slave_sda && dev->slave_read) /* read first byte on an ACKed read transfer */

View File

@@ -131,7 +131,7 @@ smbus_piix4_write(uint16_t addr, uint8_t val, void *priv)
smbus_piix4_log("SMBus PIIX4: addr=%02X read=%d protocol=%X cmd=%02X data0=%02X data1=%02X\n", smbus_addr, read, cmd, dev->cmd, dev->data0, dev->data1);
/* Raise DEV_ERR if no device is at this address, or if the device returned NAK when starting the transfer. */
if (!i2c_has_device(i2c_smbus, smbus_addr) || !i2c_start(i2c_smbus, smbus_addr, read)) {
if (!i2c_start(i2c_smbus, smbus_addr, read)) {
dev->next_stat = 0x04;
break;
}

View File

@@ -18,28 +18,51 @@
# define EMU_CLOCK_H
/* clock_ics9xxx.c */
extern const device_t ics9xxx_detect_device;
extern const device_t ics9150_08_device;
extern const device_t ics9248_39_device;
extern const device_t ics9248_81_device;
extern const device_t ics9248_98_device;
extern const device_t ics9248_101_device;
extern const device_t ics9250_08_device;
extern const device_t ics9250_10_device;
extern const device_t ics9250_13_device;
extern const device_t ics9250_14_device;
extern const device_t ics9250_16_device;
extern const device_t ics9250_18_device;
extern const device_t ics9250_19_device;
extern const device_t ics9250_23_device;
extern const device_t ics9250_25_device;
extern const device_t ics9250_26_device;
extern const device_t ics9250_27_device;
extern const device_t ics9250_28_device;
extern const device_t ics9250_29_device;
extern const device_t ics9250_30_device;
extern const device_t ics9250_32_device;
extern const device_t ics9250_38_device;
extern const device_t ics9250_50_device;
enum {
ICS9xxx_xx,
ICS9150_08,
#if 0
ICS9248_39,
ICS9248_81,
ICS9248_95,
ICS9248_98,
ICS9248_101,
ICS9248_103,
ICS9248_107,
ICS9248_112,
ICS9248_138,
ICS9248_141,
ICS9248_143,
ICS9248_151,
ICS9248_192,
#endif
ICS9250_08,
#if 0
ICS9250_10,
ICS9250_13,
ICS9250_14,
ICS9250_16,
#endif
ICS9250_18,
#if 0
ICS9250_19,
ICS9250_23,
ICS9250_25,
ICS9250_26,
ICS9250_27,
ICS9250_28,
ICS9250_29,
ICS9250_30,
ICS9250_32,
ICS9250_38,
ICS9250_50,
#endif
ICS9xxx_MAX
};
/* clock_ics9xxx.c */
extern device_t *ics9xxx_get(uint8_t model);
#endif /*EMU_CLOCK_H*/

View File

@@ -48,7 +48,6 @@ extern void i2c_handler(int set, void *bus_handle, uint8_t base, int size,
void (*stop)(void *bus, uint8_t addr, void *priv),
void *priv);
extern uint8_t i2c_has_device(void *bus_handle, uint8_t addr);
extern uint8_t i2c_start(void *bus_handle, uint8_t addr, uint8_t read);
extern uint8_t i2c_read(void *bus_handle, uint8_t addr);
extern uint8_t i2c_write(void *bus_handle, uint8_t addr, uint8_t data);

View File

@@ -215,7 +215,7 @@ machine_at_p2bls_init(const machine_t *model)
device_add(&piix4e_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&w83977ef_device);
device_add(&ics9150_08_device);
device_add(ics9xxx_get(ICS9150_08));
device_add(&sst_flash_39sf020_device);
spd_register(SPD_TYPE_SDRAM, 0xF, 256);
device_add(&w83781d_device); /* fans: Chassis, CPU, Power; temperatures: MB, unused, CPU */
@@ -253,7 +253,7 @@ machine_at_p3bf_init(const machine_t *model)
device_add(&piix4e_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&w83977ef_device);
device_add(&ics9250_08_device);
device_add(ics9xxx_get(ICS9250_08));
device_add(&sst_flash_39sf020_device);
spd_register(SPD_TYPE_SDRAM, 0xF, 256);
device_add(&as99127f_device); /* fans: Chassis, CPU, Power; temperatures: MB, JTPWR, CPU */
@@ -577,7 +577,7 @@ machine_at_p3v4x_init(const machine_t *model)
device_add(&via_vt82c596b_device);
device_add(&w83977ef_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&ics9250_18_device);
device_add(ics9xxx_get(ICS9250_18));
device_add(&sst_flash_39sf020_device);
spd_register(SPD_TYPE_SDRAM, 0xF, 512);
device_add(&as99127f_device); /* fans: Chassis, CPU, Power; temperatures: MB, JTPWR, CPU */

View File

@@ -163,7 +163,7 @@ machine_at_cubx_init(const machine_t *model)
device_add(&piix4e_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&w83977ef_device);
device_add(&ics9250_08_device);
device_add(ics9xxx_get(ICS9250_08));
device_add(&sst_flash_39sf020_device);
spd_register(SPD_TYPE_SDRAM, 0xF, 256);
device_add(&as99127f_device); /* fans: Chassis, CPU, Power; temperatures: MB, JTPWR, CPU */
@@ -397,7 +397,7 @@ machine_at_cuv4xls_init(const machine_t *model)
device_add(&via_vt82c686b_device);
device_add(&via_vt82c686_sio_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&ics9250_18_device);
device_add(ics9xxx_get(ICS9250_18));
device_add(&sst_flash_39sf020_device);
spd_register(SPD_TYPE_SDRAM, 0xF, 512);
device_add(&as99127f_device); /* fans: Chassis, CPU, Power; temperatures: MB, JTPWR, CPU */
@@ -431,7 +431,7 @@ machine_at_6via90ap_init(const machine_t *model)
device_add(&via_vt82c686b_device);
device_add(&via_vt82c686_sio_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&ics9250_18_device);
device_add(ics9xxx_get(ICS9250_18));
device_add(&sst_flash_39sf020_device);
spd_register(SPD_TYPE_SDRAM, 0x7, 512);
device_add(&via_vt82c686_hwm_device); /* fans: CPU1, CPU2; temperatures: CPU, System, unused */