From 44c83812913f8a637f004f4ed03b66547e0a34e8 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Tue, 13 Oct 2020 19:28:23 -0300 Subject: [PATCH] Implement FIC VA-503A (MVP3 + 686A) and rename KA-6110 to match the naming scheme for FIC boards --- src/include/86box/machine.h | 3 +- src/machine/m_at_slot1.c | 4 +- src/machine/m_at_sockets7.c | 86 ++++++++++++++++++++++++++++++++++++- src/machine/machine_table.c | 3 +- 4 files changed, 90 insertions(+), 6 deletions(-) diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 13899be44..abd3e4178 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -395,6 +395,7 @@ extern const device_t *at_pb640_get_device(void); /* m_at_super7_ss7.c */ extern int machine_at_ax59pro_init(const machine_t *); extern int machine_at_mvp3_init(const machine_t *); +extern int machine_at_ficva503a_init(const machine_t *); /* m_at_socket8.c */ extern int machine_at_686nx_init(const machine_t *); @@ -425,7 +426,7 @@ extern int machine_at_ax6bc_init(const machine_t *); extern int machine_at_atc6310bxii_init(const machine_t *); extern int machine_at_tsunamiatx_init(const machine_t *); extern int machine_at_p6sba_init(const machine_t *); -extern int machine_at_ka6100_init(const machine_t *); +extern int machine_at_ficka6100_init(const machine_t *); #ifdef EMU_DEVICE_H extern const device_t *at_tsunamiatx_get_device(void); diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index c028211c7..76b43b2b2 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -575,11 +575,11 @@ at_tsunamiatx_get_device(void) int -machine_at_ka6100_init(const machine_t *model) +machine_at_ficka6100_init(const machine_t *model) { int ret; - ret = bios_load_linear(L"roms/machines/ka6100/610011ex.bin", + ret = bios_load_linear(L"roms/machines/ficka6100/610011ex.bin", 0x000e0000, 131072, 0); if (bios_only || !ret) diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index b7328add9..cd9880a7b 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -69,7 +69,7 @@ machine_at_ax59pro_init(const machine_t *model) device_add(&keyboard_ps2_pci_device); device_add(&w83877tf_device); device_add(&sst_flash_39sf020_device); - spd_register(SPD_TYPE_SDRAM, 0x7, 512); + spd_register(SPD_TYPE_SDRAM, 0x7, 256); return ret; } @@ -101,7 +101,89 @@ machine_at_mvp3_init(const machine_t *model) device_add(&keyboard_ps2_pci_device); device_add(&w83877tf_device); device_add(&sst_flash_39sf010_device); - spd_register(SPD_TYPE_SDRAM, 0x3, 512); + spd_register(SPD_TYPE_SDRAM, 0x3, 256); + + return ret; +} + + +int +machine_at_ficva503a_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear(L"roms/machines/ficva503a/jo4116.bin", + 0x000c0000, 262144, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init_ex(model, 2); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 3, 4); + pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x01, PCI_CARD_SPECIAL, 1, 2, 3, 4); + + device_add(&via_mvp3_device); + device_add(&via_vt82c686a_device); + device_add(&keyboard_ps2_pci_device); + device_add(&via_vt82c686_sio_device); + device_add(&sst_flash_39sf020_device); + spd_register(SPD_TYPE_SDRAM, 0x7, 256); + + hwm_values_t machine_hwm = { + { /* fan speeds */ + 3000, /* CPUFAN1 */ + 3000 /* ChassisFAN */ + }, { /* temperatures */ + 32, /* CPU */ + 32, /* System */ + 0 /* unused */ + }, { /* voltages */ + 3300, /* Vcore (3.3V by default) */ + 2500, /* 2.5V (unused) */ + 3300, /* 3.3V */ + RESISTOR_DIVIDER(5000, 9, 16), /* 5V (divider values bruteforced) */ + RESISTOR_DIVIDER(12000, 28, 10) /* 12V (28K/10K divider applies to W83781D but is close enough) */ + } + }; + /* Pentium, Pentium OverDrive MMX, Pentium Mobile MMX: 3.3V (real Pentium Mobile MMX is 2.45V). + Pentium MMX: 2.8 V. + AMD K6 Model 6: 2.9 V for 166/200, 3.2 V for 233. + AMD K6 Model 7: 2.2 V. */ + switch (model->cpu[cpu_manufacturer].cpus[cpu_effective].cpu_type) { + case CPU_WINCHIP: + case CPU_WINCHIP2: +#if (defined(USE_NEW_DYNAREC) || (defined(DEV_BRANCH) && defined(USE_CYRIX_6X86))) + case CPU_Cx6x86: +#endif +#if defined(DEV_BRANCH) && defined(USE_AMD_K5) + case CPU_K5: + case CPU_5K86: +#endif + machine_hwm.voltages[0] = 3500; + break; +#if (defined(USE_NEW_DYNAREC) || (defined(DEV_BRANCH) && defined(USE_CYRIX_6X86))) + case CPU_Cx6x86MX: + machine_hwm.voltages[0] = 2900; + break; +#endif + case CPU_PENTIUMMMX: + machine_hwm.voltages[0] = 2800; + break; + case CPU_K6: + case CPU_K6_2: + machine_hwm.voltages[0] = 2200; + break; + } + machine_hwm.voltages[0] *= 1.32; /* multiplier bruteforced */ + hwm_set_values(machine_hwm); + device_add(&via_vt82c686_hwm_device); return ret; } diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 52c757004..f0fa6434a 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -333,6 +333,7 @@ const machine_t machines[] = { /* Apollo MVP3 */ { "[VIA MVP3] AOpen AX59 Pro", "ax59pro", MACHINE_TYPE_SOCKETS7, MACHINE_CPUS_PENTIUM_SS7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_ax59pro_init, NULL }, { "[VIA MVP3] FIC VA-503+", "ficva503p", MACHINE_TYPE_SOCKETS7, MACHINE_CPUS_PENTIUM_SS7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_mvp3_init, NULL }, + { "[VIA MVP3] FIC VA-503A", "ficva503a", MACHINE_TYPE_SOCKETS7, MACHINE_CPUS_PENTIUM_SS7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 255, machine_at_ficva503a_init, NULL }, /* Socket 8 machines */ /* 440FX */ @@ -365,7 +366,7 @@ const machine_t machines[] = { { "[i440BX] A-Trend ATC6310BXII", "atc6310bxii", MACHINE_TYPE_SLOT1, {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 255, machine_at_atc6310bxii_init, NULL }, { "[i440BX] Tyan Tsunami ATX", "tsunamiatx", MACHINE_TYPE_SLOT1, {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_SOUND, 8, 1024, 8, 255, machine_at_tsunamiatx_init, at_tsunamiatx_get_device }, { "[i440BX] SuperMicro Super P6SBA", "p6sba", MACHINE_TYPE_SLOT1, {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 255, machine_at_p6sba_init, NULL }, - { "[VIA Apollo Pro] FIC KA-6100", "ka6100", MACHINE_TYPE_SLOT1, {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 255, machine_at_ka6100_init, NULL }, + { "[VIA Apollo Pro] FIC KA-6100", "ficka6100", MACHINE_TYPE_SLOT1, {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 255, machine_at_ficka6100_init, NULL }, /* Slot 2 machines(Including Slot 1/2 Hybrids) */ /* 440GX */