Various 486 improvements
- Added SL-Enhanced versions of Intel 486 CPUs and Enhanced AMD Am486DX2/DX4 CPUs - Cleaned up the 486 CPU types and updated intel_4x0.c to reflect this - Fixed some incorrect EDX reset and CPUID values - Blacklisted non-SMM capable 486 CPUs on the Soyo 4SA2 motherboard - Merged the non-OverDrive and OverDrive Intel DX4s because of further research confirming them to be functionally identical - Removed SMM support on early 486 CPUs
This commit is contained in:
@@ -1303,13 +1303,13 @@ static void
|
||||
regs[0x0d] = 0x20;
|
||||
/* According to information from FreeBSD 3.x source code:
|
||||
0x00 = 486DX, 0x20 = 486SX, 0x40 = 486DX2 or 486DX4, 0x80 = Pentium OverDrive. */
|
||||
if (is486sx)
|
||||
if (!(hasfpu) && (cpu_multi = 1))
|
||||
regs[0x50] = 0x20;
|
||||
else if (is486sx2)
|
||||
else if (!(hasfpu) && (cpu_multi = 2))
|
||||
regs[0x50] = 0x60; /* Guess based on the SX, DX, and DX2 values. */
|
||||
else if (is486dx)
|
||||
else if (hasfpu && (cpu_multi = 1))
|
||||
regs[0x50] = 0x00;
|
||||
else if (is486dx2 || isdx4)
|
||||
else if (hasfpu && (cpu_multi >= 2) && !(cpu_s->cpu_type == CPU_P24T))
|
||||
regs[0x50] = 0x40;
|
||||
else
|
||||
regs[0x50] = 0x80; /* Pentium OverDrive. */
|
||||
|
@@ -108,9 +108,9 @@ int isa_cycles,
|
||||
cpu_override, cpu_effective, cpu_multi, cpu_16bitbus, cpu_64bitbus, cpu_busspeed,
|
||||
cpu_cyrix_alignment, CPUID,
|
||||
|
||||
is286, is386, is486 = 1, is486sx, is486dx, is486sx2, is486dx2, isdx4,
|
||||
is286, is386, is486 = 1,
|
||||
cpu_isintel, cpu_iscyrix, hascache, isibm486, israpidcad, is_vpc,
|
||||
is_am486, is_486_org, is_pentium, is_k5, is_k6, is_p6, is_cxsmm, hasfpu,
|
||||
is_am486, is_pentium, is_k5, is_k6, is_p6, is_cxsmm, hasfpu,
|
||||
|
||||
timing_rr, timing_mr, timing_mrl, timing_rm, timing_rml,
|
||||
timing_mm, timing_mml, timing_bt, timing_bnt,
|
||||
@@ -368,23 +368,16 @@ cpu_set(void)
|
||||
isibm486 = (cpu_s->cpu_type == CPU_IBM386SLC) || (cpu_s->cpu_type == CPU_IBM486SLC) ||
|
||||
(cpu_s->cpu_type == CPU_IBM486BL);
|
||||
is486 = (cpu_s->cpu_type >= CPU_RAPIDCAD);
|
||||
is486sx = (cpu_s->cpu_type >= CPU_i486SX) && (cpu_s->cpu_type < CPU_i486SX2);
|
||||
is486sx2 = (cpu_s->cpu_type >= CPU_i486SX2) && (cpu_s->cpu_type < CPU_i486DX);
|
||||
is486dx = (cpu_s->cpu_type >= CPU_i486DX) && (cpu_s->cpu_type < CPU_i486DX2);
|
||||
is486dx2 = (cpu_s->cpu_type >= CPU_i486DX2) && (cpu_s->cpu_type < CPU_iDX4);
|
||||
isdx4 = (cpu_s->cpu_type >= CPU_iDX4) && (cpu_s->cpu_type < CPU_WINCHIP);
|
||||
is_486_org = (cpu_s->cpu_type == CPU_i486SX) || (cpu_s->cpu_type == CPU_i486DX) ||
|
||||
(cpu_s->cpu_type == CPU_Am486SX) || (cpu_s->cpu_type == CPU_Am486DX);
|
||||
is_am486 = !strcmp(cpu_f->manufacturer, "AMD") && (cpu_s->cpu_type >= CPU_Am486SX) && (cpu_s->cpu_type <= CPU_Am5x86);
|
||||
is_am486 = (cpu_s->cpu_type == CPU_ENH_Am486DX);
|
||||
|
||||
cpu_isintel = !strcmp(cpu_f->manufacturer, "Intel");
|
||||
cpu_iscyrix = !strcmp(cpu_f->manufacturer, "Cyrix");
|
||||
|
||||
/* The 486DX2 and iDX4 have the same SMM save state table layout as Pentiums,
|
||||
/* SL-Enhanced Intel 486s have the same SMM save state table layout as Pentiums,
|
||||
and the WinChip datasheet claims those are Pentium-compatible as well. */
|
||||
is_pentium = (cpu_isintel && (cpu_s->cpu_type >= CPU_i486SX) && (cpu_s->cpu_type < CPU_PENTIUMPRO)) ||
|
||||
is_pentium = (cpu_isintel && (((cpu_s->cpu_type >= CPU_i486SX_SLENH)) && (cpu_s->cpu_type < CPU_PENTIUMPRO))) ||
|
||||
!strcmp(cpu_f->manufacturer, "IDT");
|
||||
is_k5 = !strcmp(cpu_f->manufacturer, "AMD") && (cpu_s->cpu_type > CPU_Am5x86);
|
||||
is_k5 = !strcmp(cpu_f->manufacturer, "AMD") && (cpu_s->cpu_type > CPU_ENH_Am486DX);
|
||||
is_k6 = (cpu_s->cpu_type >= CPU_K6) && !strcmp(cpu_f->manufacturer, "AMD");
|
||||
/* The Samuel 2 datasheet claims it's Celeron-compatible. */
|
||||
is_p6 = (cpu_isintel && (cpu_s->cpu_type >= CPU_PENTIUMPRO)) || !strcmp(cpu_f->manufacturer, "VIA");
|
||||
@@ -758,21 +751,17 @@ cpu_set(void)
|
||||
timing_misaligned = 3;
|
||||
break;
|
||||
|
||||
case CPU_iDX4:
|
||||
case CPU_i486SX_SLENH:
|
||||
case CPU_i486DX_SLENH:
|
||||
cpu_features = CPU_FEATURE_CR4 | CPU_FEATURE_VME;
|
||||
cpu_CR4_mask = CR4_VME | CR4_PVI | CR4_VME;
|
||||
/* FALLTHROUGH */
|
||||
case CPU_RAPIDCAD:
|
||||
case CPU_i486SX:
|
||||
case CPU_i486SX2:
|
||||
case CPU_i486DX:
|
||||
case CPU_i486DX2:
|
||||
case CPU_Am486SX:
|
||||
case CPU_Am486SX2:
|
||||
case CPU_Am486DX:
|
||||
case CPU_Am486DX2:
|
||||
case CPU_Am486DX4:
|
||||
case CPU_Am5x86:
|
||||
case CPU_ENH_Am486DX:
|
||||
/*AMD timing identical to Intel*/
|
||||
#ifdef USE_DYNAREC
|
||||
x86_setopcodes(ops_386, ops_486_0f, dynarec_ops_386, dynarec_ops_486_0f);
|
||||
@@ -815,8 +804,6 @@ cpu_set(void)
|
||||
|
||||
case CPU_Cx486S:
|
||||
case CPU_Cx486DX:
|
||||
case CPU_Cx486DX2:
|
||||
case CPU_Cx486DX4:
|
||||
#ifdef USE_DYNAREC
|
||||
x86_setopcodes(ops_386, ops_c486_0f, dynarec_ops_386, dynarec_ops_c486_0f);
|
||||
#else
|
||||
@@ -1468,9 +1455,7 @@ void
|
||||
cpu_CPUID(void)
|
||||
{
|
||||
switch (cpu_s->cpu_type) {
|
||||
case CPU_RAPIDCAD:
|
||||
case CPU_i486DX:
|
||||
case CPU_i486DX2:
|
||||
case CPU_i486SX_SLENH:
|
||||
if (!EAX) {
|
||||
EAX = 0x00000001;
|
||||
EBX = 0x756e6547;
|
||||
@@ -1479,12 +1464,12 @@ cpu_CPUID(void)
|
||||
} else if (EAX == 1) {
|
||||
EAX = CPUID;
|
||||
EBX = ECX = 0;
|
||||
EDX = CPUID_FPU; /*FPU*/
|
||||
EDX = CPUID_VME;
|
||||
} else
|
||||
EAX = EBX = ECX = EDX = 0;
|
||||
break;
|
||||
|
||||
case CPU_iDX4:
|
||||
case CPU_i486DX_SLENH:
|
||||
if (!EAX) {
|
||||
EAX = 0x00000001;
|
||||
EBX = 0x756e6547;
|
||||
@@ -1497,25 +1482,8 @@ cpu_CPUID(void)
|
||||
} else
|
||||
EAX = EBX = ECX = EDX = 0;
|
||||
break;
|
||||
|
||||
case CPU_Am486SX:
|
||||
case CPU_Am486SX2:
|
||||
if (!EAX) {
|
||||
EAX = 1;
|
||||
EBX = 0x68747541;
|
||||
ECX = 0x444D4163;
|
||||
EDX = 0x69746E65;
|
||||
} else if (EAX == 1) {
|
||||
EAX = CPUID;
|
||||
EBX = ECX = EDX = 0; /*No FPU*/
|
||||
} else
|
||||
EAX = EBX = ECX = EDX = 0;
|
||||
break;
|
||||
|
||||
case CPU_Am486DX:
|
||||
case CPU_Am486DX2:
|
||||
case CPU_Am486DX4:
|
||||
case CPU_Am5x86:
|
||||
|
||||
case CPU_ENH_Am486DX:
|
||||
if (!EAX) {
|
||||
EAX = 1;
|
||||
EBX = 0x68747541;
|
||||
|
@@ -50,18 +50,12 @@ enum {
|
||||
CPU_i486SX, /* 486 class CPUs */
|
||||
CPU_Am486SX,
|
||||
CPU_Cx486S,
|
||||
CPU_i486SX2,
|
||||
CPU_Am486SX2,
|
||||
CPU_i486DX,
|
||||
CPU_Am486DX,
|
||||
CPU_Cx486DX,
|
||||
CPU_i486DX2,
|
||||
CPU_Am486DX2,
|
||||
CPU_Cx486DX2,
|
||||
CPU_iDX4,
|
||||
CPU_Am486DX4,
|
||||
CPU_Cx486DX4,
|
||||
CPU_Am5x86,
|
||||
CPU_i486SX_SLENH,
|
||||
CPU_i486DX_SLENH,
|
||||
CPU_ENH_Am486DX,
|
||||
CPU_Cx5x86,
|
||||
CPU_P24T,
|
||||
CPU_WINCHIP, /* 586 class CPUs */
|
||||
@@ -482,8 +476,8 @@ extern double fpu_multi;
|
||||
extern int cpu_cyrix_alignment; /*Cyrix 5x86/6x86 only has data misalignment
|
||||
penalties when crossing 8-byte boundaries*/
|
||||
|
||||
extern int is8086, is286, is386, is486, is486sx, is486dx, is486sx2, is486dx2, isdx4;
|
||||
extern int is_am486, is_486_org, is_pentium, is_k5, is_k6, is_p6, is_cxsmm;
|
||||
extern int is8086, is286, is386, is486;
|
||||
extern int is_am486, is_pentium, is_k5, is_k6, is_p6, is_cxsmm;
|
||||
extern int hascache;
|
||||
extern int isibm486;
|
||||
extern int is_rapidcad;
|
||||
|
@@ -313,17 +313,29 @@ const cpu_family_t cpu_families[] = {
|
||||
{"16", CPU_i486SX, fpus_486sx, 16000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 3, 3,3,3, 2},
|
||||
{"20", CPU_i486SX, fpus_486sx, 20000000, 1, 5000, 0x420, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3},
|
||||
{"25", CPU_i486SX, fpus_486sx, 25000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3},
|
||||
{"33", CPU_i486SX, fpus_486sx, 33333333, 1, 5000, 0x42a, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4},
|
||||
{"33", CPU_i486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
},
|
||||
{
|
||||
.package = CPU_PKG_SOCKET1,
|
||||
.manufacturer = "Intel",
|
||||
.name = "i486SX (SL-Enhanced)",
|
||||
.internal_name = "i486sx_slenh",
|
||||
.cpus = (const CPU[]) {
|
||||
{"25", CPU_i486SX_SLENH, fpus_486sx, 25000000, 1, 5000, 0x423, 0x423, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3},
|
||||
{"33", CPU_i486SX_SLENH, fpus_486sx, 33333333, 1, 5000, 0x42a, 0x42a, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4},
|
||||
{"", 0}
|
||||
}
|
||||
},
|
||||
{
|
||||
.package = CPU_PKG_SOCKET1,
|
||||
.manufacturer = "Intel",
|
||||
.name = "i486SX2",
|
||||
.internal_name = "i486sx2",
|
||||
.cpus = (const CPU[]) {
|
||||
{"50", CPU_i486SX2, fpus_486sx, 50000000, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6},
|
||||
{"66 (Q0569)", CPU_i486SX2, fpus_486sx, 66666666, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 8},
|
||||
{"50", CPU_i486SX_SLENH, fpus_486sx, 50000000, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6},
|
||||
{"66 (Q0569)", CPU_i486SX_SLENH, fpus_486sx, 66666666, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 8},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -333,49 +345,62 @@ const cpu_family_t cpu_families[] = {
|
||||
.internal_name = "i486dx",
|
||||
.cpus = (const CPU[]) {
|
||||
{"25", CPU_i486DX, fpus_internal, 25000000, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 4, 4,3,3, 3},
|
||||
{"33", CPU_i486DX, fpus_internal, 33333333, 1, 5000, 0x414, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4},
|
||||
{"33", CPU_i486DX, fpus_internal, 33333333, 1, 5000, 0x404, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4},
|
||||
{"50", CPU_i486DX, fpus_internal, 50000000, 1, 5000, 0x411, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6},
|
||||
{"", 0}
|
||||
}
|
||||
},
|
||||
{
|
||||
.package = CPU_PKG_SOCKET1,
|
||||
.manufacturer = "Intel",
|
||||
.name = "i486DX (SL-Enhanced)",
|
||||
.internal_name = "i486dx_slenh",
|
||||
.cpus = (const CPU[]) {
|
||||
{"33", CPU_i486DX_SLENH, fpus_internal, 33333333, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 6, 6,3,3, 4},
|
||||
{"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 1, 5000, 0x414, 0x414, 0, CPU_SUPPORTS_DYNAREC, 8, 8,4,4, 6},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
.package = CPU_PKG_SOCKET1,
|
||||
.manufacturer = "Intel",
|
||||
.name = "i486DX2",
|
||||
.internal_name = "i486dx2",
|
||||
.cpus = (const CPU[]) {
|
||||
{"40", CPU_i486DX2, fpus_internal, 40000000, 2, 5000, 0x430, 0x430, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5},
|
||||
{"50", CPU_i486DX2, fpus_internal, 50000000, 2, 5000, 0x433, 0x433, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6},
|
||||
{"66", CPU_i486DX2, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8},
|
||||
{"40", CPU_i486DX, fpus_internal, 40000000, 2, 5000, 0x430, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5},
|
||||
{"50", CPU_i486DX, fpus_internal, 50000000, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6},
|
||||
{"66", CPU_i486DX, fpus_internal, 66666666, 2, 5000, 0x433, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
},
|
||||
{
|
||||
.package = CPU_PKG_SOCKET1,
|
||||
.manufacturer = "Intel",
|
||||
.name = "i486DX2 (SL-Enhanced)",
|
||||
.internal_name = "i486dx2_slenh",
|
||||
.cpus = (const CPU[]) {
|
||||
{"40", CPU_i486DX_SLENH, fpus_internal, 40000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 7, 7,6,6, 5},
|
||||
{"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6},
|
||||
{"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
.package = CPU_PKG_SOCKET3_PC330,
|
||||
.manufacturer = "Intel",
|
||||
.name = "i486DX2",
|
||||
.internal_name = "i486dx2_pc330",
|
||||
.cpus = (const CPU[]) {
|
||||
{"50", CPU_i486DX2, fpus_internal, 50000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6},
|
||||
{"66", CPU_i486DX2, fpus_internal, 66666666, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8},
|
||||
{"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6},
|
||||
{"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
.package = CPU_PKG_SOCKET3 | CPU_PKG_SOCKET3_PC330,
|
||||
.package = CPU_PKG_SOCKET1 | CPU_PKG_SOCKET3_PC330, /*OEM versions are 3.3V, Retail versions are 3.3V with a 5V regulator for installation in older boards. hey are functionally identical*/
|
||||
.manufacturer = "Intel",
|
||||
.name = "iDX4",
|
||||
.internal_name = "idx4",
|
||||
.cpus = (const CPU[]) {
|
||||
{"75", CPU_iDX4, fpus_internal, 75000000, 3.0, 5000, 0x480, 0x480, 0x0000, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9}, /*CPUID available on DX4, >= 75 MHz*/
|
||||
{"100", CPU_iDX4, fpus_internal, 100000000, 3.0, 5000, 0x483, 0x483, 0x0000, CPU_SUPPORTS_DYNAREC, 18,18, 9, 9, 12}, /*Is on some real Intel DX2s, limit here is pretty arbitary*/
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
.package = CPU_PKG_SOCKET1,
|
||||
.manufacturer = "Intel",
|
||||
.name = "iDX4 OverDrive",
|
||||
.internal_name = "idx4_od",
|
||||
.cpus = (const CPU[]) {
|
||||
{"75", CPU_iDX4, fpus_internal, 75000000, 3, 5000, 0x1480, 0x1480, 0, CPU_SUPPORTS_DYNAREC, 12,12,9,9, 9}, /*Only added the DX4 OverDrive as the others would be redundant*/
|
||||
{"100", CPU_iDX4, fpus_internal, 100000000, 3, 5000, 0x1480, 0x1480, 0, CPU_SUPPORTS_DYNAREC, 18,18,9,9, 12},
|
||||
{"75", CPU_i486DX_SLENH, fpus_internal, 75000000, 3.0, 5000, 0x480, 0x480, 0x0000, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9},
|
||||
{"100", CPU_i486DX_SLENH, fpus_internal, 100000000, 3.0, 5000, 0x483, 0x483, 0x0000, CPU_SUPPORTS_DYNAREC, 18,18, 9, 9, 12},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -394,8 +419,8 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "Am486SX",
|
||||
.internal_name = "am486sx",
|
||||
.cpus = (const CPU[]) {
|
||||
{"33", CPU_Am486SX, fpus_486sx, 33333333, 1, 5000, 0x42a, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4},
|
||||
{"40", CPU_Am486SX, fpus_486sx, 40000000, 1, 5000, 0x42a, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5},
|
||||
{"33", CPU_Am486SX, fpus_486sx, 33333333, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4},
|
||||
{"40", CPU_Am486SX, fpus_486sx, 40000000, 1, 5000, 0x422, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -404,8 +429,8 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "Am486SX2",
|
||||
.internal_name = "am486sx2",
|
||||
.cpus = (const CPU[]) {
|
||||
{"50", CPU_Am486SX2, fpus_486sx, 50000000, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6}, /*CPUID available on SX2, DX2, DX4, 5x86, >= 50 MHz*/
|
||||
{"66", CPU_Am486SX2, fpus_486sx, 66666666, 2, 5000, 0x45b, 0x45b, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8}, /*Isn't on all real AMD SX2s and DX2s, availability here is pretty arbitary (and distinguishes them from the Intel chips)*/
|
||||
{"50", CPU_Am486SX, fpus_486sx, 50000000, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6},
|
||||
{"66", CPU_Am486SX, fpus_486sx, 66666666, 2, 5000, 0x45b, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -414,8 +439,8 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "Am486DX",
|
||||
.internal_name = "am486dx",
|
||||
.cpus = (const CPU[]) {
|
||||
{"33", CPU_Am486DX, fpus_internal, 33333333, 1, 5000, 0x430, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4},
|
||||
{"40", CPU_Am486DX, fpus_internal, 40000000, 1, 5000, 0x430, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5},
|
||||
{"33", CPU_Am486DX, fpus_internal, 33333333, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 6, 6, 3, 3, 4},
|
||||
{"40", CPU_Am486DX, fpus_internal, 40000000, 1, 5000, 0x412, 0, 0, CPU_SUPPORTS_DYNAREC, 7, 7, 3, 3, 5},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -424,9 +449,9 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "Am486DX2",
|
||||
.internal_name = "am486dx2",
|
||||
.cpus = (const CPU[]) {
|
||||
{"50", CPU_Am486DX2, fpus_internal, 50000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6},
|
||||
{"66", CPU_Am486DX2, fpus_internal, 66666666, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8},
|
||||
{"80", CPU_Am486DX2, fpus_internal, 80000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10},
|
||||
{"50", CPU_Am486DX, fpus_internal, 50000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6},
|
||||
{"66", CPU_Am486DX, fpus_internal, 66666666, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8},
|
||||
{"80", CPU_Am486DX, fpus_internal, 80000000, 2, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -435,10 +460,32 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "Am486DX4",
|
||||
.internal_name = "am486dx4",
|
||||
.cpus = (const CPU[]) {
|
||||
{"75", CPU_Am486DX4, fpus_internal, 75000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9},
|
||||
{"90", CPU_Am486DX4, fpus_internal, 90000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12},
|
||||
{"100", CPU_Am486DX4, fpus_internal, 100000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12},
|
||||
{"120", CPU_Am486DX4, fpus_internal, 120000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15},
|
||||
{"75", CPU_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9},
|
||||
{"90", CPU_Am486DX, fpus_internal, 90000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12},
|
||||
{"100", CPU_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12},
|
||||
{"120", CPU_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x432, 0, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15},
|
||||
{"", 0}
|
||||
}
|
||||
},
|
||||
{
|
||||
.package = CPU_PKG_SOCKET3,
|
||||
.manufacturer = "AMD",
|
||||
.name = "Am486DX2 (Enhanced)",
|
||||
.internal_name = "enh_am486dx2",
|
||||
.cpus = (const CPU[]) {
|
||||
{"66", CPU_ENH_Am486DX, fpus_internal, 66666666, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8},
|
||||
{"80", CPU_ENH_Am486DX, fpus_internal, 80000000, 2, 5000, 0x435, 0x435, 0, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
.package = CPU_PKG_SOCKET3,
|
||||
.manufacturer = "AMD",
|
||||
.name = "Am486DX4 (Enhanced)",
|
||||
.internal_name = "enh_am486dx4",
|
||||
.cpus = (const CPU[]) {
|
||||
{"75", CPU_ENH_Am486DX, fpus_internal, 75000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9},
|
||||
{"100", CPU_ENH_Am486DX, fpus_internal, 100000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12},
|
||||
{"120", CPU_ENH_Am486DX, fpus_internal, 120000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 21,21, 9, 9, 15},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -447,9 +494,9 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "Am5x86",
|
||||
.internal_name = "am5x86",
|
||||
.cpus = (const CPU[]) {
|
||||
{"P75", CPU_Am5x86, fpus_internal, 133333333, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16},
|
||||
{"P75+", CPU_Am5x86, fpus_internal, 150000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*The rare P75+ was indeed a triple-clocked 150 MHz according to research*/
|
||||
{"P90", CPU_Am5x86, fpus_internal, 160000000, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*160 MHz on a 40 MHz bus was a common overclock and "5x86/P90" was used by a number of BIOSes to refer to that configuration*/
|
||||
{"P75", CPU_ENH_Am486DX, fpus_internal, 133333333, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 24,24,12,12, 16},
|
||||
{"P75+", CPU_ENH_Am486DX, fpus_internal, 150000000, 3.0, 5000, 0x482, 0x482, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*The rare P75+ was indeed a triple-clocked 150 MHz according to research*/
|
||||
{"P90", CPU_ENH_Am486DX, fpus_internal, 160000000, 4.0, 5000, 0x4e0, 0x4e0, 0, CPU_SUPPORTS_DYNAREC, 28,28,12,12, 20},/*160 MHz on a 40 MHz bus was a common overclock and "5x86/P90" was used by a number of BIOSes to refer to that configuration*/
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -479,9 +526,9 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "Cx486DX2",
|
||||
.internal_name = "cx486dx2",
|
||||
.cpus = (const CPU[]) {
|
||||
{"50", CPU_Cx486DX2, fpus_internal, 50000000, 2.0, 5000, 0x430, 0, 0x081b, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6},
|
||||
{"66", CPU_Cx486DX2, fpus_internal, 66666666, 2.0, 5000, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8},
|
||||
{"80", CPU_Cx486DX2, fpus_internal, 80000000, 2.0, 5000, 0x430, 0, 0x311b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10},
|
||||
{"50", CPU_Cx486DX, fpus_internal, 50000000, 2.0, 5000, 0x430, 0, 0x081b, CPU_SUPPORTS_DYNAREC, 8, 8, 6, 6, 6},
|
||||
{"66", CPU_Cx486DX, fpus_internal, 66666666, 2.0, 5000, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 12,12, 6, 6, 8},
|
||||
{"80", CPU_Cx486DX, fpus_internal, 80000000, 2.0, 5000, 0x430, 0, 0x311b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -490,8 +537,8 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "Cx486DX4",
|
||||
.internal_name = "cx486dx4",
|
||||
.cpus = (const CPU[]) {
|
||||
{"75", CPU_Cx486DX4, fpus_internal, 75000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9},
|
||||
{"100", CPU_Cx486DX4, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12},
|
||||
{"75", CPU_Cx486DX, fpus_internal, 75000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 12,12, 9, 9, 9},
|
||||
{"100", CPU_Cx486DX, fpus_internal, 100000000, 3.0, 5000, 0x480, 0, 0x361f, CPU_SUPPORTS_DYNAREC, 15,15, 9, 9, 12},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
@@ -522,7 +569,7 @@ const cpu_family_t cpu_families[] = {
|
||||
.name = "STPC-DX2",
|
||||
.internal_name = "stpc_dx2",
|
||||
.cpus = (const CPU[]) {
|
||||
{"133", CPU_Cx486DX2, fpus_internal, 133333333, 2.0, 3300, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10},
|
||||
{"133", CPU_Cx486DX, fpus_internal, 133333333, 2.0, 3300, 0x430, 0, 0x0b1b, CPU_SUPPORTS_DYNAREC, 14,14, 6, 6, 10},
|
||||
{"", 0}
|
||||
}
|
||||
}, {
|
||||
|
@@ -281,7 +281,7 @@ reset_common(int hard)
|
||||
smi_block = 0;
|
||||
|
||||
if (hard) {
|
||||
smbase = is_486_org ? 0x00060000 : 0x00030000;
|
||||
smbase = 0x00030000;
|
||||
ppi_reset();
|
||||
}
|
||||
in_sys = 0;
|
||||
|
@@ -1061,7 +1061,7 @@ write_output(atkbd_t *dev, uint8_t val)
|
||||
/* Pin 0 selected. */
|
||||
softresetx86(); /*Pulse reset!*/
|
||||
cpu_set_edx();
|
||||
smbase = is_486_org ? 0x00060000 : 0x00030000;
|
||||
smbase = 0x00030000;
|
||||
}
|
||||
}
|
||||
/* Mask off the A20 stuff because we use mem_a20_key directly for that. */
|
||||
|
@@ -81,7 +81,7 @@ machine_init_ex(int m)
|
||||
|
||||
/* Reset the memory state. */
|
||||
mem_reset();
|
||||
smbase = is_486_org ? 0x00060000 : 0x00030000;
|
||||
smbase = 0x00030000;
|
||||
|
||||
lpt_init();
|
||||
}
|
||||
|
@@ -240,7 +240,7 @@ const machine_t machines[] = {
|
||||
{ "[SiS 496] Lucky Star LS-486E", "ls486e", MACHINE_TYPE_486, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_ls486e_init, NULL },
|
||||
{ "[SiS 496] Micronics M4Li", "m4li", MACHINE_TYPE_486, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 1024, 131072, 1024, 127, machine_at_m4li_init, NULL },
|
||||
{ "[SiS 496] Rise Computer R418", "r418", MACHINE_TYPE_486, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 261120, 1024, 255, machine_at_r418_init, NULL },
|
||||
{ "[SiS 496] Soyo 4SA2", "4sa2", MACHINE_TYPE_486, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 261120, 1024, 255, machine_at_4sa2_init, NULL },
|
||||
{ "[SiS 496] Soyo 4SA2", "4sa2", MACHINE_TYPE_486, CPU_PKG_SOCKET3, CPU_BLOCK(CPU_i486SX, CPU_i486DX, CPU_Am486SX, CPU_Am486DX), 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 261120, 1024, 255, machine_at_4sa2_init, NULL },
|
||||
{ "[SiS 496] Zida Tomato 4DP", "4dps", MACHINE_TYPE_486, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 261120, 1024, 255, machine_at_4dps_init, NULL },
|
||||
{ "[UMC 8881] A-Trend ATC-1415", "atc1415", MACHINE_TYPE_486, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 65536, 1024, 255, machine_at_atc1415_init, NULL },
|
||||
{ "[UMC 8881] ECS Elite UM8810PAIO", "ecs486", MACHINE_TYPE_486, CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_PCI | MACHINE_IDE_DUAL, 1024, 131072, 1024, 255, machine_at_ecs486_init, NULL },
|
||||
|
Reference in New Issue
Block a user