Merge branch '86Box:master' into master

This commit is contained in:
randomtechkid
2023-02-05 12:52:47 +07:00
committed by GitHub
79 changed files with 2344 additions and 1253 deletions

View File

@@ -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" \

View File

@@ -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
#

View File

@@ -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 */

View File

@@ -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)

View File

@@ -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);

View File

@@ -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

View File

@@ -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",

View File

@@ -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
};

View File

@@ -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 */

View File

@@ -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;

View File

@@ -11,8 +11,10 @@
*
*
* Authors: Miran Grca, <mgrca8@gmail.com>
* Jasmine Iwanek, <jriwanek@gmail.com>
*
* 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*/

View File

@@ -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 *);

View File

@@ -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

View File

@@ -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

View File

@@ -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),

View File

@@ -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, <mgrca8@gmail.com>
*
* Copyright 2020 Miran Grca.
*
* Authors: Miran Grca, <mgrca8@gmail.com>
*
* 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)

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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)
{

View File

@@ -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;

View File

@@ -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",

View File

@@ -13,10 +13,12 @@
* Authors: Sarah Walker, <https://pcem-emulator.co.uk/>
* Miran Grca, <mgrca8@gmail.com>
* Melissa Goad, <mszoopers@protonmail.com>
* Jasmine Iwanek, <jriwanek@gmail.com>
*
* Copyright 2008-2020 Sarah Walker.
* Copyright 2016-2020 Miran Grca.
* Copyright 2020 Melissa Goad.
* Copyright 2020 Melissa Goad.
* Copyright 2022-2023 Jasmine Iwanek.
*/
#include <stdio.h>
#include <stdint.h>
@@ -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
};

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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ä"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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サウンドを使用する"

View File

@@ -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 사운드 사용"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 звук"

View File

@@ -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"

View File

@@ -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"

View File

@@ -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 звук"

View File

@@ -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)"

View File

@@ -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)"

View File

@@ -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, [] {

View File

@@ -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

View File

@@ -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

View File

@@ -11,8 +11,10 @@
*
*
* Authors: Joakim L. Gilje <jgilje@jgilje.net>
* Jasmine Iwanek <jriwanek@gmail.com>
*
* 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<QComboBox *>(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<QComboBox *>(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::settings));
DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard1->currentData().toInt()), 0, qobject_cast<Settings *>(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::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::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::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::settings));
}
}
void
SettingsSound::on_pushButtonConfigureSSI2001_clicked()
{
DeviceConfig::ConfigureDevice(&ssi2001_device, 0, qobject_cast<Settings *>(Settings::settings));
}
void
SettingsSound::on_pushButtonConfigureCMS_clicked()
{
DeviceConfig::ConfigureDevice(&cms_device, 0, qobject_cast<Settings *>(Settings::settings));
}
void
SettingsSound::on_pushButtonConfigureGUS_clicked()
{
DeviceConfig::ConfigureDevice(&gus_device, 0, qobject_cast<Settings *>(Settings::settings));
}

View File

@@ -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;

View File

@@ -26,42 +26,73 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item row="2" column="0">
<item row="5" column="0">
<widget class="QLabel" name="label_3">
<property name="text">
<string>MIDI In Device:</string>
</property>
</widget>
</item>
<item row="4" column="0" colspan="2">
<widget class="QCheckBox" name="checkBoxSSI2001">
<property name="text">
<string>Innovation SSI-2001</string>
</property>
</widget>
</item>
<item row="6" column="0">
<widget class="QCheckBox" name="checkBoxGUS">
<property name="text">
<string>Gravis Ultrasound</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Sound card:</string>
<string>Sound card #1:</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="pushButtonConfigureSoundCard">
<widget class="QPushButton" name="pushButtonConfigureSoundCard1">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="2" column="1">
<item row="1" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>Sound card #2:</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="pushButtonConfigureSoundCard2">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_5">
<property name="text">
<string>Sound card #3:</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="pushButtonConfigureSoundCard3">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>Sound card #4:</string>
</property>
</widget>
</item>
<item row="3" column="3">
<widget class="QPushButton" name="pushButtonConfigureSoundCard4">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QComboBox" name="comboBoxMidiIn">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -71,49 +102,35 @@
</property>
</widget>
</item>
<item row="1" column="0">
<item row="4" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>MIDI Out Device:</string>
</property>
</widget>
</item>
<item row="3" column="0">
<item row="6" column="0">
<widget class="QCheckBox" name="checkBoxMPU401">
<property name="text">
<string>Standalone MPU-401</string>
</property>
</widget>
</item>
<item row="3" column="3">
<item row="6" column="3">
<widget class="QPushButton" name="pushButtonConfigureMPU401">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="2" column="3">
<item row="5" column="3">
<widget class="QPushButton" name="pushButtonConfigureMidiIn">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="4" column="3">
<widget class="QPushButton" name="pushButtonConfigureSSI2001">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="checkBoxCMS">
<property name="text">
<string>CMS / Game Blaster</string>
</property>
</widget>
</item>
<item row="1" column="1">
<item row="4" column="1">
<widget class="QComboBox" name="comboBoxMidiOut">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@@ -123,35 +140,21 @@
</property>
</widget>
</item>
<item row="1" column="3">
<item row="4" column="3">
<widget class="QPushButton" name="pushButtonConfigureMidiOut">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="7" column="0">
<item row="10" column="0">
<widget class="QCheckBox" name="checkBoxFloat32">
<property name="text">
<string>Use FLOAT32 sound</string>
</property>
</widget>
</item>
<item row="5" column="3">
<widget class="QPushButton" name="pushButtonConfigureCMS">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="6" column="3">
<widget class="QPushButton" name="pushButtonConfigureGUS">
<property name="text">
<string>Configure</string>
</property>
</widget>
</item>
<item row="8" column="0">
<item row="11" column="0">
<widget class="QGroupBox" name="groupBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
@@ -180,7 +183,7 @@
</layout>
</widget>
</item>
<item row="9" column="0">
<item row="12" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -194,7 +197,37 @@
</spacer>
</item>
<item row="0" column="1">
<widget class="QComboBox" name="comboBoxSoundCard">
<widget class="QComboBox" name="comboBoxSoundCard1">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QComboBox" name="comboBoxSoundCard2">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="comboBoxSoundCard3">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="comboBoxSoundCard4">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>

View File

@@ -11,11 +11,12 @@
*
*
* Authors: Cacodemon345
* RichardG <richardg867@gmail.com>
*
* Copyright 2022 Cacodemon345
* Copyright 2022 Cacodemon345.
* Copyright 2023 RichardG.
*/
/* Valuator parsing and duplicate event checking code from SDL2. */
#include <QDebug>
#include <QThread>
#include <QProcess>
@@ -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<bool> exitfromthread = false;
static std::atomic<double> 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;
}
}
}

View File

@@ -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];
}
}

View File

@@ -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

View File

@@ -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;

View File

@@ -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

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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デバイス:"

View File

@@ -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 장치:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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:"

View File

@@ -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ı:"

View File

@@ -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:"

View File

@@ -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 设备:"

View File

@@ -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 裝置:"

View File

@@ -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;
}

View File

@@ -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 <minitrace/minitrace.h>
@@ -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);