From 570034cb0924c306e09ecfad223c179022c574e0 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Wed, 29 Apr 2020 10:50:53 +0300
Subject: [PATCH 01/32] Improved the VIA VPX code
Moved host bridge write code via_vpx_write.
Default registers are now on via_vpx_init.
Read only registers are hardcoded.
---
src/chipset/via_vpx.c | 148 +++++++++++++++++++-----------------------
1 file changed, 68 insertions(+), 80 deletions(-)
diff --git a/src/chipset/via_vpx.c b/src/chipset/via_vpx.c
index 5985f8493..0df0d23e5 100644
--- a/src/chipset/via_vpx.c
+++ b/src/chipset/via_vpx.c
@@ -12,6 +12,9 @@ VIA Apollo VPX North Bridge emulation
VT82C585VPX used in the Zida Tomato TX100 board
based on the model of VIA MVP3 by mooch & Sarah
+There's also a SOYO board using the ETEQ chipset which is a rebranded
+VPX + 586B but fails to save on CMOS properly.
+
Authors: Sarah Walker,
Copyright(C) 2020 Tiseno100
Copyright(C) 2020 Melissa Goad
@@ -35,7 +38,7 @@ Copyright(C) 2020 Miran Grca
typedef struct via_vpx_t
{
- uint8_t pci_conf[2][256];
+ uint8_t pci_conf[256];
} via_vpx_t;
static void
@@ -60,109 +63,63 @@ vpx_map(uint32_t addr, uint32_t size, int state)
}
static void
-via_vpx_pci_regs(via_vpx_t *dev)
-{
- memset(dev, 0, sizeof(via_vpx_t));
-
-// Host Bridge registers
-
- dev->pci_conf[0][0x00] = 0x06; // VIA
- dev->pci_conf[0][0x01] = 0x11;
-
- dev->pci_conf[0][0x02] = 0x85; // VT82C585VPX
- dev->pci_conf[0][0x03] = 0x05;
-
- dev->pci_conf[0][0x04] = 7; // Command
- dev->pci_conf[0][0x05] = 0;
-
- dev->pci_conf[0][0x06] = 0xa0; // Status
- dev->pci_conf[0][0x07] = 2;
-
- dev->pci_conf[0][0x09] = 0; // Program Interface
-
- dev->pci_conf[0][0x0a] = 0; // Sub Class Code
-
- dev->pci_conf[0][0x0b] = 6; // Base Class Code
-
- dev->pci_conf[0][0x0c] = 0; // reserved
-
- dev->pci_conf[0][0x0d] = 0; // Latency Timer
-
- dev->pci_conf[0][0x0e] = 0; // Header Type
-
- dev->pci_conf[0][0x0f] = 0; // Built-in Self test
-
- dev->pci_conf[0][0x58] = 0x40; // DRAM Configuration 1
- dev->pci_conf[0][0x59] = 5; // DRAM Configuration 2
-
- dev->pci_conf[0][0x5a] = 1; // Bank 0 Ending
- dev->pci_conf[0][0x5b] = 1; // Bank 1 Ending
- dev->pci_conf[0][0x5c] = 1; // Bank 2 Ending
- dev->pci_conf[0][0x5d] = 1; // Bank 3 Ending
- dev->pci_conf[0][0x5e] = 1; // Bank 4 Ending
- dev->pci_conf[0][0x5f] = 1; // Bank 5 Ending
-
- dev->pci_conf[0][0x64] = 0xab; // DRAM reference timing
-
-}
-
-static void
-host_bridge_write(int func, int addr, uint8_t val, void *priv)
+via_vpx_write(int func, int addr, uint8_t val, void *priv)
{
via_vpx_t *dev = (via_vpx_t *) priv;
- // Read-Only registers. Exact same as MVP3
- if ((addr < 4) || ((addr >= 5) && (addr < 7)) || ((addr >= 8) && (addr < 0xd)) || ((addr >= 0xe) && (addr < 0x12)) ||
- ((addr >= 0x14) && (addr < 0x50)) || ((addr >= 0x79) && (addr < 0x7e)) || ((addr >= 0x85) && (addr < 0x88)) ||
- ((addr >= 0x8c) && (addr < 0xa8)) || ((addr >= 0xad) && (addr < 0xfd)))
- return;
+ // Read-Only registers
+ switch(addr){
+ case 0x00: case 0x01: case 0x02: case 0x03:
+ case 0x08: case 0x09: case 0x0a: case 0x0b:
+ case 0x0e: case 0x0f:
+ return;
+ }
switch(addr){
- case 0x04: // Command
- dev->pci_conf[0][0x04] = (dev->pci_conf[0][0x04] & ~0x40) | (val & 0x40);
+ case 0x04: // Command. On Bitfield 6 RW
+ dev->pci_conf[0x04] = (dev->pci_conf[0x04] & ~0x40) | (val & 0x40);
case 0x07: // Status
- dev->pci_conf[0][0x07] &= ~(val & 0xb0);
+ dev->pci_conf[0x07] &= ~(val & 0xb0);
break;
case 0x61: // Shadow RAM control 1
- if ((dev->pci_conf[0][0x61] ^ val) & 0x03)
+ if ((dev->pci_conf[0x61] ^ val) & 0x03)
vpx_map(0xc0000, 0x04000, val & 0x03);
- if ((dev->pci_conf[0][0x61] ^ val) & 0x0c)
+ if ((dev->pci_conf[0x61] ^ val) & 0x0c)
vpx_map(0xc4000, 0x04000, (val & 0x0c) >> 2);
- if ((dev->pci_conf[0][0x61] ^ val) & 0x30)
+ if ((dev->pci_conf[0x61] ^ val) & 0x30)
vpx_map(0xc8000, 0x04000, (val & 0x30) >> 4);
- if ((dev->pci_conf[0][0x61] ^ val) & 0xc0)
+ if ((dev->pci_conf[0x61] ^ val) & 0xc0)
vpx_map(0xcc000, 0x04000, (val & 0xc0) >> 6);
- dev->pci_conf[0][0x61] = val;
+ dev->pci_conf[0x61] = val;
return;
case 0x62: // Shadow RAM Control 2
- if ((dev->pci_conf[0][0x62] ^ val) & 0x03)
+ if ((dev->pci_conf[0x62] ^ val) & 0x03)
vpx_map(0xd0000, 0x04000, val & 0x03);
- if ((dev->pci_conf[0][0x62] ^ val) & 0x0c)
+ if ((dev->pci_conf[0x62] ^ val) & 0x0c)
vpx_map(0xd4000, 0x04000, (val & 0x0c) >> 2);
- if ((dev->pci_conf[0][0x62] ^ val) & 0x30)
+ if ((dev->pci_conf[0x62] ^ val) & 0x30)
vpx_map(0xd8000, 0x04000, (val & 0x30) >> 4);
- if ((dev->pci_conf[0][0x62] ^ val) & 0xc0)
+ if ((dev->pci_conf[0x62] ^ val) & 0xc0)
vpx_map(0xdc000, 0x04000, (val & 0xc0) >> 6);
- dev->pci_conf[0][0x62] = val;
+ dev->pci_conf[0x62] = val;
return;
case 0x63: // Shadow RAM Control 3
- if ((dev->pci_conf[0][0x63] ^ val) & 0x30) {
+ if ((dev->pci_conf[0x63] ^ val) & 0x30) {
vpx_map(0xf0000, 0x10000, (val & 0x30) >> 4);
shadowbios = (((val & 0x30) >> 4) & 0x02);
}
- if ((dev->pci_conf[0][0x63] ^ val) & 0xc0)
+ if ((dev->pci_conf[0x63] ^ val) & 0xc0)
vpx_map(0xe0000, 0x10000, (val & 0xc0) >> 6);
- dev->pci_conf[0][0x63] = val;
+ dev->pci_conf[0x63] = val;
return;
- //In case we throw somewhere
default:
- dev->pci_conf[0][addr] = val;
+ dev->pci_conf[addr] = val;
break;
}
}
@@ -175,19 +132,13 @@ via_vpx_read(int func, int addr, void *priv)
switch(func) {
case 0:
- ret = dev->pci_conf[0][addr];
+ ret = dev->pci_conf[addr];
break;
}
return ret;
}
-static void
-via_vpx_write(int func, int addr, uint8_t val, void *priv)
-{
- host_bridge_write(func, addr, val, priv);
-}
-
static void
via_vpx_reset(void *priv)
{
@@ -198,10 +149,47 @@ static void *
via_vpx_init(const device_t *info)
{
via_vpx_t *dev = (via_vpx_t *) malloc(sizeof(via_vpx_t));
+ memset(dev, 0, sizeof(via_vpx_t));
pci_add_card(PCI_ADD_NORTHBRIDGE, via_vpx_read, via_vpx_write, dev);
- via_vpx_pci_regs(dev);
+ dev->pci_conf[0x00] = 0x06; // VIA
+ dev->pci_conf[0x01] = 0x11;
+
+ dev->pci_conf[0x02] = 0x85; // VT82C585VPX
+ dev->pci_conf[0x03] = 0x05;
+
+ dev->pci_conf[0x04] = 7; // Command
+ dev->pci_conf[0x05] = 0;
+
+ dev->pci_conf[0x06] = 0xa0; // Status
+ dev->pci_conf[0x07] = 2;
+
+ dev->pci_conf[0x09] = 0; // Program Interface
+
+ dev->pci_conf[0x0a] = 0; // Sub Class Code
+
+ dev->pci_conf[0x0b] = 6; // Base Class Code
+
+ dev->pci_conf[0x0c] = 0; // reserved
+
+ dev->pci_conf[0x0d] = 0; // Latency Timer
+
+ dev->pci_conf[0x0e] = 0; // Header Type
+
+ dev->pci_conf[0x0f] = 0; // Built-in Self test
+
+ dev->pci_conf[0x58] = 0x40; // DRAM Configuration 1
+ dev->pci_conf[0x59] = 0x05; // DRAM Configuration 2
+
+ dev->pci_conf[0x5a] = 1; // Bank 0 Ending
+ dev->pci_conf[0x5b] = 1; // Bank 1 Ending
+ dev->pci_conf[0x5c] = 1; // Bank 2 Ending
+ dev->pci_conf[0x5d] = 1; // Bank 3 Ending
+ dev->pci_conf[0x5e] = 1; // Bank 4 Ending
+ dev->pci_conf[0x5f] = 1; // Bank 5 Ending
+
+ dev->pci_conf[0x64] = 0xab; // DRAM reference timing
return dev;
}
From ff29e0449082522079a87c1f0c6fba198e820cb3 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Wed, 29 Apr 2020 11:39:25 +0300
Subject: [PATCH 02/32] Added the missing 2 RW bitfields on command.
---
src/chipset/via_vpx.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/src/chipset/via_vpx.c b/src/chipset/via_vpx.c
index 0df0d23e5..f19d682e1 100644
--- a/src/chipset/via_vpx.c
+++ b/src/chipset/via_vpx.c
@@ -77,9 +77,17 @@ via_vpx_t *dev = (via_vpx_t *) priv;
}
switch(addr){
- case 0x04: // Command. On Bitfield 6 RW
+ case 0x04:
+ // Bitfield 6: Parity Error Response
+ // Bitfield 8: SERR# Enable
+ // Bitfield 9: Fast Back-to-Back Cycle Enable
+ if(dev->pci_conf[0x04] && 0x40){ //Bitfield 6
dev->pci_conf[0x04] = (dev->pci_conf[0x04] & ~0x40) | (val & 0x40);
-
+ } else if(dev->pci_conf[0x04] && 0x100){ //Bitfield 8
+ dev->pci_conf[0x04] = (dev->pci_conf[0x04] & ~0x100) | (val & 0x100);
+ } else if(dev->pci_conf[0x04] && 0x200){ //Bitfield 9
+ dev->pci_conf[0x04] = (dev->pci_conf[0x04] & ~0x200) | (val & 0x200);
+ }
case 0x07: // Status
dev->pci_conf[0x07] &= ~(val & 0xb0);
break;
@@ -165,6 +173,8 @@ via_vpx_init(const device_t *info)
dev->pci_conf[0x06] = 0xa0; // Status
dev->pci_conf[0x07] = 2;
+ dev->pci_conf[0x08] = 0; // Silicon Rev.
+
dev->pci_conf[0x09] = 0; // Program Interface
dev->pci_conf[0x0a] = 0; // Sub Class Code
From c854b7805f4858469c934d92da0b37ac6b2e8db1 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Wed, 29 Apr 2020 14:14:49 +0300
Subject: [PATCH 03/32] Dev Branch machines with missing SIO on machine.h
---
src/include/86box/machine.h | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index 5cf520dbf..f37531cec 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -297,15 +297,21 @@ extern int machine_at_i430vx_init(const machine_t *);
extern int machine_at_brio80xx_init(const machine_t *);
extern int machine_at_pb680_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_p55xb2_init(const machine_t *);
+#endif
extern int machine_at_tx97_init(const machine_t *);
extern int machine_at_ym430tx_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_586t2_init(const machine_t *);
extern int machine_at_807ds_init(const machine_t *);
+#endif
extern int machine_at_p5mms98_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_tx100_init(const machine_t *);
extern int machine_at_advanceii_init(const machine_t *);
+#endif
#ifdef EMU_DEVICE_H
extern const device_t *at_pb640_get_device(void);
@@ -320,7 +326,9 @@ extern int machine_at_686nx_init(const machine_t *);
extern int machine_at_mb600n_init(const machine_t *);
extern int machine_at_8500ttc_init(const machine_t *);
extern int machine_at_m6mi_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_vs440fx_init(const machine_t *);
+#endif
#ifdef EMU_DEVICE_H
extern void machine_at_p65up5_common_init(const machine_t *, const device_t *northbridge);
#endif
@@ -330,7 +338,9 @@ extern int machine_at_p65up5_cp6nd_init(const machine_t *);
extern int machine_at_p65up5_cpknd_init(const machine_t *);
extern int machine_at_p6kfx_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_6bxc_init(const machine_t *);
+#endif
extern int machine_at_p2bls_init(const machine_t *);
extern int machine_at_p3bf_init(const machine_t *);
extern int machine_at_bf6_init(const machine_t *);
From 722dd16c716117517269d0d5bb7d3a675f07c840 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Sat, 2 May 2020 21:27:05 +0300
Subject: [PATCH 04/32] Replaced the Bora Pro with the Tyan Tsunami
It's a more functional and more stable board than the previous one. Works as intended. Might help to revive the abandoned PC87309 code from PCem-X
---
src/include/86box/machine.h | 4 +++-
src/machine/m_at_slot1.c | 23 ++++++++++++-----------
src/machine/machine_table.c | 6 +++---
3 files changed, 18 insertions(+), 15 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index f37531cec..6d3e5991f 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -344,7 +344,9 @@ extern int machine_at_6bxc_init(const machine_t *);
extern int machine_at_p2bls_init(const machine_t *);
extern int machine_at_p3bf_init(const machine_t *);
extern int machine_at_bf6_init(const machine_t *);
-extern int machine_at_borapro_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
+extern int machine_at_tsunamiatx_init(const machine_t *);
+#endif
/* m_at_socket370.c */
extern int machine_at_cubx_init(const machine_t *);
diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c
index 37c8868e6..83de82447 100644
--- a/src/machine/m_at_slot1.c
+++ b/src/machine/m_at_slot1.c
@@ -274,17 +274,16 @@ machine_at_bf6_init(const machine_t *model)
return ret;
}
+#if defined(DEV_BRANCH) && defined(NO_SIO)
int
-machine_at_borapro_init(const machine_t *model)
+machine_at_tsunamiatx_init(const machine_t *model)
{
- //AMI 440ZX Board. Packard Bell OEM of the MSI-6168
- //MIGHT REQUIRE MORE EXCESSIVE TESTING!
- //Reports emmersive amounts of RAM like few Intel OEM boards
- //we have.
+ //AMI 440BX Board. Requires the PC87309 and
+ //doesn't like the i686 CPU's
int ret;
- ret = bios_load_linear(L"roms/machines/borapro/MS6168V2.50",
+ ret = bios_load_linear(L"roms/machines/tsunamiatx/bx46200f.rom",
0x000c0000, 262144, 0);
if (bios_only || !ret)
@@ -294,18 +293,20 @@ machine_at_borapro_init(const machine_t *model)
pci_init(PCI_CONFIG_TYPE_1);
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
- pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4);
- pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1);
+ pci_register_slot(0x10, PCI_CARD_NORMAL, 1, 2, 3, 4);
+ pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1);
pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2);
- pci_register_slot(0x14, PCI_CARD_NORMAL, 4, 1, 2, 3);
+ pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3);
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4);
+ pci_register_slot(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4);
pci_register_slot(0x01, PCI_CARD_NORMAL, 1, 2, 3, 4);
- device_add(&i440zx_device);
+ device_add(&i440bx_device);
device_add(&piix4e_device);
- device_add(&w83977ef_device);
+ device_add(&pc87306_device); //PC87309
device_add(&keyboard_ps2_ami_pci_device);
device_add(&intel_flash_bxt_device);
spd_register(SPD_TYPE_SDRAM, 0x3, 256);
return ret;
}
+#endif
\ No newline at end of file
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index 2ce007f51..03fff0985 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -304,9 +304,9 @@ const machine_t machines[] = {
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
{ "[Slot 1 BX] ASUS P3B-F", "p3bf", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p3bf_init, NULL },
{ "[Slot 1 BX] ABit BF6", "bf6", {{"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_bf6_init, NULL },
-
- /* 440ZX */
- { "[Slot 1 ZX] Packard Bell Bora Pro", "borapro", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_borapro_init, NULL },
+#if defined(DEV_BRANCH) && defined(NO_SIO)
+ { "[Slot 1 BX] Tyan Tsunami ATX", "tsunamiatx", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_tsunamiatx_init, NULL },
+#endif
/* PGA370 machines */
/* 440BX */
From 2d4cbcfd77280d3ea3083ebfcb5b1ae9e05f2a81 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Sun, 3 May 2020 16:38:05 +0300
Subject: [PATCH 05/32] Added the generic MR 286 clone
---
src/include/86box/machine.h | 1 +
src/machine/m_at_286_386sx.c | 19 +++++++++++++++++++
src/machine/machine_table.c | 1 +
3 files changed, 21 insertions(+)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index 6d3e5991f..eb5ea86c4 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -185,6 +185,7 @@ extern int machine_at_tg286m_init(const machine_t *);
extern int machine_at_ama932j_init(const machine_t *);
extern int machine_at_px286_init(const machine_t *);
extern int machine_at_quadt286_init(const machine_t *);
+extern int machine_at_mr286_init(const machine_t *);
extern int machine_at_neat_init(const machine_t *);
extern int machine_at_neat_ami_init(const machine_t *);
diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c
index c1ccd5d39..fc4615a1a 100644
--- a/src/machine/m_at_286_386sx.c
+++ b/src/machine/m_at_286_386sx.c
@@ -38,6 +38,25 @@
#include <86box/video.h>
#include <86box/machine.h>
+int
+machine_at_mr286_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_interleaved(L"roms/machines/mr286/V000B200-1",
+ L"roms/machines/mr286/V000B200-2",
+ 0x000f0000, 65536, 0);
+
+ if (bios_only || !ret)
+ return ret;
+
+ machine_at_common_ide_init(model);
+ device_add(&keyboard_at_device);
+ device_add(&fdc_at_device);
+ device_add(&headland_device);
+
+ return ret;
+}
static void
machine_at_headland_common_init(int ht386)
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index 03fff0985..c5de151c1 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -106,6 +106,7 @@ const machine_t machines[] = {
{ "[286 ISA] Award 286 clone", "award286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_award286_init, NULL },
{ "[286 ISA] Phoenix 286 clone", "px286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_px286_init, NULL },
{ "[286 ISA] Quadtel 286 clone", "quadt286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_quadt286_init, NULL },
+ { "[286 ISA] MR 286 clone", "mr286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512, 8192, 128, 127, machine_at_mr286_init, NULL },
{ "[286 ISA] Commodore PC 30 III", "cmdpc30", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_cmdpc_init, NULL },
{ "[286 ISA] Compaq Portable II", "portableii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_portableii_init, NULL },
{ "[286 ISA] Compaq Portable III", "portableiii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_VIDEO, 640,16384, 128, 127, machine_at_portableiii_init, at_cpqiii_get_device },
From e0e14498af6484969ef643eda112f2f360b5ae24 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Sun, 3 May 2020 16:43:43 +0300
Subject: [PATCH 06/32] Adjusted the RAM size of the MR 286 to 16MB
---
src/machine/machine_table.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index c5de151c1..f71d2edd9 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -106,7 +106,7 @@ const machine_t machines[] = {
{ "[286 ISA] Award 286 clone", "award286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_award286_init, NULL },
{ "[286 ISA] Phoenix 286 clone", "px286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_px286_init, NULL },
{ "[286 ISA] Quadtel 286 clone", "quadt286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_quadt286_init, NULL },
- { "[286 ISA] MR 286 clone", "mr286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512, 8192, 128, 127, machine_at_mr286_init, NULL },
+ { "[286 ISA] MR 286 clone", "mr286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512, 16384, 128, 127, machine_at_mr286_init, NULL },
{ "[286 ISA] Commodore PC 30 III", "cmdpc30", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_cmdpc_init, NULL },
{ "[286 ISA] Compaq Portable II", "portableii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_portableii_init, NULL },
{ "[286 ISA] Compaq Portable III", "portableiii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_VIDEO, 640,16384, 128, 127, machine_at_portableiii_init, at_cpqiii_get_device },
From 721c64a0455662183abc3e81ef427cf60121a2ee Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Sun, 3 May 2020 20:08:32 +0300
Subject: [PATCH 07/32] Added an ACC 386DX AMI clone
Just a non-OEM AMI board
---
src/include/86box/machine.h | 4 ++--
src/machine/m_at_386dx_486.c | 19 +++++++++++++++++++
src/machine/machine_table.c | 3 ++-
3 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index eb5ea86c4..a6b5a9f0d 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -191,8 +191,6 @@ extern int machine_at_neat_init(const machine_t *);
extern int machine_at_neat_ami_init(const machine_t *);
extern int machine_at_goldstar386_init(const machine_t *);
-extern int machine_at_micronics386_init(const machine_t *);
-
extern int machine_at_award286_init(const machine_t *);
extern int machine_at_gw286ct_init(const machine_t *);
@@ -212,7 +210,9 @@ extern const device_t *at_commodore_sl386sx_get_device(void);
/* m_at_386dx_486.c */
+extern int machine_at_acc386_init(const machine_t *);
extern int machine_at_ecs386_init(const machine_t *);
+extern int machine_at_micronics386_init(const machine_t *);
extern int machine_at_pb410a_init(const machine_t *);
diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c
index 3832ddc21..e67f95c30 100644
--- a/src/machine/m_at_386dx_486.c
+++ b/src/machine/m_at_386dx_486.c
@@ -42,6 +42,25 @@
#include <86box/intel_sio.h>
#include <86box/machine.h>
+int
+machine_at_acc386_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_linear(L"roms/machines/acc386/acc386.BIN",
+ 0x000f0000, 65536, 0);
+
+ if (bios_only || !ret)
+ return ret;
+
+ machine_at_common_init(model);
+ device_add(&acc2168_device);
+ device_add(&keyboard_at_ami_device);
+ device_add(&fdc_at_device);
+
+ return ret;
+}
+
int
machine_at_ecs386_init(const machine_t *model)
{
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index f71d2edd9..e6d22d0e3 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -154,7 +154,8 @@ const machine_t machines[] = {
/* 386DX machines */
{ "[386DX ISA] Compaq Portable III (386)", "portableiii386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC | MACHINE_VIDEO, 1, 14, 1, 127, machine_at_portableiii386_init, at_cpqiii_get_device },
- { "[386DX ISA] ECS 386/32", "ecs386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 512, 127, machine_at_ecs386_init, NULL },
+ { "[386DX ISA] AMI 386DX clone", "acc386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 16384, 128, 127, machine_at_acc386_init, NULL },
+ { "[386DX ISA] ECS 386/32", "ecs386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 1, 32, 1, 127, machine_at_ecs386_init, NULL },
{ "[386DX ISA] Micronics 386 clone", "micronics386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 8192, 128, 127, machine_at_micronics386_init, NULL },
/* 386DX machines which utilize the VLB bus */
From b87b01896a58a19f274ab004ca913f7a6182e4d6 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Mon, 4 May 2020 14:59:20 +0300
Subject: [PATCH 08/32] Replaced the TX100 with the FIC VA-502
Socket 7 predecessor to the already added VA-503+
---
src/include/86box/machine.h | 3 ++-
src/machine/m_at_socket7_s7.c | 10 +++++-----
src/machine/machine_table.c | 7 ++++---
3 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index a6b5a9f0d..aac4ebbfc 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -309,8 +309,9 @@ extern int machine_at_807ds_init(const machine_t *);
#endif
extern int machine_at_p5mms98_init(const machine_t *);
+extern int machine_at_ficva502_init(const machine_t *);
+
#if defined(DEV_BRANCH) && defined(NO_SIO)
-extern int machine_at_tx100_init(const machine_t *);
extern int machine_at_advanceii_init(const machine_t *);
#endif
diff --git a/src/machine/m_at_socket7_s7.c b/src/machine/m_at_socket7_s7.c
index 24a6d533c..c3d2343c5 100644
--- a/src/machine/m_at_socket7_s7.c
+++ b/src/machine/m_at_socket7_s7.c
@@ -879,13 +879,12 @@ machine_at_p5mms98_init(const machine_t *model)
return ret;
}
-#if defined(DEV_BRANCH) && defined(NO_SIO)
int
-machine_at_tx100_init(const machine_t *model)
+machine_at_ficva502_init(const machine_t *model)
{
int ret;
- ret = bios_load_linear(L"roms/machines/tx100/T100108E.rom",
+ ret = bios_load_linear(L"roms/machines/ficva502/VA502bp.BIN",
0x000e0000, 131072, 0);
if (bios_only || !ret)
@@ -902,14 +901,15 @@ machine_at_tx100_init(const machine_t *model)
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4);
device_add(&via_vpx_device);
device_add(&via_vt82c586b_device);
- device_add(&keyboard_ps2_ami_pci_device);
- device_add(&um8669f_device); //IT8661F
+ device_add(&keyboard_ps2_pci_device);
+ device_add(&fdc37c669_device);
device_add(&sst_flash_29ee010_device);
spd_register(SPD_TYPE_SDRAM, 0xF, 256);
return ret;
}
+#if defined(DEV_BRANCH) && defined(NO_SIO)
int
machine_at_advanceii_init(const machine_t *model)
{
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index e6d22d0e3..9c40d614b 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -267,10 +267,11 @@ const machine_t machines[] = {
#endif
{ "[Socket 7 TX] SuperMicro P5MMS98", "p5mms98", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 256, 8, 255, machine_at_p5mms98_init, NULL },
-#if defined(DEV_BRANCH) && defined(NO_SIO)
- /* Apollo VPX */
- { "[Socket 7 VPX] Zida Tomato TX100", "tx100", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_tx100_init, NULL },
+ /* Apollo VPX */
+ { "[Socket 7 VPX] FIC VA-502", "ficva502", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_ficva502_init, NULL },
+
+#if defined(DEV_BRANCH) && defined(NO_SIO)
/* Apollo VP3 */
{ "[Socket 7 VP3] QDI Advance II", "advanceii", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_advanceii_init, NULL },
#endif
From b23031fa65e19f38f16c89e5420a68b2de614453 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Mon, 4 May 2020 17:14:59 +0300
Subject: [PATCH 09/32] The KENITEC serves the Phoenix 286 Clone
Unbranded NEAT Bios that work much better than Headland
---
src/machine/m_at_286_386sx.c | 40 ++++++++++++++++++------------------
1 file changed, 20 insertions(+), 20 deletions(-)
diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c
index fc4615a1a..113cb49b9 100644
--- a/src/machine/m_at_286_386sx.c
+++ b/src/machine/m_at_286_386sx.c
@@ -139,26 +139,6 @@ machine_at_ama932j_init(const machine_t *model)
return ret;
}
-int
-machine_at_px286_init(const machine_t *model)
-{
- int ret;
-
- ret = bios_load_interleaved(L"roms/machines/px286/286-Headland-LO.BIN",
- L"roms/machines/px286/286-Headland-HI.BIN",
- 0x000f0000, 131072, 0);
-
- if (bios_only || !ret)
- return ret;
-
- machine_at_common_ide_init(model);
- device_add(&keyboard_at_device);
- device_add(&fdc_at_device);
- device_add(&headland_device);
-
- return ret;
-}
-
int
machine_at_quadt286_init(const machine_t *model)
{
@@ -220,6 +200,26 @@ machine_at_neat_ami_init(const machine_t *model)
return ret;
}
+int
+machine_at_px286_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_linear(L"roms/machines/px286/KENITEC.BIN",
+ 0x000f0000, 65536, 0);
+
+ if (bios_only || !ret)
+ return ret;
+
+ machine_at_common_init(model);
+ device_add(&keyboard_at_device);
+ device_add(&fdc_at_device);
+ device_add(&neat_device);
+
+ return ret;
+}
+
+
int
machine_at_goldstar386_init(const machine_t *model)
{
From 5415b8404105ebf15f33c83864b63086832a2d26 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Mon, 4 May 2020 17:33:36 +0300
Subject: [PATCH 10/32] Implemented the ACUMOS AVGA1
meant for the new Phoenix 286 clone
---
src/include/86box/video.h | 1 +
src/video/vid_cl54xx.c | 26 ++++++++++++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/src/include/86box/video.h b/src/include/86box/video.h
index 04f81c628..3ae6d3cf2 100644
--- a/src/include/86box/video.h
+++ b/src/include/86box/video.h
@@ -211,6 +211,7 @@ extern const device_t ati28800_wonderxl24_device;
#endif
/* Cirrus Logic CL-GD 54xx */
+extern const device_t gd5401_isa_device;
extern const device_t gd5402_isa_device;
extern const device_t gd5402_onboard_device;
extern const device_t gd5420_isa_device;
diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c
index 9df438696..ddcb5624f 100644
--- a/src/video/vid_cl54xx.c
+++ b/src/video/vid_cl54xx.c
@@ -36,6 +36,7 @@
#include <86box/vid_svga.h>
#include <86box/vid_svga_render.h>
+#define BIOS_GD5401_PATH L"roms/video/cirruslogic/avga1.rom"
#define BIOS_GD5402_PATH L"roms/video/cirruslogic/avga2.rom"
#define BIOS_GD5402_ONBOARD_PATH L"roms/video/machines/cbm_sl386sx25/Commodore386SX-25_AVGA2.bin"
#define BIOS_GD5420_PATH L"roms/video/cirruslogic/5420.vbi"
@@ -57,6 +58,7 @@
#define BIOS_GD5446_STB_PATH L"roms/video/cirruslogic/stb nitro64v.BIN"
#define BIOS_GD5480_PATH L"roms/video/cirruslogic/clgd5480.rom"
+#define CIRRUS_ID_CLGD5401 0x88
#define CIRRUS_ID_CLGD5402 0x89
#define CIRRUS_ID_CLGD5420 0x8a
#define CIRRUS_ID_CLGD5422 0x8c
@@ -2960,6 +2962,11 @@ static void
gd54xx->has_bios = 1;
switch (id) {
+
+ case CIRRUS_ID_CLGD5401:
+ romfn = BIOS_GD5401_PATH;
+ break;
+
case CIRRUS_ID_CLGD5402:
if (info->local & 0x200)
romfn = BIOS_GD5402_ONBOARD_PATH;
@@ -3133,6 +3140,12 @@ static void
return gd54xx;
}
+static int
+gd5401_available(void)
+{
+ return rom_present(BIOS_GD5401_PATH);
+}
+
static int
gd5402_available(void)
{
@@ -3355,6 +3368,19 @@ static const device_config_t gd5434_config[] =
}
};
+const device_t gd5401_isa_device =
+{
+ "Cirrus Logic GD-5401 (ACUMOS AVGA1)",
+ DEVICE_AT | DEVICE_ISA,
+ CIRRUS_ID_CLGD5401,
+ gd54xx_init, gd54xx_close,
+ NULL,
+ gd5401_available,
+ gd54xx_speed_changed,
+ gd54xx_force_redraw,
+ NULL,
+};
+
const device_t gd5402_isa_device =
{
"Cirrus Logic GD-5402 (ACUMOS AVGA2)",
From 1ef6f8da0c6aee9449389771d17c15ac29bf8035 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Mon, 4 May 2020 17:35:12 +0300
Subject: [PATCH 11/32] Added the AVGA1 on the video table
---
src/video/vid_table.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/video/vid_table.c b/src/video/vid_table.c
index f1f10835b..1305547cb 100644
--- a/src/video/vid_table.c
+++ b/src/video/vid_table.c
@@ -68,6 +68,7 @@ video_cards[] = {
#endif
{ "[ISA] CGA", "cga", &cga_device },
{ "[ISA] Chips & Technologies SuperEGA", "superega", &sega_device },
+ { "[ISA] Cirrus Logic CL-GD 5401", "cl_gd5401_isa", &gd5401_isa_device },
{ "[ISA] Cirrus Logic CL-GD 5402", "cl_gd5402_isa", &gd5402_isa_device },
{ "[ISA] Cirrus Logic CL-GD 5420", "cl_gd5420_isa", &gd5420_isa_device },
#if defined(DEV_BRANCH) && defined(USE_CL5422)
From 5e29bb7eb79dad771abcc0dd7689f4269ee1d0b9 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 5 May 2020 11:46:59 +0300
Subject: [PATCH 12/32] Added the FIC PA-2012
Motherboard of historic significance as it's the first ever one which came with AGP
---
src/include/86box/machine.h | 1 +
src/machine/m_at_socket7_s7.c | 30 ++++++++++++++++++++++++++++++
src/machine/machine_table.c | 3 ++-
3 files changed, 33 insertions(+), 1 deletion(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index aac4ebbfc..fd2ab8986 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -311,6 +311,7 @@ extern int machine_at_p5mms98_init(const machine_t *);
extern int machine_at_ficva502_init(const machine_t *);
+extern int machine_at_ficpa2012_init(const machine_t *);
#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_advanceii_init(const machine_t *);
#endif
diff --git a/src/machine/m_at_socket7_s7.c b/src/machine/m_at_socket7_s7.c
index c3d2343c5..020603c60 100644
--- a/src/machine/m_at_socket7_s7.c
+++ b/src/machine/m_at_socket7_s7.c
@@ -909,6 +909,36 @@ machine_at_ficva502_init(const machine_t *model)
return ret;
}
+int
+machine_at_ficpa2012_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_linear(L"roms/machines/ficpa2012/113jb16.awd",
+ 0x000e0000, 131072, 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(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(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4);
+ device_add(&via_vp3_device);
+ device_add(&via_vt82c586b_device);
+ device_add(&keyboard_ps2_pci_device);
+ device_add(&w83877f_device);
+ device_add(&sst_flash_39sf010_device);
+ spd_register(SPD_TYPE_SDRAM, 0xF, 64);
+
+ return ret;
+}
+
#if defined(DEV_BRANCH) && defined(NO_SIO)
int
machine_at_advanceii_init(const machine_t *model)
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index 9c40d614b..00f524949 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -271,8 +271,9 @@ const machine_t machines[] = {
/* Apollo VPX */
{ "[Socket 7 VPX] FIC VA-502", "ficva502", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_ficva502_init, NULL },
-#if defined(DEV_BRANCH) && defined(NO_SIO)
/* Apollo VP3 */
+ { "[Socket 7 VP3] FIC PA-2012", "ficpa2012", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_ficpa2012_init, NULL },
+#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[Socket 7 VP3] QDI Advance II", "advanceii", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_advanceii_init, NULL },
#endif
From 2e1778e1bd2d6854476851bdd775e8b917580960 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 5 May 2020 12:10:15 +0300
Subject: [PATCH 13/32] Removed the Intel VS440FX
It doesn't POST and on all of that, not helpful at all on PC87307 development.
---
src/include/86box/machine.h | 3 ---
src/machine/m_at_socket8.c | 32 --------------------------------
src/machine/machine_table.c | 5 +----
3 files changed, 1 insertion(+), 39 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index fd2ab8986..c4af4a08e 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -329,9 +329,6 @@ extern int machine_at_686nx_init(const machine_t *);
extern int machine_at_mb600n_init(const machine_t *);
extern int machine_at_8500ttc_init(const machine_t *);
extern int machine_at_m6mi_init(const machine_t *);
-#if defined(DEV_BRANCH) && defined(NO_SIO)
-extern int machine_at_vs440fx_init(const machine_t *);
-#endif
#ifdef EMU_DEVICE_H
extern void machine_at_p65up5_common_init(const machine_t *, const device_t *northbridge);
#endif
diff --git a/src/machine/m_at_socket8.c b/src/machine/m_at_socket8.c
index dba53237b..fd7b5bcea 100644
--- a/src/machine/m_at_socket8.c
+++ b/src/machine/m_at_socket8.c
@@ -158,38 +158,6 @@ machine_at_m6mi_init(const machine_t *model)
return ret;
}
-#if defined(DEV_BRANCH) && defined(NO_SIO)
-int
-machine_at_vs440fx_init(const machine_t *model)
-{
- int ret;
-
- ret = bios_load_linear_combined2(L"roms/machines/vs440fx/1011CS1_.BIO",
- L"roms/machines/vs440fx/1011CS1_.BI1",
- L"roms/machines/vs440fx/1011CS1_.BI2",
- L"roms/machines/vs440fx/1011CS1_.BI3",
- L"roms/machines/vs440fx/1011CS1_.RCV",
- 0x3a000, 128);
-
- if (bios_only || !ret)
- return ret;
-
- machine_at_common_init(model);
-
- 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, 0, 0);
- device_add(&i440fx_device);
- device_add(&piix3_device);
- device_add(&keyboard_ps2_ami_pci_device);
- //device_add(&pc87307_device);
- device_add(&pc87306_device);
- device_add(&intel_flash_bxt_ami_device);
-
- return ret;
-}
-#endif
-
void
machine_at_p65up5_common_init(const machine_t *model, const device_t *northbridge)
{
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index 00f524949..22ea3b0cb 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -288,9 +288,6 @@ const machine_t machines[] = {
{ "[Socket 8 FX] PC Partner MB600N", "mb600n", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_mb600n_init, NULL },
{ "[Socket 8 FX] Biostar MB-8500ttc", "8500ttc", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_8500ttc_init, NULL },
{ "[Socket 8 FX] Micronics M6MI", "m6mi", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 384, 8, 127, machine_at_m6mi_init, NULL },
-#if defined(DEV_BRANCH) && defined(NO_SIO)
- { "[Socket 8 FX] Intel VS440FX", "vs440fx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 256, 8, 127, machine_at_vs440fx_init, NULL },
-#endif
{ "[Socket 8 FX] ASUS P/I-P65UP5 (C-P6ND)", "p65up5_cp6nd", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_p65up5_cp6nd_init, NULL },
@@ -301,8 +298,8 @@ const machine_t machines[] = {
/* 440LX */
- /* 440BX */
#if defined(DEV_BRANCH) && defined(NO_SIO)
+ /* 440BX */
{ "[Slot 1 BX] Gigabyte GA-6BXC", "6bxc", {{"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_6bxc_init, NULL },
#endif
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
From f83b1d2609291df5554e4361074ac67c10784ce6 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 5 May 2020 12:11:48 +0300
Subject: [PATCH 14/32] Small change on the 440BX comment
It was inside on the 6BXC's NO_SIO dev branch by accident
---
src/machine/machine_table.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index 22ea3b0cb..adca17b4a 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -298,8 +298,8 @@ const machine_t machines[] = {
/* 440LX */
-#if defined(DEV_BRANCH) && defined(NO_SIO)
/* 440BX */
+#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[Slot 1 BX] Gigabyte GA-6BXC", "6bxc", {{"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_6bxc_init, NULL },
#endif
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
From b6207798968447419aac36bd58fbdbcbecb097ef Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 5 May 2020 12:17:58 +0300
Subject: [PATCH 15/32] Corrected the ROM location of the Soltek board
---
src/machine/m_at_socket370.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c
index 009999f07..871b3cc6b 100644
--- a/src/machine/m_at_socket370.c
+++ b/src/machine/m_at_socket370.c
@@ -140,7 +140,7 @@ machine_at_63a_init(const machine_t *model)
difference between to chipsets other than the name. */
int ret;
- ret = bios_load_linear(L"roms/machines/63a/63a-q3.bin",
+ ret = bios_load_linear(L"roms/machines/63a1/63a-q3.bin",
0x000c0000, 262144, 0);
if (bios_only || !ret)
@@ -198,4 +198,3 @@ machine_at_apas3_init(const machine_t *model)
return ret;
}
-
From 811fac7064c6a4735540d1dffaf92971afa46375 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 5 May 2020 13:29:59 +0300
Subject: [PATCH 16/32] Corrected the Mendocino multipliers
Now the Mendocino's use the correct intended multipliers.
---
src/cpu_common/cpu_table.c | 22 +++++++++++-----------
1 file changed, 11 insertions(+), 11 deletions(-)
diff --git a/src/cpu_common/cpu_table.c b/src/cpu_common/cpu_table.c
index 620d94eaa..8fb271b47 100644
--- a/src/cpu_common/cpu_table.c
+++ b/src/cpu_common/cpu_table.c
@@ -720,29 +720,29 @@ CPU cpus_PentiumII[] = {
{"Pentium II Deschutes 350", CPU_PENTIUM2D, 350000000, 3.5, 0x651, 0x651, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 32,32,11,11, 42},
{"Pentium II Deschutes 400", CPU_PENTIUM2D, 400000000, 4.0, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48},
{"Pentium II Deschutes 450", CPU_PENTIUM2D, 450000000, 4.5, 0x652, 0x652, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 41,41,14,14, 54},
+
+ /*Intel Celeron Mendocino Mobile(Applied on a BGA615 Socket)*/
+ {"Mobile Celeron Mendocino 466", CPU_PENTIUM2D, 466666666, 7.0, 0x66a, 0x66a, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 40,40,14,14, 52},
{"", -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
CPU cpus_Celeron[] = {
- /* Mendocino Celerons. Exact architecture as the P2D series. Intended for
- the PGA370 boards but they were capable to fit on a PGA 370 to Slot 1
+ /* Mendocino Celerons. Exact architecture as the P2D series with their L2 cache on-dye.
+ Intended for the PGA370 boards but they were capable to fit on a PGA 370 to Slot 1
adaptor card so they work on Slot 1 motherboards too!.
- The 100Mhz Mendocino is only meant to not cause any struggle
+ The 100Mhz & 166Mhz Mendocino is only meant to not cause any struggle
to the recompiler. */
- {"Celeron Mendocino 25", CPU_PENTIUM2D, 25000000, 1.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 4, 4, 3, 3, 3},
- {"Celeron Mendocino 50", CPU_PENTIUM2D, 50000000, 1.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 4, 4, 3, 3, 6},
- {"Celeron Mendocino 66", CPU_PENTIUM2D, 66666666, 1.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 6, 6, 3, 3, 8},
{"Celeron Mendocino 100", CPU_PENTIUM2D, 100000000, 1.5, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 10,10, 6, 6, 12},
+ {"Celeron Mendocino 166", CPU_PENTIUM2D, 166666666, 2.5, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 15,15, 7, 7, 20},
{"Celeron Mendocino 300/66", CPU_PENTIUM2D, 300000000, 4.5, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 25,25,12,12, 36},
{"Celeron Mendocino 333", CPU_PENTIUM2D, 333333333, 5.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 27,27,13,13, 40},
{"Celeron Mendocino 366", CPU_PENTIUM2D, 366666666, 5.5, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 33,33,17,17, 44},
- {"Celeron Mendocino 400", CPU_PENTIUM2D, 400000000, 4.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48},
- {"Celeron Mendocino 433", CPU_PENTIUM2D, 433333333, 4.5, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 39,39,13,13, 51},
- {"Celeron Mendocino 466", CPU_PENTIUM2D, 466666666, 5.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 43,43,15,15, 57},
- {"Celeron Mendocino 500", CPU_PENTIUM2D, 500000000, 5.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45,45,15,15, 60},
- {"Celeron Mendocino 533", CPU_PENTIUM2D, 533333333, 5.5, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48,48,17,17, 64},
+ {"Celeron Mendocino 400", CPU_PENTIUM2D, 400000000, 6.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 36,36,12,12, 48},
+ {"Celeron Mendocino 433", CPU_PENTIUM2D, 433333333, 6.5, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 39,39,13,13, 51},
+ {"Celeron Mendocino 500", CPU_PENTIUM2D, 500000000, 7.5, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 45,45,15,15, 60},
+ {"Celeron Mendocino 533", CPU_PENTIUM2D, 533333333, 8.0, 0x665, 0x665, 0, CPU_SUPPORTS_DYNAREC | CPU_REQUIRES_DYNAREC, 48,48,17,17, 64},
{"", -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
};
From c9003894ed1d7ff0f561296cc8b0a1f90f20e03b Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Thu, 7 May 2020 17:51:53 +0300
Subject: [PATCH 17/32] Few minor changes on the VPX
---
src/chipset/via_vpx.c | 44 ++++++++++++++++++++++---------------------
1 file changed, 23 insertions(+), 21 deletions(-)
diff --git a/src/chipset/via_vpx.c b/src/chipset/via_vpx.c
index f19d682e1..c9798e319 100644
--- a/src/chipset/via_vpx.c
+++ b/src/chipset/via_vpx.c
@@ -1,25 +1,25 @@
/*
-
- 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.
-
-
-
-VIA Apollo VPX North Bridge emulation
-
-VT82C585VPX used in the Zida Tomato TX100 board
-based on the model of VIA MVP3 by mooch & Sarah
-
-There's also a SOYO board using the ETEQ chipset which is a rebranded
-VPX + 586B but fails to save on CMOS properly.
-
-Authors: Sarah Walker,
-Copyright(C) 2020 Tiseno100
-Copyright(C) 2020 Melissa Goad
-Copyright(C) 2020 Miran Grca
-
+*
+* 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.
+*
+*
+*
+* VIA Apollo VPX North Bridge emulation
+*
+* VT82C585VPX used in the FIC VA-502 board
+* based on the model of VIA MVP3 by mooch & Sarah
+*
+* There's also a SOYO board using the ETEQ chipset which is a rebranded
+* VPX + 586B but fails to save on CMOS properly.
+*
+* Authors: Sarah Walker,
+* Copyright(C) 2020 Tiseno100
+* Copyright(C) 2020 Melissa Goad
+* Copyright(C) 2020 Miran Grca
+*
*/
#include
@@ -88,6 +88,8 @@ via_vpx_t *dev = (via_vpx_t *) priv;
} else if(dev->pci_conf[0x04] && 0x200){ //Bitfield 9
dev->pci_conf[0x04] = (dev->pci_conf[0x04] & ~0x200) | (val & 0x200);
}
+ break;
+
case 0x07: // Status
dev->pci_conf[0x07] &= ~(val & 0xb0);
break;
From d4e1f2e405df1d9d1cab36aa0c00fd425c1c55b2 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Thu, 7 May 2020 17:54:43 +0300
Subject: [PATCH 18/32] Removed the Award 430FX President board. Replaced it
with the QDI Chariot
As we didn't have enough information for that board, it was removed and replaced with the QDI Chariot.
---
src/include/86box/machine.h | 3 ++-
src/machine/m_at_socket4_5.c | 31 -------------------------------
src/machine/m_at_socket7_s7.c | 30 +++++++++++++++++++++++++++++-
src/machine/machine_table.c | 9 +++++++--
4 files changed, 38 insertions(+), 35 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index c4af4a08e..7a28a53f6 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -199,6 +199,7 @@ extern int machine_at_spc4200p_init(const machine_t *);
extern int machine_at_spc4216p_init(const machine_t *);
extern int machine_at_kmxc02_init(const machine_t *);
extern int machine_at_deskmaster286_init(const machine_t *);
+extern int machine_at_alr_init(const machine_t *);
extern int machine_at_commodore_sl386sx_init(const machine_t *);
extern int machine_at_wd76c10_init(const machine_t *);
@@ -265,7 +266,6 @@ extern int machine_at_p54tp4xe_init(const machine_t *);
extern int machine_at_endeavor_init(const machine_t *);
extern int machine_at_zappa_init(const machine_t *);
extern int machine_at_mb500n_init(const machine_t *);
-extern int machine_at_president_init(const machine_t *);
#if defined(DEV_BRANCH) && defined(USE_VECTRA54)
extern int machine_at_vectra54_init(const machine_t *);
#endif
@@ -276,6 +276,7 @@ extern const device_t *at_endeavor_get_device(void);
#endif
/* m_at_socket7_s7.c */
+extern int machine_at_chariot_init(const machine_t *);
extern int machine_at_thor_init(const machine_t *);
#if defined(DEV_BRANCH) && defined(USE_MRTHOR)
extern int machine_at_mrthor_init(const machine_t *);
diff --git a/src/machine/m_at_socket4_5.c b/src/machine/m_at_socket4_5.c
index 81dcb13ac..793b7e977 100644
--- a/src/machine/m_at_socket4_5.c
+++ b/src/machine/m_at_socket4_5.c
@@ -353,37 +353,6 @@ machine_at_mb500n_init(const machine_t *model)
return ret;
}
-
-int
-machine_at_president_init(const machine_t *model)
-{
- int ret;
-
- ret = bios_load_linear(L"roms/machines/president/bios.bin",
- 0x000e0000, 131072, 0);
-
- if (bios_only || !ret)
- return ret;
-
- machine_at_common_init(model);
-
- pci_init(PCI_CONFIG_TYPE_1);
- pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
- 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(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
- device_add(&i430fx_device);
- device_add(&piix_device);
- device_add(&keyboard_ps2_pci_device);
- device_add(&w83877f_president_device);
- device_add(&intel_flash_bxt_device);
-
- return ret;
-}
-
-
#if defined(DEV_BRANCH) && defined(USE_VECTRA54)
int
machine_at_vectra54_init(const machine_t *model)
diff --git a/src/machine/m_at_socket7_s7.c b/src/machine/m_at_socket7_s7.c
index 020603c60..dbfc7e655 100644
--- a/src/machine/m_at_socket7_s7.c
+++ b/src/machine/m_at_socket7_s7.c
@@ -45,6 +45,35 @@
#include "cpu.h"
#include <86box/machine.h>
+int
+machine_at_chariot_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_linear(L"roms/machines/chariot/P5IV183.ROM",
+ 0x000e0000, 131072, 0);
+
+ if (bios_only || !ret)
+ return ret;
+
+ machine_at_common_init(model);
+
+ 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, 0, 0);
+ pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4);
+ pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1);
+ pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 2, 1);
+ pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 3, 2, 1);
+
+ device_add(&i430fx_device);
+ device_add(&piix_device);
+ device_add(&keyboard_ps2_ami_pci_device);
+ device_add(&pc87306_device);
+ device_add(&intel_flash_bxt_device);
+
+ return ret;
+}
static void
machine_at_thor_common_init(const machine_t *model, int mr)
@@ -138,7 +167,6 @@ machine_at_pb640_init(const machine_t *model)
return ret;
}
-
const device_t *
at_pb640_get_device(void)
{
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index adca17b4a..d11f72ac2 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -37,11 +37,13 @@
#if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"Cyrix", cpus_6x863V}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"Cyrix", cpus_6x86SS7}, {"", NULL}}
#else
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"", NULL}, {"", NULL}}
#endif
@@ -49,11 +51,13 @@
#if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x863V}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"Cyrix", cpus_6x86SS7}, {"", NULL}}
#else
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"", NULL}, {"", NULL}}
#endif
@@ -131,6 +135,7 @@ const machine_t machines[] = {
{ "[286 ISA] Trigem 286M", "tg286m", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 8192, 128, 127, machine_at_tg286m_init, NULL },
{ "[286 ISA] Samsung Deskmaster 286", "deskmaster286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_deskmaster286_init, NULL },
+ { "[286 ISA] ALR", "alr", {{"286", cpus_286}, {"386SX", cpus_i386SX}, {"486", cpus_i486S1}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_alr_init, NULL },
/* 286 machines that utilize the MCA bus */
{ "[286 MCA] IBM PS/2 model 50", "ibmps2_m50", {{"Intel", cpus_ps2_m30_286}, {"IBM",cpus_IBM486SLC},{"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_VIDEO, 1, 10, 1, 63, machine_ps2_model_50_init, NULL },
@@ -224,11 +229,11 @@ const machine_t machines[] = {
{ "[Socket 5 FX] Intel Advanced/ZP", "zappa", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_zappa_init, NULL },
{ "[Socket 5 FX] NEC PowerMate V", "powermate_v", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_powermate_v_init, NULL },
{ "[Socket 5 FX] PC Partner MB500N", "mb500n", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_mb500n_init, NULL },
- { "[Socket 5 FX] President Award 430FX PCI","president", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_president_init, NULL },
/* Socket 7 machines */
/* 430FX */
{ "[Socket 7-3V FX] ASUS P/I-P54TP4XE", "p54tp4xe", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL },
+ { "[Socket 7-3V FX] QDI Chariot", "chariot", MACHINE_CPUS_PENTIUM_S73VCH, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_chariot_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/ATX", "thor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/EV", "endeavor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device },
#if defined(DEV_BRANCH) && defined(USE_MRTHOR)
@@ -298,8 +303,8 @@ const machine_t machines[] = {
/* 440LX */
- /* 440BX */
#if defined(DEV_BRANCH) && defined(NO_SIO)
+ /* 440BX */
{ "[Slot 1 BX] Gigabyte GA-6BXC", "6bxc", {{"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_6bxc_init, NULL },
#endif
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
From 6888a6ca47f41a41f7ca752a70a73a16ac7103e6 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Thu, 7 May 2020 17:56:55 +0300
Subject: [PATCH 19/32] Removed ALR references
The ALR board is not yet planned for addition so it's removed.
---
src/include/86box/machine.h | 1 -
src/machine/machine_table.c | 3 +--
2 files changed, 1 insertion(+), 3 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index 7a28a53f6..b6f4e2a59 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -199,7 +199,6 @@ extern int machine_at_spc4200p_init(const machine_t *);
extern int machine_at_spc4216p_init(const machine_t *);
extern int machine_at_kmxc02_init(const machine_t *);
extern int machine_at_deskmaster286_init(const machine_t *);
-extern int machine_at_alr_init(const machine_t *);
extern int machine_at_commodore_sl386sx_init(const machine_t *);
extern int machine_at_wd76c10_init(const machine_t *);
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index d11f72ac2..ff34f449d 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -135,7 +135,6 @@ const machine_t machines[] = {
{ "[286 ISA] Trigem 286M", "tg286m", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 8192, 128, 127, machine_at_tg286m_init, NULL },
{ "[286 ISA] Samsung Deskmaster 286", "deskmaster286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_deskmaster286_init, NULL },
- { "[286 ISA] ALR", "alr", {{"286", cpus_286}, {"386SX", cpus_i386SX}, {"486", cpus_i486S1}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_alr_init, NULL },
/* 286 machines that utilize the MCA bus */
{ "[286 MCA] IBM PS/2 model 50", "ibmps2_m50", {{"Intel", cpus_ps2_m30_286}, {"IBM",cpus_IBM486SLC},{"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_VIDEO, 1, 10, 1, 63, machine_ps2_model_50_init, NULL },
@@ -303,8 +302,8 @@ const machine_t machines[] = {
/* 440LX */
-#if defined(DEV_BRANCH) && defined(NO_SIO)
/* 440BX */
+#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[Slot 1 BX] Gigabyte GA-6BXC", "6bxc", {{"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_6bxc_init, NULL },
#endif
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
From 2a93df7df977b8323cff42877924a36f58140f14 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Thu, 7 May 2020 22:44:41 +0300
Subject: [PATCH 20/32] Remove PS/2 support off the Chariot
The board doesn't seem to support it according to it's manual and neither works if applied.
---
src/machine/machine_table.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index ff34f449d..86b5442bd 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -135,6 +135,7 @@ const machine_t machines[] = {
{ "[286 ISA] Trigem 286M", "tg286m", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 8192, 128, 127, machine_at_tg286m_init, NULL },
{ "[286 ISA] Samsung Deskmaster 286", "deskmaster286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_deskmaster286_init, NULL },
+ { "[286 ISA] ALR", "alr", {{"286", cpus_286}, {"386SX", cpus_i386SX}, {"486", cpus_i486S1}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_alr_init, NULL },
/* 286 machines that utilize the MCA bus */
{ "[286 MCA] IBM PS/2 model 50", "ibmps2_m50", {{"Intel", cpus_ps2_m30_286}, {"IBM",cpus_IBM486SLC},{"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_VIDEO, 1, 10, 1, 63, machine_ps2_model_50_init, NULL },
@@ -232,7 +233,7 @@ const machine_t machines[] = {
/* Socket 7 machines */
/* 430FX */
{ "[Socket 7-3V FX] ASUS P/I-P54TP4XE", "p54tp4xe", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL },
- { "[Socket 7-3V FX] QDI Chariot", "chariot", MACHINE_CPUS_PENTIUM_S73VCH, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_chariot_init, NULL },
+ { "[Socket 7-3V FX] QDI Chariot", "chariot", MACHINE_CPUS_PENTIUM_S73VCH, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_chariot_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/ATX", "thor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/EV", "endeavor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device },
#if defined(DEV_BRANCH) && defined(USE_MRTHOR)
@@ -302,8 +303,8 @@ const machine_t machines[] = {
/* 440LX */
- /* 440BX */
#if defined(DEV_BRANCH) && defined(NO_SIO)
+ /* 440BX */
{ "[Slot 1 BX] Gigabyte GA-6BXC", "6bxc", {{"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_6bxc_init, NULL },
#endif
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
From c79b7a7b423ebbfd1ce4d61a813d32518867683b Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Thu, 7 May 2020 22:47:59 +0300
Subject: [PATCH 21/32] Fix table inconsistencies. Again -_-
---
src/machine/machine_table.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index 86b5442bd..344b47c45 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -135,7 +135,6 @@ const machine_t machines[] = {
{ "[286 ISA] Trigem 286M", "tg286m", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 8192, 128, 127, machine_at_tg286m_init, NULL },
{ "[286 ISA] Samsung Deskmaster 286", "deskmaster286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_deskmaster286_init, NULL },
- { "[286 ISA] ALR", "alr", {{"286", cpus_286}, {"386SX", cpus_i386SX}, {"486", cpus_i486S1}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_alr_init, NULL },
/* 286 machines that utilize the MCA bus */
{ "[286 MCA] IBM PS/2 model 50", "ibmps2_m50", {{"Intel", cpus_ps2_m30_286}, {"IBM",cpus_IBM486SLC},{"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_VIDEO, 1, 10, 1, 63, machine_ps2_model_50_init, NULL },
@@ -303,8 +302,8 @@ const machine_t machines[] = {
/* 440LX */
-#if defined(DEV_BRANCH) && defined(NO_SIO)
/* 440BX */
+#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[Slot 1 BX] Gigabyte GA-6BXC", "6bxc", {{"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_6bxc_init, NULL },
#endif
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
From e1ec42d2b2c7dd903bab7e6debb49999da07878d Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Fri, 8 May 2020 16:20:18 +0300
Subject: [PATCH 22/32] Fix and Dev Branch the PCI/I-486SP3G
Use the SST 29EE010, Include the NCR 810 onboard SCSI chip and use the AMI KBC like the real deal.
---
src/include/86box/machine.h | 3 +++
src/machine/m_at_386dx_486.c | 12 ++++++++----
src/machine/machine_table.c | 3 ++-
3 files changed, 13 insertions(+), 5 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index b6f4e2a59..5f93ca73e 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -199,6 +199,7 @@ extern int machine_at_spc4200p_init(const machine_t *);
extern int machine_at_spc4216p_init(const machine_t *);
extern int machine_at_kmxc02_init(const machine_t *);
extern int machine_at_deskmaster286_init(const machine_t *);
+extern int machine_at_alr_init(const machine_t *);
extern int machine_at_commodore_sl386sx_init(const machine_t *);
extern int machine_at_wd76c10_init(const machine_t *);
@@ -236,7 +237,9 @@ extern int machine_at_r418_init(const machine_t *);
extern int machine_at_ls486e_init(const machine_t *);
extern int machine_at_4dps_init(const machine_t *);
extern int machine_at_alfredo_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_486sp3g_init(const machine_t *);
+#endif
/* m_at_commodore.c */
extern int machine_at_cmdpc_init(const machine_t *);
diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c
index e67f95c30..8cb014f2b 100644
--- a/src/machine/m_at_386dx_486.c
+++ b/src/machine/m_at_386dx_486.c
@@ -39,7 +39,9 @@
#include <86box/hdc.h>
#include <86box/video.h>
#include <86box/intel_flash.h>
+#include <86box/sst_flash.h>
#include <86box/intel_sio.h>
+#include <86box/scsi_ncr53c8xx.h>
#include <86box/machine.h>
int
@@ -427,7 +429,7 @@ machine_at_alfredo_init(const machine_t *model)
return ret;
}
-
+#if defined(DEV_BRANCH) && defined(NO_SIO)
int
machine_at_486sp3g_init(const machine_t *model)
{
@@ -451,12 +453,14 @@ machine_at_486sp3g_init(const machine_t *model)
pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */
pci_register_slot(0x07, PCI_CARD_SCSI, 1, 2, 3, 4); /* 07 = SCSI */
pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
- device_add(&keyboard_ps2_pci_device);
+ device_add(&keyboard_ps2_ami_pci_device); /* Uses the AMIKEY KBC */
device_add(&sio_device); /* Site says it has a ZB, but the BIOS is designed for an IB. */
- device_add(&pc87306_device);
- device_add(&intel_flash_bxt_ami_device);
+ device_add(&pc87306_device); /*PC87332*/
+ device_add(&sst_flash_29ee010_device);
+ device_add(&ncr53c810_pci_device);
device_add(&i420zx_device);
return ret;
}
+#endif
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index 344b47c45..474e1a055 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -200,7 +200,9 @@ const machine_t machines[] = {
#endif
/* 486 machines which utilize the PCI bus */
+#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[486 PCI] ASUS PCI/I-486SP3G", "486sp3g", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_486sp3g_init, NULL },
+#endif
{ "[486 PCI] Intel Classic/PCI", "alfredo", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_alfredo_init, NULL },
{ "[486 PCI] Lucky Star LS-486E", "ls486e", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_ls486e_init, NULL },
{ "[486 PCI] Rise Computer R418", "r418", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 255, 1, 127, machine_at_r418_init, NULL },
@@ -214,7 +216,6 @@ const machine_t machines[] = {
#endif
{ "[Socket 4 LX] Intel Premiere/PCI", "revenge", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_batman_init, NULL },
{ "[Socket 4 LX] Micro Star 586MC1", "586mc1", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_586mc1_init, NULL },
-
/* Socket 5 machines */
/* 430NX */
{ "[Socket 5 NX] Intel Premiere/PCI II", "plato", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_plato_init, NULL },
From de87d0ee007880d522a58484fb5c1d60f7584206 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Fri, 8 May 2020 16:21:33 +0300
Subject: [PATCH 23/32] Removed another ALR reference
Considering that machine doesn't exist.
---
src/include/86box/machine.h | 1 -
1 file changed, 1 deletion(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index 5f93ca73e..fba2e69c2 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -199,7 +199,6 @@ extern int machine_at_spc4200p_init(const machine_t *);
extern int machine_at_spc4216p_init(const machine_t *);
extern int machine_at_kmxc02_init(const machine_t *);
extern int machine_at_deskmaster286_init(const machine_t *);
-extern int machine_at_alr_init(const machine_t *);
extern int machine_at_commodore_sl386sx_init(const machine_t *);
extern int machine_at_wd76c10_init(const machine_t *);
From 08b4622348a75e777c4f5059cbb4e0a10d0c5bad Mon Sep 17 00:00:00 2001
From: nerd73
Date: Sat, 9 May 2020 14:42:22 -0600
Subject: [PATCH 24/32] Improvements to P6 timings
- Removed the RISC86 references
- Some cleanup
- Balancing fixes, so performance should be more accurate
---
src/cpu/codegen_timing_p6.c | 1013 +++++++++++++++----------------
src/cpu_new/codegen_timing_p6.c | 1013 +++++++++++++++----------------
2 files changed, 974 insertions(+), 1052 deletions(-)
diff --git a/src/cpu/codegen_timing_p6.c b/src/cpu/codegen_timing_p6.c
index ec5c54640..a69f68f04 100644
--- a/src/cpu/codegen_timing_p6.c
+++ b/src/cpu/codegen_timing_p6.c
@@ -19,8 +19,8 @@
typedef enum uop_type_t
{
- UOP_ALU = 0, /*Executes in Integer X or Y units*/
- UOP_ALUX, /*Executes in Integer X unit*/
+ UOP_ALU = 0, /*Executes in Port 0 or 1 ALU units*/
+ UOP_ALUP0, /*Executes in Port 0 ALU unit*/
UOP_LOAD, /*Executes in Load unit*/
UOP_STORED, /*Executes in Data Store unit*/
UOP_STOREA, /*Executes in Address Store unit*/
@@ -31,11 +31,11 @@ typedef enum uop_type_t
UOP_MSTORED, /*Executes in Data Store unit*/
UOP_MSTOREA, /*Executes in Address Store unit*/
UOP_FLOAT, /*Executes in Floating Point unit*/
- UOP_MMX, /*Executes in Integer X or Y units as MMX*/
- UOP_MMX_SHIFT, /*Executes in Integer Y unit. Uses MMX shifter*/
- UOP_MMX_MUL, /*Executes in Integer X unit. Uses MMX multiplier*/
+ UOP_MMX, /*Executes in Port 0 or 1 ALU units as MMX*/
+ UOP_MMX_SHIFT, /*Executes in Port 1 ALU unit. Uses MMX shifter*/
+ UOP_MMX_MUL, /*Executes in Port 0 ALU unit. Uses MMX multiplier*/
UOP_BRANCH, /*Executes in Branch unit*/
- UOP_LIMM /*Does not require an execution unit*/
+ UOP_FXCH /*Does not require an execution unit*/
} uop_type_t;
typedef enum decode_type_t
@@ -46,46 +46,46 @@ typedef enum decode_type_t
#define MAX_UOPS 10
-typedef struct risc86_uop_t
+typedef struct p6_uop_t
{
uop_type_t type;
- double latency;
-} risc86_uop_t;
+ int latency;
+} p6_uop_t;
-typedef struct risc86_instruction_t
+typedef struct macro_op_t
{
int nr_uops;
decode_type_t decode_type;
- risc86_uop_t uop[MAX_UOPS];
-} risc86_instruction_t;
+ p6_uop_t uop[MAX_UOPS];
+} macro_op_t;
-static const risc86_instruction_t alu_op =
+static const macro_op_t alu_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t alux_op =
+static const macro_op_t alup0_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1}
+ .decode_type = DECODE_SIMPLE,
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t load_alu_op =
+static const macro_op_t load_alu_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t load_alux_op =
+static const macro_op_t load_alup0_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t alu_store_op =
+static const macro_op_t alu_store_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -94,38 +94,38 @@ static const risc86_instruction_t alu_store_op =
.uop[2] = {.type = UOP_STORED, .latency = 1},
.uop[3] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t alux_store_op =
+static const macro_op_t alup0_store_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
.uop[2] = {.type = UOP_STORED, .latency = 1},
.uop[3] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t branch_op =
+static const macro_op_t branch_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_BRANCH, .latency = 1}
+ .uop[0] = {.type = UOP_BRANCH, .latency = 2}
};
-static const risc86_instruction_t limm_op =
+static const macro_op_t fxch_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_LIMM, .latency = 1}
+ .uop[0] = {.type = UOP_FXCH, .latency = 1}
};
-static const risc86_instruction_t load_op =
+static const macro_op_t load_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
+ .decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_LOAD, .latency = 1}
};
-static const risc86_instruction_t store_op =
+static const macro_op_t store_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
@@ -134,14 +134,14 @@ static const risc86_instruction_t store_op =
};
-static const risc86_instruction_t bswap_op =
+static const macro_op_t bswap_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1},
};
-static const risc86_instruction_t leave_op =
+static const macro_op_t leave_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -149,27 +149,27 @@ static const risc86_instruction_t leave_op =
.uop[1] = {.type = UOP_ALU, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t lods_op =
+static const macro_op_t lods_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t loop_op =
+static const macro_op_t loop_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1},
- .uop[1] = {.type = UOP_BRANCH, .latency = 1}
+ .uop[1] = {.type = UOP_BRANCH, .latency = 2}
};
-static const risc86_instruction_t mov_reg_seg_op =
+static const macro_op_t mov_reg_seg_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
};
-static const risc86_instruction_t movs_op =
+static const macro_op_t movs_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -178,14 +178,14 @@ static const risc86_instruction_t movs_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t pop_reg_op =
+static const macro_op_t pop_reg_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t pop_mem_op =
+static const macro_op_t pop_mem_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -194,14 +194,14 @@ static const risc86_instruction_t pop_mem_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t push_imm_op =
+static const macro_op_t push_imm_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_STORED, .latency = 1},
.uop[1] = {.type = UOP_STOREA, .latency = 1},
};
-static const risc86_instruction_t push_mem_op =
+static const macro_op_t push_mem_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -209,7 +209,7 @@ static const risc86_instruction_t push_mem_op =
.uop[1] = {.type = UOP_STORED, .latency = 1},
.uop[2] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t push_seg_op =
+static const macro_op_t push_seg_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -218,7 +218,7 @@ static const risc86_instruction_t push_seg_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t stos_op =
+static const macro_op_t stos_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -226,33 +226,33 @@ static const risc86_instruction_t stos_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t test_reg_op =
-{
- .nr_uops = 1,
- .decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_ALU, .latency = 1}
-};
-static const risc86_instruction_t test_reg_b_op =
+static const macro_op_t test_reg_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t test_mem_imm_op =
+static const macro_op_t test_reg_b_op =
+{
+ .nr_uops = 1,
+ .decode_type = DECODE_COMPLEX,
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1}
+};
+static const macro_op_t test_mem_imm_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t test_mem_imm_b_op =
+static const macro_op_t test_mem_imm_b_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t xchg_op =
+static const macro_op_t xchg_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -262,98 +262,98 @@ static const risc86_instruction_t xchg_op =
};
-static const risc86_instruction_t mmx_op =
+static const macro_op_t mmx_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_MMX, .latency = 1.5}
+ .uop[0] = {.type = UOP_MMX, .latency = 1}
};
-static const risc86_instruction_t mmx_mul_op =
+static const macro_op_t mmx_mul_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_MMX_MUL, .latency = 1.5}
+ .uop[0] = {.type = UOP_MMX_MUL, .latency = 1}
};
-static const risc86_instruction_t mmx_shift_op =
+static const macro_op_t mmx_shift_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_MMX_SHIFT, .latency = 1.5}
+ .uop[0] = {.type = UOP_MMX_SHIFT, .latency = 1}
};
-static const risc86_instruction_t load_mmx_op =
+static const macro_op_t load_mmx_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_MMX, .latency = 1.5}
+ .uop[0] = {.type = UOP_LOAD, .latency = 2},
+ .uop[1] = {.type = UOP_MMX, .latency = 2}
};
-static const risc86_instruction_t load_mmx_mul_op =
+static const macro_op_t load_mmx_mul_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 3},
- .uop[1] = {.type = UOP_MMX_MUL, .latency = 1.5}
+ .uop[0] = {.type = UOP_LOAD, .latency = 2},
+ .uop[1] = {.type = UOP_MMX_MUL, .latency = 2}
};
-static const risc86_instruction_t load_mmx_shift_op =
+static const macro_op_t load_mmx_shift_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 3},
- .uop[1] = {.type = UOP_MMX_SHIFT, .latency = 1.5}
+ .uop[0] = {.type = UOP_LOAD, .latency = 2},
+ .uop[1] = {.type = UOP_MMX_SHIFT, .latency = 2}
};
-static const risc86_instruction_t mload_op =
+static const macro_op_t mload_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_MLOAD, .latency = 3},
+ .uop[0] = {.type = UOP_MLOAD, .latency = 1},
};
-static const risc86_instruction_t mstore_op =
+static const macro_op_t mstore_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_MSTORED, .latency = 1},
.uop[1] = {.type = UOP_MSTOREA, .latency = 1}
};
-static const risc86_instruction_t pmul_op =
+static const macro_op_t pmul_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_MMX_MUL, .latency = 1.5}
+ .uop[0] = {.type = UOP_MMX_MUL, .latency = 1}
};
-static const risc86_instruction_t pmul_mem_op =
+static const macro_op_t pmul_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 3},
- .uop[1] = {.type = UOP_MMX_MUL, .latency = 1.5}
+ .uop[0] = {.type = UOP_LOAD, .latency = 2},
+ .uop[1] = {.type = UOP_MMX_MUL, .latency = 2}
};
-static const risc86_instruction_t float_op =
+static const macro_op_t float_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t fadd_op =
+static const macro_op_t fadd_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_FLOAT, .latency = 3}
+ .uop[0] = {.type = UOP_FLOAT, .latency = 2}
};
-static const risc86_instruction_t fmul_op =
+static const macro_op_t fmul_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_ALU, .latency = 5}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 3}
};
-static const risc86_instruction_t float2_op =
+static const macro_op_t float2_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAT, .latency = 1},
.uop[1] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t fchs_op =
+static const macro_op_t fchs_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -361,35 +361,35 @@ static const risc86_instruction_t fchs_op =
.uop[1] = {.type = UOP_FLOAT, .latency = 2},
.uop[2] = {.type = UOP_FLOAT, .latency = 2}
};
-static const risc86_instruction_t load_float_op =
+static const macro_op_t load_float_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAD, .latency = 1},
.uop[1] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t load_fadd_op =
+static const macro_op_t load_fadd_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAD, .latency = 1},
- .uop[1] = {.type = UOP_FLOAT, .latency = 3}
+ .uop[1] = {.type = UOP_FLOAT, .latency = 2}
};
-static const risc86_instruction_t load_fmul_op =
+static const macro_op_t load_fmul_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALU, .latency = 5}
+ .uop[1] = {.type = UOP_ALU, .latency = 4}
};
-static const risc86_instruction_t fstore_op =
+static const macro_op_t fstore_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FSTORED, .latency = 1},
.uop[1] = {.type = UOP_FSTOREA, .latency = 1},
};
-static const risc86_instruction_t load_fiadd_op =
+static const macro_op_t load_fiadd_op =
{
.nr_uops = 7,
.decode_type = DECODE_COMPLEX,
@@ -401,51 +401,51 @@ static const risc86_instruction_t load_fiadd_op =
.uop[5] = {.type = UOP_FLOAT, .latency = 1},
.uop[6] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t fdiv_op =
+static const macro_op_t fdiv_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_FLOAT, .latency = 32}
+ .decode_type = DECODE_SIMPLE,
+ .uop[0] = {.type = UOP_FLOAT, .latency = 37}
};
-static const risc86_instruction_t fdiv_mem_op =
+static const macro_op_t fdiv_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAD, .latency = 1},
- .uop[1] = {.type = UOP_FLOAT, .latency = 38}
+ .uop[1] = {.type = UOP_FLOAT, .latency = 37}
};
-static const risc86_instruction_t fsin_op =
+static const macro_op_t fsin_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_FLOAT, .latency = 60}
+ .decode_type = DECODE_SIMPLE,
+ .uop[0] = {.type = UOP_FLOAT, .latency = 62}
};
-static const risc86_instruction_t fsqrt_op =
+static const macro_op_t fsqrt_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
+ .decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_FLOAT, .latency = 69}
};
-static const risc86_instruction_t complex_fldcw_op =
+static const macro_op_t fldcw_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
+ .decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_FLOAT, .latency = 10}
};
-static const risc86_instruction_t complex_float_op =
+static const macro_op_t complex_float_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t complex_float_l_op =
+static const macro_op_t complex_float_l_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAT, .latency = 50}
};
-static const risc86_instruction_t complex_flde_op =
+static const macro_op_t flde_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -453,7 +453,7 @@ static const risc86_instruction_t complex_flde_op =
.uop[1] = {.type = UOP_FLOAD, .latency = 1},
.uop[2] = {.type = UOP_FLOAT, .latency = 2}
};
-static const risc86_instruction_t complex_fste_op =
+static const macro_op_t fste_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -462,20 +462,20 @@ static const risc86_instruction_t complex_fste_op =
.uop[2] = {.type = UOP_FSTOREA, .latency = 1}
};
-static const risc86_instruction_t complex_alu1_op =
+static const macro_op_t complex_alu1_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_alu2_op =
+static const macro_op_t alu2_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_alu3_op =
+static const macro_op_t alu3_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -483,7 +483,7 @@ static const risc86_instruction_t complex_alu3_op =
.uop[1] = {.type = UOP_ALU, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_alu6_op =
+static const macro_op_t alu6_op =
{
.nr_uops = 6,
.decode_type = DECODE_COMPLEX,
@@ -494,57 +494,39 @@ static const risc86_instruction_t complex_alu6_op =
.uop[4] = {.type = UOP_ALU, .latency = 1},
.uop[5] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_alux1_op =
+static const macro_op_t complex_alup0_1_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_alux3_op =
+static const macro_op_t alup0_3_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_alux6_op =
+static const macro_op_t alup0_6_op =
{
.nr_uops = 6,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1},
- .uop[3] = {.type = UOP_ALUX, .latency = 1},
- .uop[4] = {.type = UOP_ALUX, .latency = 1},
- .uop[5] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[3] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[4] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[5] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_alu_store_op =
-{
- .nr_uops = 4,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALU, .latency = 1},
- .uop[2] = {.type = UOP_STORED, .latency = 1},
- .uop[3] = {.type = UOP_STOREA, .latency = 1},
-};
-static const risc86_instruction_t complex_alux_store_op =
-{
- .nr_uops = 4,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_STORED, .latency = 1},
- .uop[3] = {.type = UOP_STOREA, .latency = 1}
-};
-static const risc86_instruction_t complex_arpl_op =
+static const macro_op_t arpl_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 3},
.uop[1] = {.type = UOP_ALU, .latency = 3}
};
-static const risc86_instruction_t complex_bound_op =
+static const macro_op_t bound_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -553,13 +535,13 @@ static const risc86_instruction_t complex_bound_op =
.uop[2] = {.type = UOP_ALU, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_bsx_op =
+static const macro_op_t bsx_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 10}
};
-static const risc86_instruction_t complex_call_far_op =
+static const macro_op_t call_far_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -568,13 +550,13 @@ static const risc86_instruction_t complex_call_far_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_cli_sti_op =
+static const macro_op_t cli_sti_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 7}
};
-static const risc86_instruction_t complex_cmps_op =
+static const macro_op_t cmps_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -582,15 +564,15 @@ static const risc86_instruction_t complex_cmps_op =
.uop[1] = {.type = UOP_ALU, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_cmpsb_op =
+static const macro_op_t cmpsb_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALU, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_cmpxchg_op =
+static const macro_op_t cmpxchg_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -599,54 +581,62 @@ static const risc86_instruction_t complex_cmpxchg_op =
.uop[2] = {.type = UOP_STORED, .latency = 1},
.uop[3] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t complex_cmpxchg_b_op =
+static const macro_op_t cmpxchg_b_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_STORED, .latency = 1},
- .uop[3] = {.type = UOP_STOREA, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_STORED, .latency = 1},
+ .uop[3] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t complex_cpuid_op =
+static const macro_op_t complex_push_mem_op =
+{
+ .nr_uops = 2,
+ .decode_type = DECODE_COMPLEX,
+ .uop[0] = {.type = UOP_STORED, .latency = 1},
+ .uop[1] = {.type = UOP_STOREA, .latency = 1}
+};
+
+static const macro_op_t cpuid_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 23}
};
-static const risc86_instruction_t complex_div16_op =
+static const macro_op_t div16_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 10}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 21}
};
-static const risc86_instruction_t complex_div16_mem_op =
+static const macro_op_t div16_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 10}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 21}
};
-static const risc86_instruction_t complex_div32_op =
+static const macro_op_t div32_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 18}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 37}
};
-static const risc86_instruction_t complex_div32_mem_op =
+static const macro_op_t div32_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 18}
+ .uop[1] = {.type = UOP_ALUP0, .latency = 37}
};
-static const risc86_instruction_t complex_emms_op =
+static const macro_op_t emms_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALU, .latency = 25}
+ .uop[0] = {.type = UOP_ALU, .latency = 50}
};
-static const risc86_instruction_t complex_enter_op =
+static const macro_op_t enter_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -654,28 +644,28 @@ static const risc86_instruction_t complex_enter_op =
.uop[1] = {.type = UOP_STOREA, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 10}
};
-static const risc86_instruction_t complex_femms_op =
+static const macro_op_t femms_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 6}
};
-static const risc86_instruction_t complex_in_op =
+static const macro_op_t in_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 10}
+ .uop[0] = {.type = UOP_LOAD, .latency = 18}
};
-static const risc86_instruction_t complex_ins_op =
+static const macro_op_t ins_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 10},
+ .uop[0] = {.type = UOP_LOAD, .latency = 18},
.uop[1] = {.type = UOP_STORED, .latency = 1},
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_int_op =
+static const macro_op_t int_op =
{
.nr_uops = 8,
.decode_type = DECODE_COMPLEX,
@@ -688,7 +678,7 @@ static const risc86_instruction_t complex_int_op =
.uop[6] = {.type = UOP_STOREA, .latency = 1},
.uop[7] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_iret_op =
+static const macro_op_t iret_op =
{
.nr_uops = 5,
.decode_type = DECODE_COMPLEX,
@@ -698,41 +688,20 @@ static const risc86_instruction_t complex_iret_op =
.uop[3] = {.type = UOP_ALU, .latency = 20},
.uop[4] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_invd_op =
+static const macro_op_t invd_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 500}
};
-static const risc86_instruction_t complex_jmp_far_op =
+static const macro_op_t jmp_far_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 3},
.uop[1] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_load_alu_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALU, .latency = 1}
-};
-static const risc86_instruction_t complex_load_alux_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
-};
-static const risc86_instruction_t complex_loop_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALU, .latency = 1},
- .uop[1] = {.type = UOP_BRANCH, .latency = 1}
-};
-static const risc86_instruction_t complex_lss_op =
+static const macro_op_t lss_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -740,7 +709,7 @@ static const risc86_instruction_t complex_lss_op =
.uop[1] = {.type = UOP_LOAD, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 3}
};
-static const risc86_instruction_t complex_mov_mem_seg_op =
+static const macro_op_t mov_mem_seg_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -748,68 +717,63 @@ static const risc86_instruction_t complex_mov_mem_seg_op =
.uop[1] = {.type = UOP_STORED, .latency = 1},
.uop[2] = {.type = UOP_STOREA, .latency = 1},
};
-static const risc86_instruction_t complex_mov_seg_mem_op =
+static const macro_op_t mov_seg_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 3}
};
-static const risc86_instruction_t complex_mov_seg_reg_op =
+static const macro_op_t mov_seg_reg_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 3}
};
-static const risc86_instruction_t complex_mul_op =
+static const macro_op_t mul_op =
+{
+ .nr_uops = 1,
+ .decode_type = DECODE_SIMPLE,
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1}
+};
+static const macro_op_t mul_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_mul_mem_op =
+static const macro_op_t mul64_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_mul64_op =
-{
- .nr_uops = 3,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1}
-};
-static const risc86_instruction_t complex_mul64_mem_op =
+static const macro_op_t mul64_mem_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1},
- .uop[3] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[3] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_out_op =
+static const macro_op_t out_op =
{
- .nr_uops = 2,
+ .nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_STORED, .latency = 10},
- .uop[1] = {.type = UOP_STOREA, .latency = 10},
+ .uop[0] = {.type = UOP_ALU, .latency = 18}
};
-static const risc86_instruction_t complex_outs_op =
+static const macro_op_t outs_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_STORED, .latency = 10},
- .uop[1] = {.type = UOP_STOREA, .latency = 10},
- .uop[2] = {.type = UOP_ALU, .latency = 1}
+ .uop[1] = {.type = UOP_ALU, .latency = 18}
};
-static const risc86_instruction_t complex_pusha_op =
+static const macro_op_t pusha_op =
{
.nr_uops = 8,
.decode_type = DECODE_COMPLEX,
@@ -822,7 +786,7 @@ static const risc86_instruction_t complex_pusha_op =
.uop[6] = {.type = UOP_STORED, .latency = 2},
.uop[7] = {.type = UOP_STOREA, .latency = 2}
};
-static const risc86_instruction_t complex_popa_op =
+static const macro_op_t popa_op =
{
.nr_uops = 8,
.decode_type = DECODE_COMPLEX,
@@ -835,36 +799,30 @@ static const risc86_instruction_t complex_popa_op =
.uop[6] = {.type = UOP_LOAD, .latency = 1},
.uop[7] = {.type = UOP_LOAD, .latency = 1}
};
-static const risc86_instruction_t complex_popf_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 3},
- .uop[1] = {.type = UOP_ALUX, .latency = 17}
-};
-static const risc86_instruction_t complex_push_mem_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_STORED, .latency = 1},
- .uop[1] = {.type = UOP_STOREA, .latency = 1}
-};
-static const risc86_instruction_t complex_pushf_op =
+static const macro_op_t popf_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_STORED, .latency = 1},
- .uop[2] = {.type = UOP_STOREA, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALU, .latency = 6},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 10}
};
-static const risc86_instruction_t complex_ret_op =
+static const macro_op_t pushf_op =
+{
+ .nr_uops = 3,
+ .decode_type = DECODE_COMPLEX,
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_STORED, .latency = 1},
+ .uop[2] = {.type = UOP_STOREA, .latency = 1}
+};
+static const macro_op_t ret_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_retf_op =
+static const macro_op_t retf_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -872,52 +830,52 @@ static const risc86_instruction_t complex_retf_op =
.uop[1] = {.type = UOP_ALU, .latency = 3},
.uop[2] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_scas_op =
+static const macro_op_t scas_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_scasb_op =
+static const macro_op_t scasb_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_setcc_mem_op =
+static const macro_op_t setcc_mem_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_FSTORED, .latency = 1},
- .uop[3] = {.type = UOP_FSTOREA, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_FSTORED, .latency = 1},
+ .uop[3] = {.type = UOP_FSTOREA, .latency = 1}
};
-static const risc86_instruction_t complex_setcc_reg_op =
+static const macro_op_t setcc_reg_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALU, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_test_mem_op =
+static const macro_op_t test_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_test_mem_b_op =
+static const macro_op_t test_mem_b_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_xchg_mem_op =
+static const macro_op_t xchg_mem_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -926,60 +884,58 @@ static const risc86_instruction_t complex_xchg_mem_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_xlat_op =
+static const macro_op_t xlat_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1},
.uop[1] = {.type = UOP_LOAD, .latency = 1}
};
-static const risc86_instruction_t complex_wbinvd_op =
+static const macro_op_t wbinvd_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 10000}
};
-
-
#define INVALID NULL
-static const risc86_instruction_t *opcode_timings[256] =
+static const macro_op_t *opcode_timings[256] =
{
/* ADD ADD ADD ADD*/
-/*00*/ &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+/*00*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* ADD ADD PUSH ES POP ES*/
- &alux_op, &alu_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &alup0_op, &alu_op, &push_seg_op, &mov_seg_mem_op,
/* OR OR OR OR*/
- &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* OR OR PUSH CS */
- &alux_op, &alu_op, &push_seg_op, INVALID,
+ &alup0_op, &alu_op, &push_seg_op, INVALID,
/* ADC ADC ADC ADC*/
-/*10*/ &complex_alux_store_op,&complex_alu_store_op, &complex_load_alux_op,&complex_load_alu_op,
+/*10*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* ADC ADC PUSH SS POP SS*/
- &complex_alux1_op, &complex_alu1_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &complex_alup0_1_op, &complex_alu1_op, &push_seg_op, &mov_seg_mem_op,
/* SBB SBB SBB SBB*/
-/*10*/ &complex_alux_store_op,&complex_alu_store_op, &complex_load_alux_op,&complex_load_alu_op,
+/*10*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* SBB SBB PUSH DS POP DS*/
- &complex_alux1_op, &complex_alu1_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &complex_alup0_1_op, &complex_alu1_op, &push_seg_op, &mov_seg_mem_op,
/* AND AND AND AND*/
-/*20*/ &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+/*20*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* AND AND DAA*/
- &alux_op, &alu_op, INVALID, &complex_alux1_op,
+ &alup0_op, &alu_op, INVALID, &complex_alup0_1_op,
/* SUB SUB SUB SUB*/
- &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* SUB SUB DAS*/
- &alux_op, &alu_op, INVALID, &complex_alux1_op,
+ &alup0_op, &alu_op, INVALID, &complex_alup0_1_op,
/* XOR XOR XOR XOR*/
-/*30*/ &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+/*30*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* XOR XOR AAA*/
- &alux_op, &alu_op, INVALID, &complex_alux6_op,
+ &alup0_op, &alu_op, INVALID, &alup0_6_op,
/* CMP CMP CMP CMP*/
- &load_alux_op, &load_alu_op, &load_alux_op, &load_alu_op,
+ &load_alup0_op, &load_alu_op, &load_alup0_op, &load_alu_op,
/* CMP CMP AAS*/
- &alux_op, &alu_op, INVALID, &complex_alux6_op,
+ &alup0_op, &alu_op, INVALID, &alup0_6_op,
/* INC EAX INC ECX INC EDX INC EBX*/
/*40*/ &alu_op, &alu_op, &alu_op, &alu_op,
@@ -1000,12 +956,12 @@ static const risc86_instruction_t *opcode_timings[256] =
&pop_reg_op, &pop_reg_op, &pop_reg_op, &pop_reg_op,
/* PUSHA POPA BOUND ARPL*/
-/*60*/ &complex_pusha_op, &complex_popa_op, &complex_bound_op, &complex_arpl_op,
+/*60*/ &pusha_op, &popa_op, &bound_op, &arpl_op,
INVALID, INVALID, INVALID, INVALID,
/* PUSH imm IMUL PUSH imm IMUL*/
- &push_imm_op, &complex_mul_op, &push_imm_op, &complex_mul_op,
+ &push_imm_op, &mul_op, &push_imm_op, &mul_op,
/* INSB INSW OUTSB OUTSW*/
- &complex_ins_op, &complex_ins_op, &complex_outs_op, &complex_outs_op,
+ &ins_op, &ins_op, &outs_op, &outs_op,
/* Jxx*/
/*70*/ &branch_op, &branch_op, &branch_op, &branch_op,
@@ -1015,107 +971,107 @@ static const risc86_instruction_t *opcode_timings[256] =
/*80*/ INVALID, INVALID, INVALID, INVALID,
/* TEST TEST XCHG XCHG*/
- &complex_test_mem_b_op, &complex_test_mem_op, &complex_xchg_mem_op, &complex_xchg_mem_op,
+ &test_mem_b_op, &test_mem_op, &xchg_mem_op, &xchg_mem_op,
/* MOV MOV MOV MOV*/
&store_op, &store_op, &load_op, &load_op,
/* MOV from seg LEA MOV to seg POP*/
- &complex_mov_mem_seg_op, &store_op, &complex_mov_seg_mem_op, &pop_mem_op,
+ &mov_mem_seg_op, &store_op, &mov_seg_mem_op, &pop_mem_op,
/* NOP XCHG XCHG XCHG*/
-/*90*/ &limm_op, &xchg_op, &xchg_op, &xchg_op,
+/*90*/ &fxch_op, &xchg_op, &xchg_op, &xchg_op,
/* XCHG XCHG XCHG XCHG*/
&xchg_op, &xchg_op, &xchg_op, &xchg_op,
/* CBW CWD CALL far WAIT*/
- &complex_alu1_op, &complex_alu1_op, &complex_call_far_op, &limm_op,
+ &complex_alu1_op, &complex_alu1_op, &call_far_op, &fxch_op,
/* PUSHF POPF SAHF LAHF*/
- &complex_pushf_op, &complex_popf_op, &complex_alux1_op, &complex_alux1_op,
+ &pushf_op, &popf_op, &complex_alup0_1_op, &complex_alup0_1_op,
/* MOV MOV MOV MOV*/
/*a0*/ &load_op, &load_op, &store_op, &store_op,
/* MOVSB MOVSW CMPSB CMPSW*/
- &movs_op, &movs_op, &complex_cmpsb_op, &complex_cmps_op,
+ &movs_op, &movs_op, &cmpsb_op, &cmps_op,
/* TEST TEST STOSB STOSW*/
&test_reg_b_op, &test_reg_op, &stos_op, &stos_op,
/* LODSB LODSW SCASB SCASW*/
- &lods_op, &lods_op, &complex_scasb_op, &complex_scas_op,
+ &lods_op, &lods_op, &scasb_op, &scas_op,
/* MOV*/
-/*b0*/ &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
+/*b0*/ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
/* RET imm RET*/
-/*c0*/ INVALID, INVALID, &complex_ret_op, &complex_ret_op,
+/*c0*/ INVALID, INVALID, &ret_op, &ret_op,
/* LES LDS MOV MOV*/
- &complex_lss_op, &complex_lss_op, &store_op, &store_op,
+ &lss_op, &lss_op, &store_op, &store_op,
/* ENTER LEAVE RETF RETF*/
- &complex_enter_op, &leave_op, &complex_retf_op, &complex_retf_op,
+ &enter_op, &leave_op, &retf_op, &retf_op,
/* INT3 INT INTO IRET*/
- &complex_int_op, &complex_int_op, &complex_int_op, &complex_iret_op,
+ &int_op, &int_op, &int_op, &iret_op,
/*d0*/ INVALID, INVALID, INVALID, INVALID,
/* AAM AAD SETALC XLAT*/
- &complex_alux6_op, &complex_alux3_op, &complex_alux1_op, &complex_xlat_op,
+ &alup0_6_op, &alup0_3_op, &complex_alup0_1_op, &xlat_op,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
/* LOOPNE LOOPE LOOP JCXZ*/
-/*e0*/ &complex_loop_op, &complex_loop_op, &loop_op, &complex_loop_op,
+/*e0*/ &loop_op, &loop_op, &loop_op, &loop_op,
/* IN AL IN AX OUT_AL OUT_AX*/
- &complex_in_op, &complex_in_op, &complex_out_op, &complex_out_op,
+ &in_op, &in_op, &out_op, &out_op,
/* CALL JMP JMP JMP*/
- &store_op, &branch_op, &complex_jmp_far_op, &branch_op,
+ &store_op, &branch_op, &jmp_far_op, &branch_op,
/* IN AL IN AX OUT_AL OUT_AX*/
- &complex_in_op, &complex_in_op, &complex_out_op, &complex_out_op,
+ &in_op, &in_op, &out_op, &out_op,
/* REPNE REPE*/
/*f0*/ INVALID, INVALID, INVALID, INVALID,
/* HLT CMC*/
- &complex_alux1_op, &complex_alu2_op, INVALID, INVALID,
+ &complex_alup0_1_op, &alu2_op, INVALID, INVALID,
/* CLC STC CLI STI*/
- &complex_alu1_op, &complex_alu1_op, &complex_cli_sti_op, &complex_cli_sti_op,
+ &complex_alu1_op, &complex_alu1_op, &cli_sti_op, &cli_sti_op,
/* CLD STD INCDEC*/
- &complex_alu1_op, &complex_alu1_op, &alux_store_op, INVALID
+ &complex_alu1_op, &complex_alu1_op, &alup0_store_op, INVALID
};
-static const risc86_instruction_t *opcode_timings_mod3[256] =
+static const macro_op_t *opcode_timings_mod3[256] =
{
/* ADD ADD ADD ADD*/
-/*00*/ &alux_op, &alu_op, &alux_op, &alu_op,
+/*00*/ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* ADD ADD PUSH ES POP ES*/
- &alux_op, &alu_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &alup0_op, &alu_op, &push_seg_op, &mov_seg_mem_op,
/* OR OR OR OR*/
- &alux_op, &alu_op, &alux_op, &alu_op,
+ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* OR OR PUSH CS */
- &alux_op, &alu_op, &push_seg_op, INVALID,
+ &alup0_op, &alu_op, &push_seg_op, INVALID,
/* ADC ADC ADC ADC*/
-/*10*/ &complex_alux1_op, &complex_alu1_op, &complex_alux1_op, &complex_alu1_op,
+/*10*/ &complex_alup0_1_op, &complex_alu1_op, &complex_alup0_1_op, &complex_alu1_op,
/* ADC ADC PUSH SS POP SS*/
- &complex_alux1_op, &complex_alu1_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &complex_alup0_1_op, &complex_alu1_op, &push_seg_op, &mov_seg_mem_op,
/* SBB SBB SBB SBB*/
- &complex_alux1_op, &complex_alu1_op, &complex_alux1_op, &complex_alu1_op,
+ &complex_alup0_1_op, &complex_alu1_op, &complex_alup0_1_op, &complex_alu1_op,
/* SBB SBB PUSH DS POP DS*/
- &complex_alux1_op, &complex_alu1_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &complex_alup0_1_op, &complex_alu1_op, &push_seg_op, &mov_seg_mem_op,
/* AND AND AND AND*/
-/*20*/ &alux_op, &alu_op, &alux_op, &alu_op,
+/*20*/ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* AND AND DAA*/
- &alux_op, &alu_op, INVALID, &complex_alux1_op,
+ &alup0_op, &alu_op, INVALID, &complex_alup0_1_op,
/* SUB SUB SUB SUB*/
- &alux_op, &alu_op, &alux_op, &alu_op,
+ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* SUB SUB DAS*/
- &alux_op, &alu_op, INVALID, &complex_alux1_op,
+ &alup0_op, &alu_op, INVALID, &complex_alup0_1_op,
/* XOR XOR XOR XOR*/
-/*30*/ &alux_op, &alu_op, &alux_op, &alu_op,
+/*30*/ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* XOR XOR AAA*/
- &alux_op, &alu_op, INVALID, &complex_alux6_op,
+ &alup0_op, &alu_op, INVALID, &alup0_6_op,
/* CMP CMP CMP CMP*/
- &alux_op, &alu_op, &alux_op, &alu_op,
+ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* CMP CMP AAS*/
- &alux_op, &alu_op, INVALID, &complex_alux6_op,
+ &alup0_op, &alu_op, INVALID, &alup0_6_op,
/* INC EAX INC ECX INC EDX INC EBX*/
/*40*/ &alu_op, &alu_op, &alu_op, &alu_op,
@@ -1136,12 +1092,12 @@ static const risc86_instruction_t *opcode_timings_mod3[256] =
&pop_reg_op, &pop_reg_op, &pop_reg_op, &pop_reg_op,
/* PUSHA POPA BOUND ARPL*/
-/*60*/ &complex_pusha_op, &complex_popa_op, &complex_bound_op, &complex_arpl_op,
+/*60*/ &pusha_op, &popa_op, &bound_op, &arpl_op,
INVALID, INVALID, INVALID, INVALID,
/* PUSH imm IMUL PUSH imm IMUL*/
- &push_imm_op, &complex_mul_op, &push_imm_op, &complex_mul_op,
+ &push_imm_op, &mul_op, &push_imm_op, &mul_op,
/* INSB INSW OUTSB OUTSW*/
- &complex_ins_op, &complex_ins_op, &complex_outs_op, &complex_outs_op,
+ &ins_op, &ins_op, &outs_op, &outs_op,
/* Jxx*/
/*70*/ &branch_op, &branch_op, &branch_op, &branch_op,
@@ -1151,88 +1107,89 @@ static const risc86_instruction_t *opcode_timings_mod3[256] =
/*80*/ INVALID, INVALID, INVALID, INVALID,
/* TEST TEST XCHG XCHG*/
- &complex_alu1_op, &complex_alu1_op, &complex_alu3_op, &complex_alu3_op,
+ &complex_alu1_op, &complex_alu1_op, &alu3_op, &alu3_op,
/* MOV MOV MOV MOV*/
&store_op, &store_op, &load_op, &load_op,
/* MOV from seg LEA MOV to seg POP*/
- &mov_reg_seg_op, &store_op, &complex_mov_seg_reg_op, &pop_reg_op,
+ &mov_reg_seg_op, &store_op, &mov_seg_reg_op, &pop_reg_op,
/* NOP XCHG XCHG XCHG*/
-/*90*/ &limm_op, &xchg_op, &xchg_op, &xchg_op,
+/*90*/ &fxch_op, &xchg_op, &xchg_op, &xchg_op,
/* XCHG XCHG XCHG XCHG*/
&xchg_op, &xchg_op, &xchg_op, &xchg_op,
/* CBW CWD CALL far WAIT*/
- &complex_alu1_op, &complex_alu1_op, &complex_call_far_op, &limm_op,
+ &complex_alu1_op, &complex_alu1_op, &call_far_op, &fxch_op,
/* PUSHF POPF SAHF LAHF*/
- &complex_pushf_op, &complex_popf_op, &complex_alux1_op, &complex_alux1_op,
+ &pushf_op, &popf_op, &complex_alup0_1_op, &complex_alup0_1_op,
/* MOV MOV MOV MOV*/
/*a0*/ &load_op, &load_op, &store_op, &store_op,
/* MOVSB MOVSW CMPSB CMPSW*/
- &movs_op, &movs_op, &complex_cmpsb_op, &complex_cmps_op,
+ &movs_op, &movs_op, &cmpsb_op, &cmps_op,
/* TEST TEST STOSB STOSW*/
&test_reg_b_op, &test_reg_op, &stos_op, &stos_op,
/* LODSB LODSW SCASB SCASW*/
- &lods_op, &lods_op, &complex_scasb_op, &complex_scas_op,
+ &lods_op, &lods_op, &scasb_op, &scas_op,
/* MOV*/
-/*b0*/ &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
+/*b0*/ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
/* RET imm RET*/
-/*c0*/ INVALID, INVALID, &complex_ret_op, &complex_ret_op,
+/*c0*/ INVALID, INVALID, &ret_op, &ret_op,
/* LES LDS MOV MOV*/
- &complex_lss_op, &complex_lss_op, &store_op, &store_op,
+ &lss_op, &lss_op, &store_op, &store_op,
/* ENTER LEAVE RETF RETF*/
- &complex_enter_op, &leave_op, &complex_retf_op, &complex_retf_op,
+ &enter_op, &leave_op, &retf_op, &retf_op,
/* INT3 INT INTO IRET*/
- &complex_int_op, &complex_int_op, &complex_int_op, &complex_iret_op,
+ &int_op, &int_op, &int_op, &iret_op,
/*d0*/ INVALID, INVALID, INVALID, INVALID,
/* AAM AAD SETALC XLAT*/
- &complex_alux6_op, &complex_alux3_op, &complex_alux1_op, &complex_xlat_op,
+ &alup0_6_op, &alup0_3_op, &complex_alup0_1_op, &xlat_op,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
+
/* LOOPNE LOOPE LOOP JCXZ*/
-/*e0*/ &complex_loop_op, &complex_loop_op, &loop_op, &complex_loop_op,
+/*e0*/ &loop_op, &loop_op, &loop_op, &loop_op,
/* IN AL IN AX OUT_AL OUT_AX*/
- &complex_in_op, &complex_in_op, &complex_out_op, &complex_out_op,
+ &in_op, &in_op, &out_op, &out_op,
/* CALL JMP JMP JMP*/
- &store_op, &branch_op, &complex_jmp_far_op, &branch_op,
+ &store_op, &branch_op, &jmp_far_op, &branch_op,
/* IN AL IN AX OUT_AL OUT_AX*/
- &complex_in_op, &complex_in_op, &complex_out_op, &complex_out_op,
+ &in_op, &in_op, &out_op, &out_op,
/* REPNE REPE*/
/*f0*/ INVALID, INVALID, INVALID, INVALID,
/* HLT CMC*/
- &complex_alux1_op, &complex_alu2_op, INVALID, INVALID,
+ &complex_alup0_1_op, &alu2_op, INVALID, INVALID,
/* CLC STC CLI STI*/
- &complex_alu1_op, &complex_alu1_op, &complex_cli_sti_op, &complex_cli_sti_op,
+ &complex_alu1_op, &complex_alu1_op, &cli_sti_op, &cli_sti_op,
/* CLD STD INCDEC*/
- &complex_alu1_op, &complex_alu1_op, &complex_alux1_op, INVALID
+ &complex_alu1_op, &complex_alu1_op, &complex_alup0_1_op, INVALID
};
-static const risc86_instruction_t *opcode_timings_0f[256] =
+static const macro_op_t *opcode_timings_0f[256] =
{
-/*00*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, &complex_alu6_op,
- INVALID, &complex_alu6_op, &complex_alu6_op, INVALID,
- &complex_invd_op, &complex_wbinvd_op, INVALID, INVALID,
- INVALID, &load_op, &complex_femms_op, INVALID,
+/*00*/ &alu6_op, &alu6_op, &alu6_op, &alu6_op,
+ INVALID, &alu6_op, &alu6_op, INVALID,
+ &invd_op, &wbinvd_op, INVALID, INVALID,
+ INVALID, &load_op, &femms_op, INVALID,
/*10*/ INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
-/*20*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, &complex_alu6_op,
- &complex_alu6_op, &complex_alu6_op, INVALID, INVALID,
+/*20*/ &alu6_op, &alu6_op, &alu6_op, &alu6_op,
+ &alu6_op, &alu6_op, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
-/*30*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, INVALID,
+/*30*/ &alu6_op, &alu6_op, &alu6_op, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
@@ -1253,7 +1210,7 @@ static const risc86_instruction_t *opcode_timings_0f[256] =
INVALID, INVALID, &mload_op, &mload_op,
/*70*/ INVALID, &load_mmx_shift_op, &load_mmx_shift_op, &load_mmx_shift_op,
- &load_mmx_op, &load_mmx_op, &load_mmx_op, &complex_emms_op,
+ &load_mmx_op, &load_mmx_op, &load_mmx_op, &emms_op,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, &mstore_op, &mstore_op,
@@ -1262,23 +1219,23 @@ static const risc86_instruction_t *opcode_timings_0f[256] =
&branch_op, &branch_op, &branch_op, &branch_op,
&branch_op, &branch_op, &branch_op, &branch_op,
-/*90*/ &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op,
- &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op,
- &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op,
- &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op,
+/*90*/ &setcc_reg_op, &setcc_reg_op, &setcc_reg_op, &setcc_reg_op,
+ &setcc_reg_op, &setcc_reg_op, &setcc_reg_op, &setcc_reg_op,
+ &setcc_reg_op, &setcc_reg_op, &setcc_reg_op, &setcc_reg_op,
+ &setcc_reg_op, &setcc_reg_op, &setcc_reg_op, &setcc_reg_op,
-/*a0*/ &push_seg_op, &complex_mov_seg_mem_op,&complex_cpuid_op, &complex_load_alu_op,
- &complex_alu_store_op, &complex_alu_store_op, INVALID, INVALID,
- &push_seg_op, &complex_mov_seg_mem_op,INVALID, &complex_load_alu_op,
- &complex_alu_store_op, &complex_alu_store_op, INVALID, &complex_mul_op,
+/*a0*/ &push_seg_op, &mov_seg_mem_op, &cpuid_op, &load_alu_op,
+ &alu_store_op, &alu_store_op, INVALID, INVALID,
+ &push_seg_op, &mov_seg_mem_op, INVALID, &load_alu_op,
+ &alu_store_op, &alu_store_op, INVALID, &mul_op,
-/*b0*/ &complex_cmpxchg_b_op, &complex_cmpxchg_op, &complex_lss_op, &complex_load_alu_op,
- &complex_lss_op, &complex_lss_op, &load_alux_op, &load_alu_op,
- INVALID, INVALID, &complex_load_alu_op, &complex_load_alu_op,
- &complex_bsx_op, &complex_bsx_op, &load_alux_op, &load_alu_op,
+/*b0*/ &cmpxchg_b_op, &cmpxchg_op, &lss_op, &load_alu_op,
+ &lss_op, &lss_op, &load_alup0_op, &load_alu_op,
+ INVALID, INVALID, &load_alu_op, &load_alu_op,
+ &bsx_op, &bsx_op, &load_alup0_op, &load_alu_op,
-/*c0*/ &complex_alux_store_op, &complex_alu_store_op, INVALID, INVALID,
- INVALID, INVALID, INVALID, &complex_cmpxchg_op,
+/*c0*/ &alup0_store_op, &alu_store_op, INVALID, INVALID,
+ INVALID, INVALID, INVALID, &cmpxchg_op,
&bswap_op, &bswap_op, &bswap_op, &bswap_op,
&bswap_op, &bswap_op, &bswap_op, &bswap_op,
@@ -1297,182 +1254,182 @@ static const risc86_instruction_t *opcode_timings_0f[256] =
&load_mmx_op, &load_mmx_op, &load_mmx_op, INVALID,
&load_mmx_op, &load_mmx_op, &load_mmx_op, INVALID,
};
-static const risc86_instruction_t *opcode_timings_0f_mod3[256] =
+static const macro_op_t *opcode_timings_0f_mod3[256] =
{
-/*00*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, &complex_alu6_op,
- INVALID, &complex_alu6_op, &complex_alu6_op, INVALID,
- &complex_invd_op, &complex_wbinvd_op, INVALID, INVALID,
- INVALID, INVALID, &complex_femms_op, INVALID,
+/*00*/ &alu6_op, &alu6_op, &alu6_op, &alu6_op,
+ INVALID, &alu6_op, &alu6_op, INVALID,
+ &invd_op, &wbinvd_op, INVALID, INVALID,
+ INVALID, INVALID, &femms_op, INVALID,
/*10*/ INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
-/*20*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, &complex_alu6_op,
- &complex_alu6_op, &complex_alu6_op, INVALID, INVALID,
+/*20*/ &alu6_op, &alu6_op, &alu6_op, &alu6_op,
+ &alu6_op, &alu6_op, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
-/*30*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
+/*30*/ &alu6_op, &alu6_op, &alu6_op, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
-/*40*/ INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
+/*40*/ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
-/*50*/ INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
+/*50*/ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
-/*60*/ &mmx_op, &mmx_op, &mmx_op, &mmx_op,
- &mmx_op, &mmx_op, &mmx_op, &mmx_op,
- &mmx_op, &mmx_op, &mmx_op, &mmx_op,
- INVALID, INVALID, &mmx_op, &mmx_op,
+/*60*/ &mmx_op, &mmx_op, &mmx_op, &mmx_op,
+ &mmx_op, &mmx_op, &mmx_op, &mmx_op,
+ &mmx_op, &mmx_op, &mmx_op, &mmx_op,
+ INVALID, INVALID, &mmx_op, &mmx_op,
-/*70*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
- &mmx_op, &mmx_op, &mmx_op, &complex_emms_op,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, &mmx_op, &mmx_op,
+/*70*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
+ &mmx_op, &mmx_op, &mmx_op, &emms_op,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, &mmx_op, &mmx_op,
/*80*/ &branch_op, &branch_op, &branch_op, &branch_op,
&branch_op, &branch_op, &branch_op, &branch_op,
&branch_op, &branch_op, &branch_op, &branch_op,
&branch_op, &branch_op, &branch_op, &branch_op,
-/*90*/ &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op,
- &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op,
- &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op,
- &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op,
+/*90*/ &setcc_mem_op, &setcc_mem_op, &setcc_mem_op, &setcc_mem_op,
+ &setcc_mem_op, &setcc_mem_op, &setcc_mem_op, &setcc_mem_op,
+ &setcc_mem_op, &setcc_mem_op, &setcc_mem_op, &setcc_mem_op,
+ &setcc_mem_op, &setcc_mem_op, &setcc_mem_op, &setcc_mem_op,
-/*a0*/ &push_seg_op, &complex_mov_seg_mem_op, &complex_cpuid_op, &complex_alu1_op,
- &complex_alu1_op, &complex_alu1_op, INVALID, INVALID,
- &push_seg_op, &complex_mov_seg_mem_op, INVALID, &complex_alu1_op,
- &complex_alu1_op, &complex_alu1_op, INVALID, &complex_mul_op,
+/*a0*/ &push_seg_op, &mov_seg_mem_op, &cpuid_op, &complex_alu1_op,
+ &complex_alu1_op, &complex_alu1_op, INVALID, INVALID,
+ &push_seg_op, &mov_seg_mem_op, INVALID, &complex_alu1_op,
+ &complex_alu1_op, &complex_alu1_op, INVALID, &mul_op,
-/*b0*/ &complex_cmpxchg_b_op, &complex_cmpxchg_op, &complex_lss_op, &complex_alu1_op,
- &complex_lss_op, &complex_lss_op, &alux_op, &alu_op,
- INVALID, INVALID, &complex_alu1_op, &complex_alu1_op,
- &complex_bsx_op, &complex_bsx_op, &alux_op, &alu_op,
+/*b0*/ &cmpxchg_b_op, &cmpxchg_op, &lss_op, &complex_alu1_op,
+ &lss_op, &lss_op, &alup0_op, &alu_op,
+ INVALID, INVALID, &complex_alu1_op, &complex_alu1_op,
+ &bsx_op, &bsx_op, &alup0_op, &alu_op,
-/*c0*/ &complex_alux1_op, &complex_alu1_op, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- &bswap_op, &bswap_op, &bswap_op, &bswap_op,
- &bswap_op, &bswap_op, &bswap_op, &bswap_op,
+/*c0*/ &complex_alup0_1_op, &complex_alu1_op, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ &bswap_op, &bswap_op, &bswap_op, &bswap_op,
+ &bswap_op, &bswap_op, &bswap_op, &bswap_op,
-/*d0*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
- INVALID, &mmx_mul_op, INVALID, INVALID,
- &mmx_op, &mmx_op, INVALID, &mmx_op,
- &mmx_op, &mmx_op, INVALID, &mmx_op,
+/*d0*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
+ INVALID, &mmx_mul_op, INVALID, INVALID,
+ &mmx_op, &mmx_op, INVALID, &mmx_op,
+ &mmx_op, &mmx_op, INVALID, &mmx_op,
-/*e0*/ &mmx_op, &mmx_shift_op, &mmx_shift_op, INVALID,
- INVALID, &pmul_op, INVALID, INVALID,
- &mmx_op, &mmx_op, INVALID, &mmx_op,
- &mmx_op, &mmx_op, INVALID, &mmx_op,
+/*e0*/ &mmx_op, &mmx_shift_op, &mmx_shift_op, INVALID,
+ INVALID, &pmul_op, INVALID, INVALID,
+ &mmx_op, &mmx_op, INVALID, &mmx_op,
+ &mmx_op, &mmx_op, INVALID, &mmx_op,
-/*f0*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
- INVALID, &pmul_op, INVALID, INVALID,
- &mmx_op, &mmx_op, &mmx_op, INVALID,
- &mmx_op, &mmx_op, &mmx_op, INVALID,
+/*f0*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
+ INVALID, &pmul_op, INVALID, INVALID,
+ &mmx_op, &mmx_op, &mmx_op, INVALID,
+ &mmx_op, &mmx_op, &mmx_op, INVALID,
};
-static const risc86_instruction_t *opcode_timings_shift[8] =
+static const macro_op_t *opcode_timings_shift[8] =
{
- &complex_alu_store_op, &complex_alu_store_op, &complex_alu_store_op, &complex_alu_store_op,
- &complex_alu_store_op, &complex_alu_store_op, &complex_alu_store_op, &complex_alu_store_op
+ &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op,
+ &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op
};
-static const risc86_instruction_t *opcode_timings_shift_b[8] =
+static const macro_op_t *opcode_timings_shift_b[8] =
{
- &complex_alux_store_op, &complex_alux_store_op, &complex_alux_store_op, &complex_alux_store_op,
- &complex_alux_store_op, &complex_alux_store_op, &complex_alux_store_op, &complex_alux_store_op
+ &alup0_store_op, &alup0_store_op, &alup0_store_op, &alup0_store_op,
+ &alup0_store_op, &alup0_store_op, &alup0_store_op, &alup0_store_op
};
-static const risc86_instruction_t *opcode_timings_shift_mod3[8] =
+static const macro_op_t *opcode_timings_shift_mod3[8] =
{
&complex_alu1_op, &complex_alu1_op, &complex_alu1_op, &complex_alu1_op,
&alu_op, &alu_op, &alu_op, &alu_op
};
-static const risc86_instruction_t *opcode_timings_shift_b_mod3[8] =
+static const macro_op_t *opcode_timings_shift_b_mod3[8] =
{
- &complex_alux1_op, &complex_alux1_op, &complex_alux1_op, &complex_alux1_op,
- &alux_op, &alux_op, &alux_op, &alux_op
+ &complex_alup0_1_op, &complex_alup0_1_op, &complex_alup0_1_op, &complex_alup0_1_op,
+ &alup0_op, &alup0_op, &alup0_op, &alup0_op
};
-static const risc86_instruction_t *opcode_timings_80[8] =
+static const macro_op_t *opcode_timings_80[8] =
{
- &alux_store_op, &alux_store_op, &complex_alux_store_op, &complex_alux_store_op,
- &alux_store_op, &alux_store_op, &alux_store_op, &alux_store_op,
+ &alup0_store_op, &alup0_store_op, &alup0_store_op, &alup0_store_op,
+ &alup0_store_op, &alup0_store_op, &alup0_store_op, &alup0_store_op,
};
-static const risc86_instruction_t *opcode_timings_80_mod3[8] =
+static const macro_op_t *opcode_timings_80_mod3[8] =
{
- &alux_op, &alux_op, &alux_store_op, &alux_store_op,
- &alux_op, &alux_op, &alux_op, &alux_op,
+ &alup0_op, &alup0_op, &alup0_store_op, &alup0_store_op,
+ &alup0_op, &alup0_op, &alup0_op, &alup0_op,
};
-static const risc86_instruction_t *opcode_timings_8x[8] =
+static const macro_op_t *opcode_timings_8x[8] =
{
- &alu_store_op, &alu_store_op, &complex_alu_store_op, &complex_alu_store_op,
- &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op,
-};
-static const risc86_instruction_t *opcode_timings_8x_mod3[8] =
+ &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op,
+ &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op,
+};
+static const macro_op_t *opcode_timings_8x_mod3[8] =
{
- &alu_op, &alu_op, &alu_store_op, &alu_store_op,
- &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_store_op, &alu_store_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
};
-static const risc86_instruction_t *opcode_timings_f6[8] =
+static const macro_op_t *opcode_timings_f6[8] =
{
/* TST NOT NEG*/
- &test_mem_imm_b_op, INVALID, &complex_alux_store_op, &complex_alux_store_op,
+ &test_mem_imm_b_op, INVALID, &alup0_store_op, &alup0_store_op,
/* MUL IMUL DIV IDIV*/
- &complex_mul_mem_op, &complex_mul_mem_op, &complex_div16_mem_op, &complex_div16_mem_op,
+ &mul_mem_op, &mul_mem_op, &div16_mem_op, &div16_mem_op,
};
-static const risc86_instruction_t *opcode_timings_f6_mod3[8] =
+static const macro_op_t *opcode_timings_f6_mod3[8] =
{
/* TST NOT NEG*/
- &test_reg_b_op, INVALID, &alux_op, &alux_op,
+ &test_reg_b_op, INVALID, &alup0_op, &alup0_op,
/* MUL IMUL DIV IDIV*/
- &complex_mul_op, &complex_mul_op, &complex_div16_op, &complex_div16_op,
+ &mul_op, &mul_op, &div16_op, &div16_op,
};
-static const risc86_instruction_t *opcode_timings_f7[8] =
+static const macro_op_t *opcode_timings_f7[8] =
{
/* TST NOT NEG*/
- &test_mem_imm_op, INVALID, &complex_alu_store_op, &complex_alu_store_op,
+ &test_mem_imm_op, INVALID, &alu_store_op, &alu_store_op,
/* MUL IMUL DIV IDIV*/
- &complex_mul64_mem_op, &complex_mul64_mem_op, &complex_div32_mem_op, &complex_div32_mem_op,
+ &mul64_mem_op, &mul64_mem_op, &div32_mem_op, &div32_mem_op,
};
-static const risc86_instruction_t *opcode_timings_f7_mod3[8] =
+static const macro_op_t *opcode_timings_f7_mod3[8] =
{
/* TST NOT NEG*/
&test_reg_op, INVALID, &alu_op, &alu_op,
/* MUL IMUL DIV IDIV*/
- &complex_mul64_op, &complex_mul64_op, &complex_div32_op, &complex_div32_op,
+ &mul64_op, &mul64_op, &div32_op, &div32_op,
};
-static const risc86_instruction_t *opcode_timings_ff[8] =
+static const macro_op_t *opcode_timings_ff[8] =
{
/* INC DEC CALL CALL far*/
- &alu_store_op, &alu_store_op, &store_op, &complex_call_far_op,
+ &alu_store_op, &alu_store_op, &store_op, &call_far_op,
/* JMP JMP far PUSH*/
- &branch_op, &complex_jmp_far_op, &push_mem_op, INVALID
+ &branch_op, &jmp_far_op, &push_mem_op, INVALID
};
-static const risc86_instruction_t *opcode_timings_ff_mod3[8] =
+static const macro_op_t *opcode_timings_ff_mod3[8] =
{
/* INC DEC CALL CALL far*/
- &complex_alu1_op, &complex_alu1_op, &store_op, &complex_call_far_op,
+ &complex_alu1_op, &complex_alu1_op, &store_op, &call_far_op,
/* JMP JMP far PUSH*/
- &branch_op, &complex_jmp_far_op, &complex_push_mem_op, INVALID
+ &branch_op, &jmp_far_op, &complex_push_mem_op, INVALID
};
-static const risc86_instruction_t *opcode_timings_d8[8] =
+static const macro_op_t *opcode_timings_d8[8] =
{
/* FADDs FMULs FCOMs FCOMPs*/
&load_fadd_op, &load_fmul_op, &load_float_op, &load_float_op,
/* FSUBs FSUBRs FDIVs FDIVRs*/
&load_float_op, &load_float_op, &fdiv_mem_op, &fdiv_mem_op,
};
-static const risc86_instruction_t *opcode_timings_d8_mod3[8] =
+static const macro_op_t *opcode_timings_d8_mod3[8] =
{
/* FADD FMUL FCOM FCOMP*/
&fadd_op, &fmul_op, &float_op, &float_op,
@@ -1480,27 +1437,27 @@ static const risc86_instruction_t *opcode_timings_d8_mod3[8] =
&float_op, &float_op, &fdiv_op, &fdiv_op,
};
-static const risc86_instruction_t *opcode_timings_d9[8] =
+static const macro_op_t *opcode_timings_d9[8] =
{
/* FLDs FSTs FSTPs*/
&load_float_op, INVALID, &fstore_op, &fstore_op,
/* FLDENV FLDCW FSTENV FSTCW*/
- &complex_float_l_op, &complex_fldcw_op, &complex_float_l_op, &complex_float_op
+ &complex_float_l_op, &fldcw_op, &complex_float_l_op, &complex_float_op
};
-static const risc86_instruction_t *opcode_timings_d9_mod3[64] =
+static const macro_op_t *opcode_timings_d9_mod3[64] =
{
/*FLD*/
&float_op, &float_op, &float_op, &float_op,
&float_op, &float_op, &float_op, &float_op,
/*FXCH*/
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
+ &fxch_op, &fxch_op, &fxch_op, &fxch_op,
+ &fxch_op, &fxch_op, &fxch_op, &fxch_op,
/*FNOP*/
&float_op, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
/*FSTP*/
- &float2_op, &float2_op, &float2_op, &float2_op,
- &float2_op, &float2_op, &float2_op, &float2_op,
+ &float2_op, &float2_op, &float2_op, &float2_op,
+ &float2_op, &float2_op, &float2_op, &float2_op,
/* opFCHS opFABS*/
&fchs_op, &float_op, INVALID, INVALID,
/* opFTST opFXAM*/
@@ -1519,28 +1476,28 @@ static const risc86_instruction_t *opcode_timings_d9_mod3[64] =
&float_op, &fdiv_op, &fsin_op, &fsin_op
};
-static const risc86_instruction_t *opcode_timings_da[8] =
+static const macro_op_t *opcode_timings_da[8] =
{
/* FIADDl FIMULl FICOMl FICOMPl*/
&load_fadd_op, &load_fmul_op, &load_float_op, &load_float_op,
/* FISUBl FISUBRl FIDIVl FIDIVRl*/
&load_float_op, &load_float_op, &fdiv_mem_op, &fdiv_mem_op,
};
-static const risc86_instruction_t *opcode_timings_da_mod3[8] =
+static const macro_op_t *opcode_timings_da_mod3[8] =
{
INVALID, INVALID, INVALID, INVALID,
/* FCOMPP*/
INVALID, &float_op, INVALID, INVALID
};
-static const risc86_instruction_t *opcode_timings_db[8] =
+static const macro_op_t *opcode_timings_db[8] =
{
/* FLDil FSTil FSTPil*/
&load_float_op, INVALID, &fstore_op, &fstore_op,
/* FLDe FSTPe*/
- INVALID, &complex_flde_op, INVALID, &complex_fste_op
+ INVALID, &flde_op, INVALID, &fste_op
};
-static const risc86_instruction_t *opcode_timings_db_mod3[64] =
+static const macro_op_t *opcode_timings_db_mod3[64] =
{
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
@@ -1569,14 +1526,14 @@ static const risc86_instruction_t *opcode_timings_db_mod3[64] =
INVALID, INVALID, INVALID, INVALID,
};
-static const risc86_instruction_t *opcode_timings_dc[8] =
+static const macro_op_t *opcode_timings_dc[8] =
{
/* FADDd FMULd FCOMd FCOMPd*/
&load_fadd_op, &load_fmul_op, &load_float_op, &load_float_op,
/* FSUBd FSUBRd FDIVd FDIVRd*/
&load_float_op, &load_float_op, &fdiv_mem_op, &fdiv_mem_op,
};
-static const risc86_instruction_t *opcode_timings_dc_mod3[8] =
+static const macro_op_t *opcode_timings_dc_mod3[8] =
{
/* opFADDr opFMULr*/
&fadd_op, &fmul_op, INVALID, INVALID,
@@ -1584,14 +1541,14 @@ static const risc86_instruction_t *opcode_timings_dc_mod3[8] =
&float_op, &float_op, &fdiv_op, &fdiv_op
};
-static const risc86_instruction_t *opcode_timings_dd[8] =
+static const macro_op_t *opcode_timings_dd[8] =
{
/* FLDd FSTd FSTPd*/
- &load_float_op, INVALID, &fstore_op, &fstore_op,
+ &load_float_op, INVALID, &fstore_op, &fstore_op,
/* FRSTOR FSAVE FSTSW*/
&complex_float_l_op, INVALID, &complex_float_l_op, &complex_float_l_op
};
-static const risc86_instruction_t *opcode_timings_dd_mod3[8] =
+static const macro_op_t *opcode_timings_dd_mod3[8] =
{
/* FFFREE FST FSTP*/
&float_op, INVALID, &float_op, &float_op,
@@ -1599,14 +1556,14 @@ static const risc86_instruction_t *opcode_timings_dd_mod3[8] =
&float_op, &float_op, INVALID, INVALID
};
-static const risc86_instruction_t *opcode_timings_de[8] =
+static const macro_op_t *opcode_timings_de[8] =
{
/* FIADDw FIMULw FICOMw FICOMPw*/
&load_fiadd_op, &load_fiadd_op, &load_fiadd_op, &load_fiadd_op,
/* FISUBw FISUBRw FIDIVw FIDIVRw*/
&load_fiadd_op, &load_fiadd_op, &load_fiadd_op, &load_fiadd_op,
};
-static const risc86_instruction_t *opcode_timings_de_mod3[8] =
+static const macro_op_t *opcode_timings_de_mod3[8] =
{
/* FADDP FMULP FCOMPP*/
&fadd_op, &fmul_op, INVALID, &float_op,
@@ -1614,14 +1571,14 @@ static const risc86_instruction_t *opcode_timings_de_mod3[8] =
&float_op, &float_op, &fdiv_op, &fdiv_op,
};
-static const risc86_instruction_t *opcode_timings_df[8] =
+static const macro_op_t *opcode_timings_df[8] =
{
/* FILDiw FISTiw FISTPiw*/
&load_float_op, INVALID, &fstore_op, &fstore_op,
/* FILDiq FBSTP FISTPiq*/
INVALID, &load_float_op, &complex_float_l_op, &fstore_op,
};
-static const risc86_instruction_t *opcode_timings_df_mod3[8] =
+static const macro_op_t *opcode_timings_df_mod3[8] =
{
INVALID, INVALID, INVALID, INVALID,
/* FSTSW AX*/
@@ -1647,35 +1604,35 @@ static p6_unit_t *units;
/*Pentium Pro has no MMX*/
static p6_unit_t ppro_units[] =
{
- {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUX) | (1 << UOP_FLOAT)}, /*Integer X & Floating point*/
- {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH)}, /*Integer Y*/
- {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD)}, /*Load*/
- {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED)}, /*Data Store*/
- {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA)}, /*Address Store*/
+ {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT)}, /*Port 0*/
+ {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH)}, /*Port 1*/
+ {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD)}, /*Port 2*/
+ {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED)}, /*Port 3*/
+ {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA)}, /*Port 4*/
};
#define NR_PPRO_UNITS (sizeof(ppro_units) / sizeof(p6_unit_t))
/*Pentium II/Celeron assigns the multiplier to port 0, the shifter to port 1, and shares the MMX ALU*/
static p6_unit_t p2_units[] =
{
- {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUX) | (1 << UOP_FLOAT) | /*Integer X & Floating point*/
+ {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT) | /*Port 0*/
(1 << UOP_MMX) | (1 << UOP_MMX_MUL)},
- {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH) | /*Integer Y*/
+ {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH) | /*Port 1*/
(1 << UOP_MMX) | (1 << UOP_MMX_SHIFT)},
- {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD) | (1 << UOP_MLOAD)}, /*Load*/
- {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED) | (1 << UOP_MSTORED)}, /*Data Store*/
- {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA) | (1 << UOP_MSTOREA)}, /*Address Store*/
+ {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD) | (1 << UOP_MLOAD)}, /*Port 2*/
+ {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED) | (1 << UOP_MSTORED)}, /*Port 3*/
+ {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA) | (1 << UOP_MSTOREA)}, /*Port 4*/
};
#define NR_P2_UNITS (sizeof(p2_units) / sizeof(p6_unit_t))
-static int uop_run(const risc86_uop_t *uop, int decode_time)
+static int uop_run(const p6_uop_t *uop, int decode_time)
{
int c;
p6_unit_t *best_unit = NULL;
- double best_start_cycle = 99999;
+ int best_start_cycle = 99999;
- /*UOP_LIMM does not require execution*/
- if (uop->type == UOP_LIMM)
+ /*UOP_FXCH does not require execution*/
+ if (uop->type == UOP_FXCH)
return decode_time;
/*Find execution unit for this uOP*/
@@ -1709,7 +1666,7 @@ static int uop_run(const risc86_uop_t *uop, int decode_time)
static struct
{
int nr_uops;
- const risc86_uop_t *uops[6];
+ const p6_uop_t *uops[6];
/*Earliest time a uop can start. If the timestamp is -1, then the uop is
part of a dependency chain and the start time is the completion time of
the previous uop*/
@@ -1748,7 +1705,10 @@ void decode_flush_p6()
/*Submit uops to execution units, and determine the latest completion time*/
for (c = 0; c < (decode_buffer.nr_uops); c++)
{
- start_timestamp = decode_buffer.earliest_start[c];
+ if (decode_buffer.earliest_start[c] == -1)
+ start_timestamp = last_uop_timestamp;
+ else
+ start_timestamp = decode_buffer.earliest_start[c];
last_uop_timestamp = uop_run(decode_buffer.uops[c], start_timestamp);
if (last_uop_timestamp > uop_timestamp)
@@ -1822,7 +1782,7 @@ static int codegen_timing_instr_length(uint64_t deps, uint32_t fetchdat, int op_
return len;
}
-static void decode_instruction(const risc86_instruction_t *ins, uint64_t deps, uint32_t fetchdat, int op_32, int bit8)
+static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fetchdat, int op_32, int bit8)
{
uint32_t regmask_required;
uint32_t regmask_modified;
@@ -1858,10 +1818,8 @@ static void decode_instruction(const risc86_instruction_t *ins, uint64_t deps, u
}
/*Simple decoders are limited to 7 bytes & 1 uOP*/
- if (decode_type == DECODE_SIMPLE && instr_length > 7)
+ if ((decode_type == DECODE_SIMPLE && instr_length > 7) || (decode_type == DECODE_SIMPLE && ins->nr_uops > 1))
decode_type = DECODE_COMPLEX;
- else if (decode_type == DECODE_SIMPLE && ins->nr_uops > 1)
- decode_type = DECODE_COMPLEX;
switch (decode_type)
{
@@ -1904,7 +1862,10 @@ static void decode_instruction(const risc86_instruction_t *ins, uint64_t deps, u
for (c = 0; c < ins->nr_uops; c++)
{
decode_buffer.uops[d] = &ins->uop[c];
- decode_buffer.earliest_start[d] = earliest_start;
+ if (c == 0)
+ decode_buffer.earliest_start[d] = earliest_start;
+ else
+ decode_buffer.earliest_start[d] = -1;
d++;
if ((d == 3) && (ins->nr_uops > 4)) /*Ins. with >4 uOPs require the use of special units only present on 3 translate PLAs*/
@@ -2009,7 +1970,7 @@ void codegen_timing_p6_prefix(uint8_t prefix, uint32_t fetchdat)
void codegen_timing_p6_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uint32_t op_pc)
{
- const risc86_instruction_t **ins_table;
+ const macro_op_t **ins_table;
uint64_t *deps;
int mod3 = ((fetchdat & 0xc0) == 0xc0);
int old_last_complete_timestamp = last_complete_timestamp;
diff --git a/src/cpu_new/codegen_timing_p6.c b/src/cpu_new/codegen_timing_p6.c
index a51b4df32..3cb15bf68 100644
--- a/src/cpu_new/codegen_timing_p6.c
+++ b/src/cpu_new/codegen_timing_p6.c
@@ -16,8 +16,8 @@
typedef enum uop_type_t
{
- UOP_ALU = 0, /*Executes in Integer X or Y units*/
- UOP_ALUX, /*Executes in Integer X unit*/
+ UOP_ALU = 0, /*Executes in Port 0 or 1 ALU units*/
+ UOP_ALUP0, /*Executes in Port 0 ALU unit*/
UOP_LOAD, /*Executes in Load unit*/
UOP_STORED, /*Executes in Data Store unit*/
UOP_STOREA, /*Executes in Address Store unit*/
@@ -28,11 +28,11 @@ typedef enum uop_type_t
UOP_MSTORED, /*Executes in Data Store unit*/
UOP_MSTOREA, /*Executes in Address Store unit*/
UOP_FLOAT, /*Executes in Floating Point unit*/
- UOP_MMX, /*Executes in Integer X or Y units as MMX*/
- UOP_MMX_SHIFT, /*Executes in Integer Y unit. Uses MMX shifter*/
- UOP_MMX_MUL, /*Executes in Integer X unit. Uses MMX multiplier*/
+ UOP_MMX, /*Executes in Port 0 or 1 ALU units as MMX*/
+ UOP_MMX_SHIFT, /*Executes in Port 1 ALU unit. Uses MMX shifter*/
+ UOP_MMX_MUL, /*Executes in Port 0 ALU unit. Uses MMX multiplier*/
UOP_BRANCH, /*Executes in Branch unit*/
- UOP_LIMM /*Does not require an execution unit*/
+ UOP_FXCH /*Does not require an execution unit*/
} uop_type_t;
typedef enum decode_type_t
@@ -43,46 +43,46 @@ typedef enum decode_type_t
#define MAX_UOPS 10
-typedef struct risc86_uop_t
+typedef struct p6_uop_t
{
uop_type_t type;
- double latency;
-} risc86_uop_t;
+ int latency;
+} p6_uop_t;
-typedef struct risc86_instruction_t
+typedef struct macro_op_t
{
int nr_uops;
decode_type_t decode_type;
- risc86_uop_t uop[MAX_UOPS];
-} risc86_instruction_t;
+ p6_uop_t uop[MAX_UOPS];
+} macro_op_t;
-static const risc86_instruction_t alu_op =
+static const macro_op_t alu_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t alux_op =
+static const macro_op_t alup0_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1}
+ .decode_type = DECODE_SIMPLE,
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t load_alu_op =
+static const macro_op_t load_alu_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t load_alux_op =
+static const macro_op_t load_alup0_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t alu_store_op =
+static const macro_op_t alu_store_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -91,38 +91,38 @@ static const risc86_instruction_t alu_store_op =
.uop[2] = {.type = UOP_STORED, .latency = 1},
.uop[3] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t alux_store_op =
+static const macro_op_t alup0_store_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
.uop[2] = {.type = UOP_STORED, .latency = 1},
.uop[3] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t branch_op =
+static const macro_op_t branch_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_BRANCH, .latency = 1}
+ .uop[0] = {.type = UOP_BRANCH, .latency = 2}
};
-static const risc86_instruction_t limm_op =
+static const macro_op_t fxch_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_LIMM, .latency = 1}
+ .uop[0] = {.type = UOP_FXCH, .latency = 1}
};
-static const risc86_instruction_t load_op =
+static const macro_op_t load_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
+ .decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_LOAD, .latency = 1}
};
-static const risc86_instruction_t store_op =
+static const macro_op_t store_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
@@ -131,14 +131,14 @@ static const risc86_instruction_t store_op =
};
-static const risc86_instruction_t bswap_op =
+static const macro_op_t bswap_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1},
};
-static const risc86_instruction_t leave_op =
+static const macro_op_t leave_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -146,27 +146,27 @@ static const risc86_instruction_t leave_op =
.uop[1] = {.type = UOP_ALU, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t lods_op =
+static const macro_op_t lods_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t loop_op =
+static const macro_op_t loop_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1},
- .uop[1] = {.type = UOP_BRANCH, .latency = 1}
+ .uop[1] = {.type = UOP_BRANCH, .latency = 2}
};
-static const risc86_instruction_t mov_reg_seg_op =
+static const macro_op_t mov_reg_seg_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
};
-static const risc86_instruction_t movs_op =
+static const macro_op_t movs_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -175,14 +175,14 @@ static const risc86_instruction_t movs_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t pop_reg_op =
+static const macro_op_t pop_reg_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t pop_mem_op =
+static const macro_op_t pop_mem_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -191,14 +191,14 @@ static const risc86_instruction_t pop_mem_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t push_imm_op =
+static const macro_op_t push_imm_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_STORED, .latency = 1},
.uop[1] = {.type = UOP_STOREA, .latency = 1},
};
-static const risc86_instruction_t push_mem_op =
+static const macro_op_t push_mem_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -206,7 +206,7 @@ static const risc86_instruction_t push_mem_op =
.uop[1] = {.type = UOP_STORED, .latency = 1},
.uop[2] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t push_seg_op =
+static const macro_op_t push_seg_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -215,7 +215,7 @@ static const risc86_instruction_t push_seg_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t stos_op =
+static const macro_op_t stos_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -223,33 +223,33 @@ static const risc86_instruction_t stos_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t test_reg_op =
-{
- .nr_uops = 1,
- .decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_ALU, .latency = 1}
-};
-static const risc86_instruction_t test_reg_b_op =
+static const macro_op_t test_reg_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t test_mem_imm_op =
+static const macro_op_t test_reg_b_op =
+{
+ .nr_uops = 1,
+ .decode_type = DECODE_COMPLEX,
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1}
+};
+static const macro_op_t test_mem_imm_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t test_mem_imm_b_op =
+static const macro_op_t test_mem_imm_b_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t xchg_op =
+static const macro_op_t xchg_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -259,98 +259,98 @@ static const risc86_instruction_t xchg_op =
};
-static const risc86_instruction_t mmx_op =
+static const macro_op_t mmx_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_MMX, .latency = 1.5}
+ .uop[0] = {.type = UOP_MMX, .latency = 1}
};
-static const risc86_instruction_t mmx_mul_op =
+static const macro_op_t mmx_mul_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_MMX_MUL, .latency = 1.5}
+ .uop[0] = {.type = UOP_MMX_MUL, .latency = 1}
};
-static const risc86_instruction_t mmx_shift_op =
+static const macro_op_t mmx_shift_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_MMX_SHIFT, .latency = 1.5}
+ .uop[0] = {.type = UOP_MMX_SHIFT, .latency = 1}
};
-static const risc86_instruction_t load_mmx_op =
+static const macro_op_t load_mmx_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_MMX, .latency = 1.5}
+ .uop[0] = {.type = UOP_LOAD, .latency = 2},
+ .uop[1] = {.type = UOP_MMX, .latency = 2}
};
-static const risc86_instruction_t load_mmx_mul_op =
+static const macro_op_t load_mmx_mul_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 3},
- .uop[1] = {.type = UOP_MMX_MUL, .latency = 1.5}
+ .uop[0] = {.type = UOP_LOAD, .latency = 2},
+ .uop[1] = {.type = UOP_MMX_MUL, .latency = 2}
};
-static const risc86_instruction_t load_mmx_shift_op =
+static const macro_op_t load_mmx_shift_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 3},
- .uop[1] = {.type = UOP_MMX_SHIFT, .latency = 1.5}
+ .uop[0] = {.type = UOP_LOAD, .latency = 2},
+ .uop[1] = {.type = UOP_MMX_SHIFT, .latency = 2}
};
-static const risc86_instruction_t mload_op =
+static const macro_op_t mload_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_MLOAD, .latency = 3},
+ .uop[0] = {.type = UOP_MLOAD, .latency = 1},
};
-static const risc86_instruction_t mstore_op =
+static const macro_op_t mstore_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_MSTORED, .latency = 1},
.uop[1] = {.type = UOP_MSTOREA, .latency = 1}
};
-static const risc86_instruction_t pmul_op =
+static const macro_op_t pmul_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_MMX_MUL, .latency = 1.5}
+ .uop[0] = {.type = UOP_MMX_MUL, .latency = 1}
};
-static const risc86_instruction_t pmul_mem_op =
+static const macro_op_t pmul_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 3},
- .uop[1] = {.type = UOP_MMX_MUL, .latency = 1.5}
+ .uop[0] = {.type = UOP_LOAD, .latency = 2},
+ .uop[1] = {.type = UOP_MMX_MUL, .latency = 2}
};
-static const risc86_instruction_t float_op =
+static const macro_op_t float_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t fadd_op =
+static const macro_op_t fadd_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_FLOAT, .latency = 3}
+ .uop[0] = {.type = UOP_FLOAT, .latency = 2}
};
-static const risc86_instruction_t fmul_op =
+static const macro_op_t fmul_op =
{
.nr_uops = 1,
.decode_type = DECODE_SIMPLE,
- .uop[0] = {.type = UOP_ALU, .latency = 5}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 3}
};
-static const risc86_instruction_t float2_op =
+static const macro_op_t float2_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAT, .latency = 1},
.uop[1] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t fchs_op =
+static const macro_op_t fchs_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -358,35 +358,35 @@ static const risc86_instruction_t fchs_op =
.uop[1] = {.type = UOP_FLOAT, .latency = 2},
.uop[2] = {.type = UOP_FLOAT, .latency = 2}
};
-static const risc86_instruction_t load_float_op =
+static const macro_op_t load_float_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAD, .latency = 1},
.uop[1] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t load_fadd_op =
+static const macro_op_t load_fadd_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAD, .latency = 1},
- .uop[1] = {.type = UOP_FLOAT, .latency = 3}
+ .uop[1] = {.type = UOP_FLOAT, .latency = 2}
};
-static const risc86_instruction_t load_fmul_op =
+static const macro_op_t load_fmul_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALU, .latency = 5}
+ .uop[1] = {.type = UOP_ALU, .latency = 4}
};
-static const risc86_instruction_t fstore_op =
+static const macro_op_t fstore_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FSTORED, .latency = 1},
.uop[1] = {.type = UOP_FSTOREA, .latency = 1},
};
-static const risc86_instruction_t load_fiadd_op =
+static const macro_op_t load_fiadd_op =
{
.nr_uops = 7,
.decode_type = DECODE_COMPLEX,
@@ -398,51 +398,51 @@ static const risc86_instruction_t load_fiadd_op =
.uop[5] = {.type = UOP_FLOAT, .latency = 1},
.uop[6] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t fdiv_op =
+static const macro_op_t fdiv_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_FLOAT, .latency = 32}
+ .decode_type = DECODE_SIMPLE,
+ .uop[0] = {.type = UOP_FLOAT, .latency = 37}
};
-static const risc86_instruction_t fdiv_mem_op =
+static const macro_op_t fdiv_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAD, .latency = 1},
- .uop[1] = {.type = UOP_FLOAT, .latency = 38}
+ .uop[1] = {.type = UOP_FLOAT, .latency = 37}
};
-static const risc86_instruction_t fsin_op =
+static const macro_op_t fsin_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_FLOAT, .latency = 60}
+ .decode_type = DECODE_SIMPLE,
+ .uop[0] = {.type = UOP_FLOAT, .latency = 62}
};
-static const risc86_instruction_t fsqrt_op =
+static const macro_op_t fsqrt_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
+ .decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_FLOAT, .latency = 69}
};
-static const risc86_instruction_t complex_fldcw_op =
+static const macro_op_t fldcw_op =
{
.nr_uops = 1,
- .decode_type = DECODE_COMPLEX,
+ .decode_type = DECODE_SIMPLE,
.uop[0] = {.type = UOP_FLOAT, .latency = 10}
};
-static const risc86_instruction_t complex_float_op =
+static const macro_op_t complex_float_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAT, .latency = 1}
};
-static const risc86_instruction_t complex_float_l_op =
+static const macro_op_t complex_float_l_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_FLOAT, .latency = 50}
};
-static const risc86_instruction_t complex_flde_op =
+static const macro_op_t flde_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -450,7 +450,7 @@ static const risc86_instruction_t complex_flde_op =
.uop[1] = {.type = UOP_FLOAD, .latency = 1},
.uop[2] = {.type = UOP_FLOAT, .latency = 2}
};
-static const risc86_instruction_t complex_fste_op =
+static const macro_op_t fste_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -459,20 +459,20 @@ static const risc86_instruction_t complex_fste_op =
.uop[2] = {.type = UOP_FSTOREA, .latency = 1}
};
-static const risc86_instruction_t complex_alu1_op =
+static const macro_op_t complex_alu1_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_alu2_op =
+static const macro_op_t alu2_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_alu3_op =
+static const macro_op_t alu3_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -480,7 +480,7 @@ static const risc86_instruction_t complex_alu3_op =
.uop[1] = {.type = UOP_ALU, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_alu6_op =
+static const macro_op_t alu6_op =
{
.nr_uops = 6,
.decode_type = DECODE_COMPLEX,
@@ -491,57 +491,39 @@ static const risc86_instruction_t complex_alu6_op =
.uop[4] = {.type = UOP_ALU, .latency = 1},
.uop[5] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_alux1_op =
+static const macro_op_t complex_alup0_1_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_alux3_op =
+static const macro_op_t alup0_3_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_alux6_op =
+static const macro_op_t alup0_6_op =
{
.nr_uops = 6,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1},
- .uop[3] = {.type = UOP_ALUX, .latency = 1},
- .uop[4] = {.type = UOP_ALUX, .latency = 1},
- .uop[5] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[3] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[4] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[5] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_alu_store_op =
-{
- .nr_uops = 4,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALU, .latency = 1},
- .uop[2] = {.type = UOP_STORED, .latency = 1},
- .uop[3] = {.type = UOP_STOREA, .latency = 1},
-};
-static const risc86_instruction_t complex_alux_store_op =
-{
- .nr_uops = 4,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_STORED, .latency = 1},
- .uop[3] = {.type = UOP_STOREA, .latency = 1}
-};
-static const risc86_instruction_t complex_arpl_op =
+static const macro_op_t arpl_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 3},
.uop[1] = {.type = UOP_ALU, .latency = 3}
};
-static const risc86_instruction_t complex_bound_op =
+static const macro_op_t bound_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -550,13 +532,13 @@ static const risc86_instruction_t complex_bound_op =
.uop[2] = {.type = UOP_ALU, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_bsx_op =
+static const macro_op_t bsx_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 10}
};
-static const risc86_instruction_t complex_call_far_op =
+static const macro_op_t call_far_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -565,13 +547,13 @@ static const risc86_instruction_t complex_call_far_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_cli_sti_op =
+static const macro_op_t cli_sti_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 7}
};
-static const risc86_instruction_t complex_cmps_op =
+static const macro_op_t cmps_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -579,15 +561,15 @@ static const risc86_instruction_t complex_cmps_op =
.uop[1] = {.type = UOP_ALU, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_cmpsb_op =
+static const macro_op_t cmpsb_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALU, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_cmpxchg_op =
+static const macro_op_t cmpxchg_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -596,54 +578,62 @@ static const risc86_instruction_t complex_cmpxchg_op =
.uop[2] = {.type = UOP_STORED, .latency = 1},
.uop[3] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t complex_cmpxchg_b_op =
+static const macro_op_t cmpxchg_b_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_STORED, .latency = 1},
- .uop[3] = {.type = UOP_STOREA, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_STORED, .latency = 1},
+ .uop[3] = {.type = UOP_STOREA, .latency = 1}
};
-static const risc86_instruction_t complex_cpuid_op =
+static const macro_op_t complex_push_mem_op =
+{
+ .nr_uops = 2,
+ .decode_type = DECODE_COMPLEX,
+ .uop[0] = {.type = UOP_STORED, .latency = 1},
+ .uop[1] = {.type = UOP_STOREA, .latency = 1}
+};
+
+static const macro_op_t cpuid_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 23}
};
-static const risc86_instruction_t complex_div16_op =
+static const macro_op_t div16_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 10}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 21}
};
-static const risc86_instruction_t complex_div16_mem_op =
+static const macro_op_t div16_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 10}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 21}
};
-static const risc86_instruction_t complex_div32_op =
+static const macro_op_t div32_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 18}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 37}
};
-static const risc86_instruction_t complex_div32_mem_op =
+static const macro_op_t div32_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 18}
+ .uop[1] = {.type = UOP_ALUP0, .latency = 37}
};
-static const risc86_instruction_t complex_emms_op =
+static const macro_op_t emms_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALU, .latency = 25}
+ .uop[0] = {.type = UOP_ALU, .latency = 50}
};
-static const risc86_instruction_t complex_enter_op =
+static const macro_op_t enter_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -651,28 +641,28 @@ static const risc86_instruction_t complex_enter_op =
.uop[1] = {.type = UOP_STOREA, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 10}
};
-static const risc86_instruction_t complex_femms_op =
+static const macro_op_t femms_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 6}
};
-static const risc86_instruction_t complex_in_op =
+static const macro_op_t in_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 10}
+ .uop[0] = {.type = UOP_LOAD, .latency = 18}
};
-static const risc86_instruction_t complex_ins_op =
+static const macro_op_t ins_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 10},
+ .uop[0] = {.type = UOP_LOAD, .latency = 18},
.uop[1] = {.type = UOP_STORED, .latency = 1},
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_int_op =
+static const macro_op_t int_op =
{
.nr_uops = 8,
.decode_type = DECODE_COMPLEX,
@@ -685,7 +675,7 @@ static const risc86_instruction_t complex_int_op =
.uop[6] = {.type = UOP_STOREA, .latency = 1},
.uop[7] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_iret_op =
+static const macro_op_t iret_op =
{
.nr_uops = 5,
.decode_type = DECODE_COMPLEX,
@@ -695,41 +685,20 @@ static const risc86_instruction_t complex_iret_op =
.uop[3] = {.type = UOP_ALU, .latency = 20},
.uop[4] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_invd_op =
+static const macro_op_t invd_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 500}
};
-static const risc86_instruction_t complex_jmp_far_op =
+static const macro_op_t jmp_far_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 3},
.uop[1] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_load_alu_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALU, .latency = 1}
-};
-static const risc86_instruction_t complex_load_alux_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
-};
-static const risc86_instruction_t complex_loop_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALU, .latency = 1},
- .uop[1] = {.type = UOP_BRANCH, .latency = 1}
-};
-static const risc86_instruction_t complex_lss_op =
+static const macro_op_t lss_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -737,7 +706,7 @@ static const risc86_instruction_t complex_lss_op =
.uop[1] = {.type = UOP_LOAD, .latency = 1},
.uop[2] = {.type = UOP_ALU, .latency = 3}
};
-static const risc86_instruction_t complex_mov_mem_seg_op =
+static const macro_op_t mov_mem_seg_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -745,68 +714,63 @@ static const risc86_instruction_t complex_mov_mem_seg_op =
.uop[1] = {.type = UOP_STORED, .latency = 1},
.uop[2] = {.type = UOP_STOREA, .latency = 1},
};
-static const risc86_instruction_t complex_mov_seg_mem_op =
+static const macro_op_t mov_seg_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 3}
};
-static const risc86_instruction_t complex_mov_seg_reg_op =
+static const macro_op_t mov_seg_reg_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 3}
};
-static const risc86_instruction_t complex_mul_op =
+static const macro_op_t mul_op =
+{
+ .nr_uops = 1,
+ .decode_type = DECODE_SIMPLE,
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1}
+};
+static const macro_op_t mul_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_mul_mem_op =
+static const macro_op_t mul64_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_mul64_op =
-{
- .nr_uops = 3,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1}
-};
-static const risc86_instruction_t complex_mul64_mem_op =
+static const macro_op_t mul64_mem_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALUX, .latency = 1},
- .uop[3] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[3] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_out_op =
+static const macro_op_t out_op =
{
- .nr_uops = 2,
+ .nr_uops = 1,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_STORED, .latency = 10},
- .uop[1] = {.type = UOP_STOREA, .latency = 10},
+ .uop[0] = {.type = UOP_ALU, .latency = 18}
};
-static const risc86_instruction_t complex_outs_op =
+static const macro_op_t outs_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_STORED, .latency = 10},
- .uop[1] = {.type = UOP_STOREA, .latency = 10},
- .uop[2] = {.type = UOP_ALU, .latency = 1}
+ .uop[1] = {.type = UOP_ALU, .latency = 18}
};
-static const risc86_instruction_t complex_pusha_op =
+static const macro_op_t pusha_op =
{
.nr_uops = 8,
.decode_type = DECODE_COMPLEX,
@@ -819,7 +783,7 @@ static const risc86_instruction_t complex_pusha_op =
.uop[6] = {.type = UOP_STORED, .latency = 2},
.uop[7] = {.type = UOP_STOREA, .latency = 2}
};
-static const risc86_instruction_t complex_popa_op =
+static const macro_op_t popa_op =
{
.nr_uops = 8,
.decode_type = DECODE_COMPLEX,
@@ -832,36 +796,30 @@ static const risc86_instruction_t complex_popa_op =
.uop[6] = {.type = UOP_LOAD, .latency = 1},
.uop[7] = {.type = UOP_LOAD, .latency = 1}
};
-static const risc86_instruction_t complex_popf_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 3},
- .uop[1] = {.type = UOP_ALUX, .latency = 17}
-};
-static const risc86_instruction_t complex_push_mem_op =
-{
- .nr_uops = 2,
- .decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_STORED, .latency = 1},
- .uop[1] = {.type = UOP_STOREA, .latency = 1}
-};
-static const risc86_instruction_t complex_pushf_op =
+static const macro_op_t popf_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_STORED, .latency = 1},
- .uop[2] = {.type = UOP_STOREA, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALU, .latency = 6},
+ .uop[2] = {.type = UOP_ALUP0, .latency = 10}
};
-static const risc86_instruction_t complex_ret_op =
+static const macro_op_t pushf_op =
+{
+ .nr_uops = 3,
+ .decode_type = DECODE_COMPLEX,
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_STORED, .latency = 1},
+ .uop[2] = {.type = UOP_STOREA, .latency = 1}
+};
+static const macro_op_t ret_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_retf_op =
+static const macro_op_t retf_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
@@ -869,52 +827,52 @@ static const risc86_instruction_t complex_retf_op =
.uop[1] = {.type = UOP_ALU, .latency = 3},
.uop[2] = {.type = UOP_BRANCH, .latency = 1}
};
-static const risc86_instruction_t complex_scas_op =
+static const macro_op_t scas_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_scasb_op =
+static const macro_op_t scasb_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_setcc_mem_op =
+static const macro_op_t setcc_mem_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_FSTORED, .latency = 1},
- .uop[3] = {.type = UOP_FSTOREA, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_FSTORED, .latency = 1},
+ .uop[3] = {.type = UOP_FSTOREA, .latency = 1}
};
-static const risc86_instruction_t complex_setcc_reg_op =
+static const macro_op_t setcc_reg_op =
{
.nr_uops = 3,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_ALUX, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1},
- .uop[2] = {.type = UOP_ALU, .latency = 1}
+ .uop[0] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1},
+ .uop[2] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_test_mem_op =
+static const macro_op_t test_mem_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_LOAD, .latency = 1},
.uop[1] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_test_mem_b_op =
+static const macro_op_t test_mem_b_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
- .uop[0] = {.type = UOP_LOAD, .latency = 1},
- .uop[1] = {.type = UOP_ALUX, .latency = 1}
+ .uop[0] = {.type = UOP_LOAD, .latency = 1},
+ .uop[1] = {.type = UOP_ALUP0, .latency = 1}
};
-static const risc86_instruction_t complex_xchg_mem_op =
+static const macro_op_t xchg_mem_op =
{
.nr_uops = 4,
.decode_type = DECODE_COMPLEX,
@@ -923,60 +881,58 @@ static const risc86_instruction_t complex_xchg_mem_op =
.uop[2] = {.type = UOP_STOREA, .latency = 1},
.uop[3] = {.type = UOP_ALU, .latency = 1}
};
-static const risc86_instruction_t complex_xlat_op =
+static const macro_op_t xlat_op =
{
.nr_uops = 2,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 1},
.uop[1] = {.type = UOP_LOAD, .latency = 1}
};
-static const risc86_instruction_t complex_wbinvd_op =
+static const macro_op_t wbinvd_op =
{
.nr_uops = 1,
.decode_type = DECODE_COMPLEX,
.uop[0] = {.type = UOP_ALU, .latency = 10000}
};
-
-
#define INVALID NULL
-static const risc86_instruction_t *opcode_timings[256] =
+static const macro_op_t *opcode_timings[256] =
{
/* ADD ADD ADD ADD*/
-/*00*/ &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+/*00*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* ADD ADD PUSH ES POP ES*/
- &alux_op, &alu_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &alup0_op, &alu_op, &push_seg_op, &mov_seg_mem_op,
/* OR OR OR OR*/
- &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* OR OR PUSH CS */
- &alux_op, &alu_op, &push_seg_op, INVALID,
+ &alup0_op, &alu_op, &push_seg_op, INVALID,
/* ADC ADC ADC ADC*/
-/*10*/ &complex_alux_store_op,&complex_alu_store_op, &complex_load_alux_op,&complex_load_alu_op,
+/*10*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* ADC ADC PUSH SS POP SS*/
- &complex_alux1_op, &complex_alu1_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &complex_alup0_1_op, &complex_alu1_op, &push_seg_op, &mov_seg_mem_op,
/* SBB SBB SBB SBB*/
-/*10*/ &complex_alux_store_op,&complex_alu_store_op, &complex_load_alux_op,&complex_load_alu_op,
+/*10*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* SBB SBB PUSH DS POP DS*/
- &complex_alux1_op, &complex_alu1_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &complex_alup0_1_op, &complex_alu1_op, &push_seg_op, &mov_seg_mem_op,
/* AND AND AND AND*/
-/*20*/ &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+/*20*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* AND AND DAA*/
- &alux_op, &alu_op, INVALID, &complex_alux1_op,
+ &alup0_op, &alu_op, INVALID, &complex_alup0_1_op,
/* SUB SUB SUB SUB*/
- &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* SUB SUB DAS*/
- &alux_op, &alu_op, INVALID, &complex_alux1_op,
+ &alup0_op, &alu_op, INVALID, &complex_alup0_1_op,
/* XOR XOR XOR XOR*/
-/*30*/ &alux_store_op, &alu_store_op, &load_alux_op, &load_alu_op,
+/*30*/ &alup0_store_op, &alu_store_op, &load_alup0_op, &load_alu_op,
/* XOR XOR AAA*/
- &alux_op, &alu_op, INVALID, &complex_alux6_op,
+ &alup0_op, &alu_op, INVALID, &alup0_6_op,
/* CMP CMP CMP CMP*/
- &load_alux_op, &load_alu_op, &load_alux_op, &load_alu_op,
+ &load_alup0_op, &load_alu_op, &load_alup0_op, &load_alu_op,
/* CMP CMP AAS*/
- &alux_op, &alu_op, INVALID, &complex_alux6_op,
+ &alup0_op, &alu_op, INVALID, &alup0_6_op,
/* INC EAX INC ECX INC EDX INC EBX*/
/*40*/ &alu_op, &alu_op, &alu_op, &alu_op,
@@ -997,12 +953,12 @@ static const risc86_instruction_t *opcode_timings[256] =
&pop_reg_op, &pop_reg_op, &pop_reg_op, &pop_reg_op,
/* PUSHA POPA BOUND ARPL*/
-/*60*/ &complex_pusha_op, &complex_popa_op, &complex_bound_op, &complex_arpl_op,
+/*60*/ &pusha_op, &popa_op, &bound_op, &arpl_op,
INVALID, INVALID, INVALID, INVALID,
/* PUSH imm IMUL PUSH imm IMUL*/
- &push_imm_op, &complex_mul_op, &push_imm_op, &complex_mul_op,
+ &push_imm_op, &mul_op, &push_imm_op, &mul_op,
/* INSB INSW OUTSB OUTSW*/
- &complex_ins_op, &complex_ins_op, &complex_outs_op, &complex_outs_op,
+ &ins_op, &ins_op, &outs_op, &outs_op,
/* Jxx*/
/*70*/ &branch_op, &branch_op, &branch_op, &branch_op,
@@ -1012,107 +968,107 @@ static const risc86_instruction_t *opcode_timings[256] =
/*80*/ INVALID, INVALID, INVALID, INVALID,
/* TEST TEST XCHG XCHG*/
- &complex_test_mem_b_op, &complex_test_mem_op, &complex_xchg_mem_op, &complex_xchg_mem_op,
+ &test_mem_b_op, &test_mem_op, &xchg_mem_op, &xchg_mem_op,
/* MOV MOV MOV MOV*/
&store_op, &store_op, &load_op, &load_op,
/* MOV from seg LEA MOV to seg POP*/
- &complex_mov_mem_seg_op, &store_op, &complex_mov_seg_mem_op, &pop_mem_op,
+ &mov_mem_seg_op, &store_op, &mov_seg_mem_op, &pop_mem_op,
/* NOP XCHG XCHG XCHG*/
-/*90*/ &limm_op, &xchg_op, &xchg_op, &xchg_op,
+/*90*/ &fxch_op, &xchg_op, &xchg_op, &xchg_op,
/* XCHG XCHG XCHG XCHG*/
&xchg_op, &xchg_op, &xchg_op, &xchg_op,
/* CBW CWD CALL far WAIT*/
- &complex_alu1_op, &complex_alu1_op, &complex_call_far_op, &limm_op,
+ &complex_alu1_op, &complex_alu1_op, &call_far_op, &fxch_op,
/* PUSHF POPF SAHF LAHF*/
- &complex_pushf_op, &complex_popf_op, &complex_alux1_op, &complex_alux1_op,
+ &pushf_op, &popf_op, &complex_alup0_1_op, &complex_alup0_1_op,
/* MOV MOV MOV MOV*/
/*a0*/ &load_op, &load_op, &store_op, &store_op,
/* MOVSB MOVSW CMPSB CMPSW*/
- &movs_op, &movs_op, &complex_cmpsb_op, &complex_cmps_op,
+ &movs_op, &movs_op, &cmpsb_op, &cmps_op,
/* TEST TEST STOSB STOSW*/
&test_reg_b_op, &test_reg_op, &stos_op, &stos_op,
/* LODSB LODSW SCASB SCASW*/
- &lods_op, &lods_op, &complex_scasb_op, &complex_scas_op,
+ &lods_op, &lods_op, &scasb_op, &scas_op,
/* MOV*/
-/*b0*/ &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
+/*b0*/ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
/* RET imm RET*/
-/*c0*/ INVALID, INVALID, &complex_ret_op, &complex_ret_op,
+/*c0*/ INVALID, INVALID, &ret_op, &ret_op,
/* LES LDS MOV MOV*/
- &complex_lss_op, &complex_lss_op, &store_op, &store_op,
+ &lss_op, &lss_op, &store_op, &store_op,
/* ENTER LEAVE RETF RETF*/
- &complex_enter_op, &leave_op, &complex_retf_op, &complex_retf_op,
+ &enter_op, &leave_op, &retf_op, &retf_op,
/* INT3 INT INTO IRET*/
- &complex_int_op, &complex_int_op, &complex_int_op, &complex_iret_op,
+ &int_op, &int_op, &int_op, &iret_op,
/*d0*/ INVALID, INVALID, INVALID, INVALID,
/* AAM AAD SETALC XLAT*/
- &complex_alux6_op, &complex_alux3_op, &complex_alux1_op, &complex_xlat_op,
+ &alup0_6_op, &alup0_3_op, &complex_alup0_1_op, &xlat_op,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
/* LOOPNE LOOPE LOOP JCXZ*/
-/*e0*/ &complex_loop_op, &complex_loop_op, &loop_op, &complex_loop_op,
+/*e0*/ &loop_op, &loop_op, &loop_op, &loop_op,
/* IN AL IN AX OUT_AL OUT_AX*/
- &complex_in_op, &complex_in_op, &complex_out_op, &complex_out_op,
+ &in_op, &in_op, &out_op, &out_op,
/* CALL JMP JMP JMP*/
- &store_op, &branch_op, &complex_jmp_far_op, &branch_op,
+ &store_op, &branch_op, &jmp_far_op, &branch_op,
/* IN AL IN AX OUT_AL OUT_AX*/
- &complex_in_op, &complex_in_op, &complex_out_op, &complex_out_op,
+ &in_op, &in_op, &out_op, &out_op,
/* REPNE REPE*/
/*f0*/ INVALID, INVALID, INVALID, INVALID,
/* HLT CMC*/
- &complex_alux1_op, &complex_alu2_op, INVALID, INVALID,
+ &complex_alup0_1_op, &alu2_op, INVALID, INVALID,
/* CLC STC CLI STI*/
- &complex_alu1_op, &complex_alu1_op, &complex_cli_sti_op, &complex_cli_sti_op,
+ &complex_alu1_op, &complex_alu1_op, &cli_sti_op, &cli_sti_op,
/* CLD STD INCDEC*/
- &complex_alu1_op, &complex_alu1_op, &alux_store_op, INVALID
+ &complex_alu1_op, &complex_alu1_op, &alup0_store_op, INVALID
};
-static const risc86_instruction_t *opcode_timings_mod3[256] =
+static const macro_op_t *opcode_timings_mod3[256] =
{
/* ADD ADD ADD ADD*/
-/*00*/ &alux_op, &alu_op, &alux_op, &alu_op,
+/*00*/ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* ADD ADD PUSH ES POP ES*/
- &alux_op, &alu_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &alup0_op, &alu_op, &push_seg_op, &mov_seg_mem_op,
/* OR OR OR OR*/
- &alux_op, &alu_op, &alux_op, &alu_op,
+ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* OR OR PUSH CS */
- &alux_op, &alu_op, &push_seg_op, INVALID,
+ &alup0_op, &alu_op, &push_seg_op, INVALID,
/* ADC ADC ADC ADC*/
-/*10*/ &complex_alux1_op, &complex_alu1_op, &complex_alux1_op, &complex_alu1_op,
+/*10*/ &complex_alup0_1_op, &complex_alu1_op, &complex_alup0_1_op, &complex_alu1_op,
/* ADC ADC PUSH SS POP SS*/
- &complex_alux1_op, &complex_alu1_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &complex_alup0_1_op, &complex_alu1_op, &push_seg_op, &mov_seg_mem_op,
/* SBB SBB SBB SBB*/
- &complex_alux1_op, &complex_alu1_op, &complex_alux1_op, &complex_alu1_op,
+ &complex_alup0_1_op, &complex_alu1_op, &complex_alup0_1_op, &complex_alu1_op,
/* SBB SBB PUSH DS POP DS*/
- &complex_alux1_op, &complex_alu1_op, &push_seg_op, &complex_mov_seg_mem_op,
+ &complex_alup0_1_op, &complex_alu1_op, &push_seg_op, &mov_seg_mem_op,
/* AND AND AND AND*/
-/*20*/ &alux_op, &alu_op, &alux_op, &alu_op,
+/*20*/ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* AND AND DAA*/
- &alux_op, &alu_op, INVALID, &complex_alux1_op,
+ &alup0_op, &alu_op, INVALID, &complex_alup0_1_op,
/* SUB SUB SUB SUB*/
- &alux_op, &alu_op, &alux_op, &alu_op,
+ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* SUB SUB DAS*/
- &alux_op, &alu_op, INVALID, &complex_alux1_op,
+ &alup0_op, &alu_op, INVALID, &complex_alup0_1_op,
/* XOR XOR XOR XOR*/
-/*30*/ &alux_op, &alu_op, &alux_op, &alu_op,
+/*30*/ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* XOR XOR AAA*/
- &alux_op, &alu_op, INVALID, &complex_alux6_op,
+ &alup0_op, &alu_op, INVALID, &alup0_6_op,
/* CMP CMP CMP CMP*/
- &alux_op, &alu_op, &alux_op, &alu_op,
+ &alup0_op, &alu_op, &alup0_op, &alu_op,
/* CMP CMP AAS*/
- &alux_op, &alu_op, INVALID, &complex_alux6_op,
+ &alup0_op, &alu_op, INVALID, &alup0_6_op,
/* INC EAX INC ECX INC EDX INC EBX*/
/*40*/ &alu_op, &alu_op, &alu_op, &alu_op,
@@ -1133,12 +1089,12 @@ static const risc86_instruction_t *opcode_timings_mod3[256] =
&pop_reg_op, &pop_reg_op, &pop_reg_op, &pop_reg_op,
/* PUSHA POPA BOUND ARPL*/
-/*60*/ &complex_pusha_op, &complex_popa_op, &complex_bound_op, &complex_arpl_op,
+/*60*/ &pusha_op, &popa_op, &bound_op, &arpl_op,
INVALID, INVALID, INVALID, INVALID,
/* PUSH imm IMUL PUSH imm IMUL*/
- &push_imm_op, &complex_mul_op, &push_imm_op, &complex_mul_op,
+ &push_imm_op, &mul_op, &push_imm_op, &mul_op,
/* INSB INSW OUTSB OUTSW*/
- &complex_ins_op, &complex_ins_op, &complex_outs_op, &complex_outs_op,
+ &ins_op, &ins_op, &outs_op, &outs_op,
/* Jxx*/
/*70*/ &branch_op, &branch_op, &branch_op, &branch_op,
@@ -1148,88 +1104,89 @@ static const risc86_instruction_t *opcode_timings_mod3[256] =
/*80*/ INVALID, INVALID, INVALID, INVALID,
/* TEST TEST XCHG XCHG*/
- &complex_alu1_op, &complex_alu1_op, &complex_alu3_op, &complex_alu3_op,
+ &complex_alu1_op, &complex_alu1_op, &alu3_op, &alu3_op,
/* MOV MOV MOV MOV*/
&store_op, &store_op, &load_op, &load_op,
/* MOV from seg LEA MOV to seg POP*/
- &mov_reg_seg_op, &store_op, &complex_mov_seg_reg_op, &pop_reg_op,
+ &mov_reg_seg_op, &store_op, &mov_seg_reg_op, &pop_reg_op,
/* NOP XCHG XCHG XCHG*/
-/*90*/ &limm_op, &xchg_op, &xchg_op, &xchg_op,
+/*90*/ &fxch_op, &xchg_op, &xchg_op, &xchg_op,
/* XCHG XCHG XCHG XCHG*/
&xchg_op, &xchg_op, &xchg_op, &xchg_op,
/* CBW CWD CALL far WAIT*/
- &complex_alu1_op, &complex_alu1_op, &complex_call_far_op, &limm_op,
+ &complex_alu1_op, &complex_alu1_op, &call_far_op, &fxch_op,
/* PUSHF POPF SAHF LAHF*/
- &complex_pushf_op, &complex_popf_op, &complex_alux1_op, &complex_alux1_op,
+ &pushf_op, &popf_op, &complex_alup0_1_op, &complex_alup0_1_op,
/* MOV MOV MOV MOV*/
/*a0*/ &load_op, &load_op, &store_op, &store_op,
/* MOVSB MOVSW CMPSB CMPSW*/
- &movs_op, &movs_op, &complex_cmpsb_op, &complex_cmps_op,
+ &movs_op, &movs_op, &cmpsb_op, &cmps_op,
/* TEST TEST STOSB STOSW*/
&test_reg_b_op, &test_reg_op, &stos_op, &stos_op,
/* LODSB LODSW SCASB SCASW*/
- &lods_op, &lods_op, &complex_scasb_op, &complex_scas_op,
+ &lods_op, &lods_op, &scasb_op, &scas_op,
/* MOV*/
-/*b0*/ &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
+/*b0*/ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
/* RET imm RET*/
-/*c0*/ INVALID, INVALID, &complex_ret_op, &complex_ret_op,
+/*c0*/ INVALID, INVALID, &ret_op, &ret_op,
/* LES LDS MOV MOV*/
- &complex_lss_op, &complex_lss_op, &store_op, &store_op,
+ &lss_op, &lss_op, &store_op, &store_op,
/* ENTER LEAVE RETF RETF*/
- &complex_enter_op, &leave_op, &complex_retf_op, &complex_retf_op,
+ &enter_op, &leave_op, &retf_op, &retf_op,
/* INT3 INT INTO IRET*/
- &complex_int_op, &complex_int_op, &complex_int_op, &complex_iret_op,
+ &int_op, &int_op, &int_op, &iret_op,
/*d0*/ INVALID, INVALID, INVALID, INVALID,
/* AAM AAD SETALC XLAT*/
- &complex_alux6_op, &complex_alux3_op, &complex_alux1_op, &complex_xlat_op,
+ &alup0_6_op, &alup0_3_op, &complex_alup0_1_op, &xlat_op,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
+
/* LOOPNE LOOPE LOOP JCXZ*/
-/*e0*/ &complex_loop_op, &complex_loop_op, &loop_op, &complex_loop_op,
+/*e0*/ &loop_op, &loop_op, &loop_op, &loop_op,
/* IN AL IN AX OUT_AL OUT_AX*/
- &complex_in_op, &complex_in_op, &complex_out_op, &complex_out_op,
+ &in_op, &in_op, &out_op, &out_op,
/* CALL JMP JMP JMP*/
- &store_op, &branch_op, &complex_jmp_far_op, &branch_op,
+ &store_op, &branch_op, &jmp_far_op, &branch_op,
/* IN AL IN AX OUT_AL OUT_AX*/
- &complex_in_op, &complex_in_op, &complex_out_op, &complex_out_op,
+ &in_op, &in_op, &out_op, &out_op,
/* REPNE REPE*/
/*f0*/ INVALID, INVALID, INVALID, INVALID,
/* HLT CMC*/
- &complex_alux1_op, &complex_alu2_op, INVALID, INVALID,
+ &complex_alup0_1_op, &alu2_op, INVALID, INVALID,
/* CLC STC CLI STI*/
- &complex_alu1_op, &complex_alu1_op, &complex_cli_sti_op, &complex_cli_sti_op,
+ &complex_alu1_op, &complex_alu1_op, &cli_sti_op, &cli_sti_op,
/* CLD STD INCDEC*/
- &complex_alu1_op, &complex_alu1_op, &complex_alux1_op, INVALID
+ &complex_alu1_op, &complex_alu1_op, &complex_alup0_1_op, INVALID
};
-static const risc86_instruction_t *opcode_timings_0f[256] =
+static const macro_op_t *opcode_timings_0f[256] =
{
-/*00*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, &complex_alu6_op,
- INVALID, &complex_alu6_op, &complex_alu6_op, INVALID,
- &complex_invd_op, &complex_wbinvd_op, INVALID, INVALID,
- INVALID, &load_op, &complex_femms_op, INVALID,
+/*00*/ &alu6_op, &alu6_op, &alu6_op, &alu6_op,
+ INVALID, &alu6_op, &alu6_op, INVALID,
+ &invd_op, &wbinvd_op, INVALID, INVALID,
+ INVALID, &load_op, &femms_op, INVALID,
/*10*/ INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
-/*20*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, &complex_alu6_op,
- &complex_alu6_op, &complex_alu6_op, INVALID, INVALID,
+/*20*/ &alu6_op, &alu6_op, &alu6_op, &alu6_op,
+ &alu6_op, &alu6_op, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
-/*30*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, INVALID,
+/*30*/ &alu6_op, &alu6_op, &alu6_op, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
@@ -1250,7 +1207,7 @@ static const risc86_instruction_t *opcode_timings_0f[256] =
INVALID, INVALID, &mload_op, &mload_op,
/*70*/ INVALID, &load_mmx_shift_op, &load_mmx_shift_op, &load_mmx_shift_op,
- &load_mmx_op, &load_mmx_op, &load_mmx_op, &complex_emms_op,
+ &load_mmx_op, &load_mmx_op, &load_mmx_op, &emms_op,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, &mstore_op, &mstore_op,
@@ -1259,23 +1216,23 @@ static const risc86_instruction_t *opcode_timings_0f[256] =
&branch_op, &branch_op, &branch_op, &branch_op,
&branch_op, &branch_op, &branch_op, &branch_op,
-/*90*/ &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op,
- &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op,
- &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op,
- &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op, &complex_setcc_reg_op,
+/*90*/ &setcc_reg_op, &setcc_reg_op, &setcc_reg_op, &setcc_reg_op,
+ &setcc_reg_op, &setcc_reg_op, &setcc_reg_op, &setcc_reg_op,
+ &setcc_reg_op, &setcc_reg_op, &setcc_reg_op, &setcc_reg_op,
+ &setcc_reg_op, &setcc_reg_op, &setcc_reg_op, &setcc_reg_op,
-/*a0*/ &push_seg_op, &complex_mov_seg_mem_op,&complex_cpuid_op, &complex_load_alu_op,
- &complex_alu_store_op, &complex_alu_store_op, INVALID, INVALID,
- &push_seg_op, &complex_mov_seg_mem_op,INVALID, &complex_load_alu_op,
- &complex_alu_store_op, &complex_alu_store_op, INVALID, &complex_mul_op,
+/*a0*/ &push_seg_op, &mov_seg_mem_op, &cpuid_op, &load_alu_op,
+ &alu_store_op, &alu_store_op, INVALID, INVALID,
+ &push_seg_op, &mov_seg_mem_op, INVALID, &load_alu_op,
+ &alu_store_op, &alu_store_op, INVALID, &mul_op,
-/*b0*/ &complex_cmpxchg_b_op, &complex_cmpxchg_op, &complex_lss_op, &complex_load_alu_op,
- &complex_lss_op, &complex_lss_op, &load_alux_op, &load_alu_op,
- INVALID, INVALID, &complex_load_alu_op, &complex_load_alu_op,
- &complex_bsx_op, &complex_bsx_op, &load_alux_op, &load_alu_op,
+/*b0*/ &cmpxchg_b_op, &cmpxchg_op, &lss_op, &load_alu_op,
+ &lss_op, &lss_op, &load_alup0_op, &load_alu_op,
+ INVALID, INVALID, &load_alu_op, &load_alu_op,
+ &bsx_op, &bsx_op, &load_alup0_op, &load_alu_op,
-/*c0*/ &complex_alux_store_op, &complex_alu_store_op, INVALID, INVALID,
- INVALID, INVALID, INVALID, &complex_cmpxchg_op,
+/*c0*/ &alup0_store_op, &alu_store_op, INVALID, INVALID,
+ INVALID, INVALID, INVALID, &cmpxchg_op,
&bswap_op, &bswap_op, &bswap_op, &bswap_op,
&bswap_op, &bswap_op, &bswap_op, &bswap_op,
@@ -1294,182 +1251,182 @@ static const risc86_instruction_t *opcode_timings_0f[256] =
&load_mmx_op, &load_mmx_op, &load_mmx_op, INVALID,
&load_mmx_op, &load_mmx_op, &load_mmx_op, INVALID,
};
-static const risc86_instruction_t *opcode_timings_0f_mod3[256] =
+static const macro_op_t *opcode_timings_0f_mod3[256] =
{
-/*00*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, &complex_alu6_op,
- INVALID, &complex_alu6_op, &complex_alu6_op, INVALID,
- &complex_invd_op, &complex_wbinvd_op, INVALID, INVALID,
- INVALID, INVALID, &complex_femms_op, INVALID,
+/*00*/ &alu6_op, &alu6_op, &alu6_op, &alu6_op,
+ INVALID, &alu6_op, &alu6_op, INVALID,
+ &invd_op, &wbinvd_op, INVALID, INVALID,
+ INVALID, INVALID, &femms_op, INVALID,
/*10*/ INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
-/*20*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, &complex_alu6_op,
- &complex_alu6_op, &complex_alu6_op, INVALID, INVALID,
+/*20*/ &alu6_op, &alu6_op, &alu6_op, &alu6_op,
+ &alu6_op, &alu6_op, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
-/*30*/ &complex_alu6_op, &complex_alu6_op, &complex_alu6_op, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
+/*30*/ &alu6_op, &alu6_op, &alu6_op, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
-/*40*/ INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
+/*40*/ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
-/*50*/ INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
+/*50*/ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
-/*60*/ &mmx_op, &mmx_op, &mmx_op, &mmx_op,
- &mmx_op, &mmx_op, &mmx_op, &mmx_op,
- &mmx_op, &mmx_op, &mmx_op, &mmx_op,
- INVALID, INVALID, &mmx_op, &mmx_op,
+/*60*/ &mmx_op, &mmx_op, &mmx_op, &mmx_op,
+ &mmx_op, &mmx_op, &mmx_op, &mmx_op,
+ &mmx_op, &mmx_op, &mmx_op, &mmx_op,
+ INVALID, INVALID, &mmx_op, &mmx_op,
-/*70*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
- &mmx_op, &mmx_op, &mmx_op, &complex_emms_op,
- INVALID, INVALID, INVALID, INVALID,
- INVALID, INVALID, &mmx_op, &mmx_op,
+/*70*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
+ &mmx_op, &mmx_op, &mmx_op, &emms_op,
+ INVALID, INVALID, INVALID, INVALID,
+ INVALID, INVALID, &mmx_op, &mmx_op,
/*80*/ &branch_op, &branch_op, &branch_op, &branch_op,
&branch_op, &branch_op, &branch_op, &branch_op,
&branch_op, &branch_op, &branch_op, &branch_op,
&branch_op, &branch_op, &branch_op, &branch_op,
-/*90*/ &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op,
- &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op,
- &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op,
- &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op, &complex_setcc_mem_op,
+/*90*/ &setcc_mem_op, &setcc_mem_op, &setcc_mem_op, &setcc_mem_op,
+ &setcc_mem_op, &setcc_mem_op, &setcc_mem_op, &setcc_mem_op,
+ &setcc_mem_op, &setcc_mem_op, &setcc_mem_op, &setcc_mem_op,
+ &setcc_mem_op, &setcc_mem_op, &setcc_mem_op, &setcc_mem_op,
-/*a0*/ &push_seg_op, &complex_mov_seg_mem_op, &complex_cpuid_op, &complex_alu1_op,
- &complex_alu1_op, &complex_alu1_op, INVALID, INVALID,
- &push_seg_op, &complex_mov_seg_mem_op, INVALID, &complex_alu1_op,
- &complex_alu1_op, &complex_alu1_op, INVALID, &complex_mul_op,
+/*a0*/ &push_seg_op, &mov_seg_mem_op, &cpuid_op, &complex_alu1_op,
+ &complex_alu1_op, &complex_alu1_op, INVALID, INVALID,
+ &push_seg_op, &mov_seg_mem_op, INVALID, &complex_alu1_op,
+ &complex_alu1_op, &complex_alu1_op, INVALID, &mul_op,
-/*b0*/ &complex_cmpxchg_b_op, &complex_cmpxchg_op, &complex_lss_op, &complex_alu1_op,
- &complex_lss_op, &complex_lss_op, &alux_op, &alu_op,
- INVALID, INVALID, &complex_alu1_op, &complex_alu1_op,
- &complex_bsx_op, &complex_bsx_op, &alux_op, &alu_op,
+/*b0*/ &cmpxchg_b_op, &cmpxchg_op, &lss_op, &complex_alu1_op,
+ &lss_op, &lss_op, &alup0_op, &alu_op,
+ INVALID, INVALID, &complex_alu1_op, &complex_alu1_op,
+ &bsx_op, &bsx_op, &alup0_op, &alu_op,
-/*c0*/ &complex_alux1_op, &complex_alu1_op, INVALID, INVALID,
- INVALID, INVALID, INVALID, INVALID,
- &bswap_op, &bswap_op, &bswap_op, &bswap_op,
- &bswap_op, &bswap_op, &bswap_op, &bswap_op,
+/*c0*/ &complex_alup0_1_op, &complex_alu1_op, INVALID, INVALID,
+ INVALID, INVALID, INVALID, INVALID,
+ &bswap_op, &bswap_op, &bswap_op, &bswap_op,
+ &bswap_op, &bswap_op, &bswap_op, &bswap_op,
-/*d0*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
- INVALID, &mmx_mul_op, INVALID, INVALID,
- &mmx_op, &mmx_op, INVALID, &mmx_op,
- &mmx_op, &mmx_op, INVALID, &mmx_op,
+/*d0*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
+ INVALID, &mmx_mul_op, INVALID, INVALID,
+ &mmx_op, &mmx_op, INVALID, &mmx_op,
+ &mmx_op, &mmx_op, INVALID, &mmx_op,
-/*e0*/ &mmx_op, &mmx_shift_op, &mmx_shift_op, INVALID,
- INVALID, &pmul_op, INVALID, INVALID,
- &mmx_op, &mmx_op, INVALID, &mmx_op,
- &mmx_op, &mmx_op, INVALID, &mmx_op,
+/*e0*/ &mmx_op, &mmx_shift_op, &mmx_shift_op, INVALID,
+ INVALID, &pmul_op, INVALID, INVALID,
+ &mmx_op, &mmx_op, INVALID, &mmx_op,
+ &mmx_op, &mmx_op, INVALID, &mmx_op,
-/*f0*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
- INVALID, &pmul_op, INVALID, INVALID,
- &mmx_op, &mmx_op, &mmx_op, INVALID,
- &mmx_op, &mmx_op, &mmx_op, INVALID,
+/*f0*/ INVALID, &mmx_shift_op, &mmx_shift_op, &mmx_shift_op,
+ INVALID, &pmul_op, INVALID, INVALID,
+ &mmx_op, &mmx_op, &mmx_op, INVALID,
+ &mmx_op, &mmx_op, &mmx_op, INVALID,
};
-static const risc86_instruction_t *opcode_timings_shift[8] =
+static const macro_op_t *opcode_timings_shift[8] =
{
- &complex_alu_store_op, &complex_alu_store_op, &complex_alu_store_op, &complex_alu_store_op,
- &complex_alu_store_op, &complex_alu_store_op, &complex_alu_store_op, &complex_alu_store_op
+ &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op,
+ &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op
};
-static const risc86_instruction_t *opcode_timings_shift_b[8] =
+static const macro_op_t *opcode_timings_shift_b[8] =
{
- &complex_alux_store_op, &complex_alux_store_op, &complex_alux_store_op, &complex_alux_store_op,
- &complex_alux_store_op, &complex_alux_store_op, &complex_alux_store_op, &complex_alux_store_op
+ &alup0_store_op, &alup0_store_op, &alup0_store_op, &alup0_store_op,
+ &alup0_store_op, &alup0_store_op, &alup0_store_op, &alup0_store_op
};
-static const risc86_instruction_t *opcode_timings_shift_mod3[8] =
+static const macro_op_t *opcode_timings_shift_mod3[8] =
{
&complex_alu1_op, &complex_alu1_op, &complex_alu1_op, &complex_alu1_op,
&alu_op, &alu_op, &alu_op, &alu_op
};
-static const risc86_instruction_t *opcode_timings_shift_b_mod3[8] =
+static const macro_op_t *opcode_timings_shift_b_mod3[8] =
{
- &complex_alux1_op, &complex_alux1_op, &complex_alux1_op, &complex_alux1_op,
- &alux_op, &alux_op, &alux_op, &alux_op
+ &complex_alup0_1_op, &complex_alup0_1_op, &complex_alup0_1_op, &complex_alup0_1_op,
+ &alup0_op, &alup0_op, &alup0_op, &alup0_op
};
-static const risc86_instruction_t *opcode_timings_80[8] =
+static const macro_op_t *opcode_timings_80[8] =
{
- &alux_store_op, &alux_store_op, &complex_alux_store_op, &complex_alux_store_op,
- &alux_store_op, &alux_store_op, &alux_store_op, &alux_store_op,
+ &alup0_store_op, &alup0_store_op, &alup0_store_op, &alup0_store_op,
+ &alup0_store_op, &alup0_store_op, &alup0_store_op, &alup0_store_op,
};
-static const risc86_instruction_t *opcode_timings_80_mod3[8] =
+static const macro_op_t *opcode_timings_80_mod3[8] =
{
- &alux_op, &alux_op, &alux_store_op, &alux_store_op,
- &alux_op, &alux_op, &alux_op, &alux_op,
+ &alup0_op, &alup0_op, &alup0_store_op, &alup0_store_op,
+ &alup0_op, &alup0_op, &alup0_op, &alup0_op,
};
-static const risc86_instruction_t *opcode_timings_8x[8] =
+static const macro_op_t *opcode_timings_8x[8] =
{
- &alu_store_op, &alu_store_op, &complex_alu_store_op, &complex_alu_store_op,
- &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op,
-};
-static const risc86_instruction_t *opcode_timings_8x_mod3[8] =
+ &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op,
+ &alu_store_op, &alu_store_op, &alu_store_op, &alu_store_op,
+};
+static const macro_op_t *opcode_timings_8x_mod3[8] =
{
- &alu_op, &alu_op, &alu_store_op, &alu_store_op,
- &alu_op, &alu_op, &alu_op, &alu_op,
+ &alu_op, &alu_op, &alu_store_op, &alu_store_op,
+ &alu_op, &alu_op, &alu_op, &alu_op,
};
-static const risc86_instruction_t *opcode_timings_f6[8] =
+static const macro_op_t *opcode_timings_f6[8] =
{
/* TST NOT NEG*/
- &test_mem_imm_b_op, INVALID, &complex_alux_store_op, &complex_alux_store_op,
+ &test_mem_imm_b_op, INVALID, &alup0_store_op, &alup0_store_op,
/* MUL IMUL DIV IDIV*/
- &complex_mul_mem_op, &complex_mul_mem_op, &complex_div16_mem_op, &complex_div16_mem_op,
+ &mul_mem_op, &mul_mem_op, &div16_mem_op, &div16_mem_op,
};
-static const risc86_instruction_t *opcode_timings_f6_mod3[8] =
+static const macro_op_t *opcode_timings_f6_mod3[8] =
{
/* TST NOT NEG*/
- &test_reg_b_op, INVALID, &alux_op, &alux_op,
+ &test_reg_b_op, INVALID, &alup0_op, &alup0_op,
/* MUL IMUL DIV IDIV*/
- &complex_mul_op, &complex_mul_op, &complex_div16_op, &complex_div16_op,
+ &mul_op, &mul_op, &div16_op, &div16_op,
};
-static const risc86_instruction_t *opcode_timings_f7[8] =
+static const macro_op_t *opcode_timings_f7[8] =
{
/* TST NOT NEG*/
- &test_mem_imm_op, INVALID, &complex_alu_store_op, &complex_alu_store_op,
+ &test_mem_imm_op, INVALID, &alu_store_op, &alu_store_op,
/* MUL IMUL DIV IDIV*/
- &complex_mul64_mem_op, &complex_mul64_mem_op, &complex_div32_mem_op, &complex_div32_mem_op,
+ &mul64_mem_op, &mul64_mem_op, &div32_mem_op, &div32_mem_op,
};
-static const risc86_instruction_t *opcode_timings_f7_mod3[8] =
+static const macro_op_t *opcode_timings_f7_mod3[8] =
{
/* TST NOT NEG*/
&test_reg_op, INVALID, &alu_op, &alu_op,
/* MUL IMUL DIV IDIV*/
- &complex_mul64_op, &complex_mul64_op, &complex_div32_op, &complex_div32_op,
+ &mul64_op, &mul64_op, &div32_op, &div32_op,
};
-static const risc86_instruction_t *opcode_timings_ff[8] =
+static const macro_op_t *opcode_timings_ff[8] =
{
/* INC DEC CALL CALL far*/
- &alu_store_op, &alu_store_op, &store_op, &complex_call_far_op,
+ &alu_store_op, &alu_store_op, &store_op, &call_far_op,
/* JMP JMP far PUSH*/
- &branch_op, &complex_jmp_far_op, &push_mem_op, INVALID
+ &branch_op, &jmp_far_op, &push_mem_op, INVALID
};
-static const risc86_instruction_t *opcode_timings_ff_mod3[8] =
+static const macro_op_t *opcode_timings_ff_mod3[8] =
{
/* INC DEC CALL CALL far*/
- &complex_alu1_op, &complex_alu1_op, &store_op, &complex_call_far_op,
+ &complex_alu1_op, &complex_alu1_op, &store_op, &call_far_op,
/* JMP JMP far PUSH*/
- &branch_op, &complex_jmp_far_op, &complex_push_mem_op, INVALID
+ &branch_op, &jmp_far_op, &complex_push_mem_op, INVALID
};
-static const risc86_instruction_t *opcode_timings_d8[8] =
+static const macro_op_t *opcode_timings_d8[8] =
{
/* FADDs FMULs FCOMs FCOMPs*/
&load_fadd_op, &load_fmul_op, &load_float_op, &load_float_op,
/* FSUBs FSUBRs FDIVs FDIVRs*/
&load_float_op, &load_float_op, &fdiv_mem_op, &fdiv_mem_op,
};
-static const risc86_instruction_t *opcode_timings_d8_mod3[8] =
+static const macro_op_t *opcode_timings_d8_mod3[8] =
{
/* FADD FMUL FCOM FCOMP*/
&fadd_op, &fmul_op, &float_op, &float_op,
@@ -1477,27 +1434,27 @@ static const risc86_instruction_t *opcode_timings_d8_mod3[8] =
&float_op, &float_op, &fdiv_op, &fdiv_op,
};
-static const risc86_instruction_t *opcode_timings_d9[8] =
+static const macro_op_t *opcode_timings_d9[8] =
{
/* FLDs FSTs FSTPs*/
&load_float_op, INVALID, &fstore_op, &fstore_op,
/* FLDENV FLDCW FSTENV FSTCW*/
- &complex_float_l_op, &complex_fldcw_op, &complex_float_l_op, &complex_float_op
+ &complex_float_l_op, &fldcw_op, &complex_float_l_op, &complex_float_op
};
-static const risc86_instruction_t *opcode_timings_d9_mod3[64] =
+static const macro_op_t *opcode_timings_d9_mod3[64] =
{
/*FLD*/
&float_op, &float_op, &float_op, &float_op,
&float_op, &float_op, &float_op, &float_op,
/*FXCH*/
- &limm_op, &limm_op, &limm_op, &limm_op,
- &limm_op, &limm_op, &limm_op, &limm_op,
+ &fxch_op, &fxch_op, &fxch_op, &fxch_op,
+ &fxch_op, &fxch_op, &fxch_op, &fxch_op,
/*FNOP*/
&float_op, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
/*FSTP*/
- &float2_op, &float2_op, &float2_op, &float2_op,
- &float2_op, &float2_op, &float2_op, &float2_op,
+ &float2_op, &float2_op, &float2_op, &float2_op,
+ &float2_op, &float2_op, &float2_op, &float2_op,
/* opFCHS opFABS*/
&fchs_op, &float_op, INVALID, INVALID,
/* opFTST opFXAM*/
@@ -1516,28 +1473,28 @@ static const risc86_instruction_t *opcode_timings_d9_mod3[64] =
&float_op, &fdiv_op, &fsin_op, &fsin_op
};
-static const risc86_instruction_t *opcode_timings_da[8] =
+static const macro_op_t *opcode_timings_da[8] =
{
/* FIADDl FIMULl FICOMl FICOMPl*/
&load_fadd_op, &load_fmul_op, &load_float_op, &load_float_op,
/* FISUBl FISUBRl FIDIVl FIDIVRl*/
&load_float_op, &load_float_op, &fdiv_mem_op, &fdiv_mem_op,
};
-static const risc86_instruction_t *opcode_timings_da_mod3[8] =
+static const macro_op_t *opcode_timings_da_mod3[8] =
{
INVALID, INVALID, INVALID, INVALID,
/* FCOMPP*/
INVALID, &float_op, INVALID, INVALID
};
-static const risc86_instruction_t *opcode_timings_db[8] =
+static const macro_op_t *opcode_timings_db[8] =
{
/* FLDil FSTil FSTPil*/
&load_float_op, INVALID, &fstore_op, &fstore_op,
/* FLDe FSTPe*/
- INVALID, &complex_flde_op, INVALID, &complex_fste_op
+ INVALID, &flde_op, INVALID, &fste_op
};
-static const risc86_instruction_t *opcode_timings_db_mod3[64] =
+static const macro_op_t *opcode_timings_db_mod3[64] =
{
INVALID, INVALID, INVALID, INVALID,
INVALID, INVALID, INVALID, INVALID,
@@ -1566,14 +1523,14 @@ static const risc86_instruction_t *opcode_timings_db_mod3[64] =
INVALID, INVALID, INVALID, INVALID,
};
-static const risc86_instruction_t *opcode_timings_dc[8] =
+static const macro_op_t *opcode_timings_dc[8] =
{
/* FADDd FMULd FCOMd FCOMPd*/
&load_fadd_op, &load_fmul_op, &load_float_op, &load_float_op,
/* FSUBd FSUBRd FDIVd FDIVRd*/
&load_float_op, &load_float_op, &fdiv_mem_op, &fdiv_mem_op,
};
-static const risc86_instruction_t *opcode_timings_dc_mod3[8] =
+static const macro_op_t *opcode_timings_dc_mod3[8] =
{
/* opFADDr opFMULr*/
&fadd_op, &fmul_op, INVALID, INVALID,
@@ -1581,14 +1538,14 @@ static const risc86_instruction_t *opcode_timings_dc_mod3[8] =
&float_op, &float_op, &fdiv_op, &fdiv_op
};
-static const risc86_instruction_t *opcode_timings_dd[8] =
+static const macro_op_t *opcode_timings_dd[8] =
{
/* FLDd FSTd FSTPd*/
- &load_float_op, INVALID, &fstore_op, &fstore_op,
+ &load_float_op, INVALID, &fstore_op, &fstore_op,
/* FRSTOR FSAVE FSTSW*/
&complex_float_l_op, INVALID, &complex_float_l_op, &complex_float_l_op
};
-static const risc86_instruction_t *opcode_timings_dd_mod3[8] =
+static const macro_op_t *opcode_timings_dd_mod3[8] =
{
/* FFFREE FST FSTP*/
&float_op, INVALID, &float_op, &float_op,
@@ -1596,14 +1553,14 @@ static const risc86_instruction_t *opcode_timings_dd_mod3[8] =
&float_op, &float_op, INVALID, INVALID
};
-static const risc86_instruction_t *opcode_timings_de[8] =
+static const macro_op_t *opcode_timings_de[8] =
{
/* FIADDw FIMULw FICOMw FICOMPw*/
&load_fiadd_op, &load_fiadd_op, &load_fiadd_op, &load_fiadd_op,
/* FISUBw FISUBRw FIDIVw FIDIVRw*/
&load_fiadd_op, &load_fiadd_op, &load_fiadd_op, &load_fiadd_op,
};
-static const risc86_instruction_t *opcode_timings_de_mod3[8] =
+static const macro_op_t *opcode_timings_de_mod3[8] =
{
/* FADDP FMULP FCOMPP*/
&fadd_op, &fmul_op, INVALID, &float_op,
@@ -1611,14 +1568,14 @@ static const risc86_instruction_t *opcode_timings_de_mod3[8] =
&float_op, &float_op, &fdiv_op, &fdiv_op,
};
-static const risc86_instruction_t *opcode_timings_df[8] =
+static const macro_op_t *opcode_timings_df[8] =
{
/* FILDiw FISTiw FISTPiw*/
&load_float_op, INVALID, &fstore_op, &fstore_op,
/* FILDiq FBSTP FISTPiq*/
INVALID, &load_float_op, &complex_float_l_op, &fstore_op,
};
-static const risc86_instruction_t *opcode_timings_df_mod3[8] =
+static const macro_op_t *opcode_timings_df_mod3[8] =
{
INVALID, INVALID, INVALID, INVALID,
/* FSTSW AX*/
@@ -1644,35 +1601,35 @@ static p6_unit_t *units;
/*Pentium Pro has no MMX*/
static p6_unit_t ppro_units[] =
{
- {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUX) | (1 << UOP_FLOAT)}, /*Integer X & Floating point*/
- {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH)}, /*Integer Y*/
- {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD)}, /*Load*/
- {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED)}, /*Data Store*/
- {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA)}, /*Address Store*/
+ {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT)}, /*Port 0*/
+ {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH)}, /*Port 1*/
+ {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD)}, /*Port 2*/
+ {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED)}, /*Port 3*/
+ {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA)}, /*Port 4*/
};
#define NR_PPRO_UNITS (sizeof(ppro_units) / sizeof(p6_unit_t))
/*Pentium II/Celeron assigns the multiplier to port 0, the shifter to port 1, and shares the MMX ALU*/
static p6_unit_t p2_units[] =
{
- {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUX) | (1 << UOP_FLOAT) | /*Integer X & Floating point*/
+ {.uop_mask = (1 << UOP_ALU) | (1 << UOP_ALUP0) | (1 << UOP_FLOAT) | /*Port 0*/
(1 << UOP_MMX) | (1 << UOP_MMX_MUL)},
- {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH) | /*Integer Y*/
+ {.uop_mask = (1 << UOP_ALU) | (1 << UOP_BRANCH) | /*Port 1*/
(1 << UOP_MMX) | (1 << UOP_MMX_SHIFT)},
- {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD) | (1 << UOP_MLOAD)}, /*Load*/
- {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED) | (1 << UOP_MSTORED)}, /*Data Store*/
- {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA) | (1 << UOP_MSTOREA)}, /*Address Store*/
+ {.uop_mask = (1 << UOP_LOAD) | (1 << UOP_FLOAD) | (1 << UOP_MLOAD)}, /*Port 2*/
+ {.uop_mask = (1 << UOP_STORED) | (1 << UOP_FSTORED) | (1 << UOP_MSTORED)}, /*Port 3*/
+ {.uop_mask = (1 << UOP_STOREA) | (1 << UOP_FSTOREA) | (1 << UOP_MSTOREA)}, /*Port 4*/
};
#define NR_P2_UNITS (sizeof(p2_units) / sizeof(p6_unit_t))
-static int uop_run(const risc86_uop_t *uop, int decode_time)
+static int uop_run(const p6_uop_t *uop, int decode_time)
{
int c;
p6_unit_t *best_unit = NULL;
- double best_start_cycle = 99999;
+ int best_start_cycle = 99999;
- /*UOP_LIMM does not require execution*/
- if (uop->type == UOP_LIMM)
+ /*UOP_FXCH does not require execution*/
+ if (uop->type == UOP_FXCH)
return decode_time;
/*Find execution unit for this uOP*/
@@ -1706,7 +1663,7 @@ static int uop_run(const risc86_uop_t *uop, int decode_time)
static struct
{
int nr_uops;
- const risc86_uop_t *uops[6];
+ const p6_uop_t *uops[6];
/*Earliest time a uop can start. If the timestamp is -1, then the uop is
part of a dependency chain and the start time is the completion time of
the previous uop*/
@@ -1745,7 +1702,10 @@ void decode_flush_p6()
/*Submit uops to execution units, and determine the latest completion time*/
for (c = 0; c < (decode_buffer.nr_uops); c++)
{
- start_timestamp = decode_buffer.earliest_start[c];
+ if (decode_buffer.earliest_start[c] == -1)
+ start_timestamp = last_uop_timestamp;
+ else
+ start_timestamp = decode_buffer.earliest_start[c];
last_uop_timestamp = uop_run(decode_buffer.uops[c], start_timestamp);
if (last_uop_timestamp > uop_timestamp)
@@ -1819,7 +1779,7 @@ static int codegen_timing_instr_length(uint64_t deps, uint32_t fetchdat, int op_
return len;
}
-static void decode_instruction(const risc86_instruction_t *ins, uint64_t deps, uint32_t fetchdat, int op_32, int bit8)
+static void decode_instruction(const macro_op_t *ins, uint64_t deps, uint32_t fetchdat, int op_32, int bit8)
{
uint32_t regmask_required;
uint32_t regmask_modified;
@@ -1855,10 +1815,8 @@ static void decode_instruction(const risc86_instruction_t *ins, uint64_t deps, u
}
/*Simple decoders are limited to 7 bytes & 1 uOP*/
- if (decode_type == DECODE_SIMPLE && instr_length > 7)
+ if ((decode_type == DECODE_SIMPLE && instr_length > 7) || (decode_type == DECODE_SIMPLE && ins->nr_uops > 1))
decode_type = DECODE_COMPLEX;
- else if (decode_type == DECODE_SIMPLE && ins->nr_uops > 1)
- decode_type = DECODE_COMPLEX;
switch (decode_type)
{
@@ -1901,7 +1859,10 @@ static void decode_instruction(const risc86_instruction_t *ins, uint64_t deps, u
for (c = 0; c < ins->nr_uops; c++)
{
decode_buffer.uops[d] = &ins->uop[c];
- decode_buffer.earliest_start[d] = earliest_start;
+ if (c == 0)
+ decode_buffer.earliest_start[d] = earliest_start;
+ else
+ decode_buffer.earliest_start[d] = -1;
d++;
if ((d == 3) && (ins->nr_uops > 4)) /*Ins. with >4 uOPs require the use of special units only present on 3 translate PLAs*/
@@ -2006,7 +1967,7 @@ void codegen_timing_p6_prefix(uint8_t prefix, uint32_t fetchdat)
void codegen_timing_p6_opcode(uint8_t opcode, uint32_t fetchdat, int op_32, uint32_t op_pc)
{
- const risc86_instruction_t **ins_table;
+ const macro_op_t **ins_table;
uint64_t *deps;
int mod3 = ((fetchdat & 0xc0) == 0xc0);
int old_last_complete_timestamp = last_complete_timestamp;
From f317bf3690d39d539b882078a7796b689dced7be Mon Sep 17 00:00:00 2001
From: TC1995
Date: Tue, 12 May 2020 00:37:30 +0200
Subject: [PATCH 25/32] Ported the Goldstar 286 machine from PCem alongside
video fixes and enhancements from greatpsycho.
---
src/include/86box/machine.h | 27 +--
src/include/86box/vid_svga.h | 8 +-
src/include/86box/video.h | 2 +-
src/machine/m_at_286_386sx.c | 74 ++++----
src/machine/machine_table.c | 29 ++-
src/video/vid_ati28800.c | 4 +
src/video/vid_et4000.c | 342 ++++++++++++++++++++++++++++++-----
src/video/vid_svga.c | 81 ++++++++-
src/video/vid_svga_render.c | 21 ++-
src/video/vid_table.c | 2 +-
10 files changed, 456 insertions(+), 134 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index fba2e69c2..b9e5c3993 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -185,14 +185,16 @@ extern int machine_at_tg286m_init(const machine_t *);
extern int machine_at_ama932j_init(const machine_t *);
extern int machine_at_px286_init(const machine_t *);
extern int machine_at_quadt286_init(const machine_t *);
-extern int machine_at_mr286_init(const machine_t *);
extern int machine_at_neat_init(const machine_t *);
extern int machine_at_neat_ami_init(const machine_t *);
extern int machine_at_goldstar386_init(const machine_t *);
+extern int machine_at_micronics386_init(const machine_t *);
+
extern int machine_at_award286_init(const machine_t *);
+extern int machine_at_gdc212m_init(const machine_t *);
extern int machine_at_gw286ct_init(const machine_t *);
extern int machine_at_super286tr_init(const machine_t *);
extern int machine_at_spc4200p_init(const machine_t *);
@@ -210,9 +212,7 @@ extern const device_t *at_commodore_sl386sx_get_device(void);
/* m_at_386dx_486.c */
-extern int machine_at_acc386_init(const machine_t *);
extern int machine_at_ecs386_init(const machine_t *);
-extern int machine_at_micronics386_init(const machine_t *);
extern int machine_at_pb410a_init(const machine_t *);
@@ -236,9 +236,7 @@ extern int machine_at_r418_init(const machine_t *);
extern int machine_at_ls486e_init(const machine_t *);
extern int machine_at_4dps_init(const machine_t *);
extern int machine_at_alfredo_init(const machine_t *);
-#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_486sp3g_init(const machine_t *);
-#endif
/* m_at_commodore.c */
extern int machine_at_cmdpc_init(const machine_t *);
@@ -267,6 +265,7 @@ extern int machine_at_p54tp4xe_init(const machine_t *);
extern int machine_at_endeavor_init(const machine_t *);
extern int machine_at_zappa_init(const machine_t *);
extern int machine_at_mb500n_init(const machine_t *);
+extern int machine_at_president_init(const machine_t *);
#if defined(DEV_BRANCH) && defined(USE_VECTRA54)
extern int machine_at_vectra54_init(const machine_t *);
#endif
@@ -277,7 +276,6 @@ extern const device_t *at_endeavor_get_device(void);
#endif
/* m_at_socket7_s7.c */
-extern int machine_at_chariot_init(const machine_t *);
extern int machine_at_thor_init(const machine_t *);
#if defined(DEV_BRANCH) && defined(USE_MRTHOR)
extern int machine_at_mrthor_init(const machine_t *);
@@ -300,23 +298,15 @@ extern int machine_at_i430vx_init(const machine_t *);
extern int machine_at_brio80xx_init(const machine_t *);
extern int machine_at_pb680_init(const machine_t *);
-#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_p55xb2_init(const machine_t *);
-#endif
extern int machine_at_tx97_init(const machine_t *);
extern int machine_at_ym430tx_init(const machine_t *);
-#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_586t2_init(const machine_t *);
extern int machine_at_807ds_init(const machine_t *);
-#endif
extern int machine_at_p5mms98_init(const machine_t *);
-extern int machine_at_ficva502_init(const machine_t *);
-
-extern int machine_at_ficpa2012_init(const machine_t *);
-#if defined(DEV_BRANCH) && defined(NO_SIO)
+extern int machine_at_tx100_init(const machine_t *);
extern int machine_at_advanceii_init(const machine_t *);
-#endif
#ifdef EMU_DEVICE_H
extern const device_t *at_pb640_get_device(void);
@@ -331,6 +321,7 @@ extern int machine_at_686nx_init(const machine_t *);
extern int machine_at_mb600n_init(const machine_t *);
extern int machine_at_8500ttc_init(const machine_t *);
extern int machine_at_m6mi_init(const machine_t *);
+extern int machine_at_vs440fx_init(const machine_t *);
#ifdef EMU_DEVICE_H
extern void machine_at_p65up5_common_init(const machine_t *, const device_t *northbridge);
#endif
@@ -340,15 +331,11 @@ extern int machine_at_p65up5_cp6nd_init(const machine_t *);
extern int machine_at_p65up5_cpknd_init(const machine_t *);
extern int machine_at_p6kfx_init(const machine_t *);
-#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_6bxc_init(const machine_t *);
-#endif
extern int machine_at_p2bls_init(const machine_t *);
extern int machine_at_p3bf_init(const machine_t *);
extern int machine_at_bf6_init(const machine_t *);
-#if defined(DEV_BRANCH) && defined(NO_SIO)
-extern int machine_at_tsunamiatx_init(const machine_t *);
-#endif
+extern int machine_at_borapro_init(const machine_t *);
/* m_at_socket370.c */
extern int machine_at_cubx_init(const machine_t *);
diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h
index d1495ebbd..acdea041c 100644
--- a/src/include/86box/vid_svga.h
+++ b/src/include/86box/vid_svga.h
@@ -72,7 +72,7 @@ typedef struct svga_t
vram_mask,
charseta, charsetb,
adv_flags, ma_latch,
- ma, maback,
+ ca_adj, ma, maback,
write_bank, read_bank,
extra_banks[2],
banked_mask,
@@ -117,6 +117,7 @@ typedef struct svga_t
/*Called at the start of vertical sync*/
void (*vsync_callback)(struct svga_t *svga);
+ uint32_t (*translate_address)(uint32_t addr, void *p);
/*If set then another device is driving the monitor output and the SVGA
card should not attempt to display anything */
int override;
@@ -132,7 +133,10 @@ typedef struct svga_t
plane_mask, writemask,
colourcompare, colournocare,
dac_mask, dac_status,
- ksc5601_sbyte_mask;
+ ksc5601_sbyte_mask, ksc5601_udc_area_msb[2];
+
+ int ksc5601_swap_mode;
+ uint16_t ksc5601_english_font_type;
int vertical_linedbl;
diff --git a/src/include/86box/video.h b/src/include/86box/video.h
index 8f0067bbc..d43ded46f 100644
--- a/src/include/86box/video.h
+++ b/src/include/86box/video.h
@@ -212,7 +212,6 @@ extern const device_t ati28800_wonderxl24_device;
#endif
/* Cirrus Logic CL-GD 54xx */
-extern const device_t gd5401_isa_device;
extern const device_t gd5402_isa_device;
extern const device_t gd5402_onboard_device;
extern const device_t gd5420_isa_device;
@@ -246,6 +245,7 @@ extern const device_t compaq_cga_2_device;
extern const device_t et4000_isa_device;
extern const device_t et4000k_isa_device;
extern const device_t et4000k_tg286_isa_device;
+extern const device_t et4000_kasan_isa_device;
extern const device_t et4000_mca_device;
/* Tseng ET4000-W32p */
diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c
index 113cb49b9..931dd5e3f 100644
--- a/src/machine/m_at_286_386sx.c
+++ b/src/machine/m_at_286_386sx.c
@@ -38,25 +38,6 @@
#include <86box/video.h>
#include <86box/machine.h>
-int
-machine_at_mr286_init(const machine_t *model)
-{
- int ret;
-
- ret = bios_load_interleaved(L"roms/machines/mr286/V000B200-1",
- L"roms/machines/mr286/V000B200-2",
- 0x000f0000, 65536, 0);
-
- if (bios_only || !ret)
- return ret;
-
- machine_at_common_ide_init(model);
- device_add(&keyboard_at_device);
- device_add(&fdc_at_device);
- device_add(&headland_device);
-
- return ret;
-}
static void
machine_at_headland_common_init(int ht386)
@@ -139,6 +120,26 @@ machine_at_ama932j_init(const machine_t *model)
return ret;
}
+int
+machine_at_px286_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_interleaved(L"roms/machines/px286/286-Headland-LO.BIN",
+ L"roms/machines/px286/286-Headland-HI.BIN",
+ 0x000f0000, 131072, 0);
+
+ if (bios_only || !ret)
+ return ret;
+
+ machine_at_common_ide_init(model);
+ device_add(&keyboard_at_device);
+ device_add(&fdc_at_device);
+ device_add(&headland_device);
+
+ return ret;
+}
+
int
machine_at_quadt286_init(const machine_t *model)
{
@@ -200,26 +201,6 @@ machine_at_neat_ami_init(const machine_t *model)
return ret;
}
-int
-machine_at_px286_init(const machine_t *model)
-{
- int ret;
-
- ret = bios_load_linear(L"roms/machines/px286/KENITEC.BIN",
- 0x000f0000, 65536, 0);
-
- if (bios_only || !ret)
- return ret;
-
- machine_at_common_init(model);
- device_add(&keyboard_at_device);
- device_add(&fdc_at_device);
- device_add(&neat_device);
-
- return ret;
-}
-
-
int
machine_at_goldstar386_init(const machine_t *model)
{
@@ -301,6 +282,21 @@ machine_at_award286_init(const machine_t *model)
return ret;
}
+int
+machine_at_gdc212m_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_linear(L"roms/machines/gdc212m/gdc212m_72h.bin",
+ 0x000f0000, 65536, 0);
+
+ if (bios_only || !ret)
+ return ret;
+
+ machine_at_scat_init(model, 0);
+
+ return ret;
+}
int
machine_at_gw286ct_init(const machine_t *model)
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index 474e1a055..aee58e4be 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -37,13 +37,11 @@
#if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"Cyrix", cpus_6x863V}, {"", NULL}}
-#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"Cyrix", cpus_6x86SS7}, {"", NULL}}
#else
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
-#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"", NULL}, {"", NULL}}
#endif
@@ -51,13 +49,11 @@
#if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x863V}, {"", NULL}, {"", NULL}}
-#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"Cyrix", cpus_6x86SS7}, {"", NULL}}
#else
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
-#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"", NULL}, {"", NULL}}
#endif
@@ -110,11 +106,11 @@ const machine_t machines[] = {
{ "[286 ISA] Award 286 clone", "award286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_award286_init, NULL },
{ "[286 ISA] Phoenix 286 clone", "px286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_px286_init, NULL },
{ "[286 ISA] Quadtel 286 clone", "quadt286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_quadt286_init, NULL },
- { "[286 ISA] MR 286 clone", "mr286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512, 16384, 128, 127, machine_at_mr286_init, NULL },
{ "[286 ISA] Commodore PC 30 III", "cmdpc30", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_cmdpc_init, NULL },
{ "[286 ISA] Compaq Portable II", "portableii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_portableii_init, NULL },
{ "[286 ISA] Compaq Portable III", "portableiii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_VIDEO, 640,16384, 128, 127, machine_at_portableiii_init, at_cpqiii_get_device },
{ "[286 ISA] GW-286CT GEAR", "gw286ct", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_gw286ct_init, NULL },
+ { "[286 ISA] Goldstar GDC-212M", "gdc212m", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC | MACHINE_PS2, 512, 4096, 512, 127, machine_at_gdc212m_init, NULL },
{ "[286 ISA] Hyundai Super-286TR", "super286tr", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_super286tr_init, NULL },
{ "[286 ISA] IBM AT", "ibmat", {{"", cpus_ibmat}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 63, machine_at_ibm_init, NULL },
{ "[286 ISA] AMI IBM AT", "ibmatami", {{"", cpus_ibmat}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 63, machine_at_ibmatami_init, NULL },
@@ -158,8 +154,7 @@ const machine_t machines[] = {
/* 386DX machines */
{ "[386DX ISA] Compaq Portable III (386)", "portableiii386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC | MACHINE_VIDEO, 1, 14, 1, 127, machine_at_portableiii386_init, at_cpqiii_get_device },
- { "[386DX ISA] AMI 386DX clone", "acc386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 16384, 128, 127, machine_at_acc386_init, NULL },
- { "[386DX ISA] ECS 386/32", "ecs386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 1, 32, 1, 127, machine_at_ecs386_init, NULL },
+ { "[386DX ISA] ECS 386/32", "ecs386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 512, 127, machine_at_ecs386_init, NULL },
{ "[386DX ISA] Micronics 386 clone", "micronics386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 8192, 128, 127, machine_at_micronics386_init, NULL },
/* 386DX machines which utilize the VLB bus */
@@ -200,9 +195,7 @@ const machine_t machines[] = {
#endif
/* 486 machines which utilize the PCI bus */
-#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[486 PCI] ASUS PCI/I-486SP3G", "486sp3g", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_486sp3g_init, NULL },
-#endif
{ "[486 PCI] Intel Classic/PCI", "alfredo", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_alfredo_init, NULL },
{ "[486 PCI] Lucky Star LS-486E", "ls486e", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_ls486e_init, NULL },
{ "[486 PCI] Rise Computer R418", "r418", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 255, 1, 127, machine_at_r418_init, NULL },
@@ -216,6 +209,7 @@ const machine_t machines[] = {
#endif
{ "[Socket 4 LX] Intel Premiere/PCI", "revenge", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_batman_init, NULL },
{ "[Socket 4 LX] Micro Star 586MC1", "586mc1", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_586mc1_init, NULL },
+
/* Socket 5 machines */
/* 430NX */
{ "[Socket 5 NX] Intel Premiere/PCI II", "plato", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_plato_init, NULL },
@@ -229,11 +223,11 @@ const machine_t machines[] = {
{ "[Socket 5 FX] Intel Advanced/ZP", "zappa", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_zappa_init, NULL },
{ "[Socket 5 FX] NEC PowerMate V", "powermate_v", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_powermate_v_init, NULL },
{ "[Socket 5 FX] PC Partner MB500N", "mb500n", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_mb500n_init, NULL },
+ { "[Socket 5 FX] President Award 430FX PCI","president", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_president_init, NULL },
/* Socket 7 machines */
/* 430FX */
{ "[Socket 7-3V FX] ASUS P/I-P54TP4XE", "p54tp4xe", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL },
- { "[Socket 7-3V FX] QDI Chariot", "chariot", MACHINE_CPUS_PENTIUM_S73VCH, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_chariot_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/ATX", "thor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/EV", "endeavor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device },
#if defined(DEV_BRANCH) && defined(USE_MRTHOR)
@@ -272,13 +266,11 @@ const machine_t machines[] = {
#endif
{ "[Socket 7 TX] SuperMicro P5MMS98", "p5mms98", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 256, 8, 255, machine_at_p5mms98_init, NULL },
-
+#if defined(DEV_BRANCH) && defined(NO_SIO)
/* Apollo VPX */
- { "[Socket 7 VPX] FIC VA-502", "ficva502", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_ficva502_init, NULL },
+ { "[Socket 7 VPX] Zida Tomato TX100", "tx100", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_tx100_init, NULL },
/* Apollo VP3 */
- { "[Socket 7 VP3] FIC PA-2012", "ficpa2012", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_ficpa2012_init, NULL },
-#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[Socket 7 VP3] QDI Advance II", "advanceii", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_advanceii_init, NULL },
#endif
@@ -293,6 +285,9 @@ const machine_t machines[] = {
{ "[Socket 8 FX] PC Partner MB600N", "mb600n", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_mb600n_init, NULL },
{ "[Socket 8 FX] Biostar MB-8500ttc", "8500ttc", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_8500ttc_init, NULL },
{ "[Socket 8 FX] Micronics M6MI", "m6mi", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 384, 8, 127, machine_at_m6mi_init, NULL },
+#if defined(DEV_BRANCH) && defined(NO_SIO)
+ { "[Socket 8 FX] Intel VS440FX", "vs440fx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 256, 8, 127, machine_at_vs440fx_init, NULL },
+#endif
{ "[Socket 8 FX] ASUS P/I-P65UP5 (C-P6ND)", "p65up5_cp6nd", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_p65up5_cp6nd_init, NULL },
@@ -310,9 +305,9 @@ const machine_t machines[] = {
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
{ "[Slot 1 BX] ASUS P3B-F", "p3bf", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p3bf_init, NULL },
{ "[Slot 1 BX] ABit BF6", "bf6", {{"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_bf6_init, NULL },
-#if defined(DEV_BRANCH) && defined(NO_SIO)
- { "[Slot 1 BX] Tyan Tsunami ATX", "tsunamiatx", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_tsunamiatx_init, NULL },
-#endif
+
+ /* 440ZX */
+ { "[Slot 1 ZX] Packard Bell Bora Pro", "borapro", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_borapro_init, NULL },
/* PGA370 machines */
/* 440BX */
diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c
index 5ffcf14e8..3545cb69d 100644
--- a/src/video/vid_ati28800.c
+++ b/src/video/vid_ati28800.c
@@ -495,6 +495,10 @@ ati28800k_init(const device_t *info)
ati28800->svga.miscout = 1;
ati28800->svga.ksc5601_sbyte_mask = 0;
+ ati28800->svga.ksc5601_udc_area_msb[0] = 0xC9;
+ ati28800->svga.ksc5601_udc_area_msb[1] = 0xFE;
+ ati28800->svga.ksc5601_swap_mode = 0;
+ ati28800->svga.ksc5601_english_font_type = 0;
ati_eeprom_load(&ati28800->eeprom, L"atikorvga.nvr", 0);
diff --git a/src/video/vid_et4000.c b/src/video/vid_et4000.c
index a468ceb52..819dfa544 100644
--- a/src/video/vid_et4000.c
+++ b/src/video/vid_et4000.c
@@ -57,7 +57,8 @@
#define BIOS_ROM_PATH L"roms/video/et4000/et4000.bin"
#define KOREAN_BIOS_ROM_PATH L"roms/video/et4000/tgkorvga.bin"
#define KOREAN_FONT_ROM_PATH L"roms/video/et4000/tg_ksc5601.rom"
-
+#define KASAN_BIOS_ROM_PATH L"roms/video/et4000/et4000_kasan16.bin"
+#define KASAN_FONT_ROM_PATH L"roms/video/et4000/kasan_ksc5601.rom"
typedef struct {
const char *name;
@@ -78,6 +79,11 @@ typedef struct {
int get_korean_font_enabled;
int get_korean_font_index;
uint16_t get_korean_font_base;
+
+ uint8_t kasan_cfg_index;
+ uint8_t kasan_cfg_regs[16];
+ uint16_t kasan_access_addr;
+ uint8_t kasan_font_data[4];
} et4000_t;
@@ -95,6 +101,8 @@ static const uint8_t crtc_mask[0x40] = {
static video_timings_t timing_et4000_isa = {VIDEO_ISA, 3, 3, 6, 5, 5, 10};
static video_timings_t timing_et4000_mca = {VIDEO_MCA, 4, 5, 10, 5, 5, 10};
+static void et4000_kasan_out(uint16_t addr, uint8_t val, void *p);
+static uint8_t et4000_kasan_in(uint16_t addr, void *p);
static uint8_t
et4000_in(uint16_t addr, void *priv)
@@ -393,62 +401,248 @@ et4000k_out(uint16_t addr, uint8_t val, void *priv)
}
}
+static uint8_t
+et4000_kasan_in(uint16_t addr, void *priv)
+{
+ et4000_t *et4000 = (et4000_t *)priv;
+ uint8_t val = 0xFF;
+
+ if (addr == 0x258) {
+ val = et4000->kasan_cfg_index;
+ } else if (addr == 0x259) {
+ if (et4000->kasan_cfg_index >= 0xF0) {
+ val = et4000->kasan_cfg_regs[et4000->kasan_cfg_index - 0xF0];
+ if (et4000->kasan_cfg_index == 0xF4 && et4000->kasan_cfg_regs[0] & 0x20)
+ val |= 0x80;
+ }
+ } else if (addr >= et4000->kasan_access_addr && addr < et4000->kasan_access_addr + 8) {
+ switch (addr - ((et4000->kasan_cfg_regs[2] << 8) | (et4000->kasan_cfg_regs[1]))) {
+ case 5:
+ if (((et4000->get_korean_font_base >> 7) & 0x7F) == (et4000->svga.ksc5601_udc_area_msb[0] & 0x7F) && (et4000->svga.ksc5601_udc_area_msb[0] & 0x80))
+ val = fontdatksc5601_user[(et4000->get_korean_font_base & 0x7F) - 0x20].chr[et4000->get_korean_font_index];
+ else if (((et4000->get_korean_font_base >> 7) & 0x7F) == (et4000->svga.ksc5601_udc_area_msb[1] & 0x7F) && (et4000->svga.ksc5601_udc_area_msb[1] & 0x80))
+ val = fontdatksc5601_user[96 + (et4000->get_korean_font_base & 0x7F) - 0x20].chr[et4000->get_korean_font_index];
+ else
+ val = fontdatksc5601[et4000->get_korean_font_base].chr[et4000->get_korean_font_index];
+ default:
+ break;
+ }
+ } else
+ val = et4000_in(addr, priv);
+
+ return val;
+}
+
+static void
+et4000_kasan_out(uint16_t addr, uint8_t val, void *priv)
+{
+ et4000_t *et4000 = (et4000_t *)priv;
+
+ if (addr == 0x258) {
+ et4000->kasan_cfg_index = val;
+ } else if (addr == 0x259) {
+ if (et4000->kasan_cfg_index >= 0xF0) {
+ switch (et4000->kasan_cfg_index - 0xF0) {
+ case 0:
+ if (et4000->kasan_cfg_regs[4] & 8)
+ val = (val & 0xFC) | (et4000->kasan_cfg_regs[0] & 3);
+ et4000->kasan_cfg_regs[0] = val;
+ et4000->svga.ksc5601_sbyte_mask = (val & 4) << 5;
+ svga_recalctimings(&et4000->svga);
+ break;
+ case 1:
+ case 2:
+ et4000->kasan_cfg_regs[et4000->kasan_cfg_index - 0xF0] = val;
+ io_removehandler(et4000->kasan_access_addr, 0x0008, et4000_kasan_in, NULL, NULL, et4000_kasan_out, NULL, NULL, et4000);
+ et4000->kasan_access_addr = (et4000->kasan_cfg_regs[2] << 8) | et4000->kasan_cfg_regs[1];
+ io_sethandler(et4000->kasan_access_addr, 0x0008, et4000_kasan_in, NULL, NULL, et4000_kasan_out, NULL, NULL, et4000);
+ break;
+ case 4:
+ if (et4000->kasan_cfg_regs[0] & 0x20)
+ val |= 0x80;
+ et4000->svga.ksc5601_swap_mode = (val & 4) >> 2;
+ et4000->kasan_cfg_regs[4] = val;
+ svga_recalctimings(&et4000->svga);
+ break;
+ case 5:
+ et4000->kasan_cfg_regs[5] = val;
+ et4000->svga.ksc5601_english_font_type = 0x100 | val;
+ case 6:
+ case 7:
+ et4000->svga.ksc5601_udc_area_msb[et4000->kasan_cfg_index - 0xF6] = val;
+ default:
+ et4000->kasan_cfg_regs[et4000->kasan_cfg_index - 0xF0] = val;
+ svga_recalctimings(&et4000->svga);
+ break;
+ }
+ }
+ } else if (addr >= et4000->kasan_access_addr && addr < et4000->kasan_access_addr + 8) {
+ switch (addr - ((et4000->kasan_cfg_regs[2] << 8) | (et4000->kasan_cfg_regs[1]))) {
+ case 0:
+ if (et4000->kasan_cfg_regs[0] & 2) {
+ et4000->get_korean_font_index = ((val & 1) << 4) | ((val & 0x1E) >> 1);
+ et4000->get_korean_font_base = (et4000->get_korean_font_base & ~7) | (val >> 5);
+ }
+ break;
+ case 1:
+ if (et4000->kasan_cfg_regs[0] & 2)
+ et4000->get_korean_font_base = (et4000->get_korean_font_base & ~0x7F8) | (val << 3);
+ break;
+ case 2:
+ if (et4000->kasan_cfg_regs[0] & 2)
+ et4000->get_korean_font_base = (et4000->get_korean_font_base & ~0x7F800) | ((val & 7) << 11);
+ break;
+ case 3:
+ case 4:
+ case 5:
+ if (et4000->kasan_cfg_regs[0] & 1)
+ et4000->kasan_font_data[addr - (((et4000->kasan_cfg_regs[2] << 8) | (et4000->kasan_cfg_regs[1])) + 3)] = val;
+ break;
+ case 6:
+ if ((et4000->kasan_cfg_regs[0] & 1) && (et4000->kasan_font_data[3] & !(val & 0x80)) && (et4000->get_korean_font_base & 0x7F) >= 0x20 && (et4000->get_korean_font_base & 0x7F) < 0x7F) {
+ if (((et4000->get_korean_font_base >> 7) & 0x7F) == (et4000->svga.ksc5601_udc_area_msb[0] & 0x7F) && (et4000->svga.ksc5601_udc_area_msb[0] & 0x80))
+ fontdatksc5601_user[(et4000->get_korean_font_base & 0x7F) - 0x20].chr[et4000->get_korean_font_index] = et4000->kasan_font_data[2];
+ else if (((et4000->get_korean_font_base >> 7) & 0x7F) == (et4000->svga.ksc5601_udc_area_msb[1] & 0x7F) && (et4000->svga.ksc5601_udc_area_msb[1] & 0x80))
+ fontdatksc5601_user[96 + (et4000->get_korean_font_base & 0x7F) - 0x20].chr[et4000->get_korean_font_index] = et4000->kasan_font_data[2];
+ }
+ et4000->kasan_font_data[3] = val;
+ break;
+ default:
+ break;
+ }
+ } else
+ et4000_out(addr, val, priv);
+}
+
+uint32_t
+get_et4000_addr(uint32_t addr, void *p)
+{
+ svga_t *svga = (svga_t *)p;
+ uint32_t nbank;
+
+ switch (svga->crtc[0x37] & 0x0B) {
+ case 0x00:
+ case 0x01:
+ nbank = 0;
+ addr &= 0xFFFF;
+ break;
+ case 0x02:
+ nbank = (addr & 1) << 1;
+ addr = (addr >> 1) & 0xFFFF;
+ break;
+ case 0x03:
+ nbank = addr & 3;
+ addr = (addr >> 2) & 0xFFFF;
+ break;
+ case 0x08:
+ case 0x09:
+ nbank = 0;
+ addr &= 0x3FFFF;
+ break;
+ case 0x0A:
+ nbank = (addr & 1) << 1;
+ addr = (addr >> 1) & 0x3FFFF;
+ break;
+ case 0x0B:
+ nbank = addr & 3;
+ addr = (addr >> 2) & 0x3FFFF;
+ break;
+ default:
+ nbank = 0;
+ break;
+ }
+
+ if (svga->vram_max >= 1024 * 1024) {
+ addr = (addr << 2) | (nbank & 3);
+ if ((svga->crtc[0x37] & 3) == 2)
+ addr >>= 1;
+ else if ((svga->crtc[0x37] & 3) < 2)
+ addr >>= 2;
+ } else if (svga->vram_max >= 512 * 1024) {
+ addr = (addr << 1) | ((nbank & 2) >> 1) | ((nbank & 1) << 19);
+ if ((svga->crtc[0x37] & 3) < 2)
+ addr >>= 1;
+ } else if(svga->vram_max >= 256 * 1024)
+ addr = addr | (nbank << 18);
+ else if (svga->vram_max > 128 * 1024) {
+ addr = (addr << 1) | ((nbank & 2) >> 1) | ((nbank & 1) << 17);
+ if ((svga->crtc[0x37] & 3) < 2)
+ addr >>= 1;
+ } else
+ addr = addr | (nbank << 16);
+
+ return addr;
+}
static void
et4000_recalctimings(svga_t *svga)
{
- et4000_t *dev = (et4000_t *)svga->p;
+ et4000_t *dev = (et4000_t *)svga->p;
- svga->ma_latch |= (svga->crtc[0x33]&3)<<16;
- if (svga->crtc[0x35] & 1) svga->vblankstart += 0x400;
- if (svga->crtc[0x35] & 2) svga->vtotal += 0x400;
- if (svga->crtc[0x35] & 4) svga->dispend += 0x400;
- if (svga->crtc[0x35] & 8) svga->vsyncstart += 0x400;
- if (svga->crtc[0x35] & 0x10) svga->split += 0x400;
- if (!svga->rowoffset) svga->rowoffset = 0x100;
- if (svga->crtc[0x3f] & 1) svga->htotal += 256;
- if (svga->attrregs[0x16] & 0x20) svga->hdisp <<= 1;
+ svga->ma_latch |= (svga->crtc[0x33] & 3) << 16;
+ if (svga->crtc[0x35] & 1) svga->vblankstart += 0x400;
+ if (svga->crtc[0x35] & 2) svga->vtotal += 0x400;
+ if (svga->crtc[0x35] & 4) svga->dispend += 0x400;
+ if (svga->crtc[0x35] & 8) svga->vsyncstart += 0x400;
+ if (svga->crtc[0x35] & 0x10) svga->split += 0x400;
+ if (!svga->rowoffset) svga->rowoffset = 0x100;
+ if (svga->crtc[0x3f] & 1) svga->htotal += 256;
+ if (svga->attrregs[0x16] & 0x20) svga->hdisp <<= 1;
- switch (((svga->miscout >> 2) & 3) | ((svga->crtc[0x34] << 1) & 4)) {
- case 0:
- case 1:
- break;
+ switch (((svga->miscout >> 2) & 3) | ((svga->crtc[0x34] << 1) & 4)) {
+ case 0:
+ case 1:
+ break;
+ case 3:
+ svga->clock = (cpuclock * (double)(1ull << 32)) / 40000000.0;
+ break;
+ case 5:
+ svga->clock = (cpuclock * (double)(1ull << 32)) / 65000000.0;
+ break;
+ default:
+ svga->clock = (cpuclock * (double)(1ull << 32)) / 36000000.0;
+ break;
+ }
+
+ switch (svga->bpp) {
+ case 15:
+ case 16:
+ svga->hdisp /= 2;
+ break;
- case 3:
- svga->clock = (cpuclock * (double)(1ull << 32)) / 40000000.0;
- break;
+ case 24:
+ svga->hdisp /= 3;
+ break;
+ }
- case 5:
- svga->clock = (cpuclock * (double)(1ull << 32)) / 65000000.0;
- break;
-
- default:
- svga->clock = (cpuclock * (double)(1ull << 32)) / 36000000.0;
- break;
- }
-
- switch (svga->bpp) {
- case 15:
- case 16:
- svga->hdisp /= 2;
- break;
-
- case 24:
- svga->hdisp /= 3;
- break;
- }
-
- if (dev->type == 2 || dev->type == 3) {
-#if NOT_YET
- if ((svga->render == svga_render_text_80) && ((svga->crtc[0x37] & 0x0A) == 0x0A)) {
- if ((dev->port_32cb_val & 0xB4) == ((svga->crtc[0x37] & 3) == 2 ? 0xB4 : 0xB0)) {
- svga->render = svga_render_text_80_ksc5601;
+ if (dev->type == 2 || dev->type == 3 || dev->type == 4) {
+ if ((svga->render == svga_render_text_80) && ((svga->crtc[0x37] & 0x0A) == 0x0A)) {
+ if (dev->port_32cb_val & 0x80) {
+ svga->ma_latch -= 2;
+ svga->ca_adj = -2;
+ }
+ if ((dev->port_32cb_val & 0xB4) == ((svga->crtc[0x37] & 3) == 2 ? 0xB4 : 0xB0)) {
+ svga->render = svga_render_text_80_ksc5601;
+ }
}
}
-#endif
- }
}
+static void
+et4000_kasan_recalctimings(svga_t *svga)
+{
+ et4000_t *et4000 = (et4000_t *)svga->p;
+
+ et4000_recalctimings(svga);
+
+ if (svga->render == svga_render_text_80 && (et4000->kasan_cfg_regs[0] & 8)) {
+ svga->ma_latch -= 3 - (et4000->kasan_cfg_regs[3] >> 1);
+ svga->ca_adj = -(3 - (et4000->kasan_cfg_regs[0] >> 6));
+ svga->hdisp -= (et4000->kasan_cfg_regs[3] >> 1) * ((svga->seqregs[1] & 1) ? 8 : 9);
+ if ((et4000->kasan_cfg_regs[0] & 3) == 0 && (et4000->kasan_cfg_regs[4] & 0x80) && ((svga->crtc[0x37] & 0x0B) == 0x0A))
+ svga->render = svga_render_text_80_ksc5601;
+ }
+}
static uint8_t
et4000_mca_read(int port, void *priv)
@@ -484,6 +678,7 @@ et4000_init(const device_t *info)
{
const wchar_t *fn;
et4000_t *dev;
+ int i;
dev = (et4000_t *)malloc(sizeof(et4000_t));
memset(dev, 0x00, sizeof(et4000_t));
@@ -521,6 +716,10 @@ et4000_init(const device_t *info)
dev->port_22cb_val = 0x60;
dev->port_32cb_val = 0;
dev->svga.ksc5601_sbyte_mask = 0x80;
+ dev->svga.ksc5601_udc_area_msb[0] = 0xC9;
+ dev->svga.ksc5601_udc_area_msb[1] = 0xFE;
+ dev->svga.ksc5601_swap_mode = 0;
+ dev->svga.ksc5601_english_font_type = 0;
video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_et4000_isa);
svga_init(info, &dev->svga, dev, dev->vram_size,
et4000_recalctimings, et4000k_in, et4000k_out,
@@ -536,6 +735,40 @@ et4000_init(const device_t *info)
loadfont(KOREAN_FONT_ROM_PATH, 6);
fn = KOREAN_BIOS_ROM_PATH;
break;
+ case 4: /* Kasan ET4000 */
+ dev->vram_size = device_get_config_int("memory") << 10;
+ dev->svga.ksc5601_sbyte_mask = 0;
+ dev->svga.ksc5601_udc_area_msb[0] = 0xC9;
+ dev->svga.ksc5601_udc_area_msb[1] = 0xFE;
+ dev->svga.ksc5601_swap_mode = 0;
+ dev->svga.ksc5601_english_font_type = 0x1FF;
+ dev->kasan_cfg_index = 0;
+ for (i=0; i<16; i++)
+ dev->kasan_cfg_regs[i] = 0;
+ for(i=0; i<4; i++)
+ dev->kasan_font_data[i] = 0;
+ dev->kasan_cfg_regs[1] = 0x50;
+ dev->kasan_cfg_regs[2] = 2;
+ dev->kasan_cfg_regs[3] = 6;
+ dev->kasan_cfg_regs[4] = 0x78;
+ dev->kasan_cfg_regs[5] = 0xFF;
+ dev->kasan_cfg_regs[6] = 0xC9;
+ dev->kasan_cfg_regs[7] = 0xFE;
+ dev->kasan_access_addr = 0x250;
+ video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_et4000_isa);
+ svga_init(info, &dev->svga, dev, dev->vram_size,
+ et4000_kasan_recalctimings, et4000_in, et4000_out,
+ NULL, NULL);
+ io_sethandler(0x03c0, 32,
+ et4000_in,NULL,NULL, et4000_out,NULL,NULL, dev);
+ io_sethandler(0x0250, 8,
+ et4000_kasan_in, NULL, NULL, et4000_kasan_out, NULL, NULL, dev);
+ io_sethandler(0x0258, 2,
+ et4000_kasan_in, NULL, NULL, et4000_kasan_out, NULL, NULL, dev);
+ loadfont(KASAN_FONT_ROM_PATH, 6);
+ fn = KASAN_BIOS_ROM_PATH;
+ break;
+
}
dev->svga.ramdac = device_add(&sc1502x_ramdac_device);
@@ -545,6 +778,8 @@ et4000_init(const device_t *info)
rom_init(&dev->bios_rom, (wchar_t *) fn,
0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL);
+ dev->svga.translate_address = get_et4000_addr;
+
return(dev);
}
@@ -592,6 +827,12 @@ et4000k_available(void)
rom_present(KOREAN_FONT_ROM_PATH);
}
+static int
+et4000_kasan_available(void)
+{
+ return rom_present(KASAN_BIOS_ROM_PATH) &&
+ rom_present(KASAN_FONT_ROM_PATH);
+}
static const device_config_t et4000_config[] =
{
@@ -660,3 +901,14 @@ const device_t et4000k_tg286_isa_device = {
et4000_force_redraw,
et4000_config
};
+
+const device_t et4000_kasan_isa_device = {
+ "Kasan Hangulmadang-16 VGA (Tseng Labs ET4000AX Korean)",
+ DEVICE_ISA,
+ 4,
+ et4000_init, et4000_close, NULL,
+ et4000_kasan_available,
+ et4000_speed_changed,
+ et4000_force_redraw,
+ et4000_config
+};
diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c
index 0a21ad1a3..c0f51f858 100644
--- a/src/video/vid_svga.c
+++ b/src/video/vid_svga.c
@@ -445,7 +445,8 @@ svga_recalctimings(svga_t *svga)
svga->interlace = 0;
- svga->ma_latch = (svga->crtc[0xc] << 8) | svga->crtc[0xd];
+ svga->ma_latch = ((svga->crtc[0xc] << 8) | svga->crtc[0xd]) + ((svga->crtc[8] & 0x60) >> 5);
+ svga->ca_adj = 0;
svga->hdisp_time = svga->hdisp;
svga->render = svga_render_blank;
@@ -809,7 +810,7 @@ svga_poll(void *p)
svga->ma = svga->maback = svga->ma_latch + (svga->rowoffset << 1);
else
svga->ma = svga->maback = svga->ma_latch;
- svga->ca = (svga->crtc[0xe] << 8) | svga->crtc[0xf];
+ svga->ca = ((svga->crtc[0xe] << 8) | svga->crtc[0xf]) + ((svga->crtc[0xb] & 0x60) >> 5) + svga->ca_adj;
svga->ma = (svga->ma << 2) + (skip << 2);
svga->maback = (svga->maback << 2) + (skip << 2);
@@ -911,6 +912,9 @@ svga_init(const device_t *info, svga_t *svga, void *p, int memsize,
svga->dac_hwcursor.xsize = svga->dac_hwcursor.ysize = 32;
svga->dac_hwcursor.yoff = 32;
+
+ svga->translate_address = NULL;
+ svga->ksc5601_english_font_type = 0;
if ((info->flags & DEVICE_PCI) || (info->flags & DEVICE_VLB)) {
mem_mapping_add(&svga->mapping, 0xa0000, 0x20000,
@@ -1036,6 +1040,9 @@ svga_write_common(uint32_t addr, uint8_t val, uint8_t linear, void *p)
addr &= svga->decode_mask;
+ if (svga->translate_address)
+ addr = svga->translate_address(addr, p);
+
if (addr >= svga->vram_max)
return;
@@ -1168,6 +1175,8 @@ svga_read_common(uint32_t addr, uint8_t linear, void *p)
addr <<= 3;
else if (svga->chain4 || svga->fb_only) {
addr &= svga->decode_mask;
+ if (svga->translate_address)
+ addr = svga->translate_address(addr, p);
if (addr >= svga->vram_max)
return 0xff;
return svga->vram[addr & svga->vram_mask];
@@ -1179,6 +1188,12 @@ svga_read_common(uint32_t addr, uint8_t linear, void *p)
addr <<= 2;
addr &= svga->decode_mask;
+ if (!linear) {
+ if (svga->translate_address) {
+ latch_addr = svga->translate_address(latch_addr, p);
+ addr = svga->translate_address(addr, p);
+ }
+ }
/* standard VGA latched access */
if (latch_addr >= svga->vram_max) {
@@ -1375,6 +1390,19 @@ svga_writew_common(uint32_t addr, uint16_t val, uint8_t linear, void *p)
}
addr &= svga->decode_mask;
+ if(svga->translate_address) {
+ uint32_t addr2 = svga->translate_address(addr, p);
+ if (addr2 < svga->vram_max) {
+ svga->vram[addr2 & svga->vram_mask] = val & 0xff;
+ svga->changedvram[addr2 >> 12] = changeframecount;
+ }
+ addr2 = svga->translate_address(addr+1, p);
+ if (addr2 < svga->vram_max) {
+ svga->vram[addr2 & svga->vram_mask] = (val >> 8) & 0xff;
+ svga->changedvram[addr2 >> 12] = changeframecount;
+ }
+ return;
+ }
if (addr >= svga->vram_max)
return;
addr &= svga->vram_mask;
@@ -1423,6 +1451,29 @@ svga_writel_common(uint32_t addr, uint32_t val, uint8_t linear, void *p)
}
addr &= svga->decode_mask;
+ if (svga->translate_address) {
+ uint32_t addr2 = svga->translate_address(addr, p);
+ if (addr2 < svga->vram_max) {
+ svga->vram[addr2 & svga->vram_mask] = val & 0xff;
+ svga->changedvram[addr2 >> 12] = changeframecount;
+ }
+ addr2 = svga->translate_address(addr+1, p);
+ if (addr2 < svga->vram_max) {
+ svga->vram[addr2 & svga->vram_mask] = (val >> 8) & 0xff;
+ svga->changedvram[addr2 >> 12] = changeframecount;
+ }
+ addr2 = svga->translate_address(addr+2, p);
+ if (addr2 < svga->vram_max) {
+ svga->vram[addr2 & svga->vram_mask] = (val >> 16) & 0xff;
+ svga->changedvram[addr2 >> 12] = changeframecount;
+ }
+ addr2 = svga->translate_address(addr+3, p);
+ if (addr2 < svga->vram_max) {
+ svga->vram[addr2 & svga->vram_mask] = (val >> 24) & 0xff;
+ svga->changedvram[addr2 >> 12] = changeframecount;
+ }
+ return;
+ }
if (addr >= svga->vram_max)
return;
addr &= svga->vram_mask;
@@ -1484,6 +1535,16 @@ svga_readw_common(uint32_t addr, uint8_t linear, void *p)
}
addr &= svga->decode_mask;
+ if (svga->translate_address) {
+ uint8_t val1 = 0xff, val2 = 0xff;
+ uint32_t addr2 = svga->translate_address(addr, p);
+ if (addr2 < svga->vram_max)
+ val1 = svga->vram[addr2 & svga->vram_mask];
+ addr2 = svga->translate_address(addr+1, p);
+ if (addr2 < svga->vram_max)
+ val2 = svga->vram[addr2 & svga->vram_mask];
+ return (val2 << 8) | val1;
+ }
if (addr >= svga->vram_max)
return 0xffff;
@@ -1527,6 +1588,22 @@ svga_readl_common(uint32_t addr, uint8_t linear, void *p)
}
addr &= svga->decode_mask;
+ if (svga->translate_address) {
+ uint8_t val1 = 0xff, val2 = 0xff, val3 = 0xff, val4 = 0xff;
+ uint32_t addr2 = svga->translate_address(addr, p);
+ if (addr2 < svga->vram_max)
+ val1 = svga->vram[addr2 & svga->vram_mask];
+ addr2 = svga->translate_address(addr+1, p);
+ if (addr2 < svga->vram_max)
+ val2 = svga->vram[addr2 & svga->vram_mask];
+ addr2 = svga->translate_address(addr+2, p);
+ if (addr2 < svga->vram_max)
+ val3 = svga->vram[addr2 & svga->vram_mask];
+ addr2 = svga->translate_address(addr+3, p);
+ if (addr2 < svga->vram_max)
+ val4 = svga->vram[addr2 & svga->vram_mask];
+ return (val4 << 24) | (val3 << 16) | (val2 << 8) | val1;
+ }
if (addr >= svga->vram_max)
return 0xffffffff;
diff --git a/src/video/vid_svga_render.c b/src/video/vid_svga_render.c
index 11605fec4..30b274067 100644
--- a/src/video/vid_svga_render.c
+++ b/src/video/vid_svga_render.c
@@ -258,17 +258,24 @@ svga_render_text_80_ksc5601(svga_t *svga)
}
if ((x + xinc) < svga->hdisp && (chr & (nextchr | svga->ksc5601_sbyte_mask) & 0x80)) {
- if (((chr == 0xc9) || (chr == 0xfe)) && ((nextchr > 0xa0) && (nextchr < 0xff)))
- dat = fontdatksc5601_user[((chr == 0xfe) ? 96 : 0) + (nextchr & 0x7F) - 0x20].chr[svga->sc];
- else if (nextchr & 0x80)
+ if ((chr == svga->ksc5601_udc_area_msb[0] || chr == svga->ksc5601_udc_area_msb[1]) && (nextchr > 0xa0 && nextchr < 0xff))
+ dat = fontdatksc5601_user[(chr == svga->ksc5601_udc_area_msb[1] ? 96 : 0) + (nextchr & 0x7F) - 0x20].chr[svga->sc];
+ else if (nextchr & 0x80) {
+ if (svga->ksc5601_swap_mode == 1 && (nextchr > 0xa0 && nextchr < 0xff)) {
+ if(chr >= 0x80 && chr < 0x99) chr += 0x30;
+ else if(chr >= 0xB0 && chr < 0xC9) chr -= 0x30;
+ }
dat = fontdatksc5601[((chr & 0x7F) << 7) | (nextchr & 0x7F)].chr[svga->sc];
- else
+ } else
dat = 0xff;
} else {
if (attr & 8) charaddr = svga->charsetb + (chr * 128);
else charaddr = svga->charseta + (chr * 128);
- dat = svga->vram[charaddr + (svga->sc << 2)];
+ if ((svga->ksc5601_english_font_type >> 8) == 1)
+ dat = fontdatksc5601[((svga->ksc5601_english_font_type & 0x7F) << 7) | (chr >> 1)].chr[((chr & 1) << 4) | svga->sc];
+ else
+ dat = svga->vram[charaddr + (svga->sc << 2)];
}
if (svga->seqregs[1] & 1) {
@@ -301,8 +308,8 @@ svga_render_text_80_ksc5601(svga_t *svga)
}
}
- if (((chr == 0xc9) || (chr == 0xfe)) && ((nextchr > 0xa0) && (nextchr < 0xff)))
- dat = fontdatksc5601_user[(chr == 0xfe ? 96 : 0) + (nextchr & 0x7F) - 0x20].chr[svga->sc + 16];
+ if ((chr == svga->ksc5601_udc_area_msb[0] || chr == svga->ksc5601_udc_area_msb[1]) && (nextchr > 0xa0 && nextchr < 0xff))
+ dat = fontdatksc5601_user[(chr == svga->ksc5601_udc_area_msb[1] ? 96 : 0) + (nextchr & 0x7F) - 0x20].chr[svga->sc + 16];
else if(nextchr & 0x80)
dat = fontdatksc5601[((chr & 0x7f) << 7) | (nextchr & 0x7F)].chr[svga->sc + 16];
else
diff --git a/src/video/vid_table.c b/src/video/vid_table.c
index 1305547cb..157e7d59f 100644
--- a/src/video/vid_table.c
+++ b/src/video/vid_table.c
@@ -68,7 +68,6 @@ video_cards[] = {
#endif
{ "[ISA] CGA", "cga", &cga_device },
{ "[ISA] Chips & Technologies SuperEGA", "superega", &sega_device },
- { "[ISA] Cirrus Logic CL-GD 5401", "cl_gd5401_isa", &gd5401_isa_device },
{ "[ISA] Cirrus Logic CL-GD 5402", "cl_gd5402_isa", &gd5402_isa_device },
{ "[ISA] Cirrus Logic CL-GD 5420", "cl_gd5420_isa", &gd5420_isa_device },
#if defined(DEV_BRANCH) && defined(USE_CL5422)
@@ -87,6 +86,7 @@ video_cards[] = {
{ "[ISA] Hercules Plus", "hercules_plus", &herculesplus_device },
{ "[ISA] Hercules InColor", "incolor", &incolor_device },
{ "[ISA] Image Manager 1024", "im1024", &im1024_device },
+ { "[ISA] Kasan Hangulmadang-16 VGA (ET4000AX)", "kasan16vga", &et4000_kasan_isa_device },
{ "[ISA] MDA", "mda", &mda_device },
{ "[ISA] MDSI Genius", "genius", &genius_device },
{ "[ISA] OAK OTI-037C", "oti037c", &oti037c_device },
From 1af410296b282b9b5a8e1df475180f88921dfabb Mon Sep 17 00:00:00 2001
From: TC1995
Date: Tue, 12 May 2020 00:46:07 +0200
Subject: [PATCH 26/32] Small mode page fix in scsi_cdrom.c, makes aspicd 3.03
work with the Toshiba vendor inquiry.
---
src/scsi/scsi_cdrom.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/scsi/scsi_cdrom.c b/src/scsi/scsi_cdrom.c
index 106e2bb87..0c4748505 100644
--- a/src/scsi/scsi_cdrom.c
+++ b/src/scsi/scsi_cdrom.c
@@ -273,7 +273,7 @@ static const mode_sense_pages_t scsi_cdrom_mode_sense_pages_changeable =
{ 0, 0 },
{ 0, 0 },
{ GPMODE_CDROM_PAGE, 6, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
- { 0x8E, 0xE, 0xFF, 0, 0, 0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
+ { 0x8E, 0xE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF },
{ 0, 0 },
{ 0, 0 },
{ 0, 0 },
From 4ef74c0003d6fa85470c801860ab32ddd0012a80 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 12 May 2020 02:00:32 +0300
Subject: [PATCH 27/32] Fix damages done by the Goldstar 286 PR
---
src/include/86box/machine.h | 26 ++++++++++++----
src/include/86box/video.h | 4 +--
src/machine/m_at_286_386sx.c | 59 ++++++++++++++++++++++++------------
src/machine/machine_table.c | 28 ++++++++++-------
src/video/vid_table.c | 1 +
5 files changed, 79 insertions(+), 39 deletions(-)
diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h
index b9e5c3993..e06a20894 100644
--- a/src/include/86box/machine.h
+++ b/src/include/86box/machine.h
@@ -185,13 +185,12 @@ extern int machine_at_tg286m_init(const machine_t *);
extern int machine_at_ama932j_init(const machine_t *);
extern int machine_at_px286_init(const machine_t *);
extern int machine_at_quadt286_init(const machine_t *);
+extern int machine_at_mr286_init(const machine_t *);
extern int machine_at_neat_init(const machine_t *);
extern int machine_at_neat_ami_init(const machine_t *);
extern int machine_at_goldstar386_init(const machine_t *);
-extern int machine_at_micronics386_init(const machine_t *);
-
extern int machine_at_award286_init(const machine_t *);
extern int machine_at_gdc212m_init(const machine_t *);
@@ -212,7 +211,9 @@ extern const device_t *at_commodore_sl386sx_get_device(void);
/* m_at_386dx_486.c */
+extern int machine_at_acc386_init(const machine_t *);
extern int machine_at_ecs386_init(const machine_t *);
+extern int machine_at_micronics386_init(const machine_t *);
extern int machine_at_pb410a_init(const machine_t *);
@@ -236,7 +237,9 @@ extern int machine_at_r418_init(const machine_t *);
extern int machine_at_ls486e_init(const machine_t *);
extern int machine_at_4dps_init(const machine_t *);
extern int machine_at_alfredo_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_486sp3g_init(const machine_t *);
+#endif
/* m_at_commodore.c */
extern int machine_at_cmdpc_init(const machine_t *);
@@ -265,7 +268,6 @@ extern int machine_at_p54tp4xe_init(const machine_t *);
extern int machine_at_endeavor_init(const machine_t *);
extern int machine_at_zappa_init(const machine_t *);
extern int machine_at_mb500n_init(const machine_t *);
-extern int machine_at_president_init(const machine_t *);
#if defined(DEV_BRANCH) && defined(USE_VECTRA54)
extern int machine_at_vectra54_init(const machine_t *);
#endif
@@ -276,6 +278,7 @@ extern const device_t *at_endeavor_get_device(void);
#endif
/* m_at_socket7_s7.c */
+extern int machine_at_chariot_init(const machine_t *);
extern int machine_at_thor_init(const machine_t *);
#if defined(DEV_BRANCH) && defined(USE_MRTHOR)
extern int machine_at_mrthor_init(const machine_t *);
@@ -298,15 +301,23 @@ extern int machine_at_i430vx_init(const machine_t *);
extern int machine_at_brio80xx_init(const machine_t *);
extern int machine_at_pb680_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_p55xb2_init(const machine_t *);
+#endif
extern int machine_at_tx97_init(const machine_t *);
extern int machine_at_ym430tx_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_586t2_init(const machine_t *);
extern int machine_at_807ds_init(const machine_t *);
+#endif
extern int machine_at_p5mms98_init(const machine_t *);
-extern int machine_at_tx100_init(const machine_t *);
+extern int machine_at_ficva502_init(const machine_t *);
+
+extern int machine_at_ficpa2012_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_advanceii_init(const machine_t *);
+#endif
#ifdef EMU_DEVICE_H
extern const device_t *at_pb640_get_device(void);
@@ -321,7 +332,6 @@ extern int machine_at_686nx_init(const machine_t *);
extern int machine_at_mb600n_init(const machine_t *);
extern int machine_at_8500ttc_init(const machine_t *);
extern int machine_at_m6mi_init(const machine_t *);
-extern int machine_at_vs440fx_init(const machine_t *);
#ifdef EMU_DEVICE_H
extern void machine_at_p65up5_common_init(const machine_t *, const device_t *northbridge);
#endif
@@ -331,11 +341,15 @@ extern int machine_at_p65up5_cp6nd_init(const machine_t *);
extern int machine_at_p65up5_cpknd_init(const machine_t *);
extern int machine_at_p6kfx_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
extern int machine_at_6bxc_init(const machine_t *);
+#endif
extern int machine_at_p2bls_init(const machine_t *);
extern int machine_at_p3bf_init(const machine_t *);
extern int machine_at_bf6_init(const machine_t *);
-extern int machine_at_borapro_init(const machine_t *);
+#if defined(DEV_BRANCH) && defined(NO_SIO)
+extern int machine_at_tsunamiatx_init(const machine_t *);
+#endif
/* m_at_socket370.c */
extern int machine_at_cubx_init(const machine_t *);
diff --git a/src/include/86box/video.h b/src/include/86box/video.h
index d43ded46f..9da399a3a 100644
--- a/src/include/86box/video.h
+++ b/src/include/86box/video.h
@@ -47,8 +47,7 @@ extern "C" {
enum {
VIDEO_ISA = 0,
VIDEO_MCA,
- VIDEO_BUS,
- VIDEO_PCI
+ VIDEO_BUS
};
#define VIDEO_FLAG_TYPE_CGA 0
@@ -212,6 +211,7 @@ extern const device_t ati28800_wonderxl24_device;
#endif
/* Cirrus Logic CL-GD 54xx */
+extern const device_t gd5401_isa_device;
extern const device_t gd5402_isa_device;
extern const device_t gd5402_onboard_device;
extern const device_t gd5420_isa_device;
diff --git a/src/machine/m_at_286_386sx.c b/src/machine/m_at_286_386sx.c
index 931dd5e3f..ddc349033 100644
--- a/src/machine/m_at_286_386sx.c
+++ b/src/machine/m_at_286_386sx.c
@@ -38,6 +38,25 @@
#include <86box/video.h>
#include <86box/machine.h>
+int
+machine_at_mr286_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_interleaved(L"roms/machines/mr286/V000B200-1",
+ L"roms/machines/mr286/V000B200-2",
+ 0x000f0000, 65536, 0);
+
+ if (bios_only || !ret)
+ return ret;
+
+ machine_at_common_ide_init(model);
+ device_add(&keyboard_at_device);
+ device_add(&fdc_at_device);
+ device_add(&headland_device);
+
+ return ret;
+}
static void
machine_at_headland_common_init(int ht386)
@@ -120,26 +139,6 @@ machine_at_ama932j_init(const machine_t *model)
return ret;
}
-int
-machine_at_px286_init(const machine_t *model)
-{
- int ret;
-
- ret = bios_load_interleaved(L"roms/machines/px286/286-Headland-LO.BIN",
- L"roms/machines/px286/286-Headland-HI.BIN",
- 0x000f0000, 131072, 0);
-
- if (bios_only || !ret)
- return ret;
-
- machine_at_common_ide_init(model);
- device_add(&keyboard_at_device);
- device_add(&fdc_at_device);
- device_add(&headland_device);
-
- return ret;
-}
-
int
machine_at_quadt286_init(const machine_t *model)
{
@@ -201,6 +200,26 @@ machine_at_neat_ami_init(const machine_t *model)
return ret;
}
+int
+machine_at_px286_init(const machine_t *model)
+{
+ int ret;
+
+ ret = bios_load_linear(L"roms/machines/px286/KENITEC.BIN",
+ 0x000f0000, 65536, 0);
+
+ if (bios_only || !ret)
+ return ret;
+
+ machine_at_common_init(model);
+ device_add(&keyboard_at_device);
+ device_add(&fdc_at_device);
+ device_add(&neat_device);
+
+ return ret;
+}
+
+
int
machine_at_goldstar386_init(const machine_t *model)
{
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index aee58e4be..bc76df51c 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -37,11 +37,13 @@
#if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"Cyrix", cpus_6x863V}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"Cyrix", cpus_6x86SS7}, {"", NULL}}
#else
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"", NULL}, {"", NULL}}
#endif
@@ -49,11 +51,13 @@
#if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x863V}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"Cyrix", cpus_6x86SS7}, {"", NULL}}
#else
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"", NULL}, {"", NULL}}
#endif
@@ -106,6 +110,7 @@ const machine_t machines[] = {
{ "[286 ISA] Award 286 clone", "award286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_award286_init, NULL },
{ "[286 ISA] Phoenix 286 clone", "px286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_px286_init, NULL },
{ "[286 ISA] Quadtel 286 clone", "quadt286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_quadt286_init, NULL },
+ { "[286 ISA] MR 286 clone", "mr286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512, 16384, 128, 127, machine_at_mr286_init, NULL },
{ "[286 ISA] Commodore PC 30 III", "cmdpc30", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_cmdpc_init, NULL },
{ "[286 ISA] Compaq Portable II", "portableii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_portableii_init, NULL },
{ "[286 ISA] Compaq Portable III", "portableiii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_VIDEO, 640,16384, 128, 127, machine_at_portableiii_init, at_cpqiii_get_device },
@@ -154,7 +159,8 @@ const machine_t machines[] = {
/* 386DX machines */
{ "[386DX ISA] Compaq Portable III (386)", "portableiii386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC | MACHINE_VIDEO, 1, 14, 1, 127, machine_at_portableiii386_init, at_cpqiii_get_device },
- { "[386DX ISA] ECS 386/32", "ecs386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 512,16384, 512, 127, machine_at_ecs386_init, NULL },
+ { "[386DX ISA] AMI 386DX clone", "acc386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 16384, 128, 127, machine_at_acc386_init, NULL },
+ { "[386DX ISA] ECS 386/32", "ecs386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT, 1, 32, 1, 127, machine_at_ecs386_init, NULL },
{ "[386DX ISA] Micronics 386 clone", "micronics386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512, 8192, 128, 127, machine_at_micronics386_init, NULL },
/* 386DX machines which utilize the VLB bus */
@@ -195,7 +201,9 @@ const machine_t machines[] = {
#endif
/* 486 machines which utilize the PCI bus */
+#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[486 PCI] ASUS PCI/I-486SP3G", "486sp3g", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_486sp3g_init, NULL },
+#endif
{ "[486 PCI] Intel Classic/PCI", "alfredo", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_alfredo_init, NULL },
{ "[486 PCI] Lucky Star LS-486E", "ls486e", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_ls486e_init, NULL },
{ "[486 PCI] Rise Computer R418", "r418", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 255, 1, 127, machine_at_r418_init, NULL },
@@ -209,7 +217,6 @@ const machine_t machines[] = {
#endif
{ "[Socket 4 LX] Intel Premiere/PCI", "revenge", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_batman_init, NULL },
{ "[Socket 4 LX] Micro Star 586MC1", "586mc1", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_586mc1_init, NULL },
-
/* Socket 5 machines */
/* 430NX */
{ "[Socket 5 NX] Intel Premiere/PCI II", "plato", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_plato_init, NULL },
@@ -223,11 +230,11 @@ const machine_t machines[] = {
{ "[Socket 5 FX] Intel Advanced/ZP", "zappa", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_zappa_init, NULL },
{ "[Socket 5 FX] NEC PowerMate V", "powermate_v", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_powermate_v_init, NULL },
{ "[Socket 5 FX] PC Partner MB500N", "mb500n", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_mb500n_init, NULL },
- { "[Socket 5 FX] President Award 430FX PCI","president", MACHINE_CPUS_PENTIUM_S5, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_president_init, NULL },
/* Socket 7 machines */
/* 430FX */
{ "[Socket 7-3V FX] ASUS P/I-P54TP4XE", "p54tp4xe", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL },
+ { "[Socket 7-3V FX] QDI Chariot", "chariot", MACHINE_CPUS_PENTIUM_S73VCH, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_chariot_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/ATX", "thor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/EV", "endeavor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device },
#if defined(DEV_BRANCH) && defined(USE_MRTHOR)
@@ -266,11 +273,13 @@ const machine_t machines[] = {
#endif
{ "[Socket 7 TX] SuperMicro P5MMS98", "p5mms98", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 256, 8, 255, machine_at_p5mms98_init, NULL },
-#if defined(DEV_BRANCH) && defined(NO_SIO)
+
/* Apollo VPX */
- { "[Socket 7 VPX] Zida Tomato TX100", "tx100", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_tx100_init, NULL },
+ { "[Socket 7 VPX] FIC VA-502", "ficva502", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_ficva502_init, NULL },
/* Apollo VP3 */
+ { "[Socket 7 VP3] FIC PA-2012", "ficpa2012", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_ficpa2012_init, NULL },
+#if defined(DEV_BRANCH) && defined(NO_SIO)
{ "[Socket 7 VP3] QDI Advance II", "advanceii", MACHINE_CPUS_PENTIUM_S7, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_advanceii_init, NULL },
#endif
@@ -285,9 +294,6 @@ const machine_t machines[] = {
{ "[Socket 8 FX] PC Partner MB600N", "mb600n", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_mb600n_init, NULL },
{ "[Socket 8 FX] Biostar MB-8500ttc", "8500ttc", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_8500ttc_init, NULL },
{ "[Socket 8 FX] Micronics M6MI", "m6mi", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 384, 8, 127, machine_at_m6mi_init, NULL },
-#if defined(DEV_BRANCH) && defined(NO_SIO)
- { "[Socket 8 FX] Intel VS440FX", "vs440fx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 256, 8, 127, machine_at_vs440fx_init, NULL },
-#endif
{ "[Socket 8 FX] ASUS P/I-P65UP5 (C-P6ND)", "p65up5_cp6nd", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_p65up5_cp6nd_init, NULL },
@@ -305,9 +311,9 @@ const machine_t machines[] = {
{ "[Slot 1 BX] ASUS P2B-LS", "p2bls", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p2bls_init, NULL },
{ "[Slot 1 BX] ASUS P3B-F", "p3bf", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_p3bf_init, NULL },
{ "[Slot 1 BX] ABit BF6", "bf6", {{"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_bf6_init, NULL },
-
- /* 440ZX */
- { "[Slot 1 ZX] Packard Bell Bora Pro", "borapro", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 255, machine_at_borapro_init, NULL },
+#if defined(DEV_BRANCH) && defined(NO_SIO)
+ { "[Slot 1 BX] Tyan Tsunami ATX", "tsunamiatx", {{"Intel", cpus_PentiumII}, {"Intel/PGA370", cpus_Celeron},{"VIA", cpus_Cyrix3},{"", NULL},{"", NULL}}, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 255, machine_at_tsunamiatx_init, NULL },
+#endif
/* PGA370 machines */
/* 440BX */
diff --git a/src/video/vid_table.c b/src/video/vid_table.c
index 157e7d59f..acff552ea 100644
--- a/src/video/vid_table.c
+++ b/src/video/vid_table.c
@@ -68,6 +68,7 @@ video_cards[] = {
#endif
{ "[ISA] CGA", "cga", &cga_device },
{ "[ISA] Chips & Technologies SuperEGA", "superega", &sega_device },
+ { "[ISA] Cirrus Logic CL-GD 5401", "cl_gd5401_isa", &gd5401_isa_device },
{ "[ISA] Cirrus Logic CL-GD 5402", "cl_gd5402_isa", &gd5402_isa_device },
{ "[ISA] Cirrus Logic CL-GD 5420", "cl_gd5420_isa", &gd5420_isa_device },
#if defined(DEV_BRANCH) && defined(USE_CL5422)
From cecc8add98ffebb3460510d414da63459cfc5778 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 12 May 2020 10:41:06 +0300
Subject: [PATCH 28/32] Fix compile error
---
src/video/video.h | 356 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 356 insertions(+)
create mode 100644 src/video/video.h
diff --git a/src/video/video.h b/src/video/video.h
new file mode 100644
index 000000000..f9ceef5a5
--- /dev/null
+++ b/src/video/video.h
@@ -0,0 +1,356 @@
+/*
+ * 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.
+ *
+ * Definitions for the video controller module.
+ *
+ *
+ *
+ * Authors: Sarah Walker,
+ * Miran Grca,
+ * Fred N. van Kempen,
+ *
+ * Copyright 2008-2019 Sarah Walker.
+ * Copyright 2016-2019 Miran Grca.
+ * Copyright 2017-2019 Fred N. van Kempen.
+ */
+#ifndef EMU_VIDEO_H
+# define EMU_VIDEO_H
+
+
+#define makecol(r, g, b) ((b) | ((g) << 8) | ((r) << 16))
+#define makecol32(r, g, b) ((b) | ((g) << 8) | ((r) << 16))
+
+
+enum {
+ VID_NONE = 0,
+ VID_INTERNAL
+};
+
+enum {
+ FULLSCR_SCALE_FULL = 0,
+ FULLSCR_SCALE_43,
+ FULLSCR_SCALE_KEEPRATIO,
+ FULLSCR_SCALE_INT
+};
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+enum {
+ VIDEO_ISA = 0,
+ VIDEO_MCA,
+ VIDEO_BUS,
+ VIDEO_PCI
+};
+
+#define VIDEO_FLAG_TYPE_CGA 0
+#define VIDEO_FLAG_TYPE_MDA 1
+#define VIDEO_FLAG_TYPE_SPECIAL 2
+#define VIDEO_FLAG_TYPE_NONE 3
+#define VIDEO_FLAG_TYPE_MASK 3
+
+typedef struct {
+ int type;
+ int write_b, write_w, write_l;
+ int read_b, read_w, read_l;
+} video_timings_t;
+
+typedef struct {
+ int w, h;
+ uint32_t *dat;
+ uint32_t *line[2112];
+} bitmap_t;
+
+typedef struct {
+ uint8_t r, g, b;
+} rgb_t;
+
+typedef struct {
+ uint8_t chr[32];
+} dbcs_font_t;
+
+typedef rgb_t PALETTE[256];
+
+
+extern int egareads,
+ egawrites;
+extern int changeframecount;
+
+extern volatile int screenshots;
+extern bitmap_t *buffer32, *render_buffer;
+extern PALETTE cgapal,
+ cgapal_mono[6];
+extern uint32_t pal_lookup[256];
+extern int video_fullscreen,
+ video_fullscreen_scale,
+ video_fullscreen_first;
+extern int fullchange;
+extern uint8_t fontdat[2048][8];
+extern uint8_t fontdatm[2048][16];
+extern uint8_t fontdatw[512][32];
+extern uint8_t fontdat8x12[256][16];
+extern uint8_t fontdat12x18[256][36];
+extern dbcs_font_t *fontdatksc5601;
+extern dbcs_font_t *fontdatksc5601_user;
+extern uint32_t *video_6to8,
+ *video_8togs,
+ *video_8to32,
+ *video_15to32,
+ *video_16to32;
+extern int xsize,ysize;
+extern int enable_overscan;
+extern int overscan_x,
+ overscan_y;
+extern int force_43;
+extern int video_timing_read_b,
+ video_timing_read_w,
+ video_timing_read_l;
+extern int video_timing_write_b,
+ video_timing_write_w,
+ video_timing_write_l;
+extern int video_res_x,
+ video_res_y,
+ video_bpp;
+extern int vid_resize;
+extern int cga_palette,
+ herc_blend;
+extern int vid_cga_contrast;
+extern int video_grayscale;
+extern int video_graytype;
+
+extern double cpuclock;
+extern int emu_fps,
+ frames;
+extern int readflash;
+
+
+/* Function handler pointers. */
+extern void (*video_recalctimings)(void);
+
+
+/* Table functions. */
+extern int video_card_available(int card);
+extern char *video_card_getname(int card);
+#ifdef EMU_DEVICE_H
+extern const device_t *video_card_getdevice(int card);
+#endif
+extern int video_card_has_config(int card);
+extern int video_card_getid(char *s);
+extern char *video_get_internal_name(int card);
+extern int video_get_video_from_internal_name(char *s);
+extern int video_is_mda(void);
+extern int video_is_cga(void);
+extern int video_is_ega_vga(void);
+extern void video_inform(int type, const video_timings_t *ptr);
+extern int video_get_type(void);
+
+
+extern void video_setblit(void(*blit)(int,int,int,int,int,int));
+extern void video_blend(int x, int y);
+extern void video_blit_memtoscreen_8(int x, int y, int y1, int y2, int w, int h);
+extern void video_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h);
+extern void video_blit_complete(void);
+extern void video_wait_for_blit(void);
+extern void video_wait_for_buffer(void);
+
+extern bitmap_t *create_bitmap(int w, int h);
+extern void destroy_bitmap(bitmap_t *b);
+extern void cgapal_rebuild(void);
+extern void hline(bitmap_t *b, int x1, int y, int x2, uint32_t col);
+extern void updatewindowsize(int x, int y);
+
+extern void video_init(void);
+extern void video_close(void);
+extern void video_reset_close(void);
+extern void video_reset(int card);
+extern uint8_t video_force_resize_get(void);
+extern void video_force_resize_set(uint8_t res);
+extern void video_update_timing(void);
+
+extern void loadfont(wchar_t *s, int format);
+
+extern int get_actual_size_x(void);
+extern int get_actual_size_y(void);
+
+#ifdef ENABLE_VRAM_DUMP
+extern void svga_dump_vram(void);
+#endif
+
+extern uint32_t video_color_transform(uint32_t color);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#ifdef EMU_DEVICE_H
+/* ATi Mach64 */
+extern const device_t mach64gx_isa_device;
+extern const device_t mach64gx_vlb_device;
+extern const device_t mach64gx_pci_device;
+extern const device_t mach64vt2_device;
+
+/* ATi 18800 */
+extern const device_t ati18800_wonder_device;
+extern const device_t ati18800_vga88_device;
+extern const device_t ati18800_device;
+
+/* ATi 28800 */
+extern const device_t ati28800_device;
+extern const device_t ati28800k_device;
+extern const device_t compaq_ati28800_device;
+#if defined(DEV_BRANCH) && defined(USE_XL24)
+extern const device_t ati28800_wonderxl24_device;
+#endif
+
+/* Cirrus Logic CL-GD 54xx */
+extern const device_t gd5401_isa_device;
+extern const device_t gd5402_isa_device;
+extern const device_t gd5402_onboard_device;
+extern const device_t gd5420_isa_device;
+#if defined(DEV_BRANCH) && defined(USE_CL5422)
+extern const device_t gd5422_isa_device;
+extern const device_t gd5424_vlb_device;
+#endif
+extern const device_t gd5426_vlb_device;
+extern const device_t gd5428_isa_device;
+extern const device_t gd5428_vlb_device;
+extern const device_t gd5428_mca_device;
+extern const device_t gd5429_isa_device;
+extern const device_t gd5429_vlb_device;
+extern const device_t gd5430_vlb_device;
+extern const device_t gd5430_pci_device;
+extern const device_t gd5434_isa_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 gd5440_pci_device;
+extern const device_t gd5446_pci_device;
+extern const device_t gd5446_stb_pci_device;
+extern const device_t gd5480_pci_device;
+
+/* Compaq CGA */
+extern const device_t compaq_cga_device;
+extern const device_t compaq_cga_2_device;
+
+/* Tseng ET4000AX */
+extern const device_t et4000_isa_device;
+extern const device_t et4000k_isa_device;
+extern const device_t et4000k_tg286_isa_device;
+extern const device_t et4000_kasan_isa_device;
+extern const device_t et4000_mca_device;
+
+/* Tseng ET4000-W32p */
+extern const device_t et4000w32p_vlb_device;
+extern const device_t et4000w32p_pci_device;
+extern const device_t et4000w32p_cardex_vlb_device;
+extern const device_t et4000w32p_cardex_pci_device;
+
+/* MDSI Genius VHR */
+extern const device_t genius_device;
+
+/* Hercules */
+extern const device_t hercules_device;
+extern const device_t herculesplus_device;
+extern const device_t incolor_device;
+
+/* Headland GC-2xx/HT-2xx */
+extern const device_t g2_gc205_device;
+extern const device_t v7_vga_1024i_device;
+extern const device_t ht216_32_pb410a_device;
+
+/* Professional Graphics Controller */
+extern const device_t im1024_device;
+extern const device_t pgc_device;
+
+#if defined(DEV_BRANCH) && defined(USE_MGA)
+/* Matrox Mystique */
+extern const device_t mystique_device;
+extern const device_t mystique_220_device;
+#endif
+
+/* Oak OTI-0x7 */
+extern const device_t oti037c_device;
+extern const device_t oti067_device;
+extern const device_t oti067_acer386_device;
+extern const device_t oti067_ama932j_device;
+extern const device_t oti077_device;
+
+/* Paradise/WD (S)VGA */
+extern const device_t paradise_pvga1a_pc2086_device;
+extern const device_t paradise_pvga1a_pc3086_device;
+extern const device_t paradise_pvga1a_device;
+extern const device_t paradise_wd90c11_megapc_device;
+extern const device_t paradise_wd90c11_device;
+extern const device_t paradise_wd90c30_device;
+
+/* S3 9XX/8XX/Vision/Trio */
+const device_t s3_orchid_86c911_isa_device;
+const device_t s3_metheus_premier_86c928_isa_device;
+const device_t s3_metheus_premier_86c928_vlb_device;
+const device_t s3_v7mirage_86c801_isa_device;
+const device_t s3_phoenix_86c805_vlb_device;
+const device_t s3_bahamas64_vlb_device;
+const device_t s3_bahamas64_pci_device;
+const device_t s3_9fx_vlb_device;
+const device_t s3_9fx_pci_device;
+const device_t s3_phoenix_trio32_vlb_device;
+const device_t s3_phoenix_trio32_pci_device;
+const device_t s3_phoenix_trio64_vlb_device;
+const device_t s3_phoenix_trio64_onboard_pci_device;
+const device_t s3_phoenix_trio64_pci_device;
+const device_t s3_phoenix_vision864_pci_device;
+const device_t s3_phoenix_vision864_vlb_device;
+const device_t s3_diamond_stealth64_pci_device;
+const device_t s3_diamond_stealth64_vlb_device;
+const device_t s3_diamond_stealth64_964_pci_device;
+const device_t s3_diamond_stealth64_964_vlb_device;
+
+/* S3 ViRGE */
+extern const device_t s3_virge_vlb_device;
+extern const device_t s3_virge_pci_device;
+extern const device_t s3_virge_988_vlb_device;
+extern const device_t s3_virge_988_pci_device;
+extern const device_t s3_virge_375_vlb_device;
+extern const device_t s3_virge_375_pci_device;
+extern const device_t s3_virge_375_4_vlb_device;
+extern const device_t s3_virge_375_4_pci_device;
+
+/* Sigma Color 400 */
+extern const device_t sigma_device;
+
+/* Trident TGUI 94x0 */
+extern const device_t tgui9400cxi_device;
+extern const device_t tgui9440_vlb_device;
+extern const device_t tgui9440_pci_device;
+
+/* IBM PS/1 (S)VGA */
+extern const device_t ibm_ps1_2121_device;
+
+/* Trident TVGA 8900 */
+extern const device_t tvga8900b_device;
+extern const device_t tvga8900d_device;
+
+/* IBM VGA */
+extern const device_t vga_device;
+extern const device_t ps1vga_device;
+extern const device_t ps1vga_mca_device;
+
+/* 3DFX Voodoo Graphics */
+extern const device_t voodoo_device;
+
+/* Wyse 700 */
+extern const device_t wy700_device;
+#endif
+
+
+#endif /*EMU_VIDEO_H*/
From e920f0dd39badb89f8dd90cc704b5bf585018fe4 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 12 May 2020 10:42:41 +0300
Subject: [PATCH 29/32] Deleted useless video.h on the video folder
---
src/video/video.h | 356 ----------------------------------------------
1 file changed, 356 deletions(-)
delete mode 100644 src/video/video.h
diff --git a/src/video/video.h b/src/video/video.h
deleted file mode 100644
index f9ceef5a5..000000000
--- a/src/video/video.h
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * 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.
- *
- * Definitions for the video controller module.
- *
- *
- *
- * Authors: Sarah Walker,
- * Miran Grca,
- * Fred N. van Kempen,
- *
- * Copyright 2008-2019 Sarah Walker.
- * Copyright 2016-2019 Miran Grca.
- * Copyright 2017-2019 Fred N. van Kempen.
- */
-#ifndef EMU_VIDEO_H
-# define EMU_VIDEO_H
-
-
-#define makecol(r, g, b) ((b) | ((g) << 8) | ((r) << 16))
-#define makecol32(r, g, b) ((b) | ((g) << 8) | ((r) << 16))
-
-
-enum {
- VID_NONE = 0,
- VID_INTERNAL
-};
-
-enum {
- FULLSCR_SCALE_FULL = 0,
- FULLSCR_SCALE_43,
- FULLSCR_SCALE_KEEPRATIO,
- FULLSCR_SCALE_INT
-};
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-enum {
- VIDEO_ISA = 0,
- VIDEO_MCA,
- VIDEO_BUS,
- VIDEO_PCI
-};
-
-#define VIDEO_FLAG_TYPE_CGA 0
-#define VIDEO_FLAG_TYPE_MDA 1
-#define VIDEO_FLAG_TYPE_SPECIAL 2
-#define VIDEO_FLAG_TYPE_NONE 3
-#define VIDEO_FLAG_TYPE_MASK 3
-
-typedef struct {
- int type;
- int write_b, write_w, write_l;
- int read_b, read_w, read_l;
-} video_timings_t;
-
-typedef struct {
- int w, h;
- uint32_t *dat;
- uint32_t *line[2112];
-} bitmap_t;
-
-typedef struct {
- uint8_t r, g, b;
-} rgb_t;
-
-typedef struct {
- uint8_t chr[32];
-} dbcs_font_t;
-
-typedef rgb_t PALETTE[256];
-
-
-extern int egareads,
- egawrites;
-extern int changeframecount;
-
-extern volatile int screenshots;
-extern bitmap_t *buffer32, *render_buffer;
-extern PALETTE cgapal,
- cgapal_mono[6];
-extern uint32_t pal_lookup[256];
-extern int video_fullscreen,
- video_fullscreen_scale,
- video_fullscreen_first;
-extern int fullchange;
-extern uint8_t fontdat[2048][8];
-extern uint8_t fontdatm[2048][16];
-extern uint8_t fontdatw[512][32];
-extern uint8_t fontdat8x12[256][16];
-extern uint8_t fontdat12x18[256][36];
-extern dbcs_font_t *fontdatksc5601;
-extern dbcs_font_t *fontdatksc5601_user;
-extern uint32_t *video_6to8,
- *video_8togs,
- *video_8to32,
- *video_15to32,
- *video_16to32;
-extern int xsize,ysize;
-extern int enable_overscan;
-extern int overscan_x,
- overscan_y;
-extern int force_43;
-extern int video_timing_read_b,
- video_timing_read_w,
- video_timing_read_l;
-extern int video_timing_write_b,
- video_timing_write_w,
- video_timing_write_l;
-extern int video_res_x,
- video_res_y,
- video_bpp;
-extern int vid_resize;
-extern int cga_palette,
- herc_blend;
-extern int vid_cga_contrast;
-extern int video_grayscale;
-extern int video_graytype;
-
-extern double cpuclock;
-extern int emu_fps,
- frames;
-extern int readflash;
-
-
-/* Function handler pointers. */
-extern void (*video_recalctimings)(void);
-
-
-/* Table functions. */
-extern int video_card_available(int card);
-extern char *video_card_getname(int card);
-#ifdef EMU_DEVICE_H
-extern const device_t *video_card_getdevice(int card);
-#endif
-extern int video_card_has_config(int card);
-extern int video_card_getid(char *s);
-extern char *video_get_internal_name(int card);
-extern int video_get_video_from_internal_name(char *s);
-extern int video_is_mda(void);
-extern int video_is_cga(void);
-extern int video_is_ega_vga(void);
-extern void video_inform(int type, const video_timings_t *ptr);
-extern int video_get_type(void);
-
-
-extern void video_setblit(void(*blit)(int,int,int,int,int,int));
-extern void video_blend(int x, int y);
-extern void video_blit_memtoscreen_8(int x, int y, int y1, int y2, int w, int h);
-extern void video_blit_memtoscreen(int x, int y, int y1, int y2, int w, int h);
-extern void video_blit_complete(void);
-extern void video_wait_for_blit(void);
-extern void video_wait_for_buffer(void);
-
-extern bitmap_t *create_bitmap(int w, int h);
-extern void destroy_bitmap(bitmap_t *b);
-extern void cgapal_rebuild(void);
-extern void hline(bitmap_t *b, int x1, int y, int x2, uint32_t col);
-extern void updatewindowsize(int x, int y);
-
-extern void video_init(void);
-extern void video_close(void);
-extern void video_reset_close(void);
-extern void video_reset(int card);
-extern uint8_t video_force_resize_get(void);
-extern void video_force_resize_set(uint8_t res);
-extern void video_update_timing(void);
-
-extern void loadfont(wchar_t *s, int format);
-
-extern int get_actual_size_x(void);
-extern int get_actual_size_y(void);
-
-#ifdef ENABLE_VRAM_DUMP
-extern void svga_dump_vram(void);
-#endif
-
-extern uint32_t video_color_transform(uint32_t color);
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#ifdef EMU_DEVICE_H
-/* ATi Mach64 */
-extern const device_t mach64gx_isa_device;
-extern const device_t mach64gx_vlb_device;
-extern const device_t mach64gx_pci_device;
-extern const device_t mach64vt2_device;
-
-/* ATi 18800 */
-extern const device_t ati18800_wonder_device;
-extern const device_t ati18800_vga88_device;
-extern const device_t ati18800_device;
-
-/* ATi 28800 */
-extern const device_t ati28800_device;
-extern const device_t ati28800k_device;
-extern const device_t compaq_ati28800_device;
-#if defined(DEV_BRANCH) && defined(USE_XL24)
-extern const device_t ati28800_wonderxl24_device;
-#endif
-
-/* Cirrus Logic CL-GD 54xx */
-extern const device_t gd5401_isa_device;
-extern const device_t gd5402_isa_device;
-extern const device_t gd5402_onboard_device;
-extern const device_t gd5420_isa_device;
-#if defined(DEV_BRANCH) && defined(USE_CL5422)
-extern const device_t gd5422_isa_device;
-extern const device_t gd5424_vlb_device;
-#endif
-extern const device_t gd5426_vlb_device;
-extern const device_t gd5428_isa_device;
-extern const device_t gd5428_vlb_device;
-extern const device_t gd5428_mca_device;
-extern const device_t gd5429_isa_device;
-extern const device_t gd5429_vlb_device;
-extern const device_t gd5430_vlb_device;
-extern const device_t gd5430_pci_device;
-extern const device_t gd5434_isa_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 gd5440_pci_device;
-extern const device_t gd5446_pci_device;
-extern const device_t gd5446_stb_pci_device;
-extern const device_t gd5480_pci_device;
-
-/* Compaq CGA */
-extern const device_t compaq_cga_device;
-extern const device_t compaq_cga_2_device;
-
-/* Tseng ET4000AX */
-extern const device_t et4000_isa_device;
-extern const device_t et4000k_isa_device;
-extern const device_t et4000k_tg286_isa_device;
-extern const device_t et4000_kasan_isa_device;
-extern const device_t et4000_mca_device;
-
-/* Tseng ET4000-W32p */
-extern const device_t et4000w32p_vlb_device;
-extern const device_t et4000w32p_pci_device;
-extern const device_t et4000w32p_cardex_vlb_device;
-extern const device_t et4000w32p_cardex_pci_device;
-
-/* MDSI Genius VHR */
-extern const device_t genius_device;
-
-/* Hercules */
-extern const device_t hercules_device;
-extern const device_t herculesplus_device;
-extern const device_t incolor_device;
-
-/* Headland GC-2xx/HT-2xx */
-extern const device_t g2_gc205_device;
-extern const device_t v7_vga_1024i_device;
-extern const device_t ht216_32_pb410a_device;
-
-/* Professional Graphics Controller */
-extern const device_t im1024_device;
-extern const device_t pgc_device;
-
-#if defined(DEV_BRANCH) && defined(USE_MGA)
-/* Matrox Mystique */
-extern const device_t mystique_device;
-extern const device_t mystique_220_device;
-#endif
-
-/* Oak OTI-0x7 */
-extern const device_t oti037c_device;
-extern const device_t oti067_device;
-extern const device_t oti067_acer386_device;
-extern const device_t oti067_ama932j_device;
-extern const device_t oti077_device;
-
-/* Paradise/WD (S)VGA */
-extern const device_t paradise_pvga1a_pc2086_device;
-extern const device_t paradise_pvga1a_pc3086_device;
-extern const device_t paradise_pvga1a_device;
-extern const device_t paradise_wd90c11_megapc_device;
-extern const device_t paradise_wd90c11_device;
-extern const device_t paradise_wd90c30_device;
-
-/* S3 9XX/8XX/Vision/Trio */
-const device_t s3_orchid_86c911_isa_device;
-const device_t s3_metheus_premier_86c928_isa_device;
-const device_t s3_metheus_premier_86c928_vlb_device;
-const device_t s3_v7mirage_86c801_isa_device;
-const device_t s3_phoenix_86c805_vlb_device;
-const device_t s3_bahamas64_vlb_device;
-const device_t s3_bahamas64_pci_device;
-const device_t s3_9fx_vlb_device;
-const device_t s3_9fx_pci_device;
-const device_t s3_phoenix_trio32_vlb_device;
-const device_t s3_phoenix_trio32_pci_device;
-const device_t s3_phoenix_trio64_vlb_device;
-const device_t s3_phoenix_trio64_onboard_pci_device;
-const device_t s3_phoenix_trio64_pci_device;
-const device_t s3_phoenix_vision864_pci_device;
-const device_t s3_phoenix_vision864_vlb_device;
-const device_t s3_diamond_stealth64_pci_device;
-const device_t s3_diamond_stealth64_vlb_device;
-const device_t s3_diamond_stealth64_964_pci_device;
-const device_t s3_diamond_stealth64_964_vlb_device;
-
-/* S3 ViRGE */
-extern const device_t s3_virge_vlb_device;
-extern const device_t s3_virge_pci_device;
-extern const device_t s3_virge_988_vlb_device;
-extern const device_t s3_virge_988_pci_device;
-extern const device_t s3_virge_375_vlb_device;
-extern const device_t s3_virge_375_pci_device;
-extern const device_t s3_virge_375_4_vlb_device;
-extern const device_t s3_virge_375_4_pci_device;
-
-/* Sigma Color 400 */
-extern const device_t sigma_device;
-
-/* Trident TGUI 94x0 */
-extern const device_t tgui9400cxi_device;
-extern const device_t tgui9440_vlb_device;
-extern const device_t tgui9440_pci_device;
-
-/* IBM PS/1 (S)VGA */
-extern const device_t ibm_ps1_2121_device;
-
-/* Trident TVGA 8900 */
-extern const device_t tvga8900b_device;
-extern const device_t tvga8900d_device;
-
-/* IBM VGA */
-extern const device_t vga_device;
-extern const device_t ps1vga_device;
-extern const device_t ps1vga_mca_device;
-
-/* 3DFX Voodoo Graphics */
-extern const device_t voodoo_device;
-
-/* Wyse 700 */
-extern const device_t wy700_device;
-#endif
-
-
-#endif /*EMU_VIDEO_H*/
From 4da8001e932169fcddae40c1bc20af49e3678759 Mon Sep 17 00:00:00 2001
From: tiseno100 <58827426+tiseno100@users.noreply.github.com>
Date: Tue, 12 May 2020 10:43:03 +0300
Subject: [PATCH 30/32] Fix compile error
---
src/include/86box/video.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/include/86box/video.h b/src/include/86box/video.h
index 9da399a3a..f9ceef5a5 100644
--- a/src/include/86box/video.h
+++ b/src/include/86box/video.h
@@ -47,7 +47,8 @@ extern "C" {
enum {
VIDEO_ISA = 0,
VIDEO_MCA,
- VIDEO_BUS
+ VIDEO_BUS,
+ VIDEO_PCI
};
#define VIDEO_FLAG_TYPE_CGA 0
From a52f599b86b41d85a41d5c0b2719f81551661da1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Hrdli=C4=8Dka?=
Date: Tue, 12 May 2020 10:08:42 +0200
Subject: [PATCH 31/32] machine: fix build
---
src/machine/machine_table.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c
index bc76df51c..573cdfdd9 100644
--- a/src/machine/machine_table.c
+++ b/src/machine/machine_table.c
@@ -37,13 +37,13 @@
#if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"Cyrix", cpus_6x863V}, {"", NULL}}
-#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"Cyrix", cpus_6x86SS7}, {"", NULL}}
#else
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}
-#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"", NULL}, {"", NULL}}
#endif
@@ -51,13 +51,13 @@
#if defined(DEV_BRANCH) && defined(USE_CYRIX_6X86)
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x863V}, {"", NULL}, {"", NULL}}
-#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"", NULL }, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"Cyrix", cpus_6x86SS7}, {"", NULL}}
#else
#define MACHINE_CPUS_PENTIUM_S5 {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S73V {{ "Intel", cpus_Pentium3V}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}
-#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}, {"", NULL}}
+#define MACHINE_CPUS_PENTIUM_S73VCH {{ "Intel", cpus_Pentium3V}, {"", NULL }, {"", NULL}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_S7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"", NULL}, {"", NULL}}
#define MACHINE_CPUS_PENTIUM_SS7 {{ "Intel", cpus_Pentium}, {"IDT", cpus_WinChip_SS7}, {"AMD", cpus_K56_SS7}, {"", NULL}, {"", NULL}}
#endif
@@ -234,7 +234,7 @@ const machine_t machines[] = {
/* Socket 7 machines */
/* 430FX */
{ "[Socket 7-3V FX] ASUS P/I-P54TP4XE", "p54tp4xe", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL },
- { "[Socket 7-3V FX] QDI Chariot", "chariot", MACHINE_CPUS_PENTIUM_S73VCH, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_chariot_init, NULL },
+ { "[Socket 7-3V FX] QDI Chariot", "chariot", MACHINE_CPUS_PENTIUM_S73VCH, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_chariot_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/ATX", "thor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL },
{ "[Socket 7-3V FX] Intel Advanced/EV", "endeavor", MACHINE_CPUS_PENTIUM_S73V, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device },
#if defined(DEV_BRANCH) && defined(USE_MRTHOR)
From 528f11a5a21d380bc58679b13eed8bdd7426217e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?David=20Hrdli=C4=8Dka?=
Date: Tue, 12 May 2020 10:25:24 +0200
Subject: [PATCH 32/32] video: fix build
---
src/include/86box/video.h | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/include/86box/video.h b/src/include/86box/video.h
index 9da399a3a..068f3598c 100644
--- a/src/include/86box/video.h
+++ b/src/include/86box/video.h
@@ -47,7 +47,8 @@ extern "C" {
enum {
VIDEO_ISA = 0,
VIDEO_MCA,
- VIDEO_BUS
+ VIDEO_BUS,
+ VIDEO_PCI
};
#define VIDEO_FLAG_TYPE_CGA 0