From 78ec4927d4b395e18b54bb6e08189799ef3fa21e Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 12 Oct 2023 02:07:43 +0200 Subject: [PATCH 1/7] Added more parameters, including to clear CMOS, and removed -O / --debugcfg that was not used at all. --- src/86box.c | 150 +++++++++++++++++++++++++++----------- src/include/86box/86box.h | 1 - 2 files changed, 106 insertions(+), 45 deletions(-) diff --git a/src/86box.c b/src/86box.c index 9d41bd344..320eda721 100644 --- a/src/86box.c +++ b/src/86box.c @@ -123,7 +123,6 @@ int tracing_on = 0; /* Commandline options. */ int dump_on_exit = 0; /* (O) dump regs on exit */ -int do_dump_config = 0; /* (O) dump config on load */ int start_in_fullscreen = 0; /* (O) start in fullscreen */ #ifdef _WIN32 int force_debug = 0; /* (O) force debug output */ @@ -141,10 +140,14 @@ char rom_path[1024] = { '\0' }; /* (O) full path to ROMs */ rom_path_t rom_paths = { "", NULL }; /* (O) full paths to ROMs */ char log_path[1024] = { '\0' }; /* (O) full path of logfile */ char vm_name[1024] = { '\0' }; /* (O) display name of the VM */ +int do_nothing = 0; +int dump_missing = 0; #ifdef USE_INSTRUMENT -uint8_t instru_enabled = 0; -uint64_t instru_run_ms = 0; +uint8_t instru_enabled = 0; +uint64_t instru_run_ms = 0; #endif +int clear_cmos = 0; +int clear_flash = 0; /* Configuration values. */ int window_remember; @@ -398,6 +401,31 @@ pc_log(const char *fmt, ...) # define pc_log(fmt, ...) #endif +static void +delete_nvr_file(uint8_t flash) +{ + char *fn = NULL; + int c; + + /* Set up the NVR file's name. */ + c = strlen(machine_get_internal_name()) + 5; + fn = (char *) malloc(c + 1); + + if (fn == NULL) + fatal("Error allocating memory for the removal of the %s file\n", + flash ? "BIOS flash" : "CMOS"); + + if (flash) + sprintf(fn, "%s.bin", machine_get_internal_name()); + else + sprintf(fn, "%s.nvr", machine_get_internal_name()); + + remove(nvr_path(fn)); + + free(fn); + fn = NULL; +} + /* * Perform initial startup of the PC. * @@ -479,34 +507,39 @@ usage: printf("\nUsage: 86box [options] [cfg-file]\n\n"); printf("Valid options are:\n\n"); - printf("-? or --help - show this information\n"); - printf("-C or --config path - set 'path' to be config file\n"); + printf("-? or --help - show this information\n"); + printf("-B or --clearflash - clears the BIOS flash file\n"); + printf("-C or --config path - set 'path' to be config file\n"); #ifdef _WIN32 - printf("-D or --debug - force debug output logging\n"); + printf("-D or --debug - force debug output logging\n"); #endif #if 0 - printf("-E or --nographic - forces the old behavior\n"); + printf("-E or --nographic - forces the old behavior\n"); #endif - printf("-F or --fullscreen - start in fullscreen mode\n"); - printf("-G or --lang langid - start with specified language (e.g. en-US, or system)\n"); + printf("-F or --fullscreen - start in fullscreen mode\n"); + printf("-G or --lang langid - start with specified language (e.g. en-US, or system)\n"); #ifdef _WIN32 - printf("-H or --hwnd id,hwnd - sends back the main dialog's hwnd\n"); + printf("-H or --hwnd id,hwnd - sends back the main dialog's hwnd\n"); #endif - printf("-I or --image d:path - load 'path' as floppy image on drive d\n"); - printf("-L or --logfile path - set 'path' to be the logfile\n"); - printf("-N or --noconfirm - do not ask for confirmation on quit\n"); - printf("-O or --dumpcfg - dump config file after loading\n"); - printf("-P or --vmpath path - set 'path' to be root for vm\n"); - printf("-R or --rompath path - set 'path' to be ROM path\n"); - printf("-S or --settings - show only the settings dialog\n"); - printf("-V or --vmname name - overrides the name of the running VM\n"); - printf("-Z or --lastvmpath - the last parameter is VM path rather than config\n"); + printf("-I or --image d:path - load 'path' as floppy image on drive d\n"); +#ifdef USE_INSTRUMENT + printf("-J or --instrument name - set 'name' to be the profiling instrument\n"); +#endif + printf("-L or --logfile path - set 'path' to be the logfile\n"); + printf("-M or --dumpmissing - dump missing machines and video cards\n"); + printf("-N or --noconfirm - do not ask for confirmation on quit\n"); + printf("-P or --vmpath path - set 'path' to be root for vm\n"); + printf("-Q or --clearnvr - clears the CMOS file\n"); + printf("-R or --rompath path - set 'path' to be ROM path\n"); + printf("-S or --settings - show only the settings dialog\n"); + printf("-V or --vmname name - overrides the name of the running VM\n"); + printf("-X or --clearboth - clears the CMOS and BIOS flash files\n"); + printf("-Y or --donothing - do not show any UI or run the emulation\n"); + printf("-Z or --lastvmpath - the last parameter is VM path rather than config\n"); printf("\nA config file can be specified. If none is, the default file will be used.\n"); return 0; } else if (!strcasecmp(argv[c], "--lastvmpath") || !strcasecmp(argv[c], "-Z")) { lvmp = 1; - } else if (!strcasecmp(argv[c], "--dumpcfg") || !strcasecmp(argv[c], "-O")) { - do_dump_config = 1; #ifdef _WIN32 } else if (!strcasecmp(argv[c], "--debug") || !strcasecmp(argv[c], "-D")) { force_debug = 1; @@ -569,6 +602,17 @@ usage: settings_only = 1; } else if (!strcasecmp(argv[c], "--noconfirm") || !strcasecmp(argv[c], "-N")) { confirm_exit_cmdl = 0; + } else if (!strcasecmp(argv[c], "--dumpmissing") || !strcasecmp(argv[c], "-M")) { + dump_missing = 1; + } else if (!strcasecmp(argv[c], "--donothing") || !strcasecmp(argv[c], "-Y")) { + do_nothing = 1; + } else if (!strcasecmp(argv[c], "--clearflash") || !strcasecmp(argv[c], "-B")) { + clear_flash = 1; + } else if (!strcasecmp(argv[c], "--clearnvr") || !strcasecmp(argv[c], "-Q")) { + clear_cmos = 1; + } else if (!strcasecmp(argv[c], "--clearboth") || !strcasecmp(argv[c], "-X")) { + clear_cmos = 1; + clear_flash = 1; #ifdef _WIN32 } else if (!strcasecmp(argv[c], "--hwnd") || !strcasecmp(argv[c], "-H")) { @@ -578,9 +622,8 @@ usage: uid = (uint32_t *) &unique_id; shwnd = (uint32_t *) &source_hwnd; sscanf(argv[++c], "%08X%08X,%08X%08X", uid + 1, uid, shwnd + 1, shwnd); - } else if (!strcasecmp(argv[c], "--lang") || !strcasecmp(argv[c], "-G")) { - #endif + } else if (!strcasecmp(argv[c], "--lang") || !strcasecmp(argv[c], "-G")) { // This function is currently unimplemented for *nix but has placeholders. lang_init = plat_language_code(argv[++c]); @@ -590,13 +633,13 @@ usage: // The return value of 0 only means that the code is invalid, // not related to that translation is exists or not for the // selected language. - } else if (!strcasecmp(argv[c], "--test")) { + } else if (!strcasecmp(argv[c], "--test") || !strcasecmp(argv[c], "-T")) { /* some (undocumented) test function here.. */ /* .. and then exit. */ return 0; #ifdef USE_INSTRUMENT - } else if (!strcasecmp(argv[c], "--instrument")) { + } else if (!strcasecmp(argv[c], "--instrument") || !strcasecmp(argv[c], "-J")) { if ((c + 1) == argc) goto usage; instru_enabled = 1; @@ -779,6 +822,18 @@ usage: /* Load the configuration file. */ config_load(); + /* Clear the CMOS and/or BIOS flash file, if we were started with + the relevant parameter(s). */ + if (clear_cmos) { + delete_nvr_file(0); + clear_cmos = 0; + } + + if (clear_flash) { + delete_nvr_file(1); + clear_flash = 0; + } + for (uint8_t i = 0; i < FDD_NUM; i++) { if (fn[i] != NULL) { if (strlen(fn[i]) <= 511) @@ -826,27 +881,29 @@ pc_init_modules(void) wchar_t temp[512]; char tempc[512]; -#ifdef PRINT_MISSING_MACHINES_AND_VIDEO_CARDS - c = m = 0; - while (machine_get_internal_name_ex(c) != NULL) { - m = machine_available(c); - if (!m) - pclog("Missing machine: %s\n", machine_getname_ex(c)); - c++; - } + if (dump_missing) { + dump_missing = 0; - c = m = 0; - while (video_get_internal_name(c) != NULL) { - memset(tempc, 0, sizeof(tempc)); - device_get_name(video_card_getdevice(c), 0, tempc); - if ((c > 1) && !(tempc[0])) - break; - m = video_card_available(c); - if (!m) - pclog("Missing video card: %s\n", tempc); - c++; + c = m = 0; + while (machine_get_internal_name_ex(c) != NULL) { + m = machine_available(c); + if (!m) + pclog("Missing machine: %s\n", machine_getname_ex(c)); + c++; + } + + c = m = 0; + while (video_get_internal_name(c) != NULL) { + memset(tempc, 0, sizeof(tempc)); + device_get_name(video_card_getdevice(c), 0, tempc); + if ((c > 1) && !(tempc[0])) + break; + m = video_card_available(c); + if (!m) + pclog("Missing video card: %s\n", tempc); + c++; + } } -#endif pc_log("Scanning for ROM images:\n"); c = m = 0; @@ -945,6 +1002,11 @@ pc_init_modules(void) machine_status_init(); + if (do_nothing) { + do_nothing = 0; + exit(-1); + } + return 1; } diff --git a/src/include/86box/86box.h b/src/include/86box/86box.h index 471c0616d..62a57344e 100644 --- a/src/include/86box/86box.h +++ b/src/include/86box/86box.h @@ -78,7 +78,6 @@ extern "C" { extern uint32_t lang_sys; /* (-) system language code */ extern int dump_on_exit; /* (O) dump regs on exit*/ -extern int do_dump_config; /* (O) dump cfg after load */ extern int start_in_fullscreen; /* (O) start in fullscreen */ #ifdef _WIN32 extern int force_debug; /* (O) force debug output */ From 90d9a5b858ff299779143de55ce4eed9536fedc1 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 12 Oct 2023 04:52:53 +0200 Subject: [PATCH 2/7] Moved the mouse uncapture key combination to variables for future reconfigurability. --- src/device/keyboard.c | 26 ++++++++++++++++++-------- src/include/86box/86box.h | 16 +++++++++++----- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/src/device/keyboard.c b/src/device/keyboard.c index 15eb06035..ade4b17e4 100644 --- a/src/device/keyboard.c +++ b/src/device/keyboard.c @@ -29,6 +29,21 @@ #include "cpu.h" int keyboard_scan; + +#ifdef _WIN32 +/* Windows: F8+F12 */ +uint16_t key_prefix_1 = 0x042; /* F8 */ +uint16_t key_prefix_2 = 0x000; /* Invalid */ +uint16_t key_uncapture_1 = 0x058; /* F12 */ +uint16_t key_uncapture_2 = 0x000; /* Invalid */ +#else +/* WxWidgets cannot do two regular keys.. CTRL+END */ +uint16_t key_prefix_1 = 0x01d; /* Left Ctrl */ +uint16_t key_prefix_2 = 0x11d; /* Right Ctrl */ +uint16_t key_uncapture_1 = 0x04f; /* Numpad End */ +uint16_t key_uncapture_2 = 0x14f; /* End */ +#endif + void (*keyboard_send)(uint16_t val); static int recv_key[512]; /* keyboard input buffer */ @@ -350,15 +365,10 @@ keyboard_isfsexit_up(void) return (!recv_key[0x01d] && !recv_key[0x11d] && !recv_key[0x038] && !recv_key[0x138] && !recv_key[0x051] && !recv_key[0x151]); } -/* Do we have F8-F12 in the keyboard buffer? */ +/* Do we have the mouse uncapture combination in the keyboard buffer? */ int keyboard_ismsexit(void) { -#ifdef _WIN32 - /* Windows: F8+F12 */ - return (recv_key[0x042] && recv_key[0x058]); -#else - /* WxWidgets cannot do two regular keys.. CTRL+END */ - return ((recv_key[0x01D] || recv_key[0x11D]) && (recv_key[0x04F] || recv_key[0x14F])); -#endif + return ((recv_key[key_prefix_1] || recv_key[key_prefix_2]) && + (recv_key[key_uncapture_1] || recv_key[key_uncapture_2])); } diff --git a/src/include/86box/86box.h b/src/include/86box/86box.h index 62a57344e..9c83843b5 100644 --- a/src/include/86box/86box.h +++ b/src/include/86box/86box.h @@ -146,13 +146,19 @@ extern int enable_discord; /* (C) enable Discord integration */ extern int fixed_size_x; extern int fixed_size_y; -extern double mouse_sensitivity; /* (C) Mouse sensitivity scale */ +extern double mouse_sensitivity; /* (C) Mouse sensitivity scale */ #ifdef _Atomic -extern _Atomic double mouse_x_error; /* Mouse error accumulator - Y */ -extern _Atomic double mouse_y_error; /* Mouse error accumulator - Y */ +extern _Atomic double mouse_x_error; /* Mouse error accumulator - Y */ +extern _Atomic double mouse_y_error; /* Mouse error accumulator - Y */ #endif -extern int pit_mode; /* (C) force setting PIT mode */ -extern int fm_driver; /* (C) select FM sound driver */ +extern int pit_mode; /* (C) force setting PIT mode */ +extern int fm_driver; /* (C) select FM sound driver */ + +/* Keyboard variables for future key combination redefinition. */ +extern uint16_t key_prefix_1; +extern uint16_t key_prefix_2; +extern uint16_t key_uncapture_1; +extern uint16_t key_uncapture_2; extern char exe_path[2048]; /* path (dir) of executable */ extern char usr_path[1024]; /* path (dir) of user data */ From e13e854944c6046f39d03cf8c38a4e27254fbcc3 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 12 Oct 2023 05:08:11 +0200 Subject: [PATCH 3/7] Added support for a second prefix. --- src/device/keyboard.c | 21 +++++++++++++++------ src/include/86box/86box.h | 6 ++++-- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/device/keyboard.c b/src/device/keyboard.c index ade4b17e4..5f9986d7b 100644 --- a/src/device/keyboard.c +++ b/src/device/keyboard.c @@ -32,14 +32,18 @@ int keyboard_scan; #ifdef _WIN32 /* Windows: F8+F12 */ -uint16_t key_prefix_1 = 0x042; /* F8 */ -uint16_t key_prefix_2 = 0x000; /* Invalid */ +uint16_t key_prefix_1_1 = 0x042; /* F8 */ +uint16_t key_prefix_1_2 = 0x000; /* Invalid */ +uint16_t key_prefix_2_1 = 0x000; /* Invalid */ +uint16_t key_prefix_2_2 = 0x000; /* Invalid */ uint16_t key_uncapture_1 = 0x058; /* F12 */ uint16_t key_uncapture_2 = 0x000; /* Invalid */ #else /* WxWidgets cannot do two regular keys.. CTRL+END */ -uint16_t key_prefix_1 = 0x01d; /* Left Ctrl */ -uint16_t key_prefix_2 = 0x11d; /* Right Ctrl */ +uint16_t key_prefix_1_1 = 0x01d; /* Left Ctrl */ +uint16_t key_prefix_1_2 = 0x11d; /* Right Ctrl */ +uint16_t key_prefix_2_1 = 0x000; /* Invalid */ +uint16_t key_prefix_2_2 = 0x000; /* Invalid */ uint16_t key_uncapture_1 = 0x04f; /* Numpad End */ uint16_t key_uncapture_2 = 0x14f; /* End */ #endif @@ -369,6 +373,11 @@ keyboard_isfsexit_up(void) int keyboard_ismsexit(void) { - return ((recv_key[key_prefix_1] || recv_key[key_prefix_2]) && - (recv_key[key_uncapture_1] || recv_key[key_uncapture_2])); + if ((key_prefix_2_1 != 0x000) || (key_prefix_2_2 != 0x000)) + return ((recv_key[key_prefix_1_1] || recv_key[key_prefix_1_2]) && + (recv_key[key_prefix_2_1] || recv_key[key_prefix_2_2]) && + (recv_key[key_uncapture_1] || recv_key[key_uncapture_2])); + else + return ((recv_key[key_prefix_1_1] || recv_key[key_prefix_1_2]) && + (recv_key[key_uncapture_1] || recv_key[key_uncapture_2])); } diff --git a/src/include/86box/86box.h b/src/include/86box/86box.h index 9c83843b5..e0ff0e1d9 100644 --- a/src/include/86box/86box.h +++ b/src/include/86box/86box.h @@ -155,8 +155,10 @@ extern int pit_mode; /* (C) force setting PIT mode */ extern int fm_driver; /* (C) select FM sound driver */ /* Keyboard variables for future key combination redefinition. */ -extern uint16_t key_prefix_1; -extern uint16_t key_prefix_2; +extern uint16_t key_prefix_1_1; +extern uint16_t key_prefix_1_2; +extern uint16_t key_prefix_2_1; +extern uint16_t key_prefix_2_2; extern uint16_t key_uncapture_1; extern uint16_t key_uncapture_2; From 15104475a193257a5f79c2e59047be80367dc773 Mon Sep 17 00:00:00 2001 From: OBattler Date: Thu, 12 Oct 2023 05:16:37 +0200 Subject: [PATCH 4/7] Added --keycodes / -K to allow redefining the mouse uncapture key combination. --- src/86box.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/86box.c b/src/86box.c index 320eda721..7ff4ff4c7 100644 --- a/src/86box.c +++ b/src/86box.c @@ -525,6 +525,7 @@ usage: #ifdef USE_INSTRUMENT printf("-J or --instrument name - set 'name' to be the profiling instrument\n"); #endif + printf("-K or --keycodes codes - set 'codes' to be the uncapture combination\n"); printf("-L or --logfile path - set 'path' to be the logfile\n"); printf("-M or --dumpmissing - dump missing machines and video cards\n"); printf("-N or --noconfirm - do not ask for confirmation on quit\n"); @@ -610,6 +611,13 @@ usage: clear_flash = 1; } else if (!strcasecmp(argv[c], "--clearnvr") || !strcasecmp(argv[c], "-Q")) { clear_cmos = 1; + } else if (!strcasecmp(argv[c], "--keycodes") || !strcasecmp(argv[c], "-K")) { + if ((c + 1) == argc) + goto usage; + + sscanf(argv[++c], "%03hX,%03hX,%03hX,%03hX,%03hX,%03hX", + &key_prefix_1_1, &key_prefix_1_2, &key_prefix_2_1, &key_prefix_2_2, + &key_uncapture_1, &key_uncapture_2); } else if (!strcasecmp(argv[c], "--clearboth") || !strcasecmp(argv[c], "-X")) { clear_cmos = 1; clear_flash = 1; From be4d1600245df995df677696a0a7f74108887b5e Mon Sep 17 00:00:00 2001 From: OBattler Date: Fri, 13 Oct 2023 06:00:38 +0200 Subject: [PATCH 5/7] Fixed the state of the 486 DX2 WB CPU's used by the PC 330. --- src/cpu/cpu.c | 5 ++++- src/cpu/cpu_table.c | 8 ++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/cpu/cpu.c b/src/cpu/cpu.c index 0f12cf773..848826264 100644 --- a/src/cpu/cpu.c +++ b/src/cpu/cpu.c @@ -1920,7 +1920,10 @@ cpu_CPUID(void) EDX = 0x49656e69; ECX = 0x6c65746e; } else if (EAX == 1) { - EAX = CPUID; + if ((CPUID == 0x0436) && (cr0 & (1 << 29))) + EAX = 0x0470; + else + EAX = CPUID; EBX = ECX = 0; EDX = CPUID_FPU | CPUID_VME; } else diff --git a/src/cpu/cpu_table.c b/src/cpu/cpu_table.c index cec3c4874..194089f72 100644 --- a/src/cpu/cpu_table.c +++ b/src/cpu/cpu_table.c @@ -439,13 +439,13 @@ const cpu_family_t cpu_families[] = { {"", 0} } }, { - .package = CPU_PKG_SOCKET3_PC330, + .package = CPU_PKG_SOCKET1 | CPU_PKG_SOCKET3_PC330, .manufacturer = "Intel", - .name = "i486DX2", + .name = "i486DX2 WB", .internal_name = "i486dx2_pc330", .cpus = (const CPU[]) { - {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, - {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x470, 0x470, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, + {"50", CPU_i486DX_SLENH, fpus_internal, 50000000, 2, 5000, 0x436, 0x436, 0, CPU_SUPPORTS_DYNAREC, 8, 8,6,6, 6}, + {"66", CPU_i486DX_SLENH, fpus_internal, 66666666, 2, 5000, 0x436, 0x436, 0, CPU_SUPPORTS_DYNAREC, 12,12,6,6, 8}, {"", 0} } }, { From 35ea25914fdb137079d44a7f09e82ea6afe85213 Mon Sep 17 00:00:00 2001 From: Alexander Babikov <2708460+lemondrops@users.noreply.github.com> Date: Fri, 13 Oct 2023 15:47:01 +0500 Subject: [PATCH 6/7] Point feature requests to discussions and machine requests to a dedicated issue --- .github/ISSUE_TEMPLATE/config.yml | 7 +++++-- .github/ISSUE_TEMPLATE/feature_request.md | 20 -------------------- 2 files changed, 5 insertions(+), 22 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index cc1ec7f8e..c03c50764 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,5 +1,8 @@ blank_issues_enabled: false contact_links: - - name: Question + - name: Machine Request + url: https://github.com/86Box/86Box/issues/3577#issue-comment-box + about: Please submit machine addition requests under this tracking issue. + - name: Feature Request or Question url: https://github.com/86Box/86Box/discussions - about: Please ask and answer questions here. + about: Please submit feature requests and ask questions here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 4fe86d5ec..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: feature -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Add any other context or screenshots about the feature request here. From 5471b6eec70dd0ca22ae8ee8cb23c46677b01925 Mon Sep 17 00:00:00 2001 From: Alexander Babikov <2708460+lemondrops@users.noreply.github.com> Date: Fri, 13 Oct 2023 15:47:37 +0500 Subject: [PATCH 7/7] Mark most fields in the bug report form as mandatory --- .github/ISSUE_TEMPLATE/bug_report.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 95905f6aa..cdbc0a56f 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -12,26 +12,36 @@ body: label: What happened? description: Also tell us, what did you expect to happen? placeholder: Tell us what you see! + validations: + required: true - type: textarea attributes: label: Configuration file description: Please copy and paste your machine configuration file (`86box.cfg`). This will be automatically formatted into code, so no need for backticks. render: ini + validations: + required: true - type: input attributes: label: Operating system description: What is your host operating system? placeholder: e.g. Windows 10 + validations: + required: true - type: input attributes: label: CPU description: What is your host CPU? placeholder: e.g. AMD Ryzen 5 5600G + validations: + required: true - type: input attributes: label: 86Box version description: What version of 86Box are you running? (Saying "Latest from Jenkins" is not helpful.) placeholder: e.g. v4.0 build 5000 + validations: + required: true - type: dropdown attributes: label: Build architecture @@ -44,6 +54,8 @@ body: - macOS - Universal (Intel and Apple Silicon) - Windows - x64 (64-bit) - Windows - x86 (32-bit) + validations: + required: true - type: checkboxes attributes: label: Build type @@ -60,6 +72,8 @@ body: - Manager auto-update - I built 86Box myself (please tell us more about your build configuration) - I got 86Box from a third party repository (please tell us where) + validations: + required: true - type: textarea attributes: label: Additional context