mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 18:08:20 -07:00
Merge branch 'master' into feature/mtrr
This commit is contained in:
6
.ci/Jenkinsfile
vendored
6
.ci/Jenkinsfile
vendored
@@ -103,9 +103,9 @@ def gitClone(repository, branch) {
|
||||
if (env.GIT_STASHED != 'true' || env.NODE_NAME != 'debian.citadel') {
|
||||
/* Catch network issues in clone. */
|
||||
try {
|
||||
/* Perform clone/checkout, making sure to update the changelog only once
|
||||
to avoid inaccurate entries from new commits pushed inbetween clones. */
|
||||
def scmVars = checkout(poll: true,
|
||||
/* Perform clone/checkout, making sure to set poll and changelog only
|
||||
once to avoid interference from new commits pushed inbetween clones. */
|
||||
def scmVars = checkout(poll: env.GIT_STASHED != 'true',
|
||||
changelog: env.GIT_STASHED != 'true',
|
||||
scm: [$class: 'GitSCM',
|
||||
branches: [[name: branch]],
|
||||
|
||||
@@ -40,7 +40,7 @@ if(MUNT_EXTERNAL)
|
||||
endif()
|
||||
|
||||
project(86Box
|
||||
VERSION 3.7
|
||||
VERSION 3.7.1
|
||||
DESCRIPTION "Emulator of x86-based systems"
|
||||
HOMEPAGE_URL "https://86box.net"
|
||||
LANGUAGES C CXX)
|
||||
|
||||
@@ -17,10 +17,9 @@
|
||||
|
||||
# Parse arguments.
|
||||
newversion="$1"
|
||||
romversion="$2"
|
||||
if [ -z "$(echo "$newversion" | grep '\.')" ]
|
||||
then
|
||||
echo '[!] Usage: bumpversion.sh x.y[.z] [romversion]'
|
||||
echo '[!] Usage: bumpversion.sh x.y[.z]'
|
||||
exit 1
|
||||
fi
|
||||
shift
|
||||
@@ -32,13 +31,6 @@ newversion_patch=$(echo "$newversion" | cut -d. -f3)
|
||||
[ -z "$newversion_patch" ] && newversion_patch=0
|
||||
|
||||
|
||||
if [ -z "${romversion}" ]; then
|
||||
# Get the latest ROM release from the GitHub API.
|
||||
romversion=$(curl --silent "https://api.github.com/repos/86Box/roms/releases/latest" |
|
||||
grep '"tag_name":' |
|
||||
sed -E 's/.*"([^"]+)".*/\1/')
|
||||
fi
|
||||
|
||||
# Switch to the repository root directory.
|
||||
cd "$(dirname "$0")" || exit
|
||||
|
||||
@@ -69,7 +61,6 @@ patch_file src/include_make/*/version.h EMU_VERSION_PATCH 's/(#\s*define\s+EMU_V
|
||||
patch_file src/include_make/*/version.h COPYRIGHT_YEAR 's/(#\s*define\s+COPYRIGHT_YEAR\s+)[0-9]+/\1'"$(date +%Y)"'/'
|
||||
patch_file src/include_make/*/version.h EMU_DOCS_URL 's/(#\s*define\s+EMU_DOCS_URL\s+"https:\/\/[^\/]+\/en\/v)[^\/]+/\1'"$newversion_maj.$newversion_min"'/'
|
||||
patch_file src/unix/assets/*.spec Version 's/(Version:\s+)[0-9].+/\1'"$newversion"'/'
|
||||
patch_file src/unix/assets/*.spec '%global romver' 's/(^%global\ romver\s+)[0-9]{8}/\1'"$romversion"'/'
|
||||
patch_file src/unix/assets/*.spec 'changelog version' 's/(^[*]\s.*>\s+)[0-9].+/\1'"$newversion"-1'/'
|
||||
patch_file src/unix/assets/*.spec 'changelog date' 's/(^[*]\s)[a-zA-Z]{3}\s[a-zA-Z]{3}\s[0-9]{2}\s[0-9]{4}/\1'"$(pretty_date)"'/'
|
||||
patch_file src/unix/assets/*.metainfo.xml release 's/(<release version=")[^"]+(" date=")[^"]+/\1'"$newversion"'\2'"$(date +%Y-%m-%d)"'/'
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <86box/cdrom.h>
|
||||
#include <86box/cdrom_image.h>
|
||||
#include <86box/plat.h>
|
||||
#include <86box/scsi.h>
|
||||
#include <86box/scsi_device.h>
|
||||
#include <86box/sound.h>
|
||||
|
||||
|
||||
96
src/config.c
96
src/config.c
@@ -72,6 +72,9 @@
|
||||
#include <86box/snd_opl.h>
|
||||
|
||||
|
||||
static int cx, cy, cw, ch;
|
||||
|
||||
|
||||
typedef struct _list_ {
|
||||
struct _list_ *next;
|
||||
} list_t;
|
||||
@@ -616,6 +619,40 @@ load_general(void)
|
||||
video_framerate = config_get_int(cat, "video_gl_framerate", -1);
|
||||
video_vsync = config_get_int(cat, "video_gl_vsync", 0);
|
||||
strncpy(video_shader, config_get_string(cat, "video_gl_shader", ""), sizeof(video_shader));
|
||||
|
||||
window_remember = config_get_int(cat, "window_remember", 0);
|
||||
if (window_remember) {
|
||||
p = config_get_string(cat, "window_coordinates", NULL);
|
||||
if (p == NULL)
|
||||
p = "0, 0, 0, 0";
|
||||
sscanf(p, "%i, %i, %i, %i", &cw, &ch, &cx, &cy);
|
||||
} else {
|
||||
cw = ch = cx = cy = 0;
|
||||
config_delete_var(cat, "window_remember");
|
||||
}
|
||||
|
||||
config_delete_var(cat, "window_coordinates");
|
||||
}
|
||||
|
||||
/* Load monitor section. */
|
||||
static void
|
||||
load_monitor(int monitor_index)
|
||||
{
|
||||
char cat[512], temp[512];
|
||||
char *p = NULL;
|
||||
|
||||
sprintf(cat, "Monitor #%i", monitor_index + 1);
|
||||
sprintf(temp, "%i, %i, %i, %i", cx, cy, cw, ch);
|
||||
|
||||
p = config_get_string(cat, "window_coordinates", NULL);
|
||||
|
||||
if (p == NULL)
|
||||
p = temp;
|
||||
|
||||
if (window_remember)
|
||||
sscanf(p, "%i, %i, %i, %i",
|
||||
&monitor_settings[monitor_index].mon_window_x, &monitor_settings[monitor_index].mon_window_y,
|
||||
&monitor_settings[monitor_index].mon_window_w, &monitor_settings[monitor_index].mon_window_h);
|
||||
}
|
||||
|
||||
/* Load "Machine" section. */
|
||||
@@ -938,47 +975,6 @@ load_video(void)
|
||||
gfxcard_2 = video_get_video_from_internal_name(p);
|
||||
}
|
||||
|
||||
static void
|
||||
load_monitor(int monitor_index)
|
||||
{
|
||||
char monitor_config_name[sizeof("Monitor #") + 12] = { [0] = 0 };
|
||||
char *ptr = NULL;
|
||||
|
||||
if (monitor_index == 0) {
|
||||
/* Migrate configs */
|
||||
ptr = config_get_string("General", "window_coordinates", NULL);
|
||||
|
||||
config_delete_var("General", "window_coordinates");
|
||||
}
|
||||
snprintf(monitor_config_name, sizeof(monitor_config_name), "Monitor #%i", monitor_index + 1);
|
||||
if (!ptr)
|
||||
ptr = config_get_string(monitor_config_name, "window_coordinates", "0, 0, 0, 0");
|
||||
if (window_remember || (vid_resize & 2))
|
||||
sscanf(ptr, "%i, %i, %i, %i",
|
||||
&monitor_settings[monitor_index].mon_window_x, &monitor_settings[monitor_index].mon_window_y,
|
||||
&monitor_settings[monitor_index].mon_window_w, &monitor_settings[monitor_index].mon_window_h);
|
||||
}
|
||||
|
||||
static void
|
||||
save_monitor(int monitor_index)
|
||||
{
|
||||
char monitor_config_name[sizeof("Monitor #") + 12] = { [0] = 0 };
|
||||
char saved_coordinates[12 * 4 + 8 + 1] = { [0] = 0 };
|
||||
|
||||
snprintf(monitor_config_name, sizeof(monitor_config_name), "Monitor #%i", monitor_index + 1);
|
||||
if (!(monitor_settings[monitor_index].mon_window_x == 0
|
||||
&& monitor_settings[monitor_index].mon_window_y == 0
|
||||
&& monitor_settings[monitor_index].mon_window_w == 0
|
||||
&& monitor_settings[monitor_index].mon_window_h == 0)
|
||||
&& (window_remember || (vid_resize & 2))) {
|
||||
snprintf(saved_coordinates, sizeof(saved_coordinates), "%i, %i, %i, %i", monitor_settings[monitor_index].mon_window_x, monitor_settings[monitor_index].mon_window_y,
|
||||
monitor_settings[monitor_index].mon_window_w, monitor_settings[monitor_index].mon_window_h);
|
||||
|
||||
config_set_string(monitor_config_name, "window_coordinates", saved_coordinates);
|
||||
} else
|
||||
config_delete_var(monitor_config_name, "window_coordinates");
|
||||
}
|
||||
|
||||
/* Load "Input Devices" section. */
|
||||
static void
|
||||
load_input_devices(void)
|
||||
@@ -2403,6 +2399,24 @@ save_general(void)
|
||||
delete_section_if_empty(cat);
|
||||
}
|
||||
|
||||
/* Save monitor section. */
|
||||
static void
|
||||
save_monitor(int monitor_index)
|
||||
{
|
||||
char cat[sizeof("Monitor #") + 12] = { [0] = 0 };
|
||||
char temp[512];
|
||||
|
||||
snprintf(cat, sizeof(cat), "Monitor #%i", monitor_index + 1);
|
||||
if (window_remember) {
|
||||
sprintf(temp, "%i, %i, %i, %i",
|
||||
monitor_settings[monitor_index].mon_window_x, monitor_settings[monitor_index].mon_window_y,
|
||||
monitor_settings[monitor_index].mon_window_w, monitor_settings[monitor_index].mon_window_h);
|
||||
|
||||
config_set_string(cat, "window_coordinates", temp);
|
||||
} else
|
||||
config_delete_var(cat, "window_coordinates");
|
||||
}
|
||||
|
||||
/* Save "Machine" section. */
|
||||
static void
|
||||
save_machine(void)
|
||||
|
||||
@@ -1481,10 +1481,16 @@ checkio(uint32_t port)
|
||||
}
|
||||
|
||||
|
||||
#ifdef OLD_DIVEXCP
|
||||
#define divexcp() { \
|
||||
x386_common_log("Divide exception at %04X(%06X):%04X\n",CS,cs,cpu_state.pc); \
|
||||
x86_int(0); \
|
||||
}
|
||||
#else
|
||||
#define divexcp() { \
|
||||
x86de(NULL, 0); \
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int
|
||||
|
||||
@@ -387,10 +387,10 @@ cpu_set(void)
|
||||
is_am486 = (cpu_s->cpu_type == CPU_ENH_Am486DX);
|
||||
is_am486dxl = (cpu_s->cpu_type == CPU_Am486DXL);
|
||||
|
||||
is6117 = !strcmp(cpu_f->manufacturer, "ALi");
|
||||
is6117 = !strcmp(cpu_f->manufacturer, "ALi");
|
||||
|
||||
cpu_isintel = !strcmp(cpu_f->manufacturer, "Intel");
|
||||
cpu_iscyrix = !strcmp(cpu_f->manufacturer, "Cyrix") || !strcmp(cpu_f->manufacturer, "ST");
|
||||
cpu_isintel = !strcmp(cpu_f->manufacturer, "Intel");
|
||||
cpu_iscyrix = !strcmp(cpu_f->manufacturer, "Cyrix") || !strcmp(cpu_f->manufacturer, "ST");
|
||||
|
||||
/* SL-Enhanced Intel 486s have the same SMM save state table layout as Pentiums,
|
||||
and the WinChip datasheet claims those are Pentium-compatible as well. AMD Am486DXL/DXL2 also has compatible SMM, or would if not for it's different SMBase*/
|
||||
@@ -403,6 +403,8 @@ cpu_set(void)
|
||||
is_cxsmm = (!strcmp(cpu_f->manufacturer, "Cyrix") || !strcmp(cpu_f->manufacturer, "ST")) &&
|
||||
(cpu_s->cpu_type >= CPU_Cx486S);
|
||||
|
||||
cpu_isintel = cpu_isintel || !strcmp(cpu_f->manufacturer, "AMD");
|
||||
|
||||
hasfpu = (fpu_type != FPU_NONE);
|
||||
hascache = (cpu_s->cpu_type >= CPU_486SLC) || (cpu_s->cpu_type == CPU_IBM386SLC) ||
|
||||
(cpu_s->cpu_type == CPU_IBM486SLC) || (cpu_s->cpu_type == CPU_IBM486BL);
|
||||
|
||||
@@ -670,6 +670,7 @@ extern void hardresetx86(void);
|
||||
extern void x86_int(int num);
|
||||
extern void x86_int_sw(int num);
|
||||
extern int x86_int_sw_rm(int num);
|
||||
extern void x86de(char *s, uint16_t error);
|
||||
extern void x86gpf(char *s, uint16_t error);
|
||||
extern void x86np(char *s, uint16_t error);
|
||||
extern void x86ss(char *s, uint16_t error);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#define ABRT_MASK 0x7f
|
||||
#define ABRT_MASK 0x3f
|
||||
/*An 'expected' exception is one that would be expected to occur on every execution
|
||||
of this code path; eg a GPF due to being in v86 mode. An 'unexpected' exception is
|
||||
one that would be unlikely to occur on the next exception, eg a page fault may be
|
||||
@@ -71,7 +71,8 @@ enum
|
||||
ABRT_NP = 0xB,
|
||||
ABRT_SS = 0xC,
|
||||
ABRT_GPF = 0xD,
|
||||
ABRT_PF = 0xE
|
||||
ABRT_PF = 0xE,
|
||||
ABRT_DE = 0x40 /* INT 0, but we have to distinguish it from ABRT_NONE. */
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,14 @@ static int opAAD(uint32_t fetchdat)
|
||||
static int opAAM(uint32_t fetchdat)
|
||||
{
|
||||
int base = getbytef();
|
||||
if (!base || !cpu_isintel) base = 10;
|
||||
|
||||
if (base == 0) {
|
||||
x86de(NULL, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (!cpu_isintel) base = 10;
|
||||
|
||||
AH = AL / base;
|
||||
AL %= base;
|
||||
setznp16(AX);
|
||||
|
||||
@@ -165,6 +165,14 @@ x86_doabrt(int x86_abrt)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
x86de(char *s, uint16_t error)
|
||||
{
|
||||
cpu_state.abrt = ABRT_DE;
|
||||
abrt_error = error;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
x86gpf(char *s, uint16_t error)
|
||||
{
|
||||
|
||||
@@ -1407,7 +1407,7 @@ write64_ami(void *priv, uint8_t val)
|
||||
else
|
||||
add_data(dev, 'H');
|
||||
} else
|
||||
add_data(dev, 'H');
|
||||
add_data(dev, 'F');
|
||||
return 0;
|
||||
|
||||
case 0xa2: /* clear keyboard controller lines P22/P23 */
|
||||
@@ -1447,7 +1447,7 @@ write64_ami(void *priv, uint8_t val)
|
||||
case 0xa6: /* read clock */
|
||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
||||
kbd_log("ATkbc: AMI - read clock\n");
|
||||
add_data(dev, !!(dev->ami_stat & 1));
|
||||
add_to_kbc_queue_front(dev, (dev->ami_stat & 1) ? 0xff : 0x00, 0, 0x00);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
@@ -1471,7 +1471,7 @@ write64_ami(void *priv, uint8_t val)
|
||||
case 0xa9: /* read cache */
|
||||
if ((dev->flags & KBC_TYPE_MASK) < KBC_TYPE_PS2_NOREF) {
|
||||
kbd_log("ATkbc: AMI - read cache\n");
|
||||
add_data(dev, !!(dev->ami_stat & 2));
|
||||
add_to_kbc_queue_front(dev, (dev->ami_stat & 2) ? 0xff : 0x00, 0, 0x00);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
@@ -1544,7 +1544,7 @@ write64_ami(void *priv, uint8_t val)
|
||||
* (allow command D1 to change bits 2/3 of the output port)
|
||||
*/
|
||||
kbd_log("ATkbc: AMI - unblock KBC lines P22 and P23\n");
|
||||
dev->output_locked = 1;
|
||||
dev->ami_flags &= 0xfb;
|
||||
return 0;
|
||||
|
||||
case 0xc9:
|
||||
@@ -1553,7 +1553,7 @@ write64_ami(void *priv, uint8_t val)
|
||||
* (disallow command D1 from changing bits 2/3 of the port)
|
||||
*/
|
||||
kbd_log("ATkbc: AMI - block KBC lines P22 and P23\n");
|
||||
dev->output_locked = 1;
|
||||
dev->ami_flags |= 0x04;
|
||||
return 0;
|
||||
|
||||
case 0xcc:
|
||||
@@ -1805,7 +1805,9 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
|
||||
|
||||
case 0xd1: /* write output port */
|
||||
kbd_log("ATkbc: write output port\n");
|
||||
if (dev->output_locked) {
|
||||
/* Bit 2 of AMI flags is P22-P23 blocked (1 = yes, 0 = no),
|
||||
discovered by reverse-engineering the AOpeN Vi15G BIOS. */
|
||||
if (dev->ami_flags & 0x04) {
|
||||
/*If keyboard controller lines P22-P23 are blocked,
|
||||
we force them to remain unchanged.*/
|
||||
val &= ~0x0c;
|
||||
@@ -2268,6 +2270,7 @@ kbd_reset(void *priv)
|
||||
set_scancode_map(dev);
|
||||
|
||||
dev->ami_flags = ((dev->flags & KBC_TYPE_MASK) >= KBC_TYPE_PS2_NOREF) ? 0x01 : 0x00;
|
||||
dev->ami_stat |= 0x02;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include <86box/config.h>
|
||||
#include <86box/timer.h>
|
||||
#include <86box/device.h>
|
||||
#include <86box/scsi.h>
|
||||
#include <86box/scsi_device.h>
|
||||
#include <86box/nvr.h>
|
||||
#include <86box/path.h>
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <86box/config.h>
|
||||
#include <86box/timer.h>
|
||||
#include <86box/device.h>
|
||||
#include <86box/scsi.h>
|
||||
#include <86box/scsi_device.h>
|
||||
#include <86box/nvr.h>
|
||||
#include <86box/plat.h>
|
||||
|
||||
@@ -19,6 +19,9 @@
|
||||
#ifndef EMU_IDE_H
|
||||
# define EMU_IDE_H
|
||||
|
||||
#define IDE_BUS_MAX 4
|
||||
#define IDE_CHAN_MAX 2
|
||||
|
||||
#define HDC_PRIMARY_BASE 0x01F0
|
||||
#define HDC_PRIMARY_SIDE 0x03F6
|
||||
#define HDC_PRIMARY_IRQ 14
|
||||
|
||||
@@ -321,6 +321,9 @@ extern int machine_get_machine_from_internal_name(char *s);
|
||||
extern void machine_init(void);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t *machine_getdevice(int m);
|
||||
extern const device_t *machine_getviddevice(int m);
|
||||
extern const device_t *machine_getsnddevice(int m);
|
||||
extern const device_t *machine_getnetdevice(int m);
|
||||
#endif
|
||||
extern char *machine_get_internal_name_ex(int m);
|
||||
extern int machine_get_nvrmask(int m);
|
||||
|
||||
@@ -21,7 +21,13 @@
|
||||
#ifndef EMU_SCSI_H
|
||||
# define EMU_SCSI_H
|
||||
|
||||
extern int scsi_card_current[4];
|
||||
/* Configuration. */
|
||||
#define SCSI_BUS_MAX 4 /* currently we support up to 4 controllers */
|
||||
|
||||
#define SCSI_ID_MAX 16 /* 16 on wide buses */
|
||||
#define SCSI_LUN_MAX 8 /* always 8 */
|
||||
|
||||
extern int scsi_card_current[SCSI_BUS_MAX];
|
||||
|
||||
extern int scsi_card_available(int card);
|
||||
#ifdef EMU_DEVICE_H
|
||||
|
||||
@@ -21,10 +21,6 @@
|
||||
# define SCSI_DEVICE_H
|
||||
|
||||
/* Configuration. */
|
||||
#define SCSI_BUS_MAX 4 /* currently we support up to 4 controllers */
|
||||
|
||||
#define SCSI_ID_MAX 16 /* 16 on wide buses */
|
||||
#define SCSI_LUN_MAX 8 /* always 8 */
|
||||
|
||||
#define SCSI_LUN_USE_CDB 0xff
|
||||
|
||||
@@ -361,8 +357,9 @@ typedef struct {
|
||||
#define SCSI_REMOVABLE_DISK 0x8000
|
||||
#define SCSI_REMOVABLE_CDROM 0x8005
|
||||
|
||||
#ifdef EMU_SCSI_H
|
||||
extern scsi_device_t scsi_devices[SCSI_BUS_MAX][SCSI_ID_MAX];
|
||||
|
||||
#endif /* EMU_SCSI_H */
|
||||
|
||||
extern int cdrom_add_error_and_subchannel(uint8_t *b, int real_sector_type);
|
||||
extern int cdrom_LBAtoMSF_accurate(void);
|
||||
|
||||
@@ -20,12 +20,12 @@
|
||||
#define EMU_NAME "86Box"
|
||||
#define EMU_NAME_W LSTR(EMU_NAME)
|
||||
|
||||
#define EMU_VERSION "3.7"
|
||||
#define EMU_VERSION "3.7.1"
|
||||
#define EMU_VERSION_W LSTR(EMU_VERSION)
|
||||
#define EMU_VERSION_EX "3.50" /* frozen due to IDE re-detection behavior on Windows */
|
||||
#define EMU_VERSION_MAJ 3
|
||||
#define EMU_VERSION_MIN 7
|
||||
#define EMU_VERSION_PATCH 0
|
||||
#define EMU_VERSION_PATCH 1
|
||||
|
||||
#define EMU_BUILD_NUM 0
|
||||
|
||||
|
||||
@@ -568,12 +568,6 @@ machine_at_scamp_common_init(const machine_t *model, int is_ps2)
|
||||
device_add(&vlsi_scamp_device);
|
||||
}
|
||||
|
||||
const device_t *
|
||||
at_cmdsl386sx25_get_device(void)
|
||||
{
|
||||
return &gd5402_onboard_device;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_cmdsl386sx25_init(const machine_t *model)
|
||||
{
|
||||
@@ -609,12 +603,6 @@ machine_at_dataexpert386sx_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
const device_t *
|
||||
at_spc6033p_get_device(void)
|
||||
{
|
||||
return &ati28800k_spc6033p_device;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_spc6033p_init(const machine_t *model)
|
||||
{
|
||||
@@ -719,12 +707,6 @@ machine_at_flytech386_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
const device_t *
|
||||
at_flytech386_get_device(void)
|
||||
{
|
||||
return &tvga8900d_device;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_mr1217_init(const machine_t *model)
|
||||
{
|
||||
|
||||
@@ -708,12 +708,6 @@ machine_at_ms6168_common_init(const machine_t *model)
|
||||
}
|
||||
}
|
||||
|
||||
const device_t *
|
||||
at_ms6168_get_device(void)
|
||||
{
|
||||
return &voodoo_3_2000_agp_onboard_8m_device;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_borapro_init(const machine_t *model)
|
||||
{
|
||||
|
||||
@@ -902,12 +902,6 @@ machine_xt_t1000_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
const device_t *
|
||||
t1200_get_device(void)
|
||||
{
|
||||
return (&t1200_video_device);
|
||||
}
|
||||
|
||||
int
|
||||
machine_xt_t1200_init(const machine_t *model)
|
||||
{
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -145,6 +145,8 @@ pitf_dump_and_disable_timer(ctrf_t *ctr)
|
||||
{
|
||||
if (ctr->using_timer && timer_is_enabled(&ctr->timer)) {
|
||||
ctr->count = pitf_read_timer(ctr);
|
||||
if (ctr->m == 2)
|
||||
ctr->count--; /* Don't store the offset from pitf_read_timer */
|
||||
timer_disable(&ctr->timer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2058,7 +2058,7 @@ void MainWindow::on_actionMCA_devices_triggered()
|
||||
|
||||
void MainWindow::on_actionShow_non_primary_monitors_triggered()
|
||||
{
|
||||
show_second_monitors ^= 1;
|
||||
show_second_monitors = (int)ui->actionShow_non_primary_monitors->isChecked();
|
||||
|
||||
blitDummied = true;
|
||||
|
||||
|
||||
@@ -148,6 +148,7 @@ private:
|
||||
friend class SpecifyDimensions;
|
||||
friend class ProgSettings;
|
||||
friend class RendererCommon;
|
||||
friend class RendererStack; // For UI variable access by non-primary renderer windows.
|
||||
};
|
||||
|
||||
#endif // QT_MAINWINDOW_HPP
|
||||
|
||||
@@ -115,13 +115,12 @@ void MediaMenu::refresh(QMenu *parentMenu) {
|
||||
cdromMutePos = menu->children().count();
|
||||
menu->addAction(tr("&Mute"), [this, i]() { cdromMute(i); })->setCheckable(true);
|
||||
menu->addSeparator();
|
||||
cdromEmptyPos = menu->children().count();
|
||||
menu->addAction(tr("E&mpty"), [this, i]() { cdromEject(i); })->setCheckable(true);
|
||||
menu->addAction(tr("&Image..."), [this, i]() { cdromMount(i); })->setCheckable(false);
|
||||
cdromReloadPos = menu->children().count();
|
||||
menu->addAction(tr("&Reload previous image"), [this, i]() { cdromReload(i); });
|
||||
menu->addSeparator();
|
||||
cdromImagePos = menu->children().count();
|
||||
menu->addAction(tr("&Image"), [this, i]() { cdromMount(i); })->setCheckable(true);
|
||||
menu->addAction(tr("E&ject"), [this, i]() { cdromEject(i); })->setCheckable(false);
|
||||
cdromMenus[i] = menu;
|
||||
cdromUpdateMenu(i);
|
||||
});
|
||||
@@ -344,6 +343,7 @@ void MediaMenu::floppyExportTo86f(int i) {
|
||||
|
||||
void MediaMenu::floppyUpdateMenu(int i) {
|
||||
QString name = floppyfns[i];
|
||||
QFileInfo fi(floppyfns[i]);
|
||||
|
||||
if (!floppyMenus.contains(i))
|
||||
return;
|
||||
@@ -354,6 +354,7 @@ void MediaMenu::floppyUpdateMenu(int i) {
|
||||
auto* ejectMenu = dynamic_cast<QAction*>(childs[floppyEjectPos]);
|
||||
auto* exportMenu = dynamic_cast<QAction*>(childs[floppyExportPos]);
|
||||
ejectMenu->setEnabled(!name.isEmpty());
|
||||
ejectMenu->setText(QString::asprintf(tr("Eject %s").toUtf8().constData(), name.isEmpty() ? QString().toUtf8().constData() : fi.fileName().toUtf8().constData()));
|
||||
exportMenu->setEnabled(!name.isEmpty());
|
||||
|
||||
int type = fdd_get_type(i);
|
||||
@@ -428,6 +429,10 @@ void MediaMenu::cdromReload(int i) {
|
||||
|
||||
void MediaMenu::cdromUpdateMenu(int i) {
|
||||
QString name = cdrom[i].image_path;
|
||||
QString prev_name = cdrom[i].prev_image_path;
|
||||
QFileInfo fi(cdrom[i].image_path);
|
||||
QFileInfo fi_prev(cdrom[i].prev_image_path);
|
||||
|
||||
if (!cdromMenus.contains(i))
|
||||
return;
|
||||
auto* menu = cdromMenus[i];
|
||||
@@ -437,12 +442,12 @@ void MediaMenu::cdromUpdateMenu(int i) {
|
||||
muteMenu->setChecked(cdrom[i].sound_on == 0);
|
||||
|
||||
auto* imageMenu = dynamic_cast<QAction*>(childs[cdromImagePos]);
|
||||
auto* emptyMenu = dynamic_cast<QAction*>(childs[cdromEmptyPos]);
|
||||
imageMenu->setChecked(cdrom[i].host_drive == 200);
|
||||
emptyMenu->setChecked(cdrom[i].host_drive != 200);
|
||||
imageMenu->setEnabled(!name.isEmpty());
|
||||
imageMenu->setText(QString::asprintf(tr("Eject %s").toUtf8().constData(), name.isEmpty() ? QString().toUtf8().constData() : fi.fileName().toUtf8().constData()));
|
||||
|
||||
auto* prevMenu = dynamic_cast<QAction*>(childs[cdromReloadPos]);
|
||||
prevMenu->setEnabled(cdrom[i].prev_host_drive != 0);
|
||||
prevMenu->setText(QString::asprintf(tr("Reload %s").toUtf8().constData(), prev_name.isEmpty() ? tr("previous image").toUtf8().constData() : fi_prev.fileName().toUtf8().constData()));
|
||||
prevMenu->setVisible(name.isEmpty() && cdrom[i].prev_host_drive != 0);
|
||||
|
||||
QString busName = tr("Unknown Bus");
|
||||
switch (cdrom[i].bus_type) {
|
||||
|
||||
@@ -80,7 +80,6 @@ private:
|
||||
int floppyEjectPos;
|
||||
|
||||
int cdromMutePos;
|
||||
int cdromEmptyPos;
|
||||
int cdromReloadPos;
|
||||
int cdromImagePos;
|
||||
|
||||
|
||||
@@ -187,6 +187,7 @@ void NewFloppyDialog::onCreate() {
|
||||
|
||||
QProgressDialog progress("Creating floppy image", QString(), 0, 100, this);
|
||||
connect(this, &NewFloppyDialog::fileProgress, &progress, &QProgressDialog::setValue);
|
||||
connect(this, &NewFloppyDialog::fileProgress, [] { QApplication::processEvents(); });
|
||||
switch (mediaType_) {
|
||||
case MediaType::Floppy:
|
||||
if (fi.suffix().toLower() == QStringLiteral("86f")) {
|
||||
|
||||
@@ -336,11 +336,15 @@ plat_pause(int p)
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
if ((p == 0) && (time_sync & TIME_SYNC_ENABLED))
|
||||
nvr_time_sync();
|
||||
|
||||
dopause = p;
|
||||
if (p) {
|
||||
if (mouse_capture)
|
||||
plat_mouse_capture(0);
|
||||
|
||||
wcsncpy(oldtitle, ui_window_title(NULL), sizeof_w(oldtitle) - 1);
|
||||
wcscpy(title, oldtitle);
|
||||
paused_msg[QObject::tr(" - PAUSED").toWCharArray(paused_msg)] = 0;
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
#include "qt_mainwindow.hpp"
|
||||
#include "qt_util.hpp"
|
||||
|
||||
#include "ui_qt_mainwindow.h"
|
||||
|
||||
#include "evdev_mouse.hpp"
|
||||
|
||||
#include <atomic>
|
||||
@@ -459,9 +461,9 @@ RendererStack::blitCommon(int x, int y, int w, int h)
|
||||
|
||||
void RendererStack::closeEvent(QCloseEvent* event)
|
||||
{
|
||||
if (cpu_thread_run == 0 || is_quit == 0) {
|
||||
if (cpu_thread_run == 1 || is_quit == 0) {
|
||||
event->accept();
|
||||
show_second_monitors = 0; // TODO: This isn't actually the right fix, so fix this properly.
|
||||
main_window->ui->actionShow_non_primary_monitors->setChecked(false);
|
||||
return;
|
||||
}
|
||||
event->ignore();
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
#include <86box/config.h>
|
||||
#include <86box/timer.h>
|
||||
#include <86box/device.h>
|
||||
#include <86box/scsi.h>
|
||||
#include <86box/scsi_device.h>
|
||||
#include <86box/nvr.h>
|
||||
#include <86box/hdc.h>
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include <86box/nvr.h>
|
||||
#include <86box/hdd.h>
|
||||
#include <86box/hdc.h>
|
||||
#include <86box/scsi.h>
|
||||
#include <86box/scsi_device.h>
|
||||
#include <86box/hdc_ide.h>
|
||||
#include <86box/plat.h>
|
||||
|
||||
@@ -58,6 +58,7 @@ static int (*f_delete_fluid_synth)(void *synth);
|
||||
static int (*f_fluid_synth_noteon)(void *synth, int chan, int key, int vel);
|
||||
static int (*f_fluid_synth_noteoff)(void *synth, int chan, int key);
|
||||
static int (*f_fluid_synth_cc)(void *synth, int chan, int ctrl, int val);
|
||||
static int (*f_fluid_synth_channel_pressure)(void *synth, int chan, int val);
|
||||
static int (*f_fluid_synth_sysex)(void *synth, const char *data, int len, char *response, int *response_len, int *handled, int dryrun);
|
||||
static int (*f_fluid_synth_pitch_bend)(void *synth, int chan, int val);
|
||||
static int (*f_fluid_synth_program_change)(void *synth, int chan, int program);
|
||||
@@ -83,6 +84,7 @@ static dllimp_t fluidsynth_imports[] = {
|
||||
{ "fluid_synth_noteon", &f_fluid_synth_noteon },
|
||||
{ "fluid_synth_noteoff", &f_fluid_synth_noteoff },
|
||||
{ "fluid_synth_cc", &f_fluid_synth_cc },
|
||||
{ "fluid_synth_channel_pressure", &f_fluid_synth_channel_pressure },
|
||||
{ "fluid_synth_sysex", &f_fluid_synth_sysex },
|
||||
{ "fluid_synth_pitch_bend", &f_fluid_synth_pitch_bend },
|
||||
{ "fluid_synth_program_change", &f_fluid_synth_program_change },
|
||||
@@ -199,6 +201,7 @@ fluidsynth_msg(uint8_t *msg)
|
||||
f_fluid_synth_program_change(data->synth, chan, param1);
|
||||
break;
|
||||
case 0xD0: /* Channel Pressure */
|
||||
f_fluid_synth_channel_pressure(data->synth, chan, param1);
|
||||
break;
|
||||
case 0xE0: /* Pitch Bend */
|
||||
f_fluid_synth_pitch_bend(data->synth, chan, (param2 << 7) | param1);
|
||||
|
||||
@@ -12,17 +12,15 @@
|
||||
# After a successful build, you can install the RPMs as follows:
|
||||
# sudo dnf install RPMS/$(uname -m)/86Box-3* RPMS/noarch/86Box-roms*
|
||||
|
||||
%global romver 20220730
|
||||
|
||||
Name: 86Box
|
||||
Version: 3.7
|
||||
Version: 3.7.1
|
||||
Release: 1%{?dist}
|
||||
Summary: Classic PC emulator
|
||||
License: GPLv2+
|
||||
URL: https://86box.net
|
||||
|
||||
Source0: https://github.com/86Box/86Box/archive/refs/tags/v%%{version}.tar.gz
|
||||
Source1: https://github.com/86Box/roms/archive/refs/tags/%{romver}.tar.gz
|
||||
Source1: https://github.com/86Box/roms/archive/refs/tags/%{version}.tar.gz
|
||||
|
||||
BuildRequires: cmake
|
||||
BuildRequires: desktop-file-utils
|
||||
@@ -34,6 +32,7 @@ BuildRequires: libappstream-glib
|
||||
BuildRequires: libevdev-devel
|
||||
BuildRequires: libXi-devel
|
||||
BuildRequires: ninja-build
|
||||
BuildRequires: openal-soft-devel
|
||||
BuildRequires: qt5-linguist
|
||||
BuildRequires: qt5-qtconfiguration-devel
|
||||
BuildRequires: qt5-qtbase-private-devel
|
||||
@@ -56,7 +55,7 @@ It supports various models of PCs, graphics and sound cards, and CPUs.
|
||||
|
||||
%package roms
|
||||
Summary: ROMs for use with 86Box
|
||||
Version: %{romver}
|
||||
Version: %{version}
|
||||
License: Proprietary
|
||||
BuildArch: noarch
|
||||
|
||||
@@ -97,7 +96,7 @@ cp src/unix/assets/net.86box.86Box.metainfo.xml %{buildroot}%{_metainfodir}
|
||||
appstream-util validate-relax --nonet %{buildroot}%{_metainfodir}/net.86box.86Box.metainfo.xml
|
||||
|
||||
# install roms
|
||||
pushd roms-%{romver}
|
||||
pushd roms-%{version}
|
||||
mkdir -p %{buildroot}%{_datadir}/%{name}/roms
|
||||
cp -a * %{buildroot}%{_datadir}/%{name}/roms/
|
||||
popd
|
||||
@@ -112,9 +111,9 @@ popd
|
||||
|
||||
# files part of the rom package
|
||||
%files roms
|
||||
%license roms-%{romver}/LICENSE
|
||||
%license roms-%{version}/LICENSE
|
||||
%{_datadir}/%{name}/roms
|
||||
|
||||
%changelog
|
||||
* Sat Jul 30 2022 Robert de Rooy <robert.de.rooy[AT]gmail.com> 3.7-1
|
||||
* Tue Aug 02 2022 Robert de Rooy <robert.de.rooy[AT]gmail.com> 3.7.1-1
|
||||
- Bump release
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
</categories>
|
||||
<launchable type="desktop-id">net.86box.86Box.desktop</launchable>
|
||||
<releases>
|
||||
<release version="3.7" date="2022-07-30"/>
|
||||
<release version="3.7.1" date="2022-08-02"/>
|
||||
</releases>
|
||||
<content_rating type="oars-1.1" />
|
||||
<description>
|
||||
|
||||
@@ -41,7 +41,7 @@ enum {
|
||||
OTI_037C,
|
||||
OTI_067 = 2,
|
||||
OTI_067_AMA932J,
|
||||
OTI_067_M300 = 4,
|
||||
OTI_067_M300 = 4,
|
||||
OTI_077 = 5
|
||||
};
|
||||
|
||||
@@ -342,29 +342,61 @@ oti_pos_in(uint16_t addr, void *p)
|
||||
}
|
||||
|
||||
|
||||
static float
|
||||
oti_getclock(int clock)
|
||||
{
|
||||
float ret = 0.0;
|
||||
|
||||
switch (clock) {
|
||||
case 0:
|
||||
default:
|
||||
ret = 25175000.0;
|
||||
break;
|
||||
case 1:
|
||||
ret = 28322000.0;
|
||||
break;
|
||||
case 4:
|
||||
ret = 14318000.0;
|
||||
break;
|
||||
case 5:
|
||||
ret = 16257000.0;
|
||||
break;
|
||||
case 7:
|
||||
ret = 35500000.0;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
oti_recalctimings(svga_t *svga)
|
||||
{
|
||||
oti_t *oti = (oti_t *)svga->p;
|
||||
int clk_sel = ((svga->miscout >> 2) & 3) | ((oti->regs[0x0d] & 0x20) >> 3);
|
||||
|
||||
if (oti->regs[0x14] & 0x08) svga->ma_latch |= 0x10000;
|
||||
svga->clock = (cpuclock * (double)(1ull << 32)) / oti_getclock(clk_sel);
|
||||
|
||||
if (oti->chip_id > 0) {
|
||||
if (oti->regs[0x14] & 0x08) svga->ma_latch |= 0x10000;
|
||||
if (oti->regs[0x16] & 0x08) svga->ma_latch |= 0x20000;
|
||||
|
||||
if (oti->regs[0x14] & 0x01) svga->vtotal += 0x400;
|
||||
if (oti->regs[0x14] & 0x02) svga->dispend += 0x400;
|
||||
if (oti->regs[0x14] & 0x04) svga->vsyncstart += 0x400;
|
||||
|
||||
svga->interlace = oti->regs[0x14] & 0x80;
|
||||
}
|
||||
|
||||
if ((oti->regs[0x0d] & 0x0c) && !(oti->regs[0x0d] & 0x10)) svga->rowoffset <<= 1;
|
||||
|
||||
svga->interlace = oti->regs[0x14] & 0x80;
|
||||
|
||||
if (svga->bpp == 16) {
|
||||
svga->render = svga_render_16bpp_highres;
|
||||
svga->hdisp >>= 1;
|
||||
} else if (svga->bpp == 15) {
|
||||
svga->render = svga_render_15bpp_highres;
|
||||
svga->hdisp >>= 1;
|
||||
}
|
||||
if (svga->bpp == 16) {
|
||||
svga->render = svga_render_16bpp_highres;
|
||||
svga->hdisp >>= 1;
|
||||
} else if (svga->bpp == 15) {
|
||||
svga->render = svga_render_15bpp_highres;
|
||||
svga->hdisp >>= 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -167,12 +167,12 @@ vnc_display(rfbClientPtr cl)
|
||||
|
||||
|
||||
static void
|
||||
vnc_blit(int x, int y, int w, int h)
|
||||
vnc_blit(int x, int y, int w, int h, int monitor_index)
|
||||
{
|
||||
uint32_t *p;
|
||||
int yy;
|
||||
|
||||
if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL))
|
||||
if (monitor_index || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL))
|
||||
return;
|
||||
|
||||
for (yy=0; yy<h; yy++) {
|
||||
|
||||
@@ -365,7 +365,7 @@ win_settings_init(void)
|
||||
temp_cassette = cassette_enable;
|
||||
|
||||
mfm_tracking = xta_tracking = esdi_tracking = ide_tracking = 0;
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < SCSI_LUN_MAX; i++)
|
||||
scsi_tracking[i] = 0;
|
||||
|
||||
/* Hard disks category */
|
||||
@@ -1958,12 +1958,12 @@ add_locations(HWND hdlg)
|
||||
settings_add_string(hdlg, IDC_COMBO_HD_CHANNEL, (LPARAM) lptsTemp);
|
||||
}
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
for (i = 0; i < (SCSI_BUS_MAX * SCSI_ID_MAX); i++) {
|
||||
wsprintf(lptsTemp, plat_get_string(IDS_4135), i >> 4, i & 15);
|
||||
settings_add_string(hdlg, IDC_COMBO_HD_ID, (LPARAM) lptsTemp);
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (i = 0; i < (IDE_BUS_MAX * IDE_CHAN_MAX); i++) {
|
||||
wsprintf(lptsTemp, plat_get_string(IDS_4097), i >> 1, i & 1);
|
||||
settings_add_string(hdlg, IDC_COMBO_HD_CHANNEL_IDE, (LPARAM) lptsTemp);
|
||||
}
|
||||
@@ -1989,7 +1989,7 @@ next_free_ide_channel(void)
|
||||
{
|
||||
int64_t i;
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (i = 0; i < (IDE_BUS_MAX * IDE_CHAN_MAX); i++) {
|
||||
if (!(ide_tracking & (0xffLL << (i << 3LL))))
|
||||
return i;
|
||||
}
|
||||
@@ -2002,7 +2002,7 @@ next_free_scsi_id(uint8_t *id)
|
||||
{
|
||||
int64_t i;
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
for (i = 0; i < (SCSI_BUS_MAX * SCSI_ID_MAX); i++) {
|
||||
if (!(scsi_tracking[i >> 3] & (0xffLL << ((i & 0x07) << 3LL)))) {
|
||||
*id = i;
|
||||
return;
|
||||
@@ -2138,7 +2138,7 @@ recalc_next_free_id(HWND hdlg)
|
||||
enable_add = enable_add && !bus_full(&mfm_tracking, 2);
|
||||
enable_add = enable_add && !bus_full(&esdi_tracking, 2);
|
||||
enable_add = enable_add && !bus_full(&xta_tracking, 2);
|
||||
enable_add = enable_add && !bus_full(&ide_tracking, 8);
|
||||
enable_add = enable_add && !bus_full(&ide_tracking, IDE_CHAN_MAX);
|
||||
for (i = 0; i < 2; i++)
|
||||
enable_add = enable_add && !bus_full(&(scsi_tracking[i]), 8);
|
||||
|
||||
@@ -3554,7 +3554,7 @@ win_settings_floppy_drives_recalc_list(HWND hdlg)
|
||||
lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
|
||||
lvI.stateMask = lvI.state = 0;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (i = 0; i < FDD_NUM; i++) {
|
||||
lvI.iSubItem = 0;
|
||||
if (temp_fdd_types[i] > 0) {
|
||||
t = fdd_getname(temp_fdd_types[i]);
|
||||
@@ -3600,7 +3600,7 @@ win_settings_cdrom_drives_recalc_list(HWND hdlg)
|
||||
lvI.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_STATE;
|
||||
lvI.stateMask = lvI.iSubItem = lvI.state = 0;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (i = 0; i < CDROM_NUM; i++) {
|
||||
fsid = combo_id_to_format_string_id(temp_cdrom[i].bus_type);
|
||||
|
||||
lvI.iSubItem = 0;
|
||||
@@ -3947,13 +3947,13 @@ win_settings_zip_drives_init_columns(HWND hdlg)
|
||||
}
|
||||
|
||||
static int
|
||||
get_selected_drive(HWND hdlg, int id)
|
||||
get_selected_drive(HWND hdlg, int id, int max)
|
||||
{
|
||||
int drive = -1;
|
||||
int i, j = 0;
|
||||
HWND h;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
for (i = 0; i < max; i++) {
|
||||
h = GetDlgItem(hdlg, id);
|
||||
j = ListView_GetItemState(h, i, LVIS_SELECTED);
|
||||
if (j)
|
||||
@@ -4179,12 +4179,12 @@ cdrom_add_locations(HWND hdlg)
|
||||
settings_add_string(hdlg, IDC_COMBO_CD_SPEED, (LPARAM) lptsTemp);
|
||||
}
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
for (i = 0; i < (SCSI_BUS_MAX * SCSI_ID_MAX); i++) {
|
||||
wsprintf(lptsTemp, plat_get_string(IDS_4135), i >> 4, i & 15);
|
||||
settings_add_string(hdlg, IDC_COMBO_CD_ID, (LPARAM) lptsTemp);
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (i = 0; i < (IDE_BUS_MAX * IDE_CHAN_MAX); i++) {
|
||||
wsprintf(lptsTemp, plat_get_string(IDS_4097), i >> 1, i & 1);
|
||||
settings_add_string(hdlg, IDC_COMBO_CD_CHANNEL_IDE, (LPARAM) lptsTemp);
|
||||
}
|
||||
@@ -4245,12 +4245,12 @@ mo_add_locations(HWND hdlg)
|
||||
settings_add_string(hdlg, IDC_COMBO_MO_BUS, win_get_string(combo_id_to_string_id(i)));
|
||||
}
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
for (i = 0; i < (SCSI_BUS_MAX * SCSI_ID_MAX); i++) {
|
||||
wsprintf(lptsTemp, plat_get_string(IDS_4135), i >> 4, i & 15);
|
||||
settings_add_string(hdlg, IDC_COMBO_MO_ID, (LPARAM) lptsTemp);
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (i = 0; i < (IDE_BUS_MAX * IDE_CHAN_MAX); i++) {
|
||||
wsprintf(lptsTemp, plat_get_string(IDS_4097), i >> 1, i & 1);
|
||||
settings_add_string(hdlg, IDC_COMBO_MO_CHANNEL_IDE, (LPARAM) lptsTemp);
|
||||
}
|
||||
@@ -4322,12 +4322,12 @@ zip_add_locations(HWND hdlg)
|
||||
settings_add_string(hdlg, IDC_COMBO_ZIP_BUS, win_get_string(combo_id_to_string_id(i)));
|
||||
}
|
||||
|
||||
for (i = 0; i < 64; i++) {
|
||||
for (i = 0; i < (SCSI_BUS_MAX * SCSI_LUN_MAX) ; i++) {
|
||||
wsprintf(lptsTemp, plat_get_string(IDS_4135), i >> 4, i & 15);
|
||||
settings_add_string(hdlg, IDC_COMBO_ZIP_ID, (LPARAM) lptsTemp);
|
||||
}
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
for (i = 0; i < (IDE_BUS_MAX * IDE_CHAN_MAX); i++) {
|
||||
wsprintf(lptsTemp, plat_get_string(IDS_4097), i >> 1, i & 1);
|
||||
settings_add_string(hdlg, IDC_COMBO_ZIP_CHANNEL_IDE, (LPARAM) lptsTemp);
|
||||
}
|
||||
@@ -4497,7 +4497,7 @@ win_settings_floppy_and_cdrom_drives_proc(HWND hdlg, UINT message, WPARAM wParam
|
||||
|
||||
if ((((LPNMHDR) lParam)->code == LVN_ITEMCHANGED) && (((LPNMHDR) lParam)->idFrom == IDC_LIST_FLOPPY_DRIVES)) {
|
||||
old_sel = lv1_current_sel;
|
||||
lv1_current_sel = get_selected_drive(hdlg, IDC_LIST_FLOPPY_DRIVES);
|
||||
lv1_current_sel = get_selected_drive(hdlg, IDC_LIST_FLOPPY_DRIVES, FDD_NUM);
|
||||
if (lv1_current_sel == old_sel)
|
||||
return FALSE;
|
||||
ignore_change = 1;
|
||||
@@ -4507,7 +4507,7 @@ win_settings_floppy_and_cdrom_drives_proc(HWND hdlg, UINT message, WPARAM wParam
|
||||
ignore_change = 0;
|
||||
} else if ((((LPNMHDR) lParam)->code == LVN_ITEMCHANGED) && (((LPNMHDR) lParam)->idFrom == IDC_LIST_CDROM_DRIVES)) {
|
||||
old_sel = lv2_current_sel;
|
||||
lv2_current_sel = get_selected_drive(hdlg, IDC_LIST_CDROM_DRIVES);
|
||||
lv2_current_sel = get_selected_drive(hdlg, IDC_LIST_CDROM_DRIVES, CDROM_NUM);
|
||||
if (lv2_current_sel == old_sel)
|
||||
return FALSE;
|
||||
ignore_change = 1;
|
||||
@@ -4684,7 +4684,7 @@ win_settings_other_removable_devices_proc(HWND hdlg, UINT message, WPARAM wParam
|
||||
|
||||
if ((((LPNMHDR) lParam)->code == LVN_ITEMCHANGED) && (((LPNMHDR) lParam)->idFrom == IDC_LIST_MO_DRIVES)) {
|
||||
old_sel = lv1_current_sel;
|
||||
lv1_current_sel = get_selected_drive(hdlg, IDC_LIST_MO_DRIVES);
|
||||
lv1_current_sel = get_selected_drive(hdlg, IDC_LIST_MO_DRIVES, MO_NUM);
|
||||
if (lv1_current_sel == old_sel)
|
||||
return FALSE;
|
||||
ignore_change = 1;
|
||||
@@ -4707,7 +4707,7 @@ win_settings_other_removable_devices_proc(HWND hdlg, UINT message, WPARAM wParam
|
||||
ignore_change = 0;
|
||||
} else if ((((LPNMHDR) lParam)->code == LVN_ITEMCHANGED) && (((LPNMHDR) lParam)->idFrom == IDC_LIST_ZIP_DRIVES)) {
|
||||
old_sel = lv2_current_sel;
|
||||
lv2_current_sel = get_selected_drive(hdlg, IDC_LIST_ZIP_DRIVES);
|
||||
lv2_current_sel = get_selected_drive(hdlg, IDC_LIST_ZIP_DRIVES, ZIP_NUM);
|
||||
if (lv2_current_sel == old_sel)
|
||||
return FALSE;
|
||||
ignore_change = 1;
|
||||
|
||||
@@ -1491,13 +1491,15 @@ plat_pause(int p)
|
||||
}
|
||||
|
||||
if (p) {
|
||||
if (mouse_capture)
|
||||
plat_mouse_capture(0);
|
||||
|
||||
wcsncpy(oldtitle, ui_window_title(NULL), sizeof_w(oldtitle) - 1);
|
||||
wcscpy(title, oldtitle);
|
||||
wcscat(title, plat_get_string(IDS_2051));
|
||||
ui_window_title(title);
|
||||
} else {
|
||||
} else
|
||||
ui_window_title(oldtitle);
|
||||
}
|
||||
|
||||
/* If un-pausing, synchronize the internal clock with the host's time. */
|
||||
if ((p == 0) && (time_sync & TIME_SYNC_ENABLED))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "86box",
|
||||
"version-string": "3.7",
|
||||
"version-string": "3.7.1",
|
||||
"homepage": "https://86box.net/",
|
||||
"documentation": "http://86box.readthedocs.io/",
|
||||
"license": "GPL-2.0-or-later",
|
||||
|
||||
Reference in New Issue
Block a user