diff --git a/.gitignore b/.gitignore index 35f3dc8af..eb01732fb 100644 --- a/.gitignore +++ b/.gitignore @@ -37,3 +37,4 @@ Makefile # Visual Studio Code /.vs /.vscode +src/win/RCa04980 diff --git a/src/86box.c b/src/86box.c index 8f9338920..908bef06f 100644 --- a/src/86box.c +++ b/src/86box.c @@ -27,6 +27,9 @@ #include #include #include +#ifndef _WIN32 +#include +#endif #ifdef __APPLE__ #include #include @@ -583,9 +586,13 @@ usage: } if (vmrp && (path2[0] == '\0')) { +#ifdef __APPLE__ + sprintf("%s/Library/Application Support/86Box/roms", getenv("HOME") ? getenv("HOME") : getpwuid(getuid())->pw_dir); +#else strcpy(path2, usr_path); plat_path_slash(path2); strcat(path2, "roms"); +#endif plat_path_slash(path2); } @@ -709,12 +716,7 @@ usage: /* Load the desired language */ if (lang_init) lang_id = lang_init; - - lang_init = lang_id; - lang_id = 0; - if (lang_init) - set_language(lang_init); - + /* All good! */ return(1); } diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c315c5376..fde99e3f0 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -89,7 +89,7 @@ if(APPLE) set(CMAKE_MACOSX_BUNDLE 1) # setting our compilation target to macOS Mojave (macOS version 10.14), can be eventually changed to macOS 10.13 High Sierra - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14") + set(CMAKE_OSX_DEPLOYMENT_TARGET "10.13") # set the Info.plist properly set_target_properties(86Box PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/mac/Info.plist.in) diff --git a/src/config.c b/src/config.c index 57bdf5508..e302b0b48 100644 --- a/src/config.c +++ b/src/config.c @@ -573,6 +573,12 @@ load_general(void) lang_id = plat_language_code(p); } + p = config_get_string(cat, "iconset", NULL); + if (p != NULL) + strcpy(icon_set, p); + else + strcpy(icon_set, ""); + #if USE_DISCORD enable_discord = !!config_get_int(cat, "enable_discord", 0); #endif @@ -2230,6 +2236,11 @@ save_general(void) plat_language_code_r(lang_id, buffer, 511); config_set_string(cat, "language", buffer); } + + if (!strcmp(icon_set, "")) + config_delete_var(cat, "iconset"); + else + config_set_string(cat, "iconset", icon_set); #if USE_DISCORD if (enable_discord) diff --git a/src/cpu/x86_ops_misc.h b/src/cpu/x86_ops_misc.h index e630c685b..a6e7e9193 100644 --- a/src/cpu/x86_ops_misc.h +++ b/src/cpu/x86_ops_misc.h @@ -607,8 +607,6 @@ static int opF7_l_a32(uint32_t fetchdat) static int opHLT(uint32_t fetchdat) { - pclog("HLT: CS = %04X, DS = %04X, ES = %04X, SS = %04X, IP = %04X\n", CS, DS, ES, SS, cpu_state.pc); - if ((CPL || (cpu_state.eflags&VM_FLAG)) && (cr0&1)) { x86gpf(NULL,0); diff --git a/src/include/86box/86box.h b/src/include/86box/86box.h index c27f1d93e..f56757f38 100644 --- a/src/include/86box/86box.h +++ b/src/include/86box/86box.h @@ -97,6 +97,7 @@ extern int window_w, window_h, /* (C) window size and */ invert_display, /* (C) invert the display */ suppress_overscan; /* (C) suppress overscans */ extern uint32_t lang_id; /* (C) language code identifier */ +extern char icon_set[256]; /* (C) iconset identifier */ extern int scale; /* (C) screen scale factor */ extern int dpi_scale; /* (C) DPI scaling of the emulated screen */ extern int vid_api; /* (C) video renderer */ diff --git a/src/include/86box/resource.h b/src/include/86box/resource.h index 2a13b01f1..d05409e0d 100644 --- a/src/include/86box/resource.h +++ b/src/include/86box/resource.h @@ -265,8 +265,10 @@ #define IDC_COMBO_RPM_MODE 1202 #define IDC_COMBO_LANG 1009 /* change language dialog */ +#define IDC_COMBO_ICON 1010 #define IDC_CHECKBOX_GLOBAL 1300 #define IDC_BUTTON_DEFAULT 1302 +#define IDC_BUTTON_DEFICON 1304 /* For the DeviceConfig code, re-do later. */ #define IDC_CONFIG_BASE 1300 diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index 9022a4a86..4380e041b 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -226,6 +226,8 @@ extern void ati68860_hwcursor_draw(svga_t *svga, int displine); extern void att49x_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *p, svga_t *svga); extern uint8_t att49x_ramdac_in(uint16_t addr, int rs2, void *p, svga_t *svga); +extern void att498_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *p, svga_t *svga); +extern uint8_t att498_ramdac_in(uint16_t addr, int rs2, void *p, svga_t *svga); extern float av9194_getclock(int clock, void *p); extern void bt48x_ramdac_out(uint16_t addr, int rs2, int rs3, uint8_t val, void *p, svga_t *svga); @@ -278,6 +280,7 @@ extern const device_t ati68860_ramdac_device; extern const device_t att490_ramdac_device; extern const device_t att491_ramdac_device; extern const device_t att492_ramdac_device; +extern const device_t att498_ramdac_device; extern const device_t av9194_device; extern const device_t bt484_ramdac_device; extern const device_t att20c504_ramdac_device; diff --git a/src/include/86box/video.h b/src/include/86box/video.h index 166770154..3e0c74ce9 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -226,24 +226,28 @@ extern const device_t compaq_ati28800_device; extern const device_t ati28800_wonderxl24_device; #endif -/* Cirrus Logic CL-GD 54xx */ +/* Cirrus Logic GD54xx */ extern const device_t gd5401_isa_device; extern const device_t gd5402_isa_device; extern const device_t gd5402_onboard_device; extern const device_t gd5420_isa_device; extern const device_t gd5422_isa_device; extern const device_t gd5424_vlb_device; +extern const device_t gd5426_isa_device; +extern const device_t gd5426_diamond_speedstar_pro_a1_isa_device; extern const device_t gd5426_vlb_device; extern const device_t gd5426_onboard_device; extern const device_t gd5428_isa_device; extern const device_t gd5428_vlb_device; +extern const device_t gd5428_diamond_speedstar_pro_b1_vlb_device; extern const device_t gd5428_mca_device; extern const device_t gd5428_onboard_device; extern const device_t gd5429_isa_device; extern const device_t gd5429_vlb_device; -extern const device_t gd5430_vlb_device; +extern const device_t gd5430_diamond_speedstar_pro_se_a8_vlb_device; extern const device_t gd5430_pci_device; extern const device_t gd5434_isa_device; +extern const device_t gd5434_diamond_speedstar_64_a3_isa_device; extern const device_t gd5434_onboard_pci_device; extern const device_t gd5434_vlb_device; extern const device_t gd5434_pci_device; @@ -369,6 +373,7 @@ extern const device_t s3_mirocrystal_20sv_964_pci_device; extern const device_t s3_mirocrystal_20sd_864_vlb_device; extern const device_t s3_phoenix_vision864_pci_device; extern const device_t s3_phoenix_vision864_vlb_device; +extern const device_t s3_9fx_531_pci_device; extern const device_t s3_phoenix_vision868_pci_device; extern const device_t s3_phoenix_vision868_vlb_device; extern const device_t s3_diamond_stealth64_pci_device; @@ -376,6 +381,7 @@ extern const device_t s3_diamond_stealth64_vlb_device; extern const device_t s3_diamond_stealth64_964_pci_device; extern const device_t s3_diamond_stealth64_964_vlb_device; extern const device_t s3_mirovideo_40sv_ergo_968_pci_device; +extern const device_t s3_9fx_771_pci_device; extern const device_t s3_phoenix_vision968_pci_device; extern const device_t s3_phoenix_vision968_vlb_device; extern const device_t s3_spea_mercury_p64v_pci_device; diff --git a/src/include/86box/win.h b/src/include/86box/win.h index 33e55f1d4..333b6fbee 100644 --- a/src/include/86box/win.h +++ b/src/include/86box/win.h @@ -107,6 +107,7 @@ extern HWND hwndMain, hwndRender; extern HANDLE ghMutex; extern HICON hIcon[256]; +extern int dpi; extern RECT oldclip; extern int sbar_height, user_resize; extern int acp_utf8; @@ -122,8 +123,6 @@ extern uint8_t filterindex; extern void ResizeWindowByClientArea(HWND hwnd, int width, int height); extern void InitCrashDump(void); -extern HICON LoadIconEx(PCTSTR pszIconName); - /* Emulator start/stop support functions. */ extern void do_start(void); extern void do_stop(void); @@ -150,6 +149,11 @@ extern int win_get_system_metrics(int i, int dpi); extern LPARAM win_get_string(int id); +extern void win_clear_icon_set(); +extern void win_system_icon_set(); +extern void win_load_icon_set(); +extern void win_get_icons_path(char* path_root); + extern intptr_t fdd_type_to_icon(int type); #ifdef EMU_DEVICE_H @@ -239,6 +243,9 @@ extern void media_menu_update_cdrom(int id); extern void media_menu_update_zip(int id); extern void media_menu_update_mo(int id); +/* Functions in win_ui.c */ +extern HMENU menuMain; +extern void ResetAllMenus(); #ifdef __cplusplus } diff --git a/src/mac/macOSXGlue.h b/src/mac/macOSXGlue.h new file mode 100644 index 000000000..cd3a880bd --- /dev/null +++ b/src/mac/macOSXGlue.h @@ -0,0 +1,23 @@ +// +// macOSXGlue.h +// TestSDL +// +// Created by Jerome Vernet on 18/11/2021. +// Copyright © 2021 Jerome Vernet. All rights reserved. +// + +#ifndef macOSXGlue_h +#define macOSXGlue_h + +#include + +CF_IMPLICIT_BRIDGING_ENABLED +CF_EXTERN_C_BEGIN +void getDefaultROMPath(char*); +int toto(); + +CF_EXTERN_C_END +CF_IMPLICIT_BRIDGING_DISABLED + + +#endif /* macOSXGlue_h */ diff --git a/src/mac/macOSXGlue.m b/src/mac/macOSXGlue.m new file mode 100644 index 000000000..07b8c3552 --- /dev/null +++ b/src/mac/macOSXGlue.m @@ -0,0 +1,45 @@ +// +// macOSXGlue.m +// 86BOx MacoSx Glue.... +// Todo: so much +// Created by Jerome Vernet on 18/11/2021. +// Copyright © 2021 Jerome Vernet. All rights reserved. +// + +#import + +void getDefaultROMPath(char* Path) +{ + NSFileManager* sharedFM = [NSFileManager defaultManager]; + NSArray* possibleURLs = [sharedFM URLsForDirectory:NSApplicationSupportDirectory + inDomains:NSUserDomainMask]; + NSURL* appSupportDir = nil; + NSURL* appDirectory = nil; + + if ([possibleURLs count] >= 1) { + // Use the first directory (if multiple are returned) + appSupportDir = [possibleURLs objectAtIndex:0]; + } + + // If a valid app support directory exists, add the + // app's bundle ID to it to specify the final directory. + if (appSupportDir) { + NSString* appBundleID = [[NSBundle mainBundle] bundleIdentifier]; + appDirectory = [appSupportDir URLByAppendingPathComponent:appBundleID]; + appDirectory=[appDirectory URLByAppendingPathComponent:@"roms"]; + } + // create ~/Library/Application Support/... stuff + + NSError* theError = nil; + if (![sharedFM createDirectoryAtURL:appDirectory withIntermediateDirectories:YES + attributes:nil error:&theError]) + { + // Handle the error. + NSLog(@"Error creating user library rom path"); + } else NSLog(@"Create user rom path sucessfull"); + + strcpy(Path,[appDirectory fileSystemRepresentation]); + // return appDirectory; +} + + diff --git a/src/machine/CMakeLists.txt b/src/machine/CMakeLists.txt index c20d21a75..d2500561a 100644 --- a/src/machine/CMakeLists.txt +++ b/src/machine/CMakeLists.txt @@ -24,10 +24,6 @@ add_library(mch OBJECT machine.c machine_table.c m_xt.c m_xt_compaq.c m_at_sockets7.c m_at_socket8.c m_at_slot1.c m_at_slot2.c m_at_socket370.c m_at_misc.c) -if(HEDAKA) - target_compile_definitions(mch PRIVATE USE_HEDAKA) -endif() - if(LASERXT) target_sources(mch PRIVATE m_xt_laserxt.c) target_compile_definitions(mch PRIVATE USE_LASERXT) diff --git a/src/machine/m_at_386dx_486.c b/src/machine/m_at_386dx_486.c index 50718475b..43d03c385 100644 --- a/src/machine/m_at_386dx_486.c +++ b/src/machine/m_at_386dx_486.c @@ -988,7 +988,7 @@ machine_at_4dps_init(const machine_t *model) pci_register_slot(0x07, PCI_CARD_NORMAL, 4, 1, 2, 3); device_add(&w83787f_device); - device_add(&keyboard_at_ami_device); + device_add(&keyboard_ps2_ami_device); device_add(&intel_flash_bxt_device); diff --git a/src/machine/m_at_socket4_5.c b/src/machine/m_at_socket4_5.c deleted file mode 100644 index c876844ad..000000000 --- a/src/machine/m_at_socket4_5.c +++ /dev/null @@ -1,781 +0,0 @@ -/* - * 86Box A hypervisor and IBM PC system emulator that specializes in - * running old operating systems and software designed for IBM - * PC systems and compatibles from 1981 through fairly recent - * system designs based on the PCI bus. - * - * This file is part of the 86Box distribution. - * - * Implementation of Socket 4 and 5 machines. - * - * - * - * Authors: Sarah Walker, - * Miran Grca, - * - * Copyright 2010-2019 Sarah Walker. - * Copyright 2016-2019 Miran Grca. - */ -#include -#include -#include -#include -#include -#include <86box/86box.h> -#include <86box/mem.h> -#include <86box/io.h> -#include <86box/rom.h> -#include <86box/pci.h> -#include <86box/device.h> -#include <86box/chipset.h> -#include <86box/fdc_ext.h> -#include <86box/hdc.h> -#include <86box/hdc_ide.h> -#include <86box/timer.h> -#include <86box/fdd.h> -#include <86box/fdc.h> -#include <86box/keyboard.h> -#include <86box/flash.h> -#include <86box/nvr.h> -#include <86box/scsi_ncr53c8xx.h> -#include <86box/sio.h> -#include <86box/video.h> -#include <86box/machine.h> - -int -machine_at_excalibur_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_inverted("roms/machines/excalibur/S75P.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&opti5x7_device); - device_add(&ide_opti611_vlb_device); - device_add(&fdc37c661_device); - device_add(&keyboard_at_ami_device); - - return ret; -} -int -machine_at_pat54pv_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/pat54pv/pat54pv.bin", - 0x000f0000, 65536, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - device_add(&opti5x7_device); - device_add(&keyboard_at_ami_device); - - if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} -int -machine_at_hot543_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/hot543/543_R21.BIN", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); - device_add(&opti5x7_device); - device_add(&opti822_device); - device_add(&sst_flash_29ee010_device); - device_add(&keyboard_at_device); - - if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -int -machine_at_p54vl_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/p54vl/SM507.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x10, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x11, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x12, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x13, PCI_CARD_NORMAL, 3, 4, 1, 2); - device_add(&opti5x7_device); - device_add(&opti822_device); - device_add(&sst_flash_29ee010_device); - device_add(&keyboard_at_ami_device); - - if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); - - return ret; -} - -static void -machine_at_premiere_common_init(const machine_t *model, int pci_switch) -{ - machine_at_common_init(model); - device_add(&ide_pci_2ch_device); - - pci_init(PCI_CONFIG_TYPE_2 | pci_switch); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x06, PCI_CARD_NORMAL, 3, 2, 1, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); - pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_intel_ami_pci_device); - device_add(&sio_zb_device); - device_add(&fdc37c665_device); - device_add(&intel_flash_bxt_ami_device); -} - - -static void -machine_at_award_common_init(const machine_t *model) -{ - machine_at_common_init(model); - device_add(&ide_pci_2ch_device); - - pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 03 = Slot 1 */ - pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ - pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 05 = Slot 3 */ - pci_register_slot(0x06, PCI_CARD_NORMAL, 4, 1, 2, 3); /* 06 = Slot 4 */ - pci_register_slot(0x07, PCI_CARD_SCSI, 1, 2, 3, 4); /* 07 = SCSI */ - pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - - if (fdc_type == FDC_INTERNAL) - device_add(&fdc_at_device); - - device_add(&keyboard_ps2_pci_device); -} - - -int -machine_at_batman_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_combined("roms/machines/revenge/1009af2_.bio", - "roms/machines/revenge/1009af2_.bi1", 0x1c000, 128); - - if (bios_only || !ret) - return ret; - - machine_at_premiere_common_init(model, 0); - - device_add(&i430lx_device); - - return ret; -} - - -int -machine_at_dellxp60_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_inverted("roms/machines/dellxp60/XP60-A08.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - device_add(&ide_pci_2ch_device); - - pci_init(PCI_CONFIG_TYPE_2); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - /* Not: 00, 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C, 0D, 0E, 0F. */ - /* Yes: 01, 10, 11, 12, 13, 14. */ - pci_register_slot(0x01, PCI_CARD_NORMAL, 1, 3, 2, 4); - pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 4, 3, 3); - pci_register_slot(0x05, PCI_CARD_NORMAL, 1, 4, 3, 2); - pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&i430lx_device); - device_add(&keyboard_ps2_intel_ami_pci_device); - device_add(&sio_zb_device); - device_add(&fdc37c665_device); - device_add(&intel_flash_bxt_ami_device); - - return ret; -} - - -int -machine_at_opti560l_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_inverted("roms/machines/opti560l/560L_A06.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - device_add(&ide_pci_2ch_device); - - pci_init(PCI_CONFIG_TYPE_2); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_NORMAL, 4, 4, 3, 3); - pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 4, 3, 2); - pci_register_slot(0x08, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&i430lx_device); - device_add(&keyboard_ps2_intel_ami_pci_device); - device_add(&sio_zb_device); - device_add(&i82091aa_device); - device_add(&intel_flash_bxt_ami_device); - - return ret; -} - - -int -machine_at_ambradp60_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_combined("roms/machines/ambradp60/1004AF1P.BIO", - "roms/machines/ambradp60/1004AF1P.BI1", 0x1c000, 128); - - if (bios_only || !ret) - return ret; - - machine_at_premiere_common_init(model, 0); - - device_add(&i430lx_device); - - return ret; -} - - -int -machine_at_valuepointp60_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_combined("roms/machines/valuepointp60/1006AV0M.BIO", - "roms/machines/valuepointp60/1006AV0M.BI1", 0x1d000, 128); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - device_add(&ide_pci_2ch_device); - - pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x06, PCI_CARD_NORMAL, 3, 2, 1, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); - pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ps1_pci_device); - device_add(&sio_device); - device_add(&fdc37c665_device); - device_add(&intel_flash_bxt_ami_device); - - device_add(&i430lx_device); - - return ret; -} - - -int -machine_at_pb520r_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_combined("roms/machines/pb520r/1009bc0r.bio", - "roms/machines/pb520r/1009bc0r.bi1", 0x1c000, 128); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_2); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_IDE, 0, 0, 0, 0); - pci_register_slot(0x03, PCI_CARD_VIDEO, 3, 3, 3, 3); - pci_register_slot(0x06, PCI_CARD_NORMAL, 3, 2, 1, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 1, 3, 4); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 3, 2, 4); - pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&i430lx_device); - device_add(&ide_cmd640_pci_single_channel_device); - - if (gfxcard == VID_INTERNAL) - device_add(&gd5434_onboard_pci_device); - - device_add(&keyboard_ps2_pci_device); - device_add(&sio_zb_device); - device_add(&i82091aa_ide_device); - device_add(&intel_flash_bxt_ami_device); - - return ret; -} - -const device_t * -at_pb520r_get_device(void) -{ - return &gd5434_onboard_pci_device; -} - - -int -machine_at_p5mp3_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/p5mp3/0205.bin", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - device_add(&ide_pci_device); - - pci_init(PCI_CONFIG_TYPE_2 | PCI_NO_IRQ_STEERING); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x05, PCI_CARD_NORMAL, 1, 2, 3, 4); /* 05 = Slot 1 */ - pci_register_slot(0x04, PCI_CARD_NORMAL, 2, 3, 4, 1); /* 04 = Slot 2 */ - pci_register_slot(0x03, PCI_CARD_NORMAL, 3, 4, 1, 2); /* 03 = Slot 3 */ - pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&fdc_at_device); - device_add(&keyboard_ps2_pci_device); - - device_add(&sio_zb_device); - device_add(&catalyst_flash_device); - device_add(&i430lx_device); - - return ret; -} - - -int -machine_at_586mc1_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/586mc1/IS.34", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_award_common_init(model); - - device_add(&sio_device); - device_add(&intel_flash_bxt_device); - device_add(&i430lx_device); - - return ret; -} - - -int -machine_at_plato_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_combined("roms/machines/plato/1016ax1_.bio", - "roms/machines/plato/1016ax1_.bi1", 0x1d000, 128); - - if (bios_only || !ret) - return ret; - - machine_at_premiere_common_init(model, PCI_CAN_SWITCH_TYPE); - - device_add(&i430nx_device); - - return ret; -} - - -int -machine_at_ambradp90_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_combined("roms/machines/ambradp90/1002AX1P.BIO", - "roms/machines/ambradp90/1002AX1P.BI1", 0x1d000, 128); - - if (bios_only || !ret) - return ret; - - machine_at_premiere_common_init(model, PCI_CAN_SWITCH_TYPE); - - device_add(&i430nx_device); - - return ret; -} - - -int -machine_at_430nx_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/430nx/IP.20", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_award_common_init(model); - - device_add(&sio_device); - device_add(&intel_flash_bxt_device); - device_add(&i430nx_device); - - return ret; -} - - -int -machine_at_endeavor_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_combined("roms/machines/endeavor/1006cb0_.bio", - "roms/machines/endeavor/1006cb0_.bi1", 0x1d000, 128); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_VIDEO, 4, 0, 0, 0); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x10, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - - if (gfxcard == VID_INTERNAL) - device_add(&s3_phoenix_trio64_onboard_pci_device); - - device_add(&keyboard_ps2_intel_ami_pci_device); - device_add(&i430fx_device); - device_add(&piix_device); - device_add(&pc87306_device); - device_add(&intel_flash_bxt_ami_device); - - return ret; -} - - -const device_t * -at_endeavor_get_device(void) -{ - return &s3_phoenix_trio64_onboard_pci_device; -} - - -int -machine_at_zappa_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear_combined("roms/machines/zappa/1006bs0_.bio", - "roms/machines/zappa/1006bs0_.bi1", 0x20000, 128); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_intel_ami_pci_device); - device_add(&i430fx_device); - device_add(&piix_device); - device_add(&pc87306_device); - device_add(&intel_flash_bxt_ami_device); - - return ret; -} - - -int -machine_at_mb500n_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/mb500n/031396s.bin", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x14, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x13, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x12, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x11, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_pci_device); - device_add(&i430fx_device); - device_add(&piix_device); - device_add(&fdc37c665_device); - device_add(&intel_flash_bxt_device); - - return ret; -} - - -int -machine_at_apollo_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/apollo/S728P.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init_ex(model, 2); - device_add(&ami_apollo_nvr_device); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x09, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 4, 1, 2, 3); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - device_add(&keyboard_ps2_ami_pci_device); - device_add(&i430fx_device); - device_add(&piix_device); - device_add(&pc87332_398_device); - device_add(&intel_flash_bxt_device); - - return ret; -} - - -int -machine_at_powermatev_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/powermatev/BIOS.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x08, PCI_CARD_NORMAL, 0, 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); - device_add(&keyboard_ps2_ami_pci_device); - device_add(&i430fx_device); - device_add(&piix_device); - device_add(&fdc37c665_device); - device_add(&intel_flash_bxt_device); - - return ret; -} - - -int -machine_at_acerv30_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/acerv30/V30R01N9.BIN", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x07, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x12, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x11, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x14, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&i430fx_device); - device_add(&piix_device); - device_add(&keyboard_ps2_acer_pci_device); - device_add(&fdc37c665_device); - - device_add(&sst_flash_29ee010_device); - - return ret; -} - - -static void -machine_at_sp4_common_init(const machine_t *model) -{ - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - /* Excluded: 02, 03, 04, 05, 06, 07, 08, 09, 0A, 0B, 0C, 0D, 0E, 0F, 10, 11, 12, 13, 14 */ - pci_register_slot(0x0D, PCI_CARD_IDE, 1, 2, 3, 4); - /* Excluded: 02, 03*, 04*, 05*, 06*, 07*, 08* */ - /* Slots: 09 (04), 0A (03), 0B (02), 0C (07) */ - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0B, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0A, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x09, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&sis_85c50x_device); - device_add(&ide_cmd640_pci_device); - device_add(&keyboard_ps2_ami_pci_device); - device_add(&fdc37c665_device); - device_add(&intel_flash_bxt_device); -} - - -int -machine_at_p5sp4_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/p5sp4/0106.001", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_sp4_common_init(model); - - return ret; -} - - -int -machine_at_p54sp4_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/p54sp4/SI5I0204.AWD", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_sp4_common_init(model); - - return ret; -} - - -int -machine_at_sq588_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/sq588/sq588b03.rom", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x01, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - /* Correct: 0D (01), 0F (02), 11 (03), 13 (04) */ - pci_register_slot(0x02, PCI_CARD_IDE, 1, 2, 3, 4); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x11, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x13, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&sis_85c50x_device); - device_add(&ide_cmd640_pci_single_channel_device); - device_add(&keyboard_ps2_ami_pci_device); - device_add(&fdc37c665_ide_device); - device_add(&sst_flash_29ee010_device); - - return ret; -} - -int -machine_at_hot539_init(const machine_t *model) -{ - int ret; - - ret = bios_load_linear("roms/machines/hot539/539_R17.ROM", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_at_common_init(model); - - pci_init(PCI_CONFIG_TYPE_1); - pci_register_slot(0x00, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x12, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0); - pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x15, PCI_CARD_NORMAL, 1, 2, 3, 4); - pci_register_slot(0x0D, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x16, PCI_CARD_NORMAL, 2, 3, 4, 1); - pci_register_slot(0x0E, PCI_CARD_NORMAL, 3, 4, 1, 2); - pci_register_slot(0x0F, PCI_CARD_NORMAL, 4, 1, 2, 3); - device_add(&umc_8890_device); - device_add(&umc_8886af_device); - device_add(&intel_flash_bxt_device); - device_add(&keyboard_ps2_ami_pci_device); - device_add(&um8669f_device); - - return ret; -} \ No newline at end of file diff --git a/src/machine/m_ps2_mca.c b/src/machine/m_ps2_mca.c index b1b611d94..db53f8047 100644 --- a/src/machine/m_ps2_mca.c +++ b/src/machine/m_ps2_mca.c @@ -1361,30 +1361,6 @@ machine_ps2_model_70_type3_init(const machine_t *model) } -#if defined(DEV_BRANCH) && defined(USE_PS2M70T4) -int -machine_ps2_model_70_type4_init(const machine_t *model) -{ - int ret; - - ret = bios_load_interleaved("roms/machines/ibmps2_m70_type4/70-b_even.bin", - "roms/machines/ibmps2_m70_type4/70-b_odd.bin", - 0x000e0000, 131072, 0); - - if (bios_only || !ret) - return ret; - - machine_ps2_common_init(model); - - ps2.planar_id = 0xfcff; - - ps2_mca_board_model_70_type34_init(1, 4); - - return ret; -} -#endif - - int machine_ps2_model_80_init(const machine_t *model) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 250661934..3047b7958 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -201,7 +201,7 @@ const machine_t machines[] = { /* Most likely has AMI 'F' KBC firmware. */ { "[GC103] Trigem 286M", "tg286m", MACHINE_TYPE_286, CPU_PKG_286, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_IDE, 512, 8192, 128, 127, machine_at_tg286m_init, NULL }, /* This has "AMI KEYBOARD BIOS", most likely 'F'. */ - { "[NEAT] Dataexpert 286", "ami286", MACHINE_TYPE_286, CPU_PKG_286, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 512, 8192, 128, 127, machine_at_neat_ami_init, NULL }, + { "[NEAT] DataExpert 286", "ami286", MACHINE_TYPE_286, CPU_PKG_286, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 512, 8192, 128, 127, machine_at_neat_ami_init, NULL }, /* Has IBM AT KBC firmware. */ { "[NEAT] NCR 3302", "3302", MACHINE_TYPE_286, CPU_PKG_286, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_VIDEO, 512, 16384, 128, 127, machine_at_3302_init, NULL }, /* Has IBM AT KBC firmware. */ @@ -257,7 +257,7 @@ const machine_t machines[] = { /* Has an unknown KBC firmware with commands B8 and BB in the style of Phoenix MultiKey and AMIKey-3(!), but also commands E1 and EA with unknown functions. */ - { "[Intel 82335 ADI 386SX", "adi386sx", MACHINE_TYPE_386SX, CPU_PKG_386SX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 512, 8192, 128, 127, machine_at_adi386sx_init, NULL }, + { "[Intel 82335] ADI 386SX", "adi386sx", MACHINE_TYPE_386SX, CPU_PKG_386SX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 512, 8192, 128, 127, machine_at_adi386sx_init, NULL }, /* Has an AMI Keyboard BIOS PLUS KBC firmware ('8'). */ { "[Intel 82335] Shuttle 386SX", "shuttle386sx", MACHINE_TYPE_386SX, CPU_PKG_386SX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 512, 8192, 128, 127, machine_at_shuttle386sx_init, NULL }, /* Uses Commodore (CBM) KBC firmware, to be implemented as identical to @@ -304,7 +304,7 @@ const machine_t machines[] = { /* Has IBM AT KBC firmware. */ { "[ISA] Micronics 09-00021", "micronics386", MACHINE_TYPE_386DX, CPU_PKG_386DX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 512, 8192, 128, 127, machine_at_micronics386_init, NULL }, /* Has AMIKey F KBC firmware. */ - { "[SiS 310] ASUS ISA-386C", "asus386", MACHINE_TYPE_386DX, CPU_PKG_386DX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 1024, 32768, 1024, 127, machine_at_asus386_init, NULL }, + { "[SiS 310] ASUS ISA-386C", "asus386", MACHINE_TYPE_386DX, CPU_PKG_386DX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 1024, 65536, 1024, 127, machine_at_asus386_init, NULL }, /* 386DX machines which utilize the MCA bus */ /* Has IBM PS/2 Type 1 KBC firmware. */ @@ -319,9 +319,9 @@ const machine_t machines[] = { Phoenix MultiKey commands. */ { "[OPTi 495] Award 486 clone", "award495", MACHINE_TYPE_386DX_486, CPU_PKG_386DX | CPU_PKG_SOCKET1, 0, 0, 0, 0, 0, 0, 0, MACHINE_VLB | MACHINE_IDE, 1024, 32768, 1024, 127, machine_at_opti495_init, NULL }, /* Has AMIKey F KBC firmware. */ - { "[OPTi 495] Dataexpert SX495", "ami495", MACHINE_TYPE_386DX_486, CPU_PKG_386DX | CPU_PKG_SOCKET1, 0, 0, 0, 0, 0, 0, 0, MACHINE_VLB | MACHINE_IDE, 1024, 32768, 1024, 127, machine_at_opti495_ami_init, NULL }, + { "[OPTi 495] DataExpert SX495", "ami495", MACHINE_TYPE_386DX_486, CPU_PKG_386DX | CPU_PKG_SOCKET1, 0, 0, 0, 0, 0, 0, 0, MACHINE_VLB | MACHINE_IDE, 1024, 32768, 1024, 127, machine_at_opti495_ami_init, NULL }, /* Has AMIKey F KBC firmware (it's just the MR BIOS for the above machine). */ - { "[OPTi 495] Dataexpert SX495 (MR BIOS)", "mr495", MACHINE_TYPE_386DX_486, CPU_PKG_386DX | CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_VLB | MACHINE_IDE, 1024, 32768, 1024, 127, machine_at_opti495_mr_init, NULL }, + { "[OPTi 495] DataExpert SX495 (MR BIOS)", "mr495", MACHINE_TYPE_386DX_486, CPU_PKG_386DX | CPU_PKG_SOCKET3, 0, 0, 0, 0, 0, 0, 0, MACHINE_VLB | MACHINE_IDE, 1024, 32768, 1024, 127, machine_at_opti495_mr_init, NULL }, /* 486 machines - Socket 1 */ /* Has JetKey 5 KBC Firmware which looks like it is a clone of AMIKey type F. @@ -524,7 +524,7 @@ const machine_t machines[] = { { "[OPTi 597] Supermicro P5VL-PCI", "p5vl", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_VLB, 8192, 131072, 8192, 127, machine_at_p5vl_init, NULL }, /* SiS 50x */ - /* This has an unknown AMI KBC firmware, most likely AMIKey / type 'F'. */ + /* This has some form of AMI MegaKey as it uses keyboard controller command 0xCC. */ { "[SiS 501] AMI Excalibur PCI-II Pentium ISA","excaliburpci2", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_excaliburpci2_init, NULL }, /* This has an AMIKey-2, which is an updated version of type 'H'. */ { "[SiS 501] ASUS PCI/I-P5SP4", "p5sp4", MACHINE_TYPE_SOCKET4, CPU_PKG_SOCKET4, 0, 60000000, 66666667, 5000, 5000, MACHINE_MULTIPLIER_FIXED, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_p5sp4_init, NULL }, @@ -545,7 +545,7 @@ const machine_t machines[] = { /* Has AMIKey F KBC firmware. */ { "[i430FX] AMI Apollo", "apollo", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 2.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_apollo_init, NULL }, /* Has AMIKey H KBC firmware. */ - { "[i430FX] Dataexpert EXP8551", "exp8551", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 2.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_exp8551_init, NULL }, + { "[i430FX] DataExpert EXP8551", "exp8551", MACHINE_TYPE_SOCKET5, CPU_PKG_SOCKET5_7, 0, 50000000, 66666667, 3380, 3520, 1.5, 2.0, MACHINE_PCI | MACHINE_BUS_PS2 | MACHINE_IDE_DUAL, 8192, 131072, 8192, 127, machine_at_exp8551_init, 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 . */ diff --git a/src/scsi/scsi_ncr5380.c b/src/scsi/scsi_ncr5380.c index 2413c30a5..7a6cd5ef9 100644 --- a/src/scsi/scsi_ncr5380.c +++ b/src/scsi/scsi_ncr5380.c @@ -1224,8 +1224,8 @@ ncr_callback(void *priv) ncr_log("Timer on! Host POS = %i, status = %02x, DMA mode = %i, Period = %lf\n", ncr_dev->t128.host_pos, ncr_dev->t128.status, ncr->dma_mode, scsi_device_get_callback(dev)); if (ncr_dev->t128.host_pos == MIN(512, dev->buffer_length) && ncr_dev->t128.block_count) { ncr_dev->t128.status |= 0x04; - ncr_timer_on(ncr_dev, ncr, 0); } + ncr_timer_on(ncr_dev, ncr, 0); } } else { ncr_log("DMA mode=%d, status ctrl = %02x\n", ncr->dma_mode, ncr_dev->status_ctrl); @@ -1364,7 +1364,8 @@ t128_read(uint32_t addr, void *priv) ncr_log("Transfer busy read, status = %02x, period = %lf\n", ncr_dev->t128.status, ncr_dev->period); if (ncr_dev->period == 0.2 || ncr_dev->period == 0.02) timer_on_auto(&ncr_dev->timer, 40.2); - } + } else if (ncr_dev->t128.host_pos < MIN(512, dev->buffer_length) && scsi_device_get_callback(dev) > 100.0) + cycles += 100; /*Needed to avoid timer de-syncing with transfers.*/ } } diff --git a/src/sound/midi_mt32.c b/src/sound/midi_mt32.c index 5c1325314..a012236c5 100644 --- a/src/sound/midi_mt32.c +++ b/src/sound/midi_mt32.c @@ -226,12 +226,12 @@ void* mt32emu_init(char *control_rom, char *pcm_rom) void *mt32_init(const device_t *info) { - return mt32emu_init("roms/sound/mt32/mt32_control.rom", "roms/sound/mt32/mt32_pcm.rom"); + return mt32emu_init("roms/sound/mt32/MT32_CONTROL.ROM", "roms/sound/mt32/MT32_PCM.ROM"); } void *cm32l_init(const device_t *info) { - return mt32emu_init("roms/sound/cm32l/cm32l_control.rom", "roms/sound/cm32l/cm32l_pcm.rom"); + return mt32emu_init("roms/sound/cm32l/CM32L_CONTROL.ROM", "roms/sound/cm32l/CM32L_PCM.ROM"); } void mt32_close(void* p) diff --git a/src/sound/snd_audiopci.c b/src/sound/snd_audiopci.c index d69b9a211..e93267376 100644 --- a/src/sound/snd_audiopci.c +++ b/src/sound/snd_audiopci.c @@ -964,7 +964,7 @@ es1371_outl(uint16_t port, uint32_t val, void *p) /* Sample Rate Converter Interface Register, Address 10H Addressable as longword only */ case 0x10: - dev->sr_cir = val; + dev->sr_cir = val & 0xfff8ffff; /*Bits 16 to 18 are undefined*/ if (dev->sr_cir & SRC_RAM_WE) { dev->sr_ram[dev->sr_cir >> 25] = val & 0xffff; switch (dev->sr_cir >> 25) { diff --git a/src/unix/unix.c b/src/unix/unix.c index ae786f8ad..2b949ea5f 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -51,6 +51,7 @@ SDL_threadID eventthread; static int exit_event = 0; static int fullscreen_pending = 0; uint32_t lang_id = 0x0409, lang_sys = 0x0409; // Multilangual UI variables, for now all set to LCID of en-US +char icon_set[256] = ""; /* name of the iconset to be used */ static const uint16_t sdl_to_xt[0x200] = { @@ -833,7 +834,7 @@ void monitor_thread(void* param) } else if (strncasecmp(xargv[0], "fullscreen", 10) == 0) { - video_fullscreen = 1; + video_fullscreen = video_fullscreen ? 0 : 1; fullscreen_pending = 1; } else if (strncasecmp(xargv[0], "pause", 5) == 0) @@ -1244,7 +1245,6 @@ plat_language_code_r(uint32_t lcid, char* outbuf, int len) return; } - void joystick_init(void) {} void joystick_close(void) {} void joystick_process(void) {} diff --git a/src/video/CMakeLists.txt b/src/video/CMakeLists.txt index 0c3befa62..b42bd21cb 100644 --- a/src/video/CMakeLists.txt +++ b/src/video/CMakeLists.txt @@ -24,7 +24,7 @@ add_library(vid OBJECT agpgart.c video.c vid_table.c vid_cga.c vid_cga_comp.c vid_stg_ramdac.c vid_ht216.c vid_oak_oti.c vid_paradise.c vid_rtg310x.c vid_f82c425.c vid_ti_cf62011.c vid_tvga.c vid_tgui9440.c vid_tkd8001_ramdac.c vid_att20c49x_ramdac.c vid_s3.c vid_s3_virge.c vid_ibm_rgb528_ramdac.c - vid_sdac_ramdac.c vid_ogc.c vid_nga.c vid_tvp3026_ramdac.c) + vid_sdac_ramdac.c vid_ogc.c vid_nga.c vid_tvp3026_ramdac.c vid_att2xc498_ramdac.c) if(MGA) target_compile_definitions(vid PRIVATE USE_MGA) diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c index 565418e84..23ec0a2c5 100644 --- a/src/video/vid_ati28800.c +++ b/src/video/vid_ati28800.c @@ -165,7 +165,7 @@ ati28800_out(uint16_t addr, uint8_t val, void *p) ati_eeprom_write(&ati28800->eeprom, val & 8, val & 2, val & 1); break; case 0xb6: - if ((old ^ val) & 0x11) + if ((old ^ val) & 0x10) svga_recalctimings(svga); break; case 0xb8: @@ -488,8 +488,6 @@ ati28800_recalctimings(svga_t *svga) } } } - - svga->vram_display_mask = (ati28800->regs[0xb6] & 1) ? ((ati28800->memory << 10) - 1) : 0x3ffff; } diff --git a/src/video/vid_att2xc498_ramdac.c b/src/video/vid_att2xc498_ramdac.c new file mode 100644 index 000000000..747ffe75c --- /dev/null +++ b/src/video/vid_att2xc498_ramdac.c @@ -0,0 +1,186 @@ +/* + * 86Box A hypervisor and IBM PC system emulator that specializes in + * running old operating systems and software designed for IBM + * PC systems and compatibles from 1981 through fairly recent + * system designs based on the PCI bus. + * + * This file is part of the 86Box distribution. + * + * Emulation of a AT&T 2xc498 RAMDAC. + * + * + * + * Authors: Sarah Walker, + * Miran Grca, + * + * Copyright 2008-2018 Sarah Walker. + * Copyright 2016-2018 Miran Grca. + */ +#include +#include +#include +#include +#include +#include <86box/86box.h> +#include <86box/device.h> +#include <86box/mem.h> +#include <86box/timer.h> +#include <86box/video.h> +#include <86box/vid_svga.h> + + +typedef struct +{ + int type; + int state; + int loop; + uint8_t ctrl; +} att498_ramdac_t; + +static void +att498_ramdac_control(uint8_t val, void *p, svga_t *svga) +{ + att498_ramdac_t *ramdac = (att498_ramdac_t *) p; + ramdac->ctrl = val; + + if (val == 0xff) + return; + + switch ((ramdac->ctrl >> 4) & 0x0f) { + default: + svga->bpp = 8; + break; + case 1: + if (ramdac->ctrl & 4) + svga->bpp = 15; + else + svga->bpp = 8; + break; + case 3: + case 6: + svga->bpp = 16; + break; + case 5: + case 7: + svga->bpp = 32; + break; + case 0x0e: + svga->bpp = 24; + break; + } + + svga_set_ramdac_type(svga, (ramdac->ctrl & 2) ? RAMDAC_8BIT : RAMDAC_6BIT); + svga_recalctimings(svga); +} + +void +att498_ramdac_out(uint16_t addr, int rs2, uint8_t val, void *p, svga_t *svga) +{ + att498_ramdac_t *ramdac = (att498_ramdac_t *) p; + uint8_t rs = (addr & 0x03); + rs |= ((!!rs2) << 2); + + switch (rs) { + case 0x00: + case 0x01: + case 0x03: + case 0x04: + case 0x05: + case 0x07: + svga_out(addr, val, svga); + ramdac->state = 0; + break; + case 0x02: + switch (ramdac->state) { + case 4: + att498_ramdac_control(val, ramdac, svga); + break; + default: + svga_out(addr, val, svga); + break; + } + break; + case 0x06: + att498_ramdac_control(val, ramdac, svga); + break; + } +} + + +uint8_t +att498_ramdac_in(uint16_t addr, int rs2, void *p, svga_t *svga) +{ + att498_ramdac_t *ramdac = (att498_ramdac_t *) p; + uint8_t temp = 0xff; + uint8_t rs = (addr & 0x03); + rs |= ((!!rs2) << 2); + + switch (rs) { + case 0x00: + case 0x01: + case 0x03: + case 0x04: + case 0x05: + case 0x07: + temp = svga_in(addr, svga); + ramdac->state = 0; + break; + case 0x02: + switch (ramdac->state) { + case 4: + temp = ramdac->ctrl; + ramdac->state++; + break; + case 5: + temp = 0x84; + ramdac->state++; + break; + case 6: + temp = ramdac->ctrl; + ramdac->state = 0; + break; + default: + temp = svga_in(addr, svga); + ramdac->state++; + break; + } + break; + case 0x06: + temp = ramdac->ctrl; + ramdac->state = 0; + break; + } + + return temp; +} + + +static void * +att498_ramdac_init(const device_t *info) +{ + att498_ramdac_t *ramdac = (att498_ramdac_t *) malloc(sizeof(att498_ramdac_t)); + memset(ramdac, 0, sizeof(att498_ramdac_t)); + + ramdac->type = info->local; + + return ramdac; +} + + +static void +att498_ramdac_close(void *priv) +{ + att498_ramdac_t *ramdac = (att498_ramdac_t *) priv; + + if (ramdac) + free(ramdac); +} + + +const device_t att498_ramdac_device = +{ + "AT&T 22c498 RAMDAC", + 0, 0, + att498_ramdac_init, att498_ramdac_close, + NULL, { NULL }, NULL, NULL +}; \ No newline at end of file diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index 7ba2efb3c..3055de90a 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -45,13 +45,15 @@ #define BIOS_GD5402_ONBOARD_PATH "roms/machines/cbm_sl386sx25/c000.rom" #define BIOS_GD5420_PATH "roms/video/cirruslogic/5420.vbi" #define BIOS_GD5422_PATH "roms/video/cirruslogic/cl5422.bin" -#define BIOS_GD5426_PATH "roms/video/cirruslogic/Diamond SpeedStar PRO VLB v3.04.bin" +#define BIOS_GD5426_DIAMOND_A1_ISA_PATH "roms/video/cirruslogic/diamond5426.bin" +#define BIOS_GD5428_DIAMOND_B1_VLB_PATH "roms/video/cirruslogic/Diamond SpeedStar PRO VLB v3.04.bin" #define BIOS_GD5428_ISA_PATH "roms/video/cirruslogic/5428.bin" #define BIOS_GD5428_MCA_PATH "roms/video/cirruslogic/SVGA141.ROM" #define BIOS_GD5428_PATH "roms/video/cirruslogic/vlbusjapan.BIN" #define BIOS_GD5429_PATH "roms/video/cirruslogic/5429.vbi" -#define BIOS_GD5430_VLB_PATH "roms/video/cirruslogic/diamondvlbus.bin" -#define BIOS_GD5430_PCI_PATH "roms/video/cirruslogic/pci.bin" +#define BIOS_GD5430_DIAMOND_A8_VLB_PATH "roms/video/cirruslogic/diamondvlbus.bin" +#define BIOS_GD5430_PATH "roms/video/cirruslogic/pci.bin" +#define BIOS_GD5434_DIAMOND_A3_ISA_PATH "roms/video/cirruslogic/Diamond Multimedia SpeedStar 64 v2.02 EPROM Backup from ST M27C256B-12F1.BIN" #define BIOS_GD5434_PATH "roms/video/cirruslogic/gd5434.bin" #define BIOS_GD5436_PATH "roms/video/cirruslogic/5436.vbi" #define BIOS_GD5440_PATH "roms/video/cirruslogic/BIOS.BIN" @@ -1209,11 +1211,62 @@ gd54xx_in(uint16_t addr, void *p) ret |= 0x80; } break; + case 0x0a: /*Scratch Pad 1 (Memory size for 5402/542x)*/ + ret = svga->seqregs[0x0a] & ~0x1a; + if (svga->crtc[0x27] == CIRRUS_ID_CLGD5402) { + ret |= 0x01; /*512K of memory*/ + } else if (svga->crtc[0x27] > CIRRUS_ID_CLGD5402) { + switch (gd54xx->vram_size >> 10) { + case 512: + ret |= 0x08; + break; + case 1024: + ret |= 0x10; + break; + case 2048: + ret |= 0x18; + break; + } + } + break; case 0x0b: case 0x0c: case 0x0d: case 0x0e: ret = gd54xx->vclk_n[svga->seqaddr-0x0b]; break; + case 0x0f: /*DRAM control*/ + ret = svga->seqregs[0x0f] & ~0x98; + switch (gd54xx->vram_size >> 10) { + case 512: + ret |= 0x08; /*16-bit DRAM data bus width*/ + break; + case 1024: + ret |= 0x10; /*32-bit DRAM data bus width for 1M of memory*/ + break; + case 2048: + ret |= (gd54xx_is_5434(svga)) ? 0x98 : 0x18; /*32-bit (Pre-5434)/64-bit (5434 and up) DRAM data bus width for 2M of memory*/ + break; + case 4096: + ret |= 0x98; /*64-bit (5434 and up) DRAM data bus width for 4M of memory*/ + break; + } + break; + case 0x15: /*Scratch Pad 3 (Memory size for 543x)*/ + ret = svga->seqregs[0x15] & ~0x0f; + if (svga->crtc[0x27] >= CIRRUS_ID_CLGD5430) { + switch (gd54xx->vram_size >> 20) { + case 1: + ret |= 0x02; + break; + case 2: + ret |= 0x03; + break; + case 4: + ret |= 0x04; + break; + } + } + break; case 0x17: - ret = svga->gdcreg[0x17] & ~(7 << 3); + ret = svga->seqregs[0x17] & ~(7 << 3); if (svga->crtc[0x27] <= CIRRUS_ID_CLGD5429) { if ((svga->crtc[0x27] == CIRRUS_ID_CLGD5428) || (svga->crtc[0x27] == CIRRUS_ID_CLGD5426)) { if (gd54xx->vlb) @@ -3844,17 +3897,29 @@ static void case CIRRUS_ID_CLGD5426: if (info->local & 0x200) romfn = NULL; - else - romfn = BIOS_GD5426_PATH; + else { + if (info->local & 0x100) + romfn = BIOS_GD5426_DIAMOND_A1_ISA_PATH; + else { + if (gd54xx->vlb) + romfn = BIOS_GD5428_PATH; + else + romfn = BIOS_GD5428_ISA_PATH; + } + } break; case CIRRUS_ID_CLGD5428: - if (gd54xx->vlb) - romfn = BIOS_GD5428_PATH; - else if (gd54xx->mca) - romfn = BIOS_GD5428_MCA_PATH; - else - romfn = BIOS_GD5428_ISA_PATH; + if (info->local & 0x100) + romfn = BIOS_GD5428_DIAMOND_B1_VLB_PATH; + else { + if (gd54xx->vlb) + romfn = BIOS_GD5428_PATH; + else if (gd54xx->mca) + romfn = BIOS_GD5428_MCA_PATH; + else + romfn = BIOS_GD5428_ISA_PATH; + } break; case CIRRUS_ID_CLGD5429: @@ -3873,8 +3938,12 @@ static void if (info->local & 0x200) { romfn = NULL; gd54xx->has_bios = 0; - } else - romfn = BIOS_GD5434_PATH; + } else { + if (info->local & 0x100) + romfn = BIOS_GD5434_DIAMOND_A3_ISA_PATH; + else + romfn = BIOS_GD5434_PATH; + } break; case CIRRUS_ID_CLGD5436: @@ -3896,9 +3965,9 @@ static void romfn = NULL; gd54xx->has_bios = 0; } else if (gd54xx->pci) - romfn = BIOS_GD5430_PCI_PATH; + romfn = BIOS_GD5430_PATH; else - romfn = BIOS_GD5430_VLB_PATH; + romfn = BIOS_GD5430_DIAMOND_A8_VLB_PATH; } break; @@ -3915,23 +3984,24 @@ static void } if (info->flags & DEVICE_MCA) { - vram = 1; - gd54xx->vram_size = 1 << 20; + vram = 1024; + gd54xx->vram_size = vram << 10; } else { - if (id >= CIRRUS_ID_CLGD5420) { + if (id <= CIRRUS_ID_CLGD5428) { if ((id == CIRRUS_ID_CLGD5426) && (info->local & 0x200)) - vram = 1; + vram = 1024; + else if (id == CIRRUS_ID_CLGD5401) + vram = 256; + else if (id == CIRRUS_ID_CLGD5402) + vram = 512; else vram = device_get_config_int("memory"); - } else - vram = 0; - - if (vram) - gd54xx->vram_size = vram << 20; - else - gd54xx->vram_size = 1 << 19; + gd54xx->vram_size = vram << 10; + } else { + vram = device_get_config_int("memory"); + gd54xx->vram_size = vram << 20; + } } - gd54xx->vram_mask = gd54xx->vram_size - 1; if (romfn) @@ -3955,8 +4025,8 @@ static void } svga->vblank_start = gd54xx_vblank_start; svga->ven_write = gd54xx_write_modes45; - if (vram <= 1) - svga->decode_mask = gd54xx->vram_mask; + if ((vram == 1) || (vram >= 256 && vram <= 1024)) + svga->decode_mask = gd54xx->vram_mask; if (gd54xx->bit32) { mem_mapping_set_handler(&svga->mapping, gd54xx_read, gd54xx_readw, gd54xx_readl, gd54xx_write, gd54xx_writew, gd54xx_writel); @@ -4039,6 +4109,7 @@ static void svga->crtc[0x27] = id; svga->seqregs[6] = 0x0f; + if (svga->crtc[0x27] >= CIRRUS_ID_CLGD5429) gd54xx->unlocked = 1; @@ -4089,9 +4160,9 @@ gd5422_available(void) } static int -gd5426_available(void) +gd5426_diamond_a1_available(void) { - return rom_present(BIOS_GD5426_PATH); + return rom_present(BIOS_GD5426_DIAMOND_A1_ISA_PATH); } static int @@ -4100,6 +4171,12 @@ gd5428_available(void) return rom_present(BIOS_GD5428_PATH); } +static int +gd5428_diamond_b1_available(void) +{ + return rom_present(BIOS_GD5428_DIAMOND_B1_VLB_PATH); +} + static int gd5428_isa_available(void) { @@ -4119,15 +4196,15 @@ gd5429_available(void) } static int -gd5430_vlb_available(void) +gd5430_diamond_a8_available(void) { - return rom_present(BIOS_GD5430_VLB_PATH); + return rom_present(BIOS_GD5430_DIAMOND_A8_VLB_PATH); } static int -gd5430_pci_available(void) +gd5430_available(void) { - return rom_present(BIOS_GD5430_PCI_PATH); + return rom_present(BIOS_GD5430_PATH); } static int @@ -4136,6 +4213,12 @@ gd5434_available(void) return rom_present(BIOS_GD5434_PATH); } +static int +gd5434_diamond_a3_available(void) +{ + return rom_present(BIOS_GD5434_DIAMOND_A3_ISA_PATH); +} + static int gd5436_available(void) { @@ -4199,28 +4282,96 @@ gd54xx_force_redraw(void *p) gd54xx->svga.fullchange = changeframecount; } -static const device_config_t gd5422_config[] = +static const device_config_t gd542x_config[] = { { - "memory","Memory size",CONFIG_SELECTION,"", 1, "", { 0 }, + .name = "memory", + .description = "Memory size", + .type = CONFIG_SELECTION, + .selection = { { - "512 KB", 0 + .description = "512 KB", + .value = 512 }, { - "1 MB", 1 + .description = "1 MB", + .value = 1024 }, { - "" + .description = "" } }, + .default_int = 512 }, { - "", "", -1 + .type = -1 } }; -static const device_config_t gd5428_config[] = +static const device_config_t gd5426_config[] = +{ + { + .name = "memory", + .description = "Memory size", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "512 KB", + .value = 512 + }, + { + .description = "1 MB", + .value = 1024 + }, + { + .description = "2 MB", + .value = 2048 + }, + { + .description = "" + } + }, + .default_int = 2048 + }, + { + .type = -1 + } +}; + +static const device_config_t gd5428_onboard_config[] = +{ + { + .name = "memory", + .description = "Onboard memory size", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "512 KB", + .value = 512 + }, + { + .description = "1 MB", + .value = 1024 + }, + { + .description = "2 MB", + .value = 2048 + }, + { + .description = "" + } + }, + .default_int = 2048 + }, + { + .type = -1 + } +}; + +static const device_config_t gd5429_config[] = { { .name = "memory", @@ -4247,38 +4398,11 @@ static const device_config_t gd5428_config[] = } }; -static const device_config_t gd5428_onboard_config[] = -{ - { - .name = "memory", - .description = "Onboard Video RAM size", - .type = CONFIG_SELECTION, - .selection = - { - { - .description = "1 MB", - .value = 1 - }, - { - .description = "2 MB", - .value = 2 - }, - { - .description = "" - } - }, - .default_int = 2 - }, - { - .type = -1 - } -}; - static const device_config_t gd5440_onboard_config[] = { { .name = "memory", - .description = "Video memory size", + .description = "Onboard memory size", .type = CONFIG_SELECTION, .selection = { @@ -4302,6 +4426,68 @@ static const device_config_t gd5440_onboard_config[] = }; static const device_config_t gd5434_config[] = +{ + { + .name = "memory", + .description = "Memory size", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "1 MB", + .value = 1 + }, + { + .description = "2 MB", + .value = 2 + }, + { + .description = "4 MB", + .value = 4 + }, + { + .description = "" + } + }, + .default_int = 4 + }, + { + .type = -1 + } +}; + +static const device_config_t gd5434_onboard_config[] = +{ + { + .name = "memory", + .description = "Onboard memory size", + .type = CONFIG_SELECTION, + .selection = + { + { + .description = "1 MB", + .value = 1 + }, + { + .description = "2 MB", + .value = 2 + }, + { + .description = "4 MB", + .value = 4 + }, + { + .description = "" + } + }, + .default_int = 4 + }, + { + .type = -1 + } +}; + +static const device_config_t gd5480_config[] = { { .name = "memory", @@ -4330,7 +4516,7 @@ static const device_config_t gd5434_config[] = const device_t gd5401_isa_device = { - "Cirrus Logic GD-5401 (ACUMOS AVGA1)", + "Cirrus Logic GD5401 (ISA) (ACUMOS AVGA1)", DEVICE_ISA, CIRRUS_ID_CLGD5401, gd54xx_init, gd54xx_close, @@ -4343,7 +4529,7 @@ const device_t gd5401_isa_device = const device_t gd5402_isa_device = { - "Cirrus Logic GD-5402 (ACUMOS AVGA2)", + "Cirrus Logic GD5402 (ISA) (ACUMOS AVGA2)", DEVICE_ISA, CIRRUS_ID_CLGD5402, gd54xx_init, gd54xx_close, @@ -4356,7 +4542,7 @@ const device_t gd5402_isa_device = const device_t gd5402_onboard_device = { - "Cirrus Logic GD-5402 (ACUMOS AVGA2) (On-Board)", + "Cirrus Logic GD5402 (ISA) (ACUMOS AVGA2) (On-Board)", DEVICE_AT | DEVICE_ISA, CIRRUS_ID_CLGD5402 | 0x200, gd54xx_init, gd54xx_close, @@ -4369,7 +4555,7 @@ const device_t gd5402_onboard_device = const device_t gd5420_isa_device = { - "Cirrus Logic GD-5420", + "Cirrus Logic GD5420 (ISA)", DEVICE_AT | DEVICE_ISA, CIRRUS_ID_CLGD5420, gd54xx_init, gd54xx_close, @@ -4377,11 +4563,11 @@ const device_t gd5420_isa_device = { gd5420_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5422_config, + gd542x_config, }; const device_t gd5422_isa_device = { - "Cirrus Logic GD-5422", + "Cirrus Logic GD5422 (ISA)", DEVICE_AT | DEVICE_ISA, CIRRUS_ID_CLGD5422, gd54xx_init, gd54xx_close, @@ -4389,11 +4575,11 @@ const device_t gd5422_isa_device = { { gd5422_available }, /* Common BIOS between 5422 and 5424 */ gd54xx_speed_changed, gd54xx_force_redraw, - gd5422_config, + gd542x_config, }; const device_t gd5424_vlb_device = { - "Cirrus Logic GD-5424", + "Cirrus Logic GD5424 (VLB)", DEVICE_VLB, CIRRUS_ID_CLGD5424, gd54xx_init, gd54xx_close, @@ -4401,26 +4587,57 @@ const device_t gd5424_vlb_device = { { gd5422_available }, /* Common BIOS between 5422 and 5424 */ gd54xx_speed_changed, gd54xx_force_redraw, - gd5422_config, + gd542x_config, +}; + +const device_t gd5426_isa_device = +{ + "Cirrus Logic GD5426 (ISA)", + DEVICE_AT | DEVICE_ISA, + CIRRUS_ID_CLGD5426, + gd54xx_init, + gd54xx_close, + gd54xx_reset, + { gd5428_isa_available }, + gd54xx_speed_changed, + gd54xx_force_redraw, + gd5426_config +}; + + +/*According to a Diamond bios file listing and vgamuseum*/ +const device_t gd5426_diamond_speedstar_pro_a1_isa_device = +{ + "Cirrus Logic GD5426 (ISA) (Diamond SpeedStar Pro Rev. A1)", + DEVICE_AT | DEVICE_ISA, + CIRRUS_ID_CLGD5426 | 0x100, + gd54xx_init, + gd54xx_close, + gd54xx_reset, + { gd5426_diamond_a1_available }, + gd54xx_speed_changed, + gd54xx_force_redraw, + gd5426_config }; const device_t gd5426_vlb_device = { - "Cirrus Logic CL-GD 5426 (VLB)", + "Cirrus Logic GD5426 (VLB)", DEVICE_VLB, CIRRUS_ID_CLGD5426, gd54xx_init, gd54xx_close, gd54xx_reset, - { gd5426_available }, + { gd5428_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5428_config + gd5426_config }; + const device_t gd5426_onboard_device = { - "Cirrus Logic CL-GD 5426 (On-board)", + "Cirrus Logic GD5426 (VLB) (On-Board)", DEVICE_VLB, CIRRUS_ID_CLGD5426 | 0x200, gd54xx_init, @@ -4434,7 +4651,7 @@ const device_t gd5426_onboard_device = const device_t gd5428_isa_device = { - "Cirrus Logic CL-GD 5428 (ISA)", + "Cirrus Logic GD5428 (ISA)", DEVICE_AT | DEVICE_ISA, CIRRUS_ID_CLGD5428, gd54xx_init, @@ -4443,12 +4660,12 @@ const device_t gd5428_isa_device = { gd5428_isa_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5428_config + gd5426_config }; const device_t gd5428_vlb_device = { - "Cirrus Logic CL-GD 5428 (VLB)", + "Cirrus Logic GD5428 (VLB)", DEVICE_VLB, CIRRUS_ID_CLGD5428, gd54xx_init, @@ -4457,12 +4674,27 @@ const device_t gd5428_vlb_device = { gd5428_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5428_config + gd5426_config +}; + +/*According to a Diamond bios file listing and vgamuseum*/ +const device_t gd5428_diamond_speedstar_pro_b1_vlb_device = +{ + "Cirrus Logic GD5428 (VLB) (Diamond SpeedStar Pro Rev. B1)", + DEVICE_VLB, + CIRRUS_ID_CLGD5428 | 0x100, + gd54xx_init, + gd54xx_close, + gd54xx_reset, + { gd5428_diamond_b1_available }, + gd54xx_speed_changed, + gd54xx_force_redraw, + gd5426_config }; const device_t gd5428_mca_device = { - "Cirrus Logic CL-GD 5428 (IBM SVGA Adapter/A)", + "Cirrus Logic GD5428 (MCA) (IBM SVGA Adapter/A)", DEVICE_MCA, CIRRUS_ID_CLGD5428, gd54xx_init, @@ -4476,7 +4708,7 @@ const device_t gd5428_mca_device = const device_t gd5428_onboard_device = { - "Cirrus Logic CL-GD 5428 (On-Board)", + "Cirrus Logic GD5428 (ISA) (On-Board)", DEVICE_AT | DEVICE_ISA, CIRRUS_ID_CLGD5428, gd54xx_init, @@ -4490,7 +4722,7 @@ const device_t gd5428_onboard_device = const device_t gd5429_isa_device = { - "Cirrus Logic CL-GD 5429 (ISA)", + "Cirrus Logic GD5429 (ISA)", DEVICE_AT | DEVICE_ISA, CIRRUS_ID_CLGD5429, gd54xx_init, @@ -4499,12 +4731,12 @@ const device_t gd5429_isa_device = { gd5429_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5428_config + gd5429_config }; const device_t gd5429_vlb_device = { - "Cirrus Logic CL-GD 5429 (VLB)", + "Cirrus Logic GD5429 (VLB)", DEVICE_VLB, CIRRUS_ID_CLGD5429, gd54xx_init, @@ -4513,40 +4745,41 @@ const device_t gd5429_vlb_device = { gd5429_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5428_config + gd5429_config }; -const device_t gd5430_vlb_device = +/*According to a Diamond bios file listing and vgamuseum*/ +const device_t gd5430_diamond_speedstar_pro_se_a8_vlb_device = { - "Cirrus Logic CL-GD 5430 (VLB)", + "Cirrus Logic GD5430 (VLB) (Diamond SpeedStar Pro SE Rev. A8)", DEVICE_VLB, CIRRUS_ID_CLGD5430, gd54xx_init, gd54xx_close, gd54xx_reset, - { gd5430_vlb_available }, + { gd5430_diamond_a8_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5428_config + gd5429_config }; const device_t gd5430_pci_device = { - "Cirrus Logic CL-GD 5430 (PCI)", + "Cirrus Logic GD5430 (PCI)", DEVICE_PCI, CIRRUS_ID_CLGD5430, gd54xx_init, gd54xx_close, gd54xx_reset, - { gd5430_pci_available }, + { gd5430_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5428_config + gd5429_config }; const device_t gd5434_isa_device = { - "Cirrus Logic CL-GD 5434 (ISA)", + "Cirrus Logic GD5434 (ISA)", DEVICE_AT | DEVICE_ISA, CIRRUS_ID_CLGD5434, gd54xx_init, @@ -4558,9 +4791,24 @@ const device_t gd5434_isa_device = gd5434_config }; +/*According to a Diamond bios file listing and vgamuseum*/ +const device_t gd5434_diamond_speedstar_64_a3_isa_device = +{ + "Cirrus Logic GD5434 (ISA) (Diamond SpeedStar 64 Rev. A3)", + DEVICE_AT | DEVICE_ISA, + CIRRUS_ID_CLGD5434 | 0x100, + gd54xx_init, + gd54xx_close, + gd54xx_reset, + { gd5434_diamond_a3_available }, + gd54xx_speed_changed, + gd54xx_force_redraw, + gd5429_config +}; + const device_t gd5434_onboard_pci_device = { - "Cirrus Logic CL-GD 5434-4 (On-Board PCI)", + "Cirrus Logic GD5434-4 (PCI) (On-Board)", DEVICE_PCI, CIRRUS_ID_CLGD5434 | 0x200, gd54xx_init, @@ -4569,12 +4817,12 @@ const device_t gd5434_onboard_pci_device = { NULL }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5434_config + gd5434_onboard_config }; const device_t gd5434_vlb_device = { - "Cirrus Logic CL-GD 5434 (VLB)", + "Cirrus Logic GD5434 (VLB)", DEVICE_VLB, CIRRUS_ID_CLGD5434, gd54xx_init, @@ -4588,7 +4836,7 @@ const device_t gd5434_vlb_device = const device_t gd5434_pci_device = { - "Cirrus Logic CL-GD 5434 (PCI)", + "Cirrus Logic GD5434 (PCI)", DEVICE_PCI, CIRRUS_ID_CLGD5434, gd54xx_init, @@ -4602,7 +4850,7 @@ const device_t gd5434_pci_device = const device_t gd5436_pci_device = { - "Cirrus Logic CL-GD 5436 (PCI)", + "Cirrus Logic GD5436 (PCI)", DEVICE_PCI, CIRRUS_ID_CLGD5436, gd54xx_init, @@ -4616,7 +4864,7 @@ const device_t gd5436_pci_device = const device_t gd5440_onboard_pci_device = { - "Cirrus Logic CL-GD 5440 (On-Board PCI)", + "Cirrus Logic GD5440 (PCI) (On-Board)", DEVICE_PCI, CIRRUS_ID_CLGD5440 | 0x600, gd54xx_init, @@ -4630,7 +4878,7 @@ const device_t gd5440_onboard_pci_device = const device_t gd5440_pci_device = { - "Cirrus Logic CL-GD 5440 (PCI)", + "Cirrus Logic GD5440 (PCI)", DEVICE_PCI, CIRRUS_ID_CLGD5440 | 0x400, gd54xx_init, @@ -4639,12 +4887,12 @@ const device_t gd5440_pci_device = { gd5440_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5428_config + gd5429_config }; const device_t gd5446_pci_device = { - "Cirrus Logic CL-GD 5446 (PCI)", + "Cirrus Logic GD5446 (PCI)", DEVICE_PCI, CIRRUS_ID_CLGD5446, gd54xx_init, @@ -4658,7 +4906,7 @@ const device_t gd5446_pci_device = const device_t gd5446_stb_pci_device = { - "STB Nitro 64V (PCI)", + "Cirrus Logic GD5446 (PCI) (STB Nitro 64V)", DEVICE_PCI, CIRRUS_ID_CLGD5446 | 0x100, gd54xx_init, @@ -4672,7 +4920,7 @@ const device_t gd5446_stb_pci_device = const device_t gd5480_pci_device = { - "Cirrus Logic CL-GD 5480 (PCI)", + "Cirrus Logic GD5480 (PCI)", DEVICE_PCI, CIRRUS_ID_CLGD5480, gd54xx_init, @@ -4681,5 +4929,5 @@ const device_t gd5480_pci_device = { gd5480_available }, gd54xx_speed_changed, gd54xx_force_redraw, - gd5434_config + gd5480_config }; diff --git a/src/video/vid_et4000w32.c b/src/video/vid_et4000w32.c index 65dced875..1c2ca794e 100644 --- a/src/video/vid_et4000w32.c +++ b/src/video/vid_et4000w32.c @@ -78,9 +78,9 @@ typedef struct et4000w32p_t uint8_t regs[256], pci_regs[256]; int index, vlb, pci, interleaved, - bank, blitter_busy, type; + bank, type; - uint32_t linearbase, linearbase_old; + uint32_t linearbase; uint32_t vram_mask; /* Accelerator */ @@ -97,12 +97,13 @@ typedef struct et4000w32p_t uint32_t pattern_addr, source_addr, dest_addr, mix_addr; } queued, internal; - uint8_t osr; + uint8_t suspend_terminate, osr; uint8_t status; + uint16_t x_count, y_count; int pattern_x, source_x, pattern_x_back, source_x_back, pattern_y, source_y, cpu_dat_pos, pix_pos, - cpu_input_num, queue; + cpu_input_num, fifo_queue; uint32_t pattern_addr, source_addr, dest_addr, mix_addr, pattern_back, source_back, dest_back, mix_back, @@ -115,6 +116,8 @@ typedef struct et4000w32p_t uint32_t base[3]; uint8_t ctrl; } mmu; + + volatile int busy; } et4000w32p_t; @@ -131,12 +134,13 @@ static video_timings_t timing_et4000w32_isa = {VIDEO_ISA, 4, 4, 4, 10, 10, 10 void et4000w32p_recalcmapping(et4000w32p_t *et4000); -uint8_t et4000w32p_mmu_read(uint32_t addr, void *p); -void et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *p); +static uint8_t et4000w32p_mmu_read(uint32_t addr, void *p); +static void et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *p); -void et4000w32_blit_start(et4000w32p_t *et4000); -void et4000w32p_blit_start(et4000w32p_t *et4000); -void et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32p_t *et4000); +static void et4000w32_blit_start(et4000w32p_t *et4000); +static void et4000w32p_blit_start(et4000w32p_t *et4000); +static void et4000w32_blit(int count, int cpu_input, uint32_t src_dat, uint32_t mix_dat, et4000w32p_t *et4000); +static void et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32p_t *et4000); uint8_t et4000w32p_in(uint16_t addr, void *p); @@ -213,7 +217,7 @@ et4000w32p_out(uint16_t addr, uint8_t val, void *p) } break; case 0x3d4: - svga->crtcreg = val & 63; + svga->crtcreg = val & 0x3f; return; case 0x3d5: if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80)) @@ -333,12 +337,16 @@ et4000w32p_in(uint16_t addr, void *p) case 0x3d4: return svga->crtcreg; case 0x3d5: + if (et4000->type == ET4000W32) { + if (svga->crtcreg == 0x37) + return 0x09; + } return svga->crtc[svga->crtcreg]; case 0x3da: svga->attrff = 0; - /*Bit 1 of the Input Status Register is required by OS/2 ET4000W32/I drivers to be set otherwise + /*Bit 1 of the Input Status Register is required by the OS/2 and NT ET4000W32/I drivers to be set otherwise the guest will loop infinitely upon reaching the GUI*/ if (svga->cgastat & 0x01) svga->cgastat &= ~0x32; @@ -397,6 +405,24 @@ et4000w32p_recalctimings(svga_t *svga) svga->clock = (cpuclock * (double)(1ull << 32)) / svga->getclock((svga->miscout >> 2) & 3, svga->clock_gen); + if (et4000->type != ET4000W32P_DIAMOND) { + if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { + if (svga->gdcreg[5] & 0x40) { + switch (svga->bpp) { + case 8: + svga->clock /= 2; + break; + case 15: case 16: + svga->clock /= 3; + break; + case 24: + svga->clock /= 4; + break; + } + } + } + } + if (svga->adv_flags & FLAG_NOSKEW) { /* On the Cardex ET4000/W32p-based cards, adjust text mode clocks by 1. */ if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /* Text mode */ @@ -550,6 +576,7 @@ et4000w32p_recalcmapping(et4000w32p_t *et4000) map = (svga->gdcreg[6] & 0xc) >> 2; if (svga->crtc[0x36] & 0x20) map |= 4; if (svga->crtc[0x36] & 0x08) map |= 8; + mem_mapping_disable(&et4000->linear_mapping); switch (map) { case 0x0: case 0x4: case 0x8: case 0xc: /* 128k at A0000 */ mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000); @@ -587,12 +614,8 @@ et4000w32p_recalcmapping(et4000w32p_t *et4000) svga->banked_mask = 0x7fff; break; } - - mem_mapping_disable(&et4000->linear_mapping); } - et4000->linearbase_old = et4000->linearbase; - if (!et4000->interleaved && (svga->crtc[0x32] & 0x80)) mem_mapping_disable(&svga->mapping); } @@ -601,128 +624,208 @@ et4000w32p_recalcmapping(et4000w32p_t *et4000) static void et4000w32p_accel_write_fifo(et4000w32p_t *et4000, uint32_t addr, uint8_t val) { - switch (addr & 0x7fff) { - case 0x7f80: et4000->acl.queued.pattern_addr = (et4000->acl.queued.pattern_addr & 0xFFFFFF00) | val; break; - case 0x7f81: et4000->acl.queued.pattern_addr = (et4000->acl.queued.pattern_addr & 0xFFFF00FF) | (val << 8); break; - case 0x7f82: et4000->acl.queued.pattern_addr = (et4000->acl.queued.pattern_addr & 0xFF00FFFF) | (val << 16); break; - case 0x7f83: et4000->acl.queued.pattern_addr = (et4000->acl.queued.pattern_addr & 0x00FFFFFF) | (val << 24); et4000->acl.queue++; break; - case 0x7f84: et4000->acl.queued.source_addr = (et4000->acl.queued.source_addr & 0xFFFFFF00) | val; break; - case 0x7f85: et4000->acl.queued.source_addr = (et4000->acl.queued.source_addr & 0xFFFF00FF) | (val << 8); break; - case 0x7f86: et4000->acl.queued.source_addr = (et4000->acl.queued.source_addr & 0xFF00FFFF) | (val << 16); break; - case 0x7f87: et4000->acl.queued.source_addr = (et4000->acl.queued.source_addr & 0x00FFFFFF) | (val << 24); et4000->acl.queue++; break; - case 0x7f88: et4000->acl.queued.pattern_off = (et4000->acl.queued.pattern_off & 0xFF00) | val; break; - case 0x7f89: et4000->acl.queued.pattern_off = (et4000->acl.queued.pattern_off & 0x00FF) | (val << 8); et4000->acl.queue++; break; - case 0x7f8a: et4000->acl.queued.source_off = (et4000->acl.queued.source_off & 0xFF00) | val; break; - case 0x7f8b: et4000->acl.queued.source_off = (et4000->acl.queued.source_off & 0x00FF) | (val << 8); et4000->acl.queue++;break; - case 0x7f8c: et4000->acl.queued.dest_off = (et4000->acl.queued.dest_off & 0xFF00) | val; break; - case 0x7f8d: et4000->acl.queued.dest_off = (et4000->acl.queued.dest_off & 0x00FF) | (val << 8); et4000->acl.queue++; break; - case 0x7f8e: - et4000->acl.queue++; - if (et4000->type >= ET4000W32P_REVC) - et4000->acl.queued.pixel_depth = val; - else - et4000->acl.queued.vbus = val; + et4000->acl.fifo_queue++; + switch (addr & 0xff) { + case 0x80: + et4000->acl.queued.pattern_addr = (et4000->acl.queued.pattern_addr & 0x3fff00) | val; break; - case 0x7f8f: et4000->acl.queued.xy_dir = val; et4000->acl.queue++; break; - case 0x7f90: et4000->acl.queued.pattern_wrap = val; et4000->acl.queue++; break; - case 0x7f92: et4000->acl.queued.source_wrap = val; et4000->acl.queue++; break; - case 0x7f98: et4000->acl.queued.count_x = (et4000->acl.queued.count_x & 0xFF00) | val; break; - case 0x7f99: et4000->acl.queued.count_x = (et4000->acl.queued.count_x & 0x00FF) | (val << 8); et4000->acl.queue++; break; - case 0x7f9a: et4000->acl.queued.count_y = (et4000->acl.queued.count_y & 0xFF00) | val; break; - case 0x7f9b: et4000->acl.queued.count_y = (et4000->acl.queued.count_y & 0x00FF) | (val << 8); et4000->acl.queue++; break; - case 0x7f9c: et4000->acl.queued.ctrl_routing = val; et4000->acl.queue++; break; - case 0x7f9d: et4000->acl.queued.ctrl_reload = val; et4000->acl.queue++; break; - case 0x7f9e: et4000->acl.queued.rop_bg = val; et4000->acl.queue++; break; - case 0x7f9f: et4000->acl.queued.rop_fg = val; et4000->acl.queue++; break; - case 0x7fa0: et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0xFFFFFF00) | val; break; - case 0x7fa1: et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0xFFFF00FF) | (val << 8); break; - case 0x7fa2: et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0xFF00FFFF) | (val << 16); break; - case 0x7fa3: et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0x00FFFFFF) | (val << 24); - et4000->acl.queue++; + case 0x81: + et4000->acl.queued.pattern_addr = (et4000->acl.queued.pattern_addr & 0x3f00ff) | (val << 8); + break; + case 0x82: + et4000->acl.queued.pattern_addr = (et4000->acl.queued.pattern_addr & 0x00ffff) | ((val & 0x3f) << 16); + break; + case 0x84: + et4000->acl.queued.source_addr = (et4000->acl.queued.source_addr & 0x3fff00) | val; + break; + case 0x85: + et4000->acl.queued.source_addr = (et4000->acl.queued.source_addr & 0x3f00ff) | (val << 8); + break; + case 0x86: + et4000->acl.queued.source_addr = (et4000->acl.queued.source_addr & 0x00ffff) | ((val & 0x3f) << 16); + break; + case 0x88: + et4000->acl.queued.pattern_off = (et4000->acl.queued.pattern_off & 0x0f00) | val; + break; + case 0x89: + et4000->acl.queued.pattern_off = (et4000->acl.queued.pattern_off & 0x00ff) | ((val & 0x0f) << 8); + break; + case 0x8a: + et4000->acl.queued.source_off = (et4000->acl.queued.source_off & 0x0f00) | val; + break; + case 0x8b: + et4000->acl.queued.source_off = (et4000->acl.queued.source_off & 0x00ff) | ((val & 0x0f) << 8); + break; + case 0x8c: + et4000->acl.queued.dest_off = (et4000->acl.queued.dest_off & 0x0f00) | val; + break; + case 0x8d: + et4000->acl.queued.dest_off = (et4000->acl.queued.dest_off & 0x00ff) | ((val & 0x0f) << 8); + break; + case 0x8e: + if (et4000->type >= ET4000W32P_REVC) + et4000->acl.queued.pixel_depth = val & 0x30; + else + et4000->acl.queued.vbus = val & 0x03; + break; + case 0x8f: + if (et4000->type >= ET4000W32P_REVC) + et4000->acl.queued.xy_dir = val & 0xb7; + else + et4000->acl.queued.xy_dir = val & 0x03; + break; + case 0x90: + et4000->acl.queued.pattern_wrap = val & 0x77; + break; + case 0x92: + et4000->acl.queued.source_wrap = val & 0x77; + break; + case 0x98: + et4000->acl.queued.count_x = (et4000->acl.queued.count_x & 0x0f00) | val; + break; + case 0x99: + et4000->acl.queued.count_x = (et4000->acl.queued.count_x & 0x00ff) | ((val & 0x0f) << 8); + break; + case 0x9a: + et4000->acl.queued.count_y = (et4000->acl.queued.count_y & 0x0f00) | val; + break; + case 0x9b: + et4000->acl.queued.count_y = (et4000->acl.queued.count_y & 0x00ff) | ((val & 0x0f) << 8); + break; + case 0x9c: + if (et4000->type >= ET4000W32P_REVC) + et4000->acl.queued.ctrl_routing = val & 0xdb; + else + et4000->acl.queued.ctrl_routing = val & 0xb7; + break; + case 0x9d: + et4000->acl.queued.ctrl_reload = val & 0x03; + break; + case 0x9e: + et4000->acl.queued.rop_bg = val; + break; + case 0x9f: + et4000->acl.queued.rop_fg = val; + break; + case 0xa0: + et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0x3fff00) | val; + break; + case 0xa1: + et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0x3f00ff) | (val << 8); + break; + case 0xa2: + et4000->acl.queued.dest_addr = (et4000->acl.queued.dest_addr & 0x00ffff) | ((val & 0x3f) << 16); + break; + case 0xa3: et4000->acl.internal = et4000->acl.queued; if (et4000->type >= ET4000W32P_REVC) { - if (et4000->acl.osr & 0x10) { - et4000w32p_blit_start(et4000); - if (!(et4000->acl.queued.ctrl_routing & 0x43)) { - et4000w32p_blit(0xffffff, ~0, 0, 0, et4000); - } - if ((et4000->acl.queued.ctrl_routing & 0x40) && !(et4000->acl.internal.ctrl_routing & 3)) { - et4000w32p_blit(4, ~0, 0, 0, et4000); - } + et4000w32p_blit_start(et4000); + et4000w32_log("Destination Address write and start XY Block, xcnt = %i, ycnt = %i\n", et4000->acl.x_count + 1, et4000->acl.y_count + 1); + if (!(et4000->acl.queued.ctrl_routing & 0x43)) { + et4000w32p_blit(0xffffff, ~0, 0, 0, et4000); + } + if ((et4000->acl.queued.ctrl_routing & 0x40) && !(et4000->acl.internal.ctrl_routing & 3)) { + et4000w32p_blit(4, ~0, 0, 0, et4000); } } else { et4000w32_blit_start(et4000); et4000->acl.cpu_input_num = 0; - if (!(et4000->acl.queued.ctrl_routing & 0x37)) - et4000w32p_blit(0xffffff, ~0, 0, 0, et4000); + if (!(et4000->acl.queued.ctrl_routing & 0x37)) { + et4000w32_blit(-1, 0, 0, 0xffffffff, et4000); + } } break; - case 0x7fa4: et4000->acl.queued.mix_addr = (et4000->acl.queued.mix_addr & 0xFFFFFF00) | val; break; - case 0x7fa5: et4000->acl.queued.mix_addr = (et4000->acl.queued.mix_addr & 0xFFFF00FF) | (val << 8); break; - case 0x7fa6: et4000->acl.queued.mix_addr = (et4000->acl.queued.mix_addr & 0xFF00FFFF) | (val << 16); break; - case 0x7fa7: et4000->acl.queued.mix_addr = (et4000->acl.queued.mix_addr & 0x00FFFFFF) | (val << 24); et4000->acl.queue++; break; - case 0x7fa8: et4000->acl.queued.mix_off = (et4000->acl.queued.mix_off & 0xFF00) | val; break; - case 0x7fa9: et4000->acl.queued.mix_off = (et4000->acl.queued.mix_off & 0x00FF) | (val << 8); et4000->acl.queue++; break; - case 0x7faa: et4000->acl.queued.error = (et4000->acl.queued.error & 0xFF00) | val; break; - case 0x7fab: et4000->acl.queued.error = (et4000->acl.queued.error & 0x00FF) | (val << 8); et4000->acl.queue++; break; - case 0x7fac: et4000->acl.queued.dmin = (et4000->acl.queued.dmin & 0xFF00) | val; break; - case 0x7fad: et4000->acl.queued.dmin = (et4000->acl.queued.dmin & 0x00FF) | (val << 8); et4000->acl.queue++; break; - case 0x7fae: et4000->acl.queued.dmaj = (et4000->acl.queued.dmaj & 0xFF00) | val; break; - case 0x7faf: et4000->acl.queued.dmaj = (et4000->acl.queued.dmaj & 0x00FF) | (val << 8); et4000->acl.queue++; break; + case 0xa4: + et4000->acl.queued.mix_addr = (et4000->acl.queued.mix_addr & 0xFFFFFF00) | val; + break; + case 0xa5: + et4000->acl.queued.mix_addr = (et4000->acl.queued.mix_addr & 0xFFFF00FF) | (val << 8); + break; + case 0xa6: + et4000->acl.queued.mix_addr = (et4000->acl.queued.mix_addr & 0xFF00FFFF) | (val << 16); + break; + case 0xa7: + et4000->acl.queued.mix_addr = (et4000->acl.queued.mix_addr & 0x00FFFFFF) | (val << 24); + break; + case 0xa8: + et4000->acl.queued.mix_off = (et4000->acl.queued.mix_off & 0xFF00) | val; + break; + case 0xa9: + et4000->acl.queued.mix_off = (et4000->acl.queued.mix_off & 0x00FF) | (val << 8); + break; + case 0xaa: + et4000->acl.queued.error = (et4000->acl.queued.error & 0xFF00) | val; + break; + case 0xab: + et4000->acl.queued.error = (et4000->acl.queued.error & 0x00FF) | (val << 8); + break; + case 0xac: + et4000->acl.queued.dmin = (et4000->acl.queued.dmin & 0xFF00) | val; + break; + case 0xad: + et4000->acl.queued.dmin = (et4000->acl.queued.dmin & 0x00FF) | (val << 8); + break; + case 0xae: + et4000->acl.queued.dmaj = (et4000->acl.queued.dmaj & 0xFF00) | val; + break; + case 0xaf: + et4000->acl.queued.dmaj = (et4000->acl.queued.dmaj & 0x00FF) | (val << 8); + break; } } - static void -et4000w32p_accel_write_mmu(et4000w32p_t *et4000, uint32_t addr, uint8_t val) +et4000w32p_accel_write_mmu(et4000w32p_t *et4000, uint32_t addr, uint8_t val, uint8_t bank) { if (et4000->type >= ET4000W32P_REVC) { - if (!(et4000->acl.status & ACL_XYST)) + if (!(et4000->acl.status & ACL_XYST)) { + et4000w32_log("XY MMU block not started\n"); return; + } if (et4000->acl.internal.ctrl_routing & 3) { - et4000->acl.queue++; - if ((et4000->acl.internal.ctrl_routing & 3) == 2) { + et4000->acl.fifo_queue++; + if ((et4000->acl.internal.ctrl_routing & 3) == 2) /*CPU data is Mix data*/ et4000w32p_blit(8 - (et4000->acl.mix_addr & 7), val >> (et4000->acl.mix_addr & 7), 0, 1, et4000); - } - else if ((et4000->acl.internal.ctrl_routing & 3) == 1) { + else if ((et4000->acl.internal.ctrl_routing & 3) == 1) /*CPU data is Source data*/ et4000w32p_blit(1, ~0, val, 2, et4000); - } } } else { if (!(et4000->acl.status & ACL_XYST)) { - et4000->acl.queue++; - et4000->acl.queued.dest_addr = (addr & 0x1FFF) + et4000->mmu.base[et4000->bank]; + et4000->acl.fifo_queue++; + et4000->acl.queued.dest_addr = ((addr & 0x1fff) + et4000->mmu.base[bank]); et4000->acl.internal = et4000->acl.queued; et4000w32_blit_start(et4000); - if (!(et4000->acl.internal.ctrl_routing & 0x37)) - et4000w32p_blit(0xFFFFFF, ~0, 0, 0, et4000); + et4000w32_log("Accelerated MMU aperture = %i and start XY Block (Implicit), xcnt = %i, ycnt = %i\n", bank, et4000->acl.x_count + 1, et4000->acl.y_count + 1); et4000->acl.cpu_input_num = 0; + if (!(et4000->acl.queued.ctrl_routing & 0x37)) { + et4000w32_blit(-1, 0, 0, 0xffffffff, et4000); + } } if (et4000->acl.internal.ctrl_routing & 7) { - et4000->acl.queue++; - et4000->acl.cpu_input = (et4000->acl.cpu_input &~ (0xFF << (et4000->acl.cpu_input_num << 3))) | + et4000->acl.fifo_queue++; + et4000->acl.cpu_input = (et4000->acl.cpu_input & ~(0xff << (et4000->acl.cpu_input_num << 3))) | (val << (et4000->acl.cpu_input_num << 3)); et4000->acl.cpu_input_num++; - if (et4000->acl.cpu_input_num == et4000w32_vbus[et4000->acl.internal.vbus & 3]) { - if ((et4000->acl.internal.ctrl_routing & 7) == 2) - et4000w32p_blit(et4000->acl.cpu_input_num << 3, et4000->acl.cpu_input, 0, 1, et4000); - else if ((et4000->acl.internal.ctrl_routing & 7) == 1) - et4000w32p_blit(et4000->acl.cpu_input_num, ~0, et4000->acl.cpu_input, 2, et4000); - else if ((et4000->acl.internal.ctrl_routing & 7) == 4) - et4000w32p_blit(et4000->acl.cpu_input_num, ~0, et4000->acl.internal.count_x, 2, et4000); - else if ((et4000->acl.internal.ctrl_routing & 7) == 5) - et4000w32p_blit(et4000->acl.cpu_input_num, ~0, et4000->acl.internal.count_y, 2, et4000); + if (et4000->acl.cpu_input_num == et4000w32_vbus[et4000->acl.internal.vbus]) { + if ((et4000->acl.internal.ctrl_routing & 7) == 2) /*CPU data is Mix data*/ + et4000w32_blit(et4000->acl.cpu_input_num << 3, 2, 0, et4000->acl.cpu_input, et4000); + else if ((et4000->acl.internal.ctrl_routing & 7) == 1) /*CPU data is Source data*/ + et4000w32_blit(et4000->acl.cpu_input_num, 1, et4000->acl.cpu_input, 0xffffffff, et4000); et4000->acl.cpu_input_num = 0; } + + if ((et4000->acl.internal.ctrl_routing & 7) == 4) /*CPU data is X Count*/ + et4000w32_blit(val | (et4000->acl.queued.count_x << 8), 0, 0, 0xffffffff, et4000); + if ((et4000->acl.internal.ctrl_routing & 7) == 5) /*CPU data is Y Count*/ + et4000w32_blit(val | (et4000->acl.queued.count_y << 8), 0, 0, 0xffffffff, et4000); } } } - -void +static void et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *p) { et4000w32p_t *et4000 = (et4000w32p_t *)p; @@ -734,7 +837,7 @@ et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *p) case 0x4000: /* MMU 2 */ et4000->bank = (addr >> 13) & 3; if (et4000->mmu.ctrl & (1 << et4000->bank)) { - et4000w32p_accel_write_mmu(et4000, addr & 0x7fff, val); + et4000w32p_accel_write_mmu(et4000, addr & 0x7fff, val, et4000->bank); } else { if (((addr & 0x1fff) + et4000->mmu.base[et4000->bank]) < svga->vram_max) { svga->vram[(addr & 0x1fff) + et4000->mmu.base[et4000->bank]] = val; @@ -743,43 +846,65 @@ et4000w32p_mmu_write(uint32_t addr, uint8_t val, void *p) } break; case 0x6000: - if ((addr & 0x7fff) >= 0x7f80) { + if ((addr & 0xff) >= 0x80) { et4000w32p_accel_write_fifo(et4000, addr & 0x7fff, val); - } else switch (addr & 0x7fff) { - case 0x7f00: et4000->mmu.base[0] = (et4000->mmu.base[0] & 0xFFFFFF00) | val; break; - case 0x7f01: et4000->mmu.base[0] = (et4000->mmu.base[0] & 0xFFFF00FF) | (val << 8); break; - case 0x7f02: et4000->mmu.base[0] = (et4000->mmu.base[0] & 0xFF00FFFF) | (val << 16); break; - case 0x7f03: et4000->mmu.base[0] = (et4000->mmu.base[0] & 0x00FFFFFF) | (val << 24); break; - case 0x7f04: et4000->mmu.base[1] = (et4000->mmu.base[1] & 0xFFFFFF00) | val; break; - case 0x7f05: et4000->mmu.base[1] = (et4000->mmu.base[1] & 0xFFFF00FF) | (val << 8); break; - case 0x7f06: et4000->mmu.base[1] = (et4000->mmu.base[1] & 0xFF00FFFF) | (val << 16); break; - case 0x7f07: et4000->mmu.base[1] = (et4000->mmu.base[1] & 0x00FFFFFF) | (val << 24); break; - case 0x7f08: et4000->mmu.base[2] = (et4000->mmu.base[2] & 0xFFFFFF00) | val; break; - case 0x7f09: et4000->mmu.base[2] = (et4000->mmu.base[2] & 0xFFFF00FF) | (val << 8); break; - case 0x7f0a: et4000->mmu.base[2] = (et4000->mmu.base[2] & 0xFF00FFFF) | (val << 16); break; - case 0x7f0b: et4000->mmu.base[2] = (et4000->mmu.base[2] & 0x00FFFFFF) | (val << 24); break; - case 0x7f13: et4000->mmu.ctrl = val; break; - case 0x7f31: et4000->acl.osr = val; break; + } else { + switch (addr & 0xff) { + case 0x00: + et4000->mmu.base[0] = (et4000->mmu.base[0] & 0x3fff00) | val; + break; + case 0x01: + et4000->mmu.base[0] = (et4000->mmu.base[0] & 0x3f00ff) | (val << 8); + break; + case 0x02: + et4000->mmu.base[0] = (et4000->mmu.base[0] & 0x00ffff) | ((val & 0x3f) << 16); + break; + case 0x04: + et4000->mmu.base[1] = (et4000->mmu.base[1] & 0x3fff00) | val; + break; + case 0x05: + et4000->mmu.base[1] = (et4000->mmu.base[1] & 0x3f00ff) | (val << 8); + break; + case 0x06: + et4000->mmu.base[1] = (et4000->mmu.base[1] & 0x00ffff) | ((val & 0x3f) << 16); + break; + case 0x08: + et4000->mmu.base[2] = (et4000->mmu.base[2] & 0x3fff00) | val; + break; + case 0x09: + et4000->mmu.base[2] = (et4000->mmu.base[2] & 0x3f00ff) | (val << 8); + break; + case 0x0a: + et4000->mmu.base[2] = (et4000->mmu.base[2] & 0x00ffff) | ((val & 0x3f) << 16); + break; + case 0x13: + et4000->mmu.ctrl = val; + break; + case 0x30: + et4000->acl.suspend_terminate = val; + break; + case 0x31: + et4000->acl.osr = val; + break; + } } break; } } - -uint8_t +static uint8_t et4000w32p_mmu_read(uint32_t addr, void *p) { et4000w32p_t *et4000 = (et4000w32p_t *)p; svga_t *svga = &et4000->svga; - int bank; uint8_t temp; switch (addr & 0x6000) { case 0x0000: /* MMU 0 */ case 0x2000: /* MMU 1 */ case 0x4000: /* MMU 2 */ - bank = (addr >> 13) & 3; - if (et4000->mmu.ctrl & (1 << bank)) { + et4000->bank = (addr >> 13) & 3; + if (et4000->mmu.ctrl & (1 << et4000->bank)) { temp = 0xff; if (et4000->acl.cpu_dat_pos) { et4000->acl.cpu_dat_pos--; @@ -793,84 +918,97 @@ et4000w32p_mmu_read(uint32_t addr, void *p) return temp; } - if ((addr&0x1fff) + et4000->mmu.base[bank] >= svga->vram_max) + if ((addr & 0x1fff) + et4000->mmu.base[et4000->bank] >= svga->vram_max) return 0xff; - return svga->vram[(addr&0x1fff) + et4000->mmu.base[bank]]; + return svga->vram[(addr & 0x1fff) + et4000->mmu.base[et4000->bank]]; case 0x6000: - switch (addr & 0x7fff) { - case 0x7f00: return et4000->mmu.base[0]; - case 0x7f01: return et4000->mmu.base[0] >> 8; - case 0x7f02: return et4000->mmu.base[0] >> 16; - case 0x7f03: return et4000->mmu.base[0] >> 24; - case 0x7f04: return et4000->mmu.base[1]; - case 0x7f05: return et4000->mmu.base[1] >> 8; - case 0x7f06: return et4000->mmu.base[1] >> 16; - case 0x7f07: return et4000->mmu.base[1] >> 24; - case 0x7f08: return et4000->mmu.base[2]; - case 0x7f09: return et4000->mmu.base[2] >> 8; - case 0x7f0a: return et4000->mmu.base[2] >> 16; - case 0x7f0b: return et4000->mmu.base[2] >> 24; - case 0x7f13: return et4000->mmu.ctrl; + switch (addr & 0xff) { + case 0x00: + return et4000->mmu.base[0] & 0xff; + case 0x01: + return et4000->mmu.base[0] >> 8; + case 0x02: + return et4000->mmu.base[0] >> 16; + case 0x03: + return et4000->mmu.base[0] >> 24; + case 0x04: + return et4000->mmu.base[1] & 0xff; + case 0x05: + return et4000->mmu.base[1] >> 8; + case 0x06: + return et4000->mmu.base[1] >> 16; + case 0x07: + return et4000->mmu.base[1] >> 24; + case 0x08: + return et4000->mmu.base[2] & 0xff; + case 0x09: + return et4000->mmu.base[2] >> 8; + case 0x0a: + return et4000->mmu.base[2] >> 16; + case 0x0b: + return et4000->mmu.base[2] >> 24; + case 0x13: + return et4000->mmu.ctrl; - case 0x7f36: - if (et4000->type >= ET4000W32P_REVC) { - if (et4000->acl.queue) { - et4000->acl.status |= ACL_RDST; - et4000->acl.queue = 0; - } else - et4000->acl.status &= ~ACL_RDST; - - temp = et4000->acl.status; - } else { - et4000->acl.status &= ~(ACL_XYST | ACL_SSO); + case 0x36: + if (et4000->acl.fifo_queue) { + et4000->acl.status |= ACL_RDST; + et4000->acl.fifo_queue = 0; + } else + et4000->acl.status &= ~ACL_RDST; + return et4000->acl.status; - if (et4000->acl.queue) { - et4000->acl.status |= ACL_RDST; - et4000->acl.queue = 0; - } else - et4000->acl.status &= ~ACL_RDST; - - temp = et4000->acl.status; - } - return temp; - - case 0x7f80: return et4000->acl.internal.pattern_addr; - case 0x7f81: return et4000->acl.internal.pattern_addr >> 8; - case 0x7f82: return et4000->acl.internal.pattern_addr >> 16; - case 0x7f83: return et4000->acl.internal.pattern_addr >> 24; - case 0x7f84: return et4000->acl.internal.source_addr; - case 0x7f85: return et4000->acl.internal.source_addr >> 8; - case 0x7f86: return et4000->acl.internal.source_addr >> 16; - case 0x7f87: return et4000->acl.internal.source_addr >> 24; - case 0x7f88: return et4000->acl.internal.pattern_off; - case 0x7f89: return et4000->acl.internal.pattern_off >> 8; - case 0x7f8a: return et4000->acl.internal.source_off; - case 0x7f8b: return et4000->acl.internal.source_off >> 8; - case 0x7f8c: return et4000->acl.internal.dest_off; - case 0x7f8d: return et4000->acl.internal.dest_off >> 8; - case 0x7f8e: + case 0x80: + return et4000->acl.internal.pattern_addr & 0xff; + case 0x81: + return et4000->acl.internal.pattern_addr >> 8; + case 0x82: + return et4000->acl.internal.pattern_addr >> 16; + case 0x83: + return et4000->acl.internal.pattern_addr >> 24; + case 0x84: + return et4000->acl.internal.source_addr & 0xff; + case 0x85: + return et4000->acl.internal.source_addr >> 8; + case 0x86: + return et4000->acl.internal.source_addr >> 16; + case 0x87: + return et4000->acl.internal.source_addr >> 24; + case 0x88: + return et4000->acl.internal.pattern_off & 0xff; + case 0x89: + return et4000->acl.internal.pattern_off >> 8; + case 0x8a: + return et4000->acl.internal.source_off & 0xff; + case 0x8b: + return et4000->acl.internal.source_off >> 8; + case 0x8c: + return et4000->acl.internal.dest_off & 0xff; + case 0x8d: + return et4000->acl.internal.dest_off >> 8; + case 0x8e: if (et4000->type >= ET4000W32P_REVC) return et4000->acl.internal.pixel_depth; else return et4000->acl.internal.vbus; break; - case 0x7f8f: return et4000->acl.internal.xy_dir; - case 0x7f90: return et4000->acl.internal.pattern_wrap; - case 0x7f92: return et4000->acl.internal.source_wrap; - case 0x7f98: return et4000->acl.internal.count_x; - case 0x7f99: return et4000->acl.internal.count_x >> 8; - case 0x7f9a: return et4000->acl.internal.count_y; - case 0x7f9b: return et4000->acl.internal.count_y >> 8; - case 0x7f9c: return et4000->acl.internal.ctrl_routing; - case 0x7f9d: return et4000->acl.internal.ctrl_reload; - case 0x7f9e: return et4000->acl.internal.rop_bg; - case 0x7f9f: return et4000->acl.internal.rop_fg; - case 0x7fa0: return et4000->acl.internal.dest_addr; - case 0x7fa1: return et4000->acl.internal.dest_addr >> 8; - case 0x7fa2: return et4000->acl.internal.dest_addr >> 16; - case 0x7fa3: return et4000->acl.internal.dest_addr >> 24; + case 0x8f: return et4000->acl.internal.xy_dir; + case 0x90: return et4000->acl.internal.pattern_wrap; + case 0x92: return et4000->acl.internal.source_wrap; + case 0x98: return et4000->acl.internal.count_x & 0xff; + case 0x99: return et4000->acl.internal.count_x >> 8; + case 0x9a: return et4000->acl.internal.count_y & 0xff; + case 0x9b: return et4000->acl.internal.count_y >> 8; + case 0x9c: return et4000->acl.internal.ctrl_routing; + case 0x9d: return et4000->acl.internal.ctrl_reload; + case 0x9e: return et4000->acl.internal.rop_bg; + case 0x9f: return et4000->acl.internal.rop_fg; + case 0xa0: return et4000->acl.internal.dest_addr & 0xff; + case 0xa1: return et4000->acl.internal.dest_addr >> 8; + case 0xa2: return et4000->acl.internal.dest_addr >> 16; + case 0xa3: return et4000->acl.internal.dest_addr >> 24; } return 0xff; @@ -883,16 +1021,19 @@ et4000w32p_mmu_read(uint32_t addr, void *p) void et4000w32_blit_start(et4000w32p_t *et4000) { - et4000->acl.pattern_addr = et4000->acl.internal.pattern_addr; - et4000->acl.source_addr = et4000->acl.internal.source_addr; - et4000->acl.dest_addr = et4000->acl.internal.dest_addr; - et4000->acl.dest_back = et4000->acl.dest_addr; - et4000->acl.internal.pos_x = et4000->acl.internal.pos_y = 0; - et4000->acl.pattern_x = et4000->acl.source_x = et4000->acl.pattern_y = et4000->acl.source_y = 0; + et4000->acl.x_count = et4000->acl.internal.count_x; + et4000->acl.y_count = et4000->acl.internal.count_y; + + et4000->acl.pattern_addr = et4000->acl.internal.pattern_addr; + et4000->acl.source_addr = et4000->acl.internal.source_addr; + et4000->acl.dest_addr = et4000->acl.internal.dest_addr; + et4000->acl.dest_back = et4000->acl.dest_addr; + et4000->acl.pattern_x = et4000->acl.source_x = et4000->acl.pattern_y = et4000->acl.source_y = 0; et4000->acl.status |= ACL_XYST; + et4000->acl.status &= ~ACL_SSO; - if (!(et4000->acl.internal.ctrl_routing & 7)) + if (!(et4000->acl.internal.ctrl_routing & 7) || (et4000->acl.internal.ctrl_routing & 4)) et4000->acl.status |= ACL_SSO; if (et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7]) { @@ -900,10 +1041,11 @@ et4000w32_blit_start(et4000w32p_t *et4000) et4000->acl.pattern_addr &= ~et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7]; } et4000->acl.pattern_back = et4000->acl.pattern_addr; + if (!(et4000->acl.internal.pattern_wrap & 0x40)) { - if ((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) == 0x00) + if ((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) == 0x00) { /*This is to avoid a division by zero crash*/ et4000->acl.pattern_y = (et4000->acl.pattern_addr / (0x7f + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7] - 1); - else + } else et4000->acl.pattern_y = (et4000->acl.pattern_addr / (et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7] - 1); et4000->acl.pattern_back &= ~(((et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1) * et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7]) - 1); } @@ -913,13 +1055,12 @@ et4000w32_blit_start(et4000w32p_t *et4000) et4000->acl.source_x = et4000->acl.source_addr & et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7]; et4000->acl.source_addr &= ~et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7]; } - et4000->acl.source_back = et4000->acl.source_addr; if (!(et4000->acl.internal.source_wrap & 0x40)) { - if ((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) == 0x00) + if ((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) == 0x00) { /*This is to avoid a division by zero crash*/ et4000->acl.source_y = (et4000->acl.source_addr / (0x7f + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1); - else + } else et4000->acl.source_y = (et4000->acl.source_addr / (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1); et4000->acl.source_back &= ~(((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) * et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7]) - 1); } @@ -927,9 +1068,12 @@ et4000w32_blit_start(et4000w32p_t *et4000) } -void +static void et4000w32p_blit_start(et4000w32p_t *et4000) { + et4000->acl.x_count = et4000->acl.internal.count_x; + et4000->acl.y_count = et4000->acl.internal.count_y; + if (!(et4000->acl.queued.xy_dir & 0x20)) et4000->acl.internal.error = et4000->acl.internal.dmaj / 2; et4000->acl.pattern_addr = et4000->acl.internal.pattern_addr; @@ -941,6 +1085,7 @@ et4000w32p_blit_start(et4000w32p_t *et4000) et4000->acl.internal.pos_x = et4000->acl.internal.pos_y = 0; et4000->acl.pattern_x = et4000->acl.source_x = et4000->acl.pattern_y = et4000->acl.source_y = 0; et4000->acl.status |= ACL_XYST; + et4000w32_log("ACL status XYST set\n"); if ((!(et4000->acl.internal.ctrl_routing & 7) || (et4000->acl.internal.ctrl_routing & 4)) && !(et4000->acl.internal.ctrl_routing & 0x40)) et4000->acl.status |= ACL_SSO; @@ -961,13 +1106,14 @@ et4000w32p_blit_start(et4000w32p_t *et4000) et4000->acl.source_addr &= ~et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7]; } et4000->acl.source_back = et4000->acl.source_addr; + if (!(et4000->acl.internal.source_wrap & 0x40)) { et4000->acl.source_y = (et4000->acl.source_addr / (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1)) & (et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1); et4000->acl.source_back &= ~(((et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1) * et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7]) - 1); } et4000->acl.source_x_back = et4000->acl.source_x; - et4000w32_max_x[2] = ((et4000->acl.internal.pixel_depth & 0x30) == 0x20) ? 3 : 4; + et4000w32_max_x[2] = (et4000->acl.internal.pixel_depth == 0x20) ? 3 : 4; et4000->acl.internal.count_x += (et4000->acl.internal.pixel_depth >> 4) & 3; et4000->acl.cpu_dat_pos = 0; @@ -1040,24 +1186,393 @@ et4000w32_decy(et4000w32p_t *et4000) et4000->acl.source_y--; if (et4000->acl.source_y < 0 && !(et4000->acl.internal.source_wrap & 0x40)) { et4000->acl.source_y = et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1; - et4000->acl.source_addr = et4000->acl.source_back + (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] *(et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1));; + et4000->acl.source_addr = et4000->acl.source_back + (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] *(et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1)); } } -void +#define ROPMIX(R, D, P, S, out) \ + { \ + switch (R) { \ + case 0x00: out = 0; break; \ + case 0x01: out = ~(D | (P | S)); break; \ + case 0x02: out = D & ~(P | S); break; \ + case 0x03: out = ~(P | S); break; \ + case 0x04: out = S & ~(D | P); break; \ + case 0x05: out = ~(D | P); break; \ + case 0x06: out = ~(P | ~(D ^ S)); break; \ + case 0x07: out = ~(P | (D & S)); break; \ + case 0x08: out = S & (D & ~P); break; \ + case 0x09: out = ~(P | (D ^ S)); break; \ + case 0x0a: out = D & ~P; break; \ + case 0x0b: out = ~(P | (S & ~D)); break; \ + case 0x0c: out = S & ~P; break; \ + case 0x0d: out = ~(P | (D & ~S)); break; \ + case 0x0e: out = ~(P | ~(D | S)); break; \ + case 0x0f: out = ~P; break; \ + case 0x10: out = P & ~(D | S); break; \ + case 0x11: out = ~(D | S); break; \ + case 0x12: out = ~(S | ~(D ^ P)); break; \ + case 0x13: out = ~(S | (D & P)); break; \ + case 0x14: out = ~(D | ~(P ^ S)); break; \ + case 0x15: out = ~(D | (P & S)); break; \ + case 0x16: out = P ^ (S ^ (D & ~(P & S))); break; \ + case 0x17: out = ~(S ^ ((S ^ P) & (D ^ S))); break; \ + case 0x18: out = (S ^ P) & (P ^ D); break; \ + case 0x19: out = ~(S ^ (D & ~(P & S))); break; \ + case 0x1a: out = P ^ (D | (S & P)); break; \ + case 0x1b: out = ~(S ^ (D & (P ^ S))); break; \ + case 0x1c: out = P ^ (S | (D & P)); break; \ + case 0x1d: out = ~(D ^ (S & (P ^ D))); break; \ + case 0x1e: out = P ^ (D | S); break; \ + case 0x1f: out = ~(P & (D | S)); break; \ + case 0x20: out = D & (P & ~S); break; \ + case 0x21: out = ~(S | (D ^ P)); break; \ + case 0x22: out = D & ~S; break; \ + case 0x23: out = ~(S | (P & ~D)); break; \ + case 0x24: out = (S ^ P) & (D ^ S); break; \ + case 0x25: out = ~(P ^ (D & ~(S & P))); break; \ + case 0x26: out = S ^ (D | (P & S)); break; \ + case 0x27: out = S ^ (D | ~(P ^ S)); break; \ + case 0x28: out = D & (P ^ S); break; \ + case 0x29: out = ~(P ^ (S ^ (D | (P & S)))); break; \ + case 0x2a: out = D & ~(P & S); break; \ + case 0x2b: out = ~(S ^ ((S ^ P) & (P ^ D))); break; \ + case 0x2c: out = S ^ (P & (D | S)); break; \ + case 0x2d: out = P ^ (S | ~D); break; \ + case 0x2e: out = P ^ (S | (D ^ P)); break; \ + case 0x2f: out = ~(P & (S | ~D)); break; \ + case 0x30: out = P & ~S; break; \ + case 0x31: out = ~(S | (D & ~P)); break; \ + case 0x32: out = S ^ (D | (P | S)); break; \ + case 0x33: out = ~S; break; \ + case 0x34: out = S ^ (P | (D & S)); break; \ + case 0x35: out = S ^ (P | ~(D ^ S)); break; \ + case 0x36: out = S ^ (D | P); break; \ + case 0x37: out = ~(S & (D | P)); break; \ + case 0x38: out = P ^ (S & (D | P)); break; \ + case 0x39: out = S ^ (P | ~D); break; \ + case 0x3a: out = S ^ (P | (D ^ S)); break; \ + case 0x3b: out = ~(S & (P | ~D)); break; \ + case 0x3c: out = P ^ S; break; \ + case 0x3d: out = S ^ (P | ~(D | S)); break; \ + case 0x3e: out = S ^ (P | (D & ~S)); break; \ + case 0x3f: out = ~(P & S); break; \ + case 0x40: out = P & (S & ~D); break; \ + case 0x41: out = ~(D | (P ^ S)); break; \ + case 0x42: out = (S ^ D) & (P ^ D); break; \ + case 0x43: out = ~(S ^ (P & ~(D & S))); break; \ + case 0x44: out = S & ~D; break; \ + case 0x45: out = ~(D | (P & ~S)); break; \ + case 0x46: out = D ^ (S | (P & D)); break; \ + case 0x47: out = ~(P ^ (S & (D ^ P))); break; \ + case 0x48: out = S & (D ^ P); break; \ + case 0x49: out = ~(P ^ (D ^ (S | (P & D)))); break; \ + case 0x4a: out = D ^ (P & (S | D)); break; \ + case 0x4b: out = P ^ (D | ~S); break; \ + case 0x4c: out = S & ~(D & P); break; \ + case 0x4d: out = ~(S ^ ((S ^ P) | (D ^ S))); break; \ + case 0x4e: out = P ^ (D | (S ^ P)); break; \ + case 0x4f: out = ~(P & (D | ~S)); break; \ + case 0x50: out = P & ~D; break; \ + case 0x51: out = ~(D | (S & ~P)); break; \ + case 0x52: out = D ^ (P | (S & D)); break; \ + case 0x53: out = ~(S ^ (P & (D ^ S))); break; \ + case 0x54: out = ~(D | ~(P | S)); break; \ + case 0x55: out = ~D; break; \ + case 0x56: out = D ^ (P | S); break; \ + case 0x57: out = ~(D & (P | S)); break; \ + case 0x58: out = P ^ (D & (S | P)); break; \ + case 0x59: out = D ^ (P | ~S); break; \ + case 0x5a: out = D ^ P; break; \ + case 0x5b: out = D ^ (P | ~(S | D)); break; \ + case 0x5c: out = D ^ (P | (S ^ D)); break; \ + case 0x5d: out = ~(D & (P | ~S)); break; \ + case 0x5e: out = D ^ (P | (S & ~D)); break; \ + case 0x5f: out = ~(D & P); break; \ + case 0x60: out = P & (D ^ S); break; \ + case 0x61: out = ~(D ^ (S ^ (P | (D & S)))); break; \ + case 0x62: out = D ^ (S & (P | D)); break; \ + case 0x63: out = S ^ (D | ~P); break; \ + case 0x64: out = S ^ (D & (P | S)); break; \ + case 0x65: out = D ^ (S | ~P); break; \ + case 0x66: out = D ^ S; break; \ + case 0x67: out = S ^ (D | ~(P | S)); break; \ + case 0x68: out = ~(D ^ (S ^ (P | ~(D | S)))); break; \ + case 0x69: out = ~(P ^ (D ^ S)); break; \ + case 0x6a: out = D ^ (P & S); break; \ + case 0x6b: out = ~(P ^ (S ^ (D & (P | S)))); break; \ + case 0x6c: out = S ^ (D & P); break; \ + case 0x6d: out = ~(P ^ (D ^ (S & (P | D)))); break; \ + case 0x6e: out = S ^ (D & (P | ~S)); break; \ + case 0x6f: out = ~(P & ~(D ^ S)); break; \ + case 0x70: out = P & ~(D & S); break; \ + case 0x71: out = ~(S ^ ((S ^ D) & (P ^ D))); break; \ + case 0x72: out = S ^ (D | (P ^ S)); break; \ + case 0x73: out = ~(S & (D | ~P)); break; \ + case 0x74: out = D ^ (S | (P ^ D)); break; \ + case 0x75: out = ~(D & (S | ~P)); break; \ + case 0x76: out = S ^ (D | (P & ~S)); break; \ + case 0x77: out = ~(D & S); break; \ + case 0x78: out = P ^ (D & S); break; \ + case 0x79: out = ~(D ^ (S ^ (P & (D | S)))); break; \ + case 0x7a: out = D ^ (P & (S | ~D)); break; \ + case 0x7b: out = ~(S & ~(D ^ P)); break; \ + case 0x7c: out = S ^ (P & (D | ~S)); break; \ + case 0x7d: out = ~(D & ~(P ^ S)); break; \ + case 0x7e: out = (S ^ P) | (D ^ S); break; \ + case 0x7f: out = ~(D & (P & S)); break; \ + case 0x80: out = D & (P & S); break; \ + case 0x81: out = ~((S ^ P) | (D ^ S)); break; \ + case 0x82: out = D & ~(P ^ S); break; \ + case 0x83: out = ~(S ^ (P & (D | ~S))); break; \ + case 0x84: out = S & ~(D ^ P); break; \ + case 0x85: out = ~(P ^ (D & (S | ~P))); break; \ + case 0x86: out = D ^ (S ^ (P & (D | S))); break; \ + case 0x87: out = ~(P ^ (D & S)); break; \ + case 0x88: out = D & S; break; \ + case 0x89: out = ~(S ^ (D | (P & ~S))); break; \ + case 0x8a: out = D & (S | ~P); break; \ + case 0x8b: out = ~(D ^ (S | (P ^ D))); break; \ + case 0x8c: out = S & (D | ~P); break; \ + case 0x8d: out = ~(S ^ (D | (P ^ S))); break; \ + case 0x8e: out = S ^ ((S ^ D) & (P ^ D)); break; \ + case 0x8f: out = ~(P & ~(D & S)); break; \ + case 0x90: out = P & ~(D ^ S); break; \ + case 0x91: out = ~(S ^ (D & (P | ~S))); break; \ + case 0x92: out = D ^ (P ^ (S & (D | P))); break; \ + case 0x93: out = ~(S ^ (P & D)); break; \ + case 0x94: out = P ^ (S ^ (D & (P | S))); break; \ + case 0x95: out = ~(D ^ (P & S)); break; \ + case 0x96: out = D ^ (P ^ S); break; \ + case 0x97: out = P ^ (S ^ (D | ~(P | S))); break; \ + case 0x98: out = ~(S ^ (D | ~(P | S))); break; \ + case 0x99: out = ~(D ^ S); break; \ + case 0x9a: out = D ^ (P & ~S); break; \ + case 0x9b: out = ~(S ^ (D & (P | S))); break; \ + case 0x9c: out = S ^ (P & ~D); break; \ + case 0x9d: out = ~(D ^ (S & (P | D))); break; \ + case 0x9e: out = D ^ (S ^ (P | (D & S))); break; \ + case 0x9f: out = ~(P & (D ^ S)); break; \ + case 0xa0: out = D & P; break; \ + case 0xa1: out = ~(P ^ (D | (S & ~P))); break; \ + case 0xa2: out = D & (P | ~S); break; \ + case 0xa3: out = ~(D ^ (P | (S ^ D))); break; \ + case 0xa4: out = ~(P ^ (D | ~(S | P))); break; \ + case 0xa5: out = ~(P ^ D); break; \ + case 0xa6: out = D ^ (S & ~P); break; \ + case 0xa7: out = ~(P ^ (D & (S | P))); break; \ + case 0xa8: out = D & (P | S); break; \ + case 0xa9: out = ~(D ^ (P | S)); break; \ + case 0xaa: out = D; break; \ + case 0xab: out = D | ~(P | S); break; \ + case 0xac: out = S ^ (P & (D ^ S)); break; \ + case 0xad: out = ~(D ^ (P | (S & D))); break; \ + case 0xae: out = D | (S & ~P); break; \ + case 0xaf: out = D | ~P; break; \ + case 0xb0: out = P & (D | ~S); break; \ + case 0xb1: out = ~(P ^ (D | (S ^ P))); break; \ + case 0xb2: out = S ^ ((S ^ P) | (D ^ S)); break; \ + case 0xb3: out = ~(S & ~(D & P)); break; \ + case 0xb4: out = P ^ (S & ~D); break; \ + case 0xb5: out = ~(D ^ (P & (S | D))); break; \ + case 0xb6: out = D ^ (P ^ (S | (D & P))); break; \ + case 0xb7: out = ~(S & (D ^ P)); break; \ + case 0xb8: out = P ^ (S & (D ^ P)); break; \ + case 0xb9: out = ~(D ^ (S | (P & D))); break; \ + case 0xba: out = D | (P & ~S); break; \ + case 0xbb: out = D | ~S; break; \ + case 0xbc: out = S ^ (P & ~(D & S)); break; \ + case 0xbd: out = ~((S ^ D) & (P ^ D)); break; \ + case 0xbe: out = D | (P ^ S); break; \ + case 0xbf: out = D | ~(P & S); break; \ + case 0xc0: out = P & S; break; \ + case 0xc1: out = ~(S ^ (P | (D & ~S))); break; \ + case 0xc2: out = ~(S ^ (P | ~(D | S))); break; \ + case 0xc3: out = ~(P ^ S); break; \ + case 0xc4: out = S & (P | ~D); break; \ + case 0xc5: out = ~(S ^ (P | (D ^ S))); break; \ + case 0xc6: out = S ^ (D & ~P); break; \ + case 0xc7: out = ~(P ^ (S & (D | P))); break; \ + case 0xc8: out = S & (D | P); break; \ + case 0xc9: out = ~(S ^ (P | D)); break; \ + case 0xca: out = D ^ (P & (S ^ D)); break; \ + case 0xcb: out = ~(S ^ (P | (D & S))); break; \ + case 0xcc: out = S; break; \ + case 0xcd: out = S | ~(D | P); break; \ + case 0xce: out = S | (D & ~P); break; \ + case 0xcf: out = S | ~P; break; \ + case 0xd0: out = P & (S | ~D); break; \ + case 0xd1: out = ~(P ^ (S | (D ^ P))); break; \ + case 0xd2: out = P ^ (D & ~S); break; \ + case 0xd3: out = ~(S ^ (P & (D | S))); break; \ + case 0xd4: out = S ^ ((S ^ P) & (P ^ D)); break; \ + case 0xd5: out = ~(D & ~(P & S)); break; \ + case 0xd6: out = P ^ (S ^ (D | (P & S))); break; \ + case 0xd7: out = ~(D & (P ^ S)); break; \ + case 0xd8: out = P ^ (D & (S ^ P)); break; \ + case 0xd9: out = ~(S ^ (D | (P & S))); break; \ + case 0xda: out = D ^ (P & ~(S & D)); break; \ + case 0xdb: out = ~((S ^ P) & (D ^ S)); break; \ + case 0xdc: out = S | (P & ~D); break; \ + case 0xdd: out = S | ~D; break; \ + case 0xde: out = S | (D ^ P); break; \ + case 0xdf: out = S | ~(D & P); break; \ + case 0xe0: out = P & (D | S); break; \ + case 0xe1: out = ~(P ^ (D | S)); break; \ + case 0xe2: out = D ^ (S & (P ^ D)); break; \ + case 0xe3: out = ~(P ^ (S | (D & P))); break; \ + case 0xe4: out = S ^ (D & (P ^ S)); break; \ + case 0xe5: out = ~(P ^ (D | (S & P))); break; \ + case 0xe6: out = S ^ (D & ~(P & S)); break; \ + case 0xe7: out = ~((S ^ P) & (P ^ D)); break; \ + case 0xe8: out = S ^ ((S ^ P) & (D ^ S)); break; \ + case 0xe9: out = ~(D ^ (S ^ (P & ~(D & S)))); break; \ + case 0xea: out = D | (P & S); break; \ + case 0xeb: out = D | ~(P ^ S); break; \ + case 0xec: out = S | (D & P); break; \ + case 0xed: out = S | ~(D ^ P); break; \ + case 0xee: out = D | S; break; \ + case 0xef: out = S | (D | ~P); break; \ + case 0xf0: out = P; break; \ + case 0xf1: out = P | ~(D | S); break; \ + case 0xf2: out = P | (D & ~S); break; \ + case 0xf3: out = P | ~S; break; \ + case 0xf4: out = P | (S & ~D); break; \ + case 0xf5: out = P | ~D; break; \ + case 0xf6: out = P | (D ^ S); break; \ + case 0xf7: out = P | ~(D & S); break; \ + case 0xf8: out = P | (D & S); break; \ + case 0xf9: out = P | ~(D ^ S); break; \ + case 0xfa: out = D | P; break; \ + case 0xfb: out = D | (P | ~S); break; \ + case 0xfc: out = P | S; break; \ + case 0xfd: out = P | (S | ~D); break; \ + case 0xfe: out = D | (P | S); break; \ + case 0xff: out = ~0; break; \ + } \ + } + +static void +et4000w32_blit(int count, int cpu_input, uint32_t src_dat, uint32_t mix_dat, et4000w32p_t *et4000) +{ + svga_t *svga = &et4000->svga; + uint8_t pattern, source, dest; + uint8_t rop; + int mixmap; + + while (count-- && et4000->acl.y_count >= 0) { + pattern = svga->vram[(et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask]; + + if (cpu_input == 1) { + source = src_dat & 0xff; + src_dat >>= 8; + } else /*The source data is from the display memory if the Control Routing register is not set to 1*/ + source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; + + dest = svga->vram[et4000->acl.dest_addr & et4000->vram_mask]; + mixmap = mix_dat & 1; + + /*Now determine the Raster Operation*/ + rop = mixmap ? et4000->acl.internal.rop_fg : et4000->acl.internal.rop_bg; + mix_dat >>= 1; + mix_dat |= 0x80000000; + + ROPMIX(rop, dest, pattern, source, dest); + + /*Write the data*/ + svga->vram[et4000->acl.dest_addr & et4000->vram_mask] = dest; + svga->changedvram[(et4000->acl.dest_addr & et4000->vram_mask) >> 12] = changeframecount; + + if (et4000->acl.internal.xy_dir & 1) { + et4000->acl.dest_addr--; + et4000->acl.pattern_x--; + et4000->acl.source_x--; + if (et4000->acl.pattern_x < 0) + et4000->acl.pattern_x += (et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1); + if (et4000->acl.source_x < 0) + et4000->acl.source_x += (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1); + } else { + et4000->acl.dest_addr++; + et4000->acl.pattern_x++; + et4000->acl.source_x++; + if (et4000->acl.pattern_x >= (et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1)) + et4000->acl.pattern_x -= (et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] + 1); + if (et4000->acl.source_x >= (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1)) + et4000->acl.source_x -= (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] + 1); + } + + et4000->acl.x_count--; + if (et4000->acl.x_count == 0xffff) { + et4000->acl.x_count = et4000->acl.internal.count_x; + + if (et4000->acl.internal.xy_dir & 2) { + et4000->acl.pattern_addr -= (et4000->acl.internal.pattern_off + 1); + et4000->acl.source_addr -= (et4000->acl.internal.source_off + 1); + et4000->acl.dest_addr -= (et4000->acl.internal.dest_off + 1); + et4000->acl.pattern_y--; + if ((et4000->acl.pattern_y < 0) && !(et4000->acl.internal.pattern_wrap & 0x40)) { + et4000->acl.pattern_y = et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7] - 1; + et4000->acl.pattern_addr = et4000->acl.pattern_back + (et4000w32_wrap_x[et4000->acl.internal.pattern_wrap & 7] * (et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7] - 1)); + } + et4000->acl.source_y--; + if ((et4000->acl.source_y < 0) && !(et4000->acl.internal.source_wrap & 0x40)) { + et4000->acl.source_y = et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1; + et4000->acl.source_addr = et4000->acl.source_back + (et4000w32_wrap_x[et4000->acl.internal.source_wrap & 7] * (et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7] - 1)); + } + et4000->acl.dest_back = et4000->acl.dest_addr = et4000->acl.dest_back - (et4000->acl.internal.dest_off + 1); + } else { + et4000->acl.pattern_addr += (et4000->acl.internal.pattern_off + 1); + et4000->acl.source_addr += (et4000->acl.internal.source_off + 1); + et4000->acl.dest_addr += (et4000->acl.internal.dest_off + 1); + et4000->acl.pattern_y++; + if (et4000->acl.pattern_y == et4000w32_wrap_y[(et4000->acl.internal.pattern_wrap >> 4) & 7]) { + et4000->acl.pattern_y = 0; + et4000->acl.pattern_addr = et4000->acl.pattern_back; + } + et4000->acl.source_y++; + if (et4000->acl.source_y == et4000w32_wrap_y[(et4000->acl.internal.source_wrap >> 4) & 7]) { + et4000->acl.source_y = 0; + et4000->acl.source_addr = et4000->acl.source_back; + } + et4000->acl.dest_back = et4000->acl.dest_addr = et4000->acl.dest_back + (et4000->acl.internal.dest_off + 1); + } + + et4000->acl.pattern_x = et4000->acl.pattern_x_back; + et4000->acl.source_x = et4000->acl.source_x_back; + + et4000->acl.y_count--; + if (et4000->acl.y_count == 0xffff) { + et4000->acl.status &= ~ACL_XYST; + if (!(et4000->acl.internal.ctrl_routing & 7) || (et4000->acl.internal.ctrl_routing & 4)) { + et4000w32_log("W32i: end blit, xcount = %i\n", et4000->acl.x_count); + et4000->acl.status &= ~ACL_SSO; + } + et4000->acl.cpu_input_num = 0; + return; + } + + if (cpu_input) + return; + } + } +} + +static void et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32p_t *et4000) { svga_t *svga = &et4000->svga; - int c, d; uint8_t pattern, source, dest, out; uint8_t rop; int mixdat; - if (!(et4000->acl.status & ACL_XYST) && (et4000->type >= ET4000W32P_REVC)) - return; + if (!(et4000->acl.status & ACL_XYST)) { + et4000w32_log("XY Block not started\n"); + return; + } if (et4000->acl.internal.xy_dir & 0x80) { /* Line draw */ + et4000w32_log("Line draw\n"); while (count--) { et4000w32_log("%i,%i : ", et4000->acl.internal.pos_x, et4000->acl.internal.pos_y); pattern = svga->vram[(et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask]; @@ -1080,12 +1595,9 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 } et4000->acl.mix_addr++; rop = mixdat ? et4000->acl.internal.rop_fg : et4000->acl.internal.rop_bg; - for (c = 0; c < 8; c++) { - d = (dest & (1 << c)) ? 1 : 0; - if (source & (1 << c)) d |= 2; - if (pattern & (1 << c)) d |= 4; - if (rop & (1 << d)) out |= (1 << c); - } + + ROPMIX(rop, dest, pattern, source, out); + et4000w32_log("%06X = %02X\n", et4000->acl.dest_addr & et4000->vram_mask, out); if (!(et4000->acl.internal.ctrl_routing & 0x40)) { svga->vram[et4000->acl.dest_addr & et4000->vram_mask] = out; @@ -1157,80 +1669,77 @@ et4000w32p_blit(int count, uint32_t mix, uint32_t sdat, int cpu_input, et4000w32 } } } else { - while (count--) { - et4000w32_log("%i,%i : ", et4000->acl.internal.pos_x, et4000->acl.internal.pos_y); + et4000w32_log("BitBLT: count = %i\n", count); + while (count-- && et4000->acl.y_count >= 0) { + pattern = svga->vram[(et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask]; - pattern = svga->vram[(et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask]; - source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; - et4000w32_log("%i %06X %06X %02X %02X ", et4000->acl.pattern_y, (et4000->acl.pattern_addr + et4000->acl.pattern_x) & et4000->vram_mask, (et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask, pattern, source); - - if (cpu_input == 2) { - source = sdat & 0xff; - sdat >>= 8; - } - dest = svga->vram[et4000->acl.dest_addr & et4000->vram_mask]; - out = 0; - et4000w32_log("%06X %02X %i %08X %08X ", dest, et4000->acl.dest_addr, mix & 1, mix, et4000->acl.mix_addr); - if ((et4000->acl.internal.ctrl_routing & 0xa) == 8) { - mixdat = svga->vram[(et4000->acl.mix_addr >> 3) & et4000->vram_mask] & (1 << (et4000->acl.mix_addr & 7)); - et4000w32_log("%06X %02X ", et4000->acl.mix_addr, svga->vram[(et4000->acl.mix_addr >> 3) & et4000->vram_mask]); - } else { - mixdat = mix & 1; - mix >>= 1; - mix |= 0x80000000; - } - - rop = mixdat ? et4000->acl.internal.rop_fg : et4000->acl.internal.rop_bg; - for (c = 0; c < 8; c++) { - d = (dest & (1 << c)) ? 1 : 0; - if (source & (1 << c)) d |= 2; - if (pattern & (1 << c)) d |= 4; - if (rop & (1 << d)) out |= (1 << c); - } - et4000w32_log("%06X = %02X\n", et4000->acl.dest_addr & et4000->vram_mask, out); - if (!(et4000->acl.internal.ctrl_routing & 0x40)) { - svga->vram[et4000->acl.dest_addr & et4000->vram_mask] = out; - svga->changedvram[(et4000->acl.dest_addr & et4000->vram_mask) >> 12] = changeframecount; - } else { - et4000->acl.cpu_dat |= ((uint64_t)out << (et4000->acl.cpu_dat_pos * 8)); - et4000->acl.cpu_dat_pos++; - } - - if (et4000->acl.internal.xy_dir & 1) et4000w32_decx(1, et4000); - else et4000w32_incx(1, et4000); - - et4000->acl.internal.pos_x++; - if (et4000->acl.internal.pos_x > et4000->acl.internal.count_x) { - if (et4000->acl.internal.xy_dir & 2) { - et4000w32_decy(et4000); - et4000->acl.mix_back = et4000->acl.mix_addr = et4000->acl.mix_back - (et4000->acl.internal.mix_off + 1); - et4000->acl.dest_back = et4000->acl.dest_addr = et4000->acl.dest_back - (et4000->acl.internal.dest_off + 1); + if (cpu_input == 2) { + source = sdat & 0xff; + sdat >>= 8; + } else + source = svga->vram[(et4000->acl.source_addr + et4000->acl.source_x) & et4000->vram_mask]; + + dest = svga->vram[et4000->acl.dest_addr & et4000->vram_mask]; + out = 0; + + if ((et4000->acl.internal.ctrl_routing & 0xa) == 8) { + mixdat = svga->vram[(et4000->acl.mix_addr >> 3) & et4000->vram_mask] & (1 << (et4000->acl.mix_addr & 7)); } else { - et4000w32_incy(et4000); - et4000->acl.mix_back = et4000->acl.mix_addr = et4000->acl.mix_back + et4000->acl.internal.mix_off + 1; - et4000->acl.dest_back = et4000->acl.dest_addr = et4000->acl.dest_back + et4000->acl.internal.dest_off + 1; + mixdat = mix & 1; + mix >>= 1; + mix |= 0x80000000; } - et4000->acl.pattern_x = et4000->acl.pattern_x_back; - et4000->acl.source_x = et4000->acl.source_x_back; + rop = mixdat ? et4000->acl.internal.rop_fg : et4000->acl.internal.rop_bg; - et4000->acl.internal.pos_y++; - et4000->acl.internal.pos_x = 0; - if (et4000->acl.internal.pos_y > et4000->acl.internal.count_y) { - et4000->acl.status &= ~(ACL_XYST | ACL_SSO); - return; + ROPMIX(rop, dest, pattern, source, out); + + if (!(et4000->acl.internal.ctrl_routing & 0x40)) { + svga->vram[et4000->acl.dest_addr & et4000->vram_mask] = out; + svga->changedvram[(et4000->acl.dest_addr & et4000->vram_mask) >> 12] = changeframecount; + } else { + et4000->acl.cpu_dat |= ((uint64_t)out << (et4000->acl.cpu_dat_pos * 8)); + et4000->acl.cpu_dat_pos++; } - if (cpu_input) - return; + if (et4000->acl.internal.xy_dir & 1) + et4000w32_decx(1, et4000); + else + et4000w32_incx(1, et4000); + + et4000->acl.x_count--; + if (et4000->acl.x_count == 0xffff) { + if (et4000->acl.internal.xy_dir & 2) { + et4000w32_decy(et4000); + et4000->acl.mix_back = et4000->acl.mix_addr = et4000->acl.mix_back - (et4000->acl.internal.mix_off + 1); + et4000->acl.dest_back = et4000->acl.dest_addr = et4000->acl.dest_back - (et4000->acl.internal.dest_off + 1); + } else { + et4000w32_incy(et4000); + et4000->acl.mix_back = et4000->acl.mix_addr = et4000->acl.mix_back + et4000->acl.internal.mix_off + 1; + et4000->acl.dest_back = et4000->acl.dest_addr = et4000->acl.dest_back + et4000->acl.internal.dest_off + 1; + } - if (et4000->acl.internal.ctrl_routing & 0x40) { - if (et4000->acl.cpu_dat_pos & 3) - et4000->acl.cpu_dat_pos += 4 - (et4000->acl.cpu_dat_pos & 3); - return; + et4000->acl.pattern_x = et4000->acl.pattern_x_back; + et4000->acl.source_x = et4000->acl.source_x_back; + + et4000->acl.y_count--; + et4000->acl.x_count = et4000->acl.internal.count_x; + if (et4000->acl.y_count == 0xffff) { + et4000w32_log("BitBLT end\n"); + et4000->acl.status &= ~(ACL_XYST | ACL_SSO); + return; + } + + if (cpu_input) + return; + + if (et4000->acl.internal.ctrl_routing & 0x40) { + if (et4000->acl.cpu_dat_pos & 3) + et4000->acl.cpu_dat_pos += 4 - (et4000->acl.cpu_dat_pos & 3); + return; + } } } - } } } diff --git a/src/video/vid_paradise.c b/src/video/vid_paradise.c index 107a1773f..d32871c22 100644 --- a/src/video/vid_paradise.c +++ b/src/video/vid_paradise.c @@ -40,7 +40,7 @@ typedef struct paradise_t rom_t bios_rom; - uint8_t pr0a, pr0b, pr1, pr5, bank_mask; + uint8_t bank_mask; enum { @@ -54,7 +54,7 @@ typedef struct paradise_t uint32_t read_bank[4], write_bank[4]; int interlace; - int check; + int check, check2; struct { uint8_t reg_block_ptr; @@ -81,7 +81,7 @@ void paradise_out(uint16_t addr, uint8_t val, void *p) { paradise_t *paradise = (paradise_t *)p; svga_t *svga = ¶dise->svga; - uint8_t old, o; + uint8_t old; if (paradise->vram_mask <= ((512 << 10) - 1)) paradise->bank_mask = 0x7f; @@ -94,15 +94,14 @@ void paradise_out(uint16_t addr, uint8_t val, void *p) switch (addr) { case 0x3c5: - if (svga->seqaddr > 7) - { - if (paradise->type < WD90C11 || svga->seqregs[6] != 0x48) - return; - svga->seqregs[svga->seqaddr & 0x1f] = val; - if (svga->seqaddr == 0x11) { - paradise_remap(paradise); - } - return; + if (svga->seqaddr > 7) { + if (paradise->type < WD90C11 || svga->seqregs[6] != 0x48) + return; + svga->seqregs[svga->seqaddr & 0x1f] = val; + if (svga->seqaddr == 0x11) { + paradise_remap(paradise); + } + return; } break; @@ -115,53 +114,45 @@ void paradise_out(uint16_t addr, uint8_t val, void *p) case 0x3cf: if (svga->gdcaddr >= 9 && svga->gdcaddr <= 0x0e) { - if ((paradise->pr5 & 7) != 5) + if ((svga->gdcreg[0x0f] & 7) != 5) return; } + switch (svga->gdcaddr) { case 6: - if (val & 8) - svga->banked_mask = 0x7fff; - else - svga->banked_mask = 0xffff; - if (svga->gdcreg[6] != val) - svga->gdcreg[6] = val; + if ((svga->gdcreg[6] & 0x0c) != (val & 0x0c)) { + switch (val & 0x0c) { + case 0x00: /*128k at A0000*/ + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x20000); + svga->banked_mask = 0xffff; + break; + case 0x04: /*64k at A0000*/ + mem_mapping_set_addr(&svga->mapping, 0xa0000, 0x10000); + svga->banked_mask = 0xffff; + break; + case 0x08: /*32k at B0000*/ + mem_mapping_set_addr(&svga->mapping, 0xb0000, 0x08000); + svga->banked_mask = 0x7fff; + break; + case 0x0c: /*32k at B8000*/ + mem_mapping_set_addr(&svga->mapping, 0xb8000, 0x08000); + svga->banked_mask = 0x7fff; + break; + } + } + svga->gdcreg[6] = val; paradise_remap(paradise); - break; + return; case 9: - paradise->pr0a = val & paradise->bank_mask; - paradise_remap(paradise); - break; case 0x0a: - paradise->pr0b = val & paradise->bank_mask; + svga->gdcreg[svga->gdcaddr] = val & paradise->bank_mask; paradise_remap(paradise); - break; + return; case 0x0b: - paradise->pr1 = val; + svga->gdcreg[0x0b] = val; paradise_remap(paradise); - break; - case 0x0d: - o = svga->gdcreg[0x0d]; - svga->gdcreg[0x0d] = val; - if ((o ^ val) & 0x18) - svga_recalctimings(svga); - break; - case 0x0e: - o = svga->gdcreg[0x0e]; - svga->gdcreg[0x0e] = val; - if ((o ^ val) & 0x01) - svga_recalctimings(svga); - break; - case 0x0c: - svga->gdcreg[0x0c] = val; - break; - case 0x0f: - paradise->pr5 = val; - break; - default: - svga->gdcreg[svga->gdcaddr] = val; - break; + return; } break; @@ -216,10 +207,8 @@ uint8_t paradise_in(uint16_t addr, void *p) { if (paradise->type < WD90C11 || svga->seqregs[6] != 0x48) return 0xff; - if (paradise->type < WD90C30) { - if (svga->seqaddr > 0x12) + if (svga->seqaddr > 0x12) return 0xff; - } return svga->seqregs[svga->seqaddr & 0x1f]; } break; @@ -231,36 +220,21 @@ uint8_t paradise_in(uint16_t addr, void *p) case 0x3cf: if (svga->gdcaddr >= 9 && svga->gdcaddr <= 0x0e) { - if (paradise->pr5 & 0x10) + if (svga->gdcreg[0x0f] & 0x10) return 0xff; } switch (svga->gdcaddr) { - case 9: - return paradise->pr0a; - case 0x0a: - return paradise->pr0b; case 0x0b: - if (paradise->vram_mask == (512 << 10) - 1) { - paradise->pr1 |= 0xc0; - paradise->pr1 &= ~0x40; - } else if (paradise->vram_mask == (1024 << 10) - 1) { - paradise->pr1 |= 0xc0; - /*The following is a horrible tweak, but needed to get around black corruption in 1M mode*/ - if (svga->bpp >= 8 && (svga->gdcreg[0x0e] & 0x01) && paradise->check) - paradise->pr1 &= ~0x40; - else if (!(svga->gdcreg[0x0e] & 0x01) && !(svga->crtc[0x14] & 0x40) && paradise->check) - paradise->check = 0; + if (paradise->type == WD90C30) { + if (paradise->vram_mask == ((512 << 10) - 1)) { + svga->gdcreg[0x0b] |= 0xc0; + svga->gdcreg[0x0b] &= ~0x40; + } } - return paradise->pr1; - case 6: - case 0x0c: - case 0x0d: - case 0x0e: - return svga->gdcreg[svga->gdcaddr]; + return svga->gdcreg[0x0b]; + case 0x0f: - return (paradise->pr5 & 0x17) | 0x80; - default: - return svga->gdcreg[svga->gdcaddr]; + return (svga->gdcreg[0x0f] & 0x17) | 0x80; } break; @@ -278,61 +252,46 @@ uint8_t paradise_in(uint16_t addr, void *p) void paradise_remap(paradise_t *paradise) { - svga_t *svga = ¶dise->svga; + svga_t *svga = ¶dise->svga; + paradise->check = 0; - if (svga->seqregs[0x11] & 0x80) { - paradise->read_bank[0] = (paradise->pr0a) << 12; - paradise->read_bank[1] = paradise->read_bank[0] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->read_bank[2] = paradise->read_bank[0]; - paradise->read_bank[3] = paradise->read_bank[1]; - paradise->write_bank[0] = (paradise->pr0b) << 12; - paradise->write_bank[1] = paradise->write_bank[0] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->write_bank[2] = paradise->write_bank[0]; - paradise->write_bank[3] = paradise->write_bank[1]; - } else if (paradise->pr1 & 8) { - if (svga->gdcreg[6] & 0x0c) { - paradise->read_bank[0] = (paradise->pr0b) << 12; - paradise->read_bank[1] = ((paradise->pr0a) << 12) + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->read_bank[2] = paradise->read_bank[0]; - paradise->read_bank[3] = paradise->read_bank[1]; - paradise->write_bank[0] = (paradise->pr0b) << 12; - paradise->write_bank[1] = ((paradise->pr0a) << 12) + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->write_bank[2] = paradise->write_bank[0]; - paradise->write_bank[3] = paradise->write_bank[1]; - } else { - paradise->read_bank[0] = (paradise->pr0b) << 12; - paradise->read_bank[1] = paradise->read_bank[0] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->read_bank[2] = (paradise->pr0a) << 12; - paradise->read_bank[3] = paradise->read_bank[2] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->write_bank[0] = (paradise->pr0b) << 12; - paradise->write_bank[1] = paradise->write_bank[0] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->write_bank[2] = (paradise->pr0a) << 12; - paradise->write_bank[3] = paradise->write_bank[2] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - } - } else { - paradise->read_bank[0] = (paradise->pr0a) << 12; - paradise->write_bank[0] = (paradise->pr0a) << 12; - paradise->read_bank[1] = paradise->read_bank[0] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->write_bank[1] = paradise->write_bank[0] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->read_bank[2] = paradise->read_bank[0]; - paradise->write_bank[2] = paradise->write_bank[0]; - paradise->read_bank[3] = paradise->read_bank[0] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - paradise->write_bank[3] = paradise->write_bank[0] + ((svga->gdcreg[6] & 8) ? 0 : 0x8000); - } - - if (paradise->bank_mask == 0x7f) { - paradise->read_bank[1] &= 0x7ffff; - paradise->write_bank[1] &= 0x7ffff; + if (svga->seqregs[0x11] & 0x80) { + paradise->read_bank[0] = paradise->read_bank[2] = svga->gdcreg[9] << 12; + paradise->read_bank[1] = paradise->read_bank[3] = (svga->gdcreg[9] << 12) + ((svga->gdcreg[6] & 0x08) ? 0 : 0x8000); + paradise->write_bank[0] = paradise->write_bank[2] = svga->gdcreg[0x0a] << 12; + paradise->write_bank[1] = paradise->write_bank[3] = (svga->gdcreg[0x0a] << 12) + ((svga->gdcreg[6] & 0x08) ? 0 : 0x8000); + } else if (svga->gdcreg[0x0b] & 0x08) { + if (svga->gdcreg[6] & 0x0c) { + paradise->read_bank[0] = paradise->read_bank[2] = svga->gdcreg[0x0a] << 12; + paradise->write_bank[0] = paradise->write_bank[2] = svga->gdcreg[0x0a] << 12; + paradise->read_bank[1] = paradise->read_bank[3] = (svga->gdcreg[9] << 12) + ((svga->gdcreg[6] & 0x08) ? 0 : 0x8000); + paradise->write_bank[1] = paradise->write_bank[3] = (svga->gdcreg[9] << 12) + ((svga->gdcreg[6] & 0x08) ? 0 : 0x8000); + } else { + paradise->read_bank[0] = paradise->write_bank[0] = svga->gdcreg[0x0a] << 12; + paradise->read_bank[1] = paradise->write_bank[1] = (svga->gdcreg[0xa] << 12) + ((svga->gdcreg[6] & 0x08) ? 0 : 0x8000); + paradise->read_bank[2] = paradise->write_bank[2] = svga->gdcreg[9] << 12; + paradise->read_bank[3] = paradise->write_bank[3] = (svga->gdcreg[9] << 12) + ((svga->gdcreg[6] & 0x08) ? 0 : 0x8000); } + } else { + paradise->read_bank[0] = paradise->read_bank[2] = svga->gdcreg[9] << 12; + paradise->read_bank[1] = paradise->read_bank[3] = (svga->gdcreg[9] << 12) + ((svga->gdcreg[6] & 0x08) ? 0 : 0x8000); + paradise->write_bank[0] = paradise->write_bank[2] = svga->gdcreg[9] << 12; + paradise->write_bank[1] = paradise->write_bank[3] = (svga->gdcreg[9] << 12) + ((svga->gdcreg[6] & 0x08) ? 0 : 0x8000); + } + + if ((((svga->gdcreg[0x0b] & 0xc0) == 0xc0) && !svga->chain4 && (svga->crtc[0x14] & 0x40) && ((svga->gdcreg[6] >> 2) & 3) == 1)) + paradise->check = 1; + + if (paradise->bank_mask == 0x7f) { + paradise->read_bank[1] &= 0x7ffff; + paradise->write_bank[1] &= 0x7ffff; + } } void paradise_recalctimings(svga_t *svga) { paradise_t *paradise = (paradise_t *) svga->p; - if (svga->gdcreg[0x0d] & 0x08) svga->ma_latch |= 0x10000; - if (svga->gdcreg[0x0d] & 0x10) svga->ma_latch |= 0x20000; - svga->lowres = !(svga->gdcreg[0x0e] & 0x01); if (paradise->type == WD90C30) { @@ -355,8 +314,6 @@ void paradise_recalctimings(svga_t *svga) if (paradise->type < WD90C30) { if (svga->bpp >= 8 && !svga->lowres) { - if ((svga->crtc[0x17] == 0xc2) && (svga->crtc[0x14] & 0x40)) - paradise->check = 1; svga->render = svga_render_8bpp_highres; } } else { @@ -368,8 +325,6 @@ void paradise_recalctimings(svga_t *svga) svga->render = svga_render_15bpp_highres; svga->hdisp >>= 1; } else { - if ((svga->crtc[0x17] == 0xc2) && (svga->crtc[0x14] & 0x40)) - paradise->check = 1; svga->render = svga_render_8bpp_highres; } } @@ -380,20 +335,94 @@ static void paradise_write(uint32_t addr, uint8_t val, void *p) { paradise_t *paradise = (paradise_t *)p; svga_t *svga = ¶dise->svga; + uint32_t prev_addr, prev_addr2; - addr &= svga->banked_mask; - addr = (addr & 0x7fff) + paradise->write_bank[(addr >> 15) & 3]; - + addr = (addr & 0x7fff) + paradise->write_bank[(addr >> 15) & 3]; + + /*Could be done in a better way but it works.*/ + if (!svga->lowres) { + if (paradise->check) { + prev_addr = addr & 3; + prev_addr2 = addr & 0xfffc; + if ((addr & 3) == 3) { + if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 2) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 1) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 0) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } + } + } + svga_write_linear(addr, val, svga); } static void paradise_writew(uint32_t addr, uint16_t val, void *p) { paradise_t *paradise = (paradise_t *)p; svga_t *svga = ¶dise->svga; + uint32_t prev_addr, prev_addr2; - addr &= svga->banked_mask; addr = (addr & 0x7fff) + paradise->write_bank[(addr >> 15) & 3]; - + + /*Could be done in a better way but it works.*/ + if (!svga->lowres) { + if (paradise->check) { + prev_addr = addr & 3; + prev_addr2 = addr & 0xfffc; + if ((addr & 3) == 3) { + if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 2) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 1) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 0) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } + } + } + svga_writew_linear(addr, val, svga); } @@ -401,9 +430,46 @@ static uint8_t paradise_read(uint32_t addr, void *p) { paradise_t *paradise = (paradise_t *)p; svga_t *svga = ¶dise->svga; - - addr &= svga->banked_mask; + uint32_t prev_addr, prev_addr2; + addr = (addr & 0x7fff) + paradise->read_bank[(addr >> 15) & 3]; + + /*Could be done in a better way but it works.*/ + if (!svga->lowres) { + if (paradise->check) { + prev_addr = addr & 3; + prev_addr2 = addr & 0xfffc; + if ((addr & 3) == 3) { + if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 2) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 1) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 0) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } + } + } return svga_read_linear(addr, svga); } @@ -411,11 +477,48 @@ static uint16_t paradise_readw(uint32_t addr, void *p) { paradise_t *paradise = (paradise_t *)p; svga_t *svga = ¶dise->svga; - - addr &= svga->banked_mask; + uint32_t prev_addr, prev_addr2; + addr = (addr & 0x7fff) + paradise->read_bank[(addr >> 15) & 3]; + + /*Could be done in a better way but it works.*/ + if (!svga->lowres) { + if (paradise->check) { + prev_addr = addr & 3; + prev_addr2 = addr & 0xfffc; + if ((addr & 3) == 3) { + if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 2) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 1) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x00000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } else if ((addr & 3) == 0) { + if ((addr & 0x30000) == 0x30000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x20000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + else if ((addr & 0x30000) == 0x10000) + addr = (addr >> 16) | (prev_addr << 16) | prev_addr2; + } + } + } - return svga_readw_linear(addr, svga); + return svga_readw_linear(addr, svga); } void *paradise_init(const device_t *info, uint32_t memsize) @@ -653,9 +756,6 @@ static const device_config_t paradise_pvga1a_config[] = { "512 kB", 512 }, - { - "1 MB", 1024 - }, { "" } diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 7dff04e4a..30c0df216 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -62,9 +62,11 @@ #define ROM_DIAMOND_STEALTH_SE "roms/video/s3/DiamondStealthSE.VBI" #define ROM_ELSAWIN2KPROX_964 "roms/video/s3/elsaw20004m.BIN" #define ROM_ELSAWIN2KPROX "roms/video/s3/elsaw20008m.BIN" +#define ROM_NUMBER9_9FX_531 "roms/video/s3/numbernine.BIN" #define ROM_PHOENIX_VISION868 "roms/video/s3/1-DSV3868.BIN" #define ROM_MIROVIDEO40SV_ERGO_968_PCI "roms/video/s3/S3_968PCI_TVP3026_miroVideo40SV_PCI_1.04.BIN" #define ROM_SPEA_MERCURY_P64V "roms/video/s3/S3_968PCI_TVP3026_SPEAMecuryP64V_ver1.01.BIN" +#define ROM_NUMBER9_9FX_771 "roms/video/s3/no9motionfx771.BIN" #define ROM_PHOENIX_VISION968 "roms/video/s3/1-DSV3968P.BIN" enum @@ -100,7 +102,9 @@ enum S3_MIROCRYSTAL20SV_964, S3_MIROCRYSTAL20SD_864, S3_PHOENIX_VISION968, - S3_MIROCRYSTAL8S_805 + S3_MIROCRYSTAL8S_805, + S3_NUMBER9_9FX_531, + S3_NUMBER9_9FX_771 }; @@ -1140,18 +1144,30 @@ s3_accel_out_fifo(s3_t *s3, uint16_t port, uint8_t val) break; s3->accel.pix_trans[0] = val; if (s3->accel.cmd & 0x100) { - if (!(s3->accel.cmd & 0x600)) { - if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 2)) { - if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) - s3_accel_start(8, 1, s3->accel.pix_trans[0], 0, s3); - else - s3_accel_start(1, 1, 0xffffffff, s3->accel.pix_trans[0], s3); - } else { - if (s3->color_16bit) - s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0], s3); - else - s3_accel_start(1, 1, 0xffffffff, s3->accel.pix_trans[0], s3); - } + switch (s3->accel.cmd & 0x600) { + case 0x000: + if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 2)) { + if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) + s3_accel_start(8, 1, s3->accel.pix_trans[0], 0, s3); + else + s3_accel_start(1, 1, 0xffffffff, s3->accel.pix_trans[0], s3); + } else { + if (s3->color_16bit) + s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0], s3); + else + s3_accel_start(1, 1, 0xffffffff, s3->accel.pix_trans[0], s3); + } + break; + case 0x200: + if (((s3->accel.multifunc[0xa] & 0xc0) == 0x80) || (s3->accel.cmd & 2)) { + if (((s3->accel.frgd_mix & 0x60) != 0x40) || ((s3->accel.bkgd_mix & 0x60) != 0x40)) + s3_accel_start(16, 1, s3->accel.pix_trans[0] | (s3->accel.pix_trans[0] << 8), 0, s3); + else + s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[0] << 8), s3); + } else { + s3_accel_start(2, 1, 0xffffffff, s3->accel.pix_trans[0] | (s3->accel.pix_trans[0] << 8), s3); + } + break; } } break; @@ -2442,7 +2458,7 @@ s3_out(uint16_t addr, uint8_t val, void *p) rs3 = 0; bt48x_ramdac_out(addr, rs2, rs3, val, svga->ramdac, svga); } else if ((s3->chip == S3_VISION964 && s3->card_type == S3_ELSAWIN2KPROX_964) || (s3->chip == S3_VISION968 && (s3->card_type == S3_ELSAWIN2KPROX || - s3->card_type == S3_PHOENIX_VISION968))) + s3->card_type == S3_PHOENIX_VISION968 || s3->card_type == S3_NUMBER9_9FX_771))) ibm_rgb528_ramdac_out(addr, rs2, val, svga->ramdac, svga); else if ((s3->chip == S3_VISION968 && (s3->card_type == S3_SPEA_MERCURY_P64V || s3->card_type == S3_MIROVIDEO40SV_ERGO_968))) { rs3 = !!(svga->crtc[0x55] & 0x02); @@ -2451,7 +2467,9 @@ s3_out(uint16_t addr, uint8_t val, void *p) att49x_ramdac_out(addr, rs2, val, svga->ramdac, svga); else if (s3->chip <= S3_86C924) { sc1148x_ramdac_out(addr, rs2, val, svga->ramdac, svga); - } else + } else if (s3->card_type == S3_NUMBER9_9FX_531) + att498_ramdac_out(addr, rs2, val, svga->ramdac, svga); + else sdac_ramdac_out(addr, rs2, val, svga->ramdac, svga); return; @@ -2728,7 +2746,7 @@ s3_in(uint16_t addr, void *p) rs3 = !!(svga->crtc[0x55] & 0x02); return bt48x_ramdac_in(addr, rs2, rs3, svga->ramdac, svga); } else if ((s3->chip == S3_VISION964 && s3->card_type == S3_ELSAWIN2KPROX_964) || (s3->chip == S3_VISION968 && (s3->card_type == S3_ELSAWIN2KPROX || - s3->card_type == S3_PHOENIX_VISION968))) + s3->card_type == S3_PHOENIX_VISION968 || s3->card_type == S3_NUMBER9_9FX_771))) return ibm_rgb528_ramdac_in(addr, rs2, svga->ramdac, svga); else if ((s3->chip == S3_VISION968 && (s3->card_type == S3_SPEA_MERCURY_P64V || s3->card_type == S3_MIROVIDEO40SV_ERGO_968))) { rs3 = !!(svga->crtc[0x55] & 0x02); @@ -2737,6 +2755,8 @@ s3_in(uint16_t addr, void *p) return att49x_ramdac_in(addr, rs2, svga->ramdac, svga); else if (s3->chip <= S3_86C924) return sc1148x_ramdac_in(addr, rs2, svga->ramdac, svga); + else if (s3->card_type == S3_NUMBER9_9FX_531) + return att498_ramdac_in(addr, rs2, svga->ramdac, svga); else return sdac_ramdac_in(addr, rs2, svga->ramdac, svga); break; @@ -2839,7 +2859,7 @@ static void s3_recalctimings(svga_t *svga) else ibm_rgb528_recalctimings(svga->ramdac, svga); } else - svga->interlace = svga->crtc[0x42] & 0x20; + svga->interlace = !!(svga->crtc[0x42] & 0x20); if ((((svga->miscout >> 2) & 3) == 3) && s3->chip < S3_TRIO32) clk_sel = svga->crtc[0x42] & 0x0f; @@ -2856,10 +2876,25 @@ static void s3_recalctimings(svga_t *svga) if (s3->card_type == S3_MIROCRYSTAL10SD_805 || s3->card_type == S3_MIROCRYSTAL20SD_864 || s3->card_type == S3_MIROCRYSTAL20SV_964 || s3->card_type == S3_SPEA_MIRAGE_86C801 || - s3->card_type == S3_SPEA_MIRAGE_86C805 || s3->card_type == S3_MIROCRYSTAL8S_805) { + s3->card_type == S3_SPEA_MIRAGE_86C805 || s3->card_type == S3_MIROCRYSTAL8S_805 || + s3->card_type == S3_NUMBER9_9FX_531) { + if (!(svga->crtc[0x5e] & 0x04)) + svga->vblankstart = svga->dispend; if (svga->bpp != 32) { if (svga->crtc[0x31] & 2) /*This is needed if the pixel width gets set with delays*/ s3->width = 2048; + else { + if (s3->card_type == S3_MIROCRYSTAL10SD_805) { + if (svga->hdisp == 1280 && s3->width == 1024) { + s3->width = 1280; + } + } + } + } else { + if (s3->card_type == S3_NUMBER9_9FX_531) { + if (svga->hdisp == 1600 && s3->width == 1600) + s3->width = 800; + } } } else if (s3->chip == S3_86C928) { if (svga->bpp == 15) { @@ -2889,15 +2924,16 @@ static void s3_recalctimings(svga_t *svga) if (s3->chip != S3_VISION868) { if (s3->chip == S3_86C928) { if (s3->width == 2048 || s3->width == 1280 || s3->width == 1600) - svga->hdisp *= 2; + svga->hdisp <<= 1; } else if ((s3->chip != S3_86C801) && (s3->chip != S3_86C805) && (s3->chip != S3_TRIO32) && (s3->chip != S3_TRIO64) && (s3->chip != S3_VISION964) && (s3->chip != S3_VISION968)) { if (s3->width == 1280 || s3->width == 1600) - svga->hdisp *= 2; + svga->hdisp <<= 1; } else if (s3->card_type == S3_SPEA_MERCURY_P64V) { if (s3->width == 1280 || s3->width == 1600) - svga->hdisp *= 2; - } + svga->hdisp <<= 1; + } else if (s3->card_type == S3_NUMBER9_9FX_771) + svga->hdisp <<= 1; if (s3->card_type == S3_MIROVIDEO40SV_ERGO_968 || s3->card_type == S3_MIROCRYSTAL20SD_864 || s3->card_type == S3_PHOENIX_VISION968 || s3->card_type == S3_SPEA_MERCURY_P64V) { @@ -2948,19 +2984,21 @@ static void s3_recalctimings(svga_t *svga) if ((s3->chip != S3_VISION964) && (s3->card_type != S3_SPEA_MIRAGE_86C801) && (s3->card_type != S3_SPEA_MIRAGE_86C805)) { if (s3->chip == S3_86C928) - svga->hdisp *= 2; + svga->hdisp <<= 1; else if (s3->chip != S3_VISION968) - svga->hdisp /= 2; + svga->hdisp >>= 1; } if ((s3->chip != S3_VISION868) && (s3->chip != S3_TRIO32) && (s3->chip != S3_TRIO64) && (s3->chip != S3_VISION964)) { if (s3->width == 1280 || s3->width == 1600) - svga->hdisp *= 2; + svga->hdisp <<= 1; + else if (s3->card_type == S3_NUMBER9_9FX_771) + svga->hdisp <<= 1; } if (s3->card_type == S3_MIROVIDEO40SV_ERGO_968 || s3->card_type == S3_PHOENIX_VISION968 || s3->card_type == S3_SPEA_MERCURY_P64V) { if (svga->hdisp == (1408*2)) - svga->hdisp /= 2; + svga->hdisp >>= 1; else svga->hdisp = s3->width; } @@ -2973,21 +3011,22 @@ static void s3_recalctimings(svga_t *svga) if ((s3->chip != S3_VISION964) && (s3->card_type != S3_SPEA_MIRAGE_86C801) && (s3->card_type != S3_SPEA_MIRAGE_86C805)) { if (s3->chip == S3_86C928) - svga->hdisp *= 2; + svga->hdisp <<= 1; else if (s3->chip != S3_VISION968) - svga->hdisp /= 2; - } else if ((s3->card_type == S3_SPEA_MIRAGE_86C801) || (s3->card_type == S3_SPEA_MIRAGE_86C805)) { - svga->hdisp /= 2; - } + svga->hdisp >>= 1; + } else if ((s3->card_type == S3_SPEA_MIRAGE_86C801) || (s3->card_type == S3_SPEA_MIRAGE_86C805)) + svga->hdisp >>= 1; if ((s3->chip != S3_VISION868) && (s3->chip != S3_TRIO32) && (s3->chip != S3_TRIO64) && (s3->chip != S3_VISION964)) { if (s3->width == 1280 || s3->width == 1600) - svga->hdisp *= 2; + svga->hdisp <<= 1; + else if (s3->card_type == S3_NUMBER9_9FX_771) + svga->hdisp <<= 1; } if (s3->card_type == S3_MIROVIDEO40SV_ERGO_968 || s3->card_type == S3_PHOENIX_VISION968 || s3->card_type == S3_SPEA_MERCURY_P64V) { if (svga->hdisp == (1408*2)) - svga->hdisp /= 2; + svga->hdisp >>= 1; else svga->hdisp = s3->width; } @@ -3013,12 +3052,13 @@ static void s3_recalctimings(svga_t *svga) if ((s3->chip < S3_TRIO32) && (s3->chip != S3_VISION964) && (s3->chip != S3_VISION968) && (s3->chip != S3_86C928)) { if (s3->chip == S3_VISION868) - svga->hdisp /= 2; + svga->hdisp >>= 1; else - svga->hdisp /= 4; + svga->hdisp >>= 2; } - if (s3->width == 1280 || s3->width == 1600 || (s3->card_type == S3_SPEA_MERCURY_P64V)) - svga->hdisp *= 2; + if (s3->width == 1280 || s3->width == 1600 || (s3->card_type == S3_SPEA_MERCURY_P64V || + s3->card_type == S3_NUMBER9_9FX_771)) + svga->hdisp <<= 1; if (s3->card_type == S3_MIROVIDEO40SV_ERGO_968 || s3->card_type == S3_MIROCRYSTAL20SV_964 || s3->card_type == S3_MIROCRYSTAL20SD_864 || s3->card_type == S3_PHOENIX_VISION968 || s3->card_type == S3_SPEA_MERCURY_P64V) { @@ -3110,11 +3150,11 @@ static void s3_trio64v_recalctimings(svga_t *svga) break; case 15: svga->render = svga_render_15bpp_highres; - svga->hdisp /= 2; + svga->hdisp >>= 1; break; case 16: svga->render = svga_render_16bpp_highres; - svga->hdisp /= 2; + svga->hdisp >>= 1; break; case 24: svga->render = svga_render_24bpp_highres; @@ -6530,6 +6570,7 @@ static void s3_reset(void *priv) case S3_ELSAWIN2KPROX: case S3_SPEA_MERCURY_P64V: case S3_MIROVIDEO40SV_ERGO_968: + case S3_NUMBER9_9FX_771: case S3_PHOENIX_VISION968: if (s3->pci) { svga->crtc[0x53] = 0x18; @@ -6544,6 +6585,7 @@ static void s3_reset(void *priv) } break; + case S3_NUMBER9_9FX_531: case S3_PHOENIX_VISION868: if (s3->pci) { svga->crtc[0x53] = 0x18; @@ -6679,6 +6721,11 @@ static void *s3_init(const device_t *info) else video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_s3_vision864_vlb); break; + case S3_NUMBER9_9FX_531: + bios_fn = ROM_NUMBER9_9FX_531; + chip = S3_VISION868; + video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_s3_vision868_pci); + break; case S3_PHOENIX_VISION868: bios_fn = ROM_PHOENIX_VISION868; chip = S3_VISION868; @@ -6710,6 +6757,11 @@ static void *s3_init(const device_t *info) chip = S3_VISION968; video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_s3_vision968_pci); break; + case S3_NUMBER9_9FX_771: + bios_fn = ROM_NUMBER9_9FX_771; + chip = S3_VISION968; + video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_s3_vision968_pci); + break; case S3_PHOENIX_VISION968: bios_fn = ROM_PHOENIX_VISION968; chip = S3_VISION968; @@ -6887,7 +6939,7 @@ static void *s3_init(const device_t *info) if (chip == S3_VISION964 && info->local != S3_ELSAWIN2KPROX_964) svga->dac_hwcursor_draw = bt48x_hwcursor_draw; else if ((chip == S3_VISION964 && info->local == S3_ELSAWIN2KPROX_964) || (chip == S3_VISION968 && (info->local == S3_ELSAWIN2KPROX || - info->local == S3_PHOENIX_VISION968))) + info->local == S3_PHOENIX_VISION968 || info->local == S3_NUMBER9_9FX_771))) svga->dac_hwcursor_draw = ibm_rgb528_hwcursor_draw; else if (chip == S3_VISION968 && (info->local == S3_SPEA_MERCURY_P64V || info->local == S3_MIROVIDEO40SV_ERGO_968)) svga->dac_hwcursor_draw = tvp3026_hwcursor_draw; @@ -7048,7 +7100,7 @@ static void *s3_init(const device_t *info) case S3_PARADISE_BAHAMAS64: case S3_PHOENIX_VISION864: - case S3_MIROCRYSTAL20SD_864: + case S3_MIROCRYSTAL20SD_864: /*BIOS 3.xx has a SDAC ramdac.*/ svga->decode_mask = (8 << 20) - 1; if (info->local == S3_PARADISE_BAHAMAS64 || info->local == S3_MIROCRYSTAL20SD_864) stepping = 0xc0; /*Vision864*/ @@ -7085,6 +7137,7 @@ static void *s3_init(const device_t *info) case S3_ELSAWIN2KPROX: case S3_SPEA_MERCURY_P64V: case S3_MIROVIDEO40SV_ERGO_968: + case S3_NUMBER9_9FX_771: case S3_PHOENIX_VISION968: svga->decode_mask = (8 << 20) - 1; s3->id = 0xe1; /*Vision968*/ @@ -7102,7 +7155,8 @@ static void *s3_init(const device_t *info) svga->crtc[0x5a] = 0x0a; } - if (info->local == S3_ELSAWIN2KPROX || info->local == S3_PHOENIX_VISION968) + if (info->local == S3_ELSAWIN2KPROX || info->local == S3_PHOENIX_VISION968 || + info->local == S3_NUMBER9_9FX_771) svga->ramdac = device_add(&ibm_rgb528_ramdac_device); else svga->ramdac = device_add(&tvp3026_ramdac_device); @@ -7111,6 +7165,7 @@ static void *s3_init(const device_t *info) svga->getclock = icd2061_getclock; break; + case S3_NUMBER9_9FX_531: case S3_PHOENIX_VISION868: svga->decode_mask = (8 << 20) - 1; s3->id = 0xe1; /*Vision868*/ @@ -7128,10 +7183,16 @@ static void *s3_init(const device_t *info) svga->crtc[0x59] = 0x00; svga->crtc[0x5a] = 0x0a; } - - svga->ramdac = device_add(&sdac_ramdac_device); - svga->clock_gen = svga->ramdac; - svga->getclock = sdac_getclock; + + if (info->local == S3_NUMBER9_9FX_531) { + svga->ramdac = device_add(&att498_ramdac_device); + svga->clock_gen = device_add(&icd2061_device); + svga->getclock = icd2061_getclock; + } else { + svga->ramdac = device_add(&sdac_ramdac_device); + svga->clock_gen = svga->ramdac; + svga->getclock = sdac_getclock; + } break; case S3_PHOENIX_TRIO32: @@ -7261,6 +7322,11 @@ static int s3_phoenix_vision864_available(void) return rom_present(ROM_PHOENIX_VISION864); } +static int s3_9fx_531_available(void) +{ + return rom_present(ROM_NUMBER9_9FX_531); +} + static int s3_phoenix_vision868_available(void) { return rom_present(ROM_PHOENIX_VISION868); @@ -7286,6 +7352,11 @@ static int s3_mirovideo_40sv_ergo_968_pci_available(void) return rom_present(ROM_MIROVIDEO40SV_ERGO_968_PCI); } +static int s3_9fx_771_available(void) +{ + return rom_present(ROM_NUMBER9_9FX_771); +} + static int s3_phoenix_vision968_available(void) { return rom_present(ROM_PHOENIX_VISION968); @@ -7448,7 +7519,7 @@ static const device_config_t s3_phoenix_trio32_config[] = static const device_config_t s3_standard_config[] = { { - "memory", "Video memory size", CONFIG_SELECTION, "", 4, "", { 0 }, + "memory", "Memory size", CONFIG_SELECTION, "", 4, "", { 0 }, { { "1 MB", 1 @@ -7750,6 +7821,20 @@ const device_t s3_diamond_stealth64_964_pci_device = s3_standard_config }; +const device_t s3_9fx_771_pci_device = +{ + "S3 Vision968 PCI (Number 9 9FX 771)", + DEVICE_PCI, + S3_NUMBER9_9FX_771, + s3_init, + s3_close, + s3_reset, + { s3_9fx_771_available }, + s3_speed_changed, + s3_force_redraw, + s3_standard_config +}; + const device_t s3_phoenix_vision968_pci_device = { "S3 Vision968 PCI (Phoenix)", @@ -7989,6 +8074,20 @@ const device_t s3_phoenix_vision864_pci_device = s3_standard_config }; +const device_t s3_9fx_531_pci_device = +{ + "S3 Vision868 PCI (Number 9 9FX 531)", + DEVICE_PCI, + S3_NUMBER9_9FX_531, + s3_init, + s3_close, + s3_reset, + { s3_9fx_531_available }, + s3_speed_changed, + s3_force_redraw, + s3_9fx_config +}; + const device_t s3_phoenix_vision868_vlb_device = { "S3 Vision868 VLB (Phoenix)", diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index c43a1c55a..23033b5b3 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -788,6 +788,7 @@ static void s3_virge_recalctimings(svga_t *svga) svga->clock = (cpuclock * (float)(1ull << 32)) / freq; } + if ((svga->crtc[0x67] & 0xc) != 0xc) /*VGA mode*/ { svga->ma_latch |= (virge->ma_ext << 16); @@ -982,7 +983,7 @@ s3_virge_mmio_read(uint32_t addr, void *p) virge_t *virge = (virge_t *)p; uint8_t ret = 0xff; - s3_virge_log("MMIO ReadB addr = %04x\n", addr & 0xffff); + s3_virge_log("[%04X:%08X]: MMIO ReadB addr = %04x\n", CS, cpu_state.pc, addr & 0xffff); switch (addr & 0xffff) { @@ -1028,10 +1029,21 @@ static uint16_t s3_virge_mmio_read_w(uint32_t addr, void *p) { virge_t *virge = (virge_t *)p; + uint32_t ret = 0xffff; - s3_virge_log("MMIO ReadW addr = %04x\n", addr & 0xfffc); + s3_virge_log("[%04X:%08X]: MMIO ReadW addr = %04x\n", CS, cpu_state.pc, addr & 0xfffe); switch (addr & 0xfffe) { + case 0x8504: + if (!virge->fifo_slot) + virge->subsys_stat |= INT_FIFO_EMP; + ret |= virge->subsys_stat; + if (virge->fifo_slot) + virge->fifo_slot--; + ret |= 0x30; /*A bit of a workaround at the moment.*/ + s3_virge_update_irqs(virge); + return ret; + case 0x859c: return virge->cmd_dma; @@ -1050,6 +1062,8 @@ s3_virge_mmio_read_l(uint32_t addr, void *p) VIRGEDMAHeader *dmahdr = &virge->dmahdr; uint32_t ret = 0xffffffff; + s3_virge_log("[%04X:%08X]: MMIO ReadL addr = %04x\n", CS, cpu_state.pc, addr & 0xfffc); + switch (addr & 0xfffc) { case 0x8180: ret = virge->streams.pri_ctrl; @@ -1267,8 +1281,9 @@ static void s3_virge_mmio_write(uint32_t addr, uint8_t val, void *p) static void s3_virge_mmio_write_w(uint32_t addr, uint16_t val, void *p) { - virge_t *virge = (virge_t *)p; - s3_virge_log("MMIO WriteW addr = %04x, val = %04x\n", addr & 0xfffe, val); + virge_t *virge = (virge_t *)p; + s3_virge_log("[%04X:%08X]: MMIO WriteW addr = %04x, val = %04x\n", CS, cpu_state.pc, addr & 0xfffe, val); + if ((addr & 0xfffe) < 0x8000) { if (virge->s3d.cmd_set & CMD_SET_MS) s3_virge_bitblt(virge, 16, ((val >> 8) | (val << 8)) << 16); @@ -4070,7 +4085,7 @@ static void *s3_virge_init(const device_t *info) virge->render_thread = thread_create(render_thread, virge); timer_add(&virge->tri_timer, s3_virge_tri_timer, virge, 0); - + virge->local = info->local; return virge; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index 32865df01..f1752d611 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -72,9 +72,12 @@ video_cards[] = { { "cl_gd5402_isa", &gd5402_isa_device }, { "cl_gd5420_isa", &gd5420_isa_device }, { "cl_gd5422_isa", &gd5422_isa_device }, + { "cl_gd5426_isa", &gd5426_isa_device }, + { "cl_gd5426_diamond_a1_isa", &gd5426_diamond_speedstar_pro_a1_isa_device }, { "cl_gd5428_isa", &gd5428_isa_device }, { "cl_gd5429_isa", &gd5429_isa_device }, { "cl_gd5434_isa", &gd5434_isa_device }, + { "cl_gd5434_diamond_a3_isa", &gd5434_diamond_speedstar_64_a3_isa_device }, { "compaq_cga", &compaq_cga_device }, { "compaq_cga_2", &compaq_cga_2_device }, { "compaq_ega", &cpqega_device }, @@ -123,14 +126,15 @@ video_cards[] = { { "radius_mc", &radius_svga_multiview_mca_device }, { "mach64gx_pci", &mach64gx_pci_device }, { "mach64vt2", &mach64vt2_device }, + { "et4000w32p_revc_pci", &et4000w32p_revc_pci_device }, { "et4000w32p_pci", &et4000w32p_cardex_pci_device }, { "et4000w32p_nc_pci", &et4000w32p_noncardex_pci_device }, - { "et4000w32p_revc_pci", &et4000w32p_revc_pci_device }, { "cl_gd5430_pci", &gd5430_pci_device, }, { "cl_gd5434_pci", &gd5434_pci_device }, { "cl_gd5436_pci", &gd5436_pci_device }, { "cl_gd5440_pci", &gd5440_pci_device }, { "cl_gd5446_pci", &gd5446_pci_device }, + { "cl_gd5446_stb_pci", &gd5446_stb_pci_device }, { "cl_gd5480_pci", &gd5480_pci_device }, { "ctl3d_banshee_pci", &creative_voodoo_banshee_device }, { "stealth32_pci", &et4000w32p_pci_device }, @@ -146,8 +150,10 @@ video_cards[] = { { "px_trio64_pci", &s3_phoenix_trio64_pci_device }, { "elsawin2kprox_pci", &s3_elsa_winner2000_pro_x_pci_device }, { "mirovideo40sv_pci", &s3_mirovideo_40sv_ergo_968_pci_device }, + { "n9_9fx_771_pci", &s3_9fx_771_pci_device }, { "px_vision968_pci", &s3_phoenix_vision968_pci_device }, { "spea_mercury64p_pci", &s3_spea_mercury_p64v_pci_device }, + { "n9_9fx_531_pci", &s3_9fx_531_pci_device }, { "px_vision868_pci", &s3_phoenix_vision868_pci_device }, { "px_trio64vplus_pci", &s3_phoenix_trio64vplus_pci_device }, { "trio64v2dx_pci", &s3_trio64v2_dx_pci_device }, @@ -164,7 +170,6 @@ video_cards[] = { { "mystique", &mystique_device }, { "mystique_220", &mystique_220_device }, #endif - { "cl_gd5446_stb_pci", &gd5446_stb_pci_device }, { "tgui9440_pci", &tgui9440_pci_device }, { "tgui9660_pci", &tgui9660_pci_device }, { "tgui9680_pci", &tgui9680_pci_device }, @@ -173,16 +178,17 @@ video_cards[] = { { "voodoo3_3k_pci", &voodoo_3_3000_device }, { "mach64gx_vlb", &mach64gx_vlb_device }, { "et4000w32i_vlb", &et4000w32i_vlb_device }, - { "et4000w32p_vlb", &et4000w32p_cardex_vlb_device }, - { "et4000w32p_nc_vlb", &et4000w32p_noncardex_vlb_device }, { "et4000w32p_revc_vlb", &et4000w32p_revc_vlb_device }, - { "cl_gd5424_vlb", &gd5424_vlb_device }, - { "cl_gd5428_vlb", &gd5428_vlb_device }, - { "cl_gd5429_vlb", &gd5429_vlb_device }, - { "cl_gd5434_vlb", &gd5434_vlb_device }, + { "et4000w32p_vlb", &et4000w32p_cardex_vlb_device }, { "stealth32_vlb", &et4000w32p_vlb_device }, + { "et4000w32p_nc_vlb", &et4000w32p_noncardex_vlb_device }, + { "cl_gd5424_vlb", &gd5424_vlb_device }, { "cl_gd5426_vlb", &gd5426_vlb_device }, - { "cl_gd5430_vlb", &gd5430_vlb_device }, + { "cl_gd5428_vlb", &gd5428_vlb_device }, + { "cl_gd5428_diamond_b1_vlb", &gd5428_diamond_speedstar_pro_b1_vlb_device }, + { "cl_gd5429_vlb", &gd5429_vlb_device }, + { "cl_gd5430_vlb", &gd5430_diamond_speedstar_pro_se_a8_vlb_device }, + { "cl_gd5434_vlb", &gd5434_vlb_device }, { "metheus928_vlb", &s3_metheus_86c928_vlb_device }, { "mirocrystal8s_vlb", &s3_mirocrystal_8s_805_vlb_device }, { "mirocrystal10sd_vlb", &s3_mirocrystal_10sd_805_vlb_device }, diff --git a/src/win/86Box.rc b/src/win/86Box.rc index 7fd422702..441d63ba0 100644 --- a/src/win/86Box.rc +++ b/src/win/86Box.rc @@ -360,9 +360,16 @@ END #endif // not APSTUDIO_INVOKED +#include "languages/zh-CN.rc" #include "languages/cs-CZ.rc" #include "languages/de-DE.rc" #include "languages/en-US.rc" +#include "languages/fr-FR.rc" +#include "languages/hr-HR.rc" +#include "languages/fi-FI.rc" #include "languages/hu-HU.rc" +#include "languages/it-IT.rc" +#include "languages/ja-JP.rc" #include "languages/pt-BR.rc" #include "languages/pt-PT.rc" +#include "languages/sl-SI.rc" diff --git a/src/win/CMakeLists.txt b/src/win/CMakeLists.txt index 727644f7b..5b44eeb45 100644 --- a/src/win/CMakeLists.txt +++ b/src/win/CMakeLists.txt @@ -18,9 +18,9 @@ enable_language(RC) add_library(plat OBJECT win.c win_dynld.c win_cdrom.c win_thread.c win_keyboard.c win_crashdump.c win_midi.c win_mouse.c) -add_library(ui OBJECT win_ui.c win_stbar.c win_sdl.c win_dialog.c win_about.c +add_library(ui OBJECT win_ui.c win_icon.c win_stbar.c win_sdl.c win_dialog.c win_about.c win_settings.c win_devconf.c win_snd_gain.c win_specify_dim.c win_new_floppy.c - win_jsconf.c win_media_menu.c win_lang.c 86Box.rc) + win_jsconf.c win_media_menu.c win_progsett.c 86Box.rc) if(MSVC) # MSVC complains when we include the manifest from 86Box.rc... diff --git a/src/win/Makefile.mingw b/src/win/Makefile.mingw index d4022ee3a..2d2ad272f 100644 --- a/src/win/Makefile.mingw +++ b/src/win/Makefile.mingw @@ -42,9 +42,6 @@ ifeq ($(DEV_BUILD), y) ifndef GUSMAX GUSMAX := y endif - ifndef HEDAKA - HEDAKA := y - endif ifndef LASERXT LASERXT := y endif @@ -63,9 +60,6 @@ ifeq ($(DEV_BUILD), y) ifndef PAS16 PAS16 := n endif - ifndef PS2M70T4 - PS2M70T4 := y - endif ifndef SIO_DETECT SIO_DETECT := y endif @@ -78,9 +72,6 @@ ifeq ($(DEV_BUILD), y) ifndef XL24 XL24 := y endif - ifndef VECT486VL - VECT486VL := y - endif ifndef OLIVETTI OLIVETTI := y endif @@ -103,9 +94,6 @@ else ifndef GUSMAX GUSMAX := n endif - ifndef HEDAKA - HEDAKA := n - endif ifndef LASERXT LASERXT := n endif @@ -124,9 +112,6 @@ else ifndef PAS16 PAS16 := n endif - ifndef PS2M70T4 - PS2M70T4 := n - endif ifndef SIO_DETECT SIO_DETECT := n endif @@ -139,9 +124,6 @@ else ifndef XL24 XL24 := n endif - ifndef VECT486VL - VECT486VL := n - endif ifndef OLIVETTI OLIVETTI := n endif @@ -423,10 +405,10 @@ ifeq ($(WX), y) LIBS += $(WX_LIBS) UIOBJ := wx_main.o wx_ui.o wx_stbar.o wx_render.o else - UIOBJ := win_ui.o win_stbar.o \ + UIOBJ := win_ui.o win_icon.o win_stbar.o \ win_sdl.o \ win_dialog.o win_about.o \ - win_settings.o win_devconf.o win_snd_gain.o win_specify_dim.o win_lang.o \ + win_settings.o win_devconf.o win_snd_gain.o win_specify_dim.o win_progsett.o \ win_new_floppy.o win_jsconf.o win_media_menu.o endif @@ -491,10 +473,6 @@ ifeq ($(GUSMAX), y) OPTS += -DUSE_GUSMAX endif -ifeq ($(HEDAKA), y) -OPTS += -DUSE_HEDAKA -endif - ifeq ($(LASERXT), y) OPTS += -DUSE_LASERXT DEVBROBJ += m_xt_laserxt.o @@ -524,10 +502,6 @@ OPTS += -DUSE_PAS16 DEVBROBJ += snd_pas16.o endif -ifeq ($(PS2M70T4), y) -OPTS += -DUSE_PS2M70T4 -endif - ifeq ($(SIO_DETECT), y) OPTS += -DUSE_SIO_DETECT DEVBROBJ += sio_detect.o @@ -756,6 +730,7 @@ VIDOBJ := agpgart.o video.o \ vid_tvga.o \ vid_tgui9440.o vid_tkd8001_ramdac.o \ vid_att20c49x_ramdac.o \ + vid_att2xc498_ramdac.o \ vid_s3.o vid_s3_virge.o \ vid_ibm_rgb528_ramdac.o vid_sdac_ramdac.o \ vid_ogc.o \ diff --git a/src/win/languages/cs-CZ.rc b/src/win/languages/cs-CZ.rc index 24f41ba6a..1c5e74876 100644 --- a/src/win/languages/cs-CZ.rc +++ b/src/win/languages/cs-CZ.rc @@ -101,7 +101,7 @@ BEGIN MENUITEM "&Nastavení...", IDM_CONFIG MENUITEM "&Aktualizovat ikony stavového řádku", IDM_UPDATE_ICONS MENUITEM SEPARATOR - MENUITEM "&Změnit jazyk zobrazení...", IDM_VID_PROG_SETT + MENUITEM "Change program &settings...", IDM_VID_PROG_SETT # ifdef USE_DISCORD MENUITEM SEPARATOR MENUITEM "Povolit integraci s &Discordem", IDM_DISCORD @@ -273,7 +273,7 @@ END // Dialog // -#define STR_PROG_SETT "Změnit jazyk zobrazení" +#define STR_PROG_SETT "Program Settings" #define STR_SND_GAIN "Zesílení zvuku" #define STR_NEW_FLOPPY "Nový obraz" #define STR_CONFIG "Nastavení emulátoru 86Box" @@ -284,6 +284,7 @@ END #define STR_GLOBAL "Uložit toto nastavení jako &globální výchozí stav" #define STR_DEFAULT "&Výchozí" #define STR_LANGUAGE "Jazyk:" +#define STR_ICONSET "Sada ikon:" #define STR_GAIN "Zesílení" @@ -391,6 +392,9 @@ END #define STR_BUGGER "Zařízení ISABugger" #define STR_POSTCARD "Karta pro kódy POST" +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + #include "dialogs.rc" ///////////////////////////////////////////////////////////////////////////// @@ -487,7 +491,7 @@ BEGIN IDS_2124 "O programu 86Box" IDS_2125 "86Box v" EMU_VERSION - IDS_2126 "Emulátor starých počítačů\n\nAutoři: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nZveřejněno pod licencí GNU General Public License verze 2 nebo novější. Viz soubor LICENSE pro více informací." + IDS_2126 "Emulátor starých počítačů\n\nAutoři: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nZveřejněno pod licencí GNU General Public License verze 2 nebo novější. Viz soubor LICENSE pro více informací." IDS_2127 "OK" IDS_2128 "Hardware není dostupný" #ifdef _WIN32 diff --git a/src/win/languages/de-DE.rc b/src/win/languages/de-DE.rc index 8621e70b5..7c3364c1a 100644 --- a/src/win/languages/de-DE.rc +++ b/src/win/languages/de-DE.rc @@ -69,7 +69,7 @@ BEGIN POPUP "&Stretching-Modus im Vollbildmodus" BEGIN MENUITEM "&Vollbild-Stretching", IDM_VID_FS_FULL - MENUITEM "&4:3", IDM_VID_FS_43 + MENUITEM "&4:3-Seitenverhältnis erzwingen", IDM_VID_FS_43 MENUITEM "&Quadratische Pixel (Seitenverhältnis beibehalten)", IDM_VID_FS_KEEPRATIO MENUITEM "&Integer-Skalierung", IDM_VID_FS_INT END @@ -101,7 +101,7 @@ BEGIN MENUITEM "&Einstellungen...", IDM_CONFIG MENUITEM "&Statusleistenicons aktualisieren", IDM_UPDATE_ICONS MENUITEM SEPARATOR - MENUITEM "&Anzeigesprache ändern...", IDM_VID_PROG_SETT + MENUITEM "Change program &settings...", IDM_VID_PROG_SETT # ifdef USE_DISCORD MENUITEM SEPARATOR MENUITEM "&Discord-Integration aktivieren", IDM_DISCORD @@ -273,7 +273,7 @@ END // Dialog // -#define STR_PROG_SETT "Anzeigesprache ändern" +#define STR_PROG_SETT "Program Settings" #define STR_SND_GAIN "Klangverstärkung" #define STR_NEW_FLOPPY "Neues Image" #define STR_CONFIG "86Box-Einstellungen" @@ -284,6 +284,7 @@ END #define STR_GLOBAL "Einstellungen als &globalen Standard speichern" #define STR_DEFAULT "&Standard" #define STR_LANGUAGE "Sprache:" +#define STR_ICONSET "Icon-Satz:" #define STR_GAIN "Verstärkung" @@ -328,7 +329,7 @@ END #define STR_SSI "Innovation SSI-2001" #define STR_CMS "CMS / Game Blaster" #define STR_GUS "Gravis Ultrasound" -#define STR_FLOAT "Use FLOAT32 sound" +#define STR_FLOAT "FLOAT32-Wiedergabe benutzen" #define STR_NET_TYPE "Netzwerktyp:" #define STR_PCAP "PCap-Gerät:" @@ -391,6 +392,9 @@ END #define STR_BUGGER "ISABugger-Gerät" #define STR_POSTCARD "POST-Code-Karte" +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + #include "dialogs.rc" ///////////////////////////////////////////////////////////////////////////// @@ -402,7 +406,7 @@ STRINGTABLE DISCARDABLE BEGIN 2048 "86Box" IDS_2049 "Fehler" - IDS_2050 "Kritischer Fehler" + IDS_2050 "Fataler Fehler" IDS_2051 "" IDS_2052 "Bitte Strg+Alt+Bild ab zur Rückkehr in den Fenstermodus drücken." IDS_2053 "Geschwindigkeit" @@ -487,7 +491,7 @@ BEGIN IDS_2124 "Über 86Box" IDS_2125 "86Box Version " EMU_VERSION - IDS_2126 "Ein Emulator für alte Computer\n\nAutoren: Sarah Walker, Miran Grča, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, 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." + IDS_2126 "Ein Emulator für alte Computer\n\nAutoren: Sarah Walker, Miran Grča, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, 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." IDS_2127 "OK" IDS_2128 "Hardware nicht verfügbar" #ifdef _WIN32 @@ -520,8 +524,8 @@ BEGIN IDS_2136 "Nicht beenden" IDS_2137 "Resetten" IDS_2138 "Nicht Resetten" - IDS_2139 "MO-Images (*.IM?;*.MDI)\0*.IM?;*.MDI\0Alle Dateien (*.*)\0*.*\0" - IDS_2140 "CD-ROM-Images (*.ISO;*.CUE)\0*.ISO;*.CUE\0Alle Dateien (*.*)\0*.*\0" + IDS_2139 "MO-Imagedateien (*.IM?;*.MDI)\0*.IM?;*.MDI\0Alle Dateien (*.*)\0*.*\0" + IDS_2140 "CD-ROM-Imagedateien (*.ISO;*.CUE)\0*.ISO;*.CUE\0Alle Dateien (*.*)\0*.*\0" IDS_2141 "%hs-Gerätekonfiguration" IDS_2142 "Monitor im Standby" IDS_2143 "OpenGL-Shader (*.GLSL)\0*.GLSL\0Alle Dateien (*.*)\0*.*\0" @@ -563,9 +567,9 @@ BEGIN IDS_4119 "Nicht unterstütztes Disk-Image" IDS_4120 "Überschreiben" IDS_4121 "Nicht überschreiben" - IDS_4122 "Rohdatenimage (.img)" - IDS_4123 "HDI-Image (.hdi)" - IDS_4124 "HDX-Image (.hdx)" + IDS_4122 "Rohdatenimagedateien (.img)" + IDS_4123 "HDI-Imagedateien (.hdi)" + IDS_4124 "HDX-Imagedateien (.hdx)" IDS_4125 "VHD mit fester Größe (.vhd)" IDS_4126 "VHD mit dynamischer Größe (.vhd)" IDS_4127 "Differenzierende VHD (.vhd)" diff --git a/src/win/languages/dialogs.rc b/src/win/languages/dialogs.rc index 6645c462d..b2813faa0 100644 --- a/src/win/languages/dialogs.rc +++ b/src/win/languages/dialogs.rc @@ -1,20 +1,23 @@ -DLG_PROG_SETT DIALOG DISCARDABLE 0, 0, 240, 86 +DLG_PROG_SETT DIALOG DISCARDABLE 0, 0, 240, 118 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION STR_PROG_SETT -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN - DEFPUSHBUTTON STR_OK, IDOK, 123, 65, 50, 14 - PUSHBUTTON STR_CANCEL, IDCANCEL, 179, 65, 50, 14 + DEFPUSHBUTTON STR_OK, IDOK, 123, 97, 50, 14 + PUSHBUTTON STR_CANCEL, IDCANCEL, 179, 97, 50, 14 COMBOBOX IDC_COMBO_LANG, 13, 18, 213, 22, CBS_DROPDOWNLIST | CBS_HASSTRINGS - AUTOCHECKBOX STR_GLOBAL, IDC_CHECKBOX_GLOBAL, 13, 50, 217, 8 , WS_DISABLED PUSHBUTTON STR_DEFAULT, IDC_BUTTON_DEFAULT, 162, 32, 60, 14 - LTEXT STR_LANGUAGE, 0, 13, 8, 34, 8 + COMBOBOX IDC_COMBO_ICON, 13, 50, 213, 22, CBS_DROPDOWNLIST | CBS_HASSTRINGS + PUSHBUTTON STR_DEFAULT, IDC_BUTTON_DEFICON, 162, 64, 60, 14 + AUTOCHECKBOX STR_GLOBAL, IDC_CHECKBOX_GLOBAL, 13, 82, 217, 8 , WS_DISABLED + LTEXT STR_LANGUAGE, 2000, 13, 8, 100, 8 + LTEXT STR_ICONSET, 2001, 13, 40, 100, 8 END DLG_SND_GAIN DIALOG DISCARDABLE 0, 0, 113, 136 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION STR_SND_GAIN -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN DEFPUSHBUTTON STR_OK,IDOK,57,7,50,14 PUSHBUTTON STR_CANCEL,IDCANCEL,57,24,50,14 @@ -26,7 +29,7 @@ END DLG_NEW_FLOPPY DIALOG DISCARDABLE 0, 0, 226, 86 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION STR_NEW_FLOPPY -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN DEFPUSHBUTTON STR_OK,IDOK,104,65,50,14 PUSHBUTTON STR_CANCEL,IDCANCEL,162,65,50,14 @@ -47,7 +50,7 @@ END DLG_CONFIG DIALOG DISCARDABLE 0, 0, 376, 256 STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION STR_CONFIG -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN DEFPUSHBUTTON STR_OK,IDOK,246,235,50,14 PUSHBUTTON STR_CANCEL,IDCANCEL,307,235,50,14 @@ -59,7 +62,7 @@ END DLG_SPECIFY_DIM DIALOG DISCARDABLE 0, 0, 175, 66 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION STR_SPECIFY_DIM -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN LTEXT STR_WIDTH,IDT_1709,7,9,24,12 EDITTEXT IDC_EDIT_WIDTH,33,7,45,12,ES_AUTOHSCROLL | ES_NUMBER @@ -79,7 +82,7 @@ END DLG_CFG_MACHINE DIALOG DISCARDABLE 107, 0, 305, 200 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN COMBOBOX IDC_COMBO_MACHINE_TYPE,71,7,189,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -115,13 +118,13 @@ BEGIN BS_AUTORADIOBUTTON | WS_TABSTOP,14,175,84,10 #ifdef USE_DYNAREC CONTROL STR_DYNAREC,IDC_CHECK_DYNAREC,"Button", - BS_AUTOCHECKBOX | WS_TABSTOP,7,120,94,10 + BS_AUTOCHECKBOX | WS_TABSTOP,7,120,120,10 #endif END DLG_CFG_VIDEO DIALOG DISCARDABLE 107, 0, 267, 45 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN LTEXT STR_VIDEO,IDT_1707,7,9,48,10 COMBOBOX IDC_COMBO_VIDEO,64,7,155,120,CBS_DROPDOWNLIST | @@ -134,7 +137,7 @@ END DLG_CFG_INPUT DIALOG DISCARDABLE 107, 0, 267, 65 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN LTEXT STR_MOUSE,IDT_1709,7,9,57,10 COMBOBOX IDC_COMBO_MOUSE,71,7,140,120,CBS_DROPDOWNLIST | @@ -151,7 +154,7 @@ END DLG_CFG_SOUND DIALOG DISCARDABLE 107, 0, 267, 201 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN COMBOBOX IDC_COMBO_SOUND,71,7,140,120,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP @@ -190,7 +193,7 @@ END DLG_CFG_NETWORK DIALOG DISCARDABLE 107, 0, 267, 65 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN LTEXT STR_NET_TYPE,IDT_1714,7,9,59,10 COMBOBOX IDC_COMBO_NET_TYPE,71,7,189,120,CBS_DROPDOWNLIST | WS_VSCROLL | @@ -208,7 +211,7 @@ END DLG_CFG_PORTS DIALOG DISCARDABLE 107, 0, 267, 135 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN LTEXT STR_LPT1,IDT_1717,7,9,61,10 COMBOBOX IDC_COMBO_LPT1,71,7,189,120,CBS_DROPDOWNLIST | @@ -241,7 +244,7 @@ END DLG_CFG_STORAGE DIALOG DISCARDABLE 107, 0, 267, 203 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN LTEXT STR_HDC,IDT_1718,7,9,64,10 COMBOBOX IDC_COMBO_HDC,64,7,155,120,CBS_DROPDOWNLIST | @@ -285,7 +288,7 @@ END DLG_CFG_HARD_DISKS DIALOG DISCARDABLE 107, 0, 267, 154 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN CONTROL "List1",IDC_LIST_HARD_DISKS,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER | @@ -310,7 +313,7 @@ END DLG_CFG_HARD_DISKS_ADD DIALOG DISCARDABLE 0, 0, 219, 149 STYLE DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Add Hard Disk" -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN DEFPUSHBUTTON STR_OK,IDOK,55,127,50,14 PUSHBUTTON STR_CANCEL,IDCANCEL,112,127,50,14 @@ -352,7 +355,7 @@ END DLG_CFG_FLOPPY_AND_CDROM_DRIVES DIALOG DISCARDABLE 107, 0, 267, 222 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN CONTROL "List1",IDC_LIST_FLOPPY_DRIVES,"SysListView32", LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER | @@ -386,14 +389,14 @@ END DLG_CFG_OTHER_REMOVABLE_DEVICES DIALOG DISCARDABLE 107, 0, 267, 222 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN CONTROL "List1",IDC_LIST_MO_DRIVES,"SysListView32",LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,7,17,253,60 LTEXT STR_MO_DRIVES,IDT_1769,7,7,253,8 - COMBOBOX IDC_COMBO_MO_BUS,33,85,90,12,CBS_DROPDOWNLIST | + COMBOBOX IDC_COMBO_MO_BUS,33,85,80,12,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT STR_BUS,IDT_1770,7,87,24,8 COMBOBOX IDC_COMBO_MO_ID,170,85,90,12,CBS_DROPDOWNLIST | @@ -410,9 +413,9 @@ BEGIN LVS_SHOWSELALWAYS | LVS_SINGLESEL | WS_BORDER | WS_TABSTOP,7,137,253,60 LTEXT STR_ZIP_DRIVES,IDT_1759,7,127,253,8 - COMBOBOX IDC_COMBO_ZIP_BUS,23,205,90,12,CBS_DROPDOWNLIST | + COMBOBOX IDC_COMBO_ZIP_BUS,33,205,80,12,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - LTEXT STR_BUS,IDT_1753,7,207,14,8 + LTEXT STR_BUS,IDT_1753,7,207,24,8 COMBOBOX IDC_COMBO_ZIP_ID,149,205,61,12,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP LTEXT STR_ID,IDT_1754,120,207,28,8 @@ -425,7 +428,7 @@ END DLG_CFG_PERIPHERALS DIALOG DISCARDABLE 107, 0, 267, 154 STYLE DS_CONTROL | WS_CHILD -FONT 9, "Segoe UI" +FONT FONT_SIZE, FONT_NAME BEGIN LTEXT STR_ISARTC,IDT_1767,7,9,48,10 COMBOBOX IDC_COMBO_ISARTC,64,7,155,120, @@ -468,6 +471,7 @@ END #undef STR_GLOBAL #undef STR_DEFAULT #undef STR_LANGUAGE +#undef STR_ICONSET #undef STR_GAIN @@ -574,3 +578,6 @@ END #undef STR_ISAMEM_4 #undef STR_BUGGER #undef STR_POSTCARD + +#undef FONT_SIZE +#undef FONT_NAME diff --git a/src/win/languages/en-US.rc b/src/win/languages/en-US.rc index 443d0debc..cc86e387a 100644 --- a/src/win/languages/en-US.rc +++ b/src/win/languages/en-US.rc @@ -101,7 +101,7 @@ BEGIN MENUITEM "&Settings...", IDM_CONFIG MENUITEM "&Update status bar icons", IDM_UPDATE_ICONS MENUITEM SEPARATOR - MENUITEM "Change dis&play language...", IDM_VID_PROG_SETT + MENUITEM "Change program &settings...", IDM_VID_PROG_SETT # ifdef USE_DISCORD MENUITEM SEPARATOR MENUITEM "Enable &Discord integration", IDM_DISCORD @@ -273,7 +273,7 @@ END // Dialog // -#define STR_PROG_SETT "Change Display Language" +#define STR_PROG_SETT "Program Settings" #define STR_SND_GAIN "Sound Gain" #define STR_NEW_FLOPPY "New Image" #define STR_CONFIG "86Box Settings" @@ -284,6 +284,7 @@ END #define STR_GLOBAL "Save these settings as &global defaults" #define STR_DEFAULT "&Default" #define STR_LANGUAGE "Language:" +#define STR_ICONSET "Icon set:" #define STR_GAIN "Gain" @@ -391,6 +392,9 @@ END #define STR_BUGGER "ISABugger device" #define STR_POSTCARD "POST card" +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + #include "dialogs.rc" ///////////////////////////////////////////////////////////////////////////// @@ -487,7 +491,7 @@ BEGIN IDS_2124 "About 86Box" IDS_2125 "86Box v" EMU_VERSION - IDS_2126 "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." + IDS_2126 "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." IDS_2127 "OK" IDS_2128 "Hardware not available" #ifdef _WIN32 diff --git a/src/win/languages/fi-FI.rc b/src/win/languages/fi-FI.rc new file mode 100644 index 000000000..990396e47 --- /dev/null +++ b/src/win/languages/fi-FI.rc @@ -0,0 +1,644 @@ +//////////////////////////////////////////////////////////////////////////// +// Finnish resources + +#ifdef _WIN32 +LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT +#pragma code_page(65001) +#endif //_WIN32 + +#define AUTHORS + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MainMenu MENU DISCARDABLE +BEGIN + POPUP "&Toiminto" + BEGIN + MENUITEM "&Vaadi näppäimistön kaappaus", IDM_ACTION_KBD_REQ_CAPTURE + MENUITEM "&Oikea CTRL on vasen ALT", IDM_ACTION_RCTRL_IS_LALT + MENUITEM SEPARATOR + MENUITEM "&Uudelleenkäynnistys (kylmä)...", IDM_ACTION_HRESET + MENUITEM "&Ctrl+Alt+Del\tCtrl+F12", IDM_ACTION_RESET_CAD + MENUITEM SEPARATOR + MENUITEM "Ctrl+Alt+&Esc", IDM_ACTION_CTRL_ALT_ESC + MENUITEM SEPARATOR + MENUITEM "&Tauko", IDM_ACTION_PAUSE + MENUITEM SEPARATOR + MENUITEM "&Poistu...", IDM_ACTION_EXIT + END + POPUP "&Näytä" + BEGIN + MENUITEM "&Piilota tilapalkki", IDM_VID_HIDE_STATUS_BAR + MENUITEM SEPARATOR + MENUITEM "&Salli koon muuttaminen", IDM_VID_RESIZE + MENUITEM "&Muista koko ja sijainti", IDM_VID_REMEMBER + MENUITEM SEPARATOR + POPUP "&Renderöijä" + BEGIN + MENUITEM "&SDL (ohjelmistopohjainen)", IDM_VID_SDL_SW + MENUITEM "SDL (&laitteistokiihdytetty)", IDM_VID_SDL_HW + MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL +#if defined(DEV_BRANCH) && defined(USE_OPENGL) + MENUITEM "Open&GL (3.3 Core)", IDM_VID_OPENGL_CORE +#endif +#ifdef USE_VNC + MENUITEM "&VNC", IDM_VID_VNC +#endif + END + MENUITEM SEPARATOR + MENUITEM "&Määritä koko...", IDM_VID_SPECIFY_DIM + MENUITEM "Pakota 4:3 näyttösuhde", IDM_VID_FORCE43 + POPUP "&Ikkunan kokokerroin" + BEGIN + MENUITEM "&0.5x", IDM_VID_SCALE_1X + MENUITEM "&1x", IDM_VID_SCALE_2X + MENUITEM "1.&5x", IDM_VID_SCALE_3X + MENUITEM "&2x", IDM_VID_SCALE_4X + END + POPUP "&Suodatusmetodi" + BEGIN + MENUITEM "&Lähin naapuri", IDM_VID_FILTER_NEAREST + MENUITEM "Li&neaarinen interpolaatio", IDM_VID_FILTER_LINEAR + END + MENUITEM "&Suuri DPI-skaalaus", IDM_VID_HIDPI + MENUITEM SEPARATOR + MENUITEM "&Koko näytön tila\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN + POPUP "Koko näytön &skaalaustila" + BEGIN + MENUITEM "&Venytä koko näyttöön", IDM_VID_FS_FULL + MENUITEM "&4:3", IDM_VID_FS_43 + MENUITEM "&Tasasivuiset kuvapisteet (säilytä kuvasuhde)", IDM_VID_FS_KEEPRATIO + MENUITEM "&Kokonaislukuskaalaus", IDM_VID_FS_INT + END + POPUP "&EGA/(S)VGA asetukset" + BEGIN + MENUITEM "&VGA näyttö käänteisillä väreillä", IDM_VID_INVERT + POPUP "VGA näytön &tyyppi" + BEGIN + MENUITEM "RGB &värit", IDM_VID_GRAY_RGB + MENUITEM "&RGB harmaasävyinen", IDM_VID_GRAY_MONO + MENUITEM "&Meripihkanvärinen", IDM_VID_GRAY_AMBER + MENUITEM "V&ihreä", IDM_VID_GRAY_GREEN + MENUITEM "V&alkoinen", IDM_VID_GRAY_WHITE + END + POPUP "&Harmaasävymuunnoksen tyyppi" + BEGIN + MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601 + MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709 + MENUITEM "&Keskiarvo", IDM_VID_GRAYCT_AVE + END + END + MENUITEM SEPARATOR + MENUITEM "CGA/PCjr/Tandy/E&GA/(S)VGA &yliskannaus", IDM_VID_OVERSCAN + MENUITEM "&Muuta harmaavärinäytön kontrastia", IDM_VID_CGACON + END + MENUITEM "&Media", IDM_MEDIA + POPUP "&Työkalut" + BEGIN + MENUITEM "&Asetukset...", IDM_CONFIG + MENUITEM "&Päivitä tilapalkin kuvakkeita", IDM_UPDATE_ICONS + MENUITEM SEPARATOR + MENUITEM "Change program &settings...", IDM_VID_PROG_SETT +# ifdef USE_DISCORD + MENUITEM SEPARATOR + MENUITEM "Käytä &Discord integraatiota", IDM_DISCORD +# endif + MENUITEM SEPARATOR + MENUITEM "Ota &kuvakaappaus\tCtrl+F11", IDM_ACTION_SCREENSHOT + MENUITEM SEPARATOR + MENUITEM "&Äänen tulotaso...", IDM_SND_GAIN +#ifdef MTR_ENABLED + MENUITEM SEPARATOR + MENUITEM "Aloita jäljitys\tCtrl+T", IDM_ACTION_BEGIN_TRACE + MENUITEM "Lopeta jäljitys\tCtrl+T", IDM_ACTION_END_TRACE +#endif + END +#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS) + POPUP "&Lokitus" + BEGIN +# ifdef ENABLE_BUSLOGIC_LOG + MENUITEM "BusLogic-lokitus päällä\tCtrl+F4", IDM_LOG_BUSLOGIC +# endif +# ifdef ENABLE_CDROM_LOG + MENUITEM "CD-ROM-lokitus päällä\tCtrl+F5", IDM_LOG_CDROM +# endif +# ifdef ENABLE_D86F_LOG + MENUITEM "Levykelokitus (86F) päällä\tCtrl+F6", IDM_LOG_D86F +# endif +# ifdef ENABLE_FDC_LOG + MENUITEM "Levykekontrollerin lokitus päällä\tCtrl+F7", IDM_LOG_FDC +# endif +# ifdef ENABLE_IDE_LOG + MENUITEM "IDE-lokitus päällä\tCtrl+F8", IDM_LOG_IDE +# endif +# ifdef ENABLE_SERIAL_LOG + MENUITEM "Sarjaporttilokitus päällä\tCtrl+F3", IDM_LOG_SERIAL +# endif +# ifdef ENABLE_NIC_LOG + MENUITEM "Verkkolokitus päällä\tCtrl+F9", IDM_LOG_NIC +# endif +# ifdef ENABLE_LOG_COMMANDS +# ifdef ENABLE_LOG_TOGGLES + MENUITEM SEPARATOR +# endif +# ifdef ENABLE_LOG_BREAKPOINT + MENUITEM "&Kirjaa keskeytyskohdat\tCtrl+F10", IDM_LOG_BREAKPOINT +# endif +# ifdef ENABLE_VRAM_DUMP + MENUITEM "Tallenna &videomuistin vedos\tCtrl+F1", IDM_DUMP_VRAM +# endif +# endif + END +#endif + POPUP "&Ohje" + BEGIN + MENUITEM "&Dokumentaatio...", IDM_DOCS + MENUITEM "&Tietoja 86Box:sta...", IDM_ABOUT + END +END + +StatusBarMenu MENU DISCARDABLE +BEGIN + MENUITEM SEPARATOR +END + +CassetteSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Uusi kasettikuva...", IDM_CASSETTE_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Olemassaoleva kasettikuva...", IDM_CASSETTE_IMAGE_EXISTING + MENUITEM "Olemassaoleva kasettikuva (&kirjoitussuojattu)...", IDM_CASSETTE_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Nauhoita", IDM_CASSETTE_RECORD + MENUITEM "&Toista", IDM_CASSETTE_PLAY + MENUITEM "Kelaa &alkuun", IDM_CASSETTE_REWIND + MENUITEM "Kelaa &loppuun", IDM_CASSETTE_FAST_FORWARD + MENUITEM SEPARATOR + MENUITEM "&Poista kasettipesästä", IDM_CASSETTE_EJECT + END +END + +CartridgeSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&ROM-moduulikuva...", IDM_CARTRIDGE_IMAGE + MENUITEM SEPARATOR + MENUITEM "&Irrota", IDM_CARTRIDGE_EJECT + END +END + +FloppySubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Uusi levykekuva...", IDM_FLOPPY_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Olemassaoleva levykekuva...", IDM_FLOPPY_IMAGE_EXISTING + MENUITEM "Olemassaoleva levykekuva (&kirjoitussuojattu)...", IDM_FLOPPY_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Vie 86F-tiedostoon...", IDM_FLOPPY_EXPORT_TO_86F + MENUITEM SEPARATOR + MENUITEM "&Poista asemasta", IDM_FLOPPY_EJECT + END +END + +CdromSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Mykistä", IDM_CDROM_MUTE + MENUITEM SEPARATOR + MENUITEM "&Tyhjä", IDM_CDROM_EMPTY + MENUITEM "&Lataa edellinen levykuva uudelleen", IDM_CDROM_RELOAD + MENUITEM SEPARATOR + MENUITEM "L&evykuva", IDM_CDROM_IMAGE + END +END + +ZIPSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Uusi levykuva...", IDM_ZIP_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Olemassaoleva levykuva...", IDM_ZIP_IMAGE_EXISTING + MENUITEM "Olemassaoleva levykuva (&kirjoitussuojattu)...", IDM_ZIP_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Poista asemasta", IDM_ZIP_EJECT + MENUITEM "&Lataa edellinen levykuva uudelleen", IDM_ZIP_RELOAD + END +END + +MOSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Uusi levykuva...", IDM_MO_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Olemassaoleva levykuva...", IDM_MO_IMAGE_EXISTING + MENUITEM "Olemassaoleva levykuva (&kirjoitussuojattu)...", IDM_MO_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Poista asemasta", IDM_MO_EJECT + MENUITEM "&Lataa edellinen levykuva uudelleen", IDM_MO_RELOAD + END +END + +#if defined(DEV_BRANCH) && defined(USE_OPENGL) +VidGLSubMenu MENU DISCARDABLE +BEGIN + POPUP "&Kuvataajuustavoite" + BEGIN + MENUITEM "&Synkronisoi videoon", IDM_VID_GL_FPS_BLITTER + MENUITEM "&25 ruutua/s", IDM_VID_GL_FPS_25 + MENUITEM "&30 ruutua/s", IDM_VID_GL_FPS_30 + MENUITEM "&50 ruutua/s", IDM_VID_GL_FPS_50 + MENUITEM "&60 ruutua/s", IDM_VID_GL_FPS_60 + MENUITEM "&75 ruutua/s", IDM_VID_GL_FPS_75 + END + MENUITEM "&VSync", IDM_VID_GL_VSYNC + MENUITEM "Valitse varjostin&ohjelma...", IDM_VID_GL_SHADER + MENUITEM "&Poista varjostinohjelma", IDM_VID_GL_NOSHADER +END +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +#define STR_PROG_SETT "Program Settings" +#define STR_SND_GAIN "Äänen tulotaso" +#define STR_NEW_FLOPPY "Uusi levykuva" +#define STR_CONFIG "86Box Asetukset" +#define STR_SPECIFY_DIM "Määritä pääikkunan koko" + +#define STR_OK "OK" +#define STR_CANCEL "Peruuta" +#define STR_GLOBAL "Tallenna nämä asetukset &globaaleiksi oletuksiksi" +#define STR_DEFAULT "&Oletus" +#define STR_LANGUAGE "Kieli:" +#define STR_ICONSET "Kuvakkeet:" + +#define STR_GAIN "Taso" + +#define STR_FILE_NAME "Tiedostonimi:" +#define STR_DISK_SIZE "Levyn koko:" +#define STR_RPM_MODE "RPM tila:" +#define STR_PROGRESS "Edistyminen:" + +#define STR_WIDTH "Leveys:" +#define STR_HEIGHT "Korkeus:" +#define STR_LOCK_TO_SIZE "Lukitse tähän kokoon" + +#define STR_MACHINE_TYPE "Tietokoneen tyyppi:" +#define STR_MACHINE "Tietokone:" +#define STR_CONFIGURE "Määritys" +#define STR_CPU_TYPE "Suorittimen tyyppi:" +#define STR_SPEED "Nopeus:" +#define STR_FPU "Apusuoritin:" +#define STR_WAIT_STATES "Odotustilat:" +#define STR_MB "Mt" +#define STR_MEMORY "Muisti:" +#define STR_TIME_SYNC "Kellon synkronointi" +#define STR_DISABLED "Poistettu käytöstä" +#define STR_ENABLED_LOCAL "Käytössä (paikallinen)" +#define STR_ENABLED_UTC "Käytössä (UTC)" +#define STR_DYNAREC "Dynaaminen uudelleenkääntäjä" + +#define STR_VIDEO "Näytönohjain:" +#define STR_VOODOO "Voodoo-grafiikkasuoritin" + +#define STR_MOUSE "Hiiri:" +#define STR_JOYSTICK "Peliohjain:" +#define STR_JOY1 "Peliohjain 1..." +#define STR_JOY2 "Peliohjain 2..." +#define STR_JOY3 "Peliohjain 3..." +#define STR_JOY4 "Peliohjain 4..." + +#define STR_SOUND "Äänikortti:" +#define STR_MIDI "MIDI-ulostulo:" +#define STR_MIDI_IN "MIDI-sisääntulo:" +#define STR_MPU401 "Erillinen MPU-401" +#define STR_SSI "Innovation SSI-2001" +#define STR_CMS "CMS / Game Blaster" +#define STR_GUS "Gravis Ultrasound" +#define STR_FLOAT "Käytä FLOAT32-ääntä" + +#define STR_NET_TYPE "Verkon tyyppi:" +#define STR_PCAP "PCap-laite:" +#define STR_NET "Verkkokortti:" + +#define STR_LPT1 "LPT1-laite:" +#define STR_LPT2 "LPT2-laite:" +#define STR_LPT3 "LPT3-laite:" +#define STR_SERIAL1 "Sarjaportti 1" +#define STR_SERIAL2 "Sarjaportti 2" +#define STR_SERIAL3 "Sarjaportti 3" +#define STR_SERIAL4 "Sarjaportti 4" +#define STR_PARALLEL1 "Rinnakkaisportti 1" +#define STR_PARALLEL2 "Rinnakkaisportti 2" +#define STR_PARALLEL3 "Rinnakkaisportti 3" + +#define STR_HDC "Kiintolevyohjain:" +#define STR_FDC "Levykeohjain:" +#define STR_IDE_TER "Tertinäärinen IDE-ohjain" +#define STR_IDE_QUA "Kvaternaarinen IDE-ohjain" +#define STR_SCSI "SCSI" +#define STR_SCSI_1 "Ohjain 1:" +#define STR_SCSI_2 "Ohjain 2:" +#define STR_SCSI_3 "Ohjain 3:" +#define STR_SCSI_4 "Ohjain 4:" +#define STR_CASSETTE "Kasettiasema" + +#define STR_HDD "Kiintolevyt:" +#define STR_NEW "&Uusi..." +#define STR_EXISTING "&Olemassaoleva..." +#define STR_REMOVE "&Poista" +#define STR_BUS "Väylä:" +#define STR_CHANNEL "Kanava:" +#define STR_ID "ID:" + +#define STR_SPECIFY "&Määritä..." +#define STR_SECTORS "Sektorit:" +#define STR_HEADS "Päät:" +#define STR_CYLS "Sylinterit:" +#define STR_SIZE_MB "Koko (Mt):" +#define STR_TYPE "Tyyppi:" +#define STR_IMG_FORMAT "Tiedostomuoto:" +#define STR_BLOCK_SIZE "Lohkon koko:" + +#define STR_FLOPPY_DRIVES "Levykeasemat:" +#define STR_TURBO "Turbo-ajoitukset" +#define STR_CHECKBPB "Tarkista BPB" +#define STR_CDROM_DRIVES "CD-ROM-asemat:" + +#define STR_MO_DRIVES "Magneettisoptiset asemat (MO):" +#define STR_ZIP_DRIVES "ZIP-asemat:" +#define STR_250 "ZIP 250" + +#define STR_ISARTC "ISA-reaaliaikakello:" +#define STR_ISAMEM "ISA-muistilaajennus" +#define STR_ISAMEM_1 "Kortti 1:" +#define STR_ISAMEM_2 "Kortti 2:" +#define STR_ISAMEM_3 "Kortti 3:" +#define STR_ISAMEM_4 "Kortti 4:" +#define STR_BUGGER "ISABugger-laite" +#define STR_POSTCARD "POST-kortti" + +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + +#include "dialogs.rc" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + 2048 "86Box" + IDS_2049 "Virhe" + IDS_2050 "Vakava virhe" + IDS_2051 "" + IDS_2052 "Paina CTRL+ALT+PAGE DOWN palataksesi ikkunoituun tilaan." + IDS_2053 "Nopeus" + IDS_2054 "ZIP %03i %i (%s): %ls" + IDS_2055 "ZIP-levykuvat (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" + IDS_2056 "86Box ei löytänyt käyttökelpoisia ROM-tiedostoja.\n\nVoit ladata ROM-paketin ja purkaa sen ""roms"" hakemistoon." + IDS_2057 "(tyhjä)" + IDS_2058 "ZIP-levykuvat (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_2059 "Turbo" + IDS_2060 "Päällä" + IDS_2061 "Pois" + IDS_2062 "Kaikki levykuvat (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Perussektorilevykuvat (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Pintalevykuvat (*.86F)\0*.86F\0" + IDS_2063 "Konetta ""%hs"" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen koneeseen." +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2064 "Näytönohjainta ""%hs"" ei voi käyttää puuttuvien ROM-tiedostojen vuoksi. Vaihdetaan käyttökelpoiseen näytönohjaimeen." + IDS_2065 "Tietokone" + IDS_2066 "Näyttö" + IDS_2067 "Syöttölaitteet" + IDS_2068 "Ääni" + IDS_2069 "Verkko" + IDS_2070 "Portit (COM & LPT)" + IDS_2071 "Tallennusohjaimet" + IDS_2072 "Kiintolevyt" + IDS_2073 "Levyke ja CD-ROM" + IDS_2074 "Muut tallennuslaitteet" + IDS_2075 "Muut oheislaitteet" + IDS_2076 "Pintalevykuvat (*.86F)\0*.86F\0" + IDS_2077 "Kaappaa hiiri klikkaamalla" + IDS_2078 "Paina F8+F12 vapauttaaksesi hiiren" + IDS_2079 "Paina F8+F12 tai keskipainiketta vapauttaaksesi hiiren" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2080 "FluidSynth:in alustus epäonnistui" + IDS_2081 "Väylä" + IDS_2082 "Tiedosto" + IDS_2083 "C" + IDS_2084 "H" + IDS_2085 "S" + IDS_2086 "Mt" + IDS_2087 "Tarkista BPB" + IDS_2088 "kt" + IDS_2089 "Video-renderöijän alustus epäonnistui" + IDS_2090 "Oletus" + IDS_2091 "%i odotustilaa" + IDS_2092 "Tyyppi" + IDS_2093 "PCap-asennus epäonnistui" + IDS_2094 "PCap-laitteita ei löytynyt" + IDS_2095 "Virheellinen PCap-laite" + IDS_2096 "Standardi 2-painikkeinen peliohjain/-ohjaimet" + IDS_2097 "Standardi 4-painikkeinen peliohjain" + IDS_2098 "Standardi 6-painikkeinen peliohjain" + IDS_2099 "Standardi 8-painikkeinen peliohjain" + IDS_2100 "CH Flightstick Pro" + IDS_2101 "Microsoft SideWinder Pad" + IDS_2102 "Thrustmaster Flight Control System" + IDS_2103 "Ei mikään" + IDS_2104 "Näppäinkiihdyttimien lataus epäonnistui" + IDS_2105 "Raakasyötteen rekisteröinti epäonnistui" + IDS_2106 "%u" + IDS_2107 "%u Mt (CHS: %i, %i, %i)" + IDS_2108 "Levyke %i (%s): %ls" + IDS_2109 "Kaikki levykuvat (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Kehittyneet sektorilevykuvat (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Perussektorilevykuvat (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux-levykuvat (*.FDI)\0*.FDI\0Pintalevykuvat (*.86F;*.MFM)\0*.86F;*.MFM\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_2110 "FreeType:n alustus epäonnistui" + IDS_2111 "SDL:n alustus epäonnistui. Tarvitaan SDL2.dll" + IDS_2112 "Oletko varma, että haluat käynnistää emuloidun tietokoneen uudelleen?" + IDS_2113 "Haluatko varmasti sulkea 86Box:in?" + IDS_2114 "Ghostscript:in alustus epäonnistui" + IDS_2115 "MO %i (%ls): %ls" + IDS_2116 "MO-levykuvat (*.IM?;*.MDI)\0*.IM?;*.MDI\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_2117 "Tervetuloa 86Box:iin!" + IDS_2118 "Sisäinen ohjain" + IDS_2119 "Poistu" + IDS_2120 "ROM-tiedostoja ei löytynyt" + IDS_2121 "Tallennetaanko asetukset?" + IDS_2122 "Tämä käynnistää emuloidun tietokoneen uudelleen." + IDS_2123 "Tallenna" + IDS_2124 "Tietoja 86Box:sta" + IDS_2125 "86Box v" EMU_VERSION + + IDS_2126 "Vanhojen tietokoneiden emulaattori\n\nTekijät: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho ja muut.\n\nJulkaistu GNU General Public License 2. version tai myöhemmän alaisena. Tarkempia tietoja LICENSE-tiedostossa." + IDS_2127 "OK" + IDS_2128 "Laitteisto ei ole saatavilla" +#ifdef _WIN32 +#define LIB_NAME_PCAP "WinPcap" +#else +#define LIB_NAME_PCAP "libpcap" +#endif + IDS_2129 "Varmista, että " LIB_NAME_PCAP " on asennettu ja että verkkoyhteytesi on " LIB_NAME_PCAP "-yhteensopiva." + IDS_2130 "Virheelliset määritykset" +#ifdef _WIN32 +#define LIB_NAME_FREETYPE "freetype.dll" +#else +#define LIB_NAME_FREETYPE "libfreetype" +#endif + IDS_2131 LIB_NAME_FREETYPE " vaaditaan ESC/P-tulostimen emuloimiseksi." +#ifdef _WIN32 +#define LIB_NAME_GS "gsdll32.dll" +#else +#define LIB_NAME_GS "libgs" +#endif + IDS_2132 LIB_NAME_GS " vaaditaan PostScript-tiedostojen automaattiseen muuntamiseen PDF-tiedostoiksi.\n\nKaikki geneeriselle PostScript-tulostimelle lähetetyt asiakirjat tallennetaan PostScript (.ps) -tiedostoina." +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#endif + IDS_2133 LIB_NAME_FLUIDSYNTH " vaaditaan FluidSynth MIDI-ulostuloa varten." + IDS_2134 "Siirrytään koko näytön tilaan" + IDS_2135 "Älä näytä tätä viestiä uudelleen" + IDS_2136 "Älä poistu" + IDS_2137 "Käynnistä uudelleen" + IDS_2138 "Älä käynnistä uudelleen" + IDS_2139 "MO-levykuvat (*.IM?;*.MDI)\0*.IM?;*.MDI\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_2140 "CD-ROM-levykuvat (*.ISO;*.CUE)\0*.ISO;*.CUE\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_2141 "%hs - Laitteen määritykset" + IDS_2142 "Näyttö lepotilassa" + IDS_2143 "OpenGL-varjostinohjelmat (*.GLSL)\0*.GLSL\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_2144 "OpenGL-asetukset" + IDS_2145 "Olet lataamassa ei-tuettuja määrittelyjä" + IDS_2146 "Valittuun tietokoneeseen perustuva suoritintyypin suodatus ei ole käytössä tällä emuloidulla koneella.\n\nTämä mahdollistaa muutoin yhteensopimattoman suorittimen valinnan kyseisen tietokoneen kanssa. Voit kuitenkin kohdata ongelmia tietokoneen BIOS:in tai muun ohjelmiston kanssa.\n\nTämän asetuksen käyttö ei ole virallisesti tuettua ja kaikki tehdyt virheraportit voidaan sulkea epäpätevinä." + IDS_2147 "Jatka" + IDS_2148 "Kasetti: %s" + IDS_2149 "Kasetti-tiedostot (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_2150 "ROM-moduuli %i: %ls" + IDS_2151 "ROM-moduulikuvat (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Kaikki tiedostot (*.*)\0*.*\0" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_4096 "Kiintolevy (%s)" + IDS_4097 "%01i:%01i" + IDS_4098 "%01i" + IDS_4099 "MFM/RLL tai ESDI CD-ROM asemia ei ole koskaan ollut olemassa" + IDS_4100 "Mukautettu..." + IDS_4101 "Mukautettu (suuri)..." + IDS_4102 "Lisää uusi kiintolevy" + IDS_4103 "Lisää olemassaoleva kiintolevy" + IDS_4104 "HDI levykuvan suurin mahdollinen koko on 4 Gt." + IDS_4105 "Levykuvien suurin mahdollinen koko on 127 Gt." + IDS_4106 "Kiintolevykuvat (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_4107 "Tiedostoa ei voi lukea" + IDS_4108 "Tiedostoon ei voi kirjoittaa" + IDS_4109 "HDI- ja HDX-levykuvien ainoa tuettu sektorikoko on 512" + IDS_4110 "USB-tukea ei vielä ole" + IDS_4111 "Levykuva on jo olemassa" + IDS_4112 "Anna kelvollinen tiedostonimi." + IDS_4113 "Levykuva luotu" + IDS_4114 "Varmista, että tiedosto on olemassa ja lukukelpoinen" + IDS_4115 "Varmista, että tiedoston tallennuskansioon on kirjoitusoikeus" + IDS_4116 "Liian suuri levykuva" + IDS_4117 "Muista osioida ja alustaa juuri luomasi asema." + IDS_4118 "Valittu tiedosto ylikirjoitetaan. Oletko varma, että haluat käyttää sitä?" + IDS_4119 "Levynkuvaa ei tueta" + IDS_4120 "Ylikirjoita" + IDS_4121 "Älä ylikirjoita" + IDS_4122 "Raaka levykuva (.img)" + IDS_4123 "HDI-levykuva (.hdi)" + IDS_4124 "HDX-levykuva (.hdx)" + IDS_4125 "Kiinteä VHD (.vhd)" + IDS_4126 "Dynaaminen VHD (.vhd)" + IDS_4127 "Differentiaalinen VHD (.vhd)" + IDS_4128 "Suuret lohkot (2 Mt)" + IDS_4129 "Pienet lohkot (512 kt)" + IDS_4130 "VHD-tiedostot (*.VHD)\0*.VHD\0Kaikki tiedostot (*.*)\0*.*\0" + IDS_4131 "Valitse ylätason VHD" + IDS_4132 "Tämä saattaa tarkoittaa, että ylätason levykuvaa on muokattu differentiaalisen levykuvan luonnin jälkeen.\n\nNäin voi käydä myös, jos levykuvatiedostoja on siirretty tai kopioitu. Lisäksi syynä voi olla levyn luoneessa sovelluksessa oleva ohjelmistovirhe.\n\nKorjataanko aikaleimat?" + IDS_4133 "Ylä- ja alatason levyjen aikaleimat eivät täsmää" + IDS_4134 "VHD aikaleimaa ei pystytty korjaamaan." + IDS_4135 "%01i:%02i" + + IDS_4352 "MFM/RLL" + IDS_4353 "XTA" + IDS_4354 "ESDI" + IDS_4355 "IDE" + IDS_4356 "ATAPI" + IDS_4357 "SCSI" + + IDS_4608 "MFM/RLL (%01i:%01i)" + IDS_4609 "XTA (%01i:%01i)" + IDS_4610 "ESDI (%01i:%01i)" + IDS_4611 "IDE (%01i:%01i)" + IDS_4612 "ATAPI (%01i:%01i)" + IDS_4613 "SCSI (%01i:%02i)" + + IDS_5120 "CD-ROM %i (%s): %s" + + IDS_5376 "Poistettu käytöstä" + IDS_5381 "ATAPI" + IDS_5382 "SCSI" + + IDS_5632 "Poistettu käytöstä" + IDS_5637 "ATAPI (%01i:%01i)" + IDS_5638 "SCSI (%01i:%02i)" + + IDS_5888 "160 kt" + IDS_5889 "180 kt" + IDS_5890 "320 kt" + IDS_5891 "360 kt" + IDS_5892 "640 kt" + IDS_5893 "720 kt" + IDS_5894 "1.2 Mt" + IDS_5895 "1.25 Mt" + IDS_5896 "1.44 Mt" + IDS_5897 "DMF (lohko 1024)" + IDS_5898 "DMF (lohko 2048)" + IDS_5899 "2.88 Mt" + IDS_5900 "ZIP 100" + IDS_5901 "ZIP 250" + IDS_5902 "3.5"" 128Mt M.O. (ISO 10090)" + IDS_5903 "3.5"" 230Mt M.O. (ISO 13963)" + IDS_5904 "3.5"" 540Mt M.O. (ISO 15498)" + IDS_5905 "3.5"" 640Mt M.O. (ISO 15498)" + IDS_5906 "3.5"" 1.3Gt M.O. (GigaMO)" + IDS_5907 "3.5"" 2.3Gt M.O. (GigaMO 2)" + IDS_5908 "5.25"" 600Mt M.O." + IDS_5909 "5.25"" 650Mt M.O." + IDS_5910 "5.25"" 1Gt M.O." + IDS_5911 "5.25"" 1.3Gt M.O." + + IDS_6144 "Täydellinen RPM" + IDS_6145 "1%% alle täydellisen RPM:n" + IDS_6146 "1.5%% alle täydellisen RPM:n" + IDS_6147 "2%% alle täydellisen RPM:n" + + IDS_7168 "(Järjestelmän oletus)" +END +#define IDS_LANG_ENUS IDS_7168 + +// English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// diff --git a/src/win/languages/fr-FR.rc b/src/win/languages/fr-FR.rc new file mode 100644 index 000000000..76060ce8b --- /dev/null +++ b/src/win/languages/fr-FR.rc @@ -0,0 +1,644 @@ +//////////////////////////////////////////////////////////////////////////// +// French (fr-FR) resources + +#ifdef _WIN32 +LANGUAGE LANG_FRENCH, SUBLANG_FRENCH +#pragma code_page(65001) +#endif //_WIN32 + +#define AUTHORS + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MainMenu MENU DISCARDABLE +BEGIN + POPUP "&Action" + BEGIN + MENUITEM "&Capturer le clavier", IDM_ACTION_KBD_REQ_CAPTURE + MENUITEM "CTRL &Droite devient ALT Gauche", IDM_ACTION_RCTRL_IS_LALT + MENUITEM SEPARATOR + MENUITEM "&Hard Reset...", IDM_ACTION_HRESET + MENUITEM "&Ctrl+Alt+Del\tCtrl+F12", IDM_ACTION_RESET_CAD + MENUITEM SEPARATOR + MENUITEM "Ctrl+Alt+&Esc", IDM_ACTION_CTRL_ALT_ESC + MENUITEM SEPARATOR + MENUITEM "&Pause", IDM_ACTION_PAUSE + MENUITEM SEPARATOR + MENUITEM "&Quitter...", IDM_ACTION_EXIT + END + POPUP "&Vue" + BEGIN + MENUITEM "&Masquer la barre de status", IDM_VID_HIDE_STATUS_BAR + MENUITEM SEPARATOR + MENUITEM "Fenètre &Retaillable", IDM_VID_RESIZE + MENUITEM "S&auvegarder taille && position", IDM_VID_REMEMBER + MENUITEM SEPARATOR + POPUP "Moteur de &rendu vidéo" + BEGIN + MENUITEM "&SDL (Logiciel)", IDM_VID_SDL_SW + MENUITEM "SDL (&Materiel)", IDM_VID_SDL_HW + MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL +#if defined(DEV_BRANCH) && defined(USE_OPENGL) + MENUITEM "Open&GL (3.3 Core)", IDM_VID_OPENGL_CORE +#endif +#ifdef USE_VNC + MENUITEM "&VNC", IDM_VID_VNC +#endif + END + MENUITEM SEPARATOR + MENUITEM "Specifier dimensions...", IDM_VID_SPECIFY_DIM + MENUITEM "F&orcer 4:3", IDM_VID_FORCE43 + POPUP "&Echelle facteurr" + BEGIN + MENUITEM "&0.5x", IDM_VID_SCALE_1X + MENUITEM "&1x", IDM_VID_SCALE_2X + MENUITEM "1.&5x", IDM_VID_SCALE_3X + MENUITEM "&2x", IDM_VID_SCALE_4X + END + POPUP "Methode Filtre" + BEGIN + MENUITEM "&Plus proche", IDM_VID_FILTER_NEAREST + MENUITEM "&Lineaire", IDM_VID_FILTER_LINEAR + END + MENUITEM "Mise à l'échelle Hi&DPI", IDM_VID_HIDPI + MENUITEM SEPARATOR + MENUITEM "&Plein Ecran\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN + POPUP "Mode &Elargi plein écran" + BEGIN + MENUITEM "&Plein écran étiré", IDM_VID_FS_FULL + MENUITEM "&4:3", IDM_VID_FS_43 + MENUITEM "pixels &Carrés(Keep ratio)", IDM_VID_FS_KEEPRATIO + MENUITEM "Echelle &Entière", IDM_VID_FS_INT + END + POPUP "Réglages E&GA/(S)VGA" + BEGIN + MENUITEM "Moniteur VGA &Inversé", IDM_VID_INVERT + POPUP "&Type Ecran VGA" + BEGIN + MENUITEM "RGB &Couleur", IDM_VID_GRAY_RGB + MENUITEM "&RGB Ton de Gris", IDM_VID_GRAY_MONO + MENUITEM "Moniteur &Ambre", IDM_VID_GRAY_AMBER + MENUITEM "Moniteur &Vert", IDM_VID_GRAY_GREEN + MENUITEM "Moniteur &Blanc", IDM_VID_GRAY_WHITE + END + POPUP "Grayscale &conversion type" + BEGIN + MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601 + MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709 + MENUITEM "&Moyenne", IDM_VID_GRAYCT_AVE + END + END + MENUITEM SEPARATOR + MENUITEM "CGA/PCjr/Tandy/E&GA/(S)VGA overscan", IDM_VID_OVERSCAN + MENUITEM "Modifier contraste affichage &monochrome", IDM_VID_CGACON + END + MENUITEM "&Media", IDM_MEDIA + POPUP "Ou&tils" + BEGIN + MENUITEM "&Réglages...", IDM_CONFIG + MENUITEM "Mettre à jour la barre de stat&us", IDM_UPDATE_ICONS + MENUITEM SEPARATOR + MENUITEM "Changer la &langue...", IDM_VID_PROG_SETT +# ifdef USE_DISCORD + MENUITEM SEPARATOR + MENUITEM "Activer intégration &Discord", IDM_DISCORD +# endif + MENUITEM SEPARATOR + MENUITEM "Copie &Ecran\tCtrl+F11", IDM_ACTION_SCREENSHOT + MENUITEM SEPARATOR + MENUITEM "&Gain Son...", IDM_SND_GAIN +#ifdef MTR_ENABLED + MENUITEM SEPARATOR + MENUITEM "Démarrer traces\tCtrl+T", IDM_ACTION_BEGIN_TRACE + MENUITEM "Finir traces\tCtrl+T", IDM_ACTION_END_TRACE +#endif + END +#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS) + POPUP "&Journalisation" + BEGIN +# ifdef ENABLE_BUSLOGIC_LOG + MENUITEM "Activer journaux de BusLogic\tCtrl+F4", IDM_LOG_BUSLOGIC +# endif +# ifdef ENABLE_CDROM_LOG + MENUITEM "Activer journaux du CD-ROM\tCtrl+F5", IDM_LOG_CDROM +# endif +# ifdef ENABLE_D86F_LOG + MENUITEM "Activer journaux des disquettes (86F)s\tCtrl+F6", IDM_LOG_D86F +# endif +# ifdef ENABLE_FDC_LOG + MENUITEM "Activer journaux du contrôleur de disquettes\tCtrl+F7", IDM_LOG_FDC +# endif +# ifdef ENABLE_IDE_LOG + MENUITEM "Activer journaux de IDE\tCtrl+F8", IDM_LOG_IDE +# endif +# ifdef ENABLE_SERIAL_LOG + MENUITEM "Activer journaux de porte sériel\tCtrl+F3", IDM_LOG_SERIAL +# endif +# ifdef ENABLE_NIC_LOG + MENUITEM "Activer journaux de réseau\tCtrl+F9", IDM_LOG_NIC +# endif +# ifdef ENABLE_LOG_COMMANDS +# ifdef ENABLE_LOG_TOGGLES + MENUITEM SEPARATOR +# endif +# ifdef ENABLE_LOG_BREAKPOINT + MENUITEM "&Point d'arrêt du journal\tCtrl+F10", IDM_LOG_BREAKPOINT +# endif +# ifdef ENABLE_VRAM_DUMP + MENUITEM "Vidage de la mémoire &vidéo\tCtrl+F1", IDM_DUMP_VRAM +# endif +# endif + END +#endif + POPUP "&Aide" + BEGIN + MENUITEM "&Documentation...", IDM_DOCS + MENUITEM "&A Propos de 86Box...", IDM_ABOUT + END +END + +StatusBarMenu MENU DISCARDABLE +BEGIN + MENUITEM SEPARATOR +END + +CassetteSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nouvelle image...", IDM_CASSETTE_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "Image &Existante...", IDM_CASSETTE_IMAGE_EXISTING + MENUITEM "Existing image (&Write-protected)...", IDM_CASSETTE_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "En®istrer", IDM_CASSETTE_RECORD + MENUITEM "&Jouer", IDM_CASSETTE_PLAY + MENUITEM "&Revenir au debut", IDM_CASSETTE_REWIND + MENUITEM "Aller à la &Fin", IDM_CASSETTE_FAST_FORWARD + MENUITEM SEPARATOR + MENUITEM "E&jecter", IDM_CASSETTE_EJECT + END +END + +CartridgeSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Image...", IDM_CARTRIDGE_IMAGE + MENUITEM SEPARATOR + MENUITEM "E&jecter", IDM_CARTRIDGE_EJECT + END +END + +FloppySubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nouvelle image...", IDM_FLOPPY_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "Image &Existante...", IDM_FLOPPY_IMAGE_EXISTING + MENUITEM "Existing image (&Write-protected)...", IDM_FLOPPY_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "E&xport vers 86F...", IDM_FLOPPY_EXPORT_TO_86F + MENUITEM SEPARATOR + MENUITEM "E&jecter", IDM_FLOPPY_EJECT + END +END + +CdromSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Mute", IDM_CDROM_MUTE + MENUITEM SEPARATOR + MENUITEM "E&jecter", IDM_CDROM_EMPTY + MENUITEM "&Recharger image précedente", IDM_CDROM_RELOAD + MENUITEM SEPARATOR + MENUITEM "&Image", IDM_CDROM_IMAGE + END +END + +ZIPSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nouvelle image...", IDM_ZIP_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "Image &Existante...", IDM_ZIP_IMAGE_EXISTING + MENUITEM "Existing image (&Write-protected)...", IDM_ZIP_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "E&jecter", IDM_ZIP_EJECT + MENUITEM "&Recharger image précédente", IDM_ZIP_RELOAD + END +END + +MOSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nouvelle image...", IDM_MO_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "Image &Existante...", IDM_MO_IMAGE_EXISTING + MENUITEM "Image Existante (&Write-protected)...", IDM_MO_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "E&jecter", IDM_MO_EJECT + MENUITEM "&Recharger image précédente", IDM_MO_RELOAD + END +END + +#if defined(DEV_BRANCH) && defined(USE_OPENGL) +VidGLSubMenu MENU DISCARDABLE +BEGIN + POPUP "&Taux de rafraîchissement cible" + BEGIN + MENUITEM "&Synchronisation avec la vidéo", IDM_VID_GL_FPS_BLITTER + MENUITEM "&25 images par seconde", IDM_VID_GL_FPS_25 + MENUITEM "&30 images par seconde", IDM_VID_GL_FPS_30 + MENUITEM "&50 images par seconde", IDM_VID_GL_FPS_50 + MENUITEM "&60 images par seconde", IDM_VID_GL_FPS_60 + MENUITEM "&75 images par seconde", IDM_VID_GL_FPS_75 + END + MENUITEM "Synchronisation &verticale", IDM_VID_GL_VSYNC + MENUITEM "Sé&lectionnez le shader...", IDM_VID_GL_SHADER + MENUITEM "S&upprimer le shader", IDM_VID_GL_NOSHADER +END +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +#define STR_PROG_SETT "Changer langue" +#define STR_SND_GAIN "Gain son" +#define STR_NEW_FLOPPY "Nouvelle image" +#define STR_CONFIG "Réglages 86Box" +#define STR_SPECIFY_DIM "Spécifier le détournement de la fenêtre principale" + +#define STR_OK "OK" +#define STR_CANCEL "Annuler" +#define STR_GLOBAL "Salve ces paramètres comme valeurs par défaut &globales" +#define STR_DEFAULT "&Défaut" +#define STR_LANGUAGE "Langue:" +#define STR_ICONSET "Ensemble d'icônes:" + +#define STR_GAIN "Gain" + +#define STR_FILE_NAME "Nom fichier:" +#define STR_DISK_SIZE "Taille disque:" +#define STR_RPM_MODE "Mode RPM:" +#define STR_PROGRESS "Progrès:" + +#define STR_WIDTH "Largeur:" +#define STR_HEIGHT "Hauteur:" +#define STR_LOCK_TO_SIZE "Verrouiller à cette taille" + +#define STR_MACHINE_TYPE "Type de la machine:" +#define STR_MACHINE "Machine:" +#define STR_CONFIGURE "Configurer" +#define STR_CPU_TYPE "Typ du processeur:" +#define STR_SPEED "Vitesse:" +#define STR_FPU "FPU:" +#define STR_WAIT_STATES "États d'attente:" +#define STR_MB "Mo" +#define STR_MEMORY "Mémoire:" +#define STR_TIME_SYNC "Synchronisation du temps" +#define STR_DISABLED "Désactivé" +#define STR_ENABLED_LOCAL "Activé (heure locale)" +#define STR_ENABLED_UTC "Activé (UTC)" +#define STR_DYNAREC "Recompilateur dynamique" + +#define STR_VIDEO "Vidéo:" +#define STR_VOODOO "Graphique Voodoo" + +#define STR_MOUSE "Souris:" +#define STR_JOYSTICK "Manette de commande:" +#define STR_JOY1 "Manette 1..." +#define STR_JOY2 "Manette 2..." +#define STR_JOY3 "Manette 3..." +#define STR_JOY4 "Manette 4..." + +#define STR_SOUND "Carte son:" +#define STR_MIDI "Sortie MIDI:" +#define STR_MIDI_IN "Entrée MIDI:" +#define STR_MPU401 "MPU-401 autonome" +#define STR_SSI "Innovation SSI-2001" +#define STR_CMS "CMS / Game Blaster" +#define STR_GUS "Gravis Ultrasound" +#define STR_FLOAT "Utiliser le son FLOAT32" + +#define STR_NET_TYPE "Type de réseau:" +#define STR_PCAP "Dispositif PCap:" +#define STR_NET "Adaptateur de réseau:" + +#define STR_LPT1 "Dispositif LPT1:" +#define STR_LPT2 "Dispositif LPT2:" +#define STR_LPT3 "Dispositif LPT3:" +#define STR_SERIAL1 "Port sériel 1" +#define STR_SERIAL2 "Port sériel 2" +#define STR_SERIAL3 "Port sériel 3" +#define STR_SERIAL4 "Port sériel 4" +#define STR_PARALLEL1 "Port parallèle 1" +#define STR_PARALLEL2 "Port parallèle 2" +#define STR_PARALLEL3 "Port parallèle 3" + +#define STR_HDC "Contrôleur HD:" +#define STR_FDC "Contrôleur FD:" +#define STR_IDE_TER "Contrôleur IDE tertiaire" +#define STR_IDE_QUA "Contrôleur IDE quaternair" +#define STR_SCSI "SCSI" +#define STR_SCSI_1 "Contrôleur 1:" +#define STR_SCSI_2 "Contrôleur 2:" +#define STR_SCSI_3 "Contrôleur 3:" +#define STR_SCSI_4 "Contrôleur 4:" +#define STR_CASSETTE "Cassette" + +#define STR_HDD "Disques durs:" +#define STR_NEW "&Nouveau..." +#define STR_EXISTING "&Existant..." +#define STR_REMOVE "&Supprimer" +#define STR_BUS "Bus:" +#define STR_CHANNEL "Canal:" +#define STR_ID "ID:" + +#define STR_SPECIFY "&Spécifier..." +#define STR_SECTORS "Secteurs:" +#define STR_HEADS "Têtes:" +#define STR_CYLS "Cylindres:" +#define STR_SIZE_MB "Taille (Mo):" +#define STR_TYPE "Type:" +#define STR_IMG_FORMAT "Format Image:" +#define STR_BLOCK_SIZE "Taille du bloc:" + +#define STR_FLOPPY_DRIVES "Lecteurs de disquettes:" +#define STR_TURBO "Temps de turbo" +#define STR_CHECKBPB "Vérifier BPB" +#define STR_CDROM_DRIVES "Lecterus CD-ROM:" + +#define STR_MO_DRIVES "Lecteurs magnéto-optiques:" +#define STR_ZIP_DRIVES "Lecterus ZIP:" +#define STR_250 "ZIP 250" + +#define STR_ISARTC "Horloge temps réel ISA:" +#define STR_ISAMEM "Expansion de la mémoire ISA" +#define STR_ISAMEM_1 "Carte 1:" +#define STR_ISAMEM_2 "Carte 2:" +#define STR_ISAMEM_3 "Carte 3:" +#define STR_ISAMEM_4 "Carte 4:" +#define STR_BUGGER "Dispositif ISABugger" +#define STR_POSTCARD "Carte POST" + +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + +#include "dialogs.rc" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + 2048 "86Box" + IDS_2049 "Erreur" + IDS_2050 "Erreur fatal" + IDS_2051 "" + IDS_2052 "Appuyez sur CTRL+ALT+PAGE ↓ pour revenir au mode fenêtré." + IDS_2053 "Vitesse" + IDS_2054 "ZIP %03i %i (%s): %ls" + IDS_2055 "Images ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" + IDS_2056 "86Box n'a pas pu trouver d'images ROM utilisables.\n\nS'il vous plait, téléchargez un ensemble ROM et extrayez-le dans le répertoire ""roms""." + IDS_2057 "(vide)" + IDS_2058 "Images ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Tous les fichiers (*.*)\0*.*\0" + IDS_2059 "Turbo" + IDS_2060 "Activé" + IDS_2061 "Désactivé" + IDS_2062 "Tous les images (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Images basiques du secteur (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Images de la surface (*.86F)\0*.86F\0" + IDS_2063 "La machine ""%hs"" n'est pas disponible en raison de l'absence de ROMs en le répertoire roms/machines. Basculer vers une machine disponible." +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2064 "La carte vidéo ""%hs"" n'est pas disponible en raison de l'absence de ROMs en le répertoire roms/video. Basculer vers une carte vidéo disponible." + IDS_2065 "Machine" + IDS_2066 "Affichage" + IDS_2067 "Dispositifs d'entrée" + IDS_2068 "Son" + IDS_2069 "Réseau" + IDS_2070 "Ports (COM et LPT)" + IDS_2071 "Contrôleurs de stockage" + IDS_2072 "Disques durs" + IDS_2073 "Lecteurs de disquette et CD-ROM" + IDS_2074 "Autres dispositifs amovibles" + IDS_2075 "Autres périfériques" + IDS_2076 "Images de surface (*.86F)\0*.86F\0" + IDS_2077 "Cliquer pour capturer la souris" + IDS_2078 "Appuyer sur F8+F12 pour libérer la souris" + IDS_2079 "Appuyer sur F8+F12 ou le bouton central pour libérer la souris" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2080 "Impossible d'initialiser FluidSynth" + IDS_2081 "Bus" + IDS_2082 "File" + IDS_2083 "C" + IDS_2084 "T" + IDS_2085 "S" + IDS_2086 "Mo" + IDS_2087 "Vérifier BPB" + IDS_2088 "Ko" + IDS_2089 "Impossible d'initialiser le moteur de rendu vidéo." + IDS_2090 "Défaut" + IDS_2091 "%i état(s) d'attente" + IDS_2092 "Type" + IDS_2093 "Impossible d'initialiser PCap" + IDS_2094 "Aucun dispositif PCap trouvé" + IDS_2095 "Dispositif PCap non valide" + IDS_2096 "Manette(s) de command standard avec 2 boutons" + IDS_2097 "Manette de command standard avec 4 boutons" + IDS_2098 "Manette de command standard avec 6 boutons" + IDS_2099 "Manette de command standard avec 6 boutons" + IDS_2100 "CH Flightstick Pro" + IDS_2101 "Microsoft SideWinder Pad" + IDS_2102 "Système de contrôle de vol Thrustmaster" + IDS_2103 "Aucun" + IDS_2104 "Impossible de charger les accélérateurs de clavier." + IDS_2105 "Impossible de charger l'entrée raw." + IDS_2106 "%u" + IDS_2107 "%u Mo (CTS: %i, %i, %i)" + IDS_2108 "Disquette %i (%s): %ls" + IDS_2109 "Toutes les images (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Images du secteur avancés (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Images du secteur basiques (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Images du flux (*.FDI)\0*.FDI\0Images de surface (*.86F;*.MFM)\0*.86F;*.MFM\0Tous les fichiers (*.*)\0*.*\0" + IDS_2110 "Impossible d'initialiser FreeType" + IDS_2111 "Impossible d'initialiser SDL, SDL2.dll est nécessaire" + IDS_2112 "Etes-vous sûr de vouloir réinitialiser la machine émulée ?" + IDS_2113 "Etes-vous sûr de vouloir sortir du86Box?" + IDS_2114 "Impossible d'initialiser Ghostscript" + IDS_2115 "Magnéto-optique %i (%ls): %ls" + IDS_2116 "Images magnéto-optiques (*.IM?;*.MDI)\0*.IM?;*.MDI\0Tous les fichiers (*.*)\0*.*\0" + IDS_2117 "Bienvenues dans 86Box !" + IDS_2118 "Côntrolleur interne" + IDS_2119 "Sortir" + IDS_2120 "Pas de ROMs trouvées" + IDS_2121 "Voulez-vous sauver les paramètres ?" + IDS_2122 "Ce entraînera la réinitialisation complète de la machine émulée." + IDS_2123 "Sauver" + IDS_2124 "À propos de 86Box" + IDS_2125 "86Box v" EMU_VERSION + + IDS_2126 "Un émulateur de vieux ordinateurs\n\nAuteurs: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nLibéré sous la licence GNU General Public License version 2 ou ultérieure. Pour plus d'informations, voir le fichier LICENSE." + IDS_2127 "OK" + IDS_2128 "Matériel non disponible" +#ifdef _WIN32 +#define LIB_NAME_PCAP "WinPcap" +#else +#define LIB_NAME_PCAP "libpcap" +#endif + IDS_2129 "Assurez-vous que " LIB_NAME_PCAP " est installé e que vou utilizes une connexion de réseau compatible avec " LIB_NAME_PCAP "." + IDS_2130 "Configuration non valide" +#ifdef _WIN32 +#define LIB_NAME_FREETYPE "freetype.dll" +#else +#define LIB_NAME_FREETYPE "libfreetype" +#endif + IDS_2131 LIB_NAME_FREETYPE " est nécessaire pour l'émulation de l'imprimante ESC/P." +#ifdef _WIN32 +#define LIB_NAME_GS "gsdll32.dll" +#else +#define LIB_NAME_GS "libgs" +#endif + IDS_2132 LIB_NAME_GS " est nécessair pour la conversion automatique des fichiers PostScript dans PDF.\n\nTous les documents envoyés à l'imprimante générique PostScript seront sauvés comme des fichiers PostScript (.ps)." +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#endif + IDS_2133 LIB_NAME_FLUIDSYNTH " est nécessaire pour la sortie MIDI FluidSynth." + IDS_2134 "Entrer en mode plein écran" + IDS_2135 "Ne pas montrer ce message à nouveau" + IDS_2136 "Ne pas sortir" + IDS_2137 "Réinitialiser" + IDS_2138 "Ne pas réinitialiser" + IDS_2139 "Images magnéto-optiques (*.IM?;*.MDI)\0*.IM?;*.MDI\0Tous les fichiers (*.*)\0*.*\0" + IDS_2140 "Images CD-ROM (*.ISO;*.CUE)\0*.ISO;*.CUE\0Tous les fichiers (*.*)\0*.*\0" + IDS_2141 "Configuration du dispositif %hs" + IDS_2142 "Moniteur en mode veille" + IDS_2143 "Shaders OpenGL (*.GLSL)\0*.GLSL\0Tous les fichiers (*.*)\0*.*\0" + IDS_2144 "Options OpenGL" + IDS_2145 "Vous chargez une configuration non prise en charge" + IDS_2146 "La filtrage du type du processeur sur la base de la machine sélectionné est désactivé pur cette machine émulée.\n\nCela permet de sélectionner une processeur que est sinon incompatible avec la machine sélectionné. Cependant, il pourrait y avoir des incompatibilités avec le BIOS de la machine ou autres logiciels.\n\nL'activatione de cette configuration non est officiellement prise en charge et tout rapport de bogue peut être fermé comme étant invalide." + IDS_2147 "Continuer" + IDS_2148 "Cassette: %s" + IDS_2149 "Images cassette (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Tous les fichiers (*.*)\0*.*\0" + IDS_2150 "Cartouche %i: %ls" + IDS_2151 "Images cartouche (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tous les fichiers (*.*)\0*.*\0" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_4096 "Disque dur (%s)" + IDS_4097 "%01i:%01i" + IDS_4098 "%01i" + IDS_4099 "Les lecteurs de CD-ROM MFM/RLL ou ESDI n'ont jamais existé" + IDS_4100 "Personnalisé..." + IDS_4101 "Personnalisé (grand)..." + IDS_4102 "Ajouter un nouveau disque dur" + IDS_4103 "Ajouter un disque dur existant" + IDS_4104 "Les images de disque HDI ne peuvent pas être plus grandes de 4 Go." + IDS_4105 "Les images de disque ne peuvent pas être plus grandes de 127 Go." + IDS_4106 "Images de dique dur (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Tous les fichiers (*.*)\0*.*\0" + IDS_4107 "Impossible de lire le fichier" + IDS_4108 "Impossible d'écrire le fichier" + IDS_4109 "Les images HDI ou HDX avec une taille de secteur que non est 512 non sont pas prises en charge." + IDS_4110 "USB n'est pas encore pris en charge" + IDS_4111 "Le fichier de la image du sique déjà existe" + IDS_4112 "Veuillez spécifier un nom de fichier valide." + IDS_4113 "Image de disque créée" + IDS_4114 "Assurez-vous que le fichier existe et est lisible." + IDS_4115 "Assurez-vous que est en train d'être sauvé dans une répertoire accessible en écriture." + IDS_4116 "Image de disque trop grande" + IDS_4117 "N'oubliez pas de partitionner et de formater le nouveau disque créé." + IDS_4118 "Le fichier sélectionné sera écrasé. Etes-vous sûr de vouloir l'utiliser?" + IDS_4119 "Image de sique non prise en charge" + IDS_4120 "Écraser" + IDS_4121 "Ne pas écraser" + IDS_4122 "Image brute (.img)" + IDS_4123 "Image HDI (.hdi)" + IDS_4124 "Image HDX (.hdx)" + IDS_4125 "VHD à taille fixe (.vhd)" + IDS_4126 "VHD à taille dynamique (.vhd)" + IDS_4127 "VHD à différenciation (.vhd)" + IDS_4128 "Blocs grands (2 MB)" + IDS_4129 "Blocs petits (512 KB)" + IDS_4130 "Fichiers VHD (*.VHD)\0*.VHD\0Tous les fichiers (*.*)\0*.*\0" + IDS_4131 "Sélectionnez le VHD parent" + IDS_4132 "Est possible que la image parente a été modifié après la création de la image à différenciation.\n\nEst même possible que les fichiers de la image ont été déplacés ou copiés ou il était une bogue dans le programme que a créé ce disque.\n\nVoulez-vous Do you want to réparer l'horodatage?" + IDS_4133 "Les horodatages des disques parent et enfant ne correspondent pas" + IDS_4134 "Impossible de réparer l'horodatage du VHD." + IDS_4135 "%01i:%02i" + + IDS_4352 "MFM/RLL" + IDS_4353 "XTA" + IDS_4354 "ESDI" + IDS_4355 "IDE" + IDS_4356 "ATAPI" + IDS_4357 "SCSI" + + IDS_4608 "MFM/RLL (%01i:%01i)" + IDS_4609 "XTA (%01i:%01i)" + IDS_4610 "ESDI (%01i:%01i)" + IDS_4611 "IDE (%01i:%01i)" + IDS_4612 "ATAPI (%01i:%01i)" + IDS_4613 "SCSI (%01i:%02i)" + + IDS_5120 "CD-ROM %i (%s): %s" + + IDS_5376 "Désactivé" + IDS_5381 "ATAPI" + IDS_5382 "SCSI" + + IDS_5632 "Désactivé" + IDS_5637 "ATAPI (%01i:%01i)" + IDS_5638 "SCSI (%01i:%02i)" + + IDS_5888 "160 kB" + IDS_5889 "180 kB" + IDS_5890 "320 kB" + IDS_5891 "360 kB" + IDS_5892 "640 kB" + IDS_5893 "720 kB" + IDS_5894 "1.2 MB" + IDS_5895 "1.25 MB" + IDS_5896 "1.44 MB" + IDS_5897 "DMF (cluster 1024)" + IDS_5898 "DMF (cluster 2048)" + IDS_5899 "2.88 MB" + IDS_5900 "ZIP 100" + IDS_5901 "ZIP 250" + IDS_5902 "3.5"" 128Mb M.O. (ISO 10090)" + IDS_5903 "3.5"" 230Mb M.O. (ISO 13963)" + IDS_5904 "3.5"" 540Mb M.O. (ISO 15498)" + IDS_5905 "3.5"" 640Mb M.O. (ISO 15498)" + IDS_5906 "3.5"" 1.3Gb M.O. (GigaMO)" + IDS_5907 "3.5"" 2.3Gb M.O. (GigaMO 2)" + IDS_5908 "5.25"" 600Mb M.O." + IDS_5909 "5.25"" 650Mb M.O." + IDS_5910 "5.25"" 1Gb M.O." + IDS_5911 "5.25"" 1.3Gb M.O." + + IDS_6144 "RPM précis" + IDS_6145 "Précision RPM de moins 1%" + IDS_6146 "Précision RPM de moins 1.5%" + IDS_6147 "Précision RPM de moins 2%" + + IDS_7168 "(Défaut du système)" +END +#define IDS_LANG_ENUS IDS_7168 + +// French (F.R.) resources +///////////////////////////////////////////////////////////////////////////// diff --git a/src/win/languages/hr-HR.rc b/src/win/languages/hr-HR.rc new file mode 100644 index 000000000..dc98e45a2 --- /dev/null +++ b/src/win/languages/hr-HR.rc @@ -0,0 +1,644 @@ +//////////////////////////////////////////////////////////////////////////// +// Croatian (hr-HR) resources + +#ifdef _WIN32 +LANGUAGE LANG_CROATIAN, SUBLANG_DEFAULT +#pragma code_page(65001) +#endif //_WIN32 + +#define AUTHORS + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MainMenu MENU DISCARDABLE +BEGIN + POPUP "&Akcija" + BEGIN + MENUITEM "&Tipkovnica zahtijeva snimanje miša", IDM_ACTION_KBD_REQ_CAPTURE + MENUITEM "&Desni CTRL je lijevi ALT", IDM_ACTION_RCTRL_IS_LALT + MENUITEM SEPARATOR + MENUITEM "&Hard Reset...", IDM_ACTION_HRESET + MENUITEM "&Ctrl+Alt+Del\tCtrl+F12", IDM_ACTION_RESET_CAD + MENUITEM SEPARATOR + MENUITEM "Ctrl+Alt+&Esc", IDM_ACTION_CTRL_ALT_ESC + MENUITEM SEPARATOR + MENUITEM "&Pauza", IDM_ACTION_PAUSE + MENUITEM SEPARATOR + MENUITEM "&Izlaz...", IDM_ACTION_EXIT + END + POPUP "&Pogled" + BEGIN + MENUITEM "&Sakrij statusnu traku", IDM_VID_HIDE_STATUS_BAR + MENUITEM SEPARATOR + MENUITEM "&Prozor s promjenjivim veličinama", IDM_VID_RESIZE + MENUITEM "&Zapamtite veličinu && poziciju", IDM_VID_REMEMBER + MENUITEM SEPARATOR + POPUP "&Renderer" + BEGIN + MENUITEM "&SDL (Softver)", IDM_VID_SDL_SW + MENUITEM "SDL (&Hardver)", IDM_VID_SDL_HW + MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL +#if defined(DEV_BRANCH) && defined(USE_OPENGL) + MENUITEM "Open&GL (3.3 jezgra)", IDM_VID_OPENGL_CORE +#endif +#ifdef USE_VNC + MENUITEM "&VNC", IDM_VID_VNC +#endif + END + MENUITEM SEPARATOR + MENUITEM "Odrediti dimenzije...", IDM_VID_SPECIFY_DIM + MENUITEM "&4:3 omjer prikaza", IDM_VID_FORCE43 + POPUP "&Faktor skaliranje prozora" + BEGIN + MENUITEM "&0,5x", IDM_VID_SCALE_1X + MENUITEM "&1x", IDM_VID_SCALE_2X + MENUITEM "1,&5x", IDM_VID_SCALE_3X + MENUITEM "&2x", IDM_VID_SCALE_4X + END + POPUP "Metoda filtriranja" + BEGIN + MENUITEM "&Nearest", IDM_VID_FILTER_NEAREST + MENUITEM "&Linear", IDM_VID_FILTER_LINEAR + END + MENUITEM "&HiDPI skaliranje", IDM_VID_HIDPI + MENUITEM SEPARATOR + MENUITEM "&Cijeli zaslon\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN + POPUP "&Način rastezanja preko cijelog zaslona" + BEGIN + MENUITEM "&Razvlačenje preko cijelog zaslona", IDM_VID_FS_FULL + MENUITEM "&4:3", IDM_VID_FS_43 + MENUITEM "&Kvadratni pikseli (zadrži omjer)", IDM_VID_FS_KEEPRATIO + MENUITEM "&Integer skala", IDM_VID_FS_INT + END + POPUP "E&GA/(S)VGA postavke" + BEGIN + MENUITEM "&Invertirani VGA monitor", IDM_VID_INVERT + POPUP "&Tip VGA monitora" + BEGIN + MENUITEM "RGB &Boja", IDM_VID_GRAY_RGB + MENUITEM "&RGB s sivih tonova", IDM_VID_GRAY_MONO + MENUITEM "&Jantarni monitor", IDM_VID_GRAY_AMBER + MENUITEM "&Zeleni monitor", IDM_VID_GRAY_GREEN + MENUITEM "&Bijeli monitor", IDM_VID_GRAY_WHITE + END + POPUP "&Vrsta konverzije sivih tonova" + BEGIN + MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601 + MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709 + MENUITEM "&Prosječno", IDM_VID_GRAYCT_AVE + END + END + MENUITEM SEPARATOR + MENUITEM "CGA/PCjr/Tandy/E&GA/(S)VGA overscan", IDM_VID_OVERSCAN + MENUITEM "Promjena kontrasta za &monokromatski ekran", IDM_VID_CGACON + END + MENUITEM "&Mediji", IDM_MEDIA + POPUP "&Alati" + BEGIN + MENUITEM "&Postavke...", IDM_CONFIG + MENUITEM "&Ažuriranje ikone statusne trake", IDM_UPDATE_ICONS + MENUITEM SEPARATOR + MENUITEM "Change program &settings...", IDM_VID_PROG_SETT +# ifdef USE_DISCORD + MENUITEM SEPARATOR + MENUITEM "Omogući integraciju &Discord-a", IDM_DISCORD +# endif + MENUITEM SEPARATOR + MENUITEM "Napravite &snimku zaslona\tCtrl+F11", IDM_ACTION_SCREENSHOT + MENUITEM SEPARATOR + MENUITEM "&Pojačanje zvuka...", IDM_SND_GAIN +#ifdef MTR_ENABLED + MENUITEM SEPARATOR + MENUITEM "Započni tracing\tCtrl+T", IDM_ACTION_BEGIN_TRACE + MENUITEM "Prestani tracing\tCtrl+T", IDM_ACTION_END_TRACE +#endif + END +#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS) + POPUP "&Logging" + BEGIN +# ifdef ENABLE_BUSLOGIC_LOG + MENUITEM "Omogući BusLogic logging\tCtrl+F4", IDM_LOG_BUSLOGIC +# endif +# ifdef ENABLE_CDROM_LOG + MENUITEM "Omogući logging CD-ROM-a\tCtrl+F5", IDM_LOG_CDROM +# endif +# ifdef ENABLE_D86F_LOG + MENUITEM "Omogući logging disketa (86F)\tCtrl+F6", IDM_LOG_D86F +# endif +# ifdef ENABLE_FDC_LOG + MENUITEM "Omogući logging floppy kontrolera\tCtrl+F7", IDM_LOG_FDC +# endif +# ifdef ENABLE_IDE_LOG + MENUITEM "Omogući IDE logging\tCtrl+F8", IDM_LOG_IDE +# endif +# ifdef ENABLE_SERIAL_LOG + MENUITEM "Omogući logging serijskog porta\tCtrl+F3", IDM_LOG_SERIAL +# endif +# ifdef ENABLE_NIC_LOG + MENUITEM "Omogući mrežni logging\tCtrl+F9", IDM_LOG_NIC +# endif +# ifdef ENABLE_LOG_COMMANDS +# ifdef ENABLE_LOG_TOGGLES + MENUITEM SEPARATOR +# endif +# ifdef ENABLE_LOG_BREAKPOINT + MENUITEM "&Breakpoint za logging\tCtrl+F10", IDM_LOG_BREAKPOINT +# endif +# ifdef ENABLE_VRAM_DUMP + MENUITEM "Dump od &video RAM-a\tCtrl+F1", IDM_DUMP_VRAM +# endif +# endif + END +#endif + POPUP "&Pomoć" + BEGIN + MENUITEM "&Dokumentacija...", IDM_DOCS + MENUITEM "&O 86Box...", IDM_ABOUT + END +END + +StatusBarMenu MENU DISCARDABLE +BEGIN + MENUITEM SEPARATOR +END + +CassetteSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nova image daoteka...", IDM_CASSETTE_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Postojeća image daoteka...", IDM_CASSETTE_IMAGE_EXISTING + MENUITEM "Postojeća image daoteka (&zaštićena od pisanja)...", IDM_CASSETTE_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Snimi", IDM_CASSETTE_RECORD + MENUITEM "&Pusti", IDM_CASSETTE_PLAY + MENUITEM "&Premotanje na početak", IDM_CASSETTE_REWIND + MENUITEM "&Brzi naprijed do kraja", IDM_CASSETTE_FAST_FORWARD + MENUITEM SEPARATOR + MENUITEM "&Izbaci", IDM_CASSETTE_EJECT + END +END + +CartridgeSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Image daoteka...", IDM_CARTRIDGE_IMAGE + MENUITEM SEPARATOR + MENUITEM "&Izbaci", IDM_CARTRIDGE_EJECT + END +END + +FloppySubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nova image daoteka...", IDM_FLOPPY_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Postojeća image daoteka...", IDM_FLOPPY_IMAGE_EXISTING + MENUITEM "Postojeća image daoteka (&zaštićena od pisanja)...", IDM_FLOPPY_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Exportiraj u 86F format...", IDM_FLOPPY_EXPORT_TO_86F + MENUITEM SEPARATOR + MENUITEM "&Izbaci", IDM_FLOPPY_EJECT + END +END + +CdromSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Isključi zvuk", IDM_CDROM_MUTE + MENUITEM SEPARATOR + MENUITEM "&Prazno", IDM_CDROM_EMPTY + MENUITEM "&Ponovo učitaj prethodnu image daoteku", IDM_CDROM_RELOAD + MENUITEM SEPARATOR + MENUITEM "&Image daoteka", IDM_CDROM_IMAGE + END +END + +ZIPSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nova image daoteka...", IDM_ZIP_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Postojeća image daoteka...", IDM_ZIP_IMAGE_EXISTING + MENUITEM "Postojeća image daoteka (&zaštićena od pisanja)...", IDM_ZIP_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Izbaci", IDM_ZIP_EJECT + MENUITEM "&Ponovo učitaj prethodnu image daoteku", IDM_ZIP_RELOAD + END +END + +MOSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nova image daoteka...", IDM_MO_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Postojeća image daoteka...", IDM_MO_IMAGE_EXISTING + MENUITEM "Postojeća image daoteka (&zaštićena od pisanja)...", IDM_MO_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Izbaci", IDM_MO_EJECT + MENUITEM "&Ponovo učitaj prethodnu image daoteku", IDM_MO_RELOAD + END +END + +#if defined(DEV_BRANCH) && defined(USE_OPENGL) +VidGLSubMenu MENU DISCARDABLE +BEGIN + POPUP "Target &framerate" + BEGIN + MENUITEM "&Sinkronizacija s videom", IDM_VID_GL_FPS_BLITTER + MENUITEM "&25 fps", IDM_VID_GL_FPS_25 + MENUITEM "&30 fps", IDM_VID_GL_FPS_30 + MENUITEM "&50 fps", IDM_VID_GL_FPS_50 + MENUITEM "&60 fps", IDM_VID_GL_FPS_60 + MENUITEM "&75 fps", IDM_VID_GL_FPS_75 + END + MENUITEM "&VSync", IDM_VID_GL_VSYNC + MENUITEM "&Odaberi shader...", IDM_VID_GL_SHADER + MENUITEM "&Ukloni shader", IDM_VID_GL_NOSHADER +END +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +#define STR_PROG_SETT "Program Settings" +#define STR_SND_GAIN "Pojačavanje zvuka" +#define STR_NEW_FLOPPY "Nova image daoteka" +#define STR_CONFIG "86Box postavke" +#define STR_SPECIFY_DIM "Odredite glavne dimenzije prozora" + +#define STR_OK "OK" +#define STR_CANCEL "Odustani" +#define STR_GLOBAL "Spremite ove postavke kao &globalne zadane postavke" +#define STR_DEFAULT "&Standard" +#define STR_LANGUAGE "Jezik:" +#define STR_ICONSET "Paket ikona:" + +#define STR_GAIN "Pojačavanje" + +#define STR_FILE_NAME "Ime daoteke:" +#define STR_DISK_SIZE "Veličina diska:" +#define STR_RPM_MODE "Način rotacije:" +#define STR_PROGRESS "Napredak:" + +#define STR_WIDTH "Širina:" +#define STR_HEIGHT "Visina:" +#define STR_LOCK_TO_SIZE "Zaključajte na ovu veličinu" + +#define STR_MACHINE_TYPE "Tip računala:" +#define STR_MACHINE "Računalo:" +#define STR_CONFIGURE "Konfigurirajte" +#define STR_CPU_TYPE "CPU tip:" +#define STR_SPEED "Brzina:" +#define STR_FPU "FPU uređaj:" +#define STR_WAIT_STATES "Stanja čekanje:" +#define STR_MB "MB" +#define STR_MEMORY "Memorija:" +#define STR_TIME_SYNC "Vremenska sinkronizacija" +#define STR_DISABLED "Deaktivirano" +#define STR_ENABLED_LOCAL "Uključeno (lokalno vrijeme)" +#define STR_ENABLED_UTC "Uključeno (UTC)" +#define STR_DYNAREC "Dinamički rekompilator" + +#define STR_VIDEO "Video kartica:" +#define STR_VOODOO "Voodoo Graphics" + +#define STR_MOUSE "Miš:" +#define STR_JOYSTICK "Joystick:" +#define STR_JOY1 "Joystick 1..." +#define STR_JOY2 "Joystick 2..." +#define STR_JOY3 "Joystick 3..." +#define STR_JOY4 "Joystick 4..." + +#define STR_SOUND "Sound kartica:" +#define STR_MIDI "MIDI Out uređaj:" +#define STR_MIDI_IN "MIDI In uređaj:" +#define STR_MPU401 "Samostalni MPU-401 uređaj" +#define STR_SSI "Innovation SSI-2001" +#define STR_CMS "CMS / Game Blaster" +#define STR_GUS "Gravis Ultrasound" +#define STR_FLOAT "Koristi FLOAT32 zvuk" + +#define STR_NET_TYPE "Tip mreže:" +#define STR_PCAP "PCap uređaj:" +#define STR_NET "Mrežni adapter:" + +#define STR_LPT1 "LPT1 uređaj:" +#define STR_LPT2 "LPT2 uređaj:" +#define STR_LPT3 "LPT3 uređaj:" +#define STR_SERIAL1 "Serijski port 1" +#define STR_SERIAL2 "Serijski port 2" +#define STR_SERIAL3 "Serijski port 3" +#define STR_SERIAL4 "Serijski port 4" +#define STR_PARALLEL1 "Paralelni priključak 1" +#define STR_PARALLEL2 "Paralelni priključak 2" +#define STR_PARALLEL3 "Paralelni priključak 3" + +#define STR_HDC "Kontroler tvrdog diska:" +#define STR_FDC "Kontroler diskete:" +#define STR_IDE_TER "Tercijarni IDE kontroler" +#define STR_IDE_QUA "Kvaternarni IDE kontroler" +#define STR_SCSI "SCSI" +#define STR_SCSI_1 "Kontroler 1:" +#define STR_SCSI_2 "Kontroler 2:" +#define STR_SCSI_3 "Kontroler 3:" +#define STR_SCSI_4 "Kontroler 4:" +#define STR_CASSETTE "Audio kaseta" + +#define STR_HDD "Tvrdi diskovi:" +#define STR_NEW "&Novo..." +#define STR_EXISTING "&Postojeći..." +#define STR_REMOVE "&Ukloniti" +#define STR_BUS "Bus:" +#define STR_CHANNEL "Kanal:" +#define STR_ID "ID:" + +#define STR_SPECIFY "&Izaberi..." +#define STR_SECTORS "Sektori:" +#define STR_HEADS "Glave:" +#define STR_CYLS "Cilindri:" +#define STR_SIZE_MB "Veličina (MB):" +#define STR_TYPE "Tip:" +#define STR_IMG_FORMAT "Format image daoteke:" +#define STR_BLOCK_SIZE "Veličina image daoteke:" + +#define STR_FLOPPY_DRIVES "Floppy drives:" +#define STR_TURBO "Turbo timingovi" +#define STR_CHECKBPB "Provjerite BPB" +#define STR_CDROM_DRIVES "CD-ROM pogoni:" + +#define STR_MO_DRIVES "MO pogoni:" +#define STR_ZIP_DRIVES "ZIP pogoni:" +#define STR_250 "ZIP 250" + +#define STR_ISARTC "ISA RTC:" +#define STR_ISAMEM "ISA proširenje memorije" +#define STR_ISAMEM_1 "Kartica 1:" +#define STR_ISAMEM_2 "Kartica 2:" +#define STR_ISAMEM_3 "Kartica 3:" +#define STR_ISAMEM_4 "Kartica 4:" +#define STR_BUGGER "ISABugger uređaj" +#define STR_POSTCARD "POST kartica" + +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + +#include "dialogs.rc" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + 2048 "86Box" + IDS_2049 "Greška" + IDS_2050 "Fatalna greška" + IDS_2051 "" + IDS_2052 "Pritisnite CTRL+ALT+PAGE DOWN za povratak u prozorski način rada." + IDS_2053 "Brzina" + IDS_2054 "ZIP %03i %i (%s): %ls" + IDS_2055 "ZIP image daoteke (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" + IDS_2056 "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the ""roms"" directory." + IDS_2057 "(prazno)" + IDS_2058 "ZIP image daoteke (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Svi daoteke (*.*)\0*.*\0" + IDS_2059 "Turbo" + IDS_2060 "Uključeno" + IDS_2061 "Isključeno" + IDS_2062 "Svi image daoteke (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Bazni sektorni image daoteke (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Površne image daoteke (*.86F)\0*.86F\0" + IDS_2063 "Računalo ""%hs"" nije dostupan jer nedostaju ROM-ovi u mapu roms/machines. Prebacivanje na raspoloživi računalo." +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2064 "Video kartica ""%hs"" nije dostupna jer nedostaju ROM-ovi u mapu roms/video. Prebacivanje na dostupnu video karticu." + IDS_2065 "Računalo" + IDS_2066 "Video" + IDS_2067 "Ulazni uređaji" + IDS_2068 "Zvuk" + IDS_2069 "Mreža" + IDS_2070 "Priključci (COM & LPT)" + IDS_2071 "Kontroleri za diskovi" + IDS_2072 "Tvrdi diskovi" + IDS_2073 "Floppy & CD-ROM pogoni" + IDS_2074 "Ostali uklonjivi uređaji" + IDS_2075 "Ostali periferni uređaji" + IDS_2076 "Površne image daoteke (*.86F)\0*.86F\0" + IDS_2077 "Kliknite za snimanje miša" + IDS_2078 "Pritisnite F8+F12 za otpuštanje miša" + IDS_2079 "Pritisnite F8+F12 ili srednji gumb za otpuštanje miša" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2080 "Nije moguće inicijalizirati FluidSynth" + IDS_2081 "Bus" + IDS_2082 "Daoteka" + IDS_2083 "C" + IDS_2084 "G" + IDS_2085 "S" + IDS_2086 "MB" + IDS_2087 "Provjeri BPB" + IDS_2088 "KB" + IDS_2089 "Nije moguće inicijalizirati videorenderer." + IDS_2090 "Standard" + IDS_2091 "%i stanja čekanja" + IDS_2092 "Tip" + IDS_2093 "Postavljanje PCap-a nije uspjelo" + IDS_2094 "Nema PCap uređaja" + IDS_2095 "Nevažeći PCap uređaj" + IDS_2096 "Standardni joystick(e) s 2 tipke" + IDS_2097 "Standardni joystick s 4 tipke" + IDS_2098 "Standardni joystick s 6 tipke" + IDS_2099 "Standardni joystick s 6 tipke" + IDS_2100 "CH Flightstick Pro" + IDS_2101 "Microsoft SideWinder Pad" + IDS_2102 "Thrustmaster Flight Control System" + IDS_2103 "Nikakve" + IDS_2104 "Nije moguće učitati akceleratore tipkovnice." + IDS_2105 "Nije moguće registrirati neobrađeni unos." + IDS_2106 "%u" + IDS_2107 "%u MB (CHS: %i, %i, %i)" + IDS_2108 "Disketa %i (%s): %ls" + IDS_2109 "Svi image daoteke (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Napredne sektorske image daoteke (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Bazni sektorni image daoteke (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux image daoteke (*.FDI)\0*.FDI\0Površne image daoteke (*.86F;*.MFM)\0*.86F;*.MFM\0Svi daoteke (*.*)\0*.*\0" + IDS_2110 "Nije moguće inicijalizirati FreeType" + IDS_2111 "Nije moguće inicijalizirati SDL, SDL2.dll je potrebno" + IDS_2112 "Jeste li sigurni da želite hard resetirati emulirano računalo?" + IDS_2113 "Jeste li sigurni da želite izaći iz 86Boxa?" + IDS_2114 "Nije moguće inicijalizirati Ghostscript" + IDS_2115 "MO %i (%ls): %ls" + IDS_2116 "Image daoteke za MO diskovi (*.IM?;*.MDI)\0*.IM?;*.MDI\0Svi daoteke (*.*)\0*.*\0" + IDS_2117 "Dobrodošli u 86Box!" + IDS_2118 "Interni kontroler" + IDS_2119 "Izlazi" + IDS_2120 "Nisu pronađeni ROM daoteke" + IDS_2121 "Želite li spremiti postavke?" + IDS_2122 "Ovo će napraviti hard resetiranje emuliranog računala." + IDS_2123 "Spremi" + IDS_2124 "O 86Box" + IDS_2125 "86Box verzija " EMU_VERSION + + IDS_2126 "Emulator starih računala\n\nAutori: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, i drugi.\n\nPreveo: dob205\n\nObjavljeno pod GNU Općom javnom licencom, verzija 2 ili kasnije. Vidi LICENSE za više informacije." + IDS_2127 "OK" + IDS_2128 "Hardver nije dostupan" +#ifdef _WIN32 +#define LIB_NAME_PCAP "WinPcap" +#else +#define LIB_NAME_PCAP "libpcap" +#endif + IDS_2129 "Provjerite je li " LIB_NAME_PCAP " instaliran i jeste li na " LIB_NAME_PCAP "-kompatibilnoj mrežnoj vezi." + IDS_2130 "Nevažeća konfiguracija" +#ifdef _WIN32 +#define LIB_NAME_FREETYPE "freetype.dll" +#else +#define LIB_NAME_FREETYPE "libfreetype" +#endif + IDS_2131 LIB_NAME_FREETYPE " je potrebno za emuliranje ESC/P pisača." +#ifdef _WIN32 +#define LIB_NAME_GS "gsdll32.dll" +#else +#define LIB_NAME_GS "libgs" +#endif + IDS_2132 LIB_NAME_GS " je potrebno za automatsku konverziju PostScript daoteke u PDF daoteke.\n\nSvi dokumenti poslani na generički PostScript pisač bit će spremljeni kao PostScript (.ps) datoteke." +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#endif + IDS_2133 LIB_NAME_FLUIDSYNTH " je potrebno za FluidSynth MIDI izlaz." + IDS_2134 "Ulazak u način cijelog zaslona" + IDS_2135 "Ne pokazi više ovu poruku" + IDS_2136 "Ne izlazi" + IDS_2137 "Resetiraj" + IDS_2138 "Ne resetiraj" + IDS_2139 "Image daoteke za MO diskovi (*.IM?;*.MDI)\0*.IM?;*.MDI\0Svi daoteke (*.*)\0*.*\0" + IDS_2140 "Image daoteke za CD-ROM diskovi (*.ISO;*.CUE)\0*.ISO;*.CUE\0Svi daoteke (*.*)\0*.*\0" + IDS_2141 "%hs Konfiguracija Uređaja" + IDS_2142 "Monitor u stanju mirovanja" + IDS_2143 "OpenGL shaderi (*.GLSL)\0*.GLSL\0Svi daoteke (*.*)\0*.*\0" + IDS_2144 "OpenGL opcije" + IDS_2145 "Učitavate nepodržanu konfiguraciju" + IDS_2146 "Filtriranje tipa CPU-a na temelju odabranog stroja onemogućeno je za ovaj emuliranog računalo.\n\nOvo omogućuje odabir CPU-a koji inače nije kompatibilan s odabranog računalom. Međutim, možete naići na nekompatibilnosti s BIOS-om uređaja ili drugim softverom.\n\nOmogućavanje ove postavke nije službeno podržano i sva prijava o greškama mogu biti zatvorena kao ""invalid""." + IDS_2147 "Nastavi" + IDS_2148 "Audio kasete: %s" + IDS_2149 "Image daoteke za audio kasete (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Svi daoteke (*.*)\0*.*\0" + IDS_2150 "Kaseta %i: %ls" + IDS_2151 "Image daoteke za kasete (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Svi daoteke (*.*)\0*.*\0" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_4096 "Tvrdi disk (%s)" + IDS_4097 "%01i:%01i" + IDS_4098 "%01i" + IDS_4099 "MFM/RLL ili ESDI CD-ROM drives nisu nikada postojali" + IDS_4100 "Prilagođeno..." + IDS_4101 "Prilagođeno (veliko)..." + IDS_4102 "Dodajte novi tvrdi disk" + IDS_4103 "Dodajte postojeći tvrdi disk" + IDS_4104 "HDI disk image daoteke ne mogu biti veće od 4 GB." + IDS_4105 "Image daoteke tvrdog diska ne mogu biti veće od 127 GB." + IDS_4106 "Image daoteke za tvrde diskove (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Svi daoteke (*.*)\0*.*\0" + IDS_4107 "Nije moguće pročitati datoteku" + IDS_4108 "Nije moguće napisati datoteku" + IDS_4109 "HDI ili HDX image daoteke s veličinom sektora koja nije 512 kB nisu podržane." + IDS_4110 "USB nije još podržano" + IDS_4111 "Image daoteka diska već postoji" + IDS_4112 "Molimo unesite važeći naziv datoteke." + IDS_4113 "Image diska je stvorena" + IDS_4114 "Provjerite je li postoji datoteka i je li je čitljiva." + IDS_4115 "Provjerite je li se datoteka sprema u mapu s dopuštenjima za pisanje." + IDS_4116 "Image diska je prevelika" + IDS_4117 "Ne zaboravite particionirati i formatirati novostvoreni tvrdi disk." + IDS_4118 "Odabrana datoteka bit će prebrisana. Jeste li sigurni da želite koristiti ovu daoteku?" + IDS_4119 "Nepodržana image daoteka diska" + IDS_4120 "Prepiši" + IDS_4121 "Ne prepiši" + IDS_4122 "Image daoteka neobrađenih podataka (.img)" + IDS_4123 "HDI image daoteka (.hdi)" + IDS_4124 "HDX image daoteka (.hdx)" + IDS_4125 "VHD fiksne veličine (.vhd)" + IDS_4126 "VHD dinamičke veličine (.vhd)" + IDS_4127 "Različiti VHD (.vhd)" + IDS_4128 "Veliki blokovi (2 MB)" + IDS_4129 "Mali blokovi (512 KB)" + IDS_4130 "VHD image daoteke (*.VHD)\0*.VHD\0Svi daoteke (*.*)\0*.*\0" + IDS_4131 "Izaberi matični VHD" + IDS_4132 "To bi moglo značiti da je matična image daoteka promijenjena nakon što je stvorena različita image daoteka.\n\nTo se također može dogoditi ako su image datoteke premještene ili kopirane, ili greška u programu koji je stvorio ovaj disk.\n\nŽelite li popraviti vremenske oznake?" + IDS_4133 "Vremenske ozanke matične i poređenog diska ne odgovaraju." + IDS_4134 "Nisam mogao popraviti vremensku oznaku VHDa." + IDS_4135 "%01i:%02i" + + IDS_4352 "MFM/RLL" + IDS_4353 "XTA" + IDS_4354 "ESDI" + IDS_4355 "IDE" + IDS_4356 "ATAPI" + IDS_4357 "SCSI" + + IDS_4608 "MFM/RLL (%01i:%01i)" + IDS_4609 "XTA (%01i:%01i)" + IDS_4610 "ESDI (%01i:%01i)" + IDS_4611 "IDE (%01i:%01i)" + IDS_4612 "ATAPI (%01i:%01i)" + IDS_4613 "SCSI (%01i:%02i)" + + IDS_5120 "CD-ROM %i (%s): %s" + + IDS_5376 "Deaktivirano" + IDS_5381 "ATAPI" + IDS_5382 "SCSI" + + IDS_5632 "Deaktivirano" + IDS_5637 "ATAPI (%01i:%01i)" + IDS_5638 "SCSI (%01i:%02i)" + + IDS_5888 "160 kB" + IDS_5889 "180 kB" + IDS_5890 "320 kB" + IDS_5891 "360 kB" + IDS_5892 "640 kB" + IDS_5893 "720 kB" + IDS_5894 "1,2 MB" + IDS_5895 "1,25 MB" + IDS_5896 "1,44 MB" + IDS_5897 "DMF (1024 clusteri)" + IDS_5898 "DMF (2048 clusteri)" + IDS_5899 "2,88 MB" + IDS_5900 "ZIP 100" + IDS_5901 "ZIP 250" + IDS_5902 "3,5"" 128Mb M.O. (ISO 10090)" + IDS_5903 "3,5"" 230Mb M.O. (ISO 13963)" + IDS_5904 "3,5"" 540Mb M.O. (ISO 15498)" + IDS_5905 "3,5"" 640Mb M.O. (ISO 15498)" + IDS_5906 "3,5"" 1.3Gb M.O. (GigaMO)" + IDS_5907 "3,5"" 2.3Gb M.O. (GigaMO 2)" + IDS_5908 "5,25"" 600Mb M.O." + IDS_5909 "5,25"" 650Mb M.O." + IDS_5910 "5,25"" 1Gb M.O." + IDS_5911 "5,25"" 1.3Gb M.O." + + IDS_6144 "Savršen broj okretanja" + IDS_6145 "1%% ispod savršenog broja okretaja" + IDS_6146 "1,5%% ispod savršenog broja okretaja" + IDS_6147 "2%% ispod savršenog broja okretaja" + + IDS_7168 "(Standard operativnog sustava)" +END +#define IDS_LANG_ENUS IDS_7168 + +// Croatian (hr-HR) resources +///////////////////////////////////////////////////////////////////////////// diff --git a/src/win/languages/hu-HU.rc b/src/win/languages/hu-HU.rc index fdda601a6..569cf5570 100644 --- a/src/win/languages/hu-HU.rc +++ b/src/win/languages/hu-HU.rc @@ -104,7 +104,7 @@ BEGIN MENUITEM "&Beállítások...", IDM_CONFIG MENUITEM "Állapotsori ikonok &frissítése", IDM_UPDATE_ICONS MENUITEM SEPARATOR - MENUITEM "A &program nyelvének módosítása...", IDM_VID_PROG_SETT + MENUITEM "Program&beállítások...", IDM_VID_PROG_SETT # ifdef USE_DISCORD MENUITEM SEPARATOR MENUITEM "&Discord integráció engedélyezése", IDM_DISCORD @@ -276,7 +276,7 @@ END // Dialog // -#define STR_PROG_SETT "Nyelvi beállítások" +#define STR_PROG_SETT "Programbeállítások" #define STR_SND_GAIN "Hangerőszabályzó" #define STR_NEW_FLOPPY "Új képfájl létrehozása" #define STR_CONFIG "86Box beállítások" @@ -287,6 +287,7 @@ END #define STR_GLOBAL "Beállítások mentése &globális alapértékként" #define STR_DEFAULT "&Alapértelmezett" #define STR_LANGUAGE "Nyelv:" +#define STR_ICONSET "Ikonkészlet:" #define STR_GAIN "Hangerő" @@ -394,6 +395,9 @@ END #define STR_BUGGER "ISABugger eszköz" #define STR_POSTCARD "POST kártya" +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + #include "dialogs.rc" ///////////////////////////////////////////////////////////////////////////// @@ -489,7 +493,7 @@ BEGIN IDS_2123 "Mentés" IDS_2124 "A 86Box névjegye" IDS_2125 "86Box v" EMU_VERSION - IDS_2126 "Régi számítógépek emulátora\n\nFejlesztők: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nFordította: Laci bá'\n\nMegjelent a GNU General Public License v2 vagy újabb alatt. További információért lásd a LICENSE fájlt." + IDS_2126 "Régi számítógépek emulátora\n\nFejlesztők: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nFordította: Laci bá'\n\nMegjelent a GNU General Public License v2 vagy újabb alatt. További információért lásd a LICENSE fájlt." IDS_2127 "OK" IDS_2128 "Hardver nem elérhető" #ifdef _WIN32 diff --git a/src/win/languages/it-IT.rc b/src/win/languages/it-IT.rc new file mode 100644 index 000000000..28eb1ba95 --- /dev/null +++ b/src/win/languages/it-IT.rc @@ -0,0 +1,644 @@ +//////////////////////////////////////////////////////////////////////////// +// Italian (IT-it) resources + +#ifdef _WIN32 +LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN +#pragma code_page(65001) +#endif //_WIN32 + +#define explorerdotexe + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MainMenu MENU DISCARDABLE +BEGIN + POPUP "&Azione" + BEGIN + MENUITEM "&Tastiera richiede la cattura", IDM_ACTION_KBD_REQ_CAPTURE + MENUITEM "&CTRL destro è ALT sinistro", IDM_ACTION_RCTRL_IS_LALT + MENUITEM SEPARATOR + MENUITEM "&Riavvia...", IDM_ACTION_HRESET + MENUITEM "&Ctrl+Alt+Del\tCtrl+F12", IDM_ACTION_RESET_CAD + MENUITEM SEPARATOR + MENUITEM "Ctrl+Alt+&Esc", IDM_ACTION_CTRL_ALT_ESC + MENUITEM SEPARATOR + MENUITEM "&Pausa", IDM_ACTION_PAUSE + MENUITEM SEPARATOR + MENUITEM "E&sci...", IDM_ACTION_EXIT + END + POPUP "&Visualizza" + BEGIN + MENUITEM "&Nascondi barra di stato", IDM_VID_HIDE_STATUS_BAR + MENUITEM SEPARATOR + MENUITEM "&Finestra ridimensionabile", IDM_VID_RESIZE + MENUITEM "R&icorda dimensioni e posizione", IDM_VID_REMEMBER + MENUITEM SEPARATOR + POPUP "Re&nderer" + BEGIN + MENUITEM "&SDL (Software)", IDM_VID_SDL_SW + MENUITEM "SDL (&Hardware)", IDM_VID_SDL_HW + MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL +#if defined(DEV_BRANCH) && defined(USE_OPENGL) + MENUITEM "Open&GL (3.3 Core)", IDM_VID_OPENGL_CORE +#endif +#ifdef USE_VNC + MENUITEM "&VNC", IDM_VID_VNC +#endif + END + MENUITEM SEPARATOR + MENUITEM "Specifica dimensioni...", IDM_VID_SPECIFY_DIM + MENUITEM "F&orza display 4:3", IDM_VID_FORCE43 + POPUP "&Fattore scalare della finestra" + BEGIN + MENUITEM "&0.5x", IDM_VID_SCALE_1X + MENUITEM "&1x", IDM_VID_SCALE_2X + MENUITEM "1.&5x", IDM_VID_SCALE_3X + MENUITEM "&2x", IDM_VID_SCALE_4X + END + POPUP "Metodo filtro" + BEGIN + MENUITEM "&Dal più vicino", IDM_VID_FILTER_NEAREST + MENUITEM "&Lineare", IDM_VID_FILTER_LINEAR + END + MENUITEM "Scala Hi&DPI", IDM_VID_HIDPI + MENUITEM SEPARATOR + MENUITEM "&Schermo intero\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN + POPUP "Modalità adattamento &schermo intero" + BEGIN + MENUITEM "&Adatta a schermo intero", IDM_VID_FS_FULL + MENUITEM "&4:3", IDM_VID_FS_43 + MENUITEM "&Pixel quadrati (mantiene l'aspetto)", IDM_VID_FS_KEEPRATIO + MENUITEM "&Scala intera", IDM_VID_FS_INT + END + POPUP "Impostazioni E&GA/(S)VGA" + BEGIN + MENUITEM "&Invertire monitor VGA", IDM_VID_INVERT + POPUP "Schermi VGA &" + BEGIN + MENUITEM "RGB &Color", IDM_VID_GRAY_RGB + MENUITEM "&RGB Monocroma", IDM_VID_GRAY_MONO + MENUITEM "&Monitor ambra", IDM_VID_GRAY_AMBER + MENUITEM "&Monitor verde", IDM_VID_GRAY_GREEN + MENUITEM "&Monitor bianco", IDM_VID_GRAY_WHITE + END + POPUP "Conversione &scala grigia" + BEGIN + MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601 + MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709 + MENUITEM "&AMedia", IDM_VID_GRAYCT_AVE + END + END + MENUITEM SEPARATOR + MENUITEM "Sovrascansione CGA/PCjr/Tandy/E&GA/(S)VGA", IDM_VID_OVERSCAN + MENUITEM "Cambia il contrasto per &display monocromatici", IDM_VID_CGACON + END + MENUITEM "&Dispositivi", IDM_MEDIA + POPUP "&Strumenti" + BEGIN + MENUITEM "&Impostazioni...", IDM_CONFIG + MENUITEM "&Aggiorna icone della barra di stato", IDM_UPDATE_ICONS + MENUITEM SEPARATOR + MENUITEM "Change program &settings...", IDM_VID_PROG_SETT +# ifdef USE_DISCORD + MENUITEM SEPARATOR + MENUITEM "Abilita &integrazione Discord", IDM_DISCORD +# endif + MENUITEM SEPARATOR + MENUITEM "Cattura schermata\tCtrl+F11", IDM_ACTION_SCREENSHOT + MENUITEM SEPARATOR + MENUITEM "Guadagno &suono...", IDM_SND_GAIN +#ifdef MTR_ENABLED + MENUITEM SEPARATOR + MENUITEM "Inizia traccia\tCtrl+T", IDM_ACTION_BEGIN_TRACE + MENUITEM "Ferma traccia\tCtrl+T", IDM_ACTION_END_TRACE +#endif + END +#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS) + POPUP "&Registra" + BEGIN +# ifdef ENABLE_BUSLOGIC_LOG + MENUITEM "Attiva registrazione di BusLogic\tCtrl+F4", IDM_LOG_BUSLOGIC +# endif +# ifdef ENABLE_CDROM_LOG + MENUITEM "Attiva registrazione del CD-ROM\tCtrl+F5", IDM_LOG_CDROM +# endif +# ifdef ENABLE_D86F_LOG + MENUITEM "Attiva registrazione del floppy (86F)\tCtrl+F6", IDM_LOG_D86F +# endif +# ifdef ENABLE_FDC_LOG + MENUITEM "Attiva registrazione del controller floppy\tCtrl+F7", IDM_LOG_FDC +# endif +# ifdef ENABLE_IDE_LOG + MENUITEM "Attiva registrazione di IDE\tCtrl+F8", IDM_LOG_IDE +# endif +# ifdef ENABLE_SERIAL_LOG + MENUITEM "Attiva registrazione della porta seriale\tCtrl+F3", IDM_LOG_SERIAL +# endif +# ifdef ENABLE_NIC_LOG + MENUITEM "Attiva registrazione della rete\tCtrl+F9", IDM_LOG_NIC +# endif +# ifdef ENABLE_LOG_COMMANDS +# ifdef ENABLE_LOG_TOGGLES + MENUITEM SEPARATOR +# endif +# ifdef ENABLE_LOG_BREAKPOINT + MENUITEM "&Punto di interruzione del registro\tCtrl+F10", IDM_LOG_BREAKPOINT +# endif +# ifdef ENABLE_VRAM_DUMP + MENUITEM "Scarica &la RAM video\tCtrl+F1", IDM_DUMP_VRAM +# endif +# endif + END +#endif + POPUP "&Aiuto" + BEGIN + MENUITEM "&Documentazione...", IDM_DOCS + MENUITEM "&Informazioni su 86Box...", IDM_ABOUT + END +END + +StatusBarMenu MENU DISCARDABLE +BEGIN + MENUITEM SEPARATOR +END + +CassetteSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nuova immagine...", IDM_CASSETTE_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Immagine esistente...", IDM_CASSETTE_IMAGE_EXISTING + MENUITEM "Immagine esistente (&protezione contro scrittura)...", IDM_CASSETTE_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Registra", IDM_CASSETTE_RECORD + MENUITEM "R&iproduci", IDM_CASSETTE_PLAY + MENUITEM "Ri&avvolgi all'inizio", IDM_CASSETTE_REWIND + MENUITEM "A&vanti veloce alla fine", IDM_CASSETTE_FAST_FORWARD + MENUITEM SEPARATOR + MENUITEM "&Espelli", IDM_CASSETTE_EJECT + END +END + +CartridgeSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Immagine...", IDM_CARTRIDGE_IMAGE + MENUITEM SEPARATOR + MENUITEM "&Espelli", IDM_CARTRIDGE_EJECT + END +END + +FloppySubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nuova immagine...", IDM_FLOPPY_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Immagine esistente...", IDM_FLOPPY_IMAGE_EXISTING + MENUITEM "Immagine esistente (&protezione contro scrittura)...", IDM_FLOPPY_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "E&sporta in 86F...", IDM_FLOPPY_EXPORT_TO_86F + MENUITEM SEPARATOR + MENUITEM "&Espelli", IDM_FLOPPY_EJECT + END +END + +CdromSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Muto", IDM_CDROM_MUTE + MENUITEM SEPARATOR + MENUITEM "&Espelli", IDM_CDROM_EMPTY + MENUITEM "&Ricarica l'immagine precedente", IDM_CDROM_RELOAD + MENUITEM SEPARATOR + MENUITEM "&Immagine", IDM_CDROM_IMAGE + END +END + +ZIPSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nuova immagine...", IDM_ZIP_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Immagine esistente...", IDM_ZIP_IMAGE_EXISTING + MENUITEM "Immagine esistente (&protezione contro scrittura)...", IDM_ZIP_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Espelli", IDM_ZIP_EJECT + MENUITEM "&Ricarica l'immagine precedente", IDM_ZIP_RELOAD + END +END + +MOSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nuova immagine...", IDM_MO_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Immagine esistente...", IDM_MO_IMAGE_EXISTING + MENUITEM "Immagine esistente (&protezione contro scrittura)...", IDM_MO_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Espelli", IDM_MO_EJECT + MENUITEM "&Ricarica l'immagine precedente", IDM_MO_RELOAD + END +END + +#if defined(DEV_BRANCH) && defined(USE_OPENGL) +VidGLSubMenu MENU DISCARDABLE +BEGIN + POPUP "Imposta obiettivo &fotogrammi" + BEGIN + MENUITEM "&Sincronizza col video", IDM_VID_GL_FPS_BLITTER + MENUITEM "&25 FPS", IDM_VID_GL_FPS_25 + MENUITEM "&30 FPS", IDM_VID_GL_FPS_30 + MENUITEM "&50 FPS", IDM_VID_GL_FPS_50 + MENUITEM "&60 FPS", IDM_VID_GL_FPS_60 + MENUITEM "&75 FPS", IDM_VID_GL_FPS_75 + END + MENUITEM "&VSync", IDM_VID_GL_VSYNC + MENUITEM "&Seleziona shader...", IDM_VID_GL_SHADER + MENUITEM "&Rimuovi shader", IDM_VID_GL_NOSHADER +END +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +#define STR_PROG_SETT "Program Settings" +#define STR_SND_GAIN "Guadagno del suono" +#define STR_NEW_FLOPPY "Nuova immagine" +#define STR_CONFIG "Impostazioni di 86Box" +#define STR_SPECIFY_DIM "Specifica dimensioni della finestra principale" + +#define STR_OK "OK" +#define STR_CANCEL "Annulla" +#define STR_GLOBAL "Salva queste impostazioni come &predefinite globali" +#define STR_DEFAULT "&Predefinito" +#define STR_LANGUAGE "Lingua:" +#define STR_ICONSET "Pacchetto di icone:" + +#define STR_GAIN "Guadagno" + +#define STR_FILE_NAME "Nome file:" +#define STR_DISK_SIZE "Dimensioni disco:" +#define STR_RPM_MODE "Modalità RPM:" +#define STR_PROGRESS "Progresso:" + +#define STR_WIDTH "Larghezza:" +#define STR_HEIGHT "Altezza:" +#define STR_LOCK_TO_SIZE "Blocca in queste dimensioni" + +#define STR_MACHINE_TYPE "Tipo di macchina:" +#define STR_MACHINE "Macchina:" +#define STR_CONFIGURE "Configura" +#define STR_CPU_TYPE "Tipo del CPU:" +#define STR_SPEED "Veloc.:" +#define STR_FPU "FPU:" +#define STR_WAIT_STATES "Stati di attesa:" +#define STR_MB "MB" +#define STR_MEMORY "Memoria:" +#define STR_TIME_SYNC "Sincronizzazione dell'ora" +#define STR_DISABLED "Disabilitata" +#define STR_ENABLED_LOCAL "Abilitata (ora locale)" +#define STR_ENABLED_UTC "Abilitata (UTC)" +#define STR_DYNAREC "Ricompilatore dinamico" + +#define STR_VIDEO "Video:" +#define STR_VOODOO "Grafica Voodoo" + +#define STR_MOUSE "Mouse:" +#define STR_JOYSTICK "Joystick:" +#define STR_JOY1 "Joystick 1..." +#define STR_JOY2 "Joystick 2..." +#define STR_JOY3 "Joystick 3..." +#define STR_JOY4 "Joystick 4..." + +#define STR_SOUND "Scheda audio:" +#define STR_MIDI "Uscita MIDI:" +#define STR_MIDI_IN "Entrata MIDI:" +#define STR_MPU401 "MPU-401 autonomo" +#define STR_SSI "Innovation SSI-2001" +#define STR_CMS "CMS / Game Blaster" +#define STR_GUS "Gravis Ultrasound" +#define STR_FLOAT "Usa suono FLOAT32" + +#define STR_NET_TYPE "Tipo di rete:" +#define STR_PCAP "Dispositivo PCap:" +#define STR_NET "Scheda di rete:" + +#define STR_LPT1 "Dispositivo LPT1:" +#define STR_LPT2 "Dispositivo LPT2:" +#define STR_LPT3 "Dispositivo LPT3:" +#define STR_SERIAL1 "Porta seriale 1" +#define STR_SERIAL2 "Porta seriale 2" +#define STR_SERIAL3 "Porta seriale 3" +#define STR_SERIAL4 "Porta seriale 4" +#define STR_PARALLEL1 "Porta parallela 1" +#define STR_PARALLEL2 "Porta parallela 2" +#define STR_PARALLEL3 "Porta parallela 3" + +#define STR_HDC "Controller HD:" +#define STR_FDC "Controller FD:" +#define STR_IDE_TER "Controller IDE terziario" +#define STR_IDE_QUA "Controller IDE quaternario" +#define STR_SCSI "SCSI" +#define STR_SCSI_1 "Controller 1:" +#define STR_SCSI_2 "Controller 2:" +#define STR_SCSI_3 "Controller 3:" +#define STR_SCSI_4 "Controller 4:" +#define STR_CASSETTE "Cassetta" + +#define STR_HDD "Hard disk:" +#define STR_NEW "&Nuovo..." +#define STR_EXISTING "&Esistente..." +#define STR_REMOVE "&Rimouvi" +#define STR_BUS "Bus:" +#define STR_CHANNEL "Canale:" +#define STR_ID "ID:" + +#define STR_SPECIFY "&Specifica..." +#define STR_SECTORS "Settori:" +#define STR_HEADS "Testine:" +#define STR_CYLS "Cilindri:" +#define STR_SIZE_MB "Dimensioni (MB):" +#define STR_TYPE "Tipo:" +#define STR_IMG_FORMAT "Formato immagine:" +#define STR_BLOCK_SIZE "Dimensioni blocco:" + +#define STR_FLOPPY_DRIVES "Unità floppy:" +#define STR_TURBO "Turbo" +#define STR_CHECKBPB "Verifica BPB" +#define STR_CDROM_DRIVES "Unità CD-ROM:" + +#define STR_MO_DRIVES "Unità magneto-ottiche:" +#define STR_ZIP_DRIVES "Unità ZIP:" +#define STR_250 "ZIP 250" + +#define STR_ISARTC "RTC ISA:" +#define STR_ISAMEM "Espansione memoria ISA" +#define STR_ISAMEM_1 "Scheda 1:" +#define STR_ISAMEM_2 "Scheda 2:" +#define STR_ISAMEM_3 "Scheda 3:" +#define STR_ISAMEM_4 "Scheda 4:" +#define STR_BUGGER "Dispositivo ISABugger" +#define STR_POSTCARD "Scheda POST" + +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + +#include "dialogs.rc" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + 2048 "86Box" + IDS_2049 "Errore" + IDS_2050 "Errore fatale" + IDS_2051 "" + IDS_2052 "Usa CTRL+ALT+PAGE DOWN per tornare alla modalità finestra." + IDS_2053 "Velocità" + IDS_2054 "ZIP %03i %i (%s): %ls" + IDS_2055 "Immagini ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" + IDS_2056 "86Box non può trovare immagini ROM utilizzabili.\n\nPlease download a ROM set and extract it into the ""roms"" directory." + IDS_2057 "(empty)" + IDS_2058 "Immagini ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Tutti i file (*.*)\0*.*\0" + IDS_2059 "Turbo" + IDS_2060 "Acceso" + IDS_2061 "Spento" + IDS_2062 "Tutte le immagini (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Immagini di settori base (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Immagini di superficie (*.86F)\0*.86F\0" + IDS_2063 "La macchina ""%hs"" non è disponibile a causa di immagini ROM mancanti nella directory roms/machines. Cambiando ad una macchina disponibile." +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2064 "La scheda video ""%hs"" non è disponibile a causa di immagini ROM mancanti nella directory roms/video. Cambiando ad una scheda video disponibile." + IDS_2065 "Macchina" + IDS_2066 "Schermo" + IDS_2067 "Dispositivi di entrata" + IDS_2068 "Audio" + IDS_2069 "Rete" + IDS_2070 "Porte (COM & LPT)" + IDS_2071 "Controller memoria" + IDS_2072 "Hard disk" + IDS_2073 "Unità CD-ROM e Floppy" + IDS_2074 "Altri dispositivi rimuovibili" + IDS_2075 "Altre periferiche" + IDS_2076 "Immagini di superficie (*.86F)\0*.86F\0" + IDS_2077 "Fare clic per catturare mouse" + IDS_2078 "Premi F8+F12 per rilasciare il mouse" + IDS_2079 "Premi F8+F12 o pulsante centrale per rilasciare il mouse" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2080 "Impossibile inizializzare FluidSynth" + IDS_2081 "Bus" + IDS_2082 "File" + IDS_2083 "C" + IDS_2084 "H" + IDS_2085 "S" + IDS_2086 "MB" + IDS_2087 "Verifica BPB" + IDS_2088 "KB" + IDS_2089 "Impossibile inizializzare il renderer video." + IDS_2090 "Predefinito" + IDS_2091 "%i stati d'attesa" + IDS_2092 "Tipo" + IDS_2093 "Impossibile impostare PCap" + IDS_2094 "Nessun dispositivo PCap trovato" + IDS_2095 "Dispositivo PCap invalido" + IDS_2096 "Joystick comune da 2 pulsanti" + IDS_2097 "Joystick comune da 4 pulsanti" + IDS_2098 "Joystick comune da 6 pulsanti" + IDS_2099 "Joystick comune da 8 pulsanti" + IDS_2100 "CH Flightstick Pro" + IDS_2101 "Microsoft SideWinder Pad" + IDS_2102 "Thrustmaster Flight Control System" + IDS_2103 "Nessuno" + IDS_2104 "Impossibile caricare gli acceleratori da tastiera." + IDS_2105 "Impossibile registrare input raw." + IDS_2106 "%u" + IDS_2107 "%u MB (CHS: %i, %i, %i)" + IDS_2108 "Floppy %i (%s): %ls" + IDS_2109 "Tutte le immagini (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Immagini da settori avanzati (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Imagini da settori basilari (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Immagini flusso (*.FDI)\0*.FDI\0Immagini da superficie (*.86F;*.MFM)\0*.86F;*.MFM\0Tutti i file (*.*)\0*.*\0" + IDS_2110 "Impossibile inizializzare FreeType" + IDS_2111 "Impossibile inizializzare SDL, SDL2.dll è necessario" + IDS_2112 "Sei sicuro di voler riavviare la macchina emulata?" + IDS_2113 "Sei sicuro di voler uscire da 86Box?" + IDS_2114 "Impossibile inizializzare Ghostscript" + IDS_2115 "MO %i (%ls): %ls" + IDS_2116 "Immagini MO (*.IM?;*.MDI)\0*.IM?;*.MDI\0Tutti i file (*.*)\0*.*\0" + IDS_2117 "Benvenuti in 86Box!" + IDS_2118 "Controller interno" + IDS_2119 "Esci" + IDS_2120 "Nessune immagini ROM trovate" + IDS_2121 "Vuole salvare queste impostazioni?" + IDS_2122 "Questo riavvierà la macchina emulata." + IDS_2123 "Salva" + IDS_2124 "Informazioni su 86Box" + IDS_2125 "86Box v" EMU_VERSION + + IDS_2126 "Un emulatore di computer vecchi\n\nAutori: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nTradotto da: explorerdotexe\n\nRilasciato sotto la Licenza Pubblica GNU versione 2 o dopo. Vedi LICENSE per maggior informazioni." + IDS_2127 "OK" + IDS_2128 "Hardware non disponibile" +#ifdef _WIN32 +#define LIB_NAME_PCAP "WinPcap" +#else +#define LIB_NAME_PCAP "libpcap" +#endif + IDS_2129 "Controlla se " LIB_NAME_PCAP " è installato e che tu sia connesso ad una connessione " LIB_NAME_PCAP " compatibile." + IDS_2130 "Configurazione invalida" +#ifdef _WIN32 +#define LIB_NAME_FREETYPE "freetype.dll" +#else +#define LIB_NAME_FREETYPE "libfreetype" +#endif + IDS_2131 LIB_NAME_FREETYPE " è richesto per l'emuazione di stampanti ESC/P." +#ifdef _WIN32 +#define LIB_NAME_GS "gsdll32.dll" +#else +#define LIB_NAME_GS "libgs" +#endif + IDS_2132 LIB_NAME_GS " è richiesto per la conversione automatica di file PostScript a file PDF.\n\nQualsiasi documento mandato alla stampante generica PostScript sarà salvato come file PostScript. (.ps)" +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#endif + IDS_2133 LIB_NAME_FLUIDSYNTH " è richiesto per l'output FluidSynth MIDI." + IDS_2134 "Entrando nella modalità schermo intero" + IDS_2135 "Non mostrare più questo messaggio" + IDS_2136 "Non uscire" + IDS_2137 "Riavvia" + IDS_2138 "Non riavviare" + IDS_2139 "Immagini MO (*.IM?;*.MDI)\0*.IM?;*.MDI\0Tutti i file (*.*)\0*.*\0" + IDS_2140 "Immagini CD-ROM (*.ISO;*.CUE)\0*.ISO;*.CUE\0Tutti i file (*.*)\0*.*\0" + IDS_2141 "Configurazione del dispositivo %hs" + IDS_2142 "Monitor in modalità riposo" + IDS_2143 "Shader OpenGL (*.GLSL)\0*.GLSL\0Tutti i file (*.*)\0*.*\0" + IDS_2144 "Impostazioni OpenGL" + IDS_2145 "Stai caricando una configurazione non supportata" + IDS_2146 "Il filtraggio della tipologia di CPU è disabilitato per la macchina selezionata.\n\nQuesto lo rende possibile scegliere un CPU che è altrimenti incompatibile con la macchina selezionata. Tuttavia, portresti incorrere in incompatibilità con il BIOS della macchina o altri programmi. \n\nL'abilitare di questa impostazione non è ufficialmente supportato e tutte le segnalazioni di errori saranno considerate invalide." + IDS_2147 "Continua" + IDS_2148 "Cassetta: %s" + IDS_2149 "Immagini cassetta (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Tutti i file (*.*)\0*.*\0" + IDS_2150 "Cartuccia %i: %ls" + IDS_2151 "Immagini cartuccia (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Tutti i file (*.*)\0*.*\0" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_4096 "Hard disk (%s)" + IDS_4097 "%01i:%01i" + IDS_4098 "%01i" + IDS_4099 "Le unità CD-ROM MFM/RLL o ESDI non sono mai esistite." + IDS_4100 "Personalizzata..." + IDS_4101 "Personalizzata (grande)..." + IDS_4102 "Aggiungi un nuovo disco rigido" + IDS_4103 "Aggiungi un disco rigido esistente" + IDS_4104 "Le immagini HDI non possono essere più grandi di 4 GB." + IDS_4105 "Le immmagini disco non possono essere più grandi di 127 GB." + IDS_4106 "Immagini disco rigido (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Tutti i file (*.*)\0*.*\0" + IDS_4107 "Impossibile leggere il file" + IDS_4108 "Impossibile scrivere al file" + IDS_4109 "Le immagini HDI o HDX con settori di dimensioni diverse da 512 non sono supportati." + IDS_4110 "USB non è ancora supportato" + IDS_4111 "Immagine disco già esiste" + IDS_4112 "Specifica un nome file valido." + IDS_4113 "Immagine disco creata" + IDS_4114 "Controlla che il file esiste e che sia leggibile." + IDS_4115 "Controlla che il file viene salvato ad un percorso con diritti di scrittura" + IDS_4116 "Immagine disco troppo grande" + IDS_4117 "Ricordati di partizionare e formattare il disco appena creato." + IDS_4118 "Il file selezionato sarà sovrascritto, sei sicuro di volerlo usare?" + IDS_4119 "Immagine disco non supportata" + IDS_4120 "Sovrascrivi" + IDS_4121 "Non sovrascrivere" + IDS_4122 "Immagine raw (.img)" + IDS_4123 "Immagine HDI (.hdi)" + IDS_4124 "Immagine HDX (.hdx)" + IDS_4125 "VHD di dimensioni fisse (.vhd)" + IDS_4126 "VHD di dimensioni dinamiche (.vhd)" + IDS_4127 "VHD differenziato (.vhd)" + IDS_4128 "Blocchi larghi (2 MB)" + IDS_4129 "Blocchi piccoli (512 KB)" + IDS_4130 "File VHD (*.VHD)\0*.VHD\0Tutti i file (*.*)\0*.*\0" + IDS_4131 "Seleziona il VHD padre." + IDS_4132 "Questo potrebbe significare che l'immagine padre sia stata modificata dopo la creazione dell'immagine di differenziazione.\n\nPuò anche succedere se i file immagini sono stati spostati o copiati, o da un errore nel programma che ha creato questo disco.\n\nVuoi aggiustare le marcature di tempo?" + IDS_4133 "Le marcature di tempo padre e figlio non corrispondono" + IDS_4134 "Impossibile aggiustare marcature di tempo VHD." + IDS_4135 "%01i:%02i" + + IDS_4352 "MFM/RLL" + IDS_4353 "XTA" + IDS_4354 "ESDI" + IDS_4355 "IDE" + IDS_4356 "ATAPI" + IDS_4357 "SCSI" + + IDS_4608 "MFM/RLL (%01i:%01i)" + IDS_4609 "XTA (%01i:%01i)" + IDS_4610 "ESDI (%01i:%01i)" + IDS_4611 "IDE (%01i:%01i)" + IDS_4612 "ATAPI (%01i:%01i)" + IDS_4613 "SCSI (%01i:%02i)" + + IDS_5120 "CD-ROM %i (%s): %s" + + IDS_5376 "Disabilitato" + IDS_5381 "ATAPI" + IDS_5382 "SCSI" + + IDS_5632 "Disabilitato" + IDS_5637 "ATAPI (%01i:%01i)" + IDS_5638 "SCSI (%01i:%02i)" + + IDS_5888 "160 kB" + IDS_5889 "180 kB" + IDS_5890 "320 kB" + IDS_5891 "360 kB" + IDS_5892 "640 kB" + IDS_5893 "720 kB" + IDS_5894 "1.2 MB" + IDS_5895 "1.25 MB" + IDS_5896 "1.44 MB" + IDS_5897 "DMF (cluster 1024)" + IDS_5898 "DMF (cluster 2048)" + IDS_5899 "2.88 MB" + IDS_5900 "ZIP 100" + IDS_5901 "ZIP 250" + IDS_5902 "3.5"" 128Mb M.O. (ISO 10090)" + IDS_5903 "3.5"" 230Mb M.O. (ISO 13963)" + IDS_5904 "3.5"" 540Mb M.O. (ISO 15498)" + IDS_5905 "3.5"" 640Mb M.O. (ISO 15498)" + IDS_5906 "3.5"" 1.3Gb M.O. (GigaMO)" + IDS_5907 "3.5"" 2.3Gb M.O. (GigaMO 2)" + IDS_5908 "5.25"" 600Mb M.O." + IDS_5909 "5.25"" 650Mb M.O." + IDS_5910 "5.25"" 1Gb M.O." + IDS_5911 "5.25"" 1.3Gb M.O." + + IDS_6144 "RPM perfette" + IDS_6145 "RPM 1%% sotto perfezione" + IDS_6146 "RPM 1.5%% sotto perfezione" + IDS_6147 "RPM 2%% sotto perfezione" + + IDS_7168 "(Predefinito del sistema)" +END +#define IDS_LANG_ENUS IDS_7168 + +// Italian (IT-it) resources +///////////////////////////////////////////////////////////////////////////// diff --git a/src/win/languages/ja-JP.rc b/src/win/languages/ja-JP.rc new file mode 100644 index 000000000..bb5c84298 --- /dev/null +++ b/src/win/languages/ja-JP.rc @@ -0,0 +1,644 @@ +//////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#ifdef _WIN32 +LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT +#pragma code_page(65001) +#endif //_WIN32 + +#define AUTHORS + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MainMenu MENU DISCARDABLE +BEGIN + POPUP "動作(&A)" + BEGIN + MENUITEM "キーボードはキャプチャが必要(&K)", IDM_ACTION_KBD_REQ_CAPTURE + MENUITEM "右CTRLが左ALT(&R)", IDM_ACTION_RCTRL_IS_LALT + MENUITEM SEPARATOR + MENUITEM "再起動(&H)...", IDM_ACTION_HRESET + MENUITEM "Ctrl+Alt+Del(&C)\tCtrl+F12", IDM_ACTION_RESET_CAD + MENUITEM SEPARATOR + MENUITEM "Ctrl+Alt+Esc(&E)", IDM_ACTION_CTRL_ALT_ESC + MENUITEM SEPARATOR + MENUITEM "一時停止(&P)", IDM_ACTION_PAUSE + MENUITEM SEPARATOR + MENUITEM "終了(&X)...", IDM_ACTION_EXIT + END + POPUP "表示(&V)" + BEGIN + MENUITEM "ステータスバーを隠す(&H)", IDM_VID_HIDE_STATUS_BAR + MENUITEM SEPARATOR + MENUITEM "ウィンドウのサイズを変更できるようにする(&R)", IDM_VID_RESIZE + MENUITEM "ウィンドウのサイズと位置を記憶(&E)", IDM_VID_REMEMBER + MENUITEM SEPARATOR + POPUP "レンダラー(&N)" + BEGIN + MENUITEM "SDL (ソフトウェア)(&S)", IDM_VID_SDL_SW + MENUITEM "SDL (ハードウェア)(&H)", IDM_VID_SDL_HW + MENUITEM "SDL (OpenGL)(&O)", IDM_VID_SDL_OPENGL +#if defined(DEV_BRANCH) && defined(USE_OPENGL) + MENUITEM "OpenGL (3.3コア)(&G)", IDM_VID_OPENGL_CORE +#endif +#ifdef USE_VNC + MENUITEM "VNC(&V)", IDM_VID_VNC +#endif + END + MENUITEM SEPARATOR + MENUITEM "寸法指定...", IDM_VID_SPECIFY_DIM + MENUITEM "4:3に合わせる(&O)", IDM_VID_FORCE43 + POPUP "ウィンドウの倍率(&W)" + BEGIN + MENUITEM "0.5x(&0)", IDM_VID_SCALE_1X + MENUITEM "1x(&1)", IDM_VID_SCALE_2X + MENUITEM "1.5x(&5)", IDM_VID_SCALE_3X + MENUITEM "2x(&2)", IDM_VID_SCALE_4X + END + POPUP "フィルター方式" + BEGIN + MENUITEM "最も近い(&N)", IDM_VID_FILTER_NEAREST + MENUITEM "リニア(&L)", IDM_VID_FILTER_LINEAR + END + MENUITEM "HiDPIスケーリング(&D)", IDM_VID_HIDPI + MENUITEM SEPARATOR + MENUITEM "フルスクリーン(&F)\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN + POPUP "フルスクリーンの比率(&S)" + BEGIN + MENUITEM "フルスクリーンに拡大(&F)", IDM_VID_FS_FULL + MENUITEM "4:3(&4)", IDM_VID_FS_43 + MENUITEM "正方形のピクセル(維持率)(&S)", IDM_VID_FS_KEEPRATIO + MENUITEM "定数倍(&I)", IDM_VID_FS_INT + END + POPUP "E&GA/(S)VGAの設定" + BEGIN + MENUITEM "倒立型VGAモニター(&)", IDM_VID_INVERT + POPUP "VGAスクリーンタイプ(&T)" + BEGIN + MENUITEM "RGBカラー(&C)", IDM_VID_GRAY_RGB + MENUITEM "RGBグレースケール(&R)", IDM_VID_GRAY_MONO + MENUITEM "橙色モニター(&A)", IDM_VID_GRAY_AMBER + MENUITEM "緑色モニター(&G)", IDM_VID_GRAY_GREEN + MENUITEM "白色モニター(&W)", IDM_VID_GRAY_WHITE + END + POPUP "グレースケール表示方式(&C)" + BEGIN + MENUITEM "BT601 (NTSC/PAL)(&6)", IDM_VID_GRAYCT_601 + MENUITEM "BT709 (HDTV)(7)", IDM_VID_GRAYCT_709 + MENUITEM "平均値(&A)", IDM_VID_GRAYCT_AVE + END + END + MENUITEM SEPARATOR + MENUITEM "CGA/PCjr/Tandy/EGA/(S)VGAオーバースキャン(&G)", IDM_VID_OVERSCAN + MENUITEM "単色モニター用対比転換(&M)", IDM_VID_CGACON + END + MENUITEM "メディア(&M)", IDM_MEDIA + POPUP "ツール(&T)" + BEGIN + MENUITEM "設定(&S)...", IDM_CONFIG + MENUITEM "ステータスバーアイコンの更新(&U)", IDM_UPDATE_ICONS + MENUITEM SEPARATOR + MENUITEM "表示言語の変更(&P)...", IDM_VID_PROG_SETT +# ifdef USE_DISCORD + MENUITEM SEPARATOR + MENUITEM "Discordとの連携を可能にする(&D)", IDM_DISCORD +# endif + MENUITEM SEPARATOR + MENUITEM "クリーンショットを撮る(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT + MENUITEM SEPARATOR + MENUITEM "サウンドゲイン(&G)...", IDM_SND_GAIN +#ifdef MTR_ENABLED + MENUITEM SEPARATOR + MENUITEM "トレース開始\tCtrl+T", IDM_ACTION_BEGIN_TRACE + MENUITEM "エンドトレース\tCtrl+T", IDM_ACTION_END_TRACE +#endif + END +#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS) + POPUP "ロギング(&L)" + BEGIN +# ifdef ENABLE_BUSLOGIC_LOG + MENUITEM "BusLogicのログを有効にする\tCtrl+F4", IDM_LOG_BUSLOGIC +# endif +# ifdef ENABLE_CDROM_LOG + MENUITEM "CD-ROMのログを有効にする\tCtrl+F5", IDM_LOG_CDROM +# endif +# ifdef ENABLE_D86F_LOG + MENUITEM "フロッピー(86F)のログを有効にする\tCtrl+F6", IDM_LOG_D86F +# endif +# ifdef ENABLE_FDC_LOG + MENUITEM "フロッピーコントローラーのログを有効にする\tCtrl+F7", IDM_LOG_FDC +# endif +# ifdef ENABLE_IDE_LOG + MENUITEM "IDEのログを有効にする\tCtrl+F8", IDM_LOG_IDE +# endif +# ifdef ENABLE_SERIAL_LOG + MENUITEM "シリアルポートのログを有効にする\tCtrl+F3", IDM_LOG_SERIAL +# endif +# ifdef ENABLE_NIC_LOG + MENUITEM "ネットワークのログを有効にする\tCtrl+F9", IDM_LOG_NIC +# endif +# ifdef ENABLE_LOG_COMMANDS +# ifdef ENABLE_LOG_TOGGLES + MENUITEM SEPARATOR +# endif +# ifdef ENABLE_LOG_BREAKPOINT + MENUITEM "ログブレイクポイント(&L)\tCtrl+F10", IDM_LOG_BREAKPOINT +# endif +# ifdef ENABLE_VRAM_DUMP + MENUITEM "ビデオRAMのダンプ(&V)\tCtrl+F1", IDM_DUMP_VRAM +# endif +# endif + END +#endif + POPUP "ヘルプ(&H)" + BEGIN + MENUITEM "ドキュメント(&D)...", IDM_DOCS + MENUITEM "86Boxについて(&A)...", IDM_ABOUT + END +END + +StatusBarMenu MENU DISCARDABLE +BEGIN + MENUITEM SEPARATOR +END + +CassetteSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "新規のイメージ(&N)...", IDM_CASSETTE_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "既存のイメージ(&E)...", IDM_CASSETTE_IMAGE_EXISTING + MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "録音する(&R)", IDM_CASSETTE_RECORD + MENUITEM "再生する(&P)", IDM_CASSETTE_PLAY + MENUITEM "冒頭に巻き戻す(&R)", IDM_CASSETTE_REWIND + MENUITEM "最後まで早送りする(&F)", IDM_CASSETTE_FAST_FORWARD + MENUITEM SEPARATOR + MENUITEM "イジェクト(&J)", IDM_CASSETTE_EJECT + END +END + +CartridgeSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "イメージ(&I)...", IDM_CARTRIDGE_IMAGE + MENUITEM SEPARATOR + MENUITEM "イジェクト(&J)", IDM_CARTRIDGE_EJECT + END +END + +FloppySubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "新規のイメージ(&N)...", IDM_FLOPPY_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "既存のイメージ(&E)...", IDM_FLOPPY_IMAGE_EXISTING + MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "86Fへのエクスポート(&X)...", IDM_FLOPPY_EXPORT_TO_86F + MENUITEM SEPARATOR + MENUITEM "イジェクト(&J)", IDM_FLOPPY_EJECT + END +END + +CdromSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "ミュート(&M)", IDM_CDROM_MUTE + MENUITEM SEPARATOR + MENUITEM "空(&M)", IDM_CDROM_EMPTY + MENUITEM "前のイメージを再読み込み (&R)", IDM_CDROM_RELOAD + MENUITEM SEPARATOR + MENUITEM "イメージ(&I)", IDM_CDROM_IMAGE + END +END + +ZIPSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "新規のイメージ(&N)...", IDM_ZIP_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "既存のイメージ(&E)...", IDM_ZIP_IMAGE_EXISTING + MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_ZIP_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "イジェクト(&J)", IDM_ZIP_EJECT + MENUITEM "前のイメージを再読み込み (&R)", IDM_ZIP_RELOAD + END +END + +MOSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "新規のイメージ(&N)...", IDM_MO_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "既存のイメージ(&E)...", IDM_MO_IMAGE_EXISTING + MENUITEM "既存のイメージ(ライトプロテクト付き) (&W)...", IDM_MO_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "イジェクト(&J)", IDM_MO_EJECT + MENUITEM "前のイメージを再読み込み (&R)", IDM_MO_RELOAD + END +END + +#if defined(DEV_BRANCH) && defined(USE_OPENGL) +VidGLSubMenu MENU DISCARDABLE +BEGIN + POPUP "目標フレームレート(&F)" + BEGIN + MENUITEM "ビデオとの同期(&S)", IDM_VID_GL_FPS_BLITTER + MENUITEM "25フレーム/秒(&2)", IDM_VID_GL_FPS_25 + MENUITEM "30フレーム/秒(&3)", IDM_VID_GL_FPS_30 + MENUITEM "50フレーム/秒(&5)", IDM_VID_GL_FPS_50 + MENUITEM "60フレーム/秒(&6)", IDM_VID_GL_FPS_60 + MENUITEM "75フレーム/秒(&7)", IDM_VID_GL_FPS_75 + END + MENUITEM "VSync(&V)", IDM_VID_GL_VSYNC + MENUITEM "シェーダの選択(&S)...", IDM_VID_GL_SHADER + MENUITEM "シェーダの削除(&R)", IDM_VID_GL_NOSHADER +END +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +#define STR_PROG_SETT "表示言語の変更" +#define STR_SND_GAIN "サウンドゲイン" +#define STR_NEW_FLOPPY "新規のイメージ" +#define STR_CONFIG "86Boxの設定" +#define STR_SPECIFY_DIM "メインウィンドウの寸法指定" + +#define STR_OK "OK" +#define STR_CANCEL "キャンセル" +#define STR_GLOBAL "これらの設定をグローバル既定値として保存する(&G)" +#define STR_DEFAULT "既定値(&D)" +#define STR_LANGUAGE "言語:" +#define STR_ICONSET "アイコンセット:" + +#define STR_GAIN "ゲイン" + +#define STR_FILE_NAME "ファイル名:" +#define STR_DISK_SIZE "ディスクの容量:" +#define STR_RPM_MODE "RPMモード:" +#define STR_PROGRESS "プログレス:" + +#define STR_WIDTH "幅:" +#define STR_HEIGHT "高さ:" +#define STR_LOCK_TO_SIZE "この寸法のロック" + +#define STR_MACHINE_TYPE "マシンタイプ:" +#define STR_MACHINE "マシン:" +#define STR_CONFIGURE "設定" +#define STR_CPU_TYPE "CPUタイプ:" +#define STR_SPEED "速度:" +#define STR_FPU "FPU:" +#define STR_WAIT_STATES "待機状態:" +#define STR_MB "MB" +#define STR_MEMORY "メモリ:" +#define STR_TIME_SYNC "時刻同期化" +#define STR_DISABLED "使用しない" +#define STR_ENABLED_LOCAL "使用する (現地時間)" +#define STR_ENABLED_UTC "使用する (UTC)" +#define STR_DYNAREC "動的再コンパイル" + +#define STR_VIDEO "ビデオカード:" +#define STR_VOODOO "Voodooグラフィック" + +#define STR_MOUSE "マウス:" +#define STR_JOYSTICK "ジョイスティック:" +#define STR_JOY1 "ジョイスティック1..." +#define STR_JOY2 "ジョイスティック2..." +#define STR_JOY3 "ジョイスティック3..." +#define STR_JOY4 "ジョイスティック4..." + +#define STR_SOUND "サウンドカード:" +#define STR_MIDI "MIDI出力デバイス:" +#define STR_MIDI_IN "MIDI入力デバイス:" +#define STR_MPU401 "MPU-401を単独使用" +#define STR_SSI "Innovation SSI-2001" +#define STR_CMS "CMS / Game Blaster" +#define STR_GUS "Gravis Ultrasound" +#define STR_FLOAT "FLOAT32サウンドを使用" + +#define STR_NET_TYPE "ネットワークタイプ:" +#define STR_PCAP "PCapデバイス:" +#define STR_NET "ネットワークアダプター:" + +#define STR_LPT1 "LPT1デバイス:" +#define STR_LPT2 "LPT2デバイス:" +#define STR_LPT3 "LPT3デバイス:" +#define STR_SERIAL1 "シリアルポート1" +#define STR_SERIAL2 "シリアルポート2" +#define STR_SERIAL3 "シリアルポート3" +#define STR_SERIAL4 "シリアルポート4" +#define STR_PARALLEL1 "パラレルポート1" +#define STR_PARALLEL2 "パラレルポート2" +#define STR_PARALLEL3 "パラレルポート3" + +#define STR_HDC "HDコントローラー:" +#define STR_FDC "FDコントローラー:" +#define STR_IDE_TER "第三世代のIDEコントローラー" +#define STR_IDE_QUA "第四世代のIDEコントローラー" +#define STR_SCSI "SCSI" +#define STR_SCSI_1 "コントローラー1:" +#define STR_SCSI_2 "コントローラー2:" +#define STR_SCSI_3 "コントローラー3:" +#define STR_SCSI_4 "コントローラー4:" +#define STR_CASSETTE "カセット" + +#define STR_HDD "ハードディスク:" +#define STR_NEW "新規(&N)..." +#define STR_EXISTING "既定(&E)..." +#define STR_REMOVE "除去(&R)" +#define STR_BUS "バス:" +#define STR_CHANNEL "チャンネル:" +#define STR_ID "ID:" + +#define STR_SPECIFY "参照(&S)..." +#define STR_SECTORS "セクター:" +#define STR_HEADS "ヘッド:" +#define STR_CYLS "シリンダー:" +#define STR_SIZE_MB "容量(MB):" +#define STR_TYPE "形式:" +#define STR_IMG_FORMAT "イメージフォーマット:" +#define STR_BLOCK_SIZE "ブロックサイズ:" + +#define STR_FLOPPY_DRIVES "フロッピードライブ:" +#define STR_TURBO "高速タイミング" +#define STR_CHECKBPB "BPBをチェック" +#define STR_CDROM_DRIVES "CD-ROMドライブ:" + +#define STR_MO_DRIVES "光磁気ドライブ:" +#define STR_ZIP_DRIVES "ZIPドライブ:" +#define STR_250 "ZIP 250" + +#define STR_ISARTC "ISAクロック/RTCカード:" +#define STR_ISAMEM "ISAメモリー拡張ボード" +#define STR_ISAMEM_1 "カード1:" +#define STR_ISAMEM_2 "カード2:" +#define STR_ISAMEM_3 "カード3:" +#define STR_ISAMEM_4 "カード4:" +#define STR_BUGGER "ISABuggerデバイス" +#define STR_POSTCARD "POSTカード" + +#define FONT_SIZE 9 +#define FONT_NAME "Meiryo UI" + +#include "dialogs.rc" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + 2048 "86Box" + IDS_2049 "エラー" + IDS_2050 "致命的なエラー" + IDS_2051 "<予約済み>" + IDS_2052 "CTRL+ALT+PAGE DOWNでウィンドウモードに戻ります。" + IDS_2053 "速度" + IDS_2054 "ZIP %03i %i (%s): %ls" + IDS_2055 "ZIPイメージ (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" + IDS_2056 "86Boxでは、使用可能なROMイメージが見つかりませんでした。\n\nROMセットをダウンロードして、《roms》ディレクトリに解凍してください。" + IDS_2057 "(空)" + IDS_2058 "ZIPイメージ (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0すべてのファイル (*.*)\0*.*\0" + IDS_2059 "高速" + IDS_2060 "オン" + IDS_2061 "オフ" + IDS_2062 "すべてのイメージ (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0基本的なセクターイメージ (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0面イメージ (*.86F)\0*.86F\0" + IDS_2063 "roms/machinesディレクトリにROMがないため、マシン《%hs》は使用できません。使用可能なマシンに切り替えます。" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2064 "roms/videoディレクトリにROMがないため、ビデオカード《%hs》は使用できません。使用可能なビデオカードに切り替えます。" + IDS_2065 "マシン" + IDS_2066 "画面表示" + IDS_2067 "入力デバイス" + IDS_2068 "サウンド" + IDS_2069 "ネットワーク" + IDS_2070 "ポート (COMトLPT)" + IDS_2071 "ストレージコントローラ" + IDS_2072 "ハードディスク" + IDS_2073 "フロッピートCD-ROMドライブ" + IDS_2074 "その他のリムーバブルデバイス" + IDS_2075 "その他の周辺機器" + IDS_2076 "面イメージ (*.86F)\0*.86F\0" + IDS_2077 "クリックするとマウスを直接入力します" + IDS_2078 "F12+F8キーでマウスの直接入力を解除します" + IDS_2079 "F12+F8キーまたは中クリックでマウスの直接入力を解除します" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2080 "FluidSynthが初期化できません" + IDS_2081 "バス" + IDS_2082 "ファイル" + IDS_2083 "C" + IDS_2084 "H" + IDS_2085 "S" + IDS_2086 "MB" + IDS_2087 "BPBをチェック" + IDS_2088 "KB" + IDS_2089 "ビデオレンダラーが初期化できません。" + IDS_2090 "既定値" + IDS_2091 "%iつの待機状態" + IDS_2092 "形式" + IDS_2093 "PCapのセットアップに失敗しました" + IDS_2094 "PCapデバイスがありません" + IDS_2095 "不正なPCapデバイスです" + IDS_2096 "標準的な2ボタンのジョイスティック" + IDS_2097 "標準的な4ボタンのジョイスティック" + IDS_2098 "標準的な6ボタンのジョイスティック" + IDS_2099 "標準的な8ボタンのジョイスティック" + IDS_2100 "CH Flightstick Pro" + IDS_2101 "Microsoft SideWinder Pad" + IDS_2102 "Thrustmasterフライトコントロールシステム" + IDS_2103 "なし" + IDS_2104 "キーボードアクセラレーターを読み込めません。" + IDS_2105 "Raw入力が登録できません。" + IDS_2106 "%u" + IDS_2107 "%u MB (CHS: %i, %i, %i)" + IDS_2108 "フロッピー %i (%s): %ls" + IDS_2109 "すべてのイメージ (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0先行のセクターイメージ (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本的なセクターイメージ (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0フラックスイメージ (*.FDI)\0*.FDI\0面イメージ (*.86F;*.MFM)\0*.86F;*.MFM\0すべてのファイル (*.*)\0*.*\0" + IDS_2110 "FreeTypeが初期化できません" + IDS_2111 "SDLが初期化できません, SDL2.dllが必要です" + IDS_2112 "エミュレートされたマシンが再起動しますか?" + IDS_2113 "86Boxを終了しますか?" + IDS_2114 "Ghostscriptが初期化できません" + IDS_2115 "光磁気 %i (%ls): %ls" + IDS_2116 "光磁気イメージ (*.IM?;*.MDI)\0*.IM?;*.MDI\0すべてのファイル (*.*)\0*.*\0" + IDS_2117 "86Boxへようこそ!" + IDS_2118 "内部のコントローラー" + IDS_2119 "終了" + IDS_2120 "ROMが見つかりません" + IDS_2121 "設定を保存しますか?" + IDS_2122 "これにより、エミュレートされたマシンが再起動されます。" + IDS_2123 "保存" + IDS_2124 "86Boxについて" + IDS_2125 "86Box v" EMU_VERSION + + IDS_2126 "古いコンピュータのエミュレータ\n\n著者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nGNU General Public License version 2以降でリリースされています。詳しくは LICENSE をご覧ください。" + IDS_2127 "OK" + IDS_2128 "ハードウェアが利用できない" +#ifdef _WIN32 +#define LIB_NAME_PCAP "WinPcap" +#else +#define LIB_NAME_PCAP "libpcap" +#endif + IDS_2129 LIB_NAME_PCAP "がインストールされていて、" LIB_NAME_PCAP "に対応したネットワークに接続されていることを確認してください。" + IDS_2130 "不正なコンフィギュレーションです" +#ifdef _WIN32 +#define LIB_NAME_FREETYPE "freetype.dll" +#else +#define LIB_NAME_FREETYPE "libfreetype" +#endif + IDS_2131 "ESC/Pプリンタのエミュレーションには" LIB_NAME_FREETYPE "が必要です。" +#ifdef _WIN32 +#define LIB_NAME_GS "gsdll32.dll" +#else +#define LIB_NAME_GS "libgs" +#endif + IDS_2132 LIB_NAME_GS "は、PostScriptファイルのPDFに自動的の切り替えのために所要です。\n\n汎用PostScriptプリンターに送った任意のドクメントは、PostScript (.ps)ファイルとして保存されます。" +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#endif + IDS_2133 "FluidSynthのMIDI出力には" LIB_NAME_FLUIDSYNTH "が必要です。" + IDS_2134 "フルスクリーンモードに移行する" + IDS_2135 "このメッセージを二度と表示しない" + IDS_2136 "終了しない" + IDS_2137 "リセット" + IDS_2138 "リセットしない" + IDS_2139 "光磁気イメージ (*.IM?;*.MDI)\0*.IM?;*.MDI\0すべてのファイル (*.*)\0*.*\0" + IDS_2140 "CD-ROMイメージ (*.ISO;*.CUE)\0*.ISO;*.CUE\0すべてのファイル (*.*)\0*.*\0" + IDS_2141 "%hs デバイスの設定" + IDS_2142 "モニターのスリープモード" + IDS_2143 "OpenGLシェーダー (*.GLSL)\0*.GLSL\0すべてのファイル (*.*)\0*.*\0" + IDS_2144 "OpenGLの設定" + IDS_2145 "サポートされていない設定を読み込んでいます" + IDS_2146 "選ばれたマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは使用しないです。\n\nこれがあれば、選ばれたマシンと互換性のないCPUを選ばれることができます。でも、マシンのBIOSまたはその他のソフトウエアとの非互換性がありますことができます。\n\nこの設定を使用することにが公式サポートがないで、すべての提出されたバグレポートは、は無効として閉じられる可能性があります。" + IDS_2147 "つづく" + IDS_2148 "カセット: %s" + IDS_2149 "カセットイメージ (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0すべてのファイル (*.*)\0*.*\0" + IDS_2150 "カートリッジ %i: %ls" + IDS_2151 "カートリッジイメージ (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0すべてのファイル (*.*)\0*.*\0" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_4096 "ハードディスク (%s)" + IDS_4097 "%01i:%01i" + IDS_4098 "%01i" + IDS_4099 "MFM/RLLやESDIのCD-ROMドライブは存在しない" + IDS_4100 "カスタム..." + IDS_4101 "カスタム(大)..." + IDS_4102 "新規のディスクを追加" + IDS_4103 "既定のディスクを追加" + IDS_4104 "HDIのディスクイメージは4GB以上にはできません。" + IDS_4105 "ディスクイメージは127GB以上にはできません。" + IDS_4106 "ハードディスクイメージ (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0すべてのファイル (*.*)\0*.*\0" + IDS_4107 "ファイルの読み込みができません" + IDS_4108 "ファイルの書き込みができません" + IDS_4109 "512バイト以外のセクターサイズを持ったHDIとHDX形式のイメージはサポートしません。" + IDS_4110 "USBはまだサポートしません" + IDS_4111 "ディスクイメージファイルが既に存在する" + IDS_4112 "有効なファイル名を指定してください。" + IDS_4113 "ディスクイメージが作成されました" + IDS_4114 "ファイルが存在し、読み取り可能であることを確認します。" + IDS_4115 "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。" + IDS_4116 "ディスクイメージが大きすぎる" + IDS_4117 "新規ディスクのパーティション設定とフォーマットを必ずしといて下さい。" + IDS_4118 "選択したファイルは上書きされます。使っていいですか?" + IDS_4119 "サポートされていないディスクイメージ" + IDS_4120 "オーバーライト" + IDS_4121 "オーバーライトしない" + IDS_4122 "生のイメージ (.img)" + IDS_4123 "HDIイメージ (.hdi)" + IDS_4124 "HDXイメージ (.hdx)" + IDS_4125 "固定サイズのVHD (.vhd)" + IDS_4126 "ダイナミックサイズのVHD (.vhd)" + IDS_4127 "ディファレンシングのVHD (.vhd)" + IDS_4128 "大きなブロック (2 MB)" + IDS_4129 "小型ブロック (512 KB)" + IDS_4130 "VHDファイル (*.VHD)\0*.VHD\0すべてのファイル (*.*)\0*.*\0" + IDS_4131 "親VHDの選択" + IDS_4132 "親イメージがディファレンシングイメージの作成の後に修正した可能性があります。\n\nイメージファイルが移動またはコピーされたまたはこのディスクを作成したプログラムにバグあり可能性があります。\n\nタイムスタンプを修正します?" + IDS_4133 "親ディスクと子ディスクのタイムスタンプが一致しない" + IDS_4134 "VHD のタイムスタンプを修正できませんでした。" + IDS_4135 "%01i:%02i" + + IDS_4352 "MFM/RLL" + IDS_4353 "XTA" + IDS_4354 "ESDI" + IDS_4355 "IDE" + IDS_4356 "ATAPI" + IDS_4357 "SCSI" + + IDS_4608 "MFM/RLL (%01i:%01i)" + IDS_4609 "XTA (%01i:%01i)" + IDS_4610 "ESDI (%01i:%01i)" + IDS_4611 "IDE (%01i:%01i)" + IDS_4612 "ATAPI (%01i:%01i)" + IDS_4613 "SCSI (%01i:%02i)" + + IDS_5120 "CD-ROM %i (%s): %s" + + IDS_5376 "使用しない" + IDS_5381 "ATAPI" + IDS_5382 "SCSI" + + IDS_5632 "使用しない" + IDS_5637 "ATAPI (%01i:%01i)" + IDS_5638 "SCSI (%01i:%02i)" + + IDS_5888 "160 kB" + IDS_5889 "180 kB" + IDS_5890 "320 kB" + IDS_5891 "360 kB" + IDS_5892 "640 kB" + IDS_5893 "720 kB" + IDS_5894 "1.2 MB" + IDS_5895 "1.25 MB" + IDS_5896 "1.44 MB" + IDS_5897 "DMF (クラスター1024)" + IDS_5898 "DMF (クラスター2048)" + IDS_5899 "2.88 MB" + IDS_5900 "ZIP 100" + IDS_5901 "ZIP 250" + IDS_5902 "3.5"" 128Mb M.O. (ISO 10090)" + IDS_5903 "3.5"" 230Mb M.O. (ISO 13963)" + IDS_5904 "3.5"" 540Mb M.O. (ISO 15498)" + IDS_5905 "3.5"" 640Mb M.O. (ISO 15498)" + IDS_5906 "3.5"" 1.3Gb M.O. (GigaMO)" + IDS_5907 "3.5"" 2.3Gb M.O. (GigaMO 2)" + IDS_5908 "5.25"" 600Mb M.O." + IDS_5909 "5.25"" 650Mb M.O." + IDS_5910 "5.25"" 1Gb M.O." + IDS_5911 "5.25"" 1.3Gb M.O." + + IDS_6144 "規定の回転数" + IDS_6145 "1%低い回転数" + IDS_6146 "1.5%低い回転数" + IDS_6147 "2%低い回転数" + + IDS_7168 "(システム既定値)" +END +#define IDS_LANG_ENUS IDS_7168 + +// English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// diff --git a/src/win/languages/pt-BR.rc b/src/win/languages/pt-BR.rc index 41ef506aa..4bddc26ca 100644 --- a/src/win/languages/pt-BR.rc +++ b/src/win/languages/pt-BR.rc @@ -65,7 +65,6 @@ BEGIN MENUITEM "&Linear", IDM_VID_FILTER_LINEAR END MENUITEM "Escala Hi&DPI", IDM_VID_HIDPI - MENUITEM "&Idioma de exibição...", IDM_VID_PROG_SETT MENUITEM SEPARATOR MENUITEM "&Tela cheia\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN POPUP "Modo de &redimensionamento da tela cheia" @@ -103,7 +102,7 @@ BEGIN MENUITEM "&Configurações...", IDM_CONFIG MENUITEM "&Atualizar ícones da barra de status", IDM_UPDATE_ICONS MENUITEM SEPARATOR - MENUITEM "Alterar o &idioma de exibição...", IDM_VID_PROG_SETT + MENUITEM "Alterar &configurações do programa...", IDM_VID_PROG_SETT # ifdef USE_DISCORD MENUITEM SEPARATOR MENUITEM "Ativar integração com o &Discord", IDM_DISCORD @@ -147,7 +146,7 @@ BEGIN MENUITEM SEPARATOR # endif # ifdef ENABLE_LOG_BREAKPOINT - MENUITEM "&Registro de ponto de parada\tCtrl+F10", IDM_LOG_BREAKPOINT + MENUITEM "&Ponto de parada no registo\tCtrl+F10", IDM_LOG_BREAKPOINT # endif # ifdef ENABLE_VRAM_DUMP MENUITEM "Despejo da RAM de &vídeo\tCtrl+F1", IDM_DUMP_VRAM @@ -275,7 +274,7 @@ END // Dialog // -#define STR_PROG_SETT "Alterar idioma de exibição" +#define STR_PROG_SETT "Configurações do programa" #define STR_SND_GAIN "Ganho de som" #define STR_NEW_FLOPPY "Nova imagem de disquete" #define STR_CONFIG "Configurações do 86Box" @@ -283,9 +282,10 @@ END #define STR_OK "OK" #define STR_CANCEL "Cancelar" -#define STR_GLOBAL "Use estas configurações como &padrões globais" +#define STR_GLOBAL "Usar estas configurações como &padrões globais" #define STR_DEFAULT "&Padrão" #define STR_LANGUAGE "Idioma:" +#define STR_ICONSET "Pacote de ícones:" #define STR_GAIN "Ganho" @@ -296,7 +296,7 @@ END #define STR_WIDTH "Largura:" #define STR_HEIGHT "Altura:" -#define STR_LOCK_TO_SIZE "Trava nesse tamanho" +#define STR_LOCK_TO_SIZE "Travar nesse tamanho" #define STR_MACHINE_TYPE "Tipo de máquina:" #define STR_MACHINE "Máquina:" @@ -307,25 +307,25 @@ END #define STR_WAIT_STATES "Estados de espera:" #define STR_MB "MB" #define STR_MEMORY "Memória:" -#define STR_TIME_SYNC "Sincronização de tempo" +#define STR_TIME_SYNC "Sincronização da hora" #define STR_DISABLED "Desativada" #define STR_ENABLED_LOCAL "Ativada (hora local)" #define STR_ENABLED_UTC "Ativada (UTC)" #define STR_DYNAREC "Recompilador dinâmico" -#define STR_VIDEO "Video:" +#define STR_VIDEO "Vídeo:" #define STR_VOODOO "3DFX Voodoo" -#define STR_MOUSE "Mouse" +#define STR_MOUSE "Mouse:" #define STR_JOYSTICK "Joystick:" #define STR_JOY1 "Joystick 1..." #define STR_JOY2 "Joystick 2..." #define STR_JOY3 "Joystick 3..." #define STR_JOY4 "Joystick 4..." -#define STR_SOUND "Place de som:" +#define STR_SOUND "Placa de som:" #define STR_MIDI "Disp. saída MIDI:" -#define STR_MIDI_IN "Disp. enrada MIDI:" +#define STR_MIDI_IN "Disp. entrada MIDI:" #define STR_MPU401 "MPU-401 autônomo" #define STR_SSI "Innovation SSI-2001" #define STR_CMS "CMS / Game Blaster" @@ -362,7 +362,7 @@ END #define STR_NEW "&Novo..." #define STR_EXISTING "&Existente..." #define STR_REMOVE "&Remover" -#define STR_BUS "Barram.:" +#define STR_BUS "Bar.:" #define STR_CHANNEL "Canal:" #define STR_ID "ID:" @@ -372,7 +372,7 @@ END #define STR_CYLS "Cilindros:" #define STR_SIZE_MB "Tamanho (MB):" #define STR_TYPE "Tipo:" -#define STR_IMG_FORMAT "Formato da imagem:" +#define STR_IMG_FORMAT "Formato:" #define STR_BLOCK_SIZE "Tamanho do bloco:" #define STR_FLOPPY_DRIVES "Unidades de disquete:" @@ -393,6 +393,9 @@ END #define STR_BUGGER "Dispositivo ISABugger" #define STR_POSTCARD "Placa de diagnóstico" +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + #include "dialogs.rc" ///////////////////////////////////////////////////////////////////////////// @@ -406,7 +409,7 @@ BEGIN IDS_2049 "Erro" IDS_2050 "Erro fatal" IDS_2051 "" - IDS_2052 "Use CTRL+ALT+PAGE DOWN para retornar ao janela" + IDS_2052 "Use CTRL+ALT+PAGE DOWN para retornar ao modo janela" IDS_2053 "Velocidade" IDS_2054 "ZIP %03i %i (%s): %ls" IDS_2055 "Imagens ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" @@ -451,7 +454,7 @@ BEGIN IDS_2086 "MB" IDS_2087 "Verificar BPB" IDS_2088 "KB" - IDS_2089 "Não conseguiu inicializar o renderizador de vídeo." + IDS_2089 "Não foi possível inicializar o renderizador de vídeo." IDS_2090 "Padrão" IDS_2091 "%i estado(s) de espera" IDS_2092 "Tipo" @@ -477,7 +480,7 @@ BEGIN IDS_2112 "Tem certeza de que deseja reiniciar completamente a máquina emulada?" IDS_2113 "Tem certeza de que deseja sair do 86Box?" IDS_2114 "Não é possível inicializar o Ghostscript" - IDS_2115 "MO %i (%ls): %ls" + IDS_2115 "Magneto-óptico %i (%ls): %ls" IDS_2116 "Imagens magneto-ópticas (*.IM?;*.MDI)\0*.IM?;*.MDI\0Todos os arquivos (*.*)\0*.*\0" IDS_2117 "Bem-vindo ao 86Box!" IDS_2118 "Controle interno" @@ -488,7 +491,8 @@ BEGIN IDS_2123 "Salvar" IDS_2124 "Sobre o 86Box" IDS_2125 "86Box versão" EMU_VERSION - IDS_2126 "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, e outros.\n\nTraduzido por: Altieres Lima da Silva\n\nLançado sob a Licença Pública Geral GNU versão 2 ou posterior. Veja o arquivo LICENSE para mais informações." + + IDS_2126 "Um emulador de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, e outros.\n\nTraduzido por: Altieres Lima da Silva\n\nLançado sob a Licença Pública Geral GNU versão 2 ou posterior. Veja o arquivo LICENSE para mais informações." IDS_2127 "OK" IDS_2128 "Hardware não disponível" #ifdef _WIN32 @@ -496,7 +500,7 @@ BEGIN #else #define LIB_NAME_PCAP "libpcap" #endif - IDS_2129 "Certifique-se de que " LIB_NAME_PCAP " esteja instalado e que você tenha uma " LIB_NAME_PCAP " -conexão de rede compatível." + IDS_2129 "Certifique-se de que " LIB_NAME_PCAP " esteja instalado e que você tenha uma conexão de rede compatível com " LIB_NAME_PCAP "." IDS_2130 "Configuração inválida" #ifdef _WIN32 #define LIB_NAME_FREETYPE "freetype.dll" diff --git a/src/win/languages/pt-PT.rc b/src/win/languages/pt-PT.rc index a79644b09..171e37d76 100644 --- a/src/win/languages/pt-PT.rc +++ b/src/win/languages/pt-PT.rc @@ -15,7 +15,7 @@ LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE MainMenu MENU DISCARDABLE BEGIN - POPUP "&Acção" + POPUP "&Ação" BEGIN MENUITEM "&Teclado requere captura", IDM_ACTION_KBD_REQ_CAPTURE MENUITEM "&CTRL direito é ALT esquerdo",IDM_ACTION_RCTRL_IS_LALT @@ -65,10 +65,10 @@ BEGIN END MENUITEM "Escala Hi&DPI", IDM_VID_HIDPI MENUITEM SEPARATOR - MENUITEM "&Tela cheia\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN - POPUP "Mode &de estiramento em tela cheia" + MENUITEM "E&crã cheio\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN + POPUP "Modo &de estiramento em ecrã cheio" BEGIN - MENUITEM "&Estiramento em tela cheia", IDM_VID_FS_FULL + MENUITEM "&Estiramento em ecrã cheio", IDM_VID_FS_FULL MENUITEM "&4:3", IDM_VID_FS_43 MENUITEM "Pixels &quadrados (Manter rácio)", IDM_VID_FS_KEEPRATIO MENUITEM "Escala &inteira", IDM_VID_FS_INT @@ -88,64 +88,64 @@ BEGIN BEGIN MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601 MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709 - MENUITEM "&Média", IDM_VID_GRAYCT_AVE + MENUITEM "&Media", IDM_VID_GRAYCT_AVE END END MENUITEM SEPARATOR MENUITEM "Overscan de CGA/PCjr/Tandy/E&GA/(S)VGA", IDM_VID_OVERSCAN - MENUITEM "Mudar &contraste para ecrão monocromático", IDM_VID_CGACON + MENUITEM "Mudar &contraste para ecrã monocromático", IDM_VID_CGACON END - MENUITEM "&Mídia", IDM_MEDIA + MENUITEM "&Media", IDM_MEDIA POPUP "&Ferramentas" BEGIN MENUITEM "&Definições...", IDM_CONFIG - MENUITEM "&Actualizar ícones da barra de estado", IDM_UPDATE_ICONS + MENUITEM "&Atualizar ícones da barra de estado", IDM_UPDATE_ICONS MENUITEM SEPARATOR - MENUITEM "Mudar idioma de a&presentação...", IDM_VID_PROG_SETT + MENUITEM "Change program &settings...", IDM_VID_PROG_SETT # ifdef USE_DISCORD MENUITEM SEPARATOR - MENUITEM "Activar integração de &Discord", IDM_DISCORD + MENUITEM "Ativar integração com &Discord", IDM_DISCORD # endif MENUITEM SEPARATOR - MENUITEM "Tirar i&magem de tela\tCtrl+F11", IDM_ACTION_SCREENSHOT + MENUITEM "Gravar imagem de ecrã\tCtrl+F11", IDM_ACTION_SCREENSHOT MENUITEM SEPARATOR MENUITEM "&Ganho de som...", IDM_SND_GAIN #ifdef MTR_ENABLED MENUITEM SEPARATOR - MENUITEM "Iniciar o rasterio\tCtrl+T", IDM_ACTION_BEGIN_TRACE - MENUITEM "Terminar o rasterio\tCtrl+T", IDM_ACTION_END_TRACE + MENUITEM "Iniciar o rastreio\tCtrl+T", IDM_ACTION_BEGIN_TRACE + MENUITEM "Terminar o rastreio\tCtrl+T", IDM_ACTION_END_TRACE #endif END #if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS) POPUP "&Registo" BEGIN # ifdef ENABLE_BUSLOGIC_LOG - MENUITEM "Activar registo BusLogic\tCtrl+F4", IDM_LOG_BUSLOGIC + MENUITEM "Ativar registo BusLogic\tCtrl+F4", IDM_LOG_BUSLOGIC # endif # ifdef ENABLE_CDROM_LOG - MENUITEM "Activar registo CD-ROM\tCtrl+F5", IDM_LOG_CDROM + MENUITEM "Ativar registo do CD-ROM\tCtrl+F5", IDM_LOG_CDROM # endif # ifdef ENABLE_D86F_LOG - MENUITEM "Activar registo de disquetes (86F)\tCtrl+F6", IDM_LOG_D86F + MENUITEM "Ativar registo de disquetes (86F)\tCtrl+F6", IDM_LOG_D86F # endif # ifdef ENABLE_FDC_LOG - MENUITEM "Activar registo do controlar de disquetes\tCtrl+F7", IDM_LOG_FDC + MENUITEM "Ativar registo do controlador de disquetes\tCtrl+F7", IDM_LOG_FDC # endif # ifdef ENABLE_IDE_LOG - MENUITEM "Activar registo IDE\tCtrl+F8", IDM_LOG_IDE + MENUITEM "Ativar registo IDE\tCtrl+F8", IDM_LOG_IDE # endif # ifdef ENABLE_SERIAL_LOG - MENUITEM "Activar registo da porta de série\tCtrl+F3", IDM_LOG_SERIAL + MENUITEM "Ativar registo da porta série\tCtrl+F3", IDM_LOG_SERIAL # endif # ifdef ENABLE_NIC_LOG - MENUITEM "Activar registo de rede\tCtrl+F9", IDM_LOG_NIC + MENUITEM "Ativar registo de rede\tCtrl+F9", IDM_LOG_NIC # endif # ifdef ENABLE_LOG_COMMANDS # ifdef ENABLE_LOG_TOGGLES MENUITEM SEPARATOR # endif # ifdef ENABLE_LOG_BREAKPOINT - MENUITEM "&Ponto de parada no registo\tCtrl+F10", IDM_LOG_BREAKPOINT + MENUITEM "&Ponto de paragem no registo\tCtrl+F10", IDM_LOG_BREAKPOINT # endif # ifdef ENABLE_VRAM_DUMP MENUITEM "Despejo de RAM &vídeo\tCtrl+F1", IDM_DUMP_VRAM @@ -156,7 +156,7 @@ BEGIN POPUP "&Ajuda" BEGIN MENUITEM "&Documentação...", IDM_DOCS - MENUITEM "&Acerca de 86Box...", IDM_ABOUT + MENUITEM "&Acerca do 86Box...", IDM_ABOUT END END @@ -172,14 +172,14 @@ BEGIN MENUITEM "&Nova imagem...", IDM_CASSETTE_IMAGE_NEW MENUITEM SEPARATOR MENUITEM "Imagem &existente...", IDM_CASSETTE_IMAGE_EXISTING - MENUITEM "Imagem existente (&Protecção contra a escritura)...", IDM_CASSETTE_IMAGE_EXISTING_WP + MENUITEM "Imagem existente (&Proteção contra escrita)...", IDM_CASSETTE_IMAGE_EXISTING_WP MENUITEM SEPARATOR MENUITEM "&Gravar", IDM_CASSETTE_RECORD MENUITEM "&Reproduzir", IDM_CASSETTE_PLAY MENUITEM "Re&bobinar para o início", IDM_CASSETTE_REWIND - MENUITEM "&Avanço rápido para a fim", IDM_CASSETTE_FAST_FORWARD + MENUITEM "&Avanço rápido para o fim", IDM_CASSETTE_FAST_FORWARD MENUITEM SEPARATOR - MENUITEM "E&jectar", IDM_CASSETTE_EJECT + MENUITEM "E&jetar", IDM_CASSETTE_EJECT END END @@ -189,7 +189,7 @@ BEGIN BEGIN MENUITEM "&Imagem...", IDM_CARTRIDGE_IMAGE MENUITEM SEPARATOR - MENUITEM "E&jectar", IDM_CARTRIDGE_EJECT + MENUITEM "E&jetar", IDM_CARTRIDGE_EJECT END END @@ -200,11 +200,11 @@ BEGIN MENUITEM "&Nova imagem...", IDM_FLOPPY_IMAGE_NEW MENUITEM SEPARATOR MENUITEM "Imagem &existente...", IDM_FLOPPY_IMAGE_EXISTING - MENUITEM "Imagem existente (&Protecção contra a escritura)...", IDM_FLOPPY_IMAGE_EXISTING_WP + MENUITEM "Imagem existente (&Proteção contra escrita)...", IDM_FLOPPY_IMAGE_EXISTING_WP MENUITEM SEPARATOR MENUITEM "E&xportar para 86F...", IDM_FLOPPY_EXPORT_TO_86F MENUITEM SEPARATOR - MENUITEM "E&jectar", IDM_FLOPPY_EJECT + MENUITEM "E&jetar", IDM_FLOPPY_EJECT END END @@ -214,7 +214,7 @@ BEGIN BEGIN MENUITEM "&Mute", IDM_CDROM_MUTE MENUITEM SEPARATOR - MENUITEM "E&mpty", IDM_CDROM_EMPTY + MENUITEM "&CDROM vazio", IDM_CDROM_EMPTY MENUITEM "&Recarregar imagem anterior", IDM_CDROM_RELOAD MENUITEM SEPARATOR MENUITEM "&Imagem", IDM_CDROM_IMAGE @@ -228,9 +228,9 @@ BEGIN MENUITEM "&Nova imagem...", IDM_ZIP_IMAGE_NEW MENUITEM SEPARATOR MENUITEM "Imagem &existente...", IDM_ZIP_IMAGE_EXISTING - MENUITEM "Imagem existente (&Protecção contra a escritura)...", IDM_ZIP_IMAGE_EXISTING_WP + MENUITEM "Imagem existente (&Proteção contra escrita)...", IDM_ZIP_IMAGE_EXISTING_WP MENUITEM SEPARATOR - MENUITEM "E&jectar", IDM_ZIP_EJECT + MENUITEM "E&jetar", IDM_ZIP_EJECT MENUITEM "&Recarregar imagem anterior", IDM_ZIP_RELOAD END END @@ -242,9 +242,9 @@ BEGIN MENUITEM "&Nova imagem...", IDM_MO_IMAGE_NEW MENUITEM SEPARATOR MENUITEM "Imagem &existente...", IDM_MO_IMAGE_EXISTING - MENUITEM "Imagem existente (&Protecção contra a escritura)...", IDM_MO_IMAGE_EXISTING_WP + MENUITEM "Imagem existente (&Proteção contra escrita)...", IDM_MO_IMAGE_EXISTING_WP MENUITEM SEPARATOR - MENUITEM "E&jectar", IDM_MO_EJECT + MENUITEM "E&jetar", IDM_MO_EJECT MENUITEM "&Recarregar imagem anterior", IDM_MO_RELOAD END END @@ -262,7 +262,7 @@ BEGIN MENUITEM "&75 q/s", IDM_VID_GL_FPS_75 END MENUITEM "&VSync", IDM_VID_GL_VSYNC - MENUITEM "&Seleccionar shader...", IDM_VID_GL_SHADER + MENUITEM "&Selecionar shader...", IDM_VID_GL_SHADER MENUITEM "&Remover shader", IDM_VID_GL_NOSHADER END #endif @@ -273,17 +273,18 @@ END // Dialog // -#define STR_PROG_SETT "Mudar idioma de apresentação" -#define STR_SND_GAIN "Ganha de som" +#define STR_PROG_SETT "Program Settings" +#define STR_SND_GAIN "Ganho de som" #define STR_NEW_FLOPPY "Nova imagem" -#define STR_CONFIG "Definições de 86Box" -#define STR_SPECIFY_DIM "Especifiar dimensões da janela principal" +#define STR_CONFIG "Definições do 86Box" +#define STR_SPECIFY_DIM "Especificar dimensões da janela principal" #define STR_OK "OK" #define STR_CANCEL "Cancelar" #define STR_GLOBAL "Guardar estas definições como padrões &globais" #define STR_DEFAULT "&Padrão" #define STR_LANGUAGE "Idioma:" +#define STR_ICONSET "Pacote de ícones:" #define STR_GAIN "Ganho" @@ -294,7 +295,7 @@ END #define STR_WIDTH "Largura:" #define STR_HEIGHT "Altura:" -#define STR_LOCK_TO_SIZE "Fechar para este tamanho" +#define STR_LOCK_TO_SIZE "Fixar neste tamanho" #define STR_MACHINE_TYPE "Tipo de máquina:" #define STR_MACHINE "Máquina:" @@ -306,9 +307,9 @@ END #define STR_MB "MB" #define STR_MEMORY "Memória:" #define STR_TIME_SYNC "Sincronização da hora" -#define STR_DISABLED "Desactivada" -#define STR_ENABLED_LOCAL "Activada (ora local)" -#define STR_ENABLED_UTC "Activada (UTC)" +#define STR_DISABLED "Desativada" +#define STR_ENABLED_LOCAL "Ativada (hora local)" +#define STR_ENABLED_UTC "Ativada (UTC)" #define STR_DYNAREC "Recompilador dinâmico" #define STR_VIDEO "Vídeo:" @@ -391,6 +392,9 @@ END #define STR_BUGGER "Dispositivo ISABugger" #define STR_POSTCARD "Placa POST" +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + #include "dialogs.rc" ///////////////////////////////////////////////////////////////////////////// @@ -404,23 +408,23 @@ BEGIN IDS_2049 "Erro" IDS_2050 "Erro fatal" IDS_2051 "" - IDS_2052 "Pressione CTRL+ALT+PAGE DOWN para voltar no modo de janela." + IDS_2052 "Pressione CTRL+ALT+PAGE DOWN para voltar ao modo de janela." IDS_2053 "Velocidade" IDS_2054 "ZIP %03i %i (%s): %ls" IDS_2055 "Imagens ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" - IDS_2056 "86Box não conseguiu encotnrar nenhuma imagem ROM utilizável.\n\nPor favor, descarregue um pacote ROM e extraí-lo na pasta ""roms""." + IDS_2056 "O 86Box não conseguiu encontrar nenhuma imagem ROM utilizável.\n\nPor favor, vá a href=""https://github.com/86Box/roms/releases/latest"">descarregue um pacote ROM e instale-o na pasta ""roms""." IDS_2057 "(empty)" IDS_2058 "Imagens ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Todos os ficheiros (*.*)\0*.*\0" IDS_2059 "Turbo" - IDS_2060 "Activado" - IDS_2061 "Desactivado" + IDS_2060 "Ativado" + IDS_2061 "Desativado" IDS_2062 "Todas as imagens (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Imagens básicas de sector (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Imagens de superfície (*.86F)\0*.86F\0" - IDS_2063 "A máquina ""%hs"" não é disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." + IDS_2063 "A máquina ""%hs"" não está disponível devido à falta de ROMs na pasta roms/machines. A mudar para uma máquina disponível." END STRINGTABLE DISCARDABLE BEGIN - IDS_2064 "A placa vídeo ""%hs"" não é disponível devido à falta de ROMs na pasta roms/video. A mudar para uma placa vídeo disponível." + IDS_2064 "A placa vídeo ""%hs"" não está disponível devido à falta de ROMs na pasta roms/video. A mudar para uma placa vídeo disponível." IDS_2065 "Máquina" IDS_2066 "Apresentação" IDS_2067 "Dispositivos de entrada" @@ -454,40 +458,40 @@ BEGIN IDS_2091 "%i estado(s) de espera" IDS_2092 "Tipo" IDS_2093 "Falha na configuração de PCap" - IDS_2094 "Não foi encontrado algum dispositivo PCap" + IDS_2094 "Não foi encontrado um dispositivo PCap" IDS_2095 "Dispositivo PCap inválido" - IDS_2096 "Joystick(s) estándar a 2 botões" - IDS_2097 "Joystick(s) estándar a 4 botões" - IDS_2098 "Joystick(s) estándar a 6 botões" - IDS_2099 "Joystick(s) estándar a 8 botões" + IDS_2096 "Joystick(s) standard de 2 botões" + IDS_2097 "Joystick(s) standard de 4 botões" + IDS_2098 "Joystick(s) standard de 6 botões" + IDS_2099 "Joystick(s) standard de 8 botões" IDS_2100 "CH Flightstick Pro" IDS_2101 "Microsoft SideWinder Pad" IDS_2102 "Thrustmaster Flight Control System" IDS_2103 "Nenhum" - IDS_2104 "Não foi possível inicializar os acceleradores de teclado." + IDS_2104 "Não foi possível inicializar os aceleradores de teclado." IDS_2105 "Não foi possível registar a entrada bruta." IDS_2106 "%u" IDS_2107 "%u MB (CCS: %i, %i, %i)" IDS_2108 "Disquete %i (%s): %ls" IDS_2109 "Todas as imagens (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Imagens avançadas de sector (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Imagens básicas de sector (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Imagens de fluxo (*.FDI)\0*.FDI\0Imagens de superfície (*.86F;*.MFM)\0*.86F;*.MFM\0Todos os ficheiros (*.*)\0*.*\0" IDS_2110 "Não foi possível inicializar o FreeType" - IDS_2111 "Não foi possível inicializar o SDL, SDL2.dll é necessário" - IDS_2112 "Tem certaza de que quer um reinicio completeo da máquina emulada?" - IDS_2113 "Tem certeza de que quer sair de 86Box?" + IDS_2111 "Não foi possível inicializar o SDL. O ficheiro SDL2.dll é necessário!" + IDS_2112 "Tem a certeza de que quer um reinício completo da máquina emulada?" + IDS_2113 "Tem a certeza de que quer sair do 86Box?" IDS_2114 "Não foi possível inicializar o Ghostscript" IDS_2115 "Magneto-óptico %i (%ls): %ls" IDS_2116 "Imagens magneto-ópticas (*.IM?;*.MDI)\0*.IM?;*.MDI\0Todas as imagens (*.*)\0*.*\0" - IDS_2117 "Bem-vindoes em 86Box!" + IDS_2117 "Bem-vindos ao 86Box!" IDS_2118 "Controlador interno" IDS_2119 "Sair" - IDS_2120 "Não foi encontrado nenhum ROMs" + IDS_2120 "Não foi encontrada nenhuma ROM" IDS_2121 "Deseja guardar as definições?" - IDS_2122 "Esto irá a causar um reinicio completo da máquina emulada." + IDS_2122 "Isto irá causar um reinício completo da máquina emulada." IDS_2123 "Guardar" - IDS_2124 "Acerca de 86Box" + IDS_2124 "Acerca do 86Box" IDS_2125 "86Box v" EMU_VERSION - IDS_2126 "Em emulator de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, MoochMcGee, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nLibertado sob a licença GNU General Public License versão 2 ou posterior. Veja o ficheiro LICENSE para mais informações." + IDS_2126 "Em emulator de computadores antigos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nUsado sob a licença GNU General Public License versão 2 ou posterior. Veja o ficheiro LICENSE para mais informações." IDS_2127 "OK" IDS_2128 "Hardware não disponível" #ifdef _WIN32 @@ -495,27 +499,27 @@ BEGIN #else #define LIB_NAME_PCAP "libpcap" #endif - IDS_2129 "Certifique-se de que a biblioteca " LIB_NAME_PCAP " è instalada e que está a utilizar uma ligação de rede compatível com a biblioteca " LIB_NAME_PCAP "." + IDS_2129 "Certifique-se de que a biblioteca " LIB_NAME_PCAP " está instalada e de que está a utilizar uma ligação de rede compatível com a biblioteca " LIB_NAME_PCAP "." IDS_2130 "Configuração inválida" #ifdef _WIN32 #define LIB_NAME_FREETYPE "freetype.dll" #else #define LIB_NAME_FREETYPE "libfreetype" #endif - IDS_2131 LIB_NAME_FREETYPE " is required for ESC/P printer emulation." + IDS_2131 LIB_NAME_FREETYPE " é requerida para a emulação de impressora ESC/P." #ifdef _WIN32 #define LIB_NAME_GS "gsdll32.dll" #else #define LIB_NAME_GS "libgs" #endif - IDS_2132 LIB_NAME_GS " 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." + IDS_2132 LIB_NAME_GS " é requerido para a conversão automática de ficheiros PostScript para ficheiros PDF.\n\nQualquer documento enviado para a impressora PostScript genérica será gravado como um ficheiro PostScript (.ps)." #ifdef _WIN32 #define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" #else #define LIB_NAME_FLUIDSYNTH "libfluidsynth" #endif - IDS_2133 LIB_NAME_FLUIDSYNTH " è necessário para a saída MIDI FluidSynth MIDI." - IDS_2134 "A entrar no modo da tela cheia" + IDS_2133 LIB_NAME_FLUIDSYNTH " é necessário para a saída MIDI FluidSynth MIDI." + IDS_2134 "A entrar no modo de ecrã cheio" IDS_2135 "Não mostrar mais esta mensagem" IDS_2136 "Não sair" IDS_2137 "Reiniciar" @@ -526,8 +530,8 @@ BEGIN IDS_2142 "Ecrã em modo de sono" IDS_2143 "Shaders OpenGL (*.GLSL)\0*.GLSL\0Todos os ficheiros (*.*)\0*.*\0" IDS_2144 "Opções de OpenGL" - IDS_2145 "Está a carregar uma configuração sem suporte" - IDS_2146 "A filtragem do tipo de CPU baseada na máquina escolhida está desactivada para esta máquina emulada.\n\nIsto torna possíve escolher um CPU que de outra formar não é compatível com a máquina escolhida. No entanto, pode não ser compatível com o BIOS da máquina ou outros programas.\n\nA activação desta definição não tem suporte oficial e qualquer relatório de errors pode ser fechado como inválido." + IDS_2145 "Está a carregar uma configuração sem suporte!" + IDS_2146 "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." IDS_2147 "Continuar" IDS_2148 "Cassete: %s" IDS_2149 "Imagens de cassete (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Todos os ficheiros (*.*)\0*.*\0" @@ -540,29 +544,29 @@ BEGIN IDS_4096 "Disco rígido (%s)" IDS_4097 "%01i:%01i" IDS_4098 "%01i" - IDS_4099 "As unidades CD-ROM com barramento MFM/RLL ou ESDI nunca existiram" + IDS_4099 "Unidades CD-ROM com barramento MFM/RLL ou ESDI nunca existiram!" IDS_4100 "Personalizado..." - IDS_4101 "Persoanlizado (grande)..." + IDS_4101 "Personalizado (grande)..." IDS_4102 "Adicionar novo disco rígido" IDS_4103 "Adicionar disco rígido existente" - IDS_4104 "As imagens de disco HDI não podem ser mais grandes de 4 GB." - IDS_4105 "As imagens de disco não podem ser mais grandes de 127 GB." + IDS_4104 "As imagens de disco HDI não podem ter mais de 4 GB." + IDS_4105 "As imagens de disco não podem ter mais de 127 GB." IDS_4106 "Imagens de disco rígido (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Todos os ficheiros (*.*)\0*.*\0" IDS_4107 "Não foi possível ler o ficheiro" - IDS_4108 "Nào foi possível escrever o ficheiro" - IDS_4109 "As imagens HDI ou HDX com um tamanho de sector não 512 não têm suporte." + IDS_4108 "Não foi possível escrever o ficheiro" + IDS_4109 "Imagens HDI ou HDX com um tamanho de sector diferente de 512 não são suportadas." IDS_4110 "O barramento USB ainda não tem suporte" IDS_4111 "A imagem de disco já existe" - IDS_4112 "Por favor, especifique um nome de ficheiro inválido." + IDS_4112 "Por favor, especifique um nome de ficheiro válido." IDS_4113 "Imagem de disco criada" IDS_4114 "Certifique-se de que o ficheiro existe e é legível." - IDS_4115 "Certifique-se de que o ficheiro está a ser guarado numa pasta escrevível." + IDS_4115 "Certifique-se de que o ficheiro está a ser guardado numa pasta editável." IDS_4116 "Imagem de disco muito grande" - IDS_4117 "Lembre de particionar e formatar o novo disco criado." - IDS_4118 "O ficheiro seleccionado será sobrescrevido. Tem certeza de que quiser utilizá-lo?" + IDS_4117 "Lembre-se de particionar e formatar o novo disco criado." + IDS_4118 "O ficheiro selecionado será sobrescrito. Tem a certeza de que quer utilizá-lo?" IDS_4119 "Imagem de disco sem suporte" IDS_4120 "Sobrescrever" - IDS_4121 "Não sobrescerever" + IDS_4121 "Não sobrescrever" IDS_4122 "Imagem bruta (.img)" IDS_4123 "Imagem HDI (.hdi)" IDS_4124 "Imagem HDX (.hdx)" @@ -573,8 +577,8 @@ BEGIN IDS_4129 "Blocos pequenos (512 KB)" IDS_4130 "Ficheiros VHD (*.VHD)\0*.VHD\0Todos os ficheiros (*.*)\0*.*\0" IDS_4131 "Seleccione o VHD pai" - IDS_4132 "Esto 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 cause de um erro no programa que criou este disco.\n\nQuer corrigir os carimbos de data/hora?" - IDS_4133 "Os carimbos de data/hora de pai e criança não correspondem" + IDS_4132 "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?" + IDS_4133 "Os carimbos de data/hora dos discos pai e filho não correspondem!" IDS_4134 "Não foi possível corrigir o carimbo de data/hora do VHD." IDS_4135 "%01i:%02i" @@ -594,11 +598,11 @@ BEGIN IDS_5120 "CD-ROM %i (%s): %s" - IDS_5376 "Desactivado" + IDS_5376 "Desativado" IDS_5381 "ATAPI" IDS_5382 "SCSI" - IDS_5632 "Desactivado" + IDS_5632 "Desativado" IDS_5637 "ATAPI (%01i:%01i)" IDS_5638 "SCSI (%01i:%02i)" @@ -627,12 +631,12 @@ BEGIN IDS_5910 "5.25"" 1Gb M.O." IDS_5911 "5.25"" 1.3Gb M.O." - IDS_6144 "RPM perfecto" - IDS_6145 "RPM 1%% sob a perfecção" - IDS_6146 "RPM 1.5%% sob a perfecção" - IDS_6147 "RPM 2%% sob a perfecção" + IDS_6144 "RPM perfeito" + IDS_6145 "RPM 1%% abaixo do RPM perfeito" + IDS_6146 "RPM 1.5%% abaixo do RPM perfeito" + IDS_6147 "RPM 2%% abaixo do RPM perfeito" - IDS_7168 "(Padrão de sistema)" + IDS_7168 "(Padrão do sistema)" END #define IDS_LANG_ENUS IDS_7168 diff --git a/src/win/languages/sl-SI.rc b/src/win/languages/sl-SI.rc new file mode 100644 index 000000000..68aeaf46c --- /dev/null +++ b/src/win/languages/sl-SI.rc @@ -0,0 +1,644 @@ +//////////////////////////////////////////////////////////////////////////// +// Slovenian resources + +#ifdef _WIN32 +LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT +#pragma code_page(65001) +#endif //_WIN32 + +#define AUTHORS + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MainMenu MENU DISCARDABLE +BEGIN + POPUP "&Dejanja" + BEGIN + MENUITEM "&Tipkovnica potrebuje zajem", IDM_ACTION_KBD_REQ_CAPTURE + MENUITEM "&Desni CTRL je levi ALT", IDM_ACTION_RCTRL_IS_LALT + MENUITEM SEPARATOR + MENUITEM "&Ponovni zagon...", IDM_ACTION_HRESET + MENUITEM "&Ctrl+Alt+Del\tCtrl+F12", IDM_ACTION_RESET_CAD + MENUITEM SEPARATOR + MENUITEM "Ctrl+Alt+&Esc", IDM_ACTION_CTRL_ALT_ESC + MENUITEM SEPARATOR + MENUITEM "&Premor", IDM_ACTION_PAUSE + MENUITEM SEPARATOR + MENUITEM "Iz&hod...", IDM_ACTION_EXIT + END + POPUP "&Pogled" + BEGIN + MENUITEM "&Skrij statusno vrstico", IDM_VID_HIDE_STATUS_BAR + MENUITEM SEPARATOR + MENUITEM "S&premenljiva velikost okna", IDM_VID_RESIZE + MENUITEM "&Zapomni si velikost in položaj", IDM_VID_REMEMBER + MENUITEM SEPARATOR + POPUP "&Upodabljanje" + BEGIN + MENUITEM "&SDL (programsko)", IDM_VID_SDL_SW + MENUITEM "SDL (s&trojno)", IDM_VID_SDL_HW + MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL +#if defined(DEV_BRANCH) && defined(USE_OPENGL) + MENUITEM "Open&GL (3.3 Core)", IDM_VID_OPENGL_CORE +#endif +#ifdef USE_VNC + MENUITEM "&VNC", IDM_VID_VNC +#endif + END + MENUITEM SEPARATOR + MENUITEM "&Določi velikost...", IDM_VID_SPECIFY_DIM + MENUITEM "&Vsili 4:3 razmerje zaslona", IDM_VID_FORCE43 + POPUP "&Faktor velikosti okna" + BEGIN + MENUITEM "&0.5x", IDM_VID_SCALE_1X + MENUITEM "&1x", IDM_VID_SCALE_2X + MENUITEM "1.&5x", IDM_VID_SCALE_3X + MENUITEM "&2x", IDM_VID_SCALE_4X + END + POPUP "&Metoda filtriranja" + BEGIN + MENUITEM "&Najbližja", IDM_VID_FILTER_NEAREST + MENUITEM "&Linearna", IDM_VID_FILTER_LINEAR + END + MENUITEM "&Raztezanje za visok DPI", IDM_VID_HIDPI + MENUITEM SEPARATOR + MENUITEM "&Celozaslonski način\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN + POPUP "&Način celozaslonskega raztezanja" + BEGIN + MENUITEM "&Raztegni na celoten zaslon", IDM_VID_FS_FULL + MENUITEM "&4:3", IDM_VID_FS_43 + MENUITEM "&Kvadratni piksli (ohrani razmerje)", IDM_VID_FS_KEEPRATIO + MENUITEM "&Celoštevilsko raztezanje", IDM_VID_FS_INT + END + POPUP "Nastavitve E&GA/(S)VGA" + BEGIN + MENUITEM "&Obrni barve zaslona VGA", IDM_VID_INVERT + POPUP "&Vrsta zaslona VGA" + BEGIN + MENUITEM "&Barvni RGB", IDM_VID_GRAY_RGB + MENUITEM "&Sivinski RGB", IDM_VID_GRAY_MONO + MENUITEM "&Rumeni zaslon", IDM_VID_GRAY_AMBER + MENUITEM "&Zeleni zaslon", IDM_VID_GRAY_GREEN + MENUITEM "B&eli zaslon", IDM_VID_GRAY_WHITE + END + POPUP "V&rsta pretvorbe sivin" + BEGIN + MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601 + MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709 + MENUITEM "&Povprečje", IDM_VID_GRAYCT_AVE + END + END + MENUITEM SEPARATOR + MENUITEM "&Presežek slike CGA/PCjr/Tandy/EGA/(S)VGA", IDM_VID_OVERSCAN + MENUITEM "&Spremeni contrast za črno-beli zaslon", IDM_VID_CGACON + END + MENUITEM "&Mediji", IDM_MEDIA + POPUP "&Orodja" + BEGIN + MENUITEM "&Nastavitve...", IDM_CONFIG + MENUITEM "&Posodabljaj ikone statusne vrstice", IDM_UPDATE_ICONS + MENUITEM SEPARATOR + MENUITEM "&Spremeni jezik...", IDM_VID_PROG_SETT +# ifdef USE_DISCORD + MENUITEM SEPARATOR + MENUITEM "Omogoči integracijo s programom &Discord", IDM_DISCORD +# endif + MENUITEM SEPARATOR + MENUITEM "&Zajemi posnetek zaslona\tCtrl+F11", IDM_ACTION_SCREENSHOT + MENUITEM SEPARATOR + MENUITEM "&Ojačanje zvoka...", IDM_SND_GAIN +#ifdef MTR_ENABLED + MENUITEM SEPARATOR + MENUITEM "Z&ačni sledenje\tCtrl+T", IDM_ACTION_BEGIN_TRACE + MENUITEM "&Končaj sledenje\tCtrl+T", IDM_ACTION_END_TRACE +#endif + END +#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS) + POPUP "&Beleženje" + BEGIN +# ifdef ENABLE_BUSLOGIC_LOG + MENUITEM "Omogoči beležnje za BusLogic\tCtrl+F4", IDM_LOG_BUSLOGIC +# endif +# ifdef ENABLE_CDROM_LOG + MENUITEM "Omogoči beležnje za CD-ROM\tCtrl+F5", IDM_LOG_CDROM +# endif +# ifdef ENABLE_D86F_LOG + MENUITEM "Omogoči beležnje za diskete (86F)\tCtrl+F6", IDM_LOG_D86F +# endif +# ifdef ENABLE_FDC_LOG + MENUITEM "Omogoči beležnje za disketni krmilnik\tCtrl+F7", IDM_LOG_FDC +# endif +# ifdef ENABLE_IDE_LOG + MENUITEM "Omogoči beležnje za IDE\tCtrl+F8", IDM_LOG_IDE +# endif +# ifdef ENABLE_SERIAL_LOG + MENUITEM "Omogoči beležnje za serijska vrata\tCtrl+F3", IDM_LOG_SERIAL +# endif +# ifdef ENABLE_NIC_LOG + MENUITEM "Omogoči beležnje za omrežje\tCtrl+F9", IDM_LOG_NIC +# endif +# ifdef ENABLE_LOG_COMMANDS +# ifdef ENABLE_LOG_TOGGLES + MENUITEM SEPARATOR +# endif +# ifdef ENABLE_LOG_BREAKPOINT + MENUITEM "&Zabeleži prelomno točko\tCtrl+F10", IDM_LOG_BREAKPOINT +# endif +# ifdef ENABLE_VRAM_DUMP + MENUITEM "&Izvozi pomnilnik zaslona\tCtrl+F1", IDM_DUMP_VRAM +# endif +# endif + END +#endif + POPUP "&Pomoč" + BEGIN + MENUITEM "&Dokumentacija...", IDM_DOCS + MENUITEM "&O programu 86Box...", IDM_ABOUT + END +END + +StatusBarMenu MENU DISCARDABLE +BEGIN + MENUITEM SEPARATOR +END + +CassetteSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nova slika...", IDM_CASSETTE_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Obstoječa slika...", IDM_CASSETTE_IMAGE_EXISTING + MENUITEM "Obstoječa slika (&samo za branje)...", IDM_CASSETTE_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "Snemaj", IDM_CASSETTE_RECORD + MENUITEM "Predvajaj", IDM_CASSETTE_PLAY + MENUITEM "Previj na začetek", IDM_CASSETTE_REWIND + MENUITEM "Preskoči na konec", IDM_CASSETTE_FAST_FORWARD + MENUITEM SEPARATOR + MENUITEM "Izvrzi", IDM_CASSETTE_EJECT + END +END + +CartridgeSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "Slika...", IDM_CARTRIDGE_IMAGE + MENUITEM SEPARATOR + MENUITEM "Izvrzi", IDM_CARTRIDGE_EJECT + END +END + +FloppySubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nova slika...", IDM_FLOPPY_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Obstoječa slika...", IDM_FLOPPY_IMAGE_EXISTING + MENUITEM "Obstoječa slika (&samo za branje)...", IDM_FLOPPY_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "&Izvozi v 86F...", IDM_FLOPPY_EXPORT_TO_86F + MENUITEM SEPARATOR + MENUITEM "I&zvrzi", IDM_FLOPPY_EJECT + END +END + +CdromSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Utišaj", IDM_CDROM_MUTE + MENUITEM SEPARATOR + MENUITEM "&Prazen", IDM_CDROM_EMPTY + MENUITEM "&Naloži zadnjo sliko", IDM_CDROM_RELOAD + MENUITEM SEPARATOR + MENUITEM "&Slika", IDM_CDROM_IMAGE + END +END + +ZIPSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nova slika...", IDM_ZIP_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Obstoječa slika...", IDM_ZIP_IMAGE_EXISTING + MENUITEM "Obstoječa slika (&samo za branje)...", IDM_ZIP_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "I&zvrzi", IDM_ZIP_EJECT + MENUITEM "&Naloži zadnjo sliko", IDM_ZIP_RELOAD + END +END + +MOSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Nova slika...", IDM_MO_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "&Obstoječa slika...", IDM_MO_IMAGE_EXISTING + MENUITEM "Obstoječa slika (&samo za branje)...", IDM_MO_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "I&zvrzi", IDM_MO_EJECT + MENUITEM "&Naloži zadnjo sliko", IDM_MO_RELOAD + END +END + +#if defined(DEV_BRANCH) && defined(USE_OPENGL) +VidGLSubMenu MENU DISCARDABLE +BEGIN + POPUP "&Ciljno št. sličic na sekundo" + BEGIN + MENUITEM "&Sinhroniziraj z videom", IDM_VID_GL_FPS_BLITTER + MENUITEM "&25 fps", IDM_VID_GL_FPS_25 + MENUITEM "&30 fps", IDM_VID_GL_FPS_30 + MENUITEM "&50 fps", IDM_VID_GL_FPS_50 + MENUITEM "&60 fps", IDM_VID_GL_FPS_60 + MENUITEM "&75 fps", IDM_VID_GL_FPS_75 + END + MENUITEM "&VSync", IDM_VID_GL_VSYNC + MENUITEM "&Izberi senčilnik...", IDM_VID_GL_SHADER + MENUITEM "&Odstrani senčilnik", IDM_VID_GL_NOSHADER +END +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +#define STR_PROG_SETT "Spremeni jezik" +#define STR_SND_GAIN "Ojačanje zvoka" +#define STR_NEW_FLOPPY "Nova slika" +#define STR_CONFIG "Nastavitve programa 86Box" +#define STR_SPECIFY_DIM "Določi velikost glavnega okna" + +#define STR_OK "V redu" +#define STR_CANCEL "Prekliči" +#define STR_GLOBAL "Shrani te nastavitve kot globalne privzete" +#define STR_DEFAULT "Privzeto" +#define STR_LANGUAGE "Jezik:" +#define STR_ICONSET "Komplet ikon:" + +#define STR_GAIN "Ojačanje" + +#define STR_FILE_NAME "Ime datoteke:" +#define STR_DISK_SIZE "Velikost diska:" +#define STR_RPM_MODE "Način števila obratov:" +#define STR_PROGRESS "Napredek:" + +#define STR_WIDTH "Širina:" +#define STR_HEIGHT "Višina:" +#define STR_LOCK_TO_SIZE "Zakleni na to velikost" + +#define STR_MACHINE_TYPE "Vrsta sistema:" +#define STR_MACHINE "Sistem:" +#define STR_CONFIGURE "Nastavi" +#define STR_CPU_TYPE "Vrsta procesorja:" +#define STR_SPEED "Hitrost:" +#define STR_FPU "Procesor plavajoče vejice:" +#define STR_WAIT_STATES "Čakalna stanja:" +#define STR_MB "MB" +#define STR_MEMORY "Spomin:" +#define STR_TIME_SYNC "Sinhronizacija časa" +#define STR_DISABLED "Onemogočeno" +#define STR_ENABLED_LOCAL "Omogočeno (lokalni čas)" +#define STR_ENABLED_UTC "Omogočeno (UTC)" +#define STR_DYNAREC "Dinamični prevajalnik" + +#define STR_VIDEO "Video:" +#define STR_VOODOO "Voodoo grafika" + +#define STR_MOUSE "Miška:" +#define STR_JOYSTICK "Igralna palica:" +#define STR_JOY1 "Igralna palica 1..." +#define STR_JOY2 "Igralna palica 2..." +#define STR_JOY3 "Igralna palica 3..." +#define STR_JOY4 "Igralna palica 4..." + +#define STR_SOUND "Zvočna kartica:" +#define STR_MIDI "Izhodna naprava MIDI:" +#define STR_MIDI_IN "Vhodna naprava MIDI:" +#define STR_MPU401 "Samostojen MPU-401" +#define STR_SSI "Innovation SSI-2001" +#define STR_CMS "CMS / Game Blaster" +#define STR_GUS "Gravis Ultrasound" +#define STR_FLOAT "Uporabi FLOAT32 za zvok" + +#define STR_NET_TYPE "Vrsta omrežja:" +#define STR_PCAP "Naprava PCap:" +#define STR_NET "Omrežna kartica:" + +#define STR_LPT1 "Naprava LPT1:" +#define STR_LPT2 "Naprava LPT2:" +#define STR_LPT3 "Naprava LPT3:" +#define STR_SERIAL1 "Serijska vrata 1" +#define STR_SERIAL2 "Serijska vrata 2" +#define STR_SERIAL3 "Serijska vrata 3" +#define STR_SERIAL4 "Serijska vrata 4" +#define STR_PARALLEL1 "Paralelna vrata 1" +#define STR_PARALLEL2 "Paralelna vrata 2" +#define STR_PARALLEL3 "Paralelna vrata 3" + +#define STR_HDC "Krmilnik trdega diska:" +#define STR_FDC "Krmilnik disketnika:" +#define STR_IDE_TER "Terciarni krmilnik IDE" +#define STR_IDE_QUA "Kvartarni krmilnik IDE" +#define STR_SCSI "SCSI" +#define STR_SCSI_1 "Krmilnik 1:" +#define STR_SCSI_2 "Krmilnik 2:" +#define STR_SCSI_3 "Krmilnik 3:" +#define STR_SCSI_4 "Krmilnik 4:" +#define STR_CASSETTE "Kasetnik" + +#define STR_HDD "Trdi diski:" +#define STR_NEW "Nov..." +#define STR_EXISTING "Obstoječ..." +#define STR_REMOVE "Odstrani" +#define STR_BUS "Vodilo:" +#define STR_CHANNEL "Kanal:" +#define STR_ID "ID:" + +#define STR_SPECIFY "Določi..." +#define STR_SECTORS "Sektorji:" +#define STR_HEADS "Glave:" +#define STR_CYLS "Cilindri:" +#define STR_SIZE_MB "Velikost (MB):" +#define STR_TYPE "Vrsta:" +#define STR_IMG_FORMAT "Format slike:" +#define STR_BLOCK_SIZE "Velikost bloka:" + +#define STR_FLOPPY_DRIVES "Disketni pogoni:" +#define STR_TURBO "Turbo časovniki" +#define STR_CHECKBPB "Preveri BPB" +#define STR_CDROM_DRIVES "Pogoni CD-ROM:" + +#define STR_MO_DRIVES "Magnetno-optični pogoni:" +#define STR_ZIP_DRIVES "Pogoni ZIP:" +#define STR_250 "ZIP 250" + +#define STR_ISARTC "Ura v realnem času ISA:" +#define STR_ISAMEM "Razširitev spomina ISA" +#define STR_ISAMEM_1 "Kartica 1:" +#define STR_ISAMEM_2 "Kartica 2:" +#define STR_ISAMEM_3 "Kartica 3:" +#define STR_ISAMEM_4 "Kartica 4:" +#define STR_BUGGER "Naprava ISABugger" +#define STR_POSTCARD "Kartica POST" + +#define FONT_SIZE 9 +#define FONT_NAME "Segoe UI" + +#include "dialogs.rc" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + 2048 "86Box" + IDS_2049 "Napaka" + IDS_2050 "Kritična napaka" + IDS_2051 "" + IDS_2052 "Pritisnite CTRL+ALT+PAGE DOWN za povratek iz celozaslonskega načina." + IDS_2053 "Hitrost" + IDS_2054 "ZIP %03i %i (%s): %ls" + IDS_2055 "ZIP slike (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" + IDS_2056 "86Box ni našel nobenih uporabnih ROM slik.\n\nProsim prenesite set ROM-ov in ga razširite v mapo ""roms""." + IDS_2057 "(prazno)" + IDS_2058 "ZIP slike (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Vse datoteke (*.*)\0*.*\0" + IDS_2059 "Turbo" + IDS_2060 "Vključeno" + IDS_2061 "Izključeno" + IDS_2062 "Vse slike (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Osnovne sektorske slike (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Površinske slike (*.86F)\0*.86F\0" + IDS_2063 "Sistem ""%hs"" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/machines. Preklapljam na drug sistem, ki je na voljo." +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2064 "Grafična kartica ""%hs"" ni na voljo zaradi manjkajočih ROM-ov v mapi roms/video. Preklapljam na drugo grafično kartico, ki je na voljo.." + IDS_2065 "Sistem" + IDS_2066 "Zaslon" + IDS_2067 "Vhodne naprave" + IDS_2068 "Zvok" + IDS_2069 "Omrežje" + IDS_2070 "Vrata (COM & LPT)" + IDS_2071 "Krmilniki shrambe" + IDS_2072 "Trdi diski" + IDS_2073 "Disketni in CD-ROM pogoni" + IDS_2074 "Druge odstranljive naprave" + IDS_2075 "Druga periferija" + IDS_2076 "Površinske slike (*.86F)\0*.86F\0" + IDS_2077 "Kliknite za zajem miške" + IDS_2078 "Pritisnite F8+F12 za izpust miške" + IDS_2079 "Pritisnite F8+F12 ali srednji gumb za izpust miške" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2080 "Ne morem inicializirati FluidSynth" + IDS_2081 "Vodilo" + IDS_2082 "Datoteka" + IDS_2083 "C" + IDS_2084 "H" + IDS_2085 "S" + IDS_2086 "MB" + IDS_2087 "Preveri BPB" + IDS_2088 "KB" + IDS_2089 "Ne morem inicializirati pogona upodabljanja." + IDS_2090 "Privzeto" + IDS_2091 "%i stanj čakanja" + IDS_2092 "Vrsta" + IDS_2093 "Nastavitev PCap ni uspela" + IDS_2094 "Nobena naprava PCap ni bila najdena" + IDS_2095 "Neveljavna naprava PCap" + IDS_2096 "Standardna krmilna palica z 2 gumboma" + IDS_2097 "Standardna krmilna palica s 4 gumbi" + IDS_2098 "Standardna krmilna palica s 6 gumbi" + IDS_2099 "Standardna krmilna palica z 8 gumbi" + IDS_2100 "CH Flightstick Pro" + IDS_2101 "Microsoft SideWinder Pad" + IDS_2102 "Thrustmaster Flight Control System" + IDS_2103 "Brez" + IDS_2104 "Ne morem naložiti pospeševalnikov tipkovnice." + IDS_2105 "Ne morem registrirati surovega vnosa." + IDS_2106 "%u" + IDS_2107 "%u MB (CHS: %i, %i, %i)" + IDS_2108 "Disketa %i (%s): %ls" + IDS_2109 "Vse slike (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Napredne sektorske slike (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Osnovne sektorske slike (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Tokovne slike (*.FDI)\0*.FDI\0Površinske slike (*.86F;*.MFM)\0*.86F;*.MFM\0Vse datoteke (*.*)\0*.*\0" + IDS_2110 "Ne morem inicializirati FreeType" + IDS_2111 "Ne morem inicializirati SDL, potrebna je knjižica SDL2.dll" + IDS_2112 "Ste prepričani, da želite ponovno zagnati emulirani sistem?" + IDS_2113 "Ste prepričani, da želite zapreti 86Box?" + IDS_2114 "Ne morem inicializirati Ghostscript" + IDS_2115 "MO %i (%ls): %ls" + IDS_2116 "Slike MO (*.IM?;*.MDI)\0*.IM?;*.MDI\0Vse datoteke (*.*)\0*.*\0" + IDS_2117 "Dobrodošli v 86Box!" + IDS_2118 "Notranji krmilnik" + IDS_2119 "Izhod" + IDS_2120 "Nobeni ROM-i niso bili najdeni" + IDS_2121 "Želite shraniti nastavitve?" + IDS_2122 "To bo ponovno zagnalo emuliran sistem." + IDS_2123 "Shrani" + IDS_2124 "O programu 86Box" + IDS_2125 "86Box v" EMU_VERSION + + IDS_2126 "Emulator starih računalnikov\n\nAvtorji: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho in drugi.\n\nIzdano pod licenco GNU General Public License različica 2 ali novejša. Glej datoteko LICENSE za več informacij." + IDS_2127 "V redu" + IDS_2128 "Strojna oprema ni na voljo" +#ifdef _WIN32 +#define LIB_NAME_PCAP "WinPcap" +#else +#define LIB_NAME_PCAP "libpcap" +#endif + IDS_2129 "Prepičajte se, da je nameščen " LIB_NAME_PCAP " in da ste na omrežni povezavi, ki je združljiva z " LIB_NAME_PCAP + IDS_2130 "Neveljavna konfiguracija" +#ifdef _WIN32 +#define LIB_NAME_FREETYPE "freetype.dll" +#else +#define LIB_NAME_FREETYPE "libfreetype" +#endif + IDS_2131 LIB_NAME_FREETYPE " je potreben za emuliranje ESC/P tiskalnika." +#ifdef _WIN32 +#define LIB_NAME_GS "gsdll32.dll" +#else +#define LIB_NAME_GS "libgs" +#endif + IDS_2132 LIB_NAME_GS " je potreben za samodejno pretvorbo PostScript datotek v PDF.\n\nVsi dokumenti, poslani generičnemu PostScript tiskalniku bodo shranjeni kot PostScript (.ps) datoteke." +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#endif + IDS_2133 LIB_NAME_FLUIDSYNTH " je potreben za FluidSynth MIDI izhod." + IDS_2134 "Preklapljam v celozaslonski način" + IDS_2135 "Ne pokaži več tega sporočila" + IDS_2136 "Prekliči izhod" + IDS_2137 "Resetiraj" + IDS_2138 "Ne resetiraj" + IDS_2139 "Slike MO (*.IM?;*.MDI)\0*.IM?;*.MDI\0Vse datoteke (*.*)\0*.*\0" + IDS_2140 "Slike CD-ROM (*.ISO;*.CUE)\0*.ISO;*.CUE\0Vse datoteke (*.*)\0*.*\0" + IDS_2141 "Konfiguracija naprave %hs" + IDS_2142 "Zaslon v načinu spanja" + IDS_2143 "Senčilniki OpenGL (*.GLSL)\0*.GLSL\0Vse datoteke (*.*)\0*.*\0" + IDS_2144 "Možnosti OpenGL" + IDS_2145 "Nalagate nepodprto konfiguracijo" + IDS_2146 "Filtriranje vrste procesorja glede na izbran sistem je onemogočeno za ta emuliran sistem.\n\nTako lahko izberete procesor, ki je sicer nezdružljiv z izbranim sistemom. Vendar lahko naletite na nezdružljivosti z BIOS-om sistema ali drugo programsko opremo\n\nOmogočanje te nastavitve ni uradno podprto, vsa poročila o hroščih iz tega naslova pa bodo zaprta kot neveljavna." + IDS_2147 "Nadaljuj" + IDS_2148 "Kaseta: %s" + IDS_2149 "Slike kaset (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Vse datoteke (*.*)\0*.*\0" + IDS_2150 "Spominski vložek %i: %ls" + IDS_2151 "Slike spominskega vložka (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Vse datoteke (*.*)\0*.*\0" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_4096 "Trdi disk (%s)" + IDS_4097 "%01i:%01i" + IDS_4098 "%01i" + IDS_4099 "MFM/RLL ali ESDI pogoni CD-ROM niso nikoli obstajali" + IDS_4100 "Po meri..." + IDS_4101 "Po meri (velik)..." + IDS_4102 "Dodaj nov trdi disk" + IDS_4103 "Dodaj obstoječ trdi disk" + IDS_4104 "Slike diska HDI ne morejo biti večje od 4 GB." + IDS_4105 "Slike diska ne morejo biti večje od 127 GB." + IDS_4106 "Slike trdega diska (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Vse datoteke (*.*)\0*.*\0" + IDS_4107 "Ne morem prebrati datoteke" + IDS_4108 "Ne morem pisati v datoteko" + IDS_4109 "Slike HDI ali HDX, ki nimajo sektorjev velikosti 512 bajtov, niso podprte." + IDS_4110 "USB še ni podprt" + IDS_4111 "Datoteka s sliko diska že obstaja" + IDS_4112 "Prosim, navedite veljavno ime datoteke." + IDS_4113 "Slika diska ustvarjena" + IDS_4114 "Prepričajte se, da datoteka obstaja in je berljiva." + IDS_4115 "Prepričajte se, da datoteko shranjujete v zapisljivo mapo." + IDS_4116 "Slika diska je prevelika" + IDS_4117 "Ne pozabite na novem disku ustvariti particij in jih formatirati." + IDS_4118 "Izbrana datoteka bo prepisana. Ali jo res želite uporabiti?" + IDS_4119 "Nepodprta slika diska" + IDS_4120 "Prepiši" + IDS_4121 "Ne prepiši" + IDS_4122 "Surova slika (.img)" + IDS_4123 "Slika HDI (.hdi)" + IDS_4124 "Slika HDX (.hdx)" + IDS_4125 "VHD fiksne velikosti (.vhd)" + IDS_4126 "Dinamičen VHD (.vhd)" + IDS_4127 "Diferencialni VHD (.vhd)" + IDS_4128 "Veliki bloki (2 MB)" + IDS_4129 "Mali bloki (512 KB)" + IDS_4130 "Datoteke VHD (*.VHD)\0*.VHD\0Vse datoteke (*.*)\0*.*\0" + IDS_4131 "Izberite starševsko sliko VHD" + IDS_4132 "To lahko pomeni, da je bila starševska slika spremenjena potem, ko je že bila ustvarjena diferencialna slika.\n\nDo tega lahko pride tudi kadar so datoteke slik diska premaknjene ali kopirane, ali pa gre za hrošča v programu, ki je ustvaril ta disk.\n\nŽelite popraviti časovni žig?" + IDS_4133 "Časovna žiga starševske slike diska in slike diska otroka se ne ujemata" + IDS_4134 "Ne morem popraviti časovnega žiga VHD." + IDS_4135 "%01i:%02i" + + IDS_4352 "MFM/RLL" + IDS_4353 "XTA" + IDS_4354 "ESDI" + IDS_4355 "IDE" + IDS_4356 "ATAPI" + IDS_4357 "SCSI" + + IDS_4608 "MFM/RLL (%01i:%01i)" + IDS_4609 "XTA (%01i:%01i)" + IDS_4610 "ESDI (%01i:%01i)" + IDS_4611 "IDE (%01i:%01i)" + IDS_4612 "ATAPI (%01i:%01i)" + IDS_4613 "SCSI (%01i:%02i)" + + IDS_5120 "CD-ROM %i (%s): %s" + + IDS_5376 "Onemogočeno" + IDS_5381 "ATAPI" + IDS_5382 "SCSI" + + IDS_5632 "Onemogočeno" + IDS_5637 "ATAPI (%01i:%01i)" + IDS_5638 "SCSI (%01i:%02i)" + + IDS_5888 "160 kB" + IDS_5889 "180 kB" + IDS_5890 "320 kB" + IDS_5891 "360 kB" + IDS_5892 "640 kB" + IDS_5893 "720 kB" + IDS_5894 "1.2 MB" + IDS_5895 "1.25 MB" + IDS_5896 "1.44 MB" + IDS_5897 "DMF (grozd 1024)" + IDS_5898 "DMF (grozd 2048)" + IDS_5899 "2.88 MB" + IDS_5900 "ZIP 100" + IDS_5901 "ZIP 250" + IDS_5902 "3.5"" 128Mb M.O. (ISO 10090)" + IDS_5903 "3.5"" 230Mb M.O. (ISO 13963)" + IDS_5904 "3.5"" 540Mb M.O. (ISO 15498)" + IDS_5905 "3.5"" 640Mb M.O. (ISO 15498)" + IDS_5906 "3.5"" 1.3Gb M.O. (GigaMO)" + IDS_5907 "3.5"" 2.3Gb M.O. (GigaMO 2)" + IDS_5908 "5.25"" 600Mb M.O." + IDS_5909 "5.25"" 650Mb M.O." + IDS_5910 "5.25"" 1Gb M.O." + IDS_5911 "5.25"" 1.3Gb M.O." + + IDS_6144 "Popolni obrati na minuto" + IDS_6145 "1%% pod popolnimi obrati" + IDS_6146 "1.5%% pod popolnimi obrati" + IDS_6147 "2%% pod popolnimi obrati" + + IDS_7168 "(Sistemsko privzeto)" +END +#define IDS_LANG_ENUS IDS_7168 + +// Slovenian resources +///////////////////////////////////////////////////////////////////////////// diff --git a/src/win/languages/zh-CN.rc b/src/win/languages/zh-CN.rc new file mode 100644 index 000000000..1a8444569 --- /dev/null +++ b/src/win/languages/zh-CN.rc @@ -0,0 +1,644 @@ +//////////////////////////////////////////////////////////////////////////// +// Simplified Chinese resources + +#ifdef _WIN32 +LANGUAGE LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED +#pragma code_page(65001) +#endif //_WIN32 + +#define AUTHORS + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +MainMenu MENU DISCARDABLE +BEGIN + POPUP "操作(&A)" + BEGIN + MENUITEM "键盘需要捕捉(&K)", IDM_ACTION_KBD_REQ_CAPTURE + MENUITEM "右CTRL作为左ALT(&R)", IDM_ACTION_RCTRL_IS_LALT + MENUITEM SEPARATOR + MENUITEM "硬重置(&H)...", IDM_ACTION_HRESET + MENUITEM "&Ctrl+Alt+Del\tCtrl+F12", IDM_ACTION_RESET_CAD + MENUITEM SEPARATOR + MENUITEM "Ctrl+Alt+&Esc", IDM_ACTION_CTRL_ALT_ESC + MENUITEM SEPARATOR + MENUITEM "暂停(&P)", IDM_ACTION_PAUSE + MENUITEM SEPARATOR + MENUITEM "退出(&x)...", IDM_ACTION_EXIT + END + POPUP "视图(&V)" + BEGIN + MENUITEM "隐藏状态栏(&H)", IDM_VID_HIDE_STATUS_BAR + MENUITEM SEPARATOR + MENUITEM "窗口可调整大小(&R)", IDM_VID_RESIZE + MENUITEM "记住窗口大小和未知(&e)", IDM_VID_REMEMBER + MENUITEM SEPARATOR + POPUP "渲染器(&n)" + BEGIN + MENUITEM "&SDL (软件)", IDM_VID_SDL_SW + MENUITEM "SDL (硬件 &H)", IDM_VID_SDL_HW + MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL +#if defined(DEV_BRANCH) && defined(USE_OPENGL) + MENUITEM "Open&GL (3.3 Core)", IDM_VID_OPENGL_CORE +#endif +#ifdef USE_VNC + MENUITEM "&VNC", IDM_VID_VNC +#endif + END + MENUITEM SEPARATOR + MENUITEM "指定窗口大小...", IDM_VID_SPECIFY_DIM + MENUITEM "强制 4:3 显示比例(&o)", IDM_VID_FORCE43 + POPUP "窗口缩放比例(&W)" + BEGIN + MENUITEM "&0.5x", IDM_VID_SCALE_1X + MENUITEM "&1x", IDM_VID_SCALE_2X + MENUITEM "1.&5x", IDM_VID_SCALE_3X + MENUITEM "&2x", IDM_VID_SCALE_4X + END + POPUP "过滤方式" + BEGIN + MENUITEM "邻近(&N)", IDM_VID_FILTER_NEAREST + MENUITEM "线性(&L)", IDM_VID_FILTER_LINEAR + END + MENUITEM "Hi&DPI 缩放", IDM_VID_HIDPI + MENUITEM SEPARATOR + MENUITEM "全屏(&F)\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN + POPUP "全屏拉伸模式(&s)" + BEGIN + MENUITEM "全屏拉伸(&F)", IDM_VID_FS_FULL + MENUITEM "&4:3", IDM_VID_FS_43 + MENUITEM "保持比例(&S)", IDM_VID_FS_KEEPRATIO + MENUITEM "整数倍放大&I", IDM_VID_FS_INT + END + POPUP "E&GA/(S)VGA 设置" + BEGIN + MENUITEM "反转 VGA 显示器(&I)", IDM_VID_INVERT + POPUP "VGA 屏幕类型(&t)" + BEGIN + MENUITEM "RGB 彩色(&C)", IDM_VID_GRAY_RGB + MENUITEM "RGB 灰度(&R)", IDM_VID_GRAY_MONO + MENUITEM "琥珀色单色显示器(&A)", IDM_VID_GRAY_AMBER + MENUITEM "绿色单色显示器(&G)", IDM_VID_GRAY_GREEN + MENUITEM "白色单色显示器(&W)", IDM_VID_GRAY_WHITE + END + POPUP "灰度转换类型(&c)" + BEGIN + MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601 + MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709 + MENUITEM "平均(&A)", IDM_VID_GRAYCT_AVE + END + END + MENUITEM SEPARATOR + MENUITEM "CGA/PCjr/Tandy/EGA/(S)VGA 过扫描(&G)", IDM_VID_OVERSCAN + MENUITEM "更改灰度显示器对比度(&m)", IDM_VID_CGACON + END + MENUITEM "介质(&M)", IDM_MEDIA + POPUP "工具(&T)" + BEGIN + MENUITEM "设置(&S)...", IDM_CONFIG + MENUITEM "更新状态栏图标(&U)", IDM_UPDATE_ICONS + MENUITEM SEPARATOR + MENUITEM "Change program &settings...", IDM_VID_PROG_SETT +# ifdef USE_DISCORD + MENUITEM SEPARATOR + MENUITEM "启用 Discord 集成(&D)", IDM_DISCORD +# endif + MENUITEM SEPARATOR + MENUITEM "截图(&c)\tCtrl+F11", IDM_ACTION_SCREENSHOT + MENUITEM SEPARATOR + MENUITEM "音量增益(&g)...", IDM_SND_GAIN +#ifdef MTR_ENABLED + MENUITEM SEPARATOR + MENUITEM "开始追踪\tCtrl+T", IDM_ACTION_BEGIN_TRACE + MENUITEM "结束追踪\tCtrl+T", IDM_ACTION_END_TRACE +#endif + END +#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS) + POPUP "记录日志(&L)" + BEGIN +# ifdef ENABLE_BUSLOGIC_LOG + MENUITEM "启用 总线Logic 日志\tCtrl+F4", IDM_LOG_BUSLOGIC +# endif +# ifdef ENABLE_CDROM_LOG + MENUITEM "启用 CD-ROM 日志\tCtrl+F5", IDM_LOG_CDROM +# endif +# ifdef ENABLE_D86F_LOG + MENUITEM "启用 软盘(86F) 日志\tCtrl+F6", IDM_LOG_D86F +# endif +# ifdef ENABLE_FDC_LOG + MENUITEM "启用软驱控制器日志\tCtrl+F7", IDM_LOG_FDC +# endif +# ifdef ENABLE_IDE_LOG + MENUITEM "启用 IDE 日志\tCtrl+F8", IDM_LOG_IDE +# endif +# ifdef ENABLE_SERIAL_LOG + MENUITEM "启用串口日志\tCtrl+F3", IDM_LOG_SERIAL +# endif +# ifdef ENABLE_NIC_LOG + MENUITEM "启用网络日志\tCtrl+F9", IDM_LOG_NIC +# endif +# ifdef ENABLE_LOG_COMMANDS +# ifdef ENABLE_LOG_TOGGLES + MENUITEM SEPARATOR +# endif +# ifdef ENABLE_LOG_BREAKPOINT + MENUITEM "日志断点(&L)\tCtrl+F10", IDM_LOG_BREAKPOINT +# endif +# ifdef ENABLE_VRAM_DUMP + MENUITEM "创建显示内存转储(&v)\tCtrl+F1", IDM_DUMP_VRAM +# endif +# endif + END +#endif + POPUP "帮助(&H)" + BEGIN + MENUITEM "文档(&D)...", IDM_DOCS + MENUITEM "关于(&A)...", IDM_ABOUT + END +END + +StatusBarMenu MENU DISCARDABLE +BEGIN + MENUITEM SEPARATOR +END + +CassetteSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "新建镜像(&N)...", IDM_CASSETTE_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "打开已存在的镜像(&E)...", IDM_CASSETTE_IMAGE_EXISTING + MENUITEM "写保护打开已存在的镜像(&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "录制(&R)", IDM_CASSETTE_RECORD + MENUITEM "播放(&P)", IDM_CASSETTE_PLAY + MENUITEM "倒带至起点(&R)", IDM_CASSETTE_REWIND + MENUITEM "快进至终点(&F)", IDM_CASSETTE_FAST_FORWARD + MENUITEM SEPARATOR + MENUITEM "弹出(&j)", IDM_CASSETTE_EJECT + END +END + +CartridgeSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "镜像(&I)...", IDM_CARTRIDGE_IMAGE + MENUITEM SEPARATOR + MENUITEM "弹出(&j)", IDM_CARTRIDGE_EJECT + END +END + +FloppySubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "新建镜像(&N)...", IDM_FLOPPY_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "打开已存在的镜像(&E)...", IDM_FLOPPY_IMAGE_EXISTING + MENUITEM "写保护打开已存在的镜像(&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "导出为86F格式(&x)...", IDM_FLOPPY_EXPORT_TO_86F + MENUITEM SEPARATOR + MENUITEM "弹出(&j)", IDM_FLOPPY_EJECT + END +END + +CdromSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "静音(&M)", IDM_CDROM_MUTE + MENUITEM SEPARATOR + MENUITEM "空置驱动器(&m)", IDM_CDROM_EMPTY + MENUITEM "载入上一个镜像(&R)", IDM_CDROM_RELOAD + MENUITEM SEPARATOR + MENUITEM "镜像(&I)", IDM_CDROM_IMAGE + END +END + +ZIPSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "新建镜像(&N)...", IDM_ZIP_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "打开已存在的镜像(&E)...", IDM_ZIP_IMAGE_EXISTING + MENUITEM "写保护打开已存在的镜像(&W)...", IDM_ZIP_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "弹出(&j)", IDM_ZIP_EJECT + MENUITEM "载入上一个镜像(&R)", IDM_ZIP_RELOAD + END +END + +MOSubmenu MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "新建镜像(&N)...", IDM_MO_IMAGE_NEW + MENUITEM SEPARATOR + MENUITEM "打开已存在的镜像(&E)...", IDM_MO_IMAGE_EXISTING + MENUITEM "写保护打开已存在的镜像(&W)...", IDM_MO_IMAGE_EXISTING_WP + MENUITEM SEPARATOR + MENUITEM "弹出(&j)", IDM_MO_EJECT + MENUITEM "载入上一个镜像(&R)", IDM_MO_RELOAD + END +END + +#if defined(DEV_BRANCH) && defined(USE_OPENGL) +VidGLSubMenu MENU DISCARDABLE +BEGIN + POPUP "目标帧率(&f)" + BEGIN + MENUITEM "与视频同步(&S)", IDM_VID_GL_FPS_BLITTER + MENUITEM "&25 fps", IDM_VID_GL_FPS_25 + MENUITEM "&30 fps", IDM_VID_GL_FPS_30 + MENUITEM "&50 fps", IDM_VID_GL_FPS_50 + MENUITEM "&60 fps", IDM_VID_GL_FPS_60 + MENUITEM "&75 fps", IDM_VID_GL_FPS_75 + END + MENUITEM "VSync 垂直同步(&V)", IDM_VID_GL_VSYNC + MENUITEM "选择着色器(&S)...", IDM_VID_GL_SHADER + MENUITEM "移除着色器(&R)", IDM_VID_GL_NOSHADER +END +#endif + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +#define STR_PROG_SETT "Program Settings" +#define STR_SND_GAIN "音量增益" +#define STR_NEW_FLOPPY "新建镜像" +#define STR_CONFIG "86Box 设置" +#define STR_SPECIFY_DIM "指定主窗口大小" + +#define STR_OK "确定" +#define STR_CANCEL "取消" +#define STR_GLOBAL "将以上设定存储为全局默认值(&g)" +#define STR_DEFAULT "默认(&D)" +#define STR_LANGUAGE "语言:" +#define STR_ICONSET "图标集:" + +#define STR_GAIN "增益" + +#define STR_FILE_NAME "文件名:" +#define STR_DISK_SIZE "磁盘大小:" +#define STR_RPM_MODE "转速(RPM)模式:" +#define STR_PROGRESS "进度:" + +#define STR_WIDTH "宽度:" +#define STR_HEIGHT "高度:" +#define STR_LOCK_TO_SIZE "锁定此大小" + +#define STR_MACHINE_TYPE "机器种类:" +#define STR_MACHINE "机型:" +#define STR_CONFIGURE "配置" +#define STR_CPU_TYPE "CPU 类型:" +#define STR_SPEED "速度:" +#define STR_FPU "浮点处理器(FPU):" +#define STR_WAIT_STATES "等待状态(WS):" +#define STR_MB "MB" +#define STR_MEMORY "内存:" +#define STR_TIME_SYNC "时间同步" +#define STR_DISABLED "禁用" +#define STR_ENABLED_LOCAL "启用(本地时间)" +#define STR_ENABLED_UTC "启用(UTC)" +#define STR_DYNAREC "动态重编译器" + +#define STR_VIDEO "显卡:" +#define STR_VOODOO "Voodoo 显卡" + +#define STR_MOUSE "鼠标:" +#define STR_JOYSTICK "操纵杆:" +#define STR_JOY1 "操纵杆 1..." +#define STR_JOY2 "操纵杆 2..." +#define STR_JOY3 "操纵杆 3..." +#define STR_JOY4 "操纵杆 4..." + +#define STR_SOUND "声卡:" +#define STR_MIDI "MIDI 输出设备:" +#define STR_MIDI_IN "MIDI 输入设备:" +#define STR_MPU401 "独立 MPU-401" +#define STR_SSI "Innovation SSI-2001" +#define STR_CMS "CMS / Game Blaster" +#define STR_GUS "Gravis Ultrasound" +#define STR_FLOAT "使用 FLOAT32 音频" + +#define STR_NET_TYPE "网络类型:" +#define STR_PCAP "PCap 设备:" +#define STR_NET "网卡类型:" + +#define STR_LPT1 "LPT1 设备:" +#define STR_LPT2 "LPT2 设备:" +#define STR_LPT3 "LPT3 设备:" +#define STR_SERIAL1 "串口 1" +#define STR_SERIAL2 "串口 2" +#define STR_SERIAL3 "串口 3" +#define STR_SERIAL4 "串口 4" +#define STR_PARALLEL1 "并口 1" +#define STR_PARALLEL2 "并口 2" +#define STR_PARALLEL3 "并口 3" + +#define STR_HDC "硬盘控制器:" +#define STR_FDC "软驱控制器:" +#define STR_IDE_TER "第三 IDE 控制器" +#define STR_IDE_QUA "第四 IDE 控制器" +#define STR_SCSI "SCSI" +#define STR_SCSI_1 "控制器 1:" +#define STR_SCSI_2 "控制器 2:" +#define STR_SCSI_3 "控制器 3:" +#define STR_SCSI_4 "控制器 4:" +#define STR_CASSETTE "磁带" + +#define STR_HDD "硬盘:" +#define STR_NEW "新建(&N)..." +#define STR_EXISTING "已有镜像(&E)..." +#define STR_REMOVE "移除(&R)" +#define STR_BUS "总线:" +#define STR_CHANNEL "通道:" +#define STR_ID "ID:" + +#define STR_SPECIFY "指定(&S)..." +#define STR_SECTORS "扇区(S):" +#define STR_HEADS "磁头(H):" +#define STR_CYLS "柱面(C):" +#define STR_SIZE_MB "大小(MB):" +#define STR_TYPE "类型:" +#define STR_IMG_FORMAT "镜像格式:" +#define STR_BLOCK_SIZE "块大小:" + +#define STR_FLOPPY_DRIVES "软驱设备:" +#define STR_TURBO "加速时序" +#define STR_CHECKBPB "检查 BPB" +#define STR_CDROM_DRIVES "CD-ROM 设备:" + +#define STR_MO_DRIVES "MO 设备:" +#define STR_ZIP_DRIVES "ZIP 设备:" +#define STR_250 "ZIP 250" + +#define STR_ISARTC "ISA RTC:" +#define STR_ISAMEM "ISA 内存扩充" +#define STR_ISAMEM_1 "扩展卡 1:" +#define STR_ISAMEM_2 "扩展卡 2:" +#define STR_ISAMEM_3 "扩展卡 3:" +#define STR_ISAMEM_4 "扩展卡 4:" +#define STR_BUGGER "ISABugger device" +#define STR_POSTCARD "自检卡(POST)" + +#define FONT_SIZE 9 +#define FONT_NAME "Microsoft YaHei" + +#include "dialogs.rc" + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + 2048 "86Box" + IDS_2049 "错误" + IDS_2050 "关键错误" + IDS_2051 "<保留>" + IDS_2052 "按 CTRL+ALT+PAGE DOWN 组合键返回窗口模式." + IDS_2053 "速度" + IDS_2054 "ZIP %03i %i (%s): %ls" + IDS_2055 "ZIP 镜像 (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0" + IDS_2056 "86Box 找不到支持的 ROM 镜像.\n\n请下载ROM包并解压到 ""roms"" 文件夹." + IDS_2057 "(空)" + IDS_2058 "ZIP 镜像 (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0所有文件 (*.*)\0*.*\0" + IDS_2059 "Turbo" + IDS_2060 "开" + IDS_2061 "关" + IDS_2062 "所以镜像 (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0基本扇区镜像 (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0表面镜像 (*.86F)\0*.86F\0" + IDS_2063 "由于 roms/machines 文件夹中缺少合适的ROM, ""%hs"" 机型不可用. 将切换到其他可用机型." +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2064 "由于 roms/video 文件夹中缺少合适的ROM, ""%hs"" 机型不可用. 将切换到其他可用的显卡." + IDS_2065 "机型" + IDS_2066 "显示" + IDS_2067 "输入设备" + IDS_2068 "声音" + IDS_2069 "网络" + IDS_2070 "端口 (COM 与 LPT)" + IDS_2071 "存储控制器" + IDS_2072 "硬盘" + IDS_2073 "软驱和光驱" + IDS_2074 "其他可移动存储设备" + IDS_2075 "其他附件" + IDS_2076 "表面镜像 (*.86F)\0*.86F\0" + IDS_2077 "单击窗口捕捉鼠标" + IDS_2078 "按 F8+F12 释放鼠标" + IDS_2079 "按 F8+F12 或中键释放鼠标" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_2080 "无法初始化 FluidSynth" + IDS_2081 "总线" + IDS_2082 "文件" + IDS_2083 "C" + IDS_2084 "H" + IDS_2085 "S" + IDS_2086 "MB" + IDS_2087 "检查 BPB" + IDS_2088 "KB" + IDS_2089 "无法初始化视频渲染器." + IDS_2090 "默认" + IDS_2091 "%i 等待状态(WS)" + IDS_2092 "类型" + IDS_2093 "设置 PCap 失败" + IDS_2094 "未找到 PCap 设备" + IDS_2095 "无效 PCap 设备" + IDS_2096 "标准 2键操纵杆" + IDS_2097 "标准 4键操纵杆" + IDS_2098 "标准 6键操纵杆" + IDS_2099 "标准 8键操纵杆" + IDS_2100 "CH Flightstick Pro" + IDS_2101 "Microsoft SideWinder Pad" + IDS_2102 "Thrustmaster Flight Control System" + IDS_2103 "无" + IDS_2104 "无法加载键盘加速器." + IDS_2105 "无法注册原始(raw)输入." + IDS_2106 "%u" + IDS_2107 "%u MB (CHS: %i, %i, %i)" + IDS_2108 "软盘 %i (%s): %ls" + IDS_2109 "所有镜像 (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0高级扇区镜像 (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本扇区镜像 (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux images (*.FDI)\0*.FDI\0表面镜像 (*.86F;*.MFM)\0*.86F;*.MFM\0所有文件 (*.*)\0*.*\0" + IDS_2110 "无法初始化 FreeType" + IDS_2111 "无法初始化 SDL, 需要 SDL2.dll" + IDS_2112 "您确定要硬重置模拟器吗?" + IDS_2113 "您确定要退出 86Box 吗?" + IDS_2114 "无法初始化 Ghostscript" + IDS_2115 "MO %i (%ls): %ls" + IDS_2116 "MO 镜像 (*.IM?;*.MDI)\0*.IM?;*.MDI\0所有文件 (*.*)\0*.*\0" + IDS_2117 "欢迎使用 86Box!" + IDS_2118 "内部控制器" + IDS_2119 "退出" + IDS_2120 "未找到ROM" + IDS_2121 "您要保存设置吗?" + IDS_2122 "此操作将硬重置模拟器." + IDS_2123 "保存" + IDS_2124 "关于 86Box" + IDS_2125 "86Box v" EMU_VERSION + + IDS_2126 "一个旧计算机模拟器\n\n作者: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布. 详情见 LICENSE 文件." + IDS_2127 "确定" + IDS_2128 "硬件不可用" +#ifdef _WIN32 +#define LIB_NAME_PCAP "WinPcap" +#else +#define LIB_NAME_PCAP "libpcap" +#endif + IDS_2129 "请确认 " LIB_NAME_PCAP " 已安装且使用兼容 " LIB_NAME_PCAP " 的网络连接." + IDS_2130 "无效配置" +#ifdef _WIN32 +#define LIB_NAME_FREETYPE "freetype.dll" +#else +#define LIB_NAME_FREETYPE "libfreetype" +#endif + IDS_2131 "ESC/P 打印机模拟需要." LIB_NAME_FREETYPE +#ifdef _WIN32 +#define LIB_NAME_GS "gsdll32.dll" +#else +#define LIB_NAME_GS "libgs" +#endif + IDS_2132 LIB_NAME_GS "是将 PostScript 文件转换为 PDF所需要的库.\n\n所有通用PostScript打印机打印的文件将被保存为 PostScript (.ps) 文件." +#ifdef _WIN32 +#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll" +#else +#define LIB_NAME_FLUIDSYNTH "libfluidsynth" +#endif + IDS_2133 "FluidSynth MIDI 输出需要" LIB_NAME_FLUIDSYNTH + IDS_2134 "即将进入全屏模式" + IDS_2135 "请勿在显示此提示" + IDS_2136 "不退出" + IDS_2137 "重置" + IDS_2138 "不重置" + IDS_2139 "MO 镜像 (*.IM?;*.MDI)\0*.IM?;*.MDI\0所有文件 (*.*)\0*.*\0" + IDS_2140 "CD-ROM 镜像 (*.ISO;*.CUE)\0*.ISO;*.CUE\0所有文件 (*.*)\0*.*\0" + IDS_2141 "%hs 设备配置" + IDS_2142 "显示器处在睡眠状态" + IDS_2143 "OpenGL 着色器 (*.GLSL)\0*.GLSL\0所有文件 (*.*)\0*.*\0" + IDS_2144 "OpenGL 选项" + IDS_2145 "您正在载入一个不受支持的配置" + IDS_2146 "此模拟计算机禁用了基于选定计算机的 CPU 类型过滤. \n\n这使得选择与选定计算机不兼容的 CPU 成为可能. 但是, 您可能会遇到与机器 BIOS 或其他软件不兼容的问题. \n\n官方不支持启用此设置, 并且提交的任何错误报告可能会因无效而关闭." + IDS_2147 "继续" + IDS_2148 "磁带: %s" + IDS_2149 "磁带镜像 (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0所有文件 (*.*)\0*.*\0" + IDS_2150 "卡带 %i: %ls" + IDS_2151 "卡带镜像 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0所有文件 (*.*)\0*.*\0" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_4096 "硬盘 (%s)" + IDS_4097 "%01i:%01i" + IDS_4098 "%01i" + IDS_4099 "没有 MFM/RLL 或 ESDI CD-ROM 驱动器" + IDS_4100 "自定义..." + IDS_4101 "自定义 (large)..." + IDS_4102 "添加新硬盘" + IDS_4103 "添加已存在的硬盘" + IDS_4104 "HDI 磁盘镜像不能超过 4 GB." + IDS_4105 "磁盘镜像不能超过 127 GB." + IDS_4106 "硬盘镜像 (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0所有文件 (*.*)\0*.*\0" + IDS_4107 "无法读取文件" + IDS_4108 "无法写入文件" + IDS_4109 "不支持非 512 字节扇区的 HDI 或 HDX 镜像." + IDS_4110 "USB 目前还不支持" + IDS_4111 "磁盘镜像文件已存在" + IDS_4112 "请指定有效的文件名." + IDS_4113 "磁盘镜像创建完成" + IDS_4114 "请确定此文件已存在并可读取" + IDS_4115 "请确定此文件保存在可写的文件夹中." + IDS_4116 "磁盘镜像太大" + IDS_4117 "请记得为新创建的镜像分区并格式化." + IDS_4118 "选定的文件将被覆盖. 您确定继续使用此文件吗?" + IDS_4119 "不支持的磁盘镜像" + IDS_4120 "覆盖" + IDS_4121 "不覆盖" + IDS_4122 "原始镜像 (.img)" + IDS_4123 "HDI 镜像 (.hdi)" + IDS_4124 "HDX 镜像 (.hdx)" + IDS_4125 "固定大小 VHD (.vhd)" + IDS_4126 "动态大小 VHD (.vhd)" + IDS_4127 "差分 VHD (.vhd)" + IDS_4128 "大块 (2 MB)" + IDS_4129 "小块 (512 KB)" + IDS_4130 "VHD 文件 (*.VHD)\0*.VHD\0所有文件 (*.*)\0*.*\0" + IDS_4131 "选择父 VHD 文件" + IDS_4132 "这可能因为在创建差异镜像后修改了父映像. \n\n如果镜像文件被移动或复制, 或由于创建此磁盘的程序中的错误, 也可能发生这种情况. \n\n是否需要修复时间戳?" + IDS_4133 "父盘与子盘的时间戳不匹配." + IDS_4134 "无法固定 VHD 时间戳." + IDS_4135 "%01i:%02i" + + IDS_4352 "MFM/RLL" + IDS_4353 "XTA" + IDS_4354 "ESDI" + IDS_4355 "IDE" + IDS_4356 "ATAPI" + IDS_4357 "SCSI" + + IDS_4608 "MFM/RLL (%01i:%01i)" + IDS_4609 "XTA (%01i:%01i)" + IDS_4610 "ESDI (%01i:%01i)" + IDS_4611 "IDE (%01i:%01i)" + IDS_4612 "ATAPI (%01i:%01i)" + IDS_4613 "SCSI (%01i:%02i)" + + IDS_5120 "CD-ROM %i (%s): %s" + + IDS_5376 "禁用" + IDS_5381 "ATAPI" + IDS_5382 "SCSI" + + IDS_5632 "禁用" + IDS_5637 "ATAPI (%01i:%01i)" + IDS_5638 "SCSI (%01i:%02i)" + + IDS_5888 "160 kB" + IDS_5889 "180 kB" + IDS_5890 "320 kB" + IDS_5891 "360 kB" + IDS_5892 "640 kB" + IDS_5893 "720 kB" + IDS_5894 "1.2 MB" + IDS_5895 "1.25 MB" + IDS_5896 "1.44 MB" + IDS_5897 "DMF (1024 簇)" + IDS_5898 "DMF (2048 簇)" + IDS_5899 "2.88 MB" + IDS_5900 "ZIP 100" + IDS_5901 "ZIP 250" + IDS_5902 "3.5"" 128Mb M.O. (ISO 10090)" + IDS_5903 "3.5"" 230Mb M.O. (ISO 13963)" + IDS_5904 "3.5"" 540Mb M.O. (ISO 15498)" + IDS_5905 "3.5"" 640Mb M.O. (ISO 15498)" + IDS_5906 "3.5"" 1.3Gb M.O. (GigaMO)" + IDS_5907 "3.5"" 2.3Gb M.O. (GigaMO 2)" + IDS_5908 "5.25"" 600Mb M.O." + IDS_5909 "5.25"" 650Mb M.O." + IDS_5910 "5.25"" 1Gb M.O." + IDS_5911 "5.25"" 1.3Gb M.O." + + IDS_6144 "完美转速(RPM)" + IDS_6145 "低于完美转速 1%%" + IDS_6146 "低于完美转速 1.5%%" + IDS_6147 "低于完美转速 2%%" + + IDS_7168 "(系统默认)" +END +#define IDS_LANG_ENUS IDS_7168 + +// Simplified Chinese resources +///////////////////////////////////////////////////////////////////////////// diff --git a/src/win/win.c b/src/win/win.c index 1f6ab15af..30555a18f 100644 --- a/src/win/win.c +++ b/src/win/win.c @@ -60,7 +60,7 @@ #endif typedef struct { - WCHAR str[512]; + WCHAR str[1024]; } rc_str_t; @@ -165,50 +165,50 @@ LoadCommonStrings(void) free_string(&lpRCstr4096); free_string(&lpRCstr2048); - lpRCstr2048 = (rc_str_t *)malloc(STR_NUM_2048*sizeof(rc_str_t)); - lpRCstr4096 = (rc_str_t *)malloc(STR_NUM_4096*sizeof(rc_str_t)); - lpRCstr4352 = (rc_str_t *)malloc(STR_NUM_4352*sizeof(rc_str_t)); - lpRCstr4608 = (rc_str_t *)malloc(STR_NUM_4608*sizeof(rc_str_t)); - lpRCstr5120 = (rc_str_t *)malloc(STR_NUM_5120*sizeof(rc_str_t)); - lpRCstr5376 = (rc_str_t *)malloc(STR_NUM_5376*sizeof(rc_str_t)); - lpRCstr5632 = (rc_str_t *)malloc(STR_NUM_5632*sizeof(rc_str_t)); - lpRCstr5888 = (rc_str_t *)malloc(STR_NUM_5888*sizeof(rc_str_t)); - lpRCstr6144 = (rc_str_t *)malloc(STR_NUM_6144*sizeof(rc_str_t)); - lpRCstr7168 = (rc_str_t *)malloc(STR_NUM_7168*sizeof(rc_str_t)); + lpRCstr2048 = calloc(STR_NUM_2048, sizeof(rc_str_t)); + lpRCstr4096 = calloc(STR_NUM_4096, sizeof(rc_str_t)); + lpRCstr4352 = calloc(STR_NUM_4352, sizeof(rc_str_t)); + lpRCstr4608 = calloc(STR_NUM_4608, sizeof(rc_str_t)); + lpRCstr5120 = calloc(STR_NUM_5120, sizeof(rc_str_t)); + lpRCstr5376 = calloc(STR_NUM_5376, sizeof(rc_str_t)); + lpRCstr5632 = calloc(STR_NUM_5632, sizeof(rc_str_t)); + lpRCstr5888 = calloc(STR_NUM_5888, sizeof(rc_str_t)); + lpRCstr6144 = calloc(STR_NUM_6144, sizeof(rc_str_t)); + lpRCstr7168 = calloc(STR_NUM_7168, sizeof(rc_str_t)); for (i=0; i 3)) - LoadString(hinstance, 5376+i, lpRCstr5376[i].str, 512); + LoadString(hinstance, 5376+i, lpRCstr5376[i].str, 1024); } for (i=0; i 3)) - LoadString(hinstance, 5632+i, lpRCstr5632[i].str, 512); + LoadString(hinstance, 5632+i, lpRCstr5632[i].str, 1024); } for (i=0; i +#include +#include +#include +#include +#include +#include +#include <86box/86box.h> +#include <86box/config.h> +#include <86box/plat.h> +#include <86box/ui.h> +#include <86box/win.h> + +HICON hIcon[256]; /* icon data loaded from resources */ +char icon_set[256] = ""; /* name of the iconset to be used */ + +void win_clear_icon_set() +{ + int i; + + for (i = 0; i < 256; i++) + if (hIcon[i] != 0) + { + DestroyIcon(hIcon[i]); + hIcon[i] = 0; + } +} + +void win_system_icon_set() +{ + int i, x = win_get_system_metrics(SM_CXSMICON, dpi), y = win_get_system_metrics(SM_CYSMICON, dpi); + + for (i = 0; i < 256; i++) + hIcon[i] = LoadImage(hinstance, MAKEINTRESOURCE(i), IMAGE_ICON, x, y, LR_DEFAULTCOLOR); +} + +typedef struct +{ + int id; + char* filename; +} _ICON_DATA; + +const _ICON_DATA icon_files[] = + { + {16, "floppy_525.ico"}, + {17, "floppy_525_active.ico"}, + {24, "floppy_35.ico"}, + {25, "floppy_35_active.ico"}, + {32, "cdrom.ico"}, + {33, "cdrom_active.ico"}, + {48, "zip.ico"}, + {49, "zip_active.ico"}, + {56, "mo.ico"}, + {57, "mo_active.ico"}, + {64, "cassette.ico"}, + {65, "cassette_active.ico"}, + {80, "hard_disk.ico"}, + {81, "hard_disk_active.ico"}, + {96, "network.ico"}, + {97, "network_active.ico"}, + {104, "cartridge.ico"}, + {144, "floppy_525_empty.ico"}, + {145, "floppy_525_empty_active.ico"}, + {152, "floppy_35_empty.ico"}, + {153, "floppy_35_empty_active.ico"}, + {160, "cdrom_empty.ico"}, + {161, "cdrom_empty_active.ico"}, + {176, "zip_empty.ico"}, + {177, "zip_empty_active.ico"}, + {184, "mo_empty.ico"}, + {185, "mo_empty_active.ico"}, + {192, "cassette_empty.ico"}, + {193, "cassette_empty_active.ico"}, + {232, "cartridge_empty.ico"}, + {240, "machine.ico"}, + {241, "display.ico"}, + {242, "input_devices.ico"}, + {243, "sound.ico"}, + {244, "ports.ico"}, + {245, "other_peripherals.ico"}, + {246, "floppy_and_cdrom_drives.ico"}, + {247, "other_removable_devices.ico"}, + {248, "floppy_disabled.ico"}, + {249, "cdrom_disabled.ico"}, + {250, "zip_disabled.ico"}, + {251, "mo_disabled.ico"}, + {252, "storage_controllers.ico"} + }; + +void win_get_icons_path(char* path_root) +{ + char roms_root[1024] = {0}; + if (rom_path[0]) + strcpy(roms_root, rom_path); + else + plat_append_filename(roms_root, exe_path, "roms"); + + plat_append_filename(path_root, roms_root, "icons"); + plat_path_slash(path_root); +} + +void win_load_icon_set() +{ + win_clear_icon_set(); + win_system_icon_set(); + + if (strlen(icon_set) == 0) + return; + + char path_root[2048] = {0}, temp[2048] = {0}; + wchar_t wtemp[2048] = {0}; + + win_get_icons_path(path_root); + strcat(path_root, icon_set); + plat_path_slash(path_root); + + int i, count = sizeof(icon_files) / sizeof(_ICON_DATA), + x = win_get_system_metrics(SM_CXSMICON, dpi), y = win_get_system_metrics(SM_CYSMICON, dpi); + for (i = 0; i < count; i++) + { + plat_append_filename(temp, path_root, icon_files[i].filename); + mbstowcs(wtemp, temp, strlen(temp) + 1); + + HICON ictemp; + ictemp = LoadImageW(NULL, (LPWSTR)wtemp, IMAGE_ICON, x, y, LR_LOADFROMFILE | LR_DEFAULTCOLOR); + if (ictemp) + { + if (hIcon[icon_files[i].id]) + DestroyIcon(hIcon[icon_files[i].id]); + hIcon[icon_files[i].id] = ictemp; + } + } + + uint32_t curr_lang = lang_id; + lang_id = 0; + set_language(curr_lang); +} \ No newline at end of file diff --git a/src/win/win_lang.c b/src/win/win_progsett.c similarity index 53% rename from src/win/win_lang.c rename to src/win/win_progsett.c index 5f79e8c61..46ede599b 100644 --- a/src/win/win_lang.c +++ b/src/win/win_progsett.c @@ -6,8 +6,7 @@ * * This file is part of the 86Box distribution. * - * Handle the dialog for changing the program's language. - * + * Handle the dialog for changing the program's language and other global settings. * * * Authors: Laci bá' @@ -36,6 +35,8 @@ /* Language */ static LCID temp_language; +static char temp_icon_set[256] = {0}; + int enum_helper, c; HWND hwndProgSett; @@ -76,28 +77,104 @@ progsett_fill_languages(HWND hdlg) SendMessage(lang_combo, CB_SETCURSEL, enum_helper, 0); } +/* Load available iconsets */ +static void +progsett_fill_iconsets(HWND hdlg) +{ + HWND icon_combo = GetDlgItem(hdlg, IDC_COMBO_ICON); + + /* Add the default one */ + wchar_t buffer[512] = L"("; + wcscat(buffer, plat_get_string(IDS_2090)); + wcscat(buffer, L")"); + + SendMessage(icon_combo, CB_RESETCONTENT, 0, 0); + SendMessage(icon_combo, CB_ADDSTRING, 0, (LPARAM)buffer); + SendMessage(icon_combo, CB_SETITEMDATA, 0, (LPARAM)strdup("")); + + int combo_index = -1; + + /* Find for extra ones */ + HANDLE hFind; + WIN32_FIND_DATA data; + + char icon_path_root[512]; + win_get_icons_path(icon_path_root); + + wchar_t search[512]; + mbstowcs(search, icon_path_root, strlen(icon_path_root) + 1); + wcscat(search, L"*.*"); + + hFind = FindFirstFile((LPCWSTR)search, &data); + + if (hFind != INVALID_HANDLE_VALUE) { + do { + if (wcscmp(data.cFileName, L".") && wcscmp(data.cFileName, L"..") && + (data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) + { + wchar_t temp[512] = {0}, dispname[512] = {0}; + mbstowcs(temp, icon_path_root, strlen(icon_path_root) + 1); + wcscat(temp, data.cFileName); + wcscat(temp, L"\\iconinfo.txt"); + + wcscpy(dispname, data.cFileName); + FILE *fp = _wfopen(temp, L"r"); + if (fp) + { + char line[512] = {0}; + if (fgets(line, 511, fp)) + { + mbstowcs(dispname, line, strlen(line) + 1); + } + + fclose(fp); + } + + char filename[512]; + wcstombs(filename, data.cFileName, 511); + + int index = SendMessage(icon_combo, CB_ADDSTRING, 0, (LPARAM)dispname); + SendMessage(icon_combo, CB_SETITEMDATA, index, (LPARAM)(strdup(filename))); + + if (!strcmp(filename, icon_set)) + combo_index = index; + } + } while (FindNextFile(hFind, &data)); + FindClose(hFind); + } + + if (combo_index == -1) + { + combo_index = 0; + strcpy(temp_icon_set, ""); + } + + SendMessage(icon_combo, CB_SETCURSEL, combo_index, 0); +} + /* This returns 1 if any variable has changed, 0 if not. */ static int progsett_settings_changed(void) { - int i = 0; + int i = 0; /* Language */ i = i || has_language_changed(temp_language); + i = i || strcmp(temp_icon_set, icon_set); - return i; + return i; } /* IndexOf by ItemData */ static int progsett_indexof(HWND combo, LPARAM itemdata) { - int i; - for (i = 0; i < SendMessage(combo, CB_GETCOUNT, 0, 0); i++) - if (SendMessage(combo, CB_GETITEMDATA, i, 0) == itemdata) - return i; + int i; + for (i = 0; i < SendMessage(combo, CB_GETCOUNT, 0, 0); i++) + if (SendMessage(combo, CB_GETITEMDATA, i, 0) == itemdata) + return i; - return -1; + return -1; } /* This saves the settings back to the global variables. */ @@ -107,16 +184,20 @@ progsett_settings_save(void) /* Language */ set_language(temp_language); + /* Iconset */ + strcpy(icon_set, temp_icon_set); + win_load_icon_set(); + /* Update title bar */ - update_mouse_msg(); + update_mouse_msg(); - /* Update status bar */ - config_changed = 1; - ui_sb_set_ready(0); - ui_sb_update_panes(); + /* Update status bar */ + config_changed = 1; + ui_sb_set_ready(0); + ui_sb_update_panes(); - /* Save the language changes */ - config_save(); + /* Save the language changes */ + config_save(); } #if defined(__amd64__) || defined(__aarch64__) @@ -131,7 +212,9 @@ ProgSettDlgProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) hwndProgSett = hdlg; /* Language */ temp_language = lang_id; + strcpy(temp_icon_set, icon_set); progsett_fill_languages(hdlg); + progsett_fill_iconsets(hdlg); break; case WM_COMMAND: @@ -154,6 +237,14 @@ ProgSettDlgProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) } break; + case IDC_COMBO_ICON: + if (HIWORD(wParam) == CBN_SELCHANGE) { + HWND combo = GetDlgItem(hdlg, IDC_COMBO_ICON); + int index = SendMessage(combo, CB_GETCURSEL, 0, 0); + strcpy(temp_icon_set, (char*)SendMessage(combo, CB_GETITEMDATA, index, 0)); + } + break; + case IDC_BUTTON_DEFAULT: { HWND combo = GetDlgItem(hdlg, IDC_COMBO_LANG); int index = progsett_indexof(combo, DEFAULT_LANGUAGE); @@ -161,10 +252,33 @@ ProgSettDlgProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam) temp_language = DEFAULT_LANGUAGE; break; } + + case IDC_BUTTON_DEFICON: { + SendMessage(GetDlgItem(hdlg, IDC_COMBO_ICON), CB_SETCURSEL, 0, 0); + strcpy(temp_icon_set, ""); + break; + } default: break; } break; + + case WM_DESTROY: { + int i; + LRESULT temp; + HWND combo = GetDlgItem(hdlg, IDC_COMBO_ICON); + for (i = 0; i < SendMessage(combo, CB_GETCOUNT, 0, 0); i++) + { + temp = SendMessage(combo, CB_GETITEMDATA, i, 0); + if (temp) + { + free((void*)temp); + SendMessage(combo, CB_SETITEMDATA, i, 0); + } + } + } + break; + } return(FALSE); diff --git a/src/win/win_settings.c b/src/win/win_settings.c index d7fdb3816..4d253d8f7 100644 --- a/src/win/win_settings.c +++ b/src/win/win_settings.c @@ -76,7 +76,6 @@ static int first_cat = 0; -static int dpi = 96; /* Machine category */ static int temp_machine_type, temp_machine, temp_cpu, temp_wait_states, temp_fpu, temp_sync; @@ -265,13 +264,8 @@ image_list_init(HWND hdlg, int id, const uint8_t *icon_ids) if (icon_ids[i] == 0) break; -#if defined(__amd64__) || defined(__aarch64__) - hiconItem = LoadIcon(hinstance, (LPCWSTR) ((uint64_t) icon_ids[i])); -#else - hiconItem = LoadIcon(hinstance, (LPCWSTR) ((uint32_t) icon_ids[i])); -#endif + hiconItem = hIcon[icon_ids[i]]; ImageList_AddIcon(hSmall, hiconItem); - DestroyIcon(hiconItem); i++; } diff --git a/src/win/win_stbar.c b/src/win/win_stbar.c index b89bcafed..c980253e0 100644 --- a/src/win/win_stbar.c +++ b/src/win/win_stbar.c @@ -71,7 +71,6 @@ static uint8_t *sb_part_icons; static int sb_parts = 0; static int sb_ready = 0; static uint8_t sb_map[256]; -static int dpi = 96; static int icon_width = 24; static wchar_t sb_text[512] = L"\0"; static wchar_t sb_bugtext[512] = L"\0"; @@ -878,46 +877,7 @@ StatusBarPopupMenu(HWND hwnd, POINT pt, int id) /* API: Load status bar icons */ void StatusBarLoadIcon(HINSTANCE hInst) { - int i; - int x = win_get_system_metrics(SM_CXSMICON, dpi); - - for (i=0; i<256; i++) { - if (hIcon[i] != 0) - DestroyIcon(hIcon[i]); - } - - for (i = 16; i < 18; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 24; i < 26; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 32; i < 34; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 48; i < 50; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 56; i < 58; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 64; i < 66; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 80; i < 82; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 96; i < 98; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - hIcon[104] = LoadImage(hInst, MAKEINTRESOURCE(104), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 144; i < 146; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 152; i < 154; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 160; i < 162; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 176; i < 178; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 184; i < 186; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 192; i < 194; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - hIcon[232] = LoadImage(hInst, MAKEINTRESOURCE(232), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); - for (i = 243; i < 244; i++) - hIcon[i] = LoadImage(hInst, MAKEINTRESOURCE(i), IMAGE_ICON, x, x, LR_DEFAULTCOLOR); + win_load_icon_set(); } /* Handle messages for the Status Bar window. */ diff --git a/src/win/win_ui.c b/src/win/win_ui.c index 57ef417a2..e5ab4958c 100644 --- a/src/win/win_ui.c +++ b/src/win/win_ui.c @@ -59,7 +59,6 @@ HWND hwndMain, /* application main window */ hwndRender; /* machine render window */ HMENU menuMain; /* application main menu */ -HICON hIcon[256]; /* icon data loaded from resources */ RECT oldclip; /* mouse rect */ int sbar_height = 23; /* statusbar height */ int minimized = 0; @@ -69,6 +68,7 @@ int user_resize = 0; int fixed_size_x = 0, fixed_size_y = 0; int kbd_req_capture = 0; int hide_status_bar = 0; +int dpi = 96; extern char openfilestring[512]; extern WCHAR wopenfilestring[512]; @@ -78,7 +78,6 @@ extern WCHAR wopenfilestring[512]; static wchar_t wTitle[512]; static int manager_wm = 0; static int save_window_pos = 0, pause_state = 0; -static int dpi = 96; static int padded_frame = 0; static int vis = -1; @@ -153,15 +152,6 @@ show_cursor(int val) vis = val; } - -HICON -LoadIconEx(PCTSTR pszIconName) -{ - return((HICON)LoadImage(hinstance, pszIconName, IMAGE_ICON, - 16, 16, LR_SHARED)); -} - - static void video_toggle_option(HMENU h, int *val, int id) { @@ -203,22 +193,22 @@ delete_submenu(HMENU parent, HMENU target) } #endif +static int menu_vidapi = -1; +static HMENU cur_menu = NULL; + static void show_render_options_menu() { #if defined(DEV_BRANCH) && defined(USE_OPENGL) - static int menu_vidapi = -1; - static HMENU cur_menu = NULL; - if (vid_api == menu_vidapi) return; - + if (cur_menu != NULL) { if (delete_submenu(menuMain, cur_menu)) cur_menu = NULL; } - + if (cur_menu == NULL) { switch (IDM_VID_SDL_SW + vid_api) @@ -251,7 +241,7 @@ video_set_filter_menu(HMENU menu) EnableMenuItem(menu, IDM_VID_FILTER_LINEAR, vid_api == 0 ? MF_GRAYED : MF_ENABLED); } -static void +void ResetAllMenus(void) { CheckMenuItem(menuMain, IDM_ACTION_RCTRL_IS_LALT, MF_UNCHECKED); @@ -294,6 +284,9 @@ ResetAllMenus(void) CheckMenuItem(menuMain, IDM_VID_SDL_OPENGL, MF_UNCHECKED); #if defined(DEV_BRANCH) && defined(USE_OPENGL) CheckMenuItem(menuMain, IDM_VID_OPENGL_CORE, MF_UNCHECKED); + + menu_vidapi = -1; + cur_menu = NULL; show_render_options_menu(); #endif #ifdef USE_VNC @@ -1074,6 +1067,7 @@ MainWindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) break; case WM_DESTROY: + win_clear_icon_set(); KillTimer(hwnd, TIMER_1SEC); PostQuitMessage(0); break; @@ -1401,9 +1395,17 @@ ui_init(int nCmdShow) ResizeWindowByClientArea(hwndMain, scrnsz_x, scrnsz_y + sbar_height); } + /* Load the desired language, and reset all menus to their defaults */ + uint32_t helper_lang = lang_id; + lang_id = 0; + set_language(helper_lang); + /* Reset all menus to their defaults. */ ResetAllMenus(); media_menu_init(); + + /* Load the desired iconset */ + win_load_icon_set(); /* Make the window visible on the screen. */ ShowWindow(hwnd, nCmdShow);