diff --git a/.ci/build.sh b/.ci/build.sh index 31e1d770f..63a957477 100644 --- a/.ci/build.sh +++ b/.ci/build.sh @@ -949,14 +949,19 @@ else if grep -q "OPENAL:BOOL=ON" build/CMakeCache.txt then - # Build openal-soft 1.21.1 manually to fix audio issues. This is a temporary + # Build openal-soft 1.22.2 manually to fix audio issues. This is a temporary # workaround until a newer version of openal-soft trickles down to Debian repos. - prefix="$cache_dir/openal-soft-1.21.1" + prefix="$cache_dir/openal-soft-1.22.2" if [ ! -d "$prefix" ] then rm -rf "$cache_dir/openal-soft-"* # remove old versions - wget -qO - https://github.com/kcat/openal-soft/archive/refs/tags/1.21.1.tar.gz | tar zxf - -C "$cache_dir" || rm -rf "$prefix" + wget -qO - https://github.com/kcat/openal-soft/archive/refs/tags/1.22.2.tar.gz | tar zxf - -C "$cache_dir" || rm -rf "$prefix" fi + + # Patches to build with the old PipeWire version in Debian. + sed -i -e 's/>=0.3.23//' "$prefix/CMakeLists.txt" + sed -i -e 's/PW_KEY_CONFIG_NAME/"config.name"/g' "$prefix/alc/backends/pipewire.cpp" + prefix_build="$prefix/build-$arch_deb" cmake -G Ninja -D "CMAKE_TOOLCHAIN_FILE=$toolchain_file" -D "CMAKE_INSTALL_PREFIX=$cwd_root/archive_tmp/usr" -S "$prefix" -B "$prefix_build" || exit 99 cmake --build "$prefix_build" -j$(nproc) || exit 99 @@ -999,7 +1004,8 @@ else cmake --build "$prefix_build" -j$(nproc) || exit 99 cmake --install "$prefix_build" || exit 99 - # Build FluidSynth without JACK support to remove the dependency on libjack once again. + # Build FluidSynth without sound systems to remove the dependencies on libjack + # and other sound system libraries. We don't output audio through FluidSynth. prefix="$cache_dir/fluidsynth-2.3.0" if [ ! -d "$prefix" ] then @@ -1009,7 +1015,9 @@ else cp cmake/flags-gcc.cmake cmake/flags-gcc.cmake.old sed -i -e 's/ -Werror=.*\([" ]\)/\1/g' cmake/flags-gcc.cmake # temporary hack for -Werror=old-style-definition non-compliance on FluidSynth and SDL2 prefix_build="$prefix/build-$arch_deb" - cmake -G Ninja -D enable-jack=OFF -D enable-sdl2=$sdl_ss -D "CMAKE_TOOLCHAIN_FILE=$toolchain_file" -D "CMAKE_INSTALL_PREFIX=$cwd_root/archive_tmp/usr" -S "$prefix" -B "$prefix_build" || exit 99 + cmake -G Ninja -D enable-dbus=OFF -D enable-jack=OFF -D enable-oss=OFF -D enable-sdl2=OFF -D enable-pulseaudio=OFF -D enable-pipewire=OFF -D enable-alsa=OFF \ + -D "CMAKE_TOOLCHAIN_FILE=$toolchain_file" -D "CMAKE_INSTALL_PREFIX=$cwd_root/archive_tmp/usr" \ + -S "$prefix" -B "$prefix_build" || exit 99 cmake --build "$prefix_build" -j$(nproc) || exit 99 cmake --install "$prefix_build" || exit 99 cp -p "$cwd_root/archive_tmp/usr/bin/fluidsynth" fluidsynth @@ -1155,6 +1163,24 @@ EOF # Copy line. echo "$line" >> AppImageBuilder-generated.yml + + # Workaround for appimage-builder issues 272 and 283 (i686 and armhf are also missing) + if [ "$arch_appimage" != "x86_64" -a "$line" = " files:" ] + then + # Some mild arbitrary code execution with a dummy package... + [ ! -d /runtime ] && sudo apt-get -y -o 'DPkg::Post-Invoke::=mkdir -p /runtime; chmod 777 /runtime' install libsixel1 > /dev/null 2>&1 + + echo " include:" >> AppImageBuilder-generated.yml + for loader in "/lib/$libdir/ld-linux"*.so.* + do + for loader_copy in "$loader" "/lib/$(basename "$loader")" + do + mkdir -p "/runtime/compat$(dirname "$loader_copy")" + ln -s "$loader" "/runtime/compat$loader_copy" + echo " - /runtime/compat$loader_copy" >> AppImageBuilder-generated.yml + done + done + fi done < .ci/AppImageBuilder.yml # Download appimage-builder if necessary. @@ -1174,7 +1200,7 @@ EOF ln -s "$cache_dir/appimage-builder-cache" appimage-builder-cache # Run appimage-builder in extract-and-run mode for Docker compatibility. - # --appdir is a workaround for https://github.com/AppImageCrafters/appimage-builder/issues/270 + # --appdir is a workaround for appimage-builder issue 270 reported by us. for retry in 1 2 3 4 5 do project="$project" project_id="$project_id" project_version="$project_version" project_icon="$project_icon" arch_deb="$arch_deb" \ diff --git a/CMakeLists.txt b/CMakeLists.txt index b067bedbe..e4d5c4061 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -116,6 +116,10 @@ if(WIN32) add_compile_definitions(_WINSOCK_DEPRECATED_NO_WARNINGS) endif() +if(NOT (WIN32 OR APPLE OR CMAKE_SYSTEM_NAME STREQUAL "Linux")) + set(DISCORD OFF) +endif() + set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 14) set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON) @@ -138,6 +142,7 @@ option(MINITRACE "Enable Chrome tracing using the modified minitrace library" option(GDBSTUB "Enable GDB stub server for debugging" OFF) option(DEV_BRANCH "Development branch" OFF) option(QT "Qt GUI" ON) +option(DISCORD "Discord Rich Presence support" ON) # Development branch features # diff --git a/src/86box.c b/src/86box.c index 075727387..fba67ca55 100644 --- a/src/86box.c +++ b/src/86box.c @@ -168,9 +168,6 @@ int gfxcard = 0; /* (C) graphics/vide int gfxcard_2 = 0; /* (C) graphics/video card */ int show_second_monitors = 1; /* (C) show non-primary monitors */ int sound_is_float = 1; /* (C) sound uses FP values */ -int GAMEBLASTER = 0; /* (C) sound option */ -int GUS = 0; /* (C) sound option */ -int SSI2001 = 0; /* (C) sound option */ int voodoo_enabled = 0; /* (C) video option */ int ibm8514_enabled = 0; /* (C) video option */ int xga_enabled = 0; /* (C) video option */ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 476c27439..77de8aad9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,7 +19,7 @@ if(APPLE) endif() add_executable(86Box 86box.c config.c log.c random.c timer.c io.c acpi.c apm.c - dma.c ddma.c discord.c nmi.c pic.c pit.c pit_fast.c port_6x.c port_92.c ppi.c pci.c + dma.c ddma.c nmi.c pic.c pit.c pit_fast.c port_6x.c port_92.c ppi.c pci.c mca.c usb.c fifo8.c device.c nvr.c nvr_at.c nvr_ps2.c machine_status.c ini.c) if(CMAKE_SYSTEM_NAME MATCHES "Linux") @@ -51,6 +51,11 @@ if(DEV_BRANCH) add_compile_definitions(DEV_BRANCH) endif() +if(DISCORD) + add_compile_definitions(DISCORD) + target_sources(86Box PRIVATE discord.c) +endif() + if(VNC) find_package(LibVNCServer) if(LibVNCServer_FOUND) diff --git a/src/chipset/sis_85c50x.c b/src/chipset/sis_85c50x.c index 24fdd7788..8d7222d54 100644 --- a/src/chipset/sis_85c50x.c +++ b/src/chipset/sis_85c50x.c @@ -59,7 +59,7 @@ typedef struct sis_85c50x_t { pci_conf[256], pci_conf_sb[256], regs[256]; - smram_t *smram; + smram_t *smram[2]; port_92_t *port_92; } sis_85c50x_t; @@ -93,28 +93,41 @@ static void sis_85c50x_smm_recalc(sis_85c50x_t *dev) { /* NOTE: Naming mismatch - what the datasheet calls "host address" is what we call ram_base. */ - uint32_t ram_base = (dev->pci_conf[0x64] << 20) | ((dev->pci_conf[0x65] & 0x07) << 28); + uint32_t host_base = (dev->pci_conf[0x64] << 20) | ((dev->pci_conf[0x65] & 0x07) << 28); - smram_disable(dev->smram); + smram_disable_all(); - if ((((dev->pci_conf[0x65] & 0xe0) >> 5) != 0x00) && (ram_base == 0x00000000)) + if ((((dev->pci_conf[0x65] & 0xe0) >> 5) != 0x00) && (host_base == 0x00000000)) return; switch ((dev->pci_conf[0x65] & 0xe0) >> 5) { case 0x00: - smram_enable(dev->smram, 0xe0000, 0xe0000, 0x8000, (dev->pci_conf[0x65] & 0x10), 1); + sis_85c50x_log("SiS 50x SMRAM: 000E0000-000E7FFF -> 000E0000-000E7FFF\n"); + smram_enable(dev->smram[0], 0xe0000, 0xe0000, 0x8000, (dev->pci_conf[0x65] & 0x10), 1); break; case 0x01: - smram_enable(dev->smram, 0xb0000, ram_base, 0x10000, (dev->pci_conf[0x65] & 0x10), 1); + host_base |= 0x000b0000; + sis_85c50x_log("SiS 50x SMRAM: %08X-%08X -> 000B0000-000BFFFF\n", host_base, host_base + 0x10000 - 1); + smram_enable(dev->smram[0], host_base, 0xb0000, 0x10000, (dev->pci_conf[0x65] & 0x10), 1); + smram_enable(dev->smram[1], host_base ^ 0x00100000, 0xb0000, 0x10000, (dev->pci_conf[0x65] & 0x10), 1); break; case 0x02: - smram_enable(dev->smram, 0xa0000, ram_base, 0x10000, (dev->pci_conf[0x65] & 0x10), 1); + host_base |= 0x000a0000; + sis_85c50x_log("SiS 50x SMRAM: %08X-%08X -> 000A0000-000AFFFF\n", host_base, host_base + 0x10000 - 1); + smram_enable(dev->smram[0], host_base, 0xa0000, 0x10000, (dev->pci_conf[0x65] & 0x10), 1); + smram_enable(dev->smram[1], host_base ^ 0x00100000, 0xa0000, 0x10000, (dev->pci_conf[0x65] & 0x10), 1); break; case 0x04: - smram_enable(dev->smram, 0xa0000, ram_base, 0x8000, (dev->pci_conf[0x65] & 0x10), 1); + host_base |= 0x000a0000; + sis_85c50x_log("SiS 50x SMRAM: %08X-%08X -> 000A0000-000AFFFF\n", host_base, host_base + 0x8000 - 1); + smram_enable(dev->smram[0], host_base, 0xa0000, 0x8000, (dev->pci_conf[0x65] & 0x10), 1); + smram_enable(dev->smram[1], host_base ^ 0x00100000, 0xa0000, 0x8000, (dev->pci_conf[0x65] & 0x10), 1); break; case 0x06: - smram_enable(dev->smram, 0xb0000, ram_base, 0x8000, (dev->pci_conf[0x65] & 0x10), 1); + host_base |= 0x000b0000; + sis_85c50x_log("SiS 50x SMRAM: %08X-%08X -> 000B0000-000BFFFF\n", host_base, host_base + 0x8000 - 1); + smram_enable(dev->smram[0], host_base, 0xb0000, 0x8000, (dev->pci_conf[0x65] & 0x10), 1); + smram_enable(dev->smram[1], host_base ^ 0x00100000, 0xa0000, 0x8000, (dev->pci_conf[0x65] & 0x10), 1); break; } } @@ -125,7 +138,9 @@ sis_85c50x_write(int func, int addr, uint8_t val, void *priv) sis_85c50x_t *dev = (sis_85c50x_t *) priv; uint8_t valxor = (val ^ dev->pci_conf[addr]); - switch (addr) { + sis_85c50x_log("85C501: [W] (%02X, %02X) = %02X\n", func, addr, val); + + if (func == 0x00) switch (addr) { case 0x04: /* Command - low byte */ dev->pci_conf[addr] = (dev->pci_conf[addr] & 0xb4) | (val & 0x4b); break; @@ -177,8 +192,8 @@ sis_85c50x_write(int func, int addr, uint8_t val, void *priv) break; case 0x5b: dev->pci_conf[addr] = val; - if (valxor & 0xc0) - port_92_set_features(dev->port_92, !!(val & 0x40), !!(val & 0x80)); + // if (valxor & 0xc0) + // port_92_set_features(dev->port_92, !!(val & 0x40), !!(val & 0x80)); break; case 0x60: /* SMI */ if ((dev->pci_conf[0x68] & 0x01) && !(dev->pci_conf[addr] & 0x02) && (val & 0x02)) { @@ -199,18 +214,20 @@ sis_85c50x_write(int func, int addr, uint8_t val, void *priv) dev->pci_conf[addr] &= ~(val); break; } - - sis_85c50x_log("85C501: dev->pci_conf[%02x] = %02x\n", addr, val); } static uint8_t sis_85c50x_read(int func, int addr, void *priv) { sis_85c50x_t *dev = (sis_85c50x_t *) priv; + uint8_t ret = 0xff; - sis_85c50x_log("85C501: dev->pci_conf[%02x] (%02x)\n", addr, dev->pci_conf[addr]); + if (func == 0x00) + ret = dev->pci_conf[addr]; - return dev->pci_conf[addr]; + sis_85c50x_log("85C501: [R] (%02X, %02X) = %02X\n", func, addr, ret); + + return ret; } static void @@ -218,7 +235,9 @@ sis_85c50x_sb_write(int func, int addr, uint8_t val, void *priv) { sis_85c50x_t *dev = (sis_85c50x_t *) priv; - switch (addr) { + sis_85c50x_log("85C503: [W] (%02X, %02X) = %02X\n", func, addr, val); + + if (func == 0x00) switch (addr) { case 0x04: /* Command */ dev->pci_conf_sb[addr] = val & 0x0f; break; @@ -246,17 +265,20 @@ sis_85c50x_sb_write(int func, int addr, uint8_t val, void *priv) dev->pci_conf_sb[addr] = val; break; } - - sis_85c50x_log("85C503: dev->pci_conf_sb[%02x] = %02x\n", addr, val); } static uint8_t sis_85c50x_sb_read(int func, int addr, void *priv) { sis_85c50x_t *dev = (sis_85c50x_t *) priv; - sis_85c50x_log("85C503: dev->pci_conf_sb[%02x] (%02x)\n", addr, dev->pci_conf_sb[addr]); + uint8_t ret = 0xff; - return dev->pci_conf_sb[addr]; + if (func == 0x00) + ret = dev->pci_conf_sb[addr]; + + sis_85c50x_log("85C503: [W] (%02X, %02X) = %02X\n", func, addr, ret); + + return ret; } static void @@ -264,6 +286,8 @@ sis_85c50x_isa_write(uint16_t addr, uint8_t val, void *priv) { sis_85c50x_t *dev = (sis_85c50x_t *) priv; + sis_85c50x_log("85C503 ISA: [W] (%04X) = %02X\n", addr, val); + switch (addr) { case 0x22: dev->index = val; @@ -279,7 +303,7 @@ sis_85c50x_isa_write(uint16_t addr, uint8_t val, void *priv) break; case 0x84: case 0x88: - case 0x9: + case 0x89: case 0x8a: case 0x8b: dev->regs[dev->index] = val; @@ -290,8 +314,6 @@ sis_85c50x_isa_write(uint16_t addr, uint8_t val, void *priv) } break; } - - sis_85c50x_log("85C501-ISA: dev->regs[%02x] = %02x\n", addr, val); } static uint8_t @@ -313,7 +335,7 @@ sis_85c50x_isa_read(uint16_t addr, void *priv) break; } - sis_85c50x_log("85C501-ISA: dev->regs[%02x] (%02x)\n", dev->index, ret); + sis_85c50x_log("85C503 ISA: [R] (%04X) = %02X\n", addr, ret); return ret; } @@ -370,7 +392,8 @@ sis_85c50x_close(void *priv) { sis_85c50x_t *dev = (sis_85c50x_t *) priv; - smram_del(dev->smram); + smram_del(dev->smram[1]); + smram_del(dev->smram[0]); free(dev); } @@ -387,7 +410,9 @@ sis_85c50x_init(const device_t *info) pci_add_card(PCI_ADD_SOUTHBRIDGE, sis_85c50x_sb_read, sis_85c50x_sb_write, dev); io_sethandler(0x0022, 0x0002, sis_85c50x_isa_read, NULL, NULL, sis_85c50x_isa_write, NULL, NULL, dev); - dev->smram = smram_add(); + dev->smram[0] = smram_add(); + dev->smram[1] = smram_add(); + dev->port_92 = device_add(&port_92_device); sis_85c50x_reset(dev); diff --git a/src/config.c b/src/config.c index cbccf115f..f573d3d4b 100644 --- a/src/config.c +++ b/src/config.c @@ -666,9 +666,36 @@ load_sound(void) if ((p != NULL) && (!strcmp(p, "sbpci128") || !strcmp(p, "sb128pci"))) p = "es1371"; if (p != NULL) - sound_card_current = sound_card_get_from_internal_name(p); + sound_card_current[0] = sound_card_get_from_internal_name(p); else - sound_card_current = 0; + sound_card_current[0] = 0; + + p = ini_section_get_string(cat, "sndcard2", NULL); + /* FIXME: Hack to not break configs with the Sound Blaster 128 PCI set. */ + if ((p != NULL) && (!strcmp(p, "sbpci128") || !strcmp(p, "sb128pci"))) + p = "es1371"; + if (p != NULL) + sound_card_current[1] = sound_card_get_from_internal_name(p); + else + sound_card_current[1] = 0; + + p = ini_section_get_string(cat, "sndcard3", NULL); + /* FIXME: Hack to not break configs with the Sound Blaster 128 PCI set. */ + if ((p != NULL) && (!strcmp(p, "sbpci128") || !strcmp(p, "sb128pci"))) + p = "es1371"; + if (p != NULL) + sound_card_current[2] = sound_card_get_from_internal_name(p); + else + sound_card_current[2] = 0; + + p = ini_section_get_string(cat, "sndcard4", NULL); + /* FIXME: Hack to not break configs with the Sound Blaster 128 PCI set. */ + if ((p != NULL) && (!strcmp(p, "sbpci128") || !strcmp(p, "sb128pci"))) + p = "es1371"; + if (p != NULL) + sound_card_current[3] = sound_card_get_from_internal_name(p); + else + sound_card_current[3] = 0; p = ini_section_get_string(cat, "midi_device", NULL); if (p != NULL) @@ -684,10 +711,6 @@ load_sound(void) mpu401_standalone_enable = !!ini_section_get_int(cat, "mpu401_standalone", 0); - SSI2001 = !!ini_section_get_int(cat, "ssi2001", 0); - GAMEBLASTER = !!ini_section_get_int(cat, "gameblaster", 0); - GUS = !!ini_section_get_int(cat, "gus", 0); - memset(temp, '\0', sizeof(temp)); p = ini_section_get_string(cat, "sound_type", "float"); if (strlen(p) > 511) @@ -2311,10 +2334,25 @@ save_sound(void) { ini_section_t cat = ini_find_or_create_section(config, "Sound"); - if (sound_card_current == 0) + if (sound_card_current[0] == 0) ini_section_delete_var(cat, "sndcard"); else - ini_section_set_string(cat, "sndcard", sound_card_get_internal_name(sound_card_current)); + ini_section_set_string(cat, "sndcard", sound_card_get_internal_name(sound_card_current[0])); + + if (sound_card_current[1] == 0) + ini_section_delete_var(cat, "sndcard2"); + else + ini_section_set_string(cat, "sndcard2", sound_card_get_internal_name(sound_card_current[1])); + + if (sound_card_current[2] == 0) + ini_section_delete_var(cat, "sndcard3"); + else + ini_section_set_string(cat, "sndcard3", sound_card_get_internal_name(sound_card_current[2])); + + if (sound_card_current[3] == 0) + ini_section_delete_var(cat, "sndcard4"); + else + ini_section_set_string(cat, "sndcard4", sound_card_get_internal_name(sound_card_current[3])); if (!strcmp(midi_out_device_get_internal_name(midi_output_device_current), "none")) ini_section_delete_var(cat, "midi_device"); @@ -2331,21 +2369,6 @@ save_sound(void) else ini_section_set_int(cat, "mpu401_standalone", mpu401_standalone_enable); - if (SSI2001 == 0) - ini_section_delete_var(cat, "ssi2001"); - else - ini_section_set_int(cat, "ssi2001", SSI2001); - - if (GAMEBLASTER == 0) - ini_section_delete_var(cat, "gameblaster"); - else - ini_section_set_int(cat, "gameblaster", GAMEBLASTER); - - if (GUS == 0) - ini_section_delete_var(cat, "gus"); - else - ini_section_set_int(cat, "gus", GUS); - if (sound_is_float == 1) ini_section_delete_var(cat, "sound_type"); else diff --git a/src/floppy/fdc.c b/src/floppy/fdc.c index 9981a72a2..0c35cfcb6 100644 --- a/src/floppy/fdc.c +++ b/src/floppy/fdc.c @@ -2280,6 +2280,12 @@ fdc_reset(void *priv) } else if (fdc->flags & FDC_FLAG_SEC) { fdc->dma = 1; fdc->specify[1] = 0; + } else if (fdc->flags & FDC_FLAG_TER) { + fdc->dma = 1; + fdc->specify[1] = 0; + } else if (fdc->flags & FDC_FLAG_QUA) { + fdc->dma = 1; + fdc->specify[1] = 0; } else { fdc->dma = 1; fdc->specify[1] = 0; @@ -2297,6 +2303,10 @@ fdc_reset(void *priv) fdc_remove(fdc); if (fdc->flags & FDC_FLAG_SEC) { fdc_set_base(fdc, FDC_SECONDARY_ADDR); + } else if (fdc->flags & FDC_FLAG_TER) { + fdc_set_base(fdc, FDC_TERTIARY_ADDR); + } else if (fdc->flags & FDC_FLAG_QUA) { + fdc_set_base(fdc, FDC_QUATERNARY_ADDR); } else { fdc_set_base(fdc, (fdc->flags & FDC_FLAG_PCJR) ? FDC_PRIMARY_PCJR_ADDR : FDC_PRIMARY_ADDR); } @@ -2330,6 +2340,10 @@ fdc_init(const device_t *info) if (fdc->flags & FDC_FLAG_SEC) fdc->irq = FDC_SECONDARY_IRQ; + else if (fdc->flags & FDC_FLAG_TER) + fdc->irq = FDC_TERTIARY_IRQ; + else if (fdc->flags & FDC_FLAG_QUA) + fdc->irq = FDC_QUATERNARY_IRQ; else fdc->irq = FDC_PRIMARY_IRQ; @@ -2337,6 +2351,10 @@ fdc_init(const device_t *info) timer_add(&fdc->watchdog_timer, fdc_watchdog_poll, fdc, 0); else if (fdc->flags & FDC_FLAG_SEC) fdc->dma_ch = FDC_SECONDARY_DMA; + else if (fdc->flags & FDC_FLAG_TER) + fdc->dma_ch = FDC_TERTIARY_DMA; + else if (fdc->flags & FDC_FLAG_QUA) + fdc->dma_ch = FDC_QUATERNARY_DMA; else fdc->dma_ch = FDC_PRIMARY_DMA; @@ -2378,7 +2396,7 @@ const device_t fdc_xt_device = { const device_t fdc_xt_sec_device = { .name = "PC/XT Floppy Drive Controller (Secondary)", - .internal_name = "fdc_xt", + .internal_name = "fdc_xt_sec", .flags = FDC_FLAG_SEC, .local = 0, .init = fdc_init, @@ -2390,6 +2408,34 @@ const device_t fdc_xt_sec_device = { .config = NULL }; +const device_t fdc_xt_ter_device = { + .name = "PC/XT Floppy Drive Controller (Tertiary)", + .internal_name = "fdc_xt_ter", + .flags = FDC_FLAG_TER, + .local = 0, + .init = fdc_init, + .close = fdc_close, + .reset = fdc_reset, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t fdc_xt_qua_device = { + .name = "PC/XT Floppy Drive Controller (Quaternary)", + .internal_name = "fdc_xt_qua", + .flags = FDC_FLAG_QUA, + .local = 0, + .init = fdc_init, + .close = fdc_close, + .reset = fdc_reset, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t fdc_xt_t1x00_device = { .name = "PC/XT Floppy Drive Controller (Toshiba)", .internal_name = "fdc_xt_t1x00", @@ -2474,6 +2520,34 @@ const device_t fdc_at_sec_device = { .config = NULL }; +const device_t fdc_at_ter_device = { + .name = "PC/AT Floppy Drive Controller (Tertiary)", + .internal_name = "fdc_at_ter", + .flags = 0, + .local = FDC_FLAG_AT | FDC_FLAG_TER, + .init = fdc_init, + .close = fdc_close, + .reset = fdc_reset, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t fdc_at_qua_device = { + .name = "PC/AT Floppy Drive Controller (Quaternary)", + .internal_name = "fdc_at_qua", + .flags = 0, + .local = FDC_FLAG_AT | FDC_FLAG_QUA, + .init = fdc_init, + .close = fdc_close, + .reset = fdc_reset, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t fdc_at_actlow_device = { .name = "PC/AT Floppy Drive Controller (Active low)", .internal_name = "fdc_at_actlow", diff --git a/src/floppy/fdc_monster.c b/src/floppy/fdc_monster.c index 2cd1d9b05..ae5e1b290 100644 --- a/src/floppy/fdc_monster.c +++ b/src/floppy/fdc_monster.c @@ -39,6 +39,8 @@ typedef struct { rom_t bios_rom; + fdc_t *fdc_pri; + fdc_t *fdc_sec; } monster_fdc_t; static void @@ -57,14 +59,29 @@ monster_fdc_init(const device_t *info) dev = (monster_fdc_t *)malloc(sizeof(monster_fdc_t)); memset(dev, 0, sizeof(monster_fdc_t)); +#if 0 + uint8_t sec_irq = device_get_config_int("sec_irq"); + uint8_t sec_dma = device_get_config_int("sec_dma"); +#endif + if (BIOS_ADDR != 0) rom_init(&dev->bios_rom, ROM_MONSTER_FDC, BIOS_ADDR, 0x2000, 0x1ffff, 0, MEM_MAPPING_EXTERNAL); // Primary FDC - device_add(&fdc_at_device); + dev->fdc_pri = device_add(&fdc_at_device); +#if 0 // Secondary FDC - // device_add(&fdc_at_sec_device); + uint8_t sec_enabled = device_get_config_int("sec_enabled"); + if (sec_enabled) + dev->fdc_sec = device_add(&fdc_at_sec_device); + fdc_set_irq(dev->fdc_sec, sec_irq); + fdc_set_dma_ch(dev->fdc_sec, sec_dma); +#endif + +#if 0 + uint8_t rom_writes_enabled = device_get_config_int("rom_writes_enabled"); +#endif return dev; } @@ -76,7 +93,14 @@ static int monster_fdc_available(void) static const device_config_t monster_fdc_config[] = { // clang-format off -/* +#if 0 + { + .name = "sec_enabled", + .description = "Enable Secondary Controller", + .type = CONFIG_BINARY, + .default_string = "", + .default_int = 0 + }, { .name = "sec_irq", .description = "Secondary Controller IRQ", @@ -137,7 +161,7 @@ static const device_config_t monster_fdc_config[] = { { .description = "" } } }, -*/ +#endif { .name = "bios_addr", .description = "BIOS Address:", @@ -157,7 +181,7 @@ static const device_config_t monster_fdc_config[] = { { .description = "" } } }, -/* +#if 0 { .name = "bios_size", .description = "BIOS Size:", @@ -172,8 +196,14 @@ static const device_config_t monster_fdc_config[] = { { .description = "" } } }, -*/ - // BIOS extension ROM writes: Enabled/Disabled + { + .name = "rom_writes_enabled", + .description = "Enable BIOS extension ROM Writes", + .type = CONFIG_BINARY, + .default_string = "", + .default_int = 0 + }, +#endif { .name = "", .description = "", .type = CONFIG_END } // clang-format on }; diff --git a/src/include/86box/86box.h b/src/include/86box/86box.h index 1db37f1a4..ca8d797cc 100644 --- a/src/include/86box/86box.h +++ b/src/include/86box/86box.h @@ -114,9 +114,6 @@ extern int bugger_enabled, /* (C) enable ISAbugger */ isamem_type[], /* (C) enable ISA mem cards */ isartc_type; /* (C) enable ISA RTC card */ extern int sound_is_float, /* (C) sound uses FP values */ - GAMEBLASTER, /* (C) sound option */ - GUS, GUSMAX, /* (C) sound option */ - SSI2001, /* (C) sound option */ voodoo_enabled, /* (C) video option */ ibm8514_enabled, /* (C) video option */ xga_enabled; /* (C) video option */ diff --git a/src/include/86box/fdc.h b/src/include/86box/fdc.h index e68c5d463..09678b2e5 100644 --- a/src/include/86box/fdc.h +++ b/src/include/86box/fdc.h @@ -53,6 +53,8 @@ extern int fdc_type; #define FDC_FLAG_UMC 0x400 /* UMC UM8398 */ #define FDC_FLAG_ALI 0x800 /* ALi M512x / M1543C */ #define FDC_FLAG_SEC 0x1000 /* Is Secondary */ +#define FDC_FLAG_TER 0x2000 /* Is Tertiary */ +#define FDC_FLAG_QUA 0x3000 /* Is Quaternary */ typedef struct { uint8_t dor, stat, command, processed_cmd, dat, st0, swap, dtl; @@ -187,12 +189,16 @@ extern uint8_t fdc_get_current_drive(void); #ifdef EMU_DEVICE_H extern const device_t fdc_xt_device; extern const device_t fdc_xt_sec_device; +extern const device_t fdc_xt_ter_device; +extern const device_t fdc_xt_qua_device; extern const device_t fdc_xt_t1x00_device; extern const device_t fdc_xt_tandy_device; extern const device_t fdc_xt_amstrad_device; extern const device_t fdc_pcjr_device; extern const device_t fdc_at_device; extern const device_t fdc_at_sec_device; +extern const device_t fdc_at_ter_device; +extern const device_t fdc_at_qua_device; extern const device_t fdc_at_actlow_device; extern const device_t fdc_at_ps1_device; extern const device_t fdc_at_smc_device; diff --git a/src/include/86box/flash.h b/src/include/86box/flash.h index 21ba6b212..d161d416b 100644 --- a/src/include/86box/flash.h +++ b/src/include/86box/flash.h @@ -11,8 +11,10 @@ * * * Authors: Miran Grca, + * Jasmine Iwanek, * - * Copyright 2020 Miran Grca. + * Copyright 2020 Miran Grca. + * Copyright 2022-2023 Jasmine Iwanek. */ #ifndef EMU_FLASH_H @@ -26,10 +28,36 @@ extern const device_t intel_flash_bxb_device; extern const device_t sst_flash_29ee010_device; extern const device_t sst_flash_29ee020_device; + +extern const device_t winbond_flash_w29c512_device; extern const device_t winbond_flash_w29c010_device; extern const device_t winbond_flash_w29c020_device; +extern const device_t winbond_flash_w29c040_device; + +extern const device_t sst_flash_39sf512_device; extern const device_t sst_flash_39sf010_device; extern const device_t sst_flash_39sf020_device; extern const device_t sst_flash_39sf040_device; +extern const device_t sst_flash_39lf512_device; +extern const device_t sst_flash_39lf010_device; +extern const device_t sst_flash_39lf020_device; +extern const device_t sst_flash_39lf040_device; +extern const device_t sst_flash_39lf080_device; +extern const device_t sst_flash_39lf016_device; + +extern const device_t sst_flash_49lf002_device; +extern const device_t sst_flash_49lf020_device; +extern const device_t sst_flash_49lf020a_device; +extern const device_t sst_flash_49lf003_device; +extern const device_t sst_flash_49lf030_device; +extern const device_t sst_flash_49lf004_device; +extern const device_t sst_flash_49lf004c_device; +extern const device_t sst_flash_49lf040_device; +extern const device_t sst_flash_49lf008_device; +extern const device_t sst_flash_49lf008c_device; +extern const device_t sst_flash_49lf080_device; +extern const device_t sst_flash_49lf016_device; +extern const device_t sst_flash_49lf160_device; + #endif /*EMU_FLASH_H*/ diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index ffc52ff24..614dcd975 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -558,10 +558,8 @@ extern int machine_at_430nx_init(const machine_t *); extern int machine_at_acerv30_init(const machine_t *); extern int machine_at_apollo_init(const machine_t *); -extern int machine_at_exp8551_init(const machine_t *); extern int machine_at_zappa_init(const machine_t *); extern int machine_at_powermatev_init(const machine_t *); -extern int machine_at_mb500n_init(const machine_t *); extern int machine_at_hawk_init(const machine_t *); extern int machine_at_pat54pv_init(const machine_t *); @@ -570,16 +568,19 @@ extern int machine_at_hot543_init(const machine_t *); extern int machine_at_p54sp4_init(const machine_t *); extern int machine_at_sq588_init(const machine_t *); +extern int machine_at_p54sps_init(const machine_t *); /* m_at_socket7_3v.c */ extern int machine_at_p54tp4xe_init(const machine_t *); extern int machine_at_p54tp4xe_mr_init(const machine_t *); +extern int machine_at_exp8551_init(const machine_t *); extern int machine_at_gw2katx_init(const machine_t *); extern int machine_at_thor_init(const machine_t *); extern int machine_at_mrthor_init(const machine_t *); extern int machine_at_endeavor_init(const machine_t *); extern int machine_at_ms5119_init(const machine_t *); extern int machine_at_pb640_init(const machine_t *); +extern int machine_at_mb500n_init(const machine_t *); extern int machine_at_fmb_init(const machine_t *); extern int machine_at_acerm3a_init(const machine_t *); diff --git a/src/include/86box/plat_dir.h b/src/include/86box/plat_dir.h index f6c135001..d55bc5046 100644 --- a/src/include/86box/plat_dir.h +++ b/src/include/86box/plat_dir.h @@ -18,8 +18,8 @@ #ifndef PLAT_DIR_H #define PLAT_DIR_H -/* Windows needs the POSIX re-implementations */ -#if defined(_WIN32) +/* Windows and Termux needs the POSIX re-implementations */ +#if defined(_WIN32) || defined(__TERMUX__) # ifdef _MAX_FNAME # define MAXNAMLEN _MAX_FNAME # else diff --git a/src/include/86box/resource.h b/src/include/86box/resource.h index 17af95ca4..10f3a4224 100644 --- a/src/include/86box/resource.h +++ b/src/include/86box/resource.h @@ -79,82 +79,89 @@ #define IDT_JOYSTICK 1718 /* Joystick: */ /* DLG_CFG_SOUND */ -#define IDT_SOUND 1719 /* Sound card: */ -#define IDT_MIDI_OUT 1720 /* MIDI Out Device: */ -#define IDT_MIDI_IN 1721 /* MIDI In Device: */ +#define IDT_SOUND1 1719 /* Sound card 1: */ +#define IDT_SOUND2 1720 /* Sound card 2: */ +#define IDT_SOUND3 1721 /* Sound card 3: */ +#define IDT_SOUND4 1722 /* Sound card 4: */ +#define IDT_MIDI_OUT 1723 /* MIDI Out Device: */ +#define IDT_MIDI_IN 1724 /* MIDI In Device: */ /* DLG_CFG_NETWORK */ -#define IDT_NET_TYPE 1722 /* Network type: */ -#define IDT_PCAP 1723 /* PCap device: */ -#define IDT_NET 1724 /* Network adapter: */ +#define IDT_NET_TYPE 1725 /* Network type: */ +#define IDT_PCAP 1726 /* PCap device: */ +#define IDT_NET 1727 /* Network adapter: */ +#define IDT_NET1 1728 /* Network adapter 1: */ +#define IDT_NET2 1729 /* Network adapter 2: */ +#define IDT_NET3 1730 /* Network adapter 3: */ +#define IDT_NET4 1731 /* Network adapter 4: */ /* DLG_CFG_PORTS */ -#define IDT_COM1 1725 /* COM1 Device: */ -#define IDT_COM2 1726 /* COM1 Device: */ -#define IDT_COM3 1727 /* COM1 Device: */ -#define IDT_COM4 1728 /* COM1 Device: */ +#define IDT_COM1 1732 /* COM1 Device: */ +#define IDT_COM2 1733 /* COM1 Device: */ +#define IDT_COM3 1734 /* COM1 Device: */ +#define IDT_COM4 1735 /* COM1 Device: */ -#define IDT_LPT1 1729 /* LPT1 Device: */ -#define IDT_LPT2 1730 /* LPT2 Device: */ -#define IDT_LPT3 1731 /* LPT3 Device: */ -#define IDT_LPT4 1732 /* LPT4 Device: */ +#define IDT_LPT1 1736 /* LPT1 Device: */ +#define IDT_LPT2 1737 /* LPT2 Device: */ +#define IDT_LPT3 1738 /* LPT3 Device: */ +#define IDT_LPT4 1739 /* LPT4 Device: */ /* DLG_CFG_STORAGE */ -#define IDT_HDC 1733 /* HD Controller: */ -#define IDT_FDC 1734 /* Ext FD Controller: */ -#define IDT_SCSI_1 1735 /* SCSI Board #1: */ -#define IDT_SCSI_2 1736 /* SCSI Board #2: */ -#define IDT_SCSI_3 1737 /* SCSI Board #3: */ -#define IDT_SCSI_4 1738 /* SCSI Board #4: */ +#define IDT_HDC 1740 /* HD Controller: */ +#define IDT_FDC 1741 /* Ext FD Controller: */ +#define IDT_SCSI_1 1742 /* SCSI Board #1: */ +#define IDT_SCSI_2 1743 /* SCSI Board #2: */ +#define IDT_SCSI_3 1744 /* SCSI Board #3: */ +#define IDT_SCSI_4 1745 /* SCSI Board #4: */ /* DLG_CFG_HARD_DISKS */ -#define IDT_HDD 1739 /* Hard disks: */ -#define IDT_BUS 1740 /* Bus: */ -#define IDT_CHANNEL 1741 /* Channel: */ -#define IDT_ID 1742 /* ID: */ -#define IDT_LUN 1743 /* LUN: */ -#define IDT_SPEED 1744 /* Speed: */ +#define IDT_HDD 1746 /* Hard disks: */ +#define IDT_BUS 1747 /* Bus: */ +#define IDT_CHANNEL 1748 /* Channel: */ +#define IDT_ID 1749 /* ID: */ +#define IDT_LUN 1750 /* LUN: */ +#define IDT_SPEED 1751 /* Speed: */ /* DLG_CFG_HARD_DISKS_ADD */ -#define IDT_SECTORS 1745 /* Sectors: */ -#define IDT_HEADS 1746 /* Heads: */ -#define IDT_CYLS 1747 /* Cylinders: */ -#define IDT_SIZE_MB 1748 /* Size (MB): */ -#define IDT_TYPE 1749 /* Type: */ -#define IDT_FILE_NAME 1750 /* File name: */ -#define IDT_IMG_FORMAT 1751 /* Image Format: */ -#define IDT_BLOCK_SIZE 1752 /* Block Size: */ -#define IDT_PROGRESS 1753 /* Progress: */ +#define IDT_SECTORS 1752 /* Sectors: */ +#define IDT_HEADS 1753 /* Heads: */ +#define IDT_CYLS 1754 /* Cylinders: */ +#define IDT_SIZE_MB 1755 /* Size (MB): */ +#define IDT_TYPE 1756 /* Type: */ +#define IDT_FILE_NAME 1757 /* File name: */ +#define IDT_IMG_FORMAT 1758 /* Image Format: */ +#define IDT_BLOCK_SIZE 1759 /* Block Size: */ +#define IDT_PROGRESS 1760 /* Progress: */ /* DLG_CFG_FLOPPY_AND_CDROM_DRIVES */ -#define IDT_FLOPPY_DRIVES 1754 /* Floppy drives: */ -#define IDT_FDD_TYPE 1755 /* Type: */ -#define IDT_CD_DRIVES 1756 /* CD-ROM drives: */ -#define IDT_CD_BUS 1757 /* Bus: */ -#define IDT_CD_ID 1758 /* ID: */ -#define IDT_CD_LUN 1759 /* LUN: */ -#define IDT_CD_CHANNEL 1760 /* Channel: */ -#define IDT_CD_SPEED 1761 /* Speed: */ +#define IDT_FLOPPY_DRIVES 1761 /* Floppy drives: */ +#define IDT_FDD_TYPE 1762 /* Type: */ +#define IDT_CD_DRIVES 1763 /* CD-ROM drives: */ +#define IDT_CD_BUS 1764 /* Bus: */ +#define IDT_CD_ID 1765 /* ID: */ +#define IDT_CD_LUN 1766 /* LUN: */ +#define IDT_CD_CHANNEL 1767 /* Channel: */ +#define IDT_CD_SPEED 1768 /* Speed: */ /* DLG_CFG_OTHER_REMOVABLE_DEVICES */ -#define IDT_MO_DRIVES 1762 /* MO drives: */ -#define IDT_MO_BUS 1763 /* Bus: */ -#define IDT_MO_ID 1764 /* ID: */ -#define IDT_MO_CHANNEL 1765 /* Channel */ -#define IDT_MO_TYPE 1766 /* Type: */ +#define IDT_MO_DRIVES 1769 /* MO drives: */ +#define IDT_MO_BUS 1770 /* Bus: */ +#define IDT_MO_ID 1771 /* ID: */ +#define IDT_MO_CHANNEL 1772 /* Channel */ +#define IDT_MO_TYPE 1773 /* Type: */ -#define IDT_ZIP_DRIVES 1767 /* ZIP drives: */ -#define IDT_ZIP_BUS 1768 /* Bus: */ -#define IDT_ZIP_ID 1769 /* ID: */ -#define IDT_ZIP_LUN 1770 /* LUN: */ -#define IDT_ZIP_CHANNEL 1771 /* Channel: */ +#define IDT_ZIP_DRIVES 1774 /* ZIP drives: */ +#define IDT_ZIP_BUS 1775 /* Bus: */ +#define IDT_ZIP_ID 1776 /* ID: */ +#define IDT_ZIP_LUN 1777 /* LUN: */ +#define IDT_ZIP_CHANNEL 1778 /* Channel: */ /* DLG_CFG_PERIPHERALS */ -#define IDT_ISARTC 1772 /* ISA RTC: */ -#define IDT_ISAMEM_1 1773 /* ISAMEM Board #1: */ -#define IDT_ISAMEM_2 1774 /* ISAMEM Board #2: */ -#define IDT_ISAMEM_3 1775 /* ISAMEM Board #3: */ -#define IDT_ISAMEM_4 1776 /* ISAMEM Board #4: */ +#define IDT_ISARTC 1779 /* ISA RTC: */ +#define IDT_ISAMEM_1 1780 /* ISAMEM Board #1: */ +#define IDT_ISAMEM_2 1781 /* ISAMEM Board #2: */ +#define IDT_ISAMEM_3 1782 /* ISAMEM Board #3: */ +#define IDT_ISAMEM_4 1783 /* ISAMEM Board #4: */ /* * To try to keep these organized, we now group the @@ -199,10 +206,10 @@ #define IDC_CONFIGURE_MOUSE 1034 #define IDC_SOUND 1040 /* sound config */ -#define IDC_COMBO_SOUND 1041 -#define IDC_CHECK_SSI 1042 -#define IDC_CHECK_CMS 1043 -#define IDC_CHECK_GUS 1044 +#define IDC_COMBO_SOUND1 1041 +#define IDC_COMBO_SOUND2 1042 +#define IDC_COMBO_SOUND3 1043 +#define IDC_COMBO_SOUND4 1044 #define IDC_COMBO_MIDI_OUT 1045 #define IDC_CHECK_MPU401 1046 #define IDC_CONFIGURE_MPU401 1047 @@ -215,109 +222,118 @@ #define IDC_RADIO_FM_DRV_NUKED 1054 #define IDC_RADIO_FM_DRV_YMFM 1055 -#define IDC_COMBO_NET_TYPE 1060 /* network config */ -#define IDC_COMBO_PCAP 1061 -#define IDC_COMBO_NET 1062 +#define IDC_COMBO_NET1_TYPE 1060 /* network config */ +#define IDC_COMBO_NET2_TYPE 1061 +#define IDC_COMBO_NET3_TYPE 1062 +#define IDC_COMBO_NET4_TYPE 1063 +#define IDC_COMBO_PCAP1 1064 +#define IDC_COMBO_PCAP2 1065 +#define IDC_COMBO_PCAP3 1066 +#define IDC_COMBO_PCAP4 1067 +#define IDC_COMBO_NET1 1068 +#define IDC_COMBO_NET2 1069 +#define IDC_COMBO_NET3 1070 +#define IDC_COMBO_NET4 1071 -#define IDC_COMBO_LPT1 1070 /* ports config */ -#define IDC_COMBO_LPT2 1071 -#define IDC_COMBO_LPT3 1072 -#define IDC_COMBO_LPT4 1073 -#define IDC_CHECK_SERIAL1 1074 -#define IDC_CHECK_SERIAL2 1075 -#define IDC_CHECK_SERIAL3 1076 -#define IDC_CHECK_SERIAL4 1077 -#define IDC_CHECK_PARALLEL1 1078 -#define IDC_CHECK_PARALLEL2 1079 -#define IDC_CHECK_PARALLEL3 1080 -#define IDC_CHECK_PARALLEL4 1081 +#define IDC_COMBO_LPT1 1080 /* ports config */ +#define IDC_COMBO_LPT2 1081 +#define IDC_COMBO_LPT3 1082 +#define IDC_COMBO_LPT4 1083 +#define IDC_CHECK_SERIAL1 1084 +#define IDC_CHECK_SERIAL2 1085 +#define IDC_CHECK_SERIAL3 1086 +#define IDC_CHECK_SERIAL4 1087 +#define IDC_CHECK_PARALLEL1 1088 +#define IDC_CHECK_PARALLEL2 1089 +#define IDC_CHECK_PARALLEL3 1090 +#define IDC_CHECK_PARALLEL4 1091 -#define IDC_OTHER_PERIPH 1082 /* storage controllers config */ -#define IDC_COMBO_HDC 1083 -#define IDC_CONFIGURE_HDC 1084 -#define IDC_CHECK_IDE_TER 1085 -#define IDC_BUTTON_IDE_TER 1086 -#define IDC_CHECK_IDE_QUA 1087 -#define IDC_BUTTON_IDE_QUA 1088 -#define IDC_GROUP_SCSI 1089 -#define IDC_COMBO_SCSI_1 1090 -#define IDC_COMBO_SCSI_2 1091 -#define IDC_COMBO_SCSI_3 1092 -#define IDC_COMBO_SCSI_4 1093 -#define IDC_CONFIGURE_SCSI_1 1094 -#define IDC_CONFIGURE_SCSI_2 1095 -#define IDC_CONFIGURE_SCSI_3 1096 -#define IDC_CONFIGURE_SCSI_4 1097 -#define IDC_CHECK_CASSETTE 1098 +#define IDC_OTHER_PERIPH 1110 /* storage controllers config */ +#define IDC_COMBO_HDC 1111 +#define IDC_CONFIGURE_HDC 1112 +#define IDC_CHECK_IDE_TER 1113 +#define IDC_BUTTON_IDE_TER 1114 +#define IDC_CHECK_IDE_QUA 1115 +#define IDC_BUTTON_IDE_QUA 1116 +#define IDC_GROUP_SCSI 1117 +#define IDC_COMBO_SCSI_1 1118 +#define IDC_COMBO_SCSI_2 1119 +#define IDC_COMBO_SCSI_3 1120 +#define IDC_COMBO_SCSI_4 1121 +#define IDC_CONFIGURE_SCSI_1 1122 +#define IDC_CONFIGURE_SCSI_2 1123 +#define IDC_CONFIGURE_SCSI_3 1124 +#define IDC_CONFIGURE_SCSI_4 1125 +#define IDC_CHECK_CASSETTE 1126 -#define IDC_HARD_DISKS 1100 /* hard disks config */ -#define IDC_LIST_HARD_DISKS 1101 -#define IDC_BUTTON_HDD_ADD_NEW 1102 -#define IDC_BUTTON_HDD_ADD 1103 -#define IDC_BUTTON_HDD_REMOVE 1104 -#define IDC_COMBO_HD_BUS 1105 -#define IDC_COMBO_HD_CHANNEL 1106 -#define IDC_COMBO_HD_ID 1107 -#define IDC_COMBO_HD_LUN 1108 -#define IDC_COMBO_HD_CHANNEL_IDE 1109 +#define IDC_HARD_DISKS 1130 /* hard disks config */ +#define IDC_LIST_HARD_DISKS 1131 +#define IDC_BUTTON_HDD_ADD_NEW 1132 +#define IDC_BUTTON_HDD_ADD 1133 +#define IDC_BUTTON_HDD_REMOVE 1134 +#define IDC_COMBO_HD_BUS 1135 +#define IDC_COMBO_HD_CHANNEL 1136 +#define IDC_COMBO_HD_ID 1137 +#define IDC_COMBO_HD_LUN 1138 +#define IDC_COMBO_HD_CHANNEL_IDE 1139 -#define IDC_EDIT_HD_FILE_NAME 1110 /* add hard disk dialog */ -#define IDC_EDIT_HD_SPT 1111 -#define IDC_EDIT_HD_HPC 1112 -#define IDC_EDIT_HD_CYL 1113 -#define IDC_EDIT_HD_SIZE 1114 -#define IDC_COMBO_HD_TYPE 1115 -#define IDC_PBAR_IMG_CREATE 1116 -#define IDC_COMBO_HD_IMG_FORMAT 1117 -#define IDC_COMBO_HD_BLOCK_SIZE 1118 +#define IDC_EDIT_HD_FILE_NAME 1140 /* add hard disk dialog */ +#define IDC_EDIT_HD_SPT 1141 +#define IDC_EDIT_HD_HPC 1142 +#define IDC_EDIT_HD_CYL 1143 +#define IDC_EDIT_HD_SIZE 1144 +#define IDC_COMBO_HD_TYPE 1145 +#define IDC_PBAR_IMG_CREATE 1146 +#define IDC_COMBO_HD_IMG_FORMAT 1147 +#define IDC_COMBO_HD_BLOCK_SIZE 1148 -#define IDC_REMOV_DEVICES 1120 /* floppy and cd-rom drives config */ -#define IDC_LIST_FLOPPY_DRIVES 1121 -#define IDC_COMBO_FD_TYPE 1122 -#define IDC_CHECKTURBO 1123 -#define IDC_CHECKBPB 1124 -#define IDC_LIST_CDROM_DRIVES 1125 -#define IDC_COMBO_CD_BUS 1126 -#define IDC_COMBO_CD_ID 1127 -#define IDC_COMBO_CD_LUN 1128 -#define IDC_COMBO_CD_CHANNEL_IDE 1129 -#define IDC_CHECKEARLY 1130 +#define IDC_REMOV_DEVICES 1150 /* floppy and cd-rom drives config */ +#define IDC_LIST_FLOPPY_DRIVES 1151 +#define IDC_COMBO_FD_TYPE 1152 +#define IDC_CHECKTURBO 1153 +#define IDC_CHECKBPB 1154 +#define IDC_LIST_CDROM_DRIVES 1155 +#define IDC_COMBO_CD_BUS 1156 +#define IDC_COMBO_CD_ID 1157 +#define IDC_COMBO_CD_LUN 1158 +#define IDC_COMBO_CD_CHANNEL_IDE 1159 +#define IDC_CHECKEARLY 1160 -#define IDC_LIST_ZIP_DRIVES 1140 /* other removable devices config */ -#define IDC_COMBO_ZIP_BUS 1141 -#define IDC_COMBO_ZIP_ID 1142 -#define IDC_COMBO_ZIP_LUN 1143 -#define IDC_COMBO_ZIP_CHANNEL_IDE 1144 -#define IDC_CHECK250 1145 -#define IDC_COMBO_CD_SPEED 1146 -#define IDC_LIST_MO_DRIVES 1147 -#define IDC_COMBO_MO_BUS 1148 -#define IDC_COMBO_MO_ID 1149 -#define IDC_COMBO_MO_LUN 1150 -#define IDC_COMBO_MO_CHANNEL_IDE 1151 -#define IDC_COMBO_MO_TYPE 1152 +#define IDC_LIST_ZIP_DRIVES 1170 /* other removable devices config */ +#define IDC_COMBO_ZIP_BUS 1171 +#define IDC_COMBO_ZIP_ID 1172 +#define IDC_COMBO_ZIP_LUN 1173 +#define IDC_COMBO_ZIP_CHANNEL_IDE 1174 +#define IDC_CHECK250 1175 +#define IDC_COMBO_CD_SPEED 1176 +#define IDC_LIST_MO_DRIVES 1177 +#define IDC_COMBO_MO_BUS 1178 +#define IDC_COMBO_MO_ID 1179 +#define IDC_COMBO_MO_LUN 1170 +#define IDC_COMBO_MO_CHANNEL_IDE 1181 +#define IDC_COMBO_MO_TYPE 1182 -#define IDC_CHECK_BUGGER 1160 /* other periph config */ -#define IDC_CHECK_POSTCARD 1161 -#define IDC_COMBO_ISARTC 1162 -#define IDC_CONFIGURE_ISARTC 1163 -#define IDC_COMBO_FDC 1164 -#define IDC_CONFIGURE_FDC 1165 -#define IDC_GROUP_ISAMEM 1166 -#define IDC_COMBO_ISAMEM_1 1167 -#define IDC_COMBO_ISAMEM_2 1168 -#define IDC_COMBO_ISAMEM_3 1169 -#define IDC_COMBO_ISAMEM_4 1170 -#define IDC_CONFIGURE_ISAMEM_1 1171 -#define IDC_CONFIGURE_ISAMEM_2 1172 -#define IDC_CONFIGURE_ISAMEM_3 1173 -#define IDC_CONFIGURE_ISAMEM_4 1174 +#define IDC_CHECK_BUGGER 1190 /* other periph config */ +#define IDC_CHECK_POSTCARD 1191 +#define IDC_COMBO_ISARTC 1192 +#define IDC_CONFIGURE_ISARTC 1193 +#define IDC_COMBO_FDC 1194 +#define IDC_CONFIGURE_FDC 1195 +#define IDC_GROUP_ISAMEM 1196 +#define IDC_COMBO_ISAMEM_1 1197 +#define IDC_COMBO_ISAMEM_2 1198 +#define IDC_COMBO_ISAMEM_3 1199 +#define IDC_COMBO_ISAMEM_4 1200 +#define IDC_CONFIGURE_ISAMEM_1 1201 +#define IDC_CONFIGURE_ISAMEM_2 1202 +#define IDC_CONFIGURE_ISAMEM_3 1203 +#define IDC_CONFIGURE_ISAMEM_4 1204 -#define IDC_SLIDER_GAIN 1180 /* sound gain dialog */ +#define IDC_SLIDER_GAIN 1210 /* sound gain dialog */ -#define IDC_EDIT_FILE_NAME 1200 /* new floppy image dialog */ -#define IDC_COMBO_DISK_SIZE 1201 -#define IDC_COMBO_RPM_MODE 1202 +#define IDC_EDIT_FILE_NAME 1220 /* new floppy image dialog */ +#define IDC_COMBO_DISK_SIZE 1221 +#define IDC_COMBO_RPM_MODE 1222 #define IDC_COMBO_LANG 1009 /* change language dialog */ #define IDC_COMBO_ICON 1010 @@ -329,19 +345,29 @@ #define IDC_CONFIG_BASE 1300 #define IDC_CONFIGURE_VID 1300 #define IDC_CONFIGURE_VID_2 1301 -#define IDC_CONFIGURE_SND 1302 -#define IDC_CONFIGURE_VOODOO 1303 -#define IDC_CONFIGURE_MOD 1304 -#define IDC_CONFIGURE_NET_TYPE 1305 -#define IDC_CONFIGURE_BUSLOGIC 1306 -#define IDC_CONFIGURE_PCAP 1307 -#define IDC_CONFIGURE_NET 1308 -#define IDC_CONFIGURE_MIDI_OUT 1309 -#define IDC_CONFIGURE_MIDI_IN 1310 -#define IDC_JOY1 1311 -#define IDC_JOY2 1312 -#define IDC_JOY3 1313 -#define IDC_JOY4 1314 +#define IDC_CONFIGURE_SND1 1302 +#define IDC_CONFIGURE_SND2 1303 +#define IDC_CONFIGURE_SND3 1304 +#define IDC_CONFIGURE_SND4 1305 +#define IDC_CONFIGURE_VOODOO 1306 +#define IDC_CONFIGURE_NET1_TYPE 1310 +#define IDC_CONFIGURE_NET2_TYPE 1311 +#define IDC_CONFIGURE_NET3_TYPE 1312 +#define IDC_CONFIGURE_NET4_TYPE 1313 +#define IDC_CONFIGURE_PCAP1 1314 +#define IDC_CONFIGURE_PCAP2 1315 +#define IDC_CONFIGURE_PCAP3 1316 +#define IDC_CONFIGURE_PCAP4 1317 +#define IDC_CONFIGURE_NET1 1318 +#define IDC_CONFIGURE_NET2 1319 +#define IDC_CONFIGURE_NET3 1320 +#define IDC_CONFIGURE_NET4 1321 +#define IDC_CONFIGURE_MIDI_OUT 1322 +#define IDC_CONFIGURE_MIDI_IN 1323 +#define IDC_JOY1 1330 +#define IDC_JOY2 1331 +#define IDC_JOY3 1332 +#define IDC_JOY4 1333 #define IDC_HDTYPE 1380 #define IDC_RENDER 1381 #define IDC_STATUS 1382 diff --git a/src/include/86box/sound.h b/src/include/86box/sound.h index a38d213da..f0bfad7c7 100644 --- a/src/include/86box/sound.h +++ b/src/include/86box/sound.h @@ -20,6 +20,8 @@ #ifndef EMU_SOUND_H #define EMU_SOUND_H +#define SOUND_CARD_MAX 4 /* currently we support up to 4 sound cards and a standalome MPU401 */ + extern int sound_gain; #define SOUNDBUFLEN (48000 / 50) @@ -38,7 +40,7 @@ extern int gated, speakon; extern int sound_pos_global; -extern int sound_card_current; +extern int sound_card_current[SOUND_CARD_MAX]; extern void sound_add_handler(void (*get_buffer)(int32_t *buffer, int len, void *p), diff --git a/src/include/86box/version.h.in b/src/include/86box/version.h.in index b8cd9ed97..5ebf7dba9 100644 --- a/src/include/86box/version.h.in +++ b/src/include/86box/version.h.in @@ -1,58 +1,60 @@ /* - * 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. + * 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. + * This file is part of the 86Box distribution. * - * Definitions for project version, branding, and external links. + * Definitions for project version, branding, and external links. * - * Authors: Miran Grca, * - * Copyright 2020 Miran Grca. + * + * Authors: Miran Grca, + * + * Copyright 2020 Miran Grca. */ #define _LSTR(s) L ## s #define LSTR(s) _LSTR(s) /* Version info. */ -#define EMU_NAME "@CMAKE_PROJECT_NAME@" -#define EMU_NAME_W LSTR(EMU_NAME) +#define EMU_NAME "@CMAKE_PROJECT_NAME@" +#define EMU_NAME_W LSTR(EMU_NAME) -#define EMU_VERSION "@CMAKE_PROJECT_VERSION@" -#define EMU_VERSION_W LSTR(EMU_VERSION) -#define EMU_VERSION_EX "3.50" /* frozen due to IDE re-detection behavior on Windows */ -#define EMU_VERSION_MAJ @CMAKE_PROJECT_VERSION_MAJOR@ -#define EMU_VERSION_MIN @CMAKE_PROJECT_VERSION_MINOR@ +#define EMU_VERSION "@CMAKE_PROJECT_VERSION@" +#define EMU_VERSION_W LSTR(EMU_VERSION) +#define EMU_VERSION_EX "3.50" /* frozen due to IDE re-detection behavior on Windows */ +#define EMU_VERSION_MAJ @CMAKE_PROJECT_VERSION_MAJOR@ +#define EMU_VERSION_MIN @CMAKE_PROJECT_VERSION_MINOR@ #define EMU_VERSION_PATCH @CMAKE_PROJECT_VERSION_PATCH@ -#cmakedefine EMU_BUILD "@EMU_BUILD@" -#define EMU_BUILD_NUM @EMU_BUILD_NUM@ -#cmakedefine EMU_GIT_HASH "@EMU_GIT_HASH@" +#cmakedefine EMU_BUILD "@EMU_BUILD@" +#define EMU_BUILD_NUM @EMU_BUILD_NUM@ +#cmakedefine EMU_GIT_HASH "@EMU_GIT_HASH@" #ifdef EMU_BUILD -# define EMU_BUILD_W LSTR(EMU_BUILD) -# define EMU_VERSION_FULL EMU_VERSION " [" EMU_BUILD "]" -# define EMU_VERSION_FULL_W EMU_VERSION_W L" [" EMU_BUILD_W L"]" +# define EMU_BUILD_W LSTR(EMU_BUILD) +# define EMU_VERSION_FULL EMU_VERSION " [" EMU_BUILD "]" +# define EMU_VERSION_FULL_W EMU_VERSION_W L" [" EMU_BUILD_W L"]" #else -# define EMU_VERSION_FULL EMU_VERSION -# define EMU_VERSION_FULL_W EMU_VERSION_W +# define EMU_VERSION_FULL EMU_VERSION +# define EMU_VERSION_FULL_W EMU_VERSION_W #endif #ifdef EMU_GIT_HASH -# define EMU_GIT_HASH_W LSTR(EMU_GIT_HASH) +# define EMU_GIT_HASH_W LSTR(EMU_GIT_HASH) #endif -#define COPYRIGHT_YEAR "@EMU_COPYRIGHT_YEAR@" +#define COPYRIGHT_YEAR "@EMU_COPYRIGHT_YEAR@" /* Web URL info. */ -#define EMU_SITE "86box.net" -#define EMU_SITE_W LSTR(EMU_SITE) -#define EMU_ROMS_URL "https://github.com/86Box/roms/releases/latest" -#define EMU_ROMS_URL_W LSTR(EMU_ROMS_URL) +#define EMU_SITE "86box.net" +#define EMU_SITE_W LSTR(EMU_SITE) +#define EMU_ROMS_URL "https://github.com/86Box/roms/releases/latest" +#define EMU_ROMS_URL_W LSTR(EMU_ROMS_URL) #ifdef RELEASE_BUILD -# define EMU_DOCS_URL "https://86box.readthedocs.io/en/v@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@/" +# define EMU_DOCS_URL "https://86box.readthedocs.io/en/v@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@/" #else -# define EMU_DOCS_URL "https://86box.readthedocs.io" +# define EMU_DOCS_URL "https://86box.readthedocs.io" #endif -#define EMU_DOCS_URL_W LSTR(EMU_DOCS_URL) +#define EMU_DOCS_URL_W LSTR(EMU_DOCS_URL) diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index 71aeeb7fb..c30f39603 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -461,7 +461,7 @@ machine_at_s1846_init(const machine_t *model) device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); - if (sound_card_current == SOUND_INTERNAL) { + if (sound_card_current[0] == SOUND_INTERNAL) { device_add(&es1371_onboard_device); device_add(&cs4297_device); /* found on other Tyan boards around the same time */ } @@ -606,7 +606,7 @@ machine_at_gt694va_init(const machine_t *model) hwm_values.fans[2] = 0; /* unused */ hwm_values.temperatures[2] = 0; /* unused */ - if (sound_card_current == SOUND_INTERNAL) { + if (sound_card_current[0] == SOUND_INTERNAL) { device_add(&es1371_onboard_device); device_add(&cs4297_device); /* assumed */ } @@ -670,7 +670,7 @@ machine_at_ms6168_common_init(const machine_t *model) device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x3, 256); - if (sound_card_current == SOUND_INTERNAL) { + if (sound_card_current[0] == SOUND_INTERNAL) { device_add(&es1371_onboard_device); device_add(&cs4297_device); } diff --git a/src/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index 3eb3234bf..fd17096f7 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -104,7 +104,7 @@ machine_at_s1857_init(const machine_t *model) device_add(&intel_flash_bxt_device); spd_register(SPD_TYPE_SDRAM, 0x7, 256); - if (sound_card_current == SOUND_INTERNAL) { + if (sound_card_current[0] == SOUND_INTERNAL) { device_add(&es1371_onboard_device); device_add(&cs4297_device); /* found on other Tyan boards around the same time */ } @@ -127,13 +127,13 @@ machine_at_p6bap_init(const machine_t *model) pci_init(PCI_CONFIG_TYPE_1); pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 0, 0); - pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x12, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 3, 5); + pci_register_slot(0x09, PCI_CARD_NORMAL, 1, 2, 3, 5); + pci_register_slot(0x0a, PCI_CARD_NORMAL, 2, 3, 5, 1); + pci_register_slot(0x0b, PCI_CARD_NORMAL, 3, 5, 1, 2); + pci_register_slot(0x0c, PCI_CARD_NORMAL, 5, 1, 2, 3); + pci_register_slot(0x0d, PCI_CARD_NORMAL, 5, 3, 2, 1); + pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 5); device_add(&via_apro133a_device); /* Rebranded as ET82C693A */ device_add(&via_vt82c596b_device); /* Rebranded as ET82C696B */ device_add(&w83977ef_device); @@ -413,7 +413,7 @@ machine_at_cuv4xls_init(const machine_t *model) spd_register(SPD_TYPE_SDRAM, 0xF, 1024); device_add(&as99127f_device); /* fans: Chassis, CPU, Power; temperatures: MB, JTPWR, CPU */ - if (sound_card_current == SOUND_INTERNAL) + if (sound_card_current[0] == SOUND_INTERNAL) device_add(&cmi8738_onboard_device); return ret; @@ -451,7 +451,7 @@ machine_at_6via90ap_init(const machine_t *model) hwm_values.temperatures[1] += 2; /* System offset */ hwm_values.temperatures[2] = 0; /* unused */ - if (sound_card_current == SOUND_INTERNAL) + if (sound_card_current[0] == SOUND_INTERNAL) device_add(&alc100_device); /* ALC100P identified on similar Acorp boards (694TA, 6VIA90A1) */ return ret; diff --git a/src/machine/m_at_socket5.c b/src/machine/m_at_socket5.c index fa562a62c..842554713 100644 --- a/src/machine/m_at_socket5.c +++ b/src/machine/m_at_socket5.c @@ -160,35 +160,6 @@ machine_at_apollo_init(const machine_t *model) return ret; } -int -machine_at_exp8551_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/exp8551/AMI20.BIO", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); - device_add(&i430fx_device); - device_add(&piix_device); - device_add(&w83787f_device); - device_add(&sst_flash_29ee010_device); - - return ret; -} - int machine_at_zappa_init(const machine_t *model) { @@ -246,35 +217,6 @@ machine_at_powermatev_init(const machine_t *model) return ret; } -int -machine_at_mb500n_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/mb500n/031396s.bin", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_pci_device); - device_add(&i430fx_device); - device_add(&piix_no_mirq_device); - device_add(&fdc37c665_device); - device_add(&intel_flash_bxt_device); - - return ret; -} - int machine_at_hawk_init(const machine_t *model) { @@ -402,3 +344,32 @@ machine_at_sq588_init(const machine_t *model) return ret; } + +int +machine_at_p54sps_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/p54sps/35s106.bin", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 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); + pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); + device_add(&sis_85c50x_device); + device_add(&ide_pci_2ch_device); + device_add(&keyboard_at_ami_device); + device_add(&w83787f_device); + device_add(&sst_flash_29ee010_device); + + return ret; +} diff --git a/src/machine/m_at_socket7_3v.c b/src/machine/m_at_socket7_3v.c index 7616d8a4a..03be14c37 100644 --- a/src/machine/m_at_socket7_3v.c +++ b/src/machine/m_at_socket7_3v.c @@ -120,6 +120,35 @@ machine_at_p54tp4xe_mr_init(const machine_t *model) return ret; } +int +machine_at_exp8551_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/exp8551/AMI20.BIO", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&keyboard_ps2_ami_pci_device); + device_add(&i430fx_device); + device_add(&piix_device); + device_add(&w83787f_device); + device_add(&sst_flash_29ee010_device); + + return ret; +} + int machine_at_gw2katx_init(const machine_t *model) { @@ -267,6 +296,35 @@ machine_at_pb640_init(const machine_t *model) return ret; } +int +machine_at_mb500n_init(const machine_t *model) +{ + int ret; + + ret = bios_load_linear("roms/machines/mb500n/031396s.bin", + 0x000e0000, 131072, 0); + + if (bios_only || !ret) + return ret; + + machine_at_common_init(model); + + pci_init(PCI_CONFIG_TYPE_1); + pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); + pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); + pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); + pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); + pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); + pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); + device_add(&keyboard_ps2_pci_device); + device_add(&i430fx_device); + device_add(&piix_no_mirq_device); + device_add(&fdc37c665_device); + device_add(&intel_flash_bxt_device); + + return ret; +} + int machine_at_fmb_init(const machine_t *model) { diff --git a/src/machine/m_at_sockets7.c b/src/machine/m_at_sockets7.c index 2813e7275..dab544707 100644 --- a/src/machine/m_at_sockets7.c +++ b/src/machine/m_at_sockets7.c @@ -268,7 +268,7 @@ machine_at_ficva503a_init(const machine_t *model) hwm_values.temperatures[1] += 2; /* System offset */ hwm_values.temperatures[2] = 0; /* unused */ - if (sound_card_current == SOUND_INTERNAL) + if (sound_card_current[0] == SOUND_INTERNAL) device_add(&wm9701a_device); /* on daughtercard */ return ret; diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 175f3ea27..77a87a8eb 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -7772,43 +7772,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has AMIKey H KBC firmware. */ - { - .name = "[i430FX] DataExpert EXP8551", - .internal_name = "exp8551", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_exp8551_init, - .pad = 0, - .pad0 = 0, - .pad1 = MACHINE_AVAILABLE, - .pad2 = 0, - .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_GAMEPORT, - .ram = { - .min = 8192, - .max = 131072, - .step = 8192 - }, - .nvrmask = 127, - .kbc = KBC_UNKNOWN, - .kbc_p1 = 0, - .gpio = 0, - .device = NULL, - .vid_device = NULL, - .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'. Command 0xA0 copyright string: (C)1994 AMI . */ @@ -7885,43 +7848,6 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, - /* Has a VIA VT82C42N KBC. */ - { - .name = "[i430FX] PC Partner MB500N", - .internal_name = "mb500n", - .type = MACHINE_TYPE_SOCKET5, - .chipset = MACHINE_CHIPSET_INTEL_430FX, - .init = machine_at_mb500n_init, - .pad = 0, - .pad0 = 0, - .pad1 = MACHINE_AVAILABLE, - .pad2 = 0, - .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_PCI, - .flags = MACHINE_IDE_DUAL, - .ram = { - .min = 8192, - .max = 131072, - .step = 8192 - }, - .nvrmask = 127, - .kbc = KBC_UNKNOWN, - .kbc_p1 = 0, - .gpio = 0, - .device = NULL, - .vid_device = NULL, - .snd_device = NULL, - .net_device = NULL - }, /* Has AMIKey Z(!) KBC firmware. */ { .name = "[i430FX] TriGem Hawk", @@ -8114,6 +8040,43 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* This machine has a Winbond W83C842 KBC */ + { + .name = "[SiS 501] Gemlight GMB-P54SPS", + .internal_name = "p54sps", + .type = MACHINE_TYPE_SOCKET5, + .chipset = MACHINE_CHIPSET_SIS_501, + .init = machine_at_p54sps_init, + .pad = 0, + .pad0 = 0, + .pad1 = MACHINE_AVAILABLE, + .pad2 = 0, + .cpu = { + .package = CPU_PKG_SOCKET5_7, + CPU_BLOCK(CPU_PENTIUMMMX), + .min_bus = 50000000, + .max_bus = 66666667, + .min_voltage = 3520, + .max_voltage = 3520, + .min_multi = 1.5, + .max_multi = 1.5 + }, + .bus_flags = MACHINE_PCI, + .flags = MACHINE_IDE_DUAL, + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 127, + .kbc = KBC_JETKEY_5_W83C42, + .kbc_p1 = 0, + .gpio = 0, + .device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Socket 7 (Single Voltage) machines */ /* 430FX */ @@ -8191,6 +8154,43 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has AMIKey H KBC firmware. */ + { + .name = "[i430FX] DataExpert EXP8551", + .internal_name = "exp8551", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_exp8551_init, + .pad = 0, + .pad0 = 0, + .pad1 = MACHINE_AVAILABLE, + .pad2 = 0, + .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_GAMEPORT, + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 127, + .kbc = KBC_UNKNOWN, + .kbc_p1 = 0, + .gpio = 0, + .device = NULL, + .vid_device = NULL, + .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'. Command 0xA0 copyright string: (C)1994 AMI . */ @@ -8460,6 +8460,43 @@ const machine_t machines[] = { .snd_device = NULL, .net_device = NULL }, + /* Has a VIA VT82C42N KBC. */ + { + .name = "[i430FX] PC Partner MB500N", + .internal_name = "mb500n", + .type = MACHINE_TYPE_SOCKET7_3V, + .chipset = MACHINE_CHIPSET_INTEL_430FX, + .init = machine_at_mb500n_init, + .pad = 0, + .pad0 = 0, + .pad1 = MACHINE_AVAILABLE, + .pad2 = 0, + .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_PCI, + .flags = MACHINE_IDE_DUAL, + .ram = { + .min = 8192, + .max = 131072, + .step = 8192 + }, + .nvrmask = 127, + .kbc = KBC_UNKNOWN, + .kbc_p1 = 0, + .gpio = 0, + .device = NULL, + .vid_device = NULL, + .snd_device = NULL, + .net_device = NULL + }, /* Has an AMI 'H' KBC firmware (1992). */ { .name = "[i430FX] QDI FMB", diff --git a/src/mem/sst_flash.c b/src/mem/sst_flash.c index a58aa6895..551e2da63 100644 --- a/src/mem/sst_flash.c +++ b/src/mem/sst_flash.c @@ -13,10 +13,12 @@ * Authors: Sarah Walker, * Miran Grca, * Melissa Goad, + * Jasmine Iwanek, * * Copyright 2008-2020 Sarah Walker. * Copyright 2016-2020 Miran Grca. - * Copyright 2020 Melissa Goad. + * Copyright 2020 Melissa Goad. + * Copyright 2022-2023 Jasmine Iwanek. */ #include #include @@ -67,23 +69,69 @@ static char flash_path[1024]; /* 1st cycle variant only on 39 */ #define SST 0xbf /* SST Manufacturer's ID */ + +#define SST29EE512 0x5d00 +#define SST29LE_VE512 0x3d00 #define SST29EE010 0x0700 #define SST29LE_VE010 0x0800 #define SST29EE020 0x1000 #define SST29LE_VE020 0x1200 + #define SST39SF512 0xb400 #define SST39SF010 0xb500 #define SST39SF020 0xb600 #define SST39SF040 0xb700 -#define WINBOND 0xda /* Winbond Manufacturer's ID */ -#define W29C010 0xC100 -#define W29C020 0x4500 +#define SST39LF512 0xd400 +#define SST39LF010 0xd500 +#define SST39LF020 0xd600 +#define SST39LF040 0xd700 +#define SST39LF080 0xd800 +#define SST39LF016 0xd900 -#define SIZE_512K 0x010000 -#define SIZE_1M 0x020000 -#define SIZE_2M 0x040000 -#define SIZE_4M 0x080000 +/* +// 16 wide +#define SST39WF400 0x272f +#define SST39WF400B 0x272e +#define SST39WF800 0x273f +#define SST39WF800B 0x273e +#define SST39WF1601 0xbf274b +#define SST39WF1602 0xbf274a + +#define SST39LF100 0x2788 +#define SST39LF200 0x2789 +#define SST39LF400 0x2780 +#define SST39LF800 0x2781 +#define SST39LF160 0x2782 +*/ + +#define SST49LF002 0x5700 +#define SST49LF020 0x6100 +#define SST49LF020A 0x5200 +#define SST49LF003 0x1b00 +#define SST49LF004 0x6000 +#define SST49LF004C 0x5400 +#define SST49LF040 0x5100 +#define SST49LF008 0x5a00 +#define SST49LF008C 0x5900 +#define SST49LF080 0x5b00 +#define SST49LF030 0x1c00 +#define SST49LF160 0x4c00 +#define SST49LF016 0x5c00 + +#define WINBOND 0xda /* Winbond Manufacturer's ID */ +#define W29C512 0xc800 +#define W29C010 0xc100 +#define W29C020 0x4500 +#define W29C040 0x4600 + +#define SIZE_512K 0x010000 +#define SIZE_1M 0x020000 +#define SIZE_2M 0x040000 +#define SIZE_3M 0x060000 +#define SIZE_4M 0x080000 +#define SIZE_8M 0x100000 +#define SIZE_16M 0x200000 static void sst_sector_erase(sst_t *dev, uint32_t addr) @@ -483,20 +531,6 @@ const device_t sst_flash_29ee010_device = { .config = NULL }; -const device_t winbond_flash_w29c010_device = { - .name = "Winbond W29C010 Flash BIOS", - .internal_name = "winbond_flash_w29c010", - .flags = 0, - .local = WINBOND | W29C010 | SIZE_1M, - .init = sst_init, - .close = sst_close, - .reset = NULL, - { .available = NULL }, - .speed_changed = NULL, - .force_redraw = NULL, - .config = NULL -}; - const device_t sst_flash_29ee020_device = { .name = "SST 29EE020 Flash BIOS", .internal_name = "sst_flash_29ee020", @@ -511,6 +545,34 @@ const device_t sst_flash_29ee020_device = { .config = NULL }; +const device_t winbond_flash_w29c512_device = { + .name = "Winbond W29C512 Flash BIOS", + .internal_name = "winbond_flash_w29c512", + .flags = 0, + .local = WINBOND | W29C010 | SIZE_512K, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t winbond_flash_w29c010_device = { + .name = "Winbond W29C010 Flash BIOS", + .internal_name = "winbond_flash_w29c010", + .flags = 0, + .local = WINBOND | W29C010 | SIZE_1M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t winbond_flash_w29c020_device = { .name = "Winbond W29C020 Flash BIOS", .internal_name = "winbond_flash_w29c020", @@ -525,6 +587,34 @@ const device_t winbond_flash_w29c020_device = { .config = NULL }; +const device_t winbond_flash_w29c040_device = { + .name = "Winbond W29C040 Flash BIOS", + .internal_name = "winbond_flash_w29c040", + .flags = 0, + .local = WINBOND | W29C040 | SIZE_4M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_39sf512_device = { + .name = "SST 39SF512 Flash BIOS", + .internal_name = "sst_flash_39sf512", + .flags = 0, + .local = SST | SST39SF512 | SIZE_512K, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t sst_flash_39sf010_device = { .name = "SST 39SF010 Flash BIOS", .internal_name = "sst_flash_39sf010", @@ -566,3 +656,278 @@ const device_t sst_flash_39sf040_device = { .force_redraw = NULL, .config = NULL }; + +const device_t sst_flash_39lf512_device = { + .name = "SST 39LF512 Flash BIOS", + .internal_name = "sst_flash_39lf512", + .flags = 0, + .local = SST | SST39LF512 | SIZE_512K, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_39lf010_device = { + .name = "SST 39LF010 Flash BIOS", + .internal_name = "sst_flash_39lf010", + .flags = 0, + .local = SST | SST39LF010 | SIZE_1M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_39lf020_device = { + .name = "SST 39LF020 Flash BIOS", + .internal_name = "sst_flash_39lf020", + .flags = 0, + .local = SST | SST39LF020 | SIZE_2M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_39lf040_device = { + .name = "SST 39LF040 Flash BIOS", + .internal_name = "sst_flash_39lf040", + .flags = 0, + .local = SST | SST39LF040 | SIZE_4M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_39lf080_device = { + .name = "SST 39LF080 Flash BIOS", + .internal_name = "sst_flash_39lf080", + .flags = 0, + .local = SST | SST39LF080 | SIZE_8M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_39lf016_device = { + .name = "SST 39LF016 Flash BIOS", + .internal_name = "sst_flash_39lf016", + .flags = 0, + .local = SST | SST39LF016 | SIZE_16M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +/* + * Firmware Hubs. The FWH signals are not implemented yet. Firmware Hubs do write cycles + * to read/write on the flash. SST Flashes still do traditional flashing via PP Mode. Our + * BIOS firmwares don't seem to utilize FWH R/W thus the FWH ports remain unknown for an + * implementation. We just contain the ID's so the BIOS can do ESCD & DMI writes with no + * worries. + */ + +const device_t sst_flash_49lf002_device = { + .name = "SST 49LF002 Firmware Hub", + .internal_name = "sst_flash_49lf002", + .flags = 0, + .local = SST | SST49LF002 | SIZE_2M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf020_device = { + .name = "SST 49LF020 Firmware Hub", + .internal_name = "sst_flash_49lf0020", + .flags = 0, + .local = SST | SST49LF020 | SIZE_2M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf020a_device = { + .name = "SST 49LF020A Firmware Hub", + .internal_name = "sst_flash_49lf0020a", + .flags = 0, + .local = SST | SST49LF020A | SIZE_2M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf003_device = { + .name = "SST 49LF003 Firmware Hub", + .internal_name = "sst_flash_49lf003", + .flags = 0, + .local = SST | SST49LF003 | SIZE_3M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf030_device = { + .name = "SST 49LF030 Firmware Hub", + .internal_name = "sst_flash_49lf030", + .flags = 0, + .local = SST | SST49LF030 | SIZE_3M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf004_device = { + .name = "SST 49LF004 Firmware Hub", + .internal_name = "sst_flash_49lf004", + .flags = 0, + .local = SST | SST49LF004 | SIZE_4M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf004c_device = { + .name = "SST 49LF004C Firmware Hub", + .internal_name = "sst_flash_49lf004c", + .flags = 0, + .local = SST | SST49LF004C | SIZE_4M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf040_device = { + .name = "SST 49LF040 Firmware Hub", + .internal_name = "sst_flash_49lf040", + .flags = 0, + .local = SST | SST49LF040 | SIZE_4M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf008_device = { + .name = "SST 49LF008 Firmware Hub", + .internal_name = "sst_flash_49lf008", + .flags = 0, + .local = SST | SST49LF008 | SIZE_8M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf008c_device = { + .name = "SST 49LF008C Firmware Hub", + .internal_name = "sst_flash_49lf008c", + .flags = 0, + .local = SST | SST49LF008C | SIZE_8M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf080_device = { + .name = "SST 49LF080 Firmware Hub", + .internal_name = "sst_flash_49lf080", + .flags = 0, + .local = SST | SST49LF080 | SIZE_8M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf016_device = { + .name = "SST 49LF016 Firmware Hub", + .internal_name = "sst_flash_49lf016", + .flags = 0, + .local = SST | SST49LF016 | SIZE_16M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t sst_flash_49lf160_device = { + + .name = "SST 49LF160 Firmware Hub", + .internal_name = "sst_flash_49lf160", + .flags = 0, + .local = SST | SST49LF160 | SIZE_16M, + .init = sst_init, + .close = sst_close, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; diff --git a/src/qt/languages/cs-CZ.po b/src/qt/languages/cs-CZ.po index d8fe563fe..5f85c4f81 100644 --- a/src/qt/languages/cs-CZ.po +++ b/src/qt/languages/cs-CZ.po @@ -406,8 +406,17 @@ msgstr "Joystick 3..." msgid "Joystick 4..." msgstr "Joystick 4..." -msgid "Sound card:" -msgstr "Zvuková karta:" +msgid "Sound card 1:" +msgstr "Zvuková karta 1:" + +msgid "Sound card 2:" +msgstr "Zvuková karta 2:" + +msgid "Sound card 3:" +msgstr "Zvuková karta 3:" + +msgid "Sound card 4:" +msgstr "Zvuková karta 4:" msgid "MIDI Out Device:" msgstr "MIDI výstup:" @@ -418,15 +427,6 @@ msgstr "MIDI vstup:" msgid "Standalone MPU-401" msgstr "Samostatný MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Použít zvuk FLOAT32" diff --git a/src/qt/languages/de-DE.po b/src/qt/languages/de-DE.po index 74fa56afa..efbd5f95e 100644 --- a/src/qt/languages/de-DE.po +++ b/src/qt/languages/de-DE.po @@ -406,8 +406,17 @@ msgstr "Joystick 3..." msgid "Joystick 4..." msgstr "Joystick 4..." -msgid "Sound card:" -msgstr "Soundkarte:" +msgid "Sound card 1:" +msgstr "Soundkarte 1:" + +msgid "Sound card 2:" +msgstr "Soundkarte 2:" + +msgid "Sound card 3:" +msgstr "Soundkarte 3:" + +msgid "Sound card 4:" +msgstr "Soundkarte 4:" msgid "MIDI Out Device:" msgstr "MIDI Out-Gerät:" @@ -418,15 +427,6 @@ msgstr "MIDI In-Gerät:" msgid "Standalone MPU-401" msgstr "Standalone-MPU-401-Gerät" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "FLOAT32-Wiedergabe benutzen" diff --git a/src/qt/languages/en-GB.po b/src/qt/languages/en-GB.po index 5575d9481..7613cf4b3 100644 --- a/src/qt/languages/en-GB.po +++ b/src/qt/languages/en-GB.po @@ -406,8 +406,17 @@ msgstr "Joystick 3..." msgid "Joystick 4..." msgstr "Joystick 4..." -msgid "Sound card:" -msgstr "Sound card:" +msgid "Sound card 1:" +msgstr "Sound card 1:" + +msgid "Sound card 2:" +msgstr "Sound card 2:" + +msgid "Sound card 3:" +msgstr "Sound card 3:" + +msgid "Sound card 4:" +msgstr "Sound card 4:" msgid "MIDI Out Device:" msgstr "MIDI Out Device:" @@ -418,15 +427,6 @@ msgstr "MIDI In Device:" msgid "Standalone MPU-401" msgstr "Standalone MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Use FLOAT32 sound" diff --git a/src/qt/languages/en-US.po b/src/qt/languages/en-US.po index e6652c057..bf822aceb 100644 --- a/src/qt/languages/en-US.po +++ b/src/qt/languages/en-US.po @@ -406,8 +406,17 @@ msgstr "Joystick 3..." msgid "Joystick 4..." msgstr "Joystick 4..." -msgid "Sound card:" -msgstr "Sound card:" +msgid "Sound card 1:" +msgstr "Sound card 1:" + +msgid "Sound card 2:" +msgstr "Sound card 2:" + +msgid "Sound card 3:" +msgstr "Sound card 3:" + +msgid "Sound card 4:" +msgstr "Sound card 4:" msgid "MIDI Out Device:" msgstr "MIDI Out Device:" @@ -418,15 +427,6 @@ msgstr "MIDI In Device:" msgid "Standalone MPU-401" msgstr "Standalone MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Use FLOAT32 sound" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index 0a7014589..0c2bd6aa9 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -406,8 +406,17 @@ msgstr "Mando 3..." msgid "Joystick 4..." msgstr "Mando 4..." -msgid "Sound card:" -msgstr "Tarjeta de sonido:" +msgid "Sound card 1:" +msgstr "Tarjeta de sonido 1:" + +msgid "Sound card 2:" +msgstr "Tarjeta de sonido 2:" + +msgid "Sound card 3:" +msgstr "Tarjeta de sonido 3:" + +msgid "Sound card 4:" +msgstr "Tarjeta de sonido 4:" msgid "MIDI Out Device:" msgstr "Dispositivo MIDI de salida:" @@ -418,15 +427,6 @@ msgstr "Dispositivo MIDI de entrada:" msgid "Standalone MPU-401" msgstr "MPU-401 independiente" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Usar sonido FLOAT32" diff --git a/src/qt/languages/fi-FI.po b/src/qt/languages/fi-FI.po index a5284844d..6224472fa 100644 --- a/src/qt/languages/fi-FI.po +++ b/src/qt/languages/fi-FI.po @@ -406,8 +406,17 @@ msgstr "Peliohjain 3..." msgid "Joystick 4..." msgstr "Peliohjain 4..." -msgid "Sound card:" -msgstr "Äänikortti:" +msgid "Sound card 1:" +msgstr "Äänikortti 1:" + +msgid "Sound card 2:" +msgstr "Äänikortti 2:" + +msgid "Sound card 3:" +msgstr "Äänikortti 3:" + +msgid "Sound card 4:" +msgstr "Äänikortti 4:" msgid "MIDI Out Device:" msgstr "MIDI-ulostulo:" @@ -418,15 +427,6 @@ msgstr "MIDI-sisääntulo:" msgid "Standalone MPU-401" msgstr "Erillinen MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Käytä FLOAT32-ääntä" diff --git a/src/qt/languages/fr-FR.po b/src/qt/languages/fr-FR.po index 272d654c9..3ae18533d 100644 --- a/src/qt/languages/fr-FR.po +++ b/src/qt/languages/fr-FR.po @@ -406,8 +406,17 @@ msgstr "Manette 3..." msgid "Joystick 4..." msgstr "Manette 4..." -msgid "Sound card:" -msgstr "Carte son:" +msgid "Sound card 1:" +msgstr "Carte son 1:" + +msgid "Sound card 2:" +msgstr "Carte son 2:" + +msgid "Sound card 3:" +msgstr "Carte son 3:" + +msgid "Sound card 4:" +msgstr "Carte son 4:" msgid "MIDI Out Device:" msgstr "Sortie MIDI:" @@ -418,15 +427,6 @@ msgstr "Entrée MIDI:" msgid "Standalone MPU-401" msgstr "MPU-401 autonome" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Utiliser le son FLOAT32" diff --git a/src/qt/languages/hr-HR.po b/src/qt/languages/hr-HR.po index 244e78304..06c3ad8b5 100644 --- a/src/qt/languages/hr-HR.po +++ b/src/qt/languages/hr-HR.po @@ -406,8 +406,17 @@ msgstr "Palica za igru 3..." msgid "Joystick 4..." msgstr "Palica za igru 4..." -msgid "Sound card:" -msgstr "Zvučna kartica:" +msgid "Sound card 1:" +msgstr "Zvučna kartica 1:" + +msgid "Sound card 2:" +msgstr "Zvučna kartica 2:" + +msgid "Sound card 3:" +msgstr "Zvučna kartica 3:" + +msgid "Sound card 4:" +msgstr "Zvučna kartica 4:" msgid "MIDI Out Device:" msgstr "Izlazni uređaj MIDI:" @@ -418,15 +427,6 @@ msgstr "Ulazni uređaj MIDI:" msgid "Standalone MPU-401" msgstr "Samostalni MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Koristi FLOAT32 za zvuk" diff --git a/src/qt/languages/hu-HU.po b/src/qt/languages/hu-HU.po index c94e019f6..6658cbb00 100644 --- a/src/qt/languages/hu-HU.po +++ b/src/qt/languages/hu-HU.po @@ -406,8 +406,17 @@ msgstr "Játékvez. 3..." msgid "Joystick 4..." msgstr "Játékvez. 4..." -msgid "Sound card:" -msgstr "Hangkártya:" +msgid "Sound card 1:" +msgstr "Hangkártya 1:" + +msgid "Sound card 2:" +msgstr "Hangkártya 2:" + +msgid "Sound card 3:" +msgstr "Hangkártya 3:" + +msgid "Sound card 4:" +msgstr "Hangkártya 4:" msgid "MIDI Out Device:" msgstr "MIDI-kimenet:" @@ -418,15 +427,6 @@ msgstr "MIDI-bemenet:" msgid "Standalone MPU-401" msgstr "Különálló MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "FLOAT32 használata" diff --git a/src/qt/languages/it-IT.po b/src/qt/languages/it-IT.po index c1814eaeb..c02e3510f 100644 --- a/src/qt/languages/it-IT.po +++ b/src/qt/languages/it-IT.po @@ -406,8 +406,17 @@ msgstr "Joystick 3..." msgid "Joystick 4..." msgstr "Joystick 4..." -msgid "Sound card:" -msgstr "Scheda audio:" +msgid "Sound card 1:" +msgstr "Scheda audio 1:" + +msgid "Sound card 2:" +msgstr "Scheda audio 2:" + +msgid "Sound card 3:" +msgstr "Scheda audio 3:" + +msgid "Sound card 4:" +msgstr "Scheda audio 4:" msgid "MIDI Out Device:" msgstr "Uscita MIDI:" @@ -418,15 +427,6 @@ msgstr "Entrata MIDI:" msgid "Standalone MPU-401" msgstr "MPU-401 autonomo" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Usa suono FLOAT32" diff --git a/src/qt/languages/ja-JP.po b/src/qt/languages/ja-JP.po index 71b5d921f..420d34a2e 100644 --- a/src/qt/languages/ja-JP.po +++ b/src/qt/languages/ja-JP.po @@ -406,8 +406,17 @@ msgstr "ジョイスティック3..." msgid "Joystick 4..." msgstr "ジョイスティック4..." -msgid "Sound card:" -msgstr "サウンドカード:" +msgid "Sound card 1:" +msgstr "サウンドカード 1:" + +msgid "Sound card 2:" +msgstr "サウンドカード 2:" + +msgid "Sound card 3:" +msgstr "サウンドカード 3:" + +msgid "Sound card 4:" +msgstr "サウンドカード 4:" msgid "MIDI Out Device:" msgstr "MIDI出力デバイス:" @@ -418,15 +427,6 @@ msgstr "MIDI入力デバイス:" msgid "Standalone MPU-401" msgstr "独立型MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "FLOAT32サウンドを使用する" diff --git a/src/qt/languages/ko-KR.po b/src/qt/languages/ko-KR.po index 1ebabcfe4..6d189d8e3 100644 --- a/src/qt/languages/ko-KR.po +++ b/src/qt/languages/ko-KR.po @@ -406,8 +406,17 @@ msgstr "조이스틱 3..." msgid "Joystick 4..." msgstr "조이스틱 4..." -msgid "Sound card:" -msgstr "사운드 카드:" +msgid "Sound card 1:" +msgstr "사운드 카드 1:" + +msgid "Sound card 2:" +msgstr "사운드 카드 2:" + +msgid "Sound card 3:" +msgstr "사운드 카드 3:" + +msgid "Sound card 4:" +msgstr "사운드 카드 4:" msgid "MIDI Out Device:" msgstr "MIDI 출력 장치:" @@ -418,15 +427,6 @@ msgstr "MIDI 입력 장치:" msgid "Standalone MPU-401" msgstr "MPU-401 단독 사용" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "FLOAT32 사운드 사용" diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index c0884601c..26c652c87 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -406,8 +406,17 @@ msgstr "Joystick 3..." msgid "Joystick 4..." msgstr "Joystick 4..." -msgid "Sound card:" -msgstr "Karta dźwiękowa:" +msgid "Sound card 1:" +msgstr "Karta dźwiękowa 1:" + +msgid "Sound card 2:" +msgstr "Karta dźwiękowa 2:" + +msgid "Sound card 3:" +msgstr "Karta dźwiękowa 3:" + +msgid "Sound card 4:" +msgstr "Karta dźwiękowa 4:" msgid "MIDI Out Device:" msgstr "Urządzenie wyjściowe MIDI:" @@ -418,15 +427,6 @@ msgstr "Urządzenie wejściowe MIDI:" msgid "Standalone MPU-401" msgstr "Samodzielne urządzenie MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Użyj dźwięku FLOAT32" diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index d9ddcec83..0202b42a7 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -406,8 +406,17 @@ msgstr "Joystick 3..." msgid "Joystick 4..." msgstr "Joystick 4..." -msgid "Sound card:" -msgstr "Placa de som:" +msgid "Sound card 1:" +msgstr "Placa de som 1:" + +msgid "Sound card 2:" +msgstr "Placa de som 2:" + +msgid "Sound card 3:" +msgstr "Placa de som 3:" + +msgid "Sound card 4:" +msgstr "Placa de som 4:" msgid "MIDI Out Device:" msgstr "Disp. de saída MIDI:" @@ -418,15 +427,6 @@ msgstr "Disp. de entrada MIDI:" msgid "Standalone MPU-401" msgstr "MPU-401 autônomo" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Usar som FLOAT32" diff --git a/src/qt/languages/pt-PT.po b/src/qt/languages/pt-PT.po index 33501ecc7..a8ce8bbca 100644 --- a/src/qt/languages/pt-PT.po +++ b/src/qt/languages/pt-PT.po @@ -406,8 +406,17 @@ msgstr "Joystick 3..." msgid "Joystick 4..." msgstr "Joystick 4..." -msgid "Sound card:" -msgstr "Placa de som:" +msgid "Sound card 1:" +msgstr "Placa de som 1:" + +msgid "Sound card 2:" +msgstr "Placa de som 2:" + +msgid "Sound card 3:" +msgstr "Placa de som 3:" + +msgid "Sound card 4:" +msgstr "Placa de som 4:" msgid "MIDI Out Device:" msgstr "Disp. saída MIDI:" @@ -418,15 +427,6 @@ msgstr "Disp. entrada MIDI:" msgid "Standalone MPU-401" msgstr "MPU-401 autónomo" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Utilizar som FLOAT32" diff --git a/src/qt/languages/ru-RU.po b/src/qt/languages/ru-RU.po index 6cc388b58..a424c5f6f 100644 --- a/src/qt/languages/ru-RU.po +++ b/src/qt/languages/ru-RU.po @@ -406,8 +406,17 @@ msgstr "Джойстик 3..." msgid "Joystick 4..." msgstr "Джойстик 4..." -msgid "Sound card:" -msgstr "Звуковая карта:" +msgid "Sound card 1:" +msgstr "Звуковая карта 1:" + +msgid "Sound card 2:" +msgstr "Звуковая карта 2:" + +msgid "Sound card 3:" +msgstr "Звуковая карта 3:" + +msgid "Sound card 4:" +msgstr "Звуковая карта 4:" msgid "MIDI Out Device:" msgstr "MIDI Out устр-во:" @@ -418,15 +427,6 @@ msgstr "MIDI In устр-во:" msgid "Standalone MPU-401" msgstr "Отдельный MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "FLOAT32 звук" diff --git a/src/qt/languages/sl-SI.po b/src/qt/languages/sl-SI.po index 08060a790..ba11014d2 100644 --- a/src/qt/languages/sl-SI.po +++ b/src/qt/languages/sl-SI.po @@ -406,8 +406,17 @@ msgstr "Igralna palica 3..." msgid "Joystick 4..." msgstr "Igralna palica 4..." -msgid "Sound card:" -msgstr "Zvočna kartica:" +msgid "Sound card 1:" +msgstr "Zvočna kartica 1:" + +msgid "Sound card 2:" +msgstr "Zvočna kartica 2:" + +msgid "Sound card 3:" +msgstr "Zvočna kartica 3:" + +msgid "Sound card 4:" +msgstr "Zvočna kartica 4:" msgid "MIDI Out Device:" msgstr "Izhodna naprava MIDI:" @@ -418,15 +427,6 @@ msgstr "Vhodna naprava MIDI:" msgid "Standalone MPU-401" msgstr "Samostojen MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "Uporabi FLOAT32 za zvok" diff --git a/src/qt/languages/tr-TR.po b/src/qt/languages/tr-TR.po index 5c9ddbd4f..f9608e9d0 100644 --- a/src/qt/languages/tr-TR.po +++ b/src/qt/languages/tr-TR.po @@ -406,8 +406,17 @@ msgstr "Oyun kolu 3..." msgid "Joystick 4..." msgstr "Oyun kolu 4..." -msgid "Sound card:" -msgstr "Ses kartı:" +msgid "Sound card 1:" +msgstr "Ses kartı 1:" + +msgid "Sound card 2:" +msgstr "Ses kartı 2:" + +msgid "Sound card 3:" +msgstr "Ses kartı 3:" + +msgid "Sound card 4:" +msgstr "Ses kartı 4:" msgid "MIDI Out Device:" msgstr "MIDI Çıkış Cihazı:" @@ -418,15 +427,6 @@ msgstr "MIDI Giriş Cihazı:" msgid "Standalone MPU-401" msgstr "Bağımsız MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "FLOAT32 ses kullan" diff --git a/src/qt/languages/uk-UA.po b/src/qt/languages/uk-UA.po index c2a839542..0ebe3e5cc 100644 --- a/src/qt/languages/uk-UA.po +++ b/src/qt/languages/uk-UA.po @@ -406,8 +406,17 @@ msgstr "Джойстик 3..." msgid "Joystick 4..." msgstr "Джойстик 4..." -msgid "Sound card:" -msgstr "Звукова карта:" +msgid "Sound card 1:" +msgstr "Звукова карта 1:" + +msgid "Sound card 2:" +msgstr "Звукова карта 2:" + +msgid "Sound card 3:" +msgstr "Звукова карта 3:" + +msgid "Sound card 4:" +msgstr "Звукова карта 4:" msgid "MIDI Out Device:" msgstr "MIDI Out при-ій:" @@ -418,15 +427,6 @@ msgstr "MIDI In при-ій:" msgid "Standalone MPU-401" msgstr "Окремий MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "FLOAT32 звук" diff --git a/src/qt/languages/zh-CN.po b/src/qt/languages/zh-CN.po index 5c995ae8e..65977da27 100644 --- a/src/qt/languages/zh-CN.po +++ b/src/qt/languages/zh-CN.po @@ -406,8 +406,17 @@ msgstr "操纵杆 3..." msgid "Joystick 4..." msgstr "操纵杆 4..." -msgid "Sound card:" -msgstr "声卡:" +msgid "Sound card 1:" +msgstr "声卡 1:" + +msgid "Sound card 2:" +msgstr "声卡 2:" + +msgid "Sound card 3:" +msgstr "声卡 3:" + +msgid "Sound card 4:" +msgstr "声卡 4:" msgid "MIDI Out Device:" msgstr "MIDI 输出设备:" @@ -418,15 +427,6 @@ msgstr "MIDI 输入设备:" msgid "Standalone MPU-401" msgstr "独立 MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "使用单精度浮点 (FLOAT32)" diff --git a/src/qt/languages/zh-TW.po b/src/qt/languages/zh-TW.po index 587db5e0c..b61613b89 100644 --- a/src/qt/languages/zh-TW.po +++ b/src/qt/languages/zh-TW.po @@ -406,8 +406,17 @@ msgstr "搖桿 3..." msgid "Joystick 4..." msgstr "搖桿 4..." -msgid "Sound card:" -msgstr "音訊卡:" +msgid "Sound card 1:" +msgstr "音訊卡 1:" + +msgid "Sound card 2:" +msgstr "音訊卡 2:" + +msgid "Sound card 3:" +msgstr "音訊卡 3:" + +msgid "Sound card 4:" +msgstr "音訊卡 4:" msgid "MIDI Out Device:" msgstr "MIDI 輸出裝置:" @@ -418,15 +427,6 @@ msgstr "MIDI 輸入裝置:" msgid "Standalone MPU-401" msgstr "獨立 MPU-401" -msgid "Innovation SSI-2001" -msgstr "Innovation SSI-2001" - -msgid "CMS / Game Blaster" -msgstr "CMS / Game Blaster" - -msgid "Gravis Ultrasound" -msgstr "Gravis Ultrasound" - msgid "Use FLOAT32 sound" msgstr "使用單精度浮點 (FLOAT32)" diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index e2d4c6c90..5bd2d40d3 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -52,7 +52,9 @@ extern "C" { #include <86box/plat.h> #include <86box/ui.h> #include <86box/video.h> -#include <86box/discord.h> +#ifdef DISCORD +# include <86box/discord.h> +#endif #include <86box/gdbstub.h> } @@ -196,7 +198,9 @@ main(int argc, char *argv[]) return 0; } +#ifdef DISCORD discord_load(); +#endif main_window = new MainWindow(); if (startMaximized) { @@ -271,12 +275,14 @@ main(int argc, char *argv[]) /* Set the PAUSE mode depending on the renderer. */ // plat_pause(0); QTimer onesec; - QTimer discordupdate; QObject::connect(&onesec, &QTimer::timeout, &app, [] { pc_onesec(); }); onesec.setTimerType(Qt::PreciseTimer); onesec.start(1000); + +#ifdef DISCORD + QTimer discordupdate; if (discord_loaded) { QTimer::singleShot(1000, &app, [] { if (enable_discord) { @@ -290,6 +296,7 @@ main(int argc, char *argv[]) }); discordupdate.start(1000); } +#endif /* Initialize the rendering window, or fullscreen. */ QTimer::singleShot(0, &app, [] { diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 86d8afff7..0af5626f3 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -39,7 +39,9 @@ extern "C" { #include <86box/keyboard.h> #include <86box/plat.h> #include <86box/ui.h> -#include <86box/discord.h> +#ifdef DISCORD +# include <86box/discord.h> +#endif #include <86box/device.h> #include <86box/video.h> #include <86box/machine.h> @@ -305,6 +307,10 @@ MainWindow::MainWindow(QWidget *parent) ui->actionEnable_Discord_integration->setChecked(enable_discord); ui->actionApply_fullscreen_stretch_mode_when_maximized->setChecked(video_fullscreen_scale_maximized); +#ifndef DISCORD + ui->actionEnable_Discord_integration->setVisible(false); +#endif + #if defined Q_OS_WINDOWS || defined Q_OS_MACOS /* Make the option visible only if ANGLE is loaded. */ ui->actionHardware_Renderer_OpenGL_ES->setVisible(QOpenGLContext::openGLModuleType() == QOpenGLContext::LibGLES); @@ -2292,11 +2298,13 @@ void MainWindow::on_actionEnable_Discord_integration_triggered(bool checked) { enable_discord = checked; +#ifdef DISCORD if (enable_discord) { discord_init(); discord_update_activity(dopause); } else discord_close(); +#endif } void diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index f1d56d061..695531d5c 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -103,7 +103,9 @@ extern "C" { #include <86box/rom.h> #include <86box/config.h> #include <86box/ui.h> -#include <86box/discord.h> +#ifdef DISCORD +# include <86box/discord.h> +#endif #include "../cpu/cpu.h" #include <86box/plat.h> @@ -377,7 +379,11 @@ plat_pause(int p) } else { ui_window_title(oldtitle); } + +#ifdef DISCORD discord_update_activity(dopause); +#endif + QTimer::singleShot(0, main_window, &MainWindow::updateUiPauseState); #ifdef Q_OS_WINDOWS diff --git a/src/qt/qt_settingssound.cpp b/src/qt/qt_settingssound.cpp index e17ec5ed1..f792791c1 100644 --- a/src/qt/qt_settingssound.cpp +++ b/src/qt/qt_settingssound.cpp @@ -11,8 +11,10 @@ * * * Authors: Joakim L. Gilje + * Jasmine Iwanek * - * Copyright 2021 Joakim L. Gilje + * Copyright 2021 Joakim L. Gilje + * Copyright 2022-2023 Jasmine Iwanek */ #include "qt_settingssound.hpp" #include "ui_qt_settingssound.h" @@ -47,17 +49,17 @@ SettingsSound::~SettingsSound() void SettingsSound::save() { - sound_card_current = ui->comboBoxSoundCard->currentData().toInt(); + for (uint8_t i = 0; i < SOUND_CARD_MAX; ++i) { + auto *cbox = findChild(QString("comboBoxSoundCard%1").arg(i + 1)); + sound_card_current[i] = cbox->currentData().toInt(); + } + midi_output_device_current = ui->comboBoxMidiOut->currentData().toInt(); midi_input_device_current = ui->comboBoxMidiIn->currentData().toInt(); mpu401_standalone_enable = ui->checkBoxMPU401->isChecked() ? 1 : 0; - SSI2001 = ui->checkBoxSSI2001->isChecked() ? 1 : 0; - ; - GAMEBLASTER = ui->checkBoxCMS->isChecked() ? 1 : 0; - GUS = ui->checkBoxGUS->isChecked() ? 1 : 0; - ; + sound_is_float = ui->checkBoxFloat32->isChecked() ? 1 : 0; - ; + if (ui->radioButtonYMFM->isChecked()) fm_driver = FM_DRV_YMFM; else @@ -69,41 +71,45 @@ SettingsSound::onCurrentMachineChanged(int machineId) { this->machineId = machineId; - auto *model = ui->comboBoxSoundCard->model(); - auto removeRows = model->rowCount(); - int c = 0; - int selectedRow = 0; - while (true) { - /* Skip "internal" if machine doesn't have it. */ - if ((c == 1) && (machine_has_flags(machineId, MACHINE_SOUND) == 0)) { - c++; - continue; - } + int c = 0; + int selectedRow = 0; - auto *sound_dev = sound_card_getdevice(c); - QString name = DeviceConfig::DeviceName(sound_dev, sound_card_get_internal_name(c), 1); - if (name.isEmpty()) { - break; - } + for (uint8_t i = 0; i < SOUND_CARD_MAX; ++i) { + auto *cbox = findChild(QString("comboBoxSoundCard%1").arg(i + 1)); + auto *model = cbox->model(); + auto removeRows = model->rowCount(); + c = 0; + selectedRow = 0; - if (sound_card_available(c)) { - if (device_is_valid(sound_dev, machineId)) { + while (true) { + /* Skip "internal" if machine doesn't have it. */ + if ((c == 1) && (machine_has_flags(machineId, MACHINE_SOUND) == 0)) { + c++; + continue; + } + + auto name = DeviceConfig::DeviceName(sound_card_getdevice(c), sound_card_get_internal_name(c), 1); + if (name.isEmpty()) { + break; + } + + if (sound_card_available(c) && device_is_valid(sound_card_getdevice(c), machineId)) { int row = Models::AddEntry(model, name, c); - if (c == sound_card_current) { + if (c == sound_card_current[i]) { selectedRow = row - removeRows; } } + c++; } - c++; + model->removeRows(0, removeRows); + cbox->setEnabled(model->rowCount() > 0); + cbox->setCurrentIndex(-1); + cbox->setCurrentIndex(selectedRow); } - model->removeRows(0, removeRows); - ui->comboBoxSoundCard->setEnabled(model->rowCount() > 0); - ui->comboBoxSoundCard->setCurrentIndex(-1); - ui->comboBoxSoundCard->setCurrentIndex(selectedRow); - model = ui->comboBoxMidiOut->model(); - removeRows = model->rowCount(); + auto model = ui->comboBoxMidiOut->model(); + auto removeRows = model->rowCount(); c = 0; selectedRow = 0; while (true) { @@ -150,19 +156,8 @@ SettingsSound::onCurrentMachineChanged(int machineId) ui->comboBoxMidiIn->setCurrentIndex(selectedRow); ui->checkBoxMPU401->setChecked(mpu401_standalone_enable > 0); - ui->checkBoxSSI2001->setChecked(SSI2001 > 0); - ui->checkBoxCMS->setChecked(GAMEBLASTER > 0); - ui->checkBoxGUS->setChecked(GUS > 0); ui->checkBoxFloat32->setChecked(sound_is_float > 0); - bool hasIsa = machine_has_bus(machineId, MACHINE_BUS_ISA) > 0; - bool hasIsa16 = machine_has_bus(machineId, MACHINE_BUS_ISA16) > 0; - ui->checkBoxCMS->setEnabled(hasIsa); - ui->pushButtonConfigureCMS->setEnabled((GAMEBLASTER > 0) && hasIsa); - ui->checkBoxGUS->setEnabled(hasIsa16); - ui->pushButtonConfigureGUS->setEnabled((GUS > 0) && hasIsa16); - ui->checkBoxSSI2001->setEnabled(hasIsa); - ui->pushButtonConfigureSSI2001->setEnabled((SSI2001 > 0) && hasIsa); switch (fm_driver) { case FM_DRV_YMFM: ui->radioButtonYMFM->setChecked(true); @@ -192,18 +187,63 @@ allowMpu401(Ui::SettingsSound *ui) } void -SettingsSound::on_comboBoxSoundCard_currentIndexChanged(int index) +SettingsSound::on_comboBoxSoundCard1_currentIndexChanged(int index) { if (index < 0) { return; } - ui->pushButtonConfigureSoundCard->setEnabled(sound_card_has_config(ui->comboBoxSoundCard->currentData().toInt())); + ui->pushButtonConfigureSoundCard1->setEnabled(sound_card_has_config(ui->comboBoxSoundCard1->currentData().toInt())); } void -SettingsSound::on_pushButtonConfigureSoundCard_clicked() +SettingsSound::on_pushButtonConfigureSoundCard1_clicked() { - DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard->currentData().toInt()), 0, qobject_cast(Settings::settings)); + DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard1->currentData().toInt()), 0, qobject_cast(Settings::settings)); +} + +void +SettingsSound::on_comboBoxSoundCard2_currentIndexChanged(int index) +{ + if (index < 0) { + return; + } + ui->pushButtonConfigureSoundCard2->setEnabled(sound_card_has_config(ui->comboBoxSoundCard2->currentData().toInt())); +} + +void +SettingsSound::on_pushButtonConfigureSoundCard2_clicked() +{ + DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard2->currentData().toInt()), 0, qobject_cast(Settings::settings)); +} + +void +SettingsSound::on_comboBoxSoundCard3_currentIndexChanged(int index) +{ + if (index < 0) { + return; + } + ui->pushButtonConfigureSoundCard3->setEnabled(sound_card_has_config(ui->comboBoxSoundCard3->currentData().toInt())); +} + +void +SettingsSound::on_pushButtonConfigureSoundCard3_clicked() +{ + DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard3->currentData().toInt()), 0, qobject_cast(Settings::settings)); +} + +void +SettingsSound::on_comboBoxSoundCard4_currentIndexChanged(int index) +{ + if (index < 0) { + return; + } + ui->pushButtonConfigureSoundCard4->setEnabled(sound_card_has_config(ui->comboBoxSoundCard4->currentData().toInt())); +} + +void +SettingsSound::on_pushButtonConfigureSoundCard4_clicked() +{ + DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard4->currentData().toInt()), 0, qobject_cast(Settings::settings)); } void @@ -246,24 +286,6 @@ SettingsSound::on_checkBoxMPU401_stateChanged(int state) ui->pushButtonConfigureMPU401->setEnabled(state == Qt::Checked); } -void -SettingsSound::on_checkBoxSSI2001_stateChanged(int state) -{ - ui->pushButtonConfigureSSI2001->setEnabled(state == Qt::Checked); -} - -void -SettingsSound::on_checkBoxCMS_stateChanged(int state) -{ - ui->pushButtonConfigureCMS->setEnabled(state == Qt::Checked); -} - -void -SettingsSound::on_checkBoxGUS_stateChanged(int state) -{ - ui->pushButtonConfigureGUS->setEnabled(state == Qt::Checked); -} - void SettingsSound::on_pushButtonConfigureMPU401_clicked() { @@ -273,21 +295,3 @@ SettingsSound::on_pushButtonConfigureMPU401_clicked() DeviceConfig::ConfigureDevice(&mpu401_device, 0, qobject_cast(Settings::settings)); } } - -void -SettingsSound::on_pushButtonConfigureSSI2001_clicked() -{ - DeviceConfig::ConfigureDevice(&ssi2001_device, 0, qobject_cast(Settings::settings)); -} - -void -SettingsSound::on_pushButtonConfigureCMS_clicked() -{ - DeviceConfig::ConfigureDevice(&cms_device, 0, qobject_cast(Settings::settings)); -} - -void -SettingsSound::on_pushButtonConfigureGUS_clicked() -{ - DeviceConfig::ConfigureDevice(&gus_device, 0, qobject_cast(Settings::settings)); -} diff --git a/src/qt/qt_settingssound.hpp b/src/qt/qt_settingssound.hpp index e0bc2e4f8..92b700c92 100644 --- a/src/qt/qt_settingssound.hpp +++ b/src/qt/qt_settingssound.hpp @@ -20,20 +20,20 @@ public slots: void onCurrentMachineChanged(int machineId); private slots: - void on_pushButtonConfigureGUS_clicked(); - void on_pushButtonConfigureCMS_clicked(); - void on_pushButtonConfigureSSI2001_clicked(); void on_pushButtonConfigureMPU401_clicked(); - void on_checkBoxGUS_stateChanged(int arg1); - void on_checkBoxCMS_stateChanged(int arg1); - void on_checkBoxSSI2001_stateChanged(int arg1); void on_checkBoxMPU401_stateChanged(int arg1); void on_pushButtonConfigureMidiIn_clicked(); void on_pushButtonConfigureMidiOut_clicked(); void on_comboBoxMidiIn_currentIndexChanged(int index); void on_comboBoxMidiOut_currentIndexChanged(int index); - void on_pushButtonConfigureSoundCard_clicked(); - void on_comboBoxSoundCard_currentIndexChanged(int index); + void on_pushButtonConfigureSoundCard1_clicked(); + void on_comboBoxSoundCard1_currentIndexChanged(int index); + void on_pushButtonConfigureSoundCard2_clicked(); + void on_comboBoxSoundCard2_currentIndexChanged(int index); + void on_pushButtonConfigureSoundCard3_clicked(); + void on_comboBoxSoundCard3_currentIndexChanged(int index); + void on_pushButtonConfigureSoundCard4_clicked(); + void on_comboBoxSoundCard4_currentIndexChanged(int index); private: Ui::SettingsSound *ui; diff --git a/src/qt/qt_settingssound.ui b/src/qt/qt_settingssound.ui index 9ae91dcd2..f85a09a0d 100644 --- a/src/qt/qt_settingssound.ui +++ b/src/qt/qt_settingssound.ui @@ -26,42 +26,73 @@ 0 - + MIDI In Device: - - - - Innovation SSI-2001 - - - - - - - Gravis Ultrasound - - - - Sound card: + Sound card #1: - + Configure - + + + + Sound card #2: + + + + + + + Configure + + + + + + + Sound card #3: + + + + + + + Configure + + + + + + + + Sound card #4: + + + + + + + Configure + + + + + + @@ -71,49 +102,35 @@ - + MIDI Out Device: - + Standalone MPU-401 - + Configure - + Configure - - - - Configure - - - - - - - CMS / Game Blaster - - - - + @@ -123,35 +140,21 @@ - + Configure - + Use FLOAT32 sound - - - - Configure - - - - - - - Configure - - - - + @@ -180,7 +183,7 @@ - + Qt::Vertical @@ -194,7 +197,37 @@ - + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + + + + 0 + 0 + + + + + + 0 diff --git a/src/qt/xinput2_mouse.cpp b/src/qt/xinput2_mouse.cpp index 7e49c2694..e73f36869 100644 --- a/src/qt/xinput2_mouse.cpp +++ b/src/qt/xinput2_mouse.cpp @@ -11,11 +11,12 @@ * * * Authors: Cacodemon345 + * RichardG * - * Copyright 2022 Cacodemon345 + * Copyright 2022 Cacodemon345. + * Copyright 2023 RichardG. */ -/* Valuator parsing and duplicate event checking code from SDL2. */ #include #include #include @@ -43,20 +44,19 @@ extern "C" { #include <86box/plat.h> } -int xi2flides[2] = { 0, 0 }; - static Display *disp = nullptr; static QThread *procThread = nullptr; static XIEventMask ximask; static std::atomic exitfromthread = false; static std::atomic xi2_mouse_x = 0, xi2_mouse_y = 0, xi2_mouse_abs_x = 0, xi2_mouse_abs_y = 0; -static int xi2opcode = 0; -static double prev_rel_coords[2] = { 0., 0. }; -static Time prev_time = 0; +static int xi2opcode = 0; +static double prev_coords[2] = { 0.0 }; +static Time prev_time = 0; -// From SDL2. +/* Based on SDL2. */ static void -parse_valuators(const double *input_values, const unsigned char *mask, int mask_len, +parse_valuators(const double *input_values, + const unsigned char *mask, int mask_len, double *output_values, int output_values_len) { int i = 0, z = 0; @@ -64,11 +64,10 @@ parse_valuators(const double *input_values, const unsigned char *mask, int mask_ if (top > 16) top = 16; - memset(output_values, 0, output_values_len * sizeof(double)); + memset(output_values, 0, output_values_len * sizeof(output_values[0])); for (; i < top && z < output_values_len; i++) { if (XIMaskIsSet(mask, i)) { - const int value = (int) *input_values; - output_values[z] = value; + output_values[z] = *input_values; input_values++; } z++; @@ -77,23 +76,37 @@ parse_valuators(const double *input_values, const unsigned char *mask, int mask_ static bool exitthread = false; +static int +xinput2_get_xtest_pointer() +{ + /* The XTEST pointer events injected by VNC servers to move the cursor always report + absolute coordinates, despite XTEST declaring relative axes (related: SDL issue 1836). + This looks for the XTEST pointer so that we can assume it's absolute as a workaround. */ + int devs; + XIDeviceInfo *info = XIQueryDevice(disp, XIAllDevices, &devs), *dev; + for (int i = 0; i < devs; i++) { + dev = &info[i]; + if ((dev->use == XISlavePointer) && !strcmp(dev->name, "Virtual core XTEST pointer")) + return dev->deviceid; + } + return -1; +} + void xinput2_proc() { Window win; win = DefaultRootWindow(disp); + int xtest_pointer = xinput2_get_xtest_pointer(); + ximask.deviceid = XIAllMasterDevices; ximask.mask_len = XIMaskLen(XI_LASTEVENT); ximask.mask = (unsigned char *) calloc(ximask.mask_len, sizeof(unsigned char)); - XISetMask(ximask.mask, XI_RawKeyPress); - XISetMask(ximask.mask, XI_RawKeyRelease); - XISetMask(ximask.mask, XI_RawButtonPress); - XISetMask(ximask.mask, XI_RawButtonRelease); XISetMask(ximask.mask, XI_RawMotion); - if (XKeysymToKeycode(disp, XK_Home) == 69) - XISetMask(ximask.mask, XI_Motion); + XISetMask(ximask.mask, XI_Motion); + XISetMask(ximask.mask, XI_DeviceChanged); XISelectEvents(disp, win, &ximask, 1); @@ -103,23 +116,88 @@ xinput2_proc() XGenericEventCookie *cookie = (XGenericEventCookie *) &ev.xcookie; XNextEvent(disp, (XEvent *) &ev); - if (XGetEventData(disp, cookie) && cookie->type == GenericEvent && cookie->extension == xi2opcode) { + if (XGetEventData(disp, cookie) && (cookie->type == GenericEvent) && (cookie->extension == xi2opcode)) { + const XIRawEvent *rawev = (const XIRawEvent *) cookie->data; + double coords[2] = { 0.0 }; + switch (cookie->evtype) { + case XI_Motion: + { + const XIDeviceEvent *devev = (const XIDeviceEvent *) cookie->data; + parse_valuators(devev->valuators.values, devev->valuators.mask, devev->valuators.mask_len, coords, 2); + + /* XIDeviceEvent and XIRawEvent share the XIEvent base struct, which + doesn't contain deviceid, but that's at the same offset on both. */ + goto common_motion; + } + case XI_RawMotion: { - const XIRawEvent *rawev = (const XIRawEvent *) cookie->data; - double relative_coords[2] = { 0., 0. }; - parse_valuators(rawev->raw_values, rawev->valuators.mask, - rawev->valuators.mask_len, relative_coords, 2); + parse_valuators(rawev->raw_values, rawev->valuators.mask, rawev->valuators.mask_len, coords, 2); +common_motion: + /* Ignore duplicated events. */ + if ((rawev->time == prev_time) && (coords[0] == prev_coords[0]) && (coords[1] == prev_coords[1])) + break; - if ((rawev->time == prev_time) && (relative_coords[0] == prev_rel_coords[0]) && (relative_coords[1] == prev_rel_coords[1])) { - break; // Ignore duplicated events. + /* SDL2 queries the device on every event, so doing that should be fine. */ + int i; + XIDeviceInfo *xidevinfo = XIQueryDevice(disp, rawev->deviceid, &i); + if (xidevinfo) { + /* Process the device's axes. */ + int axis = 0; + for (i = 0; i < xidevinfo->num_classes; i++) { + const XIValuatorClassInfo *v = (const XIValuatorClassInfo *) xidevinfo->classes[i]; + if (v->type == XIValuatorClass) { + /* Is this an absolute or relative axis? */ + if ((v->mode == XIModeRelative) && (rawev->sourceid != xtest_pointer)) { + /* Set relative coordinates. */ + if (axis == 0) + xi2_mouse_x = xi2_mouse_x + coords[axis]; + else + xi2_mouse_y = xi2_mouse_y + coords[axis]; + } else { + /* Convert absolute value range to pixel granularity, then to relative coordinates. */ + int disp_screen = XDefaultScreen(disp); + double abs_div; + if (axis == 0) { + if (v->mode == XIModeRelative) { + /* XTEST axes have dummy min/max values because they're nominally relative, + but in practice, the injected absolute coordinates are already in pixels. */ + abs_div = coords[axis]; + } else { + abs_div = (v->max - v->min) / (double) XDisplayWidth(disp, disp_screen); + if (abs_div <= 0) + abs_div = 1; + abs_div = (coords[axis] - v->min) / abs_div; + } + + if (xi2_mouse_abs_x != 0) + xi2_mouse_x = xi2_mouse_x + (abs_div - xi2_mouse_abs_x); + xi2_mouse_abs_x = abs_div; + } else { + if (v->mode == XIModeRelative) { + /* Same as above. */ + abs_div = coords[axis]; + } else { + abs_div = (v->max - v->min) / (double) XDisplayHeight(disp, disp_screen); + if (abs_div <= 0) + abs_div = 1; + abs_div = (coords[axis] - v->min) / abs_div; + } + + if (xi2_mouse_abs_y != 0) + xi2_mouse_y = xi2_mouse_y + (abs_div - xi2_mouse_abs_y); + xi2_mouse_abs_y = abs_div; + } + } + prev_coords[axis] = coords[axis]; + if (++axis >= 2) /* stop after X and Y processed */ + break; + } + } } - xi2_mouse_x = xi2_mouse_x + relative_coords[0]; - xi2_mouse_y = xi2_mouse_y + relative_coords[1]; - prev_rel_coords[0] = relative_coords[0]; - prev_rel_coords[1] = relative_coords[1]; - prev_time = rawev->time; + + prev_time = rawev->time; if (!mouse_capture) break; XWindowAttributes winattrib {}; @@ -128,19 +206,16 @@ xinput2_proc() XWarpPointer(disp, XRootWindow(disp, XScreenNumberOfScreen(winattrib.screen)), XRootWindow(disp, XScreenNumberOfScreen(winattrib.screen)), 0, 0, 0, 0, globalPoint.x(), globalPoint.y()); XFlush(disp); } + + break; } - case XI_Motion: + + case XI_DeviceChanged: { - if (XKeysymToKeycode(disp, XK_Home) == 69) { - // No chance we will get raw motion events on VNC. - const XIDeviceEvent *motionev = (const XIDeviceEvent *) cookie->data; - if (xi2_mouse_abs_x != 0 || xi2_mouse_abs_y != 0) { - xi2_mouse_x = xi2_mouse_x + (motionev->event_x - xi2_mouse_abs_x); - xi2_mouse_y = xi2_mouse_y + (motionev->event_y - xi2_mouse_abs_y); - } - xi2_mouse_abs_x = motionev->event_x; - xi2_mouse_abs_y = motionev->event_y; - } + /* Re-scan for XTEST pointer, just in case. */ + xtest_pointer = xinput2_get_xtest_pointer(); + + break; } } } diff --git a/src/sio/sio_ali5123.c b/src/sio/sio_ali5123.c index 310a09ab0..ec5afdc98 100644 --- a/src/sio/sio_ali5123.c +++ b/src/sio/sio_ali5123.c @@ -66,7 +66,7 @@ static void ali5123_fdc_handler(ali5123_t *dev) { uint16_t ld_port = 0; - uint8_t global_enable = !!(dev->regs[0x22] & (1 << 0)); + uint8_t global_enable = !(dev->regs[0x22] & (1 << 0)); uint8_t local_enable = !!dev->ld_regs[0][0x30]; fdc_remove(dev->fdc); @@ -81,7 +81,7 @@ static void ali5123_lpt_handler(ali5123_t *dev) { uint16_t ld_port = 0; - uint8_t global_enable = !!(dev->regs[0x22] & (1 << 3)); + uint8_t global_enable = !(dev->regs[0x22] & (1 << 3)); uint8_t local_enable = !!dev->ld_regs[3][0x30]; uint8_t lpt_irq = dev->ld_regs[3][0x70]; @@ -100,9 +100,10 @@ ali5123_lpt_handler(ali5123_t *dev) static void ali5123_serial_handler(ali5123_t *dev, int uart) { + uint8_t uart_nos[2][3]= { { 4, 5, 0xb }, { 4, 0xb, 5 } }; uint16_t ld_port = 0; - uint8_t uart_no = (uart == 2) ? 0x0b : (4 + uart); - uint8_t global_enable = !!(dev->regs[0x22] & (1 << uart_no)); + uint8_t uart_no = uart_nos[!!(dev->regs[0x2d] & 0x20)][uart]; + uint8_t global_enable = !(dev->regs[0x22] & (1 << (4 + uart))); uint8_t local_enable = !!dev->ld_regs[uart_no][0x30]; uint8_t mask = (uart == 1) ? 0x04 : 0x05; @@ -207,8 +208,7 @@ ali5123_write(uint16_t port, uint8_t val, void *priv) { ali5123_t *dev = (ali5123_t *) priv; uint8_t index = (port & 1) ? 0 : 1; - uint8_t valxor = 0x00, keep = 0x00; - uint8_t cur_ld; + uint8_t valxor = 0x00, cur_ld = dev->regs[7]; if (index) { if (((val == 0x51) && (!dev->tries) && (!dev->locked)) || ((val == 0x23) && (dev->tries) && (!dev->locked))) { @@ -236,27 +236,23 @@ ali5123_write(uint16_t port, uint8_t val, void *priv) if (dev->locked) { if (dev->cur_reg < 48) { valxor = val ^ dev->regs[dev->cur_reg]; - if ((val == 0x1f) || (val == 0x20) || (val == 0x21)) + if ((val >= 0x1f) && (val <= 0x21)) return; dev->regs[dev->cur_reg] = val; } else { - valxor = val ^ dev->ld_regs[dev->regs[7]][dev->cur_reg]; - if (((dev->cur_reg & 0xf0) == 0x70) && (dev->regs[7] < 4)) + valxor = val ^ dev->ld_regs[cur_ld][dev->cur_reg]; + if (((dev->cur_reg & 0xf0) == 0x70) && (cur_ld < 4)) return; /* Block writes to some logical devices. */ - if (dev->regs[7] > 0x0c) + if (cur_ld > 0x0c) return; - else - switch (dev->regs[7]) { - case 0x01: - case 0x02: - case 0x06: - case 0x08: - case 0x09: - case 0x0a: - return; - } - dev->ld_regs[dev->regs[7]][dev->cur_reg] = val | keep; + else switch (cur_ld) { + case 0x01: case 0x02: + case 0x06: + case 0x08 ... 0x0a: + return; + } + dev->ld_regs[cur_ld][dev->cur_reg] = val; } } else return; @@ -281,16 +277,18 @@ ali5123_write(uint16_t port, uint8_t val, void *priv) if (valxor & 0x40) ali5123_serial_handler(dev, 2); break; + case 0x2d: + if (valxor & 0x20) { + ali5123_serial_handler(dev, 1); + ali5123_serial_handler(dev, 2); + } + break; } return; } cur_ld = dev->regs[7]; - if ((dev->regs[7] == 5) && (dev->regs[0x2d] & 0x20)) - cur_ld = 0x0b; - else if ((dev->regs[7] == 0x0b) && (dev->regs[0x2d] & 0x20)) - cur_ld = 5; switch (cur_ld) { case 0: /* FDD */ @@ -299,7 +297,7 @@ ali5123_write(uint16_t port, uint8_t val, void *priv) case 0x60: case 0x61: if ((dev->cur_reg == 0x30) && (val & 0x01)) - dev->regs[0x22] |= 0x01; + dev->regs[0x22] &= ~0x01; if (valxor) ali5123_fdc_handler(dev); break; @@ -339,7 +337,7 @@ ali5123_write(uint16_t port, uint8_t val, void *priv) case 0x61: case 0x70: if ((dev->cur_reg == 0x30) && (val & 0x01)) - dev->regs[0x22] |= 0x08; + dev->regs[0x22] &= ~0x08; if (valxor) ali5123_lpt_handler(dev); break; @@ -354,7 +352,7 @@ ali5123_write(uint16_t port, uint8_t val, void *priv) case 0x70: case 0xf0: if ((dev->cur_reg == 0x30) && (val & 0x01)) - dev->regs[0x22] |= 0x10; + dev->regs[0x22] &= ~0x10; if (valxor) ali5123_serial_handler(dev, 0); break; @@ -369,9 +367,9 @@ ali5123_write(uint16_t port, uint8_t val, void *priv) case 0x70: case 0xf0: if ((dev->cur_reg == 0x30) && (val & 0x01)) - dev->regs[0x22] |= 0x20; + dev->regs[0x22] &= ~((dev->regs[0x2d] & 0x20) ? 0x40 : 0x20); if (valxor) - ali5123_serial_handler(dev, 1); + ali5123_serial_handler(dev, (dev->regs[0x2d] & 0x20) ? 2 : 1); break; } break; @@ -384,9 +382,9 @@ ali5123_write(uint16_t port, uint8_t val, void *priv) case 0x70: case 0xf0: if ((dev->cur_reg == 0x30) && (val & 0x01)) - dev->regs[0x22] |= 0x40; + dev->regs[0x22] &= ~((dev->regs[0x2d] & 0x20) ? 0x20 : 0x40); if (valxor) - ali5123_serial_handler(dev, 2); + ali5123_serial_handler(dev, (dev->regs[0x2d] & 0x20) ? 1 : 2); break; } break; @@ -411,11 +409,6 @@ ali5123_read(uint16_t port, void *priv) ret = dev->regs[dev->cur_reg]; } else { cur_ld = dev->regs[7]; - if ((dev->regs[7] == 5) && (dev->regs[0x2d] & 0x20)) - cur_ld = 0x0b; - else if ((dev->regs[7] == 0x0b) && (dev->regs[0x2d] & 0x20)) - cur_ld = 5; - ret = dev->ld_regs[cur_ld][dev->cur_reg]; } } diff --git a/src/sound/sound.c b/src/sound/sound.c index ab75af4f0..ecbb7e1a9 100644 --- a/src/sound/sound.c +++ b/src/sound/sound.c @@ -51,7 +51,7 @@ typedef struct { void *priv; } sound_handler_t; -int sound_card_current = 0; +int sound_card_current[SOUND_CARD_MAX] = { 0, 0, 0, 0}; int sound_pos_global = 0; int sound_gain = 0; @@ -79,30 +79,31 @@ static void (*filter_cd_audio)(int channel, double *buffer, void *p) = NULL; static void *filter_cd_audio_p = NULL; static const device_t sound_none_device = { - "None", - "none", - 0, - 0, - NULL, - NULL, - NULL, - { NULL }, - NULL, - NULL, - NULL + .name = "None", + .internal_name = "none", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL }; + static const device_t sound_internal_device = { - "Internal", - "internal", - 0, - 0, - NULL, - NULL, - NULL, - { NULL }, - NULL, - NULL, - NULL + .name = "Internal", + .internal_name = "internal", + .flags = 0, + .local = 0, + .init = NULL, + .close = NULL, + .reset = NULL, + { .available = NULL }, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL }; static const SOUND_CARD sound_cards[] = { @@ -115,8 +116,10 @@ static const SOUND_CARD sound_cards[] = { { &adgold_device }, { &azt2316a_device }, { &azt1605_device }, + { &cms_device }, { &cs4235_device }, { &cs4236b_device }, + { &gus_device }, { &sb_1_device }, { &sb_15_device }, { &sb_2_device }, @@ -130,6 +133,7 @@ static const SOUND_CARD sound_cards[] = { { &sb_awe64_value_device }, { &sb_awe64_device }, { &sb_awe64_gold_device }, + { &ssi2001_device }, #if defined(DEV_BRANCH) && defined(USE_PAS16) { &pas16_device }, #endif @@ -214,8 +218,14 @@ sound_card_get_from_internal_name(char *s) void sound_card_init(void) { - if (sound_cards[sound_card_current].device) - device_add(sound_cards[sound_card_current].device); + if (sound_cards[sound_card_current[0]].device) + device_add(sound_cards[sound_card_current[0]].device); + if (sound_cards[sound_card_current[1]].device) + device_add(sound_cards[sound_card_current[1]].device); + if (sound_cards[sound_card_current[2]].device) + device_add(sound_cards[sound_card_current[2]].device); + if (sound_cards[sound_card_current[3]].device) + device_add(sound_cards[sound_card_current[3]].device); } void @@ -511,15 +521,6 @@ sound_card_reset(void) if (mpu401_standalone_enable) mpu401_device_add(); - - if (GUS) - device_add(&gus_device); - - if (GAMEBLASTER) - device_add(&cms_device); - - if (SSI2001) - device_add(&ssi2001_device); } void diff --git a/src/unix/unix.c b/src/unix/unix.c index 296da5e14..b9e842280 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -624,11 +624,11 @@ ui_msgbox_header(int flags, void *header, void *message) SDL_MessageBoxData msgdata; SDL_MessageBoxButtonData msgbtn; if (!header) - header = (flags & MBX_ANSI) ? "86Box" : L"86Box"; + header = (void *) (flags & MBX_ANSI) ? "86Box" : L"86Box"; if (header <= (void *) 7168) - header = plat_get_string(header); + header = (void *) plat_get_string((int) header); if (message <= (void *) 7168) - message = plat_get_string(message); + message = (void *) plat_get_string((int) message); msgbtn.buttonid = 1; msgbtn.text = "OK"; msgbtn.flags = 0; diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index 0daf65323..4ba9f4745 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -240,44 +240,33 @@ VPATH := $(EXPATH) . $(CODEGEN) minitrace cpu \ sound/munt/srchelper sound/munt/srchelper/srctools/src \ sound/resid-fp sound/ymfm \ scsi video network network/slirp win + +WINDRES := windres +STRIP := strip ifeq ($(X64), y) TOOL_PREFIX := x86_64-w64-mingw32- else - TOOL_PREFIX := i686-w64-mingw32- -endif -WINDRES := windres -STRIP := strip -ifeq ($(ARM64), y) - WINDRES := aarch64-w64-mingw32-windres - STRIP := aarch64-w64-mingw32-strip -endif -ifeq ($(ARM), y) - WINDRES := armv7-w64-mingw32-windres - STRIP := armv7-w64-mingw32-strip -endif -ifeq ($(CLANG), y) - CPP := clang++ - CC := clang ifeq ($(ARM64), y) - CPP := aarch64-w64-mingw32-clang++ - CC := aarch64-w64-mingw32-clang + TOOL_PREFIX := aarch64-w64-mingw32- + WINDRES := ${TOOL_PREFIX}windres + STRIP := ${TOOL_PREFIX}strip endif ifeq ($(ARM), y) - CPP := armv7-w64-mingw32-clang++ - CC := armv7-w64-mingw32-clang + TOOL_PREFIX := armv7-w64-mingw32- + WINDRES := ${TOOL_PREFIX}windres + STRIP := ${TOOL_PREFIX}strip endif + TOOL_PREFIX := i686-w64-mingw32- +endif + +ifeq ($(CLANG), y) + CPP := ${TOOL_PREFIX}clang++ + CC := ${TOOL_PREFIX}clang else CPP := ${TOOL_PREFIX}g++ CC := ${TOOL_PREFIX}gcc - ifeq ($(ARM64), y) - CPP := aarch64-w64-mingw32-g++ - CC := aarch64-w64-mingw32-gcc - endif - ifeq ($(ARM), y) - CPP := armv7-w64-mingw32-g++ - CC := armv7-w64-mingw32-gcc - endif endif + DEPS = -MMD -MF $*.d -c $< DEPFILE := win/.depends diff --git a/src/win/languages/cs-CZ.rc b/src/win/languages/cs-CZ.rc index 635d2dc89..2c50e5316 100644 --- a/src/win/languages/cs-CZ.rc +++ b/src/win/languages/cs-CZ.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Pořídit &screenshot\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Předvolby...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Povolit integraci s &Discordem", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Zesílení zvuku", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Zvuková karta:" +#define STR_SOUND1 "Zvuková karta 1:" +#define STR_SOUND2 "Zvuková karta 2:" +#define STR_SOUND3 "Zvuková karta 3:" +#define STR_SOUND4 "Zvuková karta 4:" #define STR_MIDI_OUT "MIDI výstup:" #define STR_MIDI_IN "MIDI vstup:" #define STR_MPU401 "Samostatný MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Použít zvuk FLOAT32" #define STR_FM_DRIVER "FM synth driver" #define STR_FM_DRV_NUKED "Nuked (přesnější)" #define STR_FM_DRV_YMFM "YMFM (rychlejší)" -#define STR_NET_TYPE "Druh sítě:" +#define STR_NET_TYPE "Druh sítě:" #define STR_PCAP "PCap zařízení:" #define STR_NET "Síťový adaptér:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Zařízení na COM1:" #define STR_COM2 "Zařízení na COM2:" diff --git a/src/win/languages/de-DE.rc b/src/win/languages/de-DE.rc index 308657978..0f9517038 100644 --- a/src/win/languages/de-DE.rc +++ b/src/win/languages/de-DE.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "S&creenshot aufnehmen\tStrg+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Einstellungen...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "&Discord-Integration aktivieren", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Klangverstärkung...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Soundkarte:" +#define STR_SOUND1 "Soundkarte 1:" +#define STR_SOUND2 "Soundkarte 2:" +#define STR_SOUND3 "Soundkarte 3:" +#define STR_SOUND4 "Soundkarte 4:" #define STR_MIDI_OUT "MIDI Out-Gerät:" #define STR_MIDI_IN "MIDI In-Gerät:" #define STR_MPU401 "Standalone-MPU-401-Gerät" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "FLOAT32-Wiedergabe benutzen" #define STR_FM_DRIVER "FM-Synth-Treiber" #define STR_FM_DRV_NUKED "Nuked (genauer)" #define STR_FM_DRV_YMFM "YMFM (schneller)" -#define STR_NET_TYPE "Netzwerktyp:" +#define STR_NET_TYPE "Netzwerktyp:" #define STR_PCAP "PCap-Gerät:" #define STR_NET "Netzwerkadapter:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1-Gerät:" #define STR_COM2 "COM2-Gerät:" diff --git a/src/win/languages/dialogs.rc b/src/win/languages/dialogs.rc index 0f74ef10b..5a150324c 100644 --- a/src/win/languages/dialogs.rc +++ b/src/win/languages/dialogs.rc @@ -320,58 +320,64 @@ DLG_CFG_SOUND DIALOG DISCARDABLE CFG_PANE_LEFT, CFG_PANE_TOP, CFG_PANE_WIDTH, C STYLE DS_CONTROL | WS_CHILD FONT FONT_SIZE, FONT_NAME BEGIN - LTEXT STR_SOUND, IDT_SOUND, + LTEXT STR_SOUND1, IDT_SOUND1, CFG_HMARGIN, CFG_VMARGIN, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT - COMBOBOX IDC_COMBO_SOUND, + COMBOBOX IDC_COMBO_SOUND1, CFG_COMBO_BOX_LEFT, 7, CFG_COMBO_BTN_WIDTH, CFG_COMBO_HEIGHT, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_SND, + PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_SND1, CFG_COMBO_BTN_LEFT, 6, CFG_BTN_WIDTH, CFG_BTN_HEIGHT - LTEXT STR_MIDI_OUT, IDT_MIDI_OUT, + LTEXT STR_SOUND2, IDT_SOUND2, CFG_HMARGIN, 28, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT - COMBOBOX IDC_COMBO_MIDI_OUT, + COMBOBOX IDC_COMBO_SOUND2, CFG_COMBO_BOX_LEFT, 26, CFG_COMBO_BTN_WIDTH, CFG_COMBO_HEIGHT, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_SND2, + CFG_COMBO_BTN_LEFT, 25, CFG_BTN_WIDTH, CFG_BTN_HEIGHT + + LTEXT STR_SOUND3, IDT_SOUND3, + CFG_HMARGIN, 48, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT + COMBOBOX IDC_COMBO_SOUND3, + CFG_COMBO_BOX_LEFT, 46, CFG_COMBO_BTN_WIDTH, CFG_COMBO_HEIGHT, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_SND3, + CFG_COMBO_BTN_LEFT, 45, CFG_BTN_WIDTH, CFG_BTN_HEIGHT + + LTEXT STR_SOUND4, IDT_SOUND4, + CFG_HMARGIN, 68, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT + COMBOBOX IDC_COMBO_SOUND4, + CFG_COMBO_BOX_LEFT, 66, CFG_COMBO_BTN_WIDTH, CFG_COMBO_HEIGHT, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_SND4, + CFG_COMBO_BTN_LEFT, 65, CFG_BTN_WIDTH, CFG_BTN_HEIGHT + + LTEXT STR_MIDI_OUT, IDT_MIDI_OUT, + CFG_HMARGIN, 88, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT + COMBOBOX IDC_COMBO_MIDI_OUT, + CFG_COMBO_BOX_LEFT, 86, CFG_COMBO_BTN_WIDTH, CFG_COMBO_HEIGHT, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_MIDI_OUT, - CFG_COMBO_BTN_LEFT, 25, CFG_BTN_WIDTH, CFG_BTN_HEIGHT + CFG_COMBO_BTN_LEFT, 85, CFG_BTN_WIDTH, CFG_BTN_HEIGHT LTEXT STR_MIDI_IN, IDT_MIDI_IN, - CFG_HMARGIN, 47, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT + CFG_HMARGIN, 108, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT COMBOBOX IDC_COMBO_MIDI_IN, - CFG_COMBO_BOX_LEFT, 45, CFG_COMBO_BTN_WIDTH, CFG_COMBO_HEIGHT, + CFG_COMBO_BOX_LEFT, 105, CFG_COMBO_BTN_WIDTH, CFG_COMBO_HEIGHT, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_MIDI_IN, - CFG_COMBO_BTN_LEFT, 44, CFG_BTN_WIDTH, CFG_BTN_HEIGHT + CFG_COMBO_BTN_LEFT, 105, CFG_BTN_WIDTH, CFG_BTN_HEIGHT CONTROL STR_MPU401,IDC_CHECK_MPU401, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, - CFG_HMARGIN, 66, 199, CFG_CHECKBOX_HEIGHT + CFG_HMARGIN, 126, 199, CFG_CHECKBOX_HEIGHT PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_MPU401, - CFG_COMBO_BTN_LEFT, 64, CFG_BTN_WIDTH, CFG_BTN_HEIGHT + CFG_COMBO_BTN_LEFT, 125, CFG_BTN_WIDTH, CFG_BTN_HEIGHT - CONTROL STR_SSI,IDC_CHECK_SSI, - "Button", BS_AUTOCHECKBOX | WS_TABSTOP, - CFG_HMARGIN, 84, 95, CFG_CHECKBOX_HEIGHT - PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_SSI, - CFG_COMBO_BTN_LEFT, 82, CFG_BTN_WIDTH, CFG_BTN_HEIGHT - - CONTROL STR_CMS,IDC_CHECK_CMS, - "Button", BS_AUTOCHECKBOX | WS_TABSTOP, - CFG_HMARGIN, 102, CFG_CHECKBOX_PRI_WIDTH, CFG_CHECKBOX_HEIGHT - PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_CMS, - CFG_COMBO_BTN_LEFT, 100, CFG_BTN_WIDTH, CFG_BTN_HEIGHT - - CONTROL STR_GUS,IDC_CHECK_GUS, - "Button", BS_AUTOCHECKBOX | WS_TABSTOP, - CFG_HMARGIN, 120, CFG_CHECKBOX_PRI_WIDTH, CFG_CHECKBOX_HEIGHT - PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_GUS, - CFG_COMBO_BTN_LEFT, 118, CFG_BTN_WIDTH, CFG_BTN_HEIGHT - CONTROL STR_FLOAT, IDC_CHECK_FLOAT, "Button", BS_AUTOCHECKBOX | WS_TABSTOP, - CFG_HMARGIN, 138, 104, CFG_CHECKBOX_HEIGHT + CFG_HMARGIN, 138, 194, CFG_CHECKBOX_HEIGHT GROUPBOX STR_FM_DRIVER, IDC_FM_DRIVER, CFG_HMARGIN, 154, 110, 42 @@ -391,22 +397,22 @@ FONT FONT_SIZE, FONT_NAME BEGIN LTEXT STR_NET_TYPE, IDT_NET_TYPE, CFG_HMARGIN, CFG_VMARGIN, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT - COMBOBOX IDC_COMBO_NET_TYPE, + COMBOBOX IDC_COMBO_NET1_TYPE, CFG_COMBO_BOX_LEFT, 7, CFG_COMBO_NOBTN_WIDTH, CFG_COMBO_HEIGHT, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT STR_PCAP, IDT_PCAP, CFG_HMARGIN, 28, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT - COMBOBOX IDC_COMBO_PCAP, + COMBOBOX IDC_COMBO_PCAP1, CFG_COMBO_BOX_LEFT, 26, CFG_COMBO_NOBTN_WIDTH, CFG_COMBO_HEIGHT, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT STR_NET, IDT_NET, CFG_HMARGIN, 47, CFG_PANE_LTEXT_PRI_WIDTH, CFG_PANE_LTEXT_HEIGHT - COMBOBOX IDC_COMBO_NET, + COMBOBOX IDC_COMBO_NET1, CFG_COMBO_BOX_LEFT, 45, CFG_COMBO_BTN_WIDTH, CFG_COMBO_HEIGHT, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_NET, + PUSHBUTTON STR_CONFIGURE, IDC_CONFIGURE_NET1, CFG_COMBO_BTN_LEFT, 44, CFG_BTN_WIDTH, CFG_BTN_HEIGHT END @@ -958,13 +964,13 @@ END #undef STR_JOY3 #undef STR_JOY4 -#undef STR_SOUND +#undef STR_SOUND1 +#undef STR_SOUND2 +#undef STR_SOUND3 +#undef STR_SOUND4 #undef STR_MIDI_OUT #undef STR_MIDI_IN #undef STR_MPU401 -#undef STR_SSI -#undef STR_CMS -#undef STR_GUS #undef STR_FLOAT #undef STR_FM_DRIVER #undef STR_FM_DRV_NUKED diff --git a/src/win/languages/en-GB.rc b/src/win/languages/en-GB.rc index 0cc4a8f5a..7b849bef2 100644 --- a/src/win/languages/en-GB.rc +++ b/src/win/languages/en-GB.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Take s&creenshot\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Preferences...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Enable &Discord integration", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "Sound &gain...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Sound card:" +#define STR_SOUND1 "Sound card 1:" +#define STR_SOUND2 "Sound card 2:" +#define STR_SOUND3 "Sound card 3:" +#define STR_SOUND4 "Sound card 4:" #define STR_MIDI_OUT "MIDI Out Device:" #define STR_MIDI_IN "MIDI In Device:" #define STR_MPU401 "Standalone MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Use FLOAT32 sound" #define STR_FM_DRIVER "FM synth driver" #define STR_FM_DRV_NUKED "Nuked (more accurate)" #define STR_FM_DRV_YMFM "YMFM (faster)" -#define STR_NET_TYPE "Network type:" +#define STR_NET_TYPE "Network type:" #define STR_PCAP "PCap device:" #define STR_NET "Network adapter:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1 Device:" #define STR_COM2 "COM2 Device:" diff --git a/src/win/languages/en-US.rc b/src/win/languages/en-US.rc index 12100b0bf..8f279e355 100644 --- a/src/win/languages/en-US.rc +++ b/src/win/languages/en-US.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Take s&creenshot\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Preferences...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Enable &Discord integration", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "Sound &gain...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Sound card:" +#define STR_SOUND1 "Sound card 1:" +#define STR_SOUND2 "Sound card 2:" +#define STR_SOUND3 "Sound card 3:" +#define STR_SOUND4 "Sound card 4:" #define STR_MIDI_OUT "MIDI Out Device:" #define STR_MIDI_IN "MIDI In Device:" #define STR_MPU401 "Standalone MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Use FLOAT32 sound" #define STR_FM_DRIVER "FM synth driver" #define STR_FM_DRV_NUKED "Nuked (more accurate)" #define STR_FM_DRV_YMFM "YMFM (faster)" -#define STR_NET_TYPE "Network type:" +#define STR_NET_TYPE "Network type:" #define STR_PCAP "PCap device:" #define STR_NET "Network adapter:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1 Device:" #define STR_COM2 "COM2 Device:" diff --git a/src/win/languages/es-ES.rc b/src/win/languages/es-ES.rc index cf9c03371..3e1f746ba 100644 --- a/src/win/languages/es-ES.rc +++ b/src/win/languages/es-ES.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Tomar c&aptura\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Preferencias...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Habilitar integración con &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Ganancia de sonido...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Mando 3..." #define STR_JOY4 "Mando 4..." -#define STR_SOUND "Tarjeta de sonido:" +#define STR_SOUND1 "Tarjeta de sonido 1:" +#define STR_SOUND2 "Tarjeta de sonido 2:" +#define STR_SOUND3 "Tarjeta de sonido 3:" +#define STR_SOUND4 "Tarjeta de sonido 4:" #define STR_MIDI_OUT "Dispositivo MIDI de salida:" #define STR_MIDI_IN "Dispositivo MIDI de entrada:" #define STR_MPU401 "MPU-401 independiente" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Usar sonido FLOAT32" #define STR_FM_DRIVER "Controlador de sintet. FM" #define STR_FM_DRV_NUKED "Nuked (más preciso)" #define STR_FM_DRV_YMFM "YMFM (más rápido)" -#define STR_NET_TYPE "Tipo de red:" +#define STR_NET_TYPE "Tipo de red:" #define STR_PCAP "Dispositivo PCap:" #define STR_NET "Adaptador de red:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Dispositivo COM1:" #define STR_COM2 "Dispositivo COM2:" diff --git a/src/win/languages/fi-FI.rc b/src/win/languages/fi-FI.rc index 852778a96..1eee0df45 100644 --- a/src/win/languages/fi-FI.rc +++ b/src/win/languages/fi-FI.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Ota &kuvakaappaus\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Sovellusasetukset...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Käytä &Discord-integraatiota", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Äänitasot...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,13 +286,13 @@ END #define STR_JOY3 "Peliohjain 3..." #define STR_JOY4 "Peliohjain 4..." -#define STR_SOUND "Äänikortti:" +#define STR_SOUND1 "Äänikortti 1:" +#define STR_SOUND2 "Äänikortti 2:" +#define STR_SOUND3 "Äänikortti 3:" +#define STR_SOUND4 "Äänikortti 4:" #define STR_MIDI_OUT "MIDI-ulostulo:" #define STR_MIDI_IN "MIDI-sisääntulo:" #define STR_MPU401 "Erillinen MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Käytä FLOAT32-ääntä" #define STR_FM_DRIVER "FM-syntetisaattoriohjain" #define STR_FM_DRV_NUKED "Nuked (tarkempi)" @@ -299,6 +301,10 @@ END #define STR_NET_TYPE "Verkon tyyppi:" #define STR_PCAP "PCap-laite:" #define STR_NET "Verkkokortti:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1-laite:" #define STR_COM2 "COM2-laite:" diff --git a/src/win/languages/fr-FR.rc b/src/win/languages/fr-FR.rc index 8e005ebcd..29ccb911d 100644 --- a/src/win/languages/fr-FR.rc +++ b/src/win/languages/fr-FR.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Copie &Ecran\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Préférences...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Activer intégration &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Gain Son...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Manette 3..." #define STR_JOY4 "Manette 4..." -#define STR_SOUND "Carte son:" +#define STR_SOUND1 "Carte son 1:" +#define STR_SOUND2 "Carte son 2:" +#define STR_SOUND3 "Carte son 3:" +#define STR_SOUND4 "Carte son 4:" #define STR_MIDI_OUT "Sortie MIDI:" #define STR_MIDI_IN "Entrée MIDI:" #define STR_MPU401 "MPU-401 autonome" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Utiliser le son FLOAT32" #define STR_FM_DRIVER "Pilote de synthétiseur FM" #define STR_FM_DRV_NUKED "Nuked (plus précis)" #define STR_FM_DRV_YMFM "YMFM (plus rapide)" -#define STR_NET_TYPE "Type de réseau:" +#define STR_NET_TYPE "Type de réseau:" #define STR_PCAP "Dispositif PCap:" #define STR_NET "Adaptateur de réseau:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Dispositif COM1:" #define STR_COM2 "Dispositif COM2:" diff --git a/src/win/languages/hr-HR.rc b/src/win/languages/hr-HR.rc index b1b4a3524..317ceccef 100644 --- a/src/win/languages/hr-HR.rc +++ b/src/win/languages/hr-HR.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Napravi &snimku zaslona\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Postavke...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Omogući integraciju sa programom &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Pojačanje zvuka...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Palica za igru 3..." #define STR_JOY4 "Palica za igru 4..." -#define STR_SOUND "Zvučna kartica:" +#define STR_SOUND1 "Zvučna kartica 1:" +#define STR_SOUND2 "Zvučna kartica 2:" +#define STR_SOUND3 "Zvučna kartica 3:" +#define STR_SOUND4 "Zvučna kartica 4:" #define STR_MIDI_OUT "Izlazni uređaj MIDI:" #define STR_MIDI_IN "Ulazni uređaj MIDI:" #define STR_MPU401 "Samostalni MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Koristi FLOAT32 za zvuk" #define STR_FM_DRIVER "Drajver za FM sintisajzer" #define STR_FM_DRV_NUKED "Nuked (precizniji)" #define STR_FM_DRV_YMFM "YMFM (brži)" -#define STR_NET_TYPE "Tip mreže:" +#define STR_NET_TYPE "Tip mreže:" #define STR_PCAP "Uređaj PCap:" #define STR_NET "Mrežna kartica:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Uređaj COM1:" #define STR_COM2 "Uređaj COM2:" diff --git a/src/win/languages/hu-HU.rc b/src/win/languages/hu-HU.rc index 0692c1cdd..8a90cdfe6 100644 --- a/src/win/languages/hu-HU.rc +++ b/src/win/languages/hu-HU.rc @@ -109,7 +109,9 @@ BEGIN MENUITEM "&Képernyőkép készítése\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Beállítások...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "&Discord integráció engedélyezése", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Hangerőszabályzó...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -289,21 +291,25 @@ END #define STR_JOY3 "Játékvez. 3..." #define STR_JOY4 "Játékvez. 4..." -#define STR_SOUND "Hangkártya:" +#define STR_SOUND1 "Hangkártya 1:" +#define STR_SOUND2 "Hangkártya 2:" +#define STR_SOUND3 "Hangkártya 3:" +#define STR_SOUND4 "Hangkártya 4:" #define STR_MIDI_OUT "MIDI-kimenet:" #define STR_MIDI_IN "MIDI-bemenet:" #define STR_MPU401 "Különálló MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "FLOAT32 használata" #define STR_FM_DRIVER "FM szintetizátor meghajtó" #define STR_FM_DRV_NUKED "Nuked (pontosabb)" #define STR_FM_DRV_YMFM "YMFM (gyorsabb)" -#define STR_NET_TYPE "Hálózati típusa:" +#define STR_NET_TYPE "Hálózati típusa:" #define STR_PCAP "PCap eszköz:" #define STR_NET "Hálózati kártya:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1 eszköz:" #define STR_COM2 "COM2 eszköz:" diff --git a/src/win/languages/it-IT.rc b/src/win/languages/it-IT.rc index bf82c116f..38189f706 100644 --- a/src/win/languages/it-IT.rc +++ b/src/win/languages/it-IT.rc @@ -105,7 +105,9 @@ BEGIN MENUITEM "Cattura schermata\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Preferenze...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Abilita &integrazione Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "Guadagno &suono...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -285,21 +287,25 @@ END #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Scheda audio:" +#define STR_SOUND1 "Scheda audio 1:" +#define STR_SOUND2 "Scheda audio 2:" +#define STR_SOUND3 "Scheda audio 3:" +#define STR_SOUND4 "Scheda audio 4:" #define STR_MIDI_OUT "Uscita MIDI:" #define STR_MIDI_IN "Entrata MIDI:" #define STR_MPU401 "MPU-401 autonomo" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Usa suono FLOAT32" #define STR_FM_DRIVER "Driver sint. FM" #define STR_FM_DRV_NUKED "Nuked (più accurato)" #define STR_FM_DRV_YMFM "YMFM (più veloce)" -#define STR_NET_TYPE "Tipo di rete:" +#define STR_NET_TYPE "Tipo di rete:" #define STR_PCAP "Dispositivo PCap:" #define STR_NET "Scheda di rete:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Dispositivo COM1:" #define STR_COM2 "Dispositivo COM2:" diff --git a/src/win/languages/ja-JP.rc b/src/win/languages/ja-JP.rc index e1fc2bae9..daf28f011 100644 --- a/src/win/languages/ja-JP.rc +++ b/src/win/languages/ja-JP.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "スクリーンショットを撮る(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "環境設定(&P)...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Discordとの連携機能(&D)", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "音量を調節(&G)...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "ジョイスティック3..." #define STR_JOY4 "ジョイスティック4..." -#define STR_SOUND "サウンドカード:" +#define STR_SOUND1 "サウンドカード 1:" +#define STR_SOUND2 "サウンドカード 2:" +#define STR_SOUND3 "サウンドカード 3:" +#define STR_SOUND4 "サウンドカード 4:" #define STR_MIDI_OUT "MIDI出力デバイス:" #define STR_MIDI_IN "MIDI入力デバイス:" #define STR_MPU401 "独立型MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "FLOAT32サウンドを使用する" #define STR_FM_DRIVER "FMシンセドライバー" #define STR_FM_DRV_NUKED "Nuked (高精度化)" #define STR_FM_DRV_YMFM "YMFM (より速く)" -#define STR_NET_TYPE "ネットワークタイプ:" +#define STR_NET_TYPE "ネットワークタイプ:" #define STR_PCAP "PCapデバイス:" #define STR_NET "ネットワークアダプター:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1デバイス:" #define STR_COM2 "COM2デバイス:" diff --git a/src/win/languages/ko-KR.rc b/src/win/languages/ko-KR.rc index 9379205fe..f967286dd 100644 --- a/src/win/languages/ko-KR.rc +++ b/src/win/languages/ko-KR.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "스크린샷 찍기(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "환경설정(&P)...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "디스코드 연동 활성화하기(&D)", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "음량 증폭(&G)...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "조이스틱 3..." #define STR_JOY4 "조이스틱 4..." -#define STR_SOUND "사운드 카드:" +#define STR_SOUND1 "사운드 카드 1:" +#define STR_SOUND2 "사운드 카드 2:" +#define STR_SOUND3 "사운드 카드 3:" +#define STR_SOUND4 "사운드 카드 4:" #define STR_MIDI_OUT "MIDI 출력 장치:" #define STR_MIDI_IN "MIDI 입력 장치:" #define STR_MPU401 "MPU-401 단독 사용" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "FLOAT32 사운드 사용" #define STR_FM_DRIVER "FM 신디사이저 드라이버" #define STR_FM_DRV_NUKED "Nuked (더 정확한)" #define STR_FM_DRV_YMFM "YMFM (더 빠르게)" -#define STR_NET_TYPE "네트워크 종류:" +#define STR_NET_TYPE "네트워크 종류:" #define STR_PCAP "PCap 장치:" #define STR_NET "네트워크 어댑터:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1 장치:" #define STR_COM2 "COM2 장치:" diff --git a/src/win/languages/pl-PL.rc b/src/win/languages/pl-PL.rc index 054428e5b..412076305 100644 --- a/src/win/languages/pl-PL.rc +++ b/src/win/languages/pl-PL.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Zrób &zrzut ekranu\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Preferencje...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Włącz integrację z &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "Wzmocnienie &dźwięku...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Karta dźwiękowa:" +#define STR_SOUND1 "Karta dźwiękowa 1:" +#define STR_SOUND2 "Karta dźwiękowa 2:" +#define STR_SOUND3 "Karta dźwiękowa 3:" +#define STR_SOUND4 "Karta dźwiękowa 4:" #define STR_MIDI_OUT "Urządzenie wyjściowe MIDI:" #define STR_MIDI_IN "Urządzenie wejściowe MIDI:" #define STR_MPU401 "Samodzielne urządzenie MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Użyj dźwięku FLOAT32" #define STR_FM_DRIVER "Sterownik syntezy FM" #define STR_FM_DRV_NUKED "Nuked (dokładniejszy)" #define STR_FM_DRV_YMFM "YMFM (szybszy)" -#define STR_NET_TYPE "Rodzaj sieci:" +#define STR_NET_TYPE "Rodzaj sieci:" #define STR_PCAP "Urządzenie PCap:" #define STR_NET "Karta sieciowa:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Urządzenie COM1:" #define STR_COM2 "Urządzenie COM2:" diff --git a/src/win/languages/pt-BR.rc b/src/win/languages/pt-BR.rc index 7147854bc..46a823713 100644 --- a/src/win/languages/pt-BR.rc +++ b/src/win/languages/pt-BR.rc @@ -107,7 +107,9 @@ BEGIN MENUITEM "Capturar &tela\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Preferências...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Ativar integração com o &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Ganho de som...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -287,13 +289,13 @@ END #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Placa de som:" +#define STR_SOUND1 "Placa de som 1:" +#define STR_SOUND2 "Placa de som 2:" +#define STR_SOUND3 "Placa de som 3:" +#define STR_SOUND4 "Placa de som 4:" #define STR_MIDI_OUT "Disp. saída MIDI:" #define STR_MIDI_IN "Disp. entrada MIDI:" #define STR_MPU401 "MPU-401 autônomo" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Usar som FLOAT32" #define STR_FM_DRIVER "Controlador de sint. FM" #define STR_FM_DRV_NUKED "Nuked (mais preciso)" @@ -302,6 +304,10 @@ END #define STR_NET_TYPE "Tipo de rede:" #define STR_PCAP "Dispositivo PCap:" #define STR_NET "Adaptador de rede:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Dispositivo COM1:" #define STR_COM2 "Dispositivo COM2:" diff --git a/src/win/languages/pt-PT.rc b/src/win/languages/pt-PT.rc index 0deeebc41..188b0a930 100644 --- a/src/win/languages/pt-PT.rc +++ b/src/win/languages/pt-PT.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Gravar imagem de ecrã\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Preferências...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Ativar integração com &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Ganho de som...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Placa de som:" +#define STR_SOUND1 "Placa de som 1:" +#define STR_SOUND2 "Placa de som 2:" +#define STR_SOUND3 "Placa de som 3:" +#define STR_SOUND4 "Placa de som 4:" #define STR_MIDI_OUT "Disp. saída MIDI:" #define STR_MIDI_IN "Disp. entrada MIDI:" #define STR_MPU401 "MPU-401 autónomo" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Utilizar som FLOAT32" #define STR_FM_DRIVER "Controlador de sint. FM" #define STR_FM_DRV_NUKED "Nuked (mais exacto)" #define STR_FM_DRV_YMFM "YMFM (mais rápido)" -#define STR_NET_TYPE "Tipo de rede:" +#define STR_NET_TYPE "Tipo de rede:" #define STR_PCAP "Dispositivo PCap:" #define STR_NET "Placa de rede:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Dispositivo COM1:" #define STR_COM2 "Dispositivo COM2:" diff --git a/src/win/languages/ru-RU.rc b/src/win/languages/ru-RU.rc index 7cb75fb48..32e6ed32d 100644 --- a/src/win/languages/ru-RU.rc +++ b/src/win/languages/ru-RU.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Сделать с&криншот\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Параметры...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Включить интеграцию &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Усиление звука...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Джойстик 3..." #define STR_JOY4 "Джойстик 4..." -#define STR_SOUND "Звуковая карта:" +#define STR_SOUND1 "Звуковая карта 1:" +#define STR_SOUND2 "Звуковая карта 2:" +#define STR_SOUND3 "Звуковая карта 3:" +#define STR_SOUND4 "Звуковая карта 4:" #define STR_MIDI_OUT "MIDI Out устр-во:" #define STR_MIDI_IN "MIDI In устр-во:" #define STR_MPU401 "Отдельный MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "FLOAT32 звук" #define STR_FM_DRIVER "Драйвер FM-синтезатора" #define STR_FM_DRV_NUKED "Nuked (более точный)" #define STR_FM_DRV_YMFM "YMFM (быстрей)" -#define STR_NET_TYPE "Тип сети:" +#define STR_NET_TYPE "Тип сети:" #define STR_PCAP "Устройство PCap:" #define STR_NET "Сетевая карта:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Устройство COM1:" #define STR_COM2 "Устройство COM2:" diff --git a/src/win/languages/sl-SI.rc b/src/win/languages/sl-SI.rc index 7a56d4cc5..93f2c4d98 100644 --- a/src/win/languages/sl-SI.rc +++ b/src/win/languages/sl-SI.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "&Zajemi posnetek zaslona\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Možnosti...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Omogoči integracijo s programom &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Ojačanje zvoka...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Igralna palica 3..." #define STR_JOY4 "Igralna palica 4..." -#define STR_SOUND "Zvočna kartica:" +#define STR_SOUND1 "Zvočna kartica 1:" +#define STR_SOUND2 "Zvočna kartica 2:" +#define STR_SOUND3 "Zvočna kartica 3:" +#define STR_SOUND4 "Zvočna kartica 4:" #define STR_MIDI_OUT "Izhodna naprava MIDI:" #define STR_MIDI_IN "Vhodna naprava MIDI:" #define STR_MPU401 "Samostojen MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "Uporabi FLOAT32 za zvok" #define STR_FM_DRIVER "Gonilnik sintetizacije FM" #define STR_FM_DRV_NUKED "Nuked (točnejši)" #define STR_FM_DRV_YMFM "YMFM (hitrejši)" -#define STR_NET_TYPE "Vrsta omrežja:" +#define STR_NET_TYPE "Vrsta omrežja:" #define STR_PCAP "Naprava PCap:" #define STR_NET "Omrežna kartica:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Naprava COM1:" #define STR_COM2 "Naprava COM2:" diff --git a/src/win/languages/tr-TR.rc b/src/win/languages/tr-TR.rc index 896f6a300..2c72f2bdf 100644 --- a/src/win/languages/tr-TR.rc +++ b/src/win/languages/tr-TR.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "&Ekran görüntüsü al\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Tercihler...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "&Discord entegrasyonunu etkinleştir", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Ses yükseltici...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Oyun kolu 3..." #define STR_JOY4 "Oyun kolu 4..." -#define STR_SOUND "Ses kartı:" +#define STR_SOUND1 "Ses kartı 1:" +#define STR_SOUND2 "Ses kartı 2:" +#define STR_SOUND3 "Ses kartı 3:" +#define STR_SOUND4 "Ses kartı 4:" #define STR_MIDI_OUT "MIDI Çıkış Cihazı:" #define STR_MIDI_IN "MIDI Giriş Cihazı:" #define STR_MPU401 "Bağımsız MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "FLOAT32 ses kullan" #define STR_FM_DRIVER "FM sentez sürücüsü" #define STR_FM_DRV_NUKED "Nuked (daha doğru)" #define STR_FM_DRV_YMFM "YMFM (daha hızlı)" -#define STR_NET_TYPE "Ağ tipi:" +#define STR_NET_TYPE "Ağ tipi:" #define STR_PCAP "PCap cihazı:" #define STR_NET "Ağ cihazı:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1 Cihazı:" #define STR_COM2 "COM2 Cihazı:" diff --git a/src/win/languages/uk-UA.rc b/src/win/languages/uk-UA.rc index 332966686..0dc2a544d 100644 --- a/src/win/languages/uk-UA.rc +++ b/src/win/languages/uk-UA.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "Зробити &знімок\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Параметри...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "Увімкнути інтеграцію &Discord", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "&Посилення звуку...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "Джойстик 3..." #define STR_JOY4 "Джойстик 4..." -#define STR_SOUND "Звукова карта:" +#define STR_SOUND1 "Звукова карта 1:" +#define STR_SOUND2 "Звукова карта 2:" +#define STR_SOUND3 "Звукова карта 3:" +#define STR_SOUND4 "Звукова карта 4:" #define STR_MIDI_OUT "MIDI Out при-ій:" #define STR_MIDI_IN "MIDI In при-ій:" #define STR_MPU401 "Окремий MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "FLOAT32 звук" #define STR_FM_DRIVER "Драйвер FM-синтезатора" #define STR_FM_DRV_NUKED "Nuked (більш точний)" #define STR_FM_DRV_YMFM "YMFM (швидший)" -#define STR_NET_TYPE "Тип мережі:" +#define STR_NET_TYPE "Тип мережі:" #define STR_PCAP "Пристрій PCap:" #define STR_NET "Мережева карта:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "Пристрій COM1:" #define STR_COM2 "Пристрій COM2:" diff --git a/src/win/languages/zh-CN.rc b/src/win/languages/zh-CN.rc index 13f878cb6..945194968 100644 --- a/src/win/languages/zh-CN.rc +++ b/src/win/languages/zh-CN.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "截图(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "首选项(&P)...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "启用 Discord 集成(&D)", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "音量增益(&G)...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "操纵杆 3..." #define STR_JOY4 "操纵杆 4..." -#define STR_SOUND "声卡:" +#define STR_SOUND1 "声卡 1:" +#define STR_SOUND2 "声卡 2:" +#define STR_SOUND3 "声卡 3:" +#define STR_SOUND4 "声卡 4:" #define STR_MIDI_OUT "MIDI 输出设备:" #define STR_MIDI_IN "MIDI 输入设备:" #define STR_MPU401 "独立 MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "使用单精度浮点 (FLOAT32)" #define STR_FM_DRIVER "调频合成器驱动器" #define STR_FM_DRV_NUKED "Nuked (更准确)" #define STR_FM_DRV_YMFM "YMFM (更快)" -#define STR_NET_TYPE "网络类型:" +#define STR_NET_TYPE "网络类型:" #define STR_PCAP "PCap 设备:" #define STR_NET "网络适配器:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1 设备:" #define STR_COM2 "COM2 设备:" diff --git a/src/win/languages/zh-TW.rc b/src/win/languages/zh-TW.rc index f922c950b..6e5ed0321 100644 --- a/src/win/languages/zh-TW.rc +++ b/src/win/languages/zh-TW.rc @@ -104,7 +104,9 @@ BEGIN MENUITEM "擷圖(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "首選項(&P)...", IDM_PREFERENCES +#ifdef DISCORD MENUITEM "啟用 Discord 整合(&D)", IDM_DISCORD +#endif MENUITEM SEPARATOR MENUITEM "音量增益(&G)...", IDM_SND_GAIN #ifdef MTR_ENABLED @@ -284,21 +286,25 @@ END #define STR_JOY3 "搖桿 3..." #define STR_JOY4 "搖桿 4..." -#define STR_SOUND "音訊卡:" +#define STR_SOUND1 "音訊卡 1:" +#define STR_SOUND2 "音訊卡 2:" +#define STR_SOUND3 "音訊卡 3:" +#define STR_SOUND4 "音訊卡 4:" #define STR_MIDI_OUT "MIDI 輸出裝置:" #define STR_MIDI_IN "MIDI 輸入裝置:" #define STR_MPU401 "獨立 MPU-401" -#define STR_SSI "Innovation SSI-2001" -#define STR_CMS "CMS / Game Blaster" -#define STR_GUS "Gravis Ultrasound" #define STR_FLOAT "使用單精度浮點 (FLOAT32)" #define STR_FM_DRIVER "調頻合成器驅動器" #define STR_FM_DRV_NUKED "Nuked (更準確)" #define STR_FM_DRV_YMFM "YMFM (更快)" -#define STR_NET_TYPE "網路類型:" +#define STR_NET_TYPE "網路類型:" #define STR_PCAP "PCap 裝置:" #define STR_NET "網路配接器:" +#define STR_NET1 "Network card 1:" +#define STR_NET2 "Network card 2:" +#define STR_NET3 "Network card 3:" +#define STR_NET4 "Network card 4:" #define STR_COM1 "COM1 裝置:" #define STR_COM2 "COM2 裝置:" diff --git a/src/win/win_settings.c b/src/win/win_settings.c index 40501c77c..ea8d356b9 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -99,12 +99,14 @@ static int temp_gfxcard, temp_gfxcard_2, temp_ibm8514, temp_voodoo, temp_xga; static int temp_mouse, temp_joystick; /* Sound category */ -static int temp_sound_card, temp_midi_output_device, temp_midi_input_device, temp_mpu401, temp_SSI2001, temp_GAMEBLASTER, temp_GUS; +static int temp_sound_card[SOUND_CARD_MAX]; +static int temp_midi_output_device, temp_midi_input_device, temp_mpu401; static int temp_float, temp_fm_driver; /* Network category */ -static int temp_net_type, temp_net_card; -static char temp_pcap_dev[128]; +static int temp_net_type[NET_CARD_MAX]; +static int temp_net_card[NET_CARD_MAX]; +static char temp_pcap_dev[NET_CARD_MAX][128]; /* Ports category */ static int temp_lpt_devices[PARALLEL_MAX]; @@ -335,24 +337,24 @@ win_settings_init(void) temp_joystick = joystick_type; /* Sound category */ - temp_sound_card = sound_card_current; + for (i = 0; i < SOUND_CARD_MAX; i++) + temp_sound_card[i] = sound_card_current[i]; temp_midi_output_device = midi_output_device_current; temp_midi_input_device = midi_input_device_current; temp_mpu401 = mpu401_standalone_enable; - temp_SSI2001 = SSI2001; - temp_GAMEBLASTER = GAMEBLASTER; - temp_GUS = GUS; temp_float = sound_is_float; temp_fm_driver = fm_driver; /* Network category */ - temp_net_type = net_cards_conf[0].net_type; - memset(temp_pcap_dev, 0, sizeof(temp_pcap_dev)); -#ifdef ENABLE_SETTINGS_LOG - assert(sizeof(temp_pcap_dev) == sizeof(net_cards_conf[0].host_dev_name)); -#endif - memcpy(temp_pcap_dev, net_cards_conf[0].host_dev_name, sizeof(net_cards_conf[0].host_dev_name)); - temp_net_card = net_cards_conf[0].device_num; + for (i = 0; i < NET_CARD_MAX; i++) { + temp_net_type[i] = net_cards_conf[i].net_type; + memset(temp_pcap_dev[i], 0, sizeof(temp_pcap_dev[i])); +# ifdef ENABLE_SETTINGS_LOG + assert(sizeof(temp_pcap_dev[i]) == sizeof(net_cards_conf[i].host_dev_name)); +# endif + memcpy(temp_pcap_dev[i], net_cards_conf[i].host_dev_name, sizeof(net_cards_conf[i].host_dev_name)); + temp_net_card[i] = net_cards_conf[i].device_num; + } /* Ports category */ for (i = 0; i < PARALLEL_MAX; i++) { @@ -462,20 +464,20 @@ win_settings_changed(void) i = i || (joystick_type != temp_joystick); /* Sound category */ - i = i || (sound_card_current != temp_sound_card); + for (j = 0; j < SOUND_CARD_MAX; j++) + i = i || (sound_card_current[j] != temp_sound_card[j]); i = i || (midi_output_device_current != temp_midi_output_device); i = i || (midi_input_device_current != temp_midi_input_device); i = i || (mpu401_standalone_enable != temp_mpu401); - i = i || (SSI2001 != temp_SSI2001); - i = i || (GAMEBLASTER != temp_GAMEBLASTER); - i = i || (GUS != temp_GUS); i = i || (sound_is_float != temp_float); i = i || (fm_driver != temp_fm_driver); /* Network category */ - i = i || (net_cards_conf[i].net_type != temp_net_type); - i = i || strcmp(temp_pcap_dev, net_cards_conf[0].host_dev_name); - i = i || (net_cards_conf[0].device_num != temp_net_card); + for (j = 0; j < NET_CARD_MAX; j++) { + i = i || (net_cards_conf[j].net_type != temp_net_type[j]); + i = i || strcmp(temp_pcap_dev[j], net_cards_conf[j].host_dev_name); + i = i || (net_cards_conf[j].device_num != temp_net_card[j]); + } /* Ports category */ for (j = 0; j < PARALLEL_MAX; j++) { @@ -555,21 +557,21 @@ win_settings_save(void) joystick_type = temp_joystick; /* Sound category */ - sound_card_current = temp_sound_card; + for (i = 0; i < SOUND_CARD_MAX; i++) + sound_card_current[i] = temp_sound_card[i]; midi_output_device_current = temp_midi_output_device; midi_input_device_current = temp_midi_input_device; mpu401_standalone_enable = temp_mpu401; - SSI2001 = temp_SSI2001; - GAMEBLASTER = temp_GAMEBLASTER; - GUS = temp_GUS; sound_is_float = temp_float; fm_driver = temp_fm_driver; /* Network category */ - net_cards_conf[i].net_type = temp_net_type; - memset(net_cards_conf[0].host_dev_name, '\0', sizeof(net_cards_conf[0].host_dev_name)); - strcpy(net_cards_conf[0].host_dev_name, temp_pcap_dev); - net_cards_conf[0].device_num = temp_net_card; + for (i = 0; i < NET_CARD_MAX; i++) { + net_cards_conf[i].net_type = temp_net_type[i]; + memset(net_cards_conf[i].host_dev_name, '\0', sizeof(net_cards_conf[i].host_dev_name)); + strcpy(net_cards_conf[i].host_dev_name, temp_pcap_dev[i]); + net_cards_conf[i].device_num = temp_net_card[i]; + } /* Ports category */ for (i = 0; i < PARALLEL_MAX; i++) { @@ -1396,16 +1398,16 @@ static BOOL CALLBACK #endif win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) { - int c, d; + uint16_t c, d; LPTSTR lptsTemp; - const device_t *sound_dev; + const device_t *sound_dev[SOUND_CARD_MAX]; switch (message) { case WM_INITDIALOG: lptsTemp = (LPTSTR) malloc(512 * sizeof(WCHAR)); c = d = 0; - settings_reset_content(hdlg, IDC_COMBO_SOUND); + settings_reset_content(hdlg, IDC_COMBO_SOUND1); while (1) { /* Skip "internal" if machine doesn't have it. */ if ((c == 1) && !machine_has_flags(temp_machine, MACHINE_SOUND)) { @@ -1419,18 +1421,18 @@ win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) break; if (sound_card_available(c)) { - sound_dev = sound_card_getdevice(c); + sound_dev[0] = sound_card_getdevice(c); - if (device_is_valid(sound_dev, temp_machine)) { + if (device_is_valid(sound_dev[0], temp_machine)) { if (c == 0) - settings_add_string(hdlg, IDC_COMBO_SOUND, win_get_string(IDS_2104)); + settings_add_string(hdlg, IDC_COMBO_SOUND1, win_get_string(IDS_2104)); else if (c == 1) - settings_add_string(hdlg, IDC_COMBO_SOUND, win_get_string(IDS_2119)); + settings_add_string(hdlg, IDC_COMBO_SOUND1, win_get_string(IDS_2119)); else - settings_add_string(hdlg, IDC_COMBO_SOUND, (LPARAM) device_name); + settings_add_string(hdlg, IDC_COMBO_SOUND1, (LPARAM) device_name); settings_list_to_device[0][d] = c; - if ((c == 0) || (c == temp_sound_card)) - settings_set_cur_sel(hdlg, IDC_COMBO_SOUND, d); + if ((c == 0) || (c == temp_sound_card[0])) + settings_set_cur_sel(hdlg, IDC_COMBO_SOUND1, d); d++; } } @@ -1438,8 +1440,119 @@ win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) c++; } - settings_enable_window(hdlg, IDC_COMBO_SOUND, d); - settings_enable_window(hdlg, IDC_CONFIGURE_SND, sound_card_has_config(temp_sound_card)); + settings_enable_window(hdlg, IDC_COMBO_SOUND1, d); + settings_enable_window(hdlg, IDC_CONFIGURE_SND1, sound_card_has_config(temp_sound_card[0])); + + c = d = 0; + settings_reset_content(hdlg, IDC_COMBO_SOUND2); + while (1) { + /* Skip "internal" */ + if (c == 1) { + c++; + continue; + } + + generate_device_name(sound_card_getdevice(c), sound_card_get_internal_name(c), 1); + + if (!device_name[0]) + break; + + if (sound_card_available(c)) { + sound_dev[1] = sound_card_getdevice(c); + + if (device_is_valid(sound_dev[1], temp_machine)) { + if (c == 0) + settings_add_string(hdlg, IDC_COMBO_SOUND2, win_get_string(IDS_2104)); + else if (c == 1) + settings_add_string(hdlg, IDC_COMBO_SOUND2, win_get_string(IDS_2119)); + else + settings_add_string(hdlg, IDC_COMBO_SOUND2, (LPARAM) device_name); + settings_list_to_device[0][d] = c; + if ((c == 0) || (c == temp_sound_card[1])) + settings_set_cur_sel(hdlg, IDC_COMBO_SOUND2, d); + d++; + } + } + + c++; + } + + settings_enable_window(hdlg, IDC_COMBO_SOUND2, d); + settings_enable_window(hdlg, IDC_CONFIGURE_SND2, sound_card_has_config(temp_sound_card[1])); + + c = d = 0; + settings_reset_content(hdlg, IDC_COMBO_SOUND3); + while (1) { + /* Skip "internal" */ + if (c == 1) { + c++; + continue; + } + + generate_device_name(sound_card_getdevice(c), sound_card_get_internal_name(c), 1); + + if (!device_name[0]) + break; + + if (sound_card_available(c)) { + sound_dev[2] = sound_card_getdevice(c); + + if (device_is_valid(sound_dev[2], temp_machine)) { + if (c == 0) + settings_add_string(hdlg, IDC_COMBO_SOUND3, win_get_string(IDS_2104)); + else if (c == 1) + settings_add_string(hdlg, IDC_COMBO_SOUND3, win_get_string(IDS_2119)); + else + settings_add_string(hdlg, IDC_COMBO_SOUND3, (LPARAM) device_name); + settings_list_to_device[0][d] = c; + if ((c == 0) || (c == temp_sound_card[2])) + settings_set_cur_sel(hdlg, IDC_COMBO_SOUND3, d); + d++; + } + } + + c++; + } + + settings_enable_window(hdlg, IDC_COMBO_SOUND3, d); + settings_enable_window(hdlg, IDC_CONFIGURE_SND3, sound_card_has_config(temp_sound_card[2])); + + c = d = 0; + settings_reset_content(hdlg, IDC_COMBO_SOUND4); + while (1) { + /* Skip "internal" */ + if (c == 1) { + c++; + continue; + } + + generate_device_name(sound_card_getdevice(c), sound_card_get_internal_name(c), 1); + + if (!device_name[0]) + break; + + if (sound_card_available(c)) { + sound_dev[3] = sound_card_getdevice(c); + + if (device_is_valid(sound_dev[3], temp_machine)) { + if (c == 0) + settings_add_string(hdlg, IDC_COMBO_SOUND4, win_get_string(IDS_2104)); + else if (c == 1) + settings_add_string(hdlg, IDC_COMBO_SOUND4, win_get_string(IDS_2119)); + else + settings_add_string(hdlg, IDC_COMBO_SOUND4, (LPARAM) device_name); + settings_list_to_device[0][d] = c; + if ((c == 0) || (c == temp_sound_card[3])) + settings_set_cur_sel(hdlg, IDC_COMBO_SOUND4, d); + d++; + } + } + + c++; + } + + settings_enable_window(hdlg, IDC_COMBO_SOUND4, d); + settings_enable_window(hdlg, IDC_CONFIGURE_SND4, sound_card_has_config(temp_sound_card[3])); c = d = 0; settings_reset_content(hdlg, IDC_COMBO_MIDI_OUT); @@ -1491,15 +1604,6 @@ win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) settings_set_check(hdlg, IDC_CHECK_MPU401, temp_mpu401); settings_enable_window(hdlg, IDC_CHECK_MPU401, mpu401_standalone_allow()); settings_enable_window(hdlg, IDC_CONFIGURE_MPU401, mpu401_standalone_allow() && temp_mpu401); - settings_enable_window(hdlg, IDC_CHECK_CMS, machine_has_bus(temp_machine, MACHINE_BUS_ISA)); - settings_set_check(hdlg, IDC_CHECK_CMS, temp_GAMEBLASTER); - settings_enable_window(hdlg, IDC_CONFIGURE_CMS, machine_has_bus(temp_machine, MACHINE_BUS_ISA) && temp_GAMEBLASTER); - settings_enable_window(hdlg, IDC_CHECK_GUS, machine_has_bus(temp_machine, MACHINE_BUS_ISA16)); - settings_set_check(hdlg, IDC_CHECK_GUS, temp_GUS); - settings_enable_window(hdlg, IDC_CONFIGURE_GUS, machine_has_bus(temp_machine, MACHINE_BUS_ISA16) && temp_GUS); - settings_enable_window(hdlg, IDC_CHECK_SSI, machine_has_bus(temp_machine, MACHINE_BUS_ISA)); - settings_set_check(hdlg, IDC_CHECK_SSI, temp_SSI2001); - settings_enable_window(hdlg, IDC_CONFIGURE_SSI, machine_has_bus(temp_machine, MACHINE_BUS_ISA) && temp_SSI2001); settings_set_check(hdlg, IDC_CHECK_FLOAT, temp_float); if (temp_fm_driver == FM_DRV_YMFM) @@ -1513,17 +1617,56 @@ win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) case WM_COMMAND: switch (LOWORD(wParam)) { - case IDC_COMBO_SOUND: - temp_sound_card = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND)]; - settings_enable_window(hdlg, IDC_CONFIGURE_SND, sound_card_has_config(temp_sound_card)); + case IDC_COMBO_SOUND1: + temp_sound_card[0] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND1)]; + settings_enable_window(hdlg, IDC_CONFIGURE_SND1, sound_card_has_config(temp_sound_card[0])); settings_set_check(hdlg, IDC_CHECK_MPU401, temp_mpu401); settings_enable_window(hdlg, IDC_CHECK_MPU401, mpu401_standalone_allow()); settings_enable_window(hdlg, IDC_CONFIGURE_MPU401, mpu401_standalone_allow() && temp_mpu401); break; - case IDC_CONFIGURE_SND: - temp_sound_card = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND)]; - temp_deviceconfig |= deviceconfig_open(hdlg, (void *) sound_card_getdevice(temp_sound_card)); + case IDC_CONFIGURE_SND1: + temp_sound_card[0] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND1)]; + temp_deviceconfig |= deviceconfig_open(hdlg, (void *) sound_card_getdevice(temp_sound_card[0])); + break; + + case IDC_COMBO_SOUND2: + temp_sound_card[1] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND2)]; + settings_enable_window(hdlg, IDC_CONFIGURE_SND2, sound_card_has_config(temp_sound_card[1])); + settings_set_check(hdlg, IDC_CHECK_MPU401, temp_mpu401); + settings_enable_window(hdlg, IDC_CHECK_MPU401, mpu401_standalone_allow()); + settings_enable_window(hdlg, IDC_CONFIGURE_MPU401, mpu401_standalone_allow() && temp_mpu401); + break; + + case IDC_CONFIGURE_SND2: + temp_sound_card[1] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND2)]; + temp_deviceconfig |= deviceconfig_open(hdlg, (void *) sound_card_getdevice(temp_sound_card[1])); + break; + + case IDC_COMBO_SOUND3: + temp_sound_card[2] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND3)]; + settings_enable_window(hdlg, IDC_CONFIGURE_SND3, sound_card_has_config(temp_sound_card[2])); + settings_set_check(hdlg, IDC_CHECK_MPU401, temp_mpu401); + settings_enable_window(hdlg, IDC_CHECK_MPU401, mpu401_standalone_allow()); + settings_enable_window(hdlg, IDC_CONFIGURE_MPU401, mpu401_standalone_allow() && temp_mpu401); + break; + + case IDC_CONFIGURE_SND3: + temp_sound_card[2] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND3)]; + temp_deviceconfig |= deviceconfig_open(hdlg, (void *) sound_card_getdevice(temp_sound_card[2])); + break; + + case IDC_COMBO_SOUND4: + temp_sound_card[3] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND4)]; + settings_enable_window(hdlg, IDC_CONFIGURE_SND4, sound_card_has_config(temp_sound_card[3])); + settings_set_check(hdlg, IDC_CHECK_MPU401, temp_mpu401); + settings_enable_window(hdlg, IDC_CHECK_MPU401, mpu401_standalone_allow()); + settings_enable_window(hdlg, IDC_CONFIGURE_MPU401, mpu401_standalone_allow() && temp_mpu401); + break; + + case IDC_CONFIGURE_SND4: + temp_sound_card[3] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND4)]; + temp_deviceconfig |= deviceconfig_open(hdlg, (void *) sound_card_getdevice(temp_sound_card[3])); break; case IDC_COMBO_MIDI_OUT: @@ -1561,46 +1704,17 @@ win_settings_sound_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) case IDC_CONFIGURE_MPU401: temp_deviceconfig |= deviceconfig_open(hdlg, machine_has_bus(temp_machine, MACHINE_BUS_MCA) ? (void *) &mpu401_mca_device : (void *) &mpu401_device); break; - - case IDC_CHECK_CMS: - temp_GAMEBLASTER = settings_get_check(hdlg, IDC_CHECK_CMS); - - settings_enable_window(hdlg, IDC_CONFIGURE_CMS, temp_GAMEBLASTER); - break; - - case IDC_CONFIGURE_CMS: - temp_deviceconfig |= deviceconfig_open(hdlg, &cms_device); - break; - - case IDC_CHECK_GUS: - temp_GUS = settings_get_check(hdlg, IDC_CHECK_GUS); - settings_enable_window(hdlg, IDC_CONFIGURE_GUS, temp_GUS); - break; - - case IDC_CONFIGURE_GUS: - temp_deviceconfig |= deviceconfig_open(hdlg, (void *) &gus_device); - break; - - case IDC_CHECK_SSI: - temp_SSI2001 = settings_get_check(hdlg, IDC_CHECK_SSI); - - settings_enable_window(hdlg, IDC_CONFIGURE_SSI, temp_SSI2001); - break; - - case IDC_CONFIGURE_SSI: - temp_deviceconfig |= deviceconfig_open(hdlg, &ssi2001_device); - break; } return FALSE; case WM_SAVESETTINGS: - temp_sound_card = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND)]; + temp_sound_card[0] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND1)]; + temp_sound_card[1] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND2)]; + temp_sound_card[2] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND3)]; + temp_sound_card[3] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_SOUND4)]; temp_midi_output_device = settings_list_to_midi[settings_get_cur_sel(hdlg, IDC_COMBO_MIDI_OUT)]; temp_midi_input_device = settings_list_to_midi_in[settings_get_cur_sel(hdlg, IDC_COMBO_MIDI_IN)]; temp_mpu401 = settings_get_check(hdlg, IDC_CHECK_MPU401); - temp_GAMEBLASTER = settings_get_check(hdlg, IDC_CHECK_CMS); - temp_GUS = settings_get_check(hdlg, IDC_CHECK_GUS); - temp_SSI2001 = settings_get_check(hdlg, IDC_CHECK_SSI); temp_float = settings_get_check(hdlg, IDC_CHECK_FLOAT); if (settings_get_check(hdlg, IDC_RADIO_FM_DRV_NUKED)) temp_fm_driver = FM_DRV_NUKED; @@ -1896,10 +2010,16 @@ network_recalc_combos(HWND hdlg) { ignore_change = 1; - settings_enable_window(hdlg, IDC_COMBO_PCAP, temp_net_type == NET_TYPE_PCAP); - settings_enable_window(hdlg, IDC_COMBO_NET, - (temp_net_type == NET_TYPE_SLIRP) || ((temp_net_type == NET_TYPE_PCAP) && (network_dev_to_id(temp_pcap_dev) > 0))); - settings_enable_window(hdlg, IDC_CONFIGURE_NET, network_card_has_config(temp_net_card) && ((temp_net_type == NET_TYPE_SLIRP) || ((temp_net_type == NET_TYPE_PCAP) && (network_dev_to_id(temp_pcap_dev) > 0)))); +#if 0 + for (uint8_t i = 0; i < NET_CARD_MAX; i++) { +#endif + settings_enable_window(hdlg, IDC_COMBO_PCAP1, temp_net_type[0] == NET_TYPE_PCAP); + settings_enable_window(hdlg, IDC_COMBO_NET1, + (temp_net_type[0] == NET_TYPE_SLIRP) || ((temp_net_type[0] == NET_TYPE_PCAP) && (network_dev_to_id(temp_pcap_dev[0]) > 0))); + settings_enable_window(hdlg, IDC_CONFIGURE_NET1, network_card_has_config(temp_net_card[0]) && ((temp_net_type[0] == NET_TYPE_SLIRP) || ((temp_net_type[0] == NET_TYPE_PCAP) && (network_dev_to_id(temp_pcap_dev[0]) > 0)))); +#if 0 + } +#endif ignore_change = 0; } @@ -1918,90 +2038,120 @@ win_settings_network_proc(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) case WM_INITDIALOG: lptsTemp = (LPTSTR) malloc(512 * sizeof(WCHAR)); - settings_add_string(hdlg, IDC_COMBO_NET_TYPE, (LPARAM) L"None"); - settings_add_string(hdlg, IDC_COMBO_NET_TYPE, (LPARAM) L"SLiRP"); - settings_add_string(hdlg, IDC_COMBO_NET_TYPE, (LPARAM) L"PCap"); - settings_set_cur_sel(hdlg, IDC_COMBO_NET_TYPE, temp_net_type); - settings_enable_window(hdlg, IDC_COMBO_PCAP, temp_net_type == NET_TYPE_PCAP); +#if 0 + for (uint8_t i = 0; i < NET_CARD_MAX; i++) { +#endif + settings_add_string(hdlg, IDC_COMBO_NET1_TYPE, (LPARAM) L"None"); + settings_add_string(hdlg, IDC_COMBO_NET1_TYPE, (LPARAM) L"SLiRP"); + settings_add_string(hdlg, IDC_COMBO_NET1_TYPE, (LPARAM) L"PCap"); + settings_set_cur_sel(hdlg, IDC_COMBO_NET1_TYPE, temp_net_type[0]); + settings_enable_window(hdlg, IDC_COMBO_PCAP1, temp_net_type[0] == NET_TYPE_PCAP); - for (c = 0; c < network_ndev; c++) { - mbstowcs(lptsTemp, network_devs[c].description, strlen(network_devs[c].description) + 1); - settings_add_string(hdlg, IDC_COMBO_PCAP, (LPARAM) lptsTemp); - } - settings_set_cur_sel(hdlg, IDC_COMBO_PCAP, network_dev_to_id(temp_pcap_dev)); + for (c = 0; c < network_ndev; c++) { + mbstowcs(lptsTemp, network_devs[c].description, strlen(network_devs[c].description) + 1); + settings_add_string(hdlg, IDC_COMBO_PCAP1, (LPARAM) lptsTemp); + } + settings_set_cur_sel(hdlg, IDC_COMBO_PCAP1, network_dev_to_id(temp_pcap_dev[0])); - /* NIC config */ - c = d = 0; - settings_reset_content(hdlg, IDC_COMBO_NET); - while (1) { - generate_device_name(network_card_getdevice(c), network_card_get_internal_name(c), 1); + /* NIC config */ + c = d = 0; + settings_reset_content(hdlg, IDC_COMBO_NET1); + while (1) { + generate_device_name(network_card_getdevice(c), network_card_get_internal_name(c), 1); - if (device_name[0] == L'\0') - break; + if (device_name[0] == L'\0') + break; - if (network_card_available(c) && device_is_valid(network_card_getdevice(c), temp_machine)) { - if (c == 0) - settings_add_string(hdlg, IDC_COMBO_NET, win_get_string(IDS_2104)); - else - settings_add_string(hdlg, IDC_COMBO_NET, (LPARAM) device_name); - settings_list_to_device[0][d] = c; - if ((c == 0) || (c == temp_net_card)) - settings_set_cur_sel(hdlg, IDC_COMBO_NET, d); - d++; + if (network_card_available(c) && device_is_valid(network_card_getdevice(c), temp_machine)) { + if (c == 0) + settings_add_string(hdlg, IDC_COMBO_NET1, win_get_string(IDS_2104)); + else + settings_add_string(hdlg, IDC_COMBO_NET1, (LPARAM) device_name); + settings_list_to_device[0][d] = c; + if ((c == 0) || (c == temp_net_card[0])) + settings_set_cur_sel(hdlg, IDC_COMBO_NET1, d); + d++; + } + + c++; } - c++; + settings_enable_window(hdlg, IDC_COMBO_NET1, d); + network_recalc_combos(hdlg); + free(lptsTemp); +#if 0 } - - settings_enable_window(hdlg, IDC_COMBO_NET, d); - network_recalc_combos(hdlg); - free(lptsTemp); - +#endif return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { - case IDC_COMBO_NET_TYPE: + case IDC_COMBO_NET1_TYPE: +#if 0 + case IDC_COMBO_NET2_TYPE: + case IDC_COMBO_NET3_TYPE: + case IDC_COMBO_NET4_TYPE: +#endif if (ignore_change) return FALSE; - temp_net_type = settings_get_cur_sel(hdlg, IDC_COMBO_NET_TYPE); + temp_net_type[0] = settings_get_cur_sel(hdlg, IDC_COMBO_NET1_TYPE); network_recalc_combos(hdlg); break; - case IDC_COMBO_PCAP: + case IDC_COMBO_PCAP1: +#if 0 + case IDC_COMBO_PCAP2: + case IDC_COMBO_PCAP3: + case IDC_COMBO_PCAP4: +#endif if (ignore_change) return FALSE; - memset(temp_pcap_dev, '\0', sizeof(temp_pcap_dev)); - strcpy(temp_pcap_dev, network_devs[settings_get_cur_sel(hdlg, IDC_COMBO_PCAP)].device); + memset(temp_pcap_dev[0], '\0', sizeof(temp_pcap_dev[0])); + strcpy(temp_pcap_dev[0], network_devs[settings_get_cur_sel(hdlg, IDC_COMBO_PCAP1)].device); network_recalc_combos(hdlg); break; - case IDC_COMBO_NET: + case IDC_COMBO_NET1: +#if 0 + case IDC_COMBO_NET2: + case IDC_COMBO_NET3: + case IDC_COMBO_NET4: +#endif if (ignore_change) return FALSE; - temp_net_card = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_NET)]; + temp_net_card[0] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_NET1)]; network_recalc_combos(hdlg); break; - case IDC_CONFIGURE_NET: + case IDC_CONFIGURE_NET1: +#if 0 + case IDC_CONFIGURE_NET2: + case IDC_CONFIGURE_NET3: + case IDC_CONFIGURE_NET4: +#endif if (ignore_change) return FALSE; - temp_net_card = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_NET)]; - temp_deviceconfig |= deviceconfig_open(hdlg, (void *) network_card_getdevice(temp_net_card)); + temp_net_card[0] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_NET1)]; + temp_deviceconfig |= deviceconfig_open(hdlg, (void *) network_card_getdevice(temp_net_card[0])); break; } return FALSE; case WM_SAVESETTINGS: - temp_net_type = settings_get_cur_sel(hdlg, IDC_COMBO_NET_TYPE); - memset(temp_pcap_dev, '\0', sizeof(temp_pcap_dev)); - strcpy(temp_pcap_dev, network_devs[settings_get_cur_sel(hdlg, IDC_COMBO_PCAP)].device); - temp_net_card = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_NET)]; - +#if 0 + for (uint8_t i = 0; i < NET_CARD_MAX; i++) { +#endif + temp_net_type[0] = settings_get_cur_sel(hdlg, IDC_COMBO_NET1_TYPE); + memset(temp_pcap_dev[0], '\0', sizeof(temp_pcap_dev[0])); + strcpy(temp_pcap_dev[0], network_devs[settings_get_cur_sel(hdlg, IDC_COMBO_PCAP1)].device); + temp_net_card[0] = settings_list_to_device[0][settings_get_cur_sel(hdlg, IDC_COMBO_NET1)]; +#if 0 + } +#endif default: return FALSE; } diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 6107c0609..63db0176b 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -44,7 +44,9 @@ #include <86box/ui.h> #include <86box/win.h> #include <86box/version.h> -#include <86box/discord.h> +#ifdef DISCORD +# include <86box/discord.h> +#endif #ifdef MTR_ENABLED # include @@ -316,10 +318,13 @@ ResetAllMenus(void) video_set_filter_menu(menuMain); +#ifdef DISCORD if (discord_loaded) CheckMenuItem(menuMain, IDM_DISCORD, enable_discord ? MF_CHECKED : MF_UNCHECKED); else EnableMenuItem(menuMain, IDM_DISCORD, MF_DISABLED); +#endif + #ifdef MTR_ENABLED EnableMenuItem(menuMain, IDM_ACTION_END_TRACE, MF_DISABLED); #endif @@ -820,6 +825,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) config_save(); break; +#ifdef DISCORD case IDM_DISCORD: if (!discord_loaded) break; @@ -831,6 +837,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) } else discord_close(); break; +#endif default: media_menu_proc(hwnd, message, wParam, lParam); @@ -1212,6 +1219,7 @@ ui_init(int nCmdShow) return (0); } +#ifdef DISCORD if (!discord_load()) { enable_discord = 0; } else if (enable_discord) { @@ -1221,6 +1229,7 @@ ui_init(int nCmdShow) /* Update Discord status */ discord_update_activity(dopause); } +#endif /* Create our main window's class and register it. */ wincl.hInstance = hinstance; @@ -1451,9 +1460,11 @@ ui_init(int nCmdShow) plat_setfullscreen(0); } +#ifdef DISCORD /* Run Discord API callbacks */ if (enable_discord) discord_run_callbacks(); +#endif } timeEndPeriod(1); @@ -1471,8 +1482,10 @@ ui_init(int nCmdShow) win_mouse_close(); +#ifdef DISCORD /* Shut down the Discord integration */ discord_close(); +#endif if (user32_handle != NULL) dynld_close(user32_handle); @@ -1521,9 +1534,11 @@ plat_pause(int p) CheckMenuItem(menuMain, IDM_ACTION_PAUSE, (dopause) ? MF_CHECKED : MF_UNCHECKED); +#ifdef DISCORD /* Update Discord status */ if (enable_discord) discord_update_activity(dopause); +#endif /* Update the toolbar */ ToolBarUpdatePause(p);