mirror of
https://github.com/86Box/86Box.git
synced 2026-02-24 02:18:20 -07:00
Master merge
This commit is contained in:
@@ -338,7 +338,8 @@ strip_binary=strip
|
||||
if is_windows
|
||||
then
|
||||
# Switch into the correct MSYSTEM if required.
|
||||
msys=MINGW$arch
|
||||
msys=UCRT$arch
|
||||
[ ! -d "/$msys" ] && msys=MINGW$arch
|
||||
[ ! -d "/$msys" ] && msys=CLANG$arch
|
||||
if [ -d "/$msys" ]
|
||||
then
|
||||
|
||||
20
.github/workflows/cmake_windows_msys2.yml
vendored
20
.github/workflows/cmake_windows_msys2.yml
vendored
@@ -69,21 +69,21 @@ jobs:
|
||||
# - msystem: MSYS
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
# slug: "-MSYS64"
|
||||
- msystem: MINGW64
|
||||
prefix: mingw-w64-x86_64
|
||||
toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
slug: "-64"
|
||||
runner: windows-2022
|
||||
# - msystem: MINGW64
|
||||
# prefix: mingw-w64-x86_64
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
# slug: "MINGW64"
|
||||
# runner: windows-2022
|
||||
# - msystem: CLANG64
|
||||
# prefix: mingw-w64-clang-x86_64
|
||||
# toolchain: ./cmake/llvm-win32-x86_64.cmake
|
||||
# slug: "CLANG64"
|
||||
# runner: windows-2022
|
||||
# - msystem: UCRT64
|
||||
# prefix: mingw-w64-ucrt-x86_64
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
# slug: "UCRT64"
|
||||
# runner: windows-2022
|
||||
- msystem: UCRT64
|
||||
prefix: mingw-w64-ucrt-x86_64
|
||||
toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
slug: "-64"
|
||||
runner: windows-2022
|
||||
- msystem: CLANGARM64
|
||||
toolchain: ./cmake/flags-gcc-aarch64.cmake
|
||||
slug: -arm64
|
||||
|
||||
20
.github/workflows/codeql_windows_msys2.yml
vendored
20
.github/workflows/codeql_windows_msys2.yml
vendored
@@ -83,21 +83,21 @@ jobs:
|
||||
# - msystem: MSYS
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
# slug: "-MSYS64"
|
||||
- msystem: MINGW64
|
||||
prefix: mingw-w64-x86_64
|
||||
toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
slug: "-64"
|
||||
runner: windows-2022
|
||||
# - msystem: MINGW64
|
||||
# prefix: mingw-w64-x86_64
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
# slug: "MINGW64"
|
||||
# runner: windows-2022
|
||||
# - msystem: CLANG64
|
||||
# prefix: mingw-w64-clang-x86_64
|
||||
# toolchain: ./cmake/llvm-win32-x86_64.cmake
|
||||
# slug: "CLANG64"
|
||||
# runner: windows-2022
|
||||
# - msystem: UCRT64
|
||||
# prefix: mingw-w64-ucrt-x86_64
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
# slug: "UCRT64"
|
||||
# runner: windows-2022
|
||||
- msystem: UCRT64
|
||||
prefix: mingw-w64-ucrt-x86_64
|
||||
toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
slug: "-64"
|
||||
runner: windows-2022
|
||||
# - msystem: CLANGARM64
|
||||
# toolchain: ./cmake/flags-gcc-aarch64.cmake
|
||||
# slug: -arm64
|
||||
|
||||
@@ -186,6 +186,7 @@ cmake_dependent_option(WACOM "Wacom Input Devices"
|
||||
cmake_dependent_option(XL24 "ATI VGA Wonder XL24 (ATI-28800-6)" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(NETSWITCH "Network Switch Support" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(VFIO "Virtual Function I/O" ON "DEV_BRANCH" OFF)
|
||||
cmake_dependent_option(SOFTMODEM "AC'97 Softmodem" ON "DEV_BRANCH" OFF)
|
||||
|
||||
# Ditto but for Qt
|
||||
if(QT)
|
||||
|
||||
35
src/86box.c
35
src/86box.c
@@ -120,7 +120,6 @@
|
||||
/* Stuff that used to be globally declared in plat.h but is now extern there
|
||||
and declared here instead. */
|
||||
int dopause = 1; /* system is paused */
|
||||
atomic_flag doresize; /* screen resize requested */
|
||||
volatile int is_quit; /* system exit requested */
|
||||
uint64_t timer_freq;
|
||||
char emu_version[200]; /* version ID string */
|
||||
@@ -171,6 +170,7 @@ int vid_api = 0; /* (C) video r
|
||||
int vid_cga_contrast = 0; /* (C) video */
|
||||
int video_fullscreen = 0; /* (C) video */
|
||||
int video_fullscreen_scale = 0; /* (C) video */
|
||||
int fullscreen_ui_visible = 0; /* (C) video */
|
||||
int enable_overscan = 0; /* (C) video */
|
||||
int force_43 = 0; /* (C) video */
|
||||
int video_filter_method = 1; /* (C) video */
|
||||
@@ -262,6 +262,11 @@ struct accelKey def_acc_keys[NUM_ACCELS] = {
|
||||
.desc="Toggle fullscreen",
|
||||
.seq="Ctrl+Alt+PgUp"
|
||||
},
|
||||
{
|
||||
.name="toggle_ui_fullscreen",
|
||||
.desc="Toggle UI in fullscreen",
|
||||
.seq="Ctrl+Alt+PgDown"
|
||||
},
|
||||
{
|
||||
.name="screenshot",
|
||||
.desc="Screenshot",
|
||||
@@ -331,8 +336,8 @@ __thread int is_cpu_thread = 0;
|
||||
|
||||
static wchar_t mouse_msg[3][200];
|
||||
|
||||
static volatile atomic_int do_pause_ack = 0;
|
||||
static volatile atomic_int pause_ack = 0;
|
||||
static volatile ATOMIC_INT do_pause_ack = 0;
|
||||
static volatile ATOMIC_INT pause_ack = 0;
|
||||
|
||||
#define LOG_SIZE_BUFFER 8192 /* Log size buffer */
|
||||
|
||||
@@ -1723,6 +1728,7 @@ pc_reset_hard_init(void)
|
||||
void
|
||||
update_mouse_msg(void)
|
||||
{
|
||||
#ifdef USE_SDL_UI
|
||||
wchar_t wcpufamily[2048];
|
||||
wchar_t wcpu[2048];
|
||||
wchar_t wmachine[2048];
|
||||
@@ -1739,13 +1745,6 @@ update_mouse_msg(void)
|
||||
if (wcp) /* remove parentheses */
|
||||
*(wcp - 1) = L'\0';
|
||||
mbstowcs(wcpu, cpu_s->name, strlen(cpu_s->name) + 1);
|
||||
#ifdef _WIN32
|
||||
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%%i%%%% - %ls",
|
||||
plat_get_string(STRING_MOUSE_CAPTURE));
|
||||
swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%%i%%%% - %ls",
|
||||
(mouse_get_buttons() > 2) ? plat_get_string(STRING_MOUSE_RELEASE) : plat_get_string(STRING_MOUSE_RELEASE_MMB));
|
||||
wcsncpy(mouse_msg[2], L"%i.%i%%", sizeof_w(mouse_msg[2]));
|
||||
#else
|
||||
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls - %ls",
|
||||
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu,
|
||||
plat_get_string(STRING_MOUSE_CAPTURE));
|
||||
@@ -1754,6 +1753,12 @@ update_mouse_msg(void)
|
||||
(mouse_get_buttons() > 2) ? plat_get_string(STRING_MOUSE_RELEASE) : plat_get_string(STRING_MOUSE_RELEASE_MMB));
|
||||
swprintf(mouse_msg[2], sizeof_w(mouse_msg[2]), L"%ls v%ls - %%i%%%% - %ls - %ls/%ls",
|
||||
EMU_NAME_W, EMU_VERSION_FULL_W, wmachine, wcpufamily, wcpu);
|
||||
#else
|
||||
swprintf(mouse_msg[0], sizeof_w(mouse_msg[0]), L"%%i%%%% - %ls",
|
||||
plat_get_string(STRING_MOUSE_CAPTURE));
|
||||
swprintf(mouse_msg[1], sizeof_w(mouse_msg[1]), L"%%i%%%% - %ls",
|
||||
(mouse_get_buttons() > 2) ? plat_get_string(STRING_MOUSE_RELEASE) : plat_get_string(STRING_MOUSE_RELEASE_MMB));
|
||||
wcsncpy(mouse_msg[2], L"%i%%", sizeof_w(mouse_msg[2]));
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1835,9 +1840,9 @@ _ui_window_title(void *s)
|
||||
void
|
||||
ack_pause(void)
|
||||
{
|
||||
if (atomic_load(&do_pause_ack)) {
|
||||
atomic_store(&do_pause_ack, 0);
|
||||
atomic_store(&pause_ack, 1);
|
||||
if (ATOMIC_LOAD(do_pause_ack)) {
|
||||
ATOMIC_STORE(do_pause_ack, 0);
|
||||
ATOMIC_STORE(pause_ack, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2072,10 +2077,10 @@ do_pause(int p)
|
||||
do_pause_ack = p;
|
||||
dopause = !!p;
|
||||
if ((p == 1) && !old_p) {
|
||||
while (!atomic_load(&pause_ack))
|
||||
while (!ATOMIC_LOAD(pause_ack))
|
||||
;
|
||||
}
|
||||
atomic_store(&pause_ack, 0);
|
||||
ATOMIC_STORE(pause_ack, 0);
|
||||
}
|
||||
|
||||
// Helper to find an accelerator key and return it's index in acc_keys
|
||||
|
||||
@@ -1469,8 +1469,10 @@ cdrom_seek(cdrom_t *dev, const uint32_t pos, const uint8_t vendor_type)
|
||||
break;
|
||||
}
|
||||
|
||||
dev->seek_pos = real_pos;
|
||||
cdrom_stop(dev);
|
||||
|
||||
dev->seek_pos = real_pos;
|
||||
dev->cached_sector = -1;
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -531,7 +531,6 @@ mke_command(mke_t *mke, uint8_t value)
|
||||
uint16_t i;
|
||||
/* This is wasteful handling of buffers for compatibility, but will optimize later. */
|
||||
uint8_t x[12] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
int old_cd_status;
|
||||
|
||||
if (mke->command_buffer_pending) {
|
||||
mke->command_buffer[6 - mke->command_buffer_pending + 1] = value;
|
||||
@@ -769,7 +768,6 @@ mke_command(mke_t *mke, uint8_t value)
|
||||
}
|
||||
break;
|
||||
case CMD1_SEEK:
|
||||
old_cd_status = mke->cdrom_dev->cd_status;
|
||||
fifo8_reset(&mke->info_fifo);
|
||||
CHECK_READY_READ();
|
||||
/* TODO: DOES THIS IMPACT CURRENT PLAY LENGTH? */
|
||||
@@ -782,10 +780,6 @@ mke_command(mke_t *mke, uint8_t value)
|
||||
/* Note for self: Panasonic/MKE drives send seek commands in MSF format. */
|
||||
cdrom_seek(mke->cdrom_dev, MSFtoLBA(mke->command_buffer[1], mke->command_buffer[2],
|
||||
mke->command_buffer[3]) - 150, 0);
|
||||
if ((old_cd_status == CD_STATUS_PLAYING) || (old_cd_status == CD_STATUS_PAUSED)) {
|
||||
cdrom_audio_play(mke->cdrom_dev, mke->cdrom_dev->seek_pos, -1, 0);
|
||||
cdrom_audio_pause_resume(mke->cdrom_dev, old_cd_status == CD_STATUS_PLAYING);
|
||||
}
|
||||
fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke));
|
||||
break;
|
||||
case CMD1_SESSINFO:
|
||||
@@ -832,6 +826,9 @@ mke_command(mke_t *mke, uint8_t value)
|
||||
break;
|
||||
default:
|
||||
mke_log("MKE: Unknown Commnad [%02x]\n", mke->command_buffer[0]);
|
||||
fifo8_reset(&mke->info_fifo);
|
||||
fifo8_push_all(&mke->info_fifo, x, 6);
|
||||
fifo8_push(&mke->info_fifo, mke_cdrom_status(mke->cdrom_dev, mke));
|
||||
break;
|
||||
}
|
||||
} else if (!mke->command_buffer_pending) {
|
||||
|
||||
@@ -218,25 +218,19 @@ cs8220_init(UNUSED(const device_t *info))
|
||||
dev->ram_banks[0].virt = 0x00000000;
|
||||
dev->ram_banks[0].phys = 0x00000000;
|
||||
dev->ram_banks[0].size = 0x00080000;
|
||||
dev->ram_banks[1].virt = 0x00080000;
|
||||
dev->ram_banks[1].phys = 0x00080000;
|
||||
dev->ram_banks[1].size = 0x00020000;
|
||||
/* Pretend there's a 128k expansion. */
|
||||
/* Pretend there's a 256k expansion. */
|
||||
dev->ram_banks[2].virt = 0x00100000;
|
||||
dev->ram_banks[2].phys = 0x00080000;
|
||||
dev->ram_banks[2].size = 0x00020000;
|
||||
dev->ram_banks[2].size = 0x00040000;
|
||||
break;
|
||||
case 896:
|
||||
dev->ram_banks[0].virt = 0x00000000;
|
||||
dev->ram_banks[0].phys = 0x00000000;
|
||||
dev->ram_banks[0].size = 0x00080000;
|
||||
dev->ram_banks[1].virt = 0x00080000;
|
||||
dev->ram_banks[1].phys = 0x00080000;
|
||||
dev->ram_banks[1].size = 0x00020000;
|
||||
/* Pretend there's a 256k expansion. */
|
||||
/* Pretend there's a 384k expansion. */
|
||||
dev->ram_banks[2].virt = 0x00100000;
|
||||
dev->ram_banks[2].phys = 0x00080000;
|
||||
dev->ram_banks[2].size = 0x00040000;
|
||||
dev->ram_banks[2].size = 0x00060000;
|
||||
break;
|
||||
case 1024:
|
||||
dev->ram_banks[0].virt = 0x00000000;
|
||||
@@ -248,23 +242,31 @@ cs8220_init(UNUSED(const device_t *info))
|
||||
break;
|
||||
}
|
||||
|
||||
if (dev->ram_banks[0].size > 0x00000000)
|
||||
mem_set_mem_state(0x00000000, (mem_size << 10) + 0x00060000, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
|
||||
|
||||
if (dev->ram_banks[0].size > 0x00000000) {
|
||||
mem_mapping_add(&dev->ram_banks[0].mapping, dev->ram_banks[0].virt, dev->ram_banks[0].size,
|
||||
cs8220_mem_read, cs8220_mem_readw, NULL,
|
||||
cs8220_mem_write, cs8220_mem_writew, NULL,
|
||||
ram + dev->ram_banks[0].phys, MEM_MAPPING_INTERNAL, &(dev->ram_banks[0]));
|
||||
mem_set_mem_state(dev->ram_banks[0].virt, dev->ram_banks[0].size, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
||||
}
|
||||
|
||||
if (dev->ram_banks[1].size > 0x00000000)
|
||||
if (dev->ram_banks[1].size > 0x00000000) {
|
||||
mem_mapping_add(&dev->ram_banks[1].mapping, dev->ram_banks[1].virt, dev->ram_banks[1].size,
|
||||
cs8220_mem_read, cs8220_mem_readw, NULL,
|
||||
cs8220_mem_write, cs8220_mem_writew, NULL,
|
||||
ram + dev->ram_banks[1].phys, MEM_MAPPING_INTERNAL, &(dev->ram_banks[1]));
|
||||
mem_set_mem_state(dev->ram_banks[1].virt, dev->ram_banks[1].size, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
||||
}
|
||||
|
||||
if (dev->ram_banks[2].size > 0x00000000)
|
||||
if (dev->ram_banks[2].size > 0x00000000) {
|
||||
mem_mapping_add(&dev->ram_banks[2].mapping, dev->ram_banks[2].virt, dev->ram_banks[2].size,
|
||||
cs8220_mem_read, cs8220_mem_readw, NULL,
|
||||
cs8220_mem_write, cs8220_mem_writew, NULL,
|
||||
ram + dev->ram_banks[2].phys, MEM_MAPPING_INTERNAL, &(dev->ram_banks[2]));
|
||||
mem_set_mem_state(dev->ram_banks[2].virt, dev->ram_banks[2].size, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
|
||||
}
|
||||
|
||||
io_sethandler(0x00a4, 0x0002,
|
||||
cs8220_in, NULL, NULL, cs8220_out, NULL, NULL, dev);
|
||||
|
||||
@@ -1376,13 +1376,12 @@ piix_reset_hard(piix_t *dev)
|
||||
if (dev->type < 5)
|
||||
fregs[0x20] = 0x01;
|
||||
fregs[0x3d] = 0x04;
|
||||
if (dev->type > 4)
|
||||
fregs[0x60] = (dev->type > 3) ? 0x10 : 0x00;
|
||||
if (dev->type < 5) {
|
||||
fregs[0x60] = (dev->type > 3) ? 0x10 : 0x00;
|
||||
fregs[0x6a] = (dev->type == 3) ? 0x01 : 0x00;
|
||||
fregs[0xc1] = 0x20;
|
||||
fregs[0xff] = (dev->type > 3) ? 0x10 : 0x00;
|
||||
}
|
||||
} else
|
||||
dev->max_func = 2; /* It starts with USB disabled, then enables it. */
|
||||
}
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ typedef struct ram_struct_t {
|
||||
int bank;
|
||||
} ram_struct_t;
|
||||
|
||||
typedef struct card_mem_t {
|
||||
typedef struct mem_page_t {
|
||||
int in_ram;
|
||||
uint32_t virt_addr;
|
||||
uint32_t phys_addr;
|
||||
@@ -124,10 +124,6 @@ typedef struct scamp_t {
|
||||
mem_mapping_t mem_mappings[64]; /* The entire first 1 MB of memory space. */
|
||||
mem_page_t mem_pages[64];
|
||||
|
||||
uint32_t card_mem_size;
|
||||
uint8_t *card_mem;
|
||||
mem_page_t card_pages[4];
|
||||
|
||||
port_92_t *port_92;
|
||||
} scamp_t;
|
||||
|
||||
@@ -1180,14 +1176,6 @@ scamp_init(UNUSED(const device_t *info))
|
||||
}
|
||||
}
|
||||
|
||||
dev->card_mem = NULL;
|
||||
|
||||
for (uint8_t i = 0; i < 4; i++) {
|
||||
dev->card_pages[i].virt_addr = i * EMS_PGSIZE;
|
||||
dev->card_pages[i].phys_addr = dev->card_pages[i].virt_addr;
|
||||
dev->card_pages[i].mem = dev->card_mem + dev->card_pages[i].phys_addr;
|
||||
}
|
||||
|
||||
dev->port_92 = device_add(&port_92_device);
|
||||
|
||||
return dev;
|
||||
|
||||
@@ -392,7 +392,6 @@ sis_5571_host_to_pci_reset(void *priv)
|
||||
dev->pci_conf[0x91] = 0x00;
|
||||
dev->pci_conf[0x92] = 0x00;
|
||||
dev->pci_conf[0x93] = 0x00;
|
||||
dev->pci_conf[0x93] = 0x00;
|
||||
dev->pci_conf[0x94] = 0x00;
|
||||
dev->pci_conf[0x95] = 0x00;
|
||||
dev->pci_conf[0x96] = 0x00;
|
||||
|
||||
@@ -348,7 +348,7 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv)
|
||||
break;
|
||||
|
||||
case 0x58:
|
||||
if ((dev->id >= VIA_585) || (dev->id < VIA_597) || (dev->id == VIA_597) || ((dev->id >= VIA_693A) || (dev->id < VIA_8601)))
|
||||
if ((dev->id >= VIA_585) || (dev->id < VIA_597) || (dev->id == VIA_597) || ((dev->id >= VIA_693A) && (dev->id < VIA_8601)))
|
||||
dev->pci_conf[0x58] = (dev->pci_conf[0x58] & ~0xee) | (val & 0xee);
|
||||
else
|
||||
dev->pci_conf[0x58] = val;
|
||||
@@ -501,14 +501,14 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv)
|
||||
break;
|
||||
case 0x69:
|
||||
if ((dev->id != VIA_585) || (dev->id != VIA_595)) {
|
||||
if ((dev->id == VIA_693A) || (dev->id < VIA_8601))
|
||||
if ((dev->id == VIA_693A) && (dev->id < VIA_8601))
|
||||
dev->pci_conf[0x69] = (dev->pci_conf[0x69] & ~0xfe) | (val & 0xfe);
|
||||
else
|
||||
dev->pci_conf[0x69] = val;
|
||||
}
|
||||
break;
|
||||
case 0x6b:
|
||||
if ((dev->id == VIA_693A) || (dev->id < VIA_8601))
|
||||
if ((dev->id == VIA_693A) && (dev->id < VIA_8601))
|
||||
dev->pci_conf[0x6b] = val;
|
||||
else if (dev->id == VIA_691)
|
||||
dev->pci_conf[0x6b] = (dev->pci_conf[0x6b] & ~0xcf) | (val & 0xcf);
|
||||
@@ -520,7 +520,7 @@ via_apollo_host_bridge_write(int func, int addr, uint8_t val, void *priv)
|
||||
dev->pci_conf[0x6b] = (dev->pci_conf[0x6b] & ~0xc1) | (val & 0xc1);
|
||||
break;
|
||||
case 0x6c:
|
||||
if ((dev->id == VIA_597) || ((dev->id == VIA_693A) || (dev->id < VIA_8601)))
|
||||
if ((dev->id == VIA_597) || ((dev->id == VIA_693A) && (dev->id < VIA_8601)))
|
||||
dev->pci_conf[0x6c] = (dev->pci_conf[0x6c] & ~0x1f) | (val & 0x1f);
|
||||
else if (dev->id == VIA_598)
|
||||
dev->pci_conf[0x6c] = (dev->pci_conf[0x6c] & ~0x7f) | (val & 0x7f);
|
||||
|
||||
@@ -987,7 +987,7 @@ pipc_read(int func, int addr, void *priv)
|
||||
}
|
||||
} else if ((func <= (pm_func + 2)) && !(dev->pci_isa_regs[0x85] & ((func == (pm_func + 1)) ? 0x04 : 0x08))) { /* AC97 / MC97 */
|
||||
if (addr == 0x40)
|
||||
ret = ac97_via_read_status(dev->ac97, func - pm_func - 1);
|
||||
ret = ac97_via_read_status(dev->ac97);
|
||||
else
|
||||
ret = dev->ac97_regs[func - pm_func - 1][addr];
|
||||
}
|
||||
@@ -1583,7 +1583,7 @@ pipc_write(int func, int addr, uint8_t val, void *priv)
|
||||
|
||||
case 0x41:
|
||||
dev->ac97_regs[func][addr] = val;
|
||||
ac97_via_write_control(dev->ac97, func, val);
|
||||
ac97_via_write_control(dev->ac97, val);
|
||||
break;
|
||||
|
||||
case 0x42:
|
||||
|
||||
@@ -102,6 +102,10 @@
|
||||
# define OPCODE_SUB_LSR (0x25a << 21)
|
||||
# define OPCODE_SUBX_LSL (0x658 << 21)
|
||||
|
||||
# define OPCODE_INS_B (0x6e010400)
|
||||
# define OPCODE_INS_H (0x6e020400)
|
||||
# define OPCODE_INS_S (0x6e040400)
|
||||
# define OPCODE_INS_D (0x6e080400)
|
||||
# define OPCODE_ADD_V8B (0x0e208400)
|
||||
# define OPCODE_ADD_V4H (0x0e608400)
|
||||
# define OPCODE_ADD_V2S (0x0ea08400)
|
||||
@@ -180,6 +184,7 @@
|
||||
# define OPCODE_SQSUB_V8B (0x0e202c00)
|
||||
# define OPCODE_SQSUB_V4H (0x0e602c00)
|
||||
# define OPCODE_SQXTN_V8B_8H (0x0e214800)
|
||||
# define OPCODE_SQXTUN_V8B_8H (0x2e212800)
|
||||
# define OPCODE_SQXTN_V4H_4S (0x0e614800)
|
||||
# define OPCODE_SHL_VD (0x0f005400)
|
||||
# define OPCODE_SHL_VQ (0x4f005400)
|
||||
@@ -207,6 +212,7 @@
|
||||
# define OPCODE_ZIP1_V8B (0x0e003800)
|
||||
# define OPCODE_ZIP1_V4H (0x0e403800)
|
||||
# define OPCODE_ZIP1_V2S (0x0e803800)
|
||||
# define OPCODE_ZIP1_V2D (0x4ec03800)
|
||||
# define OPCODE_ZIP2_V8B (0x0e007800)
|
||||
# define OPCODE_ZIP2_V4H (0x0e407800)
|
||||
# define OPCODE_ZIP2_V2S (0x0e807800)
|
||||
@@ -225,11 +231,11 @@
|
||||
|
||||
# define IMM_LOGICAL(imm) ((imm) << 10)
|
||||
|
||||
# define BIT_TBxZ(bit) ((((bit) &0x1f) << 19) | (((bit) &0x20) ? (1 << 31) : 0))
|
||||
# define BIT_TBxZ(bit) ((((bit) & 0x1f) << 19) | (((bit) & 0x20) ? (1 << 31) : 0))
|
||||
|
||||
# define OFFSET14(offset) (((offset >> 2) << 5) & 0x0007ffe0)
|
||||
# define OFFSET19(offset) (((offset >> 2) << 5) & 0x00ffffe0)
|
||||
# define OFFSET20(offset) (((offset & 3) << 29) | ((((offset) &0x1fffff) >> 2) << 5))
|
||||
# define OFFSET20(offset) (((offset & 3) << 29) | ((((offset) & 0x1fffff) >> 2) << 5))
|
||||
# define OFFSET26(offset) ((offset >> 2) & 0x03ffffff)
|
||||
|
||||
# define OFFSET12_B(offset) (offset << 10)
|
||||
@@ -716,6 +722,12 @@ host_arm64_DUP_V2S(codeblock_t *block, int dst_reg, int src_n_reg, int element)
|
||||
codegen_addlong(block, OPCODE_DUP_V2S | Rd(dst_reg) | Rn(src_n_reg) | DUP_ELEMENT(element));
|
||||
}
|
||||
|
||||
void
|
||||
host_arm64_INS_D(codeblock_t *block, int dst_reg, int src_reg, int dst_index, int src_index)
|
||||
{
|
||||
codegen_addlong(block, OPCODE_INS_D | Rd(dst_reg) | Rn(src_reg) | ((dst_index & 1) << 20) | ((src_index & 1) << 14));
|
||||
}
|
||||
|
||||
void
|
||||
host_arm64_EOR_IMM(codeblock_t *block, int dst_reg, int src_n_reg, uint32_t imm_data)
|
||||
{
|
||||
@@ -1225,6 +1237,13 @@ host_arm64_SQXTN_V8B_8H(codeblock_t *block, int dst_reg, int src_reg)
|
||||
{
|
||||
codegen_addlong(block, OPCODE_SQXTN_V8B_8H | Rd(dst_reg) | Rn(src_reg));
|
||||
}
|
||||
|
||||
void
|
||||
host_arm64_SQXTUN_V8B_8H(codeblock_t *block, int dst_reg, int src_reg)
|
||||
{
|
||||
codegen_addlong(block, OPCODE_SQXTUN_V8B_8H | Rd(dst_reg) | Rn(src_reg));
|
||||
}
|
||||
|
||||
void
|
||||
host_arm64_SQXTN_V4H_4S(codeblock_t *block, int dst_reg, int src_reg)
|
||||
{
|
||||
@@ -1475,6 +1494,11 @@ host_arm64_ZIP1_V2S(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_re
|
||||
codegen_addlong(block, OPCODE_ZIP1_V2S | Rd(dst_reg) | Rn(src_n_reg) | Rm(src_m_reg));
|
||||
}
|
||||
void
|
||||
host_arm64_ZIP1_V2D(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg)
|
||||
{
|
||||
codegen_addlong(block, OPCODE_ZIP1_V2D | Rd(dst_reg) | Rn(src_n_reg) | Rm(src_m_reg));
|
||||
}
|
||||
void
|
||||
host_arm64_ZIP2_V8B(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg)
|
||||
{
|
||||
codegen_addlong(block, OPCODE_ZIP2_V8B | Rd(dst_reg) | Rn(src_n_reg) | Rm(src_m_reg));
|
||||
|
||||
@@ -72,6 +72,7 @@ void host_arm64_CSEL_EQ(codeblock_t *block, int dst_reg, int src_n_reg, int src_
|
||||
void host_arm64_CSEL_VS(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
|
||||
void host_arm64_DUP_V2S(codeblock_t *block, int dst_reg, int src_n_reg, int element);
|
||||
void host_arm64_INS_D(codeblock_t *block, int dst_reg, int src_reg, int dst_index, int src_index);
|
||||
|
||||
void host_arm64_EOR_IMM(codeblock_t *block, int dst_reg, int src_n_reg, uint32_t imm_data);
|
||||
void host_arm64_EOR_REG(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg, int shift);
|
||||
@@ -184,6 +185,7 @@ void host_arm64_SQSUB_V8B(codeblock_t *block, int dst_reg, int src_n_reg, int sr
|
||||
void host_arm64_SQSUB_V4H(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
|
||||
void host_arm64_SQXTN_V8B_8H(codeblock_t *block, int dst_reg, int src_reg);
|
||||
void host_arm64_SQXTUN_V8B_8H(codeblock_t *block, int dst_reg, int src_reg);
|
||||
void host_arm64_SQXTN_V4H_4S(codeblock_t *block, int dst_reg, int src_reg);
|
||||
|
||||
void host_arm64_SHL_V4H(codeblock_t *block, int dst_reg, int src_reg, int shift);
|
||||
@@ -243,6 +245,7 @@ void host_arm64_USHR_V2D(codeblock_t *block, int dst_reg, int src_reg, int shift
|
||||
void host_arm64_ZIP1_V8B(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
void host_arm64_ZIP1_V4H(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
void host_arm64_ZIP1_V2S(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
void host_arm64_ZIP1_V2D(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
void host_arm64_ZIP2_V8B(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
void host_arm64_ZIP2_V4H(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
void host_arm64_ZIP2_V2S(codeblock_t *block, int dst_reg, int src_n_reg, int src_m_reg);
|
||||
|
||||
@@ -801,7 +801,8 @@ codegen_MMX_ENTER(codeblock_t *block, uop_t *uop)
|
||||
host_arm64_STR_IMM_W(block, REG_TEMP, REG_CPUSTATE, (uintptr_t) &cpu_state.tag[0] - (uintptr_t) &cpu_state);
|
||||
host_arm64_STR_IMM_W(block, REG_TEMP, REG_CPUSTATE, (uintptr_t) &cpu_state.tag[4] - (uintptr_t) &cpu_state);
|
||||
host_arm64_STR_IMM_W(block, REG_WZR, REG_CPUSTATE, (uintptr_t) &cpu_state.TOP - (uintptr_t) &cpu_state);
|
||||
host_arm64_STRB_IMM(block, REG_WZR, REG_CPUSTATE, (uintptr_t) &cpu_state.ismmx - (uintptr_t) &cpu_state);
|
||||
host_arm64_AND_IMM(block, REG_TEMP, REG_TEMP, 1);
|
||||
host_arm64_STRB_IMM(block, REG_TEMP, REG_CPUSTATE, (uintptr_t) &cpu_state.ismmx - (uintptr_t) &cpu_state);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -849,28 +850,28 @@ codegen_LOAD_FUNC_ARG3(codeblock_t *block, uop_t *uop)
|
||||
static int
|
||||
codegen_LOAD_FUNC_ARG0_IMM(codeblock_t *block, uop_t *uop)
|
||||
{
|
||||
host_arm64_mov_imm(block, REG_ARG0, uop->imm_data);
|
||||
host_arm64_MOVX_IMM(block, REG_ARG0, uop->imm_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int
|
||||
codegen_LOAD_FUNC_ARG1_IMM(codeblock_t *block, uop_t *uop)
|
||||
{
|
||||
host_arm64_mov_imm(block, REG_ARG1, uop->imm_data);
|
||||
host_arm64_MOVX_IMM(block, REG_ARG1, uop->imm_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int
|
||||
codegen_LOAD_FUNC_ARG2_IMM(codeblock_t *block, uop_t *uop)
|
||||
{
|
||||
host_arm64_mov_imm(block, REG_ARG2, uop->imm_data);
|
||||
host_arm64_MOVX_IMM(block, REG_ARG2, uop->imm_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
static int
|
||||
codegen_LOAD_FUNC_ARG3_IMM(codeblock_t *block, uop_t *uop)
|
||||
{
|
||||
host_arm64_mov_imm(block, REG_ARG3, uop->imm_data);
|
||||
host_arm64_MOVX_IMM(block, REG_ARG3, uop->imm_data);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1448,9 +1449,9 @@ codegen_PACKSSWB(codeblock_t *block, uop_t *uop)
|
||||
int src_size_b = IREG_GET_SIZE(uop->src_reg_b_real);
|
||||
|
||||
if (REG_IS_Q(dest_size) && REG_IS_Q(src_size_b) && uop->dest_reg_a_real == uop->src_reg_a_real) {
|
||||
host_arm64_SQXTN_V8B_8H(block, REG_V_TEMP, src_reg_b);
|
||||
host_arm64_SQXTN_V8B_8H(block, dest_reg, dest_reg);
|
||||
host_arm64_ZIP1_V2S(block, dest_reg, dest_reg, REG_V_TEMP);
|
||||
host_arm64_INS_D(block, REG_V_TEMP, dest_reg, 0, 0);
|
||||
host_arm64_INS_D(block, REG_V_TEMP, src_reg_b, 1, 0);
|
||||
host_arm64_SQXTN_V8B_8H(block, dest_reg, REG_V_TEMP);
|
||||
} else
|
||||
fatal("PACKSSWB %02x %02x %02x\n", uop->dest_reg_a_real, uop->src_reg_a_real, uop->src_reg_b_real);
|
||||
|
||||
@@ -1465,9 +1466,9 @@ codegen_PACKSSDW(codeblock_t *block, uop_t *uop)
|
||||
int src_size_b = IREG_GET_SIZE(uop->src_reg_b_real);
|
||||
|
||||
if (REG_IS_Q(dest_size) && REG_IS_Q(src_size_b) && uop->dest_reg_a_real == uop->src_reg_a_real) {
|
||||
host_arm64_SQXTN_V4H_4S(block, REG_V_TEMP, src_reg_b);
|
||||
host_arm64_SQXTN_V4H_4S(block, dest_reg, dest_reg);
|
||||
host_arm64_ZIP1_V2S(block, dest_reg, dest_reg, REG_V_TEMP);
|
||||
host_arm64_INS_D(block, REG_V_TEMP, dest_reg, 0, 0);
|
||||
host_arm64_INS_D(block, REG_V_TEMP, src_reg_b, 1, 0);
|
||||
host_arm64_SQXTN_V4H_4S(block, dest_reg, REG_V_TEMP);
|
||||
} else
|
||||
fatal("PACKSSDW %02x %02x %02x\n", uop->dest_reg_a_real, uop->src_reg_a_real, uop->src_reg_b_real);
|
||||
|
||||
@@ -1480,9 +1481,9 @@ codegen_PACKUSWB(codeblock_t *block, uop_t *uop)
|
||||
int dest_size = IREG_GET_SIZE(uop->dest_reg_a_real), src_size_b = IREG_GET_SIZE(uop->src_reg_b_real);
|
||||
|
||||
if (REG_IS_Q(dest_size) && REG_IS_Q(src_size_b) && uop->dest_reg_a_real == uop->src_reg_a_real) {
|
||||
host_arm64_UQXTN_V8B_8H(block, REG_V_TEMP, src_reg_b);
|
||||
host_arm64_UQXTN_V8B_8H(block, dest_reg, dest_reg);
|
||||
host_arm64_ZIP1_V2S(block, dest_reg, dest_reg, REG_V_TEMP);
|
||||
host_arm64_INS_D(block, REG_V_TEMP, dest_reg, 0, 0);
|
||||
host_arm64_INS_D(block, REG_V_TEMP, src_reg_b, 1, 0);
|
||||
host_arm64_SQXTUN_V8B_8H(block, dest_reg, REG_V_TEMP);
|
||||
} else
|
||||
fatal("PACKUSWB %02x %02x %02x\n", uop->dest_reg_a_real, uop->src_reg_a_real, uop->src_reg_b_real);
|
||||
|
||||
|
||||
@@ -53,6 +53,9 @@ duplicate_uop(ir_data_t *ir, uop_t *uop, int offset)
|
||||
new_uop->imm_data = uop->imm_data;
|
||||
new_uop->p = uop->p;
|
||||
new_uop->pc = uop->pc;
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
new_uop->is_a16 = uop->is_a16;
|
||||
#endif
|
||||
|
||||
if (uop->jump_dest_uop != -1) {
|
||||
new_uop->jump_dest_uop = uop->jump_dest_uop + offset;
|
||||
|
||||
@@ -336,7 +336,11 @@ typedef struct uop_t {
|
||||
ir_reg_t src_reg_a;
|
||||
ir_reg_t src_reg_b;
|
||||
ir_reg_t src_reg_c;
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
uintptr_t imm_data;
|
||||
#else
|
||||
uint32_t imm_data;
|
||||
#endif
|
||||
void *p;
|
||||
ir_host_reg_t dest_reg_a_real;
|
||||
ir_host_reg_t src_reg_a_real, src_reg_b_real, src_reg_c_real;
|
||||
@@ -601,7 +605,11 @@ uop_gen_reg_src3_imm(uint32_t uop_type, ir_data_t *ir, int src_reg_a, int src_re
|
||||
}
|
||||
|
||||
static inline void
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
uop_gen_imm(uint32_t uop_type, ir_data_t *ir, uintptr_t imm)
|
||||
#else
|
||||
uop_gen_imm(uint32_t uop_type, ir_data_t *ir, uint32_t imm)
|
||||
#endif
|
||||
{
|
||||
uop_t *uop = uop_alloc(ir, uop_type);
|
||||
|
||||
@@ -660,6 +668,9 @@ uop_gen_reg_src2_pointer(uint32_t uop_type, ir_data_t *ir, int src_reg_a, int sr
|
||||
uop->p = p;
|
||||
}
|
||||
|
||||
extern int codegen_mmx_enter(void);
|
||||
extern int codegen_fp_enter(void);
|
||||
|
||||
#define uop_LOAD_FUNC_ARG_REG(ir, arg, reg) uop_gen_reg_src1(UOP_LOAD_FUNC_ARG_0 + arg, ir, reg)
|
||||
|
||||
#define uop_LOAD_FUNC_ARG_IMM(ir, arg, imm) uop_gen_imm(UOP_LOAD_FUNC_ARG_0_IMM + arg, ir, imm)
|
||||
@@ -724,6 +735,28 @@ uop_gen_reg_src2_pointer(uint32_t uop_type, ir_data_t *ir, int src_reg_a, int sr
|
||||
#define uop_FSQRT(ir, dst_reg, src_reg) uop_gen_reg_dst_src1(UOP_FSQRT, ir, dst_reg, src_reg)
|
||||
#define uop_FTST(ir, dst_reg, src_reg) uop_gen_reg_dst_src1(UOP_FTST, ir, dst_reg, src_reg)
|
||||
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
#define uop_FP_ENTER(ir) \
|
||||
do { \
|
||||
if (!codegen_fpu_entered) { \
|
||||
uop_MOV_IMM(ir, IREG_oldpc, cpu_state.oldpc); \
|
||||
uop_CALL_FUNC_RESULT(ir, IREG_temp0, codegen_fp_enter); \
|
||||
uop_CMP_IMM_JZ(ir, IREG_temp0, 1, codegen_exit_rout); \
|
||||
} \
|
||||
codegen_fpu_entered = 1; \
|
||||
codegen_mmx_entered = 0; \
|
||||
} while (0)
|
||||
#define uop_MMX_ENTER(ir) \
|
||||
do { \
|
||||
if (!codegen_mmx_entered) { \
|
||||
uop_MOV_IMM(ir, IREG_oldpc, cpu_state.oldpc); \
|
||||
uop_CALL_FUNC_RESULT(ir, IREG_temp0, codegen_mmx_enter); \
|
||||
uop_CMP_IMM_JZ(ir, IREG_temp0, 1, codegen_exit_rout); \
|
||||
} \
|
||||
codegen_mmx_entered = 1; \
|
||||
codegen_fpu_entered = 0; \
|
||||
} while (0)
|
||||
#else
|
||||
#define uop_FP_ENTER(ir) \
|
||||
do { \
|
||||
if (!codegen_fpu_entered) \
|
||||
@@ -738,6 +771,7 @@ uop_gen_reg_src2_pointer(uint32_t uop_type, ir_data_t *ir, int src_reg_a, int sr
|
||||
codegen_mmx_entered = 1; \
|
||||
codegen_fpu_entered = 0; \
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#define uop_JMP(ir, p) uop_gen_pointer(UOP_JMP, ir, p)
|
||||
#define uop_JMP_DEST(ir) uop_gen(UOP_JMP_DEST, ir)
|
||||
|
||||
@@ -86,13 +86,8 @@ RecompOpFn recomp_opcodes_0f[512] = {
|
||||
|
||||
/*40*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
/*50*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
/*60*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
/*70*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#else
|
||||
/*60*/ ropPUNPCKLBW, ropPUNPCKLWD, ropPUNPCKLDQ, ropPACKSSWB, ropPCMPGTB, ropPCMPGTW, ropPCMPGTD, ropPACKUSWB, ropPUNPCKHBW, ropPUNPCKHWD, ropPUNPCKHDQ, ropPACKSSDW, NULL, NULL, ropMOVD_r_d, ropMOVQ_r_q,
|
||||
/*70*/ NULL, ropPSxxW_imm, ropPSxxD_imm, ropPSxxQ_imm, ropPCMPEQB, ropPCMPEQW, ropPCMPEQD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropMOVD_d_r, ropMOVQ_q_r,
|
||||
#endif
|
||||
|
||||
/*80*/ ropJO_16, ropJNO_16, ropJB_16, ropJNB_16, ropJE_16, ropJNE_16, ropJBE_16, ropJNBE_16, ropJS_16, ropJNS_16, ropJP_16, ropJNP_16, ropJL_16, ropJNL_16, ropJLE_16, ropJNLE_16,
|
||||
/*90*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
@@ -100,13 +95,11 @@ RecompOpFn recomp_opcodes_0f[512] = {
|
||||
/*b0*/ NULL, NULL, ropLSS_16, NULL, ropLFS_16, ropLGS_16, ropMOVZX_16_8, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropMOVSX_16_8, NULL,
|
||||
|
||||
/*c0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
/*d0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
/*e0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#else
|
||||
/*d0*/ NULL, NULL, NULL, NULL, NULL, ropPMULLW, NULL, NULL, ropPSUBUSB, ropPSUBUSW, NULL, ropPAND, ropPADDUSB, ropPADDUSW, NULL, ropPANDN,
|
||||
/*e0*/ NULL, NULL, NULL, NULL, NULL, ropPMULHW, NULL, NULL, ropPSUBSB, ropPSUBSW, NULL, ropPOR, ropPADDSB, ropPADDSW, NULL, ropPXOR,
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropPSUBB, ropPSUBW, ropPSUBD, NULL, ropPADDB, ropPADDW, ropPADDD, NULL,
|
||||
#else
|
||||
/*f0*/ NULL, NULL, NULL, NULL, NULL, ropPMADDWD, NULL, NULL, ropPSUBB, ropPSUBW, ropPSUBD, NULL, ropPADDB, ropPADDW, ropPADDD, NULL,
|
||||
#endif
|
||||
|
||||
@@ -119,13 +112,8 @@ RecompOpFn recomp_opcodes_0f[512] = {
|
||||
|
||||
/*40*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
/*50*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
/*60*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
/*70*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#else
|
||||
/*60*/ ropPUNPCKLBW, ropPUNPCKLWD, ropPUNPCKLDQ, ropPACKSSWB, ropPCMPGTB, ropPCMPGTW, ropPCMPGTD, ropPACKUSWB, ropPUNPCKHBW, ropPUNPCKHWD, ropPUNPCKHDQ, ropPACKSSDW, NULL, NULL, ropMOVD_r_d, ropMOVQ_r_q,
|
||||
/*70*/ NULL, ropPSxxW_imm, ropPSxxD_imm, ropPSxxQ_imm, ropPCMPEQB, ropPCMPEQW, ropPCMPEQD, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropMOVD_d_r, ropMOVQ_q_r,
|
||||
#endif
|
||||
|
||||
/*80*/ ropJO_32, ropJNO_32, ropJB_32, ropJNB_32, ropJE_32, ropJNE_32, ropJBE_32, ropJNBE_32, ropJS_32, ropJNS_32, ropJP_32, ropJNP_32, ropJL_32, ropJNL_32, ropJLE_32, ropJNLE_32,
|
||||
/*90*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
@@ -133,13 +121,11 @@ RecompOpFn recomp_opcodes_0f[512] = {
|
||||
/*b0*/ NULL, NULL, ropLSS_32, NULL, ropLFS_32, ropLGS_32, ropMOVZX_32_8, ropMOVZX_32_16, NULL, NULL, NULL, NULL, NULL, NULL, ropMOVSX_32_8, ropMOVSX_32_16,
|
||||
|
||||
/*c0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
/*d0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
/*e0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||
#else
|
||||
/*d0*/ NULL, NULL, NULL, NULL, NULL, ropPMULLW, NULL, NULL, ropPSUBUSB, ropPSUBUSW, NULL, ropPAND, ropPADDUSB, ropPADDUSW, NULL, ropPANDN,
|
||||
/*e0*/ NULL, NULL, NULL, NULL, NULL, ropPMULHW, NULL, NULL, ropPSUBSB, ropPSUBSW, NULL, ropPOR, ropPADDSB, ropPADDSW, NULL, ropPXOR,
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
/*f0*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropPSUBB, ropPSUBW, ropPSUBD, NULL, ropPADDB, ropPADDW, ropPADDD, NULL,
|
||||
#else
|
||||
/*f0*/ NULL, NULL, NULL, NULL, NULL, ropPMADDWD, NULL, NULL, ropPSUBB, ropPSUBW, ropPSUBD, NULL, ropPADDB, ropPADDW, ropPADDD, NULL,
|
||||
#endif
|
||||
// clang-format on
|
||||
|
||||
@@ -201,7 +201,11 @@ static const uint8_t native_requested_sizes[9][8] =
|
||||
[REG_DOUBLE][IREG_SIZE_Q >> IREG_SIZE_SHIFT] = 1,
|
||||
[REG_FPU_ST_DOUBLE][IREG_SIZE_Q >> IREG_SIZE_SHIFT] = 1,
|
||||
|
||||
#if defined __ARM_EABI__ || defined _ARM_ || defined _M_ARM || defined __aarch64__ || defined _M_ARM64
|
||||
[REG_POINTER][IREG_SIZE_Q >> IREG_SIZE_SHIFT] = 1
|
||||
#else
|
||||
[REG_POINTER][(sizeof(void *) == 4) ? (IREG_SIZE_L >> IREG_SIZE_SHIFT) : (IREG_SIZE_Q >> IREG_SIZE_SHIFT)] = 1
|
||||
#endif
|
||||
};
|
||||
|
||||
void
|
||||
|
||||
189
src/config.c
189
src/config.c
@@ -947,11 +947,35 @@ load_ports(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
static char *
|
||||
memrmem(char *src, char *start, char *what)
|
||||
{
|
||||
if ((src == NULL) || (what == NULL))
|
||||
return NULL;
|
||||
|
||||
while (1) {
|
||||
if (memcmp(src, what, strlen(what)) == 0)
|
||||
return src;
|
||||
src--;
|
||||
if (src < start)
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
load_image_file(char *dest, char *p, uint8_t *ui_wp)
|
||||
{
|
||||
char *prefix = "";
|
||||
int ret = 0;
|
||||
char *slash = NULL;
|
||||
char *above = NULL;
|
||||
char *use = NULL;
|
||||
|
||||
if ((slash = memrmem(usr_path + strlen(usr_path) - 2, usr_path, "/")) != NULL) {
|
||||
slash++;
|
||||
above = (char *) calloc(1, slash - usr_path + 1);
|
||||
memcpy(above, usr_path, slash - usr_path);
|
||||
}
|
||||
|
||||
if (strstr(p, "wp://") == p) {
|
||||
p += 5;
|
||||
@@ -961,7 +985,33 @@ load_image_file(char *dest, char *p, uint8_t *ui_wp)
|
||||
} else if ((ui_wp != NULL) && *ui_wp)
|
||||
prefix = "wp://";
|
||||
|
||||
if (path_abs(p)) {
|
||||
if (strstr(p, "ioctl://") == p) {
|
||||
if (strlen(p) > (MAX_IMAGE_PATH_LEN - 11))
|
||||
ret = 1;
|
||||
else
|
||||
snprintf(dest, MAX_IMAGE_PATH_LEN, "%s", p);
|
||||
|
||||
if (above != NULL)
|
||||
free(above);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (memcmp(p, "<exe_path>/", strlen("<exe_path>/")) == 0) {
|
||||
if ((strlen(prefix) + strlen(exe_path) + strlen(path_get_slash(exe_path)) + strlen(p + strlen("<exe_path>/"))) >
|
||||
(MAX_IMAGE_PATH_LEN - 11))
|
||||
ret = 1;
|
||||
else
|
||||
snprintf(dest, MAX_IMAGE_PATH_LEN, "%s%s%s%s", prefix, exe_path, path_get_slash(exe_path),
|
||||
p + strlen("<exe_path>/"));
|
||||
} else if (memcmp(p, "../", strlen("../")) == 0) {
|
||||
use = (above == NULL) ? usr_path : above;
|
||||
if ((strlen(prefix) + strlen(use) + strlen(path_get_slash(use)) + strlen(p + strlen("../"))) >
|
||||
(MAX_IMAGE_PATH_LEN - 11))
|
||||
ret = 1;
|
||||
else
|
||||
snprintf(dest, MAX_IMAGE_PATH_LEN, "%s%s%s%s", prefix, use, path_get_slash(use), p + strlen("../"));
|
||||
} else if (path_abs(p)) {
|
||||
if ((strlen(prefix) + strlen(p)) > (MAX_IMAGE_PATH_LEN - 11))
|
||||
ret = 1;
|
||||
else
|
||||
@@ -975,6 +1025,9 @@ load_image_file(char *dest, char *p, uint8_t *ui_wp)
|
||||
|
||||
path_normalize(dest);
|
||||
|
||||
if (above != NULL)
|
||||
free(above);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1144,15 +1197,8 @@ load_storage_controllers(void)
|
||||
p[0] = 0x00;
|
||||
|
||||
if (p[0] != 0x00) {
|
||||
if (path_abs(p)) {
|
||||
if (strlen(p) > 511)
|
||||
fatal("Configuration: Length of cartridge_%02i_fn is more than 511\n",
|
||||
c + 1);
|
||||
else
|
||||
strncpy(cart_fns[c], p, 511);
|
||||
} else
|
||||
path_append_filename(cart_fns[c], usr_path, p);
|
||||
path_normalize(cart_fns[c]);
|
||||
if (load_image_file(cart_fns[c], p, NULL))
|
||||
fatal("Configuration: Length of cartridge_%02i_fn is more than 511\n", c + 1);
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||
@@ -1160,16 +1206,9 @@ load_storage_controllers(void)
|
||||
sprintf(temp, "cartridge_%02i_image_history_%02i", c + 1, i + 1);
|
||||
p = ini_section_get_string(cat, temp, NULL);
|
||||
if (p) {
|
||||
if (path_abs(p)) {
|
||||
if (strlen(p) > (MAX_IMAGE_PATH_LEN - 1))
|
||||
fatal("Configuration: Length of cartridge_%02i_image_history_%02i "
|
||||
"is more than %i\n", c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1);
|
||||
else
|
||||
snprintf(cart_image_history[c][i], MAX_IMAGE_PATH_LEN, "%s", p);
|
||||
} else
|
||||
snprintf(cart_image_history[c][i], MAX_IMAGE_PATH_LEN, "%s%s%s", usr_path,
|
||||
path_get_slash(usr_path), p);
|
||||
path_normalize(cart_image_history[c][i]);
|
||||
if (load_image_file(cart_image_history[c][i], p, NULL))
|
||||
fatal("Configuration: Length of cartridge_%02i_image_history_%02i "
|
||||
"is more than %i\n", c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1333,17 +1372,15 @@ load_hard_disks(void)
|
||||
p[0] = 0x00;
|
||||
|
||||
if (p[0] != 0x00) {
|
||||
if (path_abs(p)) {
|
||||
if (strlen(p) > 511)
|
||||
fatal("Configuration: Length of hdd_%02i_fn is more "
|
||||
"than 511\n", c + 1);
|
||||
else
|
||||
strncpy(hdd[c].fn, p, 511);
|
||||
} else
|
||||
path_append_filename(hdd[c].fn, usr_path, p);
|
||||
path_normalize(hdd[c].fn);
|
||||
if (load_image_file(hdd[c].fn, p, NULL))
|
||||
fatal("Configuration: Length of hdd_%02i_fn is more than 511\n", c + 1);
|
||||
}
|
||||
|
||||
#if defined(ENABLE_CONFIG_LOG) && (ENABLE_CONFIG_LOG == 2)
|
||||
if (*p != '\0')
|
||||
config_log("HDD%d: %ls\n", c, hdd[c].fn);
|
||||
#endif
|
||||
|
||||
sprintf(temp, "hdd_%02i_vhd_blocksize", c + 1);
|
||||
hdd[c].vhd_blocksize = ini_section_get_int(cat, temp, 0);
|
||||
|
||||
@@ -1431,6 +1468,7 @@ load_floppy_and_cdrom_drives(void)
|
||||
if (*p != '\0')
|
||||
config_log("Floppy%d: %ls\n", c, floppyfns[c]);
|
||||
#endif
|
||||
|
||||
sprintf(temp, "fdd_%02i_turbo", c + 1);
|
||||
fdd_set_turbo(c, !!ini_section_get_int(cat, temp, 0));
|
||||
sprintf(temp, "fdd_%02i_check_bpb", c + 1);
|
||||
@@ -1586,31 +1624,23 @@ load_floppy_and_cdrom_drives(void)
|
||||
p[0] = 0x00;
|
||||
|
||||
if (p[0] != 0x00) {
|
||||
if (path_abs(p)) {
|
||||
if (strlen(p) > 511)
|
||||
fatal("Configuration: Length of cdrom_%02i_image_path is more than 511\n", c + 1);
|
||||
else
|
||||
strncpy(cdrom[c].image_path, p, 511);
|
||||
} else
|
||||
path_append_filename(cdrom[c].image_path, usr_path, p);
|
||||
path_normalize(cdrom[c].image_path);
|
||||
if (load_image_file(cdrom[c].image_path, p, NULL))
|
||||
fatal("Configuration: Length of cdrom_%02i_image_path is more than 511\n", c + 1);
|
||||
}
|
||||
|
||||
#if defined(ENABLE_CONFIG_LOG) && (ENABLE_CONFIG_LOG == 2)
|
||||
if (*p != '\0')
|
||||
config_log("CD-ROM%d: %ls\n", c, cdrom[c].image_path);
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||
cdrom[c].image_history[i] = (char *) calloc((MAX_IMAGE_PATH_LEN + 1) << 1, sizeof(char));
|
||||
sprintf(temp, "cdrom_%02i_image_history_%02i", c + 1, i + 1);
|
||||
p = ini_section_get_string(cat, temp, NULL);
|
||||
if (p) {
|
||||
if (path_abs(p)) {
|
||||
if (strlen(p) > (MAX_IMAGE_PATH_LEN - 1))
|
||||
fatal("Configuration: Length of cdrom_%02i_image_history_%02i is more "
|
||||
"than %i\n", c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1);
|
||||
else
|
||||
snprintf(cdrom[c].image_history[i], MAX_IMAGE_PATH_LEN, "%s", p);
|
||||
} else
|
||||
snprintf(cdrom[c].image_history[i], MAX_IMAGE_PATH_LEN, "%s%s%s", usr_path,
|
||||
path_get_slash(usr_path), p);
|
||||
path_normalize(cdrom[c].image_history[i]);
|
||||
if (load_image_file(cdrom[c].image_history[i], p, NULL))
|
||||
fatal("Configuration: Length of cdrom_%02i_image_history_%02i is more "
|
||||
"than %i\n", c + 1, i + 1, MAX_IMAGE_PATH_LEN - 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3053,6 +3083,14 @@ save_image_file(char *cat, char *var, char *src)
|
||||
{
|
||||
char temp[2048] = { 0 };
|
||||
char *prefix = "";
|
||||
char *slash = NULL;
|
||||
char *above = NULL;
|
||||
|
||||
if ((slash = memrmem(usr_path + strlen(usr_path) - 2, usr_path, "/")) != NULL) {
|
||||
slash++;
|
||||
above = (char *) calloc(1, slash - usr_path + 1);
|
||||
memcpy(above, usr_path, slash - usr_path);
|
||||
}
|
||||
|
||||
path_normalize(src);
|
||||
|
||||
@@ -3061,12 +3099,21 @@ save_image_file(char *cat, char *var, char *src)
|
||||
prefix = "wp://";
|
||||
}
|
||||
|
||||
if (!strnicmp(src, usr_path, strlen(usr_path)))
|
||||
if (strstr(src, "ioctl://") == src)
|
||||
sprintf(temp, "%s", src);
|
||||
else if (!strnicmp(src, usr_path, strlen(usr_path)))
|
||||
sprintf(temp, "%s%s", prefix, &src[strlen(usr_path)]);
|
||||
else if ((above != NULL) && !strnicmp(src, above, strlen(above)))
|
||||
sprintf(temp, "../%s%s", prefix, &src[strlen(above)]);
|
||||
else if (!strnicmp(src, exe_path, strlen(exe_path)))
|
||||
sprintf(temp, "<exe_path>/%s%s", prefix, &src[strlen(exe_path)]);
|
||||
else
|
||||
sprintf(temp, "%s%s", prefix, src);
|
||||
|
||||
ini_section_set_string(cat, var, temp);
|
||||
|
||||
if (above != NULL)
|
||||
free(above);
|
||||
}
|
||||
|
||||
/* Save "Storage Controllers" section. */
|
||||
@@ -3186,25 +3233,15 @@ save_storage_controllers(void)
|
||||
|
||||
if (strlen(cart_fns[c]) == 0)
|
||||
ini_section_delete_var(cat, temp);
|
||||
else {
|
||||
path_normalize(cart_fns[c]);
|
||||
if (!strnicmp(cart_fns[c], usr_path, strlen(usr_path)))
|
||||
ini_section_set_string(cat, temp, &cart_fns[c][strlen(usr_path)]);
|
||||
else
|
||||
ini_section_set_string(cat, temp, cart_fns[c]);
|
||||
}
|
||||
else
|
||||
save_image_file(cat, temp, cart_fns[c]);
|
||||
|
||||
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||
sprintf(temp, "cartridge_%02i_image_history_%02i", c + 1, i + 1);
|
||||
if ((cart_image_history[c][i] == 0) || strlen(cart_image_history[c][i]) == 0)
|
||||
ini_section_delete_var(cat, temp);
|
||||
else {
|
||||
path_normalize(cart_image_history[c][i]);
|
||||
if (!strnicmp(cart_image_history[c][i], usr_path, strlen(usr_path)))
|
||||
ini_section_set_string(cat, temp, &cart_image_history[c][i][strlen(usr_path)]);
|
||||
else
|
||||
ini_section_set_string(cat, temp, cart_image_history[c][i]);
|
||||
}
|
||||
else
|
||||
save_image_file(cat, temp, cart_image_history[c][i]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3375,13 +3412,9 @@ save_hard_disks(void)
|
||||
}
|
||||
|
||||
sprintf(temp, "hdd_%02i_fn", c + 1);
|
||||
if (hdd_is_valid(c) && (strlen(hdd[c].fn) != 0)) {
|
||||
path_normalize(hdd[c].fn);
|
||||
if (!strnicmp(hdd[c].fn, usr_path, strlen(usr_path)))
|
||||
ini_section_set_string(cat, temp, &hdd[c].fn[strlen(usr_path)]);
|
||||
else
|
||||
ini_section_set_string(cat, temp, hdd[c].fn);
|
||||
} else
|
||||
if (hdd_is_valid(c) && (strlen(hdd[c].fn) != 0))
|
||||
save_image_file(cat, temp, hdd[c].fn);
|
||||
else
|
||||
ini_section_delete_var(cat, temp);
|
||||
|
||||
sprintf(temp, "hdd_%02i_vhd_blocksize", c + 1);
|
||||
@@ -3542,25 +3575,15 @@ save_floppy_and_cdrom_drives(void)
|
||||
sprintf(temp, "cdrom_%02i_image_path", c + 1);
|
||||
if ((cdrom[c].bus_type == 0) || (strlen(cdrom[c].image_path) == 0))
|
||||
ini_section_delete_var(cat, temp);
|
||||
else {
|
||||
path_normalize(cdrom[c].image_path);
|
||||
if (!strnicmp(cdrom[c].image_path, usr_path, strlen(usr_path)))
|
||||
ini_section_set_string(cat, temp, &cdrom[c].image_path[strlen(usr_path)]);
|
||||
else
|
||||
ini_section_set_string(cat, temp, cdrom[c].image_path);
|
||||
}
|
||||
else
|
||||
save_image_file(cat, temp, cdrom[c].image_path);
|
||||
|
||||
for (int i = 0; i < MAX_PREV_IMAGES; i++) {
|
||||
sprintf(temp, "cdrom_%02i_image_history_%02i", c + 1, i + 1);
|
||||
if ((cdrom[c].image_history[i] == 0) || strlen(cdrom[c].image_history[i]) == 0)
|
||||
ini_section_delete_var(cat, temp);
|
||||
else {
|
||||
path_normalize(cdrom[c].image_history[i]);
|
||||
if (!strnicmp(cdrom[c].image_history[i], usr_path, strlen(usr_path)))
|
||||
ini_section_set_string(cat, temp, &cdrom[c].image_history[i][strlen(usr_path)]);
|
||||
else
|
||||
ini_section_set_string(cat, temp, cdrom[c].image_history[i]);
|
||||
}
|
||||
else
|
||||
save_image_file(cat, temp, cdrom[c].image_history[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -242,6 +242,20 @@ static uint64_t tsc_old = 0;
|
||||
int32_t acycs = 0;
|
||||
# endif
|
||||
|
||||
int
|
||||
codegen_mmx_enter(void)
|
||||
{
|
||||
MMX_ENTER();
|
||||
return 0;
|
||||
}
|
||||
|
||||
int
|
||||
codegen_fp_enter(void)
|
||||
{
|
||||
FP_ENTER();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
update_tsc(void)
|
||||
{
|
||||
|
||||
@@ -1550,7 +1550,7 @@ cpu_set(void)
|
||||
|
||||
if ((cpu_s->cpu_type == CPU_Cx6x86L) || (cpu_s->cpu_type == CPU_Cx6x86MX))
|
||||
ccr4 = 0x80;
|
||||
else if (CPU_Cx6x86)
|
||||
else if (cpu_s->cpu_type == CPU_Cx6x86)
|
||||
CPUID = 0; /* Disabled on powerup by default */
|
||||
break;
|
||||
|
||||
|
||||
@@ -115,6 +115,10 @@
|
||||
#define RAM_UMAMEM (384 << 10) /* upper memory block */
|
||||
#define RAM_EXTMEM (1024 << 10) /* start of high memory */
|
||||
|
||||
#define EV159_BASE_MEM (128 << 10) /* size of EV-159 base memory in cs8220 mode*/
|
||||
#define EV159_EXT_1536 (1536 << 10) /* start of EV-159 high memory in cs8220 mode*/
|
||||
#define EV159_EXT_1024 (1024 << 10) /* start of EV-159 high memory in backfill mode*/
|
||||
|
||||
#define EMS_MAXSIZE (2048 << 10) /* max EMS memory size */
|
||||
#define EMS_EV159_MAXSIZE (3072 << 10) /* max EMS memory size for EV-159 cards */
|
||||
#define EMS_LOTECH_MAXSIZE (4096 << 10) /* max EMS memory size for lotech cards */
|
||||
@@ -635,6 +639,14 @@ isamem_init(const device_t *info)
|
||||
* so check this first.
|
||||
*/
|
||||
t = (addr < RAM_TOPMEM) ? RAM_TOPMEM - addr : 0;
|
||||
|
||||
/* Check for Everex EV-159 cards in CS8220 backfill mode. */
|
||||
if ((addr == RAM_TOPMEM) && (dev->board == ISAMEM_EV159_CARD)) {
|
||||
/* Reserve 128K RAM for base memory. */
|
||||
t = EV159_BASE_MEM;
|
||||
addr -= t;
|
||||
}
|
||||
|
||||
if (t > 0) {
|
||||
/*
|
||||
* We need T bytes to extend that area.
|
||||
@@ -669,6 +681,15 @@ isamem_init(const device_t *info)
|
||||
addr += t;
|
||||
}
|
||||
|
||||
/* Assign high memory address for EV-159 in backfill modes. */
|
||||
if ((addr == RAM_TOPMEM) && (dev->board == ISAMEM_EV159_CARD)) {
|
||||
if (dev->start_addr == RAM_TOPMEM) {
|
||||
addr = EV159_EXT_1536;
|
||||
} else {
|
||||
addr = EV159_EXT_1024;
|
||||
}
|
||||
}
|
||||
|
||||
/* Skip to high memory if needed. */
|
||||
if ((addr == RAM_TOPMEM) && (tot >= RAM_UMAMEM)) {
|
||||
/*
|
||||
|
||||
@@ -1196,7 +1196,7 @@ isapnp_enable_card(void *priv, uint8_t enable)
|
||||
if ((card->enable) && (dev->current_ld_card != NULL) && (dev->current_ld_card != card)) {
|
||||
dev->current_ld = NULL;
|
||||
dev->current_ld_card = NULL;
|
||||
} if (!card->enable) {
|
||||
} else if (!card->enable) {
|
||||
if (dev->isolated_card == card)
|
||||
dev->isolated_card = NULL;
|
||||
if ((dev->current_ld_card == card) && (old_enable != ISAPNP_CARD_FORCE_CONFIG)) {
|
||||
|
||||
@@ -372,7 +372,7 @@ keyboard_input(int down, uint16_t scan)
|
||||
/* kbc_at_log("Received scan code: %03X (%s)\n", scan & 0x1ff, down ? "down" : "up"); */
|
||||
recv_key_ui[scan & 0x1ff] = down;
|
||||
|
||||
if (mouse_capture || !kbd_req_capture || video_fullscreen) {
|
||||
if (mouse_capture || !kbd_req_capture || (video_fullscreen && !fullscreen_ui_visible)) {
|
||||
recv_key[scan & 0x1ff] = down;
|
||||
key_process(scan & 0x1ff, down);
|
||||
}
|
||||
|
||||
@@ -107,11 +107,11 @@ static mouse_t mouse_devices[] = {
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
static _Atomic double mouse_x;
|
||||
static _Atomic double mouse_y;
|
||||
static atomic_int mouse_z;
|
||||
static atomic_int mouse_w;
|
||||
static atomic_int mouse_buttons;
|
||||
static ATOMIC_DOUBLE mouse_x;
|
||||
static ATOMIC_DOUBLE mouse_y;
|
||||
static ATOMIC_INT mouse_z;
|
||||
static ATOMIC_INT mouse_w;
|
||||
static ATOMIC_INT mouse_buttons;
|
||||
|
||||
static int mouse_delta_b;
|
||||
static int mouse_old_b;
|
||||
@@ -208,7 +208,7 @@ mouse_scale_coord_y(double y, int mul)
|
||||
void
|
||||
mouse_subtract_x(int *delta_x, int *o_x, int min, int max, int abs)
|
||||
{
|
||||
double real_x = atomic_load(&mouse_x);
|
||||
double real_x = ATOMIC_LOAD(mouse_x);
|
||||
double smax_x;
|
||||
double rsmin_x;
|
||||
double smin_x;
|
||||
@@ -266,7 +266,7 @@ mouse_subtract_x(int *delta_x, int *o_x, int min, int max, int abs)
|
||||
if (abs)
|
||||
real_x -= rsmin_x;
|
||||
|
||||
atomic_store(&mouse_x, real_x);
|
||||
ATOMIC_STORE(mouse_x, real_x);
|
||||
}
|
||||
|
||||
/* It appears all host platforms give us y in the Microsoft format
|
||||
@@ -275,7 +275,7 @@ mouse_subtract_x(int *delta_x, int *o_x, int min, int max, int abs)
|
||||
void
|
||||
mouse_subtract_y(int *delta_y, int *o_y, int min, int max, int invert, int abs)
|
||||
{
|
||||
double real_y = atomic_load(&mouse_y);
|
||||
double real_y = ATOMIC_LOAD(mouse_y);
|
||||
double smax_y;
|
||||
double rsmin_y;
|
||||
double smin_y;
|
||||
@@ -339,7 +339,7 @@ mouse_subtract_y(int *delta_y, int *o_y, int min, int max, int invert, int abs)
|
||||
if (invert)
|
||||
real_y = -real_y;
|
||||
|
||||
atomic_store(&mouse_y, real_y);
|
||||
ATOMIC_STORE(mouse_y, real_y);
|
||||
}
|
||||
|
||||
/* It appears all host platforms give us y in the Microsoft format
|
||||
@@ -356,7 +356,7 @@ mouse_subtract_coords(int *delta_x, int *delta_y, int *o_x, int *o_y,
|
||||
int
|
||||
mouse_wheel_moved(void)
|
||||
{
|
||||
int ret = !!(atomic_load(&mouse_z));
|
||||
int ret = !!(ATOMIC_LOAD(mouse_z));
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -364,7 +364,7 @@ mouse_wheel_moved(void)
|
||||
int
|
||||
mouse_hwheel_moved(void)
|
||||
{
|
||||
int ret = !!(atomic_load(&mouse_w));
|
||||
int ret = !!(ATOMIC_LOAD(mouse_w));
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -372,8 +372,8 @@ mouse_hwheel_moved(void)
|
||||
int
|
||||
mouse_moved(void)
|
||||
{
|
||||
int moved_x = !!((int) floor(ABSD(mouse_scale_coord_x(atomic_load(&mouse_x), 1))));
|
||||
int moved_y = !!((int) floor(ABSD(mouse_scale_coord_y(atomic_load(&mouse_y), 1))));
|
||||
int moved_x = !!((int) floor(ABSD(mouse_scale_coord_x(ATOMIC_LOAD(mouse_x), 1))));
|
||||
int moved_y = !!((int) floor(ABSD(mouse_scale_coord_y(ATOMIC_LOAD(mouse_y), 1))));
|
||||
|
||||
/* Convert them to integer so we treat < 1.0 and > -1.0 as 0. */
|
||||
int ret = (moved_x || moved_y);
|
||||
@@ -390,11 +390,12 @@ mouse_state_changed(void)
|
||||
int hwheel = (mouse_nbut >= 6);
|
||||
int ret;
|
||||
|
||||
b = atomic_load(&mouse_buttons);
|
||||
b = ATOMIC_LOAD(mouse_buttons);
|
||||
mouse_delta_b = (b ^ mouse_old_b);
|
||||
mouse_old_b = b;
|
||||
|
||||
ret = mouse_moved() || ((atomic_load(&mouse_z) != 0) && wheel) || ((atomic_load(&mouse_w) != 0) && hwheel) || (mouse_delta_b & b_mask);
|
||||
ret = mouse_moved() || ((ATOMIC_LOAD(mouse_z) != 0) && wheel) || ((ATOMIC_LOAD(mouse_w) != 0) && hwheel) ||
|
||||
(mouse_delta_b & b_mask);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -421,8 +422,9 @@ mouse_timer_poll(UNUSED(void *priv))
|
||||
#endif
|
||||
}
|
||||
|
||||
#if !defined(__x86_64__) && !defined(_M_X64) && !defined(__i386__) && !defined(_M_IX86)
|
||||
static void
|
||||
atomic_double_add(_Atomic double *var, double val)
|
||||
atomic_double_add(ATOMIC_DOUBLE *var, double val)
|
||||
{
|
||||
double temp = atomic_load(var);
|
||||
|
||||
@@ -430,29 +432,30 @@ atomic_double_add(_Atomic double *var, double val)
|
||||
|
||||
atomic_store(var, temp);
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
mouse_scale_fx(double x)
|
||||
{
|
||||
atomic_double_add(&mouse_x, ((double) x) * mouse_sensitivity);
|
||||
ATOMIC_DOUBLE_ADD(mouse_x, ((double) x) * mouse_sensitivity);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_scale_fy(double y)
|
||||
{
|
||||
atomic_double_add(&mouse_y, ((double) y) * mouse_sensitivity);
|
||||
ATOMIC_DOUBLE_ADD(mouse_y, ((double) y) * mouse_sensitivity);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_scale_x(int x)
|
||||
{
|
||||
atomic_double_add(&mouse_x, ((double) x) * mouse_sensitivity);
|
||||
ATOMIC_DOUBLE_ADD(mouse_x, ((double) x) * mouse_sensitivity);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_scale_y(int y)
|
||||
{
|
||||
atomic_double_add(&mouse_y, ((double) y) * mouse_sensitivity);
|
||||
ATOMIC_DOUBLE_ADD(mouse_y, ((double) y) * mouse_sensitivity);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -481,31 +484,31 @@ mouse_scale_axis(int axis, int val)
|
||||
void
|
||||
mouse_set_z(int z)
|
||||
{
|
||||
atomic_fetch_add(&mouse_z, z);
|
||||
ATOMIC_ADD(mouse_z, z);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_clear_z(void)
|
||||
{
|
||||
atomic_store(&mouse_z, 0);
|
||||
ATOMIC_STORE(mouse_z, 0);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_set_w(int w)
|
||||
{
|
||||
atomic_fetch_add(&mouse_w, w);
|
||||
ATOMIC_ADD(mouse_w, w);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_clear_w(void)
|
||||
{
|
||||
atomic_store(&mouse_w, 0);
|
||||
ATOMIC_STORE(mouse_w, 0);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_subtract_z(int *delta_z, int min, int max, int invert)
|
||||
{
|
||||
int z = atomic_load(&mouse_z);
|
||||
int z = ATOMIC_LOAD(mouse_z);
|
||||
int real_z = invert ? -z : z;
|
||||
|
||||
if (real_z > max) {
|
||||
@@ -519,13 +522,13 @@ mouse_subtract_z(int *delta_z, int min, int max, int invert)
|
||||
real_z = 0;
|
||||
}
|
||||
|
||||
atomic_store(&mouse_z, invert ? -real_z : real_z);
|
||||
ATOMIC_STORE(mouse_z, invert ? -real_z : real_z);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_subtract_w(int *delta_w, int min, int max, int invert)
|
||||
{
|
||||
int w = atomic_load(&mouse_w);
|
||||
int w = ATOMIC_LOAD(mouse_w);
|
||||
int real_w = invert ? -w : w;
|
||||
|
||||
if (real_w > max) {
|
||||
@@ -539,19 +542,19 @@ mouse_subtract_w(int *delta_w, int min, int max, int invert)
|
||||
real_w = 0;
|
||||
}
|
||||
|
||||
atomic_store(&mouse_w, invert ? -real_w : real_w);
|
||||
ATOMIC_STORE(mouse_w, invert ? -real_w : real_w);
|
||||
}
|
||||
|
||||
void
|
||||
mouse_set_buttons_ex(int b)
|
||||
{
|
||||
atomic_store(&mouse_buttons, b);
|
||||
ATOMIC_STORE(mouse_buttons, b);
|
||||
}
|
||||
|
||||
int
|
||||
mouse_get_buttons_ex(void)
|
||||
{
|
||||
return atomic_load(&mouse_buttons);
|
||||
return ATOMIC_LOAD(mouse_buttons);
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -481,7 +481,7 @@ bm_poll(void *priv)
|
||||
int xor;
|
||||
int b = mouse_get_buttons_ex();
|
||||
|
||||
if (!mouse_capture && !video_fullscreen)
|
||||
if (!mouse_capture && !(video_fullscreen && !fullscreen_ui_visible))
|
||||
return 1;
|
||||
|
||||
if (!(dev->flags & FLAG_ENABLED))
|
||||
@@ -543,7 +543,7 @@ bm_update_data(mouse_t *dev)
|
||||
int xor;
|
||||
|
||||
/* If the counters are not frozen, update them. */
|
||||
if ((mouse_capture || video_fullscreen) && !(dev->flags & FLAG_HOLD)) {
|
||||
if ((mouse_capture || (video_fullscreen && !fullscreen_ui_visible)) && !(dev->flags & FLAG_HOLD)) {
|
||||
/* Update the deltas and the delays. */
|
||||
mouse_subtract_coords(&delta_x, &delta_y, NULL, NULL, -128, 127, 0, 0);
|
||||
|
||||
|
||||
@@ -332,7 +332,7 @@ ps2_poll(void *priv)
|
||||
atkbc_dev_t *dev = (atkbc_dev_t *) priv;
|
||||
int packet_size = (dev->flags & FLAG_INTMODE) ? 4 : 3;
|
||||
|
||||
int cond = (mouse_capture || video_fullscreen) && mouse_scan && (dev->mode == MODE_STREAM) &&
|
||||
int cond = (mouse_capture || (video_fullscreen && !fullscreen_ui_visible)) && mouse_scan && (dev->mode == MODE_STREAM) &&
|
||||
mouse_state_changed() && (kbc_at_dev_queue_pos(dev, 1) < (FIFO_SIZE - packet_size));
|
||||
|
||||
if (cond)
|
||||
|
||||
@@ -98,6 +98,48 @@
|
||||
# define LIKELY(x) (x)
|
||||
#endif
|
||||
|
||||
/* Platform-specific atomic handling */
|
||||
#if defined(__x86_64__) || defined(_M_X64) || defined(__i386__) || defined(_M_IX86)
|
||||
/* On x86/x64, aligned int/uint32_t accesses are naturally atomic */
|
||||
/* Use volatile for performance, as the original code did */
|
||||
#define ATOMIC_INT volatile int
|
||||
#define ATOMIC_UINT volatile uint32_t
|
||||
#define ATOMIC_DOUBLE volatile double
|
||||
#define ATOMIC_LOAD(var) (var)
|
||||
#define ATOMIC_STORE(var, val) ((var) = (val))
|
||||
#define ATOMIC_INC(var) (++(var))
|
||||
#define ATOMIC_DEC(var) (--(var))
|
||||
#define ATOMIC_ADD(var, val) ((var) += (val))
|
||||
#define ATOMIC_SUB(var, val) ((var) -= (val))
|
||||
#define ATOMIC_DOUBLE_ADD(var, val) ((var) += (val))
|
||||
#else
|
||||
/* On ARM and other architectures, use proper atomics */
|
||||
#ifdef failing_code
|
||||
#ifdef __cplusplus
|
||||
# include <atomic>
|
||||
using atomic_int = std::atomic<int>;
|
||||
using atomic_uint = std::atomic<unsigned int>;
|
||||
#else
|
||||
# include <stdatomic.h>
|
||||
#endif
|
||||
#else
|
||||
#ifndef __cplusplus
|
||||
# include <stdatomic.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define ATOMIC_INT atomic_int
|
||||
#define ATOMIC_UINT atomic_uint
|
||||
#define ATOMIC_DOUBLE _Atomic double
|
||||
#define ATOMIC_LOAD(var) atomic_load(&(var))
|
||||
#define ATOMIC_STORE(var, val) atomic_store(&(var), (val))
|
||||
#define ATOMIC_INC(var) atomic_fetch_add(&(var), 1)
|
||||
#define ATOMIC_DEC(var) atomic_fetch_sub(&(var), 1)
|
||||
#define ATOMIC_ADD(var, val) atomic_fetch_add(&(var), val)
|
||||
#define ATOMIC_SUB(var, val) atomic_fetch_sub(&(var), val)
|
||||
#define ATOMIC_DOUBLE_ADD(var, val) atomic_double_add(&(var), val)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -288,7 +330,7 @@ struct accelKey {
|
||||
char desc[64];
|
||||
char seq[64];
|
||||
};
|
||||
#define NUM_ACCELS 8
|
||||
#define NUM_ACCELS 9
|
||||
extern struct accelKey acc_keys[NUM_ACCELS];
|
||||
extern struct accelKey def_acc_keys[NUM_ACCELS];
|
||||
extern int FindAccelerator(const char *name);
|
||||
|
||||
@@ -142,9 +142,10 @@ static const struct cdrom_drive_types_s {
|
||||
/* TODO: Find an IDENTIFY and/or INQUIRY dump. */
|
||||
{ "GOLDSTAR", "GCD-R560B", "1.00", "goldstar_r560b", BUS_TYPE_IDE, 0, 6, 36, 0, 0, { 4, 2, 2, -1 } },
|
||||
{ "HITACHI", "CDR-8130", "0020", "hitachi_r8130", BUS_TYPE_IDE, 0, 16, 36, 0, 0, { 4, 2, 2, -1 } },
|
||||
{ "HITACHI", "GD-7500", "A1 ", "hitachi_7500", BUS_TYPE_IDE, 0, 40, 36, 0, 0, { 4, 2, 2, 2 } }, /* DVD. */
|
||||
{ "HITACHI", "CDR-8435", "0010", "hitachi_r8435", BUS_TYPE_IDE, 0, 32, 36, 0, 0, { 4, 2, 2, -1 } },
|
||||
{ "HITACHI", "GD-7500", "A1 ", "hitachi_7500", BUS_TYPE_IDE, 0, 40, 36, 0, 1, { 4, 2, 2, 2 } }, /* DVD. */
|
||||
{ "HL-DT-ST", "CD-ROM GCR-8526B", "1.01", "hldtst_8526b", BUS_TYPE_IDE, 0, 52, 36, 0, 0, { 4, 2, 2, 2 } },
|
||||
{ "HL-DT-ST", "DVDRAM GSA-4160", "A302", "hldtst_4160", BUS_TYPE_IDE, 0, 40, 36, 0, 0, { 4, 2, 2, 2 } },
|
||||
{ "HL-DT-ST", "DVDRAM GSA-4160", "A302", "hldtst_4160", BUS_TYPE_IDE, 0, 40, 36, 0, 1, { 4, 2, 2, 2 } },
|
||||
{ "KENWOOD", "CD-ROM UCR-421", "208E", "kenwood_421", BUS_TYPE_IDE, 0, 72, 36, 0, 0, { 4, 2, 2, 4 } },
|
||||
/*
|
||||
This is a laptop/notebook drive, as is also evident from the name:
|
||||
@@ -182,6 +183,7 @@ static const struct cdrom_drive_types_s {
|
||||
{ "TEAC", "CD-532E", "2.0A", "teac_532e", BUS_TYPE_IDE, 0, 32, 36, 0, 0, { 3, 2, 2, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-5302TA", "0305", "toshiba_5302ta", BUS_TYPE_IDE, 0, 4, 96, 0, 0, { 0, -1, -1, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-5702B", "TA70", "toshiba_5702b", BUS_TYPE_IDE, 0, 12, 96, 0, 0, { 3, 2, 1, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-6102B", "WA70", "toshiba_6102b", BUS_TYPE_IDE, 0, 24, 96, 0, 0, { 4, 2, 2, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-6202B", "1512", "toshiba_6202b", BUS_TYPE_IDE, 0, 32, 96, 0, 0, { 4, 2, 2, -1 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-6402B", "1008", "toshiba_6402b", BUS_TYPE_IDE, 0, 32, 96, 0, 0, { 4, 2, 2, 2 } },
|
||||
{ "TOSHIBA", "CD-ROM XM-6702B", "1007", "toshiba_6720b", BUS_TYPE_IDE, 0, 48, 96, 0, 0, { 4, 2, 2, 2 } },
|
||||
|
||||
@@ -55,6 +55,10 @@ extern int isartc_get_from_internal_name(const char *str);
|
||||
extern const device_t *isartc_get_device(int t);
|
||||
extern int isartc_has_config(int board);
|
||||
|
||||
/* On-board RTC devices */
|
||||
extern const device_t vendex_xt_rtc_onboard_device;
|
||||
extern const device_t rtc58167_device;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -926,6 +926,7 @@ extern int machine_at_optiplexgxl_init(const machine_t *);
|
||||
extern const device_t pt2000_device;
|
||||
#endif
|
||||
extern int machine_at_pt2000_init(const machine_t *);
|
||||
extern int machine_at_morrison32_init(const machine_t *);
|
||||
extern int machine_at_pc330_65x6_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t zappa_device;
|
||||
@@ -970,6 +971,7 @@ extern const device_t p54tp4xe_device;
|
||||
#endif
|
||||
extern int machine_at_p54tp4xe_init(const machine_t *);
|
||||
extern int machine_at_exp8551_init(const machine_t *);
|
||||
extern int machine_at_hpholly_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t vectra52_device;
|
||||
#endif
|
||||
@@ -1024,7 +1026,11 @@ extern int machine_at_amis727_init(const machine_t *);
|
||||
extern const device_t ap5s_device;
|
||||
#endif
|
||||
extern int machine_at_ap5s_init(const machine_t *);
|
||||
extern int machine_at_fm562_init(const machine_t *);
|
||||
extern int machine_at_pc140_6260_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t ms5124_device;
|
||||
#endif
|
||||
extern int machine_at_ms5124_init(const machine_t *);
|
||||
|
||||
/* VLSI Wildcat */
|
||||
@@ -1038,6 +1044,7 @@ extern int machine_at_p55t2p4_init(const machine_t *);
|
||||
extern void machine_at_p65up5_common_init(const machine_t *, const device_t *northbridge);
|
||||
#endif
|
||||
extern int machine_at_p65up5_cp55t2d_init(const machine_t *);
|
||||
extern int machine_at_rubyusb_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t cu430hx_device;
|
||||
#endif
|
||||
@@ -1248,6 +1255,10 @@ extern int machine_at_ficka6130_init(const machine_t *);
|
||||
|
||||
/* VIA Apollo Pro 133 */
|
||||
extern int machine_at_p3v133_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t ms6199va_device;
|
||||
#endif
|
||||
extern int machine_at_ms6199va_init(const machine_t *);
|
||||
|
||||
/* VIA Apollo Pro 133A */
|
||||
extern int machine_at_p3v4x_init(const machine_t *);
|
||||
@@ -1289,6 +1300,9 @@ extern int machine_at_cubx_init(const machine_t *);
|
||||
/* i440ZX */
|
||||
extern int machine_at_63a1_init(const machine_t *);
|
||||
|
||||
/* SiS 600 */
|
||||
extern int machine_at_7sbb_init(const machine_t *);
|
||||
|
||||
/* SMSC VictoryBX-66 */
|
||||
extern int machine_at_atc7020bxii_init(const machine_t *);
|
||||
extern int machine_at_m773_init(const machine_t *);
|
||||
@@ -1302,9 +1316,11 @@ extern int machine_at_p6bap_init(const machine_t *);
|
||||
/* VIA Apollo Pro 133A */
|
||||
extern int machine_at_6via90ap_init(const machine_t *);
|
||||
extern int machine_at_cuv4xls_init(const machine_t *);
|
||||
|
||||
/* SiS 600 */
|
||||
extern int machine_at_7sbb_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t ms6318_device;
|
||||
#endif
|
||||
extern int machine_at_ms6318_init(const machine_t *);
|
||||
extern int machine_at_cairo5_init(const machine_t *);
|
||||
|
||||
/* m_at_misc.c */
|
||||
extern int machine_at_vpc2007_init(const machine_t *);
|
||||
@@ -1446,6 +1462,10 @@ extern int machine_xt_pb8810_init(const machine_t *);
|
||||
extern int machine_xt_sansx16_init(const machine_t *);
|
||||
extern int machine_xt_pcxt_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t to16_device;
|
||||
#endif
|
||||
extern int machine_xt_to16_init(const machine_t *);
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t vendex_device;
|
||||
#endif
|
||||
extern int machine_xt_vendex_init(const machine_t *);
|
||||
|
||||
@@ -132,6 +132,7 @@ extern int update_icons;
|
||||
extern int kbd_req_capture;
|
||||
extern int hide_status_bar;
|
||||
extern int hide_tool_bar;
|
||||
extern int fullscreen_ui_visible;
|
||||
|
||||
/* System-related functions. */
|
||||
extern FILE *plat_fopen(const char *path, const char *mode);
|
||||
|
||||
@@ -8,9 +8,11 @@
|
||||
*
|
||||
* Definitions for AC'97 audio emulation.
|
||||
*
|
||||
*
|
||||
*
|
||||
* Authors: RichardG, <richardg867@gmail.com>
|
||||
*
|
||||
* Copyright 2021 RichardG.
|
||||
* Copyright 2021-2025 RichardG.
|
||||
*/
|
||||
#ifndef SOUND_AC97_H
|
||||
#define SOUND_AC97_H
|
||||
@@ -19,23 +21,26 @@
|
||||
|
||||
/* Misc support bits (misc_flags). Most of these are not part of any
|
||||
registers, but control enabling/disabling of registers and bits. */
|
||||
#define AC97_MASTER_6B (1 << 0) /* register 02 bits [13,5] (ML5/MR5) */
|
||||
#define AC97_AUXOUT (1 << 1) /* register 04 */
|
||||
#define AC97_AUXOUT_6B (1 << 2) /* register 04 bits [13,5] (ML5/MR5) */
|
||||
#define AC97_MONOOUT (1 << 3) /* register 06 */
|
||||
#define AC97_MONOOUT_6B (1 << 4) /* register 06 bit 5 (MM5) */
|
||||
#define AC97_PCBEEP (1 << 5) /* register 0A */
|
||||
#define AC97_PCBEEP_GEN (1 << 6) /* register 0A bits [12:5] (F[7:0]) */
|
||||
#define AC97_PHONE (1 << 9) /* register 0C */
|
||||
#define AC97_VIDEO (1 << 10) /* register 14 */
|
||||
#define AC97_AUXIN (1 << 11) /* register 16 */
|
||||
#define AC97_AUDIO (1 << 0) /* audio codec */
|
||||
#define AC97_MODEM (1 << 1) /* modem codec */
|
||||
#define AC97_MASTER_6B (1 << 2) /* register 02 bits [13,5] (ML5/MR5) */
|
||||
#define AC97_AUXOUT (1 << 3) /* register 04 */
|
||||
#define AC97_AUXOUT_6B (1 << 4) /* register 04 bits [13,5] (ML5/MR5) */
|
||||
#define AC97_MONOOUT (1 << 5) /* register 06 */
|
||||
#define AC97_MONOOUT_6B (1 << 6) /* register 06 bit 5 (MM5) */
|
||||
#define AC97_PCBEEP (1 << 9) /* register 0A */
|
||||
#define AC97_PCBEEP_GEN (1 << 10) /* register 0A bits [12:5] (F[7:0]) */
|
||||
#define AC97_PHONE (1 << 11) /* register 0C */
|
||||
#define AC97_VIDEO (1 << 12) /* register 14 */
|
||||
#define AC97_AUXIN (1 << 13) /* register 16 */
|
||||
#define AC97_POP (1 << 15) /* register 20 bit 15 (POP) - definition shared with General Purpose bits */
|
||||
#define AC97_MS (1 << 8) /* register 20 bit 8 (MS) - definition shared with General Purpose bits */
|
||||
#define AC97_LPBK (1 << 7) /* register 20 bit 7 (LPBK) - definition shared with General Purpose bits */
|
||||
#define AC97_DSA (1 << 12) /* register 28 bits [5:4] (DSA[1:0]) */
|
||||
#define AC97_LFE_6B (1 << 13) /* register 36 bit 13 (LFE5) */
|
||||
#define AC97_CENTER_6B (1 << 14) /* register 36 bit 5 (CNT5) */
|
||||
#define AC97_SURR_6B (1 << 16) /* register 38 bits [13,5] (LSR5/RSR5) */
|
||||
#define AC97_DSA (1 << 14) /* register 28 bits [5:4] (DSA[1:0]) */
|
||||
#define AC97_LFE_6B (1 << 16) /* register 36 bit 13 (LFE5) */
|
||||
#define AC97_CENTER_6B (1 << 17) /* register 36 bit 5 (CNT5) */
|
||||
#define AC97_SURR_6B (1 << 18) /* register 38 bits [13,5] (LSR5/RSR5) */
|
||||
#define AC97_GAIN_3B (1 << 19) /* registers [1C:1E] (audio) or [46:4A] (modem) bits [8,0] are always 0 (spec violation?) if this is set */
|
||||
|
||||
/* Reset bits (reset_flags), register 00. */
|
||||
#define AC97_MICPCM (1 << 0)
|
||||
@@ -89,6 +94,14 @@
|
||||
#define AC97_PRK (1 << 13)
|
||||
#define AC97_PRL (1 << 14)
|
||||
|
||||
/* Extended Modem ID bits, register 3C. */
|
||||
#define AC97_LIN1 (1 << 0)
|
||||
#define AC97_LIN2 (1 << 1)
|
||||
#define AC97_HSET (1 << 2)
|
||||
#define AC97_CID1 (1 << 3)
|
||||
#define AC97_CID2 (1 << 4)
|
||||
#define AC97_CIDR (1 << 7) /* special case: not part of register 3C, but rather 56 bit 13 */
|
||||
|
||||
/* Codec IDs. */
|
||||
#define AC97_CODEC_AD1881 AC97_VENDOR_ID('A', 'D', 'S', 0x40)
|
||||
#define AC97_CODEC_AK4540 AC97_VENDOR_ID('A', 'D', 'S', 0x40)
|
||||
@@ -100,6 +113,7 @@
|
||||
#define AC97_CODEC_TR28023 AC97_VENDOR_ID('T', 'R', 'A', 0x03)
|
||||
#define AC97_CODEC_W83971D AC97_VENDOR_ID('W', 'E', 'C', 0x01)
|
||||
#define AC97_CODEC_WM9701A AC97_VENDOR_ID('W', 'M', 'L', 0x00)
|
||||
#define AC97_CODEC_SI3036 AC97_VENDOR_ID('S', 'I', 'L', 0x22)
|
||||
|
||||
typedef struct ac97_vendor_reg_t {
|
||||
uint8_t page; /* for paged registers [60:6F], 0 otherwise */
|
||||
@@ -115,6 +129,8 @@ typedef struct ac97_codec_t {
|
||||
uint8_t vendor_reg_page_max;
|
||||
const ac97_vendor_reg_t *vendor_regs;
|
||||
uint16_t *vendor_reg_pages;
|
||||
uint16_t gpi;
|
||||
uint16_t gpo;
|
||||
} ac97_codec_t;
|
||||
|
||||
extern uint16_t ac97_codec_readw(ac97_codec_t *dev, uint8_t reg);
|
||||
@@ -122,22 +138,21 @@ extern void ac97_codec_writew(ac97_codec_t *dev, uint8_t reg, uint16_
|
||||
extern void ac97_codec_reset(void *priv);
|
||||
extern void ac97_codec_getattn(void *priv, uint8_t reg, int *l, int *r);
|
||||
extern uint32_t ac97_codec_getrate(void *priv, uint8_t reg);
|
||||
extern void ac97_codec_setgpi(void *priv, uint16_t gpi);
|
||||
extern void ac97_codec_setgpo(void *priv, uint16_t gpo);
|
||||
extern const device_t *ac97_codec_get(uint32_t id);
|
||||
|
||||
extern void ac97_via_set_slot(void *priv, int slot, int irq_pin);
|
||||
extern uint8_t ac97_via_read_status(void *priv, uint8_t modem);
|
||||
extern void ac97_via_write_control(void *priv, uint8_t modem, uint8_t val);
|
||||
extern uint8_t ac97_via_read_status(void *priv);
|
||||
extern void ac97_via_write_control(void *priv, uint8_t val);
|
||||
extern void ac97_via_remap_audio_sgd(void *priv, uint16_t new_io_base, uint8_t enable);
|
||||
extern void ac97_via_remap_modem_sgd(void *priv, uint16_t new_io_base, uint8_t enable);
|
||||
extern void ac97_via_remap_audio_codec(void *priv, uint16_t new_io_base, uint8_t enable);
|
||||
extern void ac97_via_remap_modem_codec(void *priv, uint16_t new_io_base, uint8_t enable);
|
||||
|
||||
extern ac97_codec_t **ac97_codec;
|
||||
extern ac97_codec_t **ac97_modem_codec;
|
||||
extern int ac97_codec_count;
|
||||
extern int ac97_modem_codec_count;
|
||||
extern int ac97_codec_id;
|
||||
extern int ac97_modem_codec_id;
|
||||
|
||||
#ifdef EMU_DEVICE_H
|
||||
extern const device_t ad1881_device;
|
||||
@@ -151,6 +166,9 @@ extern const device_t stac9721_device;
|
||||
extern const device_t tr28023_device;
|
||||
extern const device_t w83971d_device;
|
||||
extern const device_t wm9701a_device;
|
||||
#ifdef USE_SOFTMODEM
|
||||
extern const device_t si3036_device;
|
||||
#endif
|
||||
|
||||
extern const device_t ac97_via_device;
|
||||
#endif
|
||||
|
||||
@@ -22,11 +22,12 @@
|
||||
enum {
|
||||
AD1848_TYPE_DEFAULT = 0,
|
||||
AD1848_TYPE_CS4248 = 1,
|
||||
AD1848_TYPE_CS4231 = 2,
|
||||
AD1848_TYPE_CS4232 = 3,
|
||||
AD1848_TYPE_CS4236 = 4,
|
||||
AD1848_TYPE_CS4236B = 5,
|
||||
AD1848_TYPE_CS4235 = 6
|
||||
AD1848_TYPE_OPTI930 = 2,
|
||||
AD1848_TYPE_CS4231 = 3,
|
||||
AD1848_TYPE_CS4232 = 4,
|
||||
AD1848_TYPE_CS4236 = 5,
|
||||
AD1848_TYPE_CS4236B = 6,
|
||||
AD1848_TYPE_CS4235 = 7
|
||||
};
|
||||
|
||||
enum {
|
||||
@@ -44,6 +45,7 @@ typedef struct ad1848_t {
|
||||
uint8_t regs[32];
|
||||
uint8_t xregs[32];
|
||||
uint8_t status; /* 16 original registers + 16 CS4231A extensions + 32 CS4236 extensions */
|
||||
uint8_t opti930_mode2;
|
||||
|
||||
int count;
|
||||
uint8_t trd;
|
||||
|
||||
@@ -222,6 +222,9 @@ extern const device_t entertainer_device;
|
||||
/* Mindscape Music Board */
|
||||
extern const device_t mmb_device;
|
||||
|
||||
/* OPTi 82c930 */
|
||||
extern const device_t opti_82c930_device;
|
||||
|
||||
/* Pro Audio Spectrum Plus, 16, and 16D */
|
||||
extern const device_t pasplus_device;
|
||||
extern const device_t pas16_device;
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
# define FLAG_512K_MASK 512
|
||||
# define FLAG_NO_SHIFT3 1024 /* Needed for Bochs VBE. */
|
||||
# define FLAG_PRECISETIME 2048 /* Needed for Copper demo if on dynarec. */
|
||||
# define FLAG_PANNING_ATI 4096
|
||||
struct monitor_t;
|
||||
|
||||
typedef struct hwcursor_t {
|
||||
@@ -136,6 +137,7 @@ typedef struct svga_t {
|
||||
int ps_bit_bug;
|
||||
int ati_4color;
|
||||
int vblankend;
|
||||
int panning_blank;
|
||||
int render_line_offset;
|
||||
int start_retrace_latch;
|
||||
int vga_mode;
|
||||
|
||||
@@ -29,13 +29,6 @@
|
||||
|
||||
#define TEX_CACHE_MAX 64
|
||||
|
||||
#ifdef __cplusplus
|
||||
# include <atomic>
|
||||
using atomic_int = std::atomic<int>;
|
||||
#else
|
||||
# include <stdatomic.h>
|
||||
#endif
|
||||
|
||||
enum {
|
||||
VOODOO_1 = 0,
|
||||
VOODOO_SB50,
|
||||
@@ -230,8 +223,8 @@ typedef struct voodoo_params_t {
|
||||
typedef struct texture_t {
|
||||
uint32_t base;
|
||||
uint32_t tLOD;
|
||||
atomic_int refcount;
|
||||
atomic_int refcount_r[4];
|
||||
ATOMIC_INT refcount;
|
||||
ATOMIC_INT refcount_r[4];
|
||||
int is16;
|
||||
uint32_t palette_checksum;
|
||||
uint32_t addr_start[4];
|
||||
@@ -400,16 +393,16 @@ typedef struct voodoo_t {
|
||||
int type;
|
||||
|
||||
fifo_entry_t fifo[FIFO_SIZE];
|
||||
atomic_int fifo_read_idx;
|
||||
atomic_int fifo_write_idx;
|
||||
atomic_int cmd_read;
|
||||
atomic_int cmd_written;
|
||||
atomic_int cmd_written_fifo;
|
||||
atomic_int cmd_written_fifo_2;
|
||||
ATOMIC_INT fifo_read_idx;
|
||||
ATOMIC_INT fifo_write_idx;
|
||||
ATOMIC_INT cmd_read;
|
||||
ATOMIC_INT cmd_written;
|
||||
ATOMIC_INT cmd_written_fifo;
|
||||
ATOMIC_INT cmd_written_fifo_2;
|
||||
|
||||
voodoo_params_t params_buffer[PARAM_SIZE];
|
||||
atomic_int params_read_idx[4];
|
||||
atomic_int params_write_idx;
|
||||
ATOMIC_INT params_read_idx[4];
|
||||
ATOMIC_INT params_write_idx;
|
||||
|
||||
uint32_t cmdfifo_base;
|
||||
uint32_t cmdfifo_end;
|
||||
@@ -418,9 +411,9 @@ typedef struct voodoo_t {
|
||||
int cmdfifo_ret_addr;
|
||||
int cmdfifo_in_sub;
|
||||
int cmdfifo_in_agp;
|
||||
atomic_int cmdfifo_depth_rd;
|
||||
atomic_int cmdfifo_depth_wr;
|
||||
atomic_int cmdfifo_enabled;
|
||||
ATOMIC_INT cmdfifo_depth_rd;
|
||||
ATOMIC_INT cmdfifo_depth_wr;
|
||||
ATOMIC_INT cmdfifo_enabled;
|
||||
uint32_t cmdfifo_amin;
|
||||
uint32_t cmdfifo_amax;
|
||||
int cmdfifo_holecount;
|
||||
@@ -432,14 +425,14 @@ typedef struct voodoo_t {
|
||||
int cmdfifo_ret_addr_2;
|
||||
int cmdfifo_in_sub_2;
|
||||
int cmdfifo_in_agp_2;
|
||||
atomic_int cmdfifo_depth_rd_2;
|
||||
atomic_int cmdfifo_depth_wr_2;
|
||||
atomic_int cmdfifo_enabled_2;
|
||||
ATOMIC_INT cmdfifo_depth_rd_2;
|
||||
ATOMIC_INT cmdfifo_depth_wr_2;
|
||||
ATOMIC_INT cmdfifo_enabled_2;
|
||||
uint32_t cmdfifo_amin_2;
|
||||
uint32_t cmdfifo_amax_2;
|
||||
int cmdfifo_holecount_2;
|
||||
|
||||
atomic_uint cmd_status, cmd_status_2;
|
||||
ATOMIC_UINT cmd_status, cmd_status_2;
|
||||
|
||||
uint32_t sSetupMode;
|
||||
vert_t verts[4];
|
||||
|
||||
@@ -594,7 +594,16 @@ static const device_config_t ax6bc_config[] = {
|
||||
.files = { "roms/machines/ax6bc/ax6bc110.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.60PGM - Revision R2.59",
|
||||
.name = "Award Modular BIOS v4.60PGMA - Revision R2.20 (RM Accelerator 350P2XB/450P3XB)",
|
||||
.internal_name = "ax6bc_rm",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ax6bc/ax6bc220.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.60PGMA - Revision R2.59",
|
||||
.internal_name = "ax6bc",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
@@ -877,6 +886,15 @@ static const device_config_t ms6147_config[] = {
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 1.2 (Fujitsu ErgoPro e368)",
|
||||
.internal_name = "ergoproe368",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6147/W647F412.BIN", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 1.8",
|
||||
.internal_name = "ms6147",
|
||||
@@ -904,7 +922,7 @@ static const device_config_t ms6147_config[] = {
|
||||
|
||||
const device_t ms6147_device = {
|
||||
.name = "MSI MS-6147",
|
||||
.internal_name = "ms6147_device",
|
||||
.internal_name = "ms6147",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
@@ -1390,6 +1408,119 @@ machine_at_p3v133_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t ms6199va_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "ms6199va",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 3.5",
|
||||
.internal_name = "ms6199va",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6199va/w6199vms.350", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 2.0 (Compaq OEM)",
|
||||
.internal_name = "ms6199va_200",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6199va/W6199VC8.BIN", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 2.0 (Compaq OEM) [patched for large drives]",
|
||||
.internal_name = "ms6199va_200p",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6199va/W6199VC8.PCD", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision 3.7 (Packard Bell OEM)",
|
||||
.internal_name = "ms6199va_370",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6199va/w6199VP2.370", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t ms6199va_device = {
|
||||
.name = "MSI MS-6199VA",
|
||||
.internal_name = "ms6199va_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = ms6199va_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_ms6199va_init(const machine_t *model)
|
||||
{
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000c0000, 262144, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 3, 4);
|
||||
pci_register_slot(0x0C, PCI_CARD_SOUND, 3, 4, 1, 2);
|
||||
pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2);
|
||||
pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 4, 3);
|
||||
pci_register_slot(0x14, PCI_CARD_NORMAL, 2, 1, 4, 3);
|
||||
pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4);
|
||||
|
||||
device_add(&via_apro133a_device);
|
||||
device_add(&via_vt82c596b_device);
|
||||
device_add_params(&w83977_device, (void *) (W83977EF | W83977_AMI | W83977_NO_NVR));
|
||||
device_add(&winbond_flash_w29c020_device);
|
||||
spd_register(SPD_TYPE_SDRAM, 0x7, 512);
|
||||
device_add(&w83782d_device); /* fans: Chassis, Power, CPU; temperatures: System, CPU, unused */
|
||||
hwm_values.temperatures[2] = 0; /* unused */
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL) {
|
||||
device_add(machine_get_snd_device(machine));
|
||||
device_add(&w83971d_device);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* VIA Apollo Pro 133A */
|
||||
int
|
||||
machine_at_p3v4x_init(const machine_t *model)
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include <stdarg.h>
|
||||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <wchar.h>
|
||||
#define HAVE_STDARG_H
|
||||
@@ -333,11 +334,13 @@ machine_at_valuepoint433_init(const machine_t *model) // hangs without the PS/2
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/valuepoint433/$IMAGEP.FLH",
|
||||
0x000e0000, 131072, 0);
|
||||
0x000c0000, 262144, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
memcpy(&rom[0x00020000], rom, 131072);
|
||||
|
||||
machine_at_common_ide_init(model);
|
||||
device_add(&sis_85c461_device);
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
@@ -350,6 +353,13 @@ machine_at_valuepoint433_init(const machine_t *model) // hangs without the PS/2
|
||||
if (fdc_current[0] == FDC_INTERNAL)
|
||||
device_add(&fdc_at_device);
|
||||
|
||||
if (gfxcard[0] != VID_INTERNAL) {
|
||||
for (uint16_t i = 0; i < 32768; i++)
|
||||
rom[i] = mem_readb_phys(0x000c0000 + i);
|
||||
}
|
||||
mem_mapping_set_addr(&bios_mapping, 0x0c0000, 0x40000);
|
||||
mem_mapping_set_exec(&bios_mapping, rom);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -215,6 +215,35 @@ machine_at_63a1_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* SiS 600 */
|
||||
int
|
||||
machine_at_7sbb_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/7sbb/sbb12aa2.bin",
|
||||
0x000c0000, 262144, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1 | FLAG_TRC_CONTROLS_CPURST);
|
||||
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(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2);
|
||||
pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4);
|
||||
|
||||
device_add(&sis_5600_device);
|
||||
device_add(&it8661f_device);
|
||||
device_add(&sst_flash_29ee020_device); /* assumed */
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* SMSC VictoryBX-66 */
|
||||
int
|
||||
machine_at_atc7020bxii_init(const machine_t *model)
|
||||
@@ -434,13 +463,168 @@ machine_at_cuv4xls_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* SiS 600 */
|
||||
static const device_config_t ms6318_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "ms6318",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 1.1",
|
||||
.internal_name = "ms6318_110",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/w6318vms.110", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 1.2",
|
||||
.internal_name = "ms6318",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/w6318vms.120", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 7.1B5E (Elonex OEM)",
|
||||
.internal_name = "ms6318_715",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/w6318ve1.715", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 1.0B9 (Fujitsu-Siemens OEM)",
|
||||
.internal_name = "ms6318_109",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/ms-6318-ver5.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 1.8 (HP OEM)",
|
||||
.internal_name = "ms6318_180",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/med2000v2.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 1.9 (HP OEM)",
|
||||
.internal_name = "ms6318_190",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/med2000.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 2.02 (HP OEM)",
|
||||
.internal_name = "ms6318_202",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/ms6318hp.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 1.3 (Medion OEM)",
|
||||
.internal_name = "ms6318_130",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/ms6318.bin", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v6.00PG - Revision 7.51 (Medion OEM)",
|
||||
.internal_name = "ms6318_751",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 262144,
|
||||
.files = { "roms/machines/ms6318/bios.rom", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t ms6318_device = {
|
||||
.name = "MSI MS-6318",
|
||||
.internal_name = "ms6318_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = ms6318_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_7sbb_init(const machine_t *model)
|
||||
machine_at_ms6318_init(const machine_t *model)
|
||||
{
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000c0000, 262144, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4);
|
||||
pci_register_slot(0x0C, PCI_CARD_SOUND, 3, 4, 1, 2);
|
||||
pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 4, 1, 2);
|
||||
pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4);
|
||||
|
||||
device_add(&via_apro133a_device);
|
||||
device_add(&via_vt82c686b_device); /* fans: CPU1, CPU2; temperatures: CPU, System, unused */
|
||||
device_add(&sst_flash_39sf020_device); /* assumed */
|
||||
spd_register(SPD_TYPE_SDRAM, 0x7, 1024);
|
||||
hwm_values.temperatures[0] += 2; /* CPU offset */
|
||||
hwm_values.temperatures[1] += 2; /* System offset */
|
||||
hwm_values.temperatures[2] = 0; /* unused */
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL) {
|
||||
device_add(machine_get_snd_device(machine));
|
||||
device_add(&stac9708_device);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_cairo5_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/7sbb/sbb12aa2.bin",
|
||||
ret = bios_load_linear("roms/machines/cairo5/08BV.BIN",
|
||||
0x000c0000, 262144, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
@@ -448,17 +632,20 @@ machine_at_7sbb_init(const machine_t *model)
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1 | FLAG_TRC_CONTROLS_CPURST);
|
||||
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(0x0F, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x10, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2);
|
||||
pci_register_slot(0x02, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4);
|
||||
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 1, 2, 3, 4);
|
||||
pci_register_slot(0x0E, PCI_CARD_NORMAL, 1, 2, 3, 0);
|
||||
pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 0, 1);
|
||||
pci_register_slot(0x10, PCI_CARD_NORMAL, 3, 0, 1, 2);
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 0, 1, 2, 3);
|
||||
pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x01, PCI_CARD_AGPBRIDGE, 1, 2, 3, 4);
|
||||
|
||||
device_add(&sis_5600_device);
|
||||
device_add(&it8661f_device);
|
||||
device_add(&sst_flash_29ee020_device); /* assumed */
|
||||
device_add(&via_apro133a_device);
|
||||
device_add(&via_vt82c686b_device);
|
||||
device_add(&winbond_flash_w29c020_device);
|
||||
spd_register(SPD_TYPE_SDRAM, 0x7, 1024);
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
@@ -427,6 +427,79 @@ machine_at_optiplexgxl_init(const machine_t *model)
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
machine_at_morrison32_gpio_init(void)
|
||||
{
|
||||
uint32_t gpio = 0xffffe2ff;
|
||||
|
||||
/* Register 0x0079: */
|
||||
/* Bit 7: 0 = Clear password, 1 = Keep password. */
|
||||
/* Bit 6: 0 = NVRAM cleared by jumper, 1 = NVRAM normal. */
|
||||
/* Bit 5: 0 = CMOS Setup disabled, 1 = CMOS Setup enabled. */
|
||||
/* Bit 4: External CPU clock (Switch 8). */
|
||||
/* Bit 3: External CPU clock (Switch 7). */
|
||||
/* 50 MHz: Switch 7 = Off, Switch 8 = Off. */
|
||||
/* 60 MHz: Switch 7 = On, Switch 8 = Off. */
|
||||
/* 66 MHz: Switch 7 = Off, Switch 8 = On. */
|
||||
/* Bit 2: 0 = No onboard audio, 1 = Onboard audio present. */
|
||||
/* Bit 1: 0 = Soft Off capable power supply, 1 = Standard power supply. */
|
||||
/* Bit 0: 2x multiplier, 1 = 1.5x multiplier (Switch 6). */
|
||||
/* NOTE: A bit is read as 1 if switch is off, and as 0 if switch is on. */
|
||||
if (cpu_busspeed <= 50000000)
|
||||
gpio |= 0xffff00ff;
|
||||
else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000))
|
||||
gpio |= 0xffff08ff;
|
||||
else if (cpu_busspeed > 60000000)
|
||||
gpio |= 0xffff10ff;
|
||||
|
||||
if (cpu_dmulti <= 1.5)
|
||||
gpio |= 0xffff01ff;
|
||||
else
|
||||
gpio |= 0xffff00ff;
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL)
|
||||
gpio |= 0xffff04ff;
|
||||
|
||||
machine_set_gpio_default(gpio);
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_morrison32_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear_combined("roms/machines/morrison32/1011BT0L.BIO",
|
||||
"roms/machines/morrison32/1011BT0L.BI1",
|
||||
0x20000, 128);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
machine_at_morrison32_gpio_init();
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0);
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
|
||||
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
device_add(machine_get_vid_device(machine));
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL)
|
||||
machine_snd = device_add(machine_get_snd_device(machine));
|
||||
|
||||
device_add(&i430fx_device);
|
||||
device_add(&piix_device);
|
||||
device_add_params(&pc87306_device, (void *) PCX730X_AMI);
|
||||
device_add(&intel_flash_bxt_ami_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Some stuff taken from Monaco */
|
||||
static void
|
||||
machine_at_morrison64_gpio_init(void)
|
||||
@@ -798,6 +871,9 @@ machine_at_powermatev_init(const machine_t *model)
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL)
|
||||
machine_snd = device_add(machine_get_snd_device(machine));
|
||||
|
||||
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
||||
device_add(&i430fx_device);
|
||||
device_add(&piix_device);
|
||||
|
||||
@@ -143,6 +143,77 @@ machine_at_p65up5_cp55t2d_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
machine_at_rubyusb_gpio_init(void)
|
||||
{
|
||||
uint32_t gpio = 0xffffe3ff;
|
||||
|
||||
/* Register 0x0079: */
|
||||
/* Bit 7: 0 = Clear password, 1 = Keep password. */
|
||||
/* Bit 6: 0 = NVRAM cleared by jumper, 1 = NVRAM normal. */
|
||||
/* Bit 5: 0 = CMOS Setup disabled, 1 = CMOS Setup enabled. */
|
||||
/* Bit 4: External CPU clock (Switch 8). */
|
||||
/* Bit 3: External CPU clock (Switch 7). */
|
||||
/* 50 MHz: Switch 7 = Off, Switch 8 = Off. */
|
||||
/* 60 MHz: Switch 7 = On, Switch 8 = Off. */
|
||||
/* 66 MHz: Switch 7 = Off, Switch 8 = On. */
|
||||
/* Bit 2: 0 = On-board audio absent, 1 = On-board audio present. */
|
||||
/* Bit 1: 0 = Soft-off capable power supply present, 1 = Soft-off capable power supply absent. */
|
||||
/* Bit 0: 0 = Reserved. */
|
||||
/* NOTE: A bit is read as 1 if switch is off, and as 0 if switch is on. */
|
||||
if (cpu_busspeed <= 50000000)
|
||||
gpio |= 0xffff10ff;
|
||||
else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000))
|
||||
gpio |= 0xffff18ff;
|
||||
else if (cpu_busspeed > 60000000)
|
||||
gpio |= 0xffff00ff;
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL)
|
||||
gpio |= 0xffff04ff;
|
||||
|
||||
machine_set_gpio_default(gpio);
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_rubyusb_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear_combined2("roms/machines/rubyusb/1005DL0L.BIO",
|
||||
"roms/machines/rubyusb/1005DL0L.BI1",
|
||||
"roms/machines/rubyusb/1005DL0L.BI2",
|
||||
"roms/machines/rubyusb/1005DL0L.BI3",
|
||||
"roms/machines/rubyusb/1005DL0L.RCV",
|
||||
/*NULL,*/
|
||||
0x3a000, 128);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
machine_at_rubyusb_gpio_init();
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0);
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
|
||||
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
device_add(machine_get_vid_device(machine));
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL)
|
||||
machine_snd = device_add(machine_get_snd_device(machine));
|
||||
|
||||
device_add(&i430hx_device);
|
||||
device_add(&piix3_device);
|
||||
device_add_params(&pc87306_device, (void *) PCX730X_AMI);
|
||||
device_add(&intel_flash_bxt_ami_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t cu430hx_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
|
||||
@@ -157,6 +157,77 @@ machine_at_exp8551_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
machine_at_hpholly_gpio_init(void)
|
||||
{
|
||||
uint32_t gpio = 0xffffe2ff;
|
||||
|
||||
/* Register 0x0079: */
|
||||
/* Bit 7: 0 = Clear password, 1 = Keep password. */
|
||||
/* Bit 6: 0 = NVRAM cleared by jumper, 1 = NVRAM normal. */
|
||||
/* Bit 5: 0 = CMOS Setup disabled, 1 = CMOS Setup enabled. */
|
||||
/* Bit 4: External CPU clock (Switch 8). */
|
||||
/* Bit 3: External CPU clock (Switch 7). */
|
||||
/* 50 MHz: Switch 7 = Off, Switch 8 = Off. */
|
||||
/* 60 MHz: Switch 7 = On, Switch 8 = Off. */
|
||||
/* 66 MHz: Switch 7 = Off, Switch 8 = On. */
|
||||
/* Bit 2: 0 = 2.5x multiplier, 1 = 1.5x/2x multiplier. */
|
||||
/* Bit 1: 0 = Soft Off capable power supply, 1 = Standard power supply. */
|
||||
/* Bit 0: 2x multiplier, 1 = 1.5x multiplier (Switch 6). */
|
||||
/* NOTE: A bit is read as 1 if switch is off, and as 0 if switch is on. */
|
||||
if (cpu_busspeed <= 50000000)
|
||||
gpio |= 0xffff00ff;
|
||||
else if ((cpu_busspeed > 50000000) && (cpu_busspeed <= 60000000))
|
||||
gpio |= 0xffff08ff;
|
||||
else if (cpu_busspeed > 60000000)
|
||||
gpio |= 0xffff10ff;
|
||||
|
||||
if (cpu_dmulti <= 1.5)
|
||||
gpio |= 0xffff0500;
|
||||
else if ((cpu_dmulti > 1.5) && (cpu_dmulti <= 2.0))
|
||||
gpio |= 0xffff0400;
|
||||
else
|
||||
gpio |= 0xffff0000;
|
||||
|
||||
machine_set_gpio_default(gpio);
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_hpholly_init(const machine_t *model) /* HP Pavilion Holly, 7070/7090/5100/7100 */
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear_combined("roms/machines/hpholly/1005CA2L.BIO",
|
||||
"roms/machines/hpholly/1005CA2L.BI1",
|
||||
0x20000, 128);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
machine_at_hpholly_gpio_init();
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0);
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
|
||||
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
device_add(machine_get_vid_device(machine));
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL)
|
||||
machine_snd = device_add(machine_get_snd_device(machine));
|
||||
|
||||
device_add(&i430fx_device);
|
||||
device_add(&piix_device);
|
||||
device_add_params(&pc87306_device, (void *) PCX730X_AMI);
|
||||
device_add(&intel_flash_bxt_ami_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
machine_at_vectra52_gpio_init(void)
|
||||
{
|
||||
@@ -1525,6 +1596,37 @@ machine_at_ap5s_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_fm562_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = bios_load_linear("roms/machines/fm562/PR11_US.ROM",
|
||||
0x000e0000, 131072, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1 | FLAG_TRC_CONTROLS_CPURST);
|
||||
pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 1, 2, 3, 4);
|
||||
pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 3, 2, 4);
|
||||
pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 1, 3, 4);
|
||||
pci_register_slot(0x0B, PCI_CARD_VIDEO, 0, 0, 0, 0); /* Onboard video */
|
||||
|
||||
if (sound_card_current[0] == SOUND_INTERNAL)
|
||||
machine_snd = device_add(machine_get_snd_device(machine));
|
||||
|
||||
device_add(&sis_5511_device);
|
||||
device_add_params(machine_get_kbc_device(machine), (void *) model->kbc_params);
|
||||
device_add_params(&fdc37c669_device, (void *) 0);
|
||||
device_add(&intel_flash_bxt_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int
|
||||
machine_at_pc140_6260_init(const machine_t *model)
|
||||
{
|
||||
@@ -1556,17 +1658,72 @@ machine_at_pc140_6260_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t ms5124_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "ms5124",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = { { 0 } },
|
||||
.bios = {
|
||||
{
|
||||
.name = "AMI WinBIOS (101094) - Revision AG77",
|
||||
.internal_name = "ms5124",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/ms5124/AG77.ROM", "" }
|
||||
},
|
||||
{
|
||||
.name = "Award Modular BIOS v4.51PG - Revision WG72P",
|
||||
.internal_name = "ms5124_451pg",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 131072,
|
||||
.files = { "roms/machines/ms5124/WG72P.BIN", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
}
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t ms5124_device = {
|
||||
.name = "MSI MS-5124",
|
||||
.internal_name = "ms5124_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = ms5124_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_at_ms5124_init(const machine_t *model)
|
||||
{
|
||||
int ret;
|
||||
int ret = 0;
|
||||
const char *fn;
|
||||
|
||||
ret = bios_load_linear("roms/machines/ms5124/AG77.ROM",
|
||||
0x000e0000, 131072, 0);
|
||||
|
||||
if (bios_only || !ret)
|
||||
/* No ROMs available */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
fn = device_get_bios_file(machine_get_device(machine), device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000e0000, 131072, 0);
|
||||
device_context_restore();
|
||||
|
||||
machine_at_common_init_ex(model, 2);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1 | FLAG_TRC_CONTROLS_CPURST);
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include <86box/serial.h>
|
||||
#include <86box/sio.h>
|
||||
#include <86box/ibm_5161.h>
|
||||
#include <86box/isartc.h>
|
||||
#include <86box/keyboard.h>
|
||||
#include <86box/rom.h>
|
||||
#include <86box/machine.h>
|
||||
@@ -45,9 +46,6 @@
|
||||
#include <86box/port_6x.h>
|
||||
#include <86box/video.h>
|
||||
|
||||
extern const device_t vendex_xt_rtc_onboard_device;
|
||||
extern const device_t rtc58167_device;
|
||||
|
||||
/* 8088 */
|
||||
static void
|
||||
machine_xt_common_init(const machine_t *model, int fixed_floppy)
|
||||
@@ -1251,7 +1249,7 @@ static const device_config_t pc500_config[] = {
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "Disabled", .value = -1 },
|
||||
{ .description = "Enabled", .value = 2 },
|
||||
{ .description = "IRQ 2", .value = 2 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
@@ -1371,7 +1369,7 @@ static const device_config_t pc500plus_config[] = {
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "Disabled", .value = -1 },
|
||||
{ .description = "Enabled", .value = 2 },
|
||||
{ .description = "IRQ 2", .value = 2 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
@@ -1704,6 +1702,106 @@ machine_xt_pcxt_init(const machine_t *model)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t to16_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
.name = "bios",
|
||||
.description = "BIOS Version",
|
||||
.type = CONFIG_BIOS,
|
||||
.default_string = "to16",
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.bios = {
|
||||
{
|
||||
.name = "1.03",
|
||||
.internal_name = "to16",
|
||||
.bios_type = BIOS_NORMAL,
|
||||
.files_no = 1,
|
||||
.local = 0,
|
||||
.size = 32768,
|
||||
.files = { "roms/machines/to16/TO16_103.bin", "" }
|
||||
},
|
||||
{ .files_no = 0 }
|
||||
},
|
||||
},
|
||||
{
|
||||
.name = "rtc_port",
|
||||
.description = "Onboard RTC",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = 0,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "Not installed", .value = 0 },
|
||||
{ .description = "RTC0", .value = 0x300 },
|
||||
{ .description = "RTC1", .value = 0x2c0 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{
|
||||
.name = "rtc_irq",
|
||||
.description = "RTC IRQ",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = NULL,
|
||||
.default_int = -1,
|
||||
.file_filter = NULL,
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
{ .description = "Disabled", .value = -1 },
|
||||
{ .description = "IRQ 2", .value = 2 },
|
||||
{ .description = "" }
|
||||
},
|
||||
.bios = { { 0 } }
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
const device_t to16_device = {
|
||||
.name = "Thomson TO16",
|
||||
.internal_name = "to16_device",
|
||||
.flags = 0,
|
||||
.local = 0,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
.available = NULL,
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = to16_config
|
||||
};
|
||||
|
||||
int
|
||||
machine_xt_to16_init(const machine_t *model)
|
||||
{
|
||||
int ret = 0;
|
||||
int rtc_port = 0;
|
||||
const char *fn;
|
||||
|
||||
/* No ROMs available. */
|
||||
if (!device_available(model->device))
|
||||
return ret;
|
||||
|
||||
device_context(model->device);
|
||||
rtc_port = machine_get_config_int("rtc_port");
|
||||
fn = device_get_bios_file(model->device, device_get_config_bios("bios"), 0);
|
||||
ret = bios_load_linear(fn, 0x000f8000, 32768, 0);
|
||||
device_context_restore();
|
||||
|
||||
if (bios_only || !ret)
|
||||
return ret;
|
||||
|
||||
machine_xt_clone_init(model, 0);
|
||||
|
||||
if (rtc_port != 0)
|
||||
device_add(&rtc58167_device);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const device_config_t vendex_config[] = {
|
||||
// clang-format off
|
||||
{
|
||||
|
||||
@@ -1784,6 +1784,49 @@ const machine_t machines[] = {
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[8088] Thomson TO16",
|
||||
.internal_name = "to16",
|
||||
.type = MACHINE_TYPE_8088,
|
||||
.chipset = MACHINE_CHIPSET_DISCRETE,
|
||||
.init = machine_xt_to16_init,
|
||||
.p1_handler = NULL,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_8088,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 0,
|
||||
.max_bus = 0,
|
||||
.min_voltage = 0,
|
||||
.max_voltage = 0,
|
||||
.min_multi = 0,
|
||||
.max_multi = 0
|
||||
},
|
||||
.bus_flags = MACHINE_PC,
|
||||
.flags = MACHINE_FLAGS_NONE,
|
||||
.ram = {
|
||||
.min = 64,
|
||||
.max = 768,
|
||||
.step = 64
|
||||
},
|
||||
.nvrmask = 0,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = &kbc_xtclone_device,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0xff,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &to16_device,
|
||||
.kbd_device = &keyboard_pc_xt_device,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[8088] Toshiba T1000",
|
||||
.internal_name = "t1000",
|
||||
@@ -12431,6 +12474,52 @@ const machine_t machines[] = {
|
||||
.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 . */
|
||||
{
|
||||
.name = "[i430FX] HP Pavilion 50x0/70xx (Morrison32)",
|
||||
.internal_name = "morrison32",
|
||||
.type = MACHINE_TYPE_SOCKET5,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430FX,
|
||||
.init = machine_at_morrison32_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86),
|
||||
.min_bus = 50000000,
|
||||
.max_bus = 66666667,
|
||||
.min_voltage = 3380,
|
||||
.max_voltage = 3520,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.default_jumpered_ecp_dma = 3,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio32_onboard_pci_device,
|
||||
.snd_device = &cs4232_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[i430FX] IBM PC 3x0 (type 65x6) (Morrison64)",
|
||||
.internal_name = "pc330_65x6",
|
||||
@@ -12545,7 +12634,7 @@ const machine_t machines[] = {
|
||||
.max_multi = 2.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_SOUND | MACHINE_GAMEPORT,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
@@ -12564,7 +12653,7 @@ const machine_t machines[] = {
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.snd_device = &opti_82c930_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has AMIKey Z(!) KBC firmware. */
|
||||
@@ -13333,7 +13422,53 @@ const machine_t machines[] = {
|
||||
.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 . */
|
||||
{
|
||||
.name = "[i430FX] HP Pavilion 51xx/7070/7090/71xx (Holly)",
|
||||
.internal_name = "hpholly",
|
||||
.type = MACHINE_TYPE_SOCKET7_3V,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430FX,
|
||||
.init = machine_at_hpholly_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_Cx6x86),
|
||||
.min_bus = 50000000,
|
||||
.max_bus = 66666667,
|
||||
.min_voltage = 3380,
|
||||
.max_voltage = 3520,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 2.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 131072,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.default_jumpered_ecp_dma = 3,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio64vplus_onboard_pci_device,
|
||||
.snd_device = &cs4232_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
{
|
||||
.name = "[i430FX] HP Vectra 500 Series xxx/MT",
|
||||
.internal_name = "vectra500mt",
|
||||
.type = MACHINE_TYPE_SOCKET7_3V,
|
||||
@@ -13361,7 +13496,7 @@ const machine_t machines[] = {
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 511,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
@@ -13369,7 +13504,7 @@ const machine_t machines[] = {
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_phoenix_trio64_onboard_pci_device,
|
||||
@@ -13404,7 +13539,7 @@ const machine_t machines[] = {
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
@@ -13412,7 +13547,7 @@ const machine_t machines[] = {
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &vectra52_device,
|
||||
.kbd_device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &gd5436_onboard_pci_device,
|
||||
@@ -14188,6 +14323,50 @@ const machine_t machines[] = {
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has AMIKey H KBC firmware (AMIKey-2). */
|
||||
{
|
||||
.name = "[SiS 5511] HP Pavilion 52xx/53xx/71xx/72xx (BCM FM562)",
|
||||
.internal_name = "fm562",
|
||||
.type = MACHINE_TYPE_SOCKET7_3V,
|
||||
.chipset = MACHINE_CHIPSET_SIS_5511,
|
||||
.init = machine_at_fm562_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK(CPU_Cx6x86, CPU_Cx6x86L, CPU_Cx6x86MX),
|
||||
.min_bus = 50000000,
|
||||
.max_bus = 66666667,
|
||||
.min_voltage = 3380,
|
||||
.max_voltage = 3520,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 2.5
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_APM, /* Machine has internal sound: Crystal CS4232-KQ, and video: SiS 6205 (not yet emulated) */
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 524288,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 127,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = &kbc_at_device,
|
||||
.kbc_params = KBC_VEN_AMI | 0x00004800,
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = &cs4232_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has an SMC FDC37C669QF Super I/O. */
|
||||
{
|
||||
.name = "[SiS 5511] IBM PC 140 (type 6260)",
|
||||
@@ -14268,7 +14447,7 @@ const machine_t machines[] = {
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.device = &ms5124_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
@@ -14593,6 +14772,53 @@ const machine_t machines[] = {
|
||||
.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 . */
|
||||
{
|
||||
.name = "[i430HX] HP Pavilion 73xx/74xx (Ruby USB)",
|
||||
.internal_name = "rubyusb",
|
||||
.type = MACHINE_TYPE_SOCKET7,
|
||||
.chipset = MACHINE_CHIPSET_INTEL_430HX,
|
||||
.init = machine_at_rubyusb_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET5_7,
|
||||
.block = CPU_BLOCK(CPU_K5, CPU_5K86, CPU_K6, CPU_K6_2, CPU_K6_2C, CPU_K6_3, CPU_K6_2P,
|
||||
CPU_K6_3P, CPU_Cx6x86, CPU_Cx6x86MX, CPU_Cx6x86L),
|
||||
.min_bus = 50000000,
|
||||
.max_bus = 66666667,
|
||||
.min_voltage = 2800,
|
||||
.max_voltage = 3520,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 3.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_PCI | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_VIDEO | MACHINE_SOUND | MACHINE_GAMEPORT | MACHINE_APM | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 524288,
|
||||
.step = 4096
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = MACHINE_DMA_DISABLED | MACHINE_DMA_1 | MACHINE_DMA_3,
|
||||
.default_jumpered_ecp_dma = 3,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x000044f0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = &s3_virge_325_onboard_pci_device,
|
||||
.snd_device = &ymf701_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* OEM-only Intel CU430HX, has AMI MegaKey KBC firmware on the PC87306 Super I/O chip. */
|
||||
{
|
||||
.name = "[i430HX] Intel CU430HX (Cumberland)",
|
||||
@@ -17117,7 +17343,7 @@ const machine_t machines[] = {
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 524288,
|
||||
.max = 262144,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 127,
|
||||
@@ -18810,6 +19036,8 @@ const machine_t machines[] = {
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
|
||||
/* VIA Apollo Pro 133 */
|
||||
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
|
||||
firmware. */
|
||||
{
|
||||
@@ -18855,6 +19083,53 @@ const machine_t machines[] = {
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
|
||||
firmware. */
|
||||
{
|
||||
.name = "[VIA Apollo Pro 133] MSI MS-6199VA",
|
||||
.internal_name = "ms6199va",
|
||||
.type = MACHINE_TYPE_SLOT1,
|
||||
.chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133,
|
||||
.init = machine_at_ms6199va_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SLOT1,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 66666667,
|
||||
.max_bus = 155000000,
|
||||
.min_voltage = 1300,
|
||||
.max_voltage = 3500,
|
||||
.min_multi = 1.5,
|
||||
.max_multi = 8.0
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_AGP | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_SOUND | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 8192,
|
||||
.max = 1572864,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &ms6199va_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = &es1373_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
|
||||
/* VIA Apollo Pro 133A */
|
||||
/* Has a Winbond W83977EF Super I/O chip with on-chip KBC with AMIKey-2 KBC
|
||||
firmware. */
|
||||
{
|
||||
@@ -19778,6 +20053,96 @@ const machine_t machines[] = {
|
||||
.snd_device = &cmi8738_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has the VIA VT82C686B southbridge with on-chip KBC identical to the VIA
|
||||
VT82C42N. */
|
||||
{
|
||||
.name = "[VIA Apollo Pro 133A] MSI MS-6318",
|
||||
.internal_name = "ms6318",
|
||||
.type = MACHINE_TYPE_SOCKET370,
|
||||
.chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A,
|
||||
.init = machine_at_ms6318_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET370,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 66666667,
|
||||
.max_bus = 150000000,
|
||||
.min_voltage = 1300,
|
||||
.max_voltage = 3500,
|
||||
.min_multi = MACHINE_MULTIPLIER_FIXED,
|
||||
.max_multi = MACHINE_MULTIPLIER_FIXED
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_A97 | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_AG | MACHINE_APM | MACHINE_ACPI | MACHINE_GAMEPORT | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 16384,
|
||||
.max = 2097152,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = &ms6318_device,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = &ct5880_onboard_device,
|
||||
.net_device = NULL
|
||||
},
|
||||
/* Has the VIA VT82C686B southbridge with on-chip KBC identical to the VIA
|
||||
VT82C42N. */
|
||||
{
|
||||
.name = "[VIA Apollo Pro 133A] Samsung CAIRO-5 (MSI MS-6309)",
|
||||
.internal_name = "cairo5",
|
||||
.type = MACHINE_TYPE_SOCKET370,
|
||||
.chipset = MACHINE_CHIPSET_VIA_APOLLO_PRO_133A,
|
||||
.init = machine_at_cairo5_init,
|
||||
.p1_handler = machine_generic_p1_handler,
|
||||
.gpio_handler = NULL,
|
||||
.available_flag = MACHINE_AVAILABLE,
|
||||
.gpio_acpi_handler = NULL,
|
||||
.cpu = {
|
||||
.package = CPU_PKG_SOCKET370,
|
||||
.block = CPU_BLOCK_NONE,
|
||||
.min_bus = 66666667,
|
||||
.max_bus = 150000000,
|
||||
.min_voltage = 1300,
|
||||
.max_voltage = 3500,
|
||||
.min_multi = MACHINE_MULTIPLIER_FIXED,
|
||||
.max_multi = MACHINE_MULTIPLIER_FIXED
|
||||
},
|
||||
.bus_flags = MACHINE_PS2_A97 | MACHINE_BUS_USB,
|
||||
.flags = MACHINE_IDE_DUAL | MACHINE_APM | MACHINE_ACPI | MACHINE_USB,
|
||||
.ram = {
|
||||
.min = 16384,
|
||||
.max = 3145728,
|
||||
.step = 8192
|
||||
},
|
||||
.nvrmask = 255,
|
||||
.jumpered_ecp_dma = 0,
|
||||
.default_jumpered_ecp_dma = -1,
|
||||
.kbc_device = NULL,
|
||||
.kbc_params = 0x00000000,
|
||||
.kbc_p1 = 0x00000cf0,
|
||||
.gpio = 0xffffffff,
|
||||
.gpio_acpi = 0xffffffff,
|
||||
.device = NULL,
|
||||
.kbd_device = NULL,
|
||||
.fdc_device = NULL,
|
||||
.sio_device = NULL,
|
||||
.vid_device = NULL,
|
||||
.snd_device = NULL,
|
||||
.net_device = NULL
|
||||
},
|
||||
|
||||
/* Miscellaneous/Fake/Hypervisor machines */
|
||||
/* Has a Winbond W83977F Super I/O chip with on-chip KBC with AMIKey-2 KBC
|
||||
|
||||
@@ -34,8 +34,17 @@ l80225_mii_readw(uint16_t *regs, uint16_t addr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Readonly mask for MDI (PHY) registers */
|
||||
static const uint16_t tulip_mdi_mask[] = {
|
||||
0x0000, 0xffff, 0xffff, 0xffff, 0xc01f, 0xffff, 0xffff, 0x0000,
|
||||
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
0x0fff, 0x0000, 0xffff, 0xffff, 0x0000, 0xffff, 0xffff, 0xffff,
|
||||
0xffff, 0xffff, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
|
||||
|
||||
};
|
||||
|
||||
void
|
||||
l80225_mii_writew(uint16_t *regs, uint16_t addr, uint16_t val)
|
||||
{
|
||||
regs[addr] = val;
|
||||
regs[addr] = val & tulip_mdi_mask[addr];
|
||||
}
|
||||
|
||||
@@ -346,10 +346,10 @@ static void
|
||||
tulip_desc_read(TULIPState *s, uint32_t p,
|
||||
struct tulip_descriptor *desc)
|
||||
{
|
||||
desc->status = mem_readl_phys(p);
|
||||
desc->control = mem_readl_phys(p + 4);
|
||||
desc->buf_addr1 = mem_readl_phys(p + 8);
|
||||
desc->buf_addr2 = mem_readl_phys(p + 12);
|
||||
dma_bm_read(p , (uint8_t *) &(desc->status) , 4, 4);
|
||||
dma_bm_read(p + 4, (uint8_t *) &(desc->control) , 4, 4);
|
||||
dma_bm_read(p + 8, (uint8_t *) &(desc->buf_addr1), 4, 4);
|
||||
dma_bm_read(p + 12, (uint8_t *) &(desc->buf_addr2), 4, 4);
|
||||
|
||||
if (s->csr[0] & CSR0_DBO) {
|
||||
bswap32s(&desc->status);
|
||||
@@ -364,15 +364,20 @@ tulip_desc_write(TULIPState *s, uint32_t p,
|
||||
struct tulip_descriptor *desc)
|
||||
{
|
||||
if (s->csr[0] & CSR0_DBO) {
|
||||
mem_writel_phys(p, bswap32(desc->status));
|
||||
mem_writel_phys(p + 4, bswap32(desc->control));
|
||||
mem_writel_phys(p + 8, bswap32(desc->buf_addr1));
|
||||
mem_writel_phys(p + 12, bswap32(desc->buf_addr2));
|
||||
uint32_t status = bswap32(desc->status);
|
||||
uint32_t control = bswap32(desc->control);
|
||||
uint32_t buf_addr1 = bswap32(desc->buf_addr1);
|
||||
uint32_t buf_addr2 = bswap32(desc->buf_addr2);
|
||||
|
||||
dma_bm_write(p , (uint8_t *) &status , 4, 4);
|
||||
dma_bm_write(p + 4, (uint8_t *) &control , 4, 4);
|
||||
dma_bm_write(p + 8, (uint8_t *) &buf_addr1, 4, 4);
|
||||
dma_bm_write(p + 12, (uint8_t *) &buf_addr2, 4, 4);
|
||||
} else {
|
||||
mem_writel_phys(p, desc->status);
|
||||
mem_writel_phys(p + 4, desc->control);
|
||||
mem_writel_phys(p + 8, desc->buf_addr1);
|
||||
mem_writel_phys(p + 12, desc->buf_addr2);
|
||||
dma_bm_write(p , (uint8_t *) &(desc->status) , 4, 4);
|
||||
dma_bm_write(p + 4, (uint8_t *) &(desc->control) , 4, 4);
|
||||
dma_bm_write(p + 8, (uint8_t *) &(desc->buf_addr1), 4, 4);
|
||||
dma_bm_write(p + 12, (uint8_t *) &(desc->buf_addr2), 4, 4);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -433,6 +438,10 @@ tulip_copy_rx_bytes(TULIPState *s, struct tulip_descriptor *desc)
|
||||
len = s->rx_frame_len;
|
||||
}
|
||||
|
||||
if (s->rx_frame_len + len > sizeof(s->rx_frame)) {
|
||||
return;
|
||||
}
|
||||
|
||||
dma_bm_write(desc->buf_addr1, s->rx_frame + (s->rx_frame_size - s->rx_frame_len), len, 4);
|
||||
s->rx_frame_len -= len;
|
||||
}
|
||||
@@ -444,6 +453,10 @@ tulip_copy_rx_bytes(TULIPState *s, struct tulip_descriptor *desc)
|
||||
len = s->rx_frame_len;
|
||||
}
|
||||
|
||||
if (s->rx_frame_len + len > sizeof(s->rx_frame)) {
|
||||
return;
|
||||
}
|
||||
|
||||
dma_bm_write(desc->buf_addr2, s->rx_frame + (s->rx_frame_size - s->rx_frame_len), len, 4);
|
||||
s->rx_frame_len -= len;
|
||||
}
|
||||
@@ -452,9 +465,7 @@ tulip_copy_rx_bytes(TULIPState *s, struct tulip_descriptor *desc)
|
||||
static bool
|
||||
tulip_filter_address(TULIPState *s, const uint8_t *addr)
|
||||
{
|
||||
#ifdef BLOCK_BROADCAST
|
||||
static const char broadcast[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
#endif
|
||||
bool ret = false;
|
||||
|
||||
for (uint8_t i = 0; i < 16 && ret == false; i++) {
|
||||
@@ -463,15 +474,9 @@ tulip_filter_address(TULIPState *s, const uint8_t *addr)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Do not block broadcast packets - needed for connections to the guest
|
||||
to succeed when using SLiRP.
|
||||
*/
|
||||
#ifdef BLOCK_BROADCAST
|
||||
if (!memcmp(addr, broadcast, ETH_ALEN)) {
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (s->csr[6] & (CSR6_PR | CSR6_RA)) {
|
||||
/* Promiscuous mode enabled */
|
||||
@@ -576,7 +581,7 @@ static const uint16_t tulip_mdi_default[] = {
|
||||
0x0600,
|
||||
0x0001,
|
||||
0x0000,
|
||||
0x0000,
|
||||
0x3b40,
|
||||
0x0000,
|
||||
0x0000,
|
||||
0x0000,
|
||||
|
||||
@@ -1,112 +1,112 @@
|
||||
static std::unordered_map<uint8_t, uint16_t> be_keycodes = {
|
||||
{B_F1_KEY, 0x3b},
|
||||
{B_F2_KEY, 0x3c},
|
||||
{B_F3_KEY, 0x3d},
|
||||
{B_F4_KEY, 0x3e},
|
||||
{B_F5_KEY, 0x3f},
|
||||
{B_F6_KEY, 0x40},
|
||||
{B_F7_KEY, 0x41},
|
||||
{B_F8_KEY, 0x42},
|
||||
{B_F9_KEY, 0x43},
|
||||
{B_F10_KEY, 0x44},
|
||||
{B_F11_KEY, 0x57},
|
||||
{B_F12_KEY, 0x58},
|
||||
{B_PRINT_KEY, 0x137},
|
||||
{B_SCROLL_KEY, 0x46},
|
||||
{B_PAUSE_KEY, 0x145},
|
||||
{B_KATAKANA_HIRAGANA, 0x70},
|
||||
{B_HANKAKU_ZENKAKU, 0x76},
|
||||
{ B_F1_KEY, 0x3b },
|
||||
{ B_F2_KEY, 0x3c },
|
||||
{ B_F3_KEY, 0x3d },
|
||||
{ B_F4_KEY, 0x3e },
|
||||
{ B_F5_KEY, 0x3f },
|
||||
{ B_F6_KEY, 0x40 },
|
||||
{ B_F7_KEY, 0x41 },
|
||||
{ B_F8_KEY, 0x42 },
|
||||
{ B_F9_KEY, 0x43 },
|
||||
{ B_F10_KEY, 0x44 },
|
||||
{ B_F11_KEY, 0x57 },
|
||||
{ B_F12_KEY, 0x58 },
|
||||
{ B_PRINT_KEY, 0x137 },
|
||||
{ B_SCROLL_KEY, 0x46 },
|
||||
{ B_PAUSE_KEY, 0x145 },
|
||||
{ B_KATAKANA_HIRAGANA, 0x70 },
|
||||
{ B_HANKAKU_ZENKAKU, 0x76 },
|
||||
|
||||
{0x01, 0x01}, /* Escape */
|
||||
{0x11, 0x29},
|
||||
{0x12, 0x02},
|
||||
{0x13, 0x03},
|
||||
{0x14, 0x04},
|
||||
{0x15, 0x05},
|
||||
{0x16, 0x06},
|
||||
{0x17, 0x07},
|
||||
{0x18, 0x08},
|
||||
{0x19, 0x09},
|
||||
{0x1a, 0x0a},
|
||||
{0x1b, 0x0b},
|
||||
{0x1c, 0x0c},
|
||||
{0x1d, 0x0d},
|
||||
{0x1e, 0x0e}, /* Backspace */
|
||||
{0x1f, 0x152}, /* Insert */
|
||||
{0x20, 0x147}, /* Home */
|
||||
{0x21, 0x149}, /* Page Up */
|
||||
{0x22, 0x45},
|
||||
{0x23, 0x135},
|
||||
{0x24, 0x37},
|
||||
{0x25, 0x4a},
|
||||
{0x26, 0x0f}, /* Tab */
|
||||
{0x27, 0x10},
|
||||
{0x28, 0x11},
|
||||
{0x29, 0x12},
|
||||
{0x2a, 0x13},
|
||||
{0x2b, 0x14},
|
||||
{0x2c, 0x15},
|
||||
{0x2d, 0x16},
|
||||
{0x2e, 0x17},
|
||||
{0x2f, 0x18},
|
||||
{0x30, 0x19},
|
||||
{0x31, 0x1a},
|
||||
{0x32, 0x1b},
|
||||
{0x33, 0x2b},
|
||||
{0x34, 0x153}, /* Delete */
|
||||
{0x35, 0x14f}, /* End */
|
||||
{0x36, 0x151}, /* Page Down */
|
||||
{0x37, 0x47},
|
||||
{0x38, 0x48},
|
||||
{0x39, 0x49},
|
||||
{0x3a, 0x4e},
|
||||
{0x3b, 0x3a},
|
||||
{0x3c, 0x1e},
|
||||
{0x3d, 0x1f},
|
||||
{0x3e, 0x20},
|
||||
{0x3f, 0x21},
|
||||
{0x40, 0x22},
|
||||
{0x41, 0x23},
|
||||
{0x42, 0x24},
|
||||
{0x43, 0x25},
|
||||
{0x44, 0x26},
|
||||
{0x45, 0x27},
|
||||
{0x46, 0x28},
|
||||
{0x47, 0x1c}, /* Enter */
|
||||
{0x48, 0x4b},
|
||||
{0x49, 0x4c},
|
||||
{0x4a, 0x4d},
|
||||
{0x4b, 0x2a},
|
||||
{0x4c, 0x2c},
|
||||
{0x4d, 0x2d},
|
||||
{0x4e, 0x2e},
|
||||
{0x4f, 0x2f},
|
||||
{0x50, 0x30},
|
||||
{0x51, 0x31},
|
||||
{0x52, 0x32},
|
||||
{0x53, 0x33},
|
||||
{0x54, 0x34},
|
||||
{0x55, 0x35},
|
||||
{0x56, 0x36},
|
||||
{0x57, 0x148}, /* up arrow */
|
||||
{0x58, 0x51},
|
||||
{0x59, 0x50},
|
||||
{0x5a, 0x4f},
|
||||
{0x5b, 0x11c},
|
||||
{0x5c, 0x1d},
|
||||
{0x5d, 0x38},
|
||||
{0x5e, 0x39}, /* space bar */
|
||||
{0x5f, 0x138},
|
||||
{0x60, 0x11d},
|
||||
{0x61, 0x14b}, /* left arrow */
|
||||
{0x62, 0x150}, /* down arrow */
|
||||
{0x63, 0x14d}, /* right arrow */
|
||||
{0x64, 0x52},
|
||||
{0x65, 0x53},
|
||||
{0x66, 0x15b},
|
||||
{0x67, 0x15c},
|
||||
{0x68, 0x15d},
|
||||
{0x69, 0x56},
|
||||
{0x7e, 0x137}, /* System Request */
|
||||
{0x7f, 0x145}, /* Break */
|
||||
{ 0x01, 0x01 }, /* Escape */
|
||||
{ 0x11, 0x29 },
|
||||
{ 0x12, 0x02 },
|
||||
{ 0x13, 0x03 },
|
||||
{ 0x14, 0x04 },
|
||||
{ 0x15, 0x05 },
|
||||
{ 0x16, 0x06 },
|
||||
{ 0x17, 0x07 },
|
||||
{ 0x18, 0x08 },
|
||||
{ 0x19, 0x09 },
|
||||
{ 0x1a, 0x0a },
|
||||
{ 0x1b, 0x0b },
|
||||
{ 0x1c, 0x0c },
|
||||
{ 0x1d, 0x0d },
|
||||
{ 0x1e, 0x0e }, /* Backspace */
|
||||
{ 0x1f, 0x152 }, /* Insert */
|
||||
{ 0x20, 0x147 }, /* Home */
|
||||
{ 0x21, 0x149 }, /* Page Up */
|
||||
{ 0x22, 0x45 },
|
||||
{ 0x23, 0x135 },
|
||||
{ 0x24, 0x37 },
|
||||
{ 0x25, 0x4a },
|
||||
{ 0x26, 0x0f }, /* Tab */
|
||||
{ 0x27, 0x10 },
|
||||
{ 0x28, 0x11 },
|
||||
{ 0x29, 0x12 },
|
||||
{ 0x2a, 0x13 },
|
||||
{ 0x2b, 0x14 },
|
||||
{ 0x2c, 0x15 },
|
||||
{ 0x2d, 0x16 },
|
||||
{ 0x2e, 0x17 },
|
||||
{ 0x2f, 0x18 },
|
||||
{ 0x30, 0x19 },
|
||||
{ 0x31, 0x1a },
|
||||
{ 0x32, 0x1b },
|
||||
{ 0x33, 0x2b },
|
||||
{ 0x34, 0x153 }, /* Delete */
|
||||
{ 0x35, 0x14f }, /* End */
|
||||
{ 0x36, 0x151 }, /* Page Down */
|
||||
{ 0x37, 0x47 },
|
||||
{ 0x38, 0x48 },
|
||||
{ 0x39, 0x49 },
|
||||
{ 0x3a, 0x4e },
|
||||
{ 0x3b, 0x3a },
|
||||
{ 0x3c, 0x1e },
|
||||
{ 0x3d, 0x1f },
|
||||
{ 0x3e, 0x20 },
|
||||
{ 0x3f, 0x21 },
|
||||
{ 0x40, 0x22 },
|
||||
{ 0x41, 0x23 },
|
||||
{ 0x42, 0x24 },
|
||||
{ 0x43, 0x25 },
|
||||
{ 0x44, 0x26 },
|
||||
{ 0x45, 0x27 },
|
||||
{ 0x46, 0x28 },
|
||||
{ 0x47, 0x1c }, /* Enter */
|
||||
{ 0x48, 0x4b },
|
||||
{ 0x49, 0x4c },
|
||||
{ 0x4a, 0x4d },
|
||||
{ 0x4b, 0x2a },
|
||||
{ 0x4c, 0x2c },
|
||||
{ 0x4d, 0x2d },
|
||||
{ 0x4e, 0x2e },
|
||||
{ 0x4f, 0x2f },
|
||||
{ 0x50, 0x30 },
|
||||
{ 0x51, 0x31 },
|
||||
{ 0x52, 0x32 },
|
||||
{ 0x53, 0x33 },
|
||||
{ 0x54, 0x34 },
|
||||
{ 0x55, 0x35 },
|
||||
{ 0x56, 0x36 },
|
||||
{ 0x57, 0x148 }, /* up arrow */
|
||||
{ 0x58, 0x51 },
|
||||
{ 0x59, 0x50 },
|
||||
{ 0x5a, 0x4f },
|
||||
{ 0x5b, 0x11c },
|
||||
{ 0x5c, 0x1d },
|
||||
{ 0x5d, 0x38 },
|
||||
{ 0x5e, 0x39 }, /* space bar */
|
||||
{ 0x5f, 0x138 },
|
||||
{ 0x60, 0x11d },
|
||||
{ 0x61, 0x14b }, /* left arrow */
|
||||
{ 0x62, 0x150 }, /* down arrow */
|
||||
{ 0x63, 0x14d }, /* right arrow */
|
||||
{ 0x64, 0x52 },
|
||||
{ 0x65, 0x53 },
|
||||
{ 0x66, 0x15b },
|
||||
{ 0x67, 0x15c },
|
||||
{ 0x68, 0x15d },
|
||||
{ 0x69, 0x56 },
|
||||
{ 0x7e, 0x137 }, /* System Request */
|
||||
{ 0x7f, 0x145 }, /* Break */
|
||||
};
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
static std::array<uint32_t, 127> cocoa_keycodes = { /* key names in parentheses are not declared by Apple headers */
|
||||
static std::array<uint32_t, 127> cocoa_keycodes = {
|
||||
/* key names in parentheses are not declared by Apple headers */
|
||||
0x1e, /* ANSI_A */
|
||||
0x1f, /* ANSI_S */
|
||||
0x20, /* ANSI_D */
|
||||
@@ -66,9 +67,9 @@ static std::array<uint32_t, 127> cocoa_keycodes = { /* key names in parentheses
|
||||
0x5e, /* F17 => F14 */
|
||||
0x53, /* ANSI_KeypadDecimal */
|
||||
0,
|
||||
0x37, /* ANSI_KeypadMultiply */
|
||||
0x37, /* ANSI_KeypadMultiply */
|
||||
0,
|
||||
0x4e, /* ANSI_KeypadPlus */
|
||||
0x4e, /* ANSI_KeypadPlus */
|
||||
0,
|
||||
0x45, /* ANSI_KeypadClear => Num Lock (location equivalent) */
|
||||
0x130, /* VolumeUp */
|
||||
|
||||
@@ -16,132 +16,132 @@
|
||||
#include <QtDebug>
|
||||
|
||||
static std::unordered_map<uint32_t, uint16_t> evdev_keycodes = {
|
||||
{184, 0x46}, /* F14 => Scroll Lock (for Apple keyboards) */
|
||||
{86, 0x56}, /* 102ND */
|
||||
{87, 0x57}, /* F11 */
|
||||
{88, 0x58}, /* F12 */
|
||||
{186, 0x5d}, /* F16 => F13 */
|
||||
{187, 0x5e}, /* F17 => F14 */
|
||||
{188, 0x5f}, /* F18 => F15 */
|
||||
{ 184, 0x46 }, /* F14 => Scroll Lock (for Apple keyboards) */
|
||||
{ 86, 0x56 }, /* 102ND */
|
||||
{ 87, 0x57 }, /* F11 */
|
||||
{ 88, 0x58 }, /* F12 */
|
||||
{ 186, 0x5d }, /* F16 => F13 */
|
||||
{ 187, 0x5e }, /* F17 => F14 */
|
||||
{ 188, 0x5f }, /* F18 => F15 */
|
||||
|
||||
/* Japanese keys. */
|
||||
{95, 0x5c}, /* KPJPCOMMA */
|
||||
{93, 0x70}, /* KATAKANAHIRAGANA */
|
||||
{89, 0x73}, /* RO */
|
||||
{85, 0x76}, /* ZENKAKUHANKAKU */
|
||||
{91, 0x77}, /* HIRAGANA */
|
||||
{90, 0x78}, /* KATAKANA */
|
||||
{92, 0x79}, /* HENKAN */
|
||||
{94, 0x7b}, /* MUHENKAN */
|
||||
{124, 0x7d}, /* YEN */
|
||||
{121, 0x7e}, /* KPCOMMA */
|
||||
{ 95, 0x5c }, /* KPJPCOMMA */
|
||||
{ 93, 0x70 }, /* KATAKANAHIRAGANA */
|
||||
{ 89, 0x73 }, /* RO */
|
||||
{ 85, 0x76 }, /* ZENKAKUHANKAKU */
|
||||
{ 91, 0x77 }, /* HIRAGANA */
|
||||
{ 90, 0x78 }, /* KATAKANA */
|
||||
{ 92, 0x79 }, /* HENKAN */
|
||||
{ 94, 0x7b }, /* MUHENKAN */
|
||||
{ 124, 0x7d }, /* YEN */
|
||||
{ 121, 0x7e }, /* KPCOMMA */
|
||||
|
||||
/* Korean keys. */
|
||||
{123, 0xf1}, /* HANJA */
|
||||
{122, 0xf2}, /* HANGUL */
|
||||
{ 123, 0xf1 }, /* HANJA */
|
||||
{ 122, 0xf2 }, /* HANGUL */
|
||||
|
||||
{96, 0x11c}, /* KPENTER */
|
||||
{97, 0x11d}, /* RIGHTCTRL */
|
||||
{98, 0x135}, /* KPSLASH */
|
||||
{99, 0x137}, /* SYSRQ */
|
||||
{183, 0x137}, /* F13 => SysRq (for Apple keyboards) */
|
||||
{100, 0x138}, /* RIGHTALT */
|
||||
{119, 0x145}, /* PAUSE */
|
||||
{411, 0x145}, /* BREAK */
|
||||
{185, 0x145}, /* F15 => Pause (for Apple keyboards) */
|
||||
{102, 0x147}, /* HOME */
|
||||
{103, 0x148}, /* UP */
|
||||
{104, 0x149}, /* PAGEUP */
|
||||
{105, 0x14b}, /* LEFT */
|
||||
{106, 0x14d}, /* RIGHT */
|
||||
{107, 0x14f}, /* END */
|
||||
{108, 0x150}, /* DOWN */
|
||||
{109, 0x151}, /* PAGEDOWN */
|
||||
{110, 0x152}, /* INSERT */
|
||||
{111, 0x153}, /* DELETE */
|
||||
{ 96, 0x11c }, /* KPENTER */
|
||||
{ 97, 0x11d }, /* RIGHTCTRL */
|
||||
{ 98, 0x135 }, /* KPSLASH */
|
||||
{ 99, 0x137 }, /* SYSRQ */
|
||||
{ 183, 0x137 }, /* F13 => SysRq (for Apple keyboards) */
|
||||
{ 100, 0x138 }, /* RIGHTALT */
|
||||
{ 119, 0x145 }, /* PAUSE */
|
||||
{ 411, 0x145 }, /* BREAK */
|
||||
{ 185, 0x145 }, /* F15 => Pause (for Apple keyboards) */
|
||||
{ 102, 0x147 }, /* HOME */
|
||||
{ 103, 0x148 }, /* UP */
|
||||
{ 104, 0x149 }, /* PAGEUP */
|
||||
{ 105, 0x14b }, /* LEFT */
|
||||
{ 106, 0x14d }, /* RIGHT */
|
||||
{ 107, 0x14f }, /* END */
|
||||
{ 108, 0x150 }, /* DOWN */
|
||||
{ 109, 0x151 }, /* PAGEDOWN */
|
||||
{ 110, 0x152 }, /* INSERT */
|
||||
{ 111, 0x153 }, /* DELETE */
|
||||
|
||||
{125, 0x15b}, /* LEFTMETA */
|
||||
{126, 0x15c}, /* RIGHTMETA */
|
||||
{127, 0x15d}, /* COMPOSE => Menu */
|
||||
{ 125, 0x15b }, /* LEFTMETA */
|
||||
{ 126, 0x15c }, /* RIGHTMETA */
|
||||
{ 127, 0x15d }, /* COMPOSE => Menu */
|
||||
|
||||
/* Multimedia keys. Guideline is to try and follow the Microsoft standard, then
|
||||
fill in remaining scancodes with OEM-specific keys for redundancy sake. Keys
|
||||
marked with # are not translated into evdev codes by the standard atkbd driver. */
|
||||
{634, 0x54}, /* SELECTIVE_SCREENSHOT# => Alt+SysRq */
|
||||
{117, 0x59}, /* KPEQUAL */
|
||||
{418, 0x6a}, /* ZOOMIN# => Logitech */
|
||||
{420, 0x6b}, /* ZOOMRESET# => Logitech */
|
||||
{223, 0x6d}, /* CANCEL# => Logitech */
|
||||
{132, 0x101}, /* # Logitech Task Select */
|
||||
{148, 0x102}, /* PROG1# => Samsung */
|
||||
{149, 0x103}, /* PROG2# => Samsung */
|
||||
{419, 0x104}, /* ZOOMOUT# => Logitech */
|
||||
{144, 0x105}, /* FILE# => Messenger/Files */
|
||||
{216, 0x105}, /* CHAT# => Messenger/Files */
|
||||
{430, 0x105}, /* MESSENGER# */
|
||||
{182, 0x107}, /* REDO# */
|
||||
{131, 0x108}, /* UNDO# */
|
||||
{135, 0x10a}, /* PASTE# */
|
||||
{177, 0x10b}, /* SCROLLUP# => normal speed */
|
||||
{165, 0x110}, /* PREVIOUSSONG */
|
||||
{136, 0x112}, /* FIND# => Logitech */
|
||||
{421, 0x113}, /* WORDPROCESSOR# => Word */
|
||||
{423, 0x114}, /* SPREADSHEET# => Excel */
|
||||
{397, 0x115}, /* CALENDAR# */
|
||||
{433, 0x116}, /* LOGOFF# */
|
||||
{137, 0x117}, /* CUT# */
|
||||
{133, 0x118}, /* COPY# */
|
||||
{163, 0x119}, /* NEXTSONG */
|
||||
{154, 0x11e}, /* CYCLEWINDOWS => Application Right (no left counterpart) */
|
||||
{113, 0x120}, /* MUTE */
|
||||
{140, 0x121}, /* CALC */
|
||||
{164, 0x122}, /* PLAYPAUSE */
|
||||
{432, 0x123}, /* SPELLCHECK# */
|
||||
{166, 0x124}, /* STOPCD */
|
||||
{139, 0x126}, /* MENU# => Shortcut/Menu/Help for a few OEMs */
|
||||
{114, 0x12e}, /* VOL- */
|
||||
{160, 0x12f}, /* CLOSECD# => Logitech Eject */
|
||||
{161, 0x12f}, /* EJECTCD# => Logitech */
|
||||
{162, 0x12f}, /* EJECTCLOSECD# => Logitech */
|
||||
{115, 0x130}, /* VOL+ */
|
||||
{150, 0x132}, /* WWW# */
|
||||
{172, 0x132}, /* HOMEPAGE */
|
||||
{138, 0x13b}, /* HELP# */
|
||||
{213, 0x13c}, /* SOUND# => My Music/Office Home */
|
||||
{360, 0x13c}, /* VENDOR# => My Music/Office Home */
|
||||
{204, 0x13d}, /* DASHBOARD# => Task Pane */
|
||||
{181, 0x13e}, /* NEW# */
|
||||
{134, 0x13f}, /* OPEN# */
|
||||
{206, 0x140}, /* CLOSE# */
|
||||
{232, 0x141}, /* REPLY# */
|
||||
{233, 0x142}, /* FORWARDMAIL# */
|
||||
{231, 0x143}, /* SEND# */
|
||||
{151, 0x144}, /* MSDOS# */
|
||||
{112, 0x14c}, /* MACRO */
|
||||
{179, 0x14c}, /* KPLEFTPAREN# */
|
||||
{118, 0x14e}, /* KPPLUSMINUS */
|
||||
{235, 0x155}, /* DOCUMENTS# => Logitech */
|
||||
{234, 0x157}, /* SAVE# */
|
||||
{210, 0x158}, /* PRINT# */
|
||||
{116, 0x15e}, /* POWER */
|
||||
{142, 0x15f}, /* SLEEP */
|
||||
{143, 0x163}, /* WAKEUP */
|
||||
{180, 0x164}, /* KPRIGHTPAREN# */
|
||||
{212, 0x164}, /* CAMERA# => My Pictures */
|
||||
{217, 0x165}, /* SEARCH */
|
||||
{156, 0x166}, /* BOOKMARKS => Favorites */
|
||||
{364, 0x166}, /* FAVORITES# */
|
||||
{173, 0x167}, /* REFRESH */
|
||||
{128, 0x168}, /* STOP */
|
||||
{159, 0x169}, /* FORWARD */
|
||||
{158, 0x16a}, /* BACK */
|
||||
{157, 0x16b}, /* COMPUTER */
|
||||
{155, 0x16c}, /* MAIL */
|
||||
{215, 0x16c}, /* EMAIL# */
|
||||
{226, 0x16d}, /* MEDIA */
|
||||
{167, 0x178}, /* RECORD# => Logitech */
|
||||
{152, 0x17a}, /* COFFEE/SCREENLOCK# */
|
||||
{178, 0x18b}, /* SCROLLDOWN# => normal speed */
|
||||
{ 634, 0x54 }, /* SELECTIVE_SCREENSHOT# => Alt+SysRq */
|
||||
{ 117, 0x59 }, /* KPEQUAL */
|
||||
{ 418, 0x6a }, /* ZOOMIN# => Logitech */
|
||||
{ 420, 0x6b }, /* ZOOMRESET# => Logitech */
|
||||
{ 223, 0x6d }, /* CANCEL# => Logitech */
|
||||
{ 132, 0x101 }, /* # Logitech Task Select */
|
||||
{ 148, 0x102 }, /* PROG1# => Samsung */
|
||||
{ 149, 0x103 }, /* PROG2# => Samsung */
|
||||
{ 419, 0x104 }, /* ZOOMOUT# => Logitech */
|
||||
{ 144, 0x105 }, /* FILE# => Messenger/Files */
|
||||
{ 216, 0x105 }, /* CHAT# => Messenger/Files */
|
||||
{ 430, 0x105 }, /* MESSENGER# */
|
||||
{ 182, 0x107 }, /* REDO# */
|
||||
{ 131, 0x108 }, /* UNDO# */
|
||||
{ 135, 0x10a }, /* PASTE# */
|
||||
{ 177, 0x10b }, /* SCROLLUP# => normal speed */
|
||||
{ 165, 0x110 }, /* PREVIOUSSONG */
|
||||
{ 136, 0x112 }, /* FIND# => Logitech */
|
||||
{ 421, 0x113 }, /* WORDPROCESSOR# => Word */
|
||||
{ 423, 0x114 }, /* SPREADSHEET# => Excel */
|
||||
{ 397, 0x115 }, /* CALENDAR# */
|
||||
{ 433, 0x116 }, /* LOGOFF# */
|
||||
{ 137, 0x117 }, /* CUT# */
|
||||
{ 133, 0x118 }, /* COPY# */
|
||||
{ 163, 0x119 }, /* NEXTSONG */
|
||||
{ 154, 0x11e }, /* CYCLEWINDOWS => Application Right (no left counterpart) */
|
||||
{ 113, 0x120 }, /* MUTE */
|
||||
{ 140, 0x121 }, /* CALC */
|
||||
{ 164, 0x122 }, /* PLAYPAUSE */
|
||||
{ 432, 0x123 }, /* SPELLCHECK# */
|
||||
{ 166, 0x124 }, /* STOPCD */
|
||||
{ 139, 0x126 }, /* MENU# => Shortcut/Menu/Help for a few OEMs */
|
||||
{ 114, 0x12e }, /* VOL- */
|
||||
{ 160, 0x12f }, /* CLOSECD# => Logitech Eject */
|
||||
{ 161, 0x12f }, /* EJECTCD# => Logitech */
|
||||
{ 162, 0x12f }, /* EJECTCLOSECD# => Logitech */
|
||||
{ 115, 0x130 }, /* VOL+ */
|
||||
{ 150, 0x132 }, /* WWW# */
|
||||
{ 172, 0x132 }, /* HOMEPAGE */
|
||||
{ 138, 0x13b }, /* HELP# */
|
||||
{ 213, 0x13c }, /* SOUND# => My Music/Office Home */
|
||||
{ 360, 0x13c }, /* VENDOR# => My Music/Office Home */
|
||||
{ 204, 0x13d }, /* DASHBOARD# => Task Pane */
|
||||
{ 181, 0x13e }, /* NEW# */
|
||||
{ 134, 0x13f }, /* OPEN# */
|
||||
{ 206, 0x140 }, /* CLOSE# */
|
||||
{ 232, 0x141 }, /* REPLY# */
|
||||
{ 233, 0x142 }, /* FORWARDMAIL# */
|
||||
{ 231, 0x143 }, /* SEND# */
|
||||
{ 151, 0x144 }, /* MSDOS# */
|
||||
{ 112, 0x14c }, /* MACRO */
|
||||
{ 179, 0x14c }, /* KPLEFTPAREN# */
|
||||
{ 118, 0x14e }, /* KPPLUSMINUS */
|
||||
{ 235, 0x155 }, /* DOCUMENTS# => Logitech */
|
||||
{ 234, 0x157 }, /* SAVE# */
|
||||
{ 210, 0x158 }, /* PRINT# */
|
||||
{ 116, 0x15e }, /* POWER */
|
||||
{ 142, 0x15f }, /* SLEEP */
|
||||
{ 143, 0x163 }, /* WAKEUP */
|
||||
{ 180, 0x164 }, /* KPRIGHTPAREN# */
|
||||
{ 212, 0x164 }, /* CAMERA# => My Pictures */
|
||||
{ 217, 0x165 }, /* SEARCH */
|
||||
{ 156, 0x166 }, /* BOOKMARKS => Favorites */
|
||||
{ 364, 0x166 }, /* FAVORITES# */
|
||||
{ 173, 0x167 }, /* REFRESH */
|
||||
{ 128, 0x168 }, /* STOP */
|
||||
{ 159, 0x169 }, /* FORWARD */
|
||||
{ 158, 0x16a }, /* BACK */
|
||||
{ 157, 0x16b }, /* COMPUTER */
|
||||
{ 155, 0x16c }, /* MAIL */
|
||||
{ 215, 0x16c }, /* EMAIL# */
|
||||
{ 226, 0x16d }, /* MEDIA */
|
||||
{ 167, 0x178 }, /* RECORD# => Logitech */
|
||||
{ 152, 0x17a }, /* COFFEE/SCREENLOCK# */
|
||||
{ 178, 0x18b }, /* SCROLLDOWN# => normal speed */
|
||||
};
|
||||
|
||||
uint16_t
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr ""
|
||||
msgid "&Folder..."
|
||||
msgstr ""
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr ""
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr ""
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr ""
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr ""
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr ""
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr ""
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr ""
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr ""
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr ""
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr ""
|
||||
msgid "POST card"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box"
|
||||
msgstr ""
|
||||
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
@@ -975,10 +942,10 @@ msgstr ""
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr ""
|
||||
|
||||
msgid "Thrustmaster Formula T1/T2 with Adaptor"
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr ""
|
||||
|
||||
msgid "Thrustmaster Formula T1/T2 without Adaptor"
|
||||
msgid "Thrustmaster Formula T1/T2 without adapter"
|
||||
msgstr ""
|
||||
|
||||
msgid "None"
|
||||
@@ -1050,10 +1017,7 @@ msgstr ""
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr ""
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
@@ -1404,7 +1368,7 @@ msgstr ""
|
||||
msgid "Storage"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr ""
|
||||
|
||||
msgid "No disks"
|
||||
@@ -1818,7 +1782,7 @@ msgstr ""
|
||||
msgid "I Copied It"
|
||||
msgstr ""
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr ""
|
||||
|
||||
msgid "No MCA devices."
|
||||
@@ -2232,12 +2196,6 @@ msgstr ""
|
||||
msgid "Surround module"
|
||||
msgstr ""
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr ""
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr ""
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr ""
|
||||
msgid "WSS DMA"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr ""
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr ""
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr ""
|
||||
|
||||
msgid "Classic"
|
||||
msgstr ""
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr ""
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr ""
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr ""
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr ""
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr ""
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr ""
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -214,7 +214,7 @@ msgid "Enable &Discord integration"
|
||||
msgstr "Povolit integraci s &Discordem"
|
||||
|
||||
msgid "Sound &gain..."
|
||||
msgstr "&Zesílení zvuku"
|
||||
msgstr "&Zesílení zvuku..."
|
||||
|
||||
msgid "Begin trace"
|
||||
msgstr "Začít trace"
|
||||
@@ -226,10 +226,10 @@ msgid "&Help"
|
||||
msgstr "Ná&pověda"
|
||||
|
||||
msgid "&Documentation..."
|
||||
msgstr "&Dokumentace"
|
||||
msgstr "&Dokumentace..."
|
||||
|
||||
msgid "&About 86Box..."
|
||||
msgstr "&O programu 86Box"
|
||||
msgstr "&O programu 86Box..."
|
||||
|
||||
msgid "&New image..."
|
||||
msgstr "&Nový obraz..."
|
||||
@@ -273,36 +273,6 @@ msgstr "Načíst znova předchozí obraz"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Složka..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "&Cílová snímková frekvence"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Synchronizovat s obrazem"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Zvolit shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Odebrat shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Předvolby"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "Zařízení ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Karta pro kódy POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Chyba"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Pokračováním se resetuje emulovaný počítač."
|
||||
msgid "Save"
|
||||
msgstr "Uložit"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "O programu 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "O programu %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Emulátor starých počítačů\n\nAutoři: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nS předchozími příspěvky od Sarah Walker, leilei, JohnElliott, greatpsycho a dalších.\n\nZveřejněno pod licencí GNU General Public License verze 2 nebo novější. Viz soubor LICENSE pro více informací."
|
||||
@@ -1258,7 +1222,7 @@ msgid "Directory does not exist"
|
||||
msgstr "Adresář neexistuje"
|
||||
|
||||
msgid "A new directory for the system will be created in the selected directory above"
|
||||
msgstr "Pro tento systém bude vytvořen nový adresář ve výše zvoleném adresáři."
|
||||
msgstr "Pro tento systém bude vytvořen nový adresář ve výše zvoleném adresáři"
|
||||
|
||||
msgid "System location:"
|
||||
msgstr "Umístění systému:"
|
||||
@@ -1312,7 +1276,7 @@ msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "Virtuální počítač \"%1\" (%2) bude naklonován do:"
|
||||
|
||||
msgid "Directory %1 already exists"
|
||||
msgstr "Adresář %1 již existuje."
|
||||
msgstr "Adresář %1 již existuje"
|
||||
|
||||
msgid "You cannot use the following characters in the name: %1"
|
||||
msgstr "V názvu nelze použít následující znaky: %1"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Systém"
|
||||
msgid "Storage"
|
||||
msgstr "Úložiště"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disk %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Žádné disky"
|
||||
@@ -1723,7 +1687,7 @@ msgid "Show non-&primary monitors"
|
||||
msgstr "Zobrazit neprimární monitory"
|
||||
|
||||
msgid "Open screenshots &folder..."
|
||||
msgstr "Otevřít složku se snímky obrazovky"
|
||||
msgstr "Otevřít složku se snímky obrazovky..."
|
||||
|
||||
msgid "Appl&y fullscreen stretch mode when maximized"
|
||||
msgstr "Použít režim roztá&hnutí při celé obrazovce pro maximalizované okno"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Přesunul jsem jej"
|
||||
msgid "I Copied It"
|
||||
msgstr "Zkopíroval jsem jej"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitor "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box Monitor %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Žádné zařízení MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Síla filtru SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Modul Surround"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Vyvolát přerušení CODEC při nastavení CODEC (potřebují některé ovladače)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Adresa SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ WSS"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA kanál WSS"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Povolit OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klasické"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Chyba GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Nebylo možné načíst shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Je vyžadováno OpenGL verze 3.0 nebo větší. Současná verze GLSL je %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Nebylo možné načíst texturu: %1"
|
||||
|
||||
@@ -2845,7 +2809,7 @@ msgid "Could not load file %1"
|
||||
msgstr "Nebylo možné načíst soubor %1"
|
||||
|
||||
msgid "Key Bindings:"
|
||||
msgstr "Nastavení kláves"
|
||||
msgstr "Nastavení kláves:"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Akce"
|
||||
@@ -2863,7 +2827,7 @@ msgid "Bind Key"
|
||||
msgstr "Nastavit klávesu"
|
||||
|
||||
msgid "Enter key combo:"
|
||||
msgstr "Zadejte kombinaci kláves"
|
||||
msgstr "Zadejte kombinaci kláves:"
|
||||
|
||||
msgid "Bind conflict"
|
||||
msgstr "Konflikt nastavení"
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Stisknout Ctrl+Alt+Esc"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Přepnout režim celé obrazovky"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Pořídit snímek obrazovky"
|
||||
|
||||
@@ -2914,7 +2881,7 @@ msgid "Hub Mode"
|
||||
msgstr "Režim hubu"
|
||||
|
||||
msgid "Hostname:"
|
||||
msgstr "Hostitelské jméno"
|
||||
msgstr "Hostitelské jméno:"
|
||||
|
||||
msgid "ISA RAM:"
|
||||
msgstr "ISA paměť RAM:"
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Voriges Abbild neu laden"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Verzeichnis..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Ziel&framerate"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Mit Videoausgabe synchronisieren"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Shader auswählen..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Shader entfernen"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABugger-Gerät"
|
||||
msgid "POST card"
|
||||
msgstr "POST-Code-Karte"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
@@ -1030,7 +997,7 @@ msgid "&File"
|
||||
msgstr "&Datei"
|
||||
|
||||
msgid "&New machine..."
|
||||
msgstr "&Neue Maschine"
|
||||
msgstr "&Neue Maschine..."
|
||||
|
||||
msgid "&Check for updates..."
|
||||
msgstr "&Auf Aktualisierungen prüfen..."
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Dies wird zu einem Kaltstart des emulierten Systems führen."
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Über 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Über %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Ein Emulator für alte Computer\n\nAutoren: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne sowie andere.\n\nMit früheren Kernbeiträgen von Sarah Walker, leilei, JohnElliott, greatpsycho sowie andere.\n\nÜbersetzt von: dob205\n\nVeröffentlicht unter der GNU General Public License in der Version 2 oder neuer. Siehe LICENSE für mehr Informationen."
|
||||
@@ -1186,7 +1150,7 @@ msgid "VMs: %1"
|
||||
msgstr ""
|
||||
|
||||
msgid "System Directory:"
|
||||
msgstr "Systemverzeichnis"
|
||||
msgstr "Systemverzeichnis:"
|
||||
|
||||
msgid "Choose directory"
|
||||
msgstr "Verzeichnis auswählen"
|
||||
@@ -1216,7 +1180,7 @@ msgid "Introduction"
|
||||
msgstr "Einleitung"
|
||||
|
||||
msgid "This will help you add a new system to 86Box."
|
||||
msgstr "Hilft dir ein neues System zu 86Box hinzuzufügen"
|
||||
msgstr "Hilft dir ein neues System zu 86Box hinzuzufügen."
|
||||
|
||||
msgid "New configuration"
|
||||
msgstr "Neue Konfiguration"
|
||||
@@ -1288,19 +1252,19 @@ msgid "Enter the new display name (blank to reset)"
|
||||
msgstr "Gebe den neuen Anzeigenamen ein (leer lassen zum Zurücksetzen)"
|
||||
|
||||
msgid "Change &display name..."
|
||||
msgstr "&Anzeigename ändern"
|
||||
msgstr "&Anzeigename ändern..."
|
||||
|
||||
msgid "Context Menu"
|
||||
msgstr "Kontextmenü"
|
||||
|
||||
msgid "&Open folder..."
|
||||
msgstr "&Ordner öffnen"
|
||||
msgstr "&Ordner öffnen..."
|
||||
|
||||
msgid "Open p&rinter tray..."
|
||||
msgstr "D&ruckerausgabe öffnen..."
|
||||
|
||||
msgid "Set &icon..."
|
||||
msgstr "&Symbol setzen"
|
||||
msgstr "&Symbol setzen..."
|
||||
|
||||
msgid "Select an icon"
|
||||
msgstr "Wähle ein Symbol aus"
|
||||
@@ -1404,7 +1368,7 @@ msgstr ""
|
||||
msgid "Storage"
|
||||
msgstr "Speicherplatz"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr ""
|
||||
|
||||
msgid "No disks"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Ich habe es verschoben"
|
||||
msgid "I Copied It"
|
||||
msgstr "Ich habe es kopiert"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box-Monitor #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box-Monitor #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Keine MCA-Geräte."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID-Filterstärke"
|
||||
msgid "Surround module"
|
||||
msgstr "Surround-Modul"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "CODEC-Interrupt bei CODEC-Einrichtung auslösen (wird von einigen Treibern benötigt)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "SB-Adresse"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS-IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS-DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "OPL einschalten"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (Stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klassisch"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSL-Fehler"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Shader konnte nicht geladen werden: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL-Version 3.0 oder höher ist erforderlich. Die aktuelle GLSL-Version ist %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Textur konnte nicht geladen werden: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Strg+Alt+Esc senden"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Vollbild umschalten"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Bildschirmaufnahme"
|
||||
|
||||
@@ -2926,7 +2893,7 @@ msgid "&Wipe NVRAM"
|
||||
msgstr "NVRAM leeren"
|
||||
|
||||
msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?"
|
||||
msgstr "Dadurch werden alle NVRAM-Dateien (und zugehörige Dateien) der virtuellen Maschine im Unterverzeichnis \"nvr\" werden gelöscht. Gegebenenfalls müssen die BIOS-Einstellungen (und möglicherweise auch die Einstellungen anderer Geräte innerhalb der VM) erneut konfiguriert werden. Möchtest du wirklich den gesamten NVRAM-Inhalt der virtuellen Maschine \"%1\" löschen?"
|
||||
msgstr "Dadurch werden alle NVRAM-Dateien (und zugehörige Dateien) der virtuellen Maschine im Unterverzeichnis \"nvr\" werden gelöscht. Gegebenenfalls müssen die BIOS-Einstellungen (und möglicherweise auch die Einstellungen anderer Geräte innerhalb der VM) erneut konfiguriert werden.\n\nMöchtest du wirklich den gesamten NVRAM-Inhalt der virtuellen Maschine \"%1\" löschen?"
|
||||
|
||||
msgid "Success"
|
||||
msgstr "Erfolgreich"
|
||||
@@ -2953,7 +2920,7 @@ msgid "Check for updates on startup"
|
||||
msgstr "Beim Programmstart auf Aktualisierungen prüfen"
|
||||
|
||||
msgid "Unable to determine release information"
|
||||
msgstr "Die Veröffentlichungsinformationen können nicht ermittelt werden."
|
||||
msgstr "Die Veröffentlichungsinformationen können nicht ermittelt werden"
|
||||
|
||||
msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later."
|
||||
msgstr "Bei der Prüfung auf Aktualisierungen trat ein Fehler auf:\n\n%1\n\nBitte versuche es später erneut."
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Recargar imagen previa"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Carpeta..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Objetivo de &tasa de refresco"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Sincronizar con vídeo"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Seleccionar shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Eliminar shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Preferencias"
|
||||
|
||||
@@ -478,7 +448,7 @@ msgid "MIDI In Device:"
|
||||
msgstr "Dispositivo MIDI de entrada:"
|
||||
|
||||
msgid "MIDI Out:"
|
||||
msgstr "Salida MIDI"
|
||||
msgstr "Salida MIDI:"
|
||||
|
||||
msgid "Standalone MPU-401"
|
||||
msgstr "MPU-401 independiente"
|
||||
@@ -687,9 +657,6 @@ msgstr "Dispositivo ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Tarjeta POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Error"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Se hará una reinicialización completa de la máquina emulada."
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Acerca de 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Acerca de %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Un emulador de ordenadores antigüos\n\nAutores: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, y otros.\n\nCon contribuciones anteriores de Sarah Walker, leilei, JohnElliott, greatpsycho y otros.\n\nLiberado bajo la GNU General Public License versión 2 o posterior. Ver LICENSE para más información."
|
||||
@@ -1306,7 +1270,7 @@ msgid "Select an icon"
|
||||
msgstr "Escoger un icono"
|
||||
|
||||
msgid "C&lone..."
|
||||
msgstr "C&lonar"
|
||||
msgstr "C&lonar..."
|
||||
|
||||
msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "La máquina virtual \"%1\" (%2) será clonada para:"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Sistema"
|
||||
msgid "Storage"
|
||||
msgstr "Almacenamiento"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disco"
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disco %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Sin disco"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "La he movido"
|
||||
msgid "I Copied It"
|
||||
msgstr "La he copiado"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "Monitor de 86Box "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Monitor de 86Box %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "No hay dispositovos MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Fuerza del filtro de SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Módulo Surround"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Activar la interrupción CODEC en la configuración CODEC (necesario para algunos controladores)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Dirección del SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ de WSS"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA de WSS"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Habilitar OPL"
|
||||
|
||||
@@ -2392,13 +2362,13 @@ msgid "EMS 2 Address"
|
||||
msgstr "Dirección de EMS 2"
|
||||
|
||||
msgid "EMS Memory Size"
|
||||
msgstr "Dirección de EMS"
|
||||
msgstr "Tamaño de memoria de EMS"
|
||||
|
||||
msgid "EMS 1 Memory Size"
|
||||
msgstr "Dirección de EMS 1"
|
||||
msgstr "Tamaño de memoria de EMS 1"
|
||||
|
||||
msgid "EMS 2 Memory Size"
|
||||
msgstr "Dirección de EMS 2"
|
||||
msgstr "Tamaño de memoria de EMS 2"
|
||||
|
||||
msgid "Enable EMS"
|
||||
msgstr "Habilitar EMS"
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (estéreo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Clásico"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Error de GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "No fué posible cargar el shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Se requiere la versión 3.0 o superior de OpenGL. La versión actual de GLSL es %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Error al cargar la textura: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Enviar Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Alternar pantalla completa"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Captura de pantalla"
|
||||
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Lataa edellinen levykuva uudelleen"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Kansio..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "&Kuvataajuustavoite"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Synkronisoi videoon"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 ruutua/s"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 ruutua/s"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 ruutua/s"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 ruutua/s"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 ruutua/s"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "Valitse varjostin&ohjelma..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Poista varjostinohjelma"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Sovellusasetukset"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABugger-laite"
|
||||
msgid "POST card"
|
||||
msgstr "POST-kortti"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Virhe"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Tämä käynnistää emuloidun tietokoneen uudelleen."
|
||||
msgid "Save"
|
||||
msgstr "Tallenna"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Tietoja 86Box:sta"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Tietoja %1:sta"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Vanhojen tietokoneiden emulaattori\n\nTekijät: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne ja muut.\n\nSisältää Sarah Walkerin, leilein, JohnElliottin, greatpsychon ja muiden aiemmat keskeiset työpanokset.\n\nJulkaistu GNU General Public License 2. version tai myöhemmän alaisena. Tarkempia tietoja LICENSE-tiedostossa."
|
||||
@@ -1264,7 +1228,7 @@ msgid "System location:"
|
||||
msgstr "Koneen sijainti:"
|
||||
|
||||
msgid "System name and location"
|
||||
msgstr "Koneen nimi ja sijainti:"
|
||||
msgstr "Koneen nimi ja sijainti"
|
||||
|
||||
msgid "Enter the name of the system and choose the location"
|
||||
msgstr "Anna koneen nimi ja valitse sijainti"
|
||||
@@ -1288,7 +1252,7 @@ msgid "Enter the new display name (blank to reset)"
|
||||
msgstr "Anna uusi näyttönimi tai poista se"
|
||||
|
||||
msgid "Change &display name..."
|
||||
msgstr "Vaihda &näyttönimi"
|
||||
msgstr "Vaihda &näyttönimi..."
|
||||
|
||||
msgid "Context Menu"
|
||||
msgstr "Kontekstivalikko"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Järjestelmä"
|
||||
msgid "Storage"
|
||||
msgstr "Tallennus"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Levy %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Levy %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Ei levyjä"
|
||||
@@ -1456,7 +1420,7 @@ msgid "Unable to write file"
|
||||
msgstr "Tiedostoa ei voitu kirjoittaa"
|
||||
|
||||
msgid "HDI or HDX images with a sector size other than 512 are not supported."
|
||||
msgstr "HDI- ja HDX-levykuvien ainoa tuettu sektorikoko on 512"
|
||||
msgstr "HDI- ja HDX-levykuvien ainoa tuettu sektorikoko on 512."
|
||||
|
||||
msgid "Disk image file already exists"
|
||||
msgstr "Levykuva on jo olemassa"
|
||||
@@ -1468,7 +1432,7 @@ msgid "Disk image created"
|
||||
msgstr "Levykuva luotu"
|
||||
|
||||
msgid "Make sure the file exists and is readable."
|
||||
msgstr "Varmista, että tiedosto on olemassa ja lukukelpoinen"
|
||||
msgstr "Varmista, että tiedosto on olemassa ja lukukelpoinen."
|
||||
|
||||
msgid "Make sure the file is being saved to a writable directory."
|
||||
msgstr "Varmista, että tiedoston tallennuskansioon pystyy kirjoittamaan."
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Siirsin sen"
|
||||
msgid "I Copied It"
|
||||
msgstr "Kopioin sen"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitor "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box Monitor %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Ei MCA-laitteita."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID-filtterin vahvuus"
|
||||
msgid "Surround module"
|
||||
msgstr "Surround-moduuli"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "CODEC-keskeytys CODEC-asennuksen yhteydessä (jotkut ohjaimet tarvitsevat sitä)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "SB-osoite"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS-IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS-DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 Mt"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klassinen"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 Kt"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSL-virhe"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Varjostinta %1 ei voitu ladata"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Vähintään OpenGL-versio 3.0 vaaditaan. Tämänhetkinen GLSL-versio on %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Tekstuuria ei voitu ladata: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Lähetä Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Koko näyttö"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Kuvakaappaus"
|
||||
|
||||
@@ -2983,7 +2950,7 @@ msgid "<b>Version %1</b> is now available."
|
||||
msgstr "<b>Versio %1</b> on nyt saatavilla."
|
||||
|
||||
msgid "You are currently running build <b>%1</b>."
|
||||
msgstr "Käytät käännöstä <b>%1</b>"
|
||||
msgstr "Käytät käännöstä <b>%1</b>."
|
||||
|
||||
msgid "<b>Build %1</b> is now available."
|
||||
msgstr "<b>Käännös %1</b> on nyt saatavilla."
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Recharger image précedente"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Dossier..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "&Taux de rafraîchissement cible"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Synchronisation avec la vidéo"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 images par seconde"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 images par seconde"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 images par seconde"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 images par seconde"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 images par seconde"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "Synchronisation &Verticale"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "Sé&lectionnez le shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "S&upprimer le shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Préférences"
|
||||
|
||||
@@ -328,64 +298,64 @@ msgid "&Default"
|
||||
msgstr "&Défaut"
|
||||
|
||||
msgid "Language:"
|
||||
msgstr "Langue:"
|
||||
msgstr "Langue :"
|
||||
|
||||
msgid "Gain"
|
||||
msgstr "Gain"
|
||||
|
||||
msgid "File name:"
|
||||
msgstr "Nom fichier:"
|
||||
msgstr "Nom fichier :"
|
||||
|
||||
msgid "Disk size:"
|
||||
msgstr "Taille disque:"
|
||||
msgstr "Taille disque :"
|
||||
|
||||
msgid "RPM mode:"
|
||||
msgstr "Mode RPM:"
|
||||
msgstr "Mode RPM :"
|
||||
|
||||
msgid "Progress:"
|
||||
msgstr "Progression:"
|
||||
msgstr "Progression :"
|
||||
|
||||
msgid "Width:"
|
||||
msgstr "Largeur:"
|
||||
msgstr "Largeur :"
|
||||
|
||||
msgid "Height:"
|
||||
msgstr "Hauteur:"
|
||||
msgstr "Hauteur :"
|
||||
|
||||
msgid "Lock to this size"
|
||||
msgstr "Verrouiller à cette taille"
|
||||
|
||||
msgid "Machine type:"
|
||||
msgstr "Type de machine:"
|
||||
msgstr "Type de machine :"
|
||||
|
||||
msgid "Machine:"
|
||||
msgstr "Machine:"
|
||||
msgstr "Machine :"
|
||||
|
||||
msgid "Configure"
|
||||
msgstr "Configurer"
|
||||
|
||||
msgid "CPU:"
|
||||
msgstr "Processeur:"
|
||||
msgstr "Processeur :"
|
||||
|
||||
msgid "CPU type:"
|
||||
msgstr "Type de processeur:"
|
||||
msgstr "Type de processeur :"
|
||||
|
||||
msgid "Speed:"
|
||||
msgstr "Vitesse:"
|
||||
msgstr "Vitesse :"
|
||||
|
||||
msgid "Frequency:"
|
||||
msgstr "Fréquence:"
|
||||
msgstr "Fréquence :"
|
||||
|
||||
msgid "FPU:"
|
||||
msgstr "FPU:"
|
||||
msgstr "FPU :"
|
||||
|
||||
msgid "Wait states:"
|
||||
msgstr "États d'attente:"
|
||||
msgstr "États d'attente :"
|
||||
|
||||
msgid "MB"
|
||||
msgstr "Mo"
|
||||
|
||||
msgid "Memory:"
|
||||
msgstr "Mémoire:"
|
||||
msgstr "Mémoire :"
|
||||
|
||||
msgid "Time synchronization"
|
||||
msgstr "Synchronisation du temps"
|
||||
@@ -412,10 +382,10 @@ msgid "Smaller frames (smoother)"
|
||||
msgstr "Blocs plus petits (plus fluide)"
|
||||
|
||||
msgid "Video:"
|
||||
msgstr "Vidéo:"
|
||||
msgstr "Vidéo :"
|
||||
|
||||
msgid "Video #2:"
|
||||
msgstr "Vidéo 2:"
|
||||
msgstr "Vidéo 2 :"
|
||||
|
||||
msgid "Voodoo 1 or 2 Graphics"
|
||||
msgstr "Graphique Voodoo 1 ou 2"
|
||||
@@ -430,22 +400,22 @@ msgid "IBM PS/55 Display Adapter Graphics"
|
||||
msgstr "Graphique du adaptateur IBM PS/55"
|
||||
|
||||
msgid "Keyboard:"
|
||||
msgstr "Clavier:"
|
||||
msgstr "Clavier :"
|
||||
|
||||
msgid "Keyboard"
|
||||
msgstr "Clavier"
|
||||
|
||||
msgid "Mouse:"
|
||||
msgstr "Souris:"
|
||||
msgstr "Souris :"
|
||||
|
||||
msgid "Mouse"
|
||||
msgstr "Souris"
|
||||
|
||||
msgid "Joystick:"
|
||||
msgstr "Manette:"
|
||||
msgstr "Manette :"
|
||||
|
||||
msgid "Joystick"
|
||||
msgstr "Joystick"
|
||||
msgstr "Manette"
|
||||
|
||||
msgid "Joystick 1..."
|
||||
msgstr "Manette 1..."
|
||||
@@ -460,25 +430,25 @@ msgid "Joystick 4..."
|
||||
msgstr "Manette 4..."
|
||||
|
||||
msgid "Sound card #1:"
|
||||
msgstr "Carte son 1:"
|
||||
msgstr "Carte son 1 :"
|
||||
|
||||
msgid "Sound card #2:"
|
||||
msgstr "Carte son 2:"
|
||||
msgstr "Carte son 2 :"
|
||||
|
||||
msgid "Sound card #3:"
|
||||
msgstr "Carte son 3:"
|
||||
msgstr "Carte son 3 :"
|
||||
|
||||
msgid "Sound card #4:"
|
||||
msgstr "Carte son 4:"
|
||||
msgstr "Carte son 4 :"
|
||||
|
||||
msgid "MIDI Out Device:"
|
||||
msgstr "Sortie MIDI:"
|
||||
msgstr "Sortie MIDI :"
|
||||
|
||||
msgid "MIDI In Device:"
|
||||
msgstr "Entrée MIDI:"
|
||||
msgstr "Entrée MIDI :"
|
||||
|
||||
msgid "MIDI Out:"
|
||||
msgstr "Sortie MIDI:"
|
||||
msgstr "Sortie MIDI :"
|
||||
|
||||
msgid "Standalone MPU-401"
|
||||
msgstr "MPU-401 autonome"
|
||||
@@ -496,31 +466,31 @@ msgid "YMFM (faster)"
|
||||
msgstr "YMFM (plus rapide)"
|
||||
|
||||
msgid "COM1 Device:"
|
||||
msgstr "Dispositif COM1:"
|
||||
msgstr "Dispositif COM1 :"
|
||||
|
||||
msgid "COM2 Device:"
|
||||
msgstr "Dispositif COM2:"
|
||||
msgstr "Dispositif COM2 :"
|
||||
|
||||
msgid "COM3 Device:"
|
||||
msgstr "Dispositif COM3:"
|
||||
msgstr "Dispositif COM3 :"
|
||||
|
||||
msgid "COM4 Device:"
|
||||
msgstr "Dispositif COM4:"
|
||||
msgstr "Dispositif COM4 :"
|
||||
|
||||
msgid "LPT1 Device:"
|
||||
msgstr "Dispositif LPT1:"
|
||||
msgstr "Dispositif LPT1 :"
|
||||
|
||||
msgid "LPT2 Device:"
|
||||
msgstr "Dispositif LPT2:"
|
||||
msgstr "Dispositif LPT2 :"
|
||||
|
||||
msgid "LPT3 Device:"
|
||||
msgstr "Dispositif LPT3:"
|
||||
msgstr "Dispositif LPT3 :"
|
||||
|
||||
msgid "LPT4 Device:"
|
||||
msgstr "Dispositif LPT4:"
|
||||
msgstr "Dispositif LPT4 :"
|
||||
|
||||
msgid "Internal LPT ECP DMA:"
|
||||
msgstr "DMA de l'ECP du LPT interne:"
|
||||
msgstr "DMA de l'ECP du LPT interne :"
|
||||
|
||||
msgid "Serial port 1"
|
||||
msgstr "Port série 1"
|
||||
@@ -547,10 +517,10 @@ msgid "Parallel port 4"
|
||||
msgstr "Port parallèle 4"
|
||||
|
||||
msgid "FD Controller:"
|
||||
msgstr "Contrôleur FD:"
|
||||
msgstr "Contrôleur FD :"
|
||||
|
||||
msgid "CD-ROM Controller:"
|
||||
msgstr "Contrôleur CD-ROM:"
|
||||
msgstr "Contrôleur CD-ROM :"
|
||||
|
||||
msgid "Tertiary IDE Controller"
|
||||
msgstr "Troisième contrôleur IDE"
|
||||
@@ -565,22 +535,22 @@ msgid "SCSI"
|
||||
msgstr "SCSI"
|
||||
|
||||
msgid "Controller 1:"
|
||||
msgstr "Contrôleur 1:"
|
||||
msgstr "Contrôleur 1 :"
|
||||
|
||||
msgid "Controller 2:"
|
||||
msgstr "Contrôleur 2:"
|
||||
msgstr "Contrôleur 2 :"
|
||||
|
||||
msgid "Controller 3:"
|
||||
msgstr "Contrôleur 3:"
|
||||
msgstr "Contrôleur 3 :"
|
||||
|
||||
msgid "Controller 4:"
|
||||
msgstr "Contrôleur 4:"
|
||||
msgstr "Contrôleur 4 :"
|
||||
|
||||
msgid "Cassette"
|
||||
msgstr "Cassette"
|
||||
|
||||
msgid "Hard disks:"
|
||||
msgstr "Disques durs:"
|
||||
msgstr "Disques durs :"
|
||||
|
||||
msgid "Firmware Version"
|
||||
msgstr "Version du micrologiciel"
|
||||
@@ -595,37 +565,37 @@ msgid "&Remove"
|
||||
msgstr "&Supprimer"
|
||||
|
||||
msgid "Bus:"
|
||||
msgstr "Bus:"
|
||||
msgstr "Bus :"
|
||||
|
||||
msgid "Channel:"
|
||||
msgstr "Canal:"
|
||||
msgstr "Canal :"
|
||||
|
||||
msgid "ID:"
|
||||
msgstr "ID:"
|
||||
msgstr "ID :"
|
||||
|
||||
msgid "Sectors:"
|
||||
msgstr "Secteurs:"
|
||||
msgstr "Secteurs :"
|
||||
|
||||
msgid "Heads:"
|
||||
msgstr "Têtes:"
|
||||
msgstr "Têtes :"
|
||||
|
||||
msgid "Cylinders:"
|
||||
msgstr "Cylindres:"
|
||||
msgstr "Cylindres :"
|
||||
|
||||
msgid "Size (MB):"
|
||||
msgstr "Taille (Mo):"
|
||||
msgstr "Taille (Mo) :"
|
||||
|
||||
msgid "Type:"
|
||||
msgstr "Type:"
|
||||
msgstr "Type :"
|
||||
|
||||
msgid "Image Format:"
|
||||
msgstr "Format Image:"
|
||||
msgstr "Format Image :"
|
||||
|
||||
msgid "Block Size:"
|
||||
msgstr "Taille du bloc:"
|
||||
msgstr "Taille du bloc :"
|
||||
|
||||
msgid "Floppy drives:"
|
||||
msgstr "Lecteurs de disquettes:"
|
||||
msgstr "Lecteurs de disquettes :"
|
||||
|
||||
msgid "Turbo timings"
|
||||
msgstr "Turbo"
|
||||
@@ -634,25 +604,25 @@ msgid "Check BPB"
|
||||
msgstr "Vérifier BPB"
|
||||
|
||||
msgid "CD-ROM drives:"
|
||||
msgstr "Lecteurs CD-ROM:"
|
||||
msgstr "Lecteurs CD-ROM :"
|
||||
|
||||
msgid "MO drives:"
|
||||
msgstr "Lecteurs magnéto-optiques:"
|
||||
msgstr "Lecteurs magnéto-optiques :"
|
||||
|
||||
msgid "MO:"
|
||||
msgstr "Magnéto-optiques:"
|
||||
msgstr "Magnéto-optiques :"
|
||||
|
||||
msgid "Removable disks:"
|
||||
msgstr "Disques amovibles:"
|
||||
msgstr "Disques amovibles :"
|
||||
|
||||
msgid "Removable disk drives:"
|
||||
msgstr "Lecteurs de disques amovibles:"
|
||||
msgstr "Lecteurs de disques amovibles :"
|
||||
|
||||
msgid "ZIP 250"
|
||||
msgstr "ZIP 250"
|
||||
|
||||
msgid "ISA RTC:"
|
||||
msgstr "Horloge temps réel ISA:"
|
||||
msgstr "Horloge temps réel ISA :"
|
||||
|
||||
msgid "ISA Memory Expansion"
|
||||
msgstr "Extension de la mémoire ISA"
|
||||
@@ -661,16 +631,16 @@ msgid "ISA ROM Cards"
|
||||
msgstr "Cartes ROM ISA"
|
||||
|
||||
msgid "Card 1:"
|
||||
msgstr "Carte 1:"
|
||||
msgstr "Carte 1 :"
|
||||
|
||||
msgid "Card 2:"
|
||||
msgstr "Carte 2:"
|
||||
msgstr "Carte 2 :"
|
||||
|
||||
msgid "Card 3:"
|
||||
msgstr "Carte 3:"
|
||||
msgstr "Carte 3 :"
|
||||
|
||||
msgid "Card 4:"
|
||||
msgstr "Carte 4:"
|
||||
msgstr "Carte 4 :"
|
||||
|
||||
msgid "Generic ISA ROM Board"
|
||||
msgstr "Carte ROM ISA générique"
|
||||
@@ -687,9 +657,6 @@ msgstr "Dispositif ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Carte POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
@@ -703,10 +670,10 @@ msgid "Speed"
|
||||
msgstr "Vitesse"
|
||||
|
||||
msgid "Removable disk %1 (%2): %3"
|
||||
msgstr "Disque amovible %1 (%2): %3"
|
||||
msgstr "Disque amovible %1 (%2) : %3"
|
||||
|
||||
msgid "&Removable disk %1 (%2): %3"
|
||||
msgstr "&Disque amovible %1 (%2): %3"
|
||||
msgstr "&Disque amovible %1 (%2) : %3"
|
||||
|
||||
msgid "Removable disk images"
|
||||
msgstr "Imges de disque amovible"
|
||||
@@ -715,7 +682,7 @@ msgid "Image %1"
|
||||
msgstr "Image %1"
|
||||
|
||||
msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory."
|
||||
msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, <a href=\"https://github.com/86Box/roms/releases/latest\">téléchargez</a> un ensemble ROM et extrayez-le dans le répertoire \"roms\"."
|
||||
msgstr "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, <a href=\"https://github.com/86Box/roms/releases/latest\">téléchargez</a> un ensemble ROM et extrayez-le dans le répertoire « roms »."
|
||||
|
||||
msgid "(empty)"
|
||||
msgstr "(vide)"
|
||||
@@ -742,16 +709,16 @@ msgid "Surface images"
|
||||
msgstr "Images de la surface"
|
||||
|
||||
msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."
|
||||
msgstr "La machine \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible."
|
||||
msgstr "La machine « %hs » n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/machines. Basculer vers une machine disponible."
|
||||
|
||||
msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card."
|
||||
msgstr "La carte vidéo \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Basculer vers une carte vidéo disponible."
|
||||
msgstr "La carte vidéo « %hs » n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Basculer vers une carte vidéo disponible."
|
||||
|
||||
msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Disabling the second video card."
|
||||
msgstr "La carte vidéo 2 \"%hs\" n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Désactiver la deuxième carte vidéo."
|
||||
msgstr "La carte vidéo 2 « %hs » n'est pas disponible en raison de l'absence de ROMs dans le répertoire roms/video. Désactiver la deuxième carte vidéo."
|
||||
|
||||
msgid "Device \"%hs\" is not available due to missing ROMs. Ignoring the device."
|
||||
msgstr "Le dispositif \"%hs\" n'est pas disponible en raison de l'absence de ROMs. Ignorer le dispositif."
|
||||
msgstr "Le dispositif « %hs » n'est pas disponible en raison de l'absence de ROMs. Ignorer le dispositif."
|
||||
|
||||
msgid "Machine"
|
||||
msgstr "Machine"
|
||||
@@ -775,10 +742,10 @@ msgid "Ports"
|
||||
msgstr "Ports"
|
||||
|
||||
msgid "Serial ports:"
|
||||
msgstr "Ports série:"
|
||||
msgstr "Ports série :"
|
||||
|
||||
msgid "Parallel ports:"
|
||||
msgstr "Ports parallèles:"
|
||||
msgstr "Ports parallèles :"
|
||||
|
||||
msgid "Storage controllers"
|
||||
msgstr "Contrôleurs de stockage"
|
||||
@@ -787,13 +754,13 @@ msgid "Hard disks"
|
||||
msgstr "Disques durs"
|
||||
|
||||
msgid "Disks:"
|
||||
msgstr "Disques:"
|
||||
msgstr "Disques :"
|
||||
|
||||
msgid "Floppy:"
|
||||
msgstr "Disquettes:"
|
||||
msgstr "Disquettes :"
|
||||
|
||||
msgid "Controllers:"
|
||||
msgstr "Contrôleurs:"
|
||||
msgstr "Contrôleurs :"
|
||||
|
||||
msgid "Floppy & CD-ROM drives"
|
||||
msgstr "Lecteurs de disquette et CD-ROM"
|
||||
@@ -985,13 +952,13 @@ msgid "None"
|
||||
msgstr "Aucun"
|
||||
|
||||
msgid "%1 MB (CHS: %2, %3, %4)"
|
||||
msgstr "%1 Mo (CTS: %2, %3, %4)"
|
||||
msgstr "%1 Mo (CTS : %2, %3, %4)"
|
||||
|
||||
msgid "Floppy %1 (%2): %3"
|
||||
msgstr "Disquette %1 (%2): %3"
|
||||
msgstr "Disquette %1 (%2) : %3"
|
||||
|
||||
msgid "&Floppy %1 (%2): %3"
|
||||
msgstr "&Disquette %1 (%2): %3"
|
||||
msgstr "&Disquette %1 (%2) : %3"
|
||||
|
||||
msgid "Advanced sector images"
|
||||
msgstr "Images secteur avancé"
|
||||
@@ -1000,10 +967,10 @@ msgid "Flux images"
|
||||
msgstr "Images Flux"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?"
|
||||
msgstr "Etes-vous sûr de vouloir réinitialiser la machine émulée ?"
|
||||
|
||||
msgid "Are you sure you want to exit 86Box?"
|
||||
msgstr "Etes-vous sûr de vouloir quitter 86Box?"
|
||||
msgstr "Etes-vous sûr de vouloir quitter 86Box ?"
|
||||
|
||||
msgid "Unable to initialize Ghostscript"
|
||||
msgstr "Impossible d'initialiser Ghostscript"
|
||||
@@ -1012,16 +979,16 @@ msgid "Unable to initialize GhostPCL"
|
||||
msgstr "Impossible d'initialiser GhostPCL"
|
||||
|
||||
msgid "MO %1 (%2): %3"
|
||||
msgstr "Magnéto-optique %1 (%2): %3"
|
||||
msgstr "Magnéto-optique %1 (%2) : %3"
|
||||
|
||||
msgid "&MO %1 (%2): %3"
|
||||
msgstr "&Magnéto-optique %1 (%2): %3"
|
||||
msgstr "&Magnéto-optique %1 (%2) : %3"
|
||||
|
||||
msgid "MO images"
|
||||
msgstr "Images magnéto-optiques"
|
||||
|
||||
msgid "Welcome to 86Box!"
|
||||
msgstr "Bienvenue dans 86Box !"
|
||||
msgstr "Bienvenue dans 86Box !"
|
||||
|
||||
msgid "Internal device"
|
||||
msgstr "Dispositif interne"
|
||||
@@ -1042,7 +1009,7 @@ msgid "No ROMs found"
|
||||
msgstr "Pas de ROMs trouvées"
|
||||
|
||||
msgid "Do you want to save the settings?"
|
||||
msgstr "Voulez-vous sauvegarder les paramètres ?"
|
||||
msgstr "Voulez-vous sauvegarder les paramètres ?"
|
||||
|
||||
msgid "This will hard reset the emulated machine."
|
||||
msgstr "Cela entraînera la réinitialisation complète de la machine émulée."
|
||||
@@ -1050,14 +1017,11 @@ msgstr "Cela entraînera la réinitialisation complète de la machine émulée."
|
||||
msgid "Save"
|
||||
msgstr "Sauvegarder"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "À propos de 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "À propos de %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Un émulateur d'ordinateurs du passé\n\nAuteurs: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nAvec les contributions de Sarah Walker, leilei, JohnElliott, greatpsycho et d'autres.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE."
|
||||
msgstr "Un émulateur d'ordinateurs du passé\n\nAuteurs : Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nAvec les contributions de Sarah Walker, leilei, JohnElliott, greatpsycho et d'autres.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE."
|
||||
|
||||
msgid "Hardware not available"
|
||||
msgstr "Matériel non disponible"
|
||||
@@ -1108,19 +1072,19 @@ msgid "Continue"
|
||||
msgstr "Continuer"
|
||||
|
||||
msgid "Cassette: %1"
|
||||
msgstr "Cassette: %1"
|
||||
msgstr "Cassette : %1"
|
||||
|
||||
msgid "C&assette: %1"
|
||||
msgstr "C&assette: %1"
|
||||
msgstr "C&assette : %1"
|
||||
|
||||
msgid "Cassette images"
|
||||
msgstr "Images cassette"
|
||||
|
||||
msgid "Cartridge %1: %2"
|
||||
msgstr "Cartouche %1: %2"
|
||||
msgstr "Cartouche %1 : %2"
|
||||
|
||||
msgid "Car&tridge %1: %2"
|
||||
msgstr "Car&touche %1: %2"
|
||||
msgstr "Car&touche %1 : %2"
|
||||
|
||||
msgid "Cartridge images"
|
||||
msgstr "Images cartouche"
|
||||
@@ -1183,10 +1147,10 @@ msgid "%1 total"
|
||||
msgstr "%1 total"
|
||||
|
||||
msgid "VMs: %1"
|
||||
msgstr "Machines virtuelles: %1"
|
||||
msgstr "Machines virtuelles : %1"
|
||||
|
||||
msgid "System Directory:"
|
||||
msgstr "Répertoire du système:"
|
||||
msgstr "Répertoire du système :"
|
||||
|
||||
msgid "Choose directory"
|
||||
msgstr "Sélectionner le répertoire"
|
||||
@@ -1201,13 +1165,13 @@ msgid "Configuration read failed"
|
||||
msgstr "Échec de la lecture de la configuration"
|
||||
|
||||
msgid "Unable to open the selected configuration file for reading: %1"
|
||||
msgstr "Impossible d'ouvrir le fichier de configuration sélectionné pour lecture : %1"
|
||||
msgstr "Impossible d'ouvrir le fichier de configuration sélectionné pour lecture : %1"
|
||||
|
||||
msgid "Use regular expressions in search box"
|
||||
msgstr "Utilisez des expressions régulières dans le champ de recherche"
|
||||
|
||||
msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?"
|
||||
msgstr "%1 machine(s) sont actuellement actives. Êtes-vous sûr de vouloir quitter le gestionnaire de machines virtuelles malgré tout ?"
|
||||
msgstr "%1 machine(s) sont actuellement actives. Êtes-vous sûr de vouloir quitter le gestionnaire de machines virtuelles malgré tout ?"
|
||||
|
||||
msgid "Add new system wizard"
|
||||
msgstr "Assistant pour ajouter un nouveau système"
|
||||
@@ -1243,7 +1207,7 @@ msgid "System name"
|
||||
msgstr "Nom du système"
|
||||
|
||||
msgid "System name:"
|
||||
msgstr "Nom du système:"
|
||||
msgstr "Nom du système :"
|
||||
|
||||
msgid "System name cannot contain certain characters"
|
||||
msgstr "Le nom du système ne peut pas contenir certains caractères"
|
||||
@@ -1261,7 +1225,7 @@ msgid "A new directory for the system will be created in the selected directory
|
||||
msgstr "Un nouveau répertoire pour le système sera créé dans le répertoire sélectionné ci-dessus"
|
||||
|
||||
msgid "System location:"
|
||||
msgstr "Emplacement du système:"
|
||||
msgstr "Emplacement du système :"
|
||||
|
||||
msgid "System name and location"
|
||||
msgstr "Nom et emplacement du système"
|
||||
@@ -1276,10 +1240,10 @@ msgid "Please enter a system name"
|
||||
msgstr "Veuillez entrer un nom de système"
|
||||
|
||||
msgid "Display name (optional):"
|
||||
msgstr "Nom d'affichage (facultatif):"
|
||||
msgstr "Nom d'affichage (facultatif) :"
|
||||
|
||||
msgid "Display name:"
|
||||
msgstr "Nom d'affichage:"
|
||||
msgstr "Nom d'affichage :"
|
||||
|
||||
msgid "Set display name"
|
||||
msgstr "Définir le nom d'affichage"
|
||||
@@ -1309,13 +1273,13 @@ msgid "C&lone..."
|
||||
msgstr "C&loner..."
|
||||
|
||||
msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "La machine virtuelle \"%1\" (%2) sera clonée dans :"
|
||||
msgstr "La machine virtuelle « %1 » (%2) sera clonée dans :"
|
||||
|
||||
msgid "Directory %1 already exists"
|
||||
msgstr "Le répertoire %1 existe déjà"
|
||||
|
||||
msgid "You cannot use the following characters in the name: %1"
|
||||
msgstr "Vous ne pouvez pas utiliser les caractères suivants dans le nom : %1"
|
||||
msgstr "Vous ne pouvez pas utiliser les caractères suivants dans le nom : %1"
|
||||
|
||||
msgid "Clone"
|
||||
msgstr "Cloner"
|
||||
@@ -1360,13 +1324,13 @@ msgid "Version"
|
||||
msgstr "Version"
|
||||
|
||||
msgid "An update to 86Box is available: %1 %2"
|
||||
msgstr "Une mise à jour de 86Box est disponible : %1 %2"
|
||||
msgstr "Une mise à jour de 86Box est disponible : %1 %2"
|
||||
|
||||
msgid "An error has occurred while checking for updates: %1"
|
||||
msgstr "Une erreur s'est produite lors de la vérification des mises à jour : %1"
|
||||
msgstr "Une erreur s'est produite lors de la vérification des mises à jour : %1"
|
||||
|
||||
msgid "<b>An update to 86Box is available!</b>"
|
||||
msgstr "<b>Une mise à jour de 86Box est disponible !</b>"
|
||||
msgstr "<b>Une mise à jour de 86Box est disponible !</b>"
|
||||
|
||||
msgid "Warning"
|
||||
msgstr "Avertissement"
|
||||
@@ -1375,13 +1339,13 @@ msgid "&Kill"
|
||||
msgstr "Fo&rcer Extinction"
|
||||
|
||||
msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?"
|
||||
msgstr "La fermeture forcée d'une machine virtuelle peut entraîner une perte de données. Ne procédez ainsi que si le processus 86Box est bloqué.\n\nVoulez-vous vraiment fermer la machine virtuelle \"%1\" ?"
|
||||
msgstr "La fermeture forcée d'une machine virtuelle peut entraîner une perte de données. Ne procédez ainsi que si le processus 86Box est bloqué.\n\nVoulez-vous vraiment fermer la machine virtuelle « %1 » ?"
|
||||
|
||||
msgid "&Delete"
|
||||
msgstr "&Supprimer"
|
||||
|
||||
msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!"
|
||||
msgstr "Voulez-vous vraiment supprimer la machine virtuelle \"%1\" et tous ses fichiers ? Cette action ne peut pas être annulée !"
|
||||
msgstr "Voulez-vous vraiment supprimer la machine virtuelle « %1 » et tous ses fichiers ? Cette action ne peut pas être annulée !"
|
||||
|
||||
msgid "Show &config file"
|
||||
msgstr "Afficher le fichier de &configuration"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Système"
|
||||
msgid "Storage"
|
||||
msgstr "Stockage"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disque %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disque %1 :"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Pas de disques"
|
||||
@@ -1414,7 +1378,7 @@ msgid "Audio"
|
||||
msgstr "Audio"
|
||||
|
||||
msgid "Audio:"
|
||||
msgstr "Audio:"
|
||||
msgstr "Audio :"
|
||||
|
||||
msgid "ACPI shutdown"
|
||||
msgstr "Arrêt ACPI"
|
||||
@@ -1480,7 +1444,7 @@ msgid "Remember to partition and format the newly-created drive."
|
||||
msgstr "N'oubliez pas de partitionner et de formater le nouveau disque créé."
|
||||
|
||||
msgid "The selected file will be overwritten. Are you sure you want to use it?"
|
||||
msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser ?"
|
||||
msgstr "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser ?"
|
||||
|
||||
msgid "Unsupported disk image"
|
||||
msgstr "Image disque non prise en charge"
|
||||
@@ -1543,7 +1507,7 @@ msgid "Select the parent VHD"
|
||||
msgstr "Sélectionnez le VHD parent"
|
||||
|
||||
msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?"
|
||||
msgstr "Il est possible que l'image parente ai été modifiée après la création de l'image différentielle.\n\nIl est même possible que les fichiers de l’image ont été déplacés ou copiés ou il existe un bogue dans le programme qui a créé ce disque.\n\nVoulez-vous réparer l'horodatage ?"
|
||||
msgstr "Il est possible que l'image parente ai été modifiée après la création de l'image différentielle.\n\nIl est même possible que les fichiers de l’image ont été déplacés ou copiés ou il existe un bogue dans le programme qui a créé ce disque.\n\nVoulez-vous réparer l'horodatage ?"
|
||||
|
||||
msgid "Parent and child disk timestamps do not match"
|
||||
msgstr "Les horodatages des disques parents et enfants ne correspondent pas"
|
||||
@@ -1567,10 +1531,10 @@ msgid "ATAPI"
|
||||
msgstr "ATAPI"
|
||||
|
||||
msgid "CD-ROM %1 (%2): %3"
|
||||
msgstr "CD-ROM %1 (%2): %3"
|
||||
msgstr "CD-ROM %1 (%2) : %3"
|
||||
|
||||
msgid "&CD-ROM %1 (%2): %3"
|
||||
msgstr "&CD-ROM %1 (%2): %3"
|
||||
msgstr "&CD-ROM %1 (%2) : %3"
|
||||
|
||||
msgid "160 KB"
|
||||
msgstr "160 Ko"
|
||||
@@ -1663,13 +1627,13 @@ msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "La configuration du réseau passera au pilote NULL"
|
||||
|
||||
msgid "Mouse sensitivity:"
|
||||
msgstr "Sensibilité de la souris:"
|
||||
msgstr "Sensibilité de la souris :"
|
||||
|
||||
msgid "Select media images from program working directory"
|
||||
msgstr "Sélectionner des images dans le répertoire de travail du programme"
|
||||
|
||||
msgid "PIT mode:"
|
||||
msgstr "Mode PIT:"
|
||||
msgstr "Mode PIT :"
|
||||
|
||||
msgid "Auto"
|
||||
msgstr "Auto"
|
||||
@@ -1708,7 +1672,7 @@ msgid "MCA devices"
|
||||
msgstr "Dispositifs MCA"
|
||||
|
||||
msgid "List of MCA devices:"
|
||||
msgstr "Liste des dispositifs MCA :"
|
||||
msgstr "Liste des dispositifs MCA :"
|
||||
|
||||
msgid "&Tablet tool"
|
||||
msgstr "Outil Tablette"
|
||||
@@ -1756,7 +1720,7 @@ msgid "Null Driver"
|
||||
msgstr "Pilote NULL"
|
||||
|
||||
msgid "NIC:"
|
||||
msgstr "NIC:"
|
||||
msgstr "NIC :"
|
||||
|
||||
msgid "NIC %1 (%2) %3"
|
||||
msgstr "NIC %1 (%2) %3"
|
||||
@@ -1768,7 +1732,7 @@ msgid "Render behavior"
|
||||
msgstr "Comportement du rendu"
|
||||
|
||||
msgid "Use target framerate:"
|
||||
msgstr "Utiliser le taux de rafraîchissement cible:"
|
||||
msgstr "Utiliser le taux de rafraîchissement cible :"
|
||||
|
||||
msgid " fps"
|
||||
msgstr " Images par seconde"
|
||||
@@ -1810,7 +1774,7 @@ msgid "This machine might have been moved or copied."
|
||||
msgstr "Cette machine peut avoir été déplacée ou copiée."
|
||||
|
||||
msgid "In order to ensure proper networking functionality, 86Box needs to know if this machine was moved or copied.\n\nSelect \"I Copied It\" if you are not sure."
|
||||
msgstr "Afin d'assurer le bon fonctionnement du réseau, 86Box doit savoir si cette machine a été déplacée ou copiée.\n\nSélectionnez « Je l'ai copié » si vous n'êtes pas sûr."
|
||||
msgstr "Afin d'assurer le bon fonctionnement du réseau, 86Box doit savoir si cette machine a été déplacée ou copiée.\n\nSélectionnez « Je l'ai copié » si vous n'êtes pas sûr."
|
||||
|
||||
msgid "I Moved It"
|
||||
msgstr "Je l'ai déplacé"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Je l'ai déplacé"
|
||||
msgid "I Copied It"
|
||||
msgstr "Je l'ai copié"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "Moniteur 86Box"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Moniteur 86Box %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Pas de dispositifs MCA."
|
||||
@@ -1843,16 +1807,16 @@ msgid "Network Card #4"
|
||||
msgstr "Carte réseau 4"
|
||||
|
||||
msgid "Mode:"
|
||||
msgstr "Mode:"
|
||||
msgstr "Mode :"
|
||||
|
||||
msgid "Interface:"
|
||||
msgstr "Interface:"
|
||||
msgstr "Interface :"
|
||||
|
||||
msgid "Adapter:"
|
||||
msgstr "Adaptateur:"
|
||||
msgstr "Adaptateur :"
|
||||
|
||||
msgid "VDE Socket:"
|
||||
msgstr "Prise VDE:"
|
||||
msgstr "Prise VDE :"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Intensité du filtre SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Module Surround"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Lever l'interruption CODEC lors de la configuration du CODEC (nécessaire pour certains pilotes)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Adresse SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ WSS"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA WSS"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Activer OPL"
|
||||
|
||||
@@ -2293,7 +2263,7 @@ msgid "GUS type"
|
||||
msgstr "Type de GUS"
|
||||
|
||||
msgid "Enable 0x04 \"Exit 86Box\" command"
|
||||
msgstr "Activer la commande 0x04 « Sortir de 86Box »"
|
||||
msgstr "Activer la commande 0x04 « Sortir de 86Box »"
|
||||
|
||||
msgid "Display type"
|
||||
msgstr "Type d'écran"
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 Mo"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stéréo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Classique"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 Ko"
|
||||
|
||||
@@ -2782,7 +2749,7 @@ msgid "Unable to find Dot-Matrix fonts"
|
||||
msgstr "Impossible de trouver les polices matricielles"
|
||||
|
||||
msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P 2 Dot-Matrix Printer."
|
||||
msgstr "Les polices TrueType dans le répertoire \"roms/printer/fonts\" sont nécessaires à l'émulation de l'imprimante générique ESC/P 2 matricielle."
|
||||
msgstr "Les polices TrueType dans le répertoire « roms/printer/fonts » sont nécessaires à l'émulation de l'imprimante générique ESC/P 2 matricielle."
|
||||
|
||||
msgid "Inhibit multimedia keys"
|
||||
msgstr "Désactiver les touches multimédia"
|
||||
@@ -2814,17 +2781,14 @@ msgstr "Erreur GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Impossible de charger le shader %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL version 3.0 ou supérieure requis. Version installée: %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Impossible de charger la texture %1"
|
||||
|
||||
msgid "Could not compile shader:\n\n%1"
|
||||
msgstr "Impossible de compiler le shader:\n\n%1"
|
||||
msgstr "Impossible de compiler le shader :\n\n%1"
|
||||
|
||||
msgid "Program not linked:\n\n%1"
|
||||
msgstr "Programme non linké:\n\n%1"
|
||||
msgstr "Programme non linké :\n\n%1"
|
||||
|
||||
msgid "Shader Manager"
|
||||
msgstr "Gestionnaire de shader"
|
||||
@@ -2845,7 +2809,7 @@ msgid "Could not load file %1"
|
||||
msgstr "Impossible de charger le fichier %1"
|
||||
|
||||
msgid "Key Bindings:"
|
||||
msgstr "Raccourcis clavier:"
|
||||
msgstr "Raccourcis clavier :"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Action"
|
||||
@@ -2863,7 +2827,7 @@ msgid "Bind Key"
|
||||
msgstr "Lier touche"
|
||||
|
||||
msgid "Enter key combo:"
|
||||
msgstr "Entrez la combinaison de touches:"
|
||||
msgstr "Entrez la combinaison de touches :"
|
||||
|
||||
msgid "Bind conflict"
|
||||
msgstr "Conflit de raccourci"
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Envoyer Ctrl+Alt+Échap"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Activer/désactiver le mode plein écran"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Capture d'écran"
|
||||
|
||||
@@ -2908,34 +2875,34 @@ msgid "Remote Switch"
|
||||
msgstr "Commutateur distant"
|
||||
|
||||
msgid "Switch:"
|
||||
msgstr "Commutateur:"
|
||||
msgstr "Commutateur :"
|
||||
|
||||
msgid "Hub Mode"
|
||||
msgstr "Mode concentrateur"
|
||||
|
||||
msgid "Hostname:"
|
||||
msgstr "Nom d'hôte:"
|
||||
msgstr "Nom d'hôte :"
|
||||
|
||||
msgid "ISA RAM:"
|
||||
msgstr "RAM ISA:"
|
||||
msgstr "RAM ISA :"
|
||||
|
||||
msgid "ISA ROM:"
|
||||
msgstr "ROM ISA:"
|
||||
msgstr "ROM ISA :"
|
||||
|
||||
msgid "&Wipe NVRAM"
|
||||
msgstr "&Effacer la mémoire NVRAM"
|
||||
|
||||
msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?"
|
||||
msgstr "Cela supprimera tous les fichiers NVRAM (et associés) de la machine virtuelle situés dans le sous-répertoire \"nvr\". Vous devrez reconfigurer les paramètres du BIOS (et éventuellement d'autres périphériques à l'intérieur de la machine virtuelle) si nécessaire. \n\nÊtes-vous sûr de vouloir effacer tout le contenu NVRAM de la machine virtuelle \"%1\" ?"
|
||||
msgstr "Cela supprimera tous les fichiers NVRAM (et associés) de la machine virtuelle situés dans le sous-répertoire « nvr ». Vous devrez reconfigurer les paramètres du BIOS (et éventuellement d'autres périphériques à l'intérieur de la machine virtuelle) si nécessaire. \n\nÊtes-vous sûr de vouloir effacer tout le contenu NVRAM de la machine virtuelle « %1 » ?"
|
||||
|
||||
msgid "Success"
|
||||
msgstr "Succès"
|
||||
|
||||
msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Le contenu de la NVRAM de la machine virtuelle \"%1\" a été effacé avec succès"
|
||||
msgstr "Le contenu de la NVRAM de la machine virtuelle « %1 » a été effacé avec succès"
|
||||
|
||||
msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Une erreur s'est produite lors de la tentative d'effacement du contenu NVRAM de la machine virtuelle \"%1\""
|
||||
msgstr "Une erreur s'est produite lors de la tentative d'effacement du contenu NVRAM de la machine virtuelle « %1 »"
|
||||
|
||||
msgid "%1 VM Manager"
|
||||
msgstr "Gestionnaire de machines virtuelles de %1"
|
||||
@@ -2947,7 +2914,7 @@ msgid "Unknown Status"
|
||||
msgstr "Statut inconnu"
|
||||
|
||||
msgid "No Machines Found!"
|
||||
msgstr "Aucune machine trouvée !"
|
||||
msgstr "Aucune machine trouvée !"
|
||||
|
||||
msgid "Check for updates on startup"
|
||||
msgstr "Vérifier les mises à jour au démarrage"
|
||||
@@ -2956,7 +2923,7 @@ msgid "Unable to determine release information"
|
||||
msgstr "Impossible de déterminer les informations relatives à la version"
|
||||
|
||||
msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later."
|
||||
msgstr "Une erreur s'est produite lors de la vérification des mises à jour :\n\n%1\n\nVeuillez réessayer plus tard."
|
||||
msgstr "Une erreur s'est produite lors de la vérification des mises à jour :\n\n%1\n\nVeuillez réessayer plus tard."
|
||||
|
||||
msgid "Update check complete"
|
||||
msgstr "Vérification des mises à jour terminée"
|
||||
@@ -2968,7 +2935,7 @@ msgid "beta"
|
||||
msgstr "bêta"
|
||||
|
||||
msgid "You are running the latest %1 version of 86Box: %2"
|
||||
msgstr "Vous utilisez la dernière version %1 de 86Box : %2"
|
||||
msgstr "Vous utilisez la dernière version %1 de 86Box : %2"
|
||||
|
||||
msgid "version"
|
||||
msgstr "version"
|
||||
@@ -2989,7 +2956,7 @@ msgid "<b>Build %1</b> is now available."
|
||||
msgstr "<b>Le Build %1</b> est désormais disponible."
|
||||
|
||||
msgid "Would you like to visit the download page?"
|
||||
msgstr "Souhaitez-vous visiter la page de téléchargement ?"
|
||||
msgstr "Souhaitez-vous visiter la page de téléchargement ?"
|
||||
|
||||
msgid "Visit download page"
|
||||
msgstr "Visiter la page de téléchargement"
|
||||
@@ -3004,7 +2971,7 @@ msgid "86Box Update"
|
||||
msgstr "Mise à jour de 86Box"
|
||||
|
||||
msgid "Release notes:"
|
||||
msgstr "Notes de mise à jour :"
|
||||
msgstr "Notes de mise à jour :"
|
||||
|
||||
msgid "%1 Hz"
|
||||
msgstr "%1 Hz"
|
||||
@@ -3013,7 +2980,7 @@ msgid "Virtual machine crash"
|
||||
msgstr "Panne de la machine virtuelle"
|
||||
|
||||
msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2."
|
||||
msgstr "Le processus de la machine virtuelle \"%1\" s'est arrêté de manière inattendue avec le code de sortie %2."
|
||||
msgstr "Le processus de la machine virtuelle « %1 » s'est arrêté de manière inattendue avec le code de sortie %2."
|
||||
|
||||
msgid "The system will not be added."
|
||||
msgstr "Le système ne sera pas ajouté."
|
||||
@@ -3052,7 +3019,7 @@ msgid "Export EDID"
|
||||
msgstr "Exporter l'EDID"
|
||||
|
||||
msgid "EDID file \"%ls\" is too large."
|
||||
msgstr "Le fichier EDID \"%ls\" est trop volumineux."
|
||||
msgstr "Le fichier EDID « %ls » est trop volumineux."
|
||||
|
||||
msgid "OpenGL input scale"
|
||||
msgstr "Échelle d'entrée d'OpenGL"
|
||||
@@ -3070,4 +3037,4 @@ msgid "Dark"
|
||||
msgstr "Sombre"
|
||||
|
||||
msgid "Search:"
|
||||
msgstr "Rechercher:"
|
||||
msgstr "Rechercher :"
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Ponovo učitaj prethodnu sliku"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Mapa..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "&Ciljni broj okvira u sekundi"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Sinkroniziraj s videom"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Odaberi shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Ukloni shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Postavke"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "Uređaj ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Kartica POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Greška"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Ovo će napraviti hard resetiranje emuliranog sistema."
|
||||
msgid "Save"
|
||||
msgstr "Spremaj"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "O programu 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box verzija "
|
||||
msgid "About %1"
|
||||
msgstr "O programu %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Emulator starih računala\n\nAutori: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, i drugi.\n\nS prethodnim osnovnim doprinosima Sarah Walker, Leilei, JohnElliott, greatpsycho i drugih.\n\nPreveo: dob205\n\nObjavljeno pod licencom GNU General Public License, verzija 2 ili novije. Za više informacija pogledajte datoteku LICENCE."
|
||||
@@ -1102,7 +1066,7 @@ msgid "You are loading an unsupported configuration"
|
||||
msgstr "Učitavate nepodržanu konfiguraciju"
|
||||
|
||||
msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid."
|
||||
msgstr "Filtriranje tipa CPU-a na temelju odabranog sistema onemogućeno je za ovaj emulirani sistem.\n\nOvo omogućuje odabir procesora koji inače nisu kompatibilne s odabranog sistem. Međutim, možete naići na na nekompatibilnosti s BIOS-om sustava ili drugim softverom.\n\nOmogućavanje ove postavke nije službeno podržano i sva prijava o greškama mogu biti zatvorena kao \"invalid\"."
|
||||
msgstr "Filtriranje tipa CPU-a na temelju odabranog sistema onemogućeno je za ovaj emulirani sistem.\n\nOvo omogućuje odabir procesora koji inače nisu kompatibilne s odabranog sistem. Međutim, možete naići na nekompatibilnosti s BIOS-om sustava ili drugim softverom.\n\nOmogućavanje ove postavke nije službeno podržano i sva prijava o greškama mogu biti zatvorena kao \"invalid\"."
|
||||
|
||||
msgid "Continue"
|
||||
msgstr "Nastavi"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Sistem"
|
||||
msgid "Storage"
|
||||
msgstr "Diskovi"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disk %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Nema diskova"
|
||||
@@ -1546,7 +1510,7 @@ msgid "This could mean that the parent image was modified after the differencing
|
||||
msgstr "To bi moglo značiti da je matična slika promijenjena nakon što je stvorena različita slika.\n\nTo se također može dogoditi ako su slike premještene ili kopirane, ili greška u programu koji je stvorio ovaj disk.\n\nŽelite li popraviti vremenske oznake?"
|
||||
|
||||
msgid "Parent and child disk timestamps do not match"
|
||||
msgstr "Vremenske ozanke matične i poređenog diska ne odgovaraju."
|
||||
msgstr "Vremenske ozanke matične i poređenog diska ne odgovaraju"
|
||||
|
||||
msgid "Could not fix VHD timestamp."
|
||||
msgstr "Ne mogu popraviti vremensku oznaku slike VHD."
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Premjestio sam ga"
|
||||
msgid "I Copied It"
|
||||
msgstr "Kopirao sam ga"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "Monitor 86Box-a "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Monitor 86Box-a %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Nema uređaja MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Jačina filtra SID-a"
|
||||
msgid "Surround module"
|
||||
msgstr "Modul Surround"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Podigni prekid CODEC na postavljanju CODEC-a (potrebno nekim upravljačkim programima)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Adresa SB-a"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ WSS-a"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA WSS-a"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Omogući OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klasičan"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Greška GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Nije moguće učitati shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Potrebna je OpenGL verzija 3.0 ili novija. Trenutna GLSL verzija je %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Nije moguće učitati teksturu: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Pošalji Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Uključi/isključi cijelozaslonski način"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Snimka zaslona"
|
||||
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Ricarica l'immagine precedente"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Cartella..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Obiettivo &fotogrammi"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Sincronizza col video"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 FPS"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 FPS"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 FPS"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 FPS"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 FPS"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "Sincronizzazione &verticale"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Seleziona shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Rimuovi shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Preferenze"
|
||||
|
||||
@@ -520,7 +490,7 @@ msgid "LPT4 Device:"
|
||||
msgstr "Dispositivo LPT4:"
|
||||
|
||||
msgid "Internal LPT ECP DMA:"
|
||||
msgstr "DMA LPT ECP interna"
|
||||
msgstr "DMA LPT ECP interna:"
|
||||
|
||||
msgid "Serial port 1"
|
||||
msgstr "Porta seriale 1"
|
||||
@@ -687,9 +657,6 @@ msgstr "Dispositivo ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Scheda di diagnostica"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Errore"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Questo riavvierà la macchina emulata."
|
||||
msgid "Save"
|
||||
msgstr "Salva"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Informazioni su 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Informazioni su %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Un emulatore di vecchi computer\n\nAutori: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne e altri.\n\nCon i precedenti contributi fondamentali di Sarah Walker, leilei, JohnElliott, greatpsycho e altri.\n\nRilasciato sotto la Licenza Pubblica Generale GNU versione 2 o successiva. Per ulteriori informazioni, consultare il file LICENSE."
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Sistema"
|
||||
msgid "Storage"
|
||||
msgstr "Archiviazione"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disco %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disco %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Nessun disco"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "L'ho spostata"
|
||||
msgid "I Copied It"
|
||||
msgstr "L'ho copiata"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "Monitor 86Box #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Monitor 86Box #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Nessun dispositivo MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Intensità filtro SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Modulo surround"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Incrementa l'interrupt CODEC nella configurazione CODEC (necessario per alcuni driver)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Indirizzo SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ WSS"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA WSS"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Abilita OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Classico"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Errore GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Impossibile caricare lo shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "È richiesta la versione 3.0 di OpenGL o successiva. La versione GLSL corrente è %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Impossibile caricare la texture: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Invia Ctrl+Alt+Esc"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Attiva/disattiva schermo intero"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Istantanea dello schermo"
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ msgid "&VNC"
|
||||
msgstr "VNC(&V)"
|
||||
|
||||
msgid "Specify &dimensions..."
|
||||
msgstr "ディメンションを指定...(&D)"
|
||||
msgstr "ディメンションを指定(&D)..."
|
||||
|
||||
msgid "Force &4:3 display ratio"
|
||||
msgstr "4:3の縦横比を強制表示(&4)"
|
||||
@@ -273,36 +273,6 @@ msgstr "前のイメージを再読み込み"
|
||||
msgid "&Folder..."
|
||||
msgstr "フォルダ(&F)..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "目標フレームレート(&F)"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "ビデオと同期(&S)"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "25 fps(&2)"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "30 fps(&3)"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "50 fps(&5)"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "60 fps(&6)"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "75 fps(&7)"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "垂直同期(VSync)(&V)"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "シェーダーを選択(&S)..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "シェーダーを削除(&R)"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "環境設定"
|
||||
|
||||
@@ -478,7 +448,7 @@ msgid "MIDI In Device:"
|
||||
msgstr "MIDI入力デバイス:"
|
||||
|
||||
msgid "MIDI Out:"
|
||||
msgstr "MIDI出力"
|
||||
msgstr "MIDI出力:"
|
||||
|
||||
msgid "Standalone MPU-401"
|
||||
msgstr "独立型MPU-401"
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABuggerデバイス"
|
||||
msgid "POST card"
|
||||
msgstr "POSTカード"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "エラー"
|
||||
|
||||
@@ -1030,7 +997,7 @@ msgid "&File"
|
||||
msgstr "ファイル(&F)"
|
||||
|
||||
msgid "&New machine..."
|
||||
msgstr "新しいマシン(&N)"
|
||||
msgstr "新しいマシン(&N)..."
|
||||
|
||||
msgid "&Check for updates..."
|
||||
msgstr "アップデートを確認中(&C)..."
|
||||
@@ -1050,11 +1017,8 @@ msgstr "使用中のマシンがハードリセットされます。"
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "86Boxのバージョン情報"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "%1のバージョン情報"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "古いパソコンのエミュレーター\n\n著者: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nSarah Walker, leilei, JohnElliott, greatpsycho, その他の方々による以前からの多大な貢献。\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。"
|
||||
@@ -1309,7 +1273,7 @@ msgid "C&lone..."
|
||||
msgstr "クローン(&L)..."
|
||||
|
||||
msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "仮想マシン\"%1\" (%2)は、以下の場所にクローンされます:"
|
||||
msgstr "仮想マシン「%1」 (%2)は、以下の場所にクローンされます:"
|
||||
|
||||
msgid "Directory %1 already exists"
|
||||
msgstr "ディレクトリ %1 は既に存在します"
|
||||
@@ -1366,7 +1330,7 @@ msgid "An error has occurred while checking for updates: %1"
|
||||
msgstr "アップデートの確認中にエラーが発生しました: %1"
|
||||
|
||||
msgid "<b>An update to 86Box is available!</b>"
|
||||
msgstr "<b>86Boxのアップデートが利用可能になりました!</b>"
|
||||
msgstr "<b>86Boxのアップデートが利用可能になりました!</b>"
|
||||
|
||||
msgid "Warning"
|
||||
msgstr "警告"
|
||||
@@ -1375,13 +1339,13 @@ msgid "&Kill"
|
||||
msgstr "強制的に終了する(&K)"
|
||||
|
||||
msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?"
|
||||
msgstr "仮想マシンを強制終了すると、データが失われる可能性があります。86Boxプロセスが応答しなくなった場合のみ、この操作を行ってください。\n\n本当に仮想マシン\"%1\"を終了しますか?"
|
||||
msgstr "仮想マシンを強制終了すると、データが失われる可能性があります。86Boxプロセスが応答しなくなった場合のみ、この操作を行ってください。\n\n本当に仮想マシン「%1」を終了しますか?"
|
||||
|
||||
msgid "&Delete"
|
||||
msgstr "削除(&D)"
|
||||
|
||||
msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!"
|
||||
msgstr "本当に仮想マシン\"%1\"とそのすべてのファイルを削除しますか? この操作は元に戻せません!"
|
||||
msgstr "本当に仮想マシン「%1」とそのすべてのファイルを削除しますか? この操作は元に戻せません!"
|
||||
|
||||
msgid "Show &config file"
|
||||
msgstr "設定ファイルを表示する(&C)"
|
||||
@@ -1404,7 +1368,7 @@ msgstr "システム"
|
||||
msgid "Storage"
|
||||
msgstr "ストレージ"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "ディスク %1:"
|
||||
|
||||
msgid "No disks"
|
||||
@@ -1723,7 +1687,7 @@ msgid "Show non-&primary monitors"
|
||||
msgstr "プライマリーモニター以外のモニターを表示する(&P)"
|
||||
|
||||
msgid "Open screenshots &folder..."
|
||||
msgstr "スクリーンショットフォルダを開く(&F)"
|
||||
msgstr "スクリーンショットフォルダを開く(&F)..."
|
||||
|
||||
msgid "Appl&y fullscreen stretch mode when maximized"
|
||||
msgstr "最大化時にフルスクリーンストレッチモードを適用(&Y)"
|
||||
@@ -1795,7 +1759,7 @@ msgid "Couldn't switch to OpenGL context."
|
||||
msgstr "OpenGLコンテキストに切り替えられなかった。"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current version is %1.%2"
|
||||
msgstr "OpenGLのバージョン3.0以上が必要です。現在のバージョンは %1.%2 です。"
|
||||
msgstr "OpenGLのバージョン3.0以上が必要です。現在のバージョンは %1.%2 です"
|
||||
|
||||
msgid "Error initializing OpenGL"
|
||||
msgstr "OpenGLの初期化エラー"
|
||||
@@ -1810,7 +1774,7 @@ msgid "This machine might have been moved or copied."
|
||||
msgstr "このマシンは移動されたかコピーされた可能性がある。"
|
||||
|
||||
msgid "In order to ensure proper networking functionality, 86Box needs to know if this machine was moved or copied.\n\nSelect \"I Copied It\" if you are not sure."
|
||||
msgstr "ネットワーク機能を正しく動作させるために、86Boxはこのマシンが移動されたかコピーされたかを知る必要があります。「コピーした」を選択してください。"
|
||||
msgstr "ネットワーク機能を正しく動作させるために、86Boxはこのマシンが移動されたかコピーされたかを知る必要があります。\n\n「コピーした」を選択してください。"
|
||||
|
||||
msgid "I Moved It"
|
||||
msgstr "動かした"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "動かした"
|
||||
msgid "I Copied It"
|
||||
msgstr "コピーした"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box モニター"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box モニター%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "MCAデバイスはない。"
|
||||
@@ -1876,7 +1840,7 @@ msgid "Serial port passthrough 4"
|
||||
msgstr "シリアル・ポート・パススルー 4"
|
||||
|
||||
msgid "Renderer &options..."
|
||||
msgstr "レンダラー設定...(&O)"
|
||||
msgstr "レンダラー設定(&O)..."
|
||||
|
||||
msgid "PC/XT Keyboard"
|
||||
msgstr "PC/XT キーボード"
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SIDフィルターの強度"
|
||||
msgid "Surround module"
|
||||
msgstr "サラウンド・モジュール"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "コーデック"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "CODECセットアップ時にCODEC割り込みを発生させる(一部のドライバで必要)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "SBアドレス"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "OPLを有効にする"
|
||||
|
||||
@@ -2293,7 +2263,7 @@ msgid "GUS type"
|
||||
msgstr "GUSタイプ"
|
||||
|
||||
msgid "Enable 0x04 \"Exit 86Box\" command"
|
||||
msgstr "コマンド 0x04 \"86Boxを終了する\"を有効にする"
|
||||
msgstr "コマンド 0x04 「86Boxを終了する」を有効にする"
|
||||
|
||||
msgid "Display type"
|
||||
msgstr "表示タイプ"
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "シグマテル STAC9721T(ステレオ)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "クラシック"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSLエラー"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "シェーダーを読み込めませんでした: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGLバージョン 3.0 以上が必要です。現在のGLSLバージョンは %1.%2 です。"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "テクスチャを読み込めませんでした: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Ctrl+Alt+Escを送信"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "フルスクリーン表示を切り替える"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "スクリーンショット"
|
||||
|
||||
@@ -2926,16 +2893,16 @@ msgid "&Wipe NVRAM"
|
||||
msgstr "NVRAMを消去する(&W)"
|
||||
|
||||
msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?"
|
||||
msgstr "これによって、仮想マシン内の\"nvr\"サブディレクトリに格納されているすべてのNVRAM(および関連)ファイルが削除されます。必要に応じて、BIOSの設定(および仮想マシン内の他のデバイス設定)を再構成する必要があります。\n\n仮想マシン\"%1\"のすべてのNVRAM内容を削除してもよろしいですか?"
|
||||
msgstr "これによって、仮想マシン内の「nvr」サブディレクトリに格納されているすべてのNVRAM(および関連)ファイルが削除されます。必要に応じて、BIOSの設定(および仮想マシン内の他のデバイス設定)を再構成する必要があります。\n\n仮想マシン「%1」のすべてのNVRAM内容を削除してもよろしいですか?"
|
||||
|
||||
msgid "Success"
|
||||
msgstr "成功"
|
||||
|
||||
msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "仮想マシン\"%1\"のNVRAMの内容を正常に消去しました"
|
||||
msgstr "仮想マシン「%1」のNVRAMの内容を正常に消去しました"
|
||||
|
||||
msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "仮想マシン\"%1\"のNVRAMの内容を消去しようとした際にエラーが発生しました"
|
||||
msgstr "仮想マシン「%1」のNVRAMの内容を消去しようとした際にエラーが発生しました"
|
||||
|
||||
msgid "%1 VM Manager"
|
||||
msgstr "%1 VMマネージャー"
|
||||
@@ -2947,7 +2914,7 @@ msgid "Unknown Status"
|
||||
msgstr "不明な状態"
|
||||
|
||||
msgid "No Machines Found!"
|
||||
msgstr "マシンが検出されません!"
|
||||
msgstr "マシンが検出されません!"
|
||||
|
||||
msgid "Check for updates on startup"
|
||||
msgstr "起動時にアップデートを確認する"
|
||||
@@ -3013,7 +2980,7 @@ msgid "Virtual machine crash"
|
||||
msgstr "仮想マシンの予期せぬ終了"
|
||||
|
||||
msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2."
|
||||
msgstr "仮想マシン\"%1\"のプロセスが、終了コード %2 で予期せず終了しました。"
|
||||
msgstr "仮想マシン「%1」のプロセスが、終了コード %2 で予期せず終了しました。"
|
||||
|
||||
msgid "The system will not be added."
|
||||
msgstr "システムは追加されません。"
|
||||
@@ -3037,7 +3004,7 @@ msgid "Sharpness"
|
||||
msgstr "シャープネス"
|
||||
|
||||
msgid "&CGA composite settings..."
|
||||
msgstr "CGA複合モードの設定...(&C)"
|
||||
msgstr "CGA複合モードの設定(&C)..."
|
||||
|
||||
msgid "CGA composite settings"
|
||||
msgstr "CGA複合モードの設定"
|
||||
@@ -3052,7 +3019,7 @@ msgid "Export EDID"
|
||||
msgstr "EDIDのエクスポート"
|
||||
|
||||
msgid "EDID file \"%ls\" is too large."
|
||||
msgstr "EDIDファイル \"%ls\" が大きすぎます。"
|
||||
msgstr "EDIDファイル「%ls」が大きすぎます。"
|
||||
|
||||
msgid "OpenGL input scale"
|
||||
msgstr "OpenGLの入力スケール"
|
||||
|
||||
@@ -67,7 +67,7 @@ msgid "&VNC"
|
||||
msgstr "VNC(&V)"
|
||||
|
||||
msgid "Specify &dimensions..."
|
||||
msgstr "창 크기 지정하기...(&D)"
|
||||
msgstr "창 크기 지정하기(&D)..."
|
||||
|
||||
msgid "Force &4:3 display ratio"
|
||||
msgstr "화면 비율을 4:3으로 맞추기(&4)"
|
||||
@@ -273,36 +273,6 @@ msgstr "이전 이미지 다시 불러오기"
|
||||
msgid "&Folder..."
|
||||
msgstr "폴더(&F)..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "목표 프레임 레이트(&F)"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "비디오와 동기(&S)"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "25 fps(&2)"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "30 fps(&3)"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "50 fps(&5)"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "60 fps(&6)"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "75 fps(&7)"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "수직 동기화(&V)"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "쉐이더 불러오기(&S)..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "쉐이더 끄기(&R)"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "환경설정"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABugger 장치"
|
||||
msgid "POST card"
|
||||
msgstr "POST 카드"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "오류"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "사용중인 머신이 재부팅됩니다."
|
||||
msgid "Save"
|
||||
msgstr "저장"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "86Box에 대해"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "%1에 대해"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "고전 컴퓨터 에뮬레이터\n\n저자: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\n이전 핵심 기여자로는 Sarah Walker, leilei, JohnElliott, greatpsycho 등이 있습니다.\n\nGNU General Public 라이선스 (버전 2 이상)에 의해 배포되었습니다. 자세한 내용은 LICENSE 파일을 읽어 주세요."
|
||||
@@ -1404,8 +1368,8 @@ msgstr "시스템"
|
||||
msgid "Storage"
|
||||
msgstr "장치"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "디스크 %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "디스크 %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "디스크 없음"
|
||||
@@ -1441,10 +1405,10 @@ msgid "Add Existing Hard Disk"
|
||||
msgstr "기존 이미지 사용"
|
||||
|
||||
msgid "HDI disk images cannot be larger than 4 GB."
|
||||
msgstr "HDI 디스크 이미지는 4GB 이상으로 지정할 수 없습니다"
|
||||
msgstr "HDI 디스크 이미지는 4GB 이상으로 지정할 수 없습니다."
|
||||
|
||||
msgid "Disk images cannot be larger than 127 GB."
|
||||
msgstr "디스크 이미지는 127GB 이상으로 지정할 수 없습니다"
|
||||
msgstr "디스크 이미지는 127GB 이상으로 지정할 수 없습니다."
|
||||
|
||||
msgid "Hard disk images"
|
||||
msgstr "하드 디스크 이미지"
|
||||
@@ -1456,7 +1420,7 @@ msgid "Unable to write file"
|
||||
msgstr "파일을 저장할 수 없습니다"
|
||||
|
||||
msgid "HDI or HDX images with a sector size other than 512 are not supported."
|
||||
msgstr "512 바이트 이외의 섹터 크기를 가진 HDI 또는 HDX 형식의 이미지를 생성할 수 없습니다"
|
||||
msgstr "512 바이트 이외의 섹터 크기를 가진 HDI 또는 HDX 형식의 이미지를 생성할 수 없습니다."
|
||||
|
||||
msgid "Disk image file already exists"
|
||||
msgstr "디스크 이미지 파일이 이미 존재합니다"
|
||||
@@ -1549,7 +1513,7 @@ msgid "Parent and child disk timestamps do not match"
|
||||
msgstr "부모 디스크와 자식 디스크의 타임스탬프가 일치하지 않습니다"
|
||||
|
||||
msgid "Could not fix VHD timestamp."
|
||||
msgstr "VHD 타임스탬프를 고칠 수 없습니다"
|
||||
msgstr "VHD 타임스탬프를 고칠 수 없습니다."
|
||||
|
||||
msgid "MFM/RLL"
|
||||
msgstr "MFM/RLL"
|
||||
@@ -1723,7 +1687,7 @@ msgid "Show non-&primary monitors"
|
||||
msgstr "기본 모니터가 아닌 모니터 표시(&P)"
|
||||
|
||||
msgid "Open screenshots &folder..."
|
||||
msgstr "스크린샷 폴더 열기...(&F)"
|
||||
msgstr "스크린샷 폴더 열기(&F)..."
|
||||
|
||||
msgid "Appl&y fullscreen stretch mode when maximized"
|
||||
msgstr "최대화 시 전체 화면 비율 적용(&Y)"
|
||||
@@ -1795,7 +1759,7 @@ msgid "Couldn't switch to OpenGL context."
|
||||
msgstr "OpenGL 컨텍스트로 전환할 수 없습니다."
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current version is %1.%2"
|
||||
msgstr "OpenGL 버전 3.0 이상이 필요합니다. 현재 버전은 %1.%2입니다."
|
||||
msgstr "OpenGL 버전 3.0 이상이 필요합니다. 현재 버전은 %1.%2입니다"
|
||||
|
||||
msgid "Error initializing OpenGL"
|
||||
msgstr "OpenGL 초기화 중 오류 발생"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "옮겼어요"
|
||||
msgid "I Copied It"
|
||||
msgstr "복사했습니다"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box 모니터 "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box 모니터 %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "MCA 장치가 없습니다."
|
||||
@@ -1876,7 +1840,7 @@ msgid "Serial port passthrough 4"
|
||||
msgstr "직렬 포트 패스스루 4"
|
||||
|
||||
msgid "Renderer &options..."
|
||||
msgstr "렌더러 옵션...(&O)"
|
||||
msgstr "렌더러 옵션(&O)..."
|
||||
|
||||
msgid "PC/XT Keyboard"
|
||||
msgstr "PC/XT 키보드"
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID 필터 강도"
|
||||
msgid "Surround module"
|
||||
msgstr "서라운드 모듈"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "코덱"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "코덱 설정 시 코덱 인터럽트 올리기(일부 드라이버에 필요)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "SB 주소"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "OPL 사용"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "시그마텔 STAC9721T(스테레오)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "클래식"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSL 오류"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "셰이더를 로드할 수 없습니다: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL 버전 3.0 이상이 필요합니다. 현재 GLSL 버전은 %1.%2입니다"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "텍스처를 로드할 수 없습니다: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Ctrl+Alt+Esc 보내기"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "전체 화면 모드 전환"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "스크린샷"
|
||||
|
||||
@@ -3037,7 +3004,7 @@ msgid "Sharpness"
|
||||
msgstr "선명도"
|
||||
|
||||
msgid "&CGA composite settings..."
|
||||
msgstr "CGA 복합 모드의 설정...(&C)"
|
||||
msgstr "CGA 복합 모드의 설정(&C)..."
|
||||
|
||||
msgid "CGA composite settings"
|
||||
msgstr "CGA 복합 모드의 설정"
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Last inn forrige diskfil"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Mappe..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Mål-&bildefrekvens"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Synkroniser med video"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Velg shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Fjern shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Valg"
|
||||
|
||||
@@ -328,7 +298,7 @@ msgid "&Default"
|
||||
msgstr "&Standard"
|
||||
|
||||
msgid "Language:"
|
||||
msgstr "Språk"
|
||||
msgstr "Språk:"
|
||||
|
||||
msgid "Gain"
|
||||
msgstr "Forsterkning"
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABugger-enhet"
|
||||
msgid "POST card"
|
||||
msgstr "POST-kort"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Feil"
|
||||
|
||||
@@ -874,7 +841,7 @@ msgid "3-axis, 2-button joystick"
|
||||
msgstr "3-akset, 2-knapps styrespak"
|
||||
|
||||
msgid "3-axis, 3-button joystick"
|
||||
msgstr "3-akset, 4-knapps styrespak"
|
||||
msgstr "3-akset, 3-knapps styrespak"
|
||||
|
||||
msgid "3-axis, 4-button joystick"
|
||||
msgstr "3-akset, 4-knapps styrespak"
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Dette vil hard-resette den emulerte maskinen."
|
||||
msgid "Save"
|
||||
msgstr "Lagre"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Om 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Om %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "En emulator for gamle datamaskiner\n\nForfattere: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne og andre.\n\nMed tidligere kjernebidrag fra Sarah Walker, leilei, JohnElliott, greatpsycho og andre.\n\nUtgitt under GNU General Public License versjon 2 eller senere. Se LICENSE for mer informasjon."
|
||||
@@ -1404,7 +1368,7 @@ msgstr "System"
|
||||
msgid "Storage"
|
||||
msgstr "Lagring"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disk %1:"
|
||||
|
||||
msgid "No disks"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Jeg flyttet den"
|
||||
msgid "I Copied It"
|
||||
msgstr "Jeg kopierte den"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box-skjerm #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box-skjerm #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Ingen MCA-enheter."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID-filterstyrke"
|
||||
msgid "Surround module"
|
||||
msgstr "Surround-modul"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "Kodek"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Generer kodek-avbrudd ved kodek-oppsett (nødvendig for noen drivere)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "SB-adresse"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS-IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS-DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Aktiver OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klassisk"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSL-feil"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Kunne ikke laste shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL versjon 3.0 eller høyere kreves. Nåværende GLSL-versjon er %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Kunne ikke laste tekstur: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Send Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Veksle fullskjerm"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Skjermbilde"
|
||||
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Herlaad vorig imagebestand"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Map..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Doel &framerate"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Synchroniseer met video"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Selecteer shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Verwijder shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Voorkeuren"
|
||||
|
||||
@@ -550,7 +520,7 @@ msgid "FD Controller:"
|
||||
msgstr "FD-Controller:"
|
||||
|
||||
msgid "CD-ROM Controller:"
|
||||
msgstr "CD-ROM controller"
|
||||
msgstr "CD-ROM controller:"
|
||||
|
||||
msgid "Tertiary IDE Controller"
|
||||
msgstr "Tertiaire IDE-controller"
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABugger-apparaat"
|
||||
msgid "POST card"
|
||||
msgstr "POST-kaart"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Fout"
|
||||
|
||||
@@ -703,10 +670,10 @@ msgid "Speed"
|
||||
msgstr "Snelheid"
|
||||
|
||||
msgid "Removable disk %1 (%2): %3"
|
||||
msgstr "Verwijderbare schijf %1 (%2): %3"
|
||||
msgstr "Verwijderbare schijf %1 (%2): %3"
|
||||
|
||||
msgid "&Removable disk %1 (%2): %3"
|
||||
msgstr "&Verwijderbare schijf %1 (%2): %3"
|
||||
msgstr "&Verwijderbare schijf %1 (%2): %3"
|
||||
|
||||
msgid "Removable disk images"
|
||||
msgstr "Verwijderbaar schijfimagebestand"
|
||||
@@ -913,7 +880,7 @@ msgid "4-button flight yoke"
|
||||
msgstr "4-knops stuurknuppel"
|
||||
|
||||
msgid "2-button flight yoke with throttle"
|
||||
msgstr "2-kops stuurknuppel met gashendel "
|
||||
msgstr "2-kops stuurknuppel met gashendel"
|
||||
|
||||
msgid "3-button flight yoke with throttle"
|
||||
msgstr "3-kops stuurknuppel met gashendel"
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Dit zal de geëmuleerde machine een harde reset geven."
|
||||
msgid "Save"
|
||||
msgstr "Opslaan"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Over 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Over %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Een emulator van oude computers\n\nAuteurs: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nMet eerdere bijdragen van Sarah Walker, leilei, JohnElliott, greatpsycho en anderen.\n\nUitgebracht onder de GNU General Public License versie 2 of later. Zie LICENSE voor meer informatie."
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Systeem"
|
||||
msgid "Storage"
|
||||
msgstr "Opslag"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Schijf %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Schijf %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Geen schijven"
|
||||
@@ -1693,7 +1657,7 @@ msgid "Generate"
|
||||
msgstr "Genereren"
|
||||
|
||||
msgid "Joystick configuration"
|
||||
msgstr "Joystick configuratie "
|
||||
msgstr "Joystick configuratie"
|
||||
|
||||
msgid "Device"
|
||||
msgstr "Apparaat"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Ik heb het verplaatst"
|
||||
msgid "I Copied It"
|
||||
msgstr "Ik heb het gekopieerd"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitor #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box Monitor #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Geen MCA-apparaten."
|
||||
@@ -1930,7 +1894,7 @@ msgid "Default Baud rate"
|
||||
msgstr "Standaard baudrate"
|
||||
|
||||
msgid "[COM] Standard Hayes-compliant Modem"
|
||||
msgstr "[COM] Standaard Hayes-compatibele modem "
|
||||
msgstr "[COM] Standaard Hayes-compatibele modem"
|
||||
|
||||
msgid "Roland MT-32 Emulation"
|
||||
msgstr "Roland MT-32-emulatie"
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID-filtersterkte"
|
||||
msgid "Surround module"
|
||||
msgstr "Surroundmodule"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "Codec"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Verhoog CODEC interrupt bij CODEC setup (nodig voor sommige stuurprogramma's)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "SB-adres"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "OPL inschakelen"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klassiek"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2632,7 +2599,7 @@ msgid "Apply overscan deltas"
|
||||
msgstr "Overscan-delta’s toepassen"
|
||||
|
||||
msgid "Mono Interlaced"
|
||||
msgstr "Mono Interlaced "
|
||||
msgstr "Mono Interlaced"
|
||||
|
||||
msgid "Mono Non-Interlaced"
|
||||
msgstr "Mono Niet-Interlaced"
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSL-fout"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Kon de shader niet laden: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL versie 3.0 of hoger is vereist. Huidige GLSL-versie is %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Kon de textuur niet laden: %1"
|
||||
|
||||
@@ -2845,7 +2809,7 @@ msgid "Could not load file %1"
|
||||
msgstr "Kon bestand %1 niet laden"
|
||||
|
||||
msgid "Key Bindings:"
|
||||
msgstr "Toetskoppelingen"
|
||||
msgstr "Toetskoppelingen:"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Actie"
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Stuur Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Volledig scherm omschakelen"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Schermafbeelding"
|
||||
|
||||
@@ -2914,7 +2881,7 @@ msgid "Hub Mode"
|
||||
msgstr "Hub-modus"
|
||||
|
||||
msgid "Hostname:"
|
||||
msgstr "Hostnaam"
|
||||
msgstr "Hostnaam:"
|
||||
|
||||
msgid "ISA RAM:"
|
||||
msgstr "ISA RAM:"
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Przeładuj poprzedni obraz"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Folder..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Docelowa &liczba klatek na sekundę"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Zsynchronizuj z obrazem"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Wybierz shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Usuń shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Preferencje"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "Urządzenie ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Karta POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Błąd"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "To spowoduje twardy reset wirtualnej maszyny."
|
||||
msgid "Save"
|
||||
msgstr "Zapisz"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "O 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "O %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Emulator starych komputerów\n\nAutorzy: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, i inni.\n\nZ wcześniejszym wkładem od Sarah Walker, leilei, JohnElliott, greatpsycho i innych.\n\nPrzetłumaczony przez: Lili1228\n\nWydany na licencji GNU General Public License w wersji 2 lub nowszej. Zobacz LICENSE aby uzyskać więcej informacji."
|
||||
@@ -1404,8 +1368,8 @@ msgstr "System"
|
||||
msgid "Storage"
|
||||
msgstr "Pamięć"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Dysk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Dysk %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Brak dysków"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Została przeniesiona"
|
||||
msgid "I Copied It"
|
||||
msgstr "Została skopiowana"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitor "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box Monitor %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Brak urządzeń MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Siła filtra SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Moduł Surround"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Podnieś przerwanie CODEC podczas konfiguracji CODEC-a (wymagane przez niektóre sterowniki)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Adres SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Włącz OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klasyczny"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Błąd GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Nie udało się wczytać shadera: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Wymagana jest wersja OpenGL 3.0 lub wyższa. Aktualna wersja GLSL to %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Nie udało się wczytać tekstury: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Wyślij Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Przełącz pełny ekran"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Zrzut ekranu"
|
||||
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Recarregar imagem anterior"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Pasta..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "&Taxa de quadros pretendida"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Sincronizar com vídeo"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 qps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 qps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 qps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 qps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 qps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "Sincronização &vertical"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Selecionar shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Remover shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Preferências"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "Dispositivo ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Placa de diagnóstico"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
@@ -781,7 +748,7 @@ msgid "Parallel ports:"
|
||||
msgstr "Portas Paralelas:"
|
||||
|
||||
msgid "Storage controllers"
|
||||
msgstr "Controladores de armaz."
|
||||
msgstr "Controladores de armazenamento"
|
||||
|
||||
msgid "Hard disks"
|
||||
msgstr "Discos rígidos"
|
||||
@@ -799,7 +766,7 @@ msgid "Floppy & CD-ROM drives"
|
||||
msgstr "Disquete & CD-ROM"
|
||||
|
||||
msgid "Other removable devices"
|
||||
msgstr "Dispos. removíveis"
|
||||
msgstr "Outros dispositivos removíveis"
|
||||
|
||||
msgid "Other peripherals"
|
||||
msgstr "Outros periféricos"
|
||||
@@ -850,7 +817,7 @@ msgid "Invalid PCap device"
|
||||
msgstr "Dispositivo PCap inválido"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "Controlador(es) genérico(s) de pá"
|
||||
msgstr "Controlador(es) genérico(s) de raquete"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "Joystick(s) de 2 eixos, 1 botões"
|
||||
@@ -901,7 +868,7 @@ msgid "6-button gamepad"
|
||||
msgstr "Gamepad de 6 botões"
|
||||
|
||||
msgid "Gravis PC GamePad"
|
||||
msgstr "Gravis PC GamePad"
|
||||
msgstr "GamePad Gravis PC"
|
||||
|
||||
msgid "2-button flight yoke"
|
||||
msgstr "Manche de voo de 2 botões"
|
||||
@@ -934,10 +901,10 @@ msgid "CH Flightstick"
|
||||
msgstr "CH Flightstick"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + CH Pedals"
|
||||
msgstr "CH Flightstick + Pedais CH"
|
||||
|
||||
msgid "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + CH Pedals Pro"
|
||||
msgstr "CH Flightstick + Pedais CH Pro"
|
||||
|
||||
msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Isto fará com que a máquina emulada seja reinicializada."
|
||||
msgid "Save"
|
||||
msgstr "Salvar"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Sobre o 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box versão "
|
||||
msgid "About %1"
|
||||
msgstr "Sobre o %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Um emulador de computadores antigos\n\nAutores: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, e outros.\n\nCom contribuições anteriores de Sarah Walker, leilei, JohnElliott, greatpsycho, e outros.\n\nTraduzido por: Altieres Lima da Silva, Nelson K. Hennemann Filho\n\nLançado sob a Licença Pública Geral GNU, versão 2 ou posterior. Veja o arquivo LICENSE para mais informações."
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Sistema"
|
||||
msgid "Storage"
|
||||
msgstr "Armazenamento"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disco %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disco %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Sem discos"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Movi"
|
||||
msgid "I Copied It"
|
||||
msgstr "Copiei"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "Monitor 86Box nº"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Monitor 86Box nº%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Nenhum dispositivo MCA."
|
||||
@@ -1855,7 +1819,7 @@ msgid "VDE Socket:"
|
||||
msgstr "Soquete VDE:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
msgstr "Dispositivo Ponte TAP:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "Testador de unidade 86Box"
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Força do Filtro SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Módulo surround"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Aumentar a interrupção do CODEC na configuração do CODEC (necessário para alguns drivers)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Endereço da SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ WSS"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA WSS"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr "IRQ RTC"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr "Endereço Porta RTC"
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr "RTC Integrado"
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr "Não instalado"
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Ativar OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (estéreo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Clássico"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Erro GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Não foi possível carregar o shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL versão 3.0 ou superior é exigido. Versão atual GLSL é %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Não foi possível carregar a textura: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Enviar Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Alternar tela cheia"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr "Alternar interface em tela cheia"
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Captura de tela"
|
||||
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Recarregar imagem anterior"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Pasta..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "&Taxa de quadros de destino"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Sincronizar com vídeo"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 q/s"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 q/s"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 q/s"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 q/s"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 q/s"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Selecionar shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Remover shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Preferências"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "Dispositivo ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Placa POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Erro"
|
||||
|
||||
@@ -1030,7 +997,7 @@ msgid "&File"
|
||||
msgstr "F&icheiro"
|
||||
|
||||
msgid "&New machine..."
|
||||
msgstr "&Nova máquina"
|
||||
msgstr "&Nova máquina..."
|
||||
|
||||
msgid "&Check for updates..."
|
||||
msgstr "&Verificar para atualizações..."
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Isto irá causar um reinício completo da máquina emulada."
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Acerca do 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Acerca do %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Um emulador de computadores antigos\n\nAutores: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nCom contribuições anteriores de Sarah Walker, leilei, JohnElliott, greatpsycho e outros.\n\nUsado sob a licença GNU General Public License versão 2 ou posterior. Veja o ficheiro LICENSE para mais informações."
|
||||
@@ -1099,7 +1063,7 @@ msgid "GLSL shaders"
|
||||
msgstr "Shaders GLSL"
|
||||
|
||||
msgid "You are loading an unsupported configuration"
|
||||
msgstr "Está a carregar uma configuração sem suporte!"
|
||||
msgstr "Está a carregar uma configuração sem suporte"
|
||||
|
||||
msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid."
|
||||
msgstr "A filtragem do tipo de CPU baseada na máquina escolhida está desativada para esta máquina emulada.\n\nIsto torna possível escolher um CPU que, de outra forma, não seria compatível com a máquina escolhida. No entanto, pode não ser compatível com a BIOS da máquina ou outros programas.\n\nA activação desta definição não tem suporte oficial e qualquer relatório de erros pode ser fechado como inválido."
|
||||
@@ -1207,7 +1171,7 @@ msgid "Use regular expressions in search box"
|
||||
msgstr "Usa expressões regulares na caixa de procura"
|
||||
|
||||
msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?"
|
||||
msgstr "%1 máquina(s) estão actualmente activas. Quer mesmo sair do gerenciador de MVs"
|
||||
msgstr "%1 máquina(s) estão actualmente activas. Quer mesmo sair do gerenciador de MVs?"
|
||||
|
||||
msgid "Add new system wizard"
|
||||
msgstr "Assistende de adicionamento do novo sistema"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Sistema"
|
||||
msgid "Storage"
|
||||
msgstr "Armazenamento"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disco %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disco %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Sem discos"
|
||||
@@ -1426,7 +1390,7 @@ msgid "Hard disk (%1)"
|
||||
msgstr "Disco rígido (%1)"
|
||||
|
||||
msgid "MFM/RLL or ESDI CD-ROM drives never existed"
|
||||
msgstr "Unidades CD-ROM com barramento MFM/RLL ou ESDI nunca existiram!"
|
||||
msgstr "Unidades CD-ROM com barramento MFM/RLL ou ESDI nunca existiram"
|
||||
|
||||
msgid "Custom..."
|
||||
msgstr "Personalizado..."
|
||||
@@ -1546,7 +1510,7 @@ msgid "This could mean that the parent image was modified after the differencing
|
||||
msgstr "Isto pode significar que a imagem pai foi modificada depois da criação da imagem diferenciadora.\n\nTambém pode acontecer se os ficheiros da imagem foram movidos ou copiados ou por causa de um erro no programa que criou este disco.\n\nQuer corrigir os carimbos de data/hora?"
|
||||
|
||||
msgid "Parent and child disk timestamps do not match"
|
||||
msgstr "Os carimbos de data/hora dos discos pai e filho não correspondem!"
|
||||
msgstr "Os carimbos de data/hora dos discos pai e filho não correspondem"
|
||||
|
||||
msgid "Could not fix VHD timestamp."
|
||||
msgstr "Não foi possível corrigir o carimbo de data/hora do VHD."
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Movi-a"
|
||||
msgid "I Copied It"
|
||||
msgstr "Copiei-a"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "Monitor 86Box "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Monitor 86Box %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Não há dispositivos MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Força do filtro do SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Módulo Surround"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Ativar a interrupção do CODEC na configuração do CODEC (necessário para alguns controladores)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Endereço SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Ativar OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (estéreo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Clássico"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2782,7 +2749,7 @@ msgid "Unable to find Dot-Matrix fonts"
|
||||
msgstr "Não foi possível encontrar os fontes matriciais de pontos"
|
||||
|
||||
msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P 2 Dot-Matrix Printer."
|
||||
msgstr "As fontes TrueType no diretório \"roms/printer/fonts\" são necessárias para a emulação da impressora matricial de pontos ESC/P 2 genérica"
|
||||
msgstr "As fontes TrueType no diretório \"roms/printer/fonts\" são necessárias para a emulação da impressora matricial de pontos ESC/P 2 genérica."
|
||||
|
||||
msgid "Inhibit multimedia keys"
|
||||
msgstr "Deshabilitar teclas de multimídia"
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Erro de GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Não foi possível carregar o shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "É requerida a versão 3.0 ou mais nova do OpenGL. A versão actual de GLSL é %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Não foi possível carregar a textura: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Enviar Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Alternar o modo em ecrã cheio"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Captura de ecrã"
|
||||
|
||||
@@ -2908,7 +2875,7 @@ msgid "Remote Switch"
|
||||
msgstr "Comutador remoto"
|
||||
|
||||
msgid "Switch:"
|
||||
msgstr "Comutador"
|
||||
msgstr "Comutador:"
|
||||
|
||||
msgid "Hub Mode"
|
||||
msgstr "Modo de concentrador"
|
||||
|
||||
@@ -76,13 +76,13 @@ msgid "&Window scale factor"
|
||||
msgstr "&Масштаб окна"
|
||||
|
||||
msgid "&0.5x"
|
||||
msgstr "&0.5x"
|
||||
msgstr "&0,5x"
|
||||
|
||||
msgid "&1x"
|
||||
msgstr "&1x"
|
||||
|
||||
msgid "1.&5x"
|
||||
msgstr "1.&5x"
|
||||
msgstr "1,&5x"
|
||||
|
||||
msgid "&2x"
|
||||
msgstr "&2x"
|
||||
@@ -273,36 +273,6 @@ msgstr "Перезагрузить предыдущий образ"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Папка..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Целевая &частота кадров"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Синхронизация с видео"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 кадров в секунду"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 кадров в секунду"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 кадров в секунду"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 кадров в секунду"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 кадров в секунду"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Выбрать шейдер..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Удалить шейдер"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Параметры"
|
||||
|
||||
@@ -460,16 +430,16 @@ msgid "Joystick 4..."
|
||||
msgstr "Джойстик 4..."
|
||||
|
||||
msgid "Sound card #1:"
|
||||
msgstr "Звуковая карта 1:"
|
||||
msgstr "Звуковая карта № 1:"
|
||||
|
||||
msgid "Sound card #2:"
|
||||
msgstr "Звуковая карта 2:"
|
||||
msgstr "Звуковая карта № 2:"
|
||||
|
||||
msgid "Sound card #3:"
|
||||
msgstr "Звуковая карта 3:"
|
||||
msgstr "Звуковая карта № 3:"
|
||||
|
||||
msgid "Sound card #4:"
|
||||
msgstr "Звуковая карта 4:"
|
||||
msgstr "Звуковая карта № 4:"
|
||||
|
||||
msgid "MIDI Out Device:"
|
||||
msgstr "Устройство вывода MIDI:"
|
||||
@@ -687,9 +657,6 @@ msgstr "Устройство ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Карта POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Ошибка"
|
||||
|
||||
@@ -715,7 +682,7 @@ msgid "Image %1"
|
||||
msgstr "Образ %1"
|
||||
|
||||
msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory."
|
||||
msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста <a href=\"https://github.com/86Box/roms/releases/latest\">скачайте</a> набор ПЗУ и извлеките его в каталог \"roms\"."
|
||||
msgstr "86Box не смог найти ни одного подходящего для использования файла с ПЗУ.\n\nПожалуйста <a href=\"https://github.com/86Box/roms/releases/latest\">скачайте</a> набор ПЗУ и извлеките его в каталог «roms»."
|
||||
|
||||
msgid "(empty)"
|
||||
msgstr "(пусто)"
|
||||
@@ -742,16 +709,16 @@ msgid "Surface images"
|
||||
msgstr "Surface образы"
|
||||
|
||||
msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."
|
||||
msgstr "Системная плата \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату."
|
||||
msgstr "Системная плата «%hs» недоступна из-за отсутствия файла её ПЗУ в каталоге roms/machines. Переключение на доступную системную плату."
|
||||
|
||||
msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card."
|
||||
msgstr "Видеокарта \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Переключение на доступную видеокарту."
|
||||
msgstr "Видеокарта «%hs» недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Переключение на доступную видеокарту."
|
||||
|
||||
msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Disabling the second video card."
|
||||
msgstr "Видеокарта 2 \"%hs\" недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Вторая видеокарта отключена."
|
||||
msgstr "Видеокарта 2 «%hs» недоступна из-за отсутствия файла её ПЗУ в каталоге roms/video. Вторая видеокарта отключена."
|
||||
|
||||
msgid "Device \"%hs\" is not available due to missing ROMs. Ignoring the device."
|
||||
msgstr "Устройство \"%hs\" недоступно из-за отсутствия файла его ПЗУ. Устройство проигнорировано."
|
||||
msgstr "Устройство «%hs» недоступно из-за отсутствия файла его ПЗУ. Устройство проигнорировано."
|
||||
|
||||
msgid "Machine"
|
||||
msgstr "Компьютер"
|
||||
@@ -973,7 +940,7 @@ msgid "Thrustmaster Flight Control System"
|
||||
msgstr "Система управления полётом Thrustmaster"
|
||||
|
||||
msgid "Thrustmaster FCS + Rudder Control System"
|
||||
msgstr "Thrustmaster FCS + Система управления рулем"
|
||||
msgstr "Thrustmaster FCS + Система управления рулём"
|
||||
|
||||
msgid "Thrustmaster Formula T1/T2 with adapter"
|
||||
msgstr "Thrustmaster Formula T1/T2 с адаптером"
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Это приведёт к холодной перезагрузке э
|
||||
msgid "Save"
|
||||
msgstr "Сохранить"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "О 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "О %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Эмулятор старых компьютеров\n\nАвторы: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nС предыдущими основными материалами от Sarah Walker, leilei, JohnElliott, greatpsycho и других.\n\nВыпускается под лицензией GNU General Public License версии 2 или более поздней. Дополнительную информацию см. в файле LICENSE."
|
||||
@@ -1309,7 +1273,7 @@ msgid "C&lone..."
|
||||
msgstr "К&лонировать..."
|
||||
|
||||
msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "Виртуальная машина \"%1\" (%2) будет клонирована в:"
|
||||
msgstr "Виртуальная машина «%1» (%2) будет клонирована в:"
|
||||
|
||||
msgid "Directory %1 already exists"
|
||||
msgstr "Папка %1 уже существует"
|
||||
@@ -1375,13 +1339,13 @@ msgid "&Kill"
|
||||
msgstr "&Завершить процесс"
|
||||
|
||||
msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?"
|
||||
msgstr "Принудительное завершение процесса виртуальной машины может привести к потере данных. Делайте это только в том случае, если процесс 86Box завис.\n\nВы действительно хотите принудительно завершить процесс виртуальной машины \"%1\"?"
|
||||
msgstr "Принудительное завершение процесса виртуальной машины может привести к потере данных. Делайте это только в том случае, если процесс 86Box завис.\n\nВы действительно хотите принудительно завершить процесс виртуальной машины «%1»?"
|
||||
|
||||
msgid "&Delete"
|
||||
msgstr "&Удалить"
|
||||
|
||||
msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!"
|
||||
msgstr "Вы действительно хотите удалить виртуальную машину \"%1\" и все её файлы? Это действие не может быть отменено!"
|
||||
msgstr "Вы действительно хотите удалить виртуальную машину «%1» и все её файлы? Это действие не может быть отменено!"
|
||||
|
||||
msgid "Show &config file"
|
||||
msgstr "Показать файл &конфигурации"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Система"
|
||||
msgid "Storage"
|
||||
msgstr "Диски"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Диск %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Диск %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Нет дисков"
|
||||
@@ -1591,13 +1555,13 @@ msgid "720 KB"
|
||||
msgstr "720 КБ"
|
||||
|
||||
msgid "1.2 MB"
|
||||
msgstr "1.2 МБ"
|
||||
msgstr "1,2 МБ"
|
||||
|
||||
msgid "1.25 MB"
|
||||
msgstr "1.25 МБ"
|
||||
msgstr "1,25 МБ"
|
||||
|
||||
msgid "1.44 MB"
|
||||
msgstr "1.44 МБ"
|
||||
msgstr "1,44 МБ"
|
||||
|
||||
msgid "DMF (cluster 1024)"
|
||||
msgstr "DMF (кластер 1024)"
|
||||
@@ -1606,40 +1570,40 @@ msgid "DMF (cluster 2048)"
|
||||
msgstr "DMF (кластер 2048)"
|
||||
|
||||
msgid "2.88 MB"
|
||||
msgstr "2.88 МБ"
|
||||
msgstr "2,88 МБ"
|
||||
|
||||
msgid "ZIP 100"
|
||||
msgstr "ZIP 100"
|
||||
|
||||
msgid "3.5\" 128 MB (ISO 10090)"
|
||||
msgstr "3.5\" 128 МБ (ISO 10090)"
|
||||
msgstr "3,5\" 128 МБ (ISO 10090)"
|
||||
|
||||
msgid "3.5\" 230 MB (ISO 13963)"
|
||||
msgstr "3.5\" 230 МБ (ISO 13963)"
|
||||
msgstr "3,5\" 230 МБ (ISO 13963)"
|
||||
|
||||
msgid "3.5\" 540 MB (ISO 15498)"
|
||||
msgstr "3.5\" 540 МБ (ISO 15498)"
|
||||
msgstr "3,5\" 540 МБ (ISO 15498)"
|
||||
|
||||
msgid "3.5\" 640 MB (ISO 15498)"
|
||||
msgstr "3.5\" 640 МБ (ISO 15498)"
|
||||
msgstr "3,5\" 640 МБ (ISO 15498)"
|
||||
|
||||
msgid "3.5\" 1.3 GB (GigaMO)"
|
||||
msgstr "3.5\" 1.3 ГБ (GigaMO)"
|
||||
msgstr "3,5\" 1,3 ГБ (GigaMO)"
|
||||
|
||||
msgid "3.5\" 2.3 GB (GigaMO 2)"
|
||||
msgstr "3.5\" 2.3 ГБ (GigaMO 2)"
|
||||
msgstr "3,5\" 2,3 ГБ (GigaMO 2)"
|
||||
|
||||
msgid "5.25\" 600 MB"
|
||||
msgstr "5.25\" 600 МБ"
|
||||
msgstr "5,25\" 600 МБ"
|
||||
|
||||
msgid "5.25\" 650 MB"
|
||||
msgstr "5.25\" 650 МБ"
|
||||
msgstr "5,25\" 650 МБ"
|
||||
|
||||
msgid "5.25\" 1 GB"
|
||||
msgstr "5.25\" 1 ГБ"
|
||||
msgstr "5,25\" 1 ГБ"
|
||||
|
||||
msgid "5.25\" 1.3 GB"
|
||||
msgstr "5.25\" 1.3 ГБ"
|
||||
msgstr "5,25\" 1,3 ГБ"
|
||||
|
||||
msgid "Perfect RPM"
|
||||
msgstr "Точный RPM"
|
||||
@@ -1648,7 +1612,7 @@ msgid "1% below perfect RPM"
|
||||
msgstr "На 1% медленнее точного RPM"
|
||||
|
||||
msgid "1.5% below perfect RPM"
|
||||
msgstr "На 1.5% медленнее точного RPM"
|
||||
msgstr "На 1,5% медленнее точного RPM"
|
||||
|
||||
msgid "2% below perfect RPM"
|
||||
msgstr "На 2% медленнее точного RPM"
|
||||
@@ -1810,7 +1774,7 @@ msgid "This machine might have been moved or copied."
|
||||
msgstr "Возможно, эта машина была перемещена или скопирована."
|
||||
|
||||
msgid "In order to ensure proper networking functionality, 86Box needs to know if this machine was moved or copied.\n\nSelect \"I Copied It\" if you are not sure."
|
||||
msgstr "Чтобы обеспечить правильную работу сети, 86Box должен знать, была ли эта машина перемещена или скопирована.\n\nЕсли вы не уверены, выберите \"Скопирована\"."
|
||||
msgstr "Чтобы обеспечить правильную работу сети, 86Box должен знать, была ли эта машина перемещена или скопирована.\n\nЕсли вы не уверены, выберите «Скопирована»."
|
||||
|
||||
msgid "I Moved It"
|
||||
msgstr "Перемещена"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Перемещена"
|
||||
msgid "I Copied It"
|
||||
msgstr "Скопирована"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitor #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Монитор 86Box № %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Нет устройств MCA."
|
||||
@@ -1831,16 +1795,16 @@ msgid "GiB"
|
||||
msgstr "ГиБ"
|
||||
|
||||
msgid "Network Card #1"
|
||||
msgstr "Сетевая карта 1"
|
||||
msgstr "Сетевая карта № 1"
|
||||
|
||||
msgid "Network Card #2"
|
||||
msgstr "Сетевая карта 2"
|
||||
msgstr "Сетевая карта № 2"
|
||||
|
||||
msgid "Network Card #3"
|
||||
msgstr "Сетевая карта 3"
|
||||
msgstr "Сетевая карта № 3"
|
||||
|
||||
msgid "Network Card #4"
|
||||
msgstr "Сетевая карта 4"
|
||||
msgstr "Сетевая карта № 4"
|
||||
|
||||
msgid "Mode:"
|
||||
msgstr "Режим:"
|
||||
@@ -1957,46 +1921,46 @@ msgid "BIOS file"
|
||||
msgstr "Файл BIOS"
|
||||
|
||||
msgid "BIOS file (ROM #1)"
|
||||
msgstr "Файл BIOS (ПЗУ #1)"
|
||||
msgstr "Файл BIOS (ПЗУ № 1)"
|
||||
|
||||
msgid "BIOS file (ROM #2)"
|
||||
msgstr "Файл BIOS (ПЗУ #2)"
|
||||
msgstr "Файл BIOS (ПЗУ № 2)"
|
||||
|
||||
msgid "BIOS file (ROM #3)"
|
||||
msgstr "Файл BIOS (ПЗУ #3)"
|
||||
msgstr "Файл BIOS (ПЗУ № 3)"
|
||||
|
||||
msgid "BIOS file (ROM #4)"
|
||||
msgstr "Файл BIOS (ПЗУ #4)"
|
||||
msgstr "Файл BIOS (ПЗУ № 4)"
|
||||
|
||||
msgid "BIOS address"
|
||||
msgstr "Адрес BIOS"
|
||||
|
||||
msgid "BIOS address (ROM #1)"
|
||||
msgstr "Адрес BIOS (ПЗУ #1)"
|
||||
msgstr "Адрес BIOS (ПЗУ № 1)"
|
||||
|
||||
msgid "BIOS address (ROM #2)"
|
||||
msgstr "Адрес BIOS (ПЗУ #2)"
|
||||
msgstr "Адрес BIOS (ПЗУ № 2)"
|
||||
|
||||
msgid "BIOS address (ROM #3)"
|
||||
msgstr "Адрес BIOS (ПЗУ #3)"
|
||||
msgstr "Адрес BIOS (ПЗУ № 3)"
|
||||
|
||||
msgid "BIOS address (ROM #4)"
|
||||
msgstr "Адрес BIOS (ПЗУ #4)"
|
||||
msgstr "Адрес BIOS (ПЗУ № 4)"
|
||||
|
||||
msgid "Enable BIOS extension ROM Writes"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS"
|
||||
|
||||
msgid "Enable BIOS extension ROM Writes (ROM #1)"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS (ПЗУ #1)"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS (ПЗУ № 1)"
|
||||
|
||||
msgid "Enable BIOS extension ROM Writes (ROM #2)"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS (ПЗУ #2)"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS (ПЗУ № 2)"
|
||||
|
||||
msgid "Enable BIOS extension ROM Writes (ROM #3)"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS (ПЗУ #3)"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS (ПЗУ № 3)"
|
||||
|
||||
msgid "Enable BIOS extension ROM Writes (ROM #4)"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS (ПЗУ #4)"
|
||||
msgstr "Разрешить запись в ПЗУ расширения BIOS (ПЗУ № 4)"
|
||||
|
||||
msgid "Linear framebuffer base"
|
||||
msgstr "Линейный фреймбуфер"
|
||||
@@ -2044,16 +2008,16 @@ msgid "BIOS size"
|
||||
msgstr "Размер BIOS"
|
||||
|
||||
msgid "BIOS size (ROM #1)"
|
||||
msgstr "Размер BIOS (ПЗУ #1)"
|
||||
msgstr "Размер BIOS (ПЗУ № 1)"
|
||||
|
||||
msgid "BIOS size (ROM #2)"
|
||||
msgstr "Размер BIOS (ПЗУ #2)"
|
||||
msgstr "Размер BIOS (ПЗУ № 2)"
|
||||
|
||||
msgid "BIOS size (ROM #3)"
|
||||
msgstr "Размер BIOS (ПЗУ #3)"
|
||||
msgstr "Размер BIOS (ПЗУ № 3)"
|
||||
|
||||
msgid "BIOS size (ROM #4)"
|
||||
msgstr "Размер BIOS (ПЗУ #4)"
|
||||
msgstr "Размер BIOS (ПЗУ № 4)"
|
||||
|
||||
msgid "Map C0000-C7FFF as UMB"
|
||||
msgstr "Отображение C0000-C7FFF в качестве UMB"
|
||||
@@ -2221,7 +2185,7 @@ msgid "Enable Game port"
|
||||
msgstr "Включить игровой порт"
|
||||
|
||||
msgid "Enable Adlib ports"
|
||||
msgstr "Включить порты Adlib"
|
||||
msgstr "Включить порты AdLib"
|
||||
|
||||
msgid "SID Model"
|
||||
msgstr "Модель SID"
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Сила фильтра SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Модуль объёмного звучания"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "Кодек"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Поднимать прерывание кодека при настройке кодека (необходимо некоторым драйверам)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Адрес SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ WSS"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA WSS"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr "IRQ RTC"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr "Адрес порта RTC"
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr "Встроенный RTC"
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr "Не установлен"
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Включить OPL"
|
||||
|
||||
@@ -2293,7 +2263,7 @@ msgid "GUS type"
|
||||
msgstr "Тип GUS"
|
||||
|
||||
msgid "Enable 0x04 \"Exit 86Box\" command"
|
||||
msgstr "Включить команду 0x04 \"Выход из 86Box\""
|
||||
msgstr "Включить команду 0x04 «Выход из 86Box»"
|
||||
|
||||
msgid "Display type"
|
||||
msgstr "Тип дисплея"
|
||||
@@ -2470,10 +2440,10 @@ msgid "Five + 2 Wheels"
|
||||
msgstr "Пять + 2 колеса"
|
||||
|
||||
msgid "A3 - SMT2 Serial / SMT3(R)V"
|
||||
msgstr "A3 - SMT2 последовательная / SMT3(R)V"
|
||||
msgstr "A3 - SMT2 последовательный / SMT3(R)V"
|
||||
|
||||
msgid "Q1 - SMT3(R) Serial"
|
||||
msgstr "Q1 - SMT3(R) последовательная"
|
||||
msgstr "Q1 - SMT3(R) последовательный"
|
||||
|
||||
msgid "8 KB"
|
||||
msgstr "8 КБ"
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 МБ"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (стерео)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Классический"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 КБ"
|
||||
|
||||
@@ -2782,7 +2749,7 @@ msgid "Unable to find Dot-Matrix fonts"
|
||||
msgstr "Невозможно найти матричные шрифты"
|
||||
|
||||
msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P 2 Dot-Matrix Printer."
|
||||
msgstr "Шрифты TrueType в каталоге \"roms/printer/fonts\" необходимы для эмуляции стандартного матричного принтера ESC/P 2."
|
||||
msgstr "Шрифты TrueType в каталоге «roms/printer/fonts» необходимы для эмуляции стандартного матричного принтера ESC/P 2."
|
||||
|
||||
msgid "Inhibit multimedia keys"
|
||||
msgstr "Перехватывать мультимедийные клавиши"
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Ошибка GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Не удалось загрузить шейдер: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Требуется OpenGL версии 3.0 или выше. Текущая версия GLSL %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Не удалось загрузить текстуру: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Отправить Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Переключить полноэкранный режим"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr "Переключить UI в полноэкранном режиме"
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Скриншот"
|
||||
|
||||
@@ -2926,16 +2893,16 @@ msgid "&Wipe NVRAM"
|
||||
msgstr "&Стереть NVRAM"
|
||||
|
||||
msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?"
|
||||
msgstr "Это удалит все файлы NVRAM (и связанные) виртуальной машины, расположенной в подпапке \"nvr\". Вам придётся снова реконфигурировать настройки BIOS (и, возможно, другие устройства внутри виртуальной машины), если применимо.\n\nВы уверены, что хотите стереть всё содержимое NVRAM виртуальной машины \"%1\"?"
|
||||
msgstr "Это удалит все файлы NVRAM (и связанные) виртуальной машины, расположенной в подпапке «nvr». Вам придётся снова реконфигурировать настройки BIOS (и, возможно, другие устройства внутри виртуальной машины), если применимо.\n\nВы уверены, что хотите стереть всё содержимое NVRAM виртуальной машины «%1»?"
|
||||
|
||||
msgid "Success"
|
||||
msgstr "Успешно"
|
||||
|
||||
msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Успешно стёрто содержимое NVRAM виртуальной машины \"%1\""
|
||||
msgstr "Успешно стёрто содержимое NVRAM виртуальной машины «%1»"
|
||||
|
||||
msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Произошла ошибка при попытке стереть содержимое NVRAM виртуальной машины \"%1\""
|
||||
msgstr "Произошла ошибка при попытке стереть содержимое NVRAM виртуальной машины «%1»"
|
||||
|
||||
msgid "%1 VM Manager"
|
||||
msgstr "Менеджер виртуальных машин %1"
|
||||
@@ -3013,7 +2980,7 @@ msgid "Virtual machine crash"
|
||||
msgstr "Сбой виртуальной машины"
|
||||
|
||||
msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2."
|
||||
msgstr "Процесс виртуальной машины \"%1\" неожиданно завершился с кодом завершения %2."
|
||||
msgstr "Процесс виртуальной машины «%1» неожиданно завершился с кодом завершения %2."
|
||||
|
||||
msgid "The system will not be added."
|
||||
msgstr "Система не будет добавлена."
|
||||
@@ -3052,7 +3019,7 @@ msgid "Export EDID"
|
||||
msgstr "Экспорт EDID"
|
||||
|
||||
msgid "EDID file \"%ls\" is too large."
|
||||
msgstr "Файл EDID \"%ls\" слишком велик."
|
||||
msgstr "Файл EDID «%ls» слишком велик."
|
||||
|
||||
msgid "OpenGL input scale"
|
||||
msgstr "Масштаб ввода OpenGL"
|
||||
|
||||
@@ -214,7 +214,7 @@ msgid "Enable &Discord integration"
|
||||
msgstr "Povolenie integrácie s &Discordem"
|
||||
|
||||
msgid "Sound &gain..."
|
||||
msgstr "&Zosilnenie zvuku"
|
||||
msgstr "&Zosilnenie zvuku..."
|
||||
|
||||
msgid "Begin trace"
|
||||
msgstr "Začať trace"
|
||||
@@ -226,10 +226,10 @@ msgid "&Help"
|
||||
msgstr "&Pomoc"
|
||||
|
||||
msgid "&Documentation..."
|
||||
msgstr "&Dokumentácia"
|
||||
msgstr "&Dokumentácia..."
|
||||
|
||||
msgid "&About 86Box..."
|
||||
msgstr "&O programu 86Box"
|
||||
msgstr "&O programu 86Box..."
|
||||
|
||||
msgid "&New image..."
|
||||
msgstr "&Nový obraz..."
|
||||
@@ -273,36 +273,6 @@ msgstr "Načítať znova predchádzajúci obraz"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Zložka..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "&Cieľová snímková frekvencia"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Synchronizovať s obrazom"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Zvoliť shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Odobrať shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Predvoľby"
|
||||
|
||||
@@ -478,7 +448,7 @@ msgid "MIDI In Device:"
|
||||
msgstr "Zariadenie pre MIDI vstup:"
|
||||
|
||||
msgid "MIDI Out:"
|
||||
msgstr "MIDI výstup"
|
||||
msgstr "MIDI výstup:"
|
||||
|
||||
msgid "Standalone MPU-401"
|
||||
msgstr "Samostatný MPU-401"
|
||||
@@ -559,7 +529,7 @@ msgid "Quaternary IDE Controller"
|
||||
msgstr "Štvrtý radič IDE"
|
||||
|
||||
msgid "Hard disk"
|
||||
msgstr "Radič CD-ROM:"
|
||||
msgstr "Pevný disk"
|
||||
|
||||
msgid "SCSI"
|
||||
msgstr "SCSI"
|
||||
@@ -687,9 +657,6 @@ msgstr "Zariadenie ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Karta pre kódy POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Chyba"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Pokračovaním sa resetuje emulovaný počítač."
|
||||
msgid "Save"
|
||||
msgstr "Uložiť"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "O programe 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "O programe %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Emulátor starých počítačov\n\nAutori: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nS predchádzajúcimi hlavnými príspevkami od Sarah Walker, leilei, JohnElliott, greatpsycho a ďalších.\n\nZverejnené pod licenciou GNU General Public License verzie 2 alebo novšej. Pozri súbor LICENSE pre viac informácií."
|
||||
@@ -1258,7 +1222,7 @@ msgid "Directory does not exist"
|
||||
msgstr "Adresár neexistuje"
|
||||
|
||||
msgid "A new directory for the system will be created in the selected directory above"
|
||||
msgstr "Pre tento systém bude vytvorený nový adresár vo vyššie zvolenom adresári."
|
||||
msgstr "Pre tento systém bude vytvorený nový adresár vo vyššie zvolenom adresári"
|
||||
|
||||
msgid "System location:"
|
||||
msgstr "Umiestnenie systému:"
|
||||
@@ -1312,7 +1276,7 @@ msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "Virtuálny počítač \"%1\" (%2) bude klonovaný do:"
|
||||
|
||||
msgid "Directory %1 already exists"
|
||||
msgstr "Adresár %1 už existuje."
|
||||
msgstr "Adresár %1 už existuje"
|
||||
|
||||
msgid "You cannot use the following characters in the name: %1"
|
||||
msgstr "V názve nemožno použiť nasledujúce znaky: %1"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Systém"
|
||||
msgid "Storage"
|
||||
msgstr "Úložisko"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disk %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Žiadne disky"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Presunul som ho"
|
||||
msgid "I Copied It"
|
||||
msgstr "Skopíroval som ho"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitor "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box Monitor %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Žiadne zariadenia MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Sila filtra SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Surround modul"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Zvýšenie prerušenia CODEC pri nastavení CODEC (potrebné v niektorých ovládačoch)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Adresa SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Povolenie OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klasické"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Chyba GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Nebol možné načítať shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Je vyžadovaná verzia OpenGL 3.0 alebo vyššia. Aktuálna verzia GLSL je %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Nebolo možné načítať textúru: %1"
|
||||
|
||||
@@ -2842,10 +2806,10 @@ msgid "Move down"
|
||||
msgstr "Posunúť nižšie"
|
||||
|
||||
msgid "Could not load file %1"
|
||||
msgstr "Nebolo možné možné načítať súbor %1"
|
||||
msgstr "Nebolo možné načítať súbor %1"
|
||||
|
||||
msgid "Key Bindings:"
|
||||
msgstr "Nastavenie klávesov"
|
||||
msgstr "Nastavenie klávesov:"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Akcia"
|
||||
@@ -2863,7 +2827,7 @@ msgid "Bind Key"
|
||||
msgstr "Nastaviť klávesu"
|
||||
|
||||
msgid "Enter key combo:"
|
||||
msgstr "Zadajte kombináciu klávesov"
|
||||
msgstr "Zadajte kombináciu klávesov:"
|
||||
|
||||
msgid "Bind conflict"
|
||||
msgstr "Konflikt nastavení"
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Stlačte Ctrl+Alt+Esc"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Prepnúť režim celej obrazovky"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Zhotoviť snímku obrazovky"
|
||||
|
||||
@@ -2914,7 +2881,7 @@ msgid "Hub Mode"
|
||||
msgstr "Režim hubu"
|
||||
|
||||
msgid "Hostname:"
|
||||
msgstr "Hostiteľské meno"
|
||||
msgstr "Hostiteľské meno:"
|
||||
|
||||
msgid "ISA RAM:"
|
||||
msgstr "ISA pamäť RAM:"
|
||||
@@ -2932,7 +2899,7 @@ msgid "Success"
|
||||
msgstr "Úspech"
|
||||
|
||||
msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Obsah NVRAM virtuálneho počítača \"%1\" bol úspešne vymazaný."
|
||||
msgstr "Obsah NVRAM virtuálneho počítača \"%1\" bol úspešne vymazaný"
|
||||
|
||||
msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Pri pokuse o vymazanie obsahu NVRAM virtuálneho počítača \"%1\" došlo k chybe"
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Naloži zadnjo sliko"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Mapa..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "&Ciljno št. kadrov na sekundo"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Sinhroniziraj z videom"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Izberi senčilnik..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Odstrani senčilnik"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Možnosti"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "Naprava ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Kartica POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Napaka"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "To bo ponovno zagnalo emuliran sistem."
|
||||
msgid "Save"
|
||||
msgstr "Shrani"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "O programu 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "O programu %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Emulator starih računalnikov\n\nAvtorji: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne in drugi.\n\nS prejšnjimi prispevki Sarah Walker, leilei, JohnElliott, greatpsycho in drugih.\n\nIzdano pod licenco GNU General Public License različica 2 ali novejša. Glej datoteko LICENSE za več informacij."
|
||||
@@ -1300,7 +1264,7 @@ msgid "Open p&rinter tray..."
|
||||
msgstr "Odpri pladenj &tiskalnika..."
|
||||
|
||||
msgid "Set &icon..."
|
||||
msgstr "Izberi &ikono"
|
||||
msgstr "Izberi &ikono..."
|
||||
|
||||
msgid "Select an icon"
|
||||
msgstr "Izberi ikono"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Sistem"
|
||||
msgid "Storage"
|
||||
msgstr "Shramba"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disk %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Ni diskov"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Premaknil sem jo"
|
||||
msgid "I Copied It"
|
||||
msgstr "Kopiral sem jo"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitor "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box Monitor %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Ni naprav MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Jakost filtra SID-a"
|
||||
msgid "Surround module"
|
||||
msgstr "Prostorski modul"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Dvigni prekinitev za CODEC ob nastavitvi CODEC-a (to potrebujejo nekateri gonilniki)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Naslov SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ WSS"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA WSS"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Omogoči OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klasični"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Napaka GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Ni bilo mogoče naložiti senčilnika: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Potrebna je OpenGL različica 3.0 ali novejša. Trenutna različica GLSL je %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Ni bilo mogoče naložiti teksture: %1"
|
||||
|
||||
@@ -2845,7 +2809,7 @@ msgid "Could not load file %1"
|
||||
msgstr "Ni bilo mogoče naložiti datoteke %1"
|
||||
|
||||
msgid "Key Bindings:"
|
||||
msgstr "Kombinacije tipk"
|
||||
msgstr "Kombinacije tipk:"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Dejanje"
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Pošlji Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Preklopi celozaslonski način"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Zajem zaslona"
|
||||
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Ladda om föregående avbildning"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Mapp..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Mål för &bildhastighet"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Synkronisera med bild"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Välj shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Ta bort shader"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Preferenser"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABugger-enhet"
|
||||
msgid "POST card"
|
||||
msgstr "POST-kort"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Fel"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Detta kommer att göra en hård omstart av den emulerade maskinen."
|
||||
msgid "Save"
|
||||
msgstr "Spara"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Om 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Om %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "En emulator av gamla datorer\n\nUpphovsmän: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, med flera.\n\nMed tidigare grundbidrag från Sarah Walker, leilei, JohnElliott, greatpsycho, med flera.\n\nSläppt under GNU General Public License upplaga 2 eller senare. Se LICENSE för mer information."
|
||||
@@ -1404,7 +1368,7 @@ msgstr "System"
|
||||
msgid "Storage"
|
||||
msgstr "Lagring"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disk %1:"
|
||||
|
||||
msgid "No disks"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Jag flyttade den"
|
||||
msgid "I Copied It"
|
||||
msgstr "Jag kopierade den"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box skärm #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box skärm #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Inga MCA-enheter."
|
||||
@@ -2053,7 +2017,7 @@ msgid "BIOS size (ROM #3)"
|
||||
msgstr "Storlek på BIOS (ROM #3)"
|
||||
|
||||
msgid "BIOS size (ROM #4)"
|
||||
msgstr "Storlek på BIOS (BIOS #4)"
|
||||
msgstr "Storlek på BIOS (ROM #4)"
|
||||
|
||||
msgid "Map C0000-C7FFF as UMB"
|
||||
msgstr "Kartlägg C0000-C7FFF som UMB"
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID filetstyrka"
|
||||
msgid "Surround module"
|
||||
msgstr "Sorround-modul"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Öka avbrottsnummer för CODEC vid CODEC-installation (krävs av vissa drivrutiner)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Adress för SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Aktivera OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klassisk"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSL-fel"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Kunde inte ladda shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL version 3.0 eller högre krävs. Nuvarande GLSL-version är %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Kunde inte ladda textur: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Skicka Ctrl+Alt+Esc"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Helskärm"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Skärmbild"
|
||||
|
||||
@@ -2932,10 +2899,10 @@ msgid "Success"
|
||||
msgstr "Lyckades"
|
||||
|
||||
msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Lyckades tömma allt NVRAM-innehåll för den virtuella maskinen \"%1\"."
|
||||
msgstr "Lyckades tömma allt NVRAM-innehåll för den virtuella maskinen \"%1\""
|
||||
|
||||
msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Ett fel uppstod vid försök att tömma NVRAM-innehållet för den virtuella maskinen \"%1\"."
|
||||
msgstr "Ett fel uppstod vid försök att tömma NVRAM-innehållet för den virtuella maskinen \"%1\""
|
||||
|
||||
msgid "%1 VM Manager"
|
||||
msgstr "%1 VM-hanterare"
|
||||
|
||||
@@ -273,36 +273,6 @@ msgstr "Önceki görüntüyü yeniden seç"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Klasör seç..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Hedef &kare hızı oranı"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "Video ile &senkronize et"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "Gölgelendirici &seç..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Gölgelendiriciyi kaldır"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Tercihler"
|
||||
|
||||
@@ -586,10 +556,10 @@ msgid "Firmware Version"
|
||||
msgstr "Bellenim Sürümü"
|
||||
|
||||
msgid "&New..."
|
||||
msgstr "&Yeni görüntü oluştur"
|
||||
msgstr "&Yeni görüntü oluştur..."
|
||||
|
||||
msgid "&Existing..."
|
||||
msgstr "&Görüntü dosyası seç"
|
||||
msgstr "&Görüntü dosyası seç..."
|
||||
|
||||
msgid "&Remove"
|
||||
msgstr "&Kaldır"
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABugger cihazı"
|
||||
msgid "POST card"
|
||||
msgstr "POST kartı"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Hata"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Bu işlem makineyi yeniden başlamaya zorlayacak."
|
||||
msgid "Save"
|
||||
msgstr "Kaydet"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "86Box hakkında"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "%1 hakkında"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Bir eski bilgisayar emülatörü\n\nYapımcılar: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne ve diğerleri.\n\nSarah Walker, leilei, JohnElliott, greatpsycho, ve diğerlerinin önceki katkılarıyla birlikte.\n\nGNU Genel Kamu Lisansı versiyon 2 veya sonrası altında yayınlanmıştır. Daha fazla bilgi için LICENSE kısmını gözden geçirin."
|
||||
@@ -1189,7 +1153,7 @@ msgid "System Directory:"
|
||||
msgstr "Sistem Dizini:"
|
||||
|
||||
msgid "Choose directory"
|
||||
msgstr "Dizin seç:"
|
||||
msgstr "Dizin seç"
|
||||
|
||||
msgid "Choose configuration file"
|
||||
msgstr "Yapılandırma dosyası seç"
|
||||
@@ -1264,7 +1228,7 @@ msgid "System location:"
|
||||
msgstr "Sistem yeri:"
|
||||
|
||||
msgid "System name and location"
|
||||
msgstr "Sistem adı ve yeri:"
|
||||
msgstr "Sistem adı ve yeri"
|
||||
|
||||
msgid "Enter the name of the system and choose the location"
|
||||
msgstr "Sistemin adını girin ve yerini seçin"
|
||||
@@ -1276,7 +1240,7 @@ msgid "Please enter a system name"
|
||||
msgstr "Lütfen bir sistem adı girin"
|
||||
|
||||
msgid "Display name (optional):"
|
||||
msgstr "Görüntü adı (isteğe bağlı)"
|
||||
msgstr "Görüntü adı (isteğe bağlı):"
|
||||
|
||||
msgid "Display name:"
|
||||
msgstr "Görüntü adı:"
|
||||
@@ -1288,7 +1252,7 @@ msgid "Enter the new display name (blank to reset)"
|
||||
msgstr "Yeni görünü adını girin (sıfırlamak için boş bırakın)"
|
||||
|
||||
msgid "Change &display name..."
|
||||
msgstr "Görüntü adını &değiştirin"
|
||||
msgstr "Görüntü adını &değiştirin..."
|
||||
|
||||
msgid "Context Menu"
|
||||
msgstr "Bağlam Menüsü"
|
||||
@@ -1324,7 +1288,7 @@ msgid "Failed to create directory for cloned VM"
|
||||
msgstr "Klonlanmış VM için dizin oluşturulamadı"
|
||||
|
||||
msgid "Failed to clone VM."
|
||||
msgstr "VM klonlanamadı"
|
||||
msgstr "VM klonlanamadı."
|
||||
|
||||
msgid "Directory in use"
|
||||
msgstr "Dizin kullanımda"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Sistem"
|
||||
msgid "Storage"
|
||||
msgstr "Depolama"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Disk %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Disk %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Disk yok"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Taşındı"
|
||||
msgid "I Copied It"
|
||||
msgstr "Kopyalandı"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitör #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box Monitör #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "MCA cihazı yok."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID Filtre Gücü"
|
||||
msgid "Surround module"
|
||||
msgstr "Surround modülü"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "CODEC kurulumunda CODEC kesmesini yükselt (bazı sürücüler tarafından gereklidir)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "SB adresi"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "OPL'yi etkinleştir"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (stereo)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Klasik"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,17 +2781,14 @@ msgstr "GLSL Hatası"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "%1 gölgelendiricisi yüklenemedi"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL sürüm 3.0 veya daha yükseği gereklidir. Şu anki GLSL sürümü %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "%1 dokusu yüklenemedi"
|
||||
|
||||
msgid "Could not compile shader:\n\n%1"
|
||||
msgstr "%1 gölgelendiricisi derlenemedi"
|
||||
msgstr "Gölgelendirici derlenemedi:\n\n%1"
|
||||
|
||||
msgid "Program not linked:\n\n%1"
|
||||
msgstr "%1 programı bağlanamadı"
|
||||
msgstr "Program bağlanamadı:\n\n%1"
|
||||
|
||||
msgid "Shader Manager"
|
||||
msgstr "Gölgelendirici Yöneticisi"
|
||||
@@ -2845,7 +2809,7 @@ msgid "Could not load file %1"
|
||||
msgstr "%1 dosyası yüklenemedi"
|
||||
|
||||
msgid "Key Bindings:"
|
||||
msgstr "Tuş Bağlamaları"
|
||||
msgstr "Tuş Bağlamaları:"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "Eylem"
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Control+Alt+Escape gönder"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Tam ekran modunu ayarla"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Ekran görüntüsü"
|
||||
|
||||
@@ -2914,7 +2881,7 @@ msgid "Hub Mode"
|
||||
msgstr "Hub Modu"
|
||||
|
||||
msgid "Hostname:"
|
||||
msgstr "Ana bilgisayar adı"
|
||||
msgstr "Ana bilgisayar adı:"
|
||||
|
||||
msgid "ISA RAM:"
|
||||
msgstr "ISA RAM:"
|
||||
|
||||
@@ -61,7 +61,7 @@ msgid "&Qt (Software)"
|
||||
msgstr "&Qt (Software)"
|
||||
|
||||
msgid "Open&GL (3.0 Core)"
|
||||
msgstr "Open&GL (3.0)"
|
||||
msgstr "Open&GL (3.0 Core)"
|
||||
|
||||
msgid "&VNC"
|
||||
msgstr "&VNC"
|
||||
@@ -76,13 +76,13 @@ msgid "&Window scale factor"
|
||||
msgstr "&Масштаб вікна"
|
||||
|
||||
msgid "&0.5x"
|
||||
msgstr "&0.5x"
|
||||
msgstr "&0,5x"
|
||||
|
||||
msgid "&1x"
|
||||
msgstr "&1x"
|
||||
|
||||
msgid "1.&5x"
|
||||
msgstr "1.&5x"
|
||||
msgstr "1,&5x"
|
||||
|
||||
msgid "&2x"
|
||||
msgstr "&2x"
|
||||
@@ -273,36 +273,6 @@ msgstr "Знову завантажити попередній образ"
|
||||
msgid "&Folder..."
|
||||
msgstr "&Тека..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Цільова &частота кадрів"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "&Синхронізація з відео"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 кадрів в секунду"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 кадрів в секунду"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 кадрів в секунду"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 кадрів в секунду"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 кадрів в секунду"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Вибрати шейдер..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Видалити шейдер"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Параметри"
|
||||
|
||||
@@ -687,9 +657,6 @@ msgstr "Пристрій ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Карта POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Помилка"
|
||||
|
||||
@@ -715,7 +682,7 @@ msgid "Image %1"
|
||||
msgstr "Образ %1"
|
||||
|
||||
msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory."
|
||||
msgstr "86Box не зміг знайти жодного відповідного для використання файлу з ПЗУ.\n\nБудь ласка <a href=\"https://github.com/86Box/roms/releases/latest\">завантажте</a> набір ПЗУ і витягніть його в каталог \"roms\"."
|
||||
msgstr "86Box не зміг знайти жодного відповідного для використання файлу з ПЗУ.\n\nБудь ласка <a href=\"https://github.com/86Box/roms/releases/latest\">завантажте</a> набір ПЗУ і витягніть його в каталог «roms»."
|
||||
|
||||
msgid "(empty)"
|
||||
msgstr "(порожньо)"
|
||||
@@ -742,16 +709,16 @@ msgid "Surface images"
|
||||
msgstr "Образ поверхні"
|
||||
|
||||
msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."
|
||||
msgstr "Системна плата \"%hs\" недоступна через відсутність файлу її ПЗУ в каталозі roms/machines. Переключення на доступну системну плату."
|
||||
msgstr "Системна плата «%hs» недоступна через відсутність файлу її ПЗУ в каталозі roms/machines. Переключення на доступну системну плату."
|
||||
|
||||
msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card."
|
||||
msgstr "Відеокарта \"%hs\" недоступна через відсутність файлу її ПЗУ в каталозі roms/video. Переключення на доступну відеокарту."
|
||||
msgstr "Відеокарта «%hs» недоступна через відсутність файлу її ПЗУ в каталозі roms/video. Переключення на доступну відеокарту."
|
||||
|
||||
msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Disabling the second video card."
|
||||
msgstr "Відеокарта 2 \"%hs\" недоступна через відсутність файлу її ПЗУ в каталозі roms/video. Відключення другої відеокарти."
|
||||
msgstr "Відеокарта 2 «%hs» недоступна через відсутність файлу її ПЗУ в каталозі roms/video. Відключення другої відеокарти."
|
||||
|
||||
msgid "Device \"%hs\" is not available due to missing ROMs. Ignoring the device."
|
||||
msgstr "Пристрій \"%hs\" недоступний через відсутність файлу його ПЗУ. Ігнорування пристрою."
|
||||
msgstr "Пристрій «%hs» недоступний через відсутність файлу його ПЗУ. Ігнорування пристрою."
|
||||
|
||||
msgid "Machine"
|
||||
msgstr "Комп'ютер"
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Це призведе до холодної перезагрузки е
|
||||
msgid "Save"
|
||||
msgstr "Зберегти"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Про 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Про %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Емулятор старих комп'ютерів\n\nАвтори: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nЗ попередніми основними внесками Sarah Walker, leilei, JohnElliott, greatpsycho та інших.\n\nВипускаєтся під ліцензією GNU General Public License версії 2 або більше пізніше. Додадкову інформацію см. у файлі LICENSE."
|
||||
@@ -1309,7 +1273,7 @@ msgid "C&lone..."
|
||||
msgstr "К&лонувати..."
|
||||
|
||||
msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "Віртуальна машина \"%1\" (%2) буде клонована в:"
|
||||
msgstr "Віртуальна машина «%1» (%2) буде клонована в:"
|
||||
|
||||
msgid "Directory %1 already exists"
|
||||
msgstr "Папка %1 вже існує"
|
||||
@@ -1375,13 +1339,13 @@ msgid "&Kill"
|
||||
msgstr "&Завершити процес"
|
||||
|
||||
msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?"
|
||||
msgstr "Примусове завершення процесу віртуальної машини може призвести до втрати даних. Робіть це тільки в тому випадку, якщо процес 86Box завис.\n\nВи дійсно хочете примусово завершити процес віртуальної машини \"%1\"?"
|
||||
msgstr "Примусове завершення процесу віртуальної машини може призвести до втрати даних. Робіть це тільки в тому випадку, якщо процес 86Box завис.\n\nВи дійсно хочете примусово завершити процес віртуальної машини «%1»?"
|
||||
|
||||
msgid "&Delete"
|
||||
msgstr "&Видалити"
|
||||
|
||||
msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!"
|
||||
msgstr "Ви дійсно хочете видалити віртуальну машину \"%1\" і всі її файли? Цю дію не можна скасувати!"
|
||||
msgstr "Ви дійсно хочете видалити віртуальну машину «%1» і всі її файли? Цю дію не можна скасувати!"
|
||||
|
||||
msgid "Show &config file"
|
||||
msgstr "Показати файл &конфігурації"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Система"
|
||||
msgid "Storage"
|
||||
msgstr "Диски"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Диск %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Диск %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Немає дисків"
|
||||
@@ -1591,13 +1555,13 @@ msgid "720 KB"
|
||||
msgstr "720 КБ"
|
||||
|
||||
msgid "1.2 MB"
|
||||
msgstr "1.2 МБ"
|
||||
msgstr "1,2 МБ"
|
||||
|
||||
msgid "1.25 MB"
|
||||
msgstr "1.25 МБ"
|
||||
msgstr "1,25 МБ"
|
||||
|
||||
msgid "1.44 MB"
|
||||
msgstr "1.44 МБ"
|
||||
msgstr "1,44 МБ"
|
||||
|
||||
msgid "DMF (cluster 1024)"
|
||||
msgstr "DMF (кластер 1024)"
|
||||
@@ -1606,40 +1570,40 @@ msgid "DMF (cluster 2048)"
|
||||
msgstr "DMF (кластер 2048)"
|
||||
|
||||
msgid "2.88 MB"
|
||||
msgstr "2.88 МБ"
|
||||
msgstr "2,88 МБ"
|
||||
|
||||
msgid "ZIP 100"
|
||||
msgstr "ZIP 100"
|
||||
|
||||
msgid "3.5\" 128 MB (ISO 10090)"
|
||||
msgstr "3.5\" 128 МБ (ISO 10090)"
|
||||
msgstr "3,5\" 128 МБ (ISO 10090)"
|
||||
|
||||
msgid "3.5\" 230 MB (ISO 13963)"
|
||||
msgstr "3.5\" 230 МБ (ISO 13963)"
|
||||
msgstr "3,5\" 230 МБ (ISO 13963)"
|
||||
|
||||
msgid "3.5\" 540 MB (ISO 15498)"
|
||||
msgstr "3.5\" 540 МБ (ISO 15498)"
|
||||
msgstr "3,5\" 540 МБ (ISO 15498)"
|
||||
|
||||
msgid "3.5\" 640 MB (ISO 15498)"
|
||||
msgstr "3.5\" 640 МБ (ISO 15498)"
|
||||
msgstr "3,5\" 640 МБ (ISO 15498)"
|
||||
|
||||
msgid "3.5\" 1.3 GB (GigaMO)"
|
||||
msgstr "3.5\" 1.3 ГБ (GigaMO)"
|
||||
msgstr "3,5\" 1,3 ГБ (GigaMO)"
|
||||
|
||||
msgid "3.5\" 2.3 GB (GigaMO 2)"
|
||||
msgstr "3.5\" 2.3 ГБ (GigaMO 2)"
|
||||
msgstr "3,5\" 2,3 ГБ (GigaMO 2)"
|
||||
|
||||
msgid "5.25\" 600 MB"
|
||||
msgstr "5.25\" 600 МБ"
|
||||
msgstr "5,25\" 600 МБ"
|
||||
|
||||
msgid "5.25\" 650 MB"
|
||||
msgstr "5.25\" 650 МБ"
|
||||
msgstr "5,25\" 650 МБ"
|
||||
|
||||
msgid "5.25\" 1 GB"
|
||||
msgstr "5.25\" 1 ГБ"
|
||||
msgstr "5,25\" 1 ГБ"
|
||||
|
||||
msgid "5.25\" 1.3 GB"
|
||||
msgstr "5.25\" 1.3 ГБ"
|
||||
msgstr "5,25\" 1,3 ГБ"
|
||||
|
||||
msgid "Perfect RPM"
|
||||
msgstr "Точний RPM"
|
||||
@@ -1648,7 +1612,7 @@ msgid "1% below perfect RPM"
|
||||
msgstr "На 1% повільніше точного RPM"
|
||||
|
||||
msgid "1.5% below perfect RPM"
|
||||
msgstr "На 1.5% повільніше точного RPM"
|
||||
msgstr "На 1,5% повільніше точного RPM"
|
||||
|
||||
msgid "2% below perfect RPM"
|
||||
msgstr "На 2% повільніше точного RPM"
|
||||
@@ -1810,7 +1774,7 @@ msgid "This machine might have been moved or copied."
|
||||
msgstr "Цю машину могли перемістити або скопіювати."
|
||||
|
||||
msgid "In order to ensure proper networking functionality, 86Box needs to know if this machine was moved or copied.\n\nSelect \"I Copied It\" if you are not sure."
|
||||
msgstr "Щоб забезпечити належну мережеву функціональність, 86Box повинен знати, чи машина була переміщена або скопійована.\n\nЯкщо ви не впевнені, виберіте \"Скопійована\"."
|
||||
msgstr "Щоб забезпечити належну мережеву функціональність, 86Box повинен знати, чи машина була переміщена або скопійована.\n\nЯкщо ви не впевнені, виберіте «Скопійована»."
|
||||
|
||||
msgid "I Moved It"
|
||||
msgstr "Переміщена"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Переміщена"
|
||||
msgid "I Copied It"
|
||||
msgstr "Скопійована"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "Монітор 86Box "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Монітор 86Box %1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Ніяких пристроїв MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Сила фільтра SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Модуль об'ємного звучання"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Піднімати переривання CODEC під час встановлення CODEC (потрібно для деяких драйверів)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Адреса SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "IRQ WSS"
|
||||
msgid "WSS DMA"
|
||||
msgstr "DMA WSS"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr "IRQ RTC"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Ввімкнути OPL"
|
||||
|
||||
@@ -2293,7 +2263,7 @@ msgid "GUS type"
|
||||
msgstr "Тип GUS"
|
||||
|
||||
msgid "Enable 0x04 \"Exit 86Box\" command"
|
||||
msgstr "Увімкнути команду 0x04 \"Вихід з 86Box\"."
|
||||
msgstr "Увімкнути команду 0x04 «Вихід з 86Box»"
|
||||
|
||||
msgid "Display type"
|
||||
msgstr "Тип відображення"
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 МБ"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (стерео)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Класичний"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 КБ"
|
||||
|
||||
@@ -2782,7 +2749,7 @@ msgid "Unable to find Dot-Matrix fonts"
|
||||
msgstr "Неможливо знайти матричні шрифти"
|
||||
|
||||
msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P 2 Dot-Matrix Printer."
|
||||
msgstr "Шрифти TrueType у каталозі \"roms/printer/fonts\" потрібні для емуляції загального матричного принтера Generic ESC/P 2."
|
||||
msgstr "Шрифти TrueType у каталозі «roms/printer/fonts» потрібні для емуляції загального матричного принтера Generic ESC/P 2."
|
||||
|
||||
msgid "Inhibit multimedia keys"
|
||||
msgstr "Перехоплювати мультимедійні клавіші"
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Помилка GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Не вдалося завантажити шейдер: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Потрібна OpenGL версії 3.0 або вище. Поточна версія GLSL %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Не вдалося завантажити текстуру: %1"
|
||||
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Надіслати Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Переключити повноекранний режим"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Скріншот"
|
||||
|
||||
@@ -2926,16 +2893,16 @@ msgid "&Wipe NVRAM"
|
||||
msgstr "&Стерти NVRAM"
|
||||
|
||||
msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?"
|
||||
msgstr "Це видалить всі файли NVRAM (і пов'язані) віртуальної машини, розташованої в підпапці «nvr». Вам доведеться знову налаштувати BIOS (і, можливо, інші пристрої всередині віртуальної машини), якщо це необхідно. Ви впевнені, що хочете стерти весь вміст NVRAM віртуальної машини \"%1\"?"
|
||||
msgstr "Це видалить всі файли NVRAM (і пов'язані) віртуальної машини, розташованої в підпапці «nvr». Вам доведеться знову налаштувати BIOS (і, можливо, інші пристрої всередині віртуальної машини), якщо це необхідно.\n\nВи впевнені, що хочете стерти весь вміст NVRAM віртуальної машини «%1»?"
|
||||
|
||||
msgid "Success"
|
||||
msgstr "Успішно"
|
||||
|
||||
msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Успішно стерто вміст NVRAM віртуальної машини \"%1\""
|
||||
msgstr "Успішно стерто вміст NVRAM віртуальної машини «%1»"
|
||||
|
||||
msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\""
|
||||
msgstr "Сталася помилка при спробі стерти вміст NVRAM віртуальної машини \"%1\""
|
||||
msgstr "Сталася помилка при спробі стерти вміст NVRAM віртуальної машини «%1»"
|
||||
|
||||
msgid "%1 VM Manager"
|
||||
msgstr "Менеджер віртуальних машин %1"
|
||||
@@ -3013,7 +2980,7 @@ msgid "Virtual machine crash"
|
||||
msgstr "Збій віртуальної машини"
|
||||
|
||||
msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2."
|
||||
msgstr "Процес віртуальної машини \"%1\" несподівано завершився з кодом завершення %2."
|
||||
msgstr "Процес віртуальної машини «%1» несподівано завершився з кодом завершення %2."
|
||||
|
||||
msgid "The system will not be added."
|
||||
msgstr "Система не буде додана."
|
||||
@@ -3052,7 +3019,7 @@ msgid "Export EDID"
|
||||
msgstr "Експорт EDID"
|
||||
|
||||
msgid "EDID file \"%ls\" is too large."
|
||||
msgstr "Файл EDID \"%ls\" занадто великий."
|
||||
msgstr "Файл EDID «%ls» занадто великий."
|
||||
|
||||
msgid "OpenGL input scale"
|
||||
msgstr "Шкала введення OpenGL"
|
||||
|
||||
@@ -196,7 +196,7 @@ msgid "&Settings..."
|
||||
msgstr "&Cài đặt..."
|
||||
|
||||
msgid "Settings..."
|
||||
msgstr "Cài đặt"
|
||||
msgstr "Cài đặt..."
|
||||
|
||||
msgid "&Update status bar icons"
|
||||
msgstr "Cậ&p nhật biểu tượng thanh trạng thái"
|
||||
@@ -271,37 +271,7 @@ msgid "Reload previous image"
|
||||
msgstr "Load đĩa trước đó"
|
||||
|
||||
msgid "&Folder..."
|
||||
msgstr "Thư mụ&c"
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "Số khung hình mục tiêu"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "Đồng bộ &với video"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "&25 fps"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "&30 fps"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "&50 fps"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "&60 fps"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "&75 fps"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "&VSync"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "&Chọn shader..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "&Bỏ shader"
|
||||
msgstr "Thư mụ&c..."
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "Tùy biến"
|
||||
@@ -687,9 +657,6 @@ msgstr "Thiết bị ISABugger"
|
||||
msgid "POST card"
|
||||
msgstr "Thẻ POST"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "Lỗi"
|
||||
|
||||
@@ -1030,7 +997,7 @@ msgid "&File"
|
||||
msgstr "&Tập tin"
|
||||
|
||||
msgid "&New machine..."
|
||||
msgstr "Máy &mới"
|
||||
msgstr "Máy &mới..."
|
||||
|
||||
msgid "&Check for updates..."
|
||||
msgstr "Kiểm tra &cập nhật..."
|
||||
@@ -1050,11 +1017,8 @@ msgstr "Lệnh này sẽ buộc khởi động lại máy ảo."
|
||||
msgid "Save"
|
||||
msgstr "Lưu"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "Về 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "Về %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "Trình giả lập các dòng máy tính cổ.\n\nTác giả: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, cùng những người khác.\n\nCùng với những đóng góp cốt cán từ Sarah Walker, leilei, JohnElliott, greatpsycho, và một số người khác.\n\nPhát hành dưới giấy phép GNU General Public License version 2 trở đi. Đọc LICENSE để biết thêm thông tin."
|
||||
@@ -1099,7 +1063,7 @@ msgid "GLSL shaders"
|
||||
msgstr "Shader GLSL"
|
||||
|
||||
msgid "You are loading an unsupported configuration"
|
||||
msgstr "Bạn đang load tinh chỉnh không được hỗ trợ."
|
||||
msgstr "Bạn đang load tinh chỉnh không được hỗ trợ"
|
||||
|
||||
msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid."
|
||||
msgstr "Phần chọn loại CPU dựa trên mẫu máy đã chọn bị vô hiệu hóa.\n\nỞ đây bạn có thể chọn loại CPU có thể không tương thích với mẫu máy hiện tại. Tuy nhiên bạn có thể gặp vấn đề tương khắc với BIOS hay phần mềm khác.\n\nViệc bật tùy chọn này lên không được khuyến cáo chính thức và các bản bug report (báo lỗi) với nội dung tương tự sẽ bị coi là phạm quy và đóng."
|
||||
@@ -1288,25 +1252,25 @@ msgid "Enter the new display name (blank to reset)"
|
||||
msgstr "Điền tên hiển thị mới (để trống để đặt lại)"
|
||||
|
||||
msgid "Change &display name..."
|
||||
msgstr "Thay đổi tên hiển thị"
|
||||
msgstr "Thay đổi tên hiển thị..."
|
||||
|
||||
msgid "Context Menu"
|
||||
msgstr "Menu ngữ cảnh"
|
||||
|
||||
msgid "&Open folder..."
|
||||
msgstr "Mở thư mục"
|
||||
msgstr "Mở thư mục..."
|
||||
|
||||
msgid "Open p&rinter tray..."
|
||||
msgstr "Mở khay máy in"
|
||||
msgstr "Mở khay máy in..."
|
||||
|
||||
msgid "Set &icon..."
|
||||
msgstr "Đặt biểu trưng"
|
||||
msgstr "Đặt biểu trưng..."
|
||||
|
||||
msgid "Select an icon"
|
||||
msgstr "Chọn một biểu trưng"
|
||||
|
||||
msgid "C&lone..."
|
||||
msgstr "Tạo bản sao"
|
||||
msgstr "Tạo bản sao..."
|
||||
|
||||
msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "Máy ảo \"%1\" (%2) sẽ được sao chép vào:"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "Hệ thống"
|
||||
msgid "Storage"
|
||||
msgstr "Lưu trữ"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "Đĩa %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "Đĩa %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "Không có đĩa"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "Tôi đã di chuyển nó"
|
||||
msgid "I Copied It"
|
||||
msgstr "Tôi đã sao chép nó"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "Màn hình 86box #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "Màn hình 86Box #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "Không có thiết bị MCA."
|
||||
@@ -2232,12 +2196,6 @@ msgstr "Cường độ bộ lọc SID"
|
||||
msgid "Surround module"
|
||||
msgstr "Mô đun vòm"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "Tăng ngắt CODEC trên thiết lập CODEC (cần bởi một số trình điều khiển)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Địa chỉ SB"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "Bật OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "Sigmatel Stac9721T (âm thanh nổi)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "Cổ điển"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2814,9 +2781,6 @@ msgstr "Lỗi GLSL"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "Không thể nạp shader: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "Yêu cầu OpenGL bản 3.0 trở lên. Hiện tại bản GLSL là %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "Không thể nạp texture: %1"
|
||||
|
||||
@@ -2863,7 +2827,7 @@ msgid "Bind Key"
|
||||
msgstr "Gắn phím"
|
||||
|
||||
msgid "Enter key combo:"
|
||||
msgstr "Nhập tổ hợp phím"
|
||||
msgstr "Nhập tổ hợp phím:"
|
||||
|
||||
msgid "Bind conflict"
|
||||
msgstr "Gắn phím trùng lặp"
|
||||
@@ -2880,6 +2844,9 @@ msgstr "Gửi Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "Bật/tắt toàn màn hình"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "Chụp màn hình"
|
||||
|
||||
@@ -2977,13 +2944,13 @@ msgid "build"
|
||||
msgstr "bản dựng"
|
||||
|
||||
msgid "You are currently running version <b>%1</b>."
|
||||
msgstr "Bạn đang chạy phiên bản <b>%1</b>"
|
||||
msgstr "Bạn đang chạy phiên bản <b>%1</b>."
|
||||
|
||||
msgid "<b>Version %1</b> is now available."
|
||||
msgstr "<b>Phiên bản %1</b> hiện đã ra mắt."
|
||||
|
||||
msgid "You are currently running build <b>%1</b>."
|
||||
msgstr "Bạn đang chạy bản dựng <b>%1</b>"
|
||||
msgstr "Bạn đang chạy bản dựng <b>%1</b>."
|
||||
|
||||
msgid "<b>Build %1</b> is now available."
|
||||
msgstr "<b>Bản dựng %1</b> hiện đã ra mắt."
|
||||
|
||||
@@ -67,7 +67,7 @@ msgid "&VNC"
|
||||
msgstr "VNC(&V)"
|
||||
|
||||
msgid "Specify &dimensions..."
|
||||
msgstr "指定窗口大小...(&D)"
|
||||
msgstr "指定窗口大小(&D)..."
|
||||
|
||||
msgid "Force &4:3 display ratio"
|
||||
msgstr "强制 4:3 显示比例(&4)"
|
||||
@@ -196,7 +196,7 @@ msgid "&Settings..."
|
||||
msgstr "设置(&S)..."
|
||||
|
||||
msgid "Settings..."
|
||||
msgstr "设置"
|
||||
msgstr "设置..."
|
||||
|
||||
msgid "&Update status bar icons"
|
||||
msgstr "更新状态栏图标(&U)"
|
||||
@@ -273,36 +273,6 @@ msgstr "载入上一个映像"
|
||||
msgid "&Folder..."
|
||||
msgstr "文件夹(&F)..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "目标帧率(&F)"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "与视频同步(&S)"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "25 fps(&2)"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "30 fps(&3)"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "50 fps(&5)"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "60 fps(&6)"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "75 fps(&7)"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "垂直同步(&V)"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "选择着色器(&S)..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "移除着色器(&R)"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "首选项"
|
||||
|
||||
@@ -550,7 +520,7 @@ msgid "FD Controller:"
|
||||
msgstr "软盘控制器:"
|
||||
|
||||
msgid "CD-ROM Controller:"
|
||||
msgstr "CD-ROM 控制器"
|
||||
msgstr "CD-ROM 控制器:"
|
||||
|
||||
msgid "Tertiary IDE Controller"
|
||||
msgstr "第三 IDE 控制器"
|
||||
@@ -687,9 +657,6 @@ msgstr "ISABugger 设备"
|
||||
msgid "POST card"
|
||||
msgstr "自检 (POST) 卡"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "错误"
|
||||
|
||||
@@ -1050,11 +1017,8 @@ msgstr "此操作将硬重置模拟器。"
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "关于 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "关于 %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "一个旧式计算机模拟器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\n感谢 Sarah Walker、leilei、JohnElliott、greatpsycho 和其他人的核心贡献。\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。"
|
||||
@@ -1186,7 +1150,7 @@ msgid "VMs: %1"
|
||||
msgstr "虚拟机: %1"
|
||||
|
||||
msgid "System Directory:"
|
||||
msgstr "系统目录"
|
||||
msgstr "系统目录:"
|
||||
|
||||
msgid "Choose directory"
|
||||
msgstr "选择目录"
|
||||
@@ -1276,7 +1240,7 @@ msgid "Please enter a system name"
|
||||
msgstr "请输入系统名称"
|
||||
|
||||
msgid "Display name (optional):"
|
||||
msgstr "显示名称 (可选)"
|
||||
msgstr "显示名称 (可选):"
|
||||
|
||||
msgid "Display name:"
|
||||
msgstr "显示名称:"
|
||||
@@ -1315,7 +1279,7 @@ msgid "Directory %1 already exists"
|
||||
msgstr "目录 %1 已存在"
|
||||
|
||||
msgid "You cannot use the following characters in the name: %1"
|
||||
msgstr " %1: 名称中不能使用以下字符: %1"
|
||||
msgstr "名称中不能使用以下字符: %1"
|
||||
|
||||
msgid "Clone"
|
||||
msgstr "克隆"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "系统"
|
||||
msgid "Storage"
|
||||
msgstr "存储"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "磁盘 %1"
|
||||
msgid "Disk %1:"
|
||||
msgstr "磁盘 %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "无磁盘"
|
||||
@@ -1723,7 +1687,7 @@ msgid "Show non-&primary monitors"
|
||||
msgstr "显示非主要显示器(&P)"
|
||||
|
||||
msgid "Open screenshots &folder..."
|
||||
msgstr "打开屏幕截图文件夹...(&F)"
|
||||
msgstr "打开屏幕截图文件夹(&F)..."
|
||||
|
||||
msgid "Appl&y fullscreen stretch mode when maximized"
|
||||
msgstr "最大化时应用全屏拉伸模式(&Y)"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "我已移动这台机器"
|
||||
msgid "I Copied It"
|
||||
msgstr "我已复制这台机器"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box 显示器 #"
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box 显示器 #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "无 MCA 设备。"
|
||||
@@ -1876,7 +1840,7 @@ msgid "Serial port passthrough 4"
|
||||
msgstr "串口直通 4"
|
||||
|
||||
msgid "Renderer &options..."
|
||||
msgstr "渲染器选项...(&O)"
|
||||
msgstr "渲染器选项(&O)..."
|
||||
|
||||
msgid "PC/XT Keyboard"
|
||||
msgstr "PC/XT 键盘"
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID 滤镜强度"
|
||||
msgid "Surround module"
|
||||
msgstr "环绕声模块"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "在 CODEC 设置时引发 CODEC 中断(某些驱动程序需要)。"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "Sound Blaster 地址"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr ""
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr ""
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr ""
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr ""
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "启用 OPL"
|
||||
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (立体声)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "经典"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2719,7 +2686,7 @@ msgid "Named Pipe (Server)"
|
||||
msgstr "命名管道(服务器)"
|
||||
|
||||
msgid "Named Pipe (Client)"
|
||||
msgstr "命名管道 (客户端) "
|
||||
msgstr "命名管道 (客户端)"
|
||||
|
||||
msgid "Host Serial Passthrough"
|
||||
msgstr "主机串口直通"
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSL 错误"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "无法加载着色器:%1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "OpenGL 版本需要达到 3.0 或更高。当前 GLSL 版本为 %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "无法加载材质:%1"
|
||||
|
||||
@@ -2845,7 +2809,7 @@ msgid "Could not load file %1"
|
||||
msgstr "无法加载文件 %1"
|
||||
|
||||
msgid "Key Bindings:"
|
||||
msgstr "按键绑定"
|
||||
msgstr "按键绑定:"
|
||||
|
||||
msgid "Action"
|
||||
msgstr "动作"
|
||||
@@ -2863,7 +2827,7 @@ msgid "Bind Key"
|
||||
msgstr "绑定按键"
|
||||
|
||||
msgid "Enter key combo:"
|
||||
msgstr "输入按键组合"
|
||||
msgstr "输入按键组合:"
|
||||
|
||||
msgid "Bind conflict"
|
||||
msgstr "绑定冲突"
|
||||
@@ -2880,6 +2844,9 @@ msgstr "发送 Ctrl+Alt+Esc"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "切换全屏"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr ""
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "截图"
|
||||
|
||||
@@ -3004,7 +2971,7 @@ msgid "86Box Update"
|
||||
msgstr "86Box 更新"
|
||||
|
||||
msgid "Release notes:"
|
||||
msgstr "发行版说明"
|
||||
msgstr "发行版说明:"
|
||||
|
||||
msgid "%1 Hz"
|
||||
msgstr "%1 Hz"
|
||||
@@ -3037,7 +3004,7 @@ msgid "Sharpness"
|
||||
msgstr "锐度"
|
||||
|
||||
msgid "&CGA composite settings..."
|
||||
msgstr "CGA 复合模式设置...(&C)"
|
||||
msgstr "CGA 复合模式设置(&C)..."
|
||||
|
||||
msgid "CGA composite settings"
|
||||
msgstr "CGA 复合模式设置"
|
||||
|
||||
@@ -67,7 +67,7 @@ msgid "&VNC"
|
||||
msgstr "VNC(&V)"
|
||||
|
||||
msgid "Specify &dimensions..."
|
||||
msgstr "指定視窗大小...(&D)"
|
||||
msgstr "指定視窗大小(&D)..."
|
||||
|
||||
msgid "Force &4:3 display ratio"
|
||||
msgstr "強制 4:3 顯示比例(&4)"
|
||||
@@ -121,10 +121,10 @@ msgid "&Fullscreen"
|
||||
msgstr "全螢幕(&F)"
|
||||
|
||||
msgid "Fullscreen &stretch mode"
|
||||
msgstr "全螢幕拉伸模式(&S)"
|
||||
msgstr "全螢幕延展模式(&S)"
|
||||
|
||||
msgid "&Full screen stretch"
|
||||
msgstr "全螢幕拉伸(&F)"
|
||||
msgstr "全螢幕延展(&F)"
|
||||
|
||||
msgid "&4:3"
|
||||
msgstr "4:3(&4)"
|
||||
@@ -142,7 +142,7 @@ msgid "EGA/(S)&VGA settings"
|
||||
msgstr "EGA/(S)VGA 設定(&V)"
|
||||
|
||||
msgid "&Inverted VGA monitor"
|
||||
msgstr "VGA 顯示器反色顯示(&I)"
|
||||
msgstr "VGA 監視器反色顯示(&I)"
|
||||
|
||||
msgid "VGA screen &type"
|
||||
msgstr "VGA 螢幕類型(&T)"
|
||||
@@ -154,22 +154,22 @@ msgid "RGB (no brown)"
|
||||
msgstr "RGB (無棕色)"
|
||||
|
||||
msgid "&RGB Grayscale"
|
||||
msgstr "RGB 灰度(&R)"
|
||||
msgstr "RGB 灰階(&R)"
|
||||
|
||||
msgid "Generic RGBI color monitor"
|
||||
msgstr "通用 RGBI 彩色監視器"
|
||||
|
||||
msgid "&Amber monitor"
|
||||
msgstr "琥珀色單色顯示器(&A)"
|
||||
msgstr "琥珀色單色監視器(&A)"
|
||||
|
||||
msgid "&Green monitor"
|
||||
msgstr "綠色單色顯示器(&G)"
|
||||
msgstr "綠色單色監視器(&G)"
|
||||
|
||||
msgid "&White monitor"
|
||||
msgstr "白色單色顯示器(&W)"
|
||||
msgstr "白色單色監視器(&W)"
|
||||
|
||||
msgid "Grayscale &conversion type"
|
||||
msgstr "灰度轉換類型(&C)"
|
||||
msgstr "灰階轉換類型(&C)"
|
||||
|
||||
msgid "BT&601 (NTSC/PAL)"
|
||||
msgstr "BT601 (NTSC/PAL)(&6)"
|
||||
@@ -187,7 +187,7 @@ msgid "Change contrast for &monochrome display"
|
||||
msgstr "變更單色顯示對比度(&M)"
|
||||
|
||||
msgid "&Media"
|
||||
msgstr "介質(&M)"
|
||||
msgstr "媒體(&M)"
|
||||
|
||||
msgid "&Tools"
|
||||
msgstr "工具(&T)"
|
||||
@@ -232,13 +232,13 @@ msgid "&About 86Box..."
|
||||
msgstr "關於 86Box(&A)..."
|
||||
|
||||
msgid "&New image..."
|
||||
msgstr "新增映像(&N)..."
|
||||
msgstr "新增影像(&N)..."
|
||||
|
||||
msgid "&Existing image..."
|
||||
msgstr "開啟已存在的映像(&E)..."
|
||||
msgstr "開啟已存在的影像(&E)..."
|
||||
|
||||
msgid "Existing image (&Write-protected)..."
|
||||
msgstr "開啟已存在的映像並寫保護(&W)..."
|
||||
msgstr "以防寫保護開啟已存在的影像(&W)..."
|
||||
|
||||
msgid "&Record"
|
||||
msgstr "錄製(&R)"
|
||||
@@ -256,7 +256,7 @@ msgid "E&ject"
|
||||
msgstr "退出(&J)"
|
||||
|
||||
msgid "&Image..."
|
||||
msgstr "映像(&I)..."
|
||||
msgstr "影像(&I)..."
|
||||
|
||||
msgid "E&xport to 86F..."
|
||||
msgstr "匯出為 86F 格式(&x)..."
|
||||
@@ -268,41 +268,11 @@ msgid "E&mpty"
|
||||
msgstr "空置光碟機(&M)"
|
||||
|
||||
msgid "Reload previous image"
|
||||
msgstr "載入上一個映像"
|
||||
msgstr "載入上一個影像"
|
||||
|
||||
msgid "&Folder..."
|
||||
msgstr "資料夾(&F)..."
|
||||
|
||||
msgid "Target &framerate"
|
||||
msgstr "目標影格速率(&F)"
|
||||
|
||||
msgid "&Sync with video"
|
||||
msgstr "與視訊同步(&S)"
|
||||
|
||||
msgid "&25 fps"
|
||||
msgstr "25 fps(&2)"
|
||||
|
||||
msgid "&30 fps"
|
||||
msgstr "30 fps(&3)"
|
||||
|
||||
msgid "&50 fps"
|
||||
msgstr "50 fps(&5)"
|
||||
|
||||
msgid "&60 fps"
|
||||
msgstr "60 fps(&6)"
|
||||
|
||||
msgid "&75 fps"
|
||||
msgstr "75 fps(&7)"
|
||||
|
||||
msgid "&VSync"
|
||||
msgstr "垂直同步(&V)"
|
||||
|
||||
msgid "&Select shader..."
|
||||
msgstr "選取著色器(&S)..."
|
||||
|
||||
msgid "&Remove shader"
|
||||
msgstr "移除著色器(&R)"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "偏好設定"
|
||||
|
||||
@@ -310,7 +280,7 @@ msgid "Sound Gain"
|
||||
msgstr "音量增益"
|
||||
|
||||
msgid "New Image"
|
||||
msgstr "新增映像"
|
||||
msgstr "新增影像"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "設定"
|
||||
@@ -376,7 +346,7 @@ msgid "Frequency:"
|
||||
msgstr "頻率:"
|
||||
|
||||
msgid "FPU:"
|
||||
msgstr "浮點處理器 (FPU):"
|
||||
msgstr "浮點運算器 (FPU):"
|
||||
|
||||
msgid "Wait states:"
|
||||
msgstr "等待狀態 (WS):"
|
||||
@@ -421,10 +391,10 @@ msgid "Voodoo 1 or 2 Graphics"
|
||||
msgstr "Voodoo 1 或 2 圖形"
|
||||
|
||||
msgid "IBM 8514/A Graphics"
|
||||
msgstr "IBM 8514/A Graphics"
|
||||
msgstr "IBM 8514/A 圖形"
|
||||
|
||||
msgid "XGA Graphics"
|
||||
msgstr "XGA Graphics"
|
||||
msgstr "XGA 圖形"
|
||||
|
||||
msgid "IBM PS/55 Display Adapter Graphics"
|
||||
msgstr "IBM PS/55 顯示介面卡圖形"
|
||||
@@ -487,7 +457,7 @@ msgid "Use FLOAT32 sound"
|
||||
msgstr "使用單精度浮點 (FLOAT32) 音訊"
|
||||
|
||||
msgid "FM synth driver"
|
||||
msgstr "FM synth driver"
|
||||
msgstr "FM 合成驅動器"
|
||||
|
||||
msgid "Nuked (more accurate)"
|
||||
msgstr "Nuked (更準確)"
|
||||
@@ -550,7 +520,7 @@ msgid "FD Controller:"
|
||||
msgstr "軟碟控制器:"
|
||||
|
||||
msgid "CD-ROM Controller:"
|
||||
msgstr "CD-ROM 控制器"
|
||||
msgstr "CD-ROM 控制器:"
|
||||
|
||||
msgid "Tertiary IDE Controller"
|
||||
msgstr "第三 IDE 控制器"
|
||||
@@ -589,7 +559,7 @@ msgid "&New..."
|
||||
msgstr "新增(&N)..."
|
||||
|
||||
msgid "&Existing..."
|
||||
msgstr "已有映像(&E)..."
|
||||
msgstr "已有影像(&E)..."
|
||||
|
||||
msgid "&Remove"
|
||||
msgstr "移除(&R)"
|
||||
@@ -619,7 +589,7 @@ msgid "Type:"
|
||||
msgstr "類型:"
|
||||
|
||||
msgid "Image Format:"
|
||||
msgstr "映像格式:"
|
||||
msgstr "影像格式:"
|
||||
|
||||
msgid "Block Size:"
|
||||
msgstr "區塊大小:"
|
||||
@@ -643,10 +613,10 @@ msgid "MO:"
|
||||
msgstr "磁光碟:"
|
||||
|
||||
msgid "Removable disks:"
|
||||
msgstr "可移除:"
|
||||
msgstr "可移除磁碟:"
|
||||
|
||||
msgid "Removable disk drives:"
|
||||
msgstr "可移除磁碟:"
|
||||
msgstr "可移除磁碟機:"
|
||||
|
||||
msgid "ZIP 250"
|
||||
msgstr "ZIP 250"
|
||||
@@ -685,10 +655,7 @@ msgid "ISABugger device"
|
||||
msgstr "ISABugger 裝置"
|
||||
|
||||
msgid "POST card"
|
||||
msgstr "自檢 (POST) 卡"
|
||||
|
||||
msgid "86Box"
|
||||
msgstr "86Box"
|
||||
msgstr "自我檢測 (POST) 卡"
|
||||
|
||||
msgid "Error"
|
||||
msgstr "錯誤"
|
||||
@@ -715,7 +682,7 @@ msgid "Image %1"
|
||||
msgstr "影像 %1"
|
||||
|
||||
msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory."
|
||||
msgstr "86Box 找不到任何可用的 ROM 映像。\n\n請<a href=\"https://github.com/86Box/roms/releases/latest\">下載</a> ROM 套件並將其解壓到 \"roms\" 資料夾。"
|
||||
msgstr "86Box 找不到任何可用的 ROM 影像。\n\n請<a href=\"https://github.com/86Box/roms/releases/latest\">下載</a> ROM 套件並將其解壓到 \"roms\" 資料夾。"
|
||||
|
||||
msgid "(empty)"
|
||||
msgstr "(空)"
|
||||
@@ -733,13 +700,13 @@ msgid "Off"
|
||||
msgstr "關"
|
||||
|
||||
msgid "All images"
|
||||
msgstr "所有映像"
|
||||
msgstr "所有影像"
|
||||
|
||||
msgid "Basic sector images"
|
||||
msgstr "基本磁區映像"
|
||||
msgstr "基本磁區影像"
|
||||
|
||||
msgid "Surface images"
|
||||
msgstr "表面映像"
|
||||
msgstr "表面影像"
|
||||
|
||||
msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."
|
||||
msgstr "由於 roms/machines 資料夾中缺少合適的 ROM,機型 \"%hs\" 不可用。將切換到其他可用機型。"
|
||||
@@ -748,10 +715,10 @@ msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video
|
||||
msgstr "由於 roms/video 資料夾中缺少合適的 ROM,顯示卡 \"%hs\" 不可用。將切換到其他可用顯示卡。"
|
||||
|
||||
msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Disabling the second video card."
|
||||
msgstr "由於 roms/video 資料夾中缺少合適的 ROM,顯示卡 2 \"%hs\" 不可用。禁用第二块显卡。"
|
||||
msgstr "由於 roms/video 資料夾中缺少合適的 ROM,顯示卡 2 \"%hs\" 不可用。禁用第二張顯示卡。"
|
||||
|
||||
msgid "Device \"%hs\" is not available due to missing ROMs. Ignoring the device."
|
||||
msgstr "由於缺少合適的 ROM,裝置 \"%hs\" 不可用。忽略设备。"
|
||||
msgstr "由於缺少合適的 ROM,裝置 \"%hs\" 不可用。忽略裝置。"
|
||||
|
||||
msgid "Machine"
|
||||
msgstr "機型"
|
||||
@@ -850,7 +817,7 @@ msgid "Invalid PCap device"
|
||||
msgstr "無效 PCap 裝置"
|
||||
|
||||
msgid "Generic paddle controller(s)"
|
||||
msgstr "通用槳式控制器"
|
||||
msgstr "通用旋鈕控制器"
|
||||
|
||||
msgid "2-axis, 1-button joystick(s)"
|
||||
msgstr "2 軸, 1 鍵搖桿"
|
||||
@@ -994,10 +961,10 @@ msgid "&Floppy %1 (%2): %3"
|
||||
msgstr "軟碟 %1 (%2): %3(&F)"
|
||||
|
||||
msgid "Advanced sector images"
|
||||
msgstr "進階磁區映像"
|
||||
msgstr "進階磁區影像"
|
||||
|
||||
msgid "Flux images"
|
||||
msgstr "Flux 映像"
|
||||
msgstr "Flux 影像"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "確定要硬重設模擬器嗎?"
|
||||
@@ -1018,7 +985,7 @@ msgid "&MO %1 (%2): %3"
|
||||
msgstr "磁光碟 %1 (%2): %3(&M)"
|
||||
|
||||
msgid "MO images"
|
||||
msgstr "磁光碟映像"
|
||||
msgstr "磁光碟影像"
|
||||
|
||||
msgid "Welcome to 86Box!"
|
||||
msgstr "歡迎使用 86Box!"
|
||||
@@ -1050,14 +1017,11 @@ msgstr "此操作將硬重設模擬器。"
|
||||
msgid "Save"
|
||||
msgstr "儲存"
|
||||
|
||||
msgid "About 86Box"
|
||||
msgstr "關於 86Box"
|
||||
|
||||
msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
msgid "About %1"
|
||||
msgstr "關於 %1"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "一個舊式電腦模擬器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\n之前的核心貢獻來自 Sarah Walker、leilei、JohnElliott、greatpsycho 等人。\n\n本軟體依據 GNU 通用公共授權第二版或更新版本發布。詳情見 LICENSE 檔案。"
|
||||
msgstr "一個舊式電腦模擬器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\n之前的核心貢獻來自 Sarah Walker、leilei、JohnElliott、greatpsycho 等人。\n\n本軟體依據 GNU 通用公共授權第二版或更新版本發佈。詳情見 LICENSE 檔案。"
|
||||
|
||||
msgid "Hardware not available"
|
||||
msgstr "硬體不可用"
|
||||
@@ -1069,10 +1033,10 @@ msgid "Invalid configuration"
|
||||
msgstr "無效設定"
|
||||
|
||||
msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files."
|
||||
msgstr "%1 是將 PostScript 檔案轉換為 PDF 所需要的庫。\n\n使用通用 PostScript 印表機列印的文件將被儲存為 PostScript (.ps) 檔案。"
|
||||
msgstr "自動將 PostScript 檔案轉換為 PDF 需要 %1。\n\n使用通用 PostScript 印表機列印的文件將被儲存為 PostScript (.ps) 檔案。"
|
||||
|
||||
msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Language (.pcl) files."
|
||||
msgstr "%1 是將 PCL 檔案轉換為 PDF 所需要的庫。\n\n使用通用 PCL 印表機列印的文件將被儲存為 Printer Command Language (.pcl) 檔案。"
|
||||
msgstr "自動將 PCL 檔案轉換為 PDF 需要 %1。\n\n使用通用 PCL 印表機列印的文件將被儲存為 Printer Command Language (.pcl) 檔案。"
|
||||
|
||||
msgid "Don't show this message again"
|
||||
msgstr "不要再顯示此消息"
|
||||
@@ -1087,13 +1051,13 @@ msgid "Don't reset"
|
||||
msgstr "不重設"
|
||||
|
||||
msgid "CD-ROM images"
|
||||
msgstr "光碟映像"
|
||||
msgstr "光碟影像"
|
||||
|
||||
msgid "%1 Device Configuration"
|
||||
msgstr "%1 裝置設定"
|
||||
|
||||
msgid "Monitor in sleep mode"
|
||||
msgstr "顯示器處在睡眠狀態"
|
||||
msgstr "監視器處在睡眠狀態"
|
||||
|
||||
msgid "GLSL shaders"
|
||||
msgstr "GLSL 著色器"
|
||||
@@ -1102,7 +1066,7 @@ msgid "You are loading an unsupported configuration"
|
||||
msgstr "正在載入一個不受支援的設定"
|
||||
|
||||
msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid."
|
||||
msgstr "此模擬電腦停用了基於選定電腦的 CPU 類型過濾。\n\n能夠選中與所選機器本不相容的 CPU,但是可能會遇到與機器 BIOS 或其他軟體不相容的問題。\n\n啟用此設定不受官方支援,並且提交的任何錯誤報告可能會視為無效而關閉。"
|
||||
msgstr "此模擬電腦停用了基於選定電腦的 CPU 類型過濾。\n\n能夠選中與所選機器本不相容的 CPU,但是可能會遇到與機器 BIOS 或其他軟體不相容的問題。\n\n啟用此設定不受官方支援,並且提交的任何錯誤報告可能會視為無效而結案。"
|
||||
|
||||
msgid "Continue"
|
||||
msgstr "繼續"
|
||||
@@ -1114,7 +1078,7 @@ msgid "C&assette: %1"
|
||||
msgstr "磁帶: %1(&A)"
|
||||
|
||||
msgid "Cassette images"
|
||||
msgstr "磁帶映像"
|
||||
msgstr "磁帶影像"
|
||||
|
||||
msgid "Cartridge %1: %2"
|
||||
msgstr "卡帶 %1: %2"
|
||||
@@ -1123,7 +1087,7 @@ msgid "Car&tridge %1: %2"
|
||||
msgstr "卡帶 %1: %2(&A)"
|
||||
|
||||
msgid "Cartridge images"
|
||||
msgstr "卡帶映像"
|
||||
msgstr "卡帶影像"
|
||||
|
||||
msgid "Resume execution"
|
||||
msgstr "恢復執行"
|
||||
@@ -1159,25 +1123,25 @@ msgid "Not running"
|
||||
msgstr "未執行"
|
||||
|
||||
msgid "Running"
|
||||
msgstr "運行"
|
||||
msgstr "執行中"
|
||||
|
||||
msgid "Paused"
|
||||
msgstr "已暫停"
|
||||
|
||||
msgid "Waiting"
|
||||
msgstr "等待"
|
||||
msgstr "等待中"
|
||||
|
||||
msgid "Powered Off"
|
||||
msgstr "電源關閉"
|
||||
|
||||
msgid "%n running"
|
||||
msgstr "%n 運行"
|
||||
msgstr "%n 執行中"
|
||||
|
||||
msgid "%n paused"
|
||||
msgstr "%n 已暫停"
|
||||
|
||||
msgid "%n waiting"
|
||||
msgstr "%n 等待"
|
||||
msgstr "%n 等待中"
|
||||
|
||||
msgid "%1 total"
|
||||
msgstr "%1 總計"
|
||||
@@ -1204,7 +1168,7 @@ msgid "Unable to open the selected configuration file for reading: %1"
|
||||
msgstr "無法開啟選取的設定檔進行讀取: %1"
|
||||
|
||||
msgid "Use regular expressions in search box"
|
||||
msgstr "在搜尋方塊中使用正則表達式"
|
||||
msgstr "在搜尋方塊中使用正規表示式"
|
||||
|
||||
msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?"
|
||||
msgstr "%1 台機器目前處於活動狀態。您確定要退出虛擬機器管理員嗎?"
|
||||
@@ -1285,7 +1249,7 @@ msgid "Set display name"
|
||||
msgstr "設定顯示名稱"
|
||||
|
||||
msgid "Enter the new display name (blank to reset)"
|
||||
msgstr "輸入新的顯示名稱 (空白表示重設)"
|
||||
msgstr "輸入新的顯示名稱 (留空以重設)"
|
||||
|
||||
msgid "Change &display name..."
|
||||
msgstr "變更顯示名稱(&D)..."
|
||||
@@ -1306,7 +1270,7 @@ msgid "Select an icon"
|
||||
msgstr "選擇圖示"
|
||||
|
||||
msgid "C&lone..."
|
||||
msgstr "克隆(&L)..."
|
||||
msgstr "複製(&L)..."
|
||||
|
||||
msgid "Virtual machine \"%1\" (%2) will be cloned into:"
|
||||
msgstr "虛擬機器 \"%1\" (%2) 將被複製到:"
|
||||
@@ -1318,7 +1282,7 @@ msgid "You cannot use the following characters in the name: %1"
|
||||
msgstr "您不能在名稱中使用下列字元:%1"
|
||||
|
||||
msgid "Clone"
|
||||
msgstr "克隆"
|
||||
msgstr "複製"
|
||||
|
||||
msgid "Failed to create directory for cloned VM"
|
||||
msgstr "為複製的虛擬機器建立目錄失敗"
|
||||
@@ -1345,7 +1309,7 @@ msgid "Unable to open the configuration file at %1 for writing"
|
||||
msgstr "無法開啟 %1 的設定檔進行寫入"
|
||||
|
||||
msgid "Error adding system"
|
||||
msgstr "錯誤新增系統"
|
||||
msgstr "新增系統錯誤"
|
||||
|
||||
msgid "Remove directory failed"
|
||||
msgstr "移除目錄失敗"
|
||||
@@ -1387,7 +1351,7 @@ msgid "Show &config file"
|
||||
msgstr "顯示設定檔(&C)"
|
||||
|
||||
msgid "No screenshot"
|
||||
msgstr "沒有截圖"
|
||||
msgstr "沒有擷圖"
|
||||
|
||||
msgid "Search"
|
||||
msgstr "搜尋"
|
||||
@@ -1404,8 +1368,8 @@ msgstr "系統"
|
||||
msgid "Storage"
|
||||
msgstr "儲存"
|
||||
|
||||
msgid "Disk %1: "
|
||||
msgstr "磁碟 %1: "
|
||||
msgid "Disk %1:"
|
||||
msgstr "磁碟 %1:"
|
||||
|
||||
msgid "No disks"
|
||||
msgstr "無磁碟"
|
||||
@@ -1426,7 +1390,7 @@ msgid "Hard disk (%1)"
|
||||
msgstr "硬碟 (%1)"
|
||||
|
||||
msgid "MFM/RLL or ESDI CD-ROM drives never existed"
|
||||
msgstr "不存在 MFM/RLL 或 ESDI CD-ROM 光碟機"
|
||||
msgstr "MFM/RLL 或 ESDI CD-ROM 光碟機從未存在"
|
||||
|
||||
msgid "Custom..."
|
||||
msgstr "自訂..."
|
||||
@@ -1441,13 +1405,13 @@ msgid "Add Existing Hard Disk"
|
||||
msgstr "增加已存在的硬碟"
|
||||
|
||||
msgid "HDI disk images cannot be larger than 4 GB."
|
||||
msgstr "HDI 磁碟映像不能超過 4 GB。"
|
||||
msgstr "HDI 磁碟影像不能超過 4 GB。"
|
||||
|
||||
msgid "Disk images cannot be larger than 127 GB."
|
||||
msgstr "磁碟映像不能超過 127 GB。"
|
||||
msgstr "磁碟影像不能超過 127 GB。"
|
||||
|
||||
msgid "Hard disk images"
|
||||
msgstr "硬碟映像"
|
||||
msgstr "硬碟影像"
|
||||
|
||||
msgid "Unable to read file"
|
||||
msgstr "無法讀取檔案"
|
||||
@@ -1456,16 +1420,16 @@ msgid "Unable to write file"
|
||||
msgstr "無法寫入檔案"
|
||||
|
||||
msgid "HDI or HDX images with a sector size other than 512 are not supported."
|
||||
msgstr "不支援非 512 位元組磁區大小的 HDI 或 HDX 映像。"
|
||||
msgstr "不支援非 512 位元組磁區大小的 HDI 或 HDX 影像。"
|
||||
|
||||
msgid "Disk image file already exists"
|
||||
msgstr "磁碟映像檔案已存在"
|
||||
msgstr "磁碟影像檔案已存在"
|
||||
|
||||
msgid "Please specify a valid file name."
|
||||
msgstr "請指定有效的檔案名。"
|
||||
|
||||
msgid "Disk image created"
|
||||
msgstr "已創建磁碟映像"
|
||||
msgstr "已創建磁碟影像"
|
||||
|
||||
msgid "Make sure the file exists and is readable."
|
||||
msgstr "請確定此檔案已存在並可讀取。"
|
||||
@@ -1474,16 +1438,16 @@ msgid "Make sure the file is being saved to a writable directory."
|
||||
msgstr "請確定此檔案儲存在可寫目錄中。"
|
||||
|
||||
msgid "Disk image too large"
|
||||
msgstr "磁碟映像太大"
|
||||
msgstr "磁碟影像太大"
|
||||
|
||||
msgid "Remember to partition and format the newly-created drive."
|
||||
msgstr "請記得為新創建的映像分區並格式化。"
|
||||
msgstr "請記得為新創建的影像分區並格式化。"
|
||||
|
||||
msgid "The selected file will be overwritten. Are you sure you want to use it?"
|
||||
msgstr "選定的檔案將被覆蓋。確定繼續使用此檔案嗎?"
|
||||
|
||||
msgid "Unsupported disk image"
|
||||
msgstr "不支援的磁碟映像"
|
||||
msgstr "不支援的磁碟影像"
|
||||
|
||||
msgid "Overwrite"
|
||||
msgstr "覆蓋"
|
||||
@@ -1492,13 +1456,13 @@ msgid "Don't overwrite"
|
||||
msgstr "不覆蓋"
|
||||
|
||||
msgid "Raw image"
|
||||
msgstr "原始映像"
|
||||
msgstr "原始影像"
|
||||
|
||||
msgid "HDI image"
|
||||
msgstr "HDI 映像"
|
||||
msgstr "HDI 影像"
|
||||
|
||||
msgid "HDX image"
|
||||
msgstr "HDX 映像"
|
||||
msgstr "HDX 影像"
|
||||
|
||||
msgid "Fixed-size VHD"
|
||||
msgstr "固定大小 VHD"
|
||||
@@ -1513,13 +1477,13 @@ msgid "(N/A)"
|
||||
msgstr "(不適用)"
|
||||
|
||||
msgid "Raw image (.img)"
|
||||
msgstr "原始映像 (.img)"
|
||||
msgstr "原始影像 (.img)"
|
||||
|
||||
msgid "HDI image (.hdi)"
|
||||
msgstr "HDI 映像 (.hdi)"
|
||||
msgstr "HDI 影像 (.hdi)"
|
||||
|
||||
msgid "HDX image (.hdx)"
|
||||
msgstr "HDX 映像 (.hdx)"
|
||||
msgstr "HDX 影像 (.hdx)"
|
||||
|
||||
msgid "Fixed-size VHD (.vhd)"
|
||||
msgstr "固定大小 VHD (.vhd)"
|
||||
@@ -1543,7 +1507,7 @@ msgid "Select the parent VHD"
|
||||
msgstr "選取父 VHD 檔案"
|
||||
|
||||
msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?"
|
||||
msgstr "父映像可能在創建差異映像後被修改。\n\n如果映像檔案被移動或複製,或創建此磁碟的程式中存在錯誤,也可能發生這種情況。\n\n是否需要修復時間戳?"
|
||||
msgstr "父影像可能在創建差異影像後被修改。\n\n如果影像檔案被移動或複製,或創建此磁碟的程式中存在錯誤,也可能發生這種情況。\n\n是否需要修復時間戳?"
|
||||
|
||||
msgid "Parent and child disk timestamps do not match"
|
||||
msgstr "父碟與子碟的時間戳不匹配"
|
||||
@@ -1600,10 +1564,10 @@ msgid "1.44 MB"
|
||||
msgstr "1.44 MB"
|
||||
|
||||
msgid "DMF (cluster 1024)"
|
||||
msgstr "DMF (1024 簇)"
|
||||
msgstr "DMF (1024 位元組叢集)"
|
||||
|
||||
msgid "DMF (cluster 2048)"
|
||||
msgstr "DMF (2048 簇)"
|
||||
msgstr "DMF (2048 位元組叢集)"
|
||||
|
||||
msgid "2.88 MB"
|
||||
msgstr "2.88 MB"
|
||||
@@ -1666,7 +1630,7 @@ msgid "Mouse sensitivity:"
|
||||
msgstr "滑鼠靈敏度:"
|
||||
|
||||
msgid "Select media images from program working directory"
|
||||
msgstr "從程式工作目錄中選擇介質映像"
|
||||
msgstr "從程式工作目錄中選擇媒體影像"
|
||||
|
||||
msgid "PIT mode:"
|
||||
msgstr "PIT 模式:"
|
||||
@@ -1684,10 +1648,10 @@ msgid "&Auto-pause on focus loss"
|
||||
msgstr "失去焦點時自動暫停(&A)"
|
||||
|
||||
msgid "WinBox is no longer supported"
|
||||
msgstr "WinBox is no longer supported"
|
||||
msgstr "不再支援 WinBox"
|
||||
|
||||
msgid "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use."
|
||||
msgstr "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use."
|
||||
msgstr "WinBox 於 2022 年因缺乏維護者而停止發展。由於我們傾注全力於將 86Box 做的更好,我們決定不再支援將 WinBox 做為管理員。\n\n在 WinBox 未提供更新前,搭配新版本的 86Box 使用將導致不正確的行為。任何由 WinBox 引起的錯誤回報將以無效結案。\n\n請造訪 86box.net 網站以取得其他可用的管理員列表。"
|
||||
|
||||
msgid "Generate"
|
||||
msgstr "產生"
|
||||
@@ -1720,16 +1684,16 @@ msgid "&MCA devices..."
|
||||
msgstr "&MCA 裝置..."
|
||||
|
||||
msgid "Show non-&primary monitors"
|
||||
msgstr "顯示非主要顯示器(&P)"
|
||||
msgstr "顯示非主要監視器(&P)"
|
||||
|
||||
msgid "Open screenshots &folder..."
|
||||
msgstr "開啟螢幕截圖資料夾...(&F)"
|
||||
msgstr "開啟螢幕擷圖資料夾(&F)..."
|
||||
|
||||
msgid "Appl&y fullscreen stretch mode when maximized"
|
||||
msgstr "最大化時套用全螢幕拉伸模式(&Y)"
|
||||
msgstr "最大化時套用全螢幕延展模式(&Y)"
|
||||
|
||||
msgid "&Cursor/Puck"
|
||||
msgstr "游標/球棒(&C)"
|
||||
msgstr "數位板標定器(&C)"
|
||||
|
||||
msgid "&Pen"
|
||||
msgstr "筆(&P)"
|
||||
@@ -1738,10 +1702,10 @@ msgid "&Host CD/DVD Drive (%1:)"
|
||||
msgstr "主機 CD/DVD 光碟機 (%1:) (&H)"
|
||||
|
||||
msgid "&Connected"
|
||||
msgstr "已連線"
|
||||
msgstr "已連線(&C)"
|
||||
|
||||
msgid "Clear image &history"
|
||||
msgstr "清除映像歷史記錄(&H)"
|
||||
msgstr "清除影像歷史記錄(&H)"
|
||||
|
||||
msgid "Create..."
|
||||
msgstr "建立..."
|
||||
@@ -1756,7 +1720,7 @@ msgid "Null Driver"
|
||||
msgstr "空驅動程式"
|
||||
|
||||
msgid "NIC:"
|
||||
msgstr "NIC:"
|
||||
msgstr "網路卡:"
|
||||
|
||||
msgid "NIC %1 (%2) %3"
|
||||
msgstr "網路卡 %1 (%2) %3"
|
||||
@@ -1771,10 +1735,10 @@ msgid "Use target framerate:"
|
||||
msgstr "使用目標影格速率:"
|
||||
|
||||
msgid " fps"
|
||||
msgstr "fps"
|
||||
msgstr " fps"
|
||||
|
||||
msgid "VSync"
|
||||
msgstr "VSync"
|
||||
msgstr "垂直同步"
|
||||
|
||||
msgid "Synchronize with video"
|
||||
msgstr "與視訊同步"
|
||||
@@ -1789,10 +1753,10 @@ msgid "Browse..."
|
||||
msgstr "瀏覽..."
|
||||
|
||||
msgid "Couldn't create OpenGL context."
|
||||
msgstr "無法建立 OpenGL 上下文。"
|
||||
msgstr "無法建立 OpenGL 內容。"
|
||||
|
||||
msgid "Couldn't switch to OpenGL context."
|
||||
msgstr "無法切換至 OpenGL 上下文。"
|
||||
msgstr "無法切換至 OpenGL 內容。"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current version is %1.%2"
|
||||
msgstr "需要 OpenGL 版本 3.0 或更高。目前版本為 %1.%2"
|
||||
@@ -1804,7 +1768,7 @@ msgid "\nFalling back to software rendering."
|
||||
msgstr "\n回退到軟體渲染。"
|
||||
|
||||
msgid "<html><head/><body><p>When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.</p></body></html>"
|
||||
msgstr "<html><head/><body><p>當選擇媒體映像 (CD-ROM、軟碟等) 時,開啟對話方塊會在與 86Box 設定檔相同的目錄中開始。此設定可能只會在 macOS 上有所影響。</p></body></html>"
|
||||
msgstr "<html><head/><body><p>當選擇媒體影像 (CD-ROM、軟碟等) 時,開啟對話方塊會在與 86Box 設定檔相同的目錄中開始。此設定可能只會在 macOS 上有所影響。</p></body></html>"
|
||||
|
||||
msgid "This machine might have been moved or copied."
|
||||
msgstr "這台機器可能已被移動或複製。"
|
||||
@@ -1818,8 +1782,8 @@ msgstr "我已移動這台機器"
|
||||
msgid "I Copied It"
|
||||
msgstr "我已複製這台機器"
|
||||
|
||||
msgid "86Box Monitor #"
|
||||
msgstr "86Box Monitor "
|
||||
msgid "86Box Monitor #%1"
|
||||
msgstr "86Box 監視器 #%1"
|
||||
|
||||
msgid "No MCA devices."
|
||||
msgstr "沒有 MCA 裝置。"
|
||||
@@ -1855,7 +1819,7 @@ msgid "VDE Socket:"
|
||||
msgstr "VDE 插座:"
|
||||
|
||||
msgid "TAP Bridge Device:"
|
||||
msgstr ""
|
||||
msgstr "TAP 橋接裝置:"
|
||||
|
||||
msgid "86Box Unit Tester"
|
||||
msgstr "86Box 單元測試器"
|
||||
@@ -1876,7 +1840,7 @@ msgid "Serial port passthrough 4"
|
||||
msgstr "序列埠的直通 4"
|
||||
|
||||
msgid "Renderer &options..."
|
||||
msgstr "渲染器選項...(&O)"
|
||||
msgstr "渲染器選項(&O)..."
|
||||
|
||||
msgid "PC/XT Keyboard"
|
||||
msgstr "PC/XT 鍵盤"
|
||||
@@ -1927,22 +1891,22 @@ msgid "3M MicroTouch (Serial)"
|
||||
msgstr "3M MicroTouch (序列埠)"
|
||||
|
||||
msgid "Default Baud rate"
|
||||
msgstr "預設波特率"
|
||||
msgstr "預設鮑率"
|
||||
|
||||
msgid "[COM] Standard Hayes-compliant Modem"
|
||||
msgstr "[COM] 標準 Hayes 相容的數據機"
|
||||
|
||||
msgid "Roland MT-32 Emulation"
|
||||
msgstr "羅蘭 MT-32 模擬"
|
||||
msgstr "Roland MT-32 模擬"
|
||||
|
||||
msgid "Roland MT-32 (New) Emulation"
|
||||
msgstr "羅蘭 MT-32(新)模擬"
|
||||
msgstr "Roland MT-32(新)模擬"
|
||||
|
||||
msgid "Roland CM-32L Emulation"
|
||||
msgstr "羅蘭 CM-32L 模擬"
|
||||
msgstr "Roland CM-32L 模擬"
|
||||
|
||||
msgid "Roland CM-32LN Emulation"
|
||||
msgstr "羅蘭 CM-32LN 模擬"
|
||||
msgstr "Roland CM-32LN 模擬"
|
||||
|
||||
msgid "OPL4-ML Daughterboard"
|
||||
msgstr "OPL4-ML 子板"
|
||||
@@ -1999,7 +1963,7 @@ msgid "Enable BIOS extension ROM Writes (ROM #4)"
|
||||
msgstr "啟用 BIOS 擴充 ROM 寫入 (ROM 4)"
|
||||
|
||||
msgid "Linear framebuffer base"
|
||||
msgstr "線性圖框緩衝記憶體的底座"
|
||||
msgstr "線性圖框緩衝記憶體的起始位址"
|
||||
|
||||
msgid "Address"
|
||||
msgstr "位址"
|
||||
@@ -2014,7 +1978,7 @@ msgid "Parallel port IRQ"
|
||||
msgstr "並列埠的 IRQ"
|
||||
|
||||
msgid "BIOS Revision"
|
||||
msgstr "BIOS 版本"
|
||||
msgstr "BIOS 修訂版號"
|
||||
|
||||
msgid "BIOS Version"
|
||||
msgstr "BIOS 版本"
|
||||
@@ -2023,7 +1987,7 @@ msgid "BIOS Language"
|
||||
msgstr "BIOS 語言"
|
||||
|
||||
msgid "IBM 5161 Expansion Unit"
|
||||
msgstr "IBM 5161 擴充裝置"
|
||||
msgstr "IBM 5161 擴充單元"
|
||||
|
||||
msgid "IBM Cassette Basic"
|
||||
msgstr "IBM 磁帶式 BASIC"
|
||||
@@ -2125,13 +2089,13 @@ msgid "Reverb Width"
|
||||
msgstr "混響寬度"
|
||||
|
||||
msgid "Reverb Level"
|
||||
msgstr "混響電平"
|
||||
msgstr "混響位準"
|
||||
|
||||
msgid "Interpolation Method"
|
||||
msgstr "插值方法"
|
||||
|
||||
msgid "Dynamic Sample Loading"
|
||||
msgstr "樣品的動態載入"
|
||||
msgstr "動態取樣載入"
|
||||
|
||||
msgid "Reverb Output Gain"
|
||||
msgstr "迴響輸出增益"
|
||||
@@ -2140,7 +2104,7 @@ msgid "Reversed stereo"
|
||||
msgstr "反向立體聲"
|
||||
|
||||
msgid "Nice ramp"
|
||||
msgstr "漂亮的斜坡"
|
||||
msgstr "平滑漸變曲線"
|
||||
|
||||
msgid "Hz"
|
||||
msgstr "赫茲"
|
||||
@@ -2155,7 +2119,7 @@ msgid "RTS toggle"
|
||||
msgstr "RTS 切換"
|
||||
|
||||
msgid "Revision"
|
||||
msgstr "修訂"
|
||||
msgstr "修訂版號"
|
||||
|
||||
msgid "Controller"
|
||||
msgstr "控制器"
|
||||
@@ -2232,12 +2196,6 @@ msgstr "SID 過濾強度"
|
||||
msgid "Surround module"
|
||||
msgstr "環繞聲模組"
|
||||
|
||||
msgid "CODEC"
|
||||
msgstr "CODEC"
|
||||
|
||||
msgid "Raise CODEC interrupt on CODEC setup (needed by some drivers)"
|
||||
msgstr "在 CODEC 設定時啟動 CODEC 中斷 (某些驅動程式需要)"
|
||||
|
||||
msgid "SB Address"
|
||||
msgstr "SB 位址"
|
||||
|
||||
@@ -2253,6 +2211,18 @@ msgstr "WSS IRQ"
|
||||
msgid "WSS DMA"
|
||||
msgstr "WSS DMA"
|
||||
|
||||
msgid "RTC IRQ"
|
||||
msgstr "實時時鐘 IRQ"
|
||||
|
||||
msgid "RTC Port Address"
|
||||
msgstr "實時時鐘埠位址"
|
||||
|
||||
msgid "Onboard RTC"
|
||||
msgstr "內建實時時鐘"
|
||||
|
||||
msgid "Not installed"
|
||||
msgstr "未安裝"
|
||||
|
||||
msgid "Enable OPL"
|
||||
msgstr "啟用 OPL"
|
||||
|
||||
@@ -2311,7 +2281,7 @@ msgid "Snow emulation"
|
||||
msgstr "雪花模擬"
|
||||
|
||||
msgid "Monitor type"
|
||||
msgstr "顯示器類型"
|
||||
msgstr "監視器類型"
|
||||
|
||||
msgid "Character set"
|
||||
msgstr "字元集"
|
||||
@@ -2452,7 +2422,7 @@ msgid "Non-timed (original)"
|
||||
msgstr "非定時 (原始)"
|
||||
|
||||
msgid "45 Hz (JMP2 not populated)"
|
||||
msgstr "45 Hz (JMP2 未填充)"
|
||||
msgstr "45 Hz (JMP2 未安插)"
|
||||
|
||||
msgid "Two"
|
||||
msgstr "二鍵"
|
||||
@@ -2523,9 +2493,6 @@ msgstr "24 MB"
|
||||
msgid "SigmaTel STAC9721T (stereo)"
|
||||
msgstr "SigmaTel STAC9721T (立體聲)"
|
||||
|
||||
msgid "Classic"
|
||||
msgstr "經典"
|
||||
|
||||
msgid "256 KB"
|
||||
msgstr "256 KB"
|
||||
|
||||
@@ -2560,7 +2527,7 @@ msgid "Color (IBM 5153)"
|
||||
msgstr "彩色(IBM 5153)"
|
||||
|
||||
msgid "Simple doubling"
|
||||
msgstr "簡單加倍"
|
||||
msgstr "簡單倍增"
|
||||
|
||||
msgid "sRGB interpolation"
|
||||
msgstr "sRGB 插值"
|
||||
@@ -2620,7 +2587,7 @@ msgid "U.S. English"
|
||||
msgstr "美國英語"
|
||||
|
||||
msgid "Scandinavian"
|
||||
msgstr "斯堪的納維亞語"
|
||||
msgstr "斯堪地那維亞語"
|
||||
|
||||
msgid "Other languages"
|
||||
msgstr "其他語言"
|
||||
@@ -2629,16 +2596,16 @@ msgid "Bochs latest"
|
||||
msgstr "Bochs 最新"
|
||||
|
||||
msgid "Apply overscan deltas"
|
||||
msgstr "套用過掃描三角區"
|
||||
msgstr "套用過掃描差值"
|
||||
|
||||
msgid "Mono Interlaced"
|
||||
msgstr "單色隔行扫描"
|
||||
msgstr "單色隔行掃描"
|
||||
|
||||
msgid "Mono Non-Interlaced"
|
||||
msgstr "單色非隔行掃描"
|
||||
|
||||
msgid "Color Interlaced"
|
||||
msgstr "彩色隔行扫描"
|
||||
msgstr "彩色隔行掃描"
|
||||
|
||||
msgid "Color Non-Interlaced"
|
||||
msgstr "彩色非隔行掃描"
|
||||
@@ -2692,7 +2659,7 @@ msgid "Parallel Line Internet Protocol"
|
||||
msgstr "Parallel Line Internet Protocol"
|
||||
|
||||
msgid "Protection Dongle for Savage Quest"
|
||||
msgstr "用於 Savage Quest 的保護加密狗"
|
||||
msgstr "用於 Savage Quest 的防拷保護鎖"
|
||||
|
||||
msgid "Serial Passthrough Device"
|
||||
msgstr "序列埠直通裝置"
|
||||
@@ -2731,7 +2698,7 @@ msgid "&Unmute"
|
||||
msgstr "解除靜音(&U)"
|
||||
|
||||
msgid "Softfloat FPU"
|
||||
msgstr "Softfloat FPU"
|
||||
msgstr "Softfloat 浮點運算器模擬"
|
||||
|
||||
msgid "High performance impact"
|
||||
msgstr "對效能影響大"
|
||||
@@ -2761,7 +2728,7 @@ msgid "[Generic] 2000 (7200 RPM)"
|
||||
msgstr "[通用] 2000 (7200 轉速)"
|
||||
|
||||
msgid "IBM 8514/A clone (ISA)"
|
||||
msgstr "IBM 8514/A 克隆 (ISA)"
|
||||
msgstr "IBM 8514/A 相容品 (ISA)"
|
||||
|
||||
msgid "Vendor"
|
||||
msgstr "製造商"
|
||||
@@ -2814,9 +2781,6 @@ msgstr "GLSL 錯誤"
|
||||
msgid "Could not load shader: %1"
|
||||
msgstr "無法載入著色器: %1"
|
||||
|
||||
msgid "OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2"
|
||||
msgstr "需要 OpenGL 版本 3.0 或更高。目前的 GLSL 版本為 %1.%2"
|
||||
|
||||
msgid "Could not load texture: %1"
|
||||
msgstr "無法載入材質: %1"
|
||||
|
||||
@@ -2854,7 +2818,7 @@ msgid "Keybind"
|
||||
msgstr "鍵盤綁定"
|
||||
|
||||
msgid "Clear binding"
|
||||
msgstr "透明裝訂"
|
||||
msgstr "解除綁定"
|
||||
|
||||
msgid "Bind"
|
||||
msgstr "綁定"
|
||||
@@ -2880,8 +2844,11 @@ msgstr "傳送 Control+Alt+Escape"
|
||||
msgid "Toggle fullscreen"
|
||||
msgstr "切換全螢幕"
|
||||
|
||||
msgid "Toggle UI in fullscreen"
|
||||
msgstr "切換使用者介面至全螢幕"
|
||||
|
||||
msgid "Screenshot"
|
||||
msgstr "螢幕截圖"
|
||||
msgstr "螢幕擷圖"
|
||||
|
||||
msgid "Release mouse pointer"
|
||||
msgstr "放開滑鼠游標"
|
||||
@@ -2905,7 +2872,7 @@ msgid "Local Switch"
|
||||
msgstr "本地交換器"
|
||||
|
||||
msgid "Remote Switch"
|
||||
msgstr "遙控交換器"
|
||||
msgstr "遠端交換器"
|
||||
|
||||
msgid "Switch:"
|
||||
msgstr "交換器:"
|
||||
@@ -2926,7 +2893,7 @@ msgid "&Wipe NVRAM"
|
||||
msgstr "清除(&W) NVRAM"
|
||||
|
||||
msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?"
|
||||
msgstr "這將刪除位於 (\"nvr\" 子目錄中的) 虛擬機器的所有 NVRAM (和相關) 檔案。如果適用的話,您必須重新設定 BIOS (可能還有虛擬機器內的其他裝置) 設定。\n\n您確定要清除虛擬機 \"%1\" 的所有 NVRAM 內容嗎?"
|
||||
msgstr "這將刪除位於 (\"nvr\" 子目錄中的) 虛擬機器的所有 NVRAM (和相關) 檔案。如果套用的話,您必須重新設定 BIOS (可能還有虛擬機器內的其他裝置) 設定。\n\n您確定要清除虛擬機 \"%1\" 的所有 NVRAM 內容嗎?"
|
||||
|
||||
msgid "Success"
|
||||
msgstr "成功"
|
||||
@@ -2953,16 +2920,16 @@ msgid "Check for updates on startup"
|
||||
msgstr "啟動時檢查更新"
|
||||
|
||||
msgid "Unable to determine release information"
|
||||
msgstr "無法確定釋放資訊"
|
||||
msgstr "無法確定版本發佈資訊"
|
||||
|
||||
msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later."
|
||||
msgstr "檢查更新時出錯:\n'\n%1\n\n請稍後再試。"
|
||||
msgstr "檢查更新時出錯:\n\n%1\n\n請稍後再試。"
|
||||
|
||||
msgid "Update check complete"
|
||||
msgstr "更新檢查完成"
|
||||
|
||||
msgid "stable"
|
||||
msgstr "穩定"
|
||||
msgstr "穩定版"
|
||||
|
||||
msgid "beta"
|
||||
msgstr "測試版"
|
||||
@@ -3004,7 +2971,7 @@ msgid "86Box Update"
|
||||
msgstr "86Box 更新"
|
||||
|
||||
msgid "Release notes:"
|
||||
msgstr "發佈說明:"
|
||||
msgstr "版本發佈說明:"
|
||||
|
||||
msgid "%1 Hz"
|
||||
msgstr "%1 Hz"
|
||||
@@ -3037,10 +3004,10 @@ msgid "Sharpness"
|
||||
msgstr "銳利度"
|
||||
|
||||
msgid "&CGA composite settings..."
|
||||
msgstr "CGA 複合模式的設定...(&C)"
|
||||
msgstr "CGA 複合視訊的設定(&C)..."
|
||||
|
||||
msgid "CGA composite settings"
|
||||
msgstr "CGA 複合模式的設定"
|
||||
msgstr "CGA 複合視訊的設定"
|
||||
|
||||
msgid "Monitor EDID"
|
||||
msgstr "監視器的 EDID"
|
||||
@@ -3058,7 +3025,7 @@ msgid "OpenGL input scale"
|
||||
msgstr "OpenGL 的輸入比例"
|
||||
|
||||
msgid "OpenGL input stretch mode"
|
||||
msgstr "OpenGL 的輸入拉伸模式"
|
||||
msgstr "OpenGL 的輸入延展模式"
|
||||
|
||||
msgid "Color scheme"
|
||||
msgstr "配色方案"
|
||||
|
||||
@@ -48,9 +48,9 @@ About::About(QWidget *parent)
|
||||
# define DYNAREC_STR "no dynarec"
|
||||
#endif
|
||||
versioninfo.append(QString(" [%1, %2]").arg(QSysInfo::buildCpuArchitecture(), tr(DYNAREC_STR)));
|
||||
setText(QString("<b>%3%1%2</b>").arg(EMU_VERSION_FULL, versioninfo, tr("86Box v")));
|
||||
setText(QString("<b>%1 v%2%3</b>").arg(EMU_NAME, EMU_VERSION_FULL, versioninfo));
|
||||
setInformativeText(tr("An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information.").replace("\n", "<br>"));
|
||||
setWindowTitle(tr("About 86Box"));
|
||||
setWindowTitle(tr("About %1").arg(EMU_NAME));
|
||||
const auto closeButton = addButton("OK", QMessageBox::ButtonRole::AcceptRole);
|
||||
setEscapeButton(closeButton);
|
||||
const auto webSiteButton = addButton(EMU_SITE, QMessageBox::ButtonRole::HelpRole);
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
|
||||
#include <QPushButton>
|
||||
|
||||
extern "C"
|
||||
{
|
||||
extern "C" {
|
||||
#include <86box/86box.h>
|
||||
#include <86box/plat.h>
|
||||
#include <86box/vid_cga_comp.h>
|
||||
@@ -16,11 +15,11 @@ CGASettingsDialog::CGASettingsDialog(QWidget *parent)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
|
||||
cga_hue = vid_cga_comp_hue;
|
||||
cga_hue = vid_cga_comp_hue;
|
||||
cga_saturation = vid_cga_comp_saturation;
|
||||
cga_brightness = vid_cga_comp_brightness;
|
||||
cga_contrast = vid_cga_comp_contrast;
|
||||
cga_sharpness = vid_cga_comp_sharpness;
|
||||
cga_contrast = vid_cga_comp_contrast;
|
||||
cga_sharpness = vid_cga_comp_sharpness;
|
||||
|
||||
ui->horizontalSliderHue->setValue(vid_cga_comp_hue);
|
||||
ui->horizontalSliderSaturation->setValue(vid_cga_comp_saturation);
|
||||
@@ -29,8 +28,7 @@ CGASettingsDialog::CGASettingsDialog(QWidget *parent)
|
||||
ui->horizontalSliderSharpness->setValue(vid_cga_comp_sharpness);
|
||||
|
||||
connect(ui->buttonBox->button(QDialogButtonBox::Apply), &QPushButton::clicked, this, &CGASettingsDialog::applySettings);
|
||||
connect(ui->buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, [this]
|
||||
{
|
||||
connect(ui->buttonBox->button(QDialogButtonBox::Reset), &QPushButton::clicked, this, [this] {
|
||||
ui->horizontalSliderHue->setValue(0);
|
||||
ui->horizontalSliderSaturation->setValue(100);
|
||||
ui->horizontalSliderBrightness->setValue(0);
|
||||
@@ -38,11 +36,11 @@ CGASettingsDialog::CGASettingsDialog(QWidget *parent)
|
||||
ui->horizontalSliderSharpness->setValue(0);
|
||||
});
|
||||
|
||||
connect(ui->horizontalSliderHue, &QSlider::valueChanged, this, [this] { updateDisplay(); } );
|
||||
connect(ui->horizontalSliderSaturation, &QSlider::valueChanged, this, [this] { updateDisplay(); } );
|
||||
connect(ui->horizontalSliderBrightness, &QSlider::valueChanged, this, [this] { updateDisplay(); } );
|
||||
connect(ui->horizontalSliderContrast, &QSlider::valueChanged, this, [this] { updateDisplay(); } );
|
||||
connect(ui->horizontalSliderSharpness, &QSlider::valueChanged, this, [this] { updateDisplay(); } );
|
||||
connect(ui->horizontalSliderHue, &QSlider::valueChanged, this, [this] { updateDisplay(); });
|
||||
connect(ui->horizontalSliderSaturation, &QSlider::valueChanged, this, [this] { updateDisplay(); });
|
||||
connect(ui->horizontalSliderBrightness, &QSlider::valueChanged, this, [this] { updateDisplay(); });
|
||||
connect(ui->horizontalSliderContrast, &QSlider::valueChanged, this, [this] { updateDisplay(); });
|
||||
connect(ui->horizontalSliderSharpness, &QSlider::valueChanged, this, [this] { updateDisplay(); });
|
||||
}
|
||||
|
||||
CGASettingsDialog::~CGASettingsDialog()
|
||||
@@ -50,7 +48,8 @@ CGASettingsDialog::~CGASettingsDialog()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void CGASettingsDialog::updateDisplay()
|
||||
void
|
||||
CGASettingsDialog::updateDisplay()
|
||||
{
|
||||
auto temp_cga_comp_hue = ui->horizontalSliderHue->value();
|
||||
auto temp_cga_comp_saturation = ui->horizontalSliderSaturation->value();
|
||||
@@ -60,7 +59,8 @@ void CGASettingsDialog::updateDisplay()
|
||||
cga_comp_reload(temp_cga_comp_brightness, temp_cga_comp_saturation, temp_cga_comp_sharpness, temp_cga_comp_hue, temp_cga_comp_contrast);
|
||||
}
|
||||
|
||||
void CGASettingsDialog::applySettings()
|
||||
void
|
||||
CGASettingsDialog::applySettings()
|
||||
{
|
||||
vid_cga_comp_hue = ui->horizontalSliderHue->value();
|
||||
vid_cga_comp_saturation = ui->horizontalSliderSaturation->value();
|
||||
@@ -69,26 +69,27 @@ void CGASettingsDialog::applySettings()
|
||||
vid_cga_comp_sharpness = ui->horizontalSliderSharpness->value();
|
||||
cga_comp_reload(vid_cga_comp_brightness, vid_cga_comp_saturation, vid_cga_comp_sharpness, vid_cga_comp_hue, vid_cga_comp_contrast);
|
||||
|
||||
cga_hue = vid_cga_comp_hue;
|
||||
cga_hue = vid_cga_comp_hue;
|
||||
cga_saturation = vid_cga_comp_saturation;
|
||||
cga_brightness = vid_cga_comp_brightness;
|
||||
cga_contrast = vid_cga_comp_contrast;
|
||||
cga_sharpness = vid_cga_comp_sharpness;
|
||||
cga_contrast = vid_cga_comp_contrast;
|
||||
cga_sharpness = vid_cga_comp_sharpness;
|
||||
}
|
||||
|
||||
void CGASettingsDialog::on_buttonBox_accepted()
|
||||
void
|
||||
CGASettingsDialog::on_buttonBox_accepted()
|
||||
{
|
||||
applySettings();
|
||||
}
|
||||
|
||||
void CGASettingsDialog::on_buttonBox_rejected()
|
||||
void
|
||||
CGASettingsDialog::on_buttonBox_rejected()
|
||||
{
|
||||
vid_cga_comp_hue = cga_hue;
|
||||
vid_cga_comp_hue = cga_hue;
|
||||
vid_cga_comp_saturation = cga_saturation;
|
||||
vid_cga_comp_brightness = cga_brightness;
|
||||
vid_cga_comp_contrast = cga_contrast;
|
||||
vid_cga_comp_sharpness = cga_sharpness;
|
||||
vid_cga_comp_contrast = cga_contrast;
|
||||
vid_cga_comp_sharpness = cga_sharpness;
|
||||
|
||||
cga_comp_reload(vid_cga_comp_brightness, vid_cga_comp_saturation, vid_cga_comp_sharpness, vid_cga_comp_hue, vid_cga_comp_contrast);
|
||||
}
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ extern "C" {
|
||||
# include <sys/sysmacros.h>
|
||||
#endif
|
||||
#ifdef Q_OS_WINDOWS
|
||||
#include <windows.h>
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
DeviceConfig::DeviceConfig(QWidget *parent)
|
||||
@@ -87,15 +87,16 @@ EnumerateSerialDevices()
|
||||
for (int i = 1; i < 256; i++) {
|
||||
devstr[0] = 0;
|
||||
snprintf(devstr.data(), 1024, R"(\\.\COM%d)", i);
|
||||
const auto handle = CreateFileA(devstr.data(),
|
||||
GENERIC_READ | GENERIC_WRITE, 0,
|
||||
nullptr, OPEN_EXISTING,
|
||||
0, nullptr);
|
||||
const auto handle = CreateFileA(devstr.data(),
|
||||
GENERIC_READ | GENERIC_WRITE, 0,
|
||||
nullptr, OPEN_EXISTING,
|
||||
0, nullptr);
|
||||
const auto dwError = GetLastError();
|
||||
if ((handle != INVALID_HANDLE_VALUE) || (dwError == ERROR_ACCESS_DENIED) ||
|
||||
(dwError == ERROR_GEN_FAILURE) || (dwError == ERROR_SHARING_VIOLATION) ||
|
||||
(dwError == ERROR_SEM_TIMEOUT)) {
|
||||
if (handle != INVALID_HANDLE_VALUE) CloseHandle(handle);
|
||||
if (handle != INVALID_HANDLE_VALUE)
|
||||
CloseHandle(handle);
|
||||
serialDevices.push_back(QString(devstr));
|
||||
}
|
||||
}
|
||||
@@ -114,8 +115,8 @@ EnumerateSerialDevices()
|
||||
void
|
||||
DeviceConfig::ProcessConfig(void *dc, const void *c, const bool is_dep)
|
||||
{
|
||||
auto * device_context = static_cast<device_context_t *>(dc);
|
||||
const auto * config = static_cast<const _device_config_ *>(c);
|
||||
auto *device_context = static_cast<device_context_t *>(dc);
|
||||
const auto *config = static_cast<const _device_config_ *>(c);
|
||||
const QString blank = "";
|
||||
int p;
|
||||
int q;
|
||||
@@ -136,7 +137,7 @@ DeviceConfig::ProcessConfig(void *dc, const void *c, const bool is_dep)
|
||||
|
||||
const int config_major_type = (config_type >> CONFIG_SHIFT) << CONFIG_SHIFT;
|
||||
|
||||
int value = 0;
|
||||
int value = 0;
|
||||
auto selected = blank;
|
||||
|
||||
switch (config_major_type) {
|
||||
@@ -164,210 +165,211 @@ DeviceConfig::ProcessConfig(void *dc, const void *c, const bool is_dep)
|
||||
default:
|
||||
break;
|
||||
case CONFIG_BINARY:
|
||||
{
|
||||
auto *cbox = new QCheckBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setChecked(value > 0);
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
break;
|
||||
}
|
||||
{
|
||||
auto *cbox = new QCheckBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setChecked(value > 0);
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
break;
|
||||
}
|
||||
#ifdef USE_RTMIDI
|
||||
case CONFIG_MIDI_OUT:
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = -1;
|
||||
for (int i = 0; i < rtmidi_out_get_num_devs(); i++) {
|
||||
char midiName[512] = { 0 };
|
||||
rtmidi_out_get_dev_name(i, midiName);
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = -1;
|
||||
for (int i = 0; i < rtmidi_out_get_num_devs(); i++) {
|
||||
char midiName[512] = { 0 };
|
||||
rtmidi_out_get_dev_name(i, midiName);
|
||||
|
||||
Models::AddEntry(model, midiName, i);
|
||||
if (i == value)
|
||||
currentIndex = i;
|
||||
Models::AddEntry(model, midiName, i);
|
||||
if (i == value)
|
||||
currentIndex = i;
|
||||
}
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
case CONFIG_MIDI_IN:
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = -1;
|
||||
for (int i = 0; i < rtmidi_in_get_num_devs(); i++) {
|
||||
char midiName[512] = { 0 };
|
||||
rtmidi_in_get_dev_name(i, midiName);
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = -1;
|
||||
for (int i = 0; i < rtmidi_in_get_num_devs(); i++) {
|
||||
char midiName[512] = { 0 };
|
||||
rtmidi_in_get_dev_name(i, midiName);
|
||||
|
||||
Models::AddEntry(model, midiName, i);
|
||||
if (i == value)
|
||||
currentIndex = i;
|
||||
Models::AddEntry(model, midiName, i);
|
||||
if (i == value)
|
||||
currentIndex = i;
|
||||
}
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
case CONFIG_INT:
|
||||
case CONFIG_SELECTION:
|
||||
case CONFIG_HEX16:
|
||||
case CONFIG_HEX20:
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = -1;
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = -1;
|
||||
|
||||
for (auto *sel = config->selection; (sel != nullptr) && (sel->description != nullptr) &&
|
||||
(strlen(sel->description) > 0); ++sel) {
|
||||
int row = Models::AddEntry(model, tr(sel->description), sel->value);
|
||||
for (auto *sel = config->selection; (sel != nullptr) && (sel->description != nullptr) &&
|
||||
(strlen(sel->description) > 0); ++sel) {
|
||||
int row = Models::AddEntry(model, tr(sel->description), sel->value);
|
||||
|
||||
if (sel->value == value)
|
||||
currentIndex = row;
|
||||
}
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
case CONFIG_BIOS:
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = -1;
|
||||
|
||||
q = 0;
|
||||
for (auto *bios = config->bios; (bios != nullptr) &&
|
||||
(bios->name != nullptr) &&
|
||||
(bios->internal_name != nullptr) &&
|
||||
(strlen(bios->name) > 0) &&
|
||||
(strlen(bios->internal_name) > 0) &&
|
||||
(bios->files_no > 0); ++bios) {
|
||||
p = 0;
|
||||
for (int d = 0; d < bios->files_no; d++)
|
||||
p += !!rom_present(const_cast<char *>(bios->files[d]));
|
||||
if (p == bios->files_no) {
|
||||
const int row = Models::AddEntry(model, tr(bios->name), q);
|
||||
if (!strcmp(selected.toUtf8().constData(), bios->internal_name))
|
||||
if (sel->value == value)
|
||||
currentIndex = row;
|
||||
}
|
||||
q++;
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
case CONFIG_BIOS:
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = -1;
|
||||
|
||||
q = 0;
|
||||
for (auto *bios = config->bios; (bios != nullptr) &&
|
||||
(bios->name != nullptr) &&
|
||||
(bios->internal_name != nullptr) &&
|
||||
(strlen(bios->name) > 0) &&
|
||||
(strlen(bios->internal_name) > 0) &&
|
||||
(bios->files_no > 0); ++bios) {
|
||||
p = 0;
|
||||
for (int d = 0; d < bios->files_no; d++)
|
||||
p += !!rom_present(const_cast<char *>(bios->files[d]));
|
||||
if (p == bios->files_no) {
|
||||
const int row = Models::AddEntry(model, tr(bios->name), q);
|
||||
if (!strcmp(selected.toUtf8().constData(), bios->internal_name))
|
||||
currentIndex = row;
|
||||
}
|
||||
q++;
|
||||
}
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
case CONFIG_SPINNER:
|
||||
{
|
||||
auto *spinBox = new QSpinBox();
|
||||
spinBox->setObjectName(config->name);
|
||||
spinBox->setMaximum(config->spinner.max);
|
||||
spinBox->setMinimum(config->spinner.min);
|
||||
if (config->spinner.step > 0)
|
||||
spinBox->setSingleStep(config->spinner.step);
|
||||
spinBox->setValue(value);
|
||||
this->ui->formLayout->addRow(tr(config->description), spinBox);
|
||||
break;
|
||||
}
|
||||
{
|
||||
auto *spinBox = new QSpinBox();
|
||||
spinBox->setObjectName(config->name);
|
||||
spinBox->setMaximum(config->spinner.max);
|
||||
spinBox->setMinimum(config->spinner.min);
|
||||
if (config->spinner.step > 0)
|
||||
spinBox->setSingleStep(config->spinner.step);
|
||||
spinBox->setValue(value);
|
||||
this->ui->formLayout->addRow(tr(config->description), spinBox);
|
||||
break;
|
||||
}
|
||||
case CONFIG_FNAME:
|
||||
{
|
||||
auto *fileField = new FileField(this);
|
||||
fileField->setObjectName(config->name);
|
||||
fileField->setFileName(selected);
|
||||
/* Get the actually used part of the filter */
|
||||
{
|
||||
auto *fileField = new FileField(this);
|
||||
fileField->setObjectName(config->name);
|
||||
fileField->setFileName(selected);
|
||||
/* Get the actually used part of the filter */
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
|
||||
QString filter = QString(config->file_filter).left(static_cast<int>(strcspn(config->file_filter, "|")));
|
||||
QString filter = QString(config->file_filter).left(static_cast<int>(strcspn(config->file_filter, "|")));
|
||||
#else
|
||||
QString filter = QString(config->file_filter).split("|").at(0);
|
||||
QString filter = QString(config->file_filter).split("|").at(0);
|
||||
#endif
|
||||
/* Extract the description and the extension list */
|
||||
QRegularExpressionMatch match = QRegularExpression("(.+) \\((.+)\\)$").match(filter);
|
||||
QString description = match.captured(1);
|
||||
QString extensions = match.captured(2);
|
||||
/* Split the extension list up and strip the filename globs */
|
||||
QRegularExpression re("\\*\\.(.*)");
|
||||
/* Extract the description and the extension list */
|
||||
QRegularExpressionMatch match = QRegularExpression("(.+) \\((.+)\\)$").match(filter);
|
||||
QString description = match.captured(1);
|
||||
QString extensions = match.captured(2);
|
||||
/* Split the extension list up and strip the filename globs */
|
||||
QRegularExpression re("\\*\\.(.*)");
|
||||
#if QT_VERSION < QT_VERSION_CHECK(5, 14, 0)
|
||||
QStringList extensionList;
|
||||
int i = 0;
|
||||
while (extensions.section(' ', i, i) != "") {
|
||||
QString extension = re.match(extensions.section(' ', i, i)).captured(1);
|
||||
extensionList.append(extension);
|
||||
i++;
|
||||
QStringList extensionList;
|
||||
int i = 0;
|
||||
while (extensions.section(' ', i, i) != "") {
|
||||
QString extension = re.match(extensions.section(' ', i, i)).captured(1);
|
||||
extensionList.append(extension);
|
||||
i++;
|
||||
}
|
||||
#else
|
||||
QStringList extensionList = extensions.split(" ");
|
||||
for (int i = 0; i < extensionList.count(); i++)
|
||||
extensionList[i] = re.match(extensionList[i]).captured(1);
|
||||
#endif
|
||||
fileField->setFilter(tr(description.toUtf8().constData()) % util::DlgFilter(extensionList) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||
this->ui->formLayout->addRow(tr(config->description), fileField);
|
||||
break;
|
||||
}
|
||||
#else
|
||||
QStringList extensionList = extensions.split(" ");
|
||||
for (int i = 0; i < extensionList.count(); i++)
|
||||
extensionList[i] = re.match(extensionList[i]).captured(1);
|
||||
#endif
|
||||
fileField->setFilter(tr(description.toUtf8().constData()) % util::DlgFilter(extensionList) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||
this->ui->formLayout->addRow(tr(config->description), fileField);
|
||||
break;
|
||||
}
|
||||
case CONFIG_STRING:
|
||||
{
|
||||
const auto lineEdit = new QLineEdit;
|
||||
lineEdit->setObjectName(config->name);
|
||||
lineEdit->setCursor(Qt::IBeamCursor);
|
||||
lineEdit->setText(selected);
|
||||
this->ui->formLayout->addRow(tr(config->description), lineEdit);
|
||||
break;
|
||||
}
|
||||
{
|
||||
const auto lineEdit = new QLineEdit;
|
||||
lineEdit->setObjectName(config->name);
|
||||
lineEdit->setCursor(Qt::IBeamCursor);
|
||||
lineEdit->setText(selected);
|
||||
this->ui->formLayout->addRow(tr(config->description), lineEdit);
|
||||
break;
|
||||
}
|
||||
case CONFIG_SERPORT:
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = 0;
|
||||
auto serialDevices = EnumerateSerialDevices();
|
||||
{
|
||||
auto *cbox = new QComboBox();
|
||||
cbox->setObjectName(config->name);
|
||||
cbox->setMaxVisibleItems(30);
|
||||
auto *model = cbox->model();
|
||||
int currentIndex = 0;
|
||||
auto serialDevices = EnumerateSerialDevices();
|
||||
|
||||
Models::AddEntry(model, tr("None"), -1);
|
||||
for (int i = 0; i < serialDevices.size(); i++) {
|
||||
const int row = Models::AddEntry(model, serialDevices[i], i);
|
||||
if (selected == serialDevices[i])
|
||||
currentIndex = row;
|
||||
Models::AddEntry(model, tr("None"), -1);
|
||||
for (int i = 0; i < serialDevices.size(); i++) {
|
||||
const int row = Models::AddEntry(model, serialDevices[i], i);
|
||||
if (selected == serialDevices[i])
|
||||
currentIndex = row;
|
||||
}
|
||||
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
|
||||
this->ui->formLayout->addRow(tr(config->description), cbox);
|
||||
cbox->setCurrentIndex(currentIndex);
|
||||
break;
|
||||
}
|
||||
case CONFIG_MAC:
|
||||
{
|
||||
// QHBoxLayout for the line edit widget and the generate button
|
||||
const auto hboxLayout = new QHBoxLayout();
|
||||
const auto generateButton = new QPushButton(tr("Generate"));
|
||||
const auto lineEdit = new QLineEdit;
|
||||
// Allow the line edit to expand and fill available space
|
||||
lineEdit->setSizePolicy(QSizePolicy::MinimumExpanding,QSizePolicy::Preferred);
|
||||
lineEdit->setInputMask("HH:HH:HH;0");
|
||||
lineEdit->setObjectName(config->name);
|
||||
// Display the current or generated MAC in uppercase
|
||||
// When stored it will be converted to lowercase
|
||||
if (config_get_mac(device_context->name, config->name,
|
||||
config->default_int) & 0xFF000000) {
|
||||
lineEdit->setText(QString::asprintf("%02X:%02X:%02X", random_generate(),
|
||||
random_generate(), random_generate()));
|
||||
} else {
|
||||
auto current_mac = QString(config_get_string(device_context->name, config->name,
|
||||
const_cast<char *>(config->default_string)));
|
||||
lineEdit->setText(current_mac.toUpper());
|
||||
{
|
||||
// QHBoxLayout for the line edit widget and the generate button
|
||||
const auto hboxLayout = new QHBoxLayout();
|
||||
const auto generateButton = new QPushButton(tr("Generate"));
|
||||
const auto lineEdit = new QLineEdit;
|
||||
// Allow the line edit to expand and fill available space
|
||||
lineEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred);
|
||||
lineEdit->setInputMask("HH:HH:HH;0");
|
||||
lineEdit->setObjectName(config->name);
|
||||
// Display the current or generated MAC in uppercase
|
||||
// When stored it will be converted to lowercase
|
||||
if (config_get_mac(device_context->name, config->name,
|
||||
config->default_int)
|
||||
& 0xFF000000) {
|
||||
lineEdit->setText(QString::asprintf("%02X:%02X:%02X", random_generate(),
|
||||
random_generate(), random_generate()));
|
||||
} else {
|
||||
auto current_mac = QString(config_get_string(device_context->name, config->name,
|
||||
const_cast<char *>(config->default_string)));
|
||||
lineEdit->setText(current_mac.toUpper());
|
||||
}
|
||||
// Action for the generate button
|
||||
connect(generateButton, &QPushButton::clicked, [lineEdit] {
|
||||
lineEdit->setText(QString::asprintf("%02X:%02X:%02X", random_generate(),
|
||||
random_generate(), random_generate()));
|
||||
});
|
||||
hboxLayout->addWidget(lineEdit);
|
||||
hboxLayout->addWidget(generateButton);
|
||||
this->ui->formLayout->addRow(tr(config->description), hboxLayout);
|
||||
break;
|
||||
}
|
||||
// Action for the generate button
|
||||
connect(generateButton, &QPushButton::clicked, [lineEdit] {
|
||||
lineEdit->setText(QString::asprintf("%02X:%02X:%02X", random_generate(),
|
||||
random_generate(), random_generate()));
|
||||
});
|
||||
hboxLayout->addWidget(lineEdit);
|
||||
hboxLayout->addWidget(generateButton);
|
||||
this->ui->formLayout->addRow(tr(config->description), hboxLayout);
|
||||
break;
|
||||
}
|
||||
}
|
||||
++config;
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ public:
|
||||
|
||||
private:
|
||||
Ui::DeviceConfig *ui;
|
||||
void ProcessConfig(void *dc, const void *c, bool is_dep);
|
||||
void ProcessConfig(void *dc, const void *c, bool is_dep);
|
||||
};
|
||||
|
||||
#endif // QT_DEVICECONFIG_HPP
|
||||
|
||||
@@ -23,8 +23,7 @@ extern "C" {
|
||||
#include <86box/plat.h>
|
||||
}
|
||||
|
||||
Downloader::
|
||||
Downloader(const DownloadLocation downloadLocation, QObject *parent)
|
||||
Downloader::Downloader(const DownloadLocation downloadLocation, QObject *parent)
|
||||
: QObject(parent)
|
||||
, file(nullptr)
|
||||
, reply(nullptr)
|
||||
@@ -51,7 +50,9 @@ Downloader(const DownloadLocation downloadLocation, QObject *parent)
|
||||
|
||||
Downloader::~Downloader() { delete file; }
|
||||
|
||||
void Downloader::download(const QUrl &url, const QString &filepath, const QVariant &varData) {
|
||||
void
|
||||
Downloader::download(const QUrl &url, const QString &filepath, const QVariant &varData)
|
||||
{
|
||||
|
||||
variantData = varData;
|
||||
// temporary until I get the plat stuff fixed
|
||||
@@ -62,7 +63,7 @@ void Downloader::download(const QUrl &url, const QString &filepath, const QVaria
|
||||
const auto final_path = downloadDirectory.filePath(filepath);
|
||||
|
||||
file = new QFile(final_path);
|
||||
if(!file->open(QIODevice::WriteOnly)) {
|
||||
if (!file->open(QIODevice::WriteOnly)) {
|
||||
qWarning() << "Unable to open file " << final_path;
|
||||
return;
|
||||
}
|
||||
@@ -70,7 +71,7 @@ void Downloader::download(const QUrl &url, const QString &filepath, const QVaria
|
||||
const auto nam = new QNetworkAccessManager(this);
|
||||
// Create the network request and execute
|
||||
const auto request = QNetworkRequest(url);
|
||||
reply = nam->get(request);
|
||||
reply = nam->get(request);
|
||||
// Connect to the finished signal
|
||||
connect(reply, &QNetworkReply::finished, this, &Downloader::onResult);
|
||||
}
|
||||
@@ -93,4 +94,3 @@ Downloader::onResult()
|
||||
qDebug() << Q_FUNC_INFO << "Downloaded complete: file written to " << file->fileName();
|
||||
emit downloadCompleted(file->fileName(), variantData);
|
||||
}
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
#include <QString>
|
||||
#include <QFile>
|
||||
|
||||
|
||||
class Downloader final : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
@@ -38,17 +37,17 @@ signals:
|
||||
// Signal emitted when the download is successful
|
||||
void downloadCompleted(QString filename, QVariant varData);
|
||||
// Signal emitted when an error occurs
|
||||
void errorOccurred(const QString&);
|
||||
void errorOccurred(const QString &);
|
||||
|
||||
private slots:
|
||||
void onResult();
|
||||
|
||||
private:
|
||||
QFile *file;
|
||||
QFile *file;
|
||||
QNetworkAccessManager nam;
|
||||
QNetworkReply *reply;
|
||||
QVariant variantData;
|
||||
QDir downloadDirectory;
|
||||
QNetworkReply *reply;
|
||||
QVariant variantData;
|
||||
QDir downloadDirectory;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
#include <QWindow>
|
||||
#include <QCoreApplication>
|
||||
|
||||
extern MainWindow* main_window;
|
||||
extern MainWindow *main_window;
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <ctype.h>
|
||||
#include <stdint.h>
|
||||
extern "C"
|
||||
{
|
||||
extern "C" {
|
||||
#include <86box/86box.h>
|
||||
#include <86box/ini.h>
|
||||
#include <86box/config.h>
|
||||
@@ -19,25 +18,32 @@ extern "C"
|
||||
#include <86box/path.h>
|
||||
#include <86box/plat.h>
|
||||
|
||||
extern void startblit();
|
||||
extern void endblit();
|
||||
extern void startblit();
|
||||
extern void endblit();
|
||||
extern ssize_t local_getline(char **buf, size_t *bufsiz, FILE *fp);
|
||||
extern char* trim(char* str);
|
||||
extern char *trim(char *str);
|
||||
}
|
||||
|
||||
#define safe_strncpy(a, b, n) \
|
||||
do { \
|
||||
strncpy((a), (b), (n)-1); \
|
||||
(a)[(n)-1] = 0; \
|
||||
} while (0)
|
||||
#define safe_strncpy(a, b, n) \
|
||||
do { \
|
||||
strncpy((a), (b), (n) - 1); \
|
||||
(a)[(n) - 1] = 0; \
|
||||
} while (0)
|
||||
|
||||
static inline void *
|
||||
wx_config_load(const char *path)
|
||||
{
|
||||
ini_t ini = ini_read(path);
|
||||
if (ini)
|
||||
ini_strip_quotes(ini);
|
||||
return (void *) ini;
|
||||
}
|
||||
|
||||
|
||||
static inline void *wx_config_load(const char *path) { ini_t ini = ini_read(path); if (ini) ini_strip_quotes(ini); return (void*)ini; }
|
||||
|
||||
static inline int wx_config_get_string(void *config, const char *name, char *dst, int size, const char *defVal) {
|
||||
int res = ini_has_entry(ini_find_or_create_section((ini_t)config, ""), name);
|
||||
char* str = ini_get_string((ini_t)config, "", name, (char*)defVal);
|
||||
static inline int
|
||||
wx_config_get_string(void *config, const char *name, char *dst, int size, const char *defVal)
|
||||
{
|
||||
int res = ini_has_entry(ini_find_or_create_section((ini_t) config, ""), name);
|
||||
char *str = ini_get_string((ini_t) config, "", name, (char *) defVal);
|
||||
if (size == 0)
|
||||
return res;
|
||||
if (str != NULL)
|
||||
@@ -47,40 +53,56 @@ static inline int wx_config_get_string(void *config, const char *name, char *dst
|
||||
return res;
|
||||
}
|
||||
|
||||
static inline int wx_config_get_int(void *config, const char *name, int *dst, int defVal) {
|
||||
int res = ini_has_entry(ini_find_or_create_section((ini_t)config, ""), name);
|
||||
*dst = ini_get_int((ini_t)config, "", name, defVal);
|
||||
static inline int
|
||||
wx_config_get_int(void *config, const char *name, int *dst, int defVal)
|
||||
{
|
||||
int res = ini_has_entry(ini_find_or_create_section((ini_t) config, ""), name);
|
||||
*dst = ini_get_int((ini_t) config, "", name, defVal);
|
||||
return res;
|
||||
}
|
||||
|
||||
static inline int wx_config_get_float(void *config, const char *name, float *dst, float defVal) {
|
||||
int res = ini_has_entry(ini_find_or_create_section((ini_t)config, ""), name);
|
||||
*dst = (float)ini_get_double((ini_t)config, "", name, defVal);
|
||||
static inline int
|
||||
wx_config_get_float(void *config, const char *name, float *dst, float defVal)
|
||||
{
|
||||
int res = ini_has_entry(ini_find_or_create_section((ini_t) config, ""), name);
|
||||
*dst = (float) ini_get_double((ini_t) config, "", name, defVal);
|
||||
return res;
|
||||
}
|
||||
|
||||
static inline int wx_config_get_bool(void *config, const char *name, int *dst, int defVal) {
|
||||
int res = ini_has_entry(ini_find_or_create_section((ini_t)config, ""), name);
|
||||
*dst = !!ini_get_int((ini_t)config, "", name, defVal);
|
||||
static inline int
|
||||
wx_config_get_bool(void *config, const char *name, int *dst, int defVal)
|
||||
{
|
||||
int res = ini_has_entry(ini_find_or_create_section((ini_t) config, ""), name);
|
||||
*dst = !!ini_get_int((ini_t) config, "", name, defVal);
|
||||
return res;
|
||||
}
|
||||
|
||||
static inline int wx_config_has_entry(void *config, const char *name) { return ini_has_entry(ini_find_or_create_section((ini_t)config, ""), name); }
|
||||
static inline void wx_config_free(void *config) { ini_close(config); };
|
||||
static inline int
|
||||
wx_config_has_entry(void *config, const char *name)
|
||||
{
|
||||
return ini_has_entry(ini_find_or_create_section((ini_t) config, ""), name);
|
||||
}
|
||||
static inline void
|
||||
wx_config_free(void *config)
|
||||
{
|
||||
ini_close(config);
|
||||
};
|
||||
|
||||
static int endswith(const char *str, const char *ext) {
|
||||
const char *p;
|
||||
int elen = strlen(ext);
|
||||
int slen = strlen(str);
|
||||
if (slen >= elen) {
|
||||
p = &str[slen - elen];
|
||||
for (int i = 0; i < elen; ++i) {
|
||||
if (tolower(p[i]) != tolower(ext[i]))
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
static int
|
||||
endswith(const char *str, const char *ext)
|
||||
{
|
||||
const char *p;
|
||||
int elen = strlen(ext);
|
||||
int slen = strlen(str);
|
||||
if (slen >= elen) {
|
||||
p = &str[slen - elen];
|
||||
for (int i = 0; i < elen; ++i) {
|
||||
if (tolower(p[i]) != tolower(ext[i]))
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
@@ -101,326 +123,355 @@ glsl_detect_bom(const char *fn)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static char *load_file(const char *fn) {
|
||||
int bom = glsl_detect_bom(fn);
|
||||
FILE *fp = plat_fopen(fn, "rb");
|
||||
if (!fp)
|
||||
return 0;
|
||||
fseek(fp, 0, SEEK_END);
|
||||
long fsize = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
static char *
|
||||
load_file(const char *fn)
|
||||
{
|
||||
int bom = glsl_detect_bom(fn);
|
||||
FILE *fp = plat_fopen(fn, "rb");
|
||||
if (!fp)
|
||||
return 0;
|
||||
fseek(fp, 0, SEEK_END);
|
||||
long fsize = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
if (bom) {
|
||||
fsize -= 3;
|
||||
fseek(fp, 3, SEEK_SET);
|
||||
}
|
||||
|
||||
char *data = (char *) malloc(fsize + 1);
|
||||
|
||||
size_t read_bytes = fread(data, fsize, 1, fp);
|
||||
if (read_bytes != 1) {
|
||||
fclose(fp);
|
||||
free(data);
|
||||
return nullptr;
|
||||
} else {
|
||||
fclose(fp);
|
||||
|
||||
data[fsize] = 0;
|
||||
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
strip_lines(const char *program, const char *starts_with)
|
||||
{
|
||||
/* strip parameters */
|
||||
char *ptr = (char *) strstr(program, starts_with);
|
||||
while (ptr != nullptr) {
|
||||
while (*ptr != '\n' && *ptr != '\0')
|
||||
*ptr++ = ' ';
|
||||
ptr = (char *) strstr(program, starts_with);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
strip_parameters(const char *program)
|
||||
{
|
||||
/* strip parameters */
|
||||
strip_lines(program, "#pragma parameter");
|
||||
}
|
||||
|
||||
static void
|
||||
strip_defines(const char *program)
|
||||
{
|
||||
/* strip texture define */
|
||||
strip_lines(program, "#define texture");
|
||||
}
|
||||
|
||||
static int
|
||||
has_parameter(glslp_t *glsl, char *id)
|
||||
{
|
||||
for (int i = 0; i < glsl->num_parameters; ++i)
|
||||
if (!strcmp(glsl->parameters[i].id, id))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
get_parameters(glslp_t *glsl)
|
||||
{
|
||||
struct parameter p;
|
||||
for (int i = 0; i < glsl->num_shaders; ++i) {
|
||||
size_t size = 0;
|
||||
char *line = NULL;
|
||||
struct shader *shader = &glsl->shaders[i];
|
||||
int bom = glsl_detect_bom(shader->shader_fn);
|
||||
FILE *f = plat_fopen(shader->shader_fn, "rb");
|
||||
if (!f)
|
||||
return 0;
|
||||
if (bom) {
|
||||
fsize -= 3;
|
||||
fseek(fp, 3, SEEK_SET);
|
||||
fseek(f, 3, SEEK_SET);
|
||||
}
|
||||
while (local_getline(&line, &size, f) != -1 && glsl->num_parameters < MAX_PARAMETERS) {
|
||||
line[strcspn(line, "\r\n")] = '\0';
|
||||
trim(line);
|
||||
int num = sscanf(line, "#pragma parameter %63s \"%63[^\"]\" %f %f %f %f", p.id, p.description,
|
||||
&p.default_value, &p.min, &p.max, &p.step);
|
||||
if (num < 5)
|
||||
continue;
|
||||
p.id[63] = 0;
|
||||
p.description[63] = 0;
|
||||
|
||||
if (num == 5)
|
||||
p.step = 0.1f * (p.max - p.min);
|
||||
|
||||
p.value = p.default_value;
|
||||
|
||||
if (!has_parameter(glsl, p.id)) {
|
||||
memcpy(&glsl->parameters[glsl->num_parameters++], &p, sizeof(struct parameter));
|
||||
pclog("Read parameter: %s (%s) %f, %f -> %f (%f)\n", p.id, p.description, p.default_value, p.min,
|
||||
p.max, p.step);
|
||||
}
|
||||
}
|
||||
|
||||
char *data = (char*)malloc(fsize + 1);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
size_t read_bytes = fread(data, fsize, 1, fp);
|
||||
if (read_bytes != 1) {
|
||||
fclose(fp);
|
||||
free(data);
|
||||
return nullptr;
|
||||
} else {
|
||||
fclose(fp);
|
||||
return 1;
|
||||
}
|
||||
|
||||
data[fsize] = 0;
|
||||
|
||||
return data;
|
||||
static struct parameter *
|
||||
get_parameter(glslp_t *glslp, const char *id)
|
||||
{
|
||||
for (int i = 0; i < glslp->num_parameters; ++i) {
|
||||
if (!strcmp(glslp->parameters[i].id, id)) {
|
||||
return &glslp->parameters[i];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void strip_lines(const char *program, const char *starts_with) {
|
||||
/* strip parameters */
|
||||
char *ptr = (char *) strstr(program, starts_with);
|
||||
while (ptr != nullptr) {
|
||||
while (*ptr != '\n' && *ptr != '\0')
|
||||
*ptr++ = ' ';
|
||||
ptr = (char *) strstr(program, starts_with);
|
||||
}
|
||||
}
|
||||
|
||||
static void strip_parameters(const char *program) {
|
||||
/* strip parameters */
|
||||
strip_lines(program, "#pragma parameter");
|
||||
}
|
||||
|
||||
static void strip_defines(const char *program) {
|
||||
/* strip texture define */
|
||||
strip_lines(program, "#define texture");
|
||||
}
|
||||
|
||||
static int has_parameter(glslp_t *glsl, char *id) {
|
||||
for (int i = 0; i < glsl->num_parameters; ++i)
|
||||
if (!strcmp(glsl->parameters[i].id, id))
|
||||
return 1;
|
||||
static glslp_t *
|
||||
glsl_parse(const char *f)
|
||||
{
|
||||
glslp_t *glslp = (glslp_t *) calloc(1, sizeof(glslp_t));
|
||||
glslp->num_shaders = 1;
|
||||
struct shader *shader = &glslp->shaders[0];
|
||||
strcpy(shader->shader_fn, f);
|
||||
shader->shader_program = load_file(f);
|
||||
if (!shader->shader_program) {
|
||||
QMessageBox::critical((QWidget *) qApp->findChild<QWindow *>(), QObject::tr("GLSL error"), QObject::tr("Could not load shader: %1").arg(shader->shader_fn));
|
||||
// wx_simple_messagebox("GLSL error", "Could not load shader %s\n", shader->shader_fn);
|
||||
glslp_free(glslp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int get_parameters(glslp_t *glsl) {
|
||||
struct parameter p;
|
||||
for (int i = 0; i < glsl->num_shaders; ++i) {
|
||||
size_t size = 0;
|
||||
char* line = NULL;
|
||||
struct shader *shader = &glsl->shaders[i];
|
||||
int bom = glsl_detect_bom(shader->shader_fn);
|
||||
FILE *f = plat_fopen(shader->shader_fn, "rb");
|
||||
if (!f)
|
||||
return 0;
|
||||
if (bom) {
|
||||
fseek(f, 3, SEEK_SET);
|
||||
}
|
||||
while (local_getline(&line, &size, f) != -1 && glsl->num_parameters < MAX_PARAMETERS) {
|
||||
line[strcspn(line, "\r\n")] = '\0';
|
||||
trim(line);
|
||||
int num = sscanf(line, "#pragma parameter %63s \"%63[^\"]\" %f %f %f %f", p.id, p.description,
|
||||
&p.default_value, &p.min, &p.max, &p.step);
|
||||
if (num < 5)
|
||||
continue;
|
||||
p.id[63] = 0;
|
||||
p.description[63] = 0;
|
||||
|
||||
if (num == 5)
|
||||
p.step = 0.1f * (p.max - p.min);
|
||||
|
||||
p.value = p.default_value;
|
||||
|
||||
if (!has_parameter(glsl, p.id)) {
|
||||
memcpy(&glsl->parameters[glsl->num_parameters++], &p, sizeof(struct parameter));
|
||||
pclog("Read parameter: %s (%s) %f, %f -> %f (%f)\n", p.id, p.description, p.default_value, p.min,
|
||||
p.max, p.step);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static struct parameter *get_parameter(glslp_t *glslp, const char *id) {
|
||||
for (int i = 0; i < glslp->num_parameters; ++i) {
|
||||
if (!strcmp(glslp->parameters[i].id, id)) {
|
||||
return &glslp->parameters[i];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static glslp_t *glsl_parse(const char *f) {
|
||||
glslp_t *glslp = (glslp_t*) calloc(1, sizeof(glslp_t));
|
||||
glslp->num_shaders = 1;
|
||||
struct shader *shader = &glslp->shaders[0];
|
||||
strcpy(shader->shader_fn, f);
|
||||
shader->shader_program = load_file(f);
|
||||
if (!shader->shader_program) {
|
||||
QMessageBox::critical((QWidget *) qApp->findChild<QWindow *>(), QObject::tr("GLSL error"), QObject::tr("Could not load shader: %1").arg(shader->shader_fn));
|
||||
//wx_simple_messagebox("GLSL error", "Could not load shader %s\n", shader->shader_fn);
|
||||
glslp_free(glslp);
|
||||
return 0;
|
||||
}
|
||||
strip_parameters(shader->shader_program);
|
||||
strip_defines(shader->shader_program);
|
||||
shader->scale_x = shader->scale_y = 1.0f;
|
||||
strcpy(shader->scale_type_x, "source");
|
||||
strcpy(shader->scale_type_y, "source");
|
||||
get_parameters(glslp);
|
||||
return glslp;
|
||||
}
|
||||
strip_parameters(shader->shader_program);
|
||||
strip_defines(shader->shader_program);
|
||||
shader->scale_x = shader->scale_y = 1.0f;
|
||||
strcpy(shader->scale_type_x, "source");
|
||||
strcpy(shader->scale_type_y, "source");
|
||||
get_parameters(glslp);
|
||||
return glslp;
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
||||
void get_glslp_name(const char *f, char *s, int size) { safe_strncpy(s, path_get_filename((char *)f), size); }
|
||||
|
||||
glslp_t *glslp_parse(const char *f) {
|
||||
int j;
|
||||
int len;
|
||||
int sublen;
|
||||
char s[2049], t[2049], z[2076];
|
||||
|
||||
memset(s, 0, sizeof(s));
|
||||
if (endswith(f, ".glsl"))
|
||||
return glsl_parse(f);
|
||||
|
||||
void *cfg = wx_config_load(f);
|
||||
|
||||
if (!cfg) {
|
||||
fprintf(stderr, "GLSLP Error: Could not load GLSLP-file %s\n", f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
glslp_t *glslp = (glslp_t*) calloc(1, sizeof(glslp_t));
|
||||
|
||||
get_glslp_name(f, glslp->name, sizeof(glslp->name));
|
||||
|
||||
wx_config_get_int(cfg, "shaders", &glslp->num_shaders, 0);
|
||||
|
||||
wx_config_get_bool(cfg, "filter_linear0", &glslp->input_filter_linear, -1);
|
||||
|
||||
for (int i = 0; i < glslp->num_shaders; ++i) {
|
||||
struct shader *shader = &glslp->shaders[i];
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "shader%d", i);
|
||||
if (!wx_config_get_string(cfg, s, t, sizeof(t), 0)) {
|
||||
/* shader doesn't exist, lets break here */
|
||||
glslp->num_shaders = i;
|
||||
break;
|
||||
}
|
||||
strcpy(s, f);
|
||||
*path_get_filename(s) = 0;
|
||||
|
||||
size_t max_len = sizeof(shader->shader_fn);
|
||||
size_t s_len = strlen(s);
|
||||
|
||||
if (s_len >= max_len) {
|
||||
// s alone fills or overflows the buffer, truncate and null-terminate
|
||||
size_t copy_len = max_len - 1 < s_len ? max_len - 1 : s_len;
|
||||
memcpy(shader->shader_fn, s, copy_len);
|
||||
shader->shader_fn[copy_len] = '\0';
|
||||
} else {
|
||||
// Copy s fully
|
||||
memcpy(shader->shader_fn, s, s_len);
|
||||
// Copy as much of t as fits after s
|
||||
size_t avail = max_len - 1 - s_len; // space left for t + null terminator
|
||||
// Copy as much of t as fits into the remaining space
|
||||
memcpy(shader->shader_fn + s_len, t, avail);
|
||||
// Null-terminate
|
||||
shader->shader_fn[s_len + avail] = '\0';
|
||||
}
|
||||
|
||||
shader->shader_program = load_file(shader->shader_fn);
|
||||
if (!shader->shader_program) {
|
||||
fprintf(stderr, "GLSLP Error: Could not load shader %s\n", shader->shader_fn);
|
||||
glslp_free(glslp);
|
||||
return 0;
|
||||
}
|
||||
strip_parameters(shader->shader_program);
|
||||
strip_defines(shader->shader_program);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "alias%d", i);
|
||||
wx_config_get_string(cfg, s, shader->alias, sizeof(shader->alias), 0);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "filter_linear%d", i + 1);
|
||||
wx_config_get_bool(cfg, s, &shader->filter_linear, 0);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "wrap_mode%d", i);
|
||||
wx_config_get_string(cfg, s, shader->wrap_mode, sizeof(shader->wrap_mode), 0);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "float_framebuffer%d", i);
|
||||
wx_config_get_bool(cfg, s, &shader->float_framebuffer, 0);
|
||||
snprintf(s, sizeof(s) - 1, "srgb_framebuffer%d", i);
|
||||
wx_config_get_bool(cfg, s, &shader->srgb_framebuffer, 0);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "mipmap_input%d", i);
|
||||
wx_config_get_bool(cfg, s, &shader->mipmap_input, 0);
|
||||
|
||||
strcpy(shader->scale_type_x, "source");
|
||||
snprintf(s, sizeof(s) - 1, "scale_type_x%d", i);
|
||||
wx_config_get_string(cfg, s, shader->scale_type_x, sizeof(shader->scale_type_x), 0);
|
||||
strcpy(shader->scale_type_y, "source");
|
||||
snprintf(s, sizeof(s) - 1, "scale_type_y%d", i);
|
||||
wx_config_get_string(cfg, s, shader->scale_type_y, sizeof(shader->scale_type_y), 0);
|
||||
snprintf(s, sizeof(s) - 1, "scale_type%d", i);
|
||||
if (wx_config_has_entry(cfg, s)) {
|
||||
wx_config_get_string(cfg, s, shader->scale_type_x, sizeof(shader->scale_type_x), 0);
|
||||
wx_config_get_string(cfg, s, shader->scale_type_y, sizeof(shader->scale_type_y), 0);
|
||||
}
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "scale_x%d", i);
|
||||
wx_config_get_float(cfg, s, &shader->scale_x, 1.0f);
|
||||
snprintf(s, sizeof(s) - 1, "scale_y%d", i);
|
||||
wx_config_get_float(cfg, s, &shader->scale_y, 1.0f);
|
||||
snprintf(s, sizeof(s) - 1, "scale%d", i);
|
||||
if (wx_config_has_entry(cfg, s)) {
|
||||
wx_config_get_float(cfg, s, &shader->scale_x, 1.0f);
|
||||
wx_config_get_float(cfg, s, &shader->scale_y, 1.0f);
|
||||
}
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "frame_count_mod%d", i);
|
||||
wx_config_get_int(cfg, s, &shader->frame_count_mod, 0);
|
||||
}
|
||||
|
||||
/* textures */
|
||||
glslp->num_textures = 0;
|
||||
wx_config_get_string(cfg, "textures", t, sizeof(t), 0);
|
||||
|
||||
len = strlen(t);
|
||||
j = 0;
|
||||
sublen = 0;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (t[i] == ';' || i == len - 1) {
|
||||
sublen = (i - j) + ((i == len - 1) ? 1 : 0) + 1;
|
||||
safe_strncpy(s, t + j, sublen);
|
||||
s[511 < sublen ? 511 : sublen] = 0;
|
||||
|
||||
if (s[strlen(s) - 1] == ';') s[strlen(s) - 1] = 0;
|
||||
|
||||
struct texture *tex = &glslp->textures[glslp->num_textures++];
|
||||
|
||||
strcpy(tex->name, s);
|
||||
wx_config_get_string(cfg, s, tex->path, sizeof(tex->path), 0);
|
||||
|
||||
snprintf(z, sizeof(z) - 1, "%s_linear", s);
|
||||
wx_config_get_bool(cfg, z, &tex->linear, 0);
|
||||
|
||||
snprintf(z, sizeof(z) - 1, "%s_mipmap", s);
|
||||
wx_config_get_bool(cfg, z, &tex->mipmap, 0);
|
||||
|
||||
snprintf(z, sizeof(z) - 1, "%s_wrap_mode", s);
|
||||
wx_config_get_string(cfg, z, tex->wrap_mode, sizeof(tex->wrap_mode), 0);
|
||||
|
||||
j = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* parameters */
|
||||
get_parameters(glslp);
|
||||
|
||||
wx_config_get_string(cfg, "parameters", t, sizeof(t), 0);
|
||||
|
||||
len = strlen(t);
|
||||
j = 0;
|
||||
sublen = 0;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (t[i] == ';' || i == len - 1) {
|
||||
sublen = (i - j) + ((i == len - 1) ? 1 : 0) + 1;
|
||||
safe_strncpy(s, t + j, sublen);
|
||||
s[511 < sublen ? 511 : sublen] = 0;
|
||||
|
||||
struct parameter *p = get_parameter(glslp, s);
|
||||
|
||||
if (p)
|
||||
wx_config_get_float(cfg, s, &p->default_value, 0);
|
||||
|
||||
j = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
wx_config_free(cfg);
|
||||
|
||||
return glslp;
|
||||
void
|
||||
get_glslp_name(const char *f, char *s, int size)
|
||||
{
|
||||
safe_strncpy(s, path_get_filename((char *) f), size);
|
||||
}
|
||||
|
||||
void glslp_free(glslp_t *p) {
|
||||
for (int i = 0; i < p->num_shaders; ++i)
|
||||
if (p->shaders[i].shader_program)
|
||||
free(p->shaders[i].shader_program);
|
||||
free(p);
|
||||
glslp_t *
|
||||
glslp_parse(const char *f)
|
||||
{
|
||||
int j;
|
||||
int len;
|
||||
int sublen;
|
||||
char s[2049], t[2049], z[2076];
|
||||
|
||||
memset(s, 0, sizeof(s));
|
||||
if (endswith(f, ".glsl"))
|
||||
return glsl_parse(f);
|
||||
|
||||
void *cfg = wx_config_load(f);
|
||||
|
||||
if (!cfg) {
|
||||
fprintf(stderr, "GLSLP Error: Could not load GLSLP-file %s\n", f);
|
||||
return 0;
|
||||
}
|
||||
|
||||
glslp_t *glslp = (glslp_t *) calloc(1, sizeof(glslp_t));
|
||||
|
||||
get_glslp_name(f, glslp->name, sizeof(glslp->name));
|
||||
|
||||
wx_config_get_int(cfg, "shaders", &glslp->num_shaders, 0);
|
||||
|
||||
wx_config_get_bool(cfg, "filter_linear0", &glslp->input_filter_linear, -1);
|
||||
|
||||
for (int i = 0; i < glslp->num_shaders; ++i) {
|
||||
struct shader *shader = &glslp->shaders[i];
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "shader%d", i);
|
||||
if (!wx_config_get_string(cfg, s, t, sizeof(t), 0)) {
|
||||
/* shader doesn't exist, lets break here */
|
||||
glslp->num_shaders = i;
|
||||
break;
|
||||
}
|
||||
strcpy(s, f);
|
||||
*path_get_filename(s) = 0;
|
||||
|
||||
size_t max_len = sizeof(shader->shader_fn);
|
||||
size_t s_len = strlen(s);
|
||||
|
||||
if (s_len >= max_len) {
|
||||
// s alone fills or overflows the buffer, truncate and null-terminate
|
||||
size_t copy_len = max_len - 1 < s_len ? max_len - 1 : s_len;
|
||||
memcpy(shader->shader_fn, s, copy_len);
|
||||
shader->shader_fn[copy_len] = '\0';
|
||||
} else {
|
||||
// Copy s fully
|
||||
memcpy(shader->shader_fn, s, s_len);
|
||||
// Copy as much of t as fits after s
|
||||
size_t avail = max_len - 1 - s_len; // space left for t + null terminator
|
||||
// Copy as much of t as fits into the remaining space
|
||||
memcpy(shader->shader_fn + s_len, t, avail);
|
||||
// Null-terminate
|
||||
shader->shader_fn[s_len + avail] = '\0';
|
||||
}
|
||||
|
||||
shader->shader_program = load_file(shader->shader_fn);
|
||||
if (!shader->shader_program) {
|
||||
fprintf(stderr, "GLSLP Error: Could not load shader %s\n", shader->shader_fn);
|
||||
glslp_free(glslp);
|
||||
return 0;
|
||||
}
|
||||
strip_parameters(shader->shader_program);
|
||||
strip_defines(shader->shader_program);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "alias%d", i);
|
||||
wx_config_get_string(cfg, s, shader->alias, sizeof(shader->alias), 0);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "filter_linear%d", i + 1);
|
||||
wx_config_get_bool(cfg, s, &shader->filter_linear, 0);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "wrap_mode%d", i);
|
||||
wx_config_get_string(cfg, s, shader->wrap_mode, sizeof(shader->wrap_mode), 0);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "float_framebuffer%d", i);
|
||||
wx_config_get_bool(cfg, s, &shader->float_framebuffer, 0);
|
||||
snprintf(s, sizeof(s) - 1, "srgb_framebuffer%d", i);
|
||||
wx_config_get_bool(cfg, s, &shader->srgb_framebuffer, 0);
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "mipmap_input%d", i);
|
||||
wx_config_get_bool(cfg, s, &shader->mipmap_input, 0);
|
||||
|
||||
strcpy(shader->scale_type_x, "source");
|
||||
snprintf(s, sizeof(s) - 1, "scale_type_x%d", i);
|
||||
wx_config_get_string(cfg, s, shader->scale_type_x, sizeof(shader->scale_type_x), 0);
|
||||
strcpy(shader->scale_type_y, "source");
|
||||
snprintf(s, sizeof(s) - 1, "scale_type_y%d", i);
|
||||
wx_config_get_string(cfg, s, shader->scale_type_y, sizeof(shader->scale_type_y), 0);
|
||||
snprintf(s, sizeof(s) - 1, "scale_type%d", i);
|
||||
if (wx_config_has_entry(cfg, s)) {
|
||||
wx_config_get_string(cfg, s, shader->scale_type_x, sizeof(shader->scale_type_x), 0);
|
||||
wx_config_get_string(cfg, s, shader->scale_type_y, sizeof(shader->scale_type_y), 0);
|
||||
}
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "scale_x%d", i);
|
||||
wx_config_get_float(cfg, s, &shader->scale_x, 1.0f);
|
||||
snprintf(s, sizeof(s) - 1, "scale_y%d", i);
|
||||
wx_config_get_float(cfg, s, &shader->scale_y, 1.0f);
|
||||
snprintf(s, sizeof(s) - 1, "scale%d", i);
|
||||
if (wx_config_has_entry(cfg, s)) {
|
||||
wx_config_get_float(cfg, s, &shader->scale_x, 1.0f);
|
||||
wx_config_get_float(cfg, s, &shader->scale_y, 1.0f);
|
||||
}
|
||||
|
||||
snprintf(s, sizeof(s) - 1, "frame_count_mod%d", i);
|
||||
wx_config_get_int(cfg, s, &shader->frame_count_mod, 0);
|
||||
}
|
||||
|
||||
/* textures */
|
||||
glslp->num_textures = 0;
|
||||
wx_config_get_string(cfg, "textures", t, sizeof(t), 0);
|
||||
|
||||
len = strlen(t);
|
||||
j = 0;
|
||||
sublen = 0;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (t[i] == ';' || i == len - 1) {
|
||||
sublen = (i - j) + ((i == len - 1) ? 1 : 0) + 1;
|
||||
safe_strncpy(s, t + j, sublen);
|
||||
s[511 < sublen ? 511 : sublen] = 0;
|
||||
|
||||
if (s[strlen(s) - 1] == ';')
|
||||
s[strlen(s) - 1] = 0;
|
||||
|
||||
struct texture *tex = &glslp->textures[glslp->num_textures++];
|
||||
|
||||
strcpy(tex->name, s);
|
||||
wx_config_get_string(cfg, s, tex->path, sizeof(tex->path), 0);
|
||||
|
||||
snprintf(z, sizeof(z) - 1, "%s_linear", s);
|
||||
wx_config_get_bool(cfg, z, &tex->linear, 0);
|
||||
|
||||
snprintf(z, sizeof(z) - 1, "%s_mipmap", s);
|
||||
wx_config_get_bool(cfg, z, &tex->mipmap, 0);
|
||||
|
||||
snprintf(z, sizeof(z) - 1, "%s_wrap_mode", s);
|
||||
wx_config_get_string(cfg, z, tex->wrap_mode, sizeof(tex->wrap_mode), 0);
|
||||
|
||||
j = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* parameters */
|
||||
get_parameters(glslp);
|
||||
|
||||
wx_config_get_string(cfg, "parameters", t, sizeof(t), 0);
|
||||
|
||||
len = strlen(t);
|
||||
j = 0;
|
||||
sublen = 0;
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (t[i] == ';' || i == len - 1) {
|
||||
sublen = (i - j) + ((i == len - 1) ? 1 : 0) + 1;
|
||||
safe_strncpy(s, t + j, sublen);
|
||||
s[511 < sublen ? 511 : sublen] = 0;
|
||||
|
||||
struct parameter *p = get_parameter(glslp, s);
|
||||
|
||||
if (p)
|
||||
wx_config_get_float(cfg, s, &p->default_value, 0);
|
||||
|
||||
j = i + 1;
|
||||
}
|
||||
}
|
||||
|
||||
wx_config_free(cfg);
|
||||
|
||||
return glslp;
|
||||
}
|
||||
|
||||
void glslp_read_shader_config(glslp_t *shader) {
|
||||
char s[512];
|
||||
void
|
||||
glslp_free(glslp_t *p)
|
||||
{
|
||||
for (int i = 0; i < p->num_shaders; ++i)
|
||||
if (p->shaders[i].shader_program)
|
||||
free(p->shaders[i].shader_program);
|
||||
free(p);
|
||||
}
|
||||
|
||||
void
|
||||
glslp_read_shader_config(glslp_t *shader)
|
||||
{
|
||||
char s[512];
|
||||
char *name = shader->name;
|
||||
snprintf(s, sizeof(s) -1, "GL3 Shaders - %s", name);
|
||||
snprintf(s, sizeof(s) - 1, "GL3 Shaders - %s", name);
|
||||
for (int i = 0; i < shader->num_parameters; ++i) {
|
||||
struct parameter *param = &shader->parameters[i];
|
||||
param->value = config_get_double(s, param->id, param->default_value);
|
||||
param->value = config_get_double(s, param->id, param->default_value);
|
||||
}
|
||||
}
|
||||
|
||||
void glslp_write_shader_config(glslp_t *shader) {
|
||||
char s[512];
|
||||
void
|
||||
glslp_write_shader_config(glslp_t *shader)
|
||||
{
|
||||
char s[512];
|
||||
char *name = shader->name;
|
||||
|
||||
startblit();
|
||||
@@ -431,5 +482,4 @@ void glslp_write_shader_config(glslp_t *shader) {
|
||||
}
|
||||
endblit();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
extern "C" {
|
||||
#ifdef __unix__
|
||||
#include <unistd.h>
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
#include <86box/86box.h>
|
||||
#include <86box/hdd.h>
|
||||
@@ -75,7 +75,7 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent)
|
||||
for (int i = 0; i < 127; i++) {
|
||||
uint64_t size = ((uint64_t) hdd_table[i][0]) * hdd_table[i][1] * hdd_table[i][2];
|
||||
uint32_t size_mb = size >> 11LL;
|
||||
QString text = tr("%1 MB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]);
|
||||
QString text = tr("%1 MB (CHS: %2, %3, %4)").arg(size_mb).arg(hdd_table[i][0]).arg(hdd_table[i][1]).arg(hdd_table[i][2]);
|
||||
Models::AddEntry(model, text, i);
|
||||
}
|
||||
Models::AddEntry(model, tr("Custom..."), 127);
|
||||
@@ -85,11 +85,11 @@ HarddiskDialog::HarddiskDialog(bool existing, QWidget *parent)
|
||||
ui->buttonBox->button(QDialogButtonBox::Ok)->setEnabled(false);
|
||||
|
||||
filters = QStringList({ tr("Raw image") % util::DlgFilter({ "img" }, true),
|
||||
tr("HDI image") % util::DlgFilter({ "hdi" }, true),
|
||||
tr("HDX image") % util::DlgFilter({ "hdx" }, true),
|
||||
tr("Fixed-size VHD") % util::DlgFilter({ "vhd" }, true),
|
||||
tr("Dynamic-size VHD") % util::DlgFilter({ "vhd" }, true),
|
||||
tr("Differencing VHD") % util::DlgFilter({ "vhd" }, true) });
|
||||
tr("HDI image") % util::DlgFilter({ "hdi" }, true),
|
||||
tr("HDX image") % util::DlgFilter({ "hdx" }, true),
|
||||
tr("Fixed-size VHD") % util::DlgFilter({ "vhd" }, true),
|
||||
tr("Dynamic-size VHD") % util::DlgFilter({ "vhd" }, true),
|
||||
tr("Differencing VHD") % util::DlgFilter({ "vhd" }, true) });
|
||||
|
||||
if (existing) {
|
||||
ui->fileField->setFilter(tr("Hard disk images") % util::DlgFilter({ "hd?", "im?", "vhd" }) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||
@@ -317,7 +317,6 @@ create_drive_vhd_diff(const QString &fileName, const QString &parentFileName, in
|
||||
_86box_geometry.spt = vhd_geometry.spt;
|
||||
}
|
||||
|
||||
|
||||
mvhd_close(vhd);
|
||||
}
|
||||
|
||||
@@ -414,7 +413,7 @@ HarddiskDialog::onCreateNewFile()
|
||||
file.close();
|
||||
|
||||
_86BoxGeom _86box_geometry {};
|
||||
int block_size = ui->comboBoxBlockSize->currentIndex() == 0 ? MVHD_BLOCK_LARGE : MVHD_BLOCK_SMALL;
|
||||
int block_size = ui->comboBoxBlockSize->currentIndex() == 0 ? MVHD_BLOCK_LARGE : MVHD_BLOCK_SMALL;
|
||||
switch (img_format) {
|
||||
case IMG_FMT_VHD_FIXED:
|
||||
{
|
||||
@@ -568,7 +567,7 @@ HarddiskDialog::onExistingFileSelected(const QString &fileName, bool precheck)
|
||||
if (!file.open(QIODevice::ReadOnly)) {
|
||||
// No message box during precheck (performed when the file input loses focus and this function is called)
|
||||
// If precheck is false, the file has been chosen from a file dialog and the alert should display.
|
||||
if(!precheck) {
|
||||
if (!precheck) {
|
||||
QMessageBox::critical(this, tr("Unable to read file"), tr("Make sure the file exists and is readable."));
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -123,10 +123,10 @@ Harddrives::populateBusChannels(QAbstractItemModel *model, int bus, SettingsBusT
|
||||
{
|
||||
model->removeRows(0, model->rowCount());
|
||||
|
||||
int busRows = 0;
|
||||
int shifter = 1;
|
||||
int orer = 1;
|
||||
int subChannelWidth = 1;
|
||||
int busRows = 0;
|
||||
int shifter = 1;
|
||||
int orer = 1;
|
||||
int subChannelWidth = 1;
|
||||
QList<int> busesToCheck;
|
||||
QList<int> channelsInUse;
|
||||
switch (bus) {
|
||||
@@ -160,15 +160,15 @@ Harddrives::populateBusChannels(QAbstractItemModel *model, int bus, SettingsBusT
|
||||
busesToCheck.append(HDD_BUS_SCSI);
|
||||
break;
|
||||
case CDROM_BUS_MKE:
|
||||
shifter = 2;
|
||||
orer = 3;
|
||||
busRows = 4;
|
||||
shifter = 2;
|
||||
orer = 3;
|
||||
busRows = 4;
|
||||
busesToCheck.append(CDROM_BUS_MKE);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if(sbt != nullptr && !busesToCheck.empty()) {
|
||||
if (sbt != nullptr && !busesToCheck.empty()) {
|
||||
for (auto const &checkBus : busesToCheck) {
|
||||
channelsInUse.append(sbt->busChannelsInUse(checkBus));
|
||||
}
|
||||
@@ -179,9 +179,9 @@ Harddrives::populateBusChannels(QAbstractItemModel *model, int bus, SettingsBusT
|
||||
auto idx = model->index(i, 0);
|
||||
model->setData(idx, QString("%1:%2").arg(i >> shifter).arg(i & orer, subChannelWidth, 10, QChar('0')));
|
||||
model->setData(idx, ((i >> shifter) << shifter) | (i & orer), Qt::UserRole);
|
||||
const auto *channelModel = qobject_cast<QStandardItemModel*>(model);
|
||||
auto *channelItem = channelModel->item(i);
|
||||
if(channelItem) {
|
||||
const auto *channelModel = qobject_cast<QStandardItemModel *>(model);
|
||||
auto *channelItem = channelModel->item(i);
|
||||
if (channelItem) {
|
||||
channelItem->setEnabled(!channelsInUse.contains(i));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ getIconWithIndicator(const QIcon &icon, const QSize &size, QIcon::Mode iconMode,
|
||||
if (indicator == None)
|
||||
return iconPixmap;
|
||||
|
||||
auto painter = QPainter(&iconPixmap);
|
||||
auto painter = QPainter(&iconPixmap);
|
||||
auto indicatorPixmap = getIndicatorIcon((indicator == ReadWriteActive || indicator == WriteProtectedActive) ? Active : indicator).pixmap(size);
|
||||
|
||||
if (indicator == WriteProtectedBrowse)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef QT_ICONINDICATORS_HPP
|
||||
# define QT_ICONINDICATORS_HPP
|
||||
#define QT_ICONINDICATORS_HPP
|
||||
|
||||
#include <QPixmap>
|
||||
#include <QIcon>
|
||||
|
||||
@@ -52,7 +52,7 @@ extern "C" {
|
||||
# include <sys/sysmacros.h>
|
||||
#endif
|
||||
#ifdef Q_OS_WINDOWS
|
||||
#include <windows.h>
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
KeyBinder::KeyBinder(QWidget *parent)
|
||||
@@ -60,10 +60,10 @@ KeyBinder::KeyBinder(QWidget *parent)
|
||||
, ui(new Ui::KeyBinder)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
singleKeySequenceEdit *seq = new singleKeySequenceEdit();
|
||||
ui->formLayout->addRow(seq);
|
||||
seq->setObjectName("keySequence");
|
||||
this->setTabOrder(seq, ui->buttonBox);
|
||||
singleKeySequenceEdit *seq = new singleKeySequenceEdit();
|
||||
ui->formLayout->addRow(seq);
|
||||
seq->setObjectName("keySequence");
|
||||
this->setTabOrder(seq, ui->buttonBox);
|
||||
}
|
||||
|
||||
KeyBinder::~KeyBinder()
|
||||
@@ -72,29 +72,31 @@ KeyBinder::~KeyBinder()
|
||||
}
|
||||
|
||||
void
|
||||
KeyBinder::showEvent( QShowEvent* event ) {
|
||||
QWidget::showEvent( event );
|
||||
this->findChild<QKeySequenceEdit*>()->setFocus();
|
||||
}
|
||||
|
||||
bool KeyBinder::eventFilter(QObject *obj, QEvent *event)
|
||||
KeyBinder::showEvent(QShowEvent *event)
|
||||
{
|
||||
return QObject::eventFilter(obj, event);
|
||||
QWidget::showEvent(event);
|
||||
this->findChild<QKeySequenceEdit *>()->setFocus();
|
||||
}
|
||||
|
||||
bool
|
||||
KeyBinder::eventFilter(QObject *obj, QEvent *event)
|
||||
{
|
||||
return QObject::eventFilter(obj, event);
|
||||
}
|
||||
|
||||
QKeySequence
|
||||
KeyBinder::BindKey(QWidget* widget, QString CurValue)
|
||||
KeyBinder::BindKey(QWidget *widget, QString CurValue)
|
||||
{
|
||||
KeyBinder kb(widget);
|
||||
kb.setWindowTitle(tr("Bind Key"));
|
||||
KeyBinder kb(widget);
|
||||
kb.setWindowTitle(tr("Bind Key"));
|
||||
kb.setFixedSize(kb.minimumSizeHint());
|
||||
kb.findChild<QKeySequenceEdit*>()->setKeySequence(QKeySequence::fromString(CurValue, QKeySequence::NativeText));
|
||||
kb.setEnabled(true);
|
||||
|
||||
kb.findChild<QKeySequenceEdit *>()->setKeySequence(QKeySequence::fromString(CurValue, QKeySequence::NativeText));
|
||||
kb.setEnabled(true);
|
||||
|
||||
if (kb.exec() == QDialog::Accepted) {
|
||||
QKeySequenceEdit *seq = kb.findChild<QKeySequenceEdit*>();
|
||||
return (seq->keySequence());
|
||||
QKeySequenceEdit *seq = kb.findChild<QKeySequenceEdit *>();
|
||||
return (seq->keySequence());
|
||||
} else {
|
||||
return (false);
|
||||
}
|
||||
return (false);
|
||||
}
|
||||
}
|
||||
@@ -22,12 +22,12 @@ public:
|
||||
explicit KeyBinder(QWidget *parent = nullptr);
|
||||
~KeyBinder() override;
|
||||
|
||||
static QKeySequence BindKey(QWidget* widget, QString CurValue);
|
||||
static QKeySequence BindKey(QWidget *widget, QString CurValue);
|
||||
|
||||
private:
|
||||
Ui::KeyBinder *ui;
|
||||
bool eventFilter(QObject *obj, QEvent *event) override;
|
||||
void showEvent( QShowEvent* event ) override;
|
||||
bool eventFilter(QObject *obj, QEvent *event) override;
|
||||
void showEvent(QShowEvent *event) override;
|
||||
};
|
||||
|
||||
#endif // QT_KeyBinder_HPP
|
||||
|
||||
@@ -109,9 +109,9 @@ struct Pixmaps {
|
||||
|
||||
struct StateActive {
|
||||
std::unique_ptr<QLabel> label;
|
||||
PixmapSetActive *pixmaps = nullptr;
|
||||
bool active = false;
|
||||
bool write_active = false;
|
||||
PixmapSetActive *pixmaps = nullptr;
|
||||
bool active = false;
|
||||
bool write_active = false;
|
||||
|
||||
void setActive(bool b)
|
||||
{
|
||||
@@ -164,11 +164,11 @@ struct StateEmpty {
|
||||
};
|
||||
struct StateEmptyActive {
|
||||
std::unique_ptr<QLabel> label;
|
||||
PixmapSetEmptyActive *pixmaps = nullptr;
|
||||
bool empty = false;
|
||||
bool active = false;
|
||||
bool write_active = false;
|
||||
bool wp = false;
|
||||
PixmapSetEmptyActive *pixmaps = nullptr;
|
||||
bool empty = false;
|
||||
bool active = false;
|
||||
bool write_active = false;
|
||||
bool wp = false;
|
||||
|
||||
void setActive(bool b)
|
||||
{
|
||||
@@ -222,7 +222,7 @@ struct StateEmptyActive {
|
||||
}
|
||||
};
|
||||
|
||||
static QSize pixmap_size(16, 16);
|
||||
static QSize pixmap_size(16, 16);
|
||||
|
||||
void
|
||||
PixmapSetEmpty::load(const QIcon &icon)
|
||||
@@ -236,8 +236,8 @@ PixmapSetActive::load(const QIcon &icon)
|
||||
{
|
||||
normal = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, None);
|
||||
active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, Active);
|
||||
|
||||
write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteActive);
|
||||
|
||||
write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, WriteActive);
|
||||
read_write_active = getIconWithIndicator(icon, pixmap_size, QIcon::Normal, ReadWriteActive);
|
||||
}
|
||||
|
||||
@@ -326,7 +326,7 @@ MachineStatus::MachineStatus(QObject *parent)
|
||||
: QObject(parent)
|
||||
, refreshTimer(new QTimer(this))
|
||||
{
|
||||
d = std::make_unique<MachineStatus::States>(this);
|
||||
d = std::make_unique<MachineStatus::States>(this);
|
||||
soundMenu = nullptr;
|
||||
connect(refreshTimer, &QTimer::timeout, this, &MachineStatus::refreshIcons);
|
||||
refreshTimer->start(75);
|
||||
@@ -335,7 +335,7 @@ MachineStatus::MachineStatus(QObject *parent)
|
||||
MachineStatus::~MachineStatus() = default;
|
||||
|
||||
void
|
||||
MachineStatus::setSoundMenu(QMenu* menu)
|
||||
MachineStatus::setSoundMenu(QMenu *menu)
|
||||
{
|
||||
soundMenu = menu;
|
||||
}
|
||||
@@ -768,7 +768,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_MFM && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong) hdd[i].hpc * (qulonglong) hdd[i].spt * (qulonglong) hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_MFM].label->setToolTip(tooltip);
|
||||
@@ -784,7 +784,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_ESDI && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong) hdd[i].hpc * (qulonglong) hdd[i].spt * (qulonglong) hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_ESDI].label->setToolTip(tooltip);
|
||||
@@ -800,7 +800,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_XTA && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong) hdd[i].hpc * (qulonglong) hdd[i].spt * (qulonglong) hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_XTA].label->setToolTip(tooltip);
|
||||
@@ -819,7 +819,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_IDE && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong) hdd[i].hpc * (qulonglong) hdd[i].spt * (qulonglong) hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_IDE].label->setToolTip(tooltip);
|
||||
@@ -835,7 +835,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_ATAPI && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 1), QString::number(hdd[i].channel & 1), QString::number((((qulonglong) hdd[i].hpc * (qulonglong) hdd[i].spt * (qulonglong) hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_ATAPI].label->setToolTip(tooltip);
|
||||
@@ -855,7 +855,7 @@ MachineStatus::refresh(QStatusBar *sbar)
|
||||
tooltip.append("\n");
|
||||
for (int i = 0; i < HDD_NUM; i++) {
|
||||
if (hdd[i].bus_type == HDD_BUS_SCSI && hdd[i].fn[0] != 0) {
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 4), QString::asprintf("%02d", hdd[i].channel & 15), QString::number((((qulonglong)hdd[i].hpc * (qulonglong)hdd[i].spt * (qulonglong)hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
tooltip.append(QString("\n%5:%6: %1 (C:H:S = %2:%3:%4, %7 %8)").arg(QString::fromUtf8(hdd[i].fn), QString::number(hdd[i].tracks), QString::number(hdd[i].hpc), QString::number(hdd[i].spt), QString::number(hdd[i].channel >> 4), QString::asprintf("%02d", hdd[i].channel & 15), QString::number((((qulonglong) hdd[i].hpc * (qulonglong) hdd[i].spt * (qulonglong) hdd[i].tracks) * 512ull) / 1048576ull), tr("MB")));
|
||||
}
|
||||
}
|
||||
d->hdds[HDD_BUS_SCSI].label->setToolTip(tooltip);
|
||||
|
||||
@@ -78,7 +78,7 @@ public:
|
||||
|
||||
QString getMessage();
|
||||
void clearActivity();
|
||||
void setSoundMenu(QMenu* menu);
|
||||
void setSoundMenu(QMenu *menu);
|
||||
public slots:
|
||||
void refresh(QStatusBar *sbar);
|
||||
void message(const QString &msg);
|
||||
|
||||
@@ -50,14 +50,14 @@ extern "C" {
|
||||
#include <86box/ui.h>
|
||||
#include <86box/video.h>
|
||||
#ifdef DISCORD
|
||||
# include <86box/discord.h>
|
||||
# include <86box/discord.h>
|
||||
#endif
|
||||
#include <86box/gdbstub.h>
|
||||
#include <86box/version.h>
|
||||
#include <86box/renderdefs.h>
|
||||
#ifdef Q_OS_LINUX
|
||||
#define GAMEMODE_AUTO
|
||||
#include "../unix/gamemode/gamemode_client.h"
|
||||
# define GAMEMODE_AUTO
|
||||
# include "../unix/gamemode/gamemode_client.h"
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ extern "C" {
|
||||
#include "cpu.h"
|
||||
#include <86box/timer.h>
|
||||
#include <86box/nvr.h>
|
||||
extern int qt_nvr_save(void);
|
||||
extern int qt_nvr_save(void);
|
||||
extern void exit_pause(void);
|
||||
|
||||
bool cpu_thread_running = false;
|
||||
@@ -210,19 +210,19 @@ win_keyboard_handle(uint32_t scancode, int up, int e0, int e1)
|
||||
static LRESULT CALLBACK
|
||||
emu_LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
LPKBDLLHOOKSTRUCT lpKdhs = (LPKBDLLHOOKSTRUCT) lParam;
|
||||
LPKBDLLHOOKSTRUCT lpKdhs = (LPKBDLLHOOKSTRUCT) lParam;
|
||||
/* Checks if CTRL was pressed. */
|
||||
BOOL bCtrlDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);
|
||||
BOOL is_over_window = (GetForegroundWindow() == ((HWND) main_window->winId()));
|
||||
BOOL ret = TRUE;
|
||||
BOOL bCtrlDown = GetAsyncKeyState(VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);
|
||||
BOOL is_over_window = (GetForegroundWindow() == ((HWND) main_window->winId()));
|
||||
BOOL ret = TRUE;
|
||||
|
||||
static int last = 0;
|
||||
static int last = 0;
|
||||
|
||||
if (show_second_monitors) for (int monitor_index = 1; monitor_index < MONITORS_NUM; monitor_index++) {
|
||||
const auto &secondaryRenderer = main_window->renderers[monitor_index];
|
||||
is_over_window = is_over_window || ((secondaryRenderer != nullptr) &&
|
||||
(GetForegroundWindow() == ((HWND) secondaryRenderer->winId())));
|
||||
}
|
||||
if (show_second_monitors)
|
||||
for (int monitor_index = 1; monitor_index < MONITORS_NUM; monitor_index++) {
|
||||
const auto &secondaryRenderer = main_window->renderers[monitor_index];
|
||||
is_over_window = is_over_window || ((secondaryRenderer != nullptr) && (GetForegroundWindow() == ((HWND) secondaryRenderer->winId())));
|
||||
}
|
||||
|
||||
bool skip = ((nCode < 0) || (nCode != HC_ACTION) || !is_over_window || (kbd_req_capture && !mouse_capture));
|
||||
|
||||
@@ -235,179 +235,173 @@ emu_LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||
Only a handful of keys can be handled via Virtual Key
|
||||
detection; rest can't be reliably detected. */
|
||||
DWORD vkCode = lpKdhs->vkCode;
|
||||
bool up = !!(lpKdhs->flags & LLKHF_UP);
|
||||
bool up = !!(lpKdhs->flags & LLKHF_UP);
|
||||
|
||||
if (inhibit_multimedia_keys
|
||||
&& (lpKdhs->vkCode == VK_MEDIA_PLAY_PAUSE
|
||||
|| lpKdhs->vkCode == VK_MEDIA_NEXT_TRACK
|
||||
|| lpKdhs->vkCode == VK_MEDIA_PREV_TRACK
|
||||
|| lpKdhs->vkCode == VK_VOLUME_DOWN
|
||||
|| lpKdhs->vkCode == VK_VOLUME_UP
|
||||
|| lpKdhs->vkCode == VK_VOLUME_MUTE
|
||||
|| lpKdhs->vkCode == VK_MEDIA_STOP
|
||||
|| lpKdhs->vkCode == VK_LAUNCH_MEDIA_SELECT
|
||||
|| lpKdhs->vkCode == VK_LAUNCH_MAIL
|
||||
|| lpKdhs->vkCode == VK_LAUNCH_APP1
|
||||
|| lpKdhs->vkCode == VK_LAUNCH_APP2
|
||||
|| lpKdhs->vkCode == VK_HELP
|
||||
|| lpKdhs->vkCode == VK_BROWSER_BACK
|
||||
|| lpKdhs->vkCode == VK_BROWSER_FORWARD
|
||||
|| lpKdhs->vkCode == VK_BROWSER_FAVORITES
|
||||
|| lpKdhs->vkCode == VK_BROWSER_HOME
|
||||
|| lpKdhs->vkCode == VK_BROWSER_REFRESH
|
||||
|| lpKdhs->vkCode == VK_BROWSER_SEARCH
|
||||
|| lpKdhs->vkCode == VK_BROWSER_STOP))
|
||||
if (inhibit_multimedia_keys &&
|
||||
(lpKdhs->vkCode == VK_MEDIA_PLAY_PAUSE ||
|
||||
lpKdhs->vkCode == VK_MEDIA_NEXT_TRACK ||
|
||||
lpKdhs->vkCode == VK_MEDIA_PREV_TRACK ||
|
||||
lpKdhs->vkCode == VK_VOLUME_DOWN ||
|
||||
lpKdhs->vkCode == VK_VOLUME_UP ||
|
||||
lpKdhs->vkCode == VK_VOLUME_MUTE ||
|
||||
lpKdhs->vkCode == VK_MEDIA_STOP ||
|
||||
lpKdhs->vkCode == VK_LAUNCH_MEDIA_SELECT ||
|
||||
lpKdhs->vkCode == VK_LAUNCH_MAIL ||
|
||||
lpKdhs->vkCode == VK_LAUNCH_APP1 ||
|
||||
lpKdhs->vkCode == VK_LAUNCH_APP2 ||
|
||||
lpKdhs->vkCode == VK_HELP ||
|
||||
lpKdhs->vkCode == VK_BROWSER_BACK ||
|
||||
lpKdhs->vkCode == VK_BROWSER_FORWARD ||
|
||||
lpKdhs->vkCode == VK_BROWSER_FAVORITES ||
|
||||
lpKdhs->vkCode == VK_BROWSER_HOME ||
|
||||
lpKdhs->vkCode == VK_BROWSER_REFRESH ||
|
||||
lpKdhs->vkCode == VK_BROWSER_SEARCH ||
|
||||
lpKdhs->vkCode == VK_BROWSER_STOP))
|
||||
ret = TRUE;
|
||||
else
|
||||
ret = CallNextHookEx(NULL, nCode, wParam, lParam);
|
||||
|
||||
switch (vkCode)
|
||||
{
|
||||
switch (vkCode) {
|
||||
case VK_MEDIA_PLAY_PAUSE:
|
||||
{
|
||||
win_keyboard_handle(0x22, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x22, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_MEDIA_STOP:
|
||||
{
|
||||
win_keyboard_handle(0x24, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x24, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_VOLUME_UP:
|
||||
{
|
||||
win_keyboard_handle(0x30, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x30, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_VOLUME_DOWN:
|
||||
{
|
||||
win_keyboard_handle(0x2E, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x2E, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_VOLUME_MUTE:
|
||||
{
|
||||
win_keyboard_handle(0x20, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x20, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_MEDIA_NEXT_TRACK:
|
||||
{
|
||||
win_keyboard_handle(0x19, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x19, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_MEDIA_PREV_TRACK:
|
||||
{
|
||||
win_keyboard_handle(0x10, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x10, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_LAUNCH_MEDIA_SELECT:
|
||||
{
|
||||
win_keyboard_handle(0x6D, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x6D, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_LAUNCH_MAIL:
|
||||
{
|
||||
win_keyboard_handle(0x6C, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x6C, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_LAUNCH_APP1:
|
||||
{
|
||||
win_keyboard_handle(0x6B, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x6B, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_LAUNCH_APP2:
|
||||
{
|
||||
win_keyboard_handle(0x21, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x21, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_BROWSER_BACK:
|
||||
{
|
||||
win_keyboard_handle(0x6A, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x6A, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_BROWSER_FORWARD:
|
||||
{
|
||||
win_keyboard_handle(0x69, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x69, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_BROWSER_STOP:
|
||||
{
|
||||
win_keyboard_handle(0x68, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x68, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_BROWSER_HOME:
|
||||
{
|
||||
win_keyboard_handle(0x32, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x32, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_BROWSER_SEARCH:
|
||||
{
|
||||
win_keyboard_handle(0x65, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x65, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_BROWSER_REFRESH:
|
||||
{
|
||||
win_keyboard_handle(0x67, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x67, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_BROWSER_FAVORITES:
|
||||
{
|
||||
win_keyboard_handle(0x66, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x66, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
case VK_HELP:
|
||||
{
|
||||
win_keyboard_handle(0x3b, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
{
|
||||
win_keyboard_handle(0x3b, up, 1, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
else if ((lpKdhs->scanCode == 0x01) && (lpKdhs->flags & LLKHF_ALTDOWN) &&
|
||||
!(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
} else if ((lpKdhs->scanCode == 0x01) && (lpKdhs->flags & LLKHF_ALTDOWN) && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
ret = TRUE;
|
||||
else if ((lpKdhs->scanCode == 0x01) && bCtrlDown && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
ret = TRUE;
|
||||
else if ((lpKdhs->scanCode == 0x0f) && (lpKdhs->flags & LLKHF_ALTDOWN) &&
|
||||
!(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
else if ((lpKdhs->scanCode == 0x0f) && (lpKdhs->flags & LLKHF_ALTDOWN) && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
ret = TRUE;
|
||||
else if ((lpKdhs->scanCode == 0x0f) && bCtrlDown && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
ret = TRUE;
|
||||
else if ((lpKdhs->scanCode == 0x39) && (lpKdhs->flags & LLKHF_ALTDOWN) &&
|
||||
!(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
else if ((lpKdhs->scanCode == 0x39) && (lpKdhs->flags & LLKHF_ALTDOWN) && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
ret = TRUE;
|
||||
else if ((lpKdhs->scanCode == 0x3e) && (lpKdhs->flags & LLKHF_ALTDOWN) &&
|
||||
!(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
else if ((lpKdhs->scanCode == 0x3e) && (lpKdhs->flags & LLKHF_ALTDOWN) && !(lpKdhs->flags & (LLKHF_UP | LLKHF_EXTENDED)))
|
||||
ret = TRUE;
|
||||
else if ((lpKdhs->scanCode >= 0x5b) && (lpKdhs->scanCode <= 0x5d) && (lpKdhs->flags & LLKHF_EXTENDED))
|
||||
ret = TRUE;
|
||||
else if (inhibit_multimedia_keys
|
||||
&& (lpKdhs->vkCode == VK_MEDIA_PLAY_PAUSE
|
||||
|| lpKdhs->vkCode == VK_MEDIA_NEXT_TRACK
|
||||
|| lpKdhs->vkCode == VK_MEDIA_PREV_TRACK
|
||||
|| lpKdhs->vkCode == VK_VOLUME_DOWN
|
||||
|| lpKdhs->vkCode == VK_VOLUME_UP
|
||||
|| lpKdhs->vkCode == VK_VOLUME_MUTE
|
||||
|| lpKdhs->vkCode == VK_MEDIA_STOP
|
||||
|| lpKdhs->vkCode == VK_LAUNCH_MEDIA_SELECT
|
||||
|| lpKdhs->vkCode == VK_LAUNCH_MAIL
|
||||
|| lpKdhs->vkCode == VK_LAUNCH_APP1
|
||||
|| lpKdhs->vkCode == VK_LAUNCH_APP2
|
||||
|| lpKdhs->vkCode == VK_HELP
|
||||
|| lpKdhs->vkCode == VK_BROWSER_BACK
|
||||
|| lpKdhs->vkCode == VK_BROWSER_FORWARD
|
||||
|| lpKdhs->vkCode == VK_BROWSER_FAVORITES
|
||||
|| lpKdhs->vkCode == VK_BROWSER_HOME
|
||||
|| lpKdhs->vkCode == VK_BROWSER_REFRESH
|
||||
|| lpKdhs->vkCode == VK_BROWSER_SEARCH
|
||||
|| lpKdhs->vkCode == VK_BROWSER_STOP))
|
||||
else if (inhibit_multimedia_keys &&
|
||||
(lpKdhs->vkCode == VK_MEDIA_PLAY_PAUSE ||
|
||||
lpKdhs->vkCode == VK_MEDIA_NEXT_TRACK ||
|
||||
lpKdhs->vkCode == VK_MEDIA_PREV_TRACK ||
|
||||
lpKdhs->vkCode == VK_VOLUME_DOWN ||
|
||||
lpKdhs->vkCode == VK_VOLUME_UP ||
|
||||
lpKdhs->vkCode == VK_VOLUME_MUTE ||
|
||||
lpKdhs->vkCode == VK_MEDIA_STOP ||
|
||||
lpKdhs->vkCode == VK_LAUNCH_MEDIA_SELECT ||
|
||||
lpKdhs->vkCode == VK_LAUNCH_MAIL ||
|
||||
lpKdhs->vkCode == VK_LAUNCH_APP1 ||
|
||||
lpKdhs->vkCode == VK_LAUNCH_APP2 ||
|
||||
lpKdhs->vkCode == VK_HELP ||
|
||||
lpKdhs->vkCode == VK_BROWSER_BACK ||
|
||||
lpKdhs->vkCode == VK_BROWSER_FORWARD ||
|
||||
lpKdhs->vkCode == VK_BROWSER_FAVORITES ||
|
||||
lpKdhs->vkCode == VK_BROWSER_HOME ||
|
||||
lpKdhs->vkCode == VK_BROWSER_REFRESH ||
|
||||
lpKdhs->vkCode == VK_BROWSER_SEARCH ||
|
||||
lpKdhs->vkCode == VK_BROWSER_STOP))
|
||||
ret = TRUE;
|
||||
else
|
||||
ret = CallNextHookEx(NULL, nCode, wParam, lParam);
|
||||
|
||||
if (lpKdhs->scanCode == 0x00000045) {
|
||||
if ((lpKdhs->flags & LLKHF_EXTENDED) && (lpKdhs->vkCode == 0x00000090)) {
|
||||
/* NumLock. */
|
||||
lpKdhs->flags &= ~LLKHF_EXTENDED;
|
||||
/* NumLock. */
|
||||
lpKdhs->flags &= ~LLKHF_EXTENDED;
|
||||
} else if (!(lpKdhs->flags & LLKHF_EXTENDED) && (lpKdhs->vkCode == 0x00000013)) {
|
||||
/* Pause - send E1 1D. */
|
||||
win_keyboard_handle(0xe1, 0, 0, 0);
|
||||
@@ -433,21 +427,21 @@ emu_LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_WINDOWS
|
||||
static HHOOK llhook = NULL;
|
||||
static HHOOK llhook = NULL;
|
||||
#endif
|
||||
|
||||
void
|
||||
main_thread_fn()
|
||||
{
|
||||
int frames;
|
||||
int frames;
|
||||
|
||||
QThread::currentThread()->setPriority(QThread::HighestPriority);
|
||||
plat_set_thread_name(nullptr, "main_thread");
|
||||
framecountx = 0;
|
||||
// title_update = 1;
|
||||
uint64_t old_time = elapsed_timer.elapsed();
|
||||
int drawits = frames = 0;
|
||||
is_cpu_thread = 1;
|
||||
int drawits = frames = 0;
|
||||
is_cpu_thread = 1;
|
||||
while (!is_quit && cpu_thread_run) {
|
||||
/* See if it is time to run a frame of code. */
|
||||
const uint64_t new_time = elapsed_timer.elapsed();
|
||||
@@ -505,8 +499,8 @@ main_thread_fn()
|
||||
}
|
||||
|
||||
cpu_thread_running = false;
|
||||
is_quit = 1;
|
||||
for (uint8_t i = 1; i < GFXCARD_MAX; i ++) {
|
||||
is_quit = 1;
|
||||
for (uint8_t i = 1; i < GFXCARD_MAX; i++) {
|
||||
if (gfxcard[i]) {
|
||||
ui_deinit_monitor(i);
|
||||
plat_delay_ms(500);
|
||||
@@ -520,7 +514,7 @@ static std::thread *main_thread;
|
||||
QTimer discordupdate;
|
||||
|
||||
#ifdef Q_OS_WINDOWS
|
||||
WindowsDarkModeFilter* vmm_dark_mode_filter = nullptr;
|
||||
WindowsDarkModeFilter *vmm_dark_mode_filter = nullptr;
|
||||
#endif
|
||||
|
||||
int
|
||||
@@ -530,9 +524,9 @@ main(int argc, char *argv[])
|
||||
bool wasDarkTheme = false;
|
||||
/* Check if Windows supports UTF-8 */
|
||||
if (GetACP() == CP_UTF8)
|
||||
acp_utf8 = 1;
|
||||
acp_utf8 = 1;
|
||||
else
|
||||
acp_utf8 = 0;
|
||||
acp_utf8 = 0;
|
||||
#endif
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
|
||||
QApplication::setAttribute(Qt::AA_DisableHighDpiScaling, false);
|
||||
@@ -568,9 +562,9 @@ main(int argc, char *argv[])
|
||||
if (!util::isWindowsLightTheme()) {
|
||||
QFile f(":qdarkstyle/dark/darkstyle.qss");
|
||||
|
||||
if (!f.exists()) {
|
||||
if (!f.exists()) {
|
||||
printf("Unable to set stylesheet, file not found\n");
|
||||
} else {
|
||||
} else {
|
||||
f.open(QFile::ReadOnly | QFile::Text);
|
||||
QTextStream ts(&f);
|
||||
qApp->setStyleSheet(ts.readAll());
|
||||
@@ -685,7 +679,7 @@ main(int argc, char *argv[])
|
||||
pc_init_modules();
|
||||
|
||||
// UUID / copy / move detection
|
||||
if(!util::compareUuid()) {
|
||||
if (!util::compareUuid()) {
|
||||
QMessageBox movewarnbox;
|
||||
movewarnbox.setIcon(QMessageBox::Icon::Warning);
|
||||
movewarnbox.setText(QObject::tr("This machine might have been moved or copied."));
|
||||
@@ -721,7 +715,7 @@ main(int argc, char *argv[])
|
||||
warningbox.addButton(QObject::tr("Exit"), QMessageBox::RejectRole);
|
||||
warningbox.exec();
|
||||
if (warningbox.result() == QDialog::Accepted)
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -748,7 +742,7 @@ main(int argc, char *argv[])
|
||||
warningbox.addButton(QObject::tr("Exit"), QMessageBox::RejectRole);
|
||||
warningbox.exec();
|
||||
if (warningbox.result() == QDialog::Accepted)
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef DISCORD
|
||||
@@ -760,7 +754,7 @@ main(int argc, char *argv[])
|
||||
// https://learn.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timebeginperiod
|
||||
exit_pause();
|
||||
timeBeginPeriod(1);
|
||||
atexit([] () -> void { timeEndPeriod(1); });
|
||||
atexit([]() -> void { timeEndPeriod(1); });
|
||||
#endif
|
||||
|
||||
main_window = new MainWindow();
|
||||
@@ -772,13 +766,12 @@ main(int argc, char *argv[])
|
||||
#ifdef WAYLAND
|
||||
if (QApplication::platformName().contains("wayland")) {
|
||||
/* Force a sync. */
|
||||
(void)main_window->winId();
|
||||
(void) main_window->winId();
|
||||
QApplication::sync();
|
||||
extern void wl_keyboard_grab(QWindow *window);
|
||||
extern void wl_keyboard_grab(QWindow * window);
|
||||
wl_keyboard_grab(main_window->windowHandle());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
app.installEventFilter(main_window);
|
||||
|
||||
@@ -826,7 +819,7 @@ main(int argc, char *argv[])
|
||||
if (hook_enabled) {
|
||||
/* Yes, low-level hooks *DO* work with raw input, at least global ones. */
|
||||
llhook = SetWindowsHookEx(WH_KEYBOARD_LL, emu_LowLevelKeyboardProc, NULL, 0);
|
||||
atexit([] () -> void {
|
||||
atexit([]() -> void {
|
||||
if (llhook)
|
||||
UnhookWindowsHookEx(llhook);
|
||||
});
|
||||
@@ -920,10 +913,10 @@ main(int argc, char *argv[])
|
||||
plat_pause(0);
|
||||
|
||||
cpu_thread_running = true;
|
||||
main_thread = new std::thread(main_thread_fn);
|
||||
main_thread = new std::thread(main_thread_fn);
|
||||
});
|
||||
|
||||
const auto ret = app.exec();
|
||||
const auto ret = app.exec();
|
||||
cpu_thread_run = 0;
|
||||
main_thread->join();
|
||||
pc_close(nullptr);
|
||||
|
||||
@@ -40,7 +40,7 @@ extern "C" {
|
||||
#include <86box/plat.h>
|
||||
#include <86box/ui.h>
|
||||
#ifdef DISCORD
|
||||
# include <86box/discord.h>
|
||||
# include <86box/discord.h>
|
||||
#endif
|
||||
#include <86box/device.h>
|
||||
#include <86box/video.h>
|
||||
@@ -124,8 +124,8 @@ void qt_set_sequence_auto_mnemonic(bool b);
|
||||
#endif
|
||||
|
||||
#if defined Q_OS_UNIX && !defined Q_OS_HAIKU && !defined Q_OS_MACOS
|
||||
#include <qpa/qplatformwindow.h>
|
||||
#include "x11_util.h"
|
||||
# include <qpa/qplatformwindow.h>
|
||||
# include "x11_util.h"
|
||||
#endif
|
||||
|
||||
#ifdef Q_OS_MACOS
|
||||
@@ -143,7 +143,7 @@ namespace IOKit {
|
||||
# include "be_keyboard.hpp"
|
||||
|
||||
extern MainWindow *main_window;
|
||||
QShortcut *windowedShortcut;
|
||||
QShortcut *windowedShortcut;
|
||||
|
||||
filter_result
|
||||
keyb_filter(BMessage *message, BHandler **target, BMessageFilter *filter)
|
||||
@@ -191,8 +191,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
ui->stackedWidget->setMouseTracking(true);
|
||||
statusBar()->setVisible(!hide_status_bar);
|
||||
|
||||
auto hertz_label = new QLabel;
|
||||
QTimer* frameRateTimer = new QTimer(this);
|
||||
auto hertz_label = new QLabel;
|
||||
QTimer *frameRateTimer = new QTimer(this);
|
||||
frameRateTimer->setInterval(1000);
|
||||
frameRateTimer->setSingleShot(false);
|
||||
connect(frameRateTimer, &QTimer::timeout, [hertz_label] {
|
||||
@@ -205,14 +205,14 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
statusBar()->addPermanentWidget(hertz_label);
|
||||
frameRateTimer->start(1000);
|
||||
|
||||
num_icon = QIcon(":/settings/qt/icons/num_lock_on.ico");
|
||||
num_icon_off = QIcon(":/settings/qt/icons/num_lock_off.ico");
|
||||
scroll_icon = QIcon(":/settings/qt/icons/scroll_lock_on.ico");
|
||||
num_icon = QIcon(":/settings/qt/icons/num_lock_on.ico");
|
||||
num_icon_off = QIcon(":/settings/qt/icons/num_lock_off.ico");
|
||||
scroll_icon = QIcon(":/settings/qt/icons/scroll_lock_on.ico");
|
||||
scroll_icon_off = QIcon(":/settings/qt/icons/scroll_lock_off.ico");
|
||||
caps_icon = QIcon(":/settings/qt/icons/caps_lock_on.ico");
|
||||
caps_icon_off = QIcon(":/settings/qt/icons/caps_lock_off.ico");
|
||||
kana_icon = QIcon(":/settings/qt/icons/kana_lock_on.ico");
|
||||
kana_icon_off = QIcon(":/settings/qt/icons/kana_lock_off.ico");
|
||||
caps_icon = QIcon(":/settings/qt/icons/caps_lock_on.ico");
|
||||
caps_icon_off = QIcon(":/settings/qt/icons/caps_lock_off.ico");
|
||||
kana_icon = QIcon(":/settings/qt/icons/kana_lock_on.ico");
|
||||
kana_icon_off = QIcon(":/settings/qt/icons/kana_lock_off.ico");
|
||||
|
||||
num_label = new QLabel;
|
||||
num_label->setPixmap(num_icon_off.pixmap(QSize(16, 16)));
|
||||
@@ -234,10 +234,10 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
kana_label->setToolTip(QShortcut::tr("Kana Lock"));
|
||||
statusBar()->addPermanentWidget(kana_label);
|
||||
|
||||
QTimer* ledKeyboardTimer = new QTimer(this);
|
||||
QTimer *ledKeyboardTimer = new QTimer(this);
|
||||
ledKeyboardTimer->setTimerType(Qt::CoarseTimer);
|
||||
ledKeyboardTimer->setInterval(1);
|
||||
connect(ledKeyboardTimer, &QTimer::timeout, this, [this] () {
|
||||
connect(ledKeyboardTimer, &QTimer::timeout, this, [this]() {
|
||||
uint8_t caps, num, scroll, kana;
|
||||
keyboard_get_states(&caps, &num, &scroll, &kana);
|
||||
|
||||
@@ -246,12 +246,10 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
if (caps_label->isVisible())
|
||||
caps_label->setPixmap(caps ? this->caps_icon.pixmap(QSize(16, 16)) : this->caps_icon_off.pixmap(QSize(16, 16)));
|
||||
if (scroll_label->isVisible())
|
||||
scroll_label->setPixmap(scroll ? this->scroll_icon.pixmap(QSize(16, 16)) :
|
||||
this->scroll_icon_off.pixmap(QSize(16, 16)));
|
||||
scroll_label->setPixmap(scroll ? this->scroll_icon.pixmap(QSize(16, 16)) : this->scroll_icon_off.pixmap(QSize(16, 16)));
|
||||
|
||||
if (kana_label->isVisible())
|
||||
kana_label->setPixmap(kana ? this->kana_icon.pixmap(QSize(16, 16)) :
|
||||
this->kana_icon_off.pixmap(QSize(16, 16)));
|
||||
kana_label->setPixmap(kana ? this->kana_icon.pixmap(QSize(16, 16)) : this->kana_icon_off.pixmap(QSize(16, 16)));
|
||||
});
|
||||
ledKeyboardTimer->start();
|
||||
|
||||
@@ -285,10 +283,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
num_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD));
|
||||
scroll_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD));
|
||||
caps_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD));
|
||||
int ext_ax_kbd = machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD) &&
|
||||
(keyboard_type == KEYBOARD_TYPE_AX);
|
||||
int int_ax_kbd = machine_has_flags(machine, MACHINE_KEYBOARD_JIS) &&
|
||||
!machine_has_bus(machine, MACHINE_BUS_PS2_PORTS);
|
||||
int ext_ax_kbd = machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD) && (keyboard_type == KEYBOARD_TYPE_AX);
|
||||
int int_ax_kbd = machine_has_flags(machine, MACHINE_KEYBOARD_JIS) && !machine_has_bus(machine, MACHINE_BUS_PS2_PORTS);
|
||||
kana_label->setVisible(ext_ax_kbd || int_ax_kbd);
|
||||
while (QApplication::overrideCursor())
|
||||
QApplication::restoreOverrideCursor();
|
||||
@@ -300,7 +296,10 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
|
||||
bool enable_comp_option = false;
|
||||
for (int i = 0; i < MONITORS_NUM; i++) {
|
||||
if (monitors[i].mon_composite) { enable_comp_option = true; break; }
|
||||
if (monitors[i].mon_composite) {
|
||||
enable_comp_option = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ui->actionCGA_composite_settings->setEnabled(enable_comp_option);
|
||||
@@ -314,20 +313,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
return;
|
||||
}
|
||||
if (!hide_tool_bar)
|
||||
#ifdef _WIN32
|
||||
toolbar_label->setText(title);
|
||||
#else
|
||||
{
|
||||
/* get the percentage and mouse message, TODO: refactor ui_window_title() */
|
||||
auto parts = title.split(" - ");
|
||||
if (parts.size() >= 2) {
|
||||
if (parts.size() < 5)
|
||||
toolbar_label->setText(parts[1]);
|
||||
else
|
||||
toolbar_label->setText(QString("%1 - %2").arg(parts[1], parts.last()));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
});
|
||||
connect(this, &MainWindow::getTitleForNonQtThread, this, &MainWindow::getTitle_, Qt::BlockingQueuedConnection);
|
||||
|
||||
@@ -398,8 +384,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
if (!QApplication::platformName().contains("eglfs") && vid_resize != 1) {
|
||||
w = static_cast<int>(w / (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.));
|
||||
|
||||
const int modifiedHeight =
|
||||
static_cast<int>(h / (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.))
|
||||
const int modifiedHeight = static_cast<int>(h / (!dpi_scale ? util::screenOfWidget(this)->devicePixelRatio() : 1.))
|
||||
+ menuBar()->height()
|
||||
+ (statusBar()->height() * !hide_status_bar)
|
||||
+ (ui->toolBar->height() * !hide_tool_bar);
|
||||
@@ -576,17 +561,27 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
actGroup->addAction(ui->action_6x_2);
|
||||
actGroup->addAction(ui->action_7x_2);
|
||||
actGroup->addAction(ui->action_8x_2);
|
||||
connect(actGroup, &QActionGroup::triggered, this, [this](QAction* action) {
|
||||
if (action == ui->action_0_5x_2) video_gl_input_scale = 0.5;
|
||||
if (action == ui->action_1x_2) video_gl_input_scale = 1;
|
||||
if (action == ui->action1_5x_2) video_gl_input_scale = 1.5;
|
||||
if (action == ui->action_2x_2) video_gl_input_scale = 2;
|
||||
if (action == ui->action_3x_2) video_gl_input_scale = 3;
|
||||
if (action == ui->action_4x_2) video_gl_input_scale = 4;
|
||||
if (action == ui->action_5x_2) video_gl_input_scale = 5;
|
||||
if (action == ui->action_6x_2) video_gl_input_scale = 6;
|
||||
if (action == ui->action_7x_2) video_gl_input_scale = 7;
|
||||
if (action == ui->action_8x_2) video_gl_input_scale = 8;
|
||||
connect(actGroup, &QActionGroup::triggered, this, [this](QAction *action) {
|
||||
if (action == ui->action_0_5x_2)
|
||||
video_gl_input_scale = 0.5;
|
||||
if (action == ui->action_1x_2)
|
||||
video_gl_input_scale = 1;
|
||||
if (action == ui->action1_5x_2)
|
||||
video_gl_input_scale = 1.5;
|
||||
if (action == ui->action_2x_2)
|
||||
video_gl_input_scale = 2;
|
||||
if (action == ui->action_3x_2)
|
||||
video_gl_input_scale = 3;
|
||||
if (action == ui->action_4x_2)
|
||||
video_gl_input_scale = 4;
|
||||
if (action == ui->action_5x_2)
|
||||
video_gl_input_scale = 5;
|
||||
if (action == ui->action_6x_2)
|
||||
video_gl_input_scale = 6;
|
||||
if (action == ui->action_7x_2)
|
||||
video_gl_input_scale = 7;
|
||||
if (action == ui->action_8x_2)
|
||||
video_gl_input_scale = 8;
|
||||
});
|
||||
|
||||
switch (scale) {
|
||||
@@ -697,12 +692,17 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
actGroup->addAction(ui->action_Square_pixels_keep_ratio_gl);
|
||||
actGroup->addAction(ui->action_Integer_scale_gl);
|
||||
actGroup->addAction(ui->action4_3_Integer_scale_gl);
|
||||
connect(actGroup, &QActionGroup::triggered, this, [this](QAction* action) {
|
||||
if (action == ui->action_Full_screen_stretch_gl) video_gl_input_scale_mode = FULLSCR_SCALE_FULL;
|
||||
if (action == ui->action_4_3_gl) video_gl_input_scale_mode = FULLSCR_SCALE_43;
|
||||
if (action == ui->action_Square_pixels_keep_ratio_gl) video_gl_input_scale_mode = FULLSCR_SCALE_KEEPRATIO;
|
||||
if (action == ui->action_Integer_scale_gl) video_gl_input_scale_mode = FULLSCR_SCALE_INT;
|
||||
if (action == ui->action4_3_Integer_scale_gl) video_gl_input_scale_mode = FULLSCR_SCALE_INT43;
|
||||
connect(actGroup, &QActionGroup::triggered, this, [this](QAction *action) {
|
||||
if (action == ui->action_Full_screen_stretch_gl)
|
||||
video_gl_input_scale_mode = FULLSCR_SCALE_FULL;
|
||||
if (action == ui->action_4_3_gl)
|
||||
video_gl_input_scale_mode = FULLSCR_SCALE_43;
|
||||
if (action == ui->action_Square_pixels_keep_ratio_gl)
|
||||
video_gl_input_scale_mode = FULLSCR_SCALE_KEEPRATIO;
|
||||
if (action == ui->action_Integer_scale_gl)
|
||||
video_gl_input_scale_mode = FULLSCR_SCALE_INT;
|
||||
if (action == ui->action4_3_Integer_scale_gl)
|
||||
video_gl_input_scale_mode = FULLSCR_SCALE_INT43;
|
||||
});
|
||||
switch (video_grayscale) {
|
||||
default:
|
||||
@@ -770,7 +770,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
video_setblit(qt_blit);
|
||||
|
||||
if (start_in_fullscreen) {
|
||||
connect(ui->stackedWidget, &RendererStack::blitToRenderer, this, [this] () {
|
||||
connect(ui->stackedWidget, &RendererStack::blitToRenderer, this, [this]() {
|
||||
if (start_in_fullscreen) {
|
||||
QTimer::singleShot(100, ui->actionFullscreen, &QAction::trigger);
|
||||
start_in_fullscreen = 0;
|
||||
@@ -820,9 +820,9 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
setContextMenuPolicy(Qt::PreventContextMenu);
|
||||
/* Remove default Shift+F10 handler, which unfocuses keyboard input even with no context menu. */
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
connect(new QShortcut(QKeySequence(Qt::SHIFT | Qt::Key_F10), this), &QShortcut::activated, this, [](){});
|
||||
connect(new QShortcut(QKeySequence(Qt::SHIFT | Qt::Key_F10), this), &QShortcut::activated, this, []() {});
|
||||
#else
|
||||
connect(new QShortcut(QKeySequence(Qt::SHIFT + Qt::Key_F10), this), &QShortcut::activated, this, [](){});
|
||||
connect(new QShortcut(QKeySequence(Qt::SHIFT + Qt::Key_F10), this), &QShortcut::activated, this, []() {});
|
||||
#endif
|
||||
|
||||
connect(this, &MainWindow::initRendererMonitor, this, &MainWindow::initRendererMonitorSlot);
|
||||
@@ -880,18 +880,19 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
else
|
||||
# endif
|
||||
# ifdef WAYLAND
|
||||
if (QApplication::platformName().contains("wayland"))
|
||||
if (QApplication::platformName().contains("wayland"))
|
||||
xkbcommon_wl_init();
|
||||
else
|
||||
# endif
|
||||
{}
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined Q_OS_UNIX && !defined Q_OS_MACOS && !defined Q_OS_HAIKU
|
||||
if (QApplication::platformName().contains("xcb")) {
|
||||
QTimer::singleShot(0, this, [this] {
|
||||
auto whandle = windowHandle();
|
||||
if (! whandle) {
|
||||
if (!whandle) {
|
||||
qWarning() << "No window handle";
|
||||
} else {
|
||||
QPlatformWindow *window = whandle->handle();
|
||||
@@ -901,7 +902,7 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
}
|
||||
#endif
|
||||
|
||||
updateShortcuts();
|
||||
updateShortcuts();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -914,7 +915,7 @@ MainWindow::closeEvent(QCloseEvent *event)
|
||||
|
||||
if (confirm_exit && confirm_exit_cmdl && cpu_thread_run) {
|
||||
QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", tr("Are you sure you want to exit 86Box?"), QMessageBox::Yes | QMessageBox::No, this);
|
||||
auto chkbox = new QCheckBox(tr("Don't show this message again"));
|
||||
auto chkbox = new QCheckBox(tr("Don't show this message again"));
|
||||
questionbox.setCheckBox(chkbox);
|
||||
chkbox->setChecked(!confirm_exit);
|
||||
|
||||
@@ -967,57 +968,57 @@ MainWindow::closeEvent(QCloseEvent *event)
|
||||
event->accept();
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::updateShortcuts()
|
||||
void
|
||||
MainWindow::updateShortcuts()
|
||||
{
|
||||
/*
|
||||
Update menu shortcuts from accelerator table
|
||||
|
||||
Note that these only work in windowed mode. If you add any new shortcuts,
|
||||
you have to go duplicate them in MainWindow::eventFilter()
|
||||
*/
|
||||
|
||||
// First we need to wipe all existing accelerators, otherwise Qt will
|
||||
// run into conflicts with old ones.
|
||||
ui->actionTake_screenshot->setShortcut(QKeySequence());
|
||||
ui->actionCtrl_Alt_Del->setShortcut(QKeySequence());
|
||||
ui->actionCtrl_Alt_Esc->setShortcut(QKeySequence());
|
||||
ui->actionHard_Reset->setShortcut(QKeySequence());
|
||||
ui->actionPause->setShortcut(QKeySequence());
|
||||
ui->actionMute_Unmute->setShortcut(QKeySequence());
|
||||
|
||||
int accID;
|
||||
QKeySequence seq;
|
||||
|
||||
accID = FindAccelerator("screenshot");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionTake_screenshot->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("send_ctrl_alt_del");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionCtrl_Alt_Del->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("send_ctrl_alt_esc");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionCtrl_Alt_Esc->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("hard_reset");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionHard_Reset->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("fullscreen");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionFullscreen->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("pause");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionPause->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("mute");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionMute_Unmute->setShortcut(seq);
|
||||
/*
|
||||
Update menu shortcuts from accelerator table
|
||||
|
||||
Note that these only work in windowed mode. If you add any new shortcuts,
|
||||
you have to go duplicate them in MainWindow::eventFilter()
|
||||
*/
|
||||
|
||||
// First we need to wipe all existing accelerators, otherwise Qt will
|
||||
// run into conflicts with old ones.
|
||||
ui->actionTake_screenshot->setShortcut(QKeySequence());
|
||||
ui->actionCtrl_Alt_Del->setShortcut(QKeySequence());
|
||||
ui->actionCtrl_Alt_Esc->setShortcut(QKeySequence());
|
||||
ui->actionHard_Reset->setShortcut(QKeySequence());
|
||||
ui->actionPause->setShortcut(QKeySequence());
|
||||
ui->actionMute_Unmute->setShortcut(QKeySequence());
|
||||
|
||||
int accID;
|
||||
QKeySequence seq;
|
||||
|
||||
accID = FindAccelerator("screenshot");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionTake_screenshot->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("send_ctrl_alt_del");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionCtrl_Alt_Del->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("send_ctrl_alt_esc");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionCtrl_Alt_Esc->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("hard_reset");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionHard_Reset->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("fullscreen");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionFullscreen->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("pause");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionPause->setShortcut(seq);
|
||||
|
||||
accID = FindAccelerator("mute");
|
||||
seq = QKeySequence::fromString(acc_keys[accID].seq);
|
||||
ui->actionMute_Unmute->setShortcut(seq);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MainWindow::resizeEvent(QResizeEvent *event)
|
||||
{
|
||||
@@ -1031,30 +1032,32 @@ MainWindow::resizeEvent(QResizeEvent *event)
|
||||
int newY = pos().y();
|
||||
|
||||
if (((frameGeometry().x() + event->size().width() + 1) > util::screenOfWidget(this)->availableGeometry().right())) {
|
||||
//move(util::screenOfWidget(this)->availableGeometry().right() - size().width() - 1, pos().y());
|
||||
// move(util::screenOfWidget(this)->availableGeometry().right() - size().width() - 1, pos().y());
|
||||
newX = util::screenOfWidget(this)->availableGeometry().right() - frameGeometry().width() - 1;
|
||||
if (newX < 1) newX = 1;
|
||||
if (newX < 1)
|
||||
newX = 1;
|
||||
}
|
||||
|
||||
if (((frameGeometry().y() + event->size().height() + 1) > util::screenOfWidget(this)->availableGeometry().bottom())) {
|
||||
newY = util::screenOfWidget(this)->availableGeometry().bottom() - frameGeometry().height() - 1;
|
||||
if (newY < 1) newY = 1;
|
||||
if (newY < 1)
|
||||
newY = 1;
|
||||
}
|
||||
move(newX, newY);
|
||||
#endif
|
||||
#endif /*MOVE_WINDOW*/
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::initRendererMonitorSlot(int monitor_index)
|
||||
{
|
||||
auto &secondaryRenderer = this->renderers[monitor_index];
|
||||
secondaryRenderer = std::make_unique<RendererStack>(nullptr, monitor_index);
|
||||
secondaryRenderer = std::make_unique<RendererStack>(nullptr, monitor_index);
|
||||
if (secondaryRenderer) {
|
||||
connect(secondaryRenderer.get(), &RendererStack::rendererChanged, this, [this, monitor_index] {
|
||||
this->renderers[monitor_index]->show();
|
||||
});
|
||||
secondaryRenderer->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
|
||||
secondaryRenderer->setWindowTitle(QObject::tr("86Box Monitor #") + QString::number(monitor_index + 1));
|
||||
secondaryRenderer->setWindowTitle(QObject::tr("86Box Monitor #%1").arg(monitor_index + 1));
|
||||
secondaryRenderer->setContextMenuPolicy(Qt::PreventContextMenu);
|
||||
|
||||
for (int i = 0; i < this->actions().size(); i++) {
|
||||
@@ -1083,7 +1086,7 @@ MainWindow::initRendererMonitorSlot(int monitor_index)
|
||||
if (monitor_settings[monitor_index].mon_window_maximized) {
|
||||
if (renderers[monitor_index])
|
||||
renderers[monitor_index]->onResize(renderers[monitor_index]->width(),
|
||||
renderers[monitor_index]->height());
|
||||
renderers[monitor_index]->height());
|
||||
|
||||
device_force_redraw();
|
||||
}
|
||||
@@ -1258,7 +1261,7 @@ MainWindow::processKeyboardInput(bool down, uint32_t keycode)
|
||||
# ifdef EVDEV_KEYBOARD_HPP
|
||||
keycode = evdev_translate(keycode - 8);
|
||||
# else
|
||||
keycode = 0;
|
||||
keycode = 0;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@@ -1277,11 +1280,11 @@ MainWindow::processKeyboardInput(bool down, uint32_t keycode)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x80 ... 0xff: /* regular break codes */
|
||||
case 0x10b: /* Microsoft scroll up normal */
|
||||
case 0x80 ... 0xff: /* regular break codes */
|
||||
case 0x10b: /* Microsoft scroll up normal */
|
||||
case 0x180 ... 0x1ff: /* E0 break codes (including Microsoft scroll down normal) */
|
||||
/* This key uses a break code as make. Send it manually, only on press. */
|
||||
if (down && (mouse_capture || !kbd_req_capture || video_fullscreen)) {
|
||||
if (down && (mouse_capture || !kbd_req_capture || (video_fullscreen && !fullscreen_ui_visible))) {
|
||||
if (keycode & 0x100)
|
||||
keyboard_send(0xe0);
|
||||
keyboard_send(keycode & 0xff);
|
||||
@@ -1293,7 +1296,7 @@ MainWindow::processKeyboardInput(bool down, uint32_t keycode)
|
||||
keycode = 0x38; /* map to Left Alt */
|
||||
break;
|
||||
|
||||
case 0x137: /* Print Screen */
|
||||
case 0x137: /* Print Screen */
|
||||
if (keyboard_recv_ui(0x38) || keyboard_recv_ui(0x138)) { /* Alt+ */
|
||||
keycode = 0x54;
|
||||
} else if (down) {
|
||||
@@ -1304,7 +1307,7 @@ MainWindow::processKeyboardInput(bool down, uint32_t keycode)
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x145: /* Pause */
|
||||
case 0x145: /* Pause */
|
||||
if (keyboard_recv_ui(0x1d) || keyboard_recv_ui(0x11d)) { /* Ctrl+ */
|
||||
keycode = 0x146;
|
||||
} else {
|
||||
@@ -1322,15 +1325,15 @@ MainWindow::processKeyboardInput(bool down, uint32_t keycode)
|
||||
// that's followed up with "(really?)". It's the only way to distinguish
|
||||
// left and right modifiers with Qt 6 on macOS, so let's just roll with it.
|
||||
static std::unordered_map<uint32_t, uint16_t> mac_modifiers_to_xt = {
|
||||
{NX_DEVICELCTLKEYMASK, 0x1D },
|
||||
{ NX_DEVICELSHIFTKEYMASK, 0x2A },
|
||||
{ NX_DEVICERSHIFTKEYMASK, 0x36 },
|
||||
{ NX_DEVICELCMDKEYMASK, 0x15B},
|
||||
{ NX_DEVICERCMDKEYMASK, 0x15C},
|
||||
{ NX_DEVICELALTKEYMASK, 0x38 },
|
||||
{ NX_DEVICERALTKEYMASK, 0x138},
|
||||
{ NX_DEVICE_ALPHASHIFT_STATELESS_MASK, 0x3A },
|
||||
{ NX_DEVICERCTLKEYMASK, 0x11D},
|
||||
{ NX_DEVICELCTLKEYMASK, 0x1D },
|
||||
{ NX_DEVICELSHIFTKEYMASK, 0x2A },
|
||||
{ NX_DEVICERSHIFTKEYMASK, 0x36 },
|
||||
{ NX_DEVICELCMDKEYMASK, 0x15B },
|
||||
{ NX_DEVICERCMDKEYMASK, 0x15C },
|
||||
{ NX_DEVICELALTKEYMASK, 0x38 },
|
||||
{ NX_DEVICERALTKEYMASK, 0x138 },
|
||||
{ NX_DEVICE_ALPHASHIFT_STATELESS_MASK, 0x3A },
|
||||
{ NX_DEVICERCTLKEYMASK, 0x11D },
|
||||
};
|
||||
static bool mac_iso_swap = false;
|
||||
|
||||
@@ -1391,45 +1394,44 @@ MainWindow::processMacKeyboardInput(bool down, const QKeyEvent *event)
|
||||
- Romanian third level ANSI_Grave is unknown
|
||||
- Russian clusters <>, plusminus and paragraph into a four-level ANSI_Grave, with the aforementioned `~ on ISO_Section */
|
||||
auto key = event->key();
|
||||
if ((nvk == 0x32) && ( /* system reports ANSI_Grave for ISO_Section keys: */
|
||||
(key == Qt::Key_Less) || (key == Qt::Key_Greater) || /* Croatian, French, German, Icelandic, Italian, Norwegian, Portuguese, Spanish, Spanish Latin America, Turkish Q */
|
||||
(key == Qt::Key_Ugrave) || /* French Canadian */
|
||||
(key == Qt::Key_Icircumflex) || /* Romanian */
|
||||
(key == Qt::Key_Iacute) || /* Hungarian */
|
||||
(key == Qt::Key_BracketLeft) || (key == Qt::Key_BracketRight) || /* Russian upper two levels */
|
||||
(key == Qt::Key_W) /* Turkish F */
|
||||
))
|
||||
if ((nvk == 0x32) && ( /* system reports ANSI_Grave for ISO_Section keys: */
|
||||
(key == Qt::Key_Less) || (key == Qt::Key_Greater) || /* Croatian, French, German, Icelandic, Italian, Norwegian, Portuguese, Spanish, Spanish Latin America, Turkish Q */
|
||||
(key == Qt::Key_Ugrave) || /* French Canadian */
|
||||
(key == Qt::Key_Icircumflex) || /* Romanian */
|
||||
(key == Qt::Key_Iacute) || /* Hungarian */
|
||||
(key == Qt::Key_BracketLeft) || (key == Qt::Key_BracketRight) || /* Russian upper two levels */
|
||||
(key == Qt::Key_W) /* Turkish F */
|
||||
))
|
||||
mac_iso_swap = true;
|
||||
else if ((nvk == 0x0a) && ( /* system reports ISO_Section for ANSI_Grave keys: */
|
||||
(key == Qt::Key_paragraph) || (key == Qt::Key_plusminus) || /* Arabic, British, Bulgarian, Danish shifted, Dutch, Greek, Hebrew, Hungarian shifted, International English, Norwegian shifted, Portuguese, Russian lower two levels, Swiss unshifted, Swedish unshifted, Turkish F */
|
||||
(key == Qt::Key_At) || (key == Qt::Key_NumberSign) || /* Belgian, French */
|
||||
(key == Qt::Key_Apostrophe) || /* Brazilian unshifted */
|
||||
(key == Qt::Key_QuoteDbl) || /* Brazilian shifted, Turkish Q unshifted */
|
||||
(key == Qt::Key_QuoteLeft) || /* Croatian (right quote unknown) */
|
||||
(key == Qt::Key_Dollar) || /* Danish unshifted */
|
||||
(key == Qt::Key_AsciiCircum) || (key == 0x1ffffff) || /* German unshifted (0x1ffffff according to one tester), Polish unshifted */
|
||||
(key == Qt::Key_degree) || /* German shifted, Icelandic unshifted, Spanish Latin America shifted, Swiss shifted, Swedish shifted */
|
||||
(key == Qt::Key_0) || /* Hungarian unshifted */
|
||||
(key == Qt::Key_diaeresis) || /* Icelandic shifted */
|
||||
(key == Qt::Key_acute) || /* Norwegian unshifted */
|
||||
(key == Qt::Key_Asterisk) || /* Polish shifted */
|
||||
(key == Qt::Key_masculine) || (key == Qt::Key_ordfeminine) || /* Spanish (masculine unconfirmed) */
|
||||
(key == Qt::Key_Eacute) || /* Turkish Q shifted */
|
||||
(key == Qt::Key_Slash) /* French Canadian unshifted, Ukrainian shifted */
|
||||
))
|
||||
else if ((nvk == 0x0a) && ( /* system reports ISO_Section for ANSI_Grave keys: */
|
||||
(key == Qt::Key_paragraph) || (key == Qt::Key_plusminus) || /* Arabic, British, Bulgarian, Danish shifted, Dutch, Greek, Hebrew, Hungarian shifted, International English, Norwegian shifted, Portuguese, Russian lower two levels, Swiss unshifted, Swedish unshifted, Turkish F */
|
||||
(key == Qt::Key_At) || (key == Qt::Key_NumberSign) || /* Belgian, French */
|
||||
(key == Qt::Key_Apostrophe) || /* Brazilian unshifted */
|
||||
(key == Qt::Key_QuoteDbl) || /* Brazilian shifted, Turkish Q unshifted */
|
||||
(key == Qt::Key_QuoteLeft) || /* Croatian (right quote unknown) */
|
||||
(key == Qt::Key_Dollar) || /* Danish unshifted */
|
||||
(key == Qt::Key_AsciiCircum) || (key == 0x1ffffff) || /* German unshifted (0x1ffffff according to one tester), Polish unshifted */
|
||||
(key == Qt::Key_degree) || /* German shifted, Icelandic unshifted, Spanish Latin America shifted, Swiss shifted, Swedish shifted */
|
||||
(key == Qt::Key_0) || /* Hungarian unshifted */
|
||||
(key == Qt::Key_diaeresis) || /* Icelandic shifted */
|
||||
(key == Qt::Key_acute) || /* Norwegian unshifted */
|
||||
(key == Qt::Key_Asterisk) || /* Polish shifted */
|
||||
(key == Qt::Key_masculine) || (key == Qt::Key_ordfeminine) || /* Spanish (masculine unconfirmed) */
|
||||
(key == Qt::Key_Eacute) || /* Turkish Q shifted */
|
||||
(key == Qt::Key_Slash) /* French Canadian unshifted, Ukrainian shifted */
|
||||
))
|
||||
mac_iso_swap = true;
|
||||
#if 0
|
||||
# if 0
|
||||
if (down) {
|
||||
QMessageBox questionbox(QMessageBox::Icon::Information, QString("Mac key swap test"), QString("nativeVirtualKey 0x%1\nnativeScanCode 0x%2\nkey 0x%3\nmac_iso_swap %4").arg(nvk, 0, 16).arg(event->nativeScanCode(), 0, 16).arg(key, 0, 16).arg(mac_iso_swap ? "yes" : "no"), QMessageBox::Ok, this);
|
||||
questionbox.exec();
|
||||
}
|
||||
#endif
|
||||
# endif
|
||||
if (mac_iso_swap)
|
||||
nvk = (nvk == 0x0a) ? 0x32 : 0x0a;
|
||||
}
|
||||
// Special case for command + forward delete to send insert.
|
||||
if ((event->nativeModifiers() & NSEventModifierFlagCommand) &&
|
||||
((event->nativeVirtualKey() == nvk_Delete) || event->key() == Qt::Key_Delete)) {
|
||||
if ((event->nativeModifiers() & NSEventModifierFlagCommand) && ((event->nativeVirtualKey() == nvk_Delete) || event->key() == Qt::Key_Delete)) {
|
||||
nvk = nvk_Insert; // Qt::Key_Help according to event->key()
|
||||
}
|
||||
|
||||
@@ -1449,6 +1451,7 @@ MainWindow::on_actionFullscreen_triggered()
|
||||
if (!hide_tool_bar)
|
||||
ui->toolBar->show();
|
||||
video_fullscreen = 0;
|
||||
fullscreen_ui_visible = 0;
|
||||
if (vid_resize != 1) {
|
||||
emit resizeContents(vid_resize == 2 ? fixed_size_x : monitors[0].mon_scrnsz_x, vid_resize == 2 ? fixed_size_y : monitors[0].mon_scrnsz_y);
|
||||
}
|
||||
@@ -1461,7 +1464,7 @@ MainWindow::on_actionFullscreen_triggered()
|
||||
ui->stackedWidget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
|
||||
showFullScreen();
|
||||
}
|
||||
fs_on_signal = false;
|
||||
fs_on_signal = false;
|
||||
fs_off_signal = false;
|
||||
ui->stackedWidget->onResize(width(), height());
|
||||
}
|
||||
@@ -1482,85 +1485,75 @@ MainWindow::getTitle(wchar_t *title)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Helper to find an accelerator key and return it's sequence
|
||||
// TODO: Is there a more central place to put this?
|
||||
QKeySequence
|
||||
MainWindow::FindAcceleratorSeq(const char *name)
|
||||
{
|
||||
int accID = FindAccelerator(name);
|
||||
if(accID == -1)
|
||||
return false;
|
||||
|
||||
return(QKeySequence::fromString(acc_keys[accID].seq));
|
||||
int accID = FindAccelerator(name);
|
||||
if (accID == -1)
|
||||
return false;
|
||||
|
||||
return (QKeySequence::fromString(acc_keys[accID].seq));
|
||||
}
|
||||
|
||||
bool
|
||||
MainWindow::eventFilter(QObject *receiver, QEvent *event)
|
||||
{
|
||||
// Detect shortcuts when menubar is hidden
|
||||
// TODO: Could this be simplified by proxying the event and manually
|
||||
// shoving it into the menubar?
|
||||
if (event->type() == QEvent::KeyPress)
|
||||
{
|
||||
this->keyPressEvent((QKeyEvent *) event);
|
||||
// Detect shortcuts when menubar is hidden
|
||||
// TODO: Could this be simplified by proxying the event and manually
|
||||
// shoving it into the menubar?
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
this->keyPressEvent((QKeyEvent *) event);
|
||||
|
||||
// We check for mouse release even if we aren't fullscreen,
|
||||
// because it's not a menu accelerator.
|
||||
if (event->type() == QEvent::KeyPress)
|
||||
{
|
||||
QKeyEvent *ke = (QKeyEvent *) event;
|
||||
if ((QKeySequence)(ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("release_mouse") ||
|
||||
(QKeySequence)(ke->key() | ke->modifiers()) == FindAcceleratorSeq("release_mouse"))
|
||||
{
|
||||
plat_mouse_capture(0);
|
||||
}
|
||||
}
|
||||
// We check for mouse release even if we aren't fullscreen,
|
||||
// because it's not a menu accelerator.
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
QKeyEvent *ke = (QKeyEvent *) event;
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("release_mouse") || (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("release_mouse")) {
|
||||
plat_mouse_capture(0);
|
||||
}
|
||||
}
|
||||
|
||||
if (event->type() == QEvent::KeyPress && video_fullscreen != 0)
|
||||
{
|
||||
QKeyEvent *ke = (QKeyEvent *) event;
|
||||
|
||||
if ((QKeySequence)(ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("screenshot")
|
||||
|| (QKeySequence)(ke->key() | ke->modifiers()) == FindAcceleratorSeq("screenshot"))
|
||||
{
|
||||
ui->actionTake_screenshot->trigger();
|
||||
}
|
||||
if ((QKeySequence)(ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("fullscreen")
|
||||
|| (QKeySequence)(ke->key() | ke->modifiers()) == FindAcceleratorSeq("fullscreen"))
|
||||
{
|
||||
ui->actionFullscreen->trigger();
|
||||
}
|
||||
if ((QKeySequence)(ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("hard_reset")
|
||||
|| (QKeySequence)(ke->key() | ke->modifiers()) == FindAcceleratorSeq("hard_reset"))
|
||||
{
|
||||
ui->actionHard_Reset->trigger();
|
||||
}
|
||||
if ((QKeySequence)(ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("send_ctrl_alt_del")
|
||||
|| (QKeySequence)(ke->key() | ke->modifiers()) == FindAcceleratorSeq("send_ctrl_alt_del"))
|
||||
{
|
||||
ui->actionCtrl_Alt_Del->trigger();
|
||||
}
|
||||
if ((QKeySequence)(ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("send_ctrl_alt_esc")
|
||||
|| (QKeySequence)(ke->key() | ke->modifiers()) == FindAcceleratorSeq("send_ctrl_alt_esc"))
|
||||
{
|
||||
ui->actionCtrl_Alt_Esc->trigger();
|
||||
}
|
||||
if ((QKeySequence)(ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("pause")
|
||||
|| (QKeySequence)(ke->key() | ke->modifiers()) == FindAcceleratorSeq("pause"))
|
||||
{
|
||||
ui->actionPause->trigger();
|
||||
}
|
||||
if ((QKeySequence)(ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("mute")
|
||||
|| (QKeySequence)(ke->key() | ke->modifiers()) == FindAcceleratorSeq("mute"))
|
||||
{
|
||||
ui->actionMute_Unmute->trigger();
|
||||
}
|
||||
if (event->type() == QEvent::KeyPress && video_fullscreen != 0) {
|
||||
QKeyEvent *ke = (QKeyEvent *) event;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("screenshot")
|
||||
|| (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("screenshot")) {
|
||||
ui->actionTake_screenshot->trigger();
|
||||
}
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("fullscreen")
|
||||
|| (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("fullscreen")) {
|
||||
ui->actionFullscreen->trigger();
|
||||
}
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("hard_reset")
|
||||
|| (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("hard_reset")) {
|
||||
ui->actionHard_Reset->trigger();
|
||||
}
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("send_ctrl_alt_del")
|
||||
|| (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("send_ctrl_alt_del")) {
|
||||
ui->actionCtrl_Alt_Del->trigger();
|
||||
}
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("send_ctrl_alt_esc")
|
||||
|| (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("send_ctrl_alt_esc")) {
|
||||
ui->actionCtrl_Alt_Esc->trigger();
|
||||
}
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("pause")
|
||||
|| (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("pause")) {
|
||||
ui->actionPause->trigger();
|
||||
}
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("mute")
|
||||
|| (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("mute")) {
|
||||
ui->actionMute_Unmute->trigger();
|
||||
}
|
||||
if ((QKeySequence) (ke->key() | (ke->modifiers() & ~Qt::KeypadModifier)) == FindAcceleratorSeq("toggle_ui_fullscreen")
|
||||
|| (QKeySequence) (ke->key() | ke->modifiers()) == FindAcceleratorSeq("toggle_ui_fullscreen")) {
|
||||
toggleFullscreenUI();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!dopause && (!kbd_req_capture || mouse_capture)) {
|
||||
if (event->type() == QEvent::Shortcut) {
|
||||
@@ -1571,8 +1564,8 @@ MainWindow::eventFilter(QObject *receiver, QEvent *event)
|
||||
}
|
||||
}
|
||||
if (event->type() == QEvent::KeyPress) {
|
||||
event->accept();
|
||||
|
||||
event->accept();
|
||||
|
||||
return true;
|
||||
}
|
||||
if (event->type() == QEvent::KeyRelease) {
|
||||
@@ -1586,7 +1579,7 @@ MainWindow::eventFilter(QObject *receiver, QEvent *event)
|
||||
static auto curdopause = dopause;
|
||||
if (event->type() == QEvent::WindowBlocked) {
|
||||
window_blocked = true;
|
||||
curdopause = dopause;
|
||||
curdopause = dopause;
|
||||
plat_pause(isNonPause ? dopause : (isShowMessage ? 2 : 1));
|
||||
emit setMouseCapture(false);
|
||||
releaseKeyboard();
|
||||
@@ -1595,7 +1588,7 @@ MainWindow::eventFilter(QObject *receiver, QEvent *event)
|
||||
plat_pause(curdopause);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return QMainWindow::eventFilter(receiver, event);
|
||||
}
|
||||
|
||||
@@ -1615,15 +1608,16 @@ MainWindow::refreshMediaMenu()
|
||||
caps_label->setToolTip(QShortcut::tr("Caps Lock"));
|
||||
caps_label->setVisible(machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD));
|
||||
kana_label->setToolTip(QShortcut::tr("Kana Lock"));
|
||||
int ext_ax_kbd = machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD) &&
|
||||
(keyboard_type == KEYBOARD_TYPE_AX);
|
||||
int int_ax_kbd = machine_has_flags(machine, MACHINE_KEYBOARD_JIS) &&
|
||||
!machine_has_bus(machine, MACHINE_BUS_PS2_PORTS);
|
||||
int ext_ax_kbd = machine_has_bus(machine, MACHINE_BUS_PS2_PORTS | MACHINE_BUS_AT_KBD) && (keyboard_type == KEYBOARD_TYPE_AX);
|
||||
int int_ax_kbd = machine_has_flags(machine, MACHINE_KEYBOARD_JIS) && !machine_has_bus(machine, MACHINE_BUS_PS2_PORTS);
|
||||
kana_label->setVisible(ext_ax_kbd || int_ax_kbd);
|
||||
|
||||
bool enable_comp_option = false;
|
||||
for (int i = 0; i < MONITORS_NUM; i++) {
|
||||
if (monitors[i].mon_composite) { enable_comp_option = true; break; }
|
||||
if (monitors[i].mon_composite) {
|
||||
enable_comp_option = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ui->actionCGA_composite_settings->setEnabled(enable_comp_option);
|
||||
@@ -1635,12 +1629,11 @@ MainWindow::showMessage(int flags, const QString &header, const QString &message
|
||||
if (QThread::currentThread() == this->thread()) {
|
||||
if (!cpu_thread_running) {
|
||||
showMessageForNonQtThread(flags, header, message, richText, nullptr);
|
||||
}
|
||||
else
|
||||
} else
|
||||
showMessage_(flags, header, message, richText);
|
||||
} else {
|
||||
std::atomic_bool done = false;
|
||||
emit showMessageForNonQtThread(flags, header, message, richText, &done);
|
||||
emit showMessageForNonQtThread(flags, header, message, richText, &done);
|
||||
while (!done) {
|
||||
QThread::msleep(1);
|
||||
}
|
||||
@@ -1681,7 +1674,7 @@ MainWindow::keyPressEvent(QKeyEvent *event)
|
||||
processKeyboardInput(true, event->nativeScanCode());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
event->accept();
|
||||
}
|
||||
|
||||
@@ -1724,13 +1717,13 @@ MainWindow::getRenderWidgetSize()
|
||||
void
|
||||
MainWindow::focusInEvent(QFocusEvent *event)
|
||||
{
|
||||
//this->grabKeyboard();
|
||||
// this->grabKeyboard();
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::focusOutEvent(QFocusEvent *event)
|
||||
{
|
||||
//this->releaseKeyboard();
|
||||
// this->releaseKeyboard();
|
||||
}
|
||||
|
||||
void
|
||||
@@ -2205,11 +2198,37 @@ MainWindow::on_actionUpdate_status_bar_icons_triggered()
|
||||
status->clearActivity();
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::toggleFullscreenUI()
|
||||
{
|
||||
if (video_fullscreen == 0)
|
||||
return;
|
||||
|
||||
fullscreen_ui_visible ^= 1;
|
||||
|
||||
if (fullscreen_ui_visible) {
|
||||
// UI is being shown - save mouse capture state and release if captured
|
||||
mouse_was_captured = (mouse_capture != 0);
|
||||
if (mouse_was_captured) {
|
||||
plat_mouse_capture(0);
|
||||
}
|
||||
} else {
|
||||
// UI is being hidden - restore previous mouse capture state
|
||||
if (mouse_was_captured) {
|
||||
plat_mouse_capture(1);
|
||||
}
|
||||
}
|
||||
|
||||
ui->menubar->setVisible(fullscreen_ui_visible);
|
||||
ui->statusbar->setVisible(fullscreen_ui_visible && !hide_status_bar);
|
||||
ui->toolBar->setVisible(fullscreen_ui_visible && !hide_tool_bar);
|
||||
}
|
||||
|
||||
void
|
||||
MainWindow::on_actionTake_screenshot_triggered()
|
||||
{
|
||||
startblit();
|
||||
for (auto & monitor : monitors)
|
||||
for (auto &monitor : monitors)
|
||||
++monitor.mon_screenshots;
|
||||
endblit();
|
||||
device_force_redraw();
|
||||
@@ -2240,16 +2259,13 @@ MainWindow::setSendKeyboardInput(bool enabled)
|
||||
void
|
||||
MainWindow::updateUiPauseState()
|
||||
{
|
||||
const auto pause_icon = dopause ? QIcon(":/menuicons/qt/icons/run.ico") :
|
||||
QIcon(":/menuicons/qt/icons/pause.ico");
|
||||
const auto tooltip_text = dopause ? QString(tr("Resume execution")) :
|
||||
QString(tr("Pause execution"));
|
||||
const auto menu_text = dopause ? QString(tr("Re&sume")) :
|
||||
QString(tr("&Pause"));
|
||||
const auto pause_icon = dopause ? QIcon(":/menuicons/qt/icons/run.ico") : QIcon(":/menuicons/qt/icons/pause.ico");
|
||||
const auto tooltip_text = dopause ? QString(tr("Resume execution")) : QString(tr("Pause execution"));
|
||||
const auto menu_text = dopause ? QString(tr("Re&sume")) : QString(tr("&Pause"));
|
||||
ui->actionPause->setIcon(pause_icon);
|
||||
ui->actionPause->setToolTip(tooltip_text);
|
||||
ui->actionPause->setText(menu_text);
|
||||
emit vmmRunningStateChanged(static_cast<VMManagerProtocol::RunningState>(window_blocked ? (dopause ? VMManagerProtocol::RunningState::PausedWaiting : VMManagerProtocol::RunningState::RunningWaiting) : (VMManagerProtocol::RunningState)dopause));
|
||||
emit vmmRunningStateChanged(static_cast<VMManagerProtocol::RunningState>(window_blocked ? (dopause ? VMManagerProtocol::RunningState::PausedWaiting : VMManagerProtocol::RunningState::RunningWaiting) : (VMManagerProtocol::RunningState) dopause));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -2345,10 +2361,11 @@ MainWindow::on_actionRenderer_options_triggered()
|
||||
}
|
||||
}
|
||||
}
|
||||
} else for (int i = 1; i < MONITORS_NUM; i++) {
|
||||
if (renderers[i] && renderers[i]->hasOptions())
|
||||
renderers[i]->reloadOptions();
|
||||
}
|
||||
} else
|
||||
for (int i = 1; i < MONITORS_NUM; i++) {
|
||||
if (renderers[i] && renderers[i]->hasOptions())
|
||||
renderers[i]->reloadOptions();
|
||||
}
|
||||
} else if (reload_renderers && ui->stackedWidget->reloadRendererOption()) {
|
||||
reload_renderers = false;
|
||||
ui->stackedWidget->switchRenderer(static_cast<RendererStack::Renderer>(vid_api));
|
||||
@@ -2437,24 +2454,28 @@ MainWindow::on_actionApply_fullscreen_stretch_mode_when_maximized_triggered(bool
|
||||
config_save();
|
||||
}
|
||||
|
||||
void MainWindow::on_actionCursor_Puck_triggered()
|
||||
void
|
||||
MainWindow::on_actionCursor_Puck_triggered()
|
||||
{
|
||||
tablet_tool_type = 0;
|
||||
config_save();
|
||||
}
|
||||
|
||||
void MainWindow::on_actionPen_triggered()
|
||||
void
|
||||
MainWindow::on_actionPen_triggered()
|
||||
{
|
||||
tablet_tool_type = 1;
|
||||
config_save();
|
||||
}
|
||||
|
||||
void MainWindow::on_actionACPI_Shutdown_triggered()
|
||||
void
|
||||
MainWindow::on_actionACPI_Shutdown_triggered()
|
||||
{
|
||||
acpi_pwrbut_pressed = 1;
|
||||
}
|
||||
|
||||
void MainWindow::on_actionCGA_composite_settings_triggered()
|
||||
void
|
||||
MainWindow::on_actionCGA_composite_settings_triggered()
|
||||
{
|
||||
isNonPause = true;
|
||||
CGASettingsDialog dialog;
|
||||
@@ -2463,4 +2484,3 @@ void MainWindow::on_actionCGA_composite_settings_triggered()
|
||||
isNonPause = false;
|
||||
config_save();
|
||||
}
|
||||
|
||||
|
||||
@@ -33,16 +33,15 @@ public:
|
||||
explicit MainWindow(QWidget *parent = nullptr);
|
||||
~MainWindow();
|
||||
|
||||
void showMessage(int flags, const QString &header, const QString &message, bool richText);
|
||||
void getTitle(wchar_t *title);
|
||||
void blitToWidget(int x, int y, int w, int h, int monitor_index);
|
||||
QSize getRenderWidgetSize();
|
||||
void setSendKeyboardInput(bool enabled);
|
||||
void reloadAllRenderers();
|
||||
QShortcut *windowedShortcut;
|
||||
QKeySequence FindAcceleratorSeq(const char *name);
|
||||
|
||||
|
||||
void showMessage(int flags, const QString &header, const QString &message, bool richText);
|
||||
void getTitle(wchar_t *title);
|
||||
void blitToWidget(int x, int y, int w, int h, int monitor_index);
|
||||
QSize getRenderWidgetSize();
|
||||
void setSendKeyboardInput(bool enabled);
|
||||
void reloadAllRenderers();
|
||||
QShortcut *windowedShortcut;
|
||||
QKeySequence FindAcceleratorSeq(const char *name);
|
||||
|
||||
std::array<std::unique_ptr<RendererStack>, 8> renderers;
|
||||
signals:
|
||||
void paint(const QImage &image);
|
||||
@@ -65,7 +64,7 @@ signals:
|
||||
void setFullscreen(bool state);
|
||||
void setMouseCapture(bool state);
|
||||
|
||||
void showMessageForNonQtThread(int flags, const QString &header, const QString &message, bool richText, std::atomic_bool* done);
|
||||
void showMessageForNonQtThread(int flags, const QString &header, const QString &message, bool richText, std::atomic_bool *done);
|
||||
void getTitleForNonQtThread(wchar_t *title);
|
||||
|
||||
void vmmRunningStateChanged(VMManagerProtocol::RunningState state);
|
||||
@@ -131,6 +130,7 @@ private slots:
|
||||
void on_actionHide_tool_bar_triggered();
|
||||
void on_actionUpdate_status_bar_icons_triggered();
|
||||
void on_actionTake_screenshot_triggered();
|
||||
void toggleFullscreenUI();
|
||||
void on_actionMute_Unmute_triggered();
|
||||
void on_actionSound_gain_triggered();
|
||||
void on_actionPreferences_triggered();
|
||||
@@ -138,7 +138,7 @@ private slots:
|
||||
void on_actionRenderer_options_triggered();
|
||||
|
||||
void refreshMediaMenu();
|
||||
void showMessage_(int flags, const QString &header, const QString &message, bool richText, std::atomic_bool* done = nullptr);
|
||||
void showMessage_(int flags, const QString &header, const QString &message, bool richText, std::atomic_bool *done = nullptr);
|
||||
void getTitle_(wchar_t *title);
|
||||
|
||||
void on_actionMCA_devices_triggered();
|
||||
@@ -178,8 +178,8 @@ private:
|
||||
std::unique_ptr<MachineStatus> status;
|
||||
std::shared_ptr<MediaMenu> mm;
|
||||
|
||||
void updateShortcuts();
|
||||
void processKeyboardInput(bool down, uint32_t keycode);
|
||||
void updateShortcuts();
|
||||
void processKeyboardInput(bool down, uint32_t keycode);
|
||||
#ifdef Q_OS_MACOS
|
||||
uint32_t last_modifiers = 0;
|
||||
void processMacKeyboardInput(bool down, const QKeyEvent *event);
|
||||
@@ -192,24 +192,27 @@ private:
|
||||
bool vnc_enabled = false;
|
||||
|
||||
/* Full screen ON and OFF signals */
|
||||
bool fs_on_signal = false;
|
||||
bool fs_off_signal = false;
|
||||
bool fs_on_signal = false;
|
||||
bool fs_off_signal = false;
|
||||
|
||||
/* Reload the renderers after closing renderer options dialog. */
|
||||
bool reload_renderers = false;
|
||||
bool reload_renderers = false;
|
||||
|
||||
/* Mouse capture state before showing fullscreen UI */
|
||||
bool mouse_was_captured = false;
|
||||
|
||||
friend class SpecifyDimensions;
|
||||
friend class ProgSettings;
|
||||
friend class RendererCommon;
|
||||
friend class RendererStack; // For UI variable access by non-primary renderer windows.
|
||||
friend class RendererStack; // For UI variable access by non-primary renderer windows.
|
||||
friend class WindowsRawInputFilter; // Needed to reload renderers on style sheet changes.
|
||||
|
||||
QLabel *caps_label, *scroll_label, *num_label, *kana_label;
|
||||
QIcon caps_icon, scroll_icon, num_icon, kana_icon;
|
||||
QIcon caps_icon_off, scroll_icon_off, num_icon_off, kana_icon_off;
|
||||
QIcon caps_icon, scroll_icon, num_icon, kana_icon;
|
||||
QIcon caps_icon_off, scroll_icon_off, num_icon_off, kana_icon_off;
|
||||
|
||||
bool isShowMessage = false;
|
||||
bool isNonPause = false;
|
||||
bool isShowMessage = false;
|
||||
bool isNonPause = false;
|
||||
bool window_blocked = false;
|
||||
};
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
#include <utility>
|
||||
#include "qt_mediahistorymanager.hpp"
|
||||
#ifdef Q_OS_WINDOWS
|
||||
#include <windows.h>
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
extern "C" {
|
||||
@@ -371,7 +371,7 @@ MediaHistoryManager::removeMissingImages(device_index_list_t &device_history)
|
||||
path_normalize(temp);
|
||||
}
|
||||
|
||||
QString qstr = QString::fromUtf8(temp);
|
||||
QString qstr = QString::fromUtf8(temp);
|
||||
QFileInfo new_fi(qstr);
|
||||
|
||||
bool file_exists = new_fi.exists();
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
|
||||
extern "C" {
|
||||
#ifdef Q_OS_WINDOWS
|
||||
#define BITMAP WINDOWS_BITMAP
|
||||
#include <windows.h>
|
||||
#include <windowsx.h>
|
||||
#undef BITMAP
|
||||
# define BITMAP WINDOWS_BITMAP
|
||||
# include <windows.h>
|
||||
# include <windowsx.h>
|
||||
# undef BITMAP
|
||||
#endif
|
||||
#include <inttypes.h>
|
||||
#include <stdarg.h>
|
||||
@@ -70,7 +70,7 @@ extern "C" {
|
||||
|
||||
std::shared_ptr<MediaMenu> MediaMenu::ptr;
|
||||
|
||||
static QSize pixmap_size(16, 16);
|
||||
static QSize pixmap_size(16, 16);
|
||||
|
||||
MediaMenu::MediaMenu(QWidget *parent)
|
||||
: QObject(parent)
|
||||
@@ -85,7 +85,7 @@ MediaMenu::refresh(QMenu *parentMenu)
|
||||
parentMenu->clear();
|
||||
|
||||
if (MachineStatus::hasCassette()) {
|
||||
cassetteMenu = parentMenu->addMenu("");
|
||||
cassetteMenu = parentMenu->addMenu("");
|
||||
QIcon img_icon = QIcon(":/settings/qt/icons/cassette_image.ico");
|
||||
cassetteMenu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, New), tr("&New image..."), [this]() { cassetteNewImage(); });
|
||||
cassetteMenu->addSeparator();
|
||||
@@ -114,7 +114,7 @@ MediaMenu::refresh(QMenu *parentMenu)
|
||||
cartridgeMenus.clear();
|
||||
if (machine_has_cartridge(machine)) {
|
||||
for (int i = 0; i < 2; i++) {
|
||||
auto *menu = parentMenu->addMenu("");
|
||||
auto *menu = parentMenu->addMenu("");
|
||||
QIcon img_icon = QIcon(":/settings/qt/icons/cartridge_image.ico");
|
||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Browse), tr("&Image..."), [this, i]() { cartridgeSelectImage(i); });
|
||||
menu->addSeparator();
|
||||
@@ -132,9 +132,8 @@ MediaMenu::refresh(QMenu *parentMenu)
|
||||
|
||||
floppyMenus.clear();
|
||||
MachineStatus::iterateFDD([this, parentMenu](int i) {
|
||||
auto *menu = parentMenu->addMenu("");
|
||||
QIcon img_icon = fdd_is_525(i) ? QIcon(":/settings/qt/icons/floppy_525_image.ico") :
|
||||
QIcon(":/settings/qt/icons/floppy_35_image.ico");
|
||||
auto *menu = parentMenu->addMenu("");
|
||||
QIcon img_icon = fdd_is_525(i) ? QIcon(":/settings/qt/icons/floppy_525_image.ico") : QIcon(":/settings/qt/icons/floppy_35_image.ico");
|
||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, New), tr("&New image..."), [this, i]() { floppyNewImage(i); });
|
||||
menu->addSeparator();
|
||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, Browse), tr("&Existing image..."), [this, i]() { floppySelectImage(i, false); });
|
||||
@@ -186,7 +185,7 @@ MediaMenu::refresh(QMenu *parentMenu)
|
||||
|
||||
rdiskMenus.clear();
|
||||
MachineStatus::iterateRDisk([this, parentMenu](int i) {
|
||||
auto *menu = parentMenu->addMenu("");
|
||||
auto *menu = parentMenu->addMenu("");
|
||||
QIcon img_icon = QIcon(":/settings/qt/icons/rdisk_image.ico");
|
||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, New), tr("&New image..."), [this, i]() { rdiskNewImage(i); });
|
||||
menu->addSeparator();
|
||||
@@ -206,7 +205,7 @@ MediaMenu::refresh(QMenu *parentMenu)
|
||||
|
||||
moMenus.clear();
|
||||
MachineStatus::iterateMO([this, parentMenu](int i) {
|
||||
auto *menu = parentMenu->addMenu("");
|
||||
auto *menu = parentMenu->addMenu("");
|
||||
QIcon img_icon = QIcon(":/settings/qt/icons/mo_image.ico");
|
||||
menu->addAction(getIconWithIndicator(img_icon, pixmap_size, QIcon::Normal, New), tr("&New image..."), [this, i]() { moNewImage(i); });
|
||||
menu->addSeparator();
|
||||
@@ -316,15 +315,15 @@ MediaMenu::cassetteEject()
|
||||
void
|
||||
MediaMenu::cassetteUpdateMenu()
|
||||
{
|
||||
QString name = cassette_fname;
|
||||
QFileInfo fi(cassette_fname);
|
||||
const QString mode = cassette_mode;
|
||||
auto childs = cassetteMenu->children();
|
||||
auto *recordMenu = dynamic_cast<QAction *>(childs[cassetteRecordPos]);
|
||||
auto *playMenu = dynamic_cast<QAction *>(childs[cassettePlayPos]);
|
||||
auto *rewindMenu = dynamic_cast<QAction *>(childs[cassetteRewindPos]);
|
||||
auto *fastFwdMenu = dynamic_cast<QAction *>(childs[cassetteFastFwdPos]);
|
||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[cassetteEjectPos]);
|
||||
QString name = cassette_fname;
|
||||
QFileInfo fi(cassette_fname);
|
||||
const QString mode = cassette_mode;
|
||||
auto childs = cassetteMenu->children();
|
||||
auto *recordMenu = dynamic_cast<QAction *>(childs[cassetteRecordPos]);
|
||||
auto *playMenu = dynamic_cast<QAction *>(childs[cassettePlayPos]);
|
||||
auto *rewindMenu = dynamic_cast<QAction *>(childs[cassetteRewindPos]);
|
||||
auto *fastFwdMenu = dynamic_cast<QAction *>(childs[cassetteFastFwdPos]);
|
||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[cassetteEjectPos]);
|
||||
|
||||
recordMenu->setEnabled(!name.isEmpty());
|
||||
playMenu->setEnabled(!name.isEmpty());
|
||||
@@ -400,9 +399,9 @@ MediaMenu::cartridgeUpdateMenu(int i)
|
||||
{
|
||||
const QString name = cart_fns[i];
|
||||
QFileInfo fi(cart_fns[i]);
|
||||
auto *menu = cartridgeMenus[i];
|
||||
auto childs = menu->children();
|
||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[cartridgeEjectPos]);
|
||||
auto *menu = cartridgeMenus[i];
|
||||
auto childs = menu->children();
|
||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[cartridgeEjectPos]);
|
||||
ejectMenu->setEnabled(!name.isEmpty());
|
||||
ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName()));
|
||||
menu->setTitle(tr("Car&tridge %1: %2").arg(QString::number(i + 1), name.isEmpty() ? tr("(empty)") : name));
|
||||
@@ -447,7 +446,8 @@ MediaMenu::floppySelectImage(int i, bool wp)
|
||||
tr("All files") %
|
||||
util::DlgFilter({ "*" }, true));
|
||||
|
||||
if (!filename.isEmpty()) floppyMount(i, filename, wp);
|
||||
if (!filename.isEmpty())
|
||||
floppyMount(i, filename, wp);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -525,7 +525,6 @@ MediaMenu::floppyUpdateMenu(int i)
|
||||
int type = fdd_get_type(i);
|
||||
floppyMenus[i]->setTitle(tr("&Floppy %1 (%2): %3").arg(QString::number(i + 1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name));
|
||||
floppyMenus[i]->setToolTip(tr("Floppy %1 (%2): %3").arg(QString::number(i + 1), fdd_getname(type), name.isEmpty() ? tr("(empty)") : name));
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
@@ -597,7 +596,7 @@ MediaMenu::cdromMount(int i, int dir, const QString &arg)
|
||||
else {
|
||||
filename = QFileDialog::getOpenFileName(parentWidget, QString(),
|
||||
QString(),
|
||||
tr("CD-ROM images") % util::DlgFilter({ "iso", "cue", "mds" }) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||
tr("CD-ROM images") % util::DlgFilter({ "iso", "cue", "mds" }) % tr("All files") % util::DlgFilter({ "*" }, true));
|
||||
}
|
||||
|
||||
if (filename.isEmpty())
|
||||
@@ -649,7 +648,7 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
|
||||
QObjectList children;
|
||||
QFileInfo fi;
|
||||
QIcon menu_icon;
|
||||
const auto fn = mhm.getImageForSlot(index, slot, type);
|
||||
const auto fn = mhm.getImageForSlot(index, slot, type);
|
||||
|
||||
QString menu_item_name;
|
||||
|
||||
@@ -691,8 +690,7 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
|
||||
menu = floppyMenus[index];
|
||||
children = menu->children();
|
||||
imageHistoryUpdatePos = dynamic_cast<QAction *>(children[floppyImageHistoryPos[slot]]);
|
||||
menu_icon = fdd_is_525(index) ? QIcon(":/settings/qt/icons/floppy_525_image.ico") :
|
||||
QIcon(":/settings/qt/icons/floppy_35_image.ico");
|
||||
menu_icon = fdd_is_525(index) ? QIcon(":/settings/qt/icons/floppy_525_image.ico") : QIcon(":/settings/qt/icons/floppy_35_image.ico");
|
||||
if (fn.left(5) == "wp://")
|
||||
fi.setFile(fn.right(fn.length() - 5));
|
||||
else
|
||||
@@ -720,7 +718,7 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
|
||||
#endif
|
||||
} else {
|
||||
fi.setFile(fn);
|
||||
menu_icon = fi.isDir() ? QIcon(":/settings/qt/icons/cdrom_folder.ico") : QIcon(":/settings/qt/icons/cdrom_image.ico");
|
||||
menu_icon = fi.isDir() ? QIcon(":/settings/qt/icons/cdrom_folder.ico") : QIcon(":/settings/qt/icons/cdrom_image.ico");
|
||||
menu_item_name = fn.isEmpty() ? tr("Reload previous image") : fn;
|
||||
}
|
||||
imageHistoryUpdatePos->setIcon(menu_icon);
|
||||
@@ -770,7 +768,7 @@ MediaMenu::updateImageHistory(int index, int slot, ui::MediaType type)
|
||||
imageHistoryUpdatePos->setText(menu_item_name.prepend("&%1 ").arg((slot == 9) ? 0 : (slot + 1)));
|
||||
else
|
||||
#endif
|
||||
imageHistoryUpdatePos->setText(menu_item_name);
|
||||
imageHistoryUpdatePos->setText(menu_item_name);
|
||||
|
||||
if (fn.left(8) == "ioctl://")
|
||||
imageHistoryUpdatePos->setVisible(true);
|
||||
@@ -788,9 +786,9 @@ MediaMenu::clearImageHistory()
|
||||
void
|
||||
MediaMenu::cdromUpdateMenu(int i)
|
||||
{
|
||||
QString name = cdrom[i].image_path;
|
||||
QString name2;
|
||||
QIcon menu_icon;
|
||||
QString name = cdrom[i].image_path;
|
||||
QString name2;
|
||||
QIcon menu_icon;
|
||||
|
||||
if (!cdromMenus.contains(i))
|
||||
return;
|
||||
@@ -810,17 +808,17 @@ MediaMenu::cdromUpdateMenu(int i)
|
||||
#else
|
||||
menu_item_name = tr("Host CD/DVD Drive (%1)").arg(name.right(name.length() - 8));
|
||||
#endif
|
||||
name2 = menu_item_name;
|
||||
menu_icon = QIcon(":/settings/qt/icons/cdrom_host.ico");
|
||||
name2 = menu_item_name;
|
||||
menu_icon = QIcon(":/settings/qt/icons/cdrom_host.ico");
|
||||
} else {
|
||||
QFileInfo fi(cdrom[i].image_path);
|
||||
|
||||
menu_item_name = name.isEmpty() ? QString() : fi.fileName();
|
||||
name2 = name;
|
||||
if (name.isEmpty())
|
||||
menu_icon = QIcon(":/settings/qt/icons/cdrom.ico");
|
||||
menu_icon = QIcon(":/settings/qt/icons/cdrom.ico");
|
||||
else
|
||||
menu_icon = fi.isDir() ? QIcon(":/settings/qt/icons/cdrom_folder.ico") : QIcon(":/settings/qt/icons/cdrom_image.ico");
|
||||
menu_icon = fi.isDir() ? QIcon(":/settings/qt/icons/cdrom_folder.ico") : QIcon(":/settings/qt/icons/cdrom_image.ico");
|
||||
}
|
||||
ejectMenu->setIcon(getIconWithIndicator(menu_icon, pixmap_size, QIcon::Normal, Eject));
|
||||
ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(menu_item_name));
|
||||
@@ -846,8 +844,8 @@ MediaMenu::cdromUpdateMenu(int i)
|
||||
break;
|
||||
}
|
||||
|
||||
menu->setTitle(tr("&CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name2));
|
||||
menu->setToolTip(tr("CD-ROM %1 (%2): %3").arg(QString::number(i+1), busName, name.isEmpty() ? tr("(empty)") : name2));
|
||||
menu->setTitle(tr("&CD-ROM %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name2));
|
||||
menu->setToolTip(tr("CD-ROM %1 (%2): %3").arg(QString::number(i + 1), busName, name.isEmpty() ? tr("(empty)") : name2));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -970,7 +968,7 @@ MediaMenu::moUpdateMenu(int i)
|
||||
auto *menu = moMenus[i];
|
||||
auto childs = menu->children();
|
||||
|
||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[moEjectPos]);
|
||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[moEjectPos]);
|
||||
ejectMenu->setEnabled(!name.isEmpty());
|
||||
ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName()));
|
||||
|
||||
@@ -1004,7 +1002,7 @@ MediaMenu::rdiskUpdateMenu(int i)
|
||||
auto *menu = rdiskMenus[i];
|
||||
auto childs = menu->children();
|
||||
|
||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[rdiskEjectPos]);
|
||||
auto *ejectMenu = dynamic_cast<QAction *>(childs[rdiskEjectPos]);
|
||||
ejectMenu->setEnabled(!name.isEmpty());
|
||||
ejectMenu->setText(name.isEmpty() ? tr("E&ject") : tr("E&ject %1").arg(fi.fileName()));
|
||||
|
||||
|
||||
@@ -69,5 +69,4 @@ plat_midi_in_get_dev_name(int num, char *s)
|
||||
s[0] = ' ';
|
||||
s[1] = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
class QString;
|
||||
class QAbstractItemModel;
|
||||
namespace Models {
|
||||
int AddEntry(QAbstractItemModel *model, const QString &displayRole, int userRole);
|
||||
int AddEntry(QAbstractItemModel *model, const QString &displayRole, int userRole);
|
||||
};
|
||||
|
||||
@@ -83,7 +83,7 @@ static const disk_size_t disk_sizes[14] = {
|
||||
{ 0, 8, 0, 0, 0, 963, 32, 2, 0, 0, 0, 0, 0 }, /* LS-120 */
|
||||
{ 0, 32, 0, 0, 0, 262, 56, 2, 0, 0, 0, 0, 0 } /* LS-240 */
|
||||
#endif
|
||||
// clang-format on
|
||||
// clang-format on
|
||||
};
|
||||
|
||||
static const QStringList rpmModes = {
|
||||
@@ -198,7 +198,7 @@ NewFloppyDialog::onCreate()
|
||||
QFileInfo fi(filename);
|
||||
filename = (fi.isRelative() && !fi.filePath().isEmpty()) ? (usr_path + fi.filePath()) : fi.filePath();
|
||||
ui->fileField->setFileName(filename);
|
||||
FileType fileType;
|
||||
FileType fileType;
|
||||
|
||||
QProgressDialog progress("Creating floppy image", QString(), 0, 100, this);
|
||||
connect(this, &NewFloppyDialog::fileProgress, &progress, &QProgressDialog::setValue);
|
||||
@@ -646,8 +646,8 @@ NewFloppyDialog::createRDiskSectorImage(const QString &filename, const disk_size
|
||||
bool
|
||||
NewFloppyDialog::createMoSectorImage(const QString &filename, int8_t disk_size, FileType type, QProgressDialog &pbar)
|
||||
{
|
||||
const mo_type_t *dp = &mo_types[disk_size];
|
||||
uint64_t total_size = 0;
|
||||
const mo_type_t *dp = &mo_types[disk_size];
|
||||
uint64_t total_size = 0;
|
||||
uint64_t total_size2;
|
||||
uint32_t total_sectors = 0;
|
||||
uint32_t sector_bytes = 0;
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#include "qt_renderercommon.hpp"
|
||||
#include "qt_mainwindow.hpp"
|
||||
|
||||
extern MainWindow* main_window;
|
||||
extern MainWindow *main_window;
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QMessageBox>
|
||||
@@ -58,7 +58,7 @@ extern "C" {
|
||||
#include <86box/config.h>
|
||||
#include <86box/qt-glslp-parser.h>
|
||||
|
||||
char gl3_shader_file[MAX_USER_SHADERS][512];
|
||||
char gl3_shader_file[MAX_USER_SHADERS][512];
|
||||
extern bool cpu_thread_running;
|
||||
}
|
||||
|
||||
@@ -73,76 +73,76 @@ extern int video_vsync;
|
||||
extern int video_focus_dim;
|
||||
extern int video_refresh_rate;
|
||||
|
||||
const char* vertex_shader_default_tex_src =
|
||||
const char *vertex_shader_default_tex_src =
|
||||
#ifdef __APPLE__
|
||||
"#version 150\n"
|
||||
"#version 150\n"
|
||||
#else
|
||||
"#version 130\n"
|
||||
"#version 130\n"
|
||||
#endif
|
||||
"\n"
|
||||
"in vec4 VertexCoord;\n"
|
||||
"in vec2 TexCoord;\n"
|
||||
"\n"
|
||||
"out vec2 texCoord;\n"
|
||||
"\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = VertexCoord;\n"
|
||||
" texCoord = TexCoord;\n"
|
||||
"}\n";
|
||||
"\n"
|
||||
"in vec4 VertexCoord;\n"
|
||||
"in vec2 TexCoord;\n"
|
||||
"\n"
|
||||
"out vec2 texCoord;\n"
|
||||
"\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = VertexCoord;\n"
|
||||
" texCoord = TexCoord;\n"
|
||||
"}\n";
|
||||
|
||||
const char* fragment_shader_default_tex_src =
|
||||
const char *fragment_shader_default_tex_src =
|
||||
#ifdef __APPLE__
|
||||
"#version 150\n"
|
||||
"#version 150\n"
|
||||
#else
|
||||
"#version 130\n"
|
||||
"#version 130\n"
|
||||
#endif
|
||||
"\n"
|
||||
"in vec2 texCoord;\n"
|
||||
"uniform sampler2D Texture;\n"
|
||||
"\n"
|
||||
"out vec4 color;"
|
||||
"\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" color = texture(Texture, texCoord);\n"
|
||||
" color.a = 1.0;\n"
|
||||
"}\n";
|
||||
"\n"
|
||||
"in vec2 texCoord;\n"
|
||||
"uniform sampler2D Texture;\n"
|
||||
"\n"
|
||||
"out vec4 color;"
|
||||
"\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" color = texture(Texture, texCoord);\n"
|
||||
" color.a = 1.0;\n"
|
||||
"}\n";
|
||||
|
||||
const char* vertex_shader_default_color_src =
|
||||
const char *vertex_shader_default_color_src =
|
||||
#ifdef __APPLE__
|
||||
"#version 150\n"
|
||||
"#version 150\n"
|
||||
#else
|
||||
"#version 130\n"
|
||||
"#version 130\n"
|
||||
#endif
|
||||
"\n"
|
||||
"in vec4 VertexCoord;\n"
|
||||
"in vec4 Color;\n"
|
||||
"\n"
|
||||
"out vec4 color;\n"
|
||||
"\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = VertexCoord;\n"
|
||||
" color = Color;\n"
|
||||
"}\n";
|
||||
"\n"
|
||||
"in vec4 VertexCoord;\n"
|
||||
"in vec4 Color;\n"
|
||||
"\n"
|
||||
"out vec4 color;\n"
|
||||
"\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = VertexCoord;\n"
|
||||
" color = Color;\n"
|
||||
"}\n";
|
||||
|
||||
const char* fragment_shader_default_color_src =
|
||||
const char *fragment_shader_default_color_src =
|
||||
#ifdef __APPLE__
|
||||
"#version 150\n"
|
||||
"#version 150\n"
|
||||
#else
|
||||
"#version 130\n"
|
||||
"#version 130\n"
|
||||
#endif
|
||||
"\n"
|
||||
"in vec4 color;\n"
|
||||
"\n"
|
||||
"out vec4 outColor;"
|
||||
"\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" outColor = color;\n"
|
||||
" outColor.a = 1.0;\n"
|
||||
"}\n";
|
||||
"\n"
|
||||
"in vec4 color;\n"
|
||||
"\n"
|
||||
"out vec4 outColor;"
|
||||
"\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" outColor = color;\n"
|
||||
" outColor.a = 1.0;\n"
|
||||
"}\n";
|
||||
|
||||
#ifdef ENABLE_OGL3_LOG
|
||||
int ogl3_do_log = ENABLE_OGL3_LOG;
|
||||
@@ -212,11 +212,11 @@ int
|
||||
OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const char *program, int *dst)
|
||||
{
|
||||
QRegularExpression versionRegex("^\\s*(#version\\s+\\w+)", QRegularExpression::MultilineOption);
|
||||
QString progSource = QString(program);
|
||||
QByteArray finalSource = nullptr;
|
||||
const char *source[5];
|
||||
char version[50];
|
||||
char *version_loc = (char *) strstr(program, "#version");
|
||||
QString progSource = QString(program);
|
||||
QByteArray finalSource = nullptr;
|
||||
const char *source[5];
|
||||
char version[50];
|
||||
char *version_loc = (char *) strstr(program, "#version");
|
||||
if (version_loc) {
|
||||
snprintf(version, 49, "%s\n", versionRegex.match(progSource).captured(1).toLatin1().data());
|
||||
progSource.remove(versionRegex);
|
||||
@@ -230,7 +230,7 @@ OpenGLRenderer::compile_shader(GLenum shader_type, const char *prepend, const ch
|
||||
ver = 150;
|
||||
snprintf(version, 49, "#version %d\n", ver);
|
||||
}
|
||||
|
||||
|
||||
/* Remove parameter lines. */
|
||||
progSource.remove(QRegularExpression("^\\s*#pragma parameter.*?\\n", QRegularExpression::MultilineOption));
|
||||
|
||||
@@ -309,27 +309,27 @@ OpenGLRenderer::find_uniforms(struct glsl_shader *glsl, int num_pass)
|
||||
u->orig.texture_size = get_uniform(p, "OrigTextureSize");
|
||||
|
||||
for (i = 0; i < glsl->num_passes; ++i) {
|
||||
snprintf(s, sizeof(s) -1, "Pass%dTexture", (i + 1));
|
||||
snprintf(s, sizeof(s) - 1, "Pass%dTexture", (i + 1));
|
||||
u->pass[i].texture = get_uniform(p, s);
|
||||
snprintf(s, sizeof(s) -1, "Pass%dInputSize", (i + 1));
|
||||
snprintf(s, sizeof(s) - 1, "Pass%dInputSize", (i + 1));
|
||||
u->pass[i].input_size = get_uniform(p, s);
|
||||
snprintf(s, sizeof(s) -1, "Pass%dTextureSize", (i + 1));
|
||||
snprintf(s, sizeof(s) - 1, "Pass%dTextureSize", (i + 1));
|
||||
u->pass[i].texture_size = get_uniform(p, s);
|
||||
|
||||
snprintf(s, sizeof(s) -1, "PassPrev%dTexture", num_pass - i);
|
||||
snprintf(s, sizeof(s) - 1, "PassPrev%dTexture", num_pass - i);
|
||||
u->prev_pass[i].texture = get_uniform(p, s);
|
||||
snprintf(s, sizeof(s) -1, "PassPrev%dInputSize", num_pass - i);
|
||||
snprintf(s, sizeof(s) - 1, "PassPrev%dInputSize", num_pass - i);
|
||||
u->prev_pass[i].input_size = get_uniform(p, s);
|
||||
snprintf(s, sizeof(s) -1, "PassPrev%dTextureSize", num_pass - i);
|
||||
snprintf(s, sizeof(s) - 1, "PassPrev%dTextureSize", num_pass - i);
|
||||
u->prev_pass[i].texture_size = get_uniform(p, s);
|
||||
}
|
||||
|
||||
u->prev[0].texture = get_uniform(p, "PrevTexture");
|
||||
u->prev[0].tex_coord = get_attrib(p, "PrevTexCoord");
|
||||
for (i = 1; i < MAX_PREV; ++i) {
|
||||
snprintf(s, sizeof(s) -1, "Prev%dTexture", i);
|
||||
snprintf(s, sizeof(s) - 1, "Prev%dTexture", i);
|
||||
u->prev[i].texture = get_uniform(p, s);
|
||||
snprintf(s, sizeof(s) -1, "Prev%dTexCoord", i);
|
||||
snprintf(s, sizeof(s) - 1, "Prev%dTexCoord", i);
|
||||
u->prev[i].tex_coord = get_attrib(p, s);
|
||||
}
|
||||
for (i = 0; i < MAX_PREV; ++i)
|
||||
@@ -653,7 +653,7 @@ OpenGLRenderer::load_glslp(glsl_t *glsl, int num_shader, const char *f)
|
||||
ogl3_log("Load texture %s...\n", file);
|
||||
|
||||
if (!load_texture(file, &tex->texture)) {
|
||||
//QMessageBox::critical(main_window, tr("GLSL Error"), tr("Could not load texture: %s").arg(file));
|
||||
// QMessageBox::critical(main_window, tr("GLSL Error"), tr("Could not load texture: %s").arg(file));
|
||||
main_window->showMessage(MBX_ERROR | MBX_FATAL, tr("GLSL Error"), tr("Could not load texture: %1").arg(file), false);
|
||||
ogl3_log("Could not load texture %s!\n", file);
|
||||
failed = 1;
|
||||
@@ -805,7 +805,7 @@ OpenGLRenderer::read_shader_config()
|
||||
for (int i = 0; i < active_shader->num_shaders; ++i) {
|
||||
struct glsl_shader *shader = &active_shader->shaders[i];
|
||||
char *name = shader->name;
|
||||
snprintf(s, sizeof(s) -1, "GL3 Shaders - %s", name);
|
||||
snprintf(s, sizeof(s) - 1, "GL3 Shaders - %s", name);
|
||||
// shader->shader_refresh_rate = config_get_float(CFG_MACHINE, s, "shader_refresh_rate", -1);
|
||||
for (int j = 0; j < shader->num_parameters; ++j) {
|
||||
struct shader_parameter *param = &shader->parameters[j];
|
||||
@@ -818,7 +818,7 @@ OpenGLRenderer::OpenGLRenderer(QWidget *parent)
|
||||
: QWindow((QWindow*)nullptr)
|
||||
, renderTimer(new QTimer(this))
|
||||
{
|
||||
connect(renderTimer, &QTimer::timeout, this, [this]() { this->render(); } );
|
||||
connect(renderTimer, &QTimer::timeout, this, [this]() { this->render(); });
|
||||
imagebufs[0] = std::unique_ptr<uint8_t>(new uint8_t[2048 * 2048 * 4]);
|
||||
imagebufs[1] = std::unique_ptr<uint8_t>(new uint8_t[2048 * 2048 * 4]);
|
||||
|
||||
@@ -846,8 +846,8 @@ OpenGLRenderer::OpenGLRenderer(QWidget *parent)
|
||||
|
||||
source.setRect(0, 0, 100, 100);
|
||||
isInitialized = false;
|
||||
isFinalized = false;
|
||||
context = nullptr;
|
||||
isFinalized = false;
|
||||
context = nullptr;
|
||||
}
|
||||
|
||||
OpenGLRenderer::~OpenGLRenderer() { finalize(); }
|
||||
@@ -873,12 +873,16 @@ OpenGLRenderer::initialize()
|
||||
|
||||
glw.initializeOpenGLFunctions();
|
||||
|
||||
glw.glClearColor(0, 0, 0, 1);
|
||||
|
||||
glw.glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
ogl3_log("OpenGL information: [%s] %s (%s)\n", glw.glGetString(GL_VENDOR), glw.glGetString(GL_RENDERER), glw.glGetString(GL_VERSION));
|
||||
gl_version[0] = gl_version[1] = -1;
|
||||
glw.glGetIntegerv(GL_MAJOR_VERSION, &gl_version[0]);
|
||||
glw.glGetIntegerv(GL_MINOR_VERSION, &gl_version[1]);
|
||||
if (gl_version[0] < 3) {
|
||||
throw opengl_init_error(tr("OpenGL version 3.0 or greater is required. Current GLSL version is %1.%2").arg(gl_version[0]).arg(gl_version[1]));
|
||||
throw opengl_init_error(tr("OpenGL version 3.0 or greater is required. Current version is %1.%2").arg(gl_version[0]).arg(gl_version[1]));
|
||||
}
|
||||
ogl3_log("Using OpenGL %s\n", glw.glGetString(GL_VERSION));
|
||||
ogl3_log("Using Shading Language %s\n", glw.glGetString(GL_SHADING_LANGUAGE_VERSION));
|
||||
@@ -897,20 +901,20 @@ OpenGLRenderer::initialize()
|
||||
|
||||
glw.glEnable(GL_TEXTURE_2D);
|
||||
|
||||
//renderTimer->start(75);
|
||||
// renderTimer->start(75);
|
||||
if (video_framerate != -1) {
|
||||
renderTimer->start(ceilf(1000.f / (float)video_framerate));
|
||||
renderTimer->start(ceilf(1000.f / (float) video_framerate));
|
||||
}
|
||||
|
||||
scene_texture.data = NULL;
|
||||
scene_texture.width = 2048;
|
||||
scene_texture.height = 2048;
|
||||
scene_texture.internal_format = GL_RGB8;
|
||||
scene_texture.format = GL_BGR;
|
||||
scene_texture.internal_format = GL_RGBA8;
|
||||
scene_texture.format = GL_RGBA;
|
||||
scene_texture.type = GL_UNSIGNED_INT_8_8_8_8_REV;
|
||||
scene_texture.wrap_mode = GL_CLAMP_TO_BORDER;
|
||||
scene_texture.min_filter = scene_texture.mag_filter = video_filter_method ? GL_LINEAR : GL_NEAREST;
|
||||
scene_texture.mipmap = 0;
|
||||
scene_texture.mipmap = 0;
|
||||
|
||||
create_texture(&scene_texture);
|
||||
|
||||
@@ -1104,10 +1108,6 @@ OpenGLRenderer::initialize()
|
||||
|
||||
emit initialized();
|
||||
|
||||
glw.glClearColor(0, 0, 0, 1);
|
||||
|
||||
glw.glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
context->swapBuffers(this);
|
||||
} catch (const opengl_init_error &e) {
|
||||
/* Mark all buffers as in use */
|
||||
@@ -1227,7 +1227,7 @@ OpenGLRenderer::resizeEvent(QResizeEvent *event)
|
||||
destination.y(),
|
||||
destination.width(),
|
||||
destination.height());
|
||||
|
||||
|
||||
if (video_framerate == -1)
|
||||
render();
|
||||
}
|
||||
@@ -1387,7 +1387,7 @@ OpenGLRenderer::event(QEvent *event)
|
||||
return res;
|
||||
}
|
||||
|
||||
QDialog*
|
||||
QDialog *
|
||||
OpenGLRenderer::getOptions(QWidget *parent)
|
||||
{
|
||||
return new OpenGLShaderManagerDialog(parent);
|
||||
@@ -1426,7 +1426,7 @@ OpenGLRenderer::render()
|
||||
glw.glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, video_filter_method ? GL_LINEAR : GL_NEAREST);
|
||||
glw.glBindTexture(GL_TEXTURE_2D, 0);
|
||||
|
||||
GLfloat orig_output_size[] = { (GLfloat)window_rect.w, (GLfloat)window_rect.h };
|
||||
GLfloat orig_output_size[] = { (GLfloat) window_rect.w, (GLfloat) window_rect.h };
|
||||
|
||||
if (active_shader->srgb)
|
||||
glw.glEnable(GL_FRAMEBUFFER_SRGB);
|
||||
@@ -1507,8 +1507,8 @@ OpenGLRenderer::render()
|
||||
|
||||
/* loop through each pass */
|
||||
for (int i = 0; i < shader->num_passes; ++i) {
|
||||
bool resetFiltering = false;
|
||||
struct shader_pass *pass = &shader->passes[i];
|
||||
bool resetFiltering = false;
|
||||
struct shader_pass *pass = &shader->passes[i];
|
||||
|
||||
memcpy(pass->state.input_size, input->state.output_size, 2 * sizeof(GLfloat));
|
||||
memcpy(pass->state.input_texture_size, input->state.output_texture_size, 2 * sizeof(GLfloat));
|
||||
@@ -1696,27 +1696,27 @@ OpenGLRenderer::render()
|
||||
}
|
||||
|
||||
if (monitors[r_monitor_index].mon_screenshots) {
|
||||
int width = destination.width(), height = destination.height();
|
||||
int width = destination.width(), height = destination.height();
|
||||
char path[1024];
|
||||
char fn[256];
|
||||
|
||||
|
||||
memset(fn, 0, sizeof(fn));
|
||||
memset(path, 0, sizeof(path));
|
||||
|
||||
|
||||
path_append_filename(path, usr_path, SCREENSHOT_PATH);
|
||||
|
||||
|
||||
if (!plat_dir_check(path))
|
||||
plat_dir_create(path);
|
||||
|
||||
|
||||
path_slash(path);
|
||||
strcat(path, "Monitor_");
|
||||
snprintf(&path[strlen(path)], 42, "%d_", r_monitor_index + 1);
|
||||
|
||||
plat_tempfile(fn, NULL, (char*)".png");
|
||||
|
||||
plat_tempfile(fn, NULL, (char *) ".png");
|
||||
strcat(path, fn);
|
||||
|
||||
unsigned char *rgb = (unsigned char *) calloc(1, (size_t) width * height * 4);
|
||||
|
||||
|
||||
glw.glFinish();
|
||||
glw.glReadPixels(window_rect.x, window_rect.y, width, height, GL_RGB, GL_UNSIGNED_BYTE, rgb);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user