mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 09:58:19 -07:00
Merge branch '86Box:master' into master
This commit is contained in:
@@ -600,8 +600,8 @@ then
|
||||
cmake_flags_extra="$cmake_flags_extra -D MOLTENVK=ON -D \"MOLTENVK_INCLUDE_DIR=$macports\""
|
||||
fi
|
||||
|
||||
# Enable Libserialport
|
||||
cmake_flags_extra="$cmake_flags_extra -D \"LIBSERIALPORT_ROOT=$macports\""
|
||||
# Enable libserialport.
|
||||
cmake_flags_extra="$cmake_flags_extra -D \"LIBSERIALPORT_ROOT=$macports\""
|
||||
|
||||
# Install dependencies only if we're in a new build and/or MacPorts prefix.
|
||||
if check_buildtag "$(basename "$macports")"
|
||||
|
||||
@@ -36,7 +36,7 @@ if(MUNT_EXTERNAL)
|
||||
endif()
|
||||
|
||||
project(86Box
|
||||
VERSION 5.1
|
||||
VERSION 6.0
|
||||
DESCRIPTION "Emulator of x86-based systems"
|
||||
HOMEPAGE_URL "https://86box.net"
|
||||
LANGUAGES C CXX)
|
||||
|
||||
4
debian/changelog
vendored
4
debian/changelog
vendored
@@ -1,5 +1,5 @@
|
||||
86box (5.1) UNRELEASED; urgency=medium
|
||||
86box (6.0) UNRELEASED; urgency=medium
|
||||
|
||||
* Bump release.
|
||||
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Wed, 27 Aug 2025 19:39:16 +0200
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Sun, 14 Sep 2025 01:57:44 +0200
|
||||
|
||||
10
src/86box.c
10
src/86box.c
@@ -230,6 +230,7 @@ int other_scsi_present = 0; /* SCSI contro
|
||||
int is_pcjr = 0; /* The current machine is PCjr. */
|
||||
int portable_mode = 0; /* We are running in portable mode
|
||||
(global dirs = exe path) */
|
||||
int global_cfg_overridden = 0; /* Global config file was overriden on command line */
|
||||
|
||||
int monitor_edid = 0; /* (C) Which EDID to use. 0=default, 1=custom. */
|
||||
char monitor_edid_path[1024] = { 0 }; /* (C) Path to custom EDID */
|
||||
@@ -852,6 +853,7 @@ usage:
|
||||
if ((c + 1) == argc || plat_dir_check(argv[c + 1]))
|
||||
goto usage;
|
||||
|
||||
global_cfg_overridden = 1;
|
||||
global = argv[++c];
|
||||
} else if (!strcasecmp(argv[c], "--image") || !strcasecmp(argv[c], "-I")) {
|
||||
if ((c + 1) == argc)
|
||||
@@ -1151,11 +1153,13 @@ usage:
|
||||
start_vmm = 1;
|
||||
} else {
|
||||
strncpy(vmm_path, vmm_path_cfg, sizeof(vmm_path) - 1);
|
||||
vmm_path[sizeof(vmm_path) - 1] = '\0';
|
||||
}
|
||||
|
||||
if (start_vmm) {
|
||||
pclog("# VM Manager enabled. Path: %s\n", vmm_path);
|
||||
strncpy(usr_path, vmm_path, sizeof(usr_path) - 1);
|
||||
usr_path[sizeof(usr_path) - 1] = '\0';
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
@@ -1864,6 +1868,12 @@ pc_run(void)
|
||||
|
||||
if (title_update) {
|
||||
mouse_msg_idx = ((mouse_type == MOUSE_TYPE_NONE) || (mouse_input_mode >= 1)) ? 2 : !!mouse_capture;
|
||||
#ifdef SCREENSHOT_MODE
|
||||
if (force_10ms)
|
||||
fps = ((fps + 2) / 5) * 5;
|
||||
else
|
||||
fps = ((fps + 20) / 50) * 50;
|
||||
#endif
|
||||
swprintf(temp, sizeof_w(temp), mouse_msg[mouse_msg_idx], fps / (force_10ms ? 1 : 10), force_10ms ? 0 : (fps % 10));
|
||||
#ifdef __APPLE__
|
||||
/* Needed due to modifying the UI on the non-main thread is a big no-no. */
|
||||
|
||||
@@ -84,6 +84,10 @@ if(DEBUGREGS486)
|
||||
add_compile_definitions(USE_DEBUG_REGS_486)
|
||||
endif()
|
||||
|
||||
if(SCREENSHOT_MODE)
|
||||
add_compile_definitions(SCREENSHOT_MODE)
|
||||
endif()
|
||||
|
||||
if(VNC)
|
||||
find_package(LibVNCServer)
|
||||
if(LibVNCServer_FOUND)
|
||||
|
||||
@@ -812,7 +812,7 @@ ide_set_signature(ide_t *ide)
|
||||
ide->tf->sector = 1;
|
||||
ide->tf->head = 0;
|
||||
ide->tf->secount = 1;
|
||||
ide->tf->cylinder = ide_signatures[ide->type & ~IDE_SHADOW];
|
||||
ide->tf->cylinder = (ide->type == IDE_ATAPI_SHADOW) ? 0x0000 : ide_signatures[ide->type & ~IDE_SHADOW];
|
||||
|
||||
if (ide->type == IDE_HDD)
|
||||
ide->drive = 0;
|
||||
@@ -1581,7 +1581,7 @@ ide_reset_registers(ide_t *ide)
|
||||
ide->tf->atastat = DRDY_STAT | DSC_STAT;
|
||||
ide->tf->error = 1;
|
||||
ide->tf->secount = 1;
|
||||
ide->tf->cylinder = ide_signatures[ide->type & ~IDE_SHADOW];
|
||||
ide->tf->cylinder = (ide->type == IDE_ATAPI_SHADOW) ? 0x0000 : ide_signatures[ide->type & ~IDE_SHADOW];
|
||||
ide->tf->sector = 1;
|
||||
ide->tf->head = 0;
|
||||
|
||||
|
||||
@@ -202,6 +202,7 @@ extern char vmm_path[1024]; /* VM Manager path to scan */
|
||||
extern int start_vmm; /* the current execution will start the manager */
|
||||
extern int portable_mode; /* we are running in portable mode
|
||||
(global dirs = exe path) */
|
||||
extern int global_cfg_overridden; /* global config file was overriden on command line */
|
||||
|
||||
extern int monitor_edid; /* (C) Which EDID to use. 0=default, 1=custom. */
|
||||
extern char monitor_edid_path[1024]; /* (C) Path to custom EDID */
|
||||
|
||||
@@ -498,7 +498,7 @@ extern int machine_at_cmdpc_init(const machine_t *);
|
||||
extern int machine_at_portableii_init(const machine_t *);
|
||||
extern int machine_at_portableiii_init(const machine_t *);
|
||||
extern int machine_at_grid1520_init(const machine_t *);
|
||||
extern int machine_at_mpfpc900_init(const machine_t *);
|
||||
extern int machine_at_pc900_init(const machine_t *);
|
||||
extern int machine_at_mr286_init(const machine_t *);
|
||||
extern int machine_at_pc8_init(const machine_t *);
|
||||
extern int machine_at_m290_init(const machine_t *);
|
||||
@@ -516,19 +516,19 @@ extern int machine_at_dells200_init(const machine_t *);
|
||||
extern int machine_at_super286c_init(const machine_t *);
|
||||
extern int machine_at_at122_init(const machine_t *);
|
||||
extern int machine_at_tuliptc7_init(const machine_t *);
|
||||
/* Wells American A*Star with custom award BIOS. */
|
||||
extern int machine_at_wellamerastar_init(const machine_t *);
|
||||
|
||||
/* GC103 */
|
||||
extern int machine_at_quadt286_init(const machine_t *);
|
||||
extern void machine_at_headland_common_init(const machine_t *model, int type);
|
||||
extern int machine_at_tg286m_init(const machine_t *);
|
||||
/* Wells American A*Star with custom award BIOS. */
|
||||
extern int machine_at_wellamerastar_init(const machine_t *);
|
||||
|
||||
/* NEAT */
|
||||
extern int machine_at_px286_init(const machine_t *);
|
||||
extern int machine_at_ataripc4_init(const machine_t *);
|
||||
extern int machine_at_neat_ami_init(const machine_t *);
|
||||
extern int machine_at_3302_init(const machine_t *);
|
||||
extern int machine_at_px286_init(const machine_t *);
|
||||
|
||||
/* SCAMP */
|
||||
extern int machine_at_pc7286_init(const machine_t *);
|
||||
@@ -558,8 +558,8 @@ extern const device_t pbl300sx_device;
|
||||
extern int machine_at_pbl300sx_init(const machine_t *);
|
||||
|
||||
/* ALi M1217 */
|
||||
extern int machine_at_arb1374_init(const machine_t *);
|
||||
extern int machine_at_sbc350a_init(const machine_t *);
|
||||
extern int machine_at_arb1374_init(const machine_t *);
|
||||
extern int machine_at_flytech386_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t c325ax_device;
|
||||
@@ -609,6 +609,10 @@ extern int machine_at_wd76c10_init(const machine_t *);
|
||||
extern int machine_at_pja511m_init(const machine_t *);
|
||||
extern int machine_at_prox1332_init(const machine_t *);
|
||||
|
||||
/* m_at_486slc.c */
|
||||
/* OPTi 283 */
|
||||
extern int machine_at_rycleopardlx_init(const machine_t *);
|
||||
|
||||
/* m_at_386dx.c */
|
||||
/* ISA */
|
||||
#ifdef EMU_DEVICE_H
|
||||
@@ -640,10 +644,6 @@ extern int machine_at_opti495_init(const machine_t *);
|
||||
extern int machine_at_asus3863364k_init(const machine_t *);
|
||||
extern int machine_at_asus386_init(const machine_t *);
|
||||
|
||||
/* m_at_486slc.c */
|
||||
/* OPTi 283 */
|
||||
extern int machine_at_rycleopardlx_init(const machine_t *);
|
||||
|
||||
/* m_at_386dx_486.c */
|
||||
/* ALi M1429G */
|
||||
extern int machine_at_exp4349_init(const machine_t *);
|
||||
@@ -1128,12 +1128,18 @@ extern int machine_at_p6i440e2_init(const machine_t *);
|
||||
|
||||
/* i440BX */
|
||||
extern int machine_at_bf6_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t bx6_device;
|
||||
#endif
|
||||
extern int machine_at_bx6_init(const machine_t *);
|
||||
extern int machine_at_ax6bc_init(const machine_t *);
|
||||
extern int machine_at_p2bls_init(const machine_t *);
|
||||
extern int machine_at_p3bf_init(const machine_t *);
|
||||
extern int machine_at_686bx_init(const machine_t *);
|
||||
extern int machine_at_lgibmx7g_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t ms6119_device;
|
||||
#endif
|
||||
extern int machine_at_ms6119_init(const machine_t *);
|
||||
extern int machine_at_p6sba_init(const machine_t *);
|
||||
extern int machine_at_s1846_init(const machine_t *);
|
||||
|
||||
|
||||
@@ -32,6 +32,14 @@ enum {
|
||||
AD1848_TYPE_CS4235 = 6
|
||||
};
|
||||
|
||||
enum {
|
||||
AD1848_AUX1 = 2,
|
||||
AD1848_AUX2 = 4,
|
||||
AD1848_OUT = 6,
|
||||
AD1848_LINE_IN = 18,
|
||||
AD1848_MONO = 26
|
||||
};
|
||||
|
||||
typedef struct ad1848_t {
|
||||
uint8_t type;
|
||||
uint8_t index;
|
||||
@@ -47,6 +55,7 @@ typedef struct ad1848_t {
|
||||
|
||||
int16_t out_l;
|
||||
int16_t out_r;
|
||||
int8_t cd_vol_reg;
|
||||
double cd_vol_l;
|
||||
double cd_vol_r;
|
||||
int fm_vol_l;
|
||||
@@ -86,8 +95,9 @@ extern void ad1848_write(uint16_t addr, uint8_t val, void *priv);
|
||||
|
||||
extern void ad1848_update(ad1848_t *ad1848);
|
||||
extern void ad1848_speed_changed(ad1848_t *ad1848);
|
||||
extern void ad1848_set_cd_audio_channel(void *priv, int channel);
|
||||
extern void ad1848_filter_cd_audio(int channel, double *buffer, void *priv);
|
||||
extern void ad1848_filter_aux2(void* priv, double* out_l, double* out_r);
|
||||
extern void ad1848_filter_channel(void* priv, int channel, double* out_l, double* out_r);
|
||||
|
||||
extern void ad1848_init(ad1848_t *ad1848, uint8_t type);
|
||||
|
||||
|
||||
@@ -203,9 +203,11 @@ extern const device_t es1373_onboard_device;
|
||||
extern const device_t ct5880_device;
|
||||
extern const device_t ct5880_onboard_device;
|
||||
|
||||
/* Gravis UltraSound and UltraSound Max */
|
||||
/* Gravis UltraSound family */
|
||||
extern const device_t gus_device;
|
||||
extern const device_t gus_v37_device;
|
||||
extern const device_t gus_max_device;
|
||||
extern const device_t gus_ace_device;
|
||||
|
||||
/* IBM PS/1 Audio Card */
|
||||
extern const device_t ps1snd_device;
|
||||
|
||||
@@ -305,7 +305,8 @@ machine_at_portableiii_init(const machine_t *model)
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_grid1520_init(const machine_t *model) {
|
||||
machine_at_grid1520_init(const machine_t *model)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = bios_load_linear("roms/machines/grid1520/grid1520_891025.rom",
|
||||
@@ -329,7 +330,8 @@ machine_at_grid1520_init(const machine_t *model) {
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_mpfpc900_init(const machine_t *model) {
|
||||
machine_at_pc900_init(const machine_t *model)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
ret = bios_load_linear("roms/machines/pc900/mpf_pc900_v207a.bin",
|
||||
@@ -734,6 +736,28 @@ machine_at_tg286m_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_px286_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/px286/KENITEC.BIN",
|
||||
0x000f0000, 65536, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init(model);
|
||||
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
||||
|
||||
if (fdc_current[0] == FDC_INTERNAL)
|
||||
device_add(&fdc_at_device);
|
||||
|
||||
device_add(&neat_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
// TODO
|
||||
// Onboard Paradise PVGA1A-JK VGA Graphics
|
||||
// Data Technology Corporation DTC7187 RLL Controller (Optional)
|
||||
@@ -814,28 +838,6 @@ machine_at_3302_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_px286_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/px286/KENITEC.BIN",
|
||||
0x000f0000, 65536, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init(model);
|
||||
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
||||
|
||||
if (fdc_current[0] == FDC_INTERNAL)
|
||||
device_add(&fdc_at_device);
|
||||
|
||||
device_add(&neat_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* SCAMP */
|
||||
int
|
||||
machine_at_pc7286_init(const machine_t *model)
|
||||
|
||||
@@ -162,28 +162,6 @@ machine_at_pbl300sx_init(const machine_t *model)
|
||||
}
|
||||
|
||||
/* ALi M1217 */
|
||||
int
|
||||
machine_at_arb1374_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/arb1374/1374s.rom",
|
||||
0x000f0000, 65536, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init(model);
|
||||
|
||||
device_add(&ali1217_device);
|
||||
device_add(&ide_isa_device);
|
||||
device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0 | W83XX7_IDE_PRI));
|
||||
|
||||
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_sbc350a_init(const machine_t *model)
|
||||
{
|
||||
@@ -206,6 +184,28 @@ machine_at_sbc350a_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_arb1374_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/arb1374/1374s.rom",
|
||||
0x000f0000, 65536, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init(model);
|
||||
|
||||
device_add(&ali1217_device);
|
||||
device_add(&ide_isa_device);
|
||||
device_add_params(&w83877_device, (void *) (W83877F | W83877_3F0 | W83XX7_IDE_PRI));
|
||||
|
||||
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_flytech386_init(const machine_t *model)
|
||||
{
|
||||
|
||||
@@ -348,17 +348,57 @@ machine_at_bf6_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t bx6_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "bx6",
|
||||
.default_int = 0,
|
||||
.file_filter = "",
|
||||
.spinner = { 0 },
|
||||
.bios = {
|
||||
{ .name = "1998/07/28 - BIOS EG", .internal_name = "bx6", .bios_type = BIOS_NORMAL,
|
||||
.files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/bx6/BX6_EG.BIN", "" } },
|
||||
{ .name = "2000/03/10 - BIOS QS", .internal_name = "bx6_qs", .bios_type = BIOS_NORMAL,
|
||||
.files_no = 1, .local = 0, .size = 131072, .files = { "roms/machines/bx6/BX6_QS.bin", "" } },
|
||||
{ .files_no = 0 }
|
||||
},
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t bx6_device = {
|
||||
.name = "ABIT BX6",
|
||||
.internal_name = "bx6_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = bx6_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_bx6_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
const char* fn;
|
||||
|
||||
ret = bios_load_linear("roms/machines/bx6/BX6_EG.BIN",
|
||||
0x000e0000, 131072, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000e0000, 131072, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
@@ -519,17 +559,61 @@ machine_at_686bx_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t ms6119_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "ms6119",
|
||||
.default_int = 0,
|
||||
.file_filter = "",
|
||||
.spinner = { 0 },
|
||||
.bios = {
|
||||
{ .name = "Award Modular BIOS v4.51PG - Version 3.30b1 (LG IBM Multinet i x7G)", .internal_name = "lgibmx7g", .bios_type = BIOS_NORMAL,
|
||||
.files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/ms6119.331", "" } },
|
||||
{ .name = "Award Modular BIOS v4.51PG - Version 2.12 (Viglen Vig69M)", .internal_name = "vig69m", .bios_type = BIOS_NORMAL,
|
||||
.files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/vig69m.212", "" } },
|
||||
{ .name = "Award Modular BIOS v4.51PG - Version 2.10", .internal_name = "ms6119", .bios_type = BIOS_NORMAL,
|
||||
.files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/w6119ims.2a0", "" } },
|
||||
{ .name = "AMIBIOS 071595 - Version 1.90 (Packard Bell Tacoma)", .internal_name = "tacoma", .bios_type = BIOS_NORMAL,
|
||||
.files_no = 1, .local = 0, .size = 262144, .files = { "roms/machines/ms6119/A19P2190.ROM", "" } },
|
||||
{ .files_no = 0 }
|
||||
},
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t ms6119_device = {
|
||||
.name = "MSI MS-6119",
|
||||
.internal_name = "ms6119_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = ms6119_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_lgibmx7g_init(const machine_t *model)
|
||||
machine_at_ms6119_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
const char* fn;
|
||||
|
||||
ret = bios_load_linear("roms/machines/lgibmx7g/ms6119.331",
|
||||
0x000c0000, 262144, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000c0000, 262144, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
@@ -545,7 +629,7 @@ machine_at_lgibmx7g_init(const machine_t *model)
|
||||
device_add_params(&w83977_device, (void *) (W83977TF | W83977_AMI | W83977_NO_NVR));
|
||||
device_add(&winbond_flash_w29c020_device);
|
||||
spd_register(SPD_TYPE_SDRAM, 0x7, 256);
|
||||
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -15,7 +15,7 @@ msgstr ""
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgid "&Hard reset"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr ""
|
||||
msgid "R&emember size && position"
|
||||
msgstr ""
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr ""
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr ""
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr ""
|
||||
msgid "Start"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Start"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not running"
|
||||
msgstr ""
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr ""
|
||||
msgid "Enable Game port"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr ""
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ msgstr "&Klávesnice vyžaduje záběr myši"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Pravý Ctrl je levý Alt"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Resetovat"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Měnitelná velikost okna"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Pamatovat velikost a pozici"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Pamatovat velikost a pozici"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Renderer"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Vynutit vypnutí"
|
||||
msgid "Start"
|
||||
msgstr "Spustit"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Vynutit vypnutí"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Spustit"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Neběží"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Nízký DMA kanál"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Povolit herní port"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Povolit porty Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Model SID"
|
||||
|
||||
@@ -2968,16 +2980,16 @@ msgid "EDID file \"%ls\" is too large."
|
||||
msgstr "Soubor EDID \"%ls\" je příliš velký."
|
||||
|
||||
msgid "OpenGL input scale"
|
||||
msgstr "Vstupní měřítko OpenGL"
|
||||
msgstr "Měřítko vstupu OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "režim roztažení vstupu OpenGL"
|
||||
msgstr "Režim roztažení vstupu OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Barevné schéma"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Světlo"
|
||||
msgstr "Světlé"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Tmavá"
|
||||
msgstr "Tmavé"
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Tastatur benötigt das Einfangen des Mauszeigers"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Die rechte Strg-Taste ist die linke Alt-Taste"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Kaltstart..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Kaltstart"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Strg+Alt+Entf"
|
||||
@@ -51,6 +51,9 @@ msgstr "G&rößenverstellbares Fenster"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "Größe && &Position merken"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Größe && Position merken"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Re&nderer"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Abschaltung erzwingen"
|
||||
msgid "Start"
|
||||
msgstr "Einschalten"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Abschaltung erzwingen"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Einschalten"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Läuft nicht"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Niedrige DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Game-Port einschalten"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Adlib-Ports einschalten"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID-Modell"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Teclado requiere captura"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "CTRL &derecho es ALT izquierdo"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Hard Reset..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Hard reset"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "Ven&tana redimensionable"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Recordar tamaño y posición"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Recordar tamaño y posición"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Re&nderizador"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Apagqar forzadamente"
|
||||
msgid "Start"
|
||||
msgstr "Iniciar"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Apagqar forzadamente"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Iniciar"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "No en ejecución"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "DMA bajo"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Habilitar puerto de juegos"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Habilitar puertos Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Modelo de SID"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Vaadi näppäimistön kaappaus"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Oikea CTRL on vasen ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Uudelleenkäynnistys (kylmä)..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Uudelleenkäynnistys (kylmä)"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Salli koon muuttaminen"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Muista koko ja sijainti"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Muista koko ja sijainti"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Renderöijä"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Pakota sammutus"
|
||||
msgid "Start"
|
||||
msgstr "Käynnistä"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Pakota sammutus"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Käynnistä"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Ei käynnissä"
|
||||
|
||||
@@ -1318,7 +1327,7 @@ msgid "Found %1"
|
||||
msgstr "%1 löydetty"
|
||||
|
||||
msgid "System"
|
||||
msgstr "Kone"
|
||||
msgstr "Järjestelmä"
|
||||
|
||||
msgid "Storage"
|
||||
msgstr "Tallennus"
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Matala DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Peliportti"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Adlib-portit"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID-malli"
|
||||
|
||||
@@ -2956,10 +2968,10 @@ msgid "CGA composite settings"
|
||||
msgstr "CGA:n komposiittiasetukset"
|
||||
|
||||
msgid "Monitor EDID"
|
||||
msgstr "Monitorin EDID"
|
||||
msgstr "Näytön EDID"
|
||||
|
||||
msgid "Export..."
|
||||
msgstr "Viedä..."
|
||||
msgstr "Vie..."
|
||||
|
||||
msgid "Export EDID"
|
||||
msgstr "Vie EDID"
|
||||
@@ -2968,16 +2980,16 @@ msgid "EDID file \"%ls\" is too large."
|
||||
msgstr "EDID-tiedosto \"%ls\" on liian suuri."
|
||||
|
||||
msgid "OpenGL input scale"
|
||||
msgstr "OpenGL:n syöttöasteikko"
|
||||
msgstr "OpenGL-syötteen skaalaus"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "OpenGL:n syötteen venytystila"
|
||||
msgstr "OpenGL-syötteen venytystila"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Värimaailma"
|
||||
msgstr "Väriteema"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Valo"
|
||||
msgstr "Vaalea"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Tumma"
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "C&apturer le clavier"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "CTRL &Droite devient ALT Gauche"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Hard Reset..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Hard reset"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Suppr"
|
||||
@@ -51,6 +51,9 @@ msgstr "Fenêtre &redimensionnable"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "S&auvegarder taille && position"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Sauvegarder taille && position"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Moteur de re&ndu vidéo"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Arrêt forcé"
|
||||
msgid "Start"
|
||||
msgstr "Démarrer"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Arrêt forcé"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Démarrer"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Inactive"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "DMA bas"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Activer le port de jeu"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Activer les ports Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Modèle SID"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Tipkovnica zahtijeva hvatanje miša"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Desni CTRL je lijevi ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Ponovno pokretanje..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Ponovno pokretanje"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Prozor s promjenjivim veličinama"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Zapamtite veličinu i položaj"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Zapamtite veličinu i položaj"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Renderer"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Prisilno isključi"
|
||||
msgid "Start"
|
||||
msgstr "Pokreni"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "Prisilno &isključi"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Pokreni"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Se ne pokreće"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Niski DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Omogoći vrata za igru"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Omogući Adlib portove"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Model SID-a"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Tastiera richiede la cattura"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "CTRL &destro è ALT sinistro"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Riavvia..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Riavvia"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Canc"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Finestra ridimensionabile"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "R&icorda dimensioni e posizione"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Ricorda dimensioni e posizione"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Re&nderizzatore"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Forza arresto"
|
||||
msgid "Start"
|
||||
msgstr "Avvia"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Forza arresto"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Avvia"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Inattivo"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "DMA basso"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Abilita la porta giochi"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Abilita porte Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Modello SID"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "キーボードはキャプチャが必要(&K)"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "右CTRLを左ALTへ変換(&R)"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "ハード リセット(&H)..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "ハード リセット(&H)"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "Ctrl+Alt+Del(&C)"
|
||||
@@ -51,6 +51,9 @@ msgstr "ウィンドウのサイズを変更可能(&R)"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "ウィンドウのサイズと位置を保存(&E)"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "ウィンドウのサイズと位置を保存"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "レンダラー(&N)"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "強制終了"
|
||||
msgid "Start"
|
||||
msgstr "スタート"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "強制終了(&F)"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "スタート(&S)"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "停止した"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "低DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "ゲームポートを有効にする"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Adlibポートを有効にする"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SIDモデル"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "키보드는 캡쳐가 필요함(&K)"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "우측CTRL로 좌측ALT 입력(&R)"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "재시작(&H)..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "재시작(&H)"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "Ctrl+Alt+Del(&C)"
|
||||
@@ -51,6 +51,9 @@ msgstr "창 크기 조절 가능하게 하기(&R)"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "창 크기와 위치를 기억하기(&E)"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "창 크기와 위치를 기억하기"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "렌더러(&N)"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "강제 종료"
|
||||
msgid "Start"
|
||||
msgstr "시작"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "강제 종료(&F)"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "시작(&S)"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "실행 중이 아닙니다"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "낮은 DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "게임 포트 사용"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Adlib 포트 활성화"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID 모델"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Tastatur krever opptak"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Høyre CTRL er venstre ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Hard tilbakestilling..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Hard tilbakestilling"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Justerbart vindu"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "H&usk størrelse &og plassering"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Husk størrelse og plassering"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Re&nderer"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Tvangsavslutt"
|
||||
msgid "Start"
|
||||
msgstr "Start"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Tvangsavslutt"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Start"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Ikke kjørende"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Lav DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Aktiver spillport"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Aktiver Adlib-porter"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID-modell"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Keyboard vereist vastleggen"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Rechtse CTRL is linkse ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Harde Reset..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Harde reset"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Venster met aanpasbare grootte"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Onthoud grootte && positie"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Onthoud grootte && positie"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Re&nderer"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Forceer afsluiten"
|
||||
msgid "Start"
|
||||
msgstr "Start"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Forceer afsluiten"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Start"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Niet actied"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Lage DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Game-poort inschakelen"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Adlib-poorten inschakelen"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID-model"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Klawiatura wymaga przechwytu myszy"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "Prawy C&TRL to lewy ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "Twardy &reset..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "Twardy &reset"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Okno o zmiennym rozmiarze"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "P&amiętaj rozmiar i pozycję"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Pamiętaj rozmiar i pozycję"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Re&nderer"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Wymuś zamknięcie"
|
||||
msgid "Start"
|
||||
msgstr "Uruchom"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Wymuś zamknięcie"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Uruchom"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Wyłączona"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Niski poziom DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Włącz port gier"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Włącz porty Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Model SID"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "O &teclado requer captura"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "CTR&L direito é o ALT esquerdo"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Reinicialização completa..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Reinicialização completa"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "Ctrl+Alt+&Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Janela redimensionável"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Lembrar tamanho e posição"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Lembrar tamanho e posição"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Renderizador"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Forçar desligamento"
|
||||
msgid "Start"
|
||||
msgstr "Iniciar"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Forçar desligamento"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Iniciar"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Parado"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "DMA baixo"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Ativar a porta do jogo"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Ativar portas Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Modelo do SID"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Teclado requere captura"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "CTRL &direito é ALT esquerdo"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Reinicialização completa..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Reinicialização completa"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Janela redimensionável"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Lembrar tamanho e posição"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Lembrar tamanho e posição"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Renderizador"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Desligamento forçado"
|
||||
msgid "Start"
|
||||
msgstr "Iniciar"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Desligamento forçado"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Iniciar"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Não em execução"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "DMA baixo"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Ativar a porta de jogos"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Ativar portas Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Modelo do SID"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Клавиатура требует захвата"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Правый CTRL - это левый ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Холодная перезагрузка..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Холодная перезагрузка"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Изменяемый размер окна"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Запомнить размер и положение"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Запомнить размер и положение"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Рендеринг"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Принудительное завершение работы"
|
||||
msgid "Start"
|
||||
msgstr "Пуск"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "Принудительное &завершение работы"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Пуск"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Не работает"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Низкий DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Включить игровой порт"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Включить порты Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Модель SID"
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ msgstr "&Klávesnica vyžaduje záber"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Pravý Ctrl je ľavý Alt"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Resetovať"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Premenná veľkosť okna"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Pamätať si veľkosť a polohu"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Pamätať si veľkosť a polohu"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Renderer"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Vynútiť vypnutie"
|
||||
msgid "Start"
|
||||
msgstr "Spustiť"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Vynútiť vypnutie"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Spustiť"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Nebeží"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Nízka hodnota DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Povolenie herného portu"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Povoliť porty Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Model SID"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Tipkovnica potrebuje zajem"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Desni CTRL je levi ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Ponovni zagon..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Ponovni zagon"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "S&premenljiva velikost okna"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Zapomni si velikost in položaj"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Zapomni si velikost in položaj"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Upodabljanje"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Prisilno prekini"
|
||||
msgid "Start"
|
||||
msgstr "Zaženi"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Prisilno prekini"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Zaženi"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Se ne izvaja"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Nizki DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Omogočanje igralnih vrat"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Omogoči vrata Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Model SID-a"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Tangentbord behöver uppfångas"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Höger CTRL är vänster ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Hård omstart..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Hård omstart"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Ändringsbar fönsterstorlek"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "K&om ihåg storlek && position"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Kom ihåg storlek && position"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Re&nderare"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Tvinga avstängning"
|
||||
msgid "Start"
|
||||
msgstr "Starta"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Tvinga avstängning"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Starta"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Körs ej"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Låg DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Aktivera spelport"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Aktivera Adlib-portar"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID-modell"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Klavye sadece fare yakalandığında çalışsın"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Sağ CTRL tuşunu sol ALT tuşu olarak ayarla"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "Yeniden başlamaya &zorla..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "Yeniden başlamaya &zorla"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Boyutlandırılabilir pencere"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Pencere boyut ve pozisyonunu kaydet"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Pencere boyut ve pozisyonunu kaydet"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Derley&ici"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Kapatmaya zorla"
|
||||
msgid "Start"
|
||||
msgstr "Başlat"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Kapatmaya zorla"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Başlat"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Çalışmıyor"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Düşük DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Gameport'ı etkinleştir"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Adlib bağlantı noktalarını etkinleştir"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID Modeli"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "&Клавіатура потребує захвату"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "&Правий CTRL - це лівий ALT"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "&Холодне перезавантаження..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "&Холодне перезавантаження"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "&Змінний розмір вікна"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "&Запам'ятати розмір і становище"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Запам'ятати розмір і становище"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "&Рендеринг"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Примусове завершення роботи"
|
||||
msgid "Start"
|
||||
msgstr "Пуск"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "Примусове &завершення роботи"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Пуск"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Не працює"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "Низький рівень DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Увімкнути ігровий порт"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Увімкнути порти Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Модель SID"
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ msgstr "Bàn phím &hoạt động cần 'bắt' chuột"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "Gắn ALT trái vào CTRL ph&ải"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "Buộc khởi độn&g lại"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
@@ -51,6 +51,9 @@ msgstr "Tùy chỉnh cỡ cử&a sổ"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "Ghi nhớ vị trí và kíc&h thước cửa sổ"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "Ghi nhớ vị trí và kích thước cửa sổ"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "Re&nderer"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "Buộc tắt nguồn máy"
|
||||
msgid "Start"
|
||||
msgstr "Khởi động"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "&Buộc tắt nguồn máy"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "&Khởi động"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "Đang không chạy"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "DMA thấp"
|
||||
msgid "Enable Game port"
|
||||
msgstr "Bật cổng trò chơi"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Bật cổng Adlib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Mẫu SID"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "键盘需要捕捉(&K)"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "将右 CTRL 键映射为左 ALT 键(&R)"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "硬重置(&H)..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "硬重置(&H)"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "Ctrl+Alt+Del(&C)"
|
||||
@@ -51,6 +51,9 @@ msgstr "窗口大小可调(&R)"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "记住窗口大小和位置(&E)"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "记住窗口大小和位置"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "渲染器(&N)"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "强制关机"
|
||||
msgid "Start"
|
||||
msgstr "启动"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "强制关机(&F)"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "启动(&S)"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "未在运行"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "低 DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "启用游戏端口"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "启用 Adlib 端口"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID 芯片型号"
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@ msgstr "鍵盤需要捕捉(&K)"
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "將右 CTRL 鍵映射為左 ALT 鍵(&R)"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "硬重設(&H)..."
|
||||
msgid "&Hard reset"
|
||||
msgstr "硬重設(&H)"
|
||||
|
||||
msgid "&Ctrl+Alt+Del"
|
||||
msgstr "Ctrl+Alt+Del(&C)"
|
||||
@@ -51,6 +51,9 @@ msgstr "視窗大小可調(&R)"
|
||||
msgid "R&emember size && position"
|
||||
msgstr "記住視窗大小和位置(&E)"
|
||||
|
||||
msgid "Remember size && position"
|
||||
msgstr "記住視窗大小和位置"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "渲染器(&N)"
|
||||
|
||||
@@ -1074,6 +1077,12 @@ msgstr "強制關機"
|
||||
msgid "Start"
|
||||
msgstr "開始"
|
||||
|
||||
msgid "&Force shutdown"
|
||||
msgstr "強制關機(&F)"
|
||||
|
||||
msgid "&Start"
|
||||
msgstr "開始(&S)"
|
||||
|
||||
msgid "Not running"
|
||||
msgstr "未執行"
|
||||
|
||||
@@ -2136,6 +2145,9 @@ msgstr "低 DMA"
|
||||
msgid "Enable Game port"
|
||||
msgstr "啟用遊戲埠"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "啟用 Adlib 連接埠"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "SID 型號"
|
||||
|
||||
|
||||
@@ -204,7 +204,11 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
frameRateTimer->setInterval(1000);
|
||||
frameRateTimer->setSingleShot(false);
|
||||
connect(frameRateTimer, &QTimer::timeout, [hertz_label] {
|
||||
hertz_label->setText(tr("%1 Hz").arg(QString::number(monitors[0].mon_actualrenderedframes.load()) + (monitors[0].mon_interlace ? "i" : "")));
|
||||
auto hz = monitors[0].mon_actualrenderedframes.load();
|
||||
#ifdef SCREENSHOT_MODE
|
||||
hz = ((hz + 2) / 5) * 5;
|
||||
#endif
|
||||
hertz_label->setText(tr("%1 Hz").arg(QString::number(hz) + (monitors[0].mon_interlace ? "i" : "")));
|
||||
});
|
||||
statusBar()->addPermanentWidget(hertz_label);
|
||||
frameRateTimer->start(1000);
|
||||
|
||||
@@ -348,7 +348,7 @@
|
||||
<normaloff>:/menuicons/qt/icons/hard_reset.ico</normaloff>:/menuicons/qt/icons/hard_reset.ico</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Hard Reset...</string>
|
||||
<string>&Hard reset</string>
|
||||
</property>
|
||||
<property name="iconVisibleInMenu">
|
||||
<bool>false</bool>
|
||||
|
||||
@@ -161,7 +161,8 @@ VMManagerDetailSection::setupMainLayout()
|
||||
void
|
||||
VMManagerDetailSection::setSections()
|
||||
{
|
||||
int row = 0;
|
||||
int row = 0;
|
||||
bool empty = true;
|
||||
|
||||
for (const auto& section : sections) {
|
||||
QStringList sectionsToAdd = section.value.split(sectionSeparator);
|
||||
@@ -189,12 +190,13 @@ VMManagerDetailSection::setSections()
|
||||
|
||||
const auto hSpacer = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
|
||||
frameGridLayout->addItem(hSpacer, row, 2);
|
||||
empty = false;
|
||||
row++;
|
||||
}
|
||||
}
|
||||
|
||||
collapseButton->setContent(ui->detailFrame);
|
||||
if (sections.size())
|
||||
if (!empty)
|
||||
setVisible(true);
|
||||
}
|
||||
void
|
||||
|
||||
@@ -109,6 +109,53 @@ VMManagerMain::VMManagerMain(QWidget *parent) :
|
||||
if (indexAt.isValid()) {
|
||||
QMenu contextMenu(tr("Context Menu"), ui->listView);
|
||||
|
||||
QAction startAction(tr("&Start"));
|
||||
contextMenu.addAction(&startAction);
|
||||
connect(&startAction, &QAction::triggered, [this] {
|
||||
selected_sysconfig->startButtonPressed();
|
||||
});
|
||||
startAction.setEnabled(selected_sysconfig->process->state() == QProcess::NotRunning);
|
||||
startAction.setVisible(selected_sysconfig->process->state() == QProcess::NotRunning);
|
||||
|
||||
QAction pauseAction(tr("&Pause"));
|
||||
contextMenu.addAction(&pauseAction);
|
||||
connect(&pauseAction, &QAction::triggered, [this] {
|
||||
selected_sysconfig->pauseButtonPressed();
|
||||
});
|
||||
pauseAction.setEnabled(selected_sysconfig->process->state() == QProcess::Running);
|
||||
pauseAction.setVisible(selected_sysconfig->process->state() == QProcess::Running);
|
||||
if (selected_sysconfig->getProcessStatus() != VMManagerSystem::ProcessStatus::Running)
|
||||
pauseAction.setText(tr("Re&sume"));
|
||||
|
||||
QAction resetAction(tr("&Hard reset"));
|
||||
contextMenu.addAction(&resetAction);
|
||||
connect(&resetAction, &QAction::triggered, [this] {
|
||||
selected_sysconfig->restartButtonPressed();
|
||||
});
|
||||
resetAction.setEnabled(selected_sysconfig->process->state() == QProcess::Running);
|
||||
|
||||
QAction forceShutdownAction(tr("&Force shutdown"));
|
||||
contextMenu.addAction(&forceShutdownAction);
|
||||
connect(&forceShutdownAction, &QAction::triggered, [this] {
|
||||
selected_sysconfig->shutdownForceButtonPressed();
|
||||
});
|
||||
forceShutdownAction.setEnabled(selected_sysconfig->process->state() == QProcess::Running);
|
||||
|
||||
QAction cadAction(tr("&Ctrl+Alt+Del"));
|
||||
contextMenu.addAction(&cadAction);
|
||||
connect(&cadAction, &QAction::triggered, [this] {
|
||||
selected_sysconfig->cadButtonPressed();
|
||||
});
|
||||
cadAction.setEnabled(selected_sysconfig->process->state() == QProcess::Running);
|
||||
|
||||
contextMenu.addSeparator();
|
||||
|
||||
QAction settingsAction(tr("&Settings..."));
|
||||
contextMenu.addAction(&settingsAction);
|
||||
connect(&settingsAction, &QAction::triggered, [this] {
|
||||
selected_sysconfig->launchSettings();
|
||||
});
|
||||
|
||||
QAction nameChangeAction(tr("Change &display name..."));
|
||||
contextMenu.addAction(&nameChangeAction);
|
||||
// Use a lambda to call a function so indexAt can be passed
|
||||
@@ -343,7 +390,7 @@ illegal_chars:
|
||||
} else {
|
||||
QMenu contextMenu(tr("Context Menu"), ui->listView);
|
||||
|
||||
QAction newMachineAction(tr("New machine..."));
|
||||
QAction newMachineAction(tr("&New machine..."));
|
||||
contextMenu.addAction(&newMachineAction);
|
||||
connect(&newMachineAction, &QAction::triggered, this, &VMManagerMain::newMachineWizard);
|
||||
|
||||
@@ -740,6 +787,18 @@ VMManagerMain::machineCountString(QString states) const
|
||||
return tr("VMs: %1").arg(states);
|
||||
}
|
||||
|
||||
QList<int>
|
||||
VMManagerMain::getPaneSizes() const
|
||||
{
|
||||
return ui->splitter->sizes();
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerMain::setPaneSizes(const QList<int> &sizes)
|
||||
{
|
||||
ui->splitter->setSizes(sizes);
|
||||
}
|
||||
|
||||
void
|
||||
VMManagerMain::modelDataChange()
|
||||
{
|
||||
|
||||
@@ -87,6 +87,9 @@ public slots:
|
||||
void onConfigUpdated(const QString &uuid);
|
||||
int getActiveMachineCount();
|
||||
|
||||
QList<int> getPaneSizes() const;
|
||||
void setPaneSizes(const QList<int> &sizes);
|
||||
|
||||
private:
|
||||
Ui::VMManagerMain *ui;
|
||||
|
||||
|
||||
@@ -135,26 +135,42 @@ VMManagerMainWindow(QWidget *parent)
|
||||
|
||||
{
|
||||
auto config = new VMManagerConfig(VMManagerConfig::ConfigType::General);
|
||||
this->ui->actionRemember_size_and_position->setChecked(!!config->getStringValue("window_remember").toInt());
|
||||
if (ui->actionRemember_size_and_position->isChecked()) {
|
||||
QStringList list = config->getStringValue("window_coordinates").split(',');
|
||||
for (auto& cur : list) {
|
||||
cur = cur.trimmed();
|
||||
}
|
||||
QRect geom;
|
||||
geom.setX(list[0].toInt());
|
||||
geom.setY(list[1].toInt());
|
||||
geom.setWidth(list[2].toInt());
|
||||
geom.setHeight(list[3].toInt());
|
||||
if (!!config->getStringValue("window_remember").toInt()) {
|
||||
QString coords = config->getStringValue("window_coordinates");
|
||||
if (!coords.isEmpty()) {
|
||||
QStringList list = coords.split(',');
|
||||
for (auto& cur : list) {
|
||||
cur = cur.trimmed();
|
||||
}
|
||||
QRect geom;
|
||||
geom.setX(list[0].toInt());
|
||||
geom.setY(list[1].toInt());
|
||||
geom.setWidth(list[2].toInt());
|
||||
geom.setHeight(list[3].toInt());
|
||||
|
||||
setGeometry(geom);
|
||||
}
|
||||
|
||||
setGeometry(geom);
|
||||
if (!!config->getStringValue("window_maximized").toInt()) {
|
||||
setWindowState(windowState() | Qt::WindowMaximized);
|
||||
}
|
||||
|
||||
QString splitter = config->getStringValue("window_splitter");
|
||||
if (!splitter.isEmpty()) {
|
||||
QStringList list = splitter.split(',');
|
||||
for (auto& cur : list) {
|
||||
cur = cur.trimmed();
|
||||
}
|
||||
QList<int> paneSizes;
|
||||
paneSizes.append(list[0].toInt());
|
||||
paneSizes.append(list[1].toInt());
|
||||
|
||||
vmm->setPaneSizes(paneSizes);
|
||||
}
|
||||
} else {
|
||||
config->setStringValue("window_remember", "");
|
||||
config->setStringValue("window_coordinates", "");
|
||||
config->setStringValue("window_maximized", "");
|
||||
config->setStringValue("window_splitter", "");
|
||||
}
|
||||
delete config;
|
||||
}
|
||||
@@ -214,14 +230,14 @@ VMManagerMainWindow::saveSettings() const
|
||||
const auto currentSelection = vmm->getCurrentSelection();
|
||||
const auto config = new VMManagerConfig(VMManagerConfig::ConfigType::General);
|
||||
config->setStringValue("last_selection", currentSelection);
|
||||
config->setStringValue("window_remember", QString::number(ui->actionRemember_size_and_position->isChecked()));
|
||||
if (ui->actionRemember_size_and_position->isChecked()) {
|
||||
if (!!config->getStringValue("window_remember").toInt()) {
|
||||
config->setStringValue("window_coordinates", QString::asprintf("%i, %i, %i, %i", this->geometry().x(), this->geometry().y(), this->geometry().width(), this->geometry().height()));
|
||||
config->setStringValue("window_maximized", this->isMaximized() ? "1" : "");
|
||||
config->setStringValue("window_splitter", QString::asprintf("%i, %i", vmm->getPaneSizes()[0], vmm->getPaneSizes()[1]));
|
||||
} else {
|
||||
config->setStringValue("window_remember", "");
|
||||
config->setStringValue("window_coordinates", "");
|
||||
config->setStringValue("window_maximized", "");
|
||||
config->setStringValue("window_splitter", "");
|
||||
}
|
||||
// Sometimes required to ensure the settings save before the app exits
|
||||
config->sync();
|
||||
|
||||
@@ -28,7 +28,6 @@
|
||||
<string>&Tools</string>
|
||||
</property>
|
||||
<addaction name="actionPreferences"/>
|
||||
<addaction name="actionRemember_size_and_position"/>
|
||||
<addaction name="actionCheck_for_updates"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
@@ -99,6 +98,9 @@
|
||||
<property name="text">
|
||||
<string>&Start</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Start</string>
|
||||
</property>
|
||||
<property name="iconVisibleInMenu">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
@@ -109,7 +111,10 @@
|
||||
<normaloff>:/menuicons/qt/icons/hard_reset.ico</normaloff>:/menuicons/qt/icons/hard_reset.ico</iconset>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Hard Reset...</string>
|
||||
<string>&Hard reset</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Hard reset</string>
|
||||
</property>
|
||||
<property name="iconVisibleInMenu">
|
||||
<bool>false</bool>
|
||||
@@ -168,6 +173,9 @@
|
||||
<property name="text">
|
||||
<string>&Settings...</string>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Settings...</string>
|
||||
</property>
|
||||
<property name="menuRole">
|
||||
<enum>QAction::NoRole</enum>
|
||||
</property>
|
||||
@@ -187,14 +195,6 @@
|
||||
<string>New machine...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionRemember_size_and_position">
|
||||
<property name="checkable">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>R&emember size && position</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionPreferences">
|
||||
<property name="text">
|
||||
<string>&Preferences...</string>
|
||||
|
||||
@@ -70,6 +70,8 @@ VMManagerPreferences(QWidget *parent) : ui(new Ui::VMManagerPreferences)
|
||||
#endif
|
||||
const auto useRegexSearch = config->getStringValue("regex_search").toInt();
|
||||
ui->regexSearchCheckBox->setChecked(useRegexSearch);
|
||||
const auto rememberSizePosition = config->getStringValue("window_remember").toInt();
|
||||
ui->rememberSizePositionCheckBox->setChecked(rememberSizePosition);
|
||||
|
||||
ui->radioButtonSystem->setChecked(color_scheme == 0);
|
||||
ui->radioButtonLight->setChecked(color_scheme == 1);
|
||||
@@ -112,6 +114,7 @@ VMManagerPreferences::accept()
|
||||
#if EMU_BUILD_NUM != 0
|
||||
config->setStringValue("update_check", ui->updateCheckBox->isChecked() ? "1" : "0");
|
||||
#endif
|
||||
config->setStringValue("window_remember", ui->rememberSizePositionCheckBox->isChecked() ? "1" : "0");
|
||||
config->setStringValue("regex_search", ui->regexSearchCheckBox->isChecked() ? "1" : "0");
|
||||
QDialog::accept();
|
||||
}
|
||||
|
||||
@@ -92,6 +92,13 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="rememberSizePositionCheckBox">
|
||||
<property name="text">
|
||||
<string>Remember size && position</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="updateCheckBox">
|
||||
<property name="text">
|
||||
@@ -165,6 +172,7 @@
|
||||
<tabstop>dirSelectButton</tabstop>
|
||||
<tabstop>comboBoxLanguage</tabstop>
|
||||
<tabstop>pushButtonLanguage</tabstop>
|
||||
<tabstop>rememberSizePositionCheckBox</tabstop>
|
||||
<tabstop>updateCheckBox</tabstop>
|
||||
<tabstop>regexSearchCheckBox</tabstop>
|
||||
</tabstops>
|
||||
|
||||
@@ -425,6 +425,16 @@ VMManagerSystem::launchMainProcess() {
|
||||
QStringList args;
|
||||
args << "--vmpath" << config_dir;
|
||||
args << "--vmname" << displayName;
|
||||
if (rom_path[0] != '\0')
|
||||
args << "--rompath" << QString(rom_path);
|
||||
if (global_cfg_overridden)
|
||||
args << "--global" << QString(global_cfg_path);
|
||||
if (!hook_enabled)
|
||||
args << "--nohook";
|
||||
if (start_in_fullscreen)
|
||||
args << "--fullscreen";
|
||||
if (!confirm_exit_cmdl)
|
||||
args << "--noconfirm";
|
||||
process->setProgram(program);
|
||||
process->setArguments(args);
|
||||
qDebug() << Q_FUNC_INFO << " Full Command:" << process->program() << " " << process->arguments();
|
||||
@@ -481,6 +491,10 @@ VMManagerSystem::launchSettings() {
|
||||
QStringList open_command_args;
|
||||
QStringList args;
|
||||
args << "--vmpath" << config_dir << "--settings";
|
||||
if (rom_path[0] != '\0')
|
||||
args << "--rompath" << QString(rom_path);
|
||||
if (global_cfg_overridden)
|
||||
args << "--global" << QString(global_cfg_path);
|
||||
process->setProgram(program);
|
||||
process->setArguments(args);
|
||||
qDebug() << Q_FUNC_INFO << " Full Command:" << process->program() << " " << process->arguments();
|
||||
@@ -711,7 +725,7 @@ VMManagerSystem::setupVars() {
|
||||
}
|
||||
|
||||
static auto floppy_match = QRegularExpression("fdd_\\d\\d_type", QRegularExpression::CaseInsensitiveOption);
|
||||
static auto cdrom_match = QRegularExpression("cdrom_\\d\\d_type", QRegularExpression::CaseInsensitiveOption);
|
||||
static auto cdrom_match = QRegularExpression("cdrom_\\d\\d_parameters", QRegularExpression::CaseInsensitiveOption);
|
||||
for(const auto& key: floppy_cdrom_config.keys()) {
|
||||
if(key.contains(floppy_match)) {
|
||||
// auto device_number = key.split("_").at(1);
|
||||
@@ -727,22 +741,23 @@ VMManagerSystem::setupVars() {
|
||||
}
|
||||
if(key.contains(cdrom_match)) {
|
||||
auto device_number = key.split("_").at(1);
|
||||
auto cdrom_internal_name = QString(floppy_cdrom_config[key]);
|
||||
auto cdrom_parameters = QString(floppy_cdrom_config[key]);
|
||||
auto cdrom_bus = cdrom_parameters.split(",").at(1).trimmed().toUpper();
|
||||
|
||||
auto cdrom_type_key = QString("cdrom_%1_type").arg(device_number);
|
||||
auto cdrom_internal_name = QString(floppy_cdrom_config[cdrom_type_key]);
|
||||
if (cdrom_internal_name.isEmpty())
|
||||
cdrom_internal_name = "86cd";
|
||||
auto cdrom_type = cdrom_get_from_internal_name(cdrom_internal_name.toUtf8().data());
|
||||
|
||||
auto cdrom_speed_key = QString("cdrom_%1_speed").arg(device_number);
|
||||
auto cdrom_parameters_key = QString("cdrom_%1_parameters").arg(device_number);
|
||||
auto cdrom_speed = QString(floppy_cdrom_config[cdrom_speed_key]);
|
||||
auto cdrom_parameters = QString(floppy_cdrom_config[cdrom_parameters_key]);
|
||||
auto cdrom_bus = cdrom_parameters.split(",").at(1).trimmed().toUpper();
|
||||
if (cdrom_speed.isEmpty())
|
||||
cdrom_speed = "8";
|
||||
|
||||
if(cdrom_type != -1) {
|
||||
if(!cdrom_speed.isEmpty()) {
|
||||
cdrom_speed = QString("%1x ").arg(cdrom_speed);
|
||||
}
|
||||
if(!cdrom_bus.isEmpty()) {
|
||||
cdrom_bus = QString(" (%1)").arg(cdrom_bus);
|
||||
}
|
||||
if ((cdrom_bus != "NONE") && (cdrom_type != -1)) {
|
||||
cdrom_speed = QString("%1x ").arg(cdrom_speed);
|
||||
cdrom_bus = QString(" (%1)").arg(cdrom_bus);
|
||||
cdromDevices.append(QString("%1%2 %3 %4%5").arg(cdrom_speed, cdrom_drive_types[cdrom_type].vendor, cdrom_drive_types[cdrom_type].model, cdrom_drive_types[cdrom_type].revision, cdrom_bus));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -501,16 +501,16 @@ readonly_x:
|
||||
if (updatefreq)
|
||||
ad1848_updatefreq(ad1848);
|
||||
|
||||
temp = (ad1848->type < AD1848_TYPE_CS4231) ? 2 : ((ad1848->type == AD1848_TYPE_CS4231) ? 18 : 4);
|
||||
if (ad1848->regs[temp] & 0x80)
|
||||
ad1848->cd_vol_l = 0;
|
||||
else
|
||||
ad1848->cd_vol_l = ad1848_vols_5bits_aux_gain[ad1848->regs[temp] & 0x1f];
|
||||
temp++;
|
||||
if (ad1848->regs[temp] & 0x80)
|
||||
ad1848->cd_vol_r = 0;
|
||||
else
|
||||
ad1848->cd_vol_r = ad1848_vols_5bits_aux_gain[ad1848->regs[temp] & 0x1f];
|
||||
if (ad1848->cd_vol_reg > -1) {
|
||||
if (ad1848->regs[ad1848->cd_vol_reg] & 0x80)
|
||||
ad1848->cd_vol_l = 0;
|
||||
else
|
||||
ad1848->cd_vol_l = ad1848_vols_5bits_aux_gain[ad1848->regs[ad1848->cd_vol_reg] & 0x1f];
|
||||
if (ad1848->regs[ad1848->cd_vol_reg + 1] & 0x80)
|
||||
ad1848->cd_vol_r = 0;
|
||||
else
|
||||
ad1848->cd_vol_r = ad1848_vols_5bits_aux_gain[ad1848->regs[ad1848->cd_vol_reg + 1] & 0x1f];
|
||||
}
|
||||
|
||||
readonly_i:
|
||||
ad1848_log("AD1848: write(I%d, %02X)\n", ad1848->index, val);
|
||||
@@ -746,6 +746,18 @@ ad1848_poll(void *priv)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ad1848_set_cd_audio_channel(void *priv, int channel)
|
||||
{
|
||||
ad1848_t *ad1848 = (ad1848_t *) priv;
|
||||
|
||||
const int max_channel = (ad1848->type >= AD1848_TYPE_CS4231) ? 31 : 15;
|
||||
if (channel > max_channel)
|
||||
channel = max_channel;
|
||||
|
||||
ad1848->cd_vol_reg = channel;
|
||||
}
|
||||
|
||||
void
|
||||
ad1848_filter_cd_audio(int channel, double *buffer, void *priv)
|
||||
{
|
||||
@@ -758,20 +770,24 @@ ad1848_filter_cd_audio(int channel, double *buffer, void *priv)
|
||||
}
|
||||
|
||||
void
|
||||
ad1848_filter_aux2(void *priv, double *out_l, double *out_r)
|
||||
ad1848_filter_channel(void *priv, int channel, double *out_l, double *out_r)
|
||||
{
|
||||
const ad1848_t *ad1848 = (ad1848_t *) priv;
|
||||
|
||||
if (ad1848->regs[4] & 0x80) {
|
||||
const int max_channel = (ad1848->type >= AD1848_TYPE_CS4231) ? 31 : 15;
|
||||
if (channel > max_channel)
|
||||
channel = max_channel;
|
||||
|
||||
if (ad1848->regs[channel] & 0x80) {
|
||||
*out_l = 0.0;
|
||||
} else {
|
||||
*out_l = ((*out_l) * ad1848_vols_5bits_aux_gain[ad1848->regs[4] & 0x1f]) / 65536.0;
|
||||
*out_l = ((*out_l) * ad1848_vols_5bits_aux_gain[ad1848->regs[channel] & 0x1f]) / 65536.0;
|
||||
}
|
||||
|
||||
if (ad1848->regs[5] & 0x80) {
|
||||
if (ad1848->regs[channel + 1] & 0x80) {
|
||||
*out_r = 0.0;
|
||||
} else {
|
||||
*out_r = ((*out_r) * ad1848_vols_5bits_aux_gain[ad1848->regs[5] & 0x1f]) / 65536.0;
|
||||
*out_r = ((*out_r) * ad1848_vols_5bits_aux_gain[ad1848->regs[channel + 1] & 0x1f]) / 65536.0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -837,6 +853,8 @@ ad1848_init(ad1848_t *ad1848, uint8_t type)
|
||||
|
||||
ad1848->out_l = ad1848->out_r = 0;
|
||||
ad1848->fm_vol_l = ad1848->fm_vol_r = 65536;
|
||||
ad1848->cd_vol_l = ad1848->cd_vol_r = 65536;
|
||||
ad1848->cd_vol_reg = -1;
|
||||
ad1848_updatevolmask(ad1848);
|
||||
if (type >= AD1848_TYPE_CS4235)
|
||||
ad1848->fmt_mask = 0x50;
|
||||
|
||||
@@ -1211,6 +1211,7 @@ azt_init(const device_t *info)
|
||||
|
||||
/* wss part */
|
||||
ad1848_init(&azt2316a->ad1848, device_get_config_int("codec"));
|
||||
ad1848_set_cd_audio_channel(&azt2316a->ad1848, (device_get_config_int("codec") == AD1848_TYPE_CS4248) ? AD1848_AUX1 : AD1848_LINE_IN);
|
||||
|
||||
ad1848_setirq(&azt2316a->ad1848, azt2316a->cur_wss_irq);
|
||||
ad1848_setdma(&azt2316a->ad1848, azt2316a->cur_wss_dma);
|
||||
|
||||
@@ -273,8 +273,10 @@ cs423x_write(uint16_t addr, uint8_t val, void *priv)
|
||||
}
|
||||
switch (dev->regs[3] & 0x0f) {
|
||||
case 0: /* WSS Master Control */
|
||||
if ((dev->type < CRYSTAL_CS4235) && (val & 0x80))
|
||||
if ((dev->type < CRYSTAL_CS4235) && (val & 0x80)) {
|
||||
ad1848_init(&dev->ad1848, dev->ad1848_type);
|
||||
ad1848_set_cd_audio_channel(&dev->ad1848, AD1848_AUX2);
|
||||
}
|
||||
val = 0x00;
|
||||
break;
|
||||
|
||||
@@ -865,6 +867,7 @@ cs423x_reset(void *priv)
|
||||
|
||||
/* Reset WSS codec. */
|
||||
ad1848_init(&dev->ad1848, dev->ad1848_type);
|
||||
ad1848_set_cd_audio_channel(&dev->ad1848, AD1848_AUX2);
|
||||
|
||||
/* Reset PnP resource data, state and logical devices. */
|
||||
dev->pnp_enable = 1;
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <86box/io.h>
|
||||
#include <86box/midi.h>
|
||||
#include <86box/nmi.h>
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/pic.h>
|
||||
#include <86box/sound.h>
|
||||
#include "cpu.h"
|
||||
@@ -43,10 +44,33 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
GUS_CLASSIC = 0,
|
||||
GUS_MAX = 1,
|
||||
GUS_CLASSIC = 0,
|
||||
GUS_CLASSIC_37 = 1,
|
||||
GUS_MAX = 2,
|
||||
GUS_ACE = 3
|
||||
};
|
||||
|
||||
enum {
|
||||
GUS_ICS2101_MIC_IN = 0,
|
||||
GUS_ICS2101_LINE_IN = 1,
|
||||
GUS_ICS2101_CD_IN = 2,
|
||||
GUS_ICS2101_GF1_OUT = 3,
|
||||
GUS_ICS2101_UNUSED = 4,
|
||||
GUS_ICS2101_MASTER = 5,
|
||||
GUS_ICS2101_MAX = 6
|
||||
};
|
||||
|
||||
typedef struct ics2101_chan_t {
|
||||
uint8_t ctrl[2];
|
||||
double level[2];
|
||||
uint8_t pan;
|
||||
} ics2101_chan_t;
|
||||
|
||||
typedef struct ics2101_t {
|
||||
uint8_t addr;
|
||||
ics2101_chan_t channels[GUS_ICS2101_MAX];
|
||||
} ics2101_t;
|
||||
|
||||
typedef struct gus_t {
|
||||
int reset;
|
||||
|
||||
@@ -120,7 +144,9 @@ typedef struct gus_t {
|
||||
uint8_t sb_ctrl;
|
||||
int sb_nmi;
|
||||
|
||||
uint8_t joy_trim;
|
||||
uint8_t reg_ctrl;
|
||||
uint8_t jumper;
|
||||
|
||||
uint8_t ad_status;
|
||||
uint8_t ad_data;
|
||||
@@ -143,9 +169,13 @@ typedef struct gus_t {
|
||||
|
||||
uint8_t usrr;
|
||||
|
||||
void *gameport;
|
||||
|
||||
uint8_t max_ctrl;
|
||||
|
||||
ad1848_t ad1848;
|
||||
|
||||
ics2101_t ics2101;
|
||||
} gus_t;
|
||||
|
||||
static int gus_gf1_irqs[8] = { -1, 2, 5, 3, 7, 11, 12, 15 };
|
||||
@@ -159,6 +189,15 @@ int gusfreqs[] = {
|
||||
|
||||
double vol16bit[4096];
|
||||
|
||||
double ics2101_att[128];
|
||||
|
||||
double ics2101_pan[] = { 0.35481, 0.35481, 0.35481, 0.37584, 0.47315, 0.53088, 0.59566, 0.66834,
|
||||
0.70795,
|
||||
0.74989, 0.79433, 0.84140, 0.89125, 0.94406, 1.00000, 1.00000, 1.00000 };
|
||||
|
||||
void gus_write(uint16_t addr, uint8_t val, void *priv);
|
||||
uint8_t gus_read(uint16_t addr, void *priv);
|
||||
|
||||
void
|
||||
gus_update_int_status(gus_t *gus)
|
||||
{
|
||||
@@ -255,6 +294,10 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
||||
uint16_t port;
|
||||
uint16_t csioport;
|
||||
|
||||
ics2101_t *ics2101 = &gus->ics2101;
|
||||
uint8_t mixer_ch;
|
||||
uint8_t mixer_lr;
|
||||
|
||||
if ((addr == 0x388) || (addr == 0x389))
|
||||
port = addr;
|
||||
else
|
||||
@@ -537,6 +580,10 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
||||
gus->t2on = 1;
|
||||
break;
|
||||
|
||||
case 0x4B: /*Joystick trim DAC*/
|
||||
gus->joy_trim = val;
|
||||
break;
|
||||
|
||||
case 0x4c: /*Reset*/
|
||||
gus->reset = val;
|
||||
break;
|
||||
@@ -634,9 +681,25 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
||||
gus->gp2_addr = val;
|
||||
break;
|
||||
case 5:
|
||||
gus->usrr = 0;
|
||||
if (gus->type > GUS_CLASSIC)
|
||||
gus->usrr = 0;
|
||||
break;
|
||||
case 6:
|
||||
if (gus->type > GUS_CLASSIC) {
|
||||
if (gus->type != GUS_ACE) {
|
||||
if (!(val & 0x2) && (gus->jumper & 0x2))
|
||||
io_removehandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus);
|
||||
else if ((val & 0x2) && !(gus->jumper & 0x2))
|
||||
io_sethandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus);
|
||||
|
||||
if (!(val & 0x4) && (gus->jumper & 0x4))
|
||||
gameport_remap(gus->gameport, 0x0);
|
||||
else if ((val & 0x4) && !(gus->jumper & 0x4))
|
||||
gameport_remap(gus->gameport, 0x201);
|
||||
}
|
||||
|
||||
gus->jumper = val;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -672,11 +735,47 @@ gus_write(uint16_t addr, uint8_t val, void *priv)
|
||||
gus->sb_2xe = val;
|
||||
break;
|
||||
case 0x20f:
|
||||
gus->reg_ctrl = val;
|
||||
if (gus->type > GUS_CLASSIC)
|
||||
gus->reg_ctrl = val;
|
||||
break;
|
||||
case 0x306:
|
||||
if (gus->type == GUS_CLASSIC_37) {
|
||||
mixer_ch = (ics2101->addr >> 3) & 0x7; /* current attenuator */
|
||||
mixer_lr = ics2101->addr & 1; /* left or right channel */
|
||||
switch (ics2101->addr & 0x6) {
|
||||
case 0: /* Set control */
|
||||
ics2101->channels[mixer_ch].ctrl[mixer_lr] = val & 0xF;
|
||||
if ((mixer_lr == 0) && (val & 0xC)) /* copy to right channel if not normal mode */
|
||||
ics2101->channels[mixer_ch].ctrl[1] = val & 0xF;
|
||||
break;
|
||||
case 2: /* Set attenuator */
|
||||
switch (ics2101->channels[mixer_ch].ctrl[mixer_lr] & 0xC) {
|
||||
case 0: /* Normal mode */
|
||||
ics2101->channels[mixer_ch].level[mixer_lr] = ics2101_att[val & 0x7F];
|
||||
break;
|
||||
case 4: /* Stereo mode */
|
||||
ics2101->channels[mixer_ch].level[0] = ics2101_att[val & 0x7F];
|
||||
ics2101->channels[mixer_ch].level[1] = ics2101_att[val & 0x7F];
|
||||
break;
|
||||
case 8: /* Balance/Pan mode */
|
||||
ics2101->channels[mixer_ch].level[0] = ics2101_att[val & 0x7F] * ics2101_pan[ics2101->channels[mixer_ch].pan + 1];
|
||||
ics2101->channels[mixer_ch].level[1] = ics2101_att[val & 0x7F] * ics2101_pan[16 - ics2101->channels[mixer_ch].pan];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 4: /* Set panning */
|
||||
ics2101->channels[mixer_ch].pan = val & 0xF;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
fallthrough;
|
||||
case 0x706:
|
||||
if (gus->type == GUS_MAX) {
|
||||
if (gus->type == GUS_CLASSIC_37) {
|
||||
gus->ics2101.addr = val & 0x3F;
|
||||
} else if (gus->type == GUS_MAX) {
|
||||
if (gus->dma >= 4)
|
||||
val |= 0x10;
|
||||
if (gus->dma2 >= 4)
|
||||
@@ -746,10 +845,10 @@ gus_read(uint16_t addr, void *priv)
|
||||
return val;
|
||||
|
||||
case 0x20F:
|
||||
if (gus->type == GUS_MAX)
|
||||
val = 0x02;
|
||||
if (gus->type > GUS_CLASSIC)
|
||||
val = gus->jumper;
|
||||
else
|
||||
val = 0x00;
|
||||
val = 0xff;
|
||||
break;
|
||||
|
||||
case 0x302:
|
||||
@@ -842,6 +941,9 @@ gus_read(uint16_t addr, void *priv)
|
||||
case 0x49: /*Sampling control*/
|
||||
return 0;
|
||||
|
||||
case 0x4B: /*Joystick trim DAC*/
|
||||
return gus->joy_trim;
|
||||
|
||||
case 0x00:
|
||||
case 0x01:
|
||||
case 0x02:
|
||||
@@ -867,10 +969,14 @@ gus_read(uint16_t addr, void *priv)
|
||||
break;
|
||||
case 0x306:
|
||||
case 0x706:
|
||||
if (gus->type == GUS_MAX)
|
||||
if (gus->type == GUS_CLASSIC_37)
|
||||
val = 0x06; /* 3.7x - mixer, no reverse channels bug */
|
||||
else if (gus->type == GUS_MAX)
|
||||
val = 0x0a; /* GUS MAX */
|
||||
else if (gus->type == GUS_ACE)
|
||||
val = 0x30; /* GUS ACE */
|
||||
else
|
||||
val = 0xff; /*Pre 3.7 - no mixer*/
|
||||
val = 0xff; /* Pre 3.7 - no mixer */
|
||||
break;
|
||||
|
||||
case 0x307: /*DRAM access*/
|
||||
@@ -884,22 +990,24 @@ gus_read(uint16_t addr, void *priv)
|
||||
return 0;
|
||||
|
||||
case 0x20b:
|
||||
switch (gus->reg_ctrl & 0x07) {
|
||||
case 1:
|
||||
val = gus->gp1;
|
||||
break;
|
||||
case 2:
|
||||
val = gus->gp2;
|
||||
break;
|
||||
case 3:
|
||||
val = gus->gp1_addr;
|
||||
break;
|
||||
case 4:
|
||||
val = gus->gp2_addr;
|
||||
break;
|
||||
if (gus->type > GUS_CLASSIC) {
|
||||
switch (gus->reg_ctrl & 0x07) {
|
||||
case 1:
|
||||
val = gus->gp1;
|
||||
break;
|
||||
case 2:
|
||||
val = gus->gp2;
|
||||
break;
|
||||
case 3:
|
||||
val = gus->gp1_addr;
|
||||
break;
|
||||
case 4:
|
||||
val = gus->gp2_addr;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -911,8 +1019,11 @@ gus_read(uint16_t addr, void *priv)
|
||||
case 0x20e:
|
||||
return gus->sb_2xe;
|
||||
|
||||
case 0x208:
|
||||
case 0x388:
|
||||
if ((gus->type == GUS_ACE) && !device_get_config_int("adlib_ports"))
|
||||
break;
|
||||
fallthrough;
|
||||
case 0x208:
|
||||
if (gus->tctrl & GUS_TIMER_CTRL_AUTO)
|
||||
val = gus->sb_2xa;
|
||||
else {
|
||||
@@ -927,10 +1038,12 @@ gus_read(uint16_t addr, void *priv)
|
||||
#ifdef OLD_NMI_BEHAVIOR
|
||||
nmi = 0;
|
||||
#endif /* OLD_NMI_BEHAVIOR */
|
||||
fallthrough;
|
||||
case 0x389:
|
||||
val = gus->ad_data;
|
||||
break;
|
||||
case 0x389:
|
||||
if ((gus->type != GUS_ACE) || device_get_config_int("adlib_ports"))
|
||||
val = gus->ad_data;
|
||||
break;
|
||||
|
||||
case 0x20A:
|
||||
val = gus->adcommand;
|
||||
@@ -1164,6 +1277,58 @@ gus_poll_wave(void *priv)
|
||||
gus_update_int_status(gus);
|
||||
}
|
||||
|
||||
void
|
||||
gus_ics2101_filter(void *priv, int channel, double *out_l, double *out_r)
|
||||
{
|
||||
ics2101_t *ics2101 = (ics2101_t *) priv;
|
||||
|
||||
double temp_l = 0.0;
|
||||
double temp_r = 0.0;
|
||||
double master_l = 0.0;
|
||||
double master_r = 0.0;
|
||||
|
||||
uint8_t ctrl_l = ics2101->channels[channel].ctrl[0];
|
||||
uint8_t ctrl_r = ics2101->channels[channel].ctrl[1];
|
||||
if (!(ctrl_l & 0xC)) { /* Normal mode */
|
||||
if (ctrl_l & 1)
|
||||
temp_l += *out_l * ics2101->channels[channel].level[0];
|
||||
if (ctrl_l & 2)
|
||||
temp_r += *out_l * ics2101->channels[channel].level[0];
|
||||
if (ctrl_r & 1)
|
||||
temp_l += *out_r * ics2101->channels[channel].level[1];
|
||||
if (ctrl_r & 2)
|
||||
temp_r += *out_r * ics2101->channels[channel].level[1];
|
||||
} else { /* Stereo or Balance/Pan mode */
|
||||
if (ctrl_l & 2) { /* Mono/Pan */
|
||||
temp_l = (*out_l + *out_r) * 0.5 * ics2101->channels[channel].level[(ctrl_l & 1)];
|
||||
temp_r = (*out_r + *out_l) * 0.5 * ics2101->channels[channel].level[!(ctrl_l & 1)];
|
||||
} else { /* Stereo/Balance */
|
||||
temp_l = ((ctrl_l & 1) ? *out_l : *out_r) * ics2101->channels[channel].level[(ctrl_l & 1)];
|
||||
temp_r = ((ctrl_l & 1) ? *out_r : *out_l) * ics2101->channels[channel].level[!(ctrl_l & 1)];
|
||||
}
|
||||
}
|
||||
|
||||
/* Master */
|
||||
ctrl_l = ics2101->channels[GUS_ICS2101_MASTER].ctrl[0];
|
||||
ctrl_r = ics2101->channels[GUS_ICS2101_MASTER].ctrl[1];
|
||||
if (!(ctrl_l & 0xC)) { /* Normal mode */
|
||||
if (ctrl_l & 1)
|
||||
master_l += temp_l * ics2101->channels[GUS_ICS2101_MASTER].level[0];
|
||||
if (ctrl_l & 2)
|
||||
master_r += temp_l * ics2101->channels[GUS_ICS2101_MASTER].level[0];
|
||||
if (ctrl_r & 1)
|
||||
master_l += temp_r * ics2101->channels[GUS_ICS2101_MASTER].level[1];
|
||||
if (ctrl_r & 2)
|
||||
master_r += temp_r * ics2101->channels[GUS_ICS2101_MASTER].level[1];
|
||||
} else { /* Stereo or Balance mode - no mono/pan for master */
|
||||
master_l = ((ctrl_l & 1) ? temp_l : temp_r) * ics2101->channels[GUS_ICS2101_MASTER].level[(ctrl_l & 1)];
|
||||
master_r = ((ctrl_l & 1) ? temp_r : temp_l) * ics2101->channels[GUS_ICS2101_MASTER].level[!(ctrl_l & 1)];
|
||||
}
|
||||
|
||||
*out_l = master_l;
|
||||
*out_r = master_r;
|
||||
}
|
||||
|
||||
static void
|
||||
gus_get_buffer(int32_t *buffer, int len, void *priv)
|
||||
{
|
||||
@@ -1173,11 +1338,26 @@ gus_get_buffer(int32_t *buffer, int len, void *priv)
|
||||
ad1848_update(&gus->ad1848);
|
||||
|
||||
gus_update(gus);
|
||||
|
||||
for (int c = 0; c < len * 2; c++) {
|
||||
if ((gus->type == GUS_MAX) && (gus->max_ctrl))
|
||||
buffer[c] += (int32_t) (gus->ad1848.buffer[c] / 2);
|
||||
buffer[c] += (int32_t) gus->buffer[c & 1][c >> 1];
|
||||
for (int c = 0; c < len * 2; c += 2) {
|
||||
double temp_l = 0.0;
|
||||
double temp_r = 0.0;
|
||||
if ((gus->type == GUS_CLASSIC_37) || (gus->type == GUS_MAX)) {
|
||||
temp_l = (double) gus->buffer[0][c >> 1];
|
||||
temp_r = (double) gus->buffer[1][c >> 1];
|
||||
if (gus->type == GUS_MAX) {
|
||||
if (gus->max_ctrl) {
|
||||
buffer[c] += (int32_t) (gus->ad1848.buffer[c] / 2);
|
||||
buffer[c + 1] += (int32_t) (gus->ad1848.buffer[c + 1] / 2);
|
||||
}
|
||||
ad1848_filter_channel(&gus->ad1848, AD1848_AUX1, &temp_l, &temp_r);
|
||||
} else
|
||||
gus_ics2101_filter(&gus->ics2101, GUS_ICS2101_GF1_OUT, &temp_l, &temp_r);
|
||||
buffer[c] += (int32_t) temp_l;
|
||||
buffer[c + 1] += (int32_t) temp_r;
|
||||
} else {
|
||||
buffer[c] += (int32_t) gus->buffer[0][c >> 1];
|
||||
buffer[c + 1] += (int32_t) gus->buffer[1][c >> 1];
|
||||
}
|
||||
}
|
||||
|
||||
if ((gus->type == GUS_MAX) && (gus->max_ctrl))
|
||||
@@ -1186,6 +1366,17 @@ gus_get_buffer(int32_t *buffer, int len, void *priv)
|
||||
gus->pos = 0;
|
||||
}
|
||||
|
||||
void
|
||||
gus_filter_cd_audio(int channel, double *buffer, void *priv)
|
||||
{
|
||||
const gus_t *gus = (gus_t *) priv;
|
||||
/* FIXME: No channel remapping possible with the current architecture */
|
||||
if (gus->ics2101.channels[GUS_ICS2101_CD_IN].ctrl[channel] && gus->ics2101.channels[GUS_ICS2101_MASTER].ctrl[channel])
|
||||
*buffer *= gus->ics2101.channels[GUS_ICS2101_CD_IN].level[channel] * gus->ics2101.channels[GUS_ICS2101_MASTER].level[channel];
|
||||
else
|
||||
*buffer *= 0.0;
|
||||
}
|
||||
|
||||
static void
|
||||
gus_input_msg(void *priv, uint8_t *msg, uint32_t len)
|
||||
{
|
||||
@@ -1292,6 +1483,7 @@ gus_reset(void *priv)
|
||||
gus->sb_ctrl = 0;
|
||||
gus->sb_nmi = 0;
|
||||
|
||||
gus->joy_trim = 29;
|
||||
gus->reg_ctrl = 0;
|
||||
|
||||
gus->ad_status = 0;
|
||||
@@ -1320,6 +1512,13 @@ gus_reset(void *priv)
|
||||
gus->irq_state = 0;
|
||||
gus->midi_irq_state = 0;
|
||||
|
||||
for (int i = 0; i < GUS_ICS2101_MAX; i++) {
|
||||
gus->ics2101.channels[i].level[0] = gus->ics2101.channels[i].level[1] = 1.0;
|
||||
gus->ics2101.channels[i].ctrl[0] = 1;
|
||||
gus->ics2101.channels[i].ctrl[1] = 2;
|
||||
gus->ics2101.channels[i].pan = 7;
|
||||
}
|
||||
|
||||
gus_update_int_status(gus);
|
||||
}
|
||||
|
||||
@@ -1328,6 +1527,7 @@ gus_init(UNUSED(const device_t *info))
|
||||
{
|
||||
int c;
|
||||
double out = 1.0;
|
||||
double gain;
|
||||
uint8_t gus_ram = device_get_config_int("gus_ram");
|
||||
gus_t *gus = calloc(1, sizeof(gus_t));
|
||||
|
||||
@@ -1355,15 +1555,46 @@ gus_init(UNUSED(const device_t *info))
|
||||
|
||||
gus->type = info->local;
|
||||
|
||||
gus->jumper = 0x06;
|
||||
|
||||
for (int i = 0; i < GUS_ICS2101_MAX; i++) {
|
||||
gus->ics2101.channels[i].level[0] = gus->ics2101.channels[i].level[1] = 1.0;
|
||||
gus->ics2101.channels[i].ctrl[0] = 1;
|
||||
gus->ics2101.channels[i].ctrl[1] = 2;
|
||||
gus->ics2101.channels[i].pan = 7;
|
||||
}
|
||||
|
||||
gus->base = device_get_config_hex16("base");
|
||||
|
||||
io_sethandler(gus->base, 0x0010, gus_read, NULL, NULL, gus_write, NULL, NULL, gus);
|
||||
io_sethandler(0x0100 + gus->base, 0x0010, gus_read, NULL, NULL, gus_write, NULL, NULL, gus);
|
||||
if (gus->type != GUS_ACE)
|
||||
io_sethandler(0x0100 + gus->base, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus);
|
||||
io_sethandler(0x0102 + gus->base, 0x000e, gus_read, NULL, NULL, gus_write, NULL, NULL, gus);
|
||||
io_sethandler(0x0506 + gus->base, 0x0001, gus_read, NULL, NULL, gus_write, NULL, NULL, gus);
|
||||
io_sethandler(0x0388, 0x0002, gus_read, NULL, NULL, gus_write, NULL, NULL, gus);
|
||||
if (gus->type == GUS_CLASSIC && device_get_config_int("gameport"))
|
||||
gus->gameport = gameport_add(&gameport_201_device);
|
||||
else if (gus->type != GUS_ACE) {
|
||||
gus->gameport = gameport_add(&gameport_pnp_1io_device);
|
||||
gameport_remap(gus->gameport, 0x201);
|
||||
}
|
||||
|
||||
if (gus->type == GUS_CLASSIC_37) {
|
||||
/* Precalculate the attenuation table for ICS2101 */
|
||||
for (int i = 0; i < 128; i++) {
|
||||
gain = (127 - i) * -0.5;
|
||||
if (i < 16)
|
||||
for (int j = 0; j < (16 - i); j++)
|
||||
gain += -0.5 - 0.13603 * (j + 1);
|
||||
ics2101_att[i] = pow(10.0, gain / 20.0);
|
||||
}
|
||||
|
||||
sound_set_cd_audio_filter(gus_filter_cd_audio, gus);
|
||||
}
|
||||
|
||||
if (gus->type == GUS_MAX) {
|
||||
ad1848_init(&gus->ad1848, AD1848_TYPE_CS4231);
|
||||
ad1848_set_cd_audio_channel(&gus->ad1848, AD1848_AUX2);
|
||||
ad1848_setirq(&gus->ad1848, 5);
|
||||
ad1848_setdma(&gus->ad1848, 3);
|
||||
io_sethandler(0x10C + gus->base, 4,
|
||||
@@ -1376,7 +1607,7 @@ gus_init(UNUSED(const device_t *info))
|
||||
|
||||
sound_add_handler(gus_get_buffer, gus);
|
||||
|
||||
if (device_get_config_int("receive_input"))
|
||||
if ((gus->type != GUS_ACE) && (device_get_config_int("receive_input")))
|
||||
midi_in_handler(1, gus_input_msg, gus_input_sysex, gus);
|
||||
|
||||
return gus;
|
||||
@@ -1442,6 +1673,17 @@ static const device_config_t gus_config[] = {
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "gameport",
|
||||
.description = "Enable Game port",
|
||||
.type = CONFIG_BINARY,
|
||||
.default_string = NULL,
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "receive_input",
|
||||
.description = "Receive MIDI input",
|
||||
@@ -1457,6 +1699,160 @@ static const device_config_t gus_config[] = {
|
||||
// clang-format off
|
||||
};
|
||||
|
||||
static const device_config_t gus_v37_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "base",
|
||||
.description = "Address",
|
||||
.type = CONFIG_HEX16,
|
||||
.default_string = NULL,
|
||||
.default_int = 0x220,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "210H", .value = 0x210 },
|
||||
{ .description = "220H", .value = 0x220 },
|
||||
{ .description = "230H", .value = 0x230 },
|
||||
{ .description = "240H", .value = 0x240 },
|
||||
{ .description = "250H", .value = 0x250 },
|
||||
{ .description = "260H", .value = 0x260 },
|
||||
{ NULL }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "gus_ram",
|
||||
.description = "Memory size",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "256 KB", .value = 0 },
|
||||
{ .description = "512 KB", .value = 1 },
|
||||
{ .description = "1 MB", .value = 2 },
|
||||
{ NULL }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "receive_input",
|
||||
.description = "Receive MIDI input",
|
||||
.type = CONFIG_BINARY,
|
||||
.default_string = NULL,
|
||||
.default_int = 1,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format off
|
||||
};
|
||||
|
||||
static const device_config_t gus_max_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "base",
|
||||
.description = "Address",
|
||||
.type = CONFIG_HEX16,
|
||||
.default_string = NULL,
|
||||
.default_int = 0x220,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "210H", .value = 0x210 },
|
||||
{ .description = "220H", .value = 0x220 },
|
||||
{ .description = "230H", .value = 0x230 },
|
||||
{ .description = "240H", .value = 0x240 },
|
||||
{ .description = "250H", .value = 0x250 },
|
||||
{ .description = "260H", .value = 0x260 },
|
||||
{ NULL }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "gus_ram",
|
||||
.description = "Memory size",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = 1,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "512 KB", .value = 1 },
|
||||
{ .description = "1 MB", .value = 2 },
|
||||
{ NULL }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "receive_input",
|
||||
.description = "Receive MIDI input",
|
||||
.type = CONFIG_BINARY,
|
||||
.default_string = NULL,
|
||||
.default_int = 1,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format off
|
||||
};
|
||||
|
||||
static const device_config_t gus_ace_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "base",
|
||||
.description = "Address",
|
||||
.type = CONFIG_HEX16,
|
||||
.default_string = NULL,
|
||||
.default_int = 0x260,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "210H", .value = 0x210 },
|
||||
{ .description = "220H", .value = 0x220 },
|
||||
{ .description = "230H", .value = 0x230 },
|
||||
{ .description = "240H", .value = 0x240 },
|
||||
{ .description = "250H", .value = 0x250 },
|
||||
{ .description = "260H", .value = 0x260 },
|
||||
{ NULL }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "gus_ram",
|
||||
.description = "Memory size",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = 1,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "512 KB", .value = 1 },
|
||||
{ .description = "1 MB", .value = 2 },
|
||||
{ NULL }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "adlib_ports",
|
||||
.description = "Enable Adlib ports",
|
||||
.type = CONFIG_BINARY,
|
||||
.default_string = NULL,
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format off
|
||||
};
|
||||
|
||||
const device_t gus_device = {
|
||||
.name = "Gravis UltraSound",
|
||||
.internal_name = "gus",
|
||||
@@ -1471,6 +1867,20 @@ const device_t gus_device = {
|
||||
.config = gus_config
|
||||
};
|
||||
|
||||
const device_t gus_v37_device = {
|
||||
.name = "Gravis UltraSound (rev 3.7)",
|
||||
.internal_name = "gusv37",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = GUS_CLASSIC_37,
|
||||
.init = gus_init,
|
||||
.close = gus_close,
|
||||
.reset = gus_reset,
|
||||
.available = NULL,
|
||||
.speed_changed = gus_speed_changed,
|
||||
.force_redraw = NULL,
|
||||
.config = gus_v37_config
|
||||
};
|
||||
|
||||
const device_t gus_max_device = {
|
||||
.name = "Gravis UltraSound MAX",
|
||||
.internal_name = "gusmax",
|
||||
@@ -1482,5 +1892,19 @@ const device_t gus_max_device = {
|
||||
.available = NULL,
|
||||
.speed_changed = gus_speed_changed,
|
||||
.force_redraw = NULL,
|
||||
.config = gus_config
|
||||
.config = gus_max_config
|
||||
};
|
||||
|
||||
const device_t gus_ace_device = {
|
||||
.name = "Gravis UltraSound ACE",
|
||||
.internal_name = "gusace",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = GUS_ACE,
|
||||
.init = gus_init,
|
||||
.close = gus_close,
|
||||
.reset = gus_reset,
|
||||
.available = NULL,
|
||||
.speed_changed = gus_speed_changed,
|
||||
.force_redraw = NULL,
|
||||
.config = gus_ace_config
|
||||
};
|
||||
|
||||
@@ -85,7 +85,7 @@ optimc_filter_opl(void *priv, double *out_l, double *out_r)
|
||||
if (optimc->cur_wss_enabled) {
|
||||
*out_l /= optimc->sb->mixer_sbpro.fm_l;
|
||||
*out_r /= optimc->sb->mixer_sbpro.fm_r;
|
||||
ad1848_filter_aux2((void *) &optimc->ad1848, out_l, out_r);
|
||||
ad1848_filter_channel((void *) &optimc->ad1848, AD1848_AUX2, out_l, out_r);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -380,6 +380,7 @@ optimc_init(const device_t *info)
|
||||
else
|
||||
ad1848_init(&optimc->ad1848, AD1848_TYPE_DEFAULT);
|
||||
|
||||
ad1848_set_cd_audio_channel(&optimc->ad1848, (info->local & 0x100) ? AD1848_LINE_IN : AD1848_AUX1);
|
||||
ad1848_setirq(&optimc->ad1848, optimc->cur_wss_irq);
|
||||
ad1848_setdma(&optimc->ad1848, optimc->cur_wss_dma);
|
||||
|
||||
|
||||
@@ -138,7 +138,9 @@ static const SOUND_CARD sound_cards[] = {
|
||||
{ &cs4235_device },
|
||||
{ &cs4236b_device },
|
||||
{ &gus_device },
|
||||
{ &gus_v37_device },
|
||||
{ &gus_max_device },
|
||||
{ &gus_ace_device },
|
||||
{ &mirosound_pcm10_device },
|
||||
{ &pas16_device },
|
||||
{ &pas16d_device },
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
%global romver 4.1
|
||||
|
||||
Name: 86Box
|
||||
Version: 5.1
|
||||
Version: 6.0
|
||||
Release: 1%{?dist}
|
||||
Summary: Classic PC emulator
|
||||
License: GPLv2+
|
||||
@@ -121,5 +121,5 @@ popd
|
||||
%{_datadir}/%{name}/roms
|
||||
|
||||
%changelog
|
||||
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 5.1-1
|
||||
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 6.0-1
|
||||
- Bump release
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</categories>
|
||||
<launchable type="desktop-id">net.86box.86Box.desktop</launchable>
|
||||
<releases>
|
||||
<release version="5.1" date="2025-08-27"/>
|
||||
<release version="6.0" date="2025-09-14"/>
|
||||
</releases>
|
||||
<content_rating type="oars-1.1" />
|
||||
<description>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "86box",
|
||||
"version-string": "5.1",
|
||||
"version-string": "6.0",
|
||||
"homepage": "https://86box.net/",
|
||||
"documentation": "https://86box.readthedocs.io/",
|
||||
"license": "GPL-2.0-or-later",
|
||||
|
||||
Reference in New Issue
Block a user