diff --git a/src/86box.c b/src/86box.c index 1879bbd41..67a81fba1 100644 --- a/src/86box.c +++ b/src/86box.c @@ -1042,12 +1042,21 @@ usage: path_append_filename(temp, exe_path, "assets"); asset_add_path(temp); -#ifdef __APPLE__ +#if defined(__APPLE__) // Add the standard asset path within the app bundle. if (contents_path[0] != '\0') { path_append_filename(temp, contents_path, "Resources/assets"); asset_add_path(temp); } +#elif !defined(_WIN32) + // Add the standard asset paths within the AppImage. + p = getenv("APPDIR"); + if (p && (p[0] != '\0')) { + path_append_filename(temp, p, "usr/local/share/" EMU_NAME "/assets"); + asset_add_path(temp); + path_append_filename(temp, p, "usr/share/" EMU_NAME "/assets"); + asset_add_path(temp); + } #endif plat_init_asset_paths(); @@ -2132,17 +2141,6 @@ set_screen_size_natural(void) set_screen_size(monitors[i].mon_unscaled_size_x, monitors[i].mon_unscaled_size_y); } -int -get_actual_size_x(void) -{ - return (unscaled_size_x); -} - -int -get_actual_size_y(void) -{ - return (efscrnsz_y); -} void do_pause(int p) diff --git a/src/codegen_new/codegen.c b/src/codegen_new/codegen.c index 875dd72ca..fcdc1d948 100644 --- a/src/codegen_new/codegen.c +++ b/src/codegen_new/codegen.c @@ -676,7 +676,6 @@ generate_call: if ((recomp_op_table == recomp_opcodes) && (opcode == 0x48)) goto codegen_skip; #endif - if (in_lock && ((opcode == 0x90) || (opcode == 0xec))) goto codegen_skip; diff --git a/src/codegen_new/codegen_ops.c b/src/codegen_new/codegen_ops.c index 68861ff52..70481343b 100644 --- a/src/codegen_new/codegen_ops.c +++ b/src/codegen_new/codegen_ops.c @@ -258,6 +258,7 @@ RecompOpFn recomp_opcodes_d8[512] = { RecompOpFn recomp_opcodes_d9[512] = { // clang-format off + /* TODO: Fix the recompilation of D9 44 so Blood II's gameplay music no longer breaks! */ /*16-bit data*/ /* 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f*/ /*00*/ ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, @@ -265,7 +266,7 @@ RecompOpFn recomp_opcodes_d9[512] = { /*20*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /*30*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, -/*40*/ ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +/*40*/ ropFLDs, ropFLDs, ropFLDs, ropFLDs, NULL, ropFLDs, ropFLDs, ropFLDs, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /*50*/ ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, /*60*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /*70*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, @@ -287,7 +288,7 @@ RecompOpFn recomp_opcodes_d9[512] = { /*20*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /*30*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, -/*40*/ ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, ropFLDs, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, +/*40*/ ropFLDs, ropFLDs, ropFLDs, ropFLDs, NULL, ropFLDs, ropFLDs, ropFLDs, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /*50*/ ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, ropFSTPs, /*60*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, /*70*/ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, ropFSTCW, diff --git a/src/config.c b/src/config.c index 197ed6b27..d5deded9d 100644 --- a/src/config.c +++ b/src/config.c @@ -408,8 +408,7 @@ load_machine(void) p = ini_section_get_string(cat, "cpu_family", NULL); if (p) { /* Migrate CPU family changes. */ - if ((!strcmp(machines[machine].internal_name, "deskpro386") || - !strcmp(machines[machine].internal_name, "deskpro386_05_1988"))) + if (machines[machine].init == machine_at_deskpro386_init) cpu_f = cpu_get_family("i386dx_deskpro386"); else cpu_f = cpu_get_family(p); @@ -1511,11 +1510,14 @@ load_floppy_and_cdrom_drives(void) sprintf(temp, "fdd_%02i_check_bpb", c + 1); ini_section_delete_var(cat, temp); } - sprintf(temp, "fdd_%02i_audio", c + 1); + sprintf(temp, "fdd_%02i_audio", c + 1); #ifndef DISABLE_FDD_AUDIO - p = ini_section_get_string(cat, temp, "none"); - int prof = fdd_audio_get_profile_by_internal_name(p); - fdd_set_audio_profile(c, prof); + p = ini_section_get_string(cat, temp, "none"); + if (!strcmp(p, "panasonic")) + d = fdd_audio_get_profile_by_internal_name("panasonic_ju4755_40t"); + else + d = fdd_audio_get_profile_by_internal_name(p); + fdd_set_audio_profile(c, d); #else fdd_set_audio_profile(c, 0); #endif diff --git a/src/device/kbc_at.c b/src/device/kbc_at.c index b2e027cd3..771b95c2a 100644 --- a/src/device/kbc_at.c +++ b/src/device/kbc_at.c @@ -37,7 +37,6 @@ #include <86box/fdd.h> #include <86box/fdc.h> #include <86box/pci.h> -#include <86box/video.h> #include <86box/keyboard.h> #define STAT_PARITY 0x80 @@ -2786,18 +2785,14 @@ static void kbc_at_reset(void *priv) { atkbc_t *dev = (atkbc_t *) priv; - uint8_t kbc_ven = dev->flags & KBC_VEN_MASK; dev->status = STAT_UNLOCKED; dev->mem[0x20] = 0x01; dev->mem[0x20] |= CCB_TRANSLATE; dev->command_phase = 0; - /* Set up the correct Video Type bits. */ - if (!is286 || (kbc_ven == KBC_VEN_ACER)) - dev->p1 = video_is_mda() ? 0xb0 : 0xf0; - else - dev->p1 = video_is_mda() ? 0xf0 : 0xb0; + /* Video Type is now handled in the machine P1 handler. */ + dev->p1 = 0xf0; kbc_at_log("ATkbc: P1 = %02x\n", dev->p1); /* Disabled both the keyboard and auxiliary ports. */ @@ -2918,7 +2913,6 @@ kbc_at_init(const device_t *info) dev->is_asic = !!(info->local & KBC_FLAG_IS_ASIC); dev->is_type2 = !!(info->local & KBC_FLAG_IS_TYPE2); - video_reset(gfxcard[0]); kbc_at_reset(dev); dev->handlers[0].read = kbc_at_port_1_read; diff --git a/src/device/postcard.c b/src/device/postcard.c index 908adfe72..d94bc8ddf 100644 --- a/src/device/postcard.c +++ b/src/device/postcard.c @@ -204,7 +204,7 @@ postcard_init(UNUSED(const device_t *info)) postcard_port = 0x84; /* ISA Compaq machines */ else if (strstr(machines[machine].name, "Olivetti")) postcard_port = 0x378; /* Olivetti machines */ - else if (!strcmp(machines[machine].internal_name, "isa486c")) + else if (machines[machine].init == machine_at_isa486c_init) postcard_port = 0x5080; /* ASUS ISA-486C */ else postcard_port = 0x80; /* AT and clone machines */ diff --git a/src/include/86box/machine.h b/src/include/86box/machine.h index 6b84d2b57..b39ecdad6 100644 --- a/src/include/86box/machine.h +++ b/src/include/86box/machine.h @@ -422,7 +422,6 @@ extern int machine_get_type(int m); extern int machine_get_chipset(int m); extern void machine_close(void); extern int machine_has_mouse(void); -extern int machine_is_sony(void); extern uint8_t machine_compaq_p1_handler(void); extern uint8_t machine_generic_p1_handler(void); diff --git a/src/include/86box/version.h.in b/src/include/86box/version.h.in index 096bb6516..693bb8095 100644 --- a/src/include/86box/version.h.in +++ b/src/include/86box/version.h.in @@ -50,7 +50,7 @@ /* Web URL info. */ #define EMU_SITE "86box.net" #define EMU_SITE_W LSTR(EMU_SITE) -#define EMU_ROMS_URL "https://github.com/86Box/roms/releases/latest" +#define EMU_ROMS_URL "https://github.com/@CMAKE_PROJECT_NAME@/roms/releases/latest" #define EMU_ROMS_URL_W LSTR(EMU_ROMS_URL) #ifdef RELEASE_BUILD # define EMU_DOCS_URL "https://86box.readthedocs.io/en/v@CMAKE_PROJECT_VERSION_MAJOR@.@CMAKE_PROJECT_VERSION_MINOR@/" diff --git a/src/include/86box/vid_mda.h b/src/include/86box/vid_mda.h index 17c028343..4d11305f4 100644 --- a/src/include/86box/vid_mda.h +++ b/src/include/86box/vid_mda.h @@ -18,6 +18,7 @@ // Defines #define MDA_CRTC_NUM_REGISTERS 32 +#define MDA_VRAM 0x1000 // Enums & structures diff --git a/src/include/86box/vid_voodoo_codegen_x86-64.h b/src/include/86box/vid_voodoo_codegen_x86-64.h index 67a5cae2c..8b1413ad4 100644 --- a/src/include/86box/vid_voodoo_codegen_x86-64.h +++ b/src/include/86box/vid_voodoo_codegen_x86-64.h @@ -653,14 +653,15 @@ codegen_texture_fetch(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *pa static inline void voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t *state, int depthop) { - int block_pos = 0; - int z_skip_pos = 0; - int a_skip_pos = 0; - int amask_skip_pos = 0; - int chroma_skip_pos = 0; - int depth_jump_pos = 0; - int depth_jump_pos2 = 0; - int loop_jump_pos = 0; + int block_pos = 0; + int z_skip_pos = 0; + int a_skip_pos = 0; + int amask_skip_pos = 0; + int stipple_skip_pos = 0; + int chroma_skip_pos = 0; + int depth_jump_pos = 0; + int depth_jump_pos2 = 0; + int loop_jump_pos = 0; #if 0 xmm_01_w = (__m128i)0x0001000100010001ull; xmm_ff_w = (__m128i)0x00ff00ff00ff00ffull; @@ -766,6 +767,69 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params, addquad((uint64_t) (uintptr_t) &i_00_ff_w); loop_jump_pos = block_pos; + if (params->fbzMode & FBZ_STIPPLE) { + /* Stipple enabled. */ + if (params->fbzMode & FBZ_STIPPLE_PATT) { + /* x64's BT instruction is too slow. So use TEST instead. */ + addbyte(0x4c); /* MOV RBX, R14(real_y)*/ + addbyte(0x89); + addbyte(0xf3); + + addbyte(0x83); /* AND EBX, 3 */ + addbyte(0xe3); + addbyte(0x03); + + addbyte(0xc1); /* SHL EBX, 3 */ + addbyte(0xe3); + addbyte(0x03); + + addbyte(0x8b); /*MOV EAX, state->x[EDI]*/ + addbyte(0x87); + addlong(offsetof(voodoo_state_t, x)); + + addbyte(0xf7); /* NOT EAX */ + addbyte(0xd0); + + addbyte(0x83); /* AND EAX, 7 */ + addbyte(0xe0); + addbyte(0x07); + + addbyte(0x09); /* OR EAX, EBX */ + addbyte(0xc3); + + addbyte(0x88); /* MOV CL, AL */ + addbyte(0xc1); + + addbyte(0xb8); /* MOV EAX, 1*/ + addlong(1); + + addbyte(0xd3); /* SHL EAX, CL */ + addbyte(0xe0); + + addbyte(0x85); /* TEST state->stipple[EDI], EAX */ + addbyte(0x87); + addlong(offsetof(voodoo_state_t, stipple)); + + addbyte(0x0f); /* JZ stipple_skip_pos */ + addbyte(0x84); + stipple_skip_pos = block_pos; + addlong(0); + } else { + addbyte(0xd1); /* ROR state->stipple[EDI], 1*/ + addbyte(0x8f); + addlong(offsetof(voodoo_state_t, stipple)); + + addbyte(0xf7); /* TEST state->stipple[EDI], 0x80000000 */ + addbyte(0x87); + addlong(offsetof(voodoo_state_t, stipple)); + addlong(0x80000000); + + addbyte(0x0f); /* JZ stipple_skip_pos */ + addbyte(0x84); + stipple_skip_pos = block_pos; + addlong(0); + } + } addbyte(0x4c); /*MOV RSI, R15*/ addbyte(0x89); addbyte(0xfe); @@ -3190,6 +3254,8 @@ voodoo_generate(uint8_t *code_block, voodoo_t *voodoo, voodoo_params_t *params, *(uint32_t *) &code_block[chroma_skip_pos] = (block_pos - chroma_skip_pos) - 4; if (amask_skip_pos) *(uint32_t *) &code_block[amask_skip_pos] = (block_pos - amask_skip_pos) - 4; + if (stipple_skip_pos) + *(uint32_t *) &code_block[stipple_skip_pos] = (block_pos - stipple_skip_pos) - 4; addbyte(0x4c); /*MOV RSI, R15*/ addbyte(0x89); diff --git a/src/include/86box/vid_voodoo_common.h b/src/include/86box/vid_voodoo_common.h index d87c1f731..2870f09ea 100644 --- a/src/include/86box/vid_voodoo_common.h +++ b/src/include/86box/vid_voodoo_common.h @@ -667,6 +667,8 @@ typedef struct voodoo_t { struct voodoo_set_t *set; + uint32_t launch_pending; + uint8_t fifo_thread_run; uint8_t render_thread_run[4]; diff --git a/src/include/86box/vid_voodoo_regs.h b/src/include/86box/vid_voodoo_regs.h index 3340720a7..9f3260c9f 100644 --- a/src/include/86box/vid_voodoo_regs.h +++ b/src/include/86box/vid_voodoo_regs.h @@ -358,6 +358,7 @@ enum { enum { FBZ_CHROMAKEY = (1 << 1), + FBZ_STIPPLE = (1 << 2), FBZ_W_BUFFER = (1 << 3), FBZ_DEPTH_ENABLE = (1 << 4), @@ -366,6 +367,8 @@ enum { FBZ_DEPTH_WMASK = (1 << 10), FBZ_DITHER_2x2 = (1 << 11), + FBZ_STIPPLE_PATT = (1 << 12), + FBZ_ALPHA_MASK = (1 << 13), FBZ_DRAW_FRONT = 0x0000, diff --git a/src/include/86box/video.h b/src/include/86box/video.h index ff63a3a79..b94bdf415 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -58,6 +58,21 @@ enum { VIDEO_AGP }; +typedef enum video_font_format_e +{ + FONT_FORMAT_MDA = 0, + FONT_FORMAT_PC200 = 1, + FONT_FORMAT_CGA = 2, + FONT_FORMAT_WY700 = 3, + FONT_FORMAT_MDSI_GENIUS = 4, + FONT_FORMAT_TOSHIBA_3100E = 5, + FONT_FORMAT_KSC6501 = 6, + FONT_FORMAT_SIGMA = 7, + FONT_FORMAT_PC1512_T1000 = 8, + FONT_FORMAT_IM1024 = 9, + FONT_FORMAT_PRAVETZ = 10, +} video_font_format; + #define VIDEO_FLAG_TYPE_CGA 0 #define VIDEO_FLAG_TYPE_MDA 1 #define VIDEO_FLAG_TYPE_SPECIAL 2 @@ -202,8 +217,6 @@ extern int video_fullscreen; extern int video_fullscreen_scale; extern uint8_t fontdat[2048][8]; /* IBM CGA font */ extern uint8_t fontdatm[2048][16]; /* IBM MDA font */ -extern uint8_t fontdat2[2048][8]; /* IBM CGA 2nd instance font */ -extern uint8_t fontdatm2[2048][16]; /* IBM MDA 2nd instance font */ extern uint8_t fontdatw[512][32]; /* Wyse700 font */ extern uint8_t fontdat8x12[256][16]; /* MDSI Genius font */ extern uint8_t fontdat12x18[256][36]; /* IM1024 font */ @@ -253,9 +266,6 @@ extern int video_get_video_from_internal_name(char *s); extern int video_card_get_flags(int card); extern int video_is_mda(void); extern int video_is_cga(void); -extern int video_is_ega_vga(void); -extern int video_is_8514(void); -extern int video_is_xga(void); extern void video_inform_monitor(int type, const video_timings_t *ptr, int monitor_index); extern int video_get_type_monitor(int monitor_index); @@ -288,12 +298,8 @@ extern uint8_t video_force_resize_get_monitor(int monitor_index); extern void video_force_resize_set_monitor(uint8_t res, int monitor_index); extern void video_update_timing(void); -extern void loadfont_ex(char *fn, int format, int offset); -extern void loadfont(char *fn, int format); - -extern int get_actual_size_x(void); -extern int get_actual_size_y(void); - +#define LOAD_FONT_NO_OFFSET 0 +extern void video_load_font(char *fn, int format, int offset); extern uint32_t video_color_transform(uint32_t color); #define video_inform(type, video_timings_ptr) video_inform_monitor(type, video_timings_ptr, monitor_index_global) diff --git a/src/machine/m_amstrad.c b/src/machine/m_amstrad.c index 8e52bd488..f056397a1 100644 --- a/src/machine/m_amstrad.c +++ b/src/machine/m_amstrad.c @@ -3020,7 +3020,7 @@ machine_amstrad_init(const machine_t *model, int type) if (gfxcard[0] == VID_INTERNAL) switch (type) { case AMS_PC1512: - loadfont("roms/machines/pc1512/40078", 8); + video_load_font("roms/machines/pc1512/40078", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET); device_context(&vid_1512_device); ams->language = device_get_config_int("language"); vid_init_1512(ams); @@ -3029,7 +3029,7 @@ machine_amstrad_init(const machine_t *model, int type) break; case AMS_PPC512: - loadfont("roms/machines/ppc512/40109", 1); + video_load_font("roms/machines/ppc512/40109", FONT_FORMAT_PC200, LOAD_FONT_NO_OFFSET); device_context(&vid_ppc512_device); ams->language = device_get_config_int("language"); vid_init_200(ams); @@ -3038,7 +3038,7 @@ machine_amstrad_init(const machine_t *model, int type) break; case AMS_PC1640: - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); device_context(&vid_1640_device); ams->language = device_get_config_int("language"); vid_init_1640(ams); @@ -3047,7 +3047,7 @@ machine_amstrad_init(const machine_t *model, int type) break; case AMS_PC200: - loadfont("roms/machines/pc200/40109", 1); + video_load_font("roms/machines/pc200/40109", FONT_FORMAT_PC200, LOAD_FONT_NO_OFFSET); device_context(&vid_200_device); ams->language = device_get_config_int("language"); vid_init_200(ams); diff --git a/src/machine/m_at_slot1.c b/src/machine/m_at_slot1.c index d4a4742e5..870837713 100644 --- a/src/machine/m_at_slot1.c +++ b/src/machine/m_at_slot1.c @@ -432,6 +432,33 @@ static const device_config_t bx6_config[] = { .size = 131072, .files = { "roms/machines/bx6/BX6_EG.BIN", "" } }, + { + .name = "Award Modular BIOS v4.51PG - Revision CW", + .internal_name = "bx6_CW", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/bx6/BX6_CW.bin", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision GQ", + .internal_name = "bx6_GQ", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/bx6/BX6_GQ.bin", "" } + }, + { + .name = "Award Modular BIOS v4.51PG - Revision JL", + .internal_name = "bx6_JL", + .bios_type = BIOS_NORMAL, + .files_no = 1, + .local = 0, + .size = 131072, + .files = { "roms/machines/bx6/BX6_JL.bin", "" } + }, { .name = "Award Modular BIOS v4.51PG - Revision QS", .internal_name = "bx6_qs", diff --git a/src/machine/m_pcjr.c b/src/machine/m_pcjr.c index 78f7ba710..10d2d0c7b 100644 --- a/src/machine/m_pcjr.c +++ b/src/machine/m_pcjr.c @@ -897,7 +897,7 @@ machine_pcjr_init(UNUSED(const machine_t *model)) /* Initialize the video controller. */ video_reset(gfxcard[0]); - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); device_context(&pcjr_device); pcjr_vid_init(pcjr); device_context_restore(); diff --git a/src/machine/m_v86p.c b/src/machine/m_v86p.c index 0be44de53..126517345 100644 --- a/src/machine/m_v86p.c +++ b/src/machine/m_v86p.c @@ -77,9 +77,9 @@ machine_v86p_init(const machine_t *model) return ret; if (rom_id == 2) - loadfont("roms/machines/v86p/V86P.FON", 8); + video_load_font("roms/machines/v86p/V86P.FON", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET); else - loadfont("roms/machines/v86p/v86pfont.rom", 8); + video_load_font("roms/machines/v86p/v86pfont.rom", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET); machine_common_init(model); diff --git a/src/machine/m_xt.c b/src/machine/m_xt.c index 2d314b7f2..81c9eba72 100644 --- a/src/machine/m_xt.c +++ b/src/machine/m_xt.c @@ -2154,7 +2154,7 @@ machine_xt_maz1016_init(const machine_t *model) if (bios_only || !ret) return ret; - loadfont("roms/machines/maz1016/crt-8.bin", 0); + video_load_font("roms/machines/maz1016/crt-8.bin", FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); machine_xt_clone_init(model, 0); diff --git a/src/machine/m_xt_olivetti.c b/src/machine/m_xt_olivetti.c index 50a891e2c..e6c64cf95 100644 --- a/src/machine/m_xt_olivetti.c +++ b/src/machine/m_xt_olivetti.c @@ -2018,7 +2018,7 @@ m19_vid_init(m19_vid_t *vid) #endif /* OGC emulation part begin */ - loadfont("roms/machines/m19/MBM2764-30 8514 107 AB PCF3.BIN", 7); + video_load_font("roms/machines/m19/MBM2764-30 8514 107 AB PCF3.BIN", FONT_FORMAT_SIGMA, LOAD_FONT_NO_OFFSET); /* composite is not working yet */ vid->ogc.cga.composite = 0; // (display_type != CGA_RGB); vid->ogc.cga.revision = device_get_config_int("composite_type"); diff --git a/src/machine/m_xt_t1000.c b/src/machine/m_xt_t1000.c index 87899e7c6..8fd692588 100644 --- a/src/machine/m_xt_t1000.c +++ b/src/machine/m_xt_t1000.c @@ -846,7 +846,7 @@ machine_xt_t1000_init(const machine_t *model) t1000.ems_port_index = 7; /* EMS disabled */ /* Load the T1000 CGA Font ROM. */ - loadfont("roms/machines/t1000/t1000font.bin", 2); + video_load_font("roms/machines/t1000/t1000font.bin", FONT_FORMAT_CGA, LOAD_FONT_NO_OFFSET); /* * The ROM drive is optional. @@ -928,7 +928,7 @@ machine_xt_t1200_init(const machine_t *model) t1000.ems_port_index = 7; /* EMS disabled */ /* Load the T1000 CGA Font ROM. */ - loadfont("roms/machines/t1000/t1000font.bin", 2); + video_load_font("roms/machines/t1000/t1000font.bin", FONT_FORMAT_CGA, LOAD_FONT_NO_OFFSET); /* Map the EMS page frame */ for (uint8_t pg = 0; pg < 4; pg++) { diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 792409e9b..e404a3f4a 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -20715,12 +20715,6 @@ machine_has_mouse(void) return (machines[machine].flags & MACHINE_MOUSE); } -int -machine_is_sony(void) -{ - return (!strcmp(machines[machine].internal_name, "pcv90")); -} - const char * machine_get_nvr_name_ex(int m) { diff --git a/src/mem/rom.c b/src/mem/rom.c index 5798b4252..c2959e1b3 100644 --- a/src/mem/rom.c +++ b/src/mem/rom.c @@ -55,64 +55,54 @@ rom_log(const char *fmt, ...) # define rom_log(fmt, ...) #endif +static void +add_path(rom_path_t *list, const char *path) +{ + rom_path_t *rom_path = calloc(1, sizeof(rom_path_t)); + + /* Save the path, turning it into absolute if needed. */ + if (!path_abs((char *) path)) { + plat_getcwd(rom_path->path, sizeof(rom_path->path)); + path_append_filename(rom_path->path, rom_path->path, path); + } else { + strncpy(rom_path->path, path, sizeof(rom_path->path) - 1); + } + + /* Ensure the path ends with a separator. */ + path_slash(rom_path->path); + + /* Iterate to the end of the list. */ + if (list->path[0] != '\0') { + while (1) { + /* Check for duplicates. */ + if (!strcmp(list->path, rom_path->path)) { + free(rom_path); + return; + } + if (list->next == NULL) + break; + list = list->next; + } + + /* Add the new entry. */ + list->next = rom_path; + } else { + /* Set path on the first entry. */ + memcpy(list, rom_path, sizeof(rom_path_t)); + free(rom_path); + } +} + void rom_add_path(const char *path) { - char cwd[1024] = { 0 }; - - rom_path_t *rom_path = &rom_paths; - - if (rom_paths.path[0] != '\0') { - // Iterate to the end of the list. - while (rom_path->next != NULL) { - rom_path = rom_path->next; - } - - // Allocate the new entry. - rom_path = rom_path->next = calloc(1, sizeof(rom_path_t)); - } - - // Save the path, turning it into absolute if needed. - if (!path_abs((char *) path)) { - plat_getcwd(cwd, sizeof(cwd)); - path_slash(cwd); - snprintf(rom_path->path, sizeof(rom_path->path), "%s%s", cwd, path); - } else { - snprintf(rom_path->path, sizeof(rom_path->path), "%s", path); - } - - // Ensure the path ends with a separator. - path_slash(rom_path->path); + add_path(&rom_paths, path); } void asset_add_path(const char *path) { - char cwd[1024] = { 0 }; - - rom_path_t *asset_path = &asset_paths; - - if (asset_paths.path[0] != '\0') { - // Iterate to the end of the list. - while (asset_path->next != NULL) { - asset_path = asset_path->next; - } - - // Allocate the new entry. - asset_path = asset_path->next = calloc(1, sizeof(rom_path_t)); - } - - // Save the path, turning it into absolute if needed. - if (!path_abs((char *) path)) { - plat_getcwd(cwd, sizeof(cwd)); - path_slash(cwd); - snprintf(asset_path->path, sizeof(asset_path->path), "%s%s", cwd, path); - } else { - snprintf(asset_path->path, sizeof(asset_path->path), "%s", path); - } - - // Ensure the path ends with a separator. - path_slash(asset_path->path); + add_path(&asset_paths, path); } static int diff --git a/src/qt/languages/ca-ES.po b/src/qt/languages/ca-ES.po new file mode 100644 index 000000000..dabe58233 --- /dev/null +++ b/src/qt/languages/ca-ES.po @@ -0,0 +1,3001 @@ +msgid "" +msgstr "" +"PO-Revision-Date: 2025-11-29 00:34+0000\n" +"Last-Translator: OBattler \n" +"Language-Team: Catalan \n" +"Language: ca-ES\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 5.12.2\n" +"X-Language: ca_ES\n" +"X-Source-Language: en_US\n" + +msgid "&Action" +msgstr "&Acció" + +msgid "&Keyboard requires capture" +msgstr "&Teclat requereix captura" + +msgid "&Right CTRL is left ALT" +msgstr "CTRL &dret és ALT esquerre" + +msgid "&Hard reset" +msgstr "&Reiniciació completa" + +msgid "&Ctrl+Alt+Del" +msgstr "&Ctrl+Alt+Del" + +msgid "Ctrl+Alt+&Esc" +msgstr "Ctrl+Alt+&Esc" + +msgid "&Pause" +msgstr "&Pausa" + +msgid "Pause" +msgstr "Pausa" + +msgid "Re&sume" +msgstr "Re&prendre" + +msgid "E&xit" +msgstr "&Sortir" + +msgid "&View" +msgstr "&Visualització" + +msgid "&Hide status bar" +msgstr "&Ocultar barra d'estat" + +msgid "Hide &toolbar" +msgstr "Ocultar &barra d'eines" + +msgid "&Resizeable window" +msgstr "Fi&nestra redimensionable" + +msgid "R&emember size && position" +msgstr "&Recordar grandària i posició" + +msgid "Remember size && position" +msgstr "Recordar grandària i posició" + +msgid "Re&nderer" +msgstr "Re&ndidor" + +msgid "&Qt (Software)" +msgstr "&Qt (Software)" + +msgid "Open&GL (3.0 Core)" +msgstr "Open&GL (3.0 Core)" + +msgid "&VNC" +msgstr "&VNC" + +msgid "Specify &dimensions…" +msgstr "E&specificar dimensions…" + +msgid "Force &4:3 display ratio" +msgstr "Forçar ràtio de visualització &4:3" + +msgid "&Window scale factor" +msgstr "&Factor de escalat de finestra" + +msgid "&0.5x" +msgstr "&0.5x" + +msgid "&1x" +msgstr "&1x" + +msgid "1.&5x" +msgstr "1.&5x" + +msgid "&2x" +msgstr "&2x" + +msgid "&3x" +msgstr "&3x" + +msgid "&4x" +msgstr "&4x" + +msgid "&5x" +msgstr "&5x" + +msgid "&6x" +msgstr "&6x" + +msgid "&7x" +msgstr "&7x" + +msgid "&8x" +msgstr "&8x" + +msgid "Fi<er method" +msgstr "&Mètode de filtració" + +msgid "&Nearest" +msgstr "&Més a prop" + +msgid "&Linear" +msgstr "&Lineal" + +msgid "Hi&DPI scaling" +msgstr "&Escalat alta densitat" + +msgid "&Fullscreen" +msgstr "&Pantalla sencera" + +msgid "Fullscreen &stretch mode" +msgstr "M&odalitat de estirament en la pantalla sencera" + +msgid "&Full screen stretch" +msgstr "&Estirament en la pantalla sencera" + +msgid "&4:3" +msgstr "&4:3" + +msgid "&Square pixels (Keep ratio)" +msgstr "&Píxels quadrats (Mantenir ràtio)" + +msgid "&Integer scale" +msgstr "&Escalat de valor enter" + +msgid "4:&3 Integer scale" +msgstr "Escalat de valor enter 4:&3" + +msgid "EGA/(S)&VGA settings" +msgstr "Configuracions EGA/(S)&VGA" + +msgid "&Inverted VGA monitor" +msgstr "&Monitor VGA invertit" + +msgid "VGA screen &type" +msgstr "&Tipus de pantalla VGA" + +msgid "RGB &Color" +msgstr "&Colors RGB" + +msgid "RGB (no brown)" +msgstr "RGB (sense marró)" + +msgid "&RGB Grayscale" +msgstr "&RGB en escala de grisos" + +msgid "Generic RGBI color monitor" +msgstr "Monitor RGBI genèric en colors" + +msgid "&Amber monitor" +msgstr "Monitor ambr&e" + +msgid "&Green monitor" +msgstr "Monitor &verd" + +msgid "&White monitor" +msgstr "Monitor &blanc" + +msgid "Grayscale &conversion type" +msgstr "Tipus de &conversió a l'escala de grisos" + +msgid "BT&601 (NTSC/PAL)" +msgstr "BT&601 (NTSC/PAL)" + +msgid "BT&709 (HDTV)" +msgstr "BT&709 (HDTV)" + +msgid "&Average" +msgstr "&Mitjà" + +msgid "CGA/PCjr/Tandy/E&GA/(S)VGA overscan" +msgstr "Overscan de CGA/PCjr/Tandy/E&GA/(S)VGA" + +msgid "Change contrast for &monochrome display" +msgstr "Canviar contrast per a la pantalla &monocromàtica" + +msgid "&Media" +msgstr "&Mitjans" + +msgid "&Tools" +msgstr "&Eines" + +msgid "&Settings…" +msgstr "&Configuracions…" + +msgid "Settings…" +msgstr "Configuracions…" + +msgid "&Update status bar icons" +msgstr "&Actualitzar icones en barra d'estat" + +msgid "Take s&creenshot" +msgstr "Desar imatge de &pantalla" + +msgid "S&ound" +msgstr "S&o" + +msgid "&Preferences…" +msgstr "&Preferències…" + +msgid "Enable &Discord integration" +msgstr "Activar integració amb D&iscord" + +msgid "Sound &gain…" +msgstr "&Guany de so…" + +msgid "Begin trace" +msgstr "Iniciar el rastreig" + +msgid "End trace" +msgstr "Terminar el rastreig" + +msgid "&Help" +msgstr "Aj&uda" + +msgid "&Documentation…" +msgstr "&Documentació…" + +msgid "&About 86Box…" +msgstr "&Quant al 86Box…" + +msgid "&New image…" +msgstr "&Nova imatge…" + +msgid "&Existing image…" +msgstr "Imatge &existent…" + +msgid "Existing image (&Write-protected)…" +msgstr "Imatge existent (&Protegit d'escriptura)…" + +msgid "&Record" +msgstr "&Enregistrar" + +msgid "&Play" +msgstr "&Reproduir" + +msgid "&Rewind to the beginning" +msgstr "&Rebobinar al inici" + +msgid "&Fast forward to the end" +msgstr "&Avanç ràpid al final" + +msgid "E&ject" +msgstr "E&xpulsar" + +msgid "&Image…" +msgstr "&Imatge…" + +msgid "E&xport to 86F…" +msgstr "E&xportar a 86F…" + +msgid "&Mute" +msgstr "&Silenciar" + +msgid "E&mpty" +msgstr "&CDROM buit" + +msgid "Reload previous image" +msgstr "Recarregar imatge prèvia" + +msgid "&Folder…" +msgstr "&Carpeta…" + +msgid "Preferences" +msgstr "Preferències" + +msgid "Sound Gain" +msgstr "Guany de so" + +msgid "New Image" +msgstr "Nova imatge" + +msgid "Settings" +msgstr "Configuracions" + +msgid "Specify Main Window Dimensions" +msgstr "Especificar dimensions de la finestra principal" + +msgid "OK" +msgstr "D'acord" + +msgid "Cancel" +msgstr "Anuŀlació" + +msgid "&Default" +msgstr "&Per defecte" + +msgid "Language:" +msgstr "Idioma:" + +msgid "Gain" +msgstr "Guany" + +msgid "File name:" +msgstr "Nom de fitxer:" + +msgid "Disk size:" +msgstr "Grandària del disc:" + +msgid "RPM mode:" +msgstr "Modalitat RPM:" + +msgid "Progress:" +msgstr "Progrés:" + +msgid "Width:" +msgstr "Amplada:" + +msgid "Height:" +msgstr "Alçada:" + +msgid "Lock to this size" +msgstr "Fixar a aquesta grandària" + +msgid "Machine type:" +msgstr "Tipus de màquina:" + +msgid "Machine:" +msgstr "Màquina:" + +msgid "Configure" +msgstr "Configurar" + +msgid "CPU:" +msgstr "Processador:" + +msgid "CPU type:" +msgstr "Tipus del CPU:" + +msgid "Speed:" +msgstr "Velocitat:" + +msgid "Frequency:" +msgstr "Freqüència:" + +msgid "FPU:" +msgstr "FPU:" + +msgid "Wait states:" +msgstr "Estats de espera:" + +msgid "MB" +msgstr "MB" + +msgid "Memory:" +msgstr "Memòria:" + +msgid "Time synchronization" +msgstr "Sincronització de la hora" + +msgid "Disabled" +msgstr "Desactivat" + +msgid "Enabled (local time)" +msgstr "Activat (hora local)" + +msgid "Enabled (UTC)" +msgstr "Activat (UTC)" + +msgid "Dynamic Recompiler" +msgstr "Recompilador dinàmic" + +msgid "CPU frame size" +msgstr "Grandària de blocs del CPU" + +msgid "Larger frames (less smooth)" +msgstr "Blocs més grans (menys suau)" + +msgid "Smaller frames (smoother)" +msgstr "Blocs més petits (més suau)" + +msgid "Video:" +msgstr "Vídeo:" + +msgid "Video #2:" +msgstr "Vídeo 2:" + +msgid "Voodoo 1 or 2 Graphics" +msgstr "Gràfics Voodoo 1 o 2" + +msgid "IBM 8514/A Graphics" +msgstr "Gràfics IBM 8514/A" + +msgid "XGA Graphics" +msgstr "Gràfics XGA" + +msgid "IBM PS/55 Display Adapter Graphics" +msgstr "Adaptador de gràfics de pantalla IBM PS/55" + +msgid "Keyboard:" +msgstr "Teclat:" + +msgid "Keyboard" +msgstr "Teclat" + +msgid "Mouse:" +msgstr "Ratolí:" + +msgid "Mouse" +msgstr "Ratolí" + +msgid "Joystick:" +msgstr "Mando:" + +msgid "Joystick" +msgstr "Joystick" + +msgid "Joystick 1…" +msgstr "Joystick 1…" + +msgid "Joystick 2…" +msgstr "Joystick 2…" + +msgid "Joystick 3…" +msgstr "Joystick 3…" + +msgid "Joystick 4…" +msgstr "Joystick 4…" + +msgid "Sound card #1:" +msgstr "Targeta de so 1:" + +msgid "Sound card #2:" +msgstr "Targeta de so 2:" + +msgid "Sound card #3:" +msgstr "Targeta de so 3:" + +msgid "Sound card #4:" +msgstr "Targeta de so 4:" + +msgid "MIDI Out Device:" +msgstr "Dispositiu MIDI de sortida:" + +msgid "MIDI In Device:" +msgstr "Dispositiu MIDI de entrada:" + +msgid "MIDI Out:" +msgstr "Sortida MIDI:" + +msgid "Standalone MPU-401" +msgstr "MPU-401 independent" + +msgid "Use FLOAT32 sound" +msgstr "Utilitzar so FLOAT32" + +msgid "FM synth driver" +msgstr "Manejador de síntesi FM" + +msgid "Nuked (more accurate)" +msgstr "Nuked (més acurat)" + +msgid "YMFM (faster)" +msgstr "YMFM (més ràpid)" + +msgid "COM1 Device:" +msgstr "Dispositiu COM1:" + +msgid "COM2 Device:" +msgstr "Dispositiu COM2:" + +msgid "COM3 Device:" +msgstr "Dispositiu COM3:" + +msgid "COM4 Device:" +msgstr "Dispositiu COM4:" + +msgid "LPT1 Device:" +msgstr "Dispositiu LPT1:" + +msgid "LPT2 Device:" +msgstr "Dispositiu LPT2:" + +msgid "LPT3 Device:" +msgstr "Dispositiu LPT3:" + +msgid "LPT4 Device:" +msgstr "Dispositiu LPT4:" + +msgid "Internal LPT ECP DMA:" +msgstr "DMA de ECP del LPT intern:" + +msgid "Serial port 1" +msgstr "Port sèrie 1" + +msgid "Serial port 2" +msgstr "Port sèrie 2" + +msgid "Serial port 3" +msgstr "Port sèrie 3" + +msgid "Serial port 4" +msgstr "Port sèrie 4" + +msgid "Parallel port 1" +msgstr "Port paralel 1" + +msgid "Parallel port 2" +msgstr "Port paralel 2" + +msgid "Parallel port 3" +msgstr "Port paralel 3" + +msgid "Parallel port 4" +msgstr "Port paralel 4" + +msgid "Floppy disk controller:" +msgstr "Controlador de disquet:" + +msgid "CD-ROM controller:" +msgstr "Controlador de CD-ROM:" + +msgid "[ISA16] Tertiary IDE Controller" +msgstr "[ISA16] Controlador IDE terciari" + +msgid "[ISA16] Quaternary IDE Controller" +msgstr "[ISA16] Controlador IDE quaternari" + +msgid "Hard disk controllers" +msgstr "Controladors de disc dur" + +msgid "SCSI controllers" +msgstr "Controladors SCSI" + +msgid "Controller 1:" +msgstr "Controlador 1:" + +msgid "Controller 2:" +msgstr "Controlador 2:" + +msgid "Controller 3:" +msgstr "Controlador 3:" + +msgid "Controller 4:" +msgstr "Controlador 4:" + +msgid "Cassette" +msgstr "Casset" + +msgid "Hard disks:" +msgstr "Discs durs:" + +msgid "Firmware Version" +msgstr "Versió de firmware" + +msgid "&New…" +msgstr "&Nou…" + +msgid "&Existing…" +msgstr "&Existent…" + +msgid "&Remove" +msgstr "&Suprimir" + +msgid "Bus:" +msgstr "Bus:" + +msgid "Channel:" +msgstr "Canal:" + +msgid "ID:" +msgstr "ID:" + +msgid "Sectors:" +msgstr "Sectors:" + +msgid "Heads:" +msgstr "Cabeçals:" + +msgid "Cylinders:" +msgstr "Cilindres:" + +msgid "Size (MB):" +msgstr "Grandària (MB):" + +msgid "Type:" +msgstr "Tipus:" + +msgid "Image Format:" +msgstr "Format de imatge:" + +msgid "Block Size:" +msgstr "Grandària de bloc:" + +msgid "Floppy drives:" +msgstr "Unitats de disquet:" + +msgid "Turbo timings" +msgstr "Velocitat turbo" + +msgid "Check BPB" +msgstr "Verificar BPB" + +msgid "CD-ROM drives:" +msgstr "Unitats de CD-ROM:" + +msgid "MO drives:" +msgstr "Unitats MO:" + +msgid "MO:" +msgstr "MO:" + +msgid "Removable disks:" +msgstr "Discs extraïbles:" + +msgid "Removable disk drives:" +msgstr "Unitats de disc extraïble:" + +msgid "ZIP 250" +msgstr "ZIP 250" + +msgid "ISA RTC:" +msgstr "ISA RTC:" + +msgid "ISA Memory Expansion" +msgstr "Expansió de memòria ISA" + +msgid "ISA ROM Cards" +msgstr "Targetas ROM ISA" + +msgid "Card 1:" +msgstr "Targeta 1:" + +msgid "Card 2:" +msgstr "Targeta 2:" + +msgid "Card 3:" +msgstr "Targeta 3:" + +msgid "Card 4:" +msgstr "Targeta 4:" + +msgid "Generic ISA ROM Board" +msgstr "Targeta ROM ISA genèrica" + +msgid "Generic Dual ISA ROM Board" +msgstr "Targeta ROM ISA genèrica doble" + +msgid "Generic Quad ISA ROM Board" +msgstr "Targeta ROM ISA genèrica quàdruple" + +msgid "ISABugger device" +msgstr "Dispositiu ISABugger" + +msgid "POST card" +msgstr "Targeta POST" + +msgid "Error" +msgstr "Error" + +msgid "Fatal error" +msgstr "Error fatal" + +msgid " - PAUSED" +msgstr " - EN PAUSA" + +msgid "Speed" +msgstr "Velocitat" + +msgid "Removable disk %1 (%2): %3" +msgstr "Disc extraïble %1 (%2): %3" + +msgid "&Removable disk %1 (%2): %3" +msgstr "&Disc extraïble %1 (%2): %3" + +msgid "Removable disk images" +msgstr "Imatges de disc extraïble" + +msgid "Image %1" +msgstr "Imatge %1" + +msgid "86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory." +msgstr "El 86Box no ha pogut trobar cap de imatge ROM utilitzable.\n\nSi us plau, descarregueu un conjunt de ROMs i extraieu-lo al directori \"roms\"." + +msgid "(empty)" +msgstr "(buit)" + +msgid "All files" +msgstr "Tots els fitxers" + +msgid "Turbo" +msgstr "Turbo" + +msgid "On" +msgstr "Activat" + +msgid "Off" +msgstr "Desactivat" + +msgid "All images" +msgstr "Totes les imatges" + +msgid "Basic sector images" +msgstr "Imatges bàsiques de sector" + +msgid "Surface images" +msgstr "Imatges de superfície" + +msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." +msgstr "La màquina \"%hs\" no està disponible a causa dels ROMs faltants en el directori roms/machines. Canviant a una màquina disponible." + +msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." +msgstr "La tarjeta de vídeo \"%hs\" no està disponible a causa dels ROMs faltants en el directori roms/video. Canviant a una tarjeta de video disponible." + +msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Disabling the second video card." +msgstr "La tarjeta de vídeo 2 \"%hs\" no està disponible a causa dels ROMs faltants en el directori roms/video. Desactivnt a la segona targeta de vídeo." + +msgid "Device \"%hs\" is not available due to missing ROMs. Ignoring the device." +msgstr "El dispositiu \"%hs\" no està disponible a causa dels ROMs faltants. Ignorant el dispositiu." + +msgid "Machine" +msgstr "Màquina" + +msgid "Display" +msgstr "Vídeo" + +msgid "Input devices" +msgstr "Dispositius de entrada" + +msgid "Sound" +msgstr "So" + +msgid "Network" +msgstr "Xarxa" + +msgid "Ports (COM & LPT)" +msgstr "Ports (COM i LPT)" + +msgid "Ports" +msgstr "Ports" + +msgid "Serial ports:" +msgstr "Ports sèrie:" + +msgid "Parallel ports:" +msgstr "Puerts paralels:" + +msgid "Storage controllers" +msgstr "Controladors de emmagatzematge" + +msgid "Hard disks" +msgstr "Discs durs" + +msgid "Disks:" +msgstr "Discs:" + +msgid "Floppy:" +msgstr "Disquet:" + +msgid "Controllers:" +msgstr "Controladors:" + +msgid "Floppy & CD-ROM drives" +msgstr "Disquets i unitates de CD-ROM" + +msgid "Other removable devices" +msgstr "Altres dispositius extraïbles" + +msgid "Other peripherals" +msgstr "Altres perifèrics" + +msgid "Other devices" +msgstr "Altres dispositius" + +msgid "Click to capture mouse" +msgstr "Feu clic per capturar el ratolí" + +msgid "Press %1 to release mouse" +msgstr "Premeu %1 per soltar el ratolí" + +msgid "Press %1 or middle button to release mouse" +msgstr "Premeu %1 o bé el botó central per soltar el ratolí" + +msgid "Bus" +msgstr "Bus" + +msgid "File" +msgstr "Fitxer" + +msgid "C" +msgstr "C" + +msgid "H" +msgstr "H" + +msgid "S" +msgstr "S" + +msgid "KB" +msgstr "KB" + +msgid "Default" +msgstr "Per defecte" + +msgid "%1 Wait state(s)" +msgstr "%1 estat(s) de espera" + +msgid "Type" +msgstr "Tipus" + +msgid "No PCap devices found" +msgstr "No se trobaren dispositius PCap" + +msgid "Invalid PCap device" +msgstr "Dispositiu PCap invàlid" + +msgid "Generic paddle controller(s)" +msgstr "Controlador(s) de rem genèric(s)" + +msgid "2-axis, 1-button joystick(s)" +msgstr "Joystick(s) de 2 eixos, 1 botons" + +msgid "2-axis, 2-button joystick(s)" +msgstr "Joystick(s) de 2 eixos, 2 botons" + +msgid "2-axis, 3-button joystick" +msgstr "Joystick de 2 eixos, 3 botons" + +msgid "2-axis, 4-button joystick" +msgstr "Joystick de 2 eixos, 4 botons" + +msgid "2-axis, 6-button joystick" +msgstr "Joystick de 2 eixos, 6 botons" + +msgid "2-axis, 8-button joystick" +msgstr "Joystick de 2 eixos, 8 botons" + +msgid "3-axis, 2-button joystick" +msgstr "Joystick de 3 eixos, 2 botons" + +msgid "3-axis, 3-button joystick" +msgstr "Joystick de 3 eixos, 3 botons" + +msgid "3-axis, 4-button joystick" +msgstr "Joystick de 3 eixos, 4 botons" + +msgid "4-axis, 2-button joystick" +msgstr "Joystick de 4 eixos, 2 botons" + +msgid "4-axis, 3-button joystick" +msgstr "Joystick de 4 eixos, 3 botons" + +msgid "4-axis, 4-button joystick" +msgstr "Joystick de 4 eixos, 4 botons" + +msgid "2-button gamepad(s)" +msgstr "Maneta(s) de joc de 2 botons" + +msgid "3-button gamepad" +msgstr "Maneta de joc de 3 botons" + +msgid "4-button gamepad" +msgstr "Maneta de joc de 4 botons" + +msgid "6-button gamepad" +msgstr "Maneta de joc de 6 botons" + +msgid "2-button flight yoke" +msgstr "Volant d'avió de 2 botons" + +msgid "3-button flight yoke" +msgstr "Volant d'avió de 3 botons" + +msgid "4-button flight yoke" +msgstr "Volant d'avió de 4 botons" + +msgid "2-button flight yoke with throttle" +msgstr "Volant d'avió de 2 botones amb accelerador" + +msgid "3-button flight yoke with throttle" +msgstr "Volant d'avió de 3 botones amb accelerador" + +msgid "4-button flight yoke with throttle" +msgstr "Volant d'avió de 4 botones amb accelerador" + +msgid "Steering wheel (3-axis, 2-button)" +msgstr "Volant (de 3 eixos, 2 botons)" + +msgid "Steering wheel (3-axis, 3-button)" +msgstr "Volant (de 3 eixos, 3 botons)" + +msgid "Steering wheel (3-axis, 4-button)" +msgstr "Volant (de 3 eixos, 4 botons)" + +msgid "Thrustmaster Formula T1/T2 with adapter" +msgstr "Thrustmaster Formula T1/T2 amb adaptador" + +msgid "Thrustmaster Formula T1/T2 without adapter" +msgstr "Thrustmaster Formula T1/T2 sense adaptador" + +msgid "None" +msgstr "Cap" + +msgid "%1 MB (CHS: %2, %3, %4)" +msgstr "%1 MB (CHS: %2, %3, %4)" + +msgid "Floppy %1 (%2): %3" +msgstr "Disquet %1 (%2): %3" + +msgid "&Floppy %1 (%2): %3" +msgstr "&Disquet %1 (%2): %3" + +msgid "Advanced sector images" +msgstr "Imatges avançades de sector" + +msgid "Flux images" +msgstr "Imatges de fluix" + +msgid "Are you sure you want to hard reset the emulated machine?" +msgstr "Segur que voleu fer una reinicialització completa de la màquina emulada?" + +msgid "Are you sure you want to exit 86Box?" +msgstr "Segur que voleu tancar al 86Box?" + +msgid "Unable to initialize Ghostscript" +msgstr "No fou possible inicialitzar el Ghostscript" + +msgid "Unable to initialize GhostPCL" +msgstr "No fou possible inicialitzar el GhostPCL" + +msgid "MO %1 (%2): %3" +msgstr "MO %1 (%2): %3" + +msgid "&MO %1 (%2): %3" +msgstr "&MO %1 (%2): %3" + +msgid "MO images" +msgstr "Imatges de MO" + +msgid "Welcome to 86Box!" +msgstr "Benvinguts al 86Box!" + +msgid "Internal device" +msgstr "Dispositiu intern" + +msgid "&File" +msgstr "&Fitxer" + +msgid "&New machine…" +msgstr "&Nova màquina…" + +msgid "New machine…" +msgstr "Nova màquina…" + +msgid "New machine" +msgstr "Nova màquina" + +msgid "&Check for updates…" +msgstr "&Verifica actualitzacions…" + +msgid "Exit" +msgstr "Sortir" + +msgid "No ROMs found" +msgstr "No se trobaren ROMs" + +msgid "Do you want to save the settings?" +msgstr "Voleu desar les configuracions?" + +msgid "This will hard reset the emulated machine." +msgstr "Això causarà una reinicialització completa de la màquina emulada." + +msgid "Save" +msgstr "Desar" + +msgid "About %1" +msgstr "Quant al %1" + +msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information." +msgstr "Un emulador de ordinadors anticos\n\nAutors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, y otros.\n\nAmb contribucions anteriors de Sarah Walker, leilei, JohnElliott, greatpsycho y otros.\n\nPublicat sota la GNU General Public License versió 2 o bé posterior. Veieu LICENSE per més informacions." + +msgid "Hardware not available" +msgstr "Equip no disponible" + +msgid "Make sure %1 is installed and that you are on a %1-compatible network connection." +msgstr "Assegureu-vos de que %1 està instalat i de que esteu en una connexió de xarxa compatible amb %1." + +msgid "Invalid configuration" +msgstr "Configuració invàlida" + +msgid "%1 is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files." +msgstr "%1 és imprescindible per la conversió automàtica de fitxers PostScript a PDF.\n\nQualsevol document enviat a la impressora genèrica PostScript se desarà com ara fitxer PostScript (.ps)." + +msgid "%1 is required for automatic conversion of PCL files to PDF.\n\nAny documents sent to the generic PCL printer will be saved as Printer Command Language (.pcl) files." +msgstr "%1 és imprescindible per la conversió automàtica de fitxers PCL a PDF.\n\nQualsevol document enviat a la impressora genèrica PCL se desarà com ara fitxer Printer Command Language (.pcl)." + +msgid "Don't show this message again" +msgstr "No tornar a mostrar aquest missatge" + +msgid "Don't exit" +msgstr "No sortir" + +msgid "Reset" +msgstr "Reinicialitzar" + +msgid "Don't reset" +msgstr "No reinicialitzar" + +msgid "CD-ROM images" +msgstr "Imatges de CD-ROM" + +msgid "%1 Device Configuration" +msgstr "Configuració de dispositiu %1" + +msgid "Monitor in sleep mode" +msgstr "Monitor en modalitat de dormida" + +msgid "GLSL shaders" +msgstr "Shaders GLSL" + +msgid "You are loading an unsupported configuration" +msgstr "Esteu carregant una configuració no suportada" + +msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid." +msgstr "La filtració de tipus CPU basat en màquina seleccionada està desactivat per a aquesta màquina.\n\nAixò fa possible seleccionar una CPU que sigui incompatible amb aquesta màquina. Tanmateix, poden aparèixerr incompatibilitats amb la BIOS de la màquina o altres programes.\n\nActivar esta configuració no està oficialment suportat i qualsevol report de error pot ésser tancat com ara invàlid." + +msgid "Continue" +msgstr "Continuar" + +msgid "Cassette: %1" +msgstr "Casset: %1" + +msgid "C&assette: %1" +msgstr "C&asset: %1" + +msgid "Cassette images" +msgstr "Imatges de casset" + +msgid "Cartridge %1: %2" +msgstr "Cartutx %1: %2" + +msgid "Car&tridge %1: %2" +msgstr "Car&tutx %1: %2" + +msgid "Cartridge images" +msgstr "Imatges de cartutx" + +msgid "Resume execution" +msgstr "Reprendre la execució" + +msgid "Pause execution" +msgstr "Metre en pausa la execució" + +msgid "Ctrl+Alt+Del" +msgstr "Ctrl+Alt+Del" + +msgid "Press Ctrl+Alt+Del" +msgstr "Prémer Ctrl+Alt+Supr" + +msgid "Press Ctrl+Alt+Esc" +msgstr "Prémer Ctrl+Alt+Esc" + +msgid "Hard reset" +msgstr "Reiniciació completa" + +msgid "Force shutdown" +msgstr "Apagada forçada" + +msgid "Start" +msgstr "Iniciar" + +msgid "&Force shutdown" +msgstr "&Apagada forçada" + +msgid "&Start" +msgstr "&Iniciar" + +msgid "Not running" +msgstr "No en execució" + +msgid "Running" +msgstr "En exeució" + +msgid "Paused" +msgstr "En pausa" + +msgid "Waiting" +msgstr "En espera" + +msgid "Powered Off" +msgstr "Apagat" + +msgid "%n running" +msgstr "%n en execució" + +msgid "%n paused" +msgstr "%n en pausa" + +msgid "%n waiting" +msgstr "%n en espera" + +msgid "%1 total" +msgstr "%1 total" + +msgid "VMs: %1" +msgstr "MV: %1" + +msgid "System Directory:" +msgstr "Directori de sistema:" + +msgid "Choose directory" +msgstr "Escollir directori" + +msgid "Choose configuration file" +msgstr "Escollir fitxer de configuració" + +msgid "86Box configuration files (86box.cfg)" +msgstr "Fitxers de configuració de 86Box (86box.cfg)" + +msgid "Configuration read failed" +msgstr "Error en llegir la configuració" + +msgid "Unable to open the selected configuration file for reading: %1" +msgstr "No fou possible obrir el fitxer de configuració seleccionat per llegir: %1" + +msgid "Use regular expressions in search box" +msgstr "Utilitzar expressions regulars en la caixa de cerca" + +msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" +msgstr "%1 màquina(es) són actives en aquest moment. Segur que voleu sortir del administrador de MV?" + +msgid "Add new system wizard" +msgstr "Auxiliar d'addició de un nou sistema" + +msgid "Introduction" +msgstr "Introducció" + +msgid "This will help you add a new system to 86Box." +msgstr "Aquest us ajudará a afegir un nou sistema al 86Box." + +msgid "New configuration" +msgstr "Nova configuració" + +msgid "Complete" +msgstr "Completar" + +msgid "The wizard will now launch the configuration for the new system." +msgstr "L'auxiliar ara executarà la configuració pel nou sistema." + +msgid "Use existing configuration" +msgstr "Utilitzar configuració existent" + +msgid "Type some notes here" +msgstr "Escriure algunes notes aquí" + +msgid "Paste the contents of the existing configuration file into the box below." +msgstr "Enganxar el contingut del fitxer de configuració existent en la caixa que de sota." + +msgid "Load configuration from file" +msgstr "Carregar la configuració a partir d'un fitxer" + +msgid "System name" +msgstr "Nomb del sistema" + +msgid "System name:" +msgstr "Nom del sistema:" + +msgid "System name cannot contain certain characters" +msgstr "El nom del sistema no pot contenir alguns caràcters" + +msgid "System name already exists" +msgstr "El nom del sistema ja existeix" + +msgid "Please enter a directory for the system" +msgstr "Si us plau, escriviu un directori per el sistema" + +msgid "Directory does not exist" +msgstr "El directori no existeix" + +msgid "A new directory for the system will be created in the selected directory above" +msgstr "Un nou directour per el sistema serà criat en el directori escollit a dalt" + +msgid "System location:" +msgstr "Ubicació del sistema:" + +msgid "System name and location" +msgstr "Nom i ubicació del sistema" + +msgid "Enter the name of the system and choose the location" +msgstr "Escriviu el nom del sistema i escolliu la ubicació" + +msgid "Enter the name of the system" +msgstr "Escriviu el nome del sistema" + +msgid "Please enter a system name" +msgstr "Si us plau, escriviu un nom del sistema" + +msgid "Display name (optional):" +msgstr "Nom mostrat (optatiu):" + +msgid "Display name:" +msgstr "Nom mostrat:" + +msgid "Set display name" +msgstr "Establir nom mostrat" + +msgid "Enter the new display name (blank to reset)" +msgstr "Escriviu el nou nom mostrat (buit per restablir)" + +msgid "Change &display name…" +msgstr "Canviar nom &mostrat…" + +msgid "Context Menu" +msgstr "Menú de context" + +msgid "&Open folder…" +msgstr "&Obrir carpeta…" + +msgid "Open p&rinter tray…" +msgstr "Obrir safata de la &impressora…" + +msgid "Set &icon…" +msgstr "Establir &icona…" + +msgid "Select an icon" +msgstr "Escollir una icona" + +msgid "C&lone…" +msgstr "C&lonar…" + +msgid "Virtual machine \"%1\" (%2) will be cloned into:" +msgstr "La màquina virtual \"%1\" (%2) serà clonada a:" + +msgid "Directory %1 already exists" +msgstr "El directori %1 ja existeix" + +msgid "You cannot use the following characters in the name: %1" +msgstr "No es pot utilitzar els seguints caràcters en el nom: %1" + +msgid "Clone" +msgstr "Clonar" + +msgid "Failed to create directory for cloned VM" +msgstr "Error en criar el directori per la MV clonada" + +msgid "Failed to clone VM." +msgstr "Error en clonar la VM." + +msgid "Directory in use" +msgstr "Directori en ús" + +msgid "The selected directory is already in use. Please select a different directory." +msgstr "El directori escollit ja està en ùs. Si us plau, escolliu un altre directori." + +msgid "Create directory failed" +msgstr "Error en criar el directori" + +msgid "Unable to create the directory for the new system" +msgstr "No fou possible criar el directori pel nou sistema" + +msgid "Configuration write failed" +msgstr "Error en escriure la configuració" + +msgid "Unable to open the configuration file at %1 for writing" +msgstr "No fou possible obrir el fitxer de configuració en %1 per escriure" + +msgid "Error adding system" +msgstr "Error en afegir el sistema" + +msgid "Remove directory failed" +msgstr "Error en suprimir el directori" + +msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." +msgstr "No fou possible suprimir alguns fitxers en el directori de la màquina. Si us plau, suprimiu-los manualment." + +msgid "Build" +msgstr "Compilació" + +msgid "Version" +msgstr "Versió" + +msgid "An update to 86Box is available: %1 %2" +msgstr "Està disponible una actualització pel 86Box: %1 %2" + +msgid "An error has occurred while checking for updates: %1" +msgstr "S'ha produït un error en verificar les actualitzacions: %1" + +msgid "An update to 86Box is available!" +msgstr "Una actualització pel 86Box està disponible!" + +msgid "Warning" +msgstr "Compte" + +msgid "&Kill" +msgstr "&Terminar forçadament" + +msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" +msgstr "Terminar forçadament a la màquina virtual pot causar la pèrdua de dades. Només ho feu si el procés del 86Box es blocà.\n\n¿De verdad quiere terminar forzadamente a la máquina virtual \"%1\"?" + +msgid "&Delete" +msgstr "&Suprimir" + +msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" +msgstr "Realment voleu suprimir la màquina virtual \"%1\" i tots seus fitxers? Aquesta acció no se pot desfer!" + +msgid "Show &config file" +msgstr "Mostrar fitxer de &configuració" + +msgid "No screenshot" +msgstr "Sense captura de pantalla" + +msgid "Search" +msgstr "Cercar" + +msgid "Searching for VMs…" +msgstr "Cercar per MV…" + +msgid "Found %1" +msgstr "%1 trobada" + +msgid "System" +msgstr "Sistema" + +msgid "Storage" +msgstr "Emmagatzematge" + +msgid "Disk %1:" +msgstr "Disc %1:" + +msgid "No disks" +msgstr "Sense disc" + +msgid "Audio" +msgstr "So" + +msgid "Audio:" +msgstr "So:" + +msgid "ACPI shutdown" +msgstr "Apagada ACPI" + +msgid "ACP&I shutdown" +msgstr "Apagada ACP&I" + +msgid "Hard disk (%1)" +msgstr "Disc dur (%1)" + +msgid "MFM/RLL or ESDI CD-ROM drives never existed" +msgstr "Mai existiren unitats de CD-ROM MFM/RLL o bé ESDI" + +msgid "Custom…" +msgstr "Personalitzada…" + +msgid "Custom (large)…" +msgstr "Personalitzada (gran)…" + +msgid "Add New Hard Disk" +msgstr "Afegir nou disc dur" + +msgid "Add Existing Hard Disk" +msgstr "Afegir disc dur existent" + +msgid "HDI disk images cannot be larger than 4 GB." +msgstr "Les imatges de disc HDI no poden superar els 4 GB." + +msgid "Disk images cannot be larger than 127 GB." +msgstr "Les imatges de disc no poden superar els 127 GB." + +msgid "Hard disk images" +msgstr "Imatges de disc dur" + +msgid "Unable to read file" +msgstr "No es pogué llegir el fitxer" + +msgid "Unable to write file" +msgstr "No es pogué escriure el fitxer" + +msgid "HDI or HDX images with a sector size other than 512 are not supported." +msgstr "No es suporten les imatges HDI o bé HDX amb una grandària de sector diferent a 512." + +msgid "Disk image file already exists" +msgstr "La imatge de disc ja existeix" + +msgid "Please specify a valid file name." +msgstr "Si us plau especifiqueu un nomb de fitxer vàlid." + +msgid "Disk image created" +msgstr "Imatge de disc criada" + +msgid "Make sure the file exists and is readable." +msgstr "Assegureu-vos que el fitxer existeix i és llegible." + +msgid "Make sure the file is being saved to a writable directory." +msgstr "Assegureu-vos que el fitxer es està desant a un directori amb permís de escirptura." + +msgid "Disk image too large" +msgstr "Imatge de disc massa gran" + +msgid "Remember to partition and format the newly-created drive." +msgstr "Recordeu de particionar i formatar la nova unitat." + +msgid "The selected file will be overwritten. Are you sure you want to use it?" +msgstr "El fitxer escollit serà sobreescrit. Segur que voleu utilitzar-lo?" + +msgid "Unsupported disk image" +msgstr "Imatge de disc no suportada" + +msgid "Overwrite" +msgstr "Sobreescriure" + +msgid "Don't overwrite" +msgstr "No sobreescriure" + +msgid "Raw image" +msgstr "Imatge en brut" + +msgid "HDI image" +msgstr "Imatge HDI" + +msgid "HDX image" +msgstr "Imatge HDX" + +msgid "Fixed-size VHD" +msgstr "VHD de grandària fixa" + +msgid "Dynamic-size VHD" +msgstr "VHD de grandària dinàmica" + +msgid "Differencing VHD" +msgstr "VHD diferencial" + +msgid "(N/A)" +msgstr "(Cap)" + +msgid "Raw image (.img)" +msgstr "Imatge en brut (.img)" + +msgid "HDI image (.hdi)" +msgstr "Imatge HDI (.hdi)" + +msgid "HDX image (.hdx)" +msgstr "Imatge HDX (.hdx)" + +msgid "Fixed-size VHD (.vhd)" +msgstr "VHD de grandària fixa (.vhd)" + +msgid "Dynamic-size VHD (.vhd)" +msgstr "VHD de grandària dinàmica (.vhd)" + +msgid "Differencing VHD (.vhd)" +msgstr "VHD diferencial (.vhd)" + +msgid "Large blocks (2 MB)" +msgstr "Blocs grans (2 MB)" + +msgid "Small blocks (512 KB)" +msgstr "Blocs petits (512 KB)" + +msgid "VHD files" +msgstr "Fitxers VHD" + +msgid "Select the parent VHD" +msgstr "Escolliu el VHD pare" + +msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?" +msgstr "Això podria significar que la imatge pare es va modificar després de que es creés la imatge diferencial.\n\nTambé pot passar si les imatges foren mogudes o copiades, o a causa d'un error en el programa que crià aquest disc.\n\nVoleu corregir els registres de temps?" + +msgid "Parent and child disk timestamps do not match" +msgstr "Els segells de temps del pare e fill no coincideixen" + +msgid "Could not fix VHD timestamp." +msgstr "No fou possible corregir el segell de temps del VHD." + +msgid "CD-ROM %1 (%2): %3" +msgstr "CD-ROM %1 (%2): %3" + +msgid "&CD-ROM %1 (%2): %3" +msgstr "&CD-ROM %1 (%2): %3" + +msgid "160 KB" +msgstr "160 KB" + +msgid "180 KB" +msgstr "180 KB" + +msgid "320 KB" +msgstr "320 KB" + +msgid "360 KB" +msgstr "360 KB" + +msgid "640 KB" +msgstr "640 KB" + +msgid "720 KB" +msgstr "720 KB" + +msgid "1.2 MB" +msgstr "1.2 MB" + +msgid "1.25 MB" +msgstr "1.25 MB" + +msgid "1.44 MB" +msgstr "1.44 MB" + +msgid "DMF (cluster 1024)" +msgstr "DMF (clúster 1024)" + +msgid "DMF (cluster 2048)" +msgstr "DMF (clúster 2048)" + +msgid "2.88 MB" +msgstr "2.88 MB" + +msgid "ZIP 100" +msgstr "ZIP 100" + +msgid "3.5\" 128 MB (ISO 10090)" +msgstr "3.5\" 128 MB (ISO 10090)" + +msgid "3.5\" 230 MB (ISO 13963)" +msgstr "3.5\" 230 MB (ISO 13963)" + +msgid "3.5\" 540 MB (ISO 15498)" +msgstr "3.5\" 540 MB (ISO 15498)" + +msgid "3.5\" 640 MB (ISO 15498)" +msgstr "3.5\" 640 MB (ISO 15498)" + +msgid "3.5\" 1.3 GB (GigaMO)" +msgstr "3.5\" 1.3 GB (GigaMO)" + +msgid "3.5\" 2.3 GB (GigaMO 2)" +msgstr "3.5\" 2.3 GB (GigaMO 2)" + +msgid "5.25\" 600 MB" +msgstr "5.25\" 600 MB" + +msgid "5.25\" 650 MB" +msgstr "5.25\" 650 MB" + +msgid "5.25\" 1 GB" +msgstr "5.25\" 1 GB" + +msgid "5.25\" 1.3 GB" +msgstr "5.25\" 1.3 GB" + +msgid "Perfect RPM" +msgstr "RPM perfectes" + +msgid "1% below perfect RPM" +msgstr "1% por sota dels RPM perfectes" + +msgid "1.5% below perfect RPM" +msgstr "1.5% por sota dels RPM perfectes" + +msgid "2% below perfect RPM" +msgstr "2% por sota dels RPM perfectes" + +msgid "(System Default)" +msgstr "(Per defecte del sistema)" + +msgid "Failed to initialize network driver" +msgstr "No fou possible iniciaitzar el controlador de xarxa" + +msgid "The network configuration will be switched to the null driver" +msgstr "La configuració de xarxa es canviarà al controlador nul" + +msgid "Mouse sensitivity:" +msgstr "Sensitivitat del ratón:" + +msgid "Select media images from program working directory" +msgstr "Escollir imatges de mitjans del directori de treball del programa" + +msgid "PIT mode:" +msgstr "Modalitat PIT:" + +msgid "Auto" +msgstr "Automàtica" + +msgid "Slow" +msgstr "Lenta" + +msgid "Fast" +msgstr "Ráàida" + +msgid "&Auto-pause on focus loss" +msgstr "Pa&usa automàtica en perdre el focus" + +msgid "WinBox is no longer supported" +msgstr "El WinBox no és més suportat" + +msgid "Development of the WinBox manager stopped in 2022 due to a lack of maintainers. As we direct our efforts towards making 86Box even better, we have made the decision to no longer support WinBox as a manager.\n\nNo further updates will be provided through WinBox, and you may encounter incorrect behavior should you continue using it with newer versions of 86Box. Any bug reports related to WinBox behavior will be closed as invalid.\n\nGo to 86box.net for a list of other managers you can use." +msgstr "El desenvolupament del administrador WinBox s'ha aturat en 2022 per la manca de mantenidors. Com ara dirigim els nostres esforços a fer 86Box encara millor, hem pres la decisió de no més suportar el WinBox com ara administrador.\n\nNo es proporcionaran més actualitzacions a través del WinBox, i podeu trobar un comportament incorrecte si continua en utilitzar-lo amb versions más noves del 86Box. Qualsevol report de error relacionat amb el comportament del WinBox serà tancat com ara invàlid.\n\nAneu a 86box.net per a una llista de altres administradors que podeu utilitzar." + +msgid "Generate" +msgstr "Generar" + +msgid "Joystick configuration" +msgstr "Configuració del joystick" + +msgid "Device" +msgstr "Dispositiu" + +msgid "%1 (X axis)" +msgstr "%1 (eix X)" + +msgid "%1 (Y axis)" +msgstr "%1 (eix Y)" + +msgid "MCA devices" +msgstr "Dispositius MCA" + +msgid "List of MCA devices:" +msgstr "Llista de dispositius MCA:" + +msgid "&Tablet tool" +msgstr "Eine de &taula" + +msgid "About &Qt" +msgstr "Quant al &Qt" + +msgid "&MCA devices…" +msgstr "Dispositius MCA…" + +msgid "Show non-&primary monitors" +msgstr "Mostrar monitors no prim&aris" + +msgid "Open screenshots &folder…" +msgstr "Obrir la ca&rpeta de captures…" + +msgid "Appl&y fullscreen stretch mode when maximized" +msgstr "&Utilitzar estirament de la pantalla sencera en modalitat maximitzada" + +msgid "&Cursor/Puck" +msgstr "&Cursor/Puck" + +msgid "&Pen" +msgstr "&Bolígraf" + +msgid "&Host CD/DVD Drive (%1:)" +msgstr "&Unitat de CD/DVD del amfitrió (%1:)" + +msgid "&Connected" +msgstr "&Connectat" + +msgid "Clear image &history" +msgstr "Suprimir &història de imatges" + +msgid "Create…" +msgstr "Criar…" + +msgid "Host CD/DVD Drive (%1)" +msgstr "Unitat de CD/DVD del amfitrió (%1)" + +msgid "Unknown Bus" +msgstr "Bus desconegut" + +msgid "Null Driver" +msgstr "Controlador nul" + +msgid "NIC:" +msgstr "NIC:" + +msgid "NIC %1 (%2) %3" +msgstr "NIC %1 (%2) %3" + +msgid "&NIC %1 (%2) %3" +msgstr "&NIC %1 (%2) %3" + +msgid "Render behavior" +msgstr "Comportament del renderitzador" + +msgid "Use target framerate:" +msgstr "Utilitzar la freqüència de fotogrames del objectiu:" + +msgid " fps" +msgstr " fps" + +msgid "VSync" +msgstr "VSync" + +msgid "Synchronize with video" +msgstr "Sincronitzar amb els gràfics" + +msgid "Shaders" +msgstr "Shaders" + +msgid "Remove" +msgstr "Suprimir" + +msgid "Browse…" +msgstr "Navegació…" + +msgid "Couldn't create OpenGL context." +msgstr "Impossible de criar el context OpenGL." + +msgid "Couldn't switch to OpenGL context." +msgstr "Impossible de canviar al context OpenGL." + +msgid "OpenGL version 3.0 or greater is required. Current version is %1.%2" +msgstr "Es requereix la versió 3.0 o bé més alta del OpenGL. La versió actual és %1.%2" + +msgid "Error initializing OpenGL" +msgstr "Error en inicialitzar el OpenGL" + +msgid "\nFalling back to software rendering." +msgstr "\nTornant al renderitzat per software." + +msgid "

