Merge pull request #5152 from jriwanek-forks/ibmpc

IBM and RTC Changes
This commit is contained in:
Miran Grča 2025-01-16 07:36:44 +01:00 committed by GitHub
commit 39b05cb3e3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 241 additions and 58 deletions

View file

@ -1310,7 +1310,7 @@ static const device_config_t a6pak_config[] = {
.file_filter = "", .file_filter = "",
.spinner = { .spinner = {
.min = 0, .min = 0,
.max = 576, .max = 384,
.step = 64 .step = 64
}, },
.selection = { { 0 } } .selection = { { 0 } }

View file

@ -76,17 +76,23 @@
#include <86box/machine.h> #include <86box/machine.h>
#include <86box/io.h> #include <86box/io.h>
#include <86box/device.h> #include <86box/device.h>
#include <86box/mem.h>
#include <86box/nvr.h> #include <86box/nvr.h>
#include <86box/rom.h>
#include <86box/ui.h> #include <86box/ui.h>
#include <86box/plat.h> #include <86box/plat.h>
#include <86box/pic.h> #include <86box/pic.h>
#include <86box/isartc.h> #include <86box/isartc.h>
#define ISARTC_EV170 0 #define ISARTC_EV170 0
#define ISARTC_DTK 1 #define ISARTC_DTK 1
#define ISARTC_P5PAK 2 #define ISARTC_P5PAK 2
#define ISARTC_A6PAK 3 #define ISARTC_A6PAK 3
#define ISARTC_VENDEX 4 #define ISARTC_VENDEX 4
#define ISARTC_MM58167 10
#define ISARTC_ROM_MM58167_1 "roms/rtc/glatick/GLaTICK_0.8.5_NS_RP.ROM"
#define ISARTC_ROM_MM58167_2 "roms/rtc/glatick/GLaTICK_0.8.5_86B.ROM"
#define ISARTC_DEBUG 0 #define ISARTC_DEBUG 0
@ -101,6 +107,7 @@ typedef struct rtcdev_t {
int8_t irq; /* configured IRQ channel */ int8_t irq; /* configured IRQ channel */
int8_t base_addrsz; int8_t base_addrsz;
uint32_t base_addr; /* configured I/O address */ uint32_t base_addr; /* configured I/O address */
rom_t rom; /* BIOS ROM, If configured */
/* Fields for the specific driver. */ /* Fields for the specific driver. */
void (*f_wr)(uint16_t, uint8_t, void *); void (*f_wr)(uint16_t, uint8_t, void *);
@ -524,6 +531,14 @@ isartc_init(const device_t *info)
/* Do per-board initialization. */ /* Do per-board initialization. */
switch (dev->board) { switch (dev->board) {
case ISARTC_MM58167: /* Generic MM58167 RTC */
{
int rom_addr = device_get_config_hex20("bios_addr");
if (rom_addr != -1)
rom_init(&dev->rom, ISARTC_ROM_MM58167_1,
rom_addr, 0x0800, 0x7ff, 0, MEM_MAPPING_EXTERNAL);
}
case ISARTC_EV170: /* Everex EV-170 Magic I/O */ case ISARTC_EV170: /* Everex EV-170 Magic I/O */
dev->flags |= FLAG_YEAR80; dev->flags |= FLAG_YEAR80;
dev->base_addr = device_get_config_hex16("base"); dev->base_addr = device_get_config_hex16("base");
@ -614,24 +629,36 @@ isartc_close(void *priv)
static const device_config_t ev170_config[] = { static const device_config_t ev170_config[] = {
// clang-format off // clang-format off
{ {
"base", "Address", CONFIG_HEX16, "", 0x02C0, "", { 0 }, .name = "base",
{ .description = "Address",
{ "240H", 0x0240 }, .type = CONFIG_HEX16,
{ "2C0H", 0x02c0 }, .default_string = "",
{ "" } .default_int = 0x02C0,
.file_filter = "",
.spinner = { 0 },
.selection = {
{ .description = "240H", .value = 0x0240 },
{ .description = "2C0H", .value = 0x02c0 },
{ .description = "" }
}, },
}, },
{ {
"irq", "IRQ", CONFIG_SELECTION, "", -1, "", { 0 }, .name = "irq",
{ .description = "IRQ",
{ "Disabled", -1 }, .type = CONFIG_SELECTION,
{ "IRQ2", 2 }, .default_string = "",
{ "IRQ5", 5 }, .default_int = -1,
{ "IRQ7", 7 }, .file_filter = "",
{ "" } .spinner = { 0 },
.selection = {
{ .description = "Disabled", .value = -1 },
{ .description = "IRQ2", .value = 2 },
{ .description = "IRQ5", .value = 5 },
{ .description = "IRQ7", .value = 7 },
{ .description = "" }
}, },
}, },
{ "", "", -1 } { .name = "", .description = "", .type = CONFIG_END }
// clang-format on // clang-format on
}; };
@ -643,7 +670,7 @@ static const device_t ev170_device = {
.init = isartc_init, .init = isartc_init,
.close = isartc_close, .close = isartc_close,
.reset = NULL, .reset = NULL,
{ .available = NULL }, .available = NULL,
.speed_changed = NULL, .speed_changed = NULL,
.force_redraw = NULL, .force_redraw = NULL,
.config = ev170_config .config = ev170_config
@ -652,14 +679,20 @@ static const device_t ev170_device = {
static const device_config_t pii147_config[] = { static const device_config_t pii147_config[] = {
// clang-format off // clang-format off
{ {
"base", "Address", CONFIG_HEX16, "", 0x0240, "", { 0 }, .name = "base",
{ .description = "Address",
{ "Clock 1", 0x0240 }, .type = CONFIG_HEX16,
{ "Clock 2", 0x0340 }, .default_string = "",
{ "" } .default_int = 0x0240,
.file_filter = "",
.spinner = { 0 },
.selection = {
{ .description = "Clock 1", .value = 0x0240 },
{ .description = "Clock 2", .value = 0x0340 },
{ .description = "" }
}, },
}, },
{ "", "", -1 } { .name = "", .description = "", .type = CONFIG_END }
// clang-format on // clang-format on
}; };
@ -671,7 +704,7 @@ static const device_t pii147_device = {
.init = isartc_init, .init = isartc_init,
.close = isartc_close, .close = isartc_close,
.reset = NULL, .reset = NULL,
{ .available = NULL }, .available = NULL,
.speed_changed = NULL, .speed_changed = NULL,
.force_redraw = NULL, .force_redraw = NULL,
.config = pii147_config .config = pii147_config
@ -680,16 +713,22 @@ static const device_t pii147_device = {
static const device_config_t p5pak_config[] = { static const device_config_t p5pak_config[] = {
// clang-format off // clang-format off
{ {
"irq", "IRQ", CONFIG_SELECTION, "", -1, "", { 0 }, .name = "irq",
{ .description = "IRQ",
{ "Disabled", -1 }, .type = CONFIG_SELECTION,
{ "IRQ2", 2 }, .default_string = "",
{ "IRQ3", 3 }, .default_int = -1,
{ "IRQ5", 5 }, .file_filter = "",
{ "" } .spinner = { 0 },
.selection = {
{ .description = "Disabled", -1 },
{ .description = "IRQ2", 2 },
{ .description = "IRQ3", 3 },
{ .description = "IRQ5", 5 },
{ .description = "" }
}, },
}, },
{ "", "", -1 } { .name = "", .description = "", .type = CONFIG_END }
// clang-format on // clang-format on
}; };
@ -701,7 +740,7 @@ static const device_t p5pak_device = {
.init = isartc_init, .init = isartc_init,
.close = isartc_close, .close = isartc_close,
.reset = NULL, .reset = NULL,
{ .available = NULL }, .available = NULL,
.speed_changed = NULL, .speed_changed = NULL,
.force_redraw = NULL, .force_redraw = NULL,
.config = p5pak_config .config = p5pak_config
@ -710,16 +749,22 @@ static const device_t p5pak_device = {
static const device_config_t a6pak_config[] = { static const device_config_t a6pak_config[] = {
// clang-format off // clang-format off
{ {
"irq", "IRQ", CONFIG_SELECTION, "", -1, "", { 0 }, .name = "irq",
{ .description = "IRQ",
{ "Disabled", -1 }, .type = CONFIG_SELECTION,
{ "IRQ2", 2 }, .default_string = "",
{ "IRQ3", 3 }, .default_int = -1,
{ "IRQ5", 5 }, .file_filter = "",
{ "" } .spinner = { 0 },
.selection = {
{ .description = "Disabled", .value = -1 },
{ .description = "IRQ2", .value = 2 },
{ .description = "IRQ3", .value = 3 },
{ .description = "IRQ5", .value = 5 },
{ .description = "" }
}, },
}, },
{ "", "", -1 } { .name = "", .description = "", .type = CONFIG_END }
// clang-format on // clang-format on
}; };
@ -731,12 +776,96 @@ static const device_t a6pak_device = {
.init = isartc_init, .init = isartc_init,
.close = isartc_close, .close = isartc_close,
.reset = NULL, .reset = NULL,
{ .available = NULL }, .available = NULL,
.speed_changed = NULL, .speed_changed = NULL,
.force_redraw = NULL, .force_redraw = NULL,
.config = a6pak_config .config = a6pak_config
}; };
static const device_config_t mm58167_config[] = {
// clang-format off
{
.name = "base",
.description = "Address",
.type = CONFIG_HEX16,
.default_string = "",
.default_int = 0x02C0,
.file_filter = "",
.spinner = { 0 },
.selection = {
{ "240H", 0x0240 },
{ "2C0H", 0x02c0 },
{ "340H", 0x0340 },
{ "" }
},
},
{
.name = "irq",
.description = "IRQ",
.type = CONFIG_SELECTION,
.default_string = "",
.default_int = -1,
.file_filter = "",
.spinner = { 0 },
.selection = {
{ "Disabled", -1 },
{ "IRQ2", 2 },
{ "IRQ5", 5 },
{ "IRQ7", 7 },
{ "" }
},
},
{
.name = "bios_addr",
.description = "BIOS Address",
.type = CONFIG_HEX20,
.default_string = "",
.default_int = 0xcc000,
.file_filter = "",
.spinner = { 0 },
.selection = {
{ .description = "Disabled", .value = -1 },
{ .description = "C800H", .value = 0xc8000 },
{ .description = "CA00H", .value = 0xca000 },
{ .description = "CC00H", .value = 0xcc000 },
{ .description = "CE00H", .value = 0xce000 },
{ .description = "D000H", .value = 0xd0000 },
{ .description = "D200H", .value = 0xd2000 },
{ .description = "D400H", .value = 0xd4000 },
{ .description = "D600H", .value = 0xd6000 },
{ .description = "D800H", .value = 0xd8000 },
{ .description = "DA00H", .value = 0xda000 },
{ .description = "DC00H", .value = 0xdc000 },
{ .description = "DE00H", .value = 0xde000 },
{ .description = "E000H", .value = 0xe0000 },
{ .description = "E200H", .value = 0xe2000 },
{ .description = "E400H", .value = 0xe4000 },
{ .description = "E600H", .value = 0xe6000 },
{ .description = "E800H", .value = 0xe8000 },
{ .description = "EA00H", .value = 0xea000 },
{ .description = "EC00H", .value = 0xec000 },
{ .description = "EE00H", .value = 0xee000 },
{ .description = "" }
},
},
{ .name = "", .description = "", .type = CONFIG_END }
// clang-format on
};
static const device_t mm58167_device = {
.name = "Generic MM58167 RTC",
.internal_name = "rtc_mm58167",
.flags = DEVICE_ISA,
.local = ISARTC_MM58167,
.init = isartc_init,
.close = isartc_close,
.reset = NULL,
.available = NULL,
.speed_changed = NULL,
.force_redraw = NULL,
.config = mm58167_config
};
/* Onboard RTC devices */ /* Onboard RTC devices */
const device_t vendex_xt_rtc_onboard_device = { const device_t vendex_xt_rtc_onboard_device = {
.name = "National Semiconductor MM58167 (Vendex)", .name = "National Semiconductor MM58167 (Vendex)",
@ -746,7 +875,7 @@ const device_t vendex_xt_rtc_onboard_device = {
.init = isartc_init, .init = isartc_init,
.close = isartc_close, .close = isartc_close,
.reset = NULL, .reset = NULL,
{ .available = NULL }, .available = NULL,
.speed_changed = NULL, .speed_changed = NULL,
.force_redraw = NULL, .force_redraw = NULL,
.config = NULL .config = NULL
@ -756,12 +885,13 @@ static const struct {
const device_t *dev; const device_t *dev;
} boards[] = { } boards[] = {
// clang-format off // clang-format off
{ &device_none }, { &device_none },
{ &ev170_device }, { &ev170_device },
{ &pii147_device }, { &pii147_device },
{ &p5pak_device }, { &p5pak_device },
{ &a6pak_device }, { &a6pak_device },
{ NULL }, { &mm58167_device },
{ NULL }
// clang-format on // clang-format on
}; };

View file

@ -153,6 +153,29 @@ machine_at_ps2_ide_init(const machine_t *model)
static const device_config_t ibmat_config[] = { static const device_config_t ibmat_config[] = {
// clang-format off // clang-format off
{
.name = "bios",
.description = "BIOS Version",
.type = CONFIG_BIOS,
.default_string = "ibm5170_111585",
.default_int = 0,
.file_filter = "",
.spinner = { 0 },
.bios = {
{ .name = "62X082x (11/15/85)", .internal_name = "ibm5170_111585", .bios_type = BIOS_NORMAL,
.files_no = 2, .local = 0, .size = 65536, .files = { "roms/machines/ibmat/BIOS_5170_15NOV85_U27.BIN", "roms/machines/ibmat/BIOS_5170_15NOV85_U47.BIN", "" } },
{ .name = "61X9266 (11/15/85) (Alt)", .internal_name = "ibm5170_111585_alt", .bios_type = BIOS_NORMAL,
.files_no = 2, .local = 0, .size = 65536, .files = { "roms/machines/ibmat/BIOS_5170_15NOV85_U27_61X9266.BIN", "roms/machines/ibmat/BIOS_5170_15NOV85_U47_61X9265.BIN", "" } },
{ .name = "648009x (06/10/85)", .internal_name = "ibm5170_061085", .bios_type = BIOS_NORMAL,
.files_no = 2, .local = 0, .size = 65536, .files = { "roms/machines/ibmat/BIOS_5170_10JUN85_U27.BIN", "roms/machines/ibmat/BIOS_5170_10JUN85_U47.BIN", "" } },
{ .name = "618102x (01/10/84)", .internal_name = "ibm5170_011084", .bios_type = BIOS_NORMAL,
.files_no = 2, .local = 0, .size = 65536, .files = { "roms/machines/ibmat/BIOS_5170_10JAN84_U27.BIN", "roms/machines/ibmat/BIOS_5170_10JAN84_U47.BIN", "" } },
{ .files_no = 0 }
},
},
{ {
.name = "enable_5161", .name = "enable_5161",
.description = "IBM 5161 Expansion Unit", .description = "IBM 5161 Expansion Unit",
@ -180,17 +203,21 @@ const device_t ibmat_device = {
int int
machine_at_ibm_init(const machine_t *model) machine_at_ibm_init(const machine_t *model)
{ {
int ret; int ret = 0;
uint8_t enable_5161; uint8_t enable_5161;
const char *fn[2];
/* No ROMs available. */
if (!device_available(model->device))
return ret;
device_context(model->device); device_context(model->device);
enable_5161 = machine_get_config_int("enable_5161"); enable_5161 = machine_get_config_int("enable_5161");
fn[0] = device_get_bios_file(model->device, device_get_config_bios("bios"), 0);
fn[1] = device_get_bios_file(model->device, device_get_config_bios("bios"), 1);
ret = bios_load_interleaved(fn[0], fn[1], 0x000f0000, 65536, 0);
device_context_restore(); device_context_restore();
ret = bios_load_interleaved("roms/machines/ibmat/62x0820.u27",
"roms/machines/ibmat/62x0821.u47",
0x000f0000, 65536, 0);
if (bios_only || !ret) if (bios_only || !ret)
return ret; return ret;

View file

@ -74,6 +74,13 @@ static const device_config_t ibmpc_config[] = {
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc/BIOS_IBM5150_19OCT81_5700671_U33.BIN", "" } }, .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc/BIOS_IBM5150_19OCT81_5700671_U33.BIN", "" } },
{ .name = "5700051 (04/24/81)", .internal_name = "ibm5150_5700051", .bios_type = BIOS_NORMAL, { .name = "5700051 (04/24/81)", .internal_name = "ibm5150_5700051", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc/BIOS_IBM5150_24APR81_5700051_U33.BIN", "" } }, .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc/BIOS_IBM5150_24APR81_5700051_U33.BIN", "" } },
// GlaBIOS for IBM PC
{ .name = "GlaBIOS 0.2.5 (8088)", .internal_name = "glabios_025_8088", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.2.5_8P.ROM", "" } },
{ .name = "GlaBIOS 0.2.5 (V20)", .internal_name = "glabios_025_v20", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.2.5_VP.ROM", "" } },
// The following are Diagnostic ROMs. // The following are Diagnostic ROMs.
{ .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL, { .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } }, .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } },
@ -177,6 +184,13 @@ static const device_config_t ibmpc82_config[] = {
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc82/BIOS_5150_27OCT82_1501476_U33.BIN", "" } }, .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc82/BIOS_5150_27OCT82_1501476_U33.BIN", "" } },
{ .name = "5000024 (08/16/82)", .internal_name = "ibm5150_5000024", .bios_type = BIOS_NORMAL, { .name = "5000024 (08/16/82)", .internal_name = "ibm5150_5000024", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc82/BIOS_5150_16AUG82_5000024_U33.BIN", "" } }, .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/ibmpc82/BIOS_5150_16AUG82_5000024_U33.BIN", "" } },
// GlaBIOS for IBM PC
{ .name = "GlaBIOS 0.2.5 (8088)", .internal_name = "glabios_025_8088", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.2.5_8P.ROM", "" } },
{ .name = "GlaBIOS 0.2.5 (V20)", .internal_name = "glabios_025_v20", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.2.5_VP.ROM", "" } },
// The following are Diagnostic ROMs. // The following are Diagnostic ROMs.
{ .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL, { .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } }, .files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } },
@ -283,6 +297,12 @@ static const device_config_t ibmxt_config[] = {
{ .name = "5000026 (08/16/82)", .internal_name = "ibm5160_5000026_5000027", .bios_type = BIOS_NORMAL, { .name = "5000026 (08/16/82)", .internal_name = "ibm5160_5000026_5000027", .bios_type = BIOS_NORMAL,
.files_no = 2, .local = 0, .size = 65536, .files = { "roms/machines/ibmxt/BIOS_5160_16AUG82_U18_5000026.BIN", "roms/machines/ibmxt/BIOS_5160_16AUG82_U19_5000027.BIN", "" } }, .files_no = 2, .local = 0, .size = 65536, .files = { "roms/machines/ibmxt/BIOS_5160_16AUG82_U18_5000026.BIN", "roms/machines/ibmxt/BIOS_5160_16AUG82_U19_5000027.BIN", "" } },
#if 0 #if 0
// GlaBIOS for IBM XT
{ .name = "GlaBIOS 0.2.5 (8088)", .internal_name = "glabios_025_8088", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.2.5_8X.ROM", "" } },
{ .name = "GlaBIOS 0.2.5 (V20)", .internal_name = "glabios_025_v20", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.2.5_VX.ROM", "" } },
// The following are Diagnostic ROMs. // The following are Diagnostic ROMs.
{ .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL, { .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } }, .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } },
@ -399,6 +419,12 @@ static const device_config_t ibmxt86_config[] = {
{ .name = "1501512 (01/10/86) (Alt)", .internal_name = "ibm5160_011086_alt", .bios_type = BIOS_NORMAL, { .name = "1501512 (01/10/86) (Alt)", .internal_name = "ibm5160_011086_alt", .bios_type = BIOS_NORMAL,
.files_no = 2, .local = 0, .size = 65536, .files = { "roms/machines/ibmxt86/BIOS_5160_10JAN86_U18_62X0852_27256_F800.BIN", "roms/machines/ibmxt86/BIOS_5160_10JAN86_U19_62X0853_27256_F000.BIN", "" } }, .files_no = 2, .local = 0, .size = 65536, .files = { "roms/machines/ibmxt86/BIOS_5160_10JAN86_U18_62X0852_27256_F800.BIN", "roms/machines/ibmxt86/BIOS_5160_10JAN86_U19_62X0853_27256_F000.BIN", "" } },
#if 0 #if 0
// GlaBIOS for IBM XT
{ .name = "GlaBIOS 0.2.5 (8088)", .internal_name = "glabios_025_8088", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.2.5_8X.ROM", "" } },
{ .name = "GlaBIOS 0.2.5 (V20)", .internal_name = "glabios_025_v20", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 40960, .files = { "roms/machines/glabios/GLABIOS_0.2.5_VX.ROM", "" } },
// The following are Diagnostic ROMs. // The following are Diagnostic ROMs.
{ .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL, { .name = "Supersoft Diagnostics", .internal_name = "diag_supersoft", .bios_type = BIOS_NORMAL,
.files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } }, .files_no = 1, .local = 0, .size = 65536, .files = { "roms/machines/diagnostic/Supersoft_PCXT_8KB.bin", "" } },