Add initial Mazovia 1016 emulation
This commit is contained in:
@@ -240,13 +240,13 @@ cpu_io(int bits, int out, uint16_t port)
|
||||
int old_cycles = cycles;
|
||||
|
||||
if (out) {
|
||||
wait(4, 1);
|
||||
wait(is_mazovia ? 5 : 4, 1);
|
||||
if (bits == 16) {
|
||||
if (is8086 && !(port & 1)) {
|
||||
old_cycles = cycles;
|
||||
outw(port, AX);
|
||||
} else {
|
||||
wait(4, 1);
|
||||
wait(is_mazovia ? 5 : 4, 1);
|
||||
old_cycles = cycles;
|
||||
outb(port++, AL);
|
||||
outb(port, AH);
|
||||
@@ -256,13 +256,13 @@ cpu_io(int bits, int out, uint16_t port)
|
||||
outb(port, AL);
|
||||
}
|
||||
} else {
|
||||
wait(4, 1);
|
||||
wait(is_mazovia ? 5 : 4, 1);
|
||||
if (bits == 16) {
|
||||
if (is8086 && !(port & 1)) {
|
||||
old_cycles = cycles;
|
||||
AX = inw(port);
|
||||
} else {
|
||||
wait(4, 1);
|
||||
wait(is_mazovia ? 5 : 4, 1);
|
||||
old_cycles = cycles;
|
||||
AL = inb(port++);
|
||||
AH = inb(port);
|
||||
|
||||
@@ -203,6 +203,7 @@ int cpu_override_interpreter;
|
||||
int CPUID;
|
||||
|
||||
int is186;
|
||||
int is_mazovia;
|
||||
int is_nec;
|
||||
int is286;
|
||||
int is386;
|
||||
@@ -517,6 +518,7 @@ cpu_set(void)
|
||||
|
||||
CPUID = cpu_s->cpuid_model;
|
||||
is8086 = (cpu_s->cpu_type > CPU_8088) && (cpu_s->cpu_type != CPU_V20) && (cpu_s->cpu_type != CPU_188);
|
||||
is_mazovia = (cpu_s->cpu_type == CPU_8086_MAZOVIA);
|
||||
is_nec = (cpu_s->cpu_type == CPU_V20) || (cpu_s->cpu_type == CPU_V30);
|
||||
is186 = (cpu_s->cpu_type == CPU_186) || (cpu_s->cpu_type == CPU_188) || (cpu_s->cpu_type == CPU_V20) || (cpu_s->cpu_type == CPU_V30);
|
||||
is286 = (cpu_s->cpu_type >= CPU_286);
|
||||
@@ -767,6 +769,7 @@ cpu_set(void)
|
||||
switch (cpu_s->cpu_type) {
|
||||
case CPU_8088:
|
||||
case CPU_8086:
|
||||
case CPU_8086_MAZOVIA:
|
||||
break;
|
||||
|
||||
case CPU_V20:
|
||||
|
||||
@@ -35,6 +35,7 @@ enum {
|
||||
enum {
|
||||
CPU_8088 = 1, /* 808x class CPUs */
|
||||
CPU_8086,
|
||||
CPU_8086_MAZOVIA,
|
||||
CPU_V20, /* NEC 808x class CPUs */
|
||||
CPU_V30,
|
||||
CPU_188, /* 18x class CPUs */
|
||||
@@ -87,28 +88,29 @@ enum {
|
||||
CPU_PKG_8088 = (1 << 0),
|
||||
CPU_PKG_8088_EUROPC = (1 << 1),
|
||||
CPU_PKG_8086 = (1 << 2),
|
||||
CPU_PKG_188 = (1 << 3),
|
||||
CPU_PKG_186 = (1 << 4),
|
||||
CPU_PKG_286 = (1 << 5),
|
||||
CPU_PKG_386SX = (1 << 6),
|
||||
CPU_PKG_386DX = (1 << 7),
|
||||
CPU_PKG_386DX_DESKPRO386 = (1 << 8),
|
||||
CPU_PKG_M6117 = (1 << 9),
|
||||
CPU_PKG_386SLC_IBM = (1 << 10),
|
||||
CPU_PKG_486SLC = (1 << 11),
|
||||
CPU_PKG_486SLC_IBM = (1 << 12),
|
||||
CPU_PKG_486BL = (1 << 13),
|
||||
CPU_PKG_486DLC = (1 << 14),
|
||||
CPU_PKG_SOCKET1 = (1 << 15),
|
||||
CPU_PKG_SOCKET3 = (1 << 16),
|
||||
CPU_PKG_SOCKET3_PC330 = (1 << 17),
|
||||
CPU_PKG_STPC = (1 << 18),
|
||||
CPU_PKG_SOCKET4 = (1 << 19),
|
||||
CPU_PKG_SOCKET5_7 = (1 << 20),
|
||||
CPU_PKG_SOCKET8 = (1 << 21),
|
||||
CPU_PKG_SLOT1 = (1 << 22),
|
||||
CPU_PKG_SLOT2 = (1 << 23),
|
||||
CPU_PKG_SOCKET370 = (1 << 24)
|
||||
CPU_PKG_8086_MAZOVIA = (1 << 3),
|
||||
CPU_PKG_188 = (1 << 4),
|
||||
CPU_PKG_186 = (1 << 5),
|
||||
CPU_PKG_286 = (1 << 6),
|
||||
CPU_PKG_386SX = (1 << 7),
|
||||
CPU_PKG_386DX = (1 << 8),
|
||||
CPU_PKG_386DX_DESKPRO386 = (1 << 9),
|
||||
CPU_PKG_M6117 = (1 << 10),
|
||||
CPU_PKG_386SLC_IBM = (1 << 11),
|
||||
CPU_PKG_486SLC = (1 << 12),
|
||||
CPU_PKG_486SLC_IBM = (1 << 13),
|
||||
CPU_PKG_486BL = (1 << 14),
|
||||
CPU_PKG_486DLC = (1 << 15),
|
||||
CPU_PKG_SOCKET1 = (1 << 16),
|
||||
CPU_PKG_SOCKET3 = (1 << 17),
|
||||
CPU_PKG_SOCKET3_PC330 = (1 << 18),
|
||||
CPU_PKG_STPC = (1 << 19),
|
||||
CPU_PKG_SOCKET4 = (1 << 20),
|
||||
CPU_PKG_SOCKET5_7 = (1 << 21),
|
||||
CPU_PKG_SOCKET8 = (1 << 22),
|
||||
CPU_PKG_SLOT1 = (1 << 23),
|
||||
CPU_PKG_SLOT2 = (1 << 24),
|
||||
CPU_PKG_SOCKET370 = (1 << 25)
|
||||
};
|
||||
|
||||
#define CPU_SUPPORTS_DYNAREC 1
|
||||
@@ -518,6 +520,7 @@ extern int is_p6;
|
||||
extern int is_cxsmm;
|
||||
extern int hascache;
|
||||
extern int isibm486;
|
||||
extern int is_mazovia;
|
||||
extern int is_nec;
|
||||
extern int is_rapidcad;
|
||||
extern int hasfpu;
|
||||
|
||||
@@ -373,6 +373,32 @@ const cpu_family_t cpu_families[] = {
|
||||
{ .name = "", 0 }
|
||||
}
|
||||
},
|
||||
{
|
||||
.package = CPU_PKG_8086_MAZOVIA,
|
||||
.manufacturer = "Kyiv Research Institute of Microdevices",
|
||||
.name = "K1810VM86",
|
||||
.internal_name = "8086_mazovia",
|
||||
.cpus = (const CPU[]) {
|
||||
{
|
||||
.name = "4.77",
|
||||
.cpu_type = CPU_8086_MAZOVIA,
|
||||
.fpus = fpus_8088,
|
||||
.rspeed = 4772728,
|
||||
.multi = 1,
|
||||
.voltage = 5000,
|
||||
.edx_reset = 0,
|
||||
.cpuid_model = 0,
|
||||
.cyrix_id = 0,
|
||||
.cpu_flags = CPU_ALTERNATE_XTAL,
|
||||
.mem_read_cycles = 0,
|
||||
.mem_write_cycles = 0,
|
||||
.cache_read_cycles = 0,
|
||||
.cache_write_cycles = 0,
|
||||
.atclk_div = 1
|
||||
},
|
||||
{ .name = "", 0 }
|
||||
}
|
||||
},
|
||||
{
|
||||
.package = CPU_PKG_188,
|
||||
.manufacturer = "Intel",
|
||||
|
||||
@@ -939,6 +939,7 @@ extern int machine_xt_iskra3104_init(const machine_t *);
|
||||
extern int machine_xt_pravetz16_imko4_init(const machine_t *);
|
||||
extern int machine_xt_pravetz16s_cpu12p_init(const machine_t *);
|
||||
extern int machine_xt_micoms_xl7turbo_init(const machine_t *);
|
||||
extern int machine_xt_maz1016_init(const machine_t *);
|
||||
|
||||
/* m_xt_compaq.c */
|
||||
extern int machine_xt_compaq_deskpro_init(const machine_t *);
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include <86box/machine.h>
|
||||
#include <86box/chipset.h>
|
||||
#include <86box/port_6x.h>
|
||||
#include <86box/video.h>
|
||||
|
||||
extern const device_t vendex_xt_rtc_onboard_device;
|
||||
|
||||
@@ -330,6 +331,35 @@ machine_xt_iskra3104_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_xt_maz1016_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_interleaved("roms/machines/maz1016/e1.bin",
|
||||
"roms/machines/maz1016/e4.bin",
|
||||
0x000fc000, 49152, 0);
|
||||
|
||||
if (ret) {
|
||||
bios_load_aux_interleaved("roms/machines/maz1016/e2.bin",
|
||||
"roms/machines/maz1016/e5.bin",
|
||||
0x000f8000, 16384, 0);
|
||||
|
||||
bios_load_aux_interleaved("roms/machines/maz1016/e3.bin",
|
||||
"roms/machines/maz1016/e6b.bin",
|
||||
0x000f4000, 16384, 0);
|
||||
}
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
loadfont("roms/machines/maz1016/crt-8.bin", 0);
|
||||
|
||||
machine_xt_clone_init(model, 0);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_xt_pravetz16_imko4_init(const machine_t *model)
|
||||
{
|
||||
|
||||
@@ -2283,6 +2283,45 @@ const machine_t machines[] = {
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[8086] Mazovia 1016",
|
||||
.internal_name = "maz1016",
|
||||
.type = MACHINE_TYPE_8086,
|
||||
.chipset = MACHINE_CHIPSET_DISCRETE,
|
||||
.init = machine_xt_maz1016_init,
|
||||
.p1_handler = NULL,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_8086_MAZOVIA,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 0,
|
||||
.max_bus = 0,
|
||||
.min_voltage = 0,
|
||||
.max_voltage = 0,
|
||||
.min_multi = 0,
|
||||
.max_multi = 0
|
||||
},
|
||||
.bus_flags = MACHINE_PC,
|
||||
.flags = MACHINE_FLAGS_NONE,
|
||||
.ram = {
|
||||
.min = 256,
|
||||
.max = 640,
|
||||
.step = 384
|
||||
},
|
||||
.nvrmask = 0,
|
||||
.kbc_device = &keyboard_xtclone_device,
|
||||
.kbc_p1 = 0xff,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[8086] Olivetti M21/24/24SP",
|
||||
.internal_name = "m24",
|
||||
|
||||
Reference in New Issue
Block a user