When selecting media images (CD-ROM, floppy, etc.) the open dialog will start in the same directory as the 86Box configuration file. This setting will likely only make a difference on macOS.

" +msgstr "

En escollir imatges de mitjans (CD-ROM, disquet, etc.), el diàleg d'obertura s'iniciarà en el mateix directori que el fitxer de configuració del 86Box. És probable que aquest ajust només farà una diferència en el macOS.

" + +msgid "This machine might have been moved or copied." +msgstr "Aquesta màquina pot haver estat moguda o bé copiada." + +msgid "In order to ensure proper networking functionality, 86Box needs to know if this machine was moved or copied.\n\nSelect \"I Copied It\" if you are not sure." +msgstr "Per garantir la funcionalitat adequada de la xarxa, el 86Box ha de saber si aquesta màquina s'ha mogut o bé copiat.\n\nSi no està segur, escolliu \"La vaig copiar\"." + +msgid "I Moved It" +msgstr "La vaig moure" + +msgid "I Copied It" +msgstr "La vaig copiar" + +msgid "86Box Monitor #%1" +msgstr "Monitor del 86Box %1" + +msgid "No MCA devices." +msgstr "Cap de dispositius MCA." + +msgid "MiB" +msgstr "MiB" + +msgid "GiB" +msgstr "GiB" + +msgid "Network Card #1" +msgstr "Targeta de xarxa 1" + +msgid "Network Card #2" +msgstr "Targeta de xarxa 2" + +msgid "Network Card #3" +msgstr "Targeta de xarxa 3" + +msgid "Network Card #4" +msgstr "Targeta de xarxa 4" + +msgid "Mode:" +msgstr "Modalitat:" + +msgid "Interface:" +msgstr "Interfase:" + +msgid "Adapter:" +msgstr "Adaptador:" + +msgid "VDE Socket:" +msgstr "Sòcol VDE:" + +msgid "TAP Bridge Device:" +msgstr "Dispositiu pont TAP:" + +msgid "86Box Unit Tester" +msgstr "Comprovador de unitat del 86Box" + +msgid "Novell NetWare 2.x Key Card" +msgstr "Targeta de clau del Novell NetWare 2.x" + +msgid "Serial port passthrough 1" +msgstr "Passatge de port sèrie 1" + +msgid "Serial port passthrough 2" +msgstr "Passatge de port sèrie 2" + +msgid "Serial port passthrough 3" +msgstr "Passatge de port sèrie 3" + +msgid "Serial port passthrough 4" +msgstr "Passatge de port sèrie 4" + +msgid "Renderer &options…" +msgstr "Opc&ions del renderitzador…" + +msgid "PC/XT Keyboard" +msgstr "Teclat PC/XT" + +msgid "AT Keyboard" +msgstr "Teclat AT" + +msgid "AX Keyboard" +msgstr "Teclat AX" + +msgid "PS/2 Keyboard" +msgstr "Teclat PS/2" + +msgid "PS/55 Keyboard" +msgstr "Teclat PS/55" + +msgid "Keys" +msgstr "Tecles" + +msgid "Logitech/Microsoft Bus Mouse" +msgstr "Ratolí de bus Logitech/Microsoft" + +msgid "Microsoft Bus Mouse (InPort)" +msgstr "Ratolí de bus (InPort)" + +msgid "Mouse Systems Serial Mouse" +msgstr "Ratolí sèrie Mouse Systems" + +msgid "Mouse Systems Bus Mouse" +msgstr "Ratolí de bus Mouse Systems" + +msgid "Microsoft Serial Mouse" +msgstr "Ratolí sèrie Microsoft" + +msgid "Microsoft Serial BallPoint" +msgstr "Ratolí sèrie Microsoft BallPoint" + +msgid "Logitech Serial Mouse" +msgstr "Ratolí sèrie Logitech" + +msgid "PS/2 Mouse" +msgstr "Ratolì PS/2" + +msgid "PS/2 QuickPort Mouse" +msgstr "Ratolì PS/2 QuickPort" + +msgid "3M MicroTouch (Serial)" +msgstr "3M MicroTouch (sèrie)" + +msgid "Default Baud rate" +msgstr "Velocitat de transmissió per defecte" + +msgid "[COM] Standard Hayes-compliant Modem" +msgstr "[COM] Mòdem estàndard compatible amb Hayes" + +msgid "Roland MT-32 Emulation" +msgstr "Emulació Roland MT-32" + +msgid "Roland MT-32 (New) Emulation" +msgstr "Emulació Roland MT-32 (nou)" + +msgid "Roland CM-32L Emulation" +msgstr "Emulació Roland CM-32L" + +msgid "Roland CM-32LN Emulation" +msgstr "Emulació Roland CM-32LN" + +msgid "OPL4-ML Daughterboard" +msgstr "Placa filla OPL4-ML" + +msgid "System MIDI" +msgstr "MIDI del sistema" + +msgid "MIDI Input Device" +msgstr "Dispositiu de entrada MIDI" + +msgid "BIOS file" +msgstr "Fitxer del BIOS" + +msgid "BIOS file (ROM #1)" +msgstr "Fitxer del BIOS (ROM núm. 1)" + +msgid "BIOS file (ROM #2)" +msgstr "Fitxer del BIOS (ROM núm. 2)" + +msgid "BIOS file (ROM #3)" +msgstr "Fitxer del BIOS (ROM núm. 3)" + +msgid "BIOS file (ROM #4)" +msgstr "Fitxer del BIOS (ROM núm. 4)" + +msgid "BIOS address" +msgstr "Adreça del BIOS" + +msgid "BIOS address (ROM #1)" +msgstr "Adreça del BIOS (ROM núm. 1)" + +msgid "BIOS address (ROM #2)" +msgstr "Adreça del BIOS (ROM núm. 2)" + +msgid "BIOS address (ROM #3)" +msgstr "Adreça del BIOS (ROM núm. 3)" + +msgid "BIOS address (ROM #4)" +msgstr "Adreça del BIOS (ROM núm. 4)" + +msgid "Enable BIOS extension ROM Writes" +msgstr "Activar escriptures per al ROM de extensió del BIOS" + +msgid "Enable BIOS extension ROM Writes (ROM #1)" +msgstr "Activar escriptures per al ROM de extensió del BIOS (ROM núm. 1)" + +msgid "Enable BIOS extension ROM Writes (ROM #2)" +msgstr "Activar escriptures per al ROM de extensió del BIOS (ROM núm. 2)" + +msgid "Enable BIOS extension ROM Writes (ROM #3)" +msgstr "Activar escriptures per al ROM de extensió del BIOS (ROM núm. 3)" + +msgid "Enable BIOS extension ROM Writes (ROM #4)" +msgstr "Activar escriptures per al ROM de extensió del BIOS (ROM núm. 4)" + +msgid "Linear framebuffer base" +msgstr "Base del buffer lineal de pantalla" + +msgid "Address" +msgstr "Adreça" + +msgid "IRQ" +msgstr "IRQ" + +msgid "Serial port IRQ" +msgstr "IRQ del port sèrie" + +msgid "Parallel port IRQ" +msgstr "IRQ del port paralel" + +msgid "Hard disk" +msgstr "Disc dur" + +msgid "BIOS Revision" +msgstr "Revisió del BIOS" + +msgid "BIOS Version" +msgstr "Versió del BIOS" + +msgid "BIOS Language" +msgstr "Idioma del BIOS" + +msgid "IBM 5161 Expansion Unit" +msgstr "Unitat de expansió IBM 5161" + +msgid "IBM Cassette Basic" +msgstr "BASIC de casset IBM" + +msgid "Translate 26 -> 17" +msgstr "Traduir 26 -> 17" + +msgid "Language" +msgstr "Idioma" + +msgid "Enable backlight" +msgstr "Activar retroiŀluminació" + +msgid "Invert colors" +msgstr "Invertir colors" + +msgid "BIOS size" +msgstr "Grandària del BIOS" + +msgid "BIOS size (ROM #1)" +msgstr "Grandària del BIOS (ROM núm. 1)" + +msgid "BIOS size (ROM #2)" +msgstr "Grandària del BIOS (ROM núm. 2)" + +msgid "BIOS size (ROM #3)" +msgstr "Grandària del BIOS (ROM núm. 3)" + +msgid "BIOS size (ROM #4)" +msgstr "Grandària del BIOS (ROM núm. 4)" + +msgid "Map C0000-C7FFF as UMB" +msgstr "Mapar C0000-C7FFF com ara UMB" + +msgid "Map C8000-CFFFF as UMB" +msgstr "Mapar C8000-CFFFF com ara UMB" + +msgid "Map D0000-D7FFF as UMB" +msgstr "Mapar D0000-D7FFF com ara UMB" + +msgid "Map D8000-DFFFF as UMB" +msgstr "Mapar D8000-DFFFF com ara UMB" + +msgid "Map E0000-E7FFF as UMB" +msgstr "Mapar E0000-E7FFF com ara UMB" + +msgid "Map E8000-EFFFF as UMB" +msgstr "Mapar E8000-EFFFF com ara UMB" + +msgid "JS9 Jumper (JIM)" +msgstr "Pont JS9 (JIM)" + +msgid "MIDI Output Device" +msgstr "Dispositiu de sortida MIDI" + +msgid "MIDI Real time" +msgstr "MIDI en temps real" + +msgid "MIDI Thru" +msgstr "Passatge de la entrada MIDI" + +msgid "MIDI Clockout" +msgstr "Sortida del rellotge MIDI" + +msgid "Output Gain" +msgstr "Guany de sortida" + +msgid "Chorus" +msgstr "Cor" + +msgid "Chorus Voices" +msgstr "Veus del cor" + +msgid "Chorus Level" +msgstr "Nivell del cor" + +msgid "Chorus Speed" +msgstr "Velocitat del cor" + +msgid "Chorus Depth" +msgstr "Profunditat del cor" + +msgid "Chorus Waveform" +msgstr "Forma d'ona del cor" + +msgid "Reverb" +msgstr "Reverberació" + +msgid "Reverb Room Size" +msgstr "Mida de l'habitaciò de reverberació" + +msgid "Reverb Damping" +msgstr "Amortiment de reverberació" + +msgid "Reverb Width" +msgstr "Amplada de reverberació" + +msgid "Reverb Level" +msgstr "Nivell de reverberació" + +msgid "Interpolation Method" +msgstr "Mètode de interpolació" + +msgid "Dynamic Sample Loading" +msgstr "Càrrega dinàmica de mostres" + +msgid "Reverb Output Gain" +msgstr "Guany de sortida de reverberació" + +msgid "Reversed stereo" +msgstr "Estéreo invertit" + +msgid "Nice ramp" +msgstr "Rampa agradable" + +msgid "Hz" +msgstr "Hz" + +msgid "Buttons" +msgstr "Botons" + +msgid "Serial Port" +msgstr "Port sèrie" + +msgid "RTS toggle" +msgstr "Commutació RTS" + +msgid "Revision" +msgstr "Revisió" + +msgid "Controller" +msgstr "Controlador" + +msgid "Show Crosshair" +msgstr "Mostrar mirada creuada" + +msgid "DMA" +msgstr "DMA" + +msgid "MAC Address" +msgstr "Adreça MAC" + +msgid "MAC Address OUI" +msgstr "OUI de la adreça MAC" + +msgid "Enable BIOS" +msgstr "Activar el BIOS" + +msgid "Baud Rate" +msgstr "Velocitat de transmissió" + +msgid "TCP/IP listening port" +msgstr "Port de auscultació TCP/IP" + +msgid "Phonebook File" +msgstr "Fitxer de llista de contactes" + +msgid "Telnet emulation" +msgstr "Emulació Telnet" + +msgid "RAM Address" +msgstr "Adreça del RAM" + +msgid "RAM size" +msgstr "Grandària del RAM" + +msgid "Initial RAM size" +msgstr "Grandària inicial del RAM" + +msgid "Serial Number" +msgstr "Número de sèrie" + +msgid "Host ID" +msgstr "ID del amfitrió" + +msgid "FDC Address" +msgstr "Adreça del FDC" + +msgid "MPU-401 Address" +msgstr "Adreça del MPU-401" + +msgid "MPU-401 IRQ" +msgstr "IRQ del MPU-401" + +msgid "Receive MIDI input" +msgstr "Rebre entrada MIDI" + +msgid "Low DMA" +msgstr "DMA baix" + +msgid "Enable Game port" +msgstr "Activar port de joc" + +msgid "Enable Adlib ports" +msgstr "Activar ports Adlib" + +msgid "SID Model" +msgstr "Model del SID" + +msgid "SID Filter Strength" +msgstr "Força del filtre del SID" + +msgid "Surround module" +msgstr "Mòdulo surround" + +msgid "SB Address" +msgstr "Adreça del SB" + +msgid "Adlib Address" +msgstr "Adreça del Adlib" + +msgid "Use EEPROM setting" +msgstr "Uitilitzar la configuració del EEPROM" + +msgid "WSS IRQ" +msgstr "IRQ del WSS" + +msgid "WSS DMA" +msgstr "DMA del WSS" + +msgid "RTC IRQ" +msgstr "IRQ RTC" + +msgid "RTC Port Address" +msgstr "Adreça del port RTC" + +msgid "Onboard RTC" +msgstr "RTC integrat" + +msgid "Not installed" +msgstr "No instalat" + +msgid "Enable OPL" +msgstr "Activar OPL" + +msgid "Receive MIDI input (MPU-401)" +msgstr "Rebre entrada MIDI (MPU-401)" + +msgid "SB low DMA" +msgstr "DMA baix del SB" + +msgid "6CH variant (6-channel)" +msgstr "Variant 6CH (6 canals)" + +msgid "Enable CMS" +msgstr "Activar CMS" + +msgid "Mixer" +msgstr "Mesclador" + +msgid "High DMA" +msgstr "DMA alt" + +msgid "Control PC speaker" +msgstr "Controlar el altaveu del PC" + +msgid "Memory size" +msgstr "Grandària de memòria" + +msgid "EMU8000 Address" +msgstr "Adreça del EMU8000" + +msgid "IDE Controller" +msgstr "Controlador IDE" + +msgid "Codec" +msgstr "Codec" + +msgid "GUS type" +msgstr "Tipus de GUS" + +msgid "Enable 0x04 \"Exit 86Box\" command" +msgstr "Activar ordre 0x04 \"Sortir de 86Box\"" + +msgid "Display type" +msgstr "Tipus de pantalla" + +msgid "Composite type" +msgstr "Tipus de pantalla compòsita" + +msgid "RGB type" +msgstr "Tipus de pantalla RGB" + +msgid "Line doubling type" +msgstr "Tipus de duplicació de línia" + +msgid "Snow emulation" +msgstr "Emulació de neu" + +msgid "Monitor type" +msgstr "Tipus de monitor" + +msgid "Character set" +msgstr "Conjunt de caracters" + +msgid "XGA type" +msgstr "Tipus de XGA" + +msgid "Instance" +msgstr "Instància" + +msgid "MMIO Address" +msgstr "Adreça del MMIO" + +msgid "RAMDAC type" +msgstr "Tipus de RAMDAC" + +msgid "Blend" +msgstr "Mesclar" + +msgid "Font" +msgstr "Tipus de lletra" + +msgid "Bilinear filtering" +msgstr "Filtració bilineal" + +msgid "Video chroma-keying" +msgstr "Croma-clau de vídeo" + +msgid "Dithering" +msgstr "Dithering" + +msgid "Enable NMI for CGA emulation" +msgstr "Activar NMI per a emulació del CGA" + +msgid "Voodoo type" +msgstr "Tipus de Voodoo" + +msgid "Framebuffer memory size" +msgstr "Grandària de memòria del buffer de pantalla" + +msgid "Texture memory size" +msgstr "Grandària de memòria de textura" + +msgid "Dither subtraction" +msgstr "Subtracció de dither" + +msgid "Screen Filter" +msgstr "Filtre de pantalla" + +msgid "Render threads" +msgstr "Fils de renderització" + +msgid "SLI" +msgstr "SLI" + +msgid "Start Address" +msgstr "Adreça inicial" + +msgid "Contiguous Size" +msgstr "Grandària contigua" + +msgid "I/O Width" +msgstr "Amplada de E/S" + +msgid "Transfer Speed" +msgstr "Velocitat de transferència" + +msgid "EMS mode" +msgstr "Modalitat EMS" + +msgid "EMS Address" +msgstr "Adreça del EMS" + +msgid "EMS 1 Address" +msgstr "Adreça del EMS 1" + +msgid "EMS 2 Address" +msgstr "Adreça del EMS 2" + +msgid "EMS Memory Size" +msgstr "Grandària de memòria del EMS" + +msgid "EMS 1 Memory Size" +msgstr "Grandària de memòria del EMS 1" + +msgid "EMS 2 Memory Size" +msgstr "Grandària de memòria del EMS 2" + +msgid "Enable EMS" +msgstr "Activar EMS" + +msgid "Enable EMS 1" +msgstr "Activar EMS 1" + +msgid "Enable EMS 2" +msgstr "Activar EMS 2" + +msgid "Address for > 2 MB" +msgstr "Adreça per a > 2 MB" + +msgid "Frame Address" +msgstr "Adreça del marc" + +msgid "USA" +msgstr "EUA" + +msgid "Danish" +msgstr "Danés" + +msgid "Always at selected speed" +msgstr "Sempre a la velocitat escollida" + +msgid "BIOS setting + Hotkeys (off during POST)" +msgstr "Configuració del BIOS + Tecles de accés ràpid (desactivates durant el POST)" + +msgid "64 KB starting from F0000" +msgstr "64 KB a partir de F0000" + +msgid "128 KB starting from E0000 (address MSB inverted, last 64 KB first)" +msgstr "128 KB a partir de E0000 (MSB de adreça invertit, últimes 64 KB primer)" + +msgid "Sine" +msgstr "Sinusoidal" + +msgid "Triangle" +msgstr "Triangular" + +msgid "Linear" +msgstr "Lineal" + +msgid "4th Order" +msgstr "De 4º ordre" + +msgid "7th Order" +msgstr "De 7º ordre" + +msgid "Non-timed (original)" +msgstr "No cronometrat (original)" + +msgid "45 Hz (JMP2 not populated)" +msgstr "45 Hz (JMP2 no poblat)" + +msgid "Two" +msgstr "Dos" + +msgid "Three" +msgstr "Tres" + +msgid "Wheel" +msgstr "Roda" + +msgid "Five + Wheel" +msgstr "Cinc + roda" + +msgid "Five + 2 Wheels" +msgstr "Cinc + 2 rodes" + +msgid "A3 - SMT2 Serial / SMT3(R)V" +msgstr "A3 - SMT2 sèrie / SMT3(R)V" + +msgid "Q1 - SMT3(R) Serial" +msgstr "Q1 - SMT3(R) sèrie" + +msgid "8 KB" +msgstr "8 KB" + +msgid "32 KB" +msgstr "32 KB" + +msgid "16 KB" +msgstr "16 KB" + +msgid "64 KB" +msgstr "64 KB" + +msgid "Disable BIOS" +msgstr "Desactivar el BIOS" + +msgid "512 KB" +msgstr "512 KB" + +msgid "2 MB" +msgstr "2 MB" + +msgid "8 MB" +msgstr "8 MB" + +msgid "28 MB" +msgstr "28 MB" + +msgid "1 MB" +msgstr "1 MB" + +msgid "4 MB" +msgstr "4 MB" + +msgid "12 MB" +msgstr "12 MB" + +msgid "16 MB" +msgstr "16 MB" + +msgid "20 MB" +msgstr "20 MB" + +msgid "24 MB" +msgstr "24 MB" + +msgid "SigmaTel STAC9721T (stereo)" +msgstr "SigmaTel STAC9721T (estéreo)" + +msgid "256 KB" +msgstr "256 KB" + +msgid "Composite" +msgstr "Compòsit" + +msgid "True color" +msgstr "Color veritable" + +msgid "Old" +msgstr "Vell" + +msgid "New" +msgstr "Nou" + +msgid "Color (generic)" +msgstr "Colors (genèric)" + +msgid "Green Monochrome" +msgstr "Monocromàtic verd" + +msgid "Amber Monochrome" +msgstr "Monocromàtic ambre" + +msgid "Gray Monochrome" +msgstr "Monocromàtic gris" + +msgid "Color (no brown)" +msgstr "Colors (sense marró)" + +msgid "Color (IBM 5153)" +msgstr "Colors (IBM 5153)" + +msgid "Simple doubling" +msgstr "Duplicació simple" + +msgid "sRGB interpolation" +msgstr "Interpolació sRGB" + +msgid "Linear interpolation" +msgstr "Interpolació lineal" + +msgid "Has secondary 8x8 character set" +msgstr "Té conjunt de caràcters 8x8 secundari" + +msgid "Has Quadcolor II daughter board" +msgstr "Té placa filla Quadcolor II" + +msgid "Alternate monochrome contrast" +msgstr "Contrast monocromátic alternatiu" + +msgid "128 KB" +msgstr "128 KB" + +msgid "Monochrome (5151/MDA) (white)" +msgstr "Monocromàtic (5151/MDA) (blanc)" + +msgid "Monochrome (5151/MDA) (green)" +msgstr "Monocromàtic (5151/MDA) (verd)" + +msgid "Monochrome (5151/MDA) (amber)" +msgstr "Monocromàtic (5151/MDA) (ambre)" + +msgid "Color 40x25 (5153/CGA)" +msgstr "Colors 40x25 (5153/CGA)" + +msgid "Color 80x25 (5153/CGA)" +msgstr "Colors 80x25 (5153/CGA)" + +msgid "Enhanced Color - Normal Mode (5154/ECD)" +msgstr "Colors millorat - modalitat normal (5154/ECD)" + +msgid "Enhanced Color - Enhanced Mode (5154/ECD)" +msgstr "Colors millorat - modalitat millorada (5154/ECD)" + +msgid "Green" +msgstr "Verd" + +msgid "Amber" +msgstr "Ambre" + +msgid "Gray" +msgstr "Gris" + +msgid "Grayscale" +msgstr "Escala de grisos" + +msgid "Color" +msgstr "Colors" + +msgid "U.S. English" +msgstr "Anglès dels EUA" + +msgid "Scandinavian" +msgstr "Escandinau" + +msgid "Other languages" +msgstr "Altres idiomes" + +msgid "Bochs latest" +msgstr "Bochs més nou" + +msgid "Apply overscan deltas" +msgstr "Aplicar deltes del overscan" + +msgid "Mono Interlaced" +msgstr "Monocromàtic entrallaçat" + +msgid "Mono Non-Interlaced" +msgstr "Monocromàtic no entrallaçat" + +msgid "Color Interlaced" +msgstr "Colors entrallaçat" + +msgid "Color Non-Interlaced" +msgstr "Colors no entrallaçat" + +msgid "3Dfx Voodoo Graphics" +msgstr "Gràfics 3dfx Voodoo" + +msgid "3Dfx Voodoo 2" +msgstr "3Dfx Voodoo 2" + +msgid "Obsidian SB50 + Amethyst (2 TMUs)" +msgstr "Obsidian SB50 + Amethyst (2 unitats TMU)" + +msgid "8-bit" +msgstr "8 bits" + +msgid "16-bit" +msgstr "16 bits" + +msgid "Standard (150ns)" +msgstr "Estàndard (150ns)" + +msgid "High-Speed (120ns)" +msgstr "Alta velocitat (120ns)" + +msgid "Enabled" +msgstr "Activat" + +msgid "Standard" +msgstr "Estàndard" + +msgid "High-Speed" +msgstr "Alta velocitat" + +msgid "Stereo LPT DAC" +msgstr "DAC LPT estéreo" + +msgid "Generic Text Printer" +msgstr "Impressora genèrica de text" + +msgid "Generic ESC/P 2 Dot-Matrix Printer" +msgstr "Impressora genèrica matricial ESC/P 2" + +msgid "Generic PostScript Printer" +msgstr "Impressora genèrica PostScript" + +msgid "Generic PCL5e Printer" +msgstr "Impresora genèrica PCL5e" + +msgid "Parallel Line Internet Protocol" +msgstr "Protocol de Internet de línia paralela" + +msgid "Protection Dongle for Savage Quest" +msgstr "Dongle de protecció per a Savage Quest" + +msgid "Serial Passthrough Device" +msgstr "Dispositiu de passatge de port sèrie" + +msgid "Passthrough Mode" +msgstr "Modalitat de passatge" + +msgid "Host Serial Device" +msgstr "Dispositiu serie del amfitrió" + +msgid "Name of pipe" +msgstr "Nom de conducta" + +msgid "Data bits" +msgstr "Bits de dades" + +msgid "Stop bits" +msgstr "Bits de parada" + +msgid "Baud Rate of Passthrough" +msgstr "Velocitat de transmissió de passatge" + +msgid "Named Pipe (Server)" +msgstr "Conducta anomenada (servidor)" + +msgid "Named Pipe (Client)" +msgstr "Conducta anomenada (client)" + +msgid "Host Serial Passthrough" +msgstr "Passatge del port sèrie del amfitrió" + +msgid "E&ject %1" +msgstr "E&xpulsar %1" + +msgid "&Unmute" +msgstr "&Reactivar so" + +msgid "Softfloat FPU" +msgstr "FPU Softfloat" + +msgid "High performance impact" +msgstr "Alt impacte en el rendiment" + +msgid "[Generic] RAM Disk (max. speed)" +msgstr "[Genèric] Disc RAM (velocitat màxima)" + +msgid "[Generic] 1989 (3500 RPM)" +msgstr "[Genèric] 1989 (3500 RPM)" + +msgid "[Generic] 1992 (3600 RPM)" +msgstr "[Genèric] 1992 (3600 RPM)" + +msgid "[Generic] 1994 (4500 RPM)" +msgstr "[Genèric] 1994 (4500 RPM)" + +msgid "[Generic] 1996 (5400 RPM)" +msgstr "[Genèric] 1996 (5400 RPM)" + +msgid "[Generic] 1997 (5400 RPM)" +msgstr "[Genèric] 1997 (5400 RPM)" + +msgid "[Generic] 1998 (5400 RPM)" +msgstr "[Genèric] 1998 (5400 RPM)" + +msgid "[Generic] 2000 (7200 RPM)" +msgstr "[Genèric] 2000 (7200 RPM)" + +msgid "IBM 8514/A clone (ISA)" +msgstr "Clon IBM 8514/A (ISA)" + +msgid "Vendor" +msgstr "Fabricant" + +msgid "30 Hz (JMP2 = 1)" +msgstr "30 Hz (JMP2 = 1)" + +msgid "60 Hz (JMP2 = 2)" +msgstr "60 Hz (JMP2 = 2)" + +msgid "Generic PC/XT Memory Expansion" +msgstr "Expansió genèrica PC/XT de memòria" + +msgid "Generic PC/AT Memory Expansion" +msgstr "Expansió genèrica PC/AT de memòria" + +msgid "Unable to find Dot-Matrix fonts" +msgstr "No fou possible trobar els tipus de lletra matricials" + +msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P 2 Dot-Matrix Printer." +msgstr "Els tipus de lletra TrueType en el directori \"roms/printer/fonts\" són imprescindibles per l'emulació de la impressora genèrica matricial ESC/P 2." + +msgid "Inhibit multimedia keys" +msgstr "Inhibir tecles multimèdia" + +msgid "Ask for confirmation before saving settings" +msgstr "Demanar confirmació abans de desar la configuració" + +msgid "Ask for confirmation before hard resetting" +msgstr "Demanar confirmació abans de la reiniciació completa" + +msgid "Ask for confirmation before quitting" +msgstr "Demanar confirmació abans de sortir" + +msgid "Options" +msgstr "Opcions" + +msgid "Model" +msgstr "Model" + +msgid "Model:" +msgstr "Model:" + +msgid "Failed to initialize Vulkan renderer." +msgstr "Error en inicialitzar el renderitzador Vulkan." + +msgid "GLSL Error" +msgstr "Error de GLSL" + +msgid "Could not load shader: %1" +msgstr "No fou possible carregar el shader: %1" + +msgid "Could not load texture: %1" +msgstr "Error en carregar la textura: %1" + +msgid "Could not compile shader:\n\n%1" +msgstr "Error en compilar el shader:\n\n%1" + +msgid "Program not linked:\n\n%1" +msgstr "Programa no vinculat:\n\n%1" + +msgid "Shader Manager" +msgstr "Administrador de shaders" + +msgid "Shader Configuration" +msgstr "Configuració de shaders" + +msgid "Add" +msgstr "Afegir" + +msgid "Move up" +msgstr "Moure cap amunt" + +msgid "Move down" +msgstr "Moure cap avall" + +msgid "Could not load file %1" +msgstr "Error en carregar el fitxer %1" + +msgid "Key Bindings:" +msgstr "Dreceres de teclat:" + +msgid "Action" +msgstr "Acció" + +msgid "Keybind" +msgstr "Drecera" + +msgid "Clear binding" +msgstr "Escorrar drecera" + +msgid "Bind" +msgstr "Vincular" + +msgid "Bind Key" +msgstr "Vincular tecla" + +msgid "Enter key combo:" +msgstr "Escriure combinació de tecles:" + +msgid "Bind conflict" +msgstr "Conflicte entre dreceres" + +msgid "This key combo is already in use." +msgstr "Aquesta combinació de tecles ja està en ús." + +msgid "Send Control+Alt+Del" +msgstr "Enviar Control+Alt+Del" + +msgid "Send Control+Alt+Escape" +msgstr "Enviar Control+Alt+Escape" + +msgid "Toggle fullscreen" +msgstr "Alternar pantalla completa" + +msgid "Toggle UI in fullscreen" +msgstr "Alternar interfase de usuari en modalitat de pantalla completa" + +msgid "Screenshot" +msgstr "Captura de pantalla" + +msgid "Release mouse pointer" +msgstr "Soltar el punter del ratolí" + +msgid "Toggle pause" +msgstr "Alternar pausa" + +msgid "Toggle mute" +msgstr "Alternar silenci" + +msgid "Text files" +msgstr "Fitxers de text" + +msgid "ROM files" +msgstr "Fitxers de ROM" + +msgid "SoundFont files" +msgstr "Fitxers SoundFont" + +msgid "Local Switch" +msgstr "Commutador local" + +msgid "Remote Switch" +msgstr "Commutador remot" + +msgid "Switch:" +msgstr "Commutador:" + +msgid "Hub Mode" +msgstr "Modalitat de concentrador" + +msgid "Hostname:" +msgstr "Nombre del amfitrió:" + +msgid "ISA RAM:" +msgstr "RAM ISA:" + +msgid "ISA ROM:" +msgstr "ROM ISA:" + +msgid "&Wipe NVRAM" +msgstr "&Esborrar el NVRAM" + +msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" +msgstr "Això suprimirà tots els fitxers de NVRAM (i relacionats) de la màquina virtual situats al subdirectori \"nvr\". Haureu de tornar a reconfigurar la configuració del BIOS (i potser de altres dispositius a l'interior de la MV) si s'escau.\n\nSegur que voleu suprimir tots els continguts de la NVRAM de la màquina virtual \"%1\"?" + +msgid "Success" +msgstr "Èxito" + +msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" +msgstr "Els continguts de la NVRAM de la màquina virtual \"%1\" s'han esborrat amb èxit" + +msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\"" +msgstr "S'ha produït un error en intentar esborrar els continguts de la NVRAM de la màquina virtual \"%1\"" + +msgid "%1 VM Manager" +msgstr "Administrador de MV de %1" + +msgid "%n disk(s)" +msgstr "%n disc(s)" + +msgid "Unknown Status" +msgstr "Estat desconegut" + +msgid "No Machines Found!" +msgstr "No s'han trobat màquines!" + +msgid "Check for updates on startup" +msgstr "Verificar actualitzacions en iniciar" + +msgid "Unable to determine release information" +msgstr "No fou possible determinar informacions de la versió" + +msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." +msgstr "S'ha produït un error en verificar actualitzacions:\n\n%1\n\nSi us plau, torneu a intentar més tard." + +msgid "Update check complete" +msgstr "Verificació de actualitzacions completada" + +msgid "stable" +msgstr "estable" + +msgid "beta" +msgstr "beta" + +msgid "You are running the latest %1 version of 86Box: %2" +msgstr "Està executant la última versió %1 del 86Box: %2" + +msgid "version" +msgstr "versió" + +msgid "build" +msgstr "compilació" + +msgid "You are currently running version %1." +msgstr "Actualment està a executar la versió %1." + +msgid "Version %1 is now available." +msgstr "La versió %1 és ara disponible." + +msgid "You are currently running build %1." +msgstr "Actualment está a executar la compialació %1." + +msgid "Build %1 is now available." +msgstr "La compilació %1 és ara disponible." + +msgid "Would you like to visit the download page?" +msgstr "Voleu visitar a la pàgina de descàrregas?" + +msgid "Visit download page" +msgstr "Visitar a la pàgina de descarregas" + +msgid "Update check" +msgstr "Verificació de actualitzacions" + +msgid "Checking for updates…" +msgstr "Verificant las actualitzacions…" + +msgid "86Box Update" +msgstr "Actualització del 86Box" + +msgid "Release notes:" +msgstr "Notes de versió:" + +msgid "%1 Hz" +msgstr "%1 Hz" + +msgid "Virtual machine crash" +msgstr "Terminació inesperada de la màquina virtual" + +msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2." +msgstr "El procés de la màquina virtual \"%1\" s'ha terminat inesperadament amb con el codi de sortida %2." + +msgid "The system will not be added." +msgstr "El sistema no serà afegit." + +msgid "&Update mouse every CPU frame" +msgstr "&Actualitza el estat del ratolí a cada bloc del CPU" + +msgid "Hue" +msgstr "Matís" + +msgid "Saturation" +msgstr "Saturació" + +msgid "Contrast" +msgstr "Contrast" + +msgid "Brightness" +msgstr "Luminositat" + +msgid "Sharpness" +msgstr "Nitidesa" + +msgid "&CGA composite settings…" +msgstr "Configuració de la modalitat compòsita &CGA…" + +msgid "CGA composite settings" +msgstr "Configuració de la modalitat compòsita CGA" + +msgid "Monitor EDID" +msgstr "EDID del monitor" + +msgid "Export…" +msgstr "Exportar…" + +msgid "Export EDID" +msgstr "Exportar el EDID" + +msgid "EDID file \"%ls\" is too large." +msgstr "El fitxer EDID \"%ls\" es massa gran." + +msgid "OpenGL input scale" +msgstr "Escala de entrada del OpenGL" + +msgid "OpenGL input stretch mode" +msgstr "Modalitat de estirament de entrada del OpenGL" + +msgid "Color scheme" +msgstr "Esquema de colors" + +msgid "Light" +msgstr "Clar" + +msgid "Dark" +msgstr "Fosc" + +msgid "Search:" +msgstr "Cercar:" + +msgid "Force interpretation" +msgstr "Forçar interpretació" + +msgid "Allow recompilation" +msgstr "Permetre recompilació" + +msgid "&Force interpretation" +msgstr "&Forçar interpretació" + +msgid "&Allow recompilation" +msgstr "&Permetre recompilació" diff --git a/src/qt/languages/es-ES.po b/src/qt/languages/es-ES.po index c348fa87b..e99f2431b 100644 --- a/src/qt/languages/es-ES.po +++ b/src/qt/languages/es-ES.po @@ -160,7 +160,7 @@ msgid "RGB (no brown)" msgstr "RGB (sin marrón)" msgid "&RGB Grayscale" -msgstr "RGB &Grises" +msgstr "RGB &grises" msgid "Generic RGBI color monitor" msgstr "Monitor a colores RGBI genérico" @@ -241,10 +241,10 @@ msgid "&New image…" msgstr "&Nueva imagen…" msgid "&Existing image…" -msgstr "Imagen &Existente…" +msgstr "Imagen &existente…" msgid "Existing image (&Write-protected)…" -msgstr "Imagen Existente (&Sólo-lectura)…" +msgstr "Imagen existente (&Sólo-lectura)…" msgid "&Record" msgstr "&Grabar" @@ -292,7 +292,7 @@ msgid "Settings" msgstr "Configuraciones" msgid "Specify Main Window Dimensions" -msgstr "Especificar Dimensiones de la Ventana Principal" +msgstr "Especificar dimensiones de la ventana principal" msgid "OK" msgstr "Aceptar" @@ -376,7 +376,7 @@ msgid "Enabled (UTC)" msgstr "Habilitado (UTC)" msgid "Dynamic Recompiler" -msgstr "Recompilador Dinámico" +msgstr "Recompilador dinámico" msgid "CPU frame size" msgstr "Tamaño de blocos de CPU" @@ -682,7 +682,7 @@ msgid "&Removable disk %1 (%2): %3" msgstr "&Disco removible %1 (%2): %3" msgid "Removable disk images" -msgstr "Imagenes de disco removible" +msgstr "Imágenes de disco removible" msgid "Image %1" msgstr "Imagen %1" @@ -709,10 +709,10 @@ msgid "All images" msgstr "Todas las imagenes" msgid "Basic sector images" -msgstr "Basic sector images" +msgstr "Imaáenes básicas de sector" msgid "Surface images" -msgstr "Surface images" +msgstr "Imágenes de superficie" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." msgstr "La máquina \"%hs\" no está disponible debido a ROMs faltantes en el directorio roms/machines. Cambiando a una máquina disponible." @@ -733,7 +733,7 @@ msgid "Display" msgstr "Vídeo" msgid "Input devices" -msgstr "Dispositivos de Entrada" +msgstr "Dispositivos de entrada" msgid "Sound" msgstr "Sonido" @@ -946,7 +946,7 @@ msgid "MO images" msgstr "Imágenes de MO" msgid "Welcome to 86Box!" -msgstr "¡Bienvenido a 86Box!" +msgstr "¡Bienvenido en 86Box!" msgid "Internal device" msgstr "Dispositivo interno" @@ -1018,7 +1018,7 @@ msgid "CD-ROM images" msgstr "Imágenes de CD-ROM" msgid "%1 Device Configuration" -msgstr "%1 Configuración de Dispositivo" +msgstr "%1 configuración de dispositivo" msgid "Monitor in sleep mode" msgstr "Monitor en modo ahorro" @@ -1042,7 +1042,7 @@ msgid "C&assette: %1" msgstr "C&assette: %1" msgid "Cassette images" -msgstr "Imágenes de Cassette" +msgstr "Imágenes de cassette" msgid "Cartridge %1: %2" msgstr "Cartucho %1: %2" @@ -1051,7 +1051,7 @@ msgid "Car&tridge %1: %2" msgstr "Car&tucho %1: %2" msgid "Cartridge images" -msgstr "Imágenes de Cartucho" +msgstr "Imágenes de cartucho" msgid "Resume execution" msgstr "Retomar la ejecución" @@ -1072,13 +1072,13 @@ msgid "Hard reset" msgstr "Hard reset" msgid "Force shutdown" -msgstr "Apagqar forzadamente" +msgstr "Apagar forzadamente" msgid "Start" msgstr "Iniciar" msgid "&Force shutdown" -msgstr "&Apagqar forzadamente" +msgstr "&Apagar forzadamente" msgid "&Start" msgstr "&Iniciar" @@ -2122,7 +2122,7 @@ msgid "MPU-401 Address" msgstr "Dirección del MPU-401" msgid "MPU-401 IRQ" -msgstr "IQ del MPU-401" +msgstr "IRQ del MPU-401" msgid "Receive MIDI input" msgstr "Recebir entrada MIDI" @@ -2218,7 +2218,7 @@ msgid "Display type" msgstr "Tipo de pantalla" msgid "Composite type" -msgstr "Tipo de pantalla compuesta" +msgstr "Tipo de pantalla compósita" msgid "RGB type" msgstr "Tipo de pantalla RGB" @@ -2446,7 +2446,7 @@ msgid "256 KB" msgstr "256 KB" msgid "Composite" -msgstr "Compuesto" +msgstr "Compósito" msgid "True color" msgstr "Verdadero color" @@ -2482,13 +2482,13 @@ msgid "sRGB interpolation" msgstr "Interpolación sRGB" msgid "Linear interpolation" -msgstr "Interpolación lineare" +msgstr "Interpolación lineal" msgid "Has secondary 8x8 character set" msgstr "Tiene conjunto de carácteres 8x8 secundário" msgid "Has Quadcolor II daughter board" -msgstr "Tiene tarjeta hija Quadcolor II" +msgstr "Tiene placa hija Quadcolor II" msgid "Alternate monochrome contrast" msgstr "Contraste monocromo alternativo" @@ -2569,7 +2569,7 @@ msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 unidades TMU)" msgid "8-bit" -msgstr "8 bitss" +msgstr "8 bits" msgid "16-bit" msgstr "16 bits" @@ -2596,7 +2596,7 @@ msgid "Generic Text Printer" msgstr "Impresora genérica de texto" msgid "Generic ESC/P 2 Dot-Matrix Printer" -msgstr "Impresora matricial ESC/P 2 genérica" +msgstr "Impresora genérica matricial ESC/P 2" msgid "Generic PostScript Printer" msgstr "Impresora genérica PostScript" @@ -2698,7 +2698,7 @@ msgid "Unable to find Dot-Matrix fonts" msgstr "No fué posible encontrar las fuentes matriciales" msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P 2 Dot-Matrix Printer." -msgstr "Las fuentes TrueType en el directorio \"roms/printer/fonts\" son necesarias para la emulación de la impresora matricial ESC/P 2 genérica." +msgstr "Las fuentes TrueType en el directorio \"roms/printer/fonts\" son necesarias para la emulación de la impresora genérica matricial ESC/P 2." msgid "Inhibit multimedia keys" msgstr "Inhibir teclas multimedia" @@ -2863,10 +2863,10 @@ msgid "Unknown Status" msgstr "Estado desconocido" msgid "No Machines Found!" -msgstr "¡No fueron encontradas máquinas!" +msgstr "¡No fueran encontradas máquinas!" msgid "Check for updates on startup" -msgstr "Contorlar actualizaciones al iniciar" +msgstr "Verificar actualizaciones al iniciar" msgid "Unable to determine release information" msgstr "No fué posible determinar informaciones de la versión" @@ -2953,19 +2953,19 @@ msgid "Sharpness" msgstr "Nitidez" msgid "&CGA composite settings…" -msgstr "Configuración del modo compuesto &CGA…" +msgstr "Configuración del modo compósito &CGA…" msgid "CGA composite settings" -msgstr "Configuración del modo compuesto CGA" +msgstr "Configuración del modo compósito CGA" msgid "Monitor EDID" -msgstr "EDID du moniteur" +msgstr "EDID del monitor" msgid "Export…" -msgstr "Exporter…" +msgstr "Exportar…" msgid "Export EDID" -msgstr "EDID exportieren" +msgstr "Exportar el EDID" msgid "EDID file \"%ls\" is too large." msgstr "El archivo EDID \"%ls\" es demasiado grande." @@ -2980,7 +2980,7 @@ msgid "Color scheme" msgstr "Esquema de colores" msgid "Light" -msgstr "Luz" +msgstr "Claro" msgid "Dark" msgstr "Oscuro" diff --git a/src/qt/qt_platform.cpp b/src/qt/qt_platform.cpp index a042d8b7d..37653c5a3 100644 --- a/src/qt/qt_platform.cpp +++ b/src/qt/qt_platform.cpp @@ -273,7 +273,7 @@ plat_getcwd(char *bufp, int max) strncpy(bufp, exe_path, max); # else CharPointer(bufp, max) = QDir::homePath().toUtf8(); - path_append_filename(bufp, bufp, "Library/86Box"); + path_append_filename(bufp, bufp, "Library/" EMU_NAME); # endif #else CharPointer(bufp, max) = QDir::currentPath().toUtf8(); @@ -828,10 +828,10 @@ plat_init_rom_paths(void) for (auto &path : paths) { #ifdef __APPLE__ - rom_add_path(QDir(path).filePath("net.86Box.86Box/roms").toUtf8().constData()); - rom_add_path(QDir(path).filePath("86Box/roms").toUtf8().constData()); + rom_add_path(QDir(path).filePath("net." EMU_NAME "." EMU_NAME "/roms").toUtf8().constData()); + rom_add_path(QDir(path).filePath(EMU_NAME "/roms").toUtf8().constData()); #else - rom_add_path(QDir(path).filePath("86Box/roms").toUtf8().constData()); + rom_add_path(QDir(path).filePath(EMU_NAME "/roms").toUtf8().constData()); #endif } } @@ -852,10 +852,10 @@ plat_init_asset_paths(void) for (auto &path : paths) { #ifdef __APPLE__ - asset_add_path(QDir(path).filePath("net.86Box.86Box/assets").toUtf8().constData()); - asset_add_path(QDir(path).filePath("86Box/assets").toUtf8().constData()); + asset_add_path(QDir(path).filePath("net." EMU_NAME "." EMU_NAME "/assets").toUtf8().constData()); + asset_add_path(QDir(path).filePath(EMU_NAME "/assets").toUtf8().constData()); #else - asset_add_path(QDir(path).filePath("86Box/assets").toUtf8().constData()); + asset_add_path(QDir(path).filePath(EMU_NAME "/assets").toUtf8().constData()); #endif } } diff --git a/src/qt/qt_progsettings.cpp b/src/qt/qt_progsettings.cpp index 268cec894..58d22c63b 100644 --- a/src/qt/qt_progsettings.cpp +++ b/src/qt/qt_progsettings.cpp @@ -47,6 +47,7 @@ QTranslator *ProgSettings::qtTranslator = nullptr; QVector> ProgSettings::languages = { { "system", "(System Default)" }, + { "ca-ES", "Catalan (Spain)" }, { "zh-CN", "Chinese (Simplified)" }, { "zh-TW", "Chinese (Traditional)" }, { "hr-HR", "Croatian (Croatia)" }, diff --git a/src/qt/qt_translations.qrc.in b/src/qt/qt_translations.qrc.in index ef7993372..46541b103 100644 --- a/src/qt/qt_translations.qrc.in +++ b/src/qt/qt_translations.qrc.in @@ -1,5 +1,6 @@ + 86box_ca-ES.qm 86box_cs-CZ.qm 86box_de-DE.qm 86box_en-US.qm diff --git a/src/unix/CMakeLists.txt b/src/unix/CMakeLists.txt index 1d428fa2b..1c79b42d2 100644 --- a/src/unix/CMakeLists.txt +++ b/src/unix/CMakeLists.txt @@ -22,6 +22,7 @@ add_library(plat OBJECT unix.c unix_serial_passthrough.c unix_netsocket.c + ../qt/sdl_joystick.c ) if (NOT CPPTHREADS) diff --git a/src/unix/unix.c b/src/unix/unix.c index ee92bddcb..97f8b972a 100644 --- a/src/unix/unix.c +++ b/src/unix/unix.c @@ -67,9 +67,6 @@ int fixed_size_x = 640; int fixed_size_y = 480; extern int title_set; extern wchar_t sdl_win_title[512]; -plat_joystick_state_t plat_joystick_state[MAX_PLAT_JOYSTICKS]; -joystick_state_t joystick_state[GAMEPORT_MAX][MAX_JOYSTICKS]; -int joysticks_present; SDL_mutex *blitmtx; SDL_threadID eventthread; static int exit_event = 0; @@ -691,9 +688,9 @@ ui_msgbox_header(int flags, void *header, void *message) if (!header) { if (flags & MBX_ANSI) - header = (void *) "86Box"; + header = (void *) EMU_NAME; else - header = (void *) L"86Box"; + header = (void *) EMU_NAME_W; } msgbtn.buttonid = 1; @@ -736,7 +733,7 @@ plat_get_exe_name(char *s, int size) { char *basepath = SDL_GetBasePath(); - snprintf(s, size, "%s%s", basepath, basepath[strlen(basepath) - 1] == '/' ? "86box" : "/86box"); + snprintf(s, size, "%s%s", basepath, basepath[strlen(basepath) - 1] == '/' ? EMU_NAME : "/" EMU_NAME); } void @@ -830,7 +827,7 @@ plat_init_rom_paths(void) char xdg_rom_path[TMP_PATH_BUFSIZE] = {0}; size_t used = snprintf(xdg_rom_path, sizeof(xdg_rom_path), "%s/", xdg_data_home); if (used < sizeof(xdg_rom_path)) - used += snprintf(xdg_rom_path + used, sizeof(xdg_rom_path) - used, "86Box/"); + used += snprintf(xdg_rom_path + used, sizeof(xdg_rom_path) - used, EMU_NAME "/"); if (used < sizeof(xdg_rom_path) && !plat_dir_check(xdg_rom_path)) plat_dir_create(xdg_rom_path); if (used < sizeof(xdg_rom_path)) @@ -850,7 +847,7 @@ plat_init_rom_paths(void) if (home) { char home_rom_path[TMP_PATH_BUFSIZE] = {0}; size_t used = snprintf(home_rom_path, sizeof(home_rom_path), - "%s/.local/share/86Box/", home); + "%s/.local/share/" EMU_NAME "/", home); if (used < sizeof(home_rom_path) && !plat_dir_check(home_rom_path)) plat_dir_create(home_rom_path); if (used < sizeof(home_rom_path)) @@ -878,7 +875,7 @@ plat_init_rom_paths(void) char real_xdg_rom_path[TMP_PATH_BUFSIZE] = {0}; size_t used = snprintf(real_xdg_rom_path, sizeof(real_xdg_rom_path), - "%s/86Box/roms/", cur_xdg); + "%s/" EMU_NAME "/roms/", cur_xdg); if (used < sizeof(real_xdg_rom_path)) rom_add_path(real_xdg_rom_path); cur_xdg = strtok_r(NULL, ":", &saveptr); @@ -887,8 +884,8 @@ plat_init_rom_paths(void) free(xdg_rom_paths); } } else { - rom_add_path("/usr/local/share/86Box/roms/"); - rom_add_path("/usr/share/86Box/roms/"); + rom_add_path("/usr/local/share/" EMU_NAME "/roms/"); + rom_add_path("/usr/share/" EMU_NAME "/roms/"); } #else char default_rom_path[TMP_PATH_BUFSIZE] = {0}; @@ -906,7 +903,7 @@ plat_init_asset_paths(void) char xdg_asset_path[TMP_PATH_BUFSIZE] = {0}; size_t used = snprintf(xdg_asset_path, sizeof(xdg_asset_path), "%s/", xdg_data_home); if (used < sizeof(xdg_asset_path)) - used += snprintf(xdg_asset_path + used, sizeof(xdg_asset_path) - used, "86Box/"); + used += snprintf(xdg_asset_path + used, sizeof(xdg_asset_path) - used, EMU_NAME "/"); if (used < sizeof(xdg_asset_path) && !plat_dir_check(xdg_asset_path)) plat_dir_create(xdg_asset_path); if (used < sizeof(xdg_asset_path)) @@ -926,7 +923,7 @@ plat_init_asset_paths(void) if (home) { char home_asset_path[TMP_PATH_BUFSIZE] = {0}; size_t used = snprintf(home_asset_path, sizeof(home_asset_path), - "%s/.local/share/86Box/", home); + "%s/.local/share/" EMU_NAME "/", home); if (used < sizeof(home_asset_path) && !plat_dir_check(home_asset_path)) plat_dir_create(home_asset_path); if (used < sizeof(home_asset_path)) @@ -954,7 +951,7 @@ plat_init_asset_paths(void) char real_xdg_asset_path[TMP_PATH_BUFSIZE] = {0}; size_t used = snprintf(real_xdg_asset_path, sizeof(real_xdg_asset_path), - "%s/86Box/assets/", cur_xdg); + "%s/" EMU_NAME "/assets/", cur_xdg); if (used < sizeof(real_xdg_asset_path)) asset_add_path(real_xdg_asset_path); cur_xdg = strtok_r(NULL, ":", &saveptr); @@ -963,8 +960,8 @@ plat_init_asset_paths(void) free(xdg_asset_paths); } } else { - asset_add_path("/usr/local/share/86Box/assets/"); - asset_add_path("/usr/share/86Box/assets/"); + asset_add_path("/usr/local/share/" EMU_NAME "/assets/"); + asset_add_path("/usr/share/" EMU_NAME "/assets/"); } #else char default_asset_path[TMP_PATH_BUFSIZE] = {0}; @@ -986,7 +983,7 @@ plat_get_global_data_dir(char *outbuf, const size_t len) if (portable_mode) { strncpy(outbuf, exe_path, len); } else { - char *prefPath = SDL_GetPrefPath(NULL, "86Box"); + char *prefPath = SDL_GetPrefPath(NULL, EMU_NAME); strncpy(outbuf, prefPath, len); SDL_free(prefPath); } @@ -1109,7 +1106,7 @@ unix_executeLine(char *line) "pause - pause the the emulated system.\n" "fullscreen - toggle fullscreen.\n" "version - print version and license information.\n" - "exit - exit 86Box.\n"); + "exit - exit " EMU_NAME ".\n"); } else if (strncasecmp(xargv[0], "exit", 4) == 0) { exit_event = 1; } else if (strncasecmp(xargv[0], "version", 7) == 0) { @@ -1299,7 +1296,7 @@ monitor_thread(UNUSED(void *param)) char *line = NULL; size_t n; - printf("86Box monitor console.\n"); + printf(EMU_NAME " monitor console.\n"); while (!exit_event) { if (feof(stdin)) @@ -1307,10 +1304,10 @@ monitor_thread(UNUSED(void *param)) #ifdef ENABLE_READLINE if (f_readline) - line = f_readline("(86Box) "); + line = f_readline("(" EMU_NAME ") "); else { #endif - printf("(86Box) "); + printf("(" EMU_NAME ") "); (void) !getline(&line, &n, stdin); #ifdef ENABLE_READLINE } @@ -1338,7 +1335,7 @@ main(int argc, char **argv) if (ret == 0) return 0; if (!pc_init_roms()) { - ui_msgbox_header(MBX_FATAL, L"No ROMs found.", L"86Box could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory."); + ui_msgbox_header(MBX_FATAL, L"No ROMs found.", EMU_NAME_W L" could not find any usable ROM images.\n\nPlease download a ROM set and extract it into the \"roms\" directory."); SDL_Quit(); return 6; } @@ -1689,24 +1686,6 @@ plat_language_code_r(UNUSED(int id), UNUSED(char *outbuf), UNUSED(int len)) return; } -void -joystick_init(void) -{ - /* No-op. */ -} - -void -joystick_close(void) -{ - /* No-op. */ -} - -void -joystick_process(uint8_t gp) -{ - /* No-op. */ -} - void startblit(void) { diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c index 2fe46bea3..70b360c1e 100644 --- a/src/video/vid_ati28800.c +++ b/src/video/vid_ati28800.c @@ -574,16 +574,16 @@ ati28800k_init(const device_t *info) default: case 0: rom_init(&ati28800->bios_rom, BIOS_ATIKOR_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - loadfont(FONT_ATIKOR_PATH, 6); + video_load_font(FONT_ATIKOR_PATH, FONT_FORMAT_KSC6501, LOAD_FONT_NO_OFFSET); break; case 1: rom_init_interleaved(&ati28800->bios_rom, BIOS_ATIKOR_4620P_PATH_L, BIOS_ATIKOR_4620P_PATH_H, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - loadfont(FONT_ATIKOR_4620P_PATH, 6); + video_load_font(FONT_ATIKOR_4620P_PATH, FONT_FORMAT_KSC6501, LOAD_FONT_NO_OFFSET); break; case 2: rom_init(&ati28800->bios_rom, BIOS_ATIKOR_6033P_PATH, 0xc0000, 0x8000, 0x7fff, 0, MEM_MAPPING_EXTERNAL); - loadfont(FONT_ATIKOR_6033P_PATH, 6); + video_load_font(FONT_ATIKOR_6033P_PATH, FONT_FORMAT_KSC6501,LOAD_FONT_NO_OFFSET); break; } diff --git a/src/video/vid_cga.c b/src/video/vid_cga.c index 3bedf53a4..f4c93e9c4 100644 --- a/src/video/vid_cga.c +++ b/src/video/vid_cga.c @@ -782,13 +782,13 @@ cga_standalone_init(UNUSED(const device_t *info)) switch(device_get_config_int("font")) { case 0: - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 1: - loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0); + video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 4: - loadfont(FONT_TULIP_DGA_PATH, 0); + video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; } @@ -802,7 +802,7 @@ cga_pravetz_init(const device_t *info) { cga_t *cga = cga_standalone_init(info); - loadfont("roms/video/cga/PRAVETZ-VDC2.BIN", 10); + video_load_font("roms/video/cga/PRAVETZ-VDC2.BIN", FONT_FORMAT_PRAVETZ, LOAD_FONT_NO_OFFSET); io_removehandler(0x03dd, 0x0001, cga_in, NULL, NULL, cga_out, NULL, NULL, cga); io_sethandler(0x03dd, 0x0001, cga_pravetz_in, NULL, NULL, cga_pravetz_out, NULL, NULL, cga); diff --git a/src/video/vid_cga_ncr.c b/src/video/vid_cga_ncr.c index 6b0f15f65..cda38036b 100644 --- a/src/video/vid_cga_ncr.c +++ b/src/video/vid_cga_ncr.c @@ -562,7 +562,7 @@ nga_init(UNUSED(const device_t *info)) charset = device_get_config_int("charset"); - loadfont_ex("roms/video/nga/ncr_nga_35122.bin", 1, 4096 * charset); + video_load_font("roms/video/nga/ncr_nga_35122.bin", 1, 4096 * charset); nga->cga.composite = 0; nga->cga.snow_enabled = device_get_config_int("snow_enabled"); diff --git a/src/video/vid_cga_olivetti.c b/src/video/vid_cga_olivetti.c index 4cb845684..bd565c0d7 100644 --- a/src/video/vid_cga_olivetti.c +++ b/src/video/vid_cga_olivetti.c @@ -592,7 +592,7 @@ ogc_init(UNUSED(const device_t *info)) memset(ogc, 0x00, sizeof(ogc_t)); video_inform(VIDEO_FLAG_TYPE_CGA, &timing_ogc); - loadfont("roms/video/ogc/ogc graphics board go380 258 pqbq.bin", 1); + video_load_font("roms/video/ogc/ogc graphics board go380 258 pqbq.bin", FONT_FORMAT_PC200, LOAD_FONT_NO_OFFSET); /* FIXME: composite is not working yet */ #if 0 diff --git a/src/video/vid_cga_quadcolor.c b/src/video/vid_cga_quadcolor.c index 4159dc2c1..c5c3d3456 100644 --- a/src/video/vid_cga_quadcolor.c +++ b/src/video/vid_cga_quadcolor.c @@ -828,13 +828,13 @@ quadcolor_standalone_init(UNUSED(const device_t *info)) switch(device_get_config_int("font")) { case 0: - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 1: - loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0); + video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 4: - loadfont(FONT_TULIP_DGA_PATH, 0); + video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; } diff --git a/src/video/vid_cga_toshiba_t1000.c b/src/video/vid_cga_toshiba_t1000.c index 894d28a56..2a16a7d0e 100644 --- a/src/video/vid_cga_toshiba_t1000.c +++ b/src/video/vid_cga_toshiba_t1000.c @@ -650,7 +650,7 @@ static void * t1000_init(UNUSED(const device_t *info)) { t1000_t *t1000 = calloc(1, sizeof(t1000_t)); - loadfont("roms/machines/t1000/t1000font.bin", 8); + video_load_font("roms/machines/t1000/t1000font.bin", FONT_FORMAT_PC1512_T1000, LOAD_FONT_NO_OFFSET); cga_init(&t1000->cga); video_inform(VIDEO_FLAG_TYPE_CGA, &timing_t1000); diff --git a/src/video/vid_cga_toshiba_t3100e.c b/src/video/vid_cga_toshiba_t3100e.c index 25f079204..d8344426b 100644 --- a/src/video/vid_cga_toshiba_t3100e.c +++ b/src/video/vid_cga_toshiba_t3100e.c @@ -654,7 +654,7 @@ void * t3100e_init(UNUSED(const device_t *info)) { t3100e_t *t3100e = calloc(1, sizeof(t3100e_t)); - loadfont("roms/machines/t3100e/t3100e_font.bin", 5); + video_load_font("roms/machines/t3100e/t3100e_font.bin", FONT_FORMAT_TOSHIBA_3100E, LOAD_FONT_NO_OFFSET); cga_init(&t3100e->cga); video_inform(VIDEO_FLAG_TYPE_CGA, &timing_t3100e); diff --git a/src/video/vid_cga_v6355.c b/src/video/vid_cga_v6355.c index 1ddc1f2cd..f259f6277 100644 --- a/src/video/vid_cga_v6355.c +++ b/src/video/vid_cga_v6355.c @@ -924,13 +924,13 @@ v6355_standalone_init(const device_t *info) { switch(device_get_config_int("font")) { case 0: - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 1: - loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0); + video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 4: - loadfont(FONT_TULIP_DGA_PATH, 0); + video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; } diff --git a/src/video/vid_et4000.c b/src/video/vid_et4000.c index 937623689..c17495c1e 100644 --- a/src/video/vid_et4000.c +++ b/src/video/vid_et4000.c @@ -850,7 +850,7 @@ et4000_init(const device_t *info) et4000k_in, NULL, NULL, et4000k_out, NULL, NULL, dev); io_sethandler(0x32cb, 1, et4000k_in, NULL, NULL, et4000k_out, NULL, NULL, dev); - loadfont(KOREAN_FONT_ROM_PATH, 6); + video_load_font(KOREAN_FONT_ROM_PATH, FONT_FORMAT_KSC6501, LOAD_FONT_NO_OFFSET); fn = KOREAN_BIOS_ROM_PATH; break; @@ -884,7 +884,7 @@ et4000_init(const device_t *info) et4000_kasan_in, NULL, NULL, et4000_kasan_out, NULL, NULL, dev); io_sethandler(0x0258, 2, et4000_kasan_in, NULL, NULL, et4000_kasan_out, NULL, NULL, dev); - loadfont(KASAN_FONT_ROM_PATH, 6); + video_load_font(KASAN_FONT_ROM_PATH, FONT_FORMAT_KSC6501, LOAD_FONT_NO_OFFSET); fn = KASAN_BIOS_ROM_PATH; break; diff --git a/src/video/vid_genius.c b/src/video/vid_genius.c index 472217d30..5dd3d2ade 100644 --- a/src/video/vid_genius.c +++ b/src/video/vid_genius.c @@ -744,7 +744,7 @@ genius_init(UNUSED(const device_t *info)) /* 160k video RAM */ genius->vram = malloc(0x28000); - loadfont(BIOS_ROM_PATH, 4); + video_load_font(BIOS_ROM_PATH, FONT_FORMAT_MDSI_GENIUS, LOAD_FONT_NO_OFFSET); timer_add(&genius->timer, genius_poll, genius, 1); diff --git a/src/video/vid_hercules.c b/src/video/vid_hercules.c index 758b041af..a53ea9871 100644 --- a/src/video/vid_hercules.c +++ b/src/video/vid_hercules.c @@ -542,19 +542,19 @@ hercules_init(UNUSED(const device_t *info)) switch(device_get_config_int("font")) { case 0: - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 1: - loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0); + video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 2: - loadfont(FONT_KAM_PATH, 0); + video_load_font(FONT_KAM_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 3: - loadfont(FONT_KAMCL16_PATH, 0); + video_load_font(FONT_KAMCL16_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 4: - loadfont(FONT_TULIP_DGA_PATH, 0); + video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; } diff --git a/src/video/vid_hercules_incolor.c b/src/video/vid_hercules_incolor.c index b9be0765e..e6acb9bbb 100644 --- a/src/video/vid_hercules_incolor.c +++ b/src/video/vid_hercules_incolor.c @@ -994,19 +994,19 @@ incolor_init(UNUSED(const device_t *info)) switch(device_get_config_int("font")) { case 0: - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 1: - loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0); + video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 2: - loadfont(FONT_KAM_PATH, 0); + video_load_font(FONT_KAM_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 3: - loadfont(FONT_KAMCL16_PATH, 0); + video_load_font(FONT_KAMCL16_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 4: - loadfont(FONT_TULIP_DGA_PATH, 0); + video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; } diff --git a/src/video/vid_hercules_plus.c b/src/video/vid_hercules_plus.c index 25b44ad70..f6eb2e9fb 100644 --- a/src/video/vid_hercules_plus.c +++ b/src/video/vid_hercules_plus.c @@ -631,19 +631,19 @@ herculesplus_init(UNUSED(const device_t *info)) switch(device_get_config_int("font")) { case 0: - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 1: - loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0); + video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 2: - loadfont(FONT_KAM_PATH, 0); + video_load_font(FONT_KAM_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 3: - loadfont(FONT_KAMCL16_PATH, 0); + video_load_font(FONT_KAMCL16_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 4: - loadfont(FONT_TULIP_DGA_PATH, 0); + video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; } diff --git a/src/video/vid_im1024.c b/src/video/vid_im1024.c index 1ade8badb..b16855229 100644 --- a/src/video/vid_im1024.c +++ b/src/video/vid_im1024.c @@ -1036,7 +1036,7 @@ im1024_init(UNUSED(const device_t *info)) dev = (im1024_t *) malloc(sizeof(im1024_t)); memset(dev, 0x00, sizeof(im1024_t)); - loadfont(BIOS_ROM_PATH, 9); + video_load_font(BIOS_ROM_PATH, FONT_FORMAT_IM1024, LOAD_FONT_NO_OFFSET); dev->fifo_len = 4096; dev->fifo = (uint8_t *) malloc(dev->fifo_len); diff --git a/src/video/vid_jega.c b/src/video/vid_jega.c index d3c806708..8a34b9f61 100644 --- a/src/video/vid_jega.c +++ b/src/video/vid_jega.c @@ -686,7 +686,7 @@ readfontxtbl(fontx_tbl *table, int size, FILE *fp) } static int -LoadFontxFile(const char *fn, void *priv) +jega_load_font(const char *fn, void *priv) { fontx_h fhead; fontx_tbl *ftbl; @@ -793,7 +793,7 @@ jega_standalone_init(const device_t *info) rom_init(&jega->bios_rom, JEGA_PATH_BIOS, 0xc0000, 0x8000, 0x7fff, 0, 0); memset(&jega->jfont_dbcs_16, 0, DBCS16_FILESIZE); - LoadFontxFile(JEGA_PATH_FONTDBCS, jega); + jega_load_font(JEGA_PATH_FONTDBCS, jega); jega_commoninit(info, jega, 0); @@ -807,7 +807,7 @@ jvga_standalone_init(const device_t *info) rom_init(&jega->bios_rom, JVGA_PATH_BIOS, 0xc0000, 0x8000, 0x7fff, 0, 0); memset(&jega->jfont_dbcs_16, 0, DBCS16_FILESIZE); - LoadFontxFile(JVGA_PATH_FONTDBCS, jega); + jega_load_font(JVGA_PATH_FONTDBCS, jega); jega_commoninit(info, jega, 1); @@ -1024,7 +1024,7 @@ if386jega_init(const device_t *info) rom_init(&jega->bios_rom, IF386_PATH_VBIOS, 0xc0000, 0x8000, 0x7fff, 0, 0); memset(&jega->jfont_dbcs_16, 0, DBCS16_FILESIZE); - LoadFontxFile(JEGA_PATH_FONTDBCS, jega); + jega_load_font(JEGA_PATH_FONTDBCS, jega); jega_commoninit(info, jega, 0); diff --git a/src/video/vid_mda.c b/src/video/vid_mda.c index f530419f2..574e31550 100644 --- a/src/video/vid_mda.c +++ b/src/video/vid_mda.c @@ -414,27 +414,27 @@ mda_init(mda_t *mda) void * mda_standalone_init(UNUSED(const device_t *info)) { - mda_t *mda = malloc(sizeof(mda_t)); - memset(mda, 0, sizeof(mda_t)); + mda_t *mda = calloc(1, sizeof(mda_t)); + video_inform(VIDEO_FLAG_TYPE_MDA, &timing_mda); - mda->vram = malloc(0x1000); + mda->vram = malloc(MDA_VRAM); switch (device_get_config_int("font")) { case 0: - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 1: - loadfont(FONT_IBM_MDA_437_NORDIC_PATH, 0); + video_load_font(FONT_IBM_MDA_437_NORDIC_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 2: - loadfont(FONT_KAM_PATH, 0); + video_load_font(FONT_KAM_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 3: - loadfont(FONT_KAMCL16_PATH, 0); + video_load_font(FONT_KAMCL16_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; case 4: - loadfont(FONT_TULIP_DGA_PATH, 0); + video_load_font(FONT_TULIP_DGA_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); break; } diff --git a/src/video/vid_mga.c b/src/video/vid_mga.c index 68de89767..07b0869f7 100644 --- a/src/video/vid_mga.c +++ b/src/video/vid_mga.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include <86box/86box.h> #include <86box/io.h> @@ -5149,7 +5150,7 @@ static uint16_t texture_texel_fetch(mystique_t *mystique, int *tex_r, int *tex_g *atransp = 0; break; case TEXCTL_TEXFORMAT_TW15: - src = ((uint16_t *) svga->vram)[((mystique->dwgreg.texorg >> 1) + (t * tex_pitch) + s) & mystique->vram_mask_w]; + src = *(uint16_t*)((&svga->vram[(mystique->dwgreg.texorg + ((t * tex_pitch) + s) * 2) & mystique->vram_mask])); *tex_r = ((src >> 10) & 0x1f) << 3; *tex_g = ((src >> 5) & 0x1f) << 3; *tex_b = (src & 0x1f) << 3; @@ -5159,7 +5160,7 @@ static uint16_t texture_texel_fetch(mystique_t *mystique, int *tex_r, int *tex_g *atransp = 0; break; case TEXCTL_TEXFORMAT_TW12: - src = ((uint16_t *) svga->vram)[((mystique->dwgreg.texorg >> 1) + (t * tex_pitch) + s) & mystique->vram_mask_w]; + src = *(uint16_t*)((&svga->vram[(mystique->dwgreg.texorg + ((t * tex_pitch) + s) * 2) & mystique->vram_mask])); *tex_r = ((src >> 8) & 0xf) << 4; *tex_g = ((src >> 4) & 0xf) << 4; *tex_b = (src & 0xf) << 4; @@ -5173,7 +5174,7 @@ static uint16_t texture_texel_fetch(mystique_t *mystique, int *tex_r, int *tex_g } break; case TEXCTL_TEXFORMAT_TW16: - src = ((uint16_t *) svga->vram)[((mystique->dwgreg.texorg >> 1) + (t * tex_pitch) + s) & mystique->vram_mask_w]; + src = *(uint16_t*)((&svga->vram[(mystique->dwgreg.texorg + ((t * tex_pitch) + s) * 2) & mystique->vram_mask])); *tex_r = (src >> 11) << 3; *tex_g = ((src >> 5) & 0x3f) << 2; *tex_b = (src & 0x1f) << 3; @@ -5190,6 +5191,40 @@ static double lerp(double v0, double v1, double t) { return (1. - t) * v0 + t * v1; } +// Taken from GZDoom. +static inline double +FixedToFloat(int fixed) +{ + return fixed * (1.0 / (1 << 16)); +} + +static inline void +persp_correct(mystique_t* mystique, int* s, int* t, int* q, double* s_frac, double* t_frac) +{ + const int s_shift = 20 - (mystique->dwgreg.texwidth & TEXWIDTH_TW_MASK); + const int t_shift = 20 - (mystique->dwgreg.texheight & TEXHEIGHT_TH_MASK); + double s_d = ((*s) >> s_shift); + double t_d = ((*t) >> t_shift); + double q_d = FixedToFloat(*q); + + double throwaway1 = 0; + double throwaway2 = 0; + if (q_d == 0.0) + q_d = INFINITY; + + s_d *= 1. / q_d; + t_d *= 1. / q_d; + + *s_frac = fabs(modf(s_d, &throwaway1)); + *t_frac = fabs(modf(s_d, &throwaway2)); + + (void)throwaway1; + (void)throwaway2; + + *s = s_d; + *t = t_d; +} + static int texture_read(mystique_t *mystique, int *tex_r, int *tex_g, int *tex_b, int *atransp, int *tex_a) { @@ -5223,14 +5258,11 @@ texture_read(mystique_t *mystique, int *tex_r, int *tex_g, int *tex_b, int *atra s_frac = (((int32_t) mystique->dwgreg.tmr[6]) & ((1 << s_shift) - 1)) / (double)(1 << s_shift); t_frac = (((int32_t) mystique->dwgreg.tmr[7]) & ((1 << t_shift) - 1)) / (double)(1 << t_shift); } else { - const int s_shift = (20 + 16) - (mystique->dwgreg.texwidth & TEXWIDTH_TW_MASK); - const int t_shift = (20 + 16) - (mystique->dwgreg.texheight & TEXHEIGHT_TH_MASK); - int64_t q = mystique->dwgreg.tmr[8] ? (0x100000000LL / (int64_t) (int32_t) mystique->dwgreg.tmr[8]) : 0; + int q = (int32_t)mystique->dwgreg.tmr[8]; + s = (int32_t) mystique->dwgreg.tmr[6]; + t = (int32_t) mystique->dwgreg.tmr[7]; - s = ((int64_t) (int32_t) mystique->dwgreg.tmr[6] * q) >> s_shift; - t = ((int64_t) (int32_t) mystique->dwgreg.tmr[7] * q) >> t_shift; - s_frac = (((int64_t) (int32_t) mystique->dwgreg.tmr[6] * q) & ((1 << s_shift) - 1)) / (double)(1 << s_shift); - t_frac = (((int64_t) (int32_t) mystique->dwgreg.tmr[7] * q) & ((1 << t_shift) - 1)) / (double)(1 << t_shift); + persp_correct(mystique, &s, &t, &q, &s_frac, &t_frac); } if (mystique->dwgreg.texctl & TEXCTL_CLAMPU) { diff --git a/src/video/vid_ps55da2.c b/src/video/vid_ps55da2.c index a97d2aa84..3df73f92c 100644 --- a/src/video/vid_ps55da2.c +++ b/src/video/vid_ps55da2.c @@ -3149,7 +3149,7 @@ da2_poll(void *priv) } static void -da2_loadfont(char *fname, void *priv) +da2_video_load_font(char *fname, void *priv) { da2_t *da2 = (da2_t *) priv; uint8_t buf; @@ -3267,10 +3267,10 @@ da2_init(UNUSED(const device_t *info)) da2->mmio.font = malloc(DA2_FONTROM_SIZE); switch (da2->mmio.charset) { case DA2_DCONFIG_CHARSET_HANT: - da2_loadfont(DA2_FONTROM_PATH_HANT, da2); + da2_video_load_font(DA2_FONTROM_PATH_HANT, da2); break; case DA2_DCONFIG_CHARSET_JPAN: - da2_loadfont(DA2_FONTROM_PATH_JPAN, da2); + da2_video_load_font(DA2_FONTROM_PATH_JPAN, da2); /* Add magic code for OS/2 J1.3. This disables BitBlt's text drawing function. */ da2->mmio.font[0x1AFFE] = 0x80; da2->mmio.font[0x1AFFF] = 0x01; diff --git a/src/video/vid_sigma.c b/src/video/vid_sigma.c index 4759bb7af..d2c79b62e 100644 --- a/src/video/vid_sigma.c +++ b/src/video/vid_sigma.c @@ -794,7 +794,7 @@ sigma_init(UNUSED(const device_t *info)) sigma->enable_nmi = device_get_config_int("enable_nmi"); - loadfont(ROM_SIGMA_FONT, 7); + video_load_font(ROM_SIGMA_FONT, FONT_FORMAT_SIGMA, LOAD_FONT_NO_OFFSET); rom_init(&sigma->bios_rom, ROM_SIGMA_BIOS, bios_addr, 0x2000, 0x1FFF, 0, MEM_MAPPING_EXTERNAL); /* The BIOS ROM is overlaid by RAM, so remove its default mapping diff --git a/src/video/vid_svga.c b/src/video/vid_svga.c index 43158adbb..2409d1202 100644 --- a/src/video/vid_svga.c +++ b/src/video/vid_svga.c @@ -1693,7 +1693,7 @@ svga_init(const device_t *info, svga_t *svga, void *priv, int memsize, svga->dispontime = 1000ULL << 32; svga->dispofftime = 1000ULL << 32; svga->bpp = 8; - svga->vram = calloc(memsize + 8, 1); + svga->vram = calloc(memsize + 4096, 1); svga->vram_max = memsize; svga->vram_display_mask = svga->vram_mask = memsize - 1; svga->decode_mask = 0x7fffff; diff --git a/src/video/vid_table.c b/src/video/vid_table.c index cb7e794e8..88cd6789e 100644 --- a/src/video/vid_table.c +++ b/src/video/vid_table.c @@ -360,7 +360,7 @@ video_reset(int card) card, machine_has_flags(machine, MACHINE_VIDEO) ? 1 : 0); monitor_index_global = 0; - loadfont(FONT_IBM_MDA_437_PATH, 0); + video_load_font(FONT_IBM_MDA_437_PATH, FONT_FORMAT_MDA, LOAD_FONT_NO_OFFSET); for (uint8_t i = 1; i < GFXCARD_MAX; i ++) { if ((card != VID_NONE) && !machine_has_flags(machine, MACHINE_VIDEO_ONLY) && @@ -482,21 +482,3 @@ video_is_cga(void) { return (video_get_type() == VIDEO_FLAG_TYPE_CGA); } - -int -video_is_ega_vga(void) -{ - return (video_get_type() == VIDEO_FLAG_TYPE_SPECIAL); -} - -int -video_is_8514(void) -{ - return (video_get_type() == VIDEO_FLAG_TYPE_8514); -} - -int -video_is_xga(void) -{ - return (video_get_type() == VIDEO_FLAG_TYPE_XGA); -} diff --git a/src/video/vid_voodoo_banshee_blitter.c b/src/video/vid_voodoo_banshee_blitter.c index ac8cb172d..af609d785 100644 --- a/src/video/vid_voodoo_banshee_blitter.c +++ b/src/video/vid_voodoo_banshee_blitter.c @@ -1438,9 +1438,30 @@ banshee_polyfill_continue(voodoo_t *voodoo, uint32_t data) } } +static inline void +banshee_do_2d_launch(voodoo_t *voodoo) +{ + voodoo->launch_pending = 0; + voodoo->banshee_blt.rops[0] = voodoo->banshee_blt.command >> 24; + voodoo->banshee_blt.patoff_x = (voodoo->banshee_blt.command & COMMAND_PATOFF_X_MASK) >> COMMAND_PATOFF_X_SHIFT; + voodoo->banshee_blt.patoff_y = (voodoo->banshee_blt.command & COMMAND_PATOFF_Y_MASK) >> COMMAND_PATOFF_Y_SHIFT; + voodoo->banshee_blt.cur_x = 0; + voodoo->banshee_blt.cur_y = 0; + voodoo->banshee_blt.dstX = ((int32_t) (voodoo->banshee_blt.dstXY << 19)) >> 19; + voodoo->banshee_blt.dstY = ((int32_t) (voodoo->banshee_blt.dstXY << 3)) >> 19; + voodoo->banshee_blt.srcX = ((int32_t) (voodoo->banshee_blt.srcXY << 19)) >> 19; + voodoo->banshee_blt.srcY = ((int32_t) (voodoo->banshee_blt.srcXY << 3)) >> 19; + voodoo->banshee_blt.old_srcX = voodoo->banshee_blt.srcX; + voodoo->banshee_blt.host_data_remainder = 0; + voodoo->banshee_blt.host_data_count = 0; +} + static void banshee_do_2d_blit(voodoo_t *voodoo, int count, uint32_t data) { + if (voodoo->launch_pending) { + banshee_do_2d_launch(voodoo); + } switch (voodoo->banshee_blt.command & COMMAND_CMD_MASK) { case COMMAND_CMD_NOP: break; @@ -1691,21 +1712,7 @@ voodoo_2d_reg_writel(voodoo_t *voodoo, uint32_t addr, uint32_t val) case 0x70: voodoo_wait_for_render_thread_idle(voodoo); voodoo->banshee_blt.command = val; - voodoo->banshee_blt.rops[0] = val >> 24; -#if 0 - bansheeblt_log("command=%x %08x\n", voodoo->banshee_blt.command & COMMAND_CMD_MASK, val); -#endif - voodoo->banshee_blt.patoff_x = (val & COMMAND_PATOFF_X_MASK) >> COMMAND_PATOFF_X_SHIFT; - voodoo->banshee_blt.patoff_y = (val & COMMAND_PATOFF_Y_MASK) >> COMMAND_PATOFF_Y_SHIFT; - voodoo->banshee_blt.cur_x = 0; - voodoo->banshee_blt.cur_y = 0; - voodoo->banshee_blt.dstX = ((int32_t) (voodoo->banshee_blt.dstXY << 19)) >> 19; - voodoo->banshee_blt.dstY = ((int32_t) (voodoo->banshee_blt.dstXY << 3)) >> 19; - voodoo->banshee_blt.srcX = ((int32_t) (voodoo->banshee_blt.srcXY << 19)) >> 19; - voodoo->banshee_blt.srcY = ((int32_t) (voodoo->banshee_blt.srcXY << 3)) >> 19; - voodoo->banshee_blt.old_srcX = voodoo->banshee_blt.srcX; - voodoo->banshee_blt.host_data_remainder = 0; - voodoo->banshee_blt.host_data_count = 0; + voodoo->launch_pending = 1; switch (voodoo->banshee_blt.command & COMMAND_CMD_MASK) { #if 0 @@ -1725,6 +1732,7 @@ voodoo_2d_reg_writel(voodoo_t *voodoo, uint32_t addr, uint32_t val) #endif case COMMAND_CMD_POLYFILL: + banshee_do_2d_launch(voodoo); if (val & COMMAND_INITIATE) { voodoo->banshee_blt.dstXY = voodoo->banshee_blt.srcXY; voodoo->banshee_blt.dstX = voodoo->banshee_blt.srcX; @@ -1733,6 +1741,10 @@ voodoo_2d_reg_writel(voodoo_t *voodoo, uint32_t addr, uint32_t val) banshee_polyfill_start(voodoo); break; + case COMMAND_CMD_HOST_TO_SCREEN_BLT: + case COMMAND_CMD_HOST_TO_SCREEN_STRETCH_BLT: + break; + default: if (val & COMMAND_INITIATE) { banshee_do_2d_blit(voodoo, -1, 0); @@ -1779,6 +1791,9 @@ voodoo_2d_reg_writel(voodoo_t *voodoo, uint32_t addr, uint32_t val) #if 0 bansheeblt_log("launch %08x %08x %08x %08x\n", voodoo->banshee_blt.command, voodoo->banshee_blt.commandExtra, voodoo->banshee_blt.srcColorkeyMin, voodoo->banshee_blt.srcColorkeyMax); #endif + if (voodoo->launch_pending) { + banshee_do_2d_launch(voodoo); + } switch (voodoo->banshee_blt.command & COMMAND_CMD_MASK) { case COMMAND_CMD_SCREEN_TO_SCREEN_BLT: voodoo->banshee_blt.srcXY = val; diff --git a/src/video/vid_voodoo_blitter.c b/src/video/vid_voodoo_blitter.c index 0d2c9e103..856631637 100644 --- a/src/video/vid_voodoo_blitter.c +++ b/src/video/vid_voodoo_blitter.c @@ -218,14 +218,7 @@ skip_pixel_blit: break; case BLIT_COMMAND_CPU_TO_SCREEN: - voodoo->blt.dst_x = voodoo->bltDstX; - voodoo->blt.dst_y = voodoo->bltDstY; - voodoo->blt.cur_x = 0; - voodoo->blt.size_x = size_x; - voodoo->blt.size_y = size_y; - voodoo->blt.x_dir = x_dir; - voodoo->blt.y_dir = y_dir; - voodoo->blt.dst_stride = (voodoo->bltCommand & BLTCMD_DST_TILED) ? ((voodoo->bltDstXYStride & 0x3f) * 32 * 2) : (voodoo->bltDstXYStride & 0xff8); + voodoo->launch_pending = 1; break; case BLIT_COMMAND_RECT_FILL: @@ -234,7 +227,7 @@ skip_pixel_blit: int dst_x = voodoo->bltDstX; if (SLI_ENABLED) { - if ((!(voodoo->initEnable & INITENABLE_SLI_MASTER_SLAVE) && (voodoo->blt.dst_y & 1)) || ((voodoo->initEnable & INITENABLE_SLI_MASTER_SLAVE) && !(voodoo->blt.dst_y & 1))) + if ((!(voodoo->initEnable & INITENABLE_SLI_MASTER_SLAVE) && (dst_y & 1)) || ((voodoo->initEnable & INITENABLE_SLI_MASTER_SLAVE) && !(dst_y & 1))) goto skip_line_fill; dst = (uint16_t *) &voodoo->fb_mem[dst_base_addr + (dst_y >> 1) * dst_stride]; } else @@ -303,6 +296,18 @@ voodoo_v2_blit_data(voodoo_t *voodoo, uint32_t data) if ((voodoo->bltCommand & BLIT_COMMAND_MASK) != BLIT_COMMAND_CPU_TO_SCREEN) return; + if (voodoo->launch_pending) { + voodoo->blt.dst_x = voodoo->bltDstX; + voodoo->blt.dst_y = voodoo->bltDstY; + voodoo->blt.cur_x = 0; + voodoo->blt.size_x = voodoo->bltSizeX; + voodoo->blt.size_y = voodoo->bltSizeY; + voodoo->blt.x_dir = (voodoo->bltSizeX > 0) ? 1 : -1; + voodoo->blt.y_dir = (voodoo->bltSizeY > 0) ? 1 : -1; + voodoo->blt.dst_stride = (voodoo->bltCommand & BLTCMD_DST_TILED) ? ((voodoo->bltDstXYStride & 0x3f) * 32 * 2) : (voodoo->bltDstXYStride & 0xff8); + voodoo->launch_pending = 0; + } + if (SLI_ENABLED) { addr = base_addr + (voodoo->blt.dst_y >> 1) * voodoo->blt.dst_stride; dst = (uint16_t *) &voodoo->fb_mem[addr]; diff --git a/src/video/vid_voodoo_display.c b/src/video/vid_voodoo_display.c index 3595d8b89..b126fc165 100644 --- a/src/video/vid_voodoo_display.c +++ b/src/video/vid_voodoo_display.c @@ -645,6 +645,8 @@ skip_draw: if (voodoo->dirty_line_high > voodoo->dirty_line_low || force_blit) svga_doblit(voodoo->h_disp, voodoo->v_disp - 1, voodoo->svga); + else if (voodoo->svga->override) + voodoo->svga->monitor->mon_renderedframes++; if (voodoo->clutData_dirty) { voodoo->clutData_dirty = 0; voodoo_calc_clutData(voodoo); diff --git a/src/video/vid_voodoo_fb.c b/src/video/vid_voodoo_fb.c index 1c140873f..a97ca62a7 100644 --- a/src/video/vid_voodoo_fb.c +++ b/src/video/vid_voodoo_fb.c @@ -254,6 +254,19 @@ voodoo_fb_writew(uint32_t addr, uint16_t val, void *priv) int colbfog_g = 0; int colbfog_b = 0; + if (params->fbzMode & FBZ_STIPPLE) { + if (params->fbzMode & FBZ_STIPPLE_PATT) { + int index = ((y & 3) << 3) | (~x & 7); + if (!(params->stipple & (1 << index))) + goto skip_pixel; + } else { + voodoo->params.stipple = (voodoo->params.stipple << 1) | (voodoo->params.stipple >> 31); + if (!(voodoo->params.stipple & 0x80000000)) { + goto skip_pixel; + } + } + } + if (params->fbzMode & FBZ_DEPTH_ENABLE) { uint16_t old_depth = *(uint16_t *) (&voodoo->fb_mem[write_addr_aux & voodoo->fb_mask]); @@ -449,6 +462,19 @@ voodoo_fb_writel(uint32_t addr, uint32_t val, void *priv) int colbfog_g = 0; int colbfog_b = 0; + if (params->fbzMode & FBZ_STIPPLE) { + if (params->fbzMode & FBZ_STIPPLE_PATT) { + int index = ((y & 3) << 3) | (~(x + c) & 7); + if (!(params->stipple & (1 << index))) + goto skip_pixel; + } else { + voodoo->params.stipple = (voodoo->params.stipple << 1) | (voodoo->params.stipple >> 31); + if (!(voodoo->params.stipple & 0x80000000)) { + goto skip_pixel; + } + } + } + if (params->fbzMode & FBZ_DEPTH_ENABLE) { uint16_t old_depth = *(uint16_t *) (&voodoo->fb_mem[write_addr_aux & voodoo->fb_mask]); diff --git a/src/video/vid_voodoo_render.c b/src/video/vid_voodoo_render.c index 97186634d..b25f42507 100644 --- a/src/video/vid_voodoo_render.c +++ b/src/video/vid_voodoo_render.c @@ -88,6 +88,8 @@ typedef struct voodoo_state_t { uint32_t texBaseAddr; int lod_frac[2]; + + int stipple; } voodoo_state_t; #ifdef ENABLE_VOODOO_RENDER_LOG @@ -990,6 +992,20 @@ voodoo_half_triangle(voodoo_t *voodoo, voodoo_params_t *params, voodoo_state_t * w_depth = 0xffff; } + if (params->fbzMode & FBZ_STIPPLE) { + if (params->fbzMode & FBZ_STIPPLE_PATT) { + int index = ((real_y & 3) << 3) | (~x & 7); + + if (!(state->stipple & (1 << index))) + goto skip_pixel; + } else { + state->stipple = (state->stipple << 1) | (state->stipple >> 31); + if (!(state->stipple & 0x80000000)) { + goto skip_pixel; + } + } + } + #if 0 w_depth = CLAMP16(w_depth); #endif @@ -1560,6 +1576,7 @@ voodoo_render_log("voodoo_triangle %i %i %i : vA %f, %f vB %f, %f vC %f, %f f if (lodbias & 0x20) lodbias |= ~0x3f; state.tmu[1].lod = LOD + (lodbias << 6); + state.stipple = params->stipple; voodoo_half_triangle(voodoo, params, &state, vertexAy_adjusted, vertexCy_adjusted, odd_even); } diff --git a/src/video/vid_wy700.c b/src/video/vid_wy700.c index bd9ba9386..0245b7e3e 100644 --- a/src/video/vid_wy700.c +++ b/src/video/vid_wy700.c @@ -886,7 +886,7 @@ wy700_init(UNUSED(const device_t *info)) /* 128k video RAM */ wy700->vram = malloc(0x20000); - loadfont("roms/video/wyse700/wy700.rom", 3); + video_load_font("roms/video/wyse700/wy700.rom", FONT_FORMAT_WY700, LOAD_FONT_NO_OFFSET); timer_add(&wy700->timer, wy700_poll, wy700, 1); diff --git a/src/video/video.c b/src/video/video.c index 81fe3a26b..4c4256a89 100644 --- a/src/video/video.c +++ b/src/video/video.c @@ -8,37 +8,8 @@ * * Main video-rendering module. * - * Video timing settings - - * - * 8-bit - 1mb/sec - * B = 8 ISA clocks - * W = 16 ISA clocks - * L = 32 ISA clocks - * - * Slow 16-bit - 2mb/sec - * B = 6 ISA clocks - * W = 8 ISA clocks - * L = 16 ISA clocks - * - * Fast 16-bit - 4mb/sec - * B = 3 ISA clocks - * W = 3 ISA clocks - * L = 6 ISA clocks - * - * Slow VLB/PCI - 8mb/sec (ish) - * B = 4 bus clocks - * W = 8 bus clocks - * L = 16 bus clocks - * - * Mid VLB/PCI - - * B = 4 bus clocks - * W = 5 bus clocks - * L = 10 bus clocks - * - * Fast VLB/PCI - - * B = 3 bus clocks - * W = 3 bus clocks - * L = 4 bus clocks + * Video timings are set individually by the graphics cards. + * * * Authors: Sarah Walker, * Miran Grca, @@ -79,8 +50,6 @@ uint8_t edatlookup[4][4]; uint8_t egaremap2bpp[256]; uint8_t fontdat[2048][8]; /* IBM CGA font */ uint8_t fontdatm[2048][16]; /* IBM MDA font */ -uint8_t fontdat2[2048][8]; /* IBM CGA 2nd instance font */ -uint8_t fontdatm2[2048][16]; /* IBM MDA 2nd instance font */ uint8_t fontdatw[512][32]; /* Wyse700 font */ uint8_t fontdat8x12[256][16]; /* MDSI Genius font */ uint8_t fontdat12x18[256][36]; /* IM1024 font */ @@ -793,30 +762,6 @@ hline(bitmap_t *b, int x1, int y, int x2, uint32_t col) b->line[y][x] = col; } -void -blit(UNUSED(bitmap_t *src), UNUSED(bitmap_t *dst), UNUSED(int x1), UNUSED(int y1), UNUSED(int x2), UNUSED(int y2), UNUSED(int xs), UNUSED(int ys)) -{ - // -} - -void -stretch_blit(UNUSED(bitmap_t *src), UNUSED(bitmap_t *dst), UNUSED(int x1), UNUSED(int y1), UNUSED(int xs1), UNUSED(int ys1), UNUSED(int x2), UNUSED(int y2), UNUSED(int xs2), UNUSED(int ys2)) -{ - // -} - -void -rectfill(UNUSED(bitmap_t *b), UNUSED(int x1), UNUSED(int y1), UNUSED(int x2), UNUSED(int y2), UNUSED(uint32_t col)) -{ - // -} - -void -set_palette(UNUSED(PALETTE p)) -{ - // -} - void destroy_bitmap(bitmap_t *b) { @@ -1005,10 +950,18 @@ video_force_resize_set_monitor(uint8_t res, int monitor_index) } void -loadfont_common(FILE *fp, int format) +video_load_font(char *fn, int format, int offset) { + FILE *fp; + + fp = rom_fopen(fn, "rb"); + if (fp == NULL) + return; + + fseek(fp, offset, SEEK_SET); + switch (format) { - case 0: /* MDA */ + case FONT_FORMAT_MDA: /* MDA */ for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x8 cell (lines 0-7) */ for (uint8_t d = 0; d < 8; d++) fontdatm[c][d] = fgetc(fp) & 0xff; @@ -1021,7 +974,7 @@ loadfont_common(FILE *fp, int format) fontdat[c][d] = fgetc(fp) & 0xff; break; - case 1: /* PC200 */ + case FONT_FORMAT_PC200: /* PC200 */ for (uint8_t d = 0; d < 4; d++) { /* There are 4 fonts in the ROM */ for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */ @@ -1033,26 +986,25 @@ loadfont_common(FILE *fp, int format) } break; - default: - case 2: /* CGA */ + case FONT_FORMAT_CGA: /* CGA */ for (uint16_t c = 0; c < 256; c++) for (uint8_t d = 0; d < 8; d++) fontdat[c][d] = fgetc(fp) & 0xff; break; - case 3: /* Wyse 700 */ + case FONT_FORMAT_WY700: /* Wyse 700 */ for (uint16_t c = 0; c < 512; c++) for (uint8_t d = 0; d < 32; d++) fontdatw[c][d] = fgetc(fp) & 0xff; break; - case 4: /* MDSI Genius */ + case FONT_FORMAT_MDSI_GENIUS: /* MDSI Genius */ for (uint16_t c = 0; c < 256; c++) for (uint8_t d = 0; d < 16; d++) fontdat8x12[c][d] = fgetc(fp) & 0xff; break; - case 5: /* Toshiba 3100e */ + case FONT_FORMAT_TOSHIBA_3100E: /* Toshiba 3100e */ for (uint16_t d = 0; d < 2048; d += 512) { /* Four languages... */ for (uint16_t c = d; c < d + 256; c++) { (void) !fread(&fontdatm[c][8], 1, 8, fp); @@ -1076,7 +1028,7 @@ loadfont_common(FILE *fp, int format) } break; - case 6: /* Korean KSC-5601 */ + case FONT_FORMAT_KSC6501: /* Korean KSC-5601 */ if (!fontdatksc5601) fontdatksc5601 = malloc(16384 * sizeof(dbcs_font_t)); @@ -1089,7 +1041,7 @@ loadfont_common(FILE *fp, int format) } break; - case 7: /* Sigma Color 400 */ + case FONT_FORMAT_SIGMA: /* Sigma Color 400 */ /* The first 4k of the character ROM holds an 8x8 font */ for (uint16_t c = 0; c < 256; c++) { (void) !fread(&fontdat[c][0], 1, 8, fp); @@ -1098,62 +1050,32 @@ loadfont_common(FILE *fp, int format) /* The second 4k holds an 8x16 font */ for (uint16_t c = 0; c < 256; c++) { if (fread(&fontdatm[c][0], 1, 16, fp) != 16) - fatal("loadfont(): Error reading 8x16 font in Sigma Color 400 mode, c = %i\n", c); + fatal("video_load_font(): Error reading 8x16 font in Sigma Color 400 mode, c = %i\n", c); } break; - case 8: /* Amstrad PC1512, Toshiba T1000/T1200 */ + case FONT_FORMAT_PC1512_T1000: /* Amstrad PC1512, Toshiba T1000/T1200 */ for (uint16_t c = 0; c < 2048; c++) /* Allow up to 2048 chars */ for (uint8_t d = 0; d < 8; d++) fontdat[c][d] = fgetc(fp) & 0xff; break; - case 9: /* Image Manager 1024 native font */ + case FONT_FORMAT_IM1024: /* Image Manager 1024 native font */ for (uint16_t c = 0; c < 256; c++) (void) !fread(&fontdat12x18[c][0], 1, 36, fp); break; - case 10: /* Pravetz */ + case FONT_FORMAT_PRAVETZ: /* Pravetz */ for (uint16_t c = 0; c < 1024; c++) /* Allow up to 1024 chars */ for (uint8_t d = 0; d < 8; d++) fontdat[c][d] = fgetc(fp) & 0xff; break; - case 11: /* PC200 */ - for (uint8_t d = 0; d < 4; d++) { - /* There are 4 fonts in the ROM */ - for (uint16_t c = 0; c < 256; c++) /* 8x14 MDA in 8x16 cell */ - (void) !fread(&fontdatm2[256 * d + c][0], 1, 16, fp); - for (uint16_t c = 0; c < 256; c++) { /* 8x8 CGA in 8x16 cell */ - (void) !fread(&fontdat2[256 * d + c][0], 1, 8, fp); - fseek(fp, 8, SEEK_CUR); - } - } - break; } (void) fclose(fp); } -void -loadfont_ex(char *fn, int format, int offset) -{ - FILE *fp; - - fp = rom_fopen(fn, "rb"); - if (fp == NULL) - return; - - fseek(fp, offset, SEEK_SET); - loadfont_common(fp, format); -} - -void -loadfont(char *fn, int format) -{ - loadfont_ex(fn, format, 0); -} - uint32_t video_color_transform(uint32_t color) {