mirror of
https://github.com/86Box/86Box.git
synced 2026-02-22 17:45:31 -07:00
Merge branch '86Box:master' into master
This commit is contained in:
@@ -36,7 +36,7 @@ if(MUNT_EXTERNAL)
|
||||
endif()
|
||||
|
||||
project(86Box
|
||||
VERSION 5.2
|
||||
VERSION 6.0
|
||||
DESCRIPTION "Emulator of x86-based systems"
|
||||
HOMEPAGE_URL "https://86box.net"
|
||||
LANGUAGES C CXX)
|
||||
|
||||
78
README-UNIX-MODE-WITH-OSD.txt
Normal file
78
README-UNIX-MODE-WITH-OSD.txt
Normal file
@@ -0,0 +1,78 @@
|
||||
UNIX MODE WITH OSD
|
||||
|
||||
86Box supports running on the linux framebuffer without QT and without X, making the pc appear as a nearly native old machine.
|
||||
|
||||
running it that way is already supported but when doing it, 86box loses all menu and all abilities to mount floppies and CDs, it also becomes the owner of the entire pc with no way of quitting it or changing virtual console.
|
||||
|
||||
to overcome this, an on screen display menu is available that allows doing everything the textual console (src/unix/unix.c) does;
|
||||
mount/unmount all supported media like floppy and cd
|
||||
hard reset the machine
|
||||
quit 86box
|
||||
seeing the current performance %
|
||||
|
||||
key bindings:
|
||||
Right Control + F11 opens the osd
|
||||
|
||||
while is open:
|
||||
arrows up, down moves the cursor
|
||||
enter does the action, at mount options it enters a list of appropriate files (*.img, *.iso)
|
||||
ESC goes back to main or closes the OSD
|
||||
|
||||
current limitations:
|
||||
OSD can mount images to first floppy and first cd, secondary devices are not supported
|
||||
it does not show if an image is mounted or not
|
||||
the option "version" does actully print it, but it can't be seen beacuse its printed under 86box display
|
||||
extremely long filenames can overflow the blue window
|
||||
the title does actually overflow the window width :)
|
||||
|
||||
These are the steps to install a machine fully dedicated to 86Box and tuned to make it appear almost native.
|
||||
This works almost the same for on a Raspberry Pi
|
||||
|
||||
|
||||
1) install a vanilla Debian Trixie with netinst and without any graphical environment, or a "server" distro for RPI
|
||||
depending on the machine speed, this will make boot time extremely short
|
||||
|
||||
2) apt update if necessary
|
||||
|
||||
3) install git and almost all required packages
|
||||
apt install git build-essential cmake extra-cmake-modules pkg-config ninja-build libfreetype-dev libsdl2-dev libpng-dev libopenal-dev librtmidi-dev libfluidsynth-dev libsndfile1-dev libserialport-dev libevdev-dev libxkbcommon-dev libxkbcommon-x11-dev libslirp-dev
|
||||
|
||||
4) setup git and clone
|
||||
git@github.com:86Box/86Box.git
|
||||
git@github.com:86Box/roms.git
|
||||
|
||||
5) build (128 => super speed, too much for a 2GB machine)
|
||||
cd 86Box
|
||||
mkdir build
|
||||
cd build
|
||||
cmake .. --preset regular -D QT=OFF -D PREFER_STATIC=ON
|
||||
cmake --build regular -j 128
|
||||
cd ../../
|
||||
ln -s 86Box/build/regular/src/86Box 86Box.exe
|
||||
|
||||
6) boot
|
||||
as root so it can take complete ownership of the linux framebuffer
|
||||
|
||||
7) notes:
|
||||
- 86Box will complain to be unable to find readline, this is fine, we don't need the command line at all
|
||||
- ALSOFT will complain it can't connect to PipeWire, no problem, sounds will come from standard ALSA
|
||||
|
||||
8) additional steps
|
||||
add a new udev rule to automount any USB key to a known location so files in it can be listed in the OSD floppy/cd mount options
|
||||
|
||||
create /etc/udev/rules.d/99-automount.rules
|
||||
|
||||
with:
|
||||
ACTION=="add", ENV{ID_BUS}=="usb", ENV{ID_TYPE}=="disk", ENV{ID_FS_TYPE}=="exfat", RUN+="/usr/bin/systemd-mount --no-block --automount=yes --collect /dev/%k '/mnt'"
|
||||
|
||||
replicate this line for each filesystem you expect the usb key to be formatted, in this example "exfat"
|
||||
this is going to conflict if multiple keys are inserted, don't do it
|
||||
|
||||
final step
|
||||
configure some 86box vm using another pc with the GUI
|
||||
copy the VM definitions to this new pc and manually launch 86box from the textual command line
|
||||
optionally craft a boot menu to be shown in place of the login prompt or setup 86box as a debiasn service, it will start at boot
|
||||
just make sure the pc will be accessible via ssh or some other way, autobooting 86box canà make difficult terminating it
|
||||
|
||||
|
||||
|
||||
@@ -43,23 +43,33 @@ pretty_date() {
|
||||
|
||||
# Patch files.
|
||||
patch_file() {
|
||||
# Stop if the file doesn't exist.
|
||||
[ ! -e "$1" ] && return
|
||||
# Parse arguments.
|
||||
desc="$1"
|
||||
shift
|
||||
pattern="$1"
|
||||
shift
|
||||
|
||||
# Patch file.
|
||||
if sed -i -r -e "$3" "$1"
|
||||
then
|
||||
echo "[-] Patched $2 on $1"
|
||||
else
|
||||
echo "[!] Patching $2 on $1 failed"
|
||||
fi
|
||||
# Patch the specified files.
|
||||
for file in "$@"
|
||||
do
|
||||
# Skip file if it doesn't exist.
|
||||
[ ! -e "$file" ] && continue
|
||||
|
||||
# Patch file.
|
||||
if sed -i -r -e "$pattern" "$file"
|
||||
then
|
||||
echo "[-] Patched $desc in $file"
|
||||
else
|
||||
echo "[!] Patching $desc in $file failed"
|
||||
fi
|
||||
done
|
||||
}
|
||||
patch_file CMakeLists.txt VERSION 's/^(\s*VERSION ).+/\1'"$newversion"'/'
|
||||
patch_file vcpkg.json version-string 's/(^\s*"version-string"\s*:\s*")[^"]+/\1'"$newversion"'/'
|
||||
patch_file src/unix/assets/*.spec Version 's/(Version:\s+)[0-9].+/\1'"$newversion"'/'
|
||||
patch_file src/unix/assets/*.spec '%global romver' 's/(^%global\ romver\s+)[0-9]{8}/\1'"$romversion"'/'
|
||||
patch_file src/unix/assets/*.spec 'changelog version' 's/(^[*]\s.*>\s+)[0-9].+/\1'"$newversion"-1'/'
|
||||
patch_file src/unix/assets/*.spec 'changelog date' 's/(^[*]\s)[a-zA-Z]{3}\s[a-zA-Z]{3}\s[0-9]{2}\s[0-9]{4}/\1'"$(pretty_date)"'/'
|
||||
patch_file src/unix/assets/*.metainfo.xml release 's/(<release version=")[^"]+(" date=")[^"]+/\1'"$newversion"'\2'"$(date +%Y-%m-%d)"'/'
|
||||
patch_file debian/changelog 'changelog date' 's/> .+/> '"$(date -R)"'/'
|
||||
patch_file debian/changelog 'changelog version' 's/86box \(.+\)/86box \('"$newversion"'\)/'
|
||||
patch_file VERSION 's/^(\s*VERSION ).+/\1'"$newversion"'/' CMakeLists.txt
|
||||
patch_file version-string 's/(^\s*"version-string"\s*:\s*")[^"]+/\1'"$newversion"'/' vcpkg.json
|
||||
patch_file Version 's/(Version:\s+)[0-9].+/\1'"$newversion"'/' src/unix/assets/*.spec
|
||||
patch_file '%global romver' 's/(^%global\ romver\s+)[^\s]+/\1'"$romversion"'/' src/unix/assets/*.spec
|
||||
patch_file 'changelog version' 's/(^[*]\s.*>\s+)[0-9].+/\1'"$newversion"-1'/' src/unix/assets/*.spec
|
||||
patch_file 'changelog date' 's/(^[*]\s)[a-zA-Z]{3}\s[a-zA-Z]{3}\s[0-9]{2}\s[0-9]{4}/\1'"$(pretty_date)"'/' src/unix/assets/*.spec
|
||||
patch_file release 's/(<release version=")[^"]+(" date=")[^"]+/\1'"$newversion"'\2'"$(date +%Y-%m-%d)"'/' src/unix/assets/*.metainfo.xml
|
||||
patch_file 'changelog date' 's/> .+/> '"$(date -R)"'/' debian/changelog
|
||||
patch_file 'changelog version' 's/86box \(.+\)/86box \('"$newversion"'\)/' debian/changelog
|
||||
|
||||
4
debian/changelog
vendored
4
debian/changelog
vendored
@@ -1,5 +1,5 @@
|
||||
86box (5.2) UNRELEASED; urgency=medium
|
||||
86box (6.0) UNRELEASED; urgency=medium
|
||||
|
||||
* Bump release.
|
||||
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Thu, 18 Sep 2025 04:25:57 +0200
|
||||
-- Jasmine Iwanek <jriwanek@gmail.com> Sun, 26 Oct 2025 17:41:47 +0100
|
||||
|
||||
@@ -1083,7 +1083,10 @@ usage:
|
||||
/* Build the global configuration file path. */
|
||||
if (global == NULL) {
|
||||
plat_get_global_config_dir(global_cfg_path, sizeof(global_cfg_path));
|
||||
path_append_filename(global_cfg_path, global_cfg_path, GLOBAL_CONFIG_FILE);
|
||||
// avoid strcpy global_cfg_path over itself (valgrind says it's bad...)
|
||||
// path_append_filename(global_cfg_path, global_cfg_path, GLOBAL_CONFIG_FILE);
|
||||
path_slash(global_cfg_path);
|
||||
strcat(global_cfg_path, GLOBAL_CONFIG_FILE);
|
||||
} else {
|
||||
strncpy(global_cfg_path, global, sizeof(global_cfg_path) - 1);
|
||||
}
|
||||
|
||||
68
src/config.c
68
src/config.c
@@ -339,6 +339,7 @@ load_machine(void)
|
||||
{ .old = "infinia7200", .new = "tc430hx", .new_bios = "infinia7200" },
|
||||
{ .old = "dellvenus", .new = "vs440fx", .new_bios = "dellvenus" },
|
||||
{ .old = "gw2kvenus", .new = "vs440fx", .new_bios = "gw2kvenus" },
|
||||
{ .old = "lgibmx7g", .new = "ms6119", .new_bios = "lgibmx7g" },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
@@ -569,6 +570,7 @@ load_input_devices(void)
|
||||
{
|
||||
ini_section_t cat = ini_find_section(config, "Input devices");
|
||||
char temp[512];
|
||||
char tmp2[32];
|
||||
char *p;
|
||||
|
||||
p = ini_section_get_string(cat, "keyboard_type", NULL);
|
||||
@@ -646,18 +648,25 @@ load_input_devices(void)
|
||||
joystick_state[gp][js].plat_joystick_nr = ini_section_get_int(cat, temp, 0);
|
||||
|
||||
if (joystick_state[gp][js].plat_joystick_nr) {
|
||||
// --- Load Axis Mappings ---
|
||||
for (int axis_nr = 0; axis_nr < joystick_get_axis_count(joystick_type[joy_insn]); axis_nr++) {
|
||||
sprintf(temp, "joystick_%i_axis_%i", js, axis_nr);
|
||||
joystick_state[gp][js].axis_mapping[axis_nr] = ini_section_get_int(cat, temp, axis_nr);
|
||||
}
|
||||
|
||||
// --- Load Button Mappings ---
|
||||
for (int button_nr = 0; button_nr < joystick_get_button_count(joystick_type[joy_insn]); button_nr++) {
|
||||
sprintf(temp, "joystick_%i_button_%i", js, button_nr);
|
||||
joystick_state[gp][js].button_mapping[button_nr] = ini_section_get_int(cat, temp, button_nr);
|
||||
}
|
||||
|
||||
// --- Load POV (Hat Switch) Mappings ---
|
||||
for (int pov_nr = 0; pov_nr < joystick_get_pov_count(joystick_type[joy_insn]); pov_nr++) {
|
||||
sprintf(temp, "joystick_%i_pov_%i", js, pov_nr);
|
||||
p = ini_section_get_string(cat, temp, "0, 0");
|
||||
joystick_state[gp][js].pov_mapping[pov_nr][0] = joystick_state[gp][js].pov_mapping[pov_nr][1] = 0;
|
||||
sprintf(tmp2, "%i, %i", 0, 0);
|
||||
p = ini_section_get_string(cat, temp, tmp2);
|
||||
joystick_state[gp][js].pov_mapping[pov_nr][0] = 0;
|
||||
joystick_state[gp][js].pov_mapping[pov_nr][1] = 0;
|
||||
sscanf(p, "%i, %i", &joystick_state[gp][js].pov_mapping[pov_nr][0],
|
||||
&joystick_state[gp][js].pov_mapping[pov_nr][1]);
|
||||
}
|
||||
@@ -1493,7 +1502,7 @@ load_floppy_and_cdrom_drives(void)
|
||||
sprintf(temp, "cdrom_%02i_type", c + 1);
|
||||
p = ini_section_get_string(cat, temp, cdrom[c].bus_type == CDROM_BUS_MKE ? "cr563" : "86cd");
|
||||
/* TODO: Configuration migration, remove when no longer needed. */
|
||||
int cdrom_type = cdrom_get_from_internal_name(p);
|
||||
int cdrom_type = cdrom_get_from_internal_name(!strcmp(p, "goldstar") ? "goldstar_r560b" : p);
|
||||
if (cdrom_type == -1) {
|
||||
cdrom_type = cdrom_get_from_name(p);
|
||||
if (cdrom_type == -1)
|
||||
@@ -2702,7 +2711,7 @@ save_input_devices(void)
|
||||
{
|
||||
ini_section_t cat = ini_find_or_create_section(config, "Input devices");
|
||||
char temp[512];
|
||||
char tmp2[512];
|
||||
char tmp2[32];
|
||||
|
||||
ini_section_set_string(cat, "keyboard_type", keyboard_get_internal_name(keyboard_type));
|
||||
|
||||
@@ -2713,20 +2722,25 @@ save_input_devices(void)
|
||||
ini_section_delete_var(cat, "joystick_type");
|
||||
|
||||
for (int js = 0; js < MAX_PLAT_JOYSTICKS; js++) {
|
||||
sprintf(tmp2, "joystick_%i_nr", js);
|
||||
ini_section_delete_var(cat, tmp2);
|
||||
sprintf(temp, "joystick_%i_nr", js);
|
||||
ini_section_delete_var(cat, temp);
|
||||
|
||||
// --- Save Axis Mappings ---
|
||||
for (int axis_nr = 0; axis_nr < MAX_JOY_AXES; axis_nr++) {
|
||||
sprintf(tmp2, "joystick_%i_axis_%i", js, axis_nr);
|
||||
ini_section_delete_var(cat, tmp2);
|
||||
sprintf(temp, "joystick_%i_axis_%i", js, axis_nr);
|
||||
ini_section_delete_var(cat, temp);
|
||||
}
|
||||
|
||||
// --- Save Button Mappings ---
|
||||
for (int button_nr = 0; button_nr < MAX_JOY_BUTTONS; button_nr++) {
|
||||
sprintf(tmp2, "joystick_%i_button_%i", js, button_nr);
|
||||
ini_section_delete_var(cat, tmp2);
|
||||
sprintf(temp, "joystick_%i_button_%i", js, button_nr);
|
||||
ini_section_delete_var(cat, temp);
|
||||
}
|
||||
|
||||
// --- Save POV (Hat Switch) Mappings ---
|
||||
for (int pov_nr = 0; pov_nr < MAX_JOY_POVS; pov_nr++) {
|
||||
sprintf(tmp2, "joystick_%i_pov_%i", js, pov_nr);
|
||||
ini_section_delete_var(cat, tmp2);
|
||||
sprintf(temp, "joystick_%i_pov_%i", js, pov_nr);
|
||||
ini_section_delete_var(cat, temp);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -2735,33 +2749,37 @@ save_input_devices(void)
|
||||
ini_section_set_string(cat, "joystick_type", joystick_get_internal_name(joystick_type[joy_insn]));
|
||||
|
||||
for (int js = 0; js < joystick_get_max_joysticks(joystick_type[joy_insn]); js++) {
|
||||
sprintf(tmp2, "joystick_%i_nr", js);
|
||||
ini_section_set_int(cat, tmp2, joystick_state[gp][js].plat_joystick_nr);
|
||||
sprintf(temp, "joystick_%i_nr", js);
|
||||
ini_section_set_int(cat, temp, joystick_state[gp][js].plat_joystick_nr);
|
||||
|
||||
if (joystick_state[gp][js].plat_joystick_nr) {
|
||||
// --- Save Axis Mappings ---
|
||||
for (int axis_nr = 0; axis_nr < joystick_get_axis_count(joystick_type[joy_insn]); axis_nr++) {
|
||||
sprintf(tmp2, "joystick_%i_axis_%i", js, axis_nr);
|
||||
ini_section_set_int(cat, tmp2, joystick_state[gp][js].axis_mapping[axis_nr]);
|
||||
sprintf(temp, "joystick_%i_axis_%i", js, axis_nr);
|
||||
ini_section_set_int(cat, temp, joystick_state[gp][js].axis_mapping[axis_nr]);
|
||||
}
|
||||
|
||||
// --- Save Button Mappings ---
|
||||
for (int button_nr = 0; button_nr < joystick_get_button_count(joystick_type[joy_insn]); button_nr++) {
|
||||
sprintf(tmp2, "joystick_%i_button_%i", js, button_nr);
|
||||
ini_section_set_int(cat, tmp2, joystick_state[gp][js].button_mapping[button_nr]);
|
||||
sprintf(temp, "joystick_%i_button_%i", js, button_nr);
|
||||
ini_section_set_int(cat, temp, joystick_state[gp][js].button_mapping[button_nr]);
|
||||
}
|
||||
|
||||
// --- Save POV (Hat Switch) Mappings ---
|
||||
for (int pov_nr = 0; pov_nr < joystick_get_pov_count(joystick_type[joy_insn]); pov_nr++) {
|
||||
sprintf(tmp2, "joystick_%i_pov_%i", js, pov_nr);
|
||||
sprintf(temp, "%i, %i", joystick_state[gp][js].pov_mapping[pov_nr][0],
|
||||
joystick_state[gp][js].pov_mapping[pov_nr][1]);
|
||||
ini_section_set_string(cat, tmp2, temp);
|
||||
sprintf(temp, "joystick_%i_pov_%i", js, pov_nr);
|
||||
sprintf(tmp2, "%i, %i", joystick_state[gp][js].pov_mapping[pov_nr][0],
|
||||
joystick_state[gp][js].pov_mapping[pov_nr][1]);
|
||||
ini_section_set_string(cat, temp, tmp2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (tablet_tool_type != 1) {
|
||||
if (tablet_tool_type != 1)
|
||||
ini_section_set_int(cat, "tablet_tool_type", tablet_tool_type);
|
||||
} else {
|
||||
else
|
||||
ini_section_delete_var(cat, "tablet_tool_type");
|
||||
}
|
||||
|
||||
ini_delete_section_if_empty(config, cat);
|
||||
}
|
||||
|
||||
146
src/device.c
146
src/device.c
@@ -396,143 +396,69 @@ device_available(const device_t *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
device_get_bios_type(const device_t *dev, const char *internal_name)
|
||||
static const device_config_bios_t *
|
||||
device_get_bios(const device_t *dev, const char *internal_name)
|
||||
{
|
||||
if (dev != NULL) {
|
||||
const device_config_t *config = dev->config;
|
||||
if (config != NULL) {
|
||||
while (config->type != CONFIG_END) {
|
||||
if (config->type == CONFIG_BIOS) {
|
||||
const device_config_bios_t *bios = (const device_config_bios_t *) config->bios;
|
||||
while ((bios != NULL) &&
|
||||
(bios->name != NULL) &&
|
||||
(bios->internal_name != NULL) &&
|
||||
(bios->files_no != 0)) {
|
||||
if (!strcmp(internal_name, bios->internal_name))
|
||||
return bios->bios_type;
|
||||
bios++;
|
||||
}
|
||||
while (config && (config->type != CONFIG_END)) {
|
||||
if (config->type == CONFIG_BIOS) {
|
||||
const device_config_bios_t *bios = (const device_config_bios_t *) config->bios;
|
||||
|
||||
/* Go through the ROMs in the device configuration. */
|
||||
while ((bios != NULL) &&
|
||||
(bios->name != NULL) &&
|
||||
(bios->internal_name != NULL) &&
|
||||
(bios->files_no != 0)) {
|
||||
if (!strcmp(internal_name, bios->internal_name))
|
||||
return bios;
|
||||
bios++;
|
||||
}
|
||||
config++;
|
||||
|
||||
/* Unknown value, fall back to the default ROMs. */
|
||||
if (strcmp(internal_name, config->default_string))
|
||||
return device_get_bios(dev, config->default_string);
|
||||
}
|
||||
config++;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
device_get_bios_type(const device_t *dev, const char *internal_name)
|
||||
{
|
||||
const device_config_bios_t *bios = device_get_bios(dev, internal_name);
|
||||
return bios ? bios->bios_type : 0;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
device_get_bios_num_files(const device_t *dev, const char *internal_name)
|
||||
{
|
||||
if (dev != NULL) {
|
||||
const device_config_t *config = dev->config;
|
||||
if (config != NULL) {
|
||||
while (config->type != CONFIG_END) {
|
||||
if (config->type == CONFIG_BIOS) {
|
||||
const device_config_bios_t *bios = (const device_config_bios_t *) config->bios;
|
||||
while ((bios != NULL) &&
|
||||
(bios->name != NULL) &&
|
||||
(bios->internal_name != NULL) &&
|
||||
(bios->files_no != 0)) {
|
||||
if (!strcmp(internal_name, bios->internal_name))
|
||||
return bios->files_no;
|
||||
bios++;
|
||||
}
|
||||
}
|
||||
config++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
const device_config_bios_t *bios = device_get_bios(dev, internal_name);
|
||||
return bios ? bios->files_no : 0;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
device_get_bios_local(const device_t *dev, const char *internal_name)
|
||||
{
|
||||
if (dev != NULL) {
|
||||
const device_config_t *config = dev->config;
|
||||
if (config != NULL) {
|
||||
while (config->type != CONFIG_END) {
|
||||
if (config->type == CONFIG_BIOS) {
|
||||
const device_config_bios_t *bios = (const device_config_bios_t *) config->bios;
|
||||
while ((bios != NULL) &&
|
||||
(bios->name != NULL) &&
|
||||
(bios->internal_name != NULL) &&
|
||||
(bios->files_no != 0)) {
|
||||
if (!strcmp(internal_name, bios->internal_name))
|
||||
return bios->local;
|
||||
bios++;
|
||||
}
|
||||
}
|
||||
config++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
const device_config_bios_t *bios = device_get_bios(dev, internal_name);
|
||||
return bios ? bios->local : 0;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
device_get_bios_file_size(const device_t *dev, const char *internal_name)
|
||||
{
|
||||
if (dev != NULL) {
|
||||
const device_config_t *config = dev->config;
|
||||
if (config != NULL) {
|
||||
while (config->type != CONFIG_END) {
|
||||
if (config->type == CONFIG_BIOS) {
|
||||
const device_config_bios_t *bios = (const device_config_bios_t *) config->bios;
|
||||
|
||||
/* Go through the ROM's in the device configuration. */
|
||||
while ((bios != NULL) &&
|
||||
(bios->name != NULL) &&
|
||||
(bios->internal_name != NULL) &&
|
||||
(bios->files_no != 0)) {
|
||||
if (!strcmp(internal_name, bios->internal_name))
|
||||
return bios->size;
|
||||
bios++;
|
||||
}
|
||||
}
|
||||
config++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
const device_config_bios_t *bios = device_get_bios(dev, internal_name);
|
||||
return bios ? bios->size : 0;
|
||||
}
|
||||
|
||||
const char *
|
||||
device_get_bios_file(const device_t *dev, const char *internal_name, int file_no)
|
||||
device_get_bios_file(const device_t *dev, const char *internal_name, unsigned int file_no)
|
||||
{
|
||||
if (dev != NULL) {
|
||||
const device_config_t *config = dev->config;
|
||||
if (config != NULL) {
|
||||
while (config->type != CONFIG_END) {
|
||||
if (config->type == CONFIG_BIOS) {
|
||||
const device_config_bios_t *bios = (const device_config_bios_t *) config->bios;
|
||||
|
||||
/* Go through the ROM's in the device configuration. */
|
||||
while ((bios != NULL) &&
|
||||
(bios->name != NULL) &&
|
||||
(bios->internal_name != NULL) &&
|
||||
(bios->files_no != 0)) {
|
||||
if (!strcmp(internal_name, bios->internal_name)) {
|
||||
if (file_no < bios->files_no)
|
||||
return bios->files[file_no];
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
bios++;
|
||||
}
|
||||
}
|
||||
config++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* A NULL device is never available. */
|
||||
return (NULL);
|
||||
const device_config_bios_t *bios = device_get_bios(dev, internal_name);
|
||||
return (bios && (file_no < bios->files_no)) ? bios->files[file_no] : NULL;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -141,7 +141,7 @@ serial_update_ints(serial_t *dev)
|
||||
}
|
||||
}
|
||||
|
||||
serial_do_irq(dev, !(dev->iir & 0x01) && ((dev->mctrl & 8) || (dev->type == SERIAL_8250_PCJR)));
|
||||
serial_do_irq(dev, !(dev->iir & 0x01) && ((dev->mctrl & 8) || ((dev->type == SERIAL_8250_PCJR_3F8) || (dev->type == SERIAL_8250_PCJR_2F8))));
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -971,15 +971,20 @@ serial_init(const device_t *info)
|
||||
serial_setup(dev, COM4_ADDR, COM4_IRQ);
|
||||
else if (next_inst == 2)
|
||||
serial_setup(dev, COM3_ADDR, COM3_IRQ);
|
||||
else if ((next_inst == 1) || (info->local == SERIAL_8250_PCJR))
|
||||
else if ((next_inst == 1) || (info->local == SERIAL_8250_PCJR_2F8))
|
||||
serial_setup(dev, COM2_ADDR, COM2_IRQ);
|
||||
// TODO
|
||||
#if 0
|
||||
else if ((next_inst == 1) || (info->local == SERIAL_8250_PCJR_3F8))
|
||||
serial_setup(dev, COM1_ADDR, COM1_IRQ);
|
||||
#endif
|
||||
else if (next_inst == 0)
|
||||
serial_setup(dev, COM1_ADDR, COM1_IRQ);
|
||||
|
||||
/* Default to 1200,N,7. */
|
||||
dev->dlab = 96;
|
||||
dev->fcr = 0x06;
|
||||
if (info->local == SERIAL_8250_PCJR)
|
||||
if ((info->local == SERIAL_8250_PCJR_3F8) || (info->local == SERIAL_8250_PCJR_2F8))
|
||||
dev->clock_src = 1789500.0;
|
||||
else
|
||||
dev->clock_src = 1843200.0;
|
||||
@@ -1039,11 +1044,25 @@ const device_t ns8250_device = {
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t ns8250_pcjr_device = {
|
||||
.name = "National Semiconductor 8250(-compatible) UART for PCjr",
|
||||
.internal_name = "ns8250_pcjr",
|
||||
const device_t ns8250_pcjr_3f8_device = {
|
||||
.name = "National Semiconductor 8250(-compatible) UART for PCjr (0x3f8)",
|
||||
.internal_name = "ns8250_pcjr_3f8",
|
||||
.flags = 0,
|
||||
.local = SERIAL_8250_PCJR,
|
||||
.local = SERIAL_8250_PCJR_3F8,
|
||||
.init = serial_init,
|
||||
.close = serial_close,
|
||||
.reset = serial_reset,
|
||||
.available = NULL,
|
||||
.speed_changed = serial_speed_changed,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t ns8250_pcjr_2f8_device = {
|
||||
.name = "National Semiconductor 8250(-compatible) UART for PCjr (0x2f8)",
|
||||
.internal_name = "ns8250_pcjr_2f8",
|
||||
.flags = 0,
|
||||
.local = SERIAL_8250_PCJR_2F8,
|
||||
.init = serial_init,
|
||||
.close = serial_close,
|
||||
.reset = serial_reset,
|
||||
|
||||
@@ -88,27 +88,52 @@ static const joystick_t joystick_none = {
|
||||
static const struct {
|
||||
const joystick_t *joystick;
|
||||
} joysticks[] = {
|
||||
{ &joystick_none },
|
||||
{ &joystick_2axis_2button },
|
||||
{ &joystick_2button_gamepad },
|
||||
{ &joystick_2button_flight_yoke },
|
||||
{ &joystick_2axis_4button },
|
||||
{ &joystick_4button_gamepad },
|
||||
{ &joystick_4button_flight_yoke },
|
||||
{ &joystick_2axis_6button },
|
||||
{ &joystick_2axis_8button },
|
||||
{ &joystick_3axis_2button },
|
||||
{ &joystick_2button_yoke_throttle },
|
||||
{ &joystick_3axis_4button },
|
||||
{ &joystick_steering_wheel_4_button },
|
||||
{ &joystick_4button_yoke_throttle },
|
||||
{ &joystick_4axis_4button },
|
||||
{ &joystick_ch_flightstick_pro },
|
||||
{ &joystick_ch_flightstick_pro_ch_pedals },
|
||||
{ &joystick_sw_pad },
|
||||
{ &joystick_tm_fcs },
|
||||
{ &joystick_tm_fcs_rcs },
|
||||
{ NULL }
|
||||
{ &joystick_none },
|
||||
{ &joystick_generic_paddle },
|
||||
{ &joystick_2axis_1button },
|
||||
{ &joystick_2axis_2button },
|
||||
{ &joystick_2axis_3button },
|
||||
{ &joystick_2axis_4button },
|
||||
{ &joystick_2axis_6button },
|
||||
{ &joystick_2axis_8button },
|
||||
{ &joystick_3axis_2button },
|
||||
{ &joystick_3axis_3button },
|
||||
{ &joystick_3axis_4button },
|
||||
{ &joystick_4axis_2button },
|
||||
{ &joystick_4axis_3button },
|
||||
{ &joystick_4axis_4button },
|
||||
{ &joystick_2button_gamepad },
|
||||
{ &joystick_3button_gamepad },
|
||||
{ &joystick_4button_gamepad },
|
||||
{ &joystick_6button_gamepad },
|
||||
{ &joystick_gravis_gamepad },
|
||||
{ &joystick_2button_flight_yoke },
|
||||
{ &joystick_3button_flight_yoke },
|
||||
{ &joystick_4button_flight_yoke },
|
||||
{ &joystick_2button_yoke_throttle },
|
||||
{ &joystick_3button_yoke_throttle },
|
||||
{ &joystick_4button_yoke_throttle },
|
||||
{ &joystick_steering_wheel_2_button },
|
||||
{ &joystick_steering_wheel_3_button },
|
||||
{ &joystick_steering_wheel_4_button },
|
||||
{ &joystick_ch_flightstick },
|
||||
{ &joystick_ch_flightstick_ch_pedals },
|
||||
{ &joystick_ch_flightstick_ch_pedals_pro },
|
||||
{ &joystick_ch_flightstick_pro },
|
||||
{ &joystick_ch_flightstick_pro_ch_pedals },
|
||||
{ &joystick_ch_flightstick_pro_ch_pedals_pro },
|
||||
{ &joystick_ch_virtual_pilot },
|
||||
{ &joystick_ch_virtual_pilot_ch_pedals },
|
||||
{ &joystick_ch_virtual_pilot_ch_pedals_pro },
|
||||
{ &joystick_ch_virtual_pilot_pro },
|
||||
{ &joystick_ch_virtual_pilot_pro_ch_pedals },
|
||||
{ &joystick_ch_virtual_pilot_pro_ch_pedals_pro },
|
||||
{ &joystick_sw_pad },
|
||||
{ &joystick_tm_fcs },
|
||||
{ &joystick_tm_fcs_rcs },
|
||||
{ &joystick_tm_formula_t1t2 },
|
||||
{ &joystick_tm_formula_t1t2wa },
|
||||
{ NULL }
|
||||
};
|
||||
|
||||
static joystick_instance_t *joystick_instance[GAMEPORT_MAX] = { NULL, NULL };
|
||||
|
||||
@@ -44,18 +44,7 @@
|
||||
#include <86box/timer.h>
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/plat_unused.h>
|
||||
|
||||
static void *
|
||||
ch_flightstick_pro_init(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
ch_flightstick_pro_close(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
#include <86box/joystick.h>
|
||||
|
||||
static uint8_t
|
||||
ch_flightstick_pro_read(UNUSED(void *priv))
|
||||
@@ -72,114 +61,299 @@ ch_flightstick_pro_read(UNUSED(void *priv))
|
||||
ret &= ~0x40;
|
||||
if (joystick_state[gp][0].button[3])
|
||||
ret &= ~0x80;
|
||||
|
||||
// POV Hat
|
||||
if (joystick_state[gp][0].pov[0] != -1) {
|
||||
// POV Up
|
||||
if ((joystick_state[gp][0].pov[0] > 315) || (joystick_state[gp][0].pov[0] < 45))
|
||||
ret &= ~0xf0;
|
||||
ret &= ~0xf0; // 1, 2, 3, 4
|
||||
// POV Right
|
||||
else if ((joystick_state[gp][0].pov[0]) >= 45 && (joystick_state[gp][0].pov[0] < 135))
|
||||
ret &= ~0xb0;
|
||||
else if ((joystick_state[gp][0].pov[0] >= 45) && (joystick_state[gp][0].pov[0] < 135))
|
||||
ret &= ~0xb0; // 1, 2, 4
|
||||
// POV Down
|
||||
else if ((joystick_state[gp][0].pov[0]) >= 135 && (joystick_state[gp][0].pov[0] < 225))
|
||||
ret &= ~0x70;
|
||||
else if ((joystick_state[gp][0].pov[0] >= 135) && (joystick_state[gp][0].pov[0] < 225))
|
||||
ret &= ~0x70; // 1, 2, 3
|
||||
// POV Left
|
||||
else if ((joystick_state[gp][0].pov[0]) >= 225 && (joystick_state[gp][0].pov[0] < 315))
|
||||
ret &= ~0x30;
|
||||
else if ((joystick_state[gp][0].pov[0] >= 225) && (joystick_state[gp][0].pov[0] < 315))
|
||||
ret &= ~0x30; // 1, 2
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
ch_flightstick_pro_write(UNUSED(void *priv))
|
||||
static uint8_t
|
||||
ch_virtual_pilot_pro_read(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
uint8_t gp = 0;
|
||||
uint8_t ret = 0xf0;
|
||||
|
||||
static int
|
||||
ch_flightstick_pro_read_axis(UNUSED(void *priv), int axis)
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
if (JOYSTICK_PRESENT(gp, 0)) {
|
||||
if (joystick_state[gp][0].button[0]) // 1
|
||||
ret &= ~0x10;
|
||||
if (joystick_state[gp][0].button[1]) // 2
|
||||
ret &= ~0x20;
|
||||
if (joystick_state[gp][0].button[2]) // 3
|
||||
ret &= ~0x40;
|
||||
if (joystick_state[gp][0].button[3]) // 4
|
||||
ret &= ~0x80;
|
||||
if (joystick_state[gp][0].button[4]) // 1, 3
|
||||
ret &= ~0x50;
|
||||
if (joystick_state[gp][0].button[5]) // 1, 4
|
||||
ret &= ~0x90;
|
||||
|
||||
if (!JOYSTICK_PRESENT(gp, 0))
|
||||
return AXIS_NOT_PRESENT;
|
||||
// Right POV Hat
|
||||
uint8_t pov_id = 0;
|
||||
|
||||
switch (axis) {
|
||||
case 0:
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 1:
|
||||
return joystick_state[gp][0].axis[1];
|
||||
case 2:
|
||||
return 0;
|
||||
case 3:
|
||||
return joystick_state[gp][0].axis[2];
|
||||
default:
|
||||
return 0;
|
||||
if (joystick_state[gp][0].pov[pov_id] != -1) {
|
||||
// POV Up
|
||||
if ((joystick_state[gp][0].pov[pov_id] > 315) || (joystick_state[gp][0].pov[pov_id] < 45))
|
||||
ret &= ~0xf0; // 1, 2, 3, 4
|
||||
// POV Right
|
||||
else if ((joystick_state[gp][0].pov[pov_id] >= 45) && (joystick_state[gp][0].pov[pov_id] < 135))
|
||||
ret &= ~0xb0; // 1, 2, 4
|
||||
// POV Down
|
||||
else if ((joystick_state[gp][0].pov[pov_id] >= 135) && (joystick_state[gp][0].pov[pov_id] < 225))
|
||||
ret &= ~0x70; // 1, 2, 3
|
||||
// POV Left
|
||||
else if ((joystick_state[gp][0].pov[pov_id] >= 225) && (joystick_state[gp][0].pov[pov_id] < 315))
|
||||
ret &= ~0x30; // 1, 2
|
||||
}
|
||||
|
||||
// Left POV Hat
|
||||
pov_id = 1;
|
||||
|
||||
if (joystick_state[gp][0].pov[pov_id] != -1) {
|
||||
// POV Up
|
||||
if ((joystick_state[gp][0].pov[pov_id] > 315) || (joystick_state[gp][0].pov[pov_id] < 45))
|
||||
ret &= ~0xe0; // 2, 3, 4
|
||||
// POV Right
|
||||
else if ((joystick_state[gp][0].pov[pov_id] >= 45) && (joystick_state[gp][0].pov[pov_id] < 135))
|
||||
ret &= ~0xa0; // 2, 4
|
||||
// POV Down
|
||||
else if ((joystick_state[gp][0].pov[pov_id] >= 135) && (joystick_state[gp][0].pov[pov_id] < 225))
|
||||
ret &= ~0x60; // 2, 3
|
||||
// POV Left
|
||||
else if ((joystick_state[gp][0].pov[pov_id] >= 225) && (joystick_state[gp][0].pov[pov_id] < 315))
|
||||
ret &= ~0xc0; // 3, 4
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
ch_flightstick_pro_ch_pedals_read_axis(UNUSED(void *priv), int axis)
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
const joystick_t joystick_ch_flightstick = {
|
||||
.name = "CH Flightstick",
|
||||
.internal_name = "ch_flightstick",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" },
|
||||
.button_names = { "Trigger", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
if (!JOYSTICK_PRESENT(gp, 0))
|
||||
return AXIS_NOT_PRESENT;
|
||||
const joystick_t joystick_ch_flightstick_ch_pedals = {
|
||||
.name = "CH Flightstick + CH Pedals",
|
||||
.internal_name = "ch_flightstick_ch_pedals",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" },
|
||||
.button_names = { "Trigger", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
switch (axis) {
|
||||
case 0:
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 1:
|
||||
return joystick_state[gp][0].axis[1];
|
||||
case 2:
|
||||
return joystick_state[gp][0].axis[3];
|
||||
case 3:
|
||||
return joystick_state[gp][0].axis[2];
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
ch_flightstick_pro_a0_over(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
const joystick_t joystick_ch_flightstick_ch_pedals_pro = {
|
||||
.name = "CH Flightstick + CH Pedals Pro",
|
||||
.internal_name = "ch_flightstick_ch_pedals_pro",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Left Pedal", "Right Pedal" },
|
||||
.button_names = { "Trigger", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_flightstick_pro = {
|
||||
.name = "CH Flightstick Pro",
|
||||
.internal_name = "ch_flightstick_pro",
|
||||
.init = ch_flightstick_pro_init,
|
||||
.close = ch_flightstick_pro_close,
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = ch_flightstick_pro_read,
|
||||
.write = ch_flightstick_pro_write,
|
||||
.read_axis = ch_flightstick_pro_read_axis,
|
||||
.a0_over = ch_flightstick_pro_a0_over,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 4,
|
||||
.pov_count = 1,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Throttle" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { "POV" }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_flightstick_pro_ch_pedals = {
|
||||
.name = "CH Flightstick Pro + CH Pedals",
|
||||
.internal_name = "ch_flightstick_pro_ch_pedals",
|
||||
.init = ch_flightstick_pro_init,
|
||||
.close = ch_flightstick_pro_close,
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = ch_flightstick_pro_read,
|
||||
.write = ch_flightstick_pro_write,
|
||||
.read_axis = ch_flightstick_pro_ch_pedals_read_axis,
|
||||
.a0_over = ch_flightstick_pro_a0_over,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 4,
|
||||
.pov_count = 1,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Throttle", "Rudder" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { "POV" }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_flightstick_pro_ch_pedals_pro = {
|
||||
.name = "CH Flightstick Pro + CH Pedals Pro",
|
||||
.internal_name = "ch_flightstick_pro_ch_pedals_pro",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = ch_flightstick_pro_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 4,
|
||||
.pov_count = 1,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Left Pedal", "Right Pedal" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { "POV" }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_virtual_pilot = {
|
||||
.name = "CH Virtual Pilot",
|
||||
.internal_name = "ch_virtual_pilot",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_virtual_pilot_ch_pedals = {
|
||||
.name = "CH Virtual Pilot + CH Pedals",
|
||||
.internal_name = "ch_virtual_pilot_ch_pedals",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_virtual_pilot_ch_pedals_pro = {
|
||||
.name = "CH Virtual Pilot + CH Pedals Pro",
|
||||
.internal_name = "ch_virtual_pilot_ch_pedals_pro",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Left Pedal", "Right Pedal" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_virtual_pilot_pro = {
|
||||
.name = "CH Virtual Pilot Pro",
|
||||
.internal_name = "ch_virtual_pilot_pro",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = ch_virtual_pilot_pro_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 6,
|
||||
.pov_count = 2,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" },
|
||||
.pov_names = { "Right POV", "Left POV" }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals = {
|
||||
.name = "CH Virtual Pilot Pro + CH Pedals",
|
||||
.internal_name = "ch_virtual_pilot_pro_ch_pedals",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = ch_virtual_pilot_pro_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 6,
|
||||
.pov_count = 2,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Throttle", "Rudder (Yaw)" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" },
|
||||
.pov_names = { "Right POV", "Left POV" }
|
||||
};
|
||||
|
||||
const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals_pro = {
|
||||
.name = "CH Virtual Pilot Pro + CH Pedals Pro",
|
||||
.internal_name = "ch_virtual_pilot_pro_ch_pedals_pro",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = ch_virtual_pilot_pro_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 6,
|
||||
.pov_count = 2,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis (Roll)", "Y axis (Pitch)", "Left Pedal", "Right Pedal" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" },
|
||||
.pov_names = { "Right POV", "Left POV" }
|
||||
};
|
||||
|
||||
@@ -45,18 +45,39 @@
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/plat_unused.h>
|
||||
|
||||
static void *
|
||||
void *
|
||||
joystick_standard_init(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
joystick_standard_close(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
joystick_paddle_read(UNUSED(void *priv))
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
uint8_t ret = 0xf0;
|
||||
|
||||
if ((JOYSTICK_PRESENT(gp, 0)) && (joystick_state[gp][0].button[0]))
|
||||
ret &= ~0x10;
|
||||
|
||||
if ((JOYSTICK_PRESENT(gp, 2)) && (joystick_state[gp][2].button[0]))
|
||||
ret &= ~0x20;
|
||||
|
||||
if ((JOYSTICK_PRESENT(gp, 1)) && (joystick_state[gp][1].button[0]))
|
||||
ret &= ~0x40;
|
||||
|
||||
if ((JOYSTICK_PRESENT(gp, 3)) && (joystick_state[gp][3].button[0]))
|
||||
ret &= ~0x80;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
joystick_standard_read(UNUSED(void *priv))
|
||||
{
|
||||
@@ -80,7 +101,41 @@ joystick_standard_read(UNUSED(void *priv))
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
joystick_standard_read_2button(UNUSED(void *priv))
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
uint8_t ret = 0xf0;
|
||||
|
||||
if (JOYSTICK_PRESENT(gp, 0)) {
|
||||
if (joystick_state[gp][0].button[0])
|
||||
ret &= ~0x10;
|
||||
if (joystick_state[gp][0].button[1])
|
||||
ret &= ~0x20;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
joystick_standard_read_3button(UNUSED(void *priv))
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
uint8_t ret = 0xf0;
|
||||
|
||||
if (JOYSTICK_PRESENT(gp, 0)) {
|
||||
if (joystick_state[gp][0].button[0])
|
||||
ret &= ~0x10;
|
||||
if (joystick_state[gp][0].button[1])
|
||||
ret &= ~0x20;
|
||||
if (joystick_state[gp][0].button[2])
|
||||
ret &= ~0x40;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
joystick_standard_read_4button(UNUSED(void *priv))
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
@@ -100,12 +155,39 @@ joystick_standard_read_4button(UNUSED(void *priv))
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
joystick_standard_write(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
static int
|
||||
joystick_paddle_read_axis(UNUSED(void *priv), int axis)
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
|
||||
switch (axis) {
|
||||
case 0:
|
||||
if (!JOYSTICK_PRESENT(gp, 0))
|
||||
return AXIS_NOT_PRESENT;
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 1:
|
||||
if (!JOYSTICK_PRESENT(gp, 2))
|
||||
return AXIS_NOT_PRESENT;
|
||||
return joystick_state[gp][2].axis[0];
|
||||
case 2:
|
||||
if (!JOYSTICK_PRESENT(gp, 1))
|
||||
return AXIS_NOT_PRESENT;
|
||||
return joystick_state[gp][1].axis[0];
|
||||
case 3:
|
||||
if (!JOYSTICK_PRESENT(gp, 3))
|
||||
return AXIS_NOT_PRESENT;
|
||||
return joystick_state[gp][3].axis[0];
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
joystick_standard_read_axis(UNUSED(void *priv), int axis)
|
||||
{
|
||||
@@ -134,7 +216,7 @@ joystick_standard_read_axis(UNUSED(void *priv), int axis)
|
||||
}
|
||||
|
||||
static int
|
||||
joystick_standard_read_axis_4button(UNUSED(void *priv), int axis)
|
||||
joystick_standard_read_axis_2axis(UNUSED(void *priv), int axis)
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
|
||||
@@ -153,6 +235,26 @@ joystick_standard_read_axis_4button(UNUSED(void *priv), int axis)
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
joystick_standard_read_axis_2axis_t1t2wa(UNUSED(void *priv), int axis)
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
|
||||
if (!JOYSTICK_PRESENT(gp, 0))
|
||||
return AXIS_NOT_PRESENT;
|
||||
|
||||
switch (axis) {
|
||||
case 0:
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 2:
|
||||
return joystick_state[gp][0].axis[1];
|
||||
case 1:
|
||||
case 3:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
// For later use
|
||||
static int
|
||||
@@ -168,7 +270,7 @@ joystick_standard_read_axis_with_pov(UNUSED(void *priv), int axis)
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 1: // Y-axis
|
||||
return joystick_state[gp][0].axis[1];
|
||||
case 2: // POV Hat (mapped to the 3rd logical axis, index 2)
|
||||
case 2: // POV Hat
|
||||
if (joystick_state[gp][0].pov[0] == -1)
|
||||
return 32767; // Centered/No input (as per tm_fcs_rcs_read_axis example)
|
||||
if (joystick_state[gp][0].pov[0] > 315 || joystick_state[gp][0].pov[0] < 45)
|
||||
@@ -179,9 +281,8 @@ joystick_standard_read_axis_with_pov(UNUSED(void *priv), int axis)
|
||||
return 0; // Right/Left (example, matches tm_fcs_rcs_read_axis)
|
||||
if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315)
|
||||
return 16384; // Down-Left (example value, matches tm_fcs_rcs_read_axis)
|
||||
return 0; // Fallback
|
||||
case 3: // This case might be used for a Z-axis if present, or can return 0 if not.
|
||||
// For gamepads with only X/Y and POV, this will likely be unused or return 0.
|
||||
return 0;
|
||||
case 3:
|
||||
return 0;
|
||||
default:
|
||||
return 0;
|
||||
@@ -202,15 +303,36 @@ joystick_standard_read_axis_3axis(UNUSED(void *priv), int axis)
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 1:
|
||||
return joystick_state[gp][0].axis[1];
|
||||
case 2:
|
||||
case 2: // Rudder Axis
|
||||
return joystick_state[gp][0].axis[2];
|
||||
case 3:
|
||||
case 3: // Throttle Axis
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
int
|
||||
joystick_standard_read_axis_3axis_throttle(UNUSED(void *priv), int axis)
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
|
||||
if (!JOYSTICK_PRESENT(gp, 0))
|
||||
return AXIS_NOT_PRESENT;
|
||||
|
||||
switch (axis) {
|
||||
case 0:
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 1:
|
||||
return joystick_state[gp][0].axis[1];
|
||||
case 3: // Throttle Axis
|
||||
return joystick_state[gp][0].axis[2];
|
||||
case 2: // Rudder Axis
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
joystick_standard_read_axis_4axis(UNUSED(void *priv), int axis)
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
@@ -223,10 +345,10 @@ joystick_standard_read_axis_4axis(UNUSED(void *priv), int axis)
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 1:
|
||||
return joystick_state[gp][0].axis[1];
|
||||
case 2:
|
||||
return joystick_state[gp][0].axis[2];
|
||||
case 3:
|
||||
case 2: // Rudder Axis
|
||||
return joystick_state[gp][0].axis[3];
|
||||
case 3: // Throttle Axis
|
||||
return joystick_state[gp][0].axis[2];
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@@ -283,12 +405,48 @@ joystick_standard_read_axis_8button(UNUSED(void *priv), int axis)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
void
|
||||
joystick_standard_a0_over(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
const joystick_t joystick_generic_paddle = {
|
||||
.name = "Generic paddle controller(s)",
|
||||
.internal_name = "generic_paddle",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_paddle_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_paddle_read_axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 1,
|
||||
.button_count = 1,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 4,
|
||||
.axis_names = { "X axis" },
|
||||
.button_names = { "Button 1" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2axis_1button = {
|
||||
.name = "2-axis, 1-button joystick(s)",
|
||||
.internal_name = "2axis_1button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 1,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 2,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
.button_names = { "Button 1" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2axis_2button = {
|
||||
.name = "2-axis, 2-button joystick(s)",
|
||||
.internal_name = "2axis_2button",
|
||||
@@ -307,39 +465,21 @@ const joystick_t joystick_2axis_2button = {
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2button_gamepad = {
|
||||
.name = "2-button gamepad(s)",
|
||||
.internal_name = "2button_gamepad",
|
||||
const joystick_t joystick_2axis_3button = {
|
||||
.name = "2-axis, 3-button joystick",
|
||||
.internal_name = "2axis_3button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read,
|
||||
.read = joystick_standard_read_3button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis,
|
||||
.read_axis = joystick_standard_read_axis_2axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 2,
|
||||
.button_count = 3,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 2,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2button_flight_yoke = {
|
||||
.name = "2-button flight yoke",
|
||||
.internal_name = "2button_flight_yoke",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 2,
|
||||
.axis_names = { "Roll axis", "Pitch axis" },
|
||||
.button_names = { "Trigger", "Button 2" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
@@ -350,7 +490,7 @@ const joystick_t joystick_2axis_4button = {
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4button,
|
||||
.read_axis = joystick_standard_read_axis_2axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
@@ -361,150 +501,6 @@ const joystick_t joystick_2axis_4button = {
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4button_gamepad = {
|
||||
.name = "4-button gamepad",
|
||||
.internal_name = "4button_gamepad",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4button,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4button_flight_yoke = {
|
||||
.name = "4-button flight yoke",
|
||||
.internal_name = "4button_flight_yoke",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4button,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Roll axis", "Pitch axis" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_3axis_2button = {
|
||||
.name = "3-axis, 2-button joystick",
|
||||
.internal_name = "3axis_2button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2button_yoke_throttle = {
|
||||
.name = "2-button flight yoke with throttle",
|
||||
.internal_name = "2button_yoke_throttle",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Roll axis", "Pitch axis", "Throttle axis" },
|
||||
.button_names = { "Trigger", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_3axis_4button = {
|
||||
.name = "3-axis, 4-button joystick",
|
||||
.internal_name = "3axis_4button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4button_yoke_throttle = {
|
||||
.name = "4-button flight yoke with throttle",
|
||||
.internal_name = "4button_yoke_throttle",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Roll axis", "Pitch axis", "Throttle axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_steering_wheel_4_button = {
|
||||
.name = "Steering Wheel (3-axis, 4-button)",
|
||||
.internal_name = "steering_wheel_4_button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Steering axis", "Accelerator axis", "Brake axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4axis_4button = {
|
||||
.name = "4-axis, 4-button joystick",
|
||||
.internal_name = "4axis_4button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis", "zX axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2axis_6button = {
|
||||
.name = "2-axis, 6-button joystick",
|
||||
.internal_name = "2axis_6button",
|
||||
@@ -540,3 +536,401 @@ const joystick_t joystick_2axis_8button = {
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6", "Button 7", "Button 8" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_3axis_2button = {
|
||||
.name = "3-axis, 2-button joystick",
|
||||
.internal_name = "3axis_2button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_3axis_3button = {
|
||||
.name = "3-axis, 3-button joystick",
|
||||
.internal_name = "3axis_3button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_3button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 3,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_3axis_4button = {
|
||||
.name = "3-axis, 4-button joystick",
|
||||
.internal_name = "3axis_4button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4axis_2button = {
|
||||
.name = "4-axis, 2-button joystick",
|
||||
.internal_name = "4axis_2button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis", "zX axis" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4axis_3button = {
|
||||
.name = "4-axis, 3-button joystick",
|
||||
.internal_name = "4axis_3button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_3button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 3,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis", "zX axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4axis_4button = {
|
||||
.name = "4-axis, 4-button joystick",
|
||||
.internal_name = "4axis_4button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_4axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 4,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Z axis", "zX axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2button_gamepad = {
|
||||
.name = "2-button gamepad(s)",
|
||||
.internal_name = "2button_gamepad",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 2,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_3button_gamepad = {
|
||||
.name = "3-button gamepad",
|
||||
.internal_name = "3button_gamepad",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_3button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_2axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 3,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4button_gamepad = {
|
||||
.name = "4-button gamepad",
|
||||
.internal_name = "4button_gamepad",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_2axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_6button_gamepad = {
|
||||
.name = "6-button gamepad",
|
||||
.internal_name = "6button_gamepad",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_6button,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 6,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4", "Button 5", "Button 6" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_gravis_gamepad = {
|
||||
.name = "Gravis PC GamePad",
|
||||
.internal_name = "gravis_gamepad",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_2axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
// TODO: Check this
|
||||
.button_names = { "Button 1 (Red)", "Button 2 (Blue)", "Button 3 (Yellow)", "Button 4 (Green)" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2button_flight_yoke = {
|
||||
.name = "2-button flight yoke",
|
||||
.internal_name = "2button_flight_yoke",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 2,
|
||||
.axis_names = { "Roll axis", "Pitch axis" },
|
||||
.button_names = { "Trigger", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_3button_flight_yoke = {
|
||||
.name = "3-button flight yoke",
|
||||
.internal_name = "3button_flight_yoke",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_3button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_2axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 3,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Roll axis", "Pitch axis" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4button_flight_yoke = {
|
||||
.name = "4-button flight yoke",
|
||||
.internal_name = "4button_flight_yoke",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_2axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Roll axis", "Pitch axis" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_2button_yoke_throttle = {
|
||||
.name = "2-button flight yoke with throttle",
|
||||
.internal_name = "2button_yoke_throttle",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Roll axis", "Pitch axis", "Throttle axis" },
|
||||
.button_names = { "Trigger", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_3button_yoke_throttle = {
|
||||
.name = "3-button flight yoke with throttle",
|
||||
.internal_name = "3button_yoke_throttle",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_3button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 3,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Roll axis", "Pitch axis", "Throttle axis" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_4button_yoke_throttle = {
|
||||
.name = "4-button flight yoke with throttle",
|
||||
.internal_name = "4button_yoke_throttle",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis_throttle,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Roll axis", "Pitch axis", "Throttle axis" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_steering_wheel_2_button = {
|
||||
.name = "Steering wheel (3-axis, 2-button)",
|
||||
.internal_name = "steering_wheel_2_button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_2button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 2,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Steering axis", "Accelerator axis", "Brake axis" },
|
||||
.button_names = { "Button 1", "Button 2" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_steering_wheel_3_button = {
|
||||
.name = "Steering wheel (3-axis, 3-button)",
|
||||
.internal_name = "steering_wheel_3_button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_3button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 3,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Steering axis", "Accelerator axis", "Brake axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_steering_wheel_4_button = {
|
||||
.name = "Steering wheel (3-axis, 4-button)",
|
||||
.internal_name = "steering_wheel_4_button",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_3axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Steering axis", "Accelerator axis", "Brake axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
const joystick_t joystick_tm_formula_t1t2 = {
|
||||
.name = "Thrustmaster Formula T1/T2 with adapter",
|
||||
.internal_name = "thrustmaster_formula_t1t2",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_2axis,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Steering axis", "Accelerator/Brake axis" },
|
||||
.button_names = { "Shifter Up", "Shifter Down", "Top Console Switch", "Bottom Console Switch" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
// TODO Validate this
|
||||
const joystick_t joystick_tm_formula_t1t2wa = {
|
||||
.name = "Thrustmaster Formula T1/T2 without adapter",
|
||||
.internal_name = "thrustmaster_formula_t1t2wa",
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = joystick_standard_read_axis_2axis_t1t2wa,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
.pov_count = 0,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "Steering axis", "Accelerator/Brake axis" },
|
||||
.button_names = { "Shifter Up", "Shifter Down", "Top Console Switch", "Bottom Console Switch" },
|
||||
.pov_names = { NULL }
|
||||
};
|
||||
|
||||
@@ -44,44 +44,7 @@
|
||||
#include <86box/timer.h>
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/plat_unused.h>
|
||||
|
||||
static void *
|
||||
tm_fcs_init(void)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
tm_fcs_close(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
tm_fcs_read(UNUSED(void *priv))
|
||||
{
|
||||
uint8_t gp = 0;
|
||||
uint8_t ret = 0xf0;
|
||||
|
||||
if (JOYSTICK_PRESENT(gp, 0)) {
|
||||
if (joystick_state[gp][0].button[0])
|
||||
ret &= ~0x10;
|
||||
if (joystick_state[gp][0].button[1])
|
||||
ret &= ~0x20;
|
||||
if (joystick_state[gp][0].button[2])
|
||||
ret &= ~0x40;
|
||||
if (joystick_state[gp][0].button[3])
|
||||
ret &= ~0x80;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
tm_fcs_write(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
#include <86box/joystick.h>
|
||||
|
||||
static int
|
||||
tm_fcs_read_axis(UNUSED(void *priv), int axis)
|
||||
@@ -96,8 +59,6 @@ tm_fcs_read_axis(UNUSED(void *priv), int axis)
|
||||
return joystick_state[gp][0].axis[0];
|
||||
case 1:
|
||||
return joystick_state[gp][0].axis[1];
|
||||
case 2:
|
||||
return 0;
|
||||
case 3:
|
||||
if (joystick_state[gp][0].pov[0] == -1)
|
||||
return 32767;
|
||||
@@ -110,6 +71,7 @@ tm_fcs_read_axis(UNUSED(void *priv), int axis)
|
||||
if (joystick_state[gp][0].pov[0] >= 225 && joystick_state[gp][0].pov[0] < 315)
|
||||
return 16384;
|
||||
return 0;
|
||||
case 2:
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
@@ -147,44 +109,38 @@ tm_fcs_rcs_read_axis(UNUSED(void *priv), int axis)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
tm_fcs_a0_over(UNUSED(void *priv))
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
const joystick_t joystick_tm_fcs = {
|
||||
.name = "Thrustmaster Flight Control System",
|
||||
.internal_name = "thrustmaster_fcs",
|
||||
.init = tm_fcs_init,
|
||||
.close = tm_fcs_close,
|
||||
.read = tm_fcs_read,
|
||||
.write = tm_fcs_write,
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = tm_fcs_read_axis,
|
||||
.a0_over = tm_fcs_a0_over,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 2,
|
||||
.button_count = 4,
|
||||
.pov_count = 1,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { "POV" }
|
||||
};
|
||||
|
||||
const joystick_t joystick_tm_fcs_rcs = {
|
||||
.name = "Thrustmaster FCS + Rudder Control System",
|
||||
.internal_name = "thrustmaster_fcs_rcs",
|
||||
.init = tm_fcs_init,
|
||||
.close = tm_fcs_close,
|
||||
.read = tm_fcs_read,
|
||||
.write = tm_fcs_write,
|
||||
.init = joystick_standard_init,
|
||||
.close = joystick_standard_close,
|
||||
.read = joystick_standard_read_4button,
|
||||
.write = joystick_standard_write,
|
||||
.read_axis = tm_fcs_rcs_read_axis,
|
||||
.a0_over = tm_fcs_a0_over,
|
||||
.a0_over = joystick_standard_a0_over,
|
||||
.axis_count = 3,
|
||||
.button_count = 4,
|
||||
.pov_count = 1,
|
||||
.max_joysticks = 1,
|
||||
.axis_names = { "X axis", "Y axis", "Rudder" },
|
||||
.button_names = { "Button 1", "Button 2", "Button 3", "Button 4" },
|
||||
.button_names = { "Trigger", "Button 2", "Button 3", "Button 4" },
|
||||
.pov_names = { "POV" }
|
||||
};
|
||||
|
||||
@@ -213,7 +213,7 @@ extern uint8_t device_get_bios_type(const device_t *dev, const char *interna
|
||||
extern uint8_t device_get_bios_num_files(const device_t *dev, const char *internal_name);
|
||||
extern uint32_t device_get_bios_local(const device_t *dev, const char *internal_name);
|
||||
extern uint32_t device_get_bios_file_size(const device_t *dev, const char *internal_name);
|
||||
extern const char *device_get_bios_file(const device_t *dev, const char *internal_name, int file_no);
|
||||
extern const char *device_get_bios_file(const device_t *dev, const char *internal_name, unsigned int file_no);
|
||||
|
||||
extern int device_is_valid(const device_t *, int mch);
|
||||
|
||||
|
||||
@@ -172,29 +172,73 @@ extern void gameport_update_joystick_type(uint8_t gp);
|
||||
extern void gameport_remap(void *priv, uint16_t address);
|
||||
extern void *gameport_add(const device_t *gameport_type);
|
||||
|
||||
// Paddle Controllers
|
||||
extern const joystick_t joystick_generic_paddle;
|
||||
|
||||
// 2 axis Generic Joysticks
|
||||
extern const joystick_t joystick_2axis_1button;
|
||||
extern const joystick_t joystick_2axis_2button;
|
||||
extern const joystick_t joystick_2button_gamepad;
|
||||
extern const joystick_t joystick_2button_flight_yoke;
|
||||
extern const joystick_t joystick_2axis_3button;
|
||||
extern const joystick_t joystick_2axis_4button;
|
||||
extern const joystick_t joystick_4button_gamepad;
|
||||
extern const joystick_t joystick_4button_flight_yoke;
|
||||
extern const joystick_t joystick_3axis_2button;
|
||||
extern const joystick_t joystick_2button_yoke_throttle;
|
||||
extern const joystick_t joystick_3axis_4button;
|
||||
extern const joystick_t joystick_4button_yoke_throttle;
|
||||
extern const joystick_t joystick_steering_wheel_4_button;
|
||||
extern const joystick_t joystick_4axis_4button;
|
||||
extern const joystick_t joystick_2axis_6button;
|
||||
extern const joystick_t joystick_2axis_8button;
|
||||
|
||||
// 3 axis Generic Joysticks
|
||||
extern const joystick_t joystick_3axis_2button;
|
||||
extern const joystick_t joystick_3axis_3button;
|
||||
extern const joystick_t joystick_3axis_4button;
|
||||
|
||||
// 4 axis Generic Joysticks
|
||||
extern const joystick_t joystick_4axis_2button;
|
||||
extern const joystick_t joystick_4axis_3button;
|
||||
extern const joystick_t joystick_4axis_4button;
|
||||
|
||||
// Generic Gamepads
|
||||
extern const joystick_t joystick_2button_gamepad;
|
||||
extern const joystick_t joystick_3button_gamepad;
|
||||
extern const joystick_t joystick_4button_gamepad;
|
||||
extern const joystick_t joystick_6button_gamepad;
|
||||
|
||||
extern const joystick_t joystick_gravis_gamepad;
|
||||
|
||||
// Generic Steering Wheels
|
||||
extern const joystick_t joystick_steering_wheel_2_button;
|
||||
extern const joystick_t joystick_steering_wheel_3_button;
|
||||
extern const joystick_t joystick_steering_wheel_4_button;
|
||||
|
||||
// Generic Flight Yokes
|
||||
extern const joystick_t joystick_2button_flight_yoke;
|
||||
extern const joystick_t joystick_4button_flight_yoke;
|
||||
extern const joystick_t joystick_3button_flight_yoke;
|
||||
|
||||
extern const joystick_t joystick_2button_yoke_throttle;
|
||||
extern const joystick_t joystick_3button_yoke_throttle;
|
||||
extern const joystick_t joystick_4button_yoke_throttle;
|
||||
|
||||
extern const joystick_t joystick_ch_flightstick;
|
||||
extern const joystick_t joystick_ch_flightstick_ch_pedals;
|
||||
extern const joystick_t joystick_ch_flightstick_ch_pedals_pro;
|
||||
|
||||
extern const joystick_t joystick_ch_flightstick_pro;
|
||||
extern const joystick_t joystick_ch_flightstick_pro_ch_pedals;
|
||||
extern const joystick_t joystick_ch_flightstick_pro_ch_pedals_pro;
|
||||
|
||||
extern const joystick_t joystick_ch_virtual_pilot;
|
||||
extern const joystick_t joystick_ch_virtual_pilot_ch_pedals;
|
||||
extern const joystick_t joystick_ch_virtual_pilot_ch_pedals_pro;
|
||||
|
||||
extern const joystick_t joystick_ch_virtual_pilot_pro;
|
||||
extern const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals;
|
||||
extern const joystick_t joystick_ch_virtual_pilot_pro_ch_pedals_pro;
|
||||
|
||||
extern const joystick_t joystick_sw_pad;
|
||||
|
||||
extern const joystick_t joystick_tm_fcs;
|
||||
extern const joystick_t joystick_tm_fcs_rcs;
|
||||
|
||||
extern const joystick_t joystick_tm_formula_t1t2;
|
||||
extern const joystick_t joystick_tm_formula_t1t2wa;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
27
src/include/86box/joystick.h
Normal file
27
src/include/86box/joystick.h
Normal file
@@ -0,0 +1,27 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* Definitions for the analog joystick handlers.
|
||||
*
|
||||
* Authors: Jasmine Iwanek, <jriwanek@gmail.com>
|
||||
*
|
||||
* Copyright 2025 Jasmine Iwanek.
|
||||
*/
|
||||
#ifndef EMU_JOYSTICK_H
|
||||
#define EMU_JOYSTICK_H
|
||||
|
||||
void *joystick_standard_init(void);
|
||||
void joystick_standard_close(UNUSED(void *priv));
|
||||
uint8_t joystick_standard_read_2button(UNUSED(void *priv));
|
||||
uint8_t joystick_standard_read_4button(UNUSED(void *priv));
|
||||
void joystick_standard_write(UNUSED(void *priv));
|
||||
int joystick_standard_read_axis_3axis_throttle(UNUSED(void *priv), int axis);
|
||||
int joystick_standard_read_axis_4axis(UNUSED(void *priv), int axis);
|
||||
void joystick_standard_a0_over(UNUSED(void *priv));
|
||||
|
||||
#endif /*EMU_JOYSTICK_H*/
|
||||
@@ -66,6 +66,11 @@ typedef struct pcjr_s {
|
||||
int serial_pos;
|
||||
uint8_t pa;
|
||||
uint8_t pb;
|
||||
|
||||
uint8_t option_modem;
|
||||
uint8_t option_fdc;
|
||||
uint8_t option_ir;
|
||||
|
||||
pc_timer_t send_delay_timer;
|
||||
|
||||
} pcjr_t;
|
||||
|
||||
@@ -635,6 +635,9 @@ extern int machine_at_tandy4000_init(const machine_t *);
|
||||
extern int machine_at_ecs386v_init(const machine_t *);
|
||||
|
||||
/* OPTi 391 */
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t dataexpert386wb_device;
|
||||
#endif
|
||||
extern int machine_at_dataexpert386wb_init(const machine_t *);
|
||||
|
||||
/* OPTi 495SLC */
|
||||
@@ -866,6 +869,9 @@ extern const device_t v12p_device;
|
||||
#endif
|
||||
extern int machine_at_v12p_init(const machine_t *);
|
||||
extern int machine_at_excaliburpci_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t p5mp3_device;
|
||||
#endif
|
||||
extern int machine_at_p5mp3_init(const machine_t *);
|
||||
extern int machine_at_opti560l_init(const machine_t *);
|
||||
extern void machine_at_award_common_init(const machine_t *);
|
||||
@@ -964,6 +970,11 @@ extern const device_t p54tp4xe_device;
|
||||
#endif
|
||||
extern int machine_at_p54tp4xe_init(const machine_t *);
|
||||
extern int machine_at_exp8551_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t vectra52_device;
|
||||
#endif
|
||||
extern int machine_at_vectra52_init(const machine_t *);
|
||||
extern int machine_at_vectra500mt_init(const machine_t *);
|
||||
extern int machine_at_vectra54_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t thor_device;
|
||||
@@ -1051,6 +1062,9 @@ extern int machine_at_8500tvxa_init(const machine_t *);
|
||||
extern int machine_at_presario2240_init(const machine_t *);
|
||||
extern int machine_at_presario4500_init(const machine_t *);
|
||||
extern int machine_at_dellhannibalp_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t p5vxb_device;
|
||||
#endif
|
||||
extern int machine_at_p5vxb_init(const machine_t *);
|
||||
extern int machine_at_p55va_init(const machine_t *);
|
||||
extern int machine_at_gw2kte_init(const machine_t *);
|
||||
@@ -1213,6 +1227,9 @@ extern const device_t s1846_device;
|
||||
extern int machine_at_s1846_init(const machine_t *);
|
||||
|
||||
/* i440ZX */
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t vei8_device;
|
||||
#endif
|
||||
extern int machine_at_vei8_init(const machine_t *);
|
||||
extern int machine_at_ms6168_init(const machine_t *);
|
||||
extern int machine_at_borapro_init(const machine_t *);
|
||||
@@ -1240,6 +1257,9 @@ extern int machine_at_fw6400gx_init(const machine_t *);
|
||||
|
||||
/* m_at_slot1_socket370.c */
|
||||
/* i440BX */
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t prosignias31x_device;
|
||||
#endif
|
||||
extern int machine_at_prosignias31x_bx_init(const machine_t *);
|
||||
extern int machine_at_s1857_init(const machine_t *);
|
||||
|
||||
|
||||
@@ -20,14 +20,15 @@
|
||||
#ifndef EMU_SERIAL_H
|
||||
#define EMU_SERIAL_H
|
||||
|
||||
#define SERIAL_8250 0
|
||||
#define SERIAL_8250_PCJR 1
|
||||
#define SERIAL_16450 2
|
||||
#define SERIAL_16550 3
|
||||
#define SERIAL_16650 4
|
||||
#define SERIAL_16750 5
|
||||
#define SERIAL_16850 6
|
||||
#define SERIAL_16950 7
|
||||
#define SERIAL_8250 0
|
||||
#define SERIAL_8250_PCJR_3F8 1
|
||||
#define SERIAL_8250_PCJR_2F8 2
|
||||
#define SERIAL_16450 3
|
||||
#define SERIAL_16550 4
|
||||
#define SERIAL_16650 5
|
||||
#define SERIAL_16750 6
|
||||
#define SERIAL_16850 7
|
||||
#define SERIAL_16950 8
|
||||
|
||||
#define SERIAL_FIFO_SIZE 16
|
||||
|
||||
@@ -151,7 +152,8 @@ extern int serial_get_ri(serial_t *dev);
|
||||
extern uint8_t serial_get_shadow(serial_t *dev);
|
||||
|
||||
extern const device_t ns8250_device;
|
||||
extern const device_t ns8250_pcjr_device;
|
||||
extern const device_t ns8250_pcjr_3f8_device;
|
||||
extern const device_t ns8250_pcjr_2f8_device;
|
||||
extern const device_t ns16450_device;
|
||||
extern const device_t ns16550_device;
|
||||
extern const device_t ns16650_device;
|
||||
|
||||
@@ -177,6 +177,8 @@ extern const device_t sb_awe64_ide_device;
|
||||
extern const device_t sb_awe64_gold_device;
|
||||
|
||||
/* Crystal CS423x */
|
||||
extern const device_t cs4232_device;
|
||||
extern const device_t cs4232_onboard_device;
|
||||
extern const device_t cs4235_device;
|
||||
extern const device_t cs4235_onboard_device;
|
||||
extern const device_t cs4236_onboard_device;
|
||||
|
||||
25
src/include/86box/unix_osd.h
Normal file
25
src/include/86box/unix_osd.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#ifndef _UNIX_OSD_H
|
||||
#define _UNIX_OSD_H
|
||||
|
||||
#include <SDL.h>
|
||||
|
||||
// state management
|
||||
extern void osd_init(void);
|
||||
extern void osd_deinit(void);
|
||||
extern int osd_open(SDL_Event event);
|
||||
extern int osd_close(SDL_Event event);
|
||||
|
||||
// keyboard event handler
|
||||
extern int osd_handle(SDL_Event event);
|
||||
|
||||
// draw the osd interface, if it's open
|
||||
extern void osd_present(void);
|
||||
|
||||
// future ui
|
||||
extern void osd_ui_sb_update_icon_state(int tag, int state);
|
||||
extern void osd_ui_sb_update_icon(int tag, int active);
|
||||
extern void osd_ui_sb_update_icon_write(int tag, int active);
|
||||
extern void osd_ui_sb_update_icon_wp(int tag, int state);
|
||||
|
||||
#endif /*_UNIX_OSD_H*/
|
||||
|
||||
4109
src/include/86box/unix_osd_font.h
Normal file
4109
src/include/86box/unix_osd_font.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -449,6 +449,8 @@ extern void ibm_rgb528_hwcursor_draw(svga_t *svga, int displine);
|
||||
extern float ibm_rgb528_getclock(int clock, void *priv);
|
||||
extern void ibm_rgb528_ramdac_set_ref_clock(void *priv, svga_t *svga, float ref_clock);
|
||||
|
||||
extern float icd2047_getclock(int clock, void *priv);
|
||||
|
||||
extern void icd2061_write(void *priv, int val);
|
||||
extern float icd2061_getclock(int clock, void *priv);
|
||||
extern void icd2061_set_ref_clock(void *priv, float ref_clock);
|
||||
@@ -457,8 +459,13 @@ extern void icd2061_set_ref_clock(void *priv, float ref_clock);
|
||||
# define ics9161_write icd2061_write
|
||||
# define ics9161_getclock icd2061_getclock
|
||||
|
||||
extern float ics1494_getclock(int clock, void *priv);
|
||||
|
||||
extern float ics2494_getclock(int clock, void *priv);
|
||||
|
||||
extern float ics90c64a_vclk_getclock(int clock, void *priv);
|
||||
extern float ics90c64a_mclk_getclock(int clock, void *priv);
|
||||
|
||||
extern void ics2595_write(void *priv, int strobe, int dat);
|
||||
extern double ics2595_getclock(void *priv);
|
||||
extern void ics2595_setclock(void *priv, double clock);
|
||||
@@ -474,6 +481,7 @@ extern uint8_t sc1502x_rs2_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t
|
||||
extern void sdac_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *priv, svga_t *svga);
|
||||
extern uint8_t sdac_ramdac_in(uint16_t addr, int rs2, void *priv, svga_t *svga);
|
||||
extern float sdac_getclock(int clock, void *priv);
|
||||
extern void sdac_set_ref_clock(void *priv, float ref_clock);
|
||||
|
||||
extern void stg_ramdac_out(uint16_t addr, uint8_t val, void *priv, svga_t *svga);
|
||||
extern uint8_t stg_ramdac_in(uint16_t addr, void *priv, svga_t *svga);
|
||||
@@ -506,7 +514,10 @@ extern const device_t att20c505_ramdac_device;
|
||||
extern const device_t bt485a_ramdac_device;
|
||||
extern const device_t gendac_ramdac_device;
|
||||
extern const device_t ibm_rgb528_ramdac_device;
|
||||
extern const device_t ics1494m_540_device;
|
||||
extern const device_t ics1494m_540_radius_ht209_device;
|
||||
extern const device_t ics2494an_305_device;
|
||||
extern const device_t ics2494an_324_device;
|
||||
extern const device_t ati18810_28800_device;
|
||||
extern const device_t ati18811_0_28800_device;
|
||||
extern const device_t ati18811_1_28800_device;
|
||||
@@ -514,7 +525,9 @@ extern const device_t ati18810_mach32_device;
|
||||
extern const device_t ati18811_0_mach32_device;
|
||||
extern const device_t ati18811_1_mach32_device;
|
||||
extern const device_t ics2595_device;
|
||||
extern const device_t icd2047_20_device;
|
||||
extern const device_t icd2061_device;
|
||||
extern const device_t ics90c64a_903_device;
|
||||
extern const device_t ics9161_device;
|
||||
extern const device_t sc11483_ramdac_device;
|
||||
extern const device_t sc11487_ramdac_device;
|
||||
@@ -523,7 +536,8 @@ extern const device_t sc11484_nors2_ramdac_device;
|
||||
extern const device_t sc1502x_ramdac_device;
|
||||
extern const device_t sc1502x_rs2_ramdac_device;
|
||||
extern const device_t sdac_ramdac_device;
|
||||
extern const device_t stg_ramdac_device;
|
||||
extern const device_t stg1702_ramdac_device;
|
||||
extern const device_t stg1703_ramdac_device;
|
||||
extern const device_t tkd8001_ramdac_device;
|
||||
extern const device_t tseng_ics5301_ramdac_device;
|
||||
extern const device_t tseng_ics5341_ramdac_device;
|
||||
|
||||
@@ -436,20 +436,20 @@ extern const device_t et4000_kasan_isa_device;
|
||||
extern const device_t et4000_mca_device;
|
||||
|
||||
/* Tseng ET4000-W32x */
|
||||
extern const device_t et4000w32_device;
|
||||
extern const device_t et4000w32_machspeed_vga_gui_2400s_isa_device;
|
||||
extern const device_t et4000w32_machspeed_vga_gui_2400s_vlb_device;
|
||||
extern const device_t et4000w32_onboard_device;
|
||||
extern const device_t et4000w32i_isa_device;
|
||||
extern const device_t et4000w32i_vlb_device;
|
||||
extern const device_t et4000w32i_axis_microdevice_isa_device;
|
||||
extern const device_t et4000w32i_hercules_dynamite_pro_vlb_device;
|
||||
extern const device_t et4000w32p_videomagic_revb_vlb_device;
|
||||
extern const device_t et4000w32p_videomagic_revb_pci_device;
|
||||
extern const device_t et4000w32p_revc_vlb_device;
|
||||
extern const device_t et4000w32p_revc_pci_device;
|
||||
extern const device_t et4000w32p_vlb_device;
|
||||
extern const device_t et4000w32p_pci_device;
|
||||
extern const device_t et4000w32p_noncardex_vlb_device;
|
||||
extern const device_t et4000w32p_noncardex_pci_device;
|
||||
extern const device_t et4000w32p_cardex_vlb_device;
|
||||
extern const device_t et4000w32p_cardex_pci_device;
|
||||
extern const device_t et4000w32p_cardex_revc_vlb_device;
|
||||
extern const device_t et4000w32p_cardex_revc_pci_device;
|
||||
extern const device_t et4000w32p_cardex_revd_vlb_device;
|
||||
extern const device_t et4000w32p_cardex_revd_pci_device;
|
||||
extern const device_t et4000w32p_diamond_revd_vlb_device;
|
||||
extern const device_t et4000w32p_diamond_revd_pci_device;
|
||||
extern const device_t et4000w32p_generic_revd_vlb_device;
|
||||
extern const device_t et4000w32p_generic_revd_pci_device;
|
||||
|
||||
/* MDSI Genius VHR */
|
||||
extern const device_t genius_device;
|
||||
|
||||
@@ -345,14 +345,14 @@ static const device_config_t pc900_config[] = {
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "pc900_v207a",
|
||||
.default_string = "pc900",
|
||||
.default_int = 0,
|
||||
.file_filter = "",
|
||||
.spinner = { 0 },
|
||||
.bios = {
|
||||
{
|
||||
.name = "BIOS V2.07A",
|
||||
.internal_name = "pc900_v207a",
|
||||
.internal_name = "pc900",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -367,7 +367,26 @@ static const device_config_t pc900_config[] = {
|
||||
.local = 0,
|
||||
.size = 32768,
|
||||
.files = { "roms/machines/pc900/cbm_pc40_v207a_xc.bin", "" }
|
||||
}
|
||||
},
|
||||
{
|
||||
.name = "BIOS V2.07B",
|
||||
.internal_name = "pc900_v207b",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 32768,
|
||||
.files = { "roms/machines/pc900/mpf_pc900_v207b.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "BIOS V3.01B",
|
||||
.internal_name = "pc900_v301b",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 32768,
|
||||
.files = { "roms/machines/pc900/cbm_pc40_v301b.bin", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
},
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
|
||||
@@ -332,17 +332,71 @@ machine_at_ecs386v_init(const machine_t *model)
|
||||
}
|
||||
|
||||
/* OPTi 391 */
|
||||
static const device_config_t dataexpert386wb_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "dataexpert386wb",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "AMIBIOS 050591",
|
||||
.internal_name = "dataexpert386wb_050591",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 65536,
|
||||
.files = { "roms/machines/dataexpert386wb/386-OPTI-386WB-10.BIN", "" }
|
||||
},
|
||||
{
|
||||
.name = "MR BIOS V1.26",
|
||||
.internal_name = "dataexpert386wb",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 65536,
|
||||
.files = { "roms/machines/dataexpert386wb/st0386-wb-ver2-0-618f078c738cb397184464.bin", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t dataexpert386wb_device = {
|
||||
.name = "DataExpert 386C",
|
||||
.internal_name = "dataexpert386wb_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = dataexpert386wb_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_dataexpert386wb_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
ret = bios_load_linear("roms/machines/dataexpert386wb/st0386-wb-ver2-0-618f078c738cb397184464.bin",
|
||||
0x000f0000, 65536, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000f0000, 65536, 0);
|
||||
|
||||
machine_at_common_init(model);
|
||||
|
||||
device_add(&opti391_device);
|
||||
|
||||
@@ -168,15 +168,16 @@ static const device_config_t lx6_config[] = {
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision LY",
|
||||
.internal_name = "lx6", .bios_type = BIOS_NORMAL,
|
||||
.internal_name = "lx6",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/lx6/LX6C_LY.BIN", "" }
|
||||
.files = { "roms/machines/lx6/LX6C_LY.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision PZ (Beta)",
|
||||
.internal_name = "lx6_beta",
|
||||
.internal_name = "lx6_pz",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -765,7 +766,7 @@ static const device_config_t ms6119_config[] = {
|
||||
.bios = {
|
||||
{
|
||||
.name = "AMIBIOS 6 (071595) - Revision 1.72 (Packard Bell Tacoma with logo)",
|
||||
.internal_name = "tacoma_logo",
|
||||
.internal_name = "tacoma_172",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -1085,18 +1086,73 @@ machine_at_s1846_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t vei8_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "vei8",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision QHW.10.01 (HP Sherwood-B)",
|
||||
.internal_name = "vei8",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/vei8/QHW1001.BIN", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision R804",
|
||||
.internal_name = "6110zu",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/vei8/r804.bin", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t vei8_device = {
|
||||
.name = "MiTAC/Trigon 6110Zu",
|
||||
.internal_name = "vei8_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = vei8_config
|
||||
};
|
||||
|
||||
/* i440ZX */
|
||||
int
|
||||
machine_at_vei8_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
ret = bios_load_linear("roms/machines/vei8/QHW1001.BIN",
|
||||
0x000c0000, 262144, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000c0000, 262144, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
|
||||
@@ -39,17 +39,81 @@
|
||||
#include <86box/snd_ac97.h>
|
||||
|
||||
/* i440BX */
|
||||
static const device_config_t prosignias31x_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "prosignias31x_bx",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 5.3",
|
||||
.internal_name = "p6bxt",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/prosignias31x_bx/bxt53s.BIN", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 5.5 (Compaq ProSignia/Deskpro 440BX)",
|
||||
.internal_name = "prosignias31x_bx",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/prosignias31x_bx/p6bxt-ap-092600.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Phoenix - AwardBIOS v6.00PG - Unofficial Version 6.0 (by rushieda)",
|
||||
.internal_name = "p6bxt_600pg",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/prosignias31x_bx/p6bxtap-600-67b8bfdce5de3470118202.bin", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t prosignias31x_device = {
|
||||
.name = "ECS P6BXT-A+",
|
||||
.internal_name = "prosignias31x_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = prosignias31x_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_prosignias31x_bx_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
ret = bios_load_linear("roms/machines/prosignias31x_bx/p6bxt-ap-092600.bin",
|
||||
0x000c0000, 262144, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000c0000, 262144, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
|
||||
@@ -158,17 +158,72 @@ machine_at_excaliburpci_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t p5mp3_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "p5mp3",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v4.50 - Revision 0205",
|
||||
.internal_name = "p5mp3",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/p5mp3/0205.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51G - Revision 0402 (Beta)",
|
||||
.internal_name = "p5mp3_0402",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/p5mp3/0402.001", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t p5mp3_device = {
|
||||
.name = "ASUS P/I-P5MP3",
|
||||
.internal_name = "p5mp3_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = p5mp3_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_p5mp3_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
ret = bios_load_linear("roms/machines/p5mp3/0205.bin",
|
||||
0x000e0000, 131072, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000e0000, 131072, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init(model);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING);
|
||||
|
||||
@@ -566,7 +566,7 @@ static const device_config_t pt2000_config[] = {
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v4.50GP - Revision T1.01",
|
||||
.internal_name = "pt2000_450gp",
|
||||
.internal_name = "pt2000",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -575,7 +575,7 @@ static const device_config_t pt2000_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 3.072C806",
|
||||
.internal_name = "pt2000",
|
||||
.internal_name = "pt2000_451pg",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
|
||||
@@ -813,17 +813,72 @@ machine_at_dellhannibalp_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t p5vxb_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "p5vxb",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v4.50PG - Revision 1.0",
|
||||
.internal_name = "p5vxb",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/p5vxb/P5VXB10.BIN", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 1.5c",
|
||||
.internal_name = "p5vxb_451pg",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/p5vxb/P5VXB15C.BIN", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t p5vxb_device = {
|
||||
.name = "ECS P5VX-B",
|
||||
.internal_name = "p5vxb_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = p5vxb_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_p5vxb_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
ret = bios_load_linear("roms/machines/p5vxb/P5VXB10.BIN",
|
||||
0x000e0000, 131072, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000e0000, 131072, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init(model);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
@@ -1425,7 +1480,7 @@ static const device_config_t an430tx_config[] = {
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "pb79x",
|
||||
.default_string = "an430tx",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
@@ -1433,7 +1488,7 @@ static const device_config_t an430tx_config[] = {
|
||||
.bios = {
|
||||
{
|
||||
.name = "PhoenixBIOS 4.0 Release 6.0 - Revision P02-0011 (Sony Vaio PCV-130/150)",
|
||||
.internal_name = "vaio150",
|
||||
.internal_name = "pcv150",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 5,
|
||||
.local = 0,
|
||||
@@ -1444,7 +1499,7 @@ static const device_config_t an430tx_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "PhoenixBIOS 4.0 Release 6.0 - Revision P09-0006 (Packard Bell PB79x)",
|
||||
.internal_name = "pb79x",
|
||||
.internal_name = "an430tx",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 5,
|
||||
.local = 0,
|
||||
@@ -1804,7 +1859,7 @@ static const device_config_t r534f_config[] = {
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "r534f",
|
||||
.default_string = "r534f_1998",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
@@ -1812,7 +1867,7 @@ static const device_config_t r534f_config[] = {
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 06/12/1998",
|
||||
.internal_name = "r534f",
|
||||
.internal_name = "r534f_1998",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -1821,7 +1876,7 @@ static const device_config_t r534f_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 03/13/2000 (by Unicore Software)",
|
||||
.internal_name = "r534f_unicore",
|
||||
.internal_name = "r534f",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
|
||||
@@ -157,6 +157,150 @@ machine_at_exp8551_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
machine_at_vectra52_gpio_init(void)
|
||||
{
|
||||
uint32_t gpio = 0x40;
|
||||
|
||||
if (cpu_busspeed <= 40000000)
|
||||
gpio |= 0x30;
|
||||
else if ((cpu_busspeed > 40000000) && (cpu_busspeed <= 50000000))
|
||||
gpio |= 0x00;
|
||||
else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000))
|
||||
gpio |= 0x20;
|
||||
else if (cpu_busspeed > 60000000)
|
||||
gpio |= 0x10;
|
||||
|
||||
if (cpu_dmulti <= 1.5)
|
||||
gpio |= 0x82;
|
||||
else if ((cpu_dmulti > 1.5) && (cpu_dmulti <= 2.0))
|
||||
gpio |= 0x02;
|
||||
else if ((cpu_dmulti > 2.0) && (cpu_dmulti <= 2.5))
|
||||
gpio |= 0x00;
|
||||
else if (cpu_dmulti > 2.5)
|
||||
gpio |= 0x80;
|
||||
|
||||
machine_set_gpio_default(gpio);
|
||||
}
|
||||
|
||||
static const device_config_t vectra52_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "vectra52_0705",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "GU.07.02 (01/25/96)",
|
||||
.internal_name = "vectra52_0702",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/vectra52/d3653.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "GU.07.05 (08/06/96)",
|
||||
.internal_name = "vectra52_0705",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/vectra52/GU0705US.FUL", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t vectra52_device = {
|
||||
.name = "HP Vectra VE 5/xxx Series 2",
|
||||
.internal_name = "vectra52",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = vectra52_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_vectra52_init(const machine_t *model)
|
||||
{
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000e0000, 131072, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
machine_at_vectra52_gpio_init();
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x0D, PCI_CARD_VIDEO, 0, 0, 0, 0);
|
||||
pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2);
|
||||
device_add(&i430fx_device);
|
||||
device_add(&piix_device);
|
||||
device_add_params(&pc87306_device, (void *) PCX730X_PHOENIX_42);
|
||||
device_add(&intel_flash_bxt_device);
|
||||
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
device_add(machine_get_vid_device(machine));
|
||||
|
||||
return ret;
|
||||
}
|
||||
int
|
||||
machine_at_vectra500mt_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/vectra500mt/GJ0718.FUL",
|
||||
0x000e0000, 131072, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x0F, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x0D, PCI_CARD_VIDEO, 0, 0, 0, 0);
|
||||
pci_register_slot(0x06, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x07, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x08, PCI_CARD_NORMAL, 3, 4, 1, 2);
|
||||
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
device_add(machine_get_vid_device(machine));
|
||||
|
||||
device_add(&i430fx_device);
|
||||
device_add(&piix_device);
|
||||
device_add_params(&fdc37c93x_device, (void *) (FDC37XXX2 | FDC37C93X_NORMAL));
|
||||
device_add(&sst_flash_29ee010_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_vectra54_init(const machine_t *model)
|
||||
{
|
||||
@@ -291,6 +435,9 @@ machine_at_thor_gpio_init(void)
|
||||
else if (cpu_busspeed > 60000000)
|
||||
gpio |= 0xffff1000;
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL)
|
||||
gpio |= 0xffff0400;
|
||||
|
||||
machine_set_gpio_default(gpio);
|
||||
}
|
||||
|
||||
@@ -332,6 +479,9 @@ machine_at_thor_init(const machine_t *model)
|
||||
if (has_video && (gfxcard[0] == VID_INTERNAL))
|
||||
device_add(machine_get_vid_device(machine));
|
||||
|
||||
if (has_video && (sound_card_current[0] == SOUND_INTERNAL))
|
||||
machine_snd = device_add(machine_get_snd_device(machine));
|
||||
|
||||
device_add(&i430fx_device);
|
||||
device_add(&piix_device);
|
||||
device_add_params(&pc87306_device, (void *) PCX730X_AMI);
|
||||
@@ -432,27 +582,6 @@ machine_at_monaco_gpio_init(void)
|
||||
{
|
||||
uint32_t gpio = 0xffffe0cf;
|
||||
|
||||
/* Return to this after CS4232 PnP is working. */
|
||||
/* Register 0x0078 (Undocumented): */
|
||||
/* Bit 5,4: Vibra 16S base address: 0 = 220h, 1 = 260h, 2 = 240h, 3 = 280h. */
|
||||
/*device_context(machine_get_snd_device(machine));
|
||||
addr = device_get_config_hex16("base");
|
||||
switch (addr) {
|
||||
case 0x0220:
|
||||
gpio |= 0xffff00cf;
|
||||
break;
|
||||
case 0x0240:
|
||||
gpio |= 0xffff00ef;
|
||||
break;
|
||||
case 0x0260:
|
||||
gpio |= 0xffff00df;
|
||||
break;
|
||||
case 0x0280:
|
||||
gpio |= 0xffff00ff;
|
||||
break;
|
||||
}
|
||||
device_context_restore();*/
|
||||
|
||||
/* Register 0x0079: */
|
||||
/* Bit 7: 0 = Clear password, 1 = Keep password. */
|
||||
/* Bit 6: 0 = NVRAM cleared by jumper, 1 = NVRAM normal. */
|
||||
@@ -538,6 +667,9 @@ machine_at_endeavor_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* The Monaco and Atlantis share the same GPIO config */
|
||||
#define machine_at_atlantis_gpio_init machine_at_monaco_gpio_init
|
||||
|
||||
int
|
||||
machine_at_atlantis_init(const machine_t *model)
|
||||
{
|
||||
@@ -551,6 +683,7 @@ machine_at_atlantis_init(const machine_t *model)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
machine_at_atlantis_gpio_init();
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
@@ -690,7 +823,7 @@ static const device_config_t ms5119_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Release 2.3 (by Rainbow)",
|
||||
.internal_name = "ms5119_v451pg",
|
||||
.internal_name = "ms5119_451pg",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -871,7 +1004,7 @@ static const device_config_t fmb_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - 2001 Release (by Rainbow)",
|
||||
.internal_name = "fmb_v451pg",
|
||||
.internal_name = "fmb_451pg",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
|
||||
@@ -200,7 +200,7 @@ static const device_config_t g5x_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "Phoenix - AwardBIOS v6.00PG - Release 4.1 (by eSupport)",
|
||||
.internal_name = "5ax_esupport",
|
||||
.internal_name = "5ax_600pg",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -312,7 +312,7 @@ static const device_config_t delhi3_config[] = {
|
||||
.bios = {
|
||||
{
|
||||
.name = "AMIBIOS 6 (071595) - Revision 1.01",
|
||||
.internal_name = "delhi3",
|
||||
.internal_name = "delhi3_nonoem",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -321,7 +321,7 @@ static const device_config_t delhi3_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "AMIBIOS 6 (071595) - Revision 1.20 (eMachines eTower 3__k)",
|
||||
.internal_name = "etower",
|
||||
.internal_name = "delhi3",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <86box/rom.h>
|
||||
#include <86box/fdd.h>
|
||||
#include <86box/fdc.h>
|
||||
#include <86box/fdc_ext.h>
|
||||
#include <86box/sound.h>
|
||||
#include <86box/snd_speaker.h>
|
||||
#include <86box/snd_sn76489.h>
|
||||
@@ -652,7 +653,10 @@ kbd_read(uint16_t port, void *priv)
|
||||
|
||||
case 0x62:
|
||||
ret = (pcjr->latched ? 1 : 0);
|
||||
ret |= 0x02; /* Modem card not installed */
|
||||
if (!pcjr->option_modem)
|
||||
ret |= 0x02; /* Modem card not installed */
|
||||
if (!pcjr->option_fdc)
|
||||
ret |= 0x04; /* Diskette card not installed */
|
||||
if (mem_size < 128)
|
||||
ret |= 0x08; /* 64k expansion card not installed */
|
||||
if ((pcjr->pb & 0x08) || (cassette == NULL))
|
||||
@@ -664,6 +668,8 @@ kbd_read(uint16_t port, void *priv)
|
||||
ret |= (pcjr->data ? 0x40 : 0);
|
||||
if (pcjr->data)
|
||||
ret |= 0x40;
|
||||
if (pcjr->option_ir)
|
||||
ret |= 0x80; /* Keyboard cable not connected */
|
||||
break;
|
||||
|
||||
case 0xa0:
|
||||
@@ -813,6 +819,30 @@ static const device_config_t pcjr_config[] = {
|
||||
.selection = { { 0 } },
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
#if 0
|
||||
{
|
||||
.name = "modem_slot",
|
||||
.description = "Enable Serial Port in Modem Slot",
|
||||
.type = CONFIG_BINARY,
|
||||
.default_string = NULL,
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "ir_receiver",
|
||||
.description = "Enable IR Receiver",
|
||||
.type = CONFIG_BINARY,
|
||||
.default_string = NULL,
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
#endif
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
@@ -846,6 +876,18 @@ machine_pcjr_init(UNUSED(const machine_t *model))
|
||||
|
||||
pcjr = calloc(1, sizeof(pcjr_t));
|
||||
|
||||
#if 0
|
||||
pcjr->option_modem = device_get_config_int("modem_slot");
|
||||
#else
|
||||
pcjr->option_modem = 0;
|
||||
#endif
|
||||
pcjr->option_fdc = 0;
|
||||
#if 0
|
||||
pcjr->option_ir = device_get_config_int("ir_receiver");
|
||||
#else
|
||||
pcjr->option_ir = 0;
|
||||
#endif
|
||||
|
||||
is_pcjr = 1;
|
||||
|
||||
pic_init_pcjr();
|
||||
@@ -865,9 +907,13 @@ machine_pcjr_init(UNUSED(const machine_t *model))
|
||||
keyboard_scan = 1;
|
||||
key_queue_start = key_queue_end = 0;
|
||||
io_sethandler(0x0060, 4,
|
||||
kbd_read, NULL, NULL, kbd_write, NULL, NULL, pcjr);
|
||||
kbd_read, NULL, NULL,
|
||||
kbd_write, NULL, NULL,
|
||||
pcjr);
|
||||
io_sethandler(0x00a0, 8,
|
||||
kbd_read, NULL, NULL, kbd_write, NULL, NULL, pcjr);
|
||||
kbd_read, NULL, NULL,
|
||||
kbd_write, NULL, NULL,
|
||||
pcjr);
|
||||
timer_add(&pcjr->send_delay_timer, kbd_poll, pcjr, 1);
|
||||
keyboard_set_table(scancode_pcjr);
|
||||
keyboard_send = kbd_adddata_ex;
|
||||
@@ -877,9 +923,18 @@ machine_pcjr_init(UNUSED(const machine_t *model))
|
||||
|
||||
nmi_mask = 0x80;
|
||||
|
||||
device_add(&fdc_pcjr_device);
|
||||
if (fdc_current[0] == FDC_INTERNAL) {
|
||||
device_add(&fdc_pcjr_device);
|
||||
pcjr->option_fdc = 1;
|
||||
}
|
||||
|
||||
if (!pcjr->option_modem)
|
||||
device_add(&ns8250_pcjr_2f8_device);
|
||||
else {
|
||||
device_add(&ns8250_pcjr_3f8_device);
|
||||
device_add(&ns8250_pcjr_2f8_device);
|
||||
}
|
||||
|
||||
device_add(&ns8250_pcjr_device);
|
||||
/* So that serial_standalone_init() won't do anything. */
|
||||
serial_set_next_inst(SERIAL_MAX - 1);
|
||||
|
||||
|
||||
@@ -902,7 +902,7 @@ static const device_config_t dtk_config[] = {
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "dtk_242",
|
||||
.default_string = "dtk",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
@@ -919,7 +919,7 @@ static const device_config_t dtk_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "2.42",
|
||||
.internal_name = "dtk_242",
|
||||
.internal_name = "dtk",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -1326,7 +1326,7 @@ static const device_config_t pc500plus_config[] = {
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "pc500plus_404",
|
||||
.default_string = "pc500plus",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
@@ -1342,7 +1342,7 @@ static const device_config_t pc500plus_config[] = {
|
||||
},
|
||||
{
|
||||
.name = "4.04",
|
||||
.internal_name = "pc500plus_404",
|
||||
.internal_name = "pc500plus",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
@@ -1445,14 +1445,14 @@ static const device_config_t pc700_config[] = {
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "pc700_330",
|
||||
.default_string = "pc700",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.bios = {
|
||||
{
|
||||
.name = "3.30",
|
||||
.internal_name = "pc700_330",
|
||||
.internal_name = "pc700",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
|
||||
@@ -300,7 +300,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 0
|
||||
},
|
||||
.bus_flags = MACHINE_PCJR,
|
||||
.flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_CARTRIDGE,
|
||||
.flags = MACHINE_VIDEO_FIXED | MACHINE_KEYBOARD | MACHINE_CARTRIDGE | MACHINE_FDC,
|
||||
.ram = {
|
||||
.min = 64,
|
||||
.max = 640,
|
||||
@@ -316,7 +316,7 @@ const machine_t machines[] = {
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.fdc_device = &fdc_pcjr_device,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &pcjr_device,
|
||||
.snd_device = NULL,
|
||||
@@ -6627,7 +6627,7 @@ const machine_t machines[] = {
|
||||
},
|
||||
/* Has AMIKey 'F' KBC firmware. */
|
||||
{
|
||||
.name = "[OPTi 391] DataExpert 386WB",
|
||||
.name = "[OPTi 391] DataExpert 386C",
|
||||
.internal_name = "dataexpert386wb",
|
||||
.type = MACHINE_TYPE_386DX,
|
||||
.chipset = MACHINE_CHIPSET_OPTI_391,
|
||||
@@ -6661,7 +6661,7 @@ const machine_t machines[] = {
|
||||
.kbc_p1 = 0x000004f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.device = &dataexpert386wb_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
@@ -8831,7 +8831,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 0
|
||||
},
|
||||
.bus_flags = MACHINE_VLB,
|
||||
.flags = MACHINE_APM | MACHINE_ACPI,
|
||||
.flags = MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 1024,
|
||||
.max = 131072,
|
||||
@@ -10728,7 +10728,7 @@ const machine_t machines[] = {
|
||||
/* This has the UMC 88xx on-chip KBC. All the copies of the BIOS string I can find, end in
|
||||
in -H, so the UMC on-chip KBC likely emulates the AMI 'H' KBC firmware. */
|
||||
{
|
||||
.name = "[UMC 8881] PCChips M919",
|
||||
.name = "[UMC 8881] PC Chips M919",
|
||||
.internal_name = "m919",
|
||||
.type = MACHINE_TYPE_486_S3_PCI,
|
||||
.chipset = MACHINE_CHIPSET_UMC_UM8881,
|
||||
@@ -11350,7 +11350,7 @@ const machine_t machines[] = {
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.device = &p5mp3_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
@@ -12432,47 +12432,47 @@ const machine_t machines[] = {
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[i430FX] IBM PC 3x0 (type 65x6) (Morrison64)",
|
||||
.internal_name = "pc330_65x6",
|
||||
.type = MACHINE_TYPE_SOCKET5,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430FX,
|
||||
.init = machine_at_pc330_65x6_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.name = "[i430FX] IBM PC 3x0 (type 65x6) (Morrison64)",
|
||||
.internal_name = "pc330_65x6",
|
||||
.type = MACHINE_TYPE_SOCKET5,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430FX,
|
||||
.init = machine_at_pc330_65x6_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86),
|
||||
.min_bus = 50000000,
|
||||
.max_bus = 66666667,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86),
|
||||
.min_bus = 50000000,
|
||||
.max_bus = 66666667,
|
||||
.min_voltage = 3380,
|
||||
.max_voltage = 3520,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 2.0
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.default_jumpered_ecp_dma = 3,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio64_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio64_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* According to tests from real hardware: This has AMI MegaKey KBC firmware on the
|
||||
PC87306 Super I/O chip, command 0xA1 returns '5'.
|
||||
@@ -13040,27 +13040,27 @@ const machine_t machines[] = {
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO,
|
||||
.ram = {
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO,
|
||||
.ram = {
|
||||
.min = 4096,
|
||||
.max = 131072,
|
||||
.step = 4096
|
||||
},
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_USE_CONFIG,
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_USE_CONFIG,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &gd5434_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &gd5434_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has a VIA KBC chip */
|
||||
{
|
||||
@@ -13084,27 +13084,27 @@ const machine_t machines[] = {
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM,
|
||||
.ram = {
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 4096,
|
||||
.max = 262144,
|
||||
.step = 4096
|
||||
},
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.default_jumpered_ecp_dma = 1,
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_VIA | 0x00424600, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_VIA | 0x00424600, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* KBC firmware is unknown. No commands outside of the base PS/2 */
|
||||
/* KBC command set are used. */
|
||||
@@ -13129,27 +13129,27 @@ const machine_t machines[] = {
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM,
|
||||
.ram = {
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 4096,
|
||||
.max = 131072,
|
||||
.step = 4096
|
||||
},
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.default_jumpered_ecp_dma = 4,
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00021400, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* This has Phoenix KBC firmware. */
|
||||
{
|
||||
@@ -13173,27 +13173,27 @@ const machine_t machines[] = {
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO,
|
||||
.ram = {
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 139264,
|
||||
.step = 4096
|
||||
},
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.default_jumpered_ecp_dma = 3,
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &gd5430_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &gd5430_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
|
||||
/* VLSI Wildcat */
|
||||
@@ -13219,27 +13219,27 @@ const machine_t machines[] = {
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO,
|
||||
.ram = {
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_VIDEO,
|
||||
.ram = {
|
||||
.min = 4096,
|
||||
.max = 196608,
|
||||
.step = 4096
|
||||
},
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_3,
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_3,
|
||||
.default_jumpered_ecp_dma = 3,
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio64_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_PHOENIX | 0x00012900, /* Guess */
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio64_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
|
||||
/* Socket 7 (Single Voltage) machines */
|
||||
@@ -13332,6 +13332,92 @@ const machine_t machines[] = {
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[i430FX] HP Vectra 500 Series xxx/MT",
|
||||
.internal_name = "vectra500mt",
|
||||
.type = MACHINE_TYPE_SOCKET7_3V,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430FX,
|
||||
.init = machine_at_vectra500mt_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 50000000,
|
||||
.max_bus = 66666667,
|
||||
.min_voltage = 3380,
|
||||
.max_voltage = 3520,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 511,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio64_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[i430FX] HP Vectra VE 5/xxx Series 2",
|
||||
.internal_name = "vectra52",
|
||||
.type = MACHINE_TYPE_SOCKET7_3V,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430FX,
|
||||
.init = machine_at_vectra52_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 50000000,
|
||||
.max_bus = 66666667,
|
||||
.min_voltage = 3380,
|
||||
.max_voltage = 3520,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &vectra52_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &gd5436_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has a SM(S)C FDC37C932 Super I/O chip with on-chip KBC with AMI
|
||||
MegaKey (revision '5') KBC firmware. */
|
||||
@@ -13356,7 +13442,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
@@ -13402,7 +13488,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
@@ -13421,7 +13507,7 @@ const machine_t machines[] = {
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &mach64ct_device_onboard,
|
||||
.snd_device = NULL,
|
||||
.snd_device = &cs4232_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* According to tests from real hardware: This has AMI MegaKey KBC firmware on the
|
||||
@@ -13448,7 +13534,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_GAMEPORT, /* Machine has optional onboard sound: Crystal CS4232-KQ */
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has optional onboard sound: Crystal CS4232-KQ */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
@@ -13467,7 +13553,7 @@ const machine_t machines[] = {
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio64vplus_onboard_pci_device,
|
||||
.snd_device = NULL,
|
||||
.snd_device = &cs4232_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* According to tests from real hardware: This has AMI MegaKey KBC firmware on the
|
||||
@@ -13540,7 +13626,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_APM, /* Machine has onboard sound: Crystal CS4232-KQ */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
@@ -13559,7 +13645,7 @@ const machine_t machines[] = {
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &mach64ct_device_onboard,
|
||||
.snd_device = NULL,
|
||||
.snd_device = &cs4232_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* This has an AMIKey-2, which is type 'H'. */
|
||||
@@ -13653,7 +13739,7 @@ const machine_t machines[] = {
|
||||
},
|
||||
/* Has a VIA VT82C42N KBC. */
|
||||
{
|
||||
.name = "[i430FX] PCPartner MB500N",
|
||||
.name = "[i430FX] PC Partner MB500N",
|
||||
.internal_name = "mb500n",
|
||||
.type = MACHINE_TYPE_SOCKET7_3V,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430FX,
|
||||
@@ -14330,7 +14416,7 @@ const machine_t machines[] = {
|
||||
},
|
||||
/* Has the ALi M1543 southbridge with on-chip KBC. */
|
||||
{
|
||||
.name = "[ALi ALADDiN IV+] PCChips M560",
|
||||
.name = "[ALi ALADDiN IV+] PC Chips M560",
|
||||
.internal_name = "m560",
|
||||
.type = MACHINE_TYPE_SOCKET7,
|
||||
.chipset = MACHINE_CHIPSET_ALI_ALADDIN_IV_PLUS,
|
||||
@@ -14350,7 +14436,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 786432,
|
||||
@@ -14983,7 +15069,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 16384,
|
||||
.max = 49152,
|
||||
@@ -15028,7 +15114,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM | MACHINE_ACPI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 16384,
|
||||
.max = 49152,
|
||||
@@ -15132,7 +15218,7 @@ const machine_t machines[] = {
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.device = &p5vxb_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
@@ -15415,7 +15501,7 @@ const machine_t machines[] = {
|
||||
/* This has the AMIKey 'H' firmware, possibly AMIKey-2. Photos show it with a BestKey, so it
|
||||
likely clones the behavior of AMIKey 'H'. */
|
||||
{
|
||||
.name = "[i430VX] PCPartner MB520N",
|
||||
.name = "[i430VX] PC Partner MB520N",
|
||||
.internal_name = "mb520n",
|
||||
.type = MACHINE_TYPE_SOCKET7,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430VX,
|
||||
@@ -15570,7 +15656,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 262144,
|
||||
@@ -15692,48 +15778,48 @@ const machine_t machines[] = {
|
||||
},
|
||||
/* This has the Phoenix MultiKey KBC firmware on the NSC Super I/O chip. */
|
||||
{
|
||||
.name = "[i430TX] Intel AN430TX (Anchorage)",
|
||||
.internal_name = "an430tx",
|
||||
.type = MACHINE_TYPE_SOCKET7,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430TX,
|
||||
.init = machine_at_an430tx_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.name = "[i430TX] Intel AN430TX (Anchorage)",
|
||||
.internal_name = "an430tx",
|
||||
.type = MACHINE_TYPE_SOCKET7,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430TX,
|
||||
.init = machine_at_an430tx_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = machine_ap440fx_vs440fx_gpio_handler,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P,
|
||||
CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L),
|
||||
.min_bus = 60000000,
|
||||
.max_bus = 66666667,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P,
|
||||
CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L),
|
||||
.min_bus = 60000000,
|
||||
.max_bus = 66666667,
|
||||
.min_voltage = 2800,
|
||||
.max_voltage = 3520,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 3.5
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 3.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 262144,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT, /* Machine has internal video: ATI Mach64GT-B 3D Rage II */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 262144,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &an430tx_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = &ymf715_onboard_device,
|
||||
.net_device = NULL
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &an430tx_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = &ymf715_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* This has the Winbond W83977 Super I/O Chip with AMIKey-2 KBC firmware, which is type 'H'. */
|
||||
{
|
||||
@@ -15758,7 +15844,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 4096,
|
||||
.max = 262144,
|
||||
@@ -15809,7 +15895,7 @@ const machine_t machines[] = {
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
/* Machine has internal sound: Yamaha YMF701-S */
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_GAMEPORT | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 262144,
|
||||
@@ -15879,7 +15965,7 @@ const machine_t machines[] = {
|
||||
/* The BIOS sends KBC command BB and expects it to output a byte, which is AMI KBC behavior.
|
||||
A picture shows a VIA VT82C42N KBC though, so it could be a case of that KBC with AMI firmware. */
|
||||
{
|
||||
.name = "[i430TX] PCPartner MB540N",
|
||||
.name = "[i430TX] PC Partner MB540N",
|
||||
.internal_name = "mb540n",
|
||||
.type = MACHINE_TYPE_SOCKET7,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430TX,
|
||||
@@ -15943,7 +16029,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 5.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 4096,
|
||||
.max = 262144,
|
||||
@@ -16211,7 +16297,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 1572864,
|
||||
@@ -16255,7 +16341,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 1572864,
|
||||
@@ -16301,7 +16387,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 786432,
|
||||
@@ -16348,7 +16434,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 524288,
|
||||
@@ -16395,7 +16481,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 5.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 1048576,
|
||||
@@ -16420,7 +16506,7 @@ const machine_t machines[] = {
|
||||
/* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA
|
||||
VT82C42N. */
|
||||
{
|
||||
.name = "[VIA VP3] PCPartner VIA809DS",
|
||||
.name = "[VIA VP3] PC Partner VIA809DS",
|
||||
.internal_name = "via809ds",
|
||||
.type = MACHINE_TYPE_SOCKET7,
|
||||
.chipset = MACHINE_CHIPSET_VIA_APOLLO_VP3,
|
||||
@@ -16440,7 +16526,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 5.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 1048576,
|
||||
@@ -16644,7 +16730,7 @@ const machine_t machines[] = {
|
||||
/* Is the exact same as the Matsonic MS6260S. Has the ALi M1543C southbridge
|
||||
with on-chip KBC. */
|
||||
{
|
||||
.name = "[ALi ALADDiN V] PCChips M579",
|
||||
.name = "[ALi ALADDiN V] PC Chips M579",
|
||||
.internal_name = "m579",
|
||||
.type = MACHINE_TYPE_SOCKETS7,
|
||||
.chipset = MACHINE_CHIPSET_ALI_ALADDIN_V,
|
||||
@@ -16664,7 +16750,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 5.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: C-Media CMI8330 */
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal sound: C-Media CMI8330 */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 1572864,
|
||||
@@ -16802,7 +16888,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 5.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 16384,
|
||||
.max = 786432,
|
||||
@@ -17433,7 +17519,7 @@ const machine_t machines[] = {
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal SCSI: Adaptec AIC-7880U */
|
||||
.ram = {
|
||||
.min = 40960,
|
||||
.min = 40960, /* does not POST with lower than 40MB; Award and AMI retail BIOSes not affected(?) */
|
||||
.max = 524288,
|
||||
.step = 8192
|
||||
},
|
||||
@@ -17500,7 +17586,7 @@ const machine_t machines[] = {
|
||||
},
|
||||
/* Has a VIA VT82C42N KBC. */
|
||||
{
|
||||
.name = "[i440FX] PCPartner MB600N",
|
||||
.name = "[i440FX] PC Partner MB600N",
|
||||
.internal_name = "mb600n",
|
||||
.type = MACHINE_TYPE_SOCKET8,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_440FX,
|
||||
@@ -17547,7 +17633,7 @@ const machine_t machines[] = {
|
||||
/* ALi ALADDiN-PRO II */
|
||||
/* Has the ALi M1543C southbridge with on-chip KBC. */
|
||||
{
|
||||
.name = "[ALi ALADDiN-PRO II] PCChips M729",
|
||||
.name = "[ALi ALADDiN-PRO II] PC Chips M729",
|
||||
.internal_name = "m729",
|
||||
.type = MACHINE_TYPE_SLOT1,
|
||||
.chipset = MACHINE_CHIPSET_ALI_ALADDIN_PRO_II,
|
||||
@@ -17749,7 +17835,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 5.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 1048576,
|
||||
@@ -17794,7 +17880,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 5.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Video: ATi 3D Rage Pro, Network: 3Com 3C905, Sound: Crystal CS4236B */
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_USB, /* Video: ATi 3D Rage Pro, Network: 3Com 3C905, Sound: Crystal CS4236B */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 786432,
|
||||
@@ -17839,7 +17925,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 8.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB, /* Machine has internal sound: Yamaha YMF701 */
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB, /* Machine has internal sound: Yamaha YMF701 */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 1048576,
|
||||
@@ -18336,7 +18422,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 8.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 786432,
|
||||
@@ -18408,7 +18494,7 @@ const machine_t machines[] = {
|
||||
/* Has a SM(S)C FDC37M60x Super I/O chip with on-chip KBC with most likely
|
||||
AMIKey-2 KBC firmware. */
|
||||
{
|
||||
.name = "[i440ZX] HP Sherwood-B (MiTAC/Trigon 6110Zu)",
|
||||
.name = "[i440ZX] MiTAC/Trigon 6110Zu",
|
||||
.internal_name = "vei8",
|
||||
.type = MACHINE_TYPE_SLOT1,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_440ZX,
|
||||
@@ -18442,7 +18528,7 @@ const machine_t machines[] = {
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.device = &vei8_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
@@ -18588,7 +18674,7 @@ const machine_t machines[] = {
|
||||
},
|
||||
/* Has the SiS (5)600 chipset with on-chip KBC. */
|
||||
{
|
||||
.name = "[SiS 5600] PCChips M747",
|
||||
.name = "[SiS 5600] PC Chips M747",
|
||||
.internal_name = "m747",
|
||||
.type = MACHINE_TYPE_SLOT1,
|
||||
.chipset = MACHINE_CHIPSET_SIS_5600,
|
||||
@@ -18910,13 +18996,12 @@ const machine_t machines[] = {
|
||||
|
||||
/* Slot 1/Socket 370 machines */
|
||||
/* 440BX */
|
||||
/* OEM version of ECS P6BXT-A+ REV 1.3x/2.2x. Has a Winbond W83977EF Super
|
||||
I/O chip with on-chip KBC with AMIKey-2 KBC firmware.*/
|
||||
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC firmware.*/
|
||||
{
|
||||
.name = "[i440BX] Compaq ProSignia S316/318 (Intel)",
|
||||
.name = "[i440BX] ECS P6BXT-A+",
|
||||
.internal_name = "prosignias31x_bx",
|
||||
.type = MACHINE_TYPE_SLOT1_370,
|
||||
.chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_440BX,
|
||||
.init = machine_at_prosignias31x_bx_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
@@ -18924,9 +19009,9 @@ const machine_t machines[] = {
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SLOT1 | CPU_PKG_SOCKET370,
|
||||
.block = CPU_BLOCK(CPU_PENTIUMPRO, CPU_CYRIX3S), /* Instability issues with PPro, and garbled text in POST with Cyrix */
|
||||
.block = CPU_BLOCK(CPU_PENTIUMPRO), /* Instability issues with PPro, and garbled text in POST with Cyrix (latter supported on unofficial v6.00PG BIOS) */
|
||||
.min_bus = 66666667,
|
||||
.max_bus = 100000000,
|
||||
.max_bus = 124242424,
|
||||
.min_voltage = 1300,
|
||||
.max_voltage = 3500,
|
||||
.min_multi = 1.5,
|
||||
@@ -18947,7 +19032,7 @@ const machine_t machines[] = {
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.device = &prosignias31x_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
@@ -19469,7 +19554,7 @@ const machine_t machines[] = {
|
||||
/* Has an ITE IT8671F Super I/O chip with on-chip KBC with AMIKey-2 KBC
|
||||
firmware. */
|
||||
{
|
||||
.name = "[SMSC VictoryBX-66] PCChips M773",
|
||||
.name = "[SMSC VictoryBX-66] PC Chips M773",
|
||||
.internal_name = "m773",
|
||||
.type = MACHINE_TYPE_SOCKET370,
|
||||
.chipset = MACHINE_CHIPSET_SMSC_VICTORYBX_66,
|
||||
@@ -19516,7 +19601,7 @@ const machine_t machines[] = {
|
||||
/* Has the VIA VT82C586B southbridge with on-chip KBC identical to the VIA
|
||||
VT82C42N. */
|
||||
{
|
||||
.name = "[VIA Apollo Pro] PCPartner APAS3",
|
||||
.name = "[VIA Apollo Pro] PC Partner APAS3",
|
||||
.internal_name = "apas3",
|
||||
.type = MACHINE_TYPE_SOCKET370,
|
||||
.chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO,
|
||||
@@ -20234,7 +20319,7 @@ machine_get_nvr_name_ex(int m)
|
||||
|
||||
if (dev != NULL) {
|
||||
device_context(dev);
|
||||
const char *bios = device_get_config_string("bios");
|
||||
const char *bios = device_get_config_bios("bios");
|
||||
if ((bios != NULL) && (strcmp(bios, "") != 0))
|
||||
ret = bios;
|
||||
device_context_restore();
|
||||
|
||||
@@ -643,27 +643,27 @@ bios_load(const char *fn1, const char *fn2, uint32_t addr, int sz, int off, int
|
||||
int
|
||||
bios_load_linear_combined(const char *fn1, const char *fn2, int sz, UNUSED(int off))
|
||||
{
|
||||
return bios_load_linear(fn1, 0x000f0000, 131072, 128) && \
|
||||
return bios_load_linear(fn1, 0x000f0000, 131072, 128) &&
|
||||
bios_load_aux_linear(fn2, 0x000e0000, sz - 65536, 128);
|
||||
}
|
||||
|
||||
int
|
||||
bios_load_linear_combined2(const char *fn1, const char *fn2, const char *fn3, const char *fn4, const char *fn5, int sz, int off)
|
||||
{
|
||||
return bios_load_linear(fn3, 0x000f0000, 262144, off) && \
|
||||
bios_load_aux_linear(fn1, 0x000d0000, 65536, off) && \
|
||||
bios_load_aux_linear(fn2, 0x000c0000, 65536, off) && \
|
||||
bios_load_aux_linear(fn4, 0x000e0000, sz - 196608, off) && \
|
||||
return bios_load_linear(fn3, 0x000f0000, 262144, off) &&
|
||||
bios_load_aux_linear(fn1, 0x000d0000, 65536, off) &&
|
||||
bios_load_aux_linear(fn2, 0x000c0000, 65536, off) &&
|
||||
bios_load_aux_linear(fn4, 0x000e0000, sz - 196608, off) &&
|
||||
(!fn5 || bios_load_aux_linear(fn5, 0x000ec000, 16384, 0));
|
||||
}
|
||||
|
||||
int
|
||||
bios_load_linear_combined2_ex(const char *fn1, const char *fn2, const char *fn3, const char *fn4, const char *fn5, int sz, int off)
|
||||
{
|
||||
return bios_load_linear(fn3, 0x000e0000, 262144, off) && \
|
||||
bios_load_aux_linear(fn1, 0x000c0000, 65536, off) && \
|
||||
bios_load_aux_linear(fn2, 0x000d0000, 65536, off) && \
|
||||
bios_load_aux_linear(fn4, 0x000f0000, sz - 196608, off) && \
|
||||
return bios_load_linear(fn3, 0x000e0000, 262144, off) &&
|
||||
bios_load_aux_linear(fn1, 0x000c0000, 65536, off) &&
|
||||
bios_load_aux_linear(fn2, 0x000d0000, 65536, off) &&
|
||||
bios_load_aux_linear(fn4, 0x000f0000, sz - 196608, off) &&
|
||||
(!fn5 || bios_load_aux_linear(fn5, 0x000fc000, 16384, 0));
|
||||
}
|
||||
|
||||
|
||||
@@ -3257,14 +3257,9 @@ nic_init(const device_t *info)
|
||||
eep_data[1] = 0x10EC;
|
||||
eep_data[2] = 0x8139;
|
||||
|
||||
/* XXX: Get proper MAC addresses from real EEPROM dumps. OID taken from net_ne2000.c */
|
||||
#ifdef USE_REALTEK_OID
|
||||
/* XXX: Get proper MAC addresses from real EEPROM dumps. OID is generic Realtek */
|
||||
eep_data[7] = 0xe000;
|
||||
eep_data[8] = 0x124c;
|
||||
#else
|
||||
eep_data[7] = 0x1400;
|
||||
eep_data[8] = 0x122a;
|
||||
#endif
|
||||
eep_data[9] = 0x1413;
|
||||
|
||||
mac_bytes = (uint8_t *) &(eep_data[7]);
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr ""
|
||||
msgid "ID:"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr ""
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr ""
|
||||
msgid "Invalid PCap device"
|
||||
msgstr ""
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr ""
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr ""
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr ""
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr ""
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr ""
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr ""
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr ""
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr ""
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr ""
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr ""
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr ""
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr ""
|
||||
|
||||
@@ -888,25 +975,10 @@ msgstr ""
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgid "Thrustmaster Formula T1/T2 with Adaptor"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr ""
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr ""
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr ""
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgid "Thrustmaster Formula T1/T2 without Adaptor"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
@@ -1782,6 +1854,9 @@ msgstr ""
|
||||
msgid "VDE Socket:"
|
||||
msgstr ""
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr ""
|
||||
|
||||
@@ -2988,9 +3063,6 @@ msgstr ""
|
||||
msgid "Color scheme"
|
||||
msgstr ""
|
||||
|
||||
msgid "System"
|
||||
msgstr ""
|
||||
|
||||
msgid "Light"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanál:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Zadat..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektory:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Nebyla nalezena žádná PCap zařízení"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Neplatné PCap zařízení"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Obecný otočný ovladač"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Joystick s 2 osami a 1 tlačítkem"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Joystick s 2 osami a 2 tlačítky"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Joystick s 2 osami a 3 tlačítky"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Joystick s 2 osami a 4 tlačítky"
|
||||
|
||||
@@ -867,11 +873,71 @@ msgstr "Joystick s 2 osami a 8 tlačítky"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Joystick s 3 osami a 2 tlačítky"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Joystick s 3 osami a 3 tlačítky"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Joystick s 3 osami a 4 tlačítky"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Joystick se 4 osami a 2 tlačítky"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Joystick se 4 osami a 3 tlačítky"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Joystick s 4 osami a 4 tlačítky"
|
||||
msgstr "Joystick se 4 osami a 4 tlačítky"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Ovladač s 2 tlačítky"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Ovladač s 3 tlačítky"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Ovladač se 4 tlačítky"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Ovladač se 6 tlačítky"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Letecký knipl s 2 tlačítky"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Letecký knipl s 3 tlačítky"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Letecký knipl se 4 tlačítky"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 2 tlačítky a pákou"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 3 tlačítky a pákou"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl se 4 tlačítky a pákou"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volant (3 osy, 2 tlačítka)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volant (3 osy, 3 tlačítka)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volant (3 osy, 4 tlačítka)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
@@ -879,6 +945,27 @@ msgstr "CH Flightstick Pro"
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Ovladač se 2 tlačítky"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 s adaptérem"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Letecký knipl se 2 tlačítky"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Ovladač se 4 tlačítky"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Letecký knipl se 4 tlačítky"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 2 tlačítky a pákou"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 4 tlačítky a pákou"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volant pro Windows 95 (3 osy, 4 tlačítka)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 bez adaptéru"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Žadné"
|
||||
@@ -1714,7 +1786,7 @@ msgid "Remove"
|
||||
msgstr "Odstranit"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Browse..."
|
||||
msgstr "Procházet..."
|
||||
|
||||
msgid "Couldn't create OpenGL context."
|
||||
msgstr "Nepodařilo se vytvořit kontext OpenGL."
|
||||
@@ -1780,7 +1852,10 @@ msgid "Adapter:"
|
||||
msgstr "Adaptér:"
|
||||
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Zásuvka VDE:"
|
||||
msgstr "VDE socket:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr "Zařízení TAP mostu:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box Unit Tester"
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Festlegen..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektoren:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Keine PCap-Geräte gefunden"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Ungültiges PCap-Gerät"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Generischer Paddel-Controller(s)"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2-Achsen-, 1-Tasten-Joystick(s)"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2-Achsen-, 2-Tasten-Joystick(s)"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2-Achsen-, 3-Tasten-Joystick"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2-Achsen-, 4-Tasten-Joystick"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2-Achsen-, 8-Tasten-Joystick"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3-Achsen-, 2-Tasten-Joystick"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3-Achsen-, 3-Tasten-Joystick"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3-Achsen-, 4-Tasten-Joystick"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4-Achsen-, 2-Tasten-Joystick"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4-Achsen-, 3-Tasten-Joystick"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4-Achsen-, 4-Tasten-Joystick"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-Tasten-Gamepad(s)"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3-Tasten-Gamepad"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-Tasten-Gamepad"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6-Tasten-Gamepad"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-Tasten-Steuerhorn"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3-Tasten-Steuerhorn"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-Tasten-Steuerhorn"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-Tasten-Steuerhorn mit Schubregler"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3-Tasten-Steuerhorn mit Schubregler"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-Tasten-Steuerhorn mit Schubregler"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Lenkrad (3-Achsen, 2-Tasten)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Lenkrad (3-Achsen, 3-Tasten)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Lenkrad (3-Achsen, 4-Tasten)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedale"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedale Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedale"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedale Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedale"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedale Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-Tasten-Gamepad(s)"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 mit Adapter"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-Tasten-Steuerhorn"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-Tasten-Gamepad"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-Tasten-Steuerhorn"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-Tasten-Steuerhorn mit Schubregler"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-Tasten-Steuerhorn mit Schubregler"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95 Lenkrad (3-Achsen, 4-Tasten)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 ohne Adapter"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Ohne"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adapter:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE Anschluss:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box-Gerätetester"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Canal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "E&specificar..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sectores:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "No se encontraron dispositivos PCap"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Dispositivo PCap inválido"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Controlador(es) de paleta genérico(s)"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Mando(s) de 2 ejes, 1 botones"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Mando(s) de 2 ejes, 2 botones"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Mando de 2 ejes, 3 botones"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Mando de 2 ejes, 4 botones"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Mando de 2 ejes, 8 botones"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Mando de 3 ejes, 2 botones"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Mando de 3 ejes, 3 botones"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Mando de 3 ejes, 4 botones"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Mando de 4 ejes, 2 botones"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Mando de 4 ejes, 3 botones"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Mando de 4 ejes, 4 botones"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Mando(s) de juegos de 2 botones"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Mando de juegos de 3 botones"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Mando de juegos de 4 botones"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Mando de juegos de 6 botones"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Yugo de vuelo de 2 botones"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Yugo de vuelo de 3 botones"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Yugo de vuelo de 4 botones"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Yugo de vuelo de 2 botones con acelerador"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Yugo de vuelo de 3 botones con acelerador"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Yugo de vuelo de 4 botones con acelerador"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volante (de 3 ejes, 2 botones)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volante (de 3 ejes, 3 botones)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volante (de 3 ejes, 4 botones)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Mando(s) de juegos de 2 botones"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 con adaptador"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Yugo de vuelo de 2 botones"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Mando de juegos de 4 botones"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Yugo de vuelo de 4 botones"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Yugo de vuelo de 2 botones con acelerador"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Yugo de vuelo de 4 botones con acelerador"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volante Win95 (de 3 ejes, 4 botones)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 sin adaptador"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Ninguno"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adaptador:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Toma VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Comprobador de unidad 86Box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanava:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Määritä..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektorit:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "PCap-laitteita ei löytynyt"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Virheellinen PCap-laite"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Yleinen melainohjain"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2-akseliset 1-painikkeiset peliohjaimet"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2-akseliset 2-painikkeiset peliohjaimet"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2-akselinen 3-painikkeinen peliohjain"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2-akselinen 4-painikkeinen peliohjain"
|
||||
|
||||
@@ -867,17 +873,98 @@ msgstr "2-akselinen 8-painikkeinen peliohjain"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3-akselinen 2-painikkeinen peliohjain"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3-akselinen 3-painikkeinen peliohjain"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3-akselinen 4-painikkeinen peliohjain"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4-akselinen 2-painikkeinen peliohjain"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4-akselinen 3-painikkeinen peliohjain"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4-akselinen 4-painikkeinen peliohjain"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-painikkeiset peliohjaimet"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3-painikkeinen peliohjain"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-painikkeinen peliohjain"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6-painikkeinen peliohjain"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-painikkeinen lento-ohjain"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3-painikkeinen lento-ohjain"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-painikkeinen lento-ohjain"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-painikkeinen lento-ohjain kaasuvivulla"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3-painikkeinen lento-ohjain kaasuvivulla"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-painikkeinen lento-ohjain kaasuvivulla"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "ratti (3-akselinen, 2-painikkeinen)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "ratti (3-akselinen, 3-painikkeinen)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "ratti (3-akselinen, 4-painikkeinen)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr ""
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
@@ -886,28 +973,13 @@ msgid "Thrustmaster Flight Control System"
|
||||
msgstr "Thrustmaster Flight Control System"
|
||||
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr ""
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-painikkeiset peliohjaimet"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 adapterilla"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-painikkeinen lento-ohjain"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-painikkeinen peliohjain"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-painikkeinen lento-ohjain"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-painikkeinen lento-ohjain kaasuvivulla"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-painikkeinen lento-ohjain kaasuvivulla"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95-ratti (3-akselinen, 4-painikkeinen)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 ilman adapteria"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Ei mikään"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Sovitin:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE-socket:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box Unit Tester"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Canal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Spécifier..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Secteurs:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Aucun dispositif PCap trouvé"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Dispositif PCap invalide"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Contrôleur(s) à palette générique(s)"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Manette(s) avec 2 axes, 1 boutons"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Manette(s) avec 2 axes, 2 boutons"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Manette avec 2 axes, 4 boutons"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Manette avec 2 axes, 4 boutons"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Manette avec 2 axes, 8 boutons"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Manette avec 3 axes, 2 boutons"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Manette avec 3 axes, 3 boutons"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Manette avec 3 axes, 4 boutons"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Manette avec 4 axes, 2 boutons"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Manette avec 4 axes, 3 boutons"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Manette avec 4 axes, 4 boutons"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Manette(s) de jeu à 2 boutons"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Manette de jeu à 2 boutons"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Manette de jeu à 4 boutons"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Manette de jeu à 6 boutons"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Manette de vol à 2 boutons"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Manette de vol à 3 boutons"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Manette de vol à 4 boutons"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Manette de vol à 2 boutons avec manette des gaz"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Manette de vol à 3 boutons avec manette des gaz"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Manette de vol à 4 boutons avec manette des gaz"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volant (3 axes, 2 boutons)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volant (3 axes, 3 boutons)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volant (3 axes, 4 boutons)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Système de contrôle de vol Thrustmaster"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "SCV Thrustmaster + Système de commande de gouvernail"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Manette(s) de jeu à 2 boutons"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 avec adaptateur"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Manette de vol à 2 boutons"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Manette de jeu à 2 boutons"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Manette de vol à 4 boutons"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Manette de vol à 2 boutons avec manette des gaz"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Manette de vol à 4 boutons avec manette des gaz"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volant Win95 (3 axes, 4 boutons)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 sans adaptateur"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Aucun"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adaptateur:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Prise VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Testeur d'unité de 86Box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Odredi..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektori:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Nema PCap uređaja"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Nevažeći PCap uređaj"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Generički kontroleri s lopaticama"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Palica za igru s 2 osi, 1 tipke"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Palica za igru s 2 osi, 2 tipke"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Palica za igru s 2 osi, 3 tipke"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Palica za igru s 2 osi, 4 tipke"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Palica za igru s 2 osi, 8 tipke"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Palica za igru s 3 osi, 2 tipke"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Palica za igru s 3 osi, 3 tipke"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Palica za igru s 3 osi, 4 tipke"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Palica za igru s 4 osi, 2 tipke"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Palica za igru s 4 osi, 3 tipke"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Palica za igru s 4 osi, 4 tipke"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Gamepad(ovi) s 2 tipke"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Gamepad s 3 tipke"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Gamepad s 4 tipke"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Gamepad s 6 tipke"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Jaram za letenje s 2 tipke"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Jaram za letenje s 3 tipke"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Jaram za letenje s 4 tipke"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Jaram za letenje s 2 tipke i gasom"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Jaram za letenje s 3 tipke i gasom"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Jaram za letenje s 4 tipke i gasom"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volan (3 osi, 2 tipke)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volan (3 osi, 3 tipke)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volan (3 osi, 4 tipke)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Gamepad(ovi) s 2 tipke"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 s adapterom"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Jaram za letenje s 2 tipke"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Gamepad s 4 tipke"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Jaram za letenje s 4 tipke"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Jaram za letenje s 2 tipke i gasom"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Jaram za letenje s 4 tipke i gasom"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volan Win95 (3 osi, 4 tipke)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 bez adaptera"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Bez"
|
||||
@@ -1714,7 +1786,7 @@ msgid "Remove"
|
||||
msgstr "Ukloni"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Pregledajte..."
|
||||
msgstr "Pretraži..."
|
||||
|
||||
msgid "Couldn't create OpenGL context."
|
||||
msgstr "Nije moguće stvoriti kontekst OpenGL."
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adapter:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE utičnica:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Jedinični ispitivač 86Box-a"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Canale:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Specifica..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Settori:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Nessun dispositivo PCap trovato"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Dispositivo PCap non valido"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Controller generico/i a paletta"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Joystick a 2 assi, 1 pulsanti"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Joystick a 2 assi, 2 pulsanti"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Joystick a 2 assi, 3 pulsanti"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Joystick a 2 assi, 4 pulsanti"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Joystick a 2 assi, 8 pulsanti"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Joystick a 3 assi, 2 pulsanti"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Joystick a 3 assi, 4 pulsanti"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Joystick a 3 assi, 4 pulsanti"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Joystick a 4 assi, 2 pulsanti"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Joystick a 4 assi, 3 pulsanti"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Joystick a 4 assi, 4 pulsanti"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Gamepad a 2 pulsanti"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Gamepad a 3 pulsanti"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Gamepad a 4 pulsanti"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Gamepad a 6 pulsanti"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Barra di comando a 2 pulsanti"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Barra di comando a 3 pulsanti"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Barra di comando a 4 pulsanti"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Barra di comando a 2 pulsanti con acceleratore"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Barra di comando a 4 pulsanti con acceleratore"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Barra di comando a 4 pulsanti con acceleratore"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volante (3 assi, 2 pulsanti)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volante (3 assi, 3 pulsanti)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volante (3 assi, 4 pulsanti)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + Pedali CH"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedali Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedali"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedali Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedali"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedali Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Sistema di controllo Thrustmaster Flight"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Sistema di controllo timone"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Gamepad a 2 pulsanti"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 con adattatore"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Barra di comando a 2 pulsanti"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Gamepad a 4 pulsanti"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Barra di comando a 4 pulsanti"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Barra di comando a 2 pulsanti con acceleratore"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Barra di comando a 4 pulsanti con acceleratore"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volante Win95 (3 assi, 4 pulsanti)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 senza adattatore"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Nessuno"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adattatore:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Presa VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Tester di unità 86Box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "チャンネル:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "参照(&S)..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "セクター:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "PCapデバイスがありません"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "不正なPCapデバイス"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "汎用パドルコントローラー"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "ジョイスティック(2軸、1ボタン)"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "ジョイスティック(2軸、2ボタン)"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "ジョイスティック(2軸、3ボタン)"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "ジョイスティック(2軸、4ボタン)"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "ジョイスティック(2軸、8ボタン)"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "ジョイスティック(3軸、2ボタン)"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "ジョイスティック(3軸、3ボタン)"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "ジョイスティック(3軸、4ボタン)"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "ジョイスティック(4軸、2ボタン)"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "ジョイスティック(4軸、3ボタン)"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "ジョイスティック(4軸、4ボタン)"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2ボタン式ゲームパッド"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3ボタン式ゲームパッド"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4ボタン式ゲームパッド"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6ボタン式ゲームパッド"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2ボタン式操縦桿"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3ボタン式操縦桿"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4ボタン式操縦桿"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2ボタン式フライトヨーク(スロットル付き)"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3ボタン式フライトヨーク(スロットル付き)"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4ボタン式フライトヨーク(スロットル付き)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "ステアリングホイール(3軸、2ボタン)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "ステアリングホイール(3軸、3ボタン)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "ステアリングホイール(3軸、4ボタン)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinderパッド"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2ボタン式ゲームパッド"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "アダプター付き Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2ボタン式操縦桿"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4ボタン式ゲームパッド"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4ボタン式操縦桿"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2ボタン式フライトヨーク(スロットル付き)"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4ボタン式フライトヨーク(スロットル付き)"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95 ステアリングホイール(3軸、4ボタン)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "アダプターなし Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "None"
|
||||
msgstr "なし"
|
||||
@@ -1714,7 +1786,7 @@ msgid "Remove"
|
||||
msgstr "削除"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "ブラウズ..."
|
||||
msgstr "参照..."
|
||||
|
||||
msgid "Couldn't create OpenGL context."
|
||||
msgstr "OpenGLコンテキストを作成できませんでした。"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "アダプター:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDEソケット:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Boxユニットテスター"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "채널:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "열기(&S)..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "섹터:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "PCap 장치가 없습니다"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "PCap 장치가 올바르지 않습니다"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "일반 패들 컨트롤러"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2축, 1버튼 조이스틱"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2축, 2버튼 조이스틱"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2축, 3버튼 조이스틱"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2축, 4버튼 조이스틱"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2축, 8버튼 조이스틱"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3축, 2버튼 조이스틱"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3축, 3버튼 조이스틱"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3축, 4버튼 조이스틱"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4축, 2버튼 조이스틱"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4축, 3버튼 조이스틱"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4축, 4버튼 조이스틱"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2버튼 게임패드"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3버튼 게임패드"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4버튼 게임패드"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6버튼 게임패드"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2버튼 비행 조종간"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3버튼 비행 조종간"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4버튼 비행 조종간"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2버튼 비행 조종간과 스로틀"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3버튼 비행 조종간과 스로틀"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4버튼 비행 조종간과 스로틀"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "조타륜 (3축, 2버튼)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "조타륜 (3축, 3버튼)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "조타륜 (3축, 4버튼)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2버튼 게임패드"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "어댑터 포함 Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2버튼 비행 조종간"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4버튼 게임패드"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4버튼 비행 조종간"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2버튼 비행 조종간과 스로틀"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4버튼 비행 조종간과 스로틀"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95 조타륜 (3축, 4버튼)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "어댑터 미포함 Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "None"
|
||||
msgstr "없음"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "어댑터:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE 소켓:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box 유닛 테스터"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Angi..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektorer:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Ingen PCap-enheter funnet"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Ugyldig PCap-enhet"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Generisk padle-kontroller(e)"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2-akset, 1-knapps styrespak(er)"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2-akset, 2-knapps styrespak(er)"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2-akset, 3-knapps styrespak"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2-akset, 4-knapps styrespak"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2-akset, 8-knapps styrespak"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3-akset, 2-knapps styrespak"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3-akset, 4-knapps styrespak"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3-akset, 4-knapps styrespak"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4-akset, 2-knapps styrespak"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4-akset, 3-knapps styrespak"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4-akset, 4-knapps styrespak"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-knapps gamepad(er)"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3-knapps gamepad"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-knapps gamepad"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6-knapps gamepad"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-knapps flystyre"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3-knapps flystyre"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-knapps flystyre"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-knapps flystyre med gass"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3-knapps flystyre med gass"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-knapps flystyre med gass"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Ratt (3-akset, 3-knapps)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Ratt (3-akset, 3-knapps)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Ratt (3-akset, 4-knapps)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedaler"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedaler Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedaler"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedaler Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedaler"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedaler Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedaler"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedaler Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Ror-kontrollsystem"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-knapps gamepad(er)"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 med adapter"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-knapps flystyre"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-knapps gamepad"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-knapps flystyre"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-knapps flystyre med gass"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-knapps flystyre med gass"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95 Ratt (3-akset, 4-knapps)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 uten adapter"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Ingen"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adapter:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE-kontakt:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box-enhetstester"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanaal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Specificeer..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sectoren:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Geen PCap-apparaten gevonden"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Ongeldig PCap-apparaat"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Generieke peddelcontroller(s)"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Joystick(s) met 2 assen en 1 knoppen"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Joystick(s) met 2 assen en 2 knoppen"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Joystick met 2 assen en 3 knoppen"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Joystick met 2 assen en 4 knoppen"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Joystick met 2 assen en 8 knoppen"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Joystick met 3 assen en 2 knoppen"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Joystick met 3 assen en 3 knoppen"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Joystick met 3 assen en 4 knoppen"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Joystick met 4 assen en 2 knoppen"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Joystick met 4 assen en 3 knoppen"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Joystick met 4 assen en 4 knoppen"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-knops gamepad(s)"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3-knops gamepad"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-knops gamepad"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6-knops gamepad"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-knops stuurknuppel"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3-knops stuurknuppel"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-knops stuurknuppel"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-kops stuurknuppel met gashendel "
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3-kops stuurknuppel met gashendel"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-kops stuurknuppel met gashendel"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Stuurwiel (3 assen, 2 knoppen)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Stuurwiel (3 assen, 3 knoppen)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Stuurwiel (3 assen, 4 knoppen)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedalen"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedalen Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedalen"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedalen Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedalen"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedalen Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedalen"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedalen Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control systeem"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Roer Control Systeem"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-knops gamepad(s)"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 met adapter"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-knops stuurknuppel"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-knops gamepad"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-knops stuurknuppel"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-kops stuurknuppel met gashendel "
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "2-kops stuurknuppel met gashendel"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95 Stuurwiel (3 assen, 4 knoppen)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 zonder adapter"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Geen"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adapter:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE-socket:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box Apparaattester"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanał:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Określ..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektory:"
|
||||
|
||||
@@ -852,8 +849,17 @@ msgstr "Nie znaleziono urządzeń PCap"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Nieprawidłowe urządzenie PCap"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Generyczny kontroler paddle"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Joystick(i) 2-osiowe, 1-przyciskowe"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Joysticki 2-osiowe, 2-przyciskowe"
|
||||
msgstr "Joystick(i) 2-osiowe, 2-przyciskowe"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Joystick 2-osiowy, 3-przyciskowy"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Joystick 2-osiowy, 4-przyciskowy"
|
||||
@@ -867,18 +873,99 @@ msgstr "Joystick 2-osiowy, 8-przyciskowy"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Joystick 3-osiowy, 2-przyciskowy"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Joystick 3-osiowy, 2-przyciskowy"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Joystick 3-osiowy, 4-przyciskowy"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Joystick 4-osiowy, 2-przyciskowy"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Joystick 4-osiowy, 3-przyciskowy"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Joystick 4-osiowy, 4-przyciskowy"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Pad(y) z dwoma przyciskami"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Pad z trzema przyciskami"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Pad z czterema przyciskami"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Pad z sześcioma przyciskami"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Wolant z dwoma przyciskami"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Wolant z trzema guzikami"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Wolant z czterema przyciskami"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Wolant z dwoma przyciskami i przepustnicą"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Wolant z trzema przyciskami i przepustnicą"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Wolant z czterema przyciskami i przepustnicą"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Kierownica (3 osie, 2 przyciski)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Kierownica (3 osie, 3 przyciski)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Kierownica (3 osie, 4 przyciski)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Pad(y) z dwoma przyciskami"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 z adapterem"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Wolant z dwoma przyciskami"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Pad z czterema przyciskami"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Wolant z czterema przyciskami"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Wolant z dwoma przyciskami i przepustnicą"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Wolant z czterema przyciskami i przepustnicą"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Kierownica Win95 (3 osie, 4 przyciski)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 bez adaptera"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Żaden"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adapter:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Gniazdo VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Tester urządzeń 86Box"
|
||||
|
||||
@@ -2977,19 +3052,19 @@ msgid "Export EDID"
|
||||
msgstr "Eksportuj EDID"
|
||||
|
||||
msgid "EDID file \"%ls\" is too large."
|
||||
msgstr "Plik EDID \"%ls\" jest zbyt duży."
|
||||
msgstr "Plik EDID „%ls” jest zbyt duży."
|
||||
|
||||
msgid "OpenGL input scale"
|
||||
msgstr "Skala wejściowa OpenGL"
|
||||
msgstr "Skala wejścia OpenGL"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "Tryb rozciągania wejściowego OpenGL"
|
||||
msgstr "Tryb rozciągania wejścia OpenGL"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "Schemat kolorów"
|
||||
|
||||
msgid "Light"
|
||||
msgstr "Światło"
|
||||
msgstr "Jasny"
|
||||
|
||||
msgid "Dark"
|
||||
msgstr "Ciemny"
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Canal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Especificar..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Setores:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Nenhum dispositivo PCap encontrado"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Dispositivo PCap inválido"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Controlador(es) genérico(s) de pá"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Joystick(s) de 2 eixos, 1 botões"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Joystick(s) de 2 eixos, 2 botões"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Joystick de 2 eixos, 3 botões"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Joystick de 2 eixos, 4 botões"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Joystick de 2 eixos, 8 botões"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Joystick de 3 eixos, 2 botões"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Joystick de 3 eixos, 3 botões"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Joystick de 3 eixos, 4 botões"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Joystick de 4 eixos, 2 botões"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Joystick de 4 eixos, 3 botões"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Joystick de 4 eixos, 4 botões"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Gamepad(s) de 2 botões"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Gamepad de 3 botões"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Gamepad de 4 botões"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Gamepad de 6 botões"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Manche de voo de 2 botões"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Manche de voo de 3 botões"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Manche de voo de 4 botões"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Manche de voo de 2 botões com acelerador"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Manche de voo de 3 botões com acelerador"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Manche de voo de 4 botões com acelerador"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volante (3 eixos, 2 botões)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volante (3 eixos, 3 botões)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volante (3 eixos, 4 botões)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + Pedais CH"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + Pedais CH Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + Pedais CH"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + Pedais CH Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + Pedais CH"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + Pedais CH Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Sistema de Controle de Voo Thrustmaster"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "SCV Thrustmaster + Sistema de Controle de Leme"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Gamepad(s) de 2 botões"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 com adaptador"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Manche de voo de 2 botões"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Gamepad de 4 botões"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Manche de voo de 4 botões"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Manche de voo de 2 botões com acelerador"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Manche de voo de 4 botões com acelerador"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volante Win95 (3 eixos, 4 botões)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 sem adaptador"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Nenhum"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adaptador:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Soquete VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Testador de unidade 86Box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Canal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Especificar..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sectores:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Não foi encontrado um dispositivo PCap"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Dispositivo PCap inválido"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "COntrolador(es) genérico(s) tipo pá"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Joystick(s) de 2 eixos, 1 botões"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Joystick(s) de 2 eixos, 2 botões"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Joystick de 2 eixos, 3 botões"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Joystick de 2 eixos, 4 botões"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Joystick de 2 eixos, 8 botões"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Joystick de 3 eixos, 2 botões"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Joystick de 3 eixos, 3 botões"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Joystick de 3 eixos, 4 botões"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Joystick de 4 eixos, 2 botões"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Joystick de 4 eixos, 3 botões"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Joystick de 4 eixos, 4 botões"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Manípulo(s) de jogos de 2 botões"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Manípulo(s) de jogos de 3 botões"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Manípulo(s) de jogos de 4 botões"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Manípulo(s) de jogos de 6 botões"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Manípulo de voo de 2 botões"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Manípulo de voo de 2 botões"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Manípulo de voo de 4 botões"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Manípulo de voo de 2 botões com acelerador"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Manípulo de voo de 3 botões com acelerador"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Manípulo de voo de 4 botões com acelerador"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volante (de 3 eixos, 2 botões)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volante (de 3 eixos, 3 botões)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volante (de 3 eixos, 4 botões)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Manípulo(s) de jogos de 2 botões"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 com adaptador"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Manípulo de voo de 2 botões"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Manípulo(s) de jogos de 4 botões"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Manípulo de voo de 4 botões"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Manípulo de voo de 2 botões com acelerador"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Manípulo de voo de 4 botões com acelerador"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volante Win95 (de 3 eixos, 4 botões)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 sem adaptador"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Nenhum"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adaptador:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Tomada VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Testador de unidades 86Box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Канал:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Указать..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Секторы:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Устройства PCap не найдены"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Неверное устройство PCap"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Стандартный контроллер-колесо"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2-осевой, 1-кнопочный джойстик"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2-осевой, 2-кнопочный джойстик"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2-осевой, 3-кнопочный джойстик"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2-осевой, 4-кнопочный джойстик"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2-осевой, 8-кнопочный джойстик"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3-осевой, 2-кнопочный джойстик"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3-осевой, 3-кнопочный джойстик"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3-осевой, 4-кнопочный джойстик"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4-осевой, 2-кнопочный джойстик"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4-осевой, 3-кнопочный джойстик"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4-осевой, 4-кнопочный джойстик"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-кнопочный геймпад"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3-кнопочный геймпад"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-кнопочный геймпад"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6-кнопочный геймпад"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-кнопочный штурвал"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3-кнопочный штурвал"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-кнопочный штурвал"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-кнопочный штурвал с дросселем"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3-кнопочный штурвал с дросселем"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-кнопочный штурвал с дросселем"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Руль (3-осевой, 2-кнопочный)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Руль (3-осевой, 3-кнопочный)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Руль (3-осевой, 4-кнопочный)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Педали"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Педали Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Педали"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Педали Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Педали"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Педали Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Педали"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Педали Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Система управления полётом Thrustmaster"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Система управления рулем"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-кнопочный геймпад"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 с адаптером"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-кнопочный flight yoke"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-кнопочный геймпад"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-кнопочный flight yoke"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-кнопочный flight yoke с дросселем"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-кнопочный flight yoke с дросселем"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Руль Win95 (3-осевой, 4-кнопочный)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 без адаптера"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Нет"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Адаптер:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE сокет:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr "Устройство моста TAP:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Модульный Тестер 86Box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanál:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Zadať..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektory:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Neboli nájdené žiadne PCap zariadenia"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Neplatné PCap zariadenie"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Generický ovládač pádla"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2-osový, 1-tlačidlový joystick"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2-osový, 2-tlačidlový joystick"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2-osový, 4-tlačidlový joystick"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2-osový, 4-tlačidlový joystick"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2-osový, 8-tlačidlový joystick"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3-osový, 2-tlačidlový joystick"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3-osový, 3-tlačidlový joystick"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3-osový, 4-tlačidlový joystick"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4-osový, 2-tlačidlový joystick"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4-osový, 3-tlačidlový joystick"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4-osový, 4-tlačidlový joystick"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Ovládač s 2 tlačidlami"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Ovládač so 3 tlačidlami"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Ovládač so 4 tlačidlami"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Ovládač so 6 tlačidlami"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Letecký knipl s 2 tlačidlami"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Letecký knipl s 3 tlačidlami"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Letecký knipl so 4 tlačidlami"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 2 tlačidlami a pákou"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 3 tlačidlami a pákou"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 4 tlačidlami a pákou"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volant (3 osy, 2 tlačítka)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volant (3 osy, 3 tlačítka)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volant (3 osy, 4 tlačítka)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Ovládač s 2 tlačidlami"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 s adaptérom"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Letecký knipl s 2 tlačidlami"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Ovládač so 4 tlačidlami"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Letecký knipl so 4 tlačidlami"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 2 tlačidlami a pákou"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Letecký knipl s 4 tlačidlami a pákou"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volant pre Windows 95 (3 osy, 4 tlačítka)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 bez adaptéru"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Žiadne"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adaptér:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Zásuvka VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box Unit Tester"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Določi..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektorji:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Najdena ni bila nobena naprava PCap"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Neveljavna naprava PCap"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Generični krmilnik z lopatico"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Igralna palica z 2 osema, 1 gumboma"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Igralna palica z 2 osema, 2 gumboma"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Igralna palica z 2 osema, 3 gumbi"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Igralna palica z 2 osema, 4 gumbi"
|
||||
|
||||
@@ -865,20 +871,101 @@ msgid "2-axis, 8-button joystick"
|
||||
msgstr "Igralna palica z 2 osema, 8 gumbi"
|
||||
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Igralna palica s 3 osmi, 2 gumboma"
|
||||
msgstr "Igralna palica s 3 osmi, 2 gumbi"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Igralna palica s 3 osmi, 3 gumbi"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Igralna palica s 3 osmi, 4 gumbi"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Igralna palica s 4 osmi, 2 gumbi"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Igralna palica s 4 osmi, 3 gumbi"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Igralna palica s 4 osmi, 4 gumbi"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Igralna ploščica z 2 gumboma"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Igralna ploščica s 3 gumbi"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Igralna ploščica s 4 gumbi"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Igralna ploščica s 6 gumbi"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Letalski krmilni drog z 2 gumbi"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Letalski krmilni drog z 3 gumbi"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Letalski krmilni drog s 4 gumbi"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Letalski krmilni drog z 2 gumbi gumboma ročico za plin"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Letalski krmilni drog s 3 gumbi z ročico za plin"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Letalski krmilni drog s 4 gumbi z ročico za plin"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Volan s 3 osmi, 2 gumbi"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Volan s 3 osmi, 3 gumbi"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Volan s 3 osmi, 4 gumbi"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Igralna ploščica z 2 gumboma"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 s pretvornikom"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Letalski krmilni drog z 2 gumbi"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Igralna ploščica s 4 gumbi"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Letalski krmilni drog s 4 gumbi"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Letalski krmilni drog z 2 gumbi gumboma ročico za plin"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Letalski krmilni drog s 4 gumbi z ročico za plin"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Volan Win95 s 3 osmi, 4 gumbi"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 brez pretvornika"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Brez"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Mrežna kartica:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Vtičnica VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Tester enote 86Box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Specificera..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektorer:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Inga PCap-enheter hittade"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Ogiltig PCap-enhet"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Generisk paddelkontroll(er)"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Styrspak med 2 axlar och 1 knappar"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Styrspak med 2 axlar och 2 knappar"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Styrspak med 2 axlar och 3 knappar"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Styrspak med 2 axlar och 4 knappar"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Styrspak med 2 axlar och 8 knappar"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Styrspak med 3 axlar och 2 knappar"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Styrspak med 3 axlar och 2 knappar"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Styrspak med 3 axlar och 4 knappar"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Styrspak med 4 axlar och 2 knappar"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Styrspak med 4 axlar och 3 knappar"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Styrspak med 4 axlar och 4 knappar"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Handkontroll(er) med två knappar"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Handkontroll med tre knappar"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Handkontroll med fyra knappar"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Handkontroll med sex knappar"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Styrspak med två knappar"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Styrspak med tre knappar"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Styrspak med fyra knappar"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Styrspak med två knappar och gas"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Styrspak med tre knappar och gas"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Styrspak med fyra knappar och gas"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "ratt (tre axlar, två knappar)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "ratt (tre axlar, tre knappar)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "ratt (tre axlar, fyra knappar)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH-pedaler"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH-pedaler Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH-pedaler"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH-pedaler Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH-pedaler"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH-pedaler Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH-pedaler"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH-pedaler Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Handkontroll(er) med två knappar"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 med adapter"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Styrspak med två knappar"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Handkontroll med fyra knappar"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Styrspak med fyra knappar"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Styrspak med två knappar och gas"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Styrspak med fyra knappar och gas"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95-ratt (tre axlar, fyra knappar)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 utan adapter"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Ingen"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adapter:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE-sockel:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box enhetsprövare"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kanal:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Belirle..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sektörler:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Herhangi bir PCap cihazı bulunamadı"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Geçersiz PCap cihazı"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Genel kürek kontrol cihazları"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2 eksenli, 1 düğmeli oyun kolları"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2 eksenli, 2 düğmeli oyun kolları"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2 eksenli, 3 düğmeli oyun kolu"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2 eksenli, 4 düğmeli oyun kolu"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2 eksenli, 8 düğmeli oyun kolu"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3 eksenli, 2 düğmeli oyun kollu"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3 eksenli, 3 düğmeli oyun kolu"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3 eksenli, 4 düğmeli oyun kolu"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4 eksenli, 2 düğmeli oyun kolu"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4 eksenli, 3 düğmeli oyun kolu"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4 eksenli, 4 düğmeli oyun kolu"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2 düğmeli oyun tablası"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3 düğmeli oyun tablası"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4 düğmeli oyun tablası"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6 düğmeli oyun tablası"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2 düğmeli uçuş dümeni"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3 düğmeli uçuş dümeni"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4 düğmeli uçuş dümeni"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2 düğmeli, gaz kollu uçuş dümeni"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3 düğmeli, gaz kollu uçuş dümeni"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4 düğmeli, gaz kollu uçuş dümeni"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "direksiyonu (3 eksenli, 2 düğmeli)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "direksiyonu (3 eksenli, 3 düğmeli)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "direksiyonu (3 eksenli, 4 düğmeli)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2 düğmeli oyun tablası"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Adaptörlü Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2 düğmeli uçuş dümeni"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4 düğmeli oyun tablası"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4 düğmeli uçuş dümeni"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2 düğmeli, gaz kollu uçuş dümeni"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4 düğmeli, gaz kollu uçuş dümeni"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95 direksiyonu (3 eksenli, 4 düğmeli)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Adaptörsüz Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Hiçbiri"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Adaptör:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE Soketi:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box Test Cihazı"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Канал:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "&Вказати..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Сектора:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Пристрої PCap не знайдені"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Невірний пристрій PCap"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Загальний контролер(и) весла"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2-осьовий, 1-кнопковий джойстик"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2-осьовий, 2-кнопковий джойстик"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2-осьовий, 3-кнопковий джойстик"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2-осьовий, 4-кнопковий джойстик"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2-осьовий, 8-кнопковий джойстик"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3-осьовий, 2-кнопковий джойстик"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3-осьовий, 3-кнопковий джойстик"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3-осьовий, 4-кнопковий джойстик"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4-осьовий, 2-кнопковий джойстик"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4-осьовий, 3-кнопковий джойстик"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4-осьовий, 4-кнопковий джойстик"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2-кнопковий геймпад"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3-кнопковий геймпад"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-кнопковий геймпад"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6-кнопковий геймпад"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-кнопковий flight yoke"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3-кнопковий геймпад"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-кнопковий flight yoke"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-кнопковий flight yoke з дроселем"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3-кнопковий flight yoke з дроселем"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-кнопковий flight yoke з дроселем"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Кермо (3-осьове, 2-кнопкове)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Кермо (3-осьове, 3-кнопкове)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Кермо (3-осьове, 4-кнопкове)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Педалі"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Педалі Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Педалі"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Педалі Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Педалі"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Педалі Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Педалі"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Педалі Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Система управління польотом Thrustmaster"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Система управління кермом"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "4-кнопковий геймпад"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 з адаптером"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2-кнопковий flight yoke"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4-кнопковий геймпад"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4-кнопковий flight yoke"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-кнопковий flight yoke з дроселем"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4-кнопковий flight yoke з дроселем"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Кермо Win95 (3-осьове, 4-кнопкове)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 без адаптера"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Ні"
|
||||
@@ -1714,7 +1786,7 @@ msgid "Remove"
|
||||
msgstr "Видалити"
|
||||
|
||||
msgid "Browse..."
|
||||
msgstr "Переглянути..."
|
||||
msgstr "Огляд..."
|
||||
|
||||
msgid "Couldn't create OpenGL context."
|
||||
msgstr "Не вдалося створити контекст OpenGL."
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Адаптер:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE сокет:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Тестер блоків 86Box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "Kênh:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "Chỉ &rõ..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Sector:"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "Không tìm thấy thiết bị PCap"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "Thiết bị PCap không hợp quy"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Bộ điều khiển dạng mái chèo thông dụng"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Cần điều khiển hai trục, một nút"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "Cần điều khiển hai trục, hai nút"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "Cần điều khiển hai trục, ba nút"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "Cần điều khiển hai trục, bốn nút"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "Cần điều khiển hai trục, tám nút"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "Cần điều khiển ba trục, hai nút"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "Cần điều khiển ba trục, ba nút"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "Cần điều khiển ba trục, bốn nút"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "Cần điều khiển bốn trục, hai nút"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "Cần điều khiển bốn trục, ba nút"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "Cần điều khiển bốn trục, bốn nút"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Tay cầm game hai nút"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "Tay cầm game ba nút"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Tay cầm game bốn nút"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "Tay cầm game sáu nút"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Vô lăng máy bay hai nút"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "Vô lăng máy bay ba nút"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Vô lăng máy bay bốn nút"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Vô lăng máy bay hai nút có cần ga"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "Vô lăng máy bay ba nút có cần ga"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Vô lăng máy bay bốn nút có cần ga"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "Vô lăng (ba trục, hai nút)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "Vô lăng (ba trục, ba nút)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "Vô lăng (ba trục, bốn nút)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + bàn giậm CH"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + bàn giậm CH Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + bàn giậm CH"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + bàn giậm CH Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + bàn giậm CH"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + bàn giậm CH Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + bàn giậm CH"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + bàn giậm CH Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Hệ thống bánh lái"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "Tay cầm game hai nút"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 kèm bộ chuyển đổi"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Vô lăng máy bay hai nút"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "Tay cầm game bốn nút"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "Vô lăng máy bay bốn nút"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "Vô lăng máy bay hai nút có cần ga"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "Vô lăng máy bay bốn nút có cần ga"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Vô lăng Win95 (ba trục, bốn nút)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 không kèm bộ chuyển đổi"
|
||||
|
||||
msgid "None"
|
||||
msgstr "Không có"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "Bộ chuyển đổi:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Ổ cắm VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Trình kiểm tra đơn vị 86box"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "通道:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "指定(&S)..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "扇区(S):"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "未找到 PCap 设备"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "无效 PCap 设备"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "通用桨式控制器"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2 轴, 1 键操纵杆"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2 轴, 2 键操纵杆"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2 轴, 3 键操纵杆"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2 轴, 4 键操纵杆"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2 轴, 8 键操纵杆"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3 轴, 2 键操纵杆"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3 轴, 3 键操纵杆"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3 轴, 4 键操纵杆"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4 轴, 2 键操纵杆"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4 轴, 3 键操纵杆"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4 轴, 4 键操纵杆"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2 按钮游戏手柄"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3 按钮游戏手柄"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4 按钮游戏手柄"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6 按钮游戏手柄"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2 按钮飞行摇杆"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3 按钮飞行摇杆"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4 按钮飞行摇杆"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2 按钮带油门飞行摇杆"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3 按钮带油门飞行摇杆"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4 按钮带油门飞行摇杆"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "方向盘 (3 轴, 2 键)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "方向盘 (3 轴, 3 键)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "方向盘 (3 轴, 4 键)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2 按钮游戏手柄"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "带适配器 Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2 按钮飞行摇杆"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4 按钮游戏手柄"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4 按钮飞行摇杆"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2 按钮带油门飞行摇杆"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4 按钮带油门飞行摇杆"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95 方向盘 (3 轴, 4 键)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "不带适配器 Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "None"
|
||||
msgstr "无"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "适配器:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE 套接字:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box 装置测试仪"
|
||||
|
||||
|
||||
@@ -603,9 +603,6 @@ msgstr "通道:"
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
|
||||
msgid "&Specify..."
|
||||
msgstr "指定(&S)..."
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "磁區(S):"
|
||||
|
||||
@@ -852,9 +849,18 @@ msgstr "未找到 PCap 裝置"
|
||||
msgid "Invalid PCap device"
|
||||
msgstr "無效 PCap 裝置"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "通用槳式控制器"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2 軸, 1 鍵搖桿"
|
||||
|
||||
msgid "2-axis, 2-button joystick(s)"
|
||||
msgstr "2 軸, 2 鍵搖桿"
|
||||
|
||||
msgid "2-axis, 3-button joystick"
|
||||
msgstr "2 軸, 3 鍵搖桿"
|
||||
|
||||
msgid "2-axis, 4-button joystick"
|
||||
msgstr "2 軸, 4 鍵搖桿"
|
||||
|
||||
@@ -867,18 +873,99 @@ msgstr "2 軸, 8 鍵搖桿"
|
||||
msgid "3-axis, 2-button joystick"
|
||||
msgstr "3 軸, 2 鍵搖桿"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3 軸, 3 鍵搖桿"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3 軸, 4 鍵搖桿"
|
||||
|
||||
msgid "4-axis, 2-button joystick"
|
||||
msgstr "4 軸, 2 鍵搖桿"
|
||||
|
||||
msgid "4-axis, 3-button joystick"
|
||||
msgstr "4 軸, 3 鍵搖桿"
|
||||
|
||||
msgid "4-axis, 4-button joystick"
|
||||
msgstr "4 軸, 4 鍵搖桿"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2 鍵遊戲手柄"
|
||||
|
||||
msgid "3-button gamepad"
|
||||
msgstr "3 鍵遊戲手柄"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4 鍵遊戲手柄"
|
||||
|
||||
msgid "6-button gamepad"
|
||||
msgstr "6 鍵遊戲手柄"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2 按鈕飛行搖桿"
|
||||
|
||||
msgid "3-button flight yoke"
|
||||
msgstr "3 按鈕飛行搖桿"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4 按鈕飛行搖桿"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2 按鈕帶油門飛行搖桿"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3 按鈕帶油門飛行搖桿"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4 按鈕帶油門飛行搖桿"
|
||||
|
||||
msgid "Steering wheel (3-axis, 2-button)"
|
||||
msgstr "方向盤 (3 軸, 2 鍵搖桿)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 3-button)"
|
||||
msgstr "方向盤 (3 軸, 3 鍵搖桿)"
|
||||
|
||||
msgid "Steering wheel (3-axis, 4-button)"
|
||||
msgstr "方向盤 (3 軸, 4 鍵搖桿)"
|
||||
|
||||
msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals"
|
||||
msgstr "CH Flightstick Pro + CH Pedals"
|
||||
|
||||
msgid "CH Flightstick Pro + CH Pedals Pro"
|
||||
msgstr "CH Flightstick Pro + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot"
|
||||
msgstr "CH Virtual Pilot"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals"
|
||||
msgstr "CH Virtual Pilot + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot + CH Pedals Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro"
|
||||
msgstr "CH Virtual Pilot Pro"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals"
|
||||
|
||||
msgid "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
msgstr "CH Virtual Pilot Pro + CH Pedals Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
|
||||
@@ -888,26 +975,11 @@ msgstr "Thrustmaster Flight Control System"
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Rudder Control System"
|
||||
|
||||
msgid "2-button gamepad(s)"
|
||||
msgstr "2 鍵遊戲手柄"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "附轉接器 Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "2 按鈕飛行搖桿"
|
||||
|
||||
msgid "4-button gamepad"
|
||||
msgstr "4 鍵遊戲手柄"
|
||||
|
||||
msgid "4-button flight yoke"
|
||||
msgstr "4 按鈕飛行搖桿"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2 按鈕帶油門飛行搖桿"
|
||||
|
||||
msgid "4-button flight yoke with throttle"
|
||||
msgstr "4 按鈕帶油門飛行搖桿"
|
||||
|
||||
msgid "Win95 Steering Wheel (3-axis, 4-button)"
|
||||
msgstr "Win95 方向盤 (3 軸, 4 鍵搖桿)"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr "不附轉接器 Thrustmaster Formula T1/T2"
|
||||
|
||||
msgid "None"
|
||||
msgstr "無"
|
||||
@@ -1782,6 +1854,9 @@ msgstr "配接器:"
|
||||
msgid "VDE Socket:"
|
||||
msgstr "VDE 插座:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box 單元測試器"
|
||||
|
||||
|
||||
@@ -15,84 +15,15 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
|
||||
<enum>QLayout::SetFixedSize</enum>
|
||||
</property>
|
||||
<item row="2" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderBrightness">
|
||||
<property name="minimum">
|
||||
<number>-100</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderSaturation">
|
||||
<property name="maximum">
|
||||
<number>360</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="labelHue">
|
||||
<property name="text">
|
||||
<string>Hue</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderSharpness">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::StandardButton::Apply|QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok|QDialogButtonBox::StandardButton::Reset</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderContrast">
|
||||
<property name="maximum">
|
||||
<number>360</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Contrast</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderHue">
|
||||
<property name="minimum">
|
||||
@@ -102,31 +33,100 @@
|
||||
<number>360</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="text">
|
||||
<string>Sharpness</string>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<widget class="QLabel" name="labelSaturation">
|
||||
<property name="text">
|
||||
<string>Saturation</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderSaturation">
|
||||
<property name="maximum">
|
||||
<number>360</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<widget class="QLabel" name="labelBrightness">
|
||||
<property name="text">
|
||||
<string>Brightness</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderBrightness">
|
||||
<property name="minimum">
|
||||
<number>-100</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="labelContrast">
|
||||
<property name="text">
|
||||
<string>Contrast</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderContrast">
|
||||
<property name="maximum">
|
||||
<number>360</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="labelSharpness">
|
||||
<property name="text">
|
||||
<string>Sharpness</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QSlider" name="horizontalSliderSharpness">
|
||||
<property name="minimum">
|
||||
<number>-50</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Specify...</string>
|
||||
<string>Browse...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="labelFileName">
|
||||
<property name="text">
|
||||
<string>File name:</string>
|
||||
</property>
|
||||
@@ -43,7 +43,7 @@
|
||||
<widget class="FileField" name="fileField" native="true"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<widget class="QLabel" name="labelCylinders">
|
||||
<property name="text">
|
||||
<string>Cylinders:</string>
|
||||
</property>
|
||||
@@ -66,7 +66,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<widget class="QLabel" name="labelHeads">
|
||||
<property name="text">
|
||||
<string>Heads:</string>
|
||||
</property>
|
||||
@@ -92,7 +92,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="4">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<widget class="QLabel" name="labelSectors">
|
||||
<property name="text">
|
||||
<string>Sectors:</string>
|
||||
</property>
|
||||
@@ -118,7 +118,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<widget class="QLabel" name="labelSize">
|
||||
<property name="text">
|
||||
<string>Size (MB):</string>
|
||||
</property>
|
||||
@@ -141,7 +141,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<widget class="QLabel" name="labelType">
|
||||
<property name="text">
|
||||
<string>Type:</string>
|
||||
</property>
|
||||
@@ -155,7 +155,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_8">
|
||||
<widget class="QLabel" name="labelBus">
|
||||
<property name="text">
|
||||
<string>Bus:</string>
|
||||
</property>
|
||||
@@ -169,7 +169,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="4">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<widget class="QLabel" name="labelChannel">
|
||||
<property name="text">
|
||||
<string>Channel:</string>
|
||||
</property>
|
||||
@@ -183,7 +183,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<widget class="QLabel" name="labelSpeed">
|
||||
<property name="text">
|
||||
<string>Model:</string>
|
||||
</property>
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Device</string>
|
||||
</property>
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
<widget class="QStatusBar" name="statusbar"/>
|
||||
<widget class="QToolBar" name="toolBar">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::ContextMenuPolicy::PreventContextMenu</enum>
|
||||
<enum>Qt::PreventContextMenu</enum>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string notr="true">toolBar</string>
|
||||
@@ -272,7 +272,7 @@
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="allowedAreas">
|
||||
<set>Qt::ToolBarArea::TopToolBarArea</set>
|
||||
<set>Qt::TopToolBarArea</set>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
@@ -281,7 +281,7 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="toolButtonStyle">
|
||||
<enum>Qt::ToolButtonStyle::ToolButtonIconOnly</enum>
|
||||
<enum>Qt::ToolButtonIconOnly</enum>
|
||||
</property>
|
||||
<property name="floatable">
|
||||
<bool>false</bool>
|
||||
@@ -396,7 +396,7 @@
|
||||
<string>E&xit</string>
|
||||
</property>
|
||||
<property name="menuRole">
|
||||
<enum>QAction::MenuRole::QuitRole</enum>
|
||||
<enum>QAction::QuitRole</enum>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSettings">
|
||||
@@ -408,7 +408,7 @@
|
||||
<string>&Settings...</string>
|
||||
</property>
|
||||
<property name="menuRole">
|
||||
<enum>QAction::MenuRole::NoRole</enum>
|
||||
<enum>QAction::NoRole</enum>
|
||||
</property>
|
||||
<property name="iconVisibleInMenu">
|
||||
<bool>false</bool>
|
||||
@@ -710,7 +710,7 @@
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="menuRole">
|
||||
<enum>QAction::MenuRole::AboutQtRole</enum>
|
||||
<enum>QAction::AboutQtRole</enum>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionAbout_86Box">
|
||||
@@ -718,7 +718,7 @@
|
||||
<string>&About 86Box...</string>
|
||||
</property>
|
||||
<property name="menuRole">
|
||||
<enum>QAction::MenuRole::AboutRole</enum>
|
||||
<enum>QAction::AboutRole</enum>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionDocumentation">
|
||||
@@ -771,7 +771,7 @@
|
||||
<string>&Preferences...</string>
|
||||
</property>
|
||||
<property name="menuRole">
|
||||
<enum>QAction::MenuRole::PreferencesRole</enum>
|
||||
<enum>QAction::PreferencesRole</enum>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionEnable_Discord_integration">
|
||||
@@ -844,7 +844,7 @@
|
||||
<string>Renderer &options...</string>
|
||||
</property>
|
||||
<property name="menuRole">
|
||||
<enum>QAction::MenuRole::NoRole</enum>
|
||||
<enum>QAction::NoRole</enum>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionVulkan">
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
</property>
|
||||
<layout class="QFormLayout" name="formLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<widget class="QLabel" name="labelFileName">
|
||||
<property name="text">
|
||||
<string>File name:</string>
|
||||
</property>
|
||||
@@ -44,7 +44,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="labelSize">
|
||||
<property name="text">
|
||||
<string>Disk size:</string>
|
||||
</property>
|
||||
|
||||
@@ -42,6 +42,8 @@ extern MainWindow* main_window;
|
||||
#include <QImage>
|
||||
|
||||
#include <cmath>
|
||||
#include <cstdarg>
|
||||
#define HAVE_STDARG_H
|
||||
|
||||
#include "qt_openglrenderer.hpp"
|
||||
#include "qt_openglshadermanagerdialog.hpp"
|
||||
@@ -152,7 +154,7 @@ ogl3_log(const char *fmt, ...)
|
||||
|
||||
if (ogl3_do_log) {
|
||||
va_start(ap, fmt);
|
||||
ogl3_log_ex(fmt, ap);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
@@ -219,10 +221,7 @@ OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const ch
|
||||
snprintf(version, 49, "%s\n", versionRegex.match(progSource).captured(1).toLatin1().data());
|
||||
progSource.remove(versionRegex);
|
||||
} else {
|
||||
version_loc = ((char *) this->glslVersion.toLatin1().data()) + 9;
|
||||
char glsl_ver[4] = { 0 };
|
||||
memcpy(glsl_ver, version_loc, 3);
|
||||
int ver = atoi((char *) glsl_ver);
|
||||
int ver = gl_version[0] * 100 + gl_version[1] * 10;
|
||||
if (ver == 300)
|
||||
ver = 130;
|
||||
else if (ver == 310)
|
||||
@@ -875,11 +874,11 @@ OpenGLRenderer::initialize()
|
||||
glw.initializeOpenGLFunctions();
|
||||
|
||||
ogl3_log("OpenGL information: [%s] %s (%s)\n", glw.glGetString(GL_VENDOR), glw.glGetString(GL_RENDERER), glw.glGetString(GL_VERSION));
|
||||
glsl_version[0] = glsl_version[1] = -1;
|
||||
glw.glGetIntegerv(GL_MAJOR_VERSION, &glsl_version[0]);
|
||||
glw.glGetIntegerv(GL_MINOR_VERSION, &glsl_version[1]);
|
||||
if (glsl_version[0] < 3) {
|
||||
throw opengl_init_error(tr("OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2").arg(glsl_version[0]).arg(glsl_version[1]));
|
||||
gl_version[0] = gl_version[1] = -1;
|
||||
glw.glGetIntegerv(GL_MAJOR_VERSION, &gl_version[0]);
|
||||
glw.glGetIntegerv(GL_MINOR_VERSION, &gl_version[1]);
|
||||
if (gl_version[0] < 3) {
|
||||
throw opengl_init_error(tr("OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2").arg(gl_version[0]).arg(gl_version[1]));
|
||||
}
|
||||
ogl3_log("Using OpenGL %s\n", glw.glGetString(GL_VERSION));
|
||||
ogl3_log("Using Shading Language %s\n", glw.glGetString(GL_SHADING_LANGUAGE_VERSION));
|
||||
|
||||
@@ -102,7 +102,7 @@ private:
|
||||
|
||||
void *unpackBuffer = nullptr;
|
||||
|
||||
int glsl_version[2] = { 0, 0 };
|
||||
int gl_version[2] = { 0, 0 };
|
||||
|
||||
void initialize();
|
||||
void initializeExtensions();
|
||||
|
||||
@@ -27,6 +27,7 @@ OpenGLShaderConfig::OpenGLShaderConfig(QWidget *parent, glslp_t* shader)
|
||||
|
||||
for (int i = 0; i < currentShader->num_parameters; i++) {
|
||||
auto spinBox = new QDoubleSpinBox;
|
||||
spinBox->setDecimals(3);
|
||||
spinBox->setObjectName(currentShader->parameters[i].id);
|
||||
spinBox->setRange(currentShader->parameters[i].min, currentShader->parameters[i].max);
|
||||
spinBox->setValue(currentShader->parameters[i].value);
|
||||
|
||||
@@ -27,49 +27,15 @@
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
|
||||
<enum>QLayout::SetFixedSize</enum>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<widget class="QLabel" name="labelLanguage">
|
||||
<property name="text">
|
||||
<string>Language:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxMultimediaKeys">
|
||||
<property name="text">
|
||||
<string>Inhibit multimedia keys</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Mouse sensitivity:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QComboBox" name="comboBoxLanguage">
|
||||
<property name="maxVisibleItems">
|
||||
@@ -82,10 +48,30 @@
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxConfirmSave">
|
||||
<item row="2" column="0">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="pushButtonLanguage">
|
||||
<property name="text">
|
||||
<string>Ask for confirmation before saving settings</string>
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QLabel" name="labelMouseSensitivity">
|
||||
<property name="text">
|
||||
<string>Mouse sensitivity:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -107,31 +93,14 @@
|
||||
<number>100</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QCheckBox" name="openDirUsrPath">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Select media images from program working directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QPushButton" name="pushButtonLanguage">
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -141,58 +110,106 @@
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<item row="5" column="1">
|
||||
<widget class="QPushButton" name="pushButton_2">
|
||||
<property name="text">
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="openDirUsrPath">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Select media images from program working directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxMultimediaKeys">
|
||||
<property name="text">
|
||||
<string>Inhibit multimedia keys</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxConfirmSave">
|
||||
<property name="text">
|
||||
<string>Ask for confirmation before saving settings</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxConfirmExit">
|
||||
<property name="text">
|
||||
<string>Ask for confirmation before quitting</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<item row="10" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxConfirmHardReset">
|
||||
<property name="text">
|
||||
<string>Ask for confirmation before hard resetting</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Color scheme</string>
|
||||
<item row="11" column="0" colspan="2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Color scheme</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonSystem">
|
||||
<property name="text">
|
||||
<string>System</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonLight">
|
||||
<property name="text">
|
||||
<string>Light</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonDark">
|
||||
<property name="text">
|
||||
<string>Dark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="12" column="0" colspan="2">
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonSystem">
|
||||
<property name="text">
|
||||
<string>System</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonLight">
|
||||
<property name="text">
|
||||
<string>Light</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonDark">
|
||||
<property name="text">
|
||||
<string>Dark</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -220,10 +220,12 @@ RendererCommon::eventDelegate(QEvent *event, bool &result)
|
||||
case QEvent::MouseButtonPress:
|
||||
case QEvent::MouseMove:
|
||||
case QEvent::MouseButtonRelease:
|
||||
#ifdef TOUCH_PR
|
||||
case QEvent::TouchBegin:
|
||||
case QEvent::TouchEnd:
|
||||
case QEvent::TouchCancel:
|
||||
case QEvent::TouchUpdate:
|
||||
#endif
|
||||
case QEvent::Wheel:
|
||||
case QEvent::Enter:
|
||||
case QEvent::Leave:
|
||||
|
||||
@@ -35,7 +35,9 @@
|
||||
|
||||
#include <QScreen>
|
||||
#include <QMessageBox>
|
||||
#ifdef TOUCH_PR
|
||||
#include <QTouchEvent>
|
||||
#endif
|
||||
#include <QStringBuilder>
|
||||
|
||||
#include <QPainter>
|
||||
@@ -91,7 +93,9 @@ RendererStack::RendererStack(QWidget *parent, int monitor_index)
|
||||
, ui(new Ui::RendererStack)
|
||||
{
|
||||
boxLayout->setContentsMargins(0, 0, 0, 0);
|
||||
#ifdef TOUCH_PR
|
||||
setAttribute(Qt::WA_AcceptTouchEvents, true);
|
||||
#endif
|
||||
#ifdef Q_OS_WINDOWS
|
||||
setAttribute(Qt::WA_NativeWindow, true);
|
||||
(void)winId();
|
||||
@@ -520,12 +524,22 @@ RendererStack::event(QEvent* event)
|
||||
|
||||
if (m_monitor_index >= 1) {
|
||||
if (mouse_input_mode >= 1) {
|
||||
#ifdef TOUCH_PR
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
mouse_x_abs = (mouse_event->position().x()) / (double)width();
|
||||
mouse_y_abs = (mouse_event->position().y()) / (double)height();
|
||||
#else
|
||||
mouse_x_abs = (mouse_event->localPos().x()) / (double)width();
|
||||
mouse_y_abs = (mouse_event->localPos().y()) / (double)height();
|
||||
#endif
|
||||
#else
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
mouse_x_abs = (mouse_event->position().x()) / (long double)width();
|
||||
mouse_y_abs = (mouse_event->position().y()) / (long double)height();
|
||||
#else
|
||||
mouse_x_abs = (mouse_event->localPos().x()) / (long double)width();
|
||||
mouse_y_abs = (mouse_event->localPos().y()) / (long double)height();
|
||||
#endif
|
||||
#endif
|
||||
if (!mouse_tablet_in_proximity)
|
||||
mouse_tablet_in_proximity = mousedata.mouse_tablet_in_proximity;
|
||||
@@ -544,6 +558,7 @@ RendererStack::event(QEvent* event)
|
||||
return QWidget::event(event);
|
||||
}
|
||||
|
||||
#ifdef TOUCH_PR
|
||||
#ifdef Q_OS_WINDOWS
|
||||
if (mouse_input_mode == 0) {
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
@@ -574,6 +589,39 @@ RendererStack::event(QEvent* event)
|
||||
#else
|
||||
mouse_x_abs = (mouse_event->localPos().x()) / (double)width();
|
||||
mouse_y_abs = (mouse_event->localPos().y()) / (double)height();
|
||||
#endif
|
||||
#else
|
||||
#ifdef Q_OS_WINDOWS
|
||||
if (mouse_input_mode == 0) {
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
mouse_x_abs = (mouse_event->position().x()) / (long double)width();
|
||||
mouse_y_abs = (mouse_event->position().y()) / (long double)height();
|
||||
#else
|
||||
mouse_x_abs = (mouse_event->localPos().x()) / (long double)width();
|
||||
mouse_y_abs = (mouse_event->localPos().y()) / (long double)height();
|
||||
#endif
|
||||
mouse_x_abs -= rendererWindow->destinationF.left();
|
||||
mouse_y_abs -= rendererWindow->destinationF.top();
|
||||
|
||||
if (mouse_x_abs < 0) mouse_x_abs = 0;
|
||||
if (mouse_y_abs < 0) mouse_y_abs = 0;
|
||||
|
||||
mouse_x_abs /= rendererWindow->destinationF.width();
|
||||
mouse_y_abs /= rendererWindow->destinationF.height();
|
||||
|
||||
if (mouse_x_abs > 1) mouse_x_abs = 1;
|
||||
if (mouse_y_abs > 1) mouse_y_abs = 1;
|
||||
return QWidget::event(event);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
mouse_x_abs = (mouse_event->position().x()) / (long double)width();
|
||||
mouse_y_abs = (mouse_event->position().y()) / (long double)height();
|
||||
#else
|
||||
mouse_x_abs = (mouse_event->localPos().x()) / (long double)width();
|
||||
mouse_y_abs = (mouse_event->localPos().y()) / (long double)height();
|
||||
#endif
|
||||
#endif
|
||||
mouse_x_abs -= rendererWindow->destinationF.left();
|
||||
mouse_y_abs -= rendererWindow->destinationF.top();
|
||||
@@ -587,6 +635,7 @@ RendererStack::event(QEvent* event)
|
||||
if (mouse_x_abs > 1) mouse_x_abs = 1;
|
||||
if (mouse_y_abs > 1) mouse_y_abs = 1;
|
||||
mouse_tablet_in_proximity = mousedata.mouse_tablet_in_proximity;
|
||||
#ifdef TOUCH_PR
|
||||
} else switch (event->type()) {
|
||||
case QEvent::TouchBegin:
|
||||
case QEvent::TouchUpdate:
|
||||
@@ -685,6 +734,7 @@ RendererStack::event(QEvent* event)
|
||||
|
||||
default:
|
||||
return QWidget::event(event);
|
||||
#endif
|
||||
}
|
||||
|
||||
return QWidget::event(event);
|
||||
|
||||
@@ -46,7 +46,7 @@ SettingsDisplay::SettingsDisplay(QWidget *parent)
|
||||
for (uint8_t i = 0; i < GFXCARD_MAX; i ++)
|
||||
videoCard[i] = gfxcard[i];
|
||||
|
||||
ui->lineEdit->setFilter(tr("EDID") % util::DlgFilter({ "bin", "dat", "edid", "txt" }) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||
ui->lineEditCustomEDID->setFilter(tr("EDID") % util::DlgFilter({ "bin", "dat", "edid", "txt" }) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||
|
||||
onCurrentMachineChanged(machine);
|
||||
}
|
||||
@@ -77,7 +77,7 @@ SettingsDisplay::save()
|
||||
da2_standalone_enabled = ui->checkBoxDa2->isChecked() ? 1 : 0;
|
||||
monitor_edid = ui->radioButtonCustom->isChecked() ? 1 : 0;
|
||||
|
||||
strncpy(monitor_edid_path, ui->lineEdit->fileName().toUtf8().data(), sizeof(monitor_edid_path) - 1);
|
||||
strncpy(monitor_edid_path, ui->lineEditCustomEDID->fileName().toUtf8().data(), sizeof(monitor_edid_path) - 1);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -135,8 +135,8 @@ SettingsDisplay::onCurrentMachineChanged(int machineId)
|
||||
|
||||
ui->radioButtonDefault->setChecked(monitor_edid == 0);
|
||||
ui->radioButtonCustom->setChecked(monitor_edid == 1);
|
||||
ui->lineEdit->setFileName(monitor_edid_path);
|
||||
ui->lineEdit->setEnabled(monitor_edid == 1);
|
||||
ui->lineEditCustomEDID->setFileName(monitor_edid_path);
|
||||
ui->lineEditCustomEDID->setEnabled(monitor_edid == 1);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -326,7 +326,7 @@ void SettingsDisplay::on_radioButtonDefault_clicked()
|
||||
{
|
||||
ui->radioButtonDefault->setChecked(true);
|
||||
ui->radioButtonCustom->setChecked(false);
|
||||
ui->lineEdit->setEnabled(false);
|
||||
ui->lineEditCustomEDID->setEnabled(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -334,7 +334,7 @@ void SettingsDisplay::on_radioButtonCustom_clicked()
|
||||
{
|
||||
ui->radioButtonDefault->setChecked(false);
|
||||
ui->radioButtonCustom->setChecked(true);
|
||||
ui->lineEdit->setEnabled(true);
|
||||
ui->lineEditCustomEDID->setEnabled(true);
|
||||
}
|
||||
|
||||
void SettingsDisplay::on_pushButtonExportDefault_clicked()
|
||||
|
||||
@@ -26,27 +26,45 @@
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxVoodoo">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labelVideo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Voodoo 1 or 2 Graphics</string>
|
||||
<string>Video:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureDa2">
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QComboBox" name="comboBoxVideo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureVideo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBox8514">
|
||||
<property name="text">
|
||||
<string>IBM 8514/A Graphics</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="labelVideoSecondary">
|
||||
<property name="sizePolicy">
|
||||
@@ -60,6 +78,47 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QComboBox" name="comboBoxVideoSecondary">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureVideoSecondary">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxVoodoo">
|
||||
<property name="text">
|
||||
<string>Voodoo 1 or 2 Graphics</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureVoodoo">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBox8514">
|
||||
<property name="text">
|
||||
<string>IBM 8514/A Graphics</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigure8514">
|
||||
<property name="text">
|
||||
@@ -67,6 +126,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxXga">
|
||||
<property name="text">
|
||||
<string>XGA Graphics</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureXga">
|
||||
<property name="text">
|
||||
@@ -74,8 +140,22 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxDa2">
|
||||
<property name="text">
|
||||
<string>IBM PS/55 Display Adapter Graphics</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureDa2">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0" colspan="3">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<widget class="QGroupBox" name="groupBoxEDID">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -85,9 +165,9 @@
|
||||
<property name="title">
|
||||
<string>Monitor EDID</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<layout class="QVBoxLayout" name="verticalLayoutGroupBoxEDID">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<layout class="QHBoxLayout" name="horizontalLayoutEDIDDefault">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonDefault">
|
||||
<property name="text">
|
||||
@@ -111,9 +191,9 @@
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<layout class="QHBoxLayout" name="horizontalLayoutEDIDCustom">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SizeConstraint::SetNoConstraint</enum>
|
||||
<enum>QLayout::SetNoConstraint</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonCustom">
|
||||
@@ -123,7 +203,7 @@
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="FileField" name="lineEdit" native="true">
|
||||
<widget class="FileField" name="lineEditCustomEDID" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -137,99 +217,6 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QComboBox" name="comboBoxVideoSecondary">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0" colspan="3">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="4" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureVoodoo">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureVideo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labelVideo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Video:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureVideoSecondary">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QComboBox" name="comboBoxVideo">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxXga">
|
||||
<property name="text">
|
||||
<string>XGA Graphics</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="checkBoxDa2">
|
||||
<property name="text">
|
||||
<string>IBM PS/55 Display Adapter Graphics</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0" colspan="3">
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<property name="sizePolicy">
|
||||
@@ -240,6 +227,19 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0" colspan="3">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
@@ -250,6 +250,23 @@
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<tabstops>
|
||||
<tabstop>comboBoxVideo</tabstop>
|
||||
<tabstop>pushButtonConfigureVideo</tabstop>
|
||||
<tabstop>comboBoxVideoSecondary</tabstop>
|
||||
<tabstop>pushButtonConfigureVideoSecondary</tabstop>
|
||||
<tabstop>checkBoxVoodoo</tabstop>
|
||||
<tabstop>pushButtonConfigureVoodoo</tabstop>
|
||||
<tabstop>checkBox8514</tabstop>
|
||||
<tabstop>pushButtonConfigure8514</tabstop>
|
||||
<tabstop>checkBoxXga</tabstop>
|
||||
<tabstop>pushButtonConfigureXga</tabstop>
|
||||
<tabstop>checkBoxDa2</tabstop>
|
||||
<tabstop>pushButtonConfigureDa2</tabstop>
|
||||
<tabstop>radioButtonDefault</tabstop>
|
||||
<tabstop>pushButtonExportDefault</tabstop>
|
||||
<tabstop>radioButtonCustom</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
||||
@@ -335,7 +335,7 @@ SettingsInput::on_pushButtonConfigureMouse_clicked()
|
||||
}
|
||||
|
||||
static int
|
||||
get_axis(JoystickConfiguration &jc, int axis, uint8_t gameport_nr, int joystick_nr)
|
||||
get_axis(JoystickConfiguration &jc, uint8_t gameport_nr, int joystick_nr, int axis)
|
||||
{
|
||||
int axis_sel = jc.selectedAxis(axis);
|
||||
int nr_axes = plat_joystick_state[joystick_state[gameport_nr][joystick_nr].plat_joystick_nr - 1].nr_axes;
|
||||
@@ -351,7 +351,7 @@ get_axis(JoystickConfiguration &jc, int axis, uint8_t gameport_nr, int joystick_
|
||||
}
|
||||
|
||||
static int
|
||||
get_pov(JoystickConfiguration &jc, int pov, uint8_t gameport_nr, int joystick_nr)
|
||||
get_pov(JoystickConfiguration &jc, uint8_t gameport_nr, int joystick_nr, int pov)
|
||||
{
|
||||
int pov_sel = jc.selectedPov(pov);
|
||||
int nr_povs = plat_joystick_state[joystick_state[gameport_nr][joystick_nr].plat_joystick_nr - 1].nr_povs * 2;
|
||||
@@ -379,17 +379,15 @@ updateJoystickConfig(int type, uint8_t gameport_nr, int joystick_nr, QWidget *pa
|
||||
|
||||
joystick_state[gameport_nr][joystick_nr].plat_joystick_nr = jc.selectedDevice();
|
||||
if (joystick_state[gameport_nr][joystick_nr].plat_joystick_nr) {
|
||||
for (int axis_nr = 0; axis_nr < joystick_get_axis_count(type); axis_nr++) {
|
||||
joystick_state[gameport_nr][joystick_nr].axis_mapping[axis_nr] = get_axis(jc, axis_nr, gameport_nr, joystick_nr);
|
||||
}
|
||||
for (int axis_nr = 0; axis_nr < joystick_get_axis_count(type); axis_nr++)
|
||||
joystick_state[gameport_nr][joystick_nr].axis_mapping[axis_nr] = get_axis(jc, gameport_nr, joystick_nr, axis_nr);
|
||||
|
||||
for (int button_nr = 0; button_nr < joystick_get_button_count(type); button_nr++) {
|
||||
for (int button_nr = 0; button_nr < joystick_get_button_count(type); button_nr++)
|
||||
joystick_state[gameport_nr][joystick_nr].button_mapping[button_nr] = jc.selectedButton(button_nr);
|
||||
}
|
||||
|
||||
for (int pov_nr = 0; pov_nr < joystick_get_pov_count(type) * 2; pov_nr += 2) {
|
||||
joystick_state[gameport_nr][joystick_nr].pov_mapping[pov_nr][0] = get_pov(jc, pov_nr, gameport_nr, joystick_nr);
|
||||
joystick_state[gameport_nr][joystick_nr].pov_mapping[pov_nr][1] = get_pov(jc, pov_nr + 1, gameport_nr, joystick_nr);
|
||||
for (int pov_nr = 0; pov_nr < joystick_get_pov_count(type); pov_nr++) {
|
||||
joystick_state[gameport_nr][joystick_nr].pov_mapping[pov_nr][0] = get_pov(jc, gameport_nr, joystick_nr, pov_nr * 2); // X Axis
|
||||
joystick_state[gameport_nr][joystick_nr].pov_mapping[pov_nr][1] = get_pov(jc, gameport_nr, joystick_nr, pov_nr * 2 + 1); // Y Axis
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1" colspan="2">
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="comboBoxKeyboard">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
@@ -43,7 +43,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureKeyboard">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
@@ -63,7 +63,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="2">
|
||||
<item row="1" column="1">
|
||||
<widget class="QComboBox" name="comboBoxMouse">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
@@ -76,7 +76,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureMouse">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
@@ -96,40 +96,50 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1" colspan="2">
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="comboBoxJoystick0">
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QPushButton" name="pushButtonJoystick01">
|
||||
<property name="text">
|
||||
<string>Joystick 1...</string>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QPushButton" name="pushButtonJoystick02">
|
||||
<property name="text">
|
||||
<string>Joystick 2...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="pushButtonJoystick03">
|
||||
<property name="text">
|
||||
<string>Joystick 3...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="3">
|
||||
<widget class="QPushButton" name="pushButtonJoystick04">
|
||||
<property name="text">
|
||||
<string>Joystick 4...</string>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="3" column="0" colspan="3">
|
||||
<layout class="QHBoxLayout" name="joystickButtonsLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonJoystick01">
|
||||
<property name="text">
|
||||
<string>Joystick 1...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonJoystick02">
|
||||
<property name="text">
|
||||
<string>Joystick 2...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonJoystick03">
|
||||
<property name="text">
|
||||
<string>Joystick 3...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonJoystick04">
|
||||
<property name="text">
|
||||
<string>Joystick 4...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="labelKeys">
|
||||
@@ -138,7 +148,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="4">
|
||||
<item row="5" column="0" colspan="3">
|
||||
<widget class="QTableWidget" name="tableKeys">
|
||||
<property name="editTriggers">
|
||||
<set>QAbstractItemView::NoEditTriggers</set>
|
||||
@@ -157,25 +167,54 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="2">
|
||||
<widget class="QPushButton" name="pushButtonClearBind">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Clear binding</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="3">
|
||||
<widget class="QPushButton" name="pushButtonBind">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Bind</string>
|
||||
</property>
|
||||
</widget>
|
||||
<item row="6" column="0" colspan="3">
|
||||
<layout class="QHBoxLayout" name="keybindButtonsLayout">
|
||||
<item>
|
||||
<spacer name="keybindButtonsHorizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonClearBind">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Clear binding</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="pushButtonBind">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>100</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Bind</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
@@ -41,144 +41,18 @@
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="labelSearch">
|
||||
<property name="text">
|
||||
<string>Machine:</string>
|
||||
<string>Search:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>CPU type:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QSpinBox" name="spinBoxRAM">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Memory:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QWidget" name="widget_2" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxCPU">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Frequency:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxSpeed">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QWidget" name="widget_4" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxWaitStates">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>PIT mode:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxPitMode">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEditSearch"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="labelMachineType">
|
||||
<property name="text">
|
||||
<string>Machine type:</string>
|
||||
</property>
|
||||
@@ -191,17 +65,10 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="comboBoxFPU">
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="labelMachine">
|
||||
<property name="text">
|
||||
<string>Wait states:</string>
|
||||
<string>Machine:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -243,22 +110,155 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="labelCPU">
|
||||
<property name="text">
|
||||
<string>CPU type:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QWidget" name="widget_2" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxCPU">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelSpeed">
|
||||
<property name="text">
|
||||
<string>Frequency:</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxSpeed">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<widget class="QLabel" name="labelFPU">
|
||||
<property name="text">
|
||||
<string>FPU:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Search:</string>
|
||||
<item row="4" column="1">
|
||||
<widget class="QComboBox" name="comboBoxFPU">
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="lineEditSearch"/>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="labelWaitStates">
|
||||
<property name="text">
|
||||
<string>Wait states:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="1">
|
||||
<widget class="QWidget" name="widget_4" native="true">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxWaitStates">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="labelPITMode">
|
||||
<property name="text">
|
||||
<string>PIT mode:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="comboBoxPitMode">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="labelMemory">
|
||||
<property name="text">
|
||||
<string>Memory:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1">
|
||||
<widget class="QSpinBox" name="spinBoxRAM">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@@ -312,7 +312,7 @@
|
||||
<item>
|
||||
<spacer name="softFloatHorizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -325,92 +325,116 @@
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_2">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>CPU frame size</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignmentFlag::AlignLeading|Qt::AlignmentFlag::AlignLeft|Qt::AlignmentFlag::AlignTop</set>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonLargerFrames">
|
||||
<property name="text">
|
||||
<string>Larger frames (less smooth)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonSmallerFrames">
|
||||
<property name="text">
|
||||
<string>Smaller frames (smoother)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<layout class="QHBoxLayout" name="groupBoxesLayout">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxTimeSync">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Time synchronization</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="groupBoxTimeSyncLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonDisabled">
|
||||
<property name="text">
|
||||
<string>Disabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonLocalTime">
|
||||
<property name="text">
|
||||
<string>Enabled (local time)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonUTC">
|
||||
<property name="text">
|
||||
<string>Enabled (UTC)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="timeSyncVerticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBoxCPUFrameSize">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>CPU frame size</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="groupBoxCPUFrameSizeLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonLargerFrames">
|
||||
<property name="text">
|
||||
<string>Larger frames (less smooth)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonSmallerFrames">
|
||||
<property name="text">
|
||||
<string>Smaller frames (smoother)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="frameSizeVerticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="groupBoxesHorizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Time synchronization</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonDisabled">
|
||||
<property name="text">
|
||||
<string>Disabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonLocalTime">
|
||||
<property name="text">
|
||||
<string>Enabled (local time)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioButtonUTC">
|
||||
<property name="text">
|
||||
<string>Enabled (UTC)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -422,19 +446,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<tabstops>
|
||||
|
||||
@@ -158,11 +158,11 @@
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="labelBridgeTAPNIC1">
|
||||
<property name="text">
|
||||
<string>TAP Bridge Device</string>
|
||||
<string>TAP Bridge Device:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<item row="6" column="1">
|
||||
<widget class="QLineEdit" name="bridgeTAPNIC1">
|
||||
<property name="maxLength">
|
||||
<number>127</number>
|
||||
@@ -373,11 +373,11 @@
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="labelBridgeTAPNIC2">
|
||||
<property name="text">
|
||||
<string>TAP Bridge Device</string>
|
||||
<string>TAP Bridge Device:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<item row="6" column="1">
|
||||
<widget class="QLineEdit" name="bridgeTAPNIC2">
|
||||
<property name="maxLength">
|
||||
<number>127</number>
|
||||
@@ -588,11 +588,11 @@
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="labelBridgeTAPNIC3">
|
||||
<property name="text">
|
||||
<string>TAP Bridge Device</string>
|
||||
<string>TAP Bridge Device:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<item row="6" column="1">
|
||||
<widget class="QLineEdit" name="bridgeTAPNIC3">
|
||||
<property name="maxLength">
|
||||
<number>127</number>
|
||||
@@ -803,11 +803,11 @@
|
||||
<item row="6" column="0">
|
||||
<widget class="QLabel" name="labelBridgeTAPNIC4">
|
||||
<property name="text">
|
||||
<string>TAP Bridge Device</string>
|
||||
<string>TAP Bridge Device:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="1" colspan="2">
|
||||
<item row="6" column="1">
|
||||
<widget class="QLineEdit" name="bridgeTAPNIC4">
|
||||
<property name="maxLength">
|
||||
<number>127</number>
|
||||
|
||||
@@ -228,6 +228,12 @@
|
||||
<property name="text">
|
||||
<string>Serial port passthrough 1</string>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
@@ -242,6 +248,12 @@
|
||||
<property name="text">
|
||||
<string>Serial port passthrough 2</string>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
@@ -256,6 +268,12 @@
|
||||
<property name="text">
|
||||
<string>Serial port passthrough 3</string>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
@@ -270,6 +288,12 @@
|
||||
<property name="text">
|
||||
<string>Serial port passthrough 4</string>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
@@ -279,20 +303,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="5" column="0" colspan="2">
|
||||
<item row="4" column="0" colspan="2">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureSoundCard1">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
@@ -73,7 +73,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="3">
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureSoundCard2">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
@@ -100,7 +100,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="3">
|
||||
<item row="2" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureSoundCard3">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
@@ -127,7 +127,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="3">
|
||||
<item row="3" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureSoundCard4">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
@@ -154,7 +154,7 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="3">
|
||||
<item row="4" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureMidiOut">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
@@ -181,35 +181,35 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="3">
|
||||
<item row="5" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureMidiIn">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<item row="6" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxMPU401">
|
||||
<property name="text">
|
||||
<string>Standalone MPU-401</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="3">
|
||||
<item row="6" column="2">
|
||||
<widget class="QPushButton" name="pushButtonConfigureMPU401">
|
||||
<property name="text">
|
||||
<string>Configure</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<item row="10" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="checkBoxFloat32">
|
||||
<property name="text">
|
||||
<string>Use FLOAT32 sound</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<item row="11" column="0" colspan="2">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
|
||||
@@ -238,7 +238,7 @@
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0">
|
||||
<item row="12" column="0" colspan="3">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
|
||||
@@ -40,6 +40,12 @@
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
@@ -61,6 +67,12 @@
|
||||
<property name="maxVisibleItems">
|
||||
<number>30</number>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<property name="sizeConstraint">
|
||||
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
|
||||
<enum>QLayout::SetFixedSize</enum>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<widget class="QLabel" name="labelSystemDir">
|
||||
<property name="text">
|
||||
<string>System Directory:</string>
|
||||
</property>
|
||||
@@ -146,7 +146,7 @@
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Vertical</enum>
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
@@ -159,10 +159,10 @@
|
||||
<item>
|
||||
<widget class="QDialogButtonBox" name="buttonBox">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Orientation::Horizontal</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="standardButtons">
|
||||
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
|
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -1812,7 +1812,7 @@ fdc37c93x_reset(void *priv)
|
||||
memset(dev->gpio_pulldn, 0xff, 8);
|
||||
|
||||
/* Acer V62X requires bit 0 to be clear to not be stuck in "clear password" mode. */
|
||||
if (machines[machine].init == machine_at_vectra54_init) {
|
||||
if ((machines[machine].init == machine_at_vectra54_init) || (machines[machine].init == machine_at_vectra500mt_init)) {
|
||||
dev->gpio_pulldn[1] = 0x40;
|
||||
|
||||
/*
|
||||
|
||||
@@ -685,7 +685,7 @@ fdc37m60x_init(const device_t *info)
|
||||
}
|
||||
|
||||
const device_t fdc37m60x_device = {
|
||||
.name = "SMC FDC37C93x Super I/O",
|
||||
.name = "SMC FDC37M60x Super I/O",
|
||||
.internal_name = "fdc37m60x",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
|
||||
@@ -1330,7 +1330,7 @@ w83977_init(const device_t *info)
|
||||
}
|
||||
|
||||
const device_t w83977_device = {
|
||||
.name = "SMC FDC37C93x Super I/O",
|
||||
.name = "Winbond W83977F/TF/EF Super I/O",
|
||||
.internal_name = "w83977",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
|
||||
@@ -344,7 +344,7 @@ ad1848_write(uint16_t addr, uint8_t val, void *priv)
|
||||
|
||||
case 12:
|
||||
if (ad1848->type >= AD1848_TYPE_CS4248) {
|
||||
ad1848->regs[12] = 0x80 | (val & 0x70) | (ad1848->regs[12] & 0x0f);
|
||||
ad1848->regs[12] = 0x80 | (val & 0x60) | (ad1848->regs[12] & 0x0f);
|
||||
if ((ad1848->type >= AD1848_TYPE_CS4231) && (ad1848->type < AD1848_TYPE_CS4235)) {
|
||||
if (val & 0x40)
|
||||
ad1848->fmt_mask |= 0x80;
|
||||
@@ -425,6 +425,19 @@ ad1848_write(uint16_t addr, uint8_t val, void *priv)
|
||||
ad1848->fm_vol_r = (int) ad1848_vols_5bits_aux_gain[val & 0x1f];
|
||||
}
|
||||
}
|
||||
if ((ad1848->type >= AD1848_TYPE_CS4232) && (ad1848->type <= AD1848_TYPE_CS4236)) {
|
||||
if (ad1848->index == 18) {
|
||||
if (val & 0x80)
|
||||
ad1848->fm_vol_l = 0;
|
||||
else
|
||||
ad1848->fm_vol_l = (int) ad1848_vols_5bits_aux_gain[val & 0x1f];
|
||||
} else {
|
||||
if (val & 0x80)
|
||||
ad1848->fm_vol_r = 0;
|
||||
else
|
||||
ad1848->fm_vol_r = (int) ad1848_vols_5bits_aux_gain[val & 0x1f];
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 20 ... 21:
|
||||
@@ -508,6 +521,8 @@ readonly_x:
|
||||
}
|
||||
if (ad1848->type == AD1848_TYPE_CS4231) /* I23 is reserved and read-only on CS4231 non-A */
|
||||
goto readonly_i;
|
||||
if ((ad1848->type >= AD1848_TYPE_CS4232) && (ad1848->type <= AD1848_TYPE_CS4236)) /* I23 bits 7-1 are read-only on CS4231A/4232/4236 non-B, Win2k relies on this for detection */
|
||||
val = (val & 0x01);
|
||||
break;
|
||||
|
||||
case 24:
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#include <86box/plat_fallthrough.h>
|
||||
#include <86box/plat_unused.h>
|
||||
|
||||
#define PNP_ROM_CS4232 "roms/sound/crystal/CS4232.BIN"
|
||||
#define PNP_ROM_CS4236B "roms/sound/crystal/PNPISA01.BIN"
|
||||
|
||||
#define CRYSTAL_NOEEPROM 0x100
|
||||
@@ -88,6 +89,20 @@ static const uint8_t slam_init_key[32] = { 0x96, 0x35, 0x9A, 0xCD, 0xE6, 0xF3, 0
|
||||
0x5E, 0xAF, 0x57, 0x2B, 0x15, 0x8A, 0xC5, 0xE2,
|
||||
0xF1, 0xF8, 0x7C, 0x3E, 0x9F, 0x4F, 0x27, 0x13,
|
||||
0x09, 0x84, 0x42, 0xA1, 0xD0, 0x68, 0x34, 0x1A };
|
||||
|
||||
static const uint8_t cs4232_default[] = {
|
||||
// clang-format off
|
||||
/* Chip configuration */
|
||||
0x00, /* external decode length */
|
||||
0x48, /* reserved */
|
||||
0x75, 0xb9, 0xfc, /* IRQ routing */
|
||||
0x10, 0x03, /* DMA routing */
|
||||
|
||||
/* Default PnP data */
|
||||
0x0e, 0x63, 0x42, 0x32, 0x00, 0x00, 0x00, 0x01, 0x00 /* hinted by documentation to be just the header */
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
static const uint8_t cs4236_default[] = {
|
||||
// clang-format off
|
||||
/* Chip configuration */
|
||||
@@ -388,9 +403,17 @@ cs423x_write(uint16_t addr, uint8_t val, void *priv)
|
||||
|
||||
case 6: /* RAM Access End */
|
||||
/* TriGem Delhi-III BIOS writes undocumented value 0x40 instead of 0x00. */
|
||||
if ((val == 0x00) || (val == 0x40)) {
|
||||
/* Intel Atlantis, Holly, Monaco, Morrison and Thor BIOSes use several undocumented values */
|
||||
/* 0x25, 0x60, 0x69, 0x86, 0xE2, 0xFE and 0xFF were observed on these BIOSes */
|
||||
/* CS4232 likely accepts any written value to end RAM writes */
|
||||
if ((val == 0x00) || (val == 0x40) || (dev->type == CRYSTAL_CS4232)) {
|
||||
cs423x_log("CS423x: RAM end\n");
|
||||
dev->ram_dl = CRYSTAL_RAM_CMD;
|
||||
/* CS4232 resource data at 0x2090/2091 is written backwards */
|
||||
if (dev->type == CRYSTAL_CS4232) {
|
||||
dev->ram_data[0x2090] = 0x00;
|
||||
dev->ram_data[0x2091] = 0x48;
|
||||
}
|
||||
|
||||
/* Update PnP state and resource data. */
|
||||
dev->pnp_size = (dev->type >= CRYSTAL_CS4236) ? 384 : 256; /* we don't know the length */
|
||||
@@ -568,7 +591,11 @@ cs423x_ctxswitch_write(uint16_t addr, UNUSED(uint8_t val), void *priv)
|
||||
{
|
||||
cs423x_t *dev = (cs423x_t *) priv;
|
||||
uint8_t ctx = (dev->regs[7] & 0x80);
|
||||
uint8_t enable_opl = (dev->ad1848.xregs[4] & 0x10) && !(dev->indirect_regs[2] & 0x85);
|
||||
uint8_t enable_opl = (dev->ad1848.xregs[4] & 0x10) && !(dev->indirect_regs[2] & 0x85); /* CS4236B+ */
|
||||
|
||||
/* CS4232/4236 (non-B) doesn't have an IFM bit, always enable the OPL on these chips */
|
||||
if (dev->type <= CRYSTAL_CS4236)
|
||||
enable_opl = 1;
|
||||
|
||||
/* Check if a context switch (WSS=1 <-> SBPro=0) occurred through the address being written. */
|
||||
if ((dev->regs[7] & 0x80) ? ((addr & 0xfff0) == dev->sb_base) : ((addr & 0xfffc) == dev->wss_base)) {
|
||||
@@ -804,6 +831,10 @@ static void
|
||||
cs423x_load_defaults(cs423x_t *dev, uint8_t *dest)
|
||||
{
|
||||
switch (dev->type) {
|
||||
case CRYSTAL_CS4232:
|
||||
memcpy(dest, cs4232_default, sizeof(cs4232_default));
|
||||
dev->pnp_size = 9; /* header-only PnP ROM size */
|
||||
break;
|
||||
case CRYSTAL_CS4236:
|
||||
case CRYSTAL_CS4236B:
|
||||
case CRYSTAL_CS4237B:
|
||||
@@ -837,7 +868,11 @@ cs423x_reset(void *priv)
|
||||
memset(dev->ram_data, 0, sizeof(dev->ram_data));
|
||||
|
||||
/* Load default configuration data to RAM. */
|
||||
cs423x_load_defaults(dev, &dev->ram_data[0x4000]);
|
||||
/* CS4232 uses 0x2090 as the initial RAM location instead of 0x4000 */
|
||||
if (dev->type == CRYSTAL_CS4232)
|
||||
cs423x_load_defaults(dev, &dev->ram_data[0x2090]);
|
||||
else
|
||||
cs423x_load_defaults(dev, &dev->ram_data[0x4000]);
|
||||
|
||||
if (dev->eeprom) {
|
||||
/* Load EEPROM data to RAM if the magic bytes are present. */
|
||||
@@ -846,7 +881,10 @@ cs423x_reset(void *priv)
|
||||
dev->pnp_size = (dev->eeprom_data[2] << 8) | dev->eeprom_data[3];
|
||||
if (dev->pnp_size > 384)
|
||||
dev->pnp_size = 384;
|
||||
memcpy(&dev->ram_data[0x4000], &dev->eeprom_data[4], sizeof(dev->eeprom_data) - 4);
|
||||
if (dev->type == CRYSTAL_CS4232)
|
||||
memcpy(&dev->ram_data[0x2090], &dev->eeprom_data[4], sizeof(dev->eeprom_data) - 4);
|
||||
else
|
||||
memcpy(&dev->ram_data[0x4000], &dev->eeprom_data[4], sizeof(dev->eeprom_data) - 4);
|
||||
} else {
|
||||
cs423x_log("CS423x: EEPROM data invalid, ignoring\n");
|
||||
}
|
||||
@@ -886,6 +924,7 @@ cs423x_init(const device_t *info)
|
||||
dev->type = info->local & 0xff;
|
||||
cs423x_log("CS423x: init(%02X)\n", dev->type);
|
||||
switch (dev->type) {
|
||||
case CRYSTAL_CS4232:
|
||||
case CRYSTAL_CS4236:
|
||||
case CRYSTAL_CS4236B:
|
||||
case CRYSTAL_CS4237B:
|
||||
@@ -893,29 +932,46 @@ cs423x_init(const device_t *info)
|
||||
case CRYSTAL_CS4235:
|
||||
case CRYSTAL_CS4239:
|
||||
/* Different WSS codec families. */
|
||||
dev->ad1848_type = (dev->type >= CRYSTAL_CS4235) ? AD1848_TYPE_CS4235 : ((dev->type >= CRYSTAL_CS4236B) ? AD1848_TYPE_CS4236B : AD1848_TYPE_CS4236);
|
||||
dev->ad1848_type = (dev->type >= CRYSTAL_CS4235) ? AD1848_TYPE_CS4235 : ((dev->type >= CRYSTAL_CS4236B) ? AD1848_TYPE_CS4236B : (dev->type >= CRYSTAL_CS4236) ? AD1848_TYPE_CS4236 : AD1848_TYPE_CS4232);
|
||||
|
||||
/* Different Chip Version and ID values (N/A on CS4236), which shouldn't be reset by ad1848_init. */
|
||||
dev->ad1848.xregs[25] = dev->type;
|
||||
|
||||
/* Same EEPROM structure. */
|
||||
dev->pnp_offset = 0x4013;
|
||||
/* Same EEPROM structure on CS4236+. CS4232 is different. */
|
||||
if (dev->type == CRYSTAL_CS4232)
|
||||
dev->pnp_offset = 0x2097;
|
||||
else
|
||||
dev->pnp_offset = 0x4013;
|
||||
|
||||
if (!(info->local & CRYSTAL_NOEEPROM)) {
|
||||
/* Start a new EEPROM with the default configuration data. */
|
||||
cs423x_load_defaults(dev, &dev->eeprom_data[4]);
|
||||
|
||||
/* Load PnP resource data ROM. */
|
||||
FILE *fp = rom_fopen(PNP_ROM_CS4236B, "rb");
|
||||
if (fp) {
|
||||
uint16_t eeprom_pnp_offset = (dev->pnp_offset & 0x1ff) + 4;
|
||||
/* This is wrong. The header field only indicates PnP resource data length, and real chips use
|
||||
it to locate the firmware patch area, but we don't need any of that, so we can get away
|
||||
with pretending the whole ROM is PnP data, at least until we can get full EEPROM dumps. */
|
||||
dev->pnp_size = fread(&dev->eeprom_data[eeprom_pnp_offset], 1, sizeof(dev->eeprom_data) - eeprom_pnp_offset, fp);
|
||||
fclose(fp);
|
||||
if (dev->type == CRYSTAL_CS4232) {
|
||||
FILE *fp = rom_fopen(PNP_ROM_CS4232, "rb");
|
||||
if (fp) {
|
||||
uint16_t eeprom_pnp_offset = (dev->pnp_offset & 0x0f) + 4;
|
||||
/* This is wrong. The header field only indicates PnP resource data length, and real chips use
|
||||
it to locate the firmware patch area, but we don't need any of that, so we can get away
|
||||
with pretending the whole ROM is PnP data, at least until we can get full EEPROM dumps. */
|
||||
dev->pnp_size = fread(&dev->eeprom_data[eeprom_pnp_offset], 1, sizeof(dev->eeprom_data) - eeprom_pnp_offset, fp);
|
||||
fclose(fp);
|
||||
} else {
|
||||
dev->pnp_size = 0;
|
||||
}
|
||||
} else {
|
||||
dev->pnp_size = 0;
|
||||
FILE *fp = rom_fopen(PNP_ROM_CS4236B, "rb");
|
||||
if (fp) {
|
||||
uint16_t eeprom_pnp_offset = (dev->pnp_offset & 0x1ff) + 4;
|
||||
/* This is wrong. The header field only indicates PnP resource data length, and real chips use
|
||||
it to locate the firmware patch area, but we don't need any of that, so we can get away
|
||||
with pretending the whole ROM is PnP data, at least until we can get full EEPROM dumps. */
|
||||
dev->pnp_size = fread(&dev->eeprom_data[eeprom_pnp_offset], 1, sizeof(dev->eeprom_data) - eeprom_pnp_offset, fp);
|
||||
fclose(fp);
|
||||
} else {
|
||||
dev->pnp_size = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* Populate EEPROM header if the PnP ROM was loaded. */
|
||||
@@ -928,6 +984,10 @@ cs423x_init(const device_t *info)
|
||||
|
||||
/* Patch PnP ROM and set EEPROM file name. */
|
||||
switch (dev->type) {
|
||||
case CRYSTAL_CS4232:
|
||||
dev->nvr_path = "cs4232.nvr";
|
||||
break;
|
||||
|
||||
case CRYSTAL_CS4236:
|
||||
if (dev->pnp_size) {
|
||||
dev->eeprom_data[26] = 0x36;
|
||||
@@ -1005,6 +1065,7 @@ cs423x_init(const device_t *info)
|
||||
/* Initialize SBPro codec. The WSS codec is initialized later by cs423x_reset */
|
||||
dev->sb = device_add_inst(&sb_pro_compat_device, 1);
|
||||
sound_set_cd_audio_filter(sbpro_filter_cd_audio, dev->sb); /* CD audio filter for the default context */
|
||||
music_add_handler(sb_get_music_buffer_sbpro, dev->sb); /* Init the SBPro OPL3 since sb_pro_compat_init does not */
|
||||
|
||||
/* Initialize RAM, registers and WSS codec. */
|
||||
cs423x_reset(dev);
|
||||
@@ -1037,6 +1098,12 @@ cs423x_close(void *priv)
|
||||
free(dev);
|
||||
}
|
||||
|
||||
static int
|
||||
cs4232_available(void)
|
||||
{
|
||||
return rom_present(PNP_ROM_CS4232);
|
||||
}
|
||||
|
||||
static int
|
||||
cs423x_available(void)
|
||||
{
|
||||
@@ -1051,6 +1118,34 @@ cs423x_speed_changed(void *priv)
|
||||
ad1848_speed_changed(&dev->ad1848);
|
||||
}
|
||||
|
||||
const device_t cs4232_device = {
|
||||
.name = "Crystal CS4232",
|
||||
.internal_name = "cs4232",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = CRYSTAL_CS4232,
|
||||
.init = cs423x_init,
|
||||
.close = cs423x_close,
|
||||
.reset = cs423x_reset,
|
||||
.available = cs4232_available,
|
||||
.speed_changed = cs423x_speed_changed,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t cs4232_onboard_device = {
|
||||
.name = "Crystal CS4232 (On-Board)",
|
||||
.internal_name = "cs4232_onboard",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = CRYSTAL_CS4232 | CRYSTAL_NOEEPROM,
|
||||
.init = cs423x_init,
|
||||
.close = cs423x_close,
|
||||
.reset = cs423x_reset,
|
||||
.available = cs423x_available,
|
||||
.speed_changed = cs423x_speed_changed,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
const device_t cs4235_device = {
|
||||
.name = "Crystal CS4235",
|
||||
.internal_name = "cs4235",
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* Yamaha YMF-71x (OPL3-SA2/3) audio controller emulation.
|
||||
* Yamaha YMF71x (OPL3-SA2/3) audio controller emulation.
|
||||
*
|
||||
* Authors: Cacodemon345
|
||||
* Eluan Costa Miranda <eluancm@gmail.com>
|
||||
@@ -74,7 +74,7 @@ static const uint8_t ymf71x_init_key[32] = { 0xB1, 0xD8, 0x6C, 0x36, 0x9B, 0x4D,
|
||||
0x33, 0x19, 0x8C, 0x46, 0xA3, 0x51, 0xA8, 0x54 };
|
||||
|
||||
/* Reversed attenuation values borrowed from snd_sb.c */
|
||||
/* YMF-71x master volume attenuation is -30dB when all bits are 1, 0dB when all bits are 0 */
|
||||
/* YMF71x master volume attenuation is -30dB when all bits are 1, 0dB when all bits are 0 */
|
||||
static const double ymf71x_att_2dbstep_4bits[] = {
|
||||
32767.0, 26027.0, 20674.0, 16422.0, 13044.0, 10362.0, 8230.0, 6537.0,
|
||||
5192.0, 4125.0, 3276.0, 2602.0, 2067.0, 1641.0, 1304.0, 164.0
|
||||
@@ -836,7 +836,7 @@ static const device_config_t ymf71x_config[] = {
|
||||
};
|
||||
|
||||
const device_t ymf715_onboard_device = {
|
||||
.name = "Yamaha YMF-715 Onboard (OPL3-SA3)",
|
||||
.name = "Yamaha YMF715 (OPL3-SA3) (On-Board)",
|
||||
.internal_name = "ymf715_onboard",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = 0x102,
|
||||
@@ -850,7 +850,7 @@ const device_t ymf715_onboard_device = {
|
||||
};
|
||||
|
||||
const device_t ymf718_device = {
|
||||
.name = "Yamaha YMF-718 (OPL3-SA2)",
|
||||
.name = "Yamaha YMF718 (OPL3-SA2)",
|
||||
.internal_name = "ymf718",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = 0x01,
|
||||
@@ -864,7 +864,7 @@ const device_t ymf718_device = {
|
||||
};
|
||||
|
||||
const device_t ymf719_device = {
|
||||
.name = "Yamaha YMF-719 (OPL3-SA3)",
|
||||
.name = "Yamaha YMF719 (OPL3-SA3)",
|
||||
.internal_name = "ymf719",
|
||||
.flags = DEVICE_ISA16,
|
||||
.local = 0x02,
|
||||
|
||||
@@ -140,6 +140,7 @@ static const SOUND_CARD sound_cards[] = {
|
||||
{ &azt2316a_device },
|
||||
{ &azt1605_device },
|
||||
{ &sb_goldfinch_device },
|
||||
{ &cs4232_device },
|
||||
{ &cs4235_device },
|
||||
{ &cs4236b_device },
|
||||
{ &gus_device },
|
||||
@@ -849,4 +850,4 @@ sound_fdd_thread_end(void)
|
||||
sound_fdd_start_event = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +44,7 @@ endif()
|
||||
|
||||
add_library(ui OBJECT
|
||||
unix_sdl.c
|
||||
unix_osd.c
|
||||
unix_cdrom.c
|
||||
dummy_cdrom_ioctl.c
|
||||
)
|
||||
|
||||
@@ -12,10 +12,10 @@
|
||||
# After a successful build, you can install the RPMs as follows:
|
||||
# sudo dnf install RPMS/$(uname -m)/86Box-3* RPMS/noarch/86Box-roms*
|
||||
|
||||
%global romver 4.1
|
||||
%global romver 5.2
|
||||
|
||||
Name: 86Box
|
||||
Version: 5.2
|
||||
Version: 6.0
|
||||
Release: 1%{?dist}
|
||||
Summary: Classic PC emulator
|
||||
License: GPLv2+
|
||||
@@ -121,5 +121,5 @@ popd
|
||||
%{_datadir}/%{name}/roms
|
||||
|
||||
%changelog
|
||||
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 5.2-1
|
||||
* Sat Aug 31 Jasmine Iwanek <jriwanek[AT]gmail.com> 6.0-1
|
||||
- Bump release
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
</categories>
|
||||
<launchable type="desktop-id">net.86box.86Box.desktop</launchable>
|
||||
<releases>
|
||||
<release version="5.2" date="2025-09-18"/>
|
||||
<release version="6.0" date="2025-10-26"/>
|
||||
</releases>
|
||||
<content_rating type="oars-1.1" />
|
||||
<description>
|
||||
|
||||
775
src/unix/unix.c
775
src/unix/unix.c
@@ -41,6 +41,7 @@
|
||||
#include <86box/device.h>
|
||||
#include <86box/gameport.h>
|
||||
#include <86box/unix_sdl.h>
|
||||
#include <86box/unix_osd.h>
|
||||
#include "cpu.h"
|
||||
#include <86box/timer.h>
|
||||
#include <86box/nvr.h>
|
||||
@@ -52,6 +53,8 @@
|
||||
#define __USE_GNU 1 /* shouldn't be done, yet it is */
|
||||
#include <pthread.h>
|
||||
|
||||
extern SDL_Window *sdl_win;
|
||||
|
||||
static int first_use = 1;
|
||||
static uint64_t StartingTime;
|
||||
static uint64_t Frequency;
|
||||
@@ -72,6 +75,10 @@ SDL_threadID eventthread;
|
||||
static int exit_event = 0;
|
||||
static int fullscreen_pending = 0;
|
||||
|
||||
// Two keys to be pressed together to open the OSD, variables to make them configurable in future
|
||||
static uint16_t osd_open_first_key = SDL_SCANCODE_RCTRL;
|
||||
static uint16_t osd_open_second_key = SDL_SCANCODE_F11;
|
||||
|
||||
static const uint16_t sdl_to_xt[0x200] = {
|
||||
[SDL_SCANCODE_ESCAPE] = 0x01,
|
||||
[SDL_SCANCODE_1] = 0x02,
|
||||
@@ -291,7 +298,7 @@ plat_get_string(int i)
|
||||
case STRING_MONITOR_SLEEP:
|
||||
return L"Monitor in sleep mode";
|
||||
case STRING_EDID_TOO_LARGE:
|
||||
return "EDID file \"%ls\" is too large.";
|
||||
return L"EDID file \"%ls\" is too large.";
|
||||
}
|
||||
return L"";
|
||||
}
|
||||
@@ -480,22 +487,24 @@ plat_remove(char *path)
|
||||
remove(path);
|
||||
}
|
||||
|
||||
void
|
||||
ui_sb_update_icon_state(UNUSED(int tag), UNUSED(int state))
|
||||
void ui_sb_update_icon_state(int tag, int state)
|
||||
{
|
||||
/* No-op. */
|
||||
osd_ui_sb_update_icon_state(tag, state);
|
||||
}
|
||||
|
||||
void
|
||||
ui_sb_update_icon(UNUSED(int tag), UNUSED(int active))
|
||||
void ui_sb_update_icon(int tag, int active)
|
||||
{
|
||||
/* No-op. */
|
||||
osd_ui_sb_update_icon(tag, active);
|
||||
}
|
||||
|
||||
void
|
||||
ui_sb_update_icon_write(UNUSED(int tag), UNUSED(int active))
|
||||
void ui_sb_update_icon_write(int tag, int active)
|
||||
{
|
||||
/* No-op. */
|
||||
osd_ui_sb_update_icon_write(tag, active);
|
||||
}
|
||||
|
||||
void ui_sb_update_icon_wp(int tag, int state)
|
||||
{
|
||||
osd_ui_sb_update_icon_wp(tag, state);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -541,7 +550,6 @@ path_get_dirname(char *dest, const char *path)
|
||||
*dest++ = *path++;
|
||||
*dest = '\0';
|
||||
}
|
||||
volatile int cpu_thread_run = 1;
|
||||
|
||||
void
|
||||
ui_sb_set_text_w(UNUSED(wchar_t *wstr))
|
||||
@@ -561,6 +569,8 @@ strnicmp(const char *s1, const char *s2, size_t n)
|
||||
return strncasecmp(s1, s2, n);
|
||||
}
|
||||
|
||||
volatile int cpu_thread_run = 1;
|
||||
|
||||
void
|
||||
main_thread(UNUSED(void *param))
|
||||
{
|
||||
@@ -574,15 +584,20 @@ main_thread(UNUSED(void *param))
|
||||
// title_update = 1;
|
||||
old_time = SDL_GetTicks();
|
||||
drawits = frames = 0;
|
||||
while (!is_quit && cpu_thread_run) {
|
||||
while (!is_quit && cpu_thread_run)
|
||||
{
|
||||
/* See if it is time to run a frame of code. */
|
||||
new_time = SDL_GetTicks();
|
||||
|
||||
#ifdef USE_GDBSTUB
|
||||
if (gdbstub_next_asap && (drawits <= 0))
|
||||
drawits = 10;
|
||||
else
|
||||
#endif
|
||||
drawits += (new_time - old_time);
|
||||
#else
|
||||
drawits += (new_time - old_time);
|
||||
#endif
|
||||
|
||||
old_time = new_time;
|
||||
if (drawits > 0 && !dopause) {
|
||||
/* Yes, so do one frame now. */
|
||||
@@ -599,15 +614,18 @@ main_thread(UNUSED(void *param))
|
||||
nvr_dosave = 0;
|
||||
frames = 0;
|
||||
}
|
||||
} else /* Just so we dont overload the host OS. */
|
||||
}
|
||||
else /* Just so we dont overload the host OS. */
|
||||
SDL_Delay(1);
|
||||
|
||||
/* If needed, handle a screen resize. */
|
||||
if (atomic_load(&doresize_monitors[0]) && !video_fullscreen && !is_quit) {
|
||||
|
||||
if (vid_resize & 2)
|
||||
plat_resize(fixed_size_x, fixed_size_y, 0);
|
||||
else
|
||||
plat_resize(scrnsz_x, scrnsz_y, 0);
|
||||
|
||||
atomic_store(&doresize_monitors[0], 1);
|
||||
}
|
||||
}
|
||||
@@ -760,8 +778,6 @@ ui_sb_set_ready(UNUSED(int ready))
|
||||
/* No-op. */
|
||||
}
|
||||
|
||||
char *xargv[512];
|
||||
|
||||
// From musl.
|
||||
char *
|
||||
local_strsep(char **str, const char *sep)
|
||||
@@ -922,7 +938,7 @@ plat_get_vmm_dir(char *outbuf, const size_t len)
|
||||
}
|
||||
|
||||
bool
|
||||
process_media_commands_3(uint8_t *id, char *fn, uint8_t *wp, int cmdargc)
|
||||
process_media_commands_3(uint8_t *id, char *fn, uint8_t *wp, char **xargv, int cmdargc)
|
||||
{
|
||||
bool err = false;
|
||||
|
||||
@@ -958,6 +974,7 @@ process_media_commands_3(uint8_t *id, char *fn, uint8_t *wp, int cmdargc)
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
return err;
|
||||
}
|
||||
|
||||
char *(*f_readline)(const char *) = NULL;
|
||||
int (*f_add_history)(const char *) = NULL;
|
||||
void (*f_rl_callback_handler_remove)(void) = NULL;
|
||||
@@ -968,11 +985,6 @@ void (*f_rl_callback_handler_remove)(void) = NULL;
|
||||
# define LIBEDIT_LIBRARY "libedit.so"
|
||||
#endif
|
||||
|
||||
void ui_sb_update_icon_wp(int tag, int state)
|
||||
{
|
||||
/* No-op */
|
||||
}
|
||||
|
||||
uint32_t
|
||||
timer_onesec(uint32_t interval, UNUSED(void *param))
|
||||
{
|
||||
@@ -981,67 +993,50 @@ timer_onesec(uint32_t interval, UNUSED(void *param))
|
||||
}
|
||||
|
||||
void
|
||||
monitor_thread(UNUSED(void *param))
|
||||
unix_executeLine(char *line)
|
||||
{
|
||||
#ifndef USE_CLI
|
||||
if (isatty(fileno(stdin)) && isatty(fileno(stdout))) {
|
||||
char *line = NULL;
|
||||
size_t n;
|
||||
if (line) {
|
||||
char *xargv[512];
|
||||
int cmdargc = 0;
|
||||
char *linecpy, *linespn;
|
||||
|
||||
printf("86Box monitor console.\n");
|
||||
while (!exit_event) {
|
||||
if (feof(stdin))
|
||||
linecpy = linespn = strdup(line);
|
||||
linecpy[strcspn(linecpy, "\r\n")] = 0;
|
||||
|
||||
if (!linecpy) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (f_add_history)
|
||||
f_add_history(linecpy);
|
||||
|
||||
memset(xargv, 0, sizeof(xargv));
|
||||
while (1) {
|
||||
xargv[cmdargc++] = local_strsep(&linespn, " ");
|
||||
if (xargv[cmdargc - 1] == NULL || cmdargc >= 512)
|
||||
break;
|
||||
#ifdef ENABLE_READLINE
|
||||
if (f_readline)
|
||||
line = f_readline("(86Box) ");
|
||||
else {
|
||||
#endif
|
||||
printf("(86Box) ");
|
||||
(void) !getline(&line, &n, stdin);
|
||||
#ifdef ENABLE_READLINE
|
||||
}
|
||||
#endif
|
||||
if (line) {
|
||||
int cmdargc = 0;
|
||||
char *linecpy;
|
||||
|
||||
line[strcspn(line, "\r\n")] = '\0';
|
||||
linecpy = strdup(line);
|
||||
if (!linecpy) {
|
||||
free(line);
|
||||
line = NULL;
|
||||
continue;
|
||||
}
|
||||
if (f_add_history)
|
||||
f_add_history(line);
|
||||
memset(xargv, 0, sizeof(xargv));
|
||||
while (1) {
|
||||
xargv[cmdargc++] = local_strsep(&linecpy, " ");
|
||||
if (xargv[cmdargc - 1] == NULL || cmdargc >= 512)
|
||||
break;
|
||||
}
|
||||
cmdargc--;
|
||||
if (strncasecmp(xargv[0], "help", 4) == 0) {
|
||||
printf(
|
||||
"fddload <id> <filename> <wp> - Load floppy disk image into drive <id>.\n"
|
||||
"cdload <id> <filename> - Load CD-ROM image into drive <id>.\n"
|
||||
"rdiskload <id> <filename> <wp> - Load removable disk image into removable disk drive <id>.\n"
|
||||
"cartload <id> <filename> <wp> - Load cartridge image into cartridge drive <id>.\n"
|
||||
"moload <id> <filename> <wp> - Load MO image into MO drive <id>.\n\n"
|
||||
"fddeject <id> - eject disk from floppy drive <id>.\n"
|
||||
"cdeject <id> - eject disc from CD-ROM drive <id>.\n"
|
||||
"rdiskeject <id> - eject removable disk image from removable disk drive <id>.\n"
|
||||
"carteject <id> - eject cartridge from drive <id>.\n"
|
||||
"moeject <id> - eject image from MO drive <id>.\n\n"
|
||||
"hardreset - hard reset the emulated system.\n"
|
||||
"pause - pause the the emulated system.\n"
|
||||
"fullscreen - toggle fullscreen.\n"
|
||||
"version - print version and license information.\n"
|
||||
"exit - exit 86Box.\n");
|
||||
} else if (strncasecmp(xargv[0], "exit", 4) == 0) {
|
||||
exit_event = 1;
|
||||
} else if (strncasecmp(xargv[0], "version", 7) == 0) {
|
||||
}
|
||||
cmdargc--;
|
||||
if (strncasecmp(xargv[0], "help", 4) == 0) {
|
||||
printf(
|
||||
"fddload <id> <filename> <wp> - Load floppy disk image into drive <id>.\n"
|
||||
"cdload <id> <filename> - Load CD-ROM image into drive <id>.\n"
|
||||
"rdiskload <id> <filename> <wp> - Load removable disk image into removable disk drive <id>.\n"
|
||||
"cartload <id> <filename> <wp> - Load cartridge image into cartridge drive <id>.\n"
|
||||
"moload <id> <filename> <wp> - Load MO image into MO drive <id>.\n\n"
|
||||
"fddeject <id> - eject disk from floppy drive <id>.\n"
|
||||
"cdeject <id> - eject disc from CD-ROM drive <id>.\n"
|
||||
"rdiskeject <id> - eject removable disk image from removable disk drive <id>.\n"
|
||||
"carteject <id> - eject cartridge from drive <id>.\n"
|
||||
"moeject <id> - eject image from MO drive <id>.\n\n"
|
||||
"hardreset - hard reset the emulated system.\n"
|
||||
"pause - pause the the emulated system.\n"
|
||||
"fullscreen - toggle fullscreen.\n"
|
||||
"version - print version and license information.\n"
|
||||
"exit - exit 86Box.\n");
|
||||
} else if (strncasecmp(xargv[0], "exit", 4) == 0) {
|
||||
exit_event = 1;
|
||||
} else if (strncasecmp(xargv[0], "version", 7) == 0) {
|
||||
# ifndef EMU_GIT_HASH
|
||||
# define EMU_GIT_HASH "0000000"
|
||||
# endif
|
||||
@@ -1064,169 +1059,191 @@ monitor_thread(UNUSED(void *param))
|
||||
# define DYNAREC_STR "no dynarec"
|
||||
# endif
|
||||
|
||||
printf(
|
||||
"%s v%s [%s] [%s, %s]\n\n"
|
||||
"An emulator of old computers\n"
|
||||
"Authors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), "
|
||||
"Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), "
|
||||
"Tiseno100, reenigne, and others.\n"
|
||||
"With previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\n"
|
||||
"Released under the GNU General Public License version 2 or later. See LICENSE for more information.\n",
|
||||
EMU_NAME, EMU_VERSION_FULL, EMU_GIT_HASH, ARCH_STR, DYNAREC_STR);
|
||||
} else if (strncasecmp(xargv[0], "fullscreen", 10) == 0) {
|
||||
video_fullscreen = video_fullscreen ? 0 : 1;
|
||||
fullscreen_pending = 1;
|
||||
} else if (strncasecmp(xargv[0], "pause", 5) == 0) {
|
||||
plat_pause(dopause ^ 1);
|
||||
printf("%s", dopause ? "Paused.\n" : "Unpaused.\n");
|
||||
} else if (strncasecmp(xargv[0], "hardreset", 9) == 0) {
|
||||
pc_reset_hard();
|
||||
} else if (strncasecmp(xargv[0], "cdload", 6) == 0 && cmdargc >= 3) {
|
||||
uint8_t id;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
printf(
|
||||
"%s v%s [%s] [%s, %s]\n\n"
|
||||
"An emulator of old computers\n"
|
||||
"Authors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), "
|
||||
"Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), "
|
||||
"Tiseno100, reenigne, and others.\n"
|
||||
"With previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\n"
|
||||
"Released under the GNU General Public License version 2 or later. See LICENSE for more information.\n",
|
||||
EMU_NAME, EMU_VERSION_FULL, EMU_GIT_HASH, ARCH_STR, DYNAREC_STR);
|
||||
} else if (strncasecmp(xargv[0], "fullscreen", 10) == 0) {
|
||||
video_fullscreen = video_fullscreen ? 0 : 1;
|
||||
fullscreen_pending = 1;
|
||||
} else if (strncasecmp(xargv[0], "pause", 5) == 0) {
|
||||
plat_pause(dopause ^ 1);
|
||||
printf("%s", dopause ? "Paused.\n" : "Unpaused.\n");
|
||||
} else if (strncasecmp(xargv[0], "hardreset", 9) == 0) {
|
||||
pc_reset_hard();
|
||||
} else if (strncasecmp(xargv[0], "cdload", 6) == 0 && cmdargc >= 3) {
|
||||
uint8_t id;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(line);
|
||||
free(linecpy);
|
||||
line = NULL;
|
||||
continue;
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(linecpy);
|
||||
return;
|
||||
}
|
||||
id = atoi(xargv[1]);
|
||||
memset(fn, 0, sizeof(fn));
|
||||
if (xargv[2][0] == '\'' || xargv[2][0] == '"') {
|
||||
int curarg = 2;
|
||||
|
||||
for (curarg = 2; curarg < cmdargc; curarg++) {
|
||||
if (strlen(fn) + strlen(xargv[curarg]) >= PATH_MAX) {
|
||||
err = true;
|
||||
fprintf(stderr, "Path name too long.\n");
|
||||
}
|
||||
id = atoi(xargv[1]);
|
||||
memset(fn, 0, sizeof(fn));
|
||||
if (xargv[2][0] == '\'' || xargv[2][0] == '"') {
|
||||
int curarg = 2;
|
||||
|
||||
for (curarg = 2; curarg < cmdargc; curarg++) {
|
||||
if (strlen(fn) + strlen(xargv[curarg]) >= PATH_MAX) {
|
||||
err = true;
|
||||
fprintf(stderr, "Path name too long.\n");
|
||||
}
|
||||
strcat(fn, xargv[curarg] + (xargv[curarg][0] == '\'' || xargv[curarg][0] == '"'));
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"') {
|
||||
break;
|
||||
}
|
||||
strcat(fn, " ");
|
||||
else
|
||||
{
|
||||
strcat(fn, xargv[curarg] + (xargv[curarg][0] == '\'' || xargv[curarg][0] == '"'));
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"') {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
if (strlen(xargv[2]) < PATH_MAX) {
|
||||
strcpy(fn, xargv[2]);
|
||||
} else {
|
||||
fprintf(stderr, "Path name too long.\n");
|
||||
}
|
||||
}
|
||||
if (!err) {
|
||||
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting disc into CD-ROM drive %hhu: %s\n", id, fn);
|
||||
cdrom_mount(id, fn);
|
||||
}
|
||||
} else if (strncasecmp(xargv[0], "fddeject", 8) == 0 && cmdargc >= 2) {
|
||||
floppy_eject(atoi(xargv[1]));
|
||||
} else if (strncasecmp(xargv[0], "cdeject", 8) == 0 && cmdargc >= 2) {
|
||||
cdrom_mount(atoi(xargv[1]), "");
|
||||
} else if (strncasecmp(xargv[0], "moeject", 8) == 0 && cmdargc >= 2) {
|
||||
mo_eject(atoi(xargv[1]));
|
||||
} else if (strncasecmp(xargv[0], "carteject", 8) == 0 && cmdargc >= 2) {
|
||||
cartridge_eject(atoi(xargv[1]));
|
||||
} else if (strncasecmp(xargv[0], "rdiskeject", 8) == 0 && cmdargc >= 2) {
|
||||
rdisk_eject(atoi(xargv[1]));
|
||||
} else if (strncasecmp(xargv[0], "fddload", 7) == 0 && cmdargc >= 4) {
|
||||
uint8_t id;
|
||||
uint8_t wp;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(line);
|
||||
free(linecpy);
|
||||
line = NULL;
|
||||
continue;
|
||||
}
|
||||
err = process_media_commands_3(&id, fn, &wp, cmdargc);
|
||||
if (!err) {
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting disk into floppy drive %c: %s\n", id + 'A', fn);
|
||||
floppy_mount(id, fn, wp);
|
||||
}
|
||||
} else if (strncasecmp(xargv[0], "moload", 7) == 0 && cmdargc >= 4) {
|
||||
uint8_t id;
|
||||
uint8_t wp;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(line);
|
||||
free(linecpy);
|
||||
line = NULL;
|
||||
continue;
|
||||
}
|
||||
err = process_media_commands_3(&id, fn, &wp, cmdargc);
|
||||
if (!err) {
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting into mo drive %hhu: %s\n", id, fn);
|
||||
mo_mount(id, fn, wp);
|
||||
}
|
||||
} else if (strncasecmp(xargv[0], "cartload", 7) == 0 && cmdargc >= 4) {
|
||||
uint8_t id;
|
||||
uint8_t wp;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(line);
|
||||
free(linecpy);
|
||||
line = NULL;
|
||||
continue;
|
||||
}
|
||||
err = process_media_commands_3(&id, fn, &wp, cmdargc);
|
||||
if (!err) {
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting tape into cartridge holder %hhu: %s\n", id, fn);
|
||||
cartridge_mount(id, fn, wp);
|
||||
}
|
||||
} else if (strncasecmp(xargv[0], "rdiskload", 7) == 0 && cmdargc >= 4) {
|
||||
uint8_t id;
|
||||
uint8_t wp;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(line);
|
||||
free(linecpy);
|
||||
line = NULL;
|
||||
continue;
|
||||
}
|
||||
err = process_media_commands_3(&id, fn, &wp, cmdargc);
|
||||
if (!err) {
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting disk into removable disk drive %c: %s\n", id + 'A', fn);
|
||||
rdisk_mount(id, fn, wp);
|
||||
strcat(fn, " ");
|
||||
}
|
||||
}
|
||||
free(line);
|
||||
free(linecpy);
|
||||
line = NULL;
|
||||
} else {
|
||||
if (strlen(xargv[2]) < PATH_MAX) {
|
||||
strncpy(fn, xargv[2], PATH_MAX-1);
|
||||
} else {
|
||||
fprintf(stderr, "Path name too long.\n");
|
||||
}
|
||||
}
|
||||
if (!err) {
|
||||
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting disc into CD-ROM drive %hhu: %s\n", id, fn);
|
||||
cdrom_mount(id, fn);
|
||||
}
|
||||
} else if (strncasecmp(xargv[0], "fddeject", 8) == 0 && cmdargc >= 2) {
|
||||
floppy_eject(atoi(xargv[1]));
|
||||
} else if (strncasecmp(xargv[0], "cdeject", 8) == 0 && cmdargc >= 2) {
|
||||
cdrom_mount(atoi(xargv[1]), "");
|
||||
} else if (strncasecmp(xargv[0], "moeject", 8) == 0 && cmdargc >= 2) {
|
||||
mo_eject(atoi(xargv[1]));
|
||||
} else if (strncasecmp(xargv[0], "carteject", 8) == 0 && cmdargc >= 2) {
|
||||
cartridge_eject(atoi(xargv[1]));
|
||||
} else if (strncasecmp(xargv[0], "rdiskeject", 8) == 0 && cmdargc >= 2) {
|
||||
rdisk_eject(atoi(xargv[1]));
|
||||
} else if (strncasecmp(xargv[0], "fddload", 7) == 0 && cmdargc >= 4) {
|
||||
uint8_t id;
|
||||
uint8_t wp;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(linecpy);
|
||||
return;
|
||||
}
|
||||
err = process_media_commands_3(&id, fn, &wp, xargv, cmdargc);
|
||||
if (!err) {
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting disk into floppy drive %c: %s\n", id + 'A', fn);
|
||||
floppy_mount(id, fn, wp);
|
||||
}
|
||||
} else if (strncasecmp(xargv[0], "moload", 7) == 0 && cmdargc >= 4) {
|
||||
uint8_t id;
|
||||
uint8_t wp;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(linecpy);
|
||||
return;
|
||||
}
|
||||
err = process_media_commands_3(&id, fn, &wp, xargv, cmdargc);
|
||||
if (!err) {
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting into mo drive %hhu: %s\n", id, fn);
|
||||
mo_mount(id, fn, wp);
|
||||
}
|
||||
} else if (strncasecmp(xargv[0], "cartload", 7) == 0 && cmdargc >= 4) {
|
||||
uint8_t id;
|
||||
uint8_t wp;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(linecpy);
|
||||
return;
|
||||
}
|
||||
err = process_media_commands_3(&id, fn, &wp, xargv, cmdargc);
|
||||
if (!err) {
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting tape into cartridge holder %hhu: %s\n", id, fn);
|
||||
cartridge_mount(id, fn, wp);
|
||||
}
|
||||
} else if (strncasecmp(xargv[0], "rdiskload", 7) == 0 && cmdargc >= 4) {
|
||||
uint8_t id;
|
||||
uint8_t wp;
|
||||
bool err = false;
|
||||
char fn[PATH_MAX];
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
|
||||
if (!xargv[2] || !xargv[1]) {
|
||||
free(linecpy);
|
||||
return;
|
||||
}
|
||||
err = process_media_commands_3(&id, fn, &wp, xargv, cmdargc);
|
||||
if (!err) {
|
||||
if (fn[strlen(fn) - 1] == '\''
|
||||
|| fn[strlen(fn) - 1] == '"')
|
||||
fn[strlen(fn) - 1] = '\0';
|
||||
printf("Inserting disk into removable disk drive %c: %s\n", id + 'A', fn);
|
||||
rdisk_mount(id, fn, wp);
|
||||
}
|
||||
}
|
||||
free(linecpy);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
monitor_thread(UNUSED(void *param))
|
||||
{
|
||||
#ifndef USE_CLI
|
||||
if (isatty(fileno(stdin)) && isatty(fileno(stdout))) {
|
||||
char *line = NULL;
|
||||
size_t n;
|
||||
|
||||
printf("86Box monitor console.\n");
|
||||
while (!exit_event)
|
||||
{
|
||||
if (feof(stdin))
|
||||
break;
|
||||
|
||||
#ifdef ENABLE_READLINE
|
||||
if (f_readline)
|
||||
line = f_readline("(86Box) ");
|
||||
else {
|
||||
#endif
|
||||
printf("(86Box) ");
|
||||
(void) !getline(&line, &n, stdin);
|
||||
#ifdef ENABLE_READLINE
|
||||
}
|
||||
#endif
|
||||
|
||||
unix_executeLine(line);
|
||||
|
||||
free(line);
|
||||
line = NULL;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -1283,106 +1300,41 @@ main(int argc, char **argv)
|
||||
plat_pause(0);
|
||||
|
||||
/* Initialize the rendering window, or fullscreen. */
|
||||
|
||||
do_start();
|
||||
|
||||
#ifndef USE_CLI
|
||||
thread_create(monitor_thread, NULL);
|
||||
#endif
|
||||
|
||||
SDL_AddTimer(1000, timer_onesec, NULL);
|
||||
while (!is_quit) {
|
||||
while (!is_quit)
|
||||
{
|
||||
static int mouse_inside = 0;
|
||||
static int osd_first_key_pressed = 0;
|
||||
static int flag_osd_open = 0;
|
||||
|
||||
while (SDL_PollEvent(&event)) {
|
||||
switch (event.type) {
|
||||
case SDL_QUIT:
|
||||
exit_event = 1;
|
||||
break;
|
||||
case SDL_MOUSEWHEEL:
|
||||
while (SDL_PollEvent(&event))
|
||||
{
|
||||
if (flag_osd_open == 1)
|
||||
{
|
||||
// route almost everything to the OSD
|
||||
switch (event.type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
{
|
||||
if (mouse_capture || video_fullscreen) {
|
||||
if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) {
|
||||
event.wheel.x *= -1;
|
||||
event.wheel.y *= -1;
|
||||
}
|
||||
SDL_LockMutex(mousemutex);
|
||||
mouse_set_z(event.wheel.y);
|
||||
SDL_UnlockMutex(mousemutex);
|
||||
}
|
||||
exit_event = 1;
|
||||
break;
|
||||
}
|
||||
case SDL_MOUSEMOTION:
|
||||
{
|
||||
if (mouse_capture || video_fullscreen) {
|
||||
SDL_LockMutex(mousemutex);
|
||||
mouse_scale(event.motion.xrel, event.motion.yrel);
|
||||
SDL_UnlockMutex(mousemutex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
{
|
||||
if ((event.button.button == SDL_BUTTON_LEFT)
|
||||
&& !(mouse_capture || video_fullscreen)
|
||||
&& event.button.state == SDL_RELEASED
|
||||
&& mouse_inside) {
|
||||
plat_mouse_capture(1);
|
||||
break;
|
||||
}
|
||||
if (mouse_get_buttons() < 3 && event.button.button == SDL_BUTTON_MIDDLE && !video_fullscreen) {
|
||||
plat_mouse_capture(0);
|
||||
break;
|
||||
}
|
||||
if (mouse_capture || video_fullscreen) {
|
||||
int buttonmask = 0;
|
||||
|
||||
switch (event.button.button) {
|
||||
case SDL_BUTTON_LEFT:
|
||||
buttonmask = 1;
|
||||
break;
|
||||
case SDL_BUTTON_RIGHT:
|
||||
buttonmask = 2;
|
||||
break;
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
buttonmask = 4;
|
||||
break;
|
||||
case SDL_BUTTON_X1:
|
||||
buttonmask = 8;
|
||||
break;
|
||||
case SDL_BUTTON_X2:
|
||||
buttonmask = 16;
|
||||
break;
|
||||
}
|
||||
SDL_LockMutex(mousemutex);
|
||||
if (event.button.state == SDL_PRESSED)
|
||||
mouse_set_buttons_ex(mouse_get_buttons_ex() | buttonmask);
|
||||
else
|
||||
mouse_set_buttons_ex(mouse_get_buttons_ex() & ~buttonmask);
|
||||
SDL_UnlockMutex(mousemutex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SDL_RENDER_DEVICE_RESET:
|
||||
case SDL_RENDER_TARGETS_RESET:
|
||||
case SDL_RENDER_DEVICE_RESET:
|
||||
case SDL_RENDER_TARGETS_RESET:
|
||||
{
|
||||
extern void sdl_reinit_texture(void);
|
||||
|
||||
printf("reinit tex\n");
|
||||
sdl_reinit_texture();
|
||||
break;
|
||||
}
|
||||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP:
|
||||
{
|
||||
uint16_t xtkey = 0;
|
||||
|
||||
switch (event.key.keysym.scancode) {
|
||||
default:
|
||||
xtkey = sdl_to_xt[event.key.keysym.scancode];
|
||||
break;
|
||||
}
|
||||
keyboard_input(event.key.state == SDL_PRESSED, xtkey);
|
||||
}
|
||||
case SDL_WINDOWEVENT:
|
||||
case SDL_WINDOWEVENT:
|
||||
{
|
||||
switch (event.window.event) {
|
||||
case SDL_WINDOWEVENT_ENTER:
|
||||
@@ -1392,9 +1344,190 @@ main(int argc, char **argv)
|
||||
mouse_inside = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
// route everything else
|
||||
flag_osd_open = osd_handle(event);
|
||||
|
||||
if (flag_osd_open == 0)
|
||||
{
|
||||
// close it
|
||||
osd_close(event);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (event.type)
|
||||
{
|
||||
case SDL_QUIT:
|
||||
exit_event = 1;
|
||||
break;
|
||||
case SDL_MOUSEWHEEL:
|
||||
{
|
||||
if (mouse_capture || video_fullscreen) {
|
||||
if (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED) {
|
||||
event.wheel.x *= -1;
|
||||
event.wheel.y *= -1;
|
||||
}
|
||||
SDL_LockMutex(mousemutex);
|
||||
mouse_set_z(event.wheel.y);
|
||||
SDL_UnlockMutex(mousemutex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SDL_MOUSEMOTION:
|
||||
{
|
||||
if (mouse_capture || video_fullscreen) {
|
||||
SDL_LockMutex(mousemutex);
|
||||
mouse_scale(event.motion.xrel, event.motion.yrel);
|
||||
SDL_UnlockMutex(mousemutex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
/* Touch events */
|
||||
case SDL_FINGERDOWN:
|
||||
{
|
||||
// Trap these but ignore them for now
|
||||
break;
|
||||
}
|
||||
case SDL_FINGERUP:
|
||||
{
|
||||
// Trap these but ignore them for now
|
||||
break;
|
||||
}
|
||||
case SDL_FINGERMOTION:
|
||||
{
|
||||
// See SDL_TouchFingerEvent
|
||||
if (mouse_capture || video_fullscreen) {
|
||||
SDL_LockMutex(mousemutex);
|
||||
|
||||
// Real multiplier is the window size
|
||||
int w, h;
|
||||
SDL_GetWindowSize(sdl_win, &w, &h);
|
||||
|
||||
mouse_scale((int)(event.tfinger.dx * w), (int)(event.tfinger.dy * h));
|
||||
SDL_UnlockMutex(mousemutex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
{
|
||||
if ((event.button.button == SDL_BUTTON_LEFT)
|
||||
&& !(mouse_capture || video_fullscreen)
|
||||
&& event.button.state == SDL_RELEASED
|
||||
&& mouse_inside) {
|
||||
plat_mouse_capture(1);
|
||||
break;
|
||||
}
|
||||
if (mouse_get_buttons() < 3 && event.button.button == SDL_BUTTON_MIDDLE && !video_fullscreen) {
|
||||
plat_mouse_capture(0);
|
||||
break;
|
||||
}
|
||||
if (mouse_capture || video_fullscreen) {
|
||||
int buttonmask = 0;
|
||||
|
||||
switch (event.button.button) {
|
||||
case SDL_BUTTON_LEFT:
|
||||
buttonmask = 1;
|
||||
break;
|
||||
case SDL_BUTTON_RIGHT:
|
||||
buttonmask = 2;
|
||||
break;
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
buttonmask = 4;
|
||||
break;
|
||||
case SDL_BUTTON_X1:
|
||||
buttonmask = 8;
|
||||
break;
|
||||
case SDL_BUTTON_X2:
|
||||
buttonmask = 16;
|
||||
break;
|
||||
default:
|
||||
printf("Unknown mouse button %d\n", event.button.button);
|
||||
}
|
||||
SDL_LockMutex(mousemutex);
|
||||
if (event.button.state == SDL_PRESSED)
|
||||
mouse_set_buttons_ex(mouse_get_buttons_ex() | buttonmask);
|
||||
else
|
||||
mouse_set_buttons_ex(mouse_get_buttons_ex() & ~buttonmask);
|
||||
SDL_UnlockMutex(mousemutex);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SDL_RENDER_DEVICE_RESET:
|
||||
case SDL_RENDER_TARGETS_RESET:
|
||||
{
|
||||
extern void sdl_reinit_texture(void);
|
||||
|
||||
sdl_reinit_texture();
|
||||
break;
|
||||
}
|
||||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP:
|
||||
{
|
||||
uint16_t xtkey = 0;
|
||||
|
||||
if (event.key.keysym.scancode == osd_open_first_key)
|
||||
{
|
||||
if (event.type == SDL_KEYDOWN)
|
||||
osd_first_key_pressed = 1;
|
||||
else
|
||||
osd_first_key_pressed = 0;
|
||||
}
|
||||
else if (osd_first_key_pressed && event.type == SDL_KEYDOWN && event.key.keysym.scancode == osd_open_second_key)
|
||||
{
|
||||
// open OSD!
|
||||
flag_osd_open = osd_open(event);
|
||||
|
||||
// we can assume alt-gr has been released, tell this also to the virtual machine
|
||||
osd_first_key_pressed = 0;
|
||||
keyboard_input(0, sdl_to_xt[osd_open_first_key]);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
// invalidate osd_first_key_pressed is something happens between its keydown and keydown for G
|
||||
osd_first_key_pressed = 0;
|
||||
}
|
||||
|
||||
switch (event.key.keysym.scancode) {
|
||||
default:
|
||||
xtkey = sdl_to_xt[event.key.keysym.scancode];
|
||||
break;
|
||||
}
|
||||
|
||||
keyboard_input(event.key.state == SDL_PRESSED, xtkey);
|
||||
break;
|
||||
}
|
||||
case SDL_WINDOWEVENT:
|
||||
{
|
||||
switch (event.window.event) {
|
||||
case SDL_WINDOWEVENT_ENTER:
|
||||
mouse_inside = 1;
|
||||
break;
|
||||
case SDL_WINDOWEVENT_LEAVE:
|
||||
mouse_inside = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
// printf("Unhandled SDL event: %d\n", event.type);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (blitreq) {
|
||||
extern void sdl_blit(int x, int y, int w, int h);
|
||||
sdl_blit(params.x, params.y, params.w, params.h);
|
||||
|
||||
@@ -43,13 +43,14 @@ cassette_mount(char *fn, uint8_t wp)
|
||||
memset(cassette_fname, 0, sizeof(cassette_fname));
|
||||
cassette_ui_writeprot = wp;
|
||||
pc_cas_set_fname(cassette, fn);
|
||||
|
||||
if (fn != NULL)
|
||||
memcpy(cassette_fname, fn, MIN(511, strlen(fn)));
|
||||
|
||||
ui_sb_update_icon_state(SB_CASSETTE, (fn == NULL) ? 1 : 0);
|
||||
#if 0
|
||||
media_menu_update_cassette();
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_CASSETTE);
|
||||
|
||||
config_save();
|
||||
}
|
||||
|
||||
@@ -58,11 +59,11 @@ cassette_eject(void)
|
||||
{
|
||||
pc_cas_set_fname(cassette, NULL);
|
||||
memset(cassette_fname, 0x00, sizeof(cassette_fname));
|
||||
|
||||
ui_sb_update_icon_state(SB_CASSETTE, 1);
|
||||
#if 0
|
||||
media_menu_update_cassette();
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_CASSETTE);
|
||||
|
||||
config_save();
|
||||
}
|
||||
|
||||
@@ -71,11 +72,11 @@ cartridge_mount(uint8_t id, char *fn, UNUSED(uint8_t wp))
|
||||
{
|
||||
cart_close(id);
|
||||
cart_load(id, fn);
|
||||
|
||||
ui_sb_update_icon_state(SB_CARTRIDGE | id, strlen(cart_fns[id]) ? 0 : 1);
|
||||
#if 0
|
||||
media_menu_update_cartridge(id);
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_CARTRIDGE | id);
|
||||
|
||||
config_save();
|
||||
}
|
||||
|
||||
@@ -83,11 +84,11 @@ void
|
||||
cartridge_eject(uint8_t id)
|
||||
{
|
||||
cart_close(id);
|
||||
|
||||
ui_sb_update_icon_state(SB_CARTRIDGE | id, 1);
|
||||
#if 0
|
||||
media_menu_update_cartridge(id);
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_CARTRIDGE | id);
|
||||
|
||||
config_save();
|
||||
}
|
||||
|
||||
@@ -97,11 +98,11 @@ floppy_mount(uint8_t id, char *fn, uint8_t wp)
|
||||
fdd_close(id);
|
||||
ui_writeprot[id] = wp;
|
||||
fdd_load(id, fn);
|
||||
|
||||
ui_sb_update_icon_state(SB_FLOPPY | id, strlen(floppyfns[id]) ? 0 : 1);
|
||||
#if 0
|
||||
media_menu_update_floppy(id);
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_FLOPPY | id);
|
||||
|
||||
config_save();
|
||||
}
|
||||
|
||||
@@ -109,11 +110,11 @@ void
|
||||
floppy_eject(uint8_t id)
|
||||
{
|
||||
fdd_close(id);
|
||||
|
||||
ui_sb_update_icon_state(SB_FLOPPY | id, 1);
|
||||
#if 0
|
||||
media_menu_update_floppy(id);
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_FLOPPY | id);
|
||||
|
||||
config_save();
|
||||
}
|
||||
|
||||
@@ -128,34 +129,16 @@ plat_cdrom_ui_update(uint8_t id, UNUSED(uint8_t reload))
|
||||
ui_sb_update_icon_state(SB_CDROM | id, 0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
media_menu_update_cdrom(id);
|
||||
#endif
|
||||
ui_sb_update_tip(SB_CDROM | id);
|
||||
}
|
||||
|
||||
void
|
||||
cdrom_mount(uint8_t id, char *fn)
|
||||
{
|
||||
strcpy(cdrom[id].prev_image_path, cdrom[id].image_path);
|
||||
if (cdrom[id].ops && cdrom[id].ops->close)
|
||||
cdrom[id].ops->close(cdrom[id].local);
|
||||
cdrom[id].ops = NULL;
|
||||
memset(cdrom[id].image_path, 0, sizeof(cdrom[id].image_path));
|
||||
if ((fn != NULL) && (strlen(fn) >= 1) && (fn[strlen(fn) - 1] == '\\'))
|
||||
fn[strlen(fn) - 1] = '/';
|
||||
image_open(&(cdrom[id]), fn);
|
||||
/* Signal media change to the emulated machine. */
|
||||
if (cdrom[id].insert)
|
||||
cdrom[id].insert(cdrom[id].priv);
|
||||
if (cdrom[id].image_path[0] == 0x00)
|
||||
ui_sb_update_icon_state(SB_CDROM | id, 0);
|
||||
else
|
||||
ui_sb_update_icon_state(SB_CDROM | id, 1);
|
||||
#if 0
|
||||
media_menu_update_cdrom(id);
|
||||
#endif
|
||||
ui_sb_update_tip(SB_CDROM | id);
|
||||
int ret = cdrom_load( &(cdrom[id]), fn, 0);
|
||||
|
||||
plat_cdrom_ui_update(id, 0);
|
||||
|
||||
config_save();
|
||||
}
|
||||
|
||||
@@ -171,9 +154,7 @@ mo_eject(uint8_t id)
|
||||
}
|
||||
|
||||
ui_sb_update_icon_state(SB_MO | id, 1);
|
||||
#if 0
|
||||
media_menu_update_mo(id);
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_MO | id);
|
||||
config_save();
|
||||
}
|
||||
@@ -188,9 +169,7 @@ mo_mount(uint8_t id, char *fn, uint8_t wp)
|
||||
mo_load(dev, fn, 0);
|
||||
|
||||
ui_sb_update_icon_state(SB_MO | id, strlen(mo_drives[id].image_path) ? 0 : 1);
|
||||
#if 0
|
||||
media_menu_update_mo(id);
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_MO | id);
|
||||
|
||||
config_save();
|
||||
@@ -208,9 +187,6 @@ mo_reload(uint8_t id)
|
||||
ui_sb_update_icon_state(SB_MO | id, 0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
media_menu_update_mo(id);
|
||||
#endif
|
||||
ui_sb_update_tip(SB_MO | id);
|
||||
|
||||
config_save();
|
||||
@@ -228,10 +204,9 @@ rdisk_eject(uint8_t id)
|
||||
}
|
||||
|
||||
ui_sb_update_icon_state(SB_RDISK | id, 1);
|
||||
#if 0
|
||||
media_menu_update_rdisk(id);
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_RDISK | id);
|
||||
|
||||
config_save();
|
||||
}
|
||||
|
||||
@@ -245,9 +220,7 @@ rdisk_mount(uint8_t id, char *fn, uint8_t wp)
|
||||
rdisk_load(dev, fn, 0);
|
||||
|
||||
ui_sb_update_icon_state(SB_RDISK | id, strlen(rdisk_drives[id].image_path) ? 0 : 1);
|
||||
#if 0
|
||||
media_menu_update_rdisk(id);
|
||||
#endif
|
||||
|
||||
ui_sb_update_tip(SB_RDISK | id);
|
||||
|
||||
config_save();
|
||||
@@ -265,9 +238,6 @@ rdisk_reload(uint8_t id)
|
||||
ui_sb_update_icon_state(SB_RDISK | id, 0);
|
||||
}
|
||||
|
||||
#if 0
|
||||
media_menu_update_rdisk(id);
|
||||
#endif
|
||||
ui_sb_update_tip(SB_RDISK | id);
|
||||
|
||||
config_save();
|
||||
|
||||
563
src/unix/unix_osd.c
Normal file
563
src/unix/unix_osd.c
Normal file
@@ -0,0 +1,563 @@
|
||||
#include <SDL.h>
|
||||
#include <SDL_messagebox.h>
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <dirent.h>
|
||||
#include <string.h>
|
||||
#include <sys/param.h>
|
||||
|
||||
/* This #undef is needed because a SDL include header redefines HAVE_STDARG_H. */
|
||||
#undef HAVE_STDARG_H
|
||||
#define HAVE_STDARG_H
|
||||
#include <86box/86box.h>
|
||||
#include <86box/device.h>
|
||||
#include <86box/plat.h>
|
||||
#include <86box/plat_dynld.h>
|
||||
#include <86box/video.h>
|
||||
#include <86box/ui.h>
|
||||
#include <86box/version.h>
|
||||
#include <86box/unix_sdl.h>
|
||||
#include <86box/unix_osd.h>
|
||||
#include <86box/unix_osd_font.h>
|
||||
|
||||
static int SCREEN_W = 640;
|
||||
static int SCREEN_H = 480;
|
||||
static int BOX_W = 240;
|
||||
static int BOX_H = 160;
|
||||
#define LINE_HEIGHT 16
|
||||
#define TITLE_HEIGHT 16
|
||||
#define CHAR_W 8
|
||||
#define CHAR_H 8
|
||||
|
||||
// this makes the osd embeddable in the 86box main sdl loop
|
||||
#define OSD_INSIDE_MAIN_LOOP
|
||||
|
||||
// interface to SDL environment
|
||||
extern SDL_Window *sdl_win;
|
||||
extern SDL_Renderer *sdl_render;
|
||||
extern SDL_mutex *sdl_mutex;
|
||||
|
||||
// interface back to main unix monitor implementation
|
||||
extern void unix_executeLine(char *line);
|
||||
|
||||
// interface to the currently set window title, this can't be seen normally in a fullscreen setup
|
||||
extern wchar_t sdl_win_title[512];
|
||||
char sdl_win_title_mb[512] = "";
|
||||
|
||||
static SDL_Texture *font_texture = NULL;
|
||||
|
||||
typedef enum {
|
||||
STATE_MENU,
|
||||
STATE_FILESELECT_FLOPPY,
|
||||
STATE_FILESELECT_CD,
|
||||
STATE_FILESELECT_RDISK,
|
||||
STATE_FILESELECT_CART,
|
||||
STATE_FILESELECT_MO
|
||||
} AppState;
|
||||
|
||||
static const char *menu_items[] = {
|
||||
"fddload - Load floppy disk image",
|
||||
"cdload - Load CD-ROM image",
|
||||
"rdiskload - Load removable disk image",
|
||||
"cartload - Load cartridge image",
|
||||
"moload - Load MO image",
|
||||
"fddeject - eject disk from floppy drive",
|
||||
"cdeject - eject disc from CD-ROM drive",
|
||||
"rdiskeject - eject removable disk",
|
||||
"carteject - eject cartridge",
|
||||
"moeject - eject image from MO drive",
|
||||
"hardreset - hard reset the emulated system",
|
||||
// "pause - pause the the emulated system",
|
||||
"fullscreen - toggle fullscreen",
|
||||
"version - print version and license information",
|
||||
"exit - exit 86Box",
|
||||
"close OSD"
|
||||
};
|
||||
#define MENU_ITEMS (sizeof(menu_items) / sizeof(menu_items[0]))
|
||||
|
||||
// chars per cols and rows
|
||||
static int font_cols = 16;
|
||||
|
||||
static int selected = 0;
|
||||
static int file_selected = 0;
|
||||
static int scroll_offset = 0;
|
||||
|
||||
static int osd_is_open = 0;
|
||||
static AppState state = STATE_MENU;
|
||||
|
||||
static char files[100][1024];
|
||||
static int file_count = 0;
|
||||
|
||||
static int max_visible = 0;
|
||||
|
||||
void reset_iso_files(void)
|
||||
{
|
||||
file_selected = 0;
|
||||
scroll_offset = 0;
|
||||
|
||||
file_count = 0;
|
||||
memset(files, 0, sizeof(files));
|
||||
}
|
||||
|
||||
static int endswith(char *s1, char *mask)
|
||||
{
|
||||
int ss = strlen(s1);
|
||||
int sm = strlen(mask);
|
||||
return ss >= sm && strncasecmp(s1+ss-sm, mask, sm) == 0;
|
||||
}
|
||||
|
||||
int load_iso_files(char *basedir, char files[][1024], int max_files, char *mask)
|
||||
{
|
||||
DIR *d;
|
||||
struct dirent *dir;
|
||||
int count = file_count;
|
||||
d = opendir(basedir);
|
||||
if (!d)
|
||||
return file_count;
|
||||
|
||||
while ((dir = readdir(d)) != NULL && count < max_files)
|
||||
{
|
||||
if (endswith(dir->d_name, mask))
|
||||
{
|
||||
strcpy(files[count], basedir);
|
||||
strcat(files[count], "/");
|
||||
strcat(files[count], dir->d_name);
|
||||
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
closedir(d);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
void draw_text(SDL_Renderer *renderer, const char *text, int x, int y, SDL_Color color)
|
||||
{
|
||||
if (!font_texture)
|
||||
return;
|
||||
|
||||
SDL_SetTextureColorMod(font_texture, color.r, color.g, color.b);
|
||||
|
||||
int i = 0;
|
||||
while (text[i])
|
||||
{
|
||||
unsigned char c = text[i];
|
||||
int tx = (c % font_cols) * CHAR_W;
|
||||
int ty = (c / font_cols) * CHAR_H;
|
||||
SDL_Rect src = {tx, ty, CHAR_W, CHAR_H};
|
||||
SDL_Rect dst = {x + i * CHAR_W, y, CHAR_W, CHAR_H};
|
||||
SDL_RenderCopy(renderer, font_texture, &src, &dst);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
void draw_box_with_border(SDL_Renderer *renderer, SDL_Rect box)
|
||||
{
|
||||
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
|
||||
SDL_RenderDrawRect(renderer, &box);
|
||||
|
||||
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
|
||||
SDL_Rect inner = {box.x + 2, box.y + 2, box.w - 4, box.h - 4};
|
||||
SDL_RenderDrawRect(renderer, &inner);
|
||||
|
||||
SDL_SetRenderDrawColor(renderer, 0, 0, 128, 255);
|
||||
SDL_RenderFillRect(renderer, &inner);
|
||||
}
|
||||
|
||||
|
||||
void draw_menu(SDL_Renderer *renderer, int selected)
|
||||
{
|
||||
int x0 = (SCREEN_W - BOX_W) / 2;
|
||||
int y0 = (SCREEN_H - BOX_H) / 2;
|
||||
SDL_Rect box = {x0, y0, BOX_W, BOX_H};
|
||||
draw_box_with_border(renderer, box);
|
||||
|
||||
draw_text(renderer, "MAIN MENU", x0 + 20, y0 + 5, (SDL_Color){255,255,255,255});
|
||||
|
||||
wcstombs(sdl_win_title_mb, sdl_win_title, 256);
|
||||
draw_text(renderer, sdl_win_title_mb, x0 + 120, y0 + 5, (SDL_Color){255,255,255,255});
|
||||
|
||||
for (int i = 0; i < MENU_ITEMS; i++)
|
||||
{
|
||||
int tx = x0 + 20;
|
||||
int ty = y0 + TITLE_HEIGHT + i * LINE_HEIGHT;
|
||||
|
||||
SDL_Color textColor;
|
||||
SDL_Rect bgRect = {tx - 5, ty - 2, BOX_W - 20, LINE_HEIGHT};
|
||||
|
||||
if (i == selected) {
|
||||
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
|
||||
SDL_RenderFillRect(renderer, &bgRect);
|
||||
textColor = (SDL_Color){0, 0, 0, 255};
|
||||
} else {
|
||||
textColor = (SDL_Color){255, 255, 0, 255};
|
||||
}
|
||||
|
||||
draw_text(renderer, menu_items[i], tx, ty, textColor);
|
||||
}
|
||||
|
||||
#ifndef OSD_INSIDE_MAIN_LOOP
|
||||
SDL_RenderPresent(renderer);
|
||||
#endif
|
||||
}
|
||||
|
||||
void draw_file_selector(SDL_Renderer *renderer,
|
||||
char *title,
|
||||
char files[][1024], int file_count,
|
||||
int selected, int scroll_offset, int max_visible)
|
||||
{
|
||||
int x0 = (SCREEN_W - BOX_W) / 2;
|
||||
int y0 = (SCREEN_H - BOX_H) / 2;
|
||||
SDL_Rect box = {x0, y0, BOX_W, BOX_H};
|
||||
draw_box_with_border(renderer, box);
|
||||
|
||||
draw_text(renderer, title, x0 + 20, y0 + 5, (SDL_Color){255,255,255,255});
|
||||
|
||||
if (file_count == 0) {
|
||||
draw_text(renderer, "No files.",
|
||||
x0 + 20, y0 + TITLE_HEIGHT + 10,
|
||||
(SDL_Color){255, 255, 0, 255});
|
||||
} else {
|
||||
for (int i = 0; i < max_visible && (i + scroll_offset) < file_count; i++) {
|
||||
int index = i + scroll_offset;
|
||||
int tx = x0 + 20;
|
||||
int ty = y0 + TITLE_HEIGHT + i * LINE_HEIGHT;
|
||||
|
||||
SDL_Color textColor;
|
||||
SDL_Rect bgRect = {tx - 5, ty - 2, 200, LINE_HEIGHT};
|
||||
|
||||
if (index == selected) {
|
||||
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
|
||||
SDL_RenderFillRect(renderer, &bgRect);
|
||||
textColor = (SDL_Color){0, 0, 0, 255};
|
||||
} else {
|
||||
textColor = (SDL_Color){255, 255, 0, 255};
|
||||
}
|
||||
|
||||
draw_text(renderer, files[index], tx, ty, textColor);
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef OSD_INSIDE_MAIN_LOOP
|
||||
SDL_RenderPresent(renderer);
|
||||
#endif
|
||||
}
|
||||
|
||||
void osd_init(void)
|
||||
{
|
||||
// debug: fprintf(stderr, "OSD INIT\n");
|
||||
|
||||
if (font_texture == NULL)
|
||||
{
|
||||
// debug: fprintf(stderr, "OSD INIT FONT\n");
|
||||
|
||||
// Carica font bitmap (font.bmp 128x128, 16x16 caratteri, 8x8 ciascuno)
|
||||
SDL_RWops *rwop = SDL_RWFromConstMem(_________font_bmp, _________font_bmp_len);
|
||||
if (!rwop)
|
||||
{
|
||||
fprintf(stderr, "Cannot create a new SDL RW stream: %s\n", SDL_GetError());
|
||||
return;
|
||||
}
|
||||
|
||||
// auto-closes the stream
|
||||
SDL_Surface *font_surface = SDL_LoadBMP_RW(rwop, 1);
|
||||
if (!font_surface) {
|
||||
fprintf(stderr, "Cannot create a surface using RW stream: %s\n", SDL_GetError());
|
||||
return;
|
||||
}
|
||||
|
||||
// Imposta trasparenza sul nero puro
|
||||
SDL_SetColorKey(font_surface, SDL_TRUE, SDL_MapRGB(font_surface->format, 0, 0, 0));
|
||||
font_texture = SDL_CreateTextureFromSurface(sdl_render, font_surface);
|
||||
SDL_FreeSurface(font_surface);
|
||||
}
|
||||
}
|
||||
|
||||
void osd_deinit(void)
|
||||
{
|
||||
// nothing to do
|
||||
// debug: fprintf(stderr, "OSD DEINIT\n");
|
||||
|
||||
// will be implicitly freed on exit
|
||||
// SDL_DestroyTexture(font_texture);
|
||||
|
||||
font_texture = NULL;
|
||||
}
|
||||
|
||||
int osd_open(SDL_Event event)
|
||||
{
|
||||
// ok opened
|
||||
// debug: fprintf(stderr, "OSD OPEN\n");
|
||||
|
||||
SDL_GetWindowSize(sdl_win, &SCREEN_W, &SCREEN_H);
|
||||
BOX_W = (SCREEN_W / 4) * 3;
|
||||
BOX_H = (SCREEN_H / 4) * 3;
|
||||
|
||||
max_visible = (BOX_H - TITLE_HEIGHT) / LINE_HEIGHT;
|
||||
|
||||
osd_is_open = 1;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int osd_close(SDL_Event event)
|
||||
{
|
||||
// ok closed
|
||||
// debug: fprintf(stderr, "OSD CLOSE\n");
|
||||
|
||||
osd_is_open = 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void osd_cmd_run(char *c)
|
||||
{
|
||||
char *l = calloc(strlen(c)+2, 1);
|
||||
strcpy(l, c);
|
||||
unix_executeLine(l);
|
||||
free(l);
|
||||
}
|
||||
|
||||
void osd_present(void)
|
||||
{
|
||||
// shortcut
|
||||
if (!osd_is_open)
|
||||
return;
|
||||
|
||||
#ifndef OSD_INSIDE_MAIN_LOOP
|
||||
SDL_LockMutex(sdl_mutex);
|
||||
#endif
|
||||
|
||||
if (state == STATE_MENU) {
|
||||
draw_menu(sdl_render, selected);
|
||||
}
|
||||
else if (state == STATE_FILESELECT_FLOPPY) {
|
||||
draw_file_selector(sdl_render, "SELECT FLOPPY IMAGE", files, file_count, file_selected, scroll_offset, max_visible);
|
||||
}
|
||||
else if (state == STATE_FILESELECT_CD) {
|
||||
draw_file_selector(sdl_render, "SELECT CD ISO IMAGE", files, file_count, file_selected, scroll_offset, max_visible);
|
||||
}
|
||||
else if (state == STATE_FILESELECT_RDISK) {
|
||||
draw_file_selector(sdl_render, "SELECT REMOVABLE DISK IMAGE", files, file_count, file_selected, scroll_offset, max_visible);
|
||||
}
|
||||
else if (state == STATE_FILESELECT_CART) {
|
||||
draw_file_selector(sdl_render, "SELECT CARTRIDGE IMAGE", files, file_count, file_selected, scroll_offset, max_visible);
|
||||
}
|
||||
else if (state == STATE_FILESELECT_MO) {
|
||||
draw_file_selector(sdl_render, "SELECT MO IMAGE", files, file_count, file_selected, scroll_offset, max_visible);
|
||||
}
|
||||
|
||||
|
||||
#ifndef OSD_INSIDE_MAIN_LOOP
|
||||
SDL_UnlockMutex(sdl_mutex);
|
||||
#endif
|
||||
}
|
||||
|
||||
int osd_handle(SDL_Event event)
|
||||
{
|
||||
// debug: fprintf(stderr, "OSD HANDLE\n");
|
||||
|
||||
if (event.type == SDL_KEYUP)
|
||||
{
|
||||
if (event.key.keysym.scancode == SDL_SCANCODE_ESCAPE)
|
||||
{
|
||||
if (state == STATE_MENU)
|
||||
{
|
||||
// Close the OSD
|
||||
// debug: fprintf(stderr, "OSD HANDLE: escape\n");
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Back to Main and keep it open
|
||||
state = STATE_MENU;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (state == STATE_MENU)
|
||||
{
|
||||
switch (event.key.keysym.sym)
|
||||
{
|
||||
case SDLK_UP:
|
||||
selected = (selected - 1 + MENU_ITEMS) % MENU_ITEMS;
|
||||
break;
|
||||
|
||||
case SDLK_DOWN:
|
||||
selected = (selected + 1) % MENU_ITEMS;
|
||||
break;
|
||||
|
||||
case SDLK_RETURN:
|
||||
case SDLK_KP_ENTER:
|
||||
switch (selected)
|
||||
{
|
||||
case 0 : // "fddload - Load floppy disk image",
|
||||
reset_iso_files();
|
||||
file_count = load_iso_files(".", files, 100, ".img");
|
||||
file_count = load_iso_files("/mnt", files, 100, ".img");
|
||||
file_count = load_iso_files("/mnt/usbkey", files, 100, ".img");
|
||||
state = STATE_FILESELECT_FLOPPY;
|
||||
break;
|
||||
|
||||
case 1 : // "cdload - Load CD-ROM image",
|
||||
reset_iso_files();
|
||||
file_count = load_iso_files(".", files, 100, ".iso");
|
||||
file_count = load_iso_files("/mnt", files, 100, ".iso");
|
||||
file_count = load_iso_files("/mnt/usbkey", files, 100, ".iso");
|
||||
state = STATE_FILESELECT_CD;
|
||||
break;
|
||||
|
||||
case 2 : // "rdiskload - Load removable disk image",
|
||||
reset_iso_files();
|
||||
file_count = load_iso_files(".", files, 100, ".img");
|
||||
file_count = load_iso_files("/mnt", files, 100, ".img");
|
||||
file_count = load_iso_files("/mnt/usbkey", files, 100, ".img");
|
||||
state = STATE_FILESELECT_RDISK;
|
||||
break;
|
||||
|
||||
case 3 : // "cartload - Load cartridge image",
|
||||
reset_iso_files();
|
||||
file_count = load_iso_files(".", files, 100, ".img");
|
||||
file_count = load_iso_files("/mnt", files, 100, ".img");
|
||||
file_count = load_iso_files("/mnt/usbkey", files, 100, ".img");
|
||||
state = STATE_FILESELECT_CART;
|
||||
break;
|
||||
|
||||
case 4 : // "moload - Load MO image",
|
||||
reset_iso_files();
|
||||
file_count = load_iso_files(".", files, 100, ".img");
|
||||
file_count = load_iso_files("/mnt", files, 100, ".img");
|
||||
file_count = load_iso_files("/mnt/usbkey", files, 100, ".img");
|
||||
state = STATE_FILESELECT_MO;
|
||||
break;
|
||||
|
||||
case 5 : // "fddeject - eject disk from floppy drive",
|
||||
osd_cmd_run("fddeject 0");
|
||||
return 0;
|
||||
|
||||
case 6 : // "cdeject - eject disc from CD-ROM drive",
|
||||
osd_cmd_run("cdeject 0");
|
||||
return 0;
|
||||
|
||||
case 7 : // "rdiskeject - eject removable disk",
|
||||
osd_cmd_run("rdiskeject 0");
|
||||
return 0;
|
||||
|
||||
case 8 : // "carteject - eject cartridge",
|
||||
osd_cmd_run("carteject 0");
|
||||
return 0;
|
||||
|
||||
case 9 : // "moeject - eject image from MO drive",
|
||||
osd_cmd_run("moeject 0");
|
||||
return 0;
|
||||
|
||||
case 10 : // "hardreset - hard reset the emulated system",
|
||||
osd_cmd_run("hardreset");
|
||||
return 0;
|
||||
|
||||
/* better not pause ourself, we will be unable to get out of it
|
||||
case 11 : // "pause - pause the the emulated system",
|
||||
osd_cmd_run("pause");
|
||||
return 0;
|
||||
*/
|
||||
|
||||
case 11 : // "fullscreen - toggle fullscreen",
|
||||
osd_cmd_run("fullscreen");
|
||||
return 0;
|
||||
|
||||
case 12 : // "version - print version and license information",
|
||||
osd_cmd_run("version");
|
||||
return 0;
|
||||
|
||||
case 13 : // "exit - exit 86Box",
|
||||
osd_cmd_run("exit");
|
||||
return 0;
|
||||
|
||||
case 14 : // "close OSD"
|
||||
// return zero does directly close the OSD
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (state == STATE_FILESELECT_FLOPPY || state == STATE_FILESELECT_CD || state == STATE_FILESELECT_RDISK || state == STATE_FILESELECT_CART || state == STATE_FILESELECT_MO)
|
||||
{
|
||||
if (file_count == 0)
|
||||
{
|
||||
// no files, there is nothing else to do
|
||||
if (event.key.keysym.sym == SDLK_ESCAPE) {
|
||||
state = STATE_MENU;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (event.key.keysym.sym) {
|
||||
case SDLK_UP:
|
||||
if (file_selected > 0) {
|
||||
file_selected--;
|
||||
if (file_selected < scroll_offset) {
|
||||
scroll_offset--;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SDLK_DOWN:
|
||||
if (file_selected < file_count - 1) {
|
||||
file_selected++;
|
||||
if (file_selected >= scroll_offset + max_visible) {
|
||||
scroll_offset++;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SDLK_RETURN:
|
||||
case SDLK_KP_ENTER:
|
||||
{
|
||||
char cmd[1280] = "";
|
||||
|
||||
if (state == STATE_FILESELECT_FLOPPY)
|
||||
sprintf(cmd, "fddload 0 %s 0", files[file_selected]);
|
||||
if (state == STATE_FILESELECT_CD)
|
||||
sprintf(cmd, "cdload 0 %s", files[file_selected]);
|
||||
if (state == STATE_FILESELECT_RDISK)
|
||||
sprintf(cmd, "rdiskload 0 %s 0", files[file_selected]);
|
||||
if (state == STATE_FILESELECT_CART)
|
||||
sprintf(cmd, "cartload 0 %s 0", files[file_selected]);
|
||||
if (state == STATE_FILESELECT_MO)
|
||||
sprintf(cmd, "moload 0 %s 0", files[file_selected]);
|
||||
|
||||
unix_executeLine(cmd);
|
||||
state = STATE_MENU;
|
||||
}
|
||||
return 0;
|
||||
|
||||
case SDLK_ESCAPE:
|
||||
state = STATE_MENU;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Keep it open
|
||||
return 1;
|
||||
}
|
||||
|
||||
void osd_ui_sb_update_icon_state(UNUSED(int tag), UNUSED(int state))
|
||||
{
|
||||
}
|
||||
|
||||
void osd_ui_sb_update_icon(UNUSED(int tag), UNUSED(int active))
|
||||
{
|
||||
}
|
||||
|
||||
void osd_ui_sb_update_icon_write(UNUSED(int tag), UNUSED(int active))
|
||||
{
|
||||
}
|
||||
|
||||
void osd_ui_sb_update_icon_wp(UNUSED(int tag), UNUSED(int state))
|
||||
{
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <86box/video.h>
|
||||
#include <86box/ui.h>
|
||||
#include <86box/version.h>
|
||||
#include <86box/unix_osd.h>
|
||||
#include <86box/unix_sdl.h>
|
||||
|
||||
#define RENDERER_FULL_SCREEN 1
|
||||
@@ -45,7 +46,7 @@ static int cur_wy = 0;
|
||||
static int cur_ww = 0;
|
||||
static int cur_wh = 0;
|
||||
static volatile int sdl_enabled = 1;
|
||||
static SDL_mutex *sdl_mutex = NULL;
|
||||
SDL_mutex *sdl_mutex = NULL;
|
||||
int mouse_capture;
|
||||
int title_set = 0;
|
||||
int resize_pending = 0;
|
||||
@@ -189,6 +190,9 @@ sdl_real_blit(SDL_Rect *r_src)
|
||||
if (ret)
|
||||
fprintf(stderr, "SDL: unable to copy texture to renderer (%s)\n", SDL_GetError());
|
||||
|
||||
// give the osd an opportunity to draw itself
|
||||
osd_present();
|
||||
|
||||
SDL_RenderPresent(sdl_render);
|
||||
}
|
||||
|
||||
@@ -214,6 +218,7 @@ sdl_blit(int x, int y, int w, int h)
|
||||
sdl_resize(resize_w, resize_h);
|
||||
resize_pending = 0;
|
||||
}
|
||||
|
||||
r_src.x = x;
|
||||
r_src.y = y;
|
||||
r_src.w = w;
|
||||
@@ -314,6 +319,7 @@ sdl_select_best_hw_driver(void)
|
||||
void
|
||||
sdl_reinit_texture(void)
|
||||
{
|
||||
osd_deinit();
|
||||
sdl_destroy_texture();
|
||||
|
||||
if (sdl_flags & RENDERER_HARDWARE) {
|
||||
@@ -324,6 +330,7 @@ sdl_reinit_texture(void)
|
||||
|
||||
sdl_tex = SDL_CreateTexture(sdl_render, SDL_PIXELFORMAT_ARGB8888,
|
||||
SDL_TEXTUREACCESS_STREAMING, 2048, 2048);
|
||||
osd_init();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -412,6 +419,10 @@ sdl_init_common(int flags)
|
||||
return (0);
|
||||
}
|
||||
|
||||
// Ensure mouse and touchpads behaves the same for us, dunno if these really do something
|
||||
SDL_SetHint(SDL_HINT_TOUCH_MOUSE_EVENTS, "1");
|
||||
SDL_SetHint(SDL_HINT_MOUSE_TOUCH_EVENTS, "1");
|
||||
|
||||
if (flags & RENDERER_HARDWARE) {
|
||||
if (flags & RENDERER_OPENGL) {
|
||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER, "OpenGL");
|
||||
|
||||
@@ -22,7 +22,9 @@
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define __USE_LARGEFILE64
|
||||
#ifndef __USE_LARGEFILE64
|
||||
#define __USE_LARGEFILE64 1
|
||||
#endif
|
||||
#include <sys/types.h>
|
||||
|
||||
#if (defined(__HAIKU__) || defined(__unix__) || defined(__APPLE__)) && !defined(__linux__)
|
||||
|
||||
@@ -38,9 +38,12 @@ add_library(vid OBJECT
|
||||
|
||||
# Clock generator chips
|
||||
clockgen/vid_clockgen_av9194.c
|
||||
clockgen/vid_clockgen_icd2047.c
|
||||
clockgen/vid_clockgen_icd2061.c
|
||||
clockgen/vid_clockgen_ics1494.c
|
||||
clockgen/vid_clockgen_ics2494.c
|
||||
clockgen/vid_clockgen_ics2595.c
|
||||
clockgen/vid_clockgen_ics90c64a.c
|
||||
|
||||
# DDC / monitor identification stuff
|
||||
vid_ddc.c
|
||||
|
||||
131
src/video/clockgen/vid_clockgen_icd2047.c
Normal file
131
src/video/clockgen/vid_clockgen_icd2047.c
Normal file
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* 86Box A hypervisor and IBM PC system emulator that specializes in
|
||||
* running old operating systems and software designed for IBM
|
||||
* PC systems and compatibles from 1981 through fairly recent
|
||||
* system designs based on the PCI bus.
|
||||
*
|
||||
* This file is part of the 86Box distribution.
|
||||
*
|
||||
* ICD2047 clock generator emulation.
|
||||
*
|
||||
* Used by the V7 chips.
|
||||
*
|
||||
* Authors: TheCollector1995.
|
||||
*
|
||||
* Copyright 2025 TheCollector1995.
|
||||
*/
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#define HAVE_STDARG_H
|
||||
#include <86box/86box.h>
|
||||
#include <86box/device.h>
|
||||
|
||||
typedef struct icd2047_t {
|
||||
float freq[32];
|
||||
} icd2047_t;
|
||||
|
||||
#ifdef ENABLE_ICD2047_LOG
|
||||
int icd2047_do_log = ENABLE_ICD2047_LOG;
|
||||
|
||||
static void
|
||||
icd2047_log(const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (icd2047_do_log) {
|
||||
va_start(ap, fmt);
|
||||
pclog_ex(fmt, ap);
|
||||
va_end(ap);
|
||||
}
|
||||
}
|
||||
#else
|
||||
# define icd2047_log(fmt, ...)
|
||||
#endif
|
||||
|
||||
float
|
||||
icd2047_getclock(int clock, void *priv)
|
||||
{
|
||||
const icd2047_t *icd2047 = (icd2047_t *) priv;
|
||||
|
||||
if (clock > 31)
|
||||
clock = 31;
|
||||
|
||||
return icd2047->freq[clock];
|
||||
}
|
||||
|
||||
static void *
|
||||
icd2047_init(const device_t *info)
|
||||
{
|
||||
icd2047_t *icd2047 = (icd2047_t *) malloc(sizeof(icd2047_t));
|
||||
memset(icd2047, 0, sizeof(icd2047_t));
|
||||
|
||||
switch (info->local) {
|
||||
case 20:
|
||||
/* ICD2047-20 for Headland series */
|
||||
icd2047->freq[0x00] = 25175000.0;
|
||||
icd2047->freq[0x01] = 28322000.0;
|
||||
icd2047->freq[0x02] = 40000000.0;
|
||||
icd2047->freq[0x03] = 32500000.0;
|
||||
icd2047->freq[0x04] = 50350000.0;
|
||||
icd2047->freq[0x05] = 65000000.0;
|
||||
icd2047->freq[0x06] = 38000000.0;
|
||||
icd2047->freq[0x07] = 44900000.0;
|
||||
icd2047->freq[0x08] = 25175000.0;
|
||||
icd2047->freq[0x09] = 28322000.0;
|
||||
icd2047->freq[0x0a] = 80000000.0;
|
||||
icd2047->freq[0x0b] = 32500000.0;
|
||||
icd2047->freq[0x0c] = 50350000.0;
|
||||
icd2047->freq[0x0d] = 65000000.0;
|
||||
icd2047->freq[0x0e] = 76000000.0;
|
||||
icd2047->freq[0x0f] = 44900000.0;
|
||||
icd2047->freq[0x10] = 25175000.0;
|
||||
icd2047->freq[0x11] = 44900000.0;
|
||||
icd2047->freq[0x12] = 28322000.0;
|
||||
icd2047->freq[0x13] = 38000000.0;
|
||||
icd2047->freq[0x14] = 40000000.0;
|
||||
icd2047->freq[0x15] = 46000000.0;
|
||||
icd2047->freq[0x16] = 48000000.0;
|
||||
icd2047->freq[0x17] = 60000000.0;
|
||||
icd2047->freq[0x18] = 65000000.0;
|
||||
icd2047->freq[0x19] = 72000000.0;
|
||||
icd2047->freq[0x1a] = 74000000.0;
|
||||
icd2047->freq[0x1b] = 76000000.0;
|
||||
icd2047->freq[0x1c] = 78000000.0;
|
||||
icd2047->freq[0x1d] = 80000000.0;
|
||||
icd2047->freq[0x1e] = 100000000.0;
|
||||
icd2047->freq[0x1f] = 110000000.0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return icd2047;
|
||||
}
|
||||
|
||||
static void
|
||||
icd2047_close(void *priv)
|
||||
{
|
||||
icd2047_t *icd2047 = (icd2047_t *) priv;
|
||||
|
||||
if (icd2047)
|
||||
free(icd2047);
|
||||
}
|
||||
|
||||
const device_t icd2047_20_device = {
|
||||
.name = "ICD2047-20 Clock Generator",
|
||||
.internal_name = "icd2047_20",
|
||||
.flags = 0,
|
||||
.local = 20,
|
||||
.init = icd2047_init,
|
||||
.close = icd2047_close,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user