mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 18:08:20 -07:00
Merge branch '86Box:master' into master
This commit is contained in:
2
.ci/Jenkinsfile
vendored
2
.ci/Jenkinsfile
vendored
@@ -20,7 +20,7 @@ def repository = ['https://github.com/86Box/86Box.git', scm.userRemoteConfigs[0]
|
||||
def commitBrowser = ['https://github.com/86Box/86Box/commit/%s', null]
|
||||
def branch = ['master', scm.branches[0].name]
|
||||
def buildType = ['beta', 'alpha']
|
||||
def tarballFlags = ['', '-s']
|
||||
def tarballFlags = ['', '-t']
|
||||
def buildBranch = env.JOB_BASE_NAME.contains('-') ? 1 : 0
|
||||
|
||||
def osArchs = [
|
||||
|
||||
@@ -73,7 +73,7 @@ if(WIN32)
|
||||
|
||||
# Default value for the `WIN32` target property, which specifies whether
|
||||
# to build the application for the Windows GUI or console subsystem
|
||||
option(CMAKE_WIN32_EXECUTABLE "Build a Windows GUI executable" OFF)
|
||||
option(CMAKE_WIN32_EXECUTABLE "Build a Windows GUI executable" ON)
|
||||
else()
|
||||
# Prefer dynamic builds everywhere else
|
||||
set(PREFER_STATIC OFF)
|
||||
|
||||
@@ -30,9 +30,9 @@ Performance may vary depending on both host and guest configuration. Most emulat
|
||||
|
||||
It is also recommended to use a manager application with 86Box for easier handling of multiple virtual machines.
|
||||
|
||||
* [Avalonia 86](https://github.com/notBald/Avalonia86) by [notBald](https://github.com/notBald) (Windows and Linux)
|
||||
* [86Box Manager](https://github.com/86Box/86BoxManager) by [Overdoze](https://github.com/daviunic) (Windows only)
|
||||
* [86Box Manager X](https://github.com/RetBox/86BoxManagerX) by [xafero](https://github.com/xafero) (Cross platform Port of 86Box Manager using Avalonia)
|
||||
* [Avalonia 86](https://github.com/notBald/Avalonia86) by [notBald](https://github.com/notBald) (Windows and Linux)
|
||||
* [sl86](https://github.com/DDXofficial/sl86) by [DDX](https://github.com/DDXofficial) (Command-line 86Box machine manager written in Python)
|
||||
* [Linbox-qt5](https://github.com/Dungeonseeker/linbox-qt5) by [Dungeonseeker](https://github.com/Dungeonseeker/) (Linux focused, should work on Windows though untested)
|
||||
* [MacBox for 86Box](https://github.com/Moonif/MacBox) by [Moonif](https://github.com/Moonif) (MacOS only)
|
||||
|
||||
67
src/86box.c
67
src/86box.c
@@ -666,40 +666,44 @@ usage:
|
||||
}
|
||||
}
|
||||
|
||||
printf("\nUsage: 86box [options] [cfg-file]\n\n");
|
||||
printf("Valid options are:\n\n");
|
||||
printf("-? or --help - show this information\n");
|
||||
printf("-C or --config path - set 'path' to be config file\n");
|
||||
ui_msgbox(MBX_INFO, L"\nUsage: 86box [options] [cfg-file]\n\n"
|
||||
"Valid options are:\n\n"
|
||||
"-? or --help\t\t\t- show this information\n"
|
||||
"-C or --config path\t\t- set 'path' to be config file\n"
|
||||
#ifdef _WIN32
|
||||
printf("-D or --debug - force debug output logging\n");
|
||||
"-D or --debug\t\t\t- force debug output logging\n"
|
||||
#endif
|
||||
#if 0
|
||||
printf("-E or --nographic - forces the old behavior\n");
|
||||
"-E or --nographic\t\t- forces the old behavior\n"
|
||||
#endif
|
||||
printf("-F or --fullscreen - start in fullscreen mode\n");
|
||||
printf("-G or --lang langid - start with specified language (e.g. en-US, or system)\n");
|
||||
"-F or --fullscreen\t\t- start in fullscreen mode\n"
|
||||
"-G or --lang langid\t\t- start with specified language\n"
|
||||
"\t\t\t\t (e.g. en-US, or system)\n"
|
||||
#ifdef _WIN32
|
||||
printf("-H or --hwnd id,hwnd - sends back the main dialog's hwnd\n");
|
||||
"-H or --hwnd id,hwnd\t\t- sends back the main dialog's hwnd\n"
|
||||
#endif
|
||||
printf("-I or --image d:path - load 'path' as floppy image on drive d\n");
|
||||
"-I or --image d:path\t\t- load 'path' as floppy image on drive d\n"
|
||||
#ifdef USE_INSTRUMENT
|
||||
printf("-J or --instrument name - set 'name' to be the profiling instrument\n");
|
||||
"-J or --instrument name\t- set 'name' to be the profiling instrument\n"
|
||||
#endif
|
||||
printf("-L or --logfile path - set 'path' to be the logfile\n");
|
||||
printf("-M or --missing - dump missing machines and video cards\n");
|
||||
printf("-N or --noconfirm - do not ask for confirmation on quit\n");
|
||||
printf("-P or --vmpath path - set 'path' to be root for vm\n");
|
||||
printf("-R or --rompath path - set 'path' to be ROM path\n");
|
||||
"-L or --logfile pat\t\t- set 'path' to be the logfile\n"
|
||||
"-M or --missing\t\t- dump missing machines and video cards\n"
|
||||
"-N or --noconfirm\t\t- do not ask for confirmation on quit\n"
|
||||
"-P or --vmpath path\t\t- set 'path' to be root for vm\n"
|
||||
"-R or --rompath path\t\t- set 'path' to be ROM path\n"
|
||||
#ifndef USE_SDL_UI
|
||||
printf("-S or --settings - show only the settings dialog\n");
|
||||
"-S or --settings\t\t\t- show only the settings dialog\n"
|
||||
#endif
|
||||
printf("-T or --testmode - test mode: execute the test mode entry point on init/hard reset\n");
|
||||
printf("-V or --vmname name - overrides the name of the running VM\n");
|
||||
printf("-W or --nohook - disables keyboard hook (compatibility-only outside Windows)\n");
|
||||
printf("-X or --clear what - clears the 'what' (cmos/flash/both)\n");
|
||||
printf("-Y or --donothing - do not show any UI or run the emulation\n");
|
||||
printf("-Z or --lastvmpath - the last parameter is VM path rather than config\n");
|
||||
printf("\nA config file can be specified. If none is, the default file will be used.\n");
|
||||
"-T or --testmode\t\t- test mode: execute the test mode entry\n"
|
||||
"\t\t\t\t point on init/hard reset\n"
|
||||
"-V or --vmname name\t\t- overrides the name of the running VM\n"
|
||||
"-W or --nohook\t\t- disables keyboard hook\n"
|
||||
"\t\t\t\t (compatibility-only outside Windows)\n"
|
||||
"-X or --clear what\t\t- clears the 'what' (cmos/flash/both)\n"
|
||||
"-Y or --donothing\t\t- do not show any UI or run the emulation\n"
|
||||
"-Z or --lastvmpath\t\t- the last parameter is VM path rather\n"
|
||||
"\t\t\t\t than config\n"
|
||||
"\nA config file can be specified. If none is, the default file will be used.\n");
|
||||
return 0;
|
||||
} else if (!strcasecmp(argv[c], "--lastvmpath") || !strcasecmp(argv[c], "-Z")) {
|
||||
lvmp = 1;
|
||||
@@ -996,6 +1000,13 @@ usage:
|
||||
zip_global_init();
|
||||
mo_global_init();
|
||||
|
||||
/* Initialize the keyboard accelerator list with default values */
|
||||
for (int x = 0; x < NUM_ACCELS; x++) {
|
||||
strcpy(acc_keys[x].name, def_acc_keys[x].name);
|
||||
strcpy(acc_keys[x].desc, def_acc_keys[x].desc);
|
||||
strcpy(acc_keys[x].seq, def_acc_keys[x].seq);
|
||||
}
|
||||
|
||||
/* Load the configuration file. */
|
||||
config_load();
|
||||
|
||||
@@ -1026,14 +1037,6 @@ usage:
|
||||
|
||||
gdbstub_init();
|
||||
|
||||
// Initialize the keyboard accelerator list with default values
|
||||
for(int x=0;x<NUM_ACCELS;x++) {
|
||||
strcpy(acc_keys[x].name, def_acc_keys[x].name);
|
||||
strcpy(acc_keys[x].desc, def_acc_keys[x].desc);
|
||||
strcpy(acc_keys[x].seq, def_acc_keys[x].seq);
|
||||
}
|
||||
|
||||
|
||||
/* All good! */
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -819,6 +819,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
int pc_off = 0;
|
||||
int test_modrm = 1;
|
||||
int c;
|
||||
uint32_t op87 = 0x00000000;
|
||||
|
||||
op_ea_seg = &cpu_state.seg_ds;
|
||||
op_ssegs = 0;
|
||||
@@ -872,6 +873,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
break;
|
||||
|
||||
case 0xd8:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_d8;
|
||||
opcode_shift = 3;
|
||||
@@ -882,6 +884,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xd9:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d9_a32 : x86_dynarec_opcodes_d9_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_d9;
|
||||
opcode_mask = 0xff;
|
||||
@@ -891,6 +894,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xda:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_da_a32 : x86_dynarec_opcodes_da_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_da;
|
||||
opcode_mask = 0xff;
|
||||
@@ -900,6 +904,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xdb:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_db_a32 : x86_dynarec_opcodes_db_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_db;
|
||||
opcode_mask = 0xff;
|
||||
@@ -909,6 +914,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xdc:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dc_a32 : x86_dynarec_opcodes_dc_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_dc;
|
||||
opcode_shift = 3;
|
||||
@@ -919,6 +925,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xdd:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dd_a32 : x86_dynarec_opcodes_dd_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_dd;
|
||||
opcode_mask = 0xff;
|
||||
@@ -928,6 +935,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xde:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_de_a32 : x86_dynarec_opcodes_de_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_de;
|
||||
opcode_mask = 0xff;
|
||||
@@ -937,6 +945,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xdf:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_df_a32 : x86_dynarec_opcodes_df_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_df;
|
||||
opcode_mask = 0xff;
|
||||
@@ -1000,6 +1009,10 @@ generate_call:
|
||||
recomp_op_table = recomp_opcodes;
|
||||
}
|
||||
|
||||
if (op87 != 0x0000) {
|
||||
STORE_IMM_ADDR_L((uintptr_t) &x87_op, op87);
|
||||
}
|
||||
|
||||
if (recomp_op_table && recomp_op_table[(opcode | op_32) & 0x1ff]) {
|
||||
uint32_t new_pc = recomp_op_table[(opcode | op_32) & 0x1ff](opcode, fetchdat, op_32, op_pc, block);
|
||||
if (new_pc) {
|
||||
|
||||
@@ -1858,6 +1858,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
int pc_off = 0;
|
||||
int test_modrm = 1;
|
||||
int c;
|
||||
uint32_t op87 = 0x00000000;
|
||||
|
||||
op_ea_seg = &cpu_state.seg_ds;
|
||||
op_ssegs = 0;
|
||||
@@ -1912,6 +1913,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
break;
|
||||
|
||||
case 0xd8:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_d8;
|
||||
opcode_shift = 3;
|
||||
@@ -1922,6 +1924,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xd9:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d9_a32 : x86_dynarec_opcodes_d9_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_d9;
|
||||
opcode_mask = 0xff;
|
||||
@@ -1931,6 +1934,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xda:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_da_a32 : x86_dynarec_opcodes_da_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_da;
|
||||
opcode_mask = 0xff;
|
||||
@@ -1940,6 +1944,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xdb:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_db_a32 : x86_dynarec_opcodes_db_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_db;
|
||||
opcode_mask = 0xff;
|
||||
@@ -1949,6 +1954,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xdc:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dc_a32 : x86_dynarec_opcodes_dc_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_dc;
|
||||
opcode_shift = 3;
|
||||
@@ -1959,6 +1965,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xdd:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dd_a32 : x86_dynarec_opcodes_dd_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_dd;
|
||||
opcode_mask = 0xff;
|
||||
@@ -1968,6 +1975,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xde:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_de_a32 : x86_dynarec_opcodes_de_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_de;
|
||||
opcode_mask = 0xff;
|
||||
@@ -1977,6 +1985,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
block->flags |= CODEBLOCK_HAS_FPU;
|
||||
break;
|
||||
case 0xdf:
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_df_a32 : x86_dynarec_opcodes_df_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_df;
|
||||
opcode_mask = 0xff;
|
||||
@@ -2041,6 +2050,10 @@ generate_call:
|
||||
recomp_op_table = recomp_opcodes;
|
||||
}
|
||||
|
||||
if (op87 != 0x0000) {
|
||||
STORE_IMM_ADDR_L((uintptr_t) &x87_op, op87);
|
||||
}
|
||||
|
||||
if (recomp_op_table && recomp_op_table[(opcode | op_32) & 0x1ff]) {
|
||||
uint32_t new_pc = recomp_op_table[(opcode | op_32) & 0x1ff](opcode, fetchdat, op_32, op_pc, block);
|
||||
if (new_pc) {
|
||||
|
||||
@@ -396,6 +396,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
int test_modrm = 1;
|
||||
int pc_off = 0;
|
||||
uint32_t next_pc = 0;
|
||||
uint16_t op87 = 0x0000;
|
||||
#ifdef DEBUG_EXTRA
|
||||
uint8_t last_prefix = 0;
|
||||
#endif
|
||||
@@ -451,6 +452,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
#ifdef DEBUG_EXTRA
|
||||
last_prefix = 0xd8;
|
||||
#endif
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d8_a32 : x86_dynarec_opcodes_d8_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_d8;
|
||||
opcode_shift = 3;
|
||||
@@ -464,6 +466,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
#ifdef DEBUG_EXTRA
|
||||
last_prefix = 0xd9;
|
||||
#endif
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_d9_a32 : x86_dynarec_opcodes_d9_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_d9;
|
||||
opcode_mask = 0xff;
|
||||
@@ -476,6 +479,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
#ifdef DEBUG_EXTRA
|
||||
last_prefix = 0xda;
|
||||
#endif
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_da_a32 : x86_dynarec_opcodes_da_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_da;
|
||||
opcode_mask = 0xff;
|
||||
@@ -488,6 +492,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
#ifdef DEBUG_EXTRA
|
||||
last_prefix = 0xdb;
|
||||
#endif
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_db_a32 : x86_dynarec_opcodes_db_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_db;
|
||||
opcode_mask = 0xff;
|
||||
@@ -500,6 +505,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
#ifdef DEBUG_EXTRA
|
||||
last_prefix = 0xdc;
|
||||
#endif
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dc_a32 : x86_dynarec_opcodes_dc_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_dc;
|
||||
opcode_shift = 3;
|
||||
@@ -513,6 +519,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
#ifdef DEBUG_EXTRA
|
||||
last_prefix = 0xdd;
|
||||
#endif
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_dd_a32 : x86_dynarec_opcodes_dd_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_dd;
|
||||
opcode_mask = 0xff;
|
||||
@@ -525,6 +532,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
#ifdef DEBUG_EXTRA
|
||||
last_prefix = 0xde;
|
||||
#endif
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_de_a32 : x86_dynarec_opcodes_de_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_de;
|
||||
opcode_mask = 0xff;
|
||||
@@ -537,6 +545,7 @@ codegen_generate_call(uint8_t opcode, OpFn op, uint32_t fetchdat, uint32_t new_p
|
||||
#ifdef DEBUG_EXTRA
|
||||
last_prefix = 0xdf;
|
||||
#endif
|
||||
op87 = (op87 & 0xf800) | ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
op_table = (op_32 & 0x200) ? x86_dynarec_opcodes_df_a32 : x86_dynarec_opcodes_df_a16;
|
||||
recomp_op_table = fpu_softfloat ? NULL : recomp_opcodes_df;
|
||||
opcode_mask = 0xff;
|
||||
@@ -657,6 +666,9 @@ generate_call:
|
||||
}
|
||||
}
|
||||
codegen_mark_code_present(block, cs + old_pc, (op_pc - old_pc) - pc_off);
|
||||
if (op87 != 0x0000) {
|
||||
uop_MOV_IMM(ir, IREG_x87_op, op87);
|
||||
}
|
||||
/* It is apparently a prefixed instruction. */
|
||||
#if 0
|
||||
if ((recomp_op_table == recomp_opcodes) && (opcode == 0x48))
|
||||
|
||||
@@ -170,6 +170,7 @@ struct
|
||||
[IREG_SS_limit_high] = { REG_DWORD, &cpu_state.seg_ss.limit_high, REG_INTEGER, REG_PERMANENT},
|
||||
|
||||
[IREG_eaa16] = { REG_WORD, &cpu_state.eaaddr, REG_INTEGER, REG_PERMANENT},
|
||||
[IREG_x87_op] = { REG_WORD, &x87_op, REG_INTEGER, REG_PERMANENT},
|
||||
|
||||
/*Temporary registers are stored on the stack, and are not guaranteed to
|
||||
be preserved across uOPs. They will not be written back if they will
|
||||
|
||||
@@ -133,8 +133,9 @@ enum {
|
||||
IREG_SS_limit_high = 87,
|
||||
|
||||
IREG_eaa16 = 88,
|
||||
IREG_x87_op = 89,
|
||||
|
||||
IREG_COUNT = 89,
|
||||
IREG_COUNT = 90,
|
||||
|
||||
IREG_INVALID = 255,
|
||||
|
||||
|
||||
60
src/config.c
60
src/config.c
@@ -1772,23 +1772,25 @@ load_keybinds(void)
|
||||
char temp[512];
|
||||
memset(temp, 0, sizeof(temp));
|
||||
|
||||
// Now load values from config
|
||||
for(int x=0;x<NUM_ACCELS;x++)
|
||||
{
|
||||
p = ini_section_get_string(cat, acc_keys[x].name, "none");
|
||||
// If there's no binding in the file, leave it alone.
|
||||
if (strcmp(p, "none") != 0)
|
||||
{
|
||||
// It would be ideal to validate whether the user entered a
|
||||
// valid combo at this point, but the Qt method for testing that is
|
||||
// not available from C. Fortunately, if you feed Qt an invalid
|
||||
// keysequence string it just assigns nothing, so this won't blow up.
|
||||
// However, to improve the user experience, we should validate keys
|
||||
// and erase any bad combos from config on mainwindow load.
|
||||
|
||||
strcpy(acc_keys[x].seq, p);
|
||||
}
|
||||
}
|
||||
/* Now load values from config */
|
||||
for (int x = 0; x < NUM_ACCELS; x++) {
|
||||
p = ini_section_get_string(cat, acc_keys[x].name, "default");
|
||||
/* Check if the binding was marked as cleared */
|
||||
if (strcmp(p, "none") == 0)
|
||||
acc_keys[x].seq[0] = '\0';
|
||||
/* If there's no binding in the file, leave it alone. */
|
||||
else if (strcmp(p, "default") != 0) {
|
||||
/*
|
||||
It would be ideal to validate whether the user entered a
|
||||
valid combo at this point, but the Qt method for testing that is
|
||||
not available from C. Fortunately, if you feed Qt an invalid
|
||||
keysequence string it just assigns nothing, so this won't blow up.
|
||||
However, to improve the user experience, we should validate keys
|
||||
and erase any bad combos from config on mainwindow load.
|
||||
*/
|
||||
strcpy(acc_keys[x].seq, p);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Load the specified or a default configuration file. */
|
||||
@@ -1892,7 +1894,7 @@ config_load(void)
|
||||
#ifndef USE_SDL_UI
|
||||
load_gl3_shaders(); /* GL3 Shaders */
|
||||
#endif
|
||||
load_keybinds(); /* Load shortcut keybinds */
|
||||
load_keybinds(); /* Load shortcut keybinds */
|
||||
|
||||
/* Migrate renamed device configurations. */
|
||||
c = ini_find_section(config, "MDA");
|
||||
@@ -2524,16 +2526,16 @@ save_keybinds(void)
|
||||
{
|
||||
ini_section_t cat = ini_find_or_create_section(config, "Keybinds");
|
||||
|
||||
for(int x=0;x<NUM_ACCELS;x++)
|
||||
{
|
||||
// Has accelerator been changed from default?
|
||||
if (strcmp(def_acc_keys[x].seq, acc_keys[x].seq) == 0)
|
||||
{
|
||||
ini_section_delete_var(cat, acc_keys[x].name);
|
||||
} else {
|
||||
ini_section_set_string(cat, acc_keys[x].name, acc_keys[x].seq);
|
||||
}
|
||||
}
|
||||
for (int x = 0; x < NUM_ACCELS; x++) {
|
||||
/* Has accelerator been changed from default? */
|
||||
if (strcmp(def_acc_keys[x].seq, acc_keys[x].seq) == 0)
|
||||
ini_section_delete_var(cat, acc_keys[x].name);
|
||||
/* Check for a cleared binding to avoid saving it as an empty string */
|
||||
else if (acc_keys[x].seq[0] == '\0')
|
||||
ini_section_set_string(cat, acc_keys[x].name, "none");
|
||||
else
|
||||
ini_section_set_string(cat, acc_keys[x].name, acc_keys[x].seq);
|
||||
}
|
||||
|
||||
ini_delete_section_if_empty(config, cat);
|
||||
}
|
||||
@@ -3148,7 +3150,7 @@ config_save(void)
|
||||
#ifndef USE_SDL_UI
|
||||
save_gl3_shaders(); /* GL3 Shaders */
|
||||
#endif
|
||||
save_keybinds(); /* Key bindings */
|
||||
save_keybinds(); /* Key bindings */
|
||||
|
||||
ini_write(config, cfg_path);
|
||||
}
|
||||
|
||||
@@ -113,6 +113,8 @@ uint8_t is_smint = 0;
|
||||
uint16_t io_port = 0x0000;
|
||||
uint32_t io_val = 0x00000000;
|
||||
|
||||
uint32_t x87_op = 0x00000000;
|
||||
|
||||
int opcode_has_modrm[256] = {
|
||||
1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*00*/
|
||||
1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, /*10*/
|
||||
|
||||
@@ -784,6 +784,8 @@ typedef struct {
|
||||
uint32_t smhr;
|
||||
} cyrix_t;
|
||||
|
||||
extern uint32_t x87_op;
|
||||
|
||||
extern uint32_t addr64;
|
||||
extern uint32_t addr64_2;
|
||||
extern uint32_t addr64a[8];
|
||||
|
||||
@@ -4,88 +4,104 @@
|
||||
static int
|
||||
opESCAPE_d8_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_d8_a16[(fetchdat >> 3) & 0x1f](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_d8_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_d8_a32[(fetchdat >> 3) & 0x1f](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_d9_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_d9_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_d9_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_d9_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_da_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_da_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_da_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_da_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_db_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_db_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_db_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_db_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_dc_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_dc_a16[(fetchdat >> 3) & 0x1f](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_dc_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_dc_a32[(fetchdat >> 3) & 0x1f](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_dd_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_dd_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_dd_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_dd_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_de_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_de_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_de_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_de_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_df_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_df_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_df_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_opcodes_df_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,88 +4,104 @@
|
||||
static int
|
||||
opESCAPE_d8_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_d8_a16[(fetchdat >> 3) & 0x1f](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_d8_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_d8_a32[(fetchdat >> 3) & 0x1f](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_d9_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_d9_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_d9_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_d9_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_da_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_da_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_da_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_da_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_db_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_db_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_db_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_db_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_dc_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_dc_a16[(fetchdat >> 3) & 0x1f](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_dc_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_dc_a32[(fetchdat >> 3) & 0x1f](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_dd_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_dd_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_dd_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_dd_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_de_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_de_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_de_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_de_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
static int
|
||||
opESCAPE_df_a16(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_df_a16[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
static int
|
||||
opESCAPE_df_a32(uint32_t fetchdat)
|
||||
{
|
||||
x87_op = ((opcode & 0x07) << 8) | (fetchdat & 0xff);
|
||||
return x86_2386_opcodes_df_a32[fetchdat & 0xff](fetchdat);
|
||||
}
|
||||
|
||||
|
||||
@@ -46,8 +46,6 @@ sf_fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
if (CPUID < 0x650)
|
||||
return ILLEGAL(fetchdat);
|
||||
|
||||
FP_ENTER();
|
||||
|
||||
if (bits == 32) {
|
||||
fetch_ea_32(fetchdat);
|
||||
} else {
|
||||
@@ -82,12 +80,18 @@ sf_fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
/* The lower 11 bits contain the FPU opcode, upper 5 bits are reserved */
|
||||
fpu_state.foo = readmemw(easeg, cpu_state.eaaddr + 6) & 0x7FF;
|
||||
|
||||
fpu_state.fip = readmeml(easeg, cpu_state.eaaddr + 8);
|
||||
if (bits == 32)
|
||||
fpu_state.fip = readmeml(easeg, cpu_state.eaaddr + 8);
|
||||
else
|
||||
fpu_state.fip = readmemw(easeg, cpu_state.eaaddr + 8);
|
||||
fpu_state.fcs = readmemw(easeg, cpu_state.eaaddr + 12);
|
||||
|
||||
tag_byte = readmemb(easeg, cpu_state.eaaddr + 4);
|
||||
|
||||
fpu_state.fdp = readmeml(easeg, cpu_state.eaaddr + 16);
|
||||
if (bits == 32)
|
||||
fpu_state.fdp = readmeml(easeg, cpu_state.eaaddr + 16);
|
||||
else
|
||||
fpu_state.fdp = readmemw(easeg, cpu_state.eaaddr + 16);
|
||||
fpu_state.fds = readmemw(easeg, cpu_state.eaaddr + 20);
|
||||
|
||||
/* load i387 register file */
|
||||
@@ -110,7 +114,6 @@ sf_fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
fpu_state.swd &= ~(FPU_SW_Summary | FPU_SW_Backward);
|
||||
}
|
||||
|
||||
// CLOCK_CYCLES((cr0 & 1) ? 34 : 44);
|
||||
CLOCK_CYCLES(1);
|
||||
} else {
|
||||
/* FXSAVE */
|
||||
@@ -132,7 +135,10 @@ sf_fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
* x87 CS FPU IP Selector
|
||||
* + 16 bit, in 16/32 bit mode only
|
||||
*/
|
||||
writememl(easeg, cpu_state.eaaddr + 8, fpu_state.fip);
|
||||
if (bits == 32)
|
||||
writememl(easeg, cpu_state.eaaddr + 8, fpu_state.fip);
|
||||
else
|
||||
writememl(easeg, cpu_state.eaaddr + 8, fpu_state.fip & 0xffff);
|
||||
writememl(easeg, cpu_state.eaaddr + 12, fpu_state.fcs);
|
||||
|
||||
/*
|
||||
@@ -145,7 +151,10 @@ sf_fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
* x87 DS FPU Instruction Operand (Data) Pointer Selector
|
||||
* + 16 bit, in 16/32 bit mode only
|
||||
*/
|
||||
writememl(easeg, cpu_state.eaaddr + 16, fpu_state.fdp);
|
||||
if (bits == 32)
|
||||
writememl(easeg, cpu_state.eaaddr + 16, fpu_state.fdp);
|
||||
else
|
||||
writememl(easeg, cpu_state.eaaddr + 16, fpu_state.fdp & 0xffff);
|
||||
writememl(easeg, cpu_state.eaaddr + 20, fpu_state.fds);
|
||||
|
||||
/* store i387 register file */
|
||||
@@ -256,8 +265,6 @@ fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
return cpu_state.abrt;
|
||||
}
|
||||
|
||||
FP_ENTER();
|
||||
|
||||
old_eaaddr = cpu_state.eaaddr;
|
||||
|
||||
if (fxinst == 1) {
|
||||
@@ -269,13 +276,19 @@ fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
cpu_state.TOP = (fpus >> 11) & 7;
|
||||
cpu_state.npxs &= fpus & ~0x3800;
|
||||
|
||||
x87_pc_off = readmeml(easeg, cpu_state.eaaddr + 8);
|
||||
if (bits == 32)
|
||||
x87_pc_off = readmeml(easeg, cpu_state.eaaddr + 8);
|
||||
else
|
||||
x87_pc_off = readmemw(easeg, cpu_state.eaaddr + 8);
|
||||
x87_pc_seg = readmemw(easeg, cpu_state.eaaddr + 12);
|
||||
|
||||
ftwb = readmemb(easeg, cpu_state.eaaddr + 4);
|
||||
x87_op = readmemw(easeg, cpu_state.eaaddr + 6) & 0x07ff;
|
||||
|
||||
x87_op_off = readmeml(easeg, cpu_state.eaaddr + 16);
|
||||
x87_op_off |= (readmemw(easeg, cpu_state.eaaddr + 6) >> 12) << 16;
|
||||
if (bits == 32)
|
||||
x87_op_off = readmeml(easeg, cpu_state.eaaddr + 16);
|
||||
else
|
||||
x87_op_off = readmemw(easeg, cpu_state.eaaddr +16);
|
||||
x87_op_seg = readmemw(easeg, cpu_state.eaaddr + 20);
|
||||
|
||||
for (i = 0; i <= 7; i++) {
|
||||
@@ -320,7 +333,6 @@ fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
}
|
||||
}
|
||||
|
||||
// CLOCK_CYCLES((cr0 & 1) ? 34 : 44);
|
||||
CLOCK_CYCLES(1);
|
||||
} else {
|
||||
/* FXSAVE */
|
||||
@@ -345,11 +357,17 @@ fx_save_stor_common(uint32_t fetchdat, int bits)
|
||||
writememw(easeg, cpu_state.eaaddr + 2, cpu_state.npxs);
|
||||
writememb(easeg, cpu_state.eaaddr + 4, ftwb);
|
||||
|
||||
writememw(easeg, cpu_state.eaaddr + 6, (x87_op_off >> 16) << 12);
|
||||
writememl(easeg, cpu_state.eaaddr + 8, x87_pc_off);
|
||||
writememw(easeg, cpu_state.eaaddr + 6, x87_op);
|
||||
if (bits == 32)
|
||||
writememl(easeg, cpu_state.eaaddr + 8, x87_pc_off);
|
||||
else
|
||||
writememl(easeg, cpu_state.eaaddr + 8, x87_pc_off & 0xffff);
|
||||
writememw(easeg, cpu_state.eaaddr + 12, x87_pc_seg);
|
||||
|
||||
writememl(easeg, cpu_state.eaaddr + 16, x87_op_off);
|
||||
if (bits == 32)
|
||||
writememl(easeg, cpu_state.eaaddr + 16, x87_op_off);
|
||||
else
|
||||
writememl(easeg, cpu_state.eaaddr + 16, x87_op_off & 0xffff);
|
||||
writememw(easeg, cpu_state.eaaddr + 20, x87_op_seg);
|
||||
|
||||
if (cpu_state.ismmx) {
|
||||
|
||||
@@ -395,7 +395,7 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
||||
fatal("Write with ECC\n");
|
||||
esdi->status = STAT_READY | STAT_DRQ | STAT_DSC;
|
||||
esdi->pos = 0;
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
break;
|
||||
|
||||
case CMD_VERIFY:
|
||||
@@ -412,7 +412,7 @@ esdi_write(uint16_t port, uint8_t val, void *priv)
|
||||
case CMD_FORMAT:
|
||||
esdi->status = STAT_DRQ;
|
||||
esdi->pos = 0;
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
break;
|
||||
|
||||
case CMD_SET_PARAMETERS: /* Initialize Drive Parameters */
|
||||
@@ -593,6 +593,7 @@ esdi_callback(void *priv)
|
||||
esdi->reset = 0;
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -650,7 +651,7 @@ read_error:
|
||||
esdi->status = STAT_READY | STAT_ERR | STAT_DSC;
|
||||
esdi->error = ERR_ABRT;
|
||||
irq_raise(esdi);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
} else {
|
||||
if (get_sector(esdi, &addr)) {
|
||||
@@ -658,7 +659,7 @@ read_error:
|
||||
write_error:
|
||||
esdi->status = STAT_READY | STAT_DSC | STAT_ERR;
|
||||
irq_raise(esdi);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -672,10 +673,10 @@ write_error:
|
||||
esdi->status = STAT_DRQ | STAT_READY | STAT_DSC;
|
||||
esdi->pos = 0;
|
||||
next_sector(esdi);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 1);
|
||||
} else {
|
||||
esdi->status = STAT_READY | STAT_DSC;
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -718,7 +719,7 @@ verify_error:
|
||||
break;
|
||||
|
||||
case CMD_FORMAT:
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
if (!drive->present) {
|
||||
esdi->status = STAT_READY | STAT_ERR | STAT_DSC;
|
||||
esdi->error = ERR_ABRT;
|
||||
@@ -752,10 +753,12 @@ format_error:
|
||||
esdi->status = STAT_READY | STAT_DSC;
|
||||
irq_raise(esdi);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
|
||||
case CMD_SET_PARAMETERS: /* Initialize Drive Parameters */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
if (!drive->present) {
|
||||
esdi->status = STAT_READY | STAT_ERR | STAT_DSC;
|
||||
esdi->error = ERR_ABRT;
|
||||
@@ -778,10 +781,12 @@ format_error:
|
||||
esdi->error = ERR_ABRT;
|
||||
irq_raise(esdi);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
|
||||
case 0xe0:
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
if (!drive->present) {
|
||||
esdi->status = STAT_READY | STAT_ERR | STAT_DSC;
|
||||
esdi->error = ERR_ABRT;
|
||||
@@ -825,6 +830,7 @@ format_error:
|
||||
}
|
||||
irq_raise(esdi);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
|
||||
case CMD_READ_PARAMETERS:
|
||||
@@ -869,6 +875,7 @@ format_error:
|
||||
irq_raise(esdi);
|
||||
}
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -880,6 +887,7 @@ format_error:
|
||||
esdi->error = ERR_ABRT;
|
||||
irq_raise(esdi);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -954,6 +962,7 @@ wd1007vse1_init(UNUSED(const device_t *info))
|
||||
timer_add(&esdi->callback_timer, esdi_callback, esdi, 0);
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
|
||||
return esdi;
|
||||
}
|
||||
@@ -973,6 +982,7 @@ wd1007vse1_close(void *priv)
|
||||
free(esdi);
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
@@ -288,6 +288,7 @@ cmd_unsupported(esdi_t *dev)
|
||||
dev->irq_in_progress = 1;
|
||||
set_irq(dev);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -309,6 +310,7 @@ device_not_present(esdi_t *dev)
|
||||
dev->irq_in_progress = 1;
|
||||
set_irq(dev);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -330,6 +332,7 @@ rba_out_of_range(esdi_t *dev)
|
||||
dev->irq_in_progress = 1;
|
||||
set_irq(dev);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -351,6 +354,7 @@ defective_block(esdi_t *dev)
|
||||
dev->irq_in_progress = 1;
|
||||
set_irq(dev);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -368,6 +372,7 @@ complete_command_status(esdi_t *dev)
|
||||
dev->status_data[5] = (dev->rba - 1) >> 8;
|
||||
dev->status_data[6] = 0; /*Number of blocks requiring error recovery*/
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
}
|
||||
|
||||
#define ESDI_ADAPTER_ONLY() \
|
||||
@@ -696,6 +701,7 @@ esdi_callback(void *priv)
|
||||
dev->irq_in_progress = 1;
|
||||
set_irq(dev);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
|
||||
case CMD_GET_DEV_CONFIG:
|
||||
@@ -744,6 +750,7 @@ esdi_callback(void *priv)
|
||||
dev->irq_in_progress = 1;
|
||||
set_irq(dev);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
|
||||
case CMD_GET_POS_INFO:
|
||||
@@ -764,6 +771,7 @@ esdi_callback(void *priv)
|
||||
dev->irq_in_progress = 1;
|
||||
set_irq(dev);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
|
||||
case 0x10:
|
||||
@@ -817,6 +825,7 @@ esdi_callback(void *priv)
|
||||
dev->irq_in_progress = 1;
|
||||
set_irq(dev);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_ESDI, 0);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -1827,7 +1827,7 @@ ide_writeb(uint16_t addr, uint8_t val, void *priv)
|
||||
ide->blockcount = 0;
|
||||
/* Turn on the activity indicator *here* so that it gets turned on
|
||||
less times. */
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus_type, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | hdd[ide->hdd_num].bus_type, 1);
|
||||
fallthrough;
|
||||
|
||||
case WIN_WRITE:
|
||||
@@ -2472,6 +2472,7 @@ ide_callback(void *priv)
|
||||
else if (!ide->tf->lba && (ide->cfg_spt == 0))
|
||||
err = IDNF_ERR;
|
||||
else {
|
||||
ui_sb_update_icon_write(SB_HDD | hdd[ide->hdd_num].bus_type, 1);
|
||||
ret = hdd_image_write(ide->hdd_num, ide_get_sector(ide), 1, (uint8_t *) ide->buffer);
|
||||
ide_irq_raise(ide);
|
||||
ide->tf->secount--;
|
||||
@@ -2479,10 +2480,8 @@ ide_callback(void *priv)
|
||||
ide->tf->atastat = DRQ_STAT | DRDY_STAT | DSC_STAT;
|
||||
ide->tf->pos = 0;
|
||||
ide_next_sector(ide);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus_type, 1);
|
||||
} else {
|
||||
ide->tf->atastat = DRDY_STAT | DSC_STAT;
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus_type, 0);
|
||||
}
|
||||
if (ret < 0)
|
||||
err = UNC_ERR;
|
||||
@@ -2514,6 +2513,7 @@ ide_callback(void *priv)
|
||||
return;
|
||||
} else if (ret & 1) {
|
||||
/* DMA successful */
|
||||
ui_sb_update_icon_write(SB_HDD | hdd[ide->hdd_num].bus_type, 1);
|
||||
ret = hdd_image_write(ide->hdd_num, ide_get_sector(ide),
|
||||
ide->sector_pos, ide->sector_buffer);
|
||||
|
||||
@@ -2524,7 +2524,6 @@ ide_callback(void *priv)
|
||||
err = UNC_ERR;
|
||||
|
||||
ide_irq_raise(ide);
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus_type, 0);
|
||||
} else {
|
||||
/* Bus master DMA error, abort the command. */
|
||||
ide_log("IDE %i: DMA read aborted (failed)\n", ide->channel);
|
||||
@@ -2562,7 +2561,7 @@ ide_callback(void *priv)
|
||||
ide_next_sector(ide);
|
||||
} else {
|
||||
ide->tf->atastat = DRDY_STAT | DSC_STAT;
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus_type, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | hdd[ide->hdd_num].bus_type, 0);
|
||||
}
|
||||
if (ret < 0)
|
||||
err = UNC_ERR;
|
||||
@@ -2596,7 +2595,7 @@ ide_callback(void *priv)
|
||||
err = UNC_ERR;
|
||||
ide_irq_raise(ide);
|
||||
|
||||
ui_sb_update_icon(SB_HDD | hdd[ide->hdd_num].bus_type, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | hdd[ide->hdd_num].bus_type, 1);
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -557,6 +557,7 @@ do_callback(void *priv)
|
||||
mfm->reset = 0;
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -627,9 +628,9 @@ write_error:
|
||||
mfm->status |= STAT_DRQ;
|
||||
mfm->pos = 0;
|
||||
next_sector(mfm);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 1);
|
||||
} else
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
break;
|
||||
|
||||
case CMD_VERIFY:
|
||||
@@ -657,7 +658,7 @@ write_error:
|
||||
|
||||
mfm->status = STAT_READY | STAT_DSC;
|
||||
irq_raise(mfm);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 1);
|
||||
break;
|
||||
|
||||
case CMD_DIAGNOSE:
|
||||
@@ -772,6 +773,7 @@ mfm_init(UNUSED(const device_t *info))
|
||||
timer_add(&mfm->callback_timer, do_callback, mfm, 0);
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
|
||||
return mfm;
|
||||
}
|
||||
@@ -790,6 +792,7 @@ mfm_close(void *priv)
|
||||
free(mfm);
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
}
|
||||
|
||||
const device_t st506_at_wd1003_device = {
|
||||
|
||||
@@ -580,14 +580,14 @@ st506_callback(void *priv)
|
||||
(void) get_chs(dev, drive);
|
||||
st506_xt_log("ST506: FORMAT_DRIVE(%i) interleave=%i\n",
|
||||
dev->drive_sel, dev->command[4]);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 1);
|
||||
timer_advance_u64(&dev->timer, ST506_TIME);
|
||||
dev->state = STATE_SEND_DATA;
|
||||
break;
|
||||
|
||||
case STATE_SEND_DATA: /* wrong, but works */
|
||||
if (!get_sector(dev, drive, &addr)) {
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
st506_error(dev, dev->error);
|
||||
st506_complete(dev);
|
||||
return;
|
||||
@@ -604,7 +604,7 @@ st506_callback(void *priv)
|
||||
break;
|
||||
|
||||
case STATE_SENT_DATA:
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
st506_complete(dev);
|
||||
break;
|
||||
|
||||
@@ -663,14 +663,14 @@ st506_callback(void *priv)
|
||||
st506_xt_log("ST506: FORMAT_%sTRACK(%i, %i/%i)\n",
|
||||
(dev->command[0] == CMD_FORMAT_BAD_TRACK) ? "BAD_" : "",
|
||||
dev->drive_sel, dev->cylinder, dev->head);
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 1);
|
||||
timer_advance_u64(&dev->timer, ST506_TIME);
|
||||
dev->state = STATE_SEND_DATA;
|
||||
break;
|
||||
|
||||
case STATE_SEND_DATA: /* wrong, but works */
|
||||
if (!get_sector(dev, drive, &addr)) {
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
st506_error(dev, dev->error);
|
||||
st506_complete(dev);
|
||||
return;
|
||||
@@ -686,7 +686,7 @@ st506_callback(void *priv)
|
||||
break;
|
||||
|
||||
case STATE_SENT_DATA:
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
st506_complete(dev);
|
||||
break;
|
||||
|
||||
@@ -828,7 +828,7 @@ read_error_sent:
|
||||
return;
|
||||
}
|
||||
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 1);
|
||||
|
||||
/* Set up the data transfer. */
|
||||
dev->buff_pos = 0;
|
||||
@@ -865,7 +865,7 @@ read_error_sent:
|
||||
case STATE_RECEIVED_DATA:
|
||||
if (!get_sector(dev, drive, &addr)) {
|
||||
write_error:
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
st506_error(dev, dev->error);
|
||||
st506_complete(dev);
|
||||
return;
|
||||
@@ -879,7 +879,7 @@ write_error:
|
||||
}
|
||||
|
||||
if (--dev->count == 0) {
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_MFM, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_MFM, 0);
|
||||
st506_complete(dev);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -385,7 +385,7 @@ do_format(hdc_t *dev, drive_t *drive, dcb_t *dcb)
|
||||
dev->sector = 0;
|
||||
|
||||
/* Activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 1);
|
||||
|
||||
do_fmt:
|
||||
/*
|
||||
@@ -426,7 +426,7 @@ do_fmt:
|
||||
}
|
||||
|
||||
/* De-activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 0);
|
||||
}
|
||||
|
||||
/* Execute the DCB we just received. */
|
||||
@@ -631,7 +631,7 @@ read_error:
|
||||
|
||||
case STATE_RECV:
|
||||
/* Activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 1);
|
||||
do_recv:
|
||||
/* Ready to transfer the data in. */
|
||||
dev->state = STATE_RDATA;
|
||||
@@ -680,7 +680,7 @@ do_recv:
|
||||
if (get_sector(dev, drive, &addr)) {
|
||||
write_error:
|
||||
/* De-activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 0);
|
||||
|
||||
dev->comp |= COMP_ERR;
|
||||
set_intr(dev);
|
||||
@@ -697,7 +697,7 @@ write_error:
|
||||
dev->buf_idx = 0;
|
||||
if (--dev->count == 0) {
|
||||
/* De-activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 0);
|
||||
|
||||
set_intr(dev);
|
||||
return;
|
||||
|
||||
@@ -628,6 +628,7 @@ mo_cmd_error(mo_t *dev)
|
||||
dev->callback = 50.0 * MO_TIME;
|
||||
mo_set_callback(dev);
|
||||
ui_sb_update_icon(SB_MO | dev->id, 0);
|
||||
ui_sb_update_icon_write(SB_MO | dev->id, 0);
|
||||
mo_log(dev->log, "[%02X] ERROR: %02X/%02X/%02X\n", dev->current_cdb[0], mo_sense_key,
|
||||
mo_asc, mo_ascq);
|
||||
}
|
||||
@@ -644,6 +645,7 @@ mo_unit_attention(mo_t *dev)
|
||||
dev->callback = 50.0 * MO_TIME;
|
||||
mo_set_callback(dev);
|
||||
ui_sb_update_icon(SB_MO | dev->id, 0);
|
||||
ui_sb_update_icon_write(SB_MO | dev->id, 0);
|
||||
mo_log(dev->log, "UNIT ATTENTION\n");
|
||||
}
|
||||
|
||||
@@ -1462,7 +1464,7 @@ mo_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
mo_data_command_finish(dev, dev->packet_len, dev->drv->sector_size,
|
||||
dev->packet_len, 1);
|
||||
|
||||
ui_sb_update_icon(SB_MO | dev->id,
|
||||
ui_sb_update_icon_write(SB_MO | dev->id,
|
||||
dev->packet_status != PHASE_COMPLETE);
|
||||
} else {
|
||||
mo_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
@@ -1501,7 +1503,7 @@ mo_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
dev->drv->sector_size,
|
||||
alloc_length, 1);
|
||||
|
||||
ui_sb_update_icon(SB_MO | dev->id,
|
||||
ui_sb_update_icon_write(SB_MO | dev->id,
|
||||
dev->packet_status != PHASE_COMPLETE);
|
||||
} else {
|
||||
mo_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
|
||||
@@ -709,6 +709,7 @@ zip_cmd_error(zip_t *dev)
|
||||
dev->callback = 50.0 * ZIP_TIME;
|
||||
zip_set_callback(dev);
|
||||
ui_sb_update_icon(SB_ZIP | dev->id, 0);
|
||||
ui_sb_update_icon_write(SB_ZIP | dev->id, 0);
|
||||
zip_log(dev->log, "[%02X] ERROR: %02X/%02X/%02X\n", dev->current_cdb[0], zip_sense_key,
|
||||
zip_asc, zip_ascq);
|
||||
}
|
||||
@@ -725,6 +726,7 @@ zip_unit_attention(zip_t *dev)
|
||||
dev->callback = 50.0 * ZIP_TIME;
|
||||
zip_set_callback(dev);
|
||||
ui_sb_update_icon(SB_ZIP | dev->id, 0);
|
||||
ui_sb_update_icon_write(SB_ZIP | dev->id, 0);
|
||||
zip_log(dev->log, "UNIT ATTENTION\n", dev->id);
|
||||
}
|
||||
|
||||
@@ -1485,7 +1487,7 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
zip_data_command_finish(dev, dev->packet_len, 512,
|
||||
dev->packet_len, 1);
|
||||
|
||||
ui_sb_update_icon(SB_ZIP | dev->id,
|
||||
ui_sb_update_icon_write(SB_ZIP | dev->id,
|
||||
dev->packet_status != PHASE_COMPLETE);
|
||||
} else {
|
||||
zip_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
@@ -1526,7 +1528,7 @@ zip_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
zip_data_command_finish(dev, 512, 512,
|
||||
alloc_length, 1);
|
||||
|
||||
ui_sb_update_icon(SB_ZIP | dev->id,
|
||||
ui_sb_update_icon_write(SB_ZIP | dev->id,
|
||||
dev->packet_status != PHASE_COMPLETE);
|
||||
} else {
|
||||
zip_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
|
||||
@@ -615,7 +615,10 @@ fdc_io_command_phase1(fdc_t *fdc, int out)
|
||||
}
|
||||
}
|
||||
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 1);
|
||||
if (fdc->processed_cmd == 0x05 || fdc->processed_cmd == 0x09)
|
||||
ui_sb_update_icon_write(SB_FLOPPY | real_drive(fdc, fdc->drive), 1);
|
||||
else
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 1);
|
||||
fdc->stat = out ? 0x10 : 0x50;
|
||||
if ((fdc->flags & FDC_FLAG_PCJR) || !fdc->dma) {
|
||||
fdc->stat |= 0x20;
|
||||
@@ -671,8 +674,10 @@ fdc_soft_reset(fdc_t *fdc)
|
||||
|
||||
fdc->perp &= 0xfc;
|
||||
|
||||
for (int i = 0; i < FDD_NUM; i++)
|
||||
ui_sb_update_icon(SB_FLOPPY | i, 0);
|
||||
for (int i = 0; i < FDD_NUM; i++) {
|
||||
ui_sb_update_icon(SB_FLOPPY | i, 0);
|
||||
ui_sb_update_icon_write(SB_FLOPPY | i, 0);
|
||||
}
|
||||
|
||||
fdc_ctrl_reset(fdc);
|
||||
}
|
||||
@@ -706,6 +711,7 @@ fdc_write(uint16_t addr, uint8_t val, void *priv)
|
||||
timer_set_delay_u64(&fdc->timer, 8 * TIMER_USEC);
|
||||
fdc->interrupt = -1;
|
||||
ui_sb_update_icon(SB_FLOPPY | 0, 0);
|
||||
ui_sb_update_icon_write(SB_FLOPPY | 0, 0);
|
||||
fdc_ctrl_reset(fdc);
|
||||
}
|
||||
if (!fdd_get_flags(0))
|
||||
@@ -1502,6 +1508,7 @@ fdc_poll_common_finish(fdc_t *fdc, int compare, int st5)
|
||||
fdc->res[10] = fdc->params[4];
|
||||
fdc_log("Read/write finish (%02X %02X %02X %02X %02X %02X %02X)\n", fdc->res[4], fdc->res[5], fdc->res[6], fdc->res[7], fdc->res[8], fdc->res[9], fdc->res[10]);
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 0);
|
||||
ui_sb_update_icon_write(SB_FLOPPY | real_drive(fdc, fdc->drive), 0);
|
||||
fdc->paramstogo = 7;
|
||||
dma_set_drq(fdc->dma_ch, 0);
|
||||
}
|
||||
@@ -1545,8 +1552,10 @@ fdc_callback(void *priv)
|
||||
case -5: /*Reset in power down mode */
|
||||
fdc->perp &= 0xfc;
|
||||
|
||||
for (uint8_t i = 0; i < FDD_NUM; i++)
|
||||
for (uint8_t i = 0; i < FDD_NUM; i++) {
|
||||
ui_sb_update_icon(SB_FLOPPY | i, 0);
|
||||
ui_sb_update_icon_write(SB_FLOPPY | i, 0);
|
||||
}
|
||||
|
||||
fdc_ctrl_reset(fdc);
|
||||
|
||||
@@ -1694,7 +1703,10 @@ fdc_callback(void *priv)
|
||||
fdc->sector++;
|
||||
else if (fdc->params[5] == 0)
|
||||
fdc->sector++;
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 1);
|
||||
if (fdc->interrupt == 0x05 || fdc->interrupt == 0x09)
|
||||
ui_sb_update_icon_write(SB_FLOPPY | real_drive(fdc, fdc->drive), 1);
|
||||
else
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 1);
|
||||
switch (fdc->interrupt) {
|
||||
case 5:
|
||||
case 9:
|
||||
@@ -1885,6 +1897,7 @@ fdc_error(fdc_t *fdc, int st5, int st6)
|
||||
break;
|
||||
}
|
||||
ui_sb_update_icon(SB_FLOPPY | real_drive(fdc, fdc->drive), 0);
|
||||
ui_sb_update_icon_write(SB_FLOPPY | real_drive(fdc, fdc->drive), 0);
|
||||
fdc->paramstogo = 7;
|
||||
}
|
||||
|
||||
@@ -2333,8 +2346,10 @@ fdc_reset(void *priv)
|
||||
|
||||
current_drive = 0;
|
||||
|
||||
for (uint8_t i = 0; i < FDD_NUM; i++)
|
||||
for (uint8_t i = 0; i < FDD_NUM; i++) {
|
||||
ui_sb_update_icon(SB_FLOPPY | i, 0);
|
||||
ui_sb_update_icon_write(SB_FLOPPY | i, 0);
|
||||
}
|
||||
|
||||
fdc->power_down = 0;
|
||||
}
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
typedef struct dev_status_empty_active_t {
|
||||
atomic_bool_t empty;
|
||||
atomic_bool_t active;
|
||||
atomic_bool_t write_active;
|
||||
} dev_status_empty_active_t;
|
||||
|
||||
typedef struct dev_status_active_t {
|
||||
atomic_bool_t active;
|
||||
atomic_bool_t write_active;
|
||||
} dev_status_active_t;
|
||||
|
||||
typedef struct dev_status_empty_t {
|
||||
|
||||
@@ -65,6 +65,7 @@ extern void ui_sb_update_panes(void);
|
||||
extern void ui_sb_update_text(void);
|
||||
extern void ui_sb_update_tip(int meaning);
|
||||
extern void ui_sb_update_icon(int tag, int active);
|
||||
extern void ui_sb_update_icon_write(int tag, int write);
|
||||
extern void ui_sb_update_icon_state(int tag, int state);
|
||||
extern void ui_sb_set_text_w(wchar_t *wstr);
|
||||
extern void ui_sb_set_text(char *str);
|
||||
|
||||
@@ -90,6 +90,7 @@ typedef struct ibm8514_t {
|
||||
uint16_t subsys_cntl;
|
||||
uint16_t setup_md;
|
||||
uint16_t advfunc_cntl;
|
||||
uint16_t advfunc_cntl_old;
|
||||
uint16_t cur_y;
|
||||
uint16_t cur_x;
|
||||
int16_t destx;
|
||||
@@ -107,8 +108,10 @@ typedef struct ibm8514_t {
|
||||
uint16_t wrt_mask;
|
||||
uint16_t rd_mask;
|
||||
uint16_t color_cmp;
|
||||
uint16_t bkgd_mix;
|
||||
uint16_t frgd_mix;
|
||||
uint8_t bkgd_mix;
|
||||
uint8_t frgd_mix;
|
||||
uint8_t bkgd_sel;
|
||||
uint8_t frgd_sel;
|
||||
uint16_t multifunc_cntl;
|
||||
uint16_t multifunc[16];
|
||||
uint16_t clip_right;
|
||||
@@ -159,6 +162,14 @@ typedef struct ibm8514_t {
|
||||
int ydir;
|
||||
int linedraw;
|
||||
uint32_t ge_offset;
|
||||
uint32_t src_ge_offset;
|
||||
uint32_t dst_ge_offset;
|
||||
uint16_t src_pitch;
|
||||
uint16_t dst_pitch;
|
||||
int64_t cur_x_24bpp;
|
||||
int64_t cur_y_24bpp;
|
||||
int64_t dest_x_24bpp;
|
||||
int64_t dest_y_24bpp;
|
||||
} accel;
|
||||
|
||||
uint16_t test;
|
||||
@@ -240,6 +251,8 @@ typedef struct ibm8514_t {
|
||||
uint32_t vram_amount;
|
||||
int vram_512k_8514;
|
||||
int vendor_mode;
|
||||
int _8514on;
|
||||
int _8514crt;
|
||||
PALETTE _8514pal;
|
||||
|
||||
latch8514_t latch;
|
||||
|
||||
@@ -77,8 +77,9 @@ typedef struct mach_t {
|
||||
uint8_t overscan_g_col_24;
|
||||
uint8_t overscan_r_col_24;
|
||||
uint16_t fifo_test_data[17];
|
||||
int port_len;
|
||||
int crt_resolution;
|
||||
uint8_t old_on1;
|
||||
uint8_t old_on2;
|
||||
int crt_resolution;
|
||||
|
||||
struct {
|
||||
uint8_t line_idx;
|
||||
@@ -99,12 +100,13 @@ typedef struct mach_t {
|
||||
uint16_t src_x_end;
|
||||
uint16_t src_x_start;
|
||||
uint16_t src_x;
|
||||
uint16_t r_src_x;
|
||||
uint16_t src_y;
|
||||
int16_t bres_count;
|
||||
uint16_t clock_sel;
|
||||
uint16_t crt_pitch;
|
||||
uint16_t ge_pitch;
|
||||
uint16_t src_pitch;
|
||||
uint16_t dst_pitch;
|
||||
uint16_t dest_cmp_fn;
|
||||
uint16_t dp_config;
|
||||
uint16_t ext_ge_config;
|
||||
@@ -158,14 +160,18 @@ typedef struct mach_t {
|
||||
int src_stepx;
|
||||
uint8_t mono_pattern_normal[16];
|
||||
uint8_t color_pattern[32];
|
||||
uint16_t color_pattern_hicol[8];
|
||||
int mono_pattern[8][8];
|
||||
uint32_t ge_offset;
|
||||
uint32_t src_ge_offset;
|
||||
uint32_t dst_ge_offset;
|
||||
uint32_t crt_offset;
|
||||
uint32_t patt_len_reg;
|
||||
int poly_fill;
|
||||
uint16_t dst_clr_cmp_mask;
|
||||
int clip_overrun;
|
||||
int color_pattern_idx;
|
||||
int64_t src_x_scan;
|
||||
int64_t src_y_scan;
|
||||
} accel;
|
||||
|
||||
atomic_int force_busy;
|
||||
|
||||
@@ -171,11 +171,11 @@ typedef struct svga_t {
|
||||
latch_t latch;
|
||||
|
||||
pc_timer_t timer;
|
||||
pc_timer_t timer8514;
|
||||
pc_timer_t timer_8514;
|
||||
pc_timer_t timer_xga;
|
||||
|
||||
double clock;
|
||||
double clock8514;
|
||||
double clock_8514;
|
||||
double clock_xga;
|
||||
|
||||
double multiplier;
|
||||
|
||||
@@ -653,7 +653,7 @@ do_format(hdc_t *dev, drive_t *drive, ccb_t *ccb)
|
||||
case STATE_FINIT:
|
||||
do_fmt:
|
||||
/* Activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 1);
|
||||
|
||||
/* Seek to cylinder. */
|
||||
if (do_seek(dev, drive, start_cyl)) {
|
||||
@@ -691,7 +691,7 @@ do_fmt:
|
||||
}
|
||||
|
||||
/* De-activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 0);
|
||||
|
||||
/* This saves us a LOT of code. */
|
||||
dev->state = STATE_FINIT;
|
||||
@@ -705,6 +705,7 @@ do_fmt:
|
||||
if (intr) {
|
||||
/* De-activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 0);
|
||||
|
||||
do_finish(dev);
|
||||
}
|
||||
@@ -970,7 +971,7 @@ do_send:
|
||||
|
||||
case STATE_RECV:
|
||||
/* Activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 1);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 1);
|
||||
do_recv:
|
||||
/* Ready to transfer the data in. */
|
||||
dev->state = STATE_RDATA;
|
||||
@@ -1000,7 +1001,7 @@ do_recv:
|
||||
ps1_hdc_log("HDC: CMD_WRITE_SECTORS out of data (idx=%d, len=%d)!\n", dev->buf_idx, dev->buf_len);
|
||||
|
||||
/* De-activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 0);
|
||||
|
||||
dev->intstat |= ISR_EQUIP_CHECK;
|
||||
dev->ssb.need_reset = 1;
|
||||
@@ -1025,7 +1026,7 @@ do_recv:
|
||||
/* Get address of sector to write. */
|
||||
if (get_sector(dev, drive, &addr)) {
|
||||
/* De-activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 0);
|
||||
|
||||
do_finish(dev);
|
||||
return;
|
||||
@@ -1038,7 +1039,7 @@ do_recv:
|
||||
dev->buf_idx = 0;
|
||||
if (--dev->count == 0) {
|
||||
/* De-activate the status icon. */
|
||||
ui_sb_update_icon(SB_HDD | HDD_BUS_XTA, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | HDD_BUS_XTA, 0);
|
||||
|
||||
if (!(dev->ctrl & ACR_DMA_EN))
|
||||
dev->status &= ~ASR_DATA_REQ;
|
||||
|
||||
@@ -432,7 +432,8 @@ network_rx_queue(void *priv)
|
||||
bool activity = rx_bytes || tx_bytes;
|
||||
bool led_on = card->led_timer & 0x80000000;
|
||||
if ((activity && !led_on) || (card->led_timer & 0x7fffffff) >= 150000) {
|
||||
ui_sb_update_icon(SB_NETWORK | card->card_num, activity);
|
||||
ui_sb_update_icon(SB_NETWORK | card->card_num, !!(rx_bytes));
|
||||
ui_sb_update_icon_write(SB_NETWORK | card->card_num, !!(tx_bytes));
|
||||
card->led_timer = 0 | (activity << 31);
|
||||
}
|
||||
|
||||
@@ -577,6 +578,7 @@ void
|
||||
network_reset(void)
|
||||
{
|
||||
ui_sb_update_icon(SB_NETWORK, 0);
|
||||
ui_sb_update_icon_write(SB_NETWORK, 0);
|
||||
|
||||
#ifdef ENABLE_NETWORK_LOG
|
||||
network_dump_mutex = thread_create_mutex();
|
||||
|
||||
BIN
src/qt/icons/write_active.ico
Normal file
BIN
src/qt/icons/write_active.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.8 KiB |
@@ -112,7 +112,7 @@ msgid "Hi&DPI scaling"
|
||||
msgstr "Hi&DPI-schaling"
|
||||
|
||||
msgid "&Fullscreen"
|
||||
msgstr "&Fullscreen"
|
||||
msgstr "&Volledig scherm"
|
||||
|
||||
msgid "Fullscreen &stretch mode"
|
||||
msgstr "Volledig scherm &uitrekmodus"
|
||||
@@ -670,16 +670,16 @@ msgid "Surface images"
|
||||
msgstr "Oppervlakte-images"
|
||||
|
||||
msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."
|
||||
msgstr "Machine \"%hs\" is niet beschikbaar door ontbrekende ROMs in de map roms/machines. Overschakelen naar een beschikbare machine."
|
||||
msgstr "Machine \"%hs\" is niet beschikbaar door ontbrekende ROMs in de map roms/machines. Er wordt overgeschakeld naar een beschikbare machine."
|
||||
|
||||
msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card."
|
||||
msgstr "Videokaart \"%hs\" is niet beschikbaar door ontbrekende ROMs in de map roms/video. Overschakel over naar een beschikbare videokaart."
|
||||
msgstr "Videokaart \"%hs\" is niet beschikbaar door ontbrekende ROMs in de map roms/video. Er wordt overgeschakeld naar een beschikbare videokaart."
|
||||
|
||||
msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Disabling the second video card."
|
||||
msgstr "Videokaart #2 \"%hs\" is niet beschikbaar door ontbrekende ROMs in de map roms/video. Uitschakel de tweede videokaart."
|
||||
msgstr "Videokaart #2 \"%hs\" is niet beschikbaar door ontbrekende ROMs in de map roms/video. De tweede videokaart wordt uitgeschakeld."
|
||||
|
||||
msgid "Device \"%hs\" is not available due to missing ROMs. Ignoring the device."
|
||||
msgstr "Het apparaat \"%hs\" is niet beschikbaar door ontbrekende ROMs. Negeer het apparaat."
|
||||
msgstr "Het apparaat \"%hs\" is niet beschikbaar door ontbrekende ROMs. Het apparaat wordt genegeerd."
|
||||
|
||||
msgid "Machine"
|
||||
msgstr "Machine"
|
||||
@@ -1018,7 +1018,7 @@ msgid "Differencing VHD"
|
||||
msgstr "Verschil-VHD"
|
||||
|
||||
msgid "(N/A)"
|
||||
msgstr "(N/A)"
|
||||
msgstr "(N/B)"
|
||||
|
||||
msgid "Raw image (.img)"
|
||||
msgstr "Ruw image (.img)"
|
||||
@@ -1054,7 +1054,7 @@ msgid "This could mean that the parent image was modified after the differencing
|
||||
msgstr "Dit kan betekenen dat de bovenliggende image is gewijzigd nadat de verschil-image is gemaakt.\n\nDit kan ook gebeuren als de imagebestanden zijn verplaatst of gekopieerd, of door een fout in het programma waarmee deze schijf is gemaakt.\n\nWil je de tijdstempels herstellen?"
|
||||
|
||||
msgid "Parent and child disk timestamps do not match"
|
||||
msgstr "Bovenliggende en onderliggende schijf tijdstempels komen niet overeen"
|
||||
msgstr "Bovenliggende en onderliggende schijftijdstempels komen niet overeen"
|
||||
|
||||
msgid "Could not fix VHD timestamp."
|
||||
msgstr "Kan VHD tijdstempel niet herstellen."
|
||||
@@ -1234,7 +1234,7 @@ msgid "Open screenshots folder..."
|
||||
msgstr "Map met schermafbeeldingen openen..."
|
||||
|
||||
msgid "Apply fullscreen stretch mode when maximized"
|
||||
msgstr "Pas fullscreen stretchmodus toe wanneer gemaximaliseerd"
|
||||
msgstr "Schakel de volledig scherm-uitrekmodus in bij maximaliseren"
|
||||
|
||||
msgid "Cursor/Puck"
|
||||
msgstr "Cursor/Puck"
|
||||
@@ -1291,7 +1291,7 @@ msgid "Browse..."
|
||||
msgstr "Bladeren..."
|
||||
|
||||
msgid "Couldn't create OpenGL context."
|
||||
msgstr "Kan OpenGL context niet maken."
|
||||
msgstr "Kan OpenGL context niet aanmaken."
|
||||
|
||||
msgid "Couldn't switch to OpenGL context."
|
||||
msgstr "Kan niet overschakelen naar OpenGL context."
|
||||
@@ -1444,7 +1444,7 @@ msgid "Enable backlight"
|
||||
msgstr "Backlight inschakelen"
|
||||
|
||||
msgid "Invert colors"
|
||||
msgstr "Kleuren omkeren"
|
||||
msgstr "Kleuren inverteren"
|
||||
|
||||
msgid "BIOS size"
|
||||
msgstr "BIOS-grootte"
|
||||
@@ -1810,7 +1810,7 @@ msgid "Five + Wheel"
|
||||
msgstr "Vijf + Wiel"
|
||||
|
||||
msgid "Five + 2 Wheels"
|
||||
msgstr ""
|
||||
msgstr "Vijf + 2 Wielen"
|
||||
|
||||
msgid "A3 - SMT2 Serial / SMT3(R)V"
|
||||
msgstr "A3 - SMT2 Serieel / SMT3(R)V"
|
||||
@@ -1957,13 +1957,13 @@ msgid "Bochs latest"
|
||||
msgstr "Bochs nieuwste"
|
||||
|
||||
msgid "Mono Non-Interlaced"
|
||||
msgstr "Mono Non-Interlaced"
|
||||
msgstr "Mono niet geïnterlaced"
|
||||
|
||||
msgid "Color Interlaced"
|
||||
msgstr "Kleur interlaced"
|
||||
|
||||
msgid "Color Non-Interlaced"
|
||||
msgstr "Kleur non-interlaced"
|
||||
msgstr "Kleur niet geïnterlaced"
|
||||
|
||||
msgid "3Dfx Voodoo Graphics"
|
||||
msgstr "3Dfx Voodoo Graphics"
|
||||
@@ -2053,34 +2053,34 @@ msgid "High performance impact"
|
||||
msgstr "Hoge prestatie-impact"
|
||||
|
||||
msgid "[Generic] RAM Disk (max. speed)"
|
||||
msgstr "[Generic] RAM-schijf (max. snelheid)"
|
||||
msgstr "[Generiek] RAM-schijf (max. snelheid)"
|
||||
|
||||
msgid "[Generic] 1989 (3500 RPM)"
|
||||
msgstr ""
|
||||
msgstr "[Generiek] 1989 (3500 RPM)"
|
||||
|
||||
msgid "[Generic] 1992 (3600 RPM)"
|
||||
msgstr ""
|
||||
msgstr "[Generiek] 1992 (3600 RPM)"
|
||||
|
||||
msgid "[Generic] 1994 (4500 RPM)"
|
||||
msgstr ""
|
||||
msgstr "[Generiek] 1994 (4500 RPM)"
|
||||
|
||||
msgid "[Generic] 1996 (5400 RPM)"
|
||||
msgstr ""
|
||||
msgstr "[Generiek] 1996 (5400 RPM)"
|
||||
|
||||
msgid "[Generic] 1997 (5400 RPM)"
|
||||
msgstr ""
|
||||
msgstr "[Generiek] 1997 (5400 RPM)"
|
||||
|
||||
msgid "[Generic] 1998 (5400 RPM)"
|
||||
msgstr ""
|
||||
msgstr "[Generiek] 1998 (5400 RPM)"
|
||||
|
||||
msgid "[Generic] 2000 (7200 RPM)"
|
||||
msgstr ""
|
||||
msgstr "[Generiek] 2000 (7200 RPM)"
|
||||
|
||||
msgid "IBM 8514/A clone (ISA)"
|
||||
msgstr "IBM 8514/A-kloon (ISA)"
|
||||
|
||||
msgid "Vendor"
|
||||
msgstr "Verkoper"
|
||||
msgstr "Leverancier"
|
||||
|
||||
msgid "Generic PC/XT Memory Expansion"
|
||||
msgstr "Generieke PC/XT geheugenuitbreiding"
|
||||
@@ -2095,64 +2095,64 @@ msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for t
|
||||
msgstr "TrueType lettertypen in de map \"roms/printer/fonts\" zijn nodig voor de emulatie van de generieke ESC/P dot-matrix-printer."
|
||||
|
||||
msgid "Inhibit multimedia keys"
|
||||
msgstr ""
|
||||
msgstr "Multimedia-toetsen blokkeren"
|
||||
|
||||
msgid "Ask for confirmation before saving settings"
|
||||
msgstr ""
|
||||
msgstr "Vraag om bevestiging voor het opslaan van instellingen"
|
||||
|
||||
msgid "Ask for confirmation before hard resetting"
|
||||
msgstr ""
|
||||
msgstr "Vraag om bevestiging voor een harde reset"
|
||||
|
||||
msgid "Ask for confirmation before quitting"
|
||||
msgstr ""
|
||||
msgstr "Vraag om bevestiging voor afsluiten"
|
||||
|
||||
msgid "Display hotkey message when entering full-screen mode"
|
||||
msgstr ""
|
||||
msgstr "Toon een sneltoetsmelding bij het openen van de volledigschermmodus"
|
||||
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
msgstr "Opties"
|
||||
|
||||
msgid "Model"
|
||||
msgstr ""
|
||||
msgstr "Model"
|
||||
|
||||
msgid "Model:"
|
||||
msgstr ""
|
||||
msgstr "Model:"
|
||||
|
||||
msgid "Failed to initialize Vulkan renderer."
|
||||
msgstr ""
|
||||
msgstr "Initialisatie van de Vulkan-renderer is mislukt."
|
||||
|
||||
msgid "GLSL Error"
|
||||
msgstr ""
|
||||
msgstr "GLSL-fout"
|
||||
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr ""
|
||||
msgstr "Kon de shader niet laden: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr ""
|
||||
msgstr "OpenGL versie 3.0 of hoger is vereist. Huidige GLSL-versie is %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr ""
|
||||
msgstr "Kon de textuur niet laden: %1"
|
||||
|
||||
msgid "Could not compile shader:\n\n%1"
|
||||
msgstr ""
|
||||
msgstr "Kon de shader niet compileren:\n\n%1"
|
||||
|
||||
msgid "Program not linked:\n\n%1"
|
||||
msgstr ""
|
||||
msgstr "Programma niet gelinkt:\n\n%1"
|
||||
|
||||
msgid "Shader Manager"
|
||||
msgstr ""
|
||||
msgstr "Shaderbeheer"
|
||||
|
||||
msgid "Shader Configuration"
|
||||
msgstr ""
|
||||
msgstr "Shaderconfiguratie"
|
||||
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
msgstr "Toevoegen"
|
||||
|
||||
msgid "Move up"
|
||||
msgstr ""
|
||||
msgstr "Omhoog verplaatsen"
|
||||
|
||||
msgid "Move down"
|
||||
msgstr ""
|
||||
msgstr "Omlaag verplaatsen"
|
||||
|
||||
msgid "Could not load file %1"
|
||||
msgstr ""
|
||||
msgstr "Kon bestand %1 niet laden"
|
||||
|
||||
@@ -1618,7 +1618,7 @@ msgid "CODEC"
|
||||
msgstr "Кодек"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Поднимать прерывание кодека при настройке кодека (необходимо некоторым драйверам)."
|
||||
msgstr "Поднимать прерывание кодека при настройке кодека (необходимо некоторым драйверам)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Адрес SB"
|
||||
@@ -1885,7 +1885,7 @@ msgid "Color (generic)"
|
||||
msgstr "Цветной (стандартный)"
|
||||
|
||||
msgid "Green Monochrome"
|
||||
msgstr "Зеленый монохромный"
|
||||
msgstr "Зелёный монохромный"
|
||||
|
||||
msgid "Amber Monochrome"
|
||||
msgstr "Янтарный монохромный"
|
||||
@@ -2059,22 +2059,22 @@ msgid "[Generic] 1989 (3500 RPM)"
|
||||
msgstr "[Стандартный] 1989 (3500 RPM)"
|
||||
|
||||
msgid "[Generic] 1992 (3600 RPM)"
|
||||
msgstr "[Стандартный] 1989 (3500 RPM)"
|
||||
msgstr "[Стандартный] 1992 (3600 RPM)"
|
||||
|
||||
msgid "[Generic] 1994 (4500 RPM)"
|
||||
msgstr "[Стандартный] 1989 (3500 RPM)"
|
||||
msgstr "[Стандартный] 1994 (4500 RPM)"
|
||||
|
||||
msgid "[Generic] 1996 (5400 RPM)"
|
||||
msgstr "[Стандартный] 1989 (3500 RPM)"
|
||||
msgstr "[Стандартный] 1996 (5400 RPM)"
|
||||
|
||||
msgid "[Generic] 1997 (5400 RPM)"
|
||||
msgstr "[Стандартный] 1989 (3500 RPM)"
|
||||
msgstr "[Стандартный] 1997 (5400 RPM)"
|
||||
|
||||
msgid "[Generic] 1998 (5400 RPM)"
|
||||
msgstr "[Стандартный] 1989 (3500 RPM)"
|
||||
msgstr "[Стандартный] 1998 (5400 RPM)"
|
||||
|
||||
msgid "[Generic] 2000 (7200 RPM)"
|
||||
msgstr "[Стандартный] 1989 (3500 RPM)"
|
||||
msgstr "[Стандартный] 2000 (7200 RPM)"
|
||||
|
||||
msgid "IBM 8514/A clone (ISA)"
|
||||
msgstr "Клон IBM 8514/A (ISA)"
|
||||
@@ -2162,3 +2162,45 @@ msgstr "Вниз"
|
||||
|
||||
msgid "Could not load file %1"
|
||||
msgstr "Не удалось загрузить файл %1"
|
||||
|
||||
msgid "Key Bindings:"
|
||||
msgstr "Привязки клавиш:"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Действие"
|
||||
|
||||
msgid "Keybind"
|
||||
msgstr "Привязка клавиш"
|
||||
|
||||
msgid "Clear binding"
|
||||
msgstr "Очистить привязку"
|
||||
|
||||
msgid "Bind"
|
||||
msgstr "Привязка"
|
||||
|
||||
msgid "Bind Key"
|
||||
msgstr "Привязать клавишу"
|
||||
|
||||
msgid "Enter key combo:"
|
||||
msgstr "Введите комбинацию клавиш:"
|
||||
|
||||
msgid "Send Control+Alt+Del"
|
||||
msgstr "Отправить Control+Alt+Del"
|
||||
|
||||
msgid "Send Control+Alt+Escape"
|
||||
msgstr "Отправить Control+Alt+Escape"
|
||||
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Переключить на полноэкранный режим"
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Скриншот"
|
||||
|
||||
msgid "Release mouse pointer"
|
||||
msgstr "Отпустить указатель мыши"
|
||||
|
||||
msgid "Toggle pause"
|
||||
msgstr "Переключить паузу"
|
||||
|
||||
msgid "Toggle mute"
|
||||
msgstr "Переключить беззвучный режим"
|
||||
@@ -8,6 +8,8 @@ getIndicatorIcon(IconIndicator indicator)
|
||||
switch (indicator) {
|
||||
case Active:
|
||||
return QIcon(":/settings/qt/icons/active.ico");
|
||||
case WriteActive:
|
||||
return QIcon(":/settings/qt/icons/write_active.ico");
|
||||
case Disabled:
|
||||
return QIcon(":/settings/qt/icons/disabled.ico");
|
||||
default:
|
||||
@@ -24,9 +26,13 @@ getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode,
|
||||
return iconPixmap;
|
||||
|
||||
auto painter = QPainter(&iconPixmap);
|
||||
auto indicatorPixmap = getIndicatorIcon(indicator).pixmap(size);
|
||||
auto indicatorPixmap = getIndicatorIcon(indicator == ReadWriteActive ? Active : indicator).pixmap(size);
|
||||
|
||||
painter.drawPixmap(0, 0, indicatorPixmap);
|
||||
if (indicator == ReadWriteActive) {
|
||||
auto writeIndicatorPixmap = getIndicatorIcon(WriteActive).pixmap(size);
|
||||
painter.drawPixmap(0, 0, writeIndicatorPixmap);
|
||||
}
|
||||
painter.end();
|
||||
|
||||
return iconPixmap;
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
enum IconIndicator {
|
||||
None,
|
||||
Active,
|
||||
WriteActive,
|
||||
ReadWriteActive,
|
||||
Disabled,
|
||||
};
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ QKeySequence
|
||||
KeyBinder::BindKey(QWidget* widget, QString CurValue)
|
||||
{
|
||||
KeyBinder kb(widget);
|
||||
kb.setWindowTitle("Bind Key");
|
||||
kb.setWindowTitle(tr("Bind Key"));
|
||||
kb.setFixedSize(kb.minimumSizeHint());
|
||||
kb.findChild<QKeySequenceEdit*>()->setKeySequence(QKeySequence::fromString(CurValue));
|
||||
kb.setEnabled(true);
|
||||
|
||||
@@ -68,6 +68,8 @@ namespace {
|
||||
struct PixmapSetActive {
|
||||
QPixmap normal;
|
||||
QPixmap active;
|
||||
QPixmap write_active;
|
||||
QPixmap read_write_active;
|
||||
void load(const QIcon &icon);
|
||||
};
|
||||
struct PixmapSetDisabled {
|
||||
@@ -85,6 +87,10 @@ struct PixmapSetEmptyActive {
|
||||
QPixmap active;
|
||||
QPixmap empty;
|
||||
QPixmap empty_active;
|
||||
QPixmap write_active;
|
||||
QPixmap read_write_active;
|
||||
QPixmap empty_write_active;
|
||||
QPixmap empty_read_write_active;
|
||||
void load(const QIcon &icon);
|
||||
};
|
||||
struct Pixmaps {
|
||||
@@ -105,6 +111,7 @@ struct StateActive {
|
||||
std::unique_ptr<QLabel> label;
|
||||
PixmapSetActive *pixmaps = nullptr;
|
||||
bool active = false;
|
||||
bool write_active = false;
|
||||
|
||||
void setActive(bool b)
|
||||
{
|
||||
@@ -115,11 +122,23 @@ struct StateActive {
|
||||
refresh();
|
||||
}
|
||||
|
||||
void setWriteActive(bool b)
|
||||
{
|
||||
if (!label || b == write_active)
|
||||
return;
|
||||
|
||||
write_active = b;
|
||||
refresh();
|
||||
}
|
||||
|
||||
void refresh()
|
||||
{
|
||||
if (!label)
|
||||
return;
|
||||
label->setPixmap(active ? pixmaps->active : pixmaps->normal);
|
||||
if (active && write_active)
|
||||
label->setPixmap(pixmaps->read_write_active);
|
||||
else
|
||||
label->setPixmap(write_active ? pixmaps->write_active : (active ? pixmaps->active : pixmaps->normal));
|
||||
}
|
||||
};
|
||||
struct StateEmpty {
|
||||
@@ -145,9 +164,10 @@ struct StateEmpty {
|
||||
};
|
||||
struct StateEmptyActive {
|
||||
std::unique_ptr<QLabel> label;
|
||||
PixmapSetEmptyActive *pixmaps = nullptr;
|
||||
bool empty = false;
|
||||
bool active = false;
|
||||
PixmapSetEmptyActive *pixmaps = nullptr;
|
||||
bool empty = false;
|
||||
bool active = false;
|
||||
bool write_active = false;
|
||||
|
||||
void setActive(bool b)
|
||||
{
|
||||
@@ -157,6 +177,14 @@ struct StateEmptyActive {
|
||||
active = b;
|
||||
refresh();
|
||||
}
|
||||
void setWriteActive(bool b)
|
||||
{
|
||||
if (!label || b == write_active)
|
||||
return;
|
||||
|
||||
write_active = b;
|
||||
refresh();
|
||||
}
|
||||
void setEmpty(bool b)
|
||||
{
|
||||
if (!label || b == empty)
|
||||
@@ -170,9 +198,15 @@ struct StateEmptyActive {
|
||||
if (!label)
|
||||
return;
|
||||
if (empty) {
|
||||
label->setPixmap(active ? pixmaps->empty_active : pixmaps->empty);
|
||||
if (active && write_active)
|
||||
label->setPixmap(pixmaps->empty_read_write_active);
|
||||
else
|
||||
label->setPixmap(write_active ? pixmaps->empty_write_active : (active ? pixmaps->empty_active : pixmaps->empty));
|
||||
} else {
|
||||
label->setPixmap(active ? pixmaps->active : pixmaps->normal);
|
||||
if (active && write_active)
|
||||
label->setPixmap(pixmaps->read_write_active);
|
||||
else
|
||||
label->setPixmap(write_active ? pixmaps->write_active : (active ? pixmaps->active : pixmaps->normal));
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -191,6 +225,9 @@ PixmapSetActive::load(const QIcon &icon)
|
||||
{
|
||||
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
|
||||
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
|
||||
|
||||
write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteActive);
|
||||
read_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, ReadWriteActive);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -203,10 +240,14 @@ PixmapSetDisabled::load(const QIcon &icon)
|
||||
void
|
||||
PixmapSetEmptyActive::load(const QIcon &icon)
|
||||
{
|
||||
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
|
||||
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
|
||||
empty = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, None);
|
||||
empty_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, Active);
|
||||
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
|
||||
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
|
||||
write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteActive);
|
||||
read_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, ReadWriteActive);
|
||||
empty = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, None);
|
||||
empty_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, Active);
|
||||
empty_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, WriteActive);
|
||||
empty_read_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Disabled, ReadWriteActive);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -217,10 +258,13 @@ struct MachineStatus::States {
|
||||
{
|
||||
pixmaps.cartridge.load(QIcon(":/settings/qt/icons/cartridge.ico"));
|
||||
pixmaps.cassette.load(QIcon(":/settings/qt/icons/cassette.ico"));
|
||||
pixmaps.floppy_disabled.normal = QIcon(":/settings/qt/icons/floppy_disabled.ico").pixmap(pixmap_size);
|
||||
pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.normal = QIcon(":/settings/qt/icons/floppy_disabled.ico").pixmap(pixmap_size);
|
||||
pixmaps.floppy_disabled.active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.read_write_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty_write_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_disabled.empty_read_write_active = pixmaps.floppy_disabled.normal;
|
||||
pixmaps.floppy_525.load(QIcon(":/settings/qt/icons/floppy_525.ico"));
|
||||
pixmaps.floppy_35.load(QIcon(":/settings/qt/icons/floppy_35.ico"));
|
||||
pixmaps.cdrom.load(QIcon(":/settings/qt/icons/cdrom.ico"));
|
||||
@@ -435,49 +479,79 @@ MachineStatus::refreshIcons()
|
||||
if (!update_icons)
|
||||
return;
|
||||
|
||||
for (size_t i = 0; i < FDD_NUM; ++i)
|
||||
for (size_t i = 0; i < FDD_NUM; ++i) {
|
||||
d->fdd[i].setActive(machine_status.fdd[i].active);
|
||||
d->fdd[i].setWriteActive(machine_status.fdd[i].write_active);
|
||||
}
|
||||
for (size_t i = 0; i < CDROM_NUM; ++i) {
|
||||
d->cdrom[i].setActive(machine_status.cdrom[i].active);
|
||||
if (machine_status.cdrom[i].active)
|
||||
d->cdrom[i].setWriteActive(machine_status.cdrom[i].write_active);
|
||||
if (machine_status.cdrom[i].active) {
|
||||
ui_sb_update_icon(SB_CDROM | i, 0);
|
||||
}
|
||||
if (machine_status.cdrom[i].write_active) {
|
||||
ui_sb_update_icon_write(SB_CDROM | i, 0);
|
||||
}
|
||||
}
|
||||
for (size_t i = 0; i < ZIP_NUM; i++) {
|
||||
d->zip[i].setActive(machine_status.zip[i].active);
|
||||
d->zip[i].setWriteActive(machine_status.zip[i].write_active);
|
||||
if (machine_status.zip[i].active)
|
||||
ui_sb_update_icon(SB_ZIP | i, 0);
|
||||
if (machine_status.zip[i].write_active)
|
||||
ui_sb_update_icon_write(SB_ZIP | i, 0);
|
||||
}
|
||||
for (size_t i = 0; i < MO_NUM; i++) {
|
||||
d->mo[i].setActive(machine_status.mo[i].active);
|
||||
d->mo[i].setWriteActive(machine_status.mo[i].write_active);
|
||||
if (machine_status.mo[i].active)
|
||||
ui_sb_update_icon(SB_MO | i, 0);
|
||||
if (machine_status.mo[i].write_active)
|
||||
ui_sb_update_icon_write(SB_MO | i, 0);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < HDD_BUS_USB; i++) {
|
||||
d->hdds[i].setActive(machine_status.hdd[i].active);
|
||||
d->hdds[i].setWriteActive(machine_status.hdd[i].write_active);
|
||||
if (machine_status.hdd[i].active)
|
||||
ui_sb_update_icon(SB_HDD | i, 0);
|
||||
if (machine_status.hdd[i].write_active)
|
||||
ui_sb_update_icon_write(SB_HDD | i, 0);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < NET_CARD_MAX; i++)
|
||||
for (size_t i = 0; i < NET_CARD_MAX; i++) {
|
||||
d->net[i].setActive(machine_status.net[i].active);
|
||||
d->net[i].setWriteActive(machine_status.net[i].write_active);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MachineStatus::clearActivity()
|
||||
{
|
||||
for (auto &fdd : d->fdd)
|
||||
for (auto &fdd : d->fdd) {
|
||||
fdd.setActive(false);
|
||||
for (auto &cdrom : d->cdrom)
|
||||
fdd.setWriteActive(false);
|
||||
}
|
||||
for (auto &cdrom : d->cdrom) {
|
||||
cdrom.setActive(false);
|
||||
for (auto &zip : d->zip)
|
||||
cdrom.setWriteActive(false);
|
||||
}
|
||||
for (auto &zip : d->zip) {
|
||||
zip.setActive(false);
|
||||
for (auto &mo : d->mo)
|
||||
zip.setWriteActive(false);
|
||||
}
|
||||
for (auto &mo : d->mo) {
|
||||
mo.setActive(false);
|
||||
for (auto &hdd : d->hdds)
|
||||
mo.setWriteActive(false);
|
||||
}
|
||||
for (auto &hdd : d->hdds) {
|
||||
hdd.setActive(false);
|
||||
for (auto &net : d->net)
|
||||
hdd.setWriteActive(false);
|
||||
}
|
||||
for (auto &net : d->net) {
|
||||
net.setActive(false);
|
||||
net.setWriteActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -562,6 +636,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->fdd[i].label = std::make_unique<ClickableLabel>();
|
||||
d->fdd[i].setEmpty(QString(floppyfns[i]).isEmpty());
|
||||
d->fdd[i].setActive(false);
|
||||
d->fdd[i].setWriteActive(false);
|
||||
d->fdd[i].refresh();
|
||||
connect((ClickableLabel *) d->fdd[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
MediaMenu::ptr->floppyMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->floppyMenus[i]->sizeHint().height()));
|
||||
@@ -578,6 +653,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->cdrom[i].label = std::make_unique<ClickableLabel>();
|
||||
d->cdrom[i].setEmpty(QString(cdrom[i].image_path).isEmpty());
|
||||
d->cdrom[i].setActive(false);
|
||||
d->cdrom[i].setWriteActive(false);
|
||||
d->cdrom[i].refresh();
|
||||
connect((ClickableLabel *) d->cdrom[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
MediaMenu::ptr->cdromMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->cdromMenus[i]->sizeHint().height()));
|
||||
@@ -594,6 +670,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->zip[i].label = std::make_unique<ClickableLabel>();
|
||||
d->zip[i].setEmpty(QString(zip_drives[i].image_path).isEmpty());
|
||||
d->zip[i].setActive(false);
|
||||
d->zip[i].setWriteActive(false);
|
||||
d->zip[i].refresh();
|
||||
connect((ClickableLabel *) d->zip[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
MediaMenu::ptr->zipMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->zipMenus[i]->sizeHint().height()));
|
||||
@@ -610,6 +687,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->mo[i].label = std::make_unique<ClickableLabel>();
|
||||
d->mo[i].setEmpty(QString(mo_drives[i].image_path).isEmpty());
|
||||
d->mo[i].setActive(false);
|
||||
d->mo[i].setWriteActive(false);
|
||||
d->mo[i].refresh();
|
||||
connect((ClickableLabel *) d->mo[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
MediaMenu::ptr->moMenus[i]->popup(pos - QPoint(0, MediaMenu::ptr->moMenus[i]->sizeHint().height()));
|
||||
@@ -626,6 +704,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
d->net[i].label = std::make_unique<ClickableLabel>();
|
||||
d->net[i].setEmpty(!network_is_connected(i));
|
||||
d->net[i].setActive(false);
|
||||
d->net[i].setWriteActive(false);
|
||||
d->net[i].refresh();
|
||||
d->net[i].label->setToolTip(MediaMenu::ptr->netMenus[i]->title());
|
||||
connect((ClickableLabel *) d->net[i].label.get(), &ClickableLabel::clicked, [i](QPoint pos) {
|
||||
@@ -638,13 +717,14 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if ((has_mfm || (hdc_name.left(5) == QStringLiteral("st506"))) && (c_mfm > 0)) {
|
||||
d->hdds[HDD_BUS_MFM].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_MFM].setActive(false);
|
||||
d->hdds[HDD_BUS_MFM].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_MFM].refresh();
|
||||
d->hdds[HDD_BUS_MFM].label->setToolTip(tr("Hard disk (%1)").arg("MFM/RLL"));
|
||||
auto tooltip = d->hdds[HDD_BUS_MFM].label->toolTip();
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_MFM && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 MB)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull)));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_MFM].label->setToolTip(tooltip);
|
||||
@@ -653,13 +733,14 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if ((has_esdi || (hdc_name.left(4) == QStringLiteral("esdi"))) && (c_esdi > 0)) {
|
||||
d->hdds[HDD_BUS_ESDI].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_ESDI].setActive(false);
|
||||
d->hdds[HDD_BUS_ESDI].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_ESDI].refresh();
|
||||
d->hdds[HDD_BUS_ESDI].label->setToolTip(tr("Hard disk (%1)").arg("ESDI"));
|
||||
auto tooltip = d->hdds[HDD_BUS_ESDI].label->toolTip();
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_ESDI && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 MB)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull)));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_ESDI].label->setToolTip(tooltip);
|
||||
@@ -668,13 +749,14 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if ((has_xta || (hdc_name.left(3) == QStringLiteral("xta"))) && (c_xta > 0)) {
|
||||
d->hdds[HDD_BUS_XTA].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_XTA].setActive(false);
|
||||
d->hdds[HDD_BUS_XTA].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_XTA].refresh();
|
||||
d->hdds[HDD_BUS_XTA].label->setToolTip(tr("Hard disk (%1)").arg("XTA"));
|
||||
auto tooltip = d->hdds[HDD_BUS_XTA].label->toolTip();
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_XTA && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 MB)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull)));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_XTA].label->setToolTip(tooltip);
|
||||
@@ -686,13 +768,14 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if (c_ide > 0) {
|
||||
d->hdds[HDD_BUS_IDE].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_IDE].setActive(false);
|
||||
d->hdds[HDD_BUS_IDE].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_IDE].refresh();
|
||||
d->hdds[HDD_BUS_IDE].label->setToolTip(tr("Hard disk (%1)").arg("IDE"));
|
||||
auto tooltip = d->hdds[HDD_BUS_IDE].label->toolTip();
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_IDE && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 MB)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull)));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_IDE].label->setToolTip(tooltip);
|
||||
@@ -701,13 +784,14 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
if (c_atapi > 0) {
|
||||
d->hdds[HDD_BUS_ATAPI].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_ATAPI].setActive(false);
|
||||
d->hdds[HDD_BUS_ATAPI].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_ATAPI].refresh();
|
||||
d->hdds[HDD_BUS_ATAPI].label->setToolTip(tr("Hard disk (%1)").arg("ATAPI"));
|
||||
auto tooltip = d->hdds[HDD_BUS_ATAPI].label->toolTip();
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_ATAPI && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 MB)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull)));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_ATAPI].label->setToolTip(tooltip);
|
||||
@@ -720,13 +804,14 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
(c_scsi > 0)) {
|
||||
d->hdds[HDD_BUS_SCSI].label = std::make_unique<QLabel>();
|
||||
d->hdds[HDD_BUS_SCSI].setActive(false);
|
||||
d->hdds[HDD_BUS_SCSI].setWriteActive(false);
|
||||
d->hdds[HDD_BUS_SCSI].refresh();
|
||||
d->hdds[HDD_BUS_SCSI].label->setToolTip(tr("Hard disk (%1)").arg("SCSI"));
|
||||
auto tooltip = d->hdds[HDD_BUS_SCSI].label->toolTip();
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_SCSI && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 MB)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 4), QString::asprintf("%02d", hdd[i].channel & 15), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull)));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 4), QString::asprintf("%02d", hdd[i].channel & 15), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_SCSI].label->setToolTip(tooltip);
|
||||
|
||||
@@ -48,7 +48,6 @@ SettingsInput::SettingsInput(QWidget *parent)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
QStandardItemModel *model;
|
||||
QStringList horizontalHeader;
|
||||
QStringList verticalHeader;
|
||||
|
||||
@@ -80,15 +79,6 @@ SettingsInput::SettingsInput(QWidget *parent)
|
||||
|
||||
refreshInputList();
|
||||
|
||||
connect(ui->tableKeys, &QTableWidget::cellDoubleClicked,
|
||||
this, &SettingsInput::on_tableKeys_doubleClicked);
|
||||
|
||||
connect(ui->pushButtonBind, &QPushButton::clicked,
|
||||
this, &SettingsInput::on_pushButtonBind_Clicked);
|
||||
|
||||
connect(ui->pushButtonClearBind, &QPushButton::clicked,
|
||||
this, &SettingsInput::on_pushButtonClearBind_Clicked);
|
||||
|
||||
onCurrentMachineChanged(machine);
|
||||
}
|
||||
|
||||
@@ -195,7 +185,7 @@ SettingsInput::on_tableKeys_currentCellChanged(int currentRow, int currentColumn
|
||||
}
|
||||
|
||||
void
|
||||
SettingsInput::on_tableKeys_doubleClicked(int row, int col)
|
||||
SettingsInput::on_tableKeys_cellDoubleClicked(int row, int col)
|
||||
{
|
||||
// Edit bind
|
||||
QTableWidgetItem *cell = ui->tableKeys->item(row,1);
|
||||
@@ -234,17 +224,17 @@ SettingsInput::on_tableKeys_doubleClicked(int row, int col)
|
||||
}
|
||||
|
||||
void
|
||||
SettingsInput::on_pushButtonBind_Clicked()
|
||||
SettingsInput::on_pushButtonBind_clicked()
|
||||
{
|
||||
// Edit bind
|
||||
QTableWidgetItem *cell = ui->tableKeys->currentItem();
|
||||
if (!cell) return;
|
||||
|
||||
on_tableKeys_doubleClicked(cell->row(), cell->column());
|
||||
on_tableKeys_cellDoubleClicked(cell->row(), cell->column());
|
||||
}
|
||||
|
||||
void
|
||||
SettingsInput::on_pushButtonClearBind_Clicked()
|
||||
SettingsInput::on_pushButtonClearBind_clicked()
|
||||
{
|
||||
// Wipe bind
|
||||
QTableWidgetItem *cell = ui->tableKeys->item(ui->tableKeys->currentRow(), 1);
|
||||
|
||||
@@ -33,10 +33,10 @@ private slots:
|
||||
void on_pushButtonJoystick2_clicked();
|
||||
void on_pushButtonJoystick3_clicked();
|
||||
void on_pushButtonJoystick4_clicked();
|
||||
void on_tableKeys_doubleClicked(int row, int col);
|
||||
void on_tableKeys_cellDoubleClicked(int row, int col);
|
||||
void on_tableKeys_currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
|
||||
void on_pushButtonBind_Clicked();
|
||||
void on_pushButtonClearBind_Clicked();
|
||||
void on_pushButtonBind_clicked();
|
||||
void on_pushButtonClearBind_clicked();
|
||||
|
||||
private:
|
||||
Ui::SettingsInput *ui;
|
||||
|
||||
@@ -141,7 +141,14 @@ ui_msgbox_header(int flags, void *header, void *message)
|
||||
|
||||
// any error in early init
|
||||
if (main_window == nullptr) {
|
||||
QMessageBox msgBox(QMessageBox::Icon::Critical, hdr, msg);
|
||||
auto msgicon = QMessageBox::Icon::Critical;
|
||||
if (flags & MBX_INFO)
|
||||
msgicon = QMessageBox::Icon::Information;
|
||||
else if (flags & MBX_QUESTION)
|
||||
msgicon = QMessageBox::Icon::Question;
|
||||
else if (flags & MBX_WARNING)
|
||||
msgicon = QMessageBox::Icon::Warning;
|
||||
QMessageBox msgBox(msgicon, hdr, msg);
|
||||
msgBox.exec();
|
||||
} else {
|
||||
// else scope it to main_window
|
||||
@@ -307,4 +314,41 @@ ui_sb_update_icon(int tag, int active)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
ui_sb_update_icon_write(int tag, int write)
|
||||
{
|
||||
const auto temp = static_cast<unsigned int>(tag);
|
||||
const int category = static_cast<int>(temp & 0xfffffff0);
|
||||
const int item = tag & 0xf;
|
||||
|
||||
switch (category) {
|
||||
default:
|
||||
case SB_CASSETTE:
|
||||
case SB_CARTRIDGE:
|
||||
break;
|
||||
case SB_FLOPPY:
|
||||
machine_status.fdd[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_CDROM:
|
||||
machine_status.cdrom[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_ZIP:
|
||||
machine_status.zip[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_MO:
|
||||
machine_status.mo[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_HDD:
|
||||
machine_status.hdd[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_NETWORK:
|
||||
machine_status.net[item].write_active = write > 0 ? true : false;
|
||||
break;
|
||||
case SB_SOUND:
|
||||
case SB_TEXT:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
<file>qt/icons/zip.ico</file>
|
||||
<file>qt/icons/zip_disabled.ico</file>
|
||||
<file>qt/icons/active.ico</file>
|
||||
<file>qt/icons/write_active.ico</file>
|
||||
<file>qt/icons/disabled.ico</file>
|
||||
<file>qt/icons/86Box-gray.ico</file>
|
||||
<file>qt/icons/86Box-green.ico</file>
|
||||
|
||||
@@ -614,6 +614,7 @@ scsi_disk_cmd_error(scsi_disk_t *dev)
|
||||
dev->callback = 50.0 * SCSI_TIME;
|
||||
scsi_disk_set_callback(dev);
|
||||
ui_sb_update_icon(SB_HDD | dev->drv->bus_type, 0);
|
||||
ui_sb_update_icon_write(SB_HDD | dev->drv->bus_type, 0);
|
||||
scsi_disk_log(dev->log, "ERROR: %02X/%02X/%02X\n", scsi_disk_sense_key,
|
||||
scsi_disk_asc, scsi_disk_ascq);
|
||||
}
|
||||
@@ -1208,7 +1209,7 @@ scsi_disk_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
|
||||
scsi_disk_data_command_finish(dev, dev->packet_len, 512, dev->packet_len, 1);
|
||||
|
||||
ui_sb_update_icon(SB_HDD | dev->drv->bus_type, dev->packet_status != PHASE_COMPLETE);
|
||||
ui_sb_update_icon_write(SB_HDD | dev->drv->bus_type, dev->packet_status != PHASE_COMPLETE);
|
||||
} else {
|
||||
scsi_disk_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
scsi_disk_log(dev->log, "All done - callback set\n");
|
||||
@@ -1243,7 +1244,7 @@ scsi_disk_command(scsi_common_t *sc, const uint8_t *cdb)
|
||||
|
||||
scsi_disk_data_command_finish(dev, 512, 512, alloc_length, 1);
|
||||
|
||||
ui_sb_update_icon(SB_HDD | dev->drv->bus_type,
|
||||
ui_sb_update_icon_write(SB_HDD | dev->drv->bus_type,
|
||||
dev->packet_status != PHASE_COMPLETE);
|
||||
} else {
|
||||
scsi_disk_set_phase(dev, SCSI_PHASE_STATUS);
|
||||
|
||||
@@ -471,6 +471,12 @@ ui_sb_update_icon(UNUSED(int tag), UNUSED(int active))
|
||||
/* No-op. */
|
||||
}
|
||||
|
||||
void
|
||||
ui_sb_update_icon_write(UNUSED(int tag), UNUSED(int active))
|
||||
{
|
||||
/* No-op. */
|
||||
}
|
||||
|
||||
void
|
||||
plat_delay_ms(uint32_t count)
|
||||
{
|
||||
|
||||
@@ -124,7 +124,7 @@ CLAMP(int16_t in, int16_t min, int16_t max)
|
||||
|
||||
#define MIX(mixmode, dest_dat, src_dat) \
|
||||
{ \
|
||||
switch ((mixmode) ? (dev->accel.frgd_mix & 0x1f) : (dev->accel.bkgd_mix & 0x1f)) { \
|
||||
switch ((mixmode) ? dev->accel.frgd_mix : dev->accel.bkgd_mix) { \
|
||||
case 0x00: \
|
||||
dest_dat = ~dest_dat; \
|
||||
break; \
|
||||
@@ -268,8 +268,8 @@ ibm8514_accel_out_pixtrans(svga_t *svga, UNUSED(uint16_t port), uint32_t val, in
|
||||
uint32_t monoxfer = 0xffffffff;
|
||||
int pixcnt = 0;
|
||||
int pixcntl = (dev->accel.multifunc[0x0a] >> 6) & 3;
|
||||
int frgd_mix = (dev->accel.frgd_mix >> 5) & 3;
|
||||
int bkgd_mix = (dev->accel.bkgd_mix >> 5) & 3;
|
||||
int frgd_mix = dev->accel.frgd_sel;
|
||||
int bkgd_mix = dev->accel.bkgd_sel;
|
||||
int cmd = dev->accel.cmd >> 13;
|
||||
|
||||
if (!dev->accel.cmd_back) {
|
||||
@@ -351,13 +351,12 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
case 0x6e8:
|
||||
/*In preparation to switch from VGA to 8514/A mode*/
|
||||
WRITE8(port, dev->hdisped, val);
|
||||
dev->hdisp = (dev->hdisped + 1) << 3;
|
||||
ibm8514_log("[%04X:%08X]: IBM 8514/A: (0x%04x): hdisp=0x%02x.\n", CS, cpu_state.pc, port, val);
|
||||
svga_recalctimings(svga);
|
||||
break;
|
||||
|
||||
case 0x6e9:
|
||||
WRITE8(port, dev->htotal, val);
|
||||
WRITE8(port - 1, dev->htotal, val);
|
||||
ibm8514_log("IBM 8514/A compatible: (0x%04x): htotal=0x%02x.\n", port, val);
|
||||
svga_recalctimings(svga);
|
||||
break;
|
||||
@@ -379,10 +378,6 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
if (len == 2) {
|
||||
dev->v_total_reg = val;
|
||||
dev->v_total_reg &= 0x1fff;
|
||||
dev->v_total = dev->v_total_reg + 1;
|
||||
if (dev->interlace)
|
||||
dev->v_total >>= 1;
|
||||
|
||||
ibm8514_log("IBM 8514/A compatible: (0x%04x): vtotal=0x%02x.\n", port, val);
|
||||
svga_recalctimings(svga);
|
||||
} else {
|
||||
@@ -392,12 +387,8 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
case 0x12e9:
|
||||
/*In preparation to switch from VGA to 8514/A mode*/
|
||||
if (len == 1) {
|
||||
WRITE8(port, dev->v_total_reg, val);
|
||||
WRITE8(port, dev->v_total_reg, val >> 8);
|
||||
dev->v_total_reg &= 0x1fff;
|
||||
dev->v_total = dev->v_total_reg + 1;
|
||||
if (dev->interlace)
|
||||
dev->v_total >>= 1;
|
||||
|
||||
ibm8514_log("IBM 8514/A compatible: (0x%04x): vtotal=0x%02x.\n", port, val);
|
||||
svga_recalctimings(svga);
|
||||
}
|
||||
@@ -408,7 +399,6 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
if (len == 2) {
|
||||
dev->v_disp = val;
|
||||
dev->v_disp &= 0x1fff;
|
||||
dev->vdisp = (dev->v_disp + 1) >> 1;
|
||||
ibm8514_log("IBM 8514/A: V_DISP write 16E8 = %d\n", dev->v_disp);
|
||||
ibm8514_log("IBM 8514/A: (0x%04x): vdisp=0x%02x.\n", port, val);
|
||||
svga_recalctimings(svga);
|
||||
@@ -419,9 +409,8 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
case 0x16e9:
|
||||
/*In preparation to switch from VGA to 8514/A mode*/
|
||||
if (len == 1) {
|
||||
WRITE8(port, dev->v_disp, val);
|
||||
WRITE8(port, dev->v_disp, val >> 8);
|
||||
dev->v_disp &= 0x1fff;
|
||||
dev->vdisp = (dev->v_disp + 1) >> 1;
|
||||
ibm8514_log("IBM 8514/A: V_DISP write 16E8 = %d\n", dev->v_disp);
|
||||
ibm8514_log("IBM 8514/A: (0x%04x): vdisp=0x%02x.\n", port, val);
|
||||
svga_recalctimings(svga);
|
||||
@@ -433,10 +422,6 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
if (len == 2) {
|
||||
dev->v_sync_start = val;
|
||||
dev->v_sync_start &= 0x1fff;
|
||||
dev->v_syncstart = dev->v_sync_start + 1;
|
||||
if (dev->interlace)
|
||||
dev->v_syncstart >>= 1;
|
||||
|
||||
ibm8514_log("IBM 8514/A compatible: V_SYNCSTART write 1AE8 = %d\n", dev->v_syncstart);
|
||||
ibm8514_log("IBM 8514/A compatible: (0x%04x): vsyncstart=0x%02x.\n", port, val);
|
||||
svga_recalctimings(svga);
|
||||
@@ -447,7 +432,7 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
case 0x1ae9:
|
||||
/*In preparation to switch from VGA to 8514/A mode*/
|
||||
if (len == 1) {
|
||||
WRITE8(port, dev->v_sync_start, val);
|
||||
WRITE8(port, dev->v_sync_start, val >> 8);
|
||||
dev->v_sync_start &= 0x1fff;
|
||||
dev->v_syncstart = dev->v_sync_start + 1;
|
||||
if (dev->interlace)
|
||||
@@ -639,11 +624,15 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
break;
|
||||
|
||||
case 0xb6e8:
|
||||
dev->accel.bkgd_mix = val & 0xff;
|
||||
dev->accel.bkgd_mix = val & 0x1f;
|
||||
dev->accel.bkgd_sel = (val >> 5) & 3;
|
||||
ibm8514_log("Background Mix reg=%02x.\n", val);
|
||||
break;
|
||||
|
||||
case 0xbae8:
|
||||
dev->accel.frgd_mix = val & 0xff;
|
||||
dev->accel.frgd_mix = val & 0x1f;
|
||||
dev->accel.frgd_sel = (val >> 5) & 3;
|
||||
ibm8514_log("Foreground Mix reg=%02x.\n", val);
|
||||
break;
|
||||
|
||||
case 0xbee8:
|
||||
@@ -667,7 +656,6 @@ ibm8514_accel_out_fifo(svga_t *svga, uint16_t port, uint32_t val, int len)
|
||||
|
||||
if ((dev->accel.multifunc_cntl >> 12) == 4)
|
||||
dev->accel.clip_right = dev->accel.multifunc[4] & 0x7ff;
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -821,8 +809,22 @@ ibm8514_accel_in_fifo(svga_t *svga, uint16_t port, int len)
|
||||
if (dev->fifo_idx > 0)
|
||||
dev->fifo_idx--;
|
||||
|
||||
if (dev->force_busy)
|
||||
if (dev->force_busy) {
|
||||
temp |= 0x0200; /*Hardware busy*/
|
||||
switch (dev->accel.cmd >> 13) {
|
||||
case 2:
|
||||
case 3:
|
||||
case 4:
|
||||
case 6:
|
||||
if (dev->accel.sy < 0)
|
||||
dev->force_busy = 0;
|
||||
break;
|
||||
default:
|
||||
if (!dev->accel.sy)
|
||||
dev->force_busy = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (dev->data_available) {
|
||||
temp |= 0x0100; /*Read Data available*/
|
||||
@@ -1066,8 +1068,8 @@ ibm8514_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat
|
||||
rd_mask_polygon &= 0xff;
|
||||
}
|
||||
|
||||
frgd_mix = (dev->accel.frgd_mix >> 5) & 3;
|
||||
bkgd_mix = (dev->accel.bkgd_mix >> 5) & 3;
|
||||
frgd_mix = dev->accel.frgd_sel;
|
||||
bkgd_mix = dev->accel.bkgd_sel;
|
||||
|
||||
if (cpu_input) {
|
||||
if ((dev->accel.cmd & 0x02) || (pixcntl == 2)) {
|
||||
@@ -1821,12 +1823,7 @@ ibm8514_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat
|
||||
dev->accel.sx = dev->accel.maj_axis_pcnt & 0x7ff;
|
||||
dev->accel.sy = dev->accel.multifunc[0] & 0x7ff;
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8))
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
else if (dev->bpp)
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
else
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
|
||||
if (cmd == 4)
|
||||
dev->accel.cmd |= 0x02;
|
||||
@@ -2030,12 +2027,7 @@ skip_vector_rect_write:
|
||||
break;
|
||||
}
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8))
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
else if (dev->bpp)
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
else
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
dev->accel.x_count = 0;
|
||||
@@ -2194,12 +2186,7 @@ skip_nibble_rect_write:
|
||||
else
|
||||
dev->accel.cy--;
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8))
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
else if (dev->bpp)
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
else
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
dev->accel.x_count = 0;
|
||||
@@ -2285,12 +2272,7 @@ skip_nibble_rect_write:
|
||||
else
|
||||
dev->accel.cy--;
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8))
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
else if (dev->bpp)
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
else
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
|
||||
@@ -2367,12 +2349,7 @@ skip_nibble_rect_write:
|
||||
else
|
||||
dev->accel.cy--;
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8))
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
else if (dev->bpp)
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
else
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
|
||||
@@ -2482,12 +2459,7 @@ skip_nibble_rect_write:
|
||||
else
|
||||
dev->accel.cy--;
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8))
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
else if (dev->bpp)
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
else
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
|
||||
@@ -2512,8 +2484,6 @@ skip_nibble_rect_write:
|
||||
switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) {
|
||||
case 0:
|
||||
src_dat = bkgd_color;
|
||||
if (!bkgd_mix && (dev->accel.cmd & 0x40) && ((dev->accel.frgd_mix & 0x1f) == 7) && ((dev->accel.bkgd_mix & 0x1f) == 3) && !dev->bpp && (bkgd_color == 0x00)) /*For some reason, the September 1992 Mach8/32 drivers for Win3.x don't set the background colors properly.*/
|
||||
src_dat = frgd_color;
|
||||
break;
|
||||
case 1:
|
||||
src_dat = frgd_color;
|
||||
@@ -2570,12 +2540,7 @@ skip_nibble_rect_write:
|
||||
else
|
||||
dev->accel.cy--;
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8))
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
else if (dev->bpp)
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
else
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
if (dev->accel.sy < 0) {
|
||||
@@ -2870,16 +2835,8 @@ skip_nibble_rect_write:
|
||||
dev->accel.sx = dev->accel.maj_axis_pcnt & 0x7ff;
|
||||
dev->accel.sy = dev->accel.multifunc[0] & 0x7ff;
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8)) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
} else if (dev->bpp) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.dy * dev->pitch);
|
||||
} else {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
}
|
||||
dev->accel.src = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.dy * dev->pitch);
|
||||
dev->accel.fill_state = 0;
|
||||
|
||||
if (ibm8514_cpu_src(svga)) {
|
||||
@@ -3051,16 +3008,8 @@ skip_nibble_bitblt_write:
|
||||
dev->accel.cy--;
|
||||
}
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8)) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
} else if (dev->bpp) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.dy * dev->pitch);
|
||||
} else {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
}
|
||||
dev->accel.src = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.dy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
dev->accel.x_count = 0;
|
||||
@@ -3156,16 +3105,8 @@ skip_nibble_bitblt_write:
|
||||
dev->accel.cy--;
|
||||
}
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8)) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
} else if (dev->bpp) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.dy * dev->pitch);
|
||||
} else {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
}
|
||||
dev->accel.src = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.dy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
|
||||
@@ -3252,16 +3193,9 @@ skip_nibble_bitblt_write:
|
||||
dev->accel.cy--;
|
||||
}
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8)) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
} else if (dev->bpp) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.dy * dev->pitch);
|
||||
} else {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
}
|
||||
dev->accel.src = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.dy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
|
||||
if (dev->accel.sy < 0) {
|
||||
@@ -3282,29 +3216,14 @@ skip_nibble_bitblt_write:
|
||||
cx = (int64_t) dev->accel.cx;
|
||||
dx = (int64_t) dev->accel.dx;
|
||||
|
||||
dev->accel.src = dev->accel.src_ge_offset + (dev->accel.cy * dev->accel.src_pitch);
|
||||
dev->accel.dest = dev->accel.dst_ge_offset + (dev->accel.dy * dev->accel.dst_pitch);
|
||||
|
||||
while (1) {
|
||||
if ((dx >= (((int64_t)clip_l) * 3)) &&
|
||||
(dx <= (((uint64_t)clip_r) * 3)) &&
|
||||
(dev->accel.dy >= (clip_t << 1)) &&
|
||||
(dev->accel.dy <= (clip_b << 1))) {
|
||||
switch ((mix_dat & mix_mask) ? frgd_mix : bkgd_mix) {
|
||||
case 0:
|
||||
src_dat = bkgd_color;
|
||||
break;
|
||||
case 1:
|
||||
src_dat = frgd_color;
|
||||
break;
|
||||
case 2:
|
||||
src_dat = 0;
|
||||
break;
|
||||
case 3:
|
||||
READ(dev->accel.src + cx, src_dat);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
READ(dev->accel.src + cx, src_dat);
|
||||
READ(dev->accel.dest + dx, dest_dat);
|
||||
old_dest_dat = dest_dat;
|
||||
@@ -3411,16 +3330,9 @@ skip_nibble_bitblt_write:
|
||||
dev->accel.cy--;
|
||||
}
|
||||
|
||||
if ((dev->accel_bpp == 24) || (dev->accel_bpp <= 8)) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
} else if (dev->bpp) {
|
||||
dev->accel.src = (dev->accel.ge_offset << 1) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 1) + (dev->accel.dy * dev->pitch);
|
||||
} else {
|
||||
dev->accel.src = (dev->accel.ge_offset << 2) + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = (dev->accel.ge_offset << 2) + (dev->accel.dy * dev->pitch);
|
||||
}
|
||||
dev->accel.src = dev->accel.ge_offset + (dev->accel.cy * dev->pitch);
|
||||
dev->accel.dest = dev->accel.ge_offset + (dev->accel.dy * dev->pitch);
|
||||
|
||||
dev->accel.sy--;
|
||||
|
||||
if (dev->accel.sy < 0) {
|
||||
@@ -3804,7 +3716,7 @@ ibm8514_poll(void *priv)
|
||||
if ((svga->cgastat & 8) && ((dev->displine & 0x0f) == (svga->crtc[0x11] & 0x0f)) && svga->vslines)
|
||||
svga->cgastat &= ~8;
|
||||
svga->vslines++;
|
||||
if (dev->displine > 1500)
|
||||
if (dev->displine > 2000)
|
||||
dev->displine = 0;
|
||||
} else {
|
||||
timer_advance_u64(&svga->timer, dev->dispontime);
|
||||
@@ -3871,9 +3783,9 @@ ibm8514_poll(void *priv)
|
||||
svga->vslines = 0;
|
||||
|
||||
if (dev->interlace && dev->oddeven)
|
||||
dev->ma = dev->maback = dev->ma_latch + (dev->rowoffset << 1);
|
||||
dev->ma = dev->maback = (dev->rowoffset << 1);
|
||||
else
|
||||
dev->ma = dev->maback = dev->ma_latch;
|
||||
dev->ma = dev->maback = 0;
|
||||
|
||||
dev->ma = (dev->ma << 2);
|
||||
dev->maback = (dev->maback << 2);
|
||||
@@ -3904,26 +3816,43 @@ ibm8514_recalctimings(svga_t *svga)
|
||||
ati8514_recalctimings(svga);
|
||||
} else {
|
||||
if (dev->on) {
|
||||
dev->hdisp = (dev->hdisped + 1) << 3;
|
||||
dev->h_total = dev->htotal + 1;
|
||||
|
||||
if (dev->h_total == 1) /*Default to 1024x768 87hz 8514/A htotal timings if it goes to 0.*/
|
||||
dev->h_total = 0x9e;
|
||||
|
||||
dev->vdisp = (dev->v_disp + 1) >> 1;
|
||||
if ((dev->vdisp == 478) || (dev->vdisp == 766))
|
||||
dev->vdisp += 2;
|
||||
|
||||
dev->v_total = dev->v_total_reg + 1;
|
||||
if (dev->interlace)
|
||||
dev->v_total >>= 1;
|
||||
|
||||
dev->v_syncstart = dev->v_sync_start + 1;
|
||||
if (dev->interlace)
|
||||
dev->v_syncstart >>= 1;
|
||||
|
||||
dev->rowcount = !!(dev->disp_cntl & 0x08);
|
||||
|
||||
if (dev->accel.advfunc_cntl & 0x01) {
|
||||
if ((dev->hdisp != 640) && (dev->hdisp != 1024)) {
|
||||
if (dev->accel.advfunc_cntl & 0x04) {
|
||||
dev->h_disp = dev->hdisp;
|
||||
dev->dispend = dev->vdisp;
|
||||
dev->hdisp = 1024;
|
||||
dev->vdisp = 768;
|
||||
} else {
|
||||
dev->h_disp = 640;
|
||||
dev->dispend = 480;
|
||||
dev->hdisp = 640;
|
||||
dev->vdisp = 480;
|
||||
}
|
||||
} else {
|
||||
dev->h_disp = dev->hdisp;
|
||||
dev->dispend = dev->vdisp;
|
||||
}
|
||||
|
||||
dev->h_disp = dev->hdisp;
|
||||
dev->dispend = dev->vdisp;
|
||||
|
||||
if (dev->accel.advfunc_cntl & 0x04)
|
||||
svga->clock8514 = (cpuclock * (double) (1ULL << 32)) / 44900000.0;
|
||||
svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / 44900000.0;
|
||||
else
|
||||
svga->clock8514 = (cpuclock * (double) (1ULL << 32)) / 25175000.0;
|
||||
svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / 25175000.0;
|
||||
|
||||
if ((dev->dispend == 478) || (dev->dispend == 766))
|
||||
dev->dispend += 2;
|
||||
@@ -4026,6 +3955,7 @@ ibm8514_init(const device_t *info)
|
||||
dev->map8 = dev->pallook;
|
||||
dev->local = 0;
|
||||
dev->accel_bpp = 8;
|
||||
dev->on = 0;
|
||||
|
||||
dev->type = info->flags;
|
||||
dev->bpp = 0;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -344,7 +344,7 @@ bochs_vbe_recalctimings(svga_t* svga)
|
||||
svga->rowoffset = dev->vbe_regs[VBE_DISPI_INDEX_VIRT_WIDTH] * ((svga->bpp == 15) ? 2 : (svga->bpp / 8));
|
||||
svga->ma_latch = (dev->vbe_regs[VBE_DISPI_INDEX_Y_OFFSET] * svga->rowoffset) +
|
||||
(dev->vbe_regs[VBE_DISPI_INDEX_X_OFFSET] * ((svga->bpp == 15) ? 2 : (svga->bpp / 8)));
|
||||
svga->fullchange = 3;
|
||||
svga->fullchange = 3;
|
||||
}
|
||||
|
||||
if (svga->bpp == 4)
|
||||
@@ -708,7 +708,7 @@ bochs_vbe_disable_handlers(bochs_vbe_t *dev)
|
||||
reset_state->bios_rom.mapping = dev->bios_rom.mapping;
|
||||
|
||||
reset_state->svga.timer = dev->svga.timer;
|
||||
reset_state->svga.timer8514 = dev->svga.timer8514;
|
||||
reset_state->svga.timer_8514 = dev->svga.timer_8514;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -2793,7 +2793,8 @@ chips_69000_disable_handlers(chips_69000_t *chips)
|
||||
|
||||
reset_state->decrement_timer = chips->decrement_timer;
|
||||
reset_state->svga.timer = chips->svga.timer;
|
||||
reset_state->svga.timer8514 = chips->svga.timer8514;
|
||||
reset_state->svga.timer_8514 = chips->svga.timer_8514;
|
||||
reset_state->svga.timer_xga = chips->svga.timer_xga;
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -260,6 +260,8 @@ typedef struct gd54xx_t {
|
||||
|
||||
uint8_t pos_regs[8];
|
||||
|
||||
uint32_t vlb_lfb_base;
|
||||
|
||||
uint32_t lfb_base;
|
||||
uint32_t vgablt_base;
|
||||
|
||||
@@ -1750,7 +1752,8 @@ gd543x_recalc_mapping(gd54xx_t *gd54xx)
|
||||
} else
|
||||
mem_mapping_disable(&gd54xx->mmio_mapping);
|
||||
} else {
|
||||
if ((svga->crtc[0x27] <= CIRRUS_ID_CLGD5429) || (!gd54xx->pci && !gd54xx->vlb)) {
|
||||
if ((svga->crtc[0x27] <= CIRRUS_ID_CLGD5429) ||
|
||||
(!gd54xx->pci && !gd54xx->vlb)) {
|
||||
if (svga->gdcreg[0x0b] & CIRRUS_BANKING_GRANULARITY_16K) {
|
||||
base = (svga->seqregs[0x07] & 0xf0) << 16;
|
||||
size = 1 * 1024 * 1024;
|
||||
@@ -1770,7 +1773,10 @@ gd543x_recalc_mapping(gd54xx_t *gd54xx)
|
||||
else
|
||||
size = 4 * 1024 * 1024;
|
||||
} else { /*VLB/ISA/MCA*/
|
||||
base = 128 * 1024 * 1024;
|
||||
if (gd54xx->vlb_lfb_base != 0x00000000)
|
||||
base = gd54xx->vlb_lfb_base;
|
||||
else
|
||||
base = 128 * 1024 * 1024;
|
||||
if (svga->crtc[0x27] >= CIRRUS_ID_CLGD5436)
|
||||
size = 16 * 1024 * 1024;
|
||||
else
|
||||
@@ -4224,6 +4230,12 @@ gd54xx_init(const device_t *info)
|
||||
|
||||
gd54xx->id = id;
|
||||
|
||||
if (gd54xx->vlb && ((gd54xx->id == CIRRUS_ID_CLGD5430) ||
|
||||
(gd54xx->id == CIRRUS_ID_CLGD5434) ||
|
||||
(gd54xx->id == CIRRUS_ID_CLGD5434_4) ||
|
||||
(gd54xx->id == CIRRUS_ID_CLGD5440)))
|
||||
gd54xx->vlb_lfb_base = device_get_config_int("lfb_base") << 20;
|
||||
|
||||
switch (id) {
|
||||
case CIRRUS_ID_CLGD5401:
|
||||
romfn = BIOS_GD5401_PATH;
|
||||
@@ -4777,6 +4789,41 @@ static const device_config_t gd5429_config[] = {
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
};
|
||||
|
||||
static const device_config_t gd5430_vlb_config[] = {
|
||||
{
|
||||
.name = "memory",
|
||||
.description = "Memory size",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = 2,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "1 MB", .value = 1 },
|
||||
{ .description = "2 MB", .value = 2 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "lfb_base",
|
||||
.description = "Linear framebuffer base",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = 2,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "32 MB", .value = 32 },
|
||||
{ .description = "64 MB", .value = 64 },
|
||||
{ .description = "2048 MB", .value = 2048 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
};
|
||||
|
||||
static const device_config_t gd5440_onboard_config[] = {
|
||||
{
|
||||
.name = "memory",
|
||||
@@ -4816,6 +4863,42 @@ static const device_config_t gd5434_config[] = {
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
};
|
||||
|
||||
static const device_config_t gd5434_vlb_config[] = {
|
||||
{
|
||||
.name = "memory",
|
||||
.description = "Memory size",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = 4,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "1 MB", .value = 1 },
|
||||
{ .description = "2 MB", .value = 2 },
|
||||
{ .description = "4 MB", .value = 4 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "lfb_base",
|
||||
.description = "Linear framebuffer base",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = 2,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "32 MB", .value = 32 },
|
||||
{ .description = "64 MB", .value = 64 },
|
||||
{ .description = "2048 MB", .value = 2048 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
};
|
||||
|
||||
static const device_config_t gd5434_onboard_config[] = {
|
||||
{
|
||||
.name = "memory",
|
||||
@@ -5150,7 +5233,7 @@ const device_t gd5430_diamond_speedstar_pro_se_a8_vlb_device = {
|
||||
.available = gd5430_diamond_a8_available,
|
||||
.speed_changed = gd54xx_speed_changed,
|
||||
.force_redraw = gd54xx_force_redraw,
|
||||
.config = gd5429_config
|
||||
.config = gd5430_vlb_config
|
||||
};
|
||||
|
||||
const device_t gd5430_vlb_device = {
|
||||
@@ -5164,7 +5247,7 @@ const device_t gd5430_vlb_device = {
|
||||
.available = gd5430_orchid_vlb_available,
|
||||
.speed_changed = gd54xx_speed_changed,
|
||||
.force_redraw = gd54xx_force_redraw,
|
||||
.config = gd5429_config
|
||||
.config = gd5430_vlb_config
|
||||
};
|
||||
|
||||
const device_t gd5430_onboard_vlb_device = {
|
||||
@@ -5178,7 +5261,7 @@ const device_t gd5430_onboard_vlb_device = {
|
||||
.available = NULL,
|
||||
.speed_changed = gd54xx_speed_changed,
|
||||
.force_redraw = gd54xx_force_redraw,
|
||||
.config = gd5429_config
|
||||
.config = gd5430_vlb_config
|
||||
};
|
||||
|
||||
const device_t gd5430_pci_device = {
|
||||
@@ -5263,7 +5346,7 @@ const device_t gd5434_vlb_device = {
|
||||
.available = gd5430_orchid_vlb_available,
|
||||
.speed_changed = gd54xx_speed_changed,
|
||||
.force_redraw = gd54xx_force_redraw,
|
||||
.config = gd5434_config
|
||||
.config = gd5434_vlb_config
|
||||
};
|
||||
|
||||
const device_t gd5434_pci_device = {
|
||||
|
||||
@@ -5109,7 +5109,8 @@ s3_virge_disable_handlers(virge_t *dev)
|
||||
reset_state->bios_rom.mapping = dev->bios_rom.mapping;
|
||||
|
||||
reset_state->svga.timer = dev->svga.timer;
|
||||
reset_state->svga.timer8514 = dev->svga.timer8514;
|
||||
reset_state->svga.timer_8514 = dev->svga.timer_8514;
|
||||
reset_state->svga.timer_xga = dev->svga.timer_xga;
|
||||
reset_state->irq_timer = dev->irq_timer;
|
||||
}
|
||||
|
||||
|
||||
@@ -776,9 +776,9 @@ svga_recalctimings(svga_t *svga)
|
||||
}
|
||||
|
||||
if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /*Text mode*/
|
||||
if (svga->seqregs[1] & 8) { /*40 column*/
|
||||
if (svga->seqregs[1] & 8) /*40 column*/
|
||||
svga->render = svga_render_text_40;
|
||||
} else
|
||||
else
|
||||
svga->render = svga_render_text_80;
|
||||
|
||||
if (xga_active && (svga->xga != NULL)) {
|
||||
@@ -981,7 +981,7 @@ svga_recalctimings(svga_t *svga)
|
||||
crtcconst = svga->clock * svga->char_width;
|
||||
if (ibm8514_active && (svga->dev8514 != NULL)) {
|
||||
if (dev->on)
|
||||
crtcconst8514 = svga->clock8514;
|
||||
crtcconst8514 = svga->clock_8514;
|
||||
}
|
||||
if (xga_active && (svga->xga != NULL)) {
|
||||
if (xga->on)
|
||||
|
||||
Reference in New Issue
Block a user