diff --git a/src/disk/hdc_esdi_at.c b/src/disk/hdc_esdi_at.c index 619f0b9..5db9803 100644 --- a/src/disk/hdc_esdi_at.c +++ b/src/disk/hdc_esdi_at.c @@ -8,7 +8,7 @@ * * Driver for the ESDI controller (WD1007-vse1) for PC/AT. * - * Version: @(#)hdc_esdi_at.c 1.0.1 2018/02/14 + * Version: @(#)hdc_esdi_at.c 1.0.2 2018/02/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -60,7 +60,7 @@ #define HDC_TIME (TIMER_USEC*10LL) -#define BIOS_FILE L"roms/hdd/esdi_at/62-000279-061.bin" +#define ESDI_BIOS_FILE L"roms/hdd/esdi_at/62-000279-061.bin" #define STAT_ERR 0x01 #define STAT_INDEX 0x02 @@ -808,7 +808,7 @@ wd1007vse1_init(device_t *info) esdi->error = 1; rom_init(&esdi->bios_rom, - BIOS_FILE, 0xc8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL); + ESDI_BIOS_FILE, 0xc8000, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL); io_sethandler(0x01f0, 1, esdi_read, esdi_readw, NULL, @@ -849,7 +849,7 @@ wd1007vse1_close(void *priv) static int wd1007vse1_available(void) { - return(rom_present(BIOS_FILE)); + return(rom_present(ESDI_BIOS_FILE)); } diff --git a/src/emu.h b/src/emu.h index d51af3b..07e3c05 100644 --- a/src/emu.h +++ b/src/emu.h @@ -8,7 +8,7 @@ * * Main include file for the application. * - * Version: @(#)emu.h 1.0.1 2018/02/14 + * Version: @(#)emu.h 1.0.3 2018/02/28 * * Author: Fred N. van Kempen, * @@ -61,10 +61,15 @@ #define EMU_VERSION_W L"0.1.0" /* Filename and pathname info. */ -#define CONFIG_FILE L"varcem.cfg" -#define NVR_PATH L"nvr" +#define NVR_PATH L"nvr" +#define ROMS_PATH L"roms" +#define MACHINES_PATH L"machines" +#define VIDEO_PATH L"machines" #define SCREENSHOT_PATH L"screenshots" +#define CONFIG_FILE L"varcem.cfg" +#define BIOS_FILE L"bios.txt" + /*FIXME: move to where it's needed (ui) */ #if defined(ENABLE_BUSLOGIC_LOG) || \ @@ -180,9 +185,6 @@ extern void pc_reset_hard(void); extern void pc_reset(int hard); extern void pc_full_speed(void); extern void pc_speed_changed(void); -extern void pc_send_cad(void); -extern void pc_send_cae(void); -extern void pc_send_cab(void); extern void pc_thread(void *param); extern void pc_start(void); extern void pc_onesec(void); diff --git a/src/keyboard.c b/src/keyboard.c index 318b59a..904669d 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -8,7 +8,7 @@ * * General keyboard driver interface. * - * Version: @(#)keyboard.c 1.0.1 2018/02/14 + * Version: @(#)keyboard.c 1.0.2 2018/02/28 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -99,9 +99,10 @@ fake_shift_needed(uint16_t scan) case 0x151: case 0x152: case 0x153: - return 1; + return(1); + default: - return 0; + return(0); } } @@ -165,18 +166,23 @@ keyboard_input(int down, uint16_t scan) case 0x01c: /* Left Ctrl */ shift |= 0x01; break; + case 0x11c: /* Right Ctrl */ shift |= 0x10; break; + case 0x02a: /* Left Shift */ shift |= 0x02; break; + case 0x036: /* Right Shift */ shift |= 0x20; break; + case 0x038: /* Left Alt */ shift |= 0x03; break; + case 0x138: /* Right Alt */ shift |= 0x30; break; @@ -186,27 +192,35 @@ keyboard_input(int down, uint16_t scan) case 0x01c: /* Left Ctrl */ shift &= ~0x01; break; + case 0x11c: /* Right Ctrl */ shift &= ~0x10; break; + case 0x02a: /* Left Shift */ shift &= ~0x02; break; + case 0x036: /* Right Shift */ shift &= ~0x20; break; + case 0x038: /* Left Alt */ shift &= ~0x03; break; + case 0x138: /* Right Alt */ shift &= ~0x30; break; + case 0x03a: /* Caps Lock */ caps_lock ^= 1; break; + case 0x045: num_lock ^= 1; break; + case 0x046: scroll_lock ^= 1; break; @@ -214,11 +228,19 @@ keyboard_input(int down, uint16_t scan) } } - /* NOTE: Shouldn't this be some sort of bit shift? An array of 8 unsigned 64-bit integers - should be enough. */ - /* recv_key[scan >> 6] |= ((uint64_t) down << ((uint64_t) scan & 0x3fLL)); */ + /* + * NOTE: Shouldn't this be some sort of bit shift? + * An array of 8 unsigned 64-bit integers should be enough. + */ +#if 0 + recv_key[scan >> 6] |= ((uint64_t) down << ((uint64_t) scan & 0x3fLL)); +#endif + +#if 0 + pclog("Received scan code: %03X (%s)\n", + scan & 0x1ff, down ? "down" : "up"); +#endif - /* pclog("Received scan code: %03X (%s)\n", scan & 0x1ff, down ? "down" : "up"); */ recv_key[scan & 0x1ff] = down; key_process(scan & 0x1ff, down); @@ -231,49 +253,54 @@ keyboard_do_break(uint16_t scan) scancode *codes = scan_table; if (AT && ((keyboard_mode & 3) == 3)) { - if (!keyboard_set3_all_break && - !recv_key[scan] && + if (!keyboard_set3_all_break && !recv_key[scan] && !(keyboard_set3_flags[codes[scan].mk[0]] & 2)) - return 0; - else - return 1; - } else - return 1; + return(0); + else + return(1); + } + + return(1); } -/* Also called by the emulated keyboard controller to update the states of - Caps Lock, Num Lock, and Scroll Lock when receving the "Set keyboard LEDs" - command. */ +/* + * Also called by the emulated keyboard controller to update the states + * of Caps Lock, Num Lock, and Scroll Lock when receving the "Set LEDs" + * keyboard command. + */ void keyboard_update_states(uint8_t cl, uint8_t nl, uint8_t sl) { - caps_lock = cl; - num_lock = nl; - scroll_lock = sl; + caps_lock = cl; + num_lock = nl; + scroll_lock = sl; } uint8_t keyboard_get_shift(void) { - return shift; + return(shift); } void keyboard_get_states(uint8_t *cl, uint8_t *nl, uint8_t *sl) { - if (cl) - *cl = caps_lock; - if (nl) - *nl = num_lock; - if (sl) - *sl = scroll_lock; + if (cl) + *cl = caps_lock; + if (nl) + *nl = num_lock; + if (sl) + *sl = scroll_lock; } -/* Called by the UI to update the states of Caps Lock, Num Lock, and Scroll Lock. */ +/* + * Called by the UI to update the states of Caps Lock, + * Num Lock, and Scroll Lock. + */ void keyboard_set_states(uint8_t cl, uint8_t nl, uint8_t sl) { @@ -321,7 +348,57 @@ keyboard_set_states(uint8_t cl, uint8_t nl, uint8_t sl) int keyboard_recv(uint16_t key) { - return recv_key[key]; + return(recv_key[key]); +} + + +/* Insert keystrokes into the machine's keyboard buffer. */ +void +keyboard_send_scan(uint8_t val) +{ + if (AT) + keyboard_at_adddata_keyboard_raw(val); + else + keyboard_send(val); +} + + +/* Send the machine a Control-Alt-DEL sequence. */ +void +keyboard_send_cad(void) +{ + keyboard_send_scan(29); /* Ctrl key pressed */ + keyboard_send_scan(56); /* Alt key pressed */ + keyboard_send_scan(83); /* Delete key pressed */ + keyboard_send_scan(157); /* Ctrl key released */ + keyboard_send_scan(184); /* Alt key released */ + keyboard_send_scan(211); /* Delete key released */ +} + + +/* Send the machine a Control-Alt-ESC sequence. */ +void +keyboard_send_cae(void) +{ + keyboard_send_scan(29); /* Ctrl key pressed */ + keyboard_send_scan(56); /* Alt key pressed */ + keyboard_send_scan(1); /* Esc key pressed */ + keyboard_send_scan(129); /* Esc key released */ + keyboard_send_scan(184); /* Alt key released */ + keyboard_send_scan(157); /* Ctrl key released */ +} + + +/* Send the machine a Control-Alt-Break sequence. */ +void +keyboard_send_cab(void) +{ + keyboard_send_scan(29); /* Ctrl key pressed */ + keyboard_send_scan(56); /* Alt key pressed */ + keyboard_send_scan(1); /* Esc key pressed */ + keyboard_send_scan(157); /* Ctrl key released */ + keyboard_send_scan(184); /* Alt key released */ + keyboard_send_scan(129); /* Esc key released */ } diff --git a/src/keyboard.h b/src/keyboard.h index 9fd26aa..c04b2e9 100644 --- a/src/keyboard.h +++ b/src/keyboard.h @@ -8,7 +8,7 @@ * * Definitions for the keyboard interface. * - * Version: @(#)keyboard.h 1.0.1 2018/02/14 + * Version: @(#)keyboard.h 1.0.2 2018/02/28 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -101,6 +101,10 @@ extern uint8_t keyboard_get_shift(void); extern void keyboard_get_states(uint8_t *cl, uint8_t *nl, uint8_t *sl); extern void keyboard_set_states(uint8_t cl, uint8_t nl, uint8_t sl); extern int keyboard_recv(uint16_t key); +extern void keyboard_send_scan(uint8_t val); +extern void keyboard_send_cad(void); +extern void keyboard_send_cae(void); +extern void keyboard_send_cab(void); extern int keyboard_isfsexit(void); extern int keyboard_ismsexit(void); diff --git a/src/lang/language.h b/src/lang/language.h index 8a15ac7..0251179 100644 --- a/src/lang/language.h +++ b/src/lang/language.h @@ -10,7 +10,7 @@ * * NOTE: FIXME: Strings 2176 and 2193 are same. * - * Version: @(#)language.h 1.0.2 2018/02/24 + * Version: @(#)language.h 1.0.3 2018/03/01 * * Author: Fred N. van Kempen, * @@ -51,9 +51,9 @@ /* String IDs. */ -#define IDS_STRINGS 2048 // "VARCem" -#define IDS_2049 2049 // "Error" -#define IDS_2050 2050 // "Fatal Error" +#define IDS_2048 2048 // "Error" +#define IDS_2049 2049 // "Fatal Error" +#define IDS_2050 2050 // "Configuration Error" #define IDS_2051 2051 // "This will reset the emulator.." #define IDS_2052 2052 // "DirectDraw Screenshot Error" #define IDS_2053 2053 // "Invalid number of sectors.." @@ -65,7 +65,7 @@ #define IDS_2059 2059 // "(Turbo)" #define IDS_2060 2060 // "On" #define IDS_2061 2061 // "Off" -#define IDS_2062 2062 // "VARCem was unable to find any.." +#define IDS_2062 2062 // "Changes saved, please restart.." #define IDS_2063 2063 // "Configured ROM set not avai.." #define IDS_2064 2064 // "Configured video BIOS not.." #define IDS_2065 2065 // "Machine" diff --git a/src/machine/machine.c b/src/machine/machine.c index 4f90c03..fe21bac 100644 --- a/src/machine/machine.c +++ b/src/machine/machine.c @@ -8,7 +8,7 @@ * * Handling of the emulated machines. * - * Version: @(#)machine.c 1.0.2 2018/02/24 + * Version: @(#)machine.c 1.0.3 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -55,9 +55,6 @@ #include "machine.h" -#define PATH_ROM_BIOS "roms/machines" - - int romset; int machine; int AT, PCI; @@ -66,8 +63,7 @@ int AT, PCI; void machine_init(void) { - char temp[1024]; - int i; + wchar_t temp[1024]; pclog("Initializing as \"%s\"\n", machine_getname()); @@ -78,19 +74,10 @@ machine_init(void) PCI = IS_ARCH(machine, MACHINE_PCI); /* Load the machine's ROM BIOS. */ -#if 0 - strcpy(temp, PATH_ROM_BIOS); - i = strlen(temp); -#ifdef _WIN32 - temp[i++] = '\\'; -#else - temp[i++] = '/'; -#endif - strcpy(&temp[i], machines[machine].bios_path); - rom_load_bios(temp); -#else - rom_load_bios(romset); -#endif + wcscpy(temp, MACHINES_PATH); + plat_path_slash(temp); + wcscat(temp, machines[machine].bios_path); + (void)rom_load_bios(temp, 0); /* Activate the ROM BIOS. */ mem_add_bios(); @@ -100,6 +87,48 @@ machine_init(void) } +/* Check if the machine's ROM files are present. */ +int +machine_available(int id) +{ + wchar_t temp[1024]; + int i; + + wcscpy(temp, MACHINES_PATH); + plat_path_slash(temp); + wcscat(temp, machines[id].bios_path); + i = rom_load_bios(temp, 1); + + return(i); +} + + +/* Check for the availability of all the defined machines. */ +int +machine_detect(void) +{ + int c, i; + + pclog("Scanning for ROM images:\n"); + + c = 0; + for (i=0; i * Miran Grca, @@ -63,7 +63,7 @@ typedef struct _machine_ { const char *name; int id; const char *internal_name; - const char *bios_path; + const wchar_t *bios_path; struct { const char *name; #ifdef EMU_CPU_H @@ -101,6 +101,8 @@ extern int machine_getmachine(int romset); extern char *machine_getname(void); extern char *machine_get_internal_name(void); extern int machine_get_machine_from_internal_name(char *s); +extern int machine_available(int id); +extern int machine_detect(void); extern void machine_init(void); #ifdef EMU_DEVICE_H extern device_t *machine_getdevice(int machine); diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 5fe6cb5..6c76e81 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -11,7 +11,7 @@ * NOTES: OpenAT wip for 286-class machine with open BIOS. * PS2_M80-486 wip, pending receipt of TRM's for machine. * - * Version: @(#)machine_table.c 1.0.2 2018/02/22 + * Version: @(#)machine_table.c 1.0.3 2018/02/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -53,139 +53,139 @@ machine_t machines[] = { - { "[8088] AMI XT clone", ROM_AMIXT, "amixt", "generic/ami/amixt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, - { "[8088] Compaq Portable", ROM_PORTABLE, "portable", "compaq/portable", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO, 128, 640, 128, 0, machine_xt_compaq_init, NULL, NULL }, - { "[8088] DTK XT clone", ROM_DTKXT, "dtk", "dtk/dtk", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, - { "[8088] IBM PC", ROM_IBMPC, "ibmpc", "ibm/ibmpc", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 32, 0, machine_xt_init, NULL, NULL }, - { "[8088] IBM PCjr", ROM_IBMPCJR, "ibmpcjr", "ibm/ibmpcjr", {{"", cpus_pcjr}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO, 128, 640, 128, 0, machine_pcjr_init, pcjr_get_device, NULL }, - { "[8088] IBM XT", ROM_IBMXT, "ibmxt", "ibm/ibmxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, - { "[8088] Generic XT clone", ROM_GENXT, "genxt", "generic/genxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, - { "[8088] Juko XT clone", ROM_JUKOPC, "jukopc", "juko/jukopc", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, - { "[8088] Phoenix XT clone", ROM_PXXT, "pxxt", "generic/phoenix/pxxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, - { "[8088] Schneider EuroPC", ROM_EUROPC, "europc", "schneider/europc", {{"Siemens",cpus_europc}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_HDC | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 0, machine_europc_init, NULL, NULL }, - { "[8088] Tandy 1000", ROM_TANDY, "tandy", "tandy/tandy", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 128, 640, 128, 0, machine_tandy1k_init, tandy1k_get_device, NULL }, - { "[8088] Tandy 1000 HX", ROM_TANDY1000HX, "tandy1000hx", "tandy/tandy1000hx", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 256, 640, 128, 0, machine_tandy1k_init, tandy1k_hx_get_device, NULL }, + { "[8088] AMI XT clone", ROM_AMIXT, "amixt", L"generic/ami/amixt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, + { "[8088] Compaq Portable", ROM_PORTABLE, "portable", L"compaq/portable", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO, 128, 640, 128, 0, machine_xt_compaq_init, NULL, NULL }, + { "[8088] DTK XT clone", ROM_DTKXT, "dtk", L"dtk/dtk", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, + { "[8088] IBM PC", ROM_IBMPC, "ibmpc", L"ibm/ibmpc", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 32, 0, machine_xt_init, NULL, NULL }, + { "[8088] IBM PCjr", ROM_IBMPCJR, "ibmpcjr", L"ibm/ibmpcjr", {{"", cpus_pcjr}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO, 128, 640, 128, 0, machine_pcjr_init, pcjr_get_device, NULL }, + { "[8088] IBM XT", ROM_IBMXT, "ibmxt", L"ibm/ibmxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, + { "[8088] Generic XT clone", ROM_GENXT, "genxt", L"generic/genxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, + { "[8088] Juko XT clone", ROM_JUKOPC, "jukopc", L"juko/jukopc", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, + { "[8088] Phoenix XT clone", ROM_PXXT, "pxxt", L"generic/phoenix/pxxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 64, 640, 64, 0, machine_xt_init, NULL, NULL }, + { "[8088] Schneider EuroPC", ROM_EUROPC, "europc", L"schneider/europc", {{"Siemens", cpus_europc}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_HDC | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 0, machine_europc_init, NULL, NULL }, + { "[8088] Tandy 1000", ROM_TANDY, "tandy", L"tandy/tandy", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 128, 640, 128, 0, machine_tandy1k_init, tandy1k_get_device, NULL }, + { "[8088] Tandy 1000 HX", ROM_TANDY1000HX, "tandy1000hx", L"tandy/tandy1000hx", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 256, 640, 128, 0, machine_tandy1k_init, tandy1k_hx_get_device, NULL }, #if defined(DEV_BRANCH) && defined(USE_LASERXT) - { "[8088] VTech Laser Turbo XT", ROM_LTXT, "ltxt", "vtech/ltxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 512, 512, 256, 0, machine_xt_laserxt_init, NULL, NULL }, + { "[8088] VTech Laser Turbo XT", ROM_LTXT, "ltxt", L"vtech/ltxt", {{"", cpus_8088}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 512, 512, 256, 0, machine_xt_laserxt_init, NULL, NULL }, #endif - { "[8086] Amstrad PC1512", ROM_PC1512, "pc1512", "amstrad/pc1512", {{"", cpus_pc1512}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 63, machine_amstrad_init, NULL, nvr_at_close }, - { "[8086] Amstrad PC1640", ROM_PC1640, "pc1640", "amstrad/pc1640", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 640, 640, 0, 63, machine_amstrad_init, NULL, nvr_at_close }, - { "[8086] Amstrad PC2086", ROM_PC2086, "pc2086", "amstrad/pc2086", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 640, 640, 0, 63, machine_amstrad_init, NULL, nvr_at_close }, - { "[8086] Amstrad PC3086", ROM_PC3086, "pc3086", "amstrad/pc3086", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 640, 640, 0, 63, machine_amstrad_init, NULL, nvr_at_close }, - { "[8086] Amstrad PC20(0)", ROM_PC200, "pc200", "amstrad/pc200", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 63, machine_amstrad_init, NULL, nvr_at_close }, - { "[8086] Olivetti M24", ROM_OLIM24, "olivetti_m24", "olivetti/olivetti_m24", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 128, 640, 128, 0, machine_olim24_init, NULL, NULL }, - { "[8086] Tandy 1000 SL/2", ROM_TANDY1000SL2, "tandy1000sl2", "tandy/tandy1000sl2", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 512, 768, 128, 0, machine_tandy1k_init, NULL, NULL }, + { "[8086] Amstrad PC1512", ROM_PC1512, "pc1512", L"amstrad/pc1512", {{"", cpus_pc1512}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 63, machine_amstrad_init, NULL, nvr_at_close }, + { "[8086] Amstrad PC1640", ROM_PC1640, "pc1640", L"amstrad/pc1640", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 640, 640, 0, 63, machine_amstrad_init, NULL, nvr_at_close }, + { "[8086] Amstrad PC2086", ROM_PC2086, "pc2086", L"amstrad/pc2086", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 640, 640, 0, 63, machine_amstrad_init, NULL, nvr_at_close }, + { "[8086] Amstrad PC3086", ROM_PC3086, "pc3086", L"amstrad/pc3086", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 640, 640, 0, 63, machine_amstrad_init, NULL, nvr_at_close }, + { "[8086] Amstrad PC20(0)", ROM_PC200, "pc200", L"amstrad/pc200", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 512, 640, 128, 63, machine_amstrad_init, NULL, nvr_at_close }, + { "[8086] Olivetti M24", ROM_OLIM24, "olivetti_m24", L"olivetti/olivetti_m24", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_VIDEO | MACHINE_MOUSE, 128, 640, 128, 0, machine_olim24_init, NULL, NULL }, + { "[8086] Tandy 1000 SL/2", ROM_TANDY1000SL2, "tandy1000sl2", L"tandy/tandy1000sl2", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA, 512, 768, 128, 0, machine_tandy1k_init, NULL, NULL }, #if defined(DEV_BRANCH) && defined(USE_LASERXT) - { "[8086] VTech Laser XT3", ROM_LXT3, "lxt3", "vtech/lxt3", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 256, 512, 256, 0, machine_xt_laserxt_init, NULL, NULL }, + { "[8086] VTech Laser XT3", ROM_LXT3, "lxt3", L"vtech/lxt3", {{"", cpus_8086}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA, 256, 512, 256, 0, machine_xt_laserxt_init, NULL, NULL }, #endif - { "[286 ISA] AMI 286 clone", ROM_AMI286, "ami286", "generic/ami/ami286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_neat_ami_init, NULL, nvr_at_close }, - { "[286 ISA] Award 286 clone", ROM_AWARD286, "award286", "generic/award/award286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_scat_init, NULL, nvr_at_close }, - { "[286 ISA] Commodore PC 30 III", ROM_CMDPC30, "cmdpc30", "commodore/cmdpc30", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_cmdpc_init, NULL, nvr_at_close }, - { "[286 ISA] Compaq Portable II", ROM_PORTABLEII, "portableii", "compaq/portableii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_compaq_init, NULL, nvr_at_close }, + { "[286 ISA] AMI 286 clone", ROM_AMI286, "ami286", L"generic/ami/ami286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_neat_ami_init, NULL, nvr_at_close }, + { "[286 ISA] Award 286 clone", ROM_AWARD286, "award286", L"generic/award/award286", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_scat_init, NULL, nvr_at_close }, + { "[286 ISA] Commodore PC 30 III", ROM_CMDPC30, "cmdpc30", L"commodore/cmdpc30", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_cmdpc_init, NULL, nvr_at_close }, + { "[286 ISA] Compaq Portable II", ROM_PORTABLEII, "portableii", L"compaq/portableii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 640,16384, 128, 127, machine_at_compaq_init, NULL, nvr_at_close }, #if defined(DEV_BRANCH) && defined(USE_PORTABLE3) - { "[286 ISA] Compaq Portable III", ROM_PORTABLEIII, "portableiii", "compaq/portableiii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_VIDEO, 640,16384, 128, 127, machine_at_compaq_init, NULL, nvr_at_close }, + { "[286 ISA] Compaq Portable III", ROM_PORTABLEIII, "portableiii", L"compaq/portableiii", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_VIDEO, 640,16384, 128, 127, machine_at_compaq_init, NULL, nvr_at_close }, #endif - { "[286 ISA] Hyundai Super-286TR", ROM_SUPER286TR, "super286tr", "hyundai/super286tr", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_scat_init, NULL, nvr_at_close }, - { "[286 ISA] IBM AT", ROM_IBMAT, "ibmat", "ibm/ibmat", {{"", cpus_ibmat}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 63, machine_at_ibm_init, NULL, nvr_at_close }, - { "[286 ISA] IBM PS/1 model 2011", ROM_IBMPS1_2011, "ibmps1es", "ibm/ibmps1es", {{"", cpus_ps1_m2011}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 512,16384, 512, 127, machine_ps1_m2011_init, NULL, nvr_at_close }, - { "[286 ISA] IBM PS/2 model 30-286", ROM_IBMPS2_M30_286, "ibmps2_m30_286", "ibm/ibmps2_m30_286", {{"", cpus_ps2_m30_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 16, 1, 127, machine_ps2_m30_286_init, NULL, nvr_at_close }, - { "[286 ISA] IBM XT Model 286", ROM_IBMXT286, "ibmxt286", "ibm/ibmxt286", {{"", cpus_ibmxt286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 63, machine_at_ibm_init, NULL, nvr_at_close }, - { "[286 ISA] Samsung SPC-4200P", ROM_SPC4200P, "spc4200p", "samsung/spc4200p", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_PS2, 512, 2048, 128, 127, machine_at_scat_init, NULL, nvr_at_close }, + { "[286 ISA] Hyundai Super-286TR", ROM_SUPER286TR, "super286tr", L"hyundai/super286tr", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512,16384, 128, 127, machine_at_scat_init, NULL, nvr_at_close }, + { "[286 ISA] IBM AT", ROM_IBMAT, "ibmat", L"ibm/ibmat", {{"", cpus_ibmat}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 63, machine_at_ibm_init, NULL, nvr_at_close }, + { "[286 ISA] IBM PS/1 model 2011", ROM_IBMPS1_2011, "ibmps1es", L"ibm/ibmps1es", {{"", cpus_ps1_m2011}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 512,16384, 512, 127, machine_ps1_m2011_init, NULL, nvr_at_close }, + { "[286 ISA] IBM PS/2 model 30-286", ROM_IBMPS2_M30_286, "ibmps2_m30_286", L"ibm/ibmps2_m30_286", {{"", cpus_ps2_m30_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 16, 1, 127, machine_ps2_m30_286_init, NULL, nvr_at_close }, + { "[286 ISA] IBM XT Model 286", ROM_IBMXT286, "ibmxt286", L"ibm/ibmxt286", {{"", cpus_ibmxt286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 256,15872, 128, 63, machine_at_ibm_init, NULL, nvr_at_close }, + { "[286 ISA] Samsung SPC-4200P", ROM_SPC4200P, "spc4200p", L"samsung/spc4200p", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_PS2, 512, 2048, 128, 127, machine_at_scat_init, NULL, nvr_at_close }, #ifdef WALTJE - { "[286 ISA] OpenAT 286", ROM_OPENAT, "open_at", "generic/open_at", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512, 4096, 128, 127, machine_at_init, NULL, nvr_at_close }, + { "[286 ISA] OpenAT 286", ROM_OPENAT, "open_at", L"generic/open_at", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT, 512, 4096, 128, 127, machine_at_init, NULL, nvr_at_close }, #endif - { "[286 ISA] Toshiba 3100e", ROM_T3100E, "t3100e", "toshiba/t3100e", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1024, 5120, 256, 63, machine_at_t3100e_init, NULL, nvr_at_close }, + { "[286 ISA] Toshiba 3100e", ROM_T3100E, "t3100e", L"toshiba/t3100e", {{"", cpus_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1024, 5120, 256, 63, machine_at_t3100e_init, NULL, nvr_at_close }, - { "[286 MCA] IBM PS/2 model 50", ROM_IBMPS2_M50, "ibmps2_m50", "ibm/ibmps2_m50", {{"", cpus_ps2_m30_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 10, 1, 63, machine_ps2_model_50_init, NULL, nvr_at_close }, + { "[286 MCA] IBM PS/2 model 50", ROM_IBMPS2_M50, "ibmps2_m50", L"ibm/ibmps2_m50", {{"", cpus_ps2_m30_286}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 1, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 10, 1, 63, machine_ps2_model_50_init, NULL, nvr_at_close }, - { "[386SX ISA] AMI 386SX clone", ROM_AMI386SX, "ami386", "generic/ami/ami386", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512,16384, 128, 127, machine_at_headland_init, NULL, nvr_at_close }, - { "[386SX ISA] Amstrad MegaPC", ROM_MEGAPC, "megapc", "amstrad/megapc", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_VIDEO | MACHINE_HDC, 1, 16, 1, 127, machine_at_wd76c10_init, NULL, nvr_at_close }, - { "[386SX ISA] Award 386SX clone", ROM_AWARD386SX_OPTI495, "award386sx", "generic/award/award495", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_init, NULL, nvr_at_close }, - { "[386SX ISA] DTK 386SX clone", ROM_DTK386, "dtk386", "dtk/dtk386", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512,16384, 128, 127, machine_at_neat_init, NULL, nvr_at_close }, - { "[386SX ISA] IBM PS/1 model 2121", ROM_IBMPS1_2121, "ibmps1_2121", "ibm/ibmps1_2121", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 1, 6, 1, 127, machine_ps1_m2121_init, NULL, nvr_at_close }, - { "[386SX ISA] IBM PS/1 m.2121+ISA", ROM_IBMPS1_2121_ISA, "ibmps1_2121_isa", "ibm/ibmps1_2121", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 1, 6, 1, 127, machine_ps1_m2121_init, NULL, nvr_at_close }, + { "[386SX ISA] AMI 386SX clone", ROM_AMI386SX, "ami386", L"generic/ami/ami386", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512,16384, 128, 127, machine_at_headland_init, NULL, nvr_at_close }, + { "[386SX ISA] Amstrad MegaPC", ROM_MEGAPC, "megapc", L"amstrad/megapc", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_VIDEO | MACHINE_HDC, 1, 16, 1, 127, machine_at_wd76c10_init, NULL, nvr_at_close }, + { "[386SX ISA] Award 386SX clone", ROM_AWARD386SX_OPTI495, "award386sx", L"generic/award/award495", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_init, NULL, nvr_at_close }, + { "[386SX ISA] DTK 386SX clone", ROM_DTK386, "dtk386", L"dtk/dtk386", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 512,16384, 128, 127, machine_at_neat_init, NULL, nvr_at_close }, + { "[386SX ISA] IBM PS/1 model 2121", ROM_IBMPS1_2121, "ibmps1_2121", L"ibm/ibmps1_2121", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 1, 6, 1, 127, machine_ps1_m2121_init, NULL, nvr_at_close }, + { "[386SX ISA] IBM PS/1 m.2121+ISA", ROM_IBMPS1_2121_ISA, "ibmps1_2121_isa", L"ibm/ibmps1_2121", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 1, 6, 1, 127, machine_ps1_m2121_init, NULL, nvr_at_close }, - { "[386SX MCA] IBM PS/2 model 55SX", ROM_IBMPS2_M55SX, "ibmps2_m55sx", "ibm/ibmps2_m55sx", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 8, 1, 63, machine_ps2_model_55sx_init, NULL, nvr_at_close }, + { "[386SX MCA] IBM PS/2 model 55SX", ROM_IBMPS2_M55SX, "ibmps2_m55sx", L"ibm/ibmps2_m55sx", {{"Intel", cpus_i386SX}, {"AMD", cpus_Am386SX}, {"Cyrix", cpus_486SLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 8, 1, 63, machine_ps2_model_55sx_init, NULL, nvr_at_close }, - { "[386DX ISA] AMI 386DX clone", ROM_AMI386DX_OPTI495, "ami386dx", "generic/ami/ami386dx", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_ami_init, NULL, nvr_at_close }, - { "[386DX ISA] Amstrad MegaPC 386DX", ROM_MEGAPCDX, "megapcdx", "amstrad/megapc", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 1, 32, 1, 127, machine_at_wd76c10_init, NULL, nvr_at_close }, - { "[386DX ISA] Award 386DX clone", ROM_AWARD386DX_OPTI495, "award386dx", "generic/award/award495", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_init, NULL, nvr_at_close }, - { "[386DX ISA] MR 386DX clone", ROM_MR386DX_OPTI495, "mr386dx", "generic/microid/mr386dx", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_ami_init, NULL, nvr_at_close }, + { "[386DX ISA] AMI 386DX clone", ROM_AMI386DX_OPTI495, "ami386dx", L"generic/ami/ami386dx", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_ami_init, NULL, nvr_at_close }, + { "[386DX ISA] Amstrad MegaPC 386DX", ROM_MEGAPCDX, "megapcdx", L"amstrad/megapc", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 1, 32, 1, 127, machine_at_wd76c10_init, NULL, nvr_at_close }, + { "[386DX ISA] Award 386DX clone", ROM_AWARD386DX_OPTI495, "award386dx", L"generic/award/award495", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_init, NULL, nvr_at_close }, + { "[386DX ISA] MR 386DX clone", ROM_MR386DX_OPTI495, "mr386dx", L"generic/microid/mr386dx", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_ami_init, NULL, nvr_at_close }, #if defined(DEV_BRANCH) && defined(USE_PORTABLE3) - { "[386DX ISA] Compaq Portable III (386)", ROM_PORTABLEIII386, "portableiii386", "compaq/deskpro386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_HDC | MACHINE_VIDEO, 1, 14, 1, 127, machine_at_compaq_init, NULL, nvr_at_close }, + { "[386DX ISA] Compaq Portable III (386)", ROM_PORTABLEIII386, "portableiii386", L"compaq/deskpro386", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_ISA | MACHINE_AT | MACHINE_HDC | MACHINE_VIDEO, 1, 14, 1, 127, machine_at_compaq_init, NULL, nvr_at_close }, #endif - { "[386DX MCA] IBM PS/2 model 80", ROM_IBMPS2_M80, "ibmps2_m80", "ibm/ibmps2_m80", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 12, 1, 63, machine_ps2_model_80_init, NULL, nvr_at_close }, + { "[386DX MCA] IBM PS/2 model 80", ROM_IBMPS2_M80, "ibmps2_m80", L"ibm/ibmps2_m80", {{"Intel", cpus_i386DX}, {"AMD", cpus_Am386DX}, {"Cyrix", cpus_486DLC}, {"", NULL}, {"", NULL}}, 1, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 12, 1, 63, machine_ps2_model_80_init, NULL, nvr_at_close }, - { "[486 ISA] AMI 486 clone", ROM_AMI486, "ami486", "generic/ami/ami486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_ali1429_init, NULL, nvr_at_close }, - { "[486 ISA] AMI WinBIOS 486", ROM_WIN486, "win486", "generic/ami/win486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_ali1429_init, NULL, nvr_at_close }, - { "[486 ISA] Award 486 clone", ROM_AWARD486_OPTI495, "award486", "generic/award/award495", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_init, NULL, nvr_at_close }, - { "[486 ISA] DTK PKM-0038S E-2", ROM_DTK486, "dtk486", "dtk/dtk486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_dtk486_init, NULL, nvr_at_close }, - { "[486 ISA] IBM PS/1 model 2133", ROM_IBMPS1_2133, "ibmps1_2133", "ibm/ibmps1_2133", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 1, 64, 1, 127, machine_ps1_m2133_init, NULL, nvr_at_close }, + { "[486 ISA] AMI 486 clone", ROM_AMI486, "ami486", L"generic/ami/ami486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_ali1429_init, NULL, nvr_at_close }, + { "[486 ISA] AMI WinBIOS 486", ROM_WIN486, "win486", L"generic/ami/win486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_ali1429_init, NULL, nvr_at_close }, + { "[486 ISA] Award 486 clone", ROM_AWARD486_OPTI495, "award486", L"generic/award/award495", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 64, 1, 127, machine_at_opti495_init, NULL, nvr_at_close }, + { "[486 ISA] DTK PKM-0038S E-2", ROM_DTK486, "dtk486", L"dtk/dtk486", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 128, 1, 127, machine_at_dtk486_init, NULL, nvr_at_close }, + { "[486 ISA] IBM PS/1 model 2133", ROM_IBMPS1_2133, "ibmps1_2133", L"ibm/ibmps1_2133", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 1, 64, 1, 127, machine_ps1_m2133_init, NULL, nvr_at_close }, #ifdef WALTJE - { "[486 MCA] IBM PS/2 model 80-486", ROM_IBMPS2_M80_486, "ibmps2_m80-486", "ibm/ibmps2_m80", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 1, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 32, 1, 63, machine_ps2_model_80_486_init, NULL, nvr_at_close }, + { "[486 MCA] IBM PS/2 model 80-486", ROM_IBMPS2_M80_486, "ibmps2_m80-486", L"ibm/ibmps2_m80", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 1, MACHINE_MCA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC_PS2, 1, 32, 1, 63, machine_ps2_model_80_486_init, NULL, nvr_at_close }, #endif - { "[486 PCI] Rise Computer R418", ROM_R418, "r418", "rise/r418", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 255, 1, 127, machine_at_r418_init, NULL, nvr_at_close }, + { "[486 PCI] Rise Computer R418", ROM_R418, "r418", L"rise/r418", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 1, 255, 1, 127, machine_at_r418_init, NULL, nvr_at_close }, #if defined(DEV_BRANCH) && defined(USE_GREENB) - { "[486 VLB] Green-B 4GP V3.1", ROM_4GPV31, "4gpv31", "addtech/green-b", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT, 1, 128, 1, 127, machine_at_4gpv31_init, NULL, nvr_at_close }, + { "[486 VLB] Green-B 4GP V3.1", ROM_4GPV31, "4gpv31", L"addtech/green-b", {{"Intel", cpus_i486}, {"AMD", cpus_Am486}, {"Cyrix", cpus_Cx486}, {"", NULL}, {"", NULL}}, 0, MACHINE_ISA | MACHINE_VLB | MACHINE_AT, 1, 128, 1, 127, machine_at_4gpv31_init, NULL, nvr_at_close }, #endif - { "[Socket 4 LX] Intel Premiere/PCI", ROM_REVENGE, "revenge", "intel/revenge", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_batman_init, NULL, nvr_at_close }, + { "[Socket 4 LX] Intel Premiere/PCI", ROM_REVENGE, "revenge", L"intel/revenge", {{"Intel", cpus_Pentium5V}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_batman_init, NULL, nvr_at_close }, #if defined(DEV_BRANCH) && defined(USE_AMD_K) - { "[Socket 5 NX] Intel Premiere/PCI II", ROM_PLATO, "plato", "intel/plato", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_plato_init, NULL, nvr_at_close }, + { "[Socket 5 NX] Intel Premiere/PCI II", ROM_PLATO, "plato", L"intel/plato", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_plato_init, NULL, nvr_at_close }, - { "[Socket 5 FX] ASUS P/I-P54TP4XE", ROM_P54TP4XE, "p54tp4xe", "asus/p54tp4xe", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL, nvr_at_close }, - { "[Socket 5 FX] Intel Advanced/EV", ROM_ENDEAVOR, "endeavor", "intel/endeavor", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device, nvr_at_close }, - { "[Socket 5 FX] Intel Advanced/ZP", ROM_ZAPPA, "zappa", "intel/zappa", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_zappa_init, NULL, nvr_at_close }, - { "[Socket 5 FX] PC Partner MB500N", ROM_MB500N, "mb500n", "pcpartner/mb500n", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_mb500n_init, NULL, nvr_at_close }, - { "[Socket 5 FX] President Award 430FX PCI",ROM_PRESIDENT, "president", "president/president", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_president_init, NULL, nvr_at_close }, + { "[Socket 5 FX] ASUS P/I-P54TP4XE", ROM_P54TP4XE, "p54tp4xe", L"asus/p54tp4xe", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL, nvr_at_close }, + { "[Socket 5 FX] Intel Advanced/EV", ROM_ENDEAVOR, "endeavor", L"intel/endeavor", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device, nvr_at_close }, + { "[Socket 5 FX] Intel Advanced/ZP", ROM_ZAPPA, "zappa", L"intel/zappa", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_zappa_init, NULL, nvr_at_close }, + { "[Socket 5 FX] PC Partner MB500N", ROM_MB500N, "mb500n", L"pcpartner/mb500n", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_mb500n_init, NULL, nvr_at_close }, + { "[Socket 5 FX] President Award 430FX PCI",ROM_PRESIDENT, "president", L"president/president", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"AMD", cpus_K5}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_president_init, NULL, nvr_at_close }, - { "[Socket 7 FX] Intel Advanced/ATX", ROM_THOR, "thor", "intel/thor", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL, nvr_at_close }, - { "[Socket 7 FX] MR Intel Advanced/ATX", ROM_MRTHOR, "mrthor", "intel/mrthor", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL, nvr_at_close }, + { "[Socket 7 FX] Intel Advanced/ATX", ROM_THOR, "thor", L"intel/thor", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL, nvr_at_close }, + { "[Socket 7 FX] MR Intel Advanced/ATX", ROM_MRTHOR, "mrthor", L"intel/mrthor", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL, nvr_at_close }, - { "[Socket 7 HX] Acer M3a", ROM_ACERM3A, "acerm3a", "acer/acerm3a", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_acerm3a_init, NULL, nvr_at_close }, - { "[Socket 7 HX] Acer V35n", ROM_ACERV35N, "acerv35n", "acer/acerv35n", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_acerv35n_init, NULL, nvr_at_close }, - { "[Socket 7 HX] AOpen AP53", ROM_AP53, "ap53", "aopen/ap53", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_ap53_init, NULL, nvr_at_close }, - { "[Socket 7 HX] ASUS P/I-P55T2P4", ROM_P55T2P4, "p55t2p4", "asus/p55t2p4", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_p55t2p4_init, NULL, nvr_at_close }, - { "[Socket 7 HX] SuperMicro Super P55T2S", ROM_P55T2S, "p55t2s", "supermicro/p55t2s", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 127, machine_at_p55t2s_init, NULL, nvr_at_close }, + { "[Socket 7 HX] Acer M3a", ROM_ACERM3A, "acerm3a", L"acer/acerm3a", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_acerm3a_init, NULL, nvr_at_close }, + { "[Socket 7 HX] Acer V35n", ROM_ACERV35N, "acerv35n", L"acer/acerv35n", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_acerv35n_init, NULL, nvr_at_close }, + { "[Socket 7 HX] AOpen AP53", ROM_AP53, "ap53", L"aopen/ap53", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_ap53_init, NULL, nvr_at_close }, + { "[Socket 7 HX] ASUS P/I-P55T2P4", ROM_P55T2P4, "p55t2p4", L"asus/p55t2p4", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_p55t2p4_init, NULL, nvr_at_close }, + { "[Socket 7 HX] SuperMicro Super P55T2S", ROM_P55T2S, "p55t2s", L"supermicro/p55t2s", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 127, machine_at_p55t2s_init, NULL, nvr_at_close }, - { "[Socket 7 VX] ASUS P/I-P55TVP4", ROM_P55TVP4, "p55tvp4", "asus/p55tvp4", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p55tvp4_init, NULL, nvr_at_close }, - { "[Socket 7 VX] Award 430VX PCI", ROM_430VX, "430vx", "generic/award/430vx", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_i430vx_init, NULL, nvr_at_close }, - { "[Socket 7 VX] Epox P55-VA", ROM_P55VA, "p55va", "epox/p55va", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86},{"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p55va_init, NULL, nvr_at_close }, -#else - { "[Socket 5 NX] Intel Premiere/PCI II", ROM_PLATO, "plato", "intel/plato", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_plato_init, NULL, nvr_at_close }, + { "[Socket 7 VX] ASUS P/I-P55TVP4", ROM_P55TVP4, "p55tvp4", L"asus/p55tvp4", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p55tvp4_init, NULL, nvr_at_close }, + { "[Socket 7 VX] Award 430VX PCI", ROM_430VX, "430vx", L"generic/award/430vx", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_i430vx_init, NULL, nvr_at_close }, + { "[Socket 7 VX] Epox P55-VA", ROM_P55VA, "p55va", L"epox/p55va", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"AMD", cpus_K56}, {"Cyrix", cpus_6x86}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p55va_init, NULL, nvr_at_close }, +#else + { "[Socket 5 NX] Intel Premiere/PCI II", ROM_PLATO, "plato", L"intel/plato", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 2, 128, 2, 127, machine_at_plato_init, NULL, nvr_at_close }, - { "[Socket 5 FX] ASUS P/I-P54TP4XE", ROM_P54TP4XE, "p54tp4xe", "asus/p54tp4xe", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL, nvr_at_close }, - { "[Socket 5 FX] Intel Advanced/EV", ROM_ENDEAVOR, "endeavor", "intel/endeavor", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device, nvr_at_close }, - { "[Socket 5 FX] Intel Advanced/ZP", ROM_ZAPPA, "zappa", "intel/zappa", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_zappa_init, NULL, nvr_at_close }, - { "[Socket 5 FX] PC Partner MB500N", ROM_MB500N, "mb500n", "pcpartner/mb500n", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_mb500n_init, NULL, nvr_at_close }, - { "[Socket 5 FX] President Award 430FX PCI",ROM_PRESIDENT, "president", "president/president", {{ "Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_president_init, NULL, nvr_at_close }, + { "[Socket 5 FX] ASUS P/I-P54TP4XE", ROM_P54TP4XE, "p54tp4xe", L"asus/p54tp4xe", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_p54tp4xe_init, NULL, nvr_at_close }, + { "[Socket 5 FX] Intel Advanced/EV", ROM_ENDEAVOR, "endeavor", L"intel/endeavor", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC | MACHINE_VIDEO, 8, 128, 8, 127, machine_at_endeavor_init, at_endeavor_get_device, nvr_at_close }, + { "[Socket 5 FX] Intel Advanced/ZP", ROM_ZAPPA, "zappa", L"intel/zappa", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_zappa_init, NULL, nvr_at_close }, + { "[Socket 5 FX] PC Partner MB500N", ROM_MB500N, "mb500n", L"pcpartner/mb500n", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_mb500n_init, NULL, nvr_at_close }, + { "[Socket 5 FX] President Award 430FX PCI",ROM_PRESIDENT, "president", L"president/president", {{"Intel", cpus_PentiumS5}, {"IDT", cpus_WinChip}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_HDC, 8, 128, 8, 127, machine_at_president_init, NULL, nvr_at_close }, - { "[Socket 7 FX] Intel Advanced/ATX", ROM_THOR, "thor", "intel/thor", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL, nvr_at_close }, - { "[Socket 7 FX] MR Intel Advanced/ATX", ROM_MRTHOR, "mrthor", "intel/mrthor", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL, nvr_at_close }, + { "[Socket 7 FX] Intel Advanced/ATX", ROM_THOR, "thor", L"intel/thor", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL, nvr_at_close }, + { "[Socket 7 FX] MR Intel Advanced/ATX", ROM_MRTHOR, "mrthor", L"intel/mrthor", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_thor_init, NULL, nvr_at_close }, - { "[Socket 7 HX] Acer M3a", ROM_ACERM3A, "acerm3a", "acer/acerm3a", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_acerm3a_init, NULL, nvr_at_close }, - { "[Socket 7 HX] Acer V35n", ROM_ACERV35N, "acerv35n", "acer/acerv35n", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_acerv35n_init, NULL, nvr_at_close }, - { "[Socket 7 HX] AOpen AP53", ROM_AP53, "ap53", "aopen/ap53", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_ap53_init, NULL, nvr_at_close }, - { "[Socket 7 HX] ASUS P/I-P55T2P4", ROM_P55T2P4, "p55t2p4", "asus/p55t2p4", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_p55t2p4_init, NULL, nvr_at_close }, - { "[Socket 7 HX] SuperMicro Super P55T2S", ROM_P55T2S, "p55t2s", "supermicro/p55t2s", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 127, machine_at_p55t2s_init, NULL, nvr_at_close }, + { "[Socket 7 HX] Acer M3a", ROM_ACERM3A, "acerm3a", L"acer/acerm3a", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_acerm3a_init, NULL, nvr_at_close }, + { "[Socket 7 HX] Acer V35n", ROM_ACERV35N, "acerv35n", L"acer/acerv35n", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 192, 8, 127, machine_at_acerv35n_init, NULL, nvr_at_close }, + { "[Socket 7 HX] AOpen AP53", ROM_AP53, "ap53", L"aopen/ap53", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_ap53_init, NULL, nvr_at_close }, + { "[Socket 7 HX] ASUS P/I-P55T2P4", ROM_P55T2P4, "p55t2p4", L"asus/p55t2p4", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 512, 8, 127, machine_at_p55t2p4_init, NULL, nvr_at_close }, + { "[Socket 7 HX] SuperMicro Super P55T2S", ROM_P55T2S, "p55t2s", L"supermicro/p55t2s", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 768, 8, 127, machine_at_p55t2s_init, NULL, nvr_at_close }, - { "[Socket 7 VX] ASUS P/I-P55TVP4", ROM_P55TVP4, "p55tvp4", "asus/p55tvp4", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p55tvp4_init, NULL, nvr_at_close }, - { "[Socket 7 VX] Award 430VX PCI", ROM_430VX, "430vx", "generic/award/430vx", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_i430vx_init, NULL, nvr_at_close }, - { "[Socket 7 VX] Epox P55-VA", ROM_P55VA, "p55va", "epox/p55va", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p55va_init, NULL, nvr_at_close }, + { "[Socket 7 VX] ASUS P/I-P55TVP4", ROM_P55TVP4, "p55tvp4", L"asus/p55tvp4", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p55tvp4_init, NULL, nvr_at_close }, + { "[Socket 7 VX] Award 430VX PCI", ROM_430VX, "430vx", L"generic/award/430vx", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_i430vx_init, NULL, nvr_at_close }, + { "[Socket 7 VX] Epox P55-VA", ROM_P55VA, "p55va", L"epox/p55va", {{"Intel", cpus_Pentium}, {"IDT", cpus_WinChip}, {"Cyrix", cpus_6x86}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_VLB | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 128, 8, 127, machine_at_p55va_init, NULL, nvr_at_close }, #endif #if defined(DEV_BRANCH) && defined(USE_I686) - { "[Socket 8 FX] Tyan Titan-Pro AT", ROM_440FX, "440fx", "tyan/440fx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 127, machine_at_i440fx_init, NULL, nvr_at_close }, - { "[Socket 8 FX] Tyan Titan-Pro ATX", ROM_S1668, "tpatx", "tyan/tpatx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 127, machine_at_s1668_init, NULL, nvr_at_close }, + { "[Socket 8 FX] Tyan Titan-Pro AT", ROM_440FX, "440fx", L"tyan/440fx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 127, machine_at_i440fx_init, NULL, nvr_at_close }, + { "[Socket 8 FX] Tyan Titan-Pro ATX", ROM_S1668, "tpatx", L"tyan/tpatx", {{"Intel", cpus_PentiumPro}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, MACHINE_PCI | MACHINE_ISA | MACHINE_AT | MACHINE_PS2 | MACHINE_HDC, 8, 1024, 8, 127, machine_at_s1668_init, NULL, nvr_at_close }, #endif - { "", -1, "", NULL, {{"", 0}, {"", 0}, {"", 0}}, 0,0,0,0, 0 } + { "", -1, "", NULL, {{"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}, {"", NULL}}, 0, 0, 0, 0, 0, 0, NULL, NULL, NULL } }; diff --git a/src/network/net_ne2000.c b/src/network/net_ne2000.c index 4be6110..e592ff2 100644 --- a/src/network/net_ne2000.c +++ b/src/network/net_ne2000.c @@ -12,7 +12,7 @@ * - Realtek RTL8019AS (ISA 16-bit, PnP); * - Realtek RTL8029AS (PCI). * - * Version: @(#)net_ne2000.c 1.0.1 2018/02/14 + * Version: @(#)net_ne2000.c 1.0.2 2018/02/26 * * Based on @(#)ne2k.cc v1.56.2.1 2004/02/02 22:37:22 cbothamy * @@ -2348,7 +2348,7 @@ nic_rom_init(nic_t *dev, wchar_t *s) if (dev->bios_addr == 0) return; - if ((f = rom_fopen(s, L"rb")) != NULL) { + if ((f = rom_fopen(s)) != NULL) { fseek(f, 0L, SEEK_END); temp = ftell(f); fclose(f); diff --git a/src/pc.c b/src/pc.c index 65268e1..52e58e7 100644 --- a/src/pc.c +++ b/src/pc.c @@ -8,7 +8,7 @@ * * Main emulator module where most things are controlled. * - * Version: @(#)pc.c 1.0.2 2018/02/24 + * Version: @(#)pc.c 1.0.3 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -299,7 +299,7 @@ fatal(const char *fmt, ...) int pc_init(int argc, wchar_t *argv[]) { - wchar_t path[2048]; + wchar_t path[1024]; wchar_t *cfg = NULL, *p; char temp[128]; struct tm *info; @@ -587,7 +587,6 @@ pc_reload(wchar_t *fn) fdd_load(3, floppyfns[3]); mem_resize(); - rom_load_bios(romset); network_init(); pc_reset_hard_init(); @@ -598,67 +597,42 @@ pc_reload(wchar_t *fn) int pc_init_modules(void) { - int c, i; - - pclog("Scanning for ROM images:\n"); - for (c=0,i=0; i=0; c--) { - if (gfx_present[c]) { - gfxcard = c; - config_save(); + /* Whoops, selected video not available. */ + str = plat_get_string(IDS_2064); + mbstowcs(name, machine_getname(), sizeof_w(name)); + swprintf(temp, sizeof_w(temp), str, name); - /* This can loop if all cards now bad.. */ - goto again2; - } - } + /* Show the messagebox, and abort if 'No' was selected. */ + if (ui_msgbox(MBX_CONFIG, temp) == 1) return(0); + + /* OK, user wants to (re-)configure.. */ + return(2); } + /* + * At this point, we know that the selected machine and + * video card are available, so we can proceed with the + * initialization of things. + */ cpuspeed2 = (AT) ? 2 : 1; atfullspeed = 0; @@ -708,60 +682,6 @@ again2: } -/* Insert keystrokes into the machine's keyboard buffer. */ -// FIXME: move to keyboard.c */ -static void -pc_keyboard_send(uint8_t val) -{ - if (AT) - keyboard_at_adddata_keyboard_raw(val); - else - keyboard_send(val); -} - - -/* Send the machine a Control-Alt-DEL sequence. */ -// FIXME: move to keyboard.c */ -void -pc_send_cad(void) -{ - pc_keyboard_send(29); /* Ctrl key pressed */ - pc_keyboard_send(56); /* Alt key pressed */ - pc_keyboard_send(83); /* Delete key pressed */ - pc_keyboard_send(157); /* Ctrl key released */ - pc_keyboard_send(184); /* Alt key released */ - pc_keyboard_send(211); /* Delete key released */ -} - - -/* Send the machine a Control-Alt-ESC sequence. */ -// FIXME: move to keyboard.c */ -void -pc_send_cae(void) -{ - pc_keyboard_send(29); /* Ctrl key pressed */ - pc_keyboard_send(56); /* Alt key pressed */ - pc_keyboard_send(1); /* Esc key pressed */ - pc_keyboard_send(129); /* Esc key released */ - pc_keyboard_send(184); /* Alt key released */ - pc_keyboard_send(157); /* Ctrl key released */ -} - - -/* Send the machine a Control-Alt-Break sequence. */ -// FIXME: move to keyboard.c */ -void -pc_send_cab(void) -{ - pc_keyboard_send(29); /* Ctrl key pressed */ - pc_keyboard_send(56); /* Alt key pressed */ - pc_keyboard_send(1); /* Esc key pressed */ - pc_keyboard_send(157); /* Ctrl key released */ - pc_keyboard_send(184); /* Alt key released */ - pc_keyboard_send(129); /* Esc key released */ -} - - void pc_reset_hard_close(void) { @@ -936,7 +856,7 @@ pc_reset(int hard) if (hard) pc_reset_hard(); else - pc_send_cad(); + keyboard_send_cad(); plat_pause(0); } diff --git a/src/rom.c b/src/rom.c index a969f8b..d9f24ad 100644 --- a/src/rom.c +++ b/src/rom.c @@ -13,7 +13,7 @@ * - c386sx16 BIOS fails checksum * - the loadfont() calls should be done elsewhere * - * Version: @(#)rom.c 1.0.3 2018/02/22 + * Version: @(#)rom.c 1.0.4 2018/02/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -59,7 +59,7 @@ int romspresent[ROM_MAX]; FILE * -rom_fopen(wchar_t *fn, wchar_t *mode) +rom_fopen(wchar_t *fn) { wchar_t temp[1024]; @@ -67,7 +67,7 @@ rom_fopen(wchar_t *fn, wchar_t *mode) plat_put_backslash(temp); wcscat(temp, fn); - return(plat_fopen(temp, mode)); + return(plat_fopen(temp, L"rb")); } @@ -95,7 +95,7 @@ rom_present(wchar_t *fn) { FILE *f; - f = rom_fopen(fn, L"rb"); + f = rom_fopen(fn); if (f != NULL) { (void)fclose(f); return(1); @@ -105,6 +105,7 @@ rom_present(wchar_t *fn) } +/* Read a byte from some area in ROM. */ uint8_t rom_read(uint32_t addr, void *priv) { @@ -119,6 +120,7 @@ rom_read(uint32_t addr, void *priv) } +/* Read a word from some area in ROM. */ uint16_t rom_readw(uint32_t addr, void *priv) { @@ -133,6 +135,7 @@ rom_readw(uint32_t addr, void *priv) } +/* Read a double-word from some area in ROM. */ uint32_t rom_readl(uint32_t addr, void *priv) { @@ -151,7 +154,7 @@ rom_readl(uint32_t addr, void *priv) int rom_load_linear(wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr) { - FILE *f = rom_fopen(fn, L"rb"); + FILE *f = rom_fopen(fn); if (f == NULL) { pclog("ROM: image '%ls' not found\n", fn); @@ -160,13 +163,9 @@ rom_load_linear(wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr) /* Make sure we only look at the base-256K offset. */ if (addr >= 0x40000) - { addr = 0; - } - else - { + else addr &= 0x03ffff; - } (void)fseek(f, off, SEEK_SET); (void)fread(ptr+addr, sz, 1, f); @@ -180,8 +179,8 @@ rom_load_linear(wchar_t *fn, uint32_t addr, int sz, int off, uint8_t *ptr) int rom_load_interleaved(wchar_t *fnl, wchar_t *fnh, uint32_t addr, int sz, int off, uint8_t *ptr) { - FILE *fl = rom_fopen(fnl, L"rb"); - FILE *fh = rom_fopen(fnh, L"rb"); + FILE *fl = rom_fopen(fnl); + FILE *fh = rom_fopen(fnh); int c; if (fl == NULL || fh == NULL) { @@ -212,6 +211,7 @@ rom_load_interleaved(wchar_t *fnl, wchar_t *fnh, uint32_t addr, int sz, int off, } +/* Read and initialize an option ROM. */ int rom_init(rom_t *rom, wchar_t *fn, uint32_t addr, int sz, int mask, int off, uint32_t flags) { @@ -264,590 +264,3 @@ rom_init_interleaved(rom_t *rom, wchar_t *fnl, wchar_t *fnh, uint32_t addr, int return(0); } - - -/* Load the ROM BIOS image(s) for the selected machine into memory. */ -int -rom_load_bios(int rom_id) -{ - FILE *f; - - /* If not done yet, allocate a 128KB buffer for the BIOS ROM. */ - if (rom == NULL) - rom = (uint8_t *)malloc(131072); - memset(rom, 0xff, 131072); - - /* Default to a 64K ROM BIOS image. */ - biosmask = 0xffff; - - /* Zap the BIOS ROM EXTENSION area. */ - memset(romext, 0xff, 0x8000); - mem_mapping_disable(&romext_mapping); - - switch (rom_id) { - case ROM_IBMPC: /* IBM PC */ - if (! rom_load_linear( - L"roms/machines/ibm/ibmpc/pc102782.bin", - 0x00e000, 8192, 0, rom)) break; - - /* Try to load the (full) BASIC ROM. */ - if (rom_load_linear( - L"roms/machines/ibm/ibmpc/ibm-basic-1.10.rom", - 0x006000, 32768, 0, rom)) return(1); - - /* Nope. Try to load the first BASIC ROM image. */ - if (! rom_load_linear( - L"roms/machines/ibm/ibmpc/basicc11.f6", - 0x006000, 8192, 0, rom)) return(1); /* nope */ - if (! rom_load_linear( - L"roms/machines/ibm/ibmpc/basicc11.f8", - 0x008000, 8192, 0, rom)) break; /* nope */ - if (! rom_load_linear( - L"roms/machines/ibm/ibmpc/basicc11.fa", - 0x00a000, 8192, 0, rom)) break; /* nope */ - if (! rom_load_linear( - L"roms/machines/ibm/ibmpc/basicc11.fc", - 0x00c000, 8192, 0, rom)) break; /* nope */ - return(1); - - case ROM_IBMXT: /* IBM PX-XT */ - if (rom_load_linear( - L"roms/machines/ibm/ibmxt/xt.rom", - 0x000000, 65536, 0, rom)) return(1); - - if (! rom_load_linear( - L"roms/machines/ibm/ibmxt/5000027.u19", - 0x000000, 32768, 0, rom)) break; - if (rom_load_linear( - L"roms/machines/ibm/ibmxt/1501512.u18", - 0x008000, 32768, 0, rom)) return(1); - break; - - case ROM_IBMXT286: /* IBM PX-XT 286 */ - if (rom_load_interleaved( - L"roms/machines/ibm/ibmxt286/bios_5162_21apr86_u34_78x7460_27256.bin", - L"roms/machines/ibm/ibmxt286/bios_5162_21apr86_u35_78x7461_27256.bin", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_IBMPCJR: /* IBM PCjr */ - if (rom_load_linear( - L"roms/machines/ibm/ibmpcjr/bios.rom", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_IBMAT: /* IBM PC-AT */ - if (rom_load_interleaved( - L"roms/machines/ibm/ibmat/62x0820.u27", - L"roms/machines/ibm/ibmat/62x0821.u47", - 0x000000, 65536, 0, rom)) return(1); - break; - -#ifdef WALTJE - case ROM_OPENAT: /* PC/AT clone with OpenBIOS */ - if (rom_load_linear( - L"roms/machines/generic/open_at/bios.bin", - 0x000000, 65536, 0, rom)) return(1); - break; -#endif - - case ROM_GENXT: /* Generic PC-XT clone */ - if (rom_load_linear( - L"roms/machines/generic/genxt/pcxt.rom", - 0x00e000, 8192, 0, rom)) return(1); - break; - - case ROM_PC1512: /* Amstrad PC-1512 */ - if (! rom_load_interleaved( - L"roms/machines/amstrad/pc1512/40044v2.ic132", - L"roms/machines/amstrad/pc1512/40043v2.ic129", - 0x00c000, 16384, 0, rom)) break; - f = rom_fopen(L"roms/machines/amstrad/pc1512/40078.ic127", L"rb"); - if (f == NULL) break; - (void)fclose(f); - return(1); - - case ROM_PC1640: /* Amstrad PC-1640 */ - if (! rom_load_interleaved( - L"roms/machines/amstrad/pc1640/40044.v3", - L"roms/machines/amstrad/pc1640/40043.v3", - 0x00c000, 16384, 0, rom)) break; - f = rom_fopen(L"roms/machines/amstrad/pc1640/40100", L"rb"); - if (f == NULL) break; - (void)fclose(f); - return(1); - - case ROM_PC200: - if (! rom_load_interleaved( - L"roms/machines/amstrad/pc200/pc20v2.1", - L"roms/machines/amstrad/pc200/pc20v2.0", - 0x00c000, 16384, 0, rom)) break; - f = rom_fopen(L"roms/machines/amstrad/pc200/40109", L"rb"); - if (f == NULL) break; - (void)fclose(f); - return(1); - - case ROM_TANDY: - if (rom_load_linear( - L"roms/machines/tandy/tandy/tandy1t1.020", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_TANDY1000HX: - if (! rom_load_linear( - L"roms/machines/tandy/tandy1000hx/v020000.u12", - 0x000000, 0x20000, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_TANDY1000SL2: - if (rom_load_interleaved( - L"roms/machines/tandy/tandy1000sl2/8079047.hu1", - L"roms/machines/tandy/tandy1000sl2/8079048.hu2", - 0x000000, 65536, 0x30000/2, rom)) return(1); - break; - - case ROM_PORTABLE: - if (rom_load_linear( - L"roms/machines/compaq/portable/compaq portable plus 100666-001 rev c u47.bin", - 0x00e000, 8192, 0, rom)) return(1); - break; - - case ROM_PORTABLEII: - if (! rom_load_interleaved( - L"roms/machines/compaq/portableii/109740-001.rom", - L"roms/machines/compaq/portableii/109739-001.rom", - 0x008000, 32768, 0, rom)) break; - biosmask = 0x7fff; - return(1); - -#if defined(DEV_BRANCH) && defined(USE_PORTABLE3) - case ROM_PORTABLEIII: - case ROM_PORTABLEIII386: - if (rom_load_interleaved( - L"roms/machines/compaq/portableiii/109738-002.bin", - L"roms/machines/compaq/portableiii/109737-002.bin", - 0x000000, 65536, 0, rom)) return(1); - break; -#endif - - case ROM_DTKXT: - if (rom_load_linear( - L"roms/machines/dtk/dtk/dtk_erso_2.42_2764.bin", - 0x00e000, 8192, 0, rom)) return(1); - break; - - case ROM_OLIM24: - if (rom_load_interleaved( - L"roms/machines/olivetti/olivetti_m24/olivetti_m24_version_1.43_low.bin", - L"roms/machines/olivetti/olivetti_m24/olivetti_m24_version_1.43_high.bin", - 0x00c000, 16384, 0, rom)) return(1); - break; - - case ROM_PC2086: - if (! rom_load_interleaved( - L"roms/machines/amstrad/pc2086/40179.ic129", - L"roms/machines/amstrad/pc2086/40180.ic132", - 0x000000, 16384, 0, rom)) break; - f = rom_fopen(L"roms/machines/amstrad/pc2086/40186.ic171", L"rb"); - if (f == NULL) break; - (void)fclose(f); - biosmask = 0x3fff; - return(1); - - case ROM_PC3086: - if (! rom_load_linear( - L"roms/machines/amstrad/pc3086/fc00.bin", - 0x000000, 16384, 0, rom)) break; - f = rom_fopen(L"roms/machines/amstrad/pc3086/c000.bin", L"rb"); - if (f == NULL) break; - (void)fclose(f); - biosmask = 0x3fff; - return(1); - - case ROM_CMDPC30: - if (! rom_load_interleaved( - L"roms/machines/commodore/cmdpc30/commodore pc 30 iii even.bin", - L"roms/machines/commodore/cmdpc30/commodore pc 30 iii odd.bin", - 0x000000, 32768, 0, rom)) break; - biosmask = 0x7fff; - return(1); - - case ROM_AMI386SX: - if (rom_load_linear( - L"roms/machines/generic/ami/ami386/ami386.bin", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_AMI386DX_OPTI495: /* uses the OPTi 82C495 chipset */ - if (rom_load_linear( - L"roms/machines/generic/ami/ami386dx/opt495sx.ami", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_MR386DX_OPTI495: /* uses the OPTi 82C495 chipset */ - if (rom_load_linear( - L"roms/machines/generic/microid/mr386dx/opt495sx.mr", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_AWARD386SX_OPTI495: /* uses the OPTi 82C495 chipset */ - case ROM_AWARD386DX_OPTI495: /* uses the OPTi 82C495 chipset */ - case ROM_AWARD486_OPTI495: /* uses the OPTi 82C495 chipset */ - if (rom_load_linear( - L"roms/machines/generic/award/award495/opt495s.awa", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_AMI286: - if (rom_load_linear( - L"roms/machines/generic/ami/ami286/amic206.bin", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_AWARD286: - if (rom_load_linear( - L"roms/machines/generic/award/award286/award.bin", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_EUROPC: - if (rom_load_linear( - L"roms/machines/schneider/europc/50145", - 0x008000, 32768, 0, rom)) return(1); - break; - - case ROM_MEGAPC: - case ROM_MEGAPCDX: - if (rom_load_interleaved( - L"roms/machines/amstrad/megapc/41651-bios lo.u18", - L"roms/machines/amstrad/megapc/211253-bios hi.u19", - 0x000000, 65536, 0x08000, rom)) return(1); - break; - - case ROM_AMI486: - if (rom_load_linear( - L"roms/machines/generic/ami/ami486/ami486.bin", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_WIN486: - if (rom_load_linear( - L"roms/machines/generic/ami/win486/ali1429g.amw", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_430VX: - if (! rom_load_linear( - L"roms/machines/generic/award/430vx/55xwuq0e.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_REVENGE: - if (! rom_load_linear( - L"roms/machines/intel/revenge/1009af2_.bio", - 0x010000, 65536, 128, rom)) break; - if (! rom_load_linear( - L"roms/machines/intel/revenge/1009af2_.bi1", - 0x000000, 0x00c000, 128, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_ENDEAVOR: - if (! rom_load_linear( - L"roms/machines/intel/endeavor/1006cb0_.bio", - 0x010000, 65536, 128, rom)) break; - if (! rom_load_linear( - L"roms/machines/intel/endeavor/1006cb0_.bi1", - 0x000000, 0x00d000, 128, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_IBMPS1_2011: - if (! rom_load_linear( - L"roms/machines/ibm/ibmps1es/f80000.bin", - 0x000000, 131072, 0x60000, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_IBMPS1_2121: - case ROM_IBMPS1_2121_ISA: - if (! rom_load_linear( - L"roms/machines/ibm/ibmps1_2121/fc0000.bin", - 0x000000, 131072, 0x20000, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_IBMPS1_2133: - if (! rom_load_linear( - L"roms/machines/ibm/ibmps1_2133/ps1_2133_52g2974_rom.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - -#if defined(DEV_BRANCH) && defined(USE_PORTABLE3) - case ROM_DESKPRO_386: - if (! rom_load_interleaved( - L"roms/machines/compaq/deskpro386/109592-005.u11.bin", - L"roms/machines/compaq/deskpro386/109591-005.u13.bin", - 0x000000, 32768, 0, rom)) break; - biosmask = 0x7fff; - return(1); -#endif - - case ROM_AMIXT: - if (rom_load_linear( - L"roms/machines/generic/ami/amixt/ami_8088_bios_31jan89.bin", - 0x00e000, 8192, 0, rom)) return(1); - break; - -#if defined(DEV_BRANCH) && defined(USE_LASERXT) - case ROM_LTXT: - if (rom_load_linear( - L"roms/machines/vtech/ltxt/27c64.bin", - 0x00e000, 8192, 0, rom)) return(1); - break; - - case ROM_LXT3: - if (rom_load_linear( - L"roms/machines/vtech/lxt3/27c64d.bin", - 0x00e000, 8192, 0, rom)) return(1); - break; -#endif - - case ROM_SPC4200P: /* Samsung SPC-4200P */ - if (rom_load_linear( - L"roms/machines/samsung/spc4200p/u8.01", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_SUPER286TR: /* Hyundai Super-286TR */ - if (rom_load_linear( - L"roms/machines/hyundai/super286tr/hyundai_award286.bin", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_DTK386: /* uses NEAT chipset */ - if (rom_load_linear( - L"roms/machines/dtk/dtk386/3cto001.bin", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_PXXT: - if (rom_load_linear( - L"roms/machines/generic/phoenix/pxxt/000p001.bin", - 0x00e000, 8192, 0, rom)) return(1); - break; - - case ROM_JUKOPC: - if (rom_load_linear( - L"roms/machines/juko/jukopc/000o001.bin", - 0x00e000, 8192, 0, rom)) return(1); - break; - - case ROM_IBMPS2_M30_286: - if (! rom_load_linear( - L"roms/machines/ibm/ibmps2_m30_286/33f5381a.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_DTK486: - if (rom_load_linear( - L"roms/machines/dtk/dtk486/4siw005.bin", - 0x000000, 65536, 0, rom)) return(1); - break; - - case ROM_R418: - if (! rom_load_linear( - L"roms/machines/rise/r418/r418i.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - -#if 0 - case ROM_586MC1: - /* FIXME: no ROM? --FvK */ - if (! rom_load_linear( - L"roms/machines/586mc1/is.34", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); -#endif - - case ROM_PLATO: - if (! rom_load_linear( - L"roms/machines/intel/plato/1016ax1_.bio", - 0x010000, 65536, 128, rom)) break; - if (! rom_load_linear( - L"roms/machines/intel/plato/1016ax1_.bi1", - 0x000000, 0x00d000, 128, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_MB500N: - if (! rom_load_linear( - L"roms/machines/pcpartner/mb500n/031396s.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_AP53: - if (! rom_load_linear( - L"roms/machines/aopen/ap53/ap53r2c0.rom", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_P55T2S: - if (! rom_load_linear( - L"roms/machines/supermicro/p55t2s/s6y08t.rom", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_PRESIDENT: - if (! rom_load_linear( - L"roms/machines/president/president/bios.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_P54TP4XE: - if (! rom_load_linear( - L"roms/machines/asus/p54tp4xe/t15i0302.awd", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_ACERM3A: - if (! rom_load_linear( - L"roms/machines/acer/acerm3a/r01-b3.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_ACERV35N: - if (! rom_load_linear( - L"roms/machines/acer/acerv35n/v35nd1s1.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_P55VA: - if (! rom_load_linear( - L"roms/machines/epox/p55va/va021297.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_P55T2P4: - if (! rom_load_linear( - L"roms/machines/asus/p55t2p4/0207_j2.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_P55TVP4: - if (! rom_load_linear( - L"roms/machines/asus/p55tvp4/tv5i0204.awd", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - -#if defined(DEV_BRANCH) && defined(USE_I686) - case ROM_440FX: /* working Tyan BIOS */ - if (! rom_load_linear( - L"roms/machines/tyan/440fx/ntmaw501.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_S1668: /* working Tyan BIOS */ - if (! rom_load_linear( - L"roms/machines/tyan/tpatx/s1668p.rom", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); -#endif - - case ROM_THOR: - if (! rom_load_linear( - L"roms/machines/intel/thor/1006cn0_.bio", - 0x010000, 65536, 128, rom)) break; - if (! rom_load_linear( - L"roms/machines/intel/thor/1006cn0_.bi1", - 0x000000, 65536, 128, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_MRTHOR: - if (! rom_load_linear( - L"roms/machines/intel/mrthor/mr_atx.bio", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_ZAPPA: - if (! rom_load_linear( - L"roms/machines/intel/zappa/1006bs0_.bio", - 0x010000, 65536, 128, rom)) break; - if (! rom_load_linear( - L"roms/machines/intel/zappa/1006bs0_.bi1", - 0x000000, 65536, 128, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_IBMPS2_M50: - if (! rom_load_interleaved( - L"roms/machines/ibm/ibmps2_m50/90x7423.zm14", - L"roms/machines/ibm/ibmps2_m50/90x7426.zm16", - 0x000000, 65536, 0, rom)) break; - if (! rom_load_interleaved( - L"roms/machines/ibm/ibmps2_m50/90x7420.zm13", - L"roms/machines/ibm/ibmps2_m50/90x7429.zm18", - 0x010000, 65536, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_IBMPS2_M55SX: - if (! rom_load_interleaved( - L"roms/machines/ibm/ibmps2_m55sx/33f8146.zm41", - L"roms/machines/ibm/ibmps2_m55sx/33f8145.zm40", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - - case ROM_IBMPS2_M80: -#ifdef WALTJE - case ROM_IBMPS2_M80_486: -#endif - if (! rom_load_interleaved( - L"roms/machines/ibm/ibmps2_m80/15f6637.bin", - L"roms/machines/ibm/ibmps2_m80/15f6639.bin", - 0x000000, 131072, 0, rom)) break; - biosmask = 0x1ffff; - return(1); - -#if defined(DEV_BRANCH) && defined(USE_GREENB) - case ROM_4GPV31: - if (! rom_load_linear( - L"roms/machines/addtech/green-b/4gpv31-ami-1993-8273517.bin", - 0x000000, 65536, 0, rom)) break; - return(1); -#endif - - case ROM_T3100E: - loadfont(L"roms/machines/toshiba/t3100e/t3100e_font.bin", 5); - if (rom_load_linear( - L"roms/machines/toshiba/t3100e/t3100e.rom", - 0x000000, 65536, 0, rom)) return(1); - break; - - default: - pclog("ROM: don't know how to handle ROM set %d !\n", rom_id); - } - - return(0); -} diff --git a/src/rom.h b/src/rom.h index 60a0de3..e1d4fbe 100644 --- a/src/rom.h +++ b/src/rom.h @@ -8,7 +8,7 @@ * * Definitions for the ROM image handler. * - * Version: @(#)rom.h 1.0.2 2018/02/23 + * Version: @(#)rom.h 1.0.3 2018/02/28 * * Authors: Fred N. van Kempen, * @@ -75,7 +75,7 @@ typedef struct { uint32_t offset; uint32_t total; struct romfile { - char path[1024]; + wchar_t path[1024]; int mode; uint32_t offset; uint32_t skip; @@ -211,7 +211,7 @@ extern uint8_t rom_read(uint32_t addr, void *p); extern uint16_t rom_readw(uint32_t addr, void *p); extern uint32_t rom_readl(uint32_t addr, void *p); -extern FILE *rom_fopen(wchar_t *fn, wchar_t *mode); +extern FILE *rom_fopen(wchar_t *fn); extern int rom_getfile(wchar_t *fn, wchar_t *s, int size); extern int rom_present(wchar_t *fn); @@ -227,7 +227,7 @@ extern int rom_init_interleaved(rom_t *rom, wchar_t *fn_low, int size, int mask, int file_offset, uint32_t flags); -extern int rom_load_bios(int romset); +extern int rom_load_bios(wchar_t *fn, int test_only); #endif /*EMU_ROM_H*/ diff --git a/src/rom_load.c b/src/rom_load.c new file mode 100644 index 0000000..7a2c3e0 --- /dev/null +++ b/src/rom_load.c @@ -0,0 +1,402 @@ +/* + * VARCem Virtual Archaelogical Computer EMulator. + * An emulator of (mostly) x86-based PC systems and devices, + * using the ISA,EISA,VLB,MCA and PCI system buses, roughly + * spanning the era between 1981 and 1995. + * + * This file is part of the VARCem Project. + * + * Implement the external ROM loader. + * This loader defines a 'ROM set' to be one or more images + * of ROM chip(s), where all properties of these defined in + * a single 'ROM definition' (text) file. + * + * NOTE: This file uses a fairly generic script parser, which can + * be re-used for others parts. This would mean passing the + * 'parser' function a pointer to either a command handler, + * or to use a generic handler, and then pass it a pointer + * to a command table. For now, we don't. + * + * Version: @(#)rom_load.c 1.0.2 2018/03/01 + * + * Author: Fred N. van Kempen, + * + * Copyright 2018 Fred N. van Kempen. + * + * Redistribution and use in source and binary forms, with + * or without modification, are permitted provided that the + * following conditions are met: + * + * 1. Redistributions of source code must retain the entire + * above notice, this list of conditions and the following + * disclaimer. + * + * 2. Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the + * following disclaimer in the documentation and/or other + * materials provided with the distribution. + * + * 3. Neither the name of the copyright holder nor the names + * of its contributors may be used to endorse or promote + * products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include +#include +#include +#include +#include +#include +#include "emu.h" +#include "mem.h" +#include "rom.h" +#include "plat.h" + + +#define PATH_BIOS "bios.txt" /* name of the script we run */ +#define MAX_ARGS 16 /* max number of arguments */ + + +/* Process a single (logical) command line. */ +static int +process(int ln, int argc, char **argv, romdef_t *r) +{ + if (! strcmp(argv[0], "size")) { + sscanf(argv[1], "%i", &r->total); + } else if (! strcmp(argv[0], "offset")) { + if (sscanf(argv[1], "0x%lx", (long unsigned int *)&r->offset) == 0) + sscanf(argv[1], "%i", &r->offset); + } else if (! strcmp(argv[0], "mode")) { + if (! strcmp(argv[1], "linear")) + r->mode = 0; + else if (! strcmp(argv[1], "interleaved")) + r->mode = 1; + else { + pclog("ROM: invalid mode '%s' on line %d.\n", argv[1], ln); + return(0); + } + } else if (! strcmp(argv[0], "file")) { + mbstowcs(r->files[r->nfiles].path, argv[1], + sizeof_w(r->files[r->nfiles].path)); + if (argc >= 3) + sscanf(argv[2], "%i", &r->files[r->nfiles].skip); + else + r->files[r->nfiles].skip = 0; + if (argc == 4) { + if (sscanf(argv[3], "0x%lx", (long unsigned int *)&r->files[r->nfiles].offset) == 0) + sscanf(argv[3], "%i", &r->files[r->nfiles].offset); + } else + r->files[r->nfiles].offset = r->offset; + r->nfiles++; + } else { + pclog("ROM: invalid command '%s' on line %d.\n", argv[0], ln); + return(0); + } + + return(1); +} + + +/* Parse a script file, and call the command handler for each command. */ +static int +parser(FILE *fp, romdef_t *r) +{ + char line[1024]; + char *args[MAX_ARGS]; + int doskip, doquot; + int skipnl, dolit; + int a, c, l; + char *sp; + + /* Initialize the parser and run. */ + l = 0; + for (;;) { + /* Clear the per-line stuff. */ + skipnl = dolit = doquot = 0; + doskip = 1; + for (a=0; a= 0x010000) + biosmask = (r.total - 1); + break; + + case 1: /* interleaved file(s) */ + /* We loop on all files. */ + for (c=0; c= 0x010000) + biosmask = (r.total - 1); + break; + } + + pclog("ROM: status %d, tot %u, mask 0x%06lx\n", i, r.total, biosmask); + } + + return(i); +} diff --git a/src/scsi/scsi_aha154x.c b/src/scsi/scsi_aha154x.c index 0c1d299..bb1d55e 100644 --- a/src/scsi/scsi_aha154x.c +++ b/src/scsi/scsi_aha154x.c @@ -10,7 +10,7 @@ * made by Adaptec, Inc. These controllers were designed for * the ISA bus. * - * Version: @(#)scsi_aha154x.c 1.0.1 2018/02/14 + * Version: @(#)scsi_aha154x.c 1.0.2 2018/02/26 * * Based on original code from TheCollector1995 and Miran Grca. * @@ -626,7 +626,7 @@ aha_setbios(x54x_t *dev) /* Open the BIOS image file and make sure it exists. */ aha_log("%s: loading BIOS from '%ls'\n", dev->name, dev->bios_path); - if ((f = rom_fopen(dev->bios_path, L"rb")) == NULL) { + if ((f = rom_fopen(dev->bios_path)) == NULL) { aha_log("%s: BIOS ROM not found!\n", dev->name); return; } diff --git a/src/scsi/scsi_buslogic.c b/src/scsi/scsi_buslogic.c index 7787792..64d74a7 100644 --- a/src/scsi/scsi_buslogic.c +++ b/src/scsi/scsi_buslogic.c @@ -13,7 +13,7 @@ * 1 - BT-545S ISA; * 2 - BT-958D PCI * - * Version: @(#)scsi_buslogic.c 1.0.3 2018/02/22 + * Version: @(#)scsi_buslogic.c 1.0.4 2018/02/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -1620,7 +1620,7 @@ buslogic_init(device_t *info) rom_init(&bl->bios, bios_rom_name, bios_rom_addr, bios_rom_size, bios_rom_mask, 0, MEM_MAPPING_EXTERNAL); if (has_autoscsi_rom) { - f = rom_fopen(autoscsi_rom_name, L"rb"); + f = rom_fopen(autoscsi_rom_name); if (f) { fread(bl->AutoSCSIROM, 1, autoscsi_rom_size, f); fclose(f); @@ -1629,7 +1629,7 @@ buslogic_init(device_t *info) } if (has_scam_rom) { - f = rom_fopen(scam_rom_name, L"rb"); + f = rom_fopen(scam_rom_name); if (f) { fread(bl->SCAMData, 1, scam_rom_size, f); fclose(f); diff --git a/src/sound/snd_emu8k.c b/src/sound/snd_emu8k.c index 75dfb77..906c61d 100644 --- a/src/sound/snd_emu8k.c +++ b/src/sound/snd_emu8k.c @@ -8,7 +8,7 @@ * * Implementation of Emu8000 emulator. * - * Version: @(#)snd_emu8k.c 1.0.1 2018/02/14 + * Version: @(#)snd_emu8k.c 1.0.2 2018/02/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -2176,7 +2176,7 @@ void emu8k_init(emu8k_t *emu8k, uint16_t emu_addr, int onboard_ram) int c; double out; - f = rom_fopen(L"roms/sound/awe32.raw", L"rb"); + f = rom_fopen(L"roms/sound/awe32.raw"); if (!f) fatal("AWE32.RAW not found\n"); diff --git a/src/ui.h b/src/ui.h index e419edd..2e5eac5 100644 --- a/src/ui.h +++ b/src/ui.h @@ -8,7 +8,7 @@ * * Define the various UI functions. * - * Version: @(#)ui.h 1.0.1 2018/02/14 + * Version: @(#)ui.h 1.0.2 2018/03/01 * * Author: Fred N. van Kempen, * @@ -61,6 +61,7 @@ extern "C" { #define MBX_INFO 1 #define MBX_ERROR 2 #define MBX_QUESTION 3 +#define MBX_CONFIG 4 #define MBX_FATAL 0x20 #define MBX_ANSI 0x80 diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 842088b..7dfab82 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -8,7 +8,7 @@ * * Define all known video cards. * - * Version: @(#)vid_table.c 1.0.3 2018/02/22 + * Version: @(#)vid_table.c 1.0.4 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -167,6 +167,22 @@ video_cards[] = { }; +int +video_detect(void) +{ + int c, i; + + /* Make sure we have a usable video card. */ + c = 0; + for (i=0; i * Miran Grca, @@ -54,7 +54,7 @@ #include "../device.h" #include "../mem.h" #include "../pci.h" -#include "../rom.h" +#include "../nvr.h" #include "../timer.h" #include "../device.h" #include "../plat.h" @@ -7844,12 +7844,12 @@ void voodoo_card_close(voodoo_t *voodoo) int c; #ifndef RELEASE_BUILD - f = rom_fopen(L"texram.dmp", L"wb"); + f = nvr_fopen(L"texram.dmp", L"wb"); fwrite(voodoo->tex_mem[0], voodoo->texture_size*1024*1024, 1, f); fclose(f); if (voodoo->dual_tmus) { - f = rom_fopen(L"texram2.dmp", L"wb"); + f = nvr_fopen(L"texram2.dmp", L"wb"); fwrite(voodoo->tex_mem[1], voodoo->texture_size*1024*1024, 1, f); fclose(f); } diff --git a/src/video/video.c b/src/video/video.c index 20bbf2f..6dc452c 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -40,7 +40,7 @@ * W = 3 bus clocks * L = 4 bus clocks * - * Version: @(#)video.c 1.0.1 2018/02/14 + * Version: @(#)video.c 1.0.2 2018/02/26 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -690,7 +690,7 @@ loadfont(wchar_t *s, int format) FILE *f; int c,d; - f = rom_fopen(s, L"rb"); + f = rom_fopen(s); if (f == NULL) { pclog("VIDEO: cannot load font '%ls', fmt=%d\n", s, format); return; diff --git a/src/video/video.h b/src/video/video.h index 69b90de..3ba5558 100644 --- a/src/video/video.h +++ b/src/video/video.h @@ -8,7 +8,7 @@ * * Definitions for the video controller module. * - * Version: @(#)video.h 1.0.2 2018/02/22 + * Version: @(#)video.h 1.0.3 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -218,6 +218,7 @@ extern void (*video_recalctimings)(void); /* Table functions. */ extern int video_card_available(int card); +extern int video_detect(void); extern char *video_card_getname(int card); #ifdef EMU_DEVICE_H extern device_t *video_card_getdevice(int card); diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index cc611f6..caeff93 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -8,7 +8,7 @@ # # Makefile for Windows systems using the MinGW32 environment. # -# Version: @(#)Makefile.mingw 1.0.5 2018/02/25 +# Version: @(#)Makefile.mingw 1.0.6 2018/03/02 # # Author: Fred N. van Kempen, # @@ -234,7 +234,7 @@ else endif WINDRES := windres - SYSINC := + SYSINC := -Iwin/mingw/include SYSLIB := endif @@ -437,7 +437,8 @@ CXXFLAGS := $(WX_FLAGS) $(OPTS) $(DFLAGS) $(COPTIM) $(AOPTIM) \ ######################################################################### MAINOBJ := pc.o config.o random.o timer.o io.o dma.o nmi.o pic.o \ pit.o ppi.o pci.o mca.o mcr.o mem.o memregs.o rom.o \ - device.o nvr.o nvr_at.o nvr_ps2.o $(VNCOBJ) $(RDPOBJ) + rom_load.o device.o nvr.o nvr_at.o nvr_ps2.o \ + $(VNCOBJ) $(RDPOBJ) INTELOBJ := intel.o \ intel_flash.o \ diff --git a/src/win/VARCem.rc b/src/win/VARCem.rc index 959d811..e02d592 100644 --- a/src/win/VARCem.rc +++ b/src/win/VARCem.rc @@ -8,7 +8,7 @@ * * Application resource script for Windows. * - * Version: @(#)VARCem.rc 1.0.3 2018/02/24 + * Version: @(#)VARCem.rc 1.0.4 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -820,10 +820,10 @@ END STRINGTABLE DISCARDABLE BEGIN - 2048 "VARCem" - IDS_2049 "Error" - IDS_2050 "Fatal Error" - IDS_2051 "This will reset the emulator.\nAre you sure you want to save the settings?" + IDS_2048 "Error" + IDS_2049 "Fatal Error" + IDS_2050 "Configuration Error" + IDS_2051 "Are you sure you want to save these settings?\n\n(A restart may be needed...)" IDS_2052 "DirectDraw Screenshot Error" IDS_2053 "Invalid number of sectors (valid values are between 1 and 63)" IDS_2054 "Invalid number of heads (valid values are between 1 and 16)" @@ -834,13 +834,13 @@ BEGIN IDS_2059 "Turbo" IDS_2060 "On" IDS_2061 "Off" - IDS_2062 "The emulator was unable to find any ROMs.\nAt least one ROM set is required to run." - IDS_2063 "Configured ROM set not available.\nDefaulting to an available ROM set." + IDS_2062 "Changes saved, please restart the emulator!" + IDS_2063 "The configured machine:\n\n %ls\n\nis not available.\n\nWould you like to enter the Settings menu?" END STRINGTABLE DISCARDABLE BEGIN - IDS_2064 "Configured video BIOS not available.\nDefaulting to an available video BIOS." + IDS_2064 "Configured video card:\n\n %ls\n\nis not available.\n\nWould you like to enter the Settings menu?" IDS_2065 "Machine" IDS_2066 "Display" IDS_2067 "Input devices" diff --git a/src/win/resource.h b/src/win/resource.h index 2507397..96d75d6 100644 --- a/src/win/resource.h +++ b/src/win/resource.h @@ -8,7 +8,7 @@ * * Windows resource defines. * - * Version: @(#)resource.h 1.0.2 2018/02/21 + * Version: @(#)resource.h 1.0.3 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, diff --git a/src/win/win.c b/src/win/win.c index 1bf1b28..36fc75f 100644 --- a/src/win/win.c +++ b/src/win/win.c @@ -8,7 +8,7 @@ * * Platform main support module for Windows. * - * Version: @(#)win.c 1.0.1 2018/02/14 + * Version: @(#)win.c 1.0.2 2018/03/02 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -269,22 +269,58 @@ CreateConsole(int init) /* Not logging to file, attach to console. */ if (! AttachConsole(ATTACH_PARENT_PROCESS)) { /* Parent has no console, create one. */ - AllocConsole(); + if (! AllocConsole()) { +#ifdef DEBUG + fp = fopen("error.txt", "w"); + fprintf(fp, "AllocConsole failed: %lu\n", GetLastError()); + fclose(fp); +#endif + return; + } } - h = GetStdHandle(STD_OUTPUT_HANDLE); + if ((h = GetStdHandle(STD_OUTPUT_HANDLE)) == NULL) { +#ifdef DEBUG + fp = fopen("error.txt", "w"); + fprintf(fp, "GetStdHandle(OUT) failed: %lu\n", GetLastError()); + fclose(fp); +#endif + return; + } i = _open_osfhandle((intptr_t)h, _O_TEXT); - fp = _fdopen(i, "w"); - setvbuf(fp, NULL, _IONBF, 1); - *stdout = *fp; + if (i != -1) { + fp = _fdopen(i, "w"); + if (fp == NULL) { +#ifdef DEBUG + fp = fopen("error.txt", "w"); + fprintf(fp, "FdOpen(%i) failed: %lu\n", i, GetLastError()); + fclose(fp); +#endif + return; + } + setvbuf(fp, NULL, _IONBF, 1); + *stdout = *fp; + } else { +#ifdef DEBUG + fp = fopen("error.txt", "w"); + fprintf(fp, "GetOSfHandle(%p) failed: %lu\n", h, GetLastError()); + fclose(fp); +#endif + } +#if NOTUSED h = GetStdHandle(STD_ERROR_HANDLE); - i = _open_osfhandle((intptr_t)h, _O_TEXT); - fp = _fdopen(i, "w"); - setvbuf(fp, NULL, _IONBF, 1); - *stderr = *fp; + if (h != NULL) { + i = _open_osfhandle((intptr_t)h, _O_TEXT); + if (i != -1) { + fp = _fdopen(i, "w"); + if (fp != NULL) { + setvbuf(fp, NULL, _IONBF, 1); + *stderr = *fp; + } + } + } -#if 0 /* Set up stdin as well. */ h = GetStdHandle(STD_INPUT_HANDLE); i = _open_osfhandle((intptr_t)h, _O_TEXT); diff --git a/src/win/win.h b/src/win/win.h index a8c6f4e..fb03bf4 100644 --- a/src/win/win.h +++ b/src/win/win.h @@ -8,7 +8,7 @@ * * Platform support defintions for Win32. * - * Version: @(#)win.h 1.0.2 2018/02/21 + * Version: @(#)win.h 1.0.3 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -117,7 +117,7 @@ extern uint8_t joystickconfig_open(HWND hwnd, int joy_nr, int type); extern int getfile(HWND hwnd, char *f, char *fn); extern int getsfile(HWND hwnd, char *f, char *fn); -extern void win_settings_open(HWND hwnd); +extern int win_settings_open(HWND hwnd, int ask); extern void hard_disk_add_open(HWND hwnd, int is_existing); extern int hard_disk_was_added(void); diff --git a/src/win/win_dialog.c b/src/win/win_dialog.c index e291052..f778fc7 100644 --- a/src/win/win_dialog.c +++ b/src/win/win_dialog.c @@ -8,7 +8,7 @@ * * Implementation of server several dialogs. * - * Version: @(#)win_dialog.c 1.0.1 2018/02/14 + * Version: @(#)win_dialog.c 1.0.2 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -110,22 +110,27 @@ ui_msgbox(int flags, void *arg) switch(flags & 0x1f) { case MBX_INFO: /* just an informational message */ fl = (MB_OK | MB_ICONINFORMATION); - cap = plat_get_string(IDS_STRINGS); /* "VARCem" */ + cap = EMU_NAME_W; break; case MBX_ERROR: /* error message */ if (flags & MBX_FATAL) { fl = (MB_OK | MB_ICONERROR); - cap = plat_get_string(IDS_2050); /* "Fatal Error"*/ + cap = plat_get_string(IDS_2049); /* "Fatal Error"*/ } else { fl = (MB_OK | MB_ICONWARNING); - cap = plat_get_string(IDS_2049); /* "Error" */ + cap = plat_get_string(IDS_2048); /* "Error" */ } break; case MBX_QUESTION: /* question */ fl = (MB_YESNOCANCEL | MB_ICONQUESTION); - cap = plat_get_string(IDS_STRINGS); /* "VARCem" */ + cap = EMU_NAME_W; + break; + + case MBX_CONFIG: /* configuration */ + fl = (MB_YESNO | MB_ICONERROR); + cap = EMU_NAME_W; break; } @@ -160,9 +165,17 @@ ui_msgbox(int flags, void *arg) fl); /* Convert return values to generic ones. */ - if (fl == IDNO) fl = 1; - else if (fl == IDCANCEL) fl = -1; - else fl = 0; + switch(fl) { + case IDNO: + fl = 1; break; + + case IDYES: + case IDOK: + fl = 0; break; + + case IDCANCEL: + fl = -1; break; + } return(fl); } diff --git a/src/win/win_settings.c b/src/win/win_settings.c index 8fa586e..6516446 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -8,7 +8,7 @@ * * Implementation of the Settings dialog. * - * Version: @(#)win_settings.c 1.0.4 2018/02/24 + * Version: @(#)win_settings.c 1.0.5 2018/03/01 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -121,8 +121,8 @@ static zip_drive_t temp_zip_drives[ZIP_NUM]; static HWND hwndParentDialog, hwndChildDialog; static int displayed_category = 0; +static int ask_sure = 0; -extern int is486; static int romstolist[ROM_MAX], listtomachine[ROM_MAX], romstomachine[ROM_MAX], machinetolist[ROM_MAX]; static int settings_sound_to_list[20], settings_list_to_sound[20]; static int settings_midi_to_list[20], settings_list_to_midi[20]; @@ -153,329 +153,304 @@ settings_msgbox(int type, void *arg) /* This does the initial read of global variables into the temporary ones. */ -static void win_settings_init(void) +static void +settings_init(void) { - int i = 0; + int i = 0; - /* Machine category */ - temp_machine = machine; - temp_cpu_m = cpu_manufacturer; - temp_wait_states = cpu_waitstates; - temp_cpu = cpu; - temp_mem_size = mem_size; + /* Machine category */ + temp_machine = machine; + temp_cpu_m = cpu_manufacturer; + temp_wait_states = cpu_waitstates; + temp_cpu = cpu; + temp_mem_size = mem_size; #ifdef USE_DYNAREC - temp_dynarec = cpu_use_dynarec; + temp_dynarec = cpu_use_dynarec; #endif - temp_fpu = enable_external_fpu; - temp_sync = enable_sync; + temp_fpu = enable_external_fpu; + temp_sync = enable_sync; - /* Video category */ - temp_gfxcard = gfxcard; - temp_video_speed = video_speed; - temp_voodoo = voodoo_enabled; + /* Video category */ + temp_gfxcard = gfxcard; + temp_video_speed = video_speed; + temp_voodoo = voodoo_enabled; - /* Input devices category */ - temp_mouse = mouse_type; - temp_joystick = joystick_type; + /* Input devices category */ + temp_mouse = mouse_type; + temp_joystick = joystick_type; - /* Sound category */ - temp_sound_card = sound_card_current; - temp_midi_device = midi_device_current; - temp_mpu401 = mpu401_standalone_enable; - temp_SSI2001 = SSI2001; - temp_GAMEBLASTER = GAMEBLASTER; - temp_GUS = GUS; - temp_opl3_type = opl3_type; - temp_float = sound_is_float; + /* Sound category */ + temp_sound_card = sound_card_current; + temp_midi_device = midi_device_current; + temp_mpu401 = mpu401_standalone_enable; + temp_SSI2001 = SSI2001; + temp_GAMEBLASTER = GAMEBLASTER; + temp_GUS = GUS; + temp_opl3_type = opl3_type; + temp_float = sound_is_float; - /* Network category */ - temp_net_type = network_type; - memset(temp_pcap_dev, 0, sizeof(temp_pcap_dev)); - strcpy(temp_pcap_dev, network_pcap); - temp_net_card = network_card; + /* Network category */ + temp_net_type = network_type; + memset(temp_pcap_dev, 0, sizeof(temp_pcap_dev)); + strcpy(temp_pcap_dev, network_pcap); + temp_net_card = network_card; - /* Ports category */ - for (i = 0; i < 3; i++) - strncpy(temp_lpt_device_names[i], lpt_device_names[i], sizeof(temp_lpt_device_names[i]) - 1); - temp_serial[0] = serial_enabled[0]; - temp_serial[1] = serial_enabled[1]; - temp_lpt = lpt_enabled; + /* Ports category */ + for (i = 0; i < 3; i++) + strncpy(temp_lpt_device_names[i], lpt_device_names[i], sizeof(temp_lpt_device_names[i]) - 1); + temp_serial[0] = serial_enabled[0]; + temp_serial[1] = serial_enabled[1]; + temp_lpt = lpt_enabled; - /* Other peripherals category */ - temp_scsi_card = scsi_card_current; - strncpy(temp_hdc_name, hdc_name, sizeof(temp_hdc_name) - 1); - temp_ide_ter = ide_enable[2]; - temp_ide_ter_irq = ide_irq[2]; - temp_ide_qua = ide_enable[3]; - temp_ide_qua_irq = ide_irq[3]; - temp_bugger = bugger_enabled; + /* Other peripherals category */ + temp_scsi_card = scsi_card_current; + strncpy(temp_hdc_name, hdc_name, sizeof(temp_hdc_name) - 1); + temp_ide_ter = ide_enable[2]; + temp_ide_ter_irq = ide_irq[2]; + temp_ide_qua = ide_enable[3]; + temp_ide_qua_irq = ide_irq[3]; + temp_bugger = bugger_enabled; - mfm_tracking = xtide_tracking = esdi_tracking = ide_tracking = 0; - for (i = 0; i < 16; i++) - scsi_tracking[i] = 0; + mfm_tracking = xtide_tracking = esdi_tracking = ide_tracking = 0; + for (i = 0; i < 16; i++) + scsi_tracking[i] = 0; - /* Hard disks category */ - memcpy(temp_hdd, hdd, HDD_NUM * sizeof(hard_disk_t)); - for (i = 0; i < HDD_NUM; i++) - { - if (hdd[i].bus == HDD_BUS_MFM) - mfm_tracking |= (1 << (hdd[i].mfm_channel << 3)); - else if (hdd[i].bus == HDD_BUS_XTIDE) - xtide_tracking |= (1 << (hdd[i].xtide_channel << 3)); - else if (hdd[i].bus == HDD_BUS_ESDI) - esdi_tracking |= (1 << (hdd[i].esdi_channel << 3)); - else if (hdd[i].bus == HDD_BUS_IDE_PIO_ONLY) - ide_tracking |= (1 << (hdd[i].ide_channel << 3)); - else if (hdd[i].bus == HDD_BUS_IDE_PIO_AND_DMA) - ide_tracking |= (1 << (hdd[i].ide_channel << 3)); - else if (hdd[i].bus == HDD_BUS_SCSI) - scsi_tracking[hdd[i].scsi_id] |= (1 << (hdd[i].scsi_lun << 3)); - else if (hdd[i].bus == HDD_BUS_SCSI_REMOVABLE) - scsi_tracking[hdd[i].scsi_id] |= (1 << (hdd[i].scsi_lun << 3)); - } + /* Hard disks category */ + memcpy(temp_hdd, hdd, HDD_NUM * sizeof(hard_disk_t)); + for (i=0; icode == LVN_ITEMCHANGED) && (((LPNMHDR)lParam)->idFrom == IDC_SETTINGSCATLIST)) - { - category = -1; - for (i = 0; i < 10; i++) - { - h = GetDlgItem(hdlg, IDC_SETTINGSCATLIST); - j = ListView_GetItemState(h, i, LVIS_SELECTED); - if (j) - { - category = i; - /* pclog("Category %i selected\n", i); */ - } - } - if (category != -1) - { - /* pclog("Showing child: %i\n", category); */ - win_settings_show_child(hdlg, category); - } - } - break; - case WM_COMMAND: - switch (LOWORD(wParam)) - { - case IDOK: - /* pclog("Saving settings...\n"); */ - SendMessage(hwndChildDialog, WM_SAVESETTINGS, 0, 0); - i = settings_msgbox_reset(); - if (i > 0) - { - if (i == 2) - { - win_settings_save(); - } + return(TRUE); - /* pclog("Destroying window...\n"); */ - DestroyWindow(hwndChildDialog); - EndDialog(hdlg, 0); - plat_pause(0); - return TRUE; - } - else - { - return FALSE; - } - case IDCANCEL: - DestroyWindow(hwndChildDialog); - EndDialog(hdlg, 0); - plat_pause(0); - return TRUE; + case WM_NOTIFY: + if ((((LPNMHDR)lParam)->code == LVN_ITEMCHANGED) && (((LPNMHDR)lParam)->idFrom == IDC_SETTINGSCATLIST)) { + category = -1; + for (i=0; i<10; i++) { + h = GetDlgItem(hdlg, IDC_SETTINGSCATLIST); + j = ListView_GetItemState(h, i, LVIS_SELECTED); + if (j) category = i; } - break; - default: - return FALSE; - } + if (category != -1) + show_child(hdlg, category); + } + break; - return FALSE; + case WM_COMMAND: + switch (LOWORD(wParam)) { + case IDOK: + SendMessage(hwndChildDialog, WM_SAVESETTINGS, 0, 0); + if (ask_sure) { + i = msgbox_reset(); + if (i == 0) { + /* CANCEL, just kidding! */ + return(FALSE); + } + } else { + i = 2; + } + + if (i == 2) { + /* YES, reset system. */ + settings_save(); + } + + DestroyWindow(hwndChildDialog); + EndDialog(hdlg, i); + return(TRUE); + + case IDCANCEL: + DestroyWindow(hwndChildDialog); + EndDialog(hdlg, 0); + return(TRUE); + } + break; + + default: + return(FALSE); + } + + return(FALSE); } -void win_settings_open(HWND hwnd) + +int +win_settings_open(HWND hwnd, int ask) { - DialogBox(hinstance, (LPCWSTR)DLG_CONFIG, hwnd, win_settings_main_proc); + int i, m, v; + + /* Enumerate the available machines. */ + m = machine_detect(); + + /* Enumerate the available video cards. */ + v = video_detect(); + + if (m == 0 || v == 0) { + ui_msgbox(MBX_ERROR|MBX_FATAL, (wchar_t *)IDS_2056); + + return(0); + } + + ask_sure = ask; + i = DialogBox(hinstance, (LPCWSTR)DLG_CONFIG, hwnd, main_proc); + + return(i); } diff --git a/src/win/win_ui.c b/src/win/win_ui.c index ccbff19..fd6c473 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -8,7 +8,7 @@ * * Implement the user Interface module. * - * Version: @(#)win_ui.c 1.0.2 2018/02/21 + * Version: @(#)win_ui.c 1.0.3 2018/03/02 * * Authors: Fred N. van Kempen, * Miran Grca, @@ -328,7 +328,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) break; case IDM_ACTION_CTRL_ALT_ESC: - pc_send_cae(); + keyboard_send_cae(); break; case IDM_ACTION_RCTRL_IS_LALT: @@ -343,7 +343,10 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) break; case IDM_CONFIG: - win_settings_open(hwnd); + plat_pause(1); + if (win_settings_open(hwnd, 1) == 2) + pc_reset_hard_init(); + plat_pause(0); break; case IDM_ABOUT: @@ -724,7 +727,10 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) break; case WM_SHOWSETTINGS: - win_settings_open(hwnd); + plat_pause(1); + if (win_settings_open(hwnd, 1) == 2) + pc_reset_hard_init(); + plat_pause(0); break; case WM_PAUSE: @@ -763,9 +769,9 @@ ui_init(int nCmdShow) WCHAR title[200]; WNDCLASSEX wincl; /* buffer for main window's class */ MSG messages; /* received-messages buffer */ - HWND hwnd = 0; /* handle for our window */ + HWND hwnd = 0; /* handle for our window */ HACCEL haccel; /* handle to accelerator table */ - int bRet; + int ret; #if 0 /* We should have an application-wide at_exit catcher. */ @@ -782,7 +788,7 @@ ui_init(int nCmdShow) return(6); } - win_settings_open(NULL); + win_settings_open(NULL, 0); return(0); } @@ -887,14 +893,26 @@ ui_init(int nCmdShow) 0, 0, 1, 1, hwnd, NULL, hinstance, NULL); MoveWindow(hwndRender, 0, 0, scrnsz_x, scrnsz_y, TRUE); - /* All done, fire up the actual emulated machine. */ - if (! pc_init_modules()) { - /* Dang, no ROMs found at all! */ - MessageBox(hwnd, - plat_get_string(IDS_2056), - plat_get_string(IDS_2050), - MB_OK | MB_ICONERROR); - return(6); + /* That looks good, now continue setting up the machine. */ + switch (pc_init_modules()) { + case -1: /* General failure during init, give up. */ + return(6); + + case 0: /* Configuration error, user wants to exit. */ + return(0); + + case 1: /* All good. */ + break; + + case 2: /* Configuration error, user wants to re-config. */ + if (win_settings_open(NULL, 0)) { + /* Save the new configuration to file. */ + config_save(); + + /* Remind them to restart. */ + ui_msgbox(MBX_INFO, (wchar_t *)IDS_2062); + } + return(0); } /* Initialize the configured Video API. */ @@ -936,11 +954,11 @@ ui_init(int nCmdShow) /* Run the message loop. It will run until GetMessage() returns 0 */ while (! quited) { - bRet = GetMessage(&messages, NULL, 0, 0); - if ((bRet == 0) || quited) break; + ret = GetMessage(&messages, NULL, 0, 0); + if ((ret == 0) || quited) break; - if (bRet == -1) { - fatal("bRet is -1\n"); + if (ret == -1) { + fatal("ret is -1\n"); } if (messages.message == WM_QUIT) {