More UI work, added Slovak and Catalan translations, and fixed mmutranslate on the 286/386, fixes #3587, #3591.

This commit is contained in:
OBattler
2023-08-17 02:46:37 +02:00
parent a942ee5ad9
commit bf38c4adef
31 changed files with 3179 additions and 487 deletions

View File

@@ -77,6 +77,7 @@ x386_log(const char *fmt, ...)
static __inline void static __inline void
fetch_ea_32_long(uint32_t rmdat) fetch_ea_32_long(uint32_t rmdat)
{ {
eal_r = eal_w = NULL;
easeg = cpu_state.ea_seg->base; easeg = cpu_state.ea_seg->base;
if (cpu_rm == 4) { if (cpu_rm == 4) {
uint8_t sib = rmdat >> 8; uint8_t sib = rmdat >> 8;
@@ -121,11 +122,19 @@ fetch_ea_32_long(uint32_t rmdat)
cpu_state.eaaddr = getlong(); cpu_state.eaaddr = getlong();
} }
} }
if (easeg != 0xFFFFFFFF && ((easeg + cpu_state.eaaddr) & 0xFFF) <= 0xFFC) {
uint32_t addr = easeg + cpu_state.eaaddr;
if (readlookup2[addr >> 12] != (uintptr_t) -1)
eal_r = (uint32_t *) (readlookup2[addr >> 12] + addr);
if (writelookup2[addr >> 12] != (uintptr_t) -1)
eal_w = (uint32_t *) (writelookup2[addr >> 12] + addr);
}
} }
static __inline void static __inline void
fetch_ea_16_long(uint32_t rmdat) fetch_ea_16_long(uint32_t rmdat)
{ {
eal_r = eal_w = NULL;
easeg = cpu_state.ea_seg->base; easeg = cpu_state.ea_seg->base;
if (!cpu_mod && cpu_rm == 6) { if (!cpu_mod && cpu_rm == 6) {
cpu_state.eaaddr = getword(); cpu_state.eaaddr = getword();
@@ -149,6 +158,13 @@ fetch_ea_16_long(uint32_t rmdat)
} }
cpu_state.eaaddr &= 0xFFFF; cpu_state.eaaddr &= 0xFFFF;
} }
if (easeg != 0xFFFFFFFF && ((easeg + cpu_state.eaaddr) & 0xFFF) <= 0xFFC) {
uint32_t addr = easeg + cpu_state.eaaddr;
if (readlookup2[addr >> 12] != (uintptr_t) -1)
eal_r = (uint32_t *) (readlookup2[addr >> 12] + addr);
if (writelookup2[addr >> 12] != (uintptr_t) -1)
eal_w = (uint32_t *) (writelookup2[addr >> 12] + addr);
}
} }
#define fetch_ea_16(rmdat) \ #define fetch_ea_16(rmdat) \

View File

@@ -347,7 +347,7 @@ fastreadw_fetch(uint32_t a)
if ((a & 0xFFF) > 0xFFE) { if ((a & 0xFFF) > 0xFFE) {
val = fastreadb(a); val = fastreadb(a);
if (opcode_length[val & 0xff] > 1) if (opcode_length[val & 0xff] > 1)
val |= (fastreadb(a + 1) << 8); val |= ((uint16_t) fastreadb(a + 1) << 8);
return val; return val;
} }
@@ -362,7 +362,7 @@ fastreadl_fetch(uint32_t a)
if (cpu_16bitbus || ((a & 0xFFF) > 0xFFC)) { if (cpu_16bitbus || ((a & 0xFFF) > 0xFFC)) {
val = fastreadw_fetch(a); val = fastreadw_fetch(a);
if (opcode_length[val & 0xff] > 2) if (opcode_length[val & 0xff] > 2)
val |= (fastreadw(a + 2) << 16); val |= ((uint32_t) fastreadw(a + 2) << 16);
return val; return val;
} }

View File

@@ -40,49 +40,167 @@
#ifdef USE_DYNAREC #ifdef USE_DYNAREC
# include "codegen_public.h" # include "codegen_public.h"
#else #else
#ifdef USE_NEW_DYNAREC # ifdef USE_NEW_DYNAREC
# define PAGE_MASK_SHIFT 6 # define PAGE_MASK_SHIFT 6
#else # else
# define PAGE_MASK_INDEX_MASK 3 # define PAGE_MASK_INDEX_MASK 3
# define PAGE_MASK_INDEX_SHIFT 10 # define PAGE_MASK_INDEX_SHIFT 10
# define PAGE_MASK_SHIFT 4 # define PAGE_MASK_SHIFT 4
#endif # endif
# define PAGE_MASK_MASK 63 # define PAGE_MASK_MASK 63
#endif #endif
#if (!defined(USE_DYNAREC) && defined(USE_NEW_DYNAREC)) #if (!defined(USE_DYNAREC) && defined(USE_NEW_DYNAREC))
#define BLOCK_PC_INVALID 0xffffffff # define BLOCK_PC_INVALID 0xffffffff
#define BLOCK_INVALID 0 # define BLOCK_INVALID 0
#endif #endif
uint8_t
mem_readb_map(uint32_t addr)
{
mem_mapping_t *map = read_mapping[addr >> MEM_GRANULARITY_BITS];
uint8_t ret = 0xff;
mem_logical_addr = 0xffffffff;
if (map && map->read_b)
ret = map->read_b(addr, map->priv);
return ret;
}
uint16_t
mem_readw_map(uint32_t addr)
{
mem_mapping_t *map = read_mapping[addr >> MEM_GRANULARITY_BITS];
uint16_t ret;
const uint16_t *p;
mem_logical_addr = 0xffffffff;
if (((addr & MEM_GRANULARITY_MASK) <= MEM_GRANULARITY_HBOUND) && (map && map->read_w))
ret = map->read_w(addr, map->priv);
else {
ret = mem_readb_phys(addr + 1) << 8;
ret |= mem_readb_phys(addr);
}
return ret;
}
uint32_t
mem_readl_map(uint32_t addr)
{
mem_mapping_t *map = read_mapping[addr >> MEM_GRANULARITY_BITS];
uint32_t ret;
const uint32_t *p;
mem_logical_addr = 0xffffffff;
if (!cpu_16bitbus && ((addr & MEM_GRANULARITY_MASK) <= MEM_GRANULARITY_QBOUND) && (map && map->read_l))
ret = map->read_l(addr, map->priv);
else {
ret = mem_readw_phys(addr + 2) << 16;
ret |= mem_readw_phys(addr);
}
return ret;
}
void
mem_writeb_map(uint32_t addr, uint8_t val)
{
mem_mapping_t *map = read_mapping[addr >> MEM_GRANULARITY_BITS];
mem_logical_addr = 0xffffffff;
if (map && map->write_b)
map->write_b(addr, val, map->priv);
}
void
mem_writew_map(uint32_t addr, uint16_t val)
{
mem_mapping_t *map = read_mapping[addr >> MEM_GRANULARITY_BITS];
const uint16_t *p;
mem_logical_addr = 0xffffffff;
if (((addr & MEM_GRANULARITY_MASK) <= MEM_GRANULARITY_HBOUND) && (map && map->write_w))
map->write_w(addr, val, map->priv);
else {
mem_writeb_phys(addr, val & 0xff);
mem_writeb_phys(addr + 1, val >> 8);
}
}
void
mem_writel_map(uint32_t addr, uint32_t val)
{
mem_mapping_t *map = read_mapping[addr >> MEM_GRANULARITY_BITS];
const uint32_t *p;
mem_logical_addr = 0xffffffff;
if (!cpu_16bitbus && ((addr & MEM_GRANULARITY_MASK) <= MEM_GRANULARITY_QBOUND) && (map && map->write_l))
map->write_l(addr, val, map->priv);
else {
mem_writew_phys(addr, val & 0xffff);
mem_writew_phys(addr + 2, val >> 16);
}
}
#define mmutranslate_read_2386(addr) mmutranslatereal_2386(addr,0) #define mmutranslate_read_2386(addr) mmutranslatereal_2386(addr,0)
#define mmutranslate_write_2386(addr) mmutranslatereal_2386(addr,1) #define mmutranslate_write_2386(addr) mmutranslatereal_2386(addr,1)
uint64_t uint64_t
mmutranslatereal_2386(uint32_t addr, int rw) mmutranslatereal_2386(uint32_t addr, int rw)
{ {
uint32_t temp, temp2, temp3; uint32_t temp;
uint32_t temp2;
uint32_t temp3;
uint32_t addr2; uint32_t addr2;
if (cpu_state.abrt) if (cpu_state.abrt)
return 0xffffffffffffffffULL; return 0xffffffffffffffffULL;
addr2 = ((cr3 & ~0xfff) + ((addr >> 20) & 0xffc)); addr2 = ((cr3 & ~0xfff) + ((addr >> 20) & 0xffc));
temp = temp2 = mem_readl_phys(addr2); temp = temp2 = mem_readl_map(addr2);
if (!(temp & 1)) { if (!(temp & 1)) {
cr2 = addr; cr2 = addr;
temp &= 1; temp &= 1;
if (CPL == 3) temp |= 4; if (CPL == 3)
if (rw) temp |= 2; temp |= 4;
if (rw)
temp |= 2;
cpu_state.abrt = ABRT_PF; cpu_state.abrt = ABRT_PF;
abrt_error = temp; abrt_error = temp;
return 0xffffffffffffffffULL; return 0xffffffffffffffffULL;
} }
temp = mem_readl_phys((temp & ~0xfff) + ((addr >> 10) & 0xffc)); if ((temp & 0x80) && (cr4 & CR4_PSE)) {
/*4MB page*/
if (((CPL == 3) && !(temp & 4) && !cpl_override) || (rw && !(temp & 2) && (((CPL == 3) && !cpl_override) || ((is486 || isibm486) && (cr0 & WP_FLAG))))) {
cr2 = addr;
temp &= 1;
if (CPL == 3)
temp |= 4;
if (rw)
temp |= 2;
cpu_state.abrt = ABRT_PF;
abrt_error = temp;
return 0xffffffffffffffffULL;
}
mmu_perm = temp & 4;
mem_writel_map(addr2, mem_readl_map(addr2) | (rw ? 0x60 : 0x20));
return (temp & ~0x3fffff) + (addr & 0x3fffff);
}
temp = mem_readl_map((temp & ~0xfff) + ((addr >> 10) & 0xffc));
temp3 = temp & temp2; temp3 = temp & temp2;
if (!(temp & 1) || ((CPL == 3) && !(temp3 & 4) && !cpl_override) || (rw && !(temp3 & 2) && (((CPL == 3) && !cpl_override) || (is486 && (cr0 & WP_FLAG))))) { if (!(temp & 1) || ((CPL == 3) && !(temp3 & 4) && !cpl_override) || (rw && !(temp3 & 2) && (((CPL == 3) && !cpl_override) || ((is486 || isibm486) && (cr0 & WP_FLAG))))) {
cr2 = addr; cr2 = addr;
temp &= 1; temp &= 1;
if (CPL == 3) if (CPL == 3)
@@ -95,29 +213,39 @@ mmutranslatereal_2386(uint32_t addr, int rw)
} }
mmu_perm = temp & 4; mmu_perm = temp & 4;
mem_writel_phys(addr2, mem_readl_phys(addr) | 0x20); mem_writel_map(addr2, mem_readl_map(addr2) | 0x20);
mem_writel_phys((temp2 & ~0xfff) + ((addr >> 10) & 0xffc), mem_readl_phys((temp2 & ~0xfff) + ((addr >> 10) & 0xffc)) | (rw ? 0x60 : 0x20)); mem_writel_map((temp2 & ~0xfff) + ((addr >> 10) & 0xffc),
mem_readl_map((temp2 & ~0xfff) + ((addr >> 10) & 0xffc)) | (rw ? 0x60 : 0x20));
return (uint64_t) ((temp & ~0xfff) + (addr & 0xfff)); return (uint64_t) ((temp & ~0xfff) + (addr & 0xfff));
} }
uint64_t uint64_t
mmutranslate_noabrt_2386(uint32_t addr, int rw) mmutranslate_noabrt_2386(uint32_t addr, int rw)
{ {
uint32_t temp,temp2,temp3; uint32_t temp;
uint32_t temp2;
uint32_t temp3;
uint32_t addr2; uint32_t addr2;
if (cpu_state.abrt) if (cpu_state.abrt)
return 0xffffffffffffffffULL; return 0xffffffffffffffffULL;
addr2 = ((cr3 & ~0xfff) + ((addr >> 20) & 0xffc)); addr2 = ((cr3 & ~0xfff) + ((addr >> 20) & 0xffc));
temp = temp2 = mem_readl_phys(addr2); temp = temp2 = mem_readl_map(addr2);
if (! (temp & 1)) if (!(temp & 1))
return 0xffffffffffffffffULL; return 0xffffffffffffffffULL;
temp = mem_readl_phys((temp & ~0xfff) + ((addr >> 10) & 0xffc)); if ((temp & 0x80) && (cr4 & CR4_PSE)) {
/*4MB page*/
if (((CPL == 3) && !(temp & 4) && !cpl_override) || (rw && !(temp & 2) && ((CPL == 3) || (cr0 & WP_FLAG))))
return 0xffffffffffffffffULL;
return (temp & ~0x3fffff) + (addr & 0x3fffff);
}
temp = mem_readl_map((temp & ~0xfff) + ((addr >> 10) & 0xffc));
temp3 = temp & temp2; temp3 = temp & temp2;
if (!(temp & 1) || ((CPL == 3) && !(temp3 & 4) && !cpl_override) || (rw && !(temp3 & 2) && ((CPL == 3) || (cr0 & WP_FLAG)))) if (!(temp & 1) || ((CPL == 3) && !(temp3 & 4) && !cpl_override) || (rw && !(temp3 & 2) && ((CPL == 3) || (cr0 & WP_FLAG))))
@@ -126,13 +254,11 @@ mmutranslate_noabrt_2386(uint32_t addr, int rw)
return (uint64_t) ((temp & ~0xfff) + (addr & 0xfff)); return (uint64_t) ((temp & ~0xfff) + (addr & 0xfff));
} }
uint8_t uint8_t
readmembl_2386(uint32_t addr) readmembl_2386(uint32_t addr)
{ {
mem_mapping_t *map; mem_mapping_t *map;
uint64_t a; uint64_t a;
uint8_t ret = 0xff;
GDBSTUB_MEM_ACCESS(addr, GDBSTUB_MEM_READ, 1); GDBSTUB_MEM_ACCESS(addr, GDBSTUB_MEM_READ, 1);
@@ -152,12 +278,11 @@ readmembl_2386(uint32_t addr)
map = read_mapping[addr >> MEM_GRANULARITY_BITS]; map = read_mapping[addr >> MEM_GRANULARITY_BITS];
if (map && map->read_b) if (map && map->read_b)
ret = map->read_b(addr, map->priv); return map->read_b(addr, map->priv);
return ret; return 0xff;
} }
void void
writemembl_2386(uint32_t addr, uint8_t val) writemembl_2386(uint32_t addr, uint8_t val)
{ {
@@ -185,13 +310,11 @@ writemembl_2386(uint32_t addr, uint8_t val)
map->write_b(addr, val, map->priv); map->write_b(addr, val, map->priv);
} }
/* Read a byte from memory without MMU translation - result of previous MMU translation passed as value. */ /* Read a byte from memory without MMU translation - result of previous MMU translation passed as value. */
uint8_t uint8_t
readmembl_no_mmut_2386(uint32_t addr, uint32_t a64) readmembl_no_mmut_2386(uint32_t addr, uint32_t a64)
{ {
mem_mapping_t *map; mem_mapping_t *map;
uint8_t ret = 0xff;
GDBSTUB_MEM_ACCESS(addr, GDBSTUB_MEM_READ, 1); GDBSTUB_MEM_ACCESS(addr, GDBSTUB_MEM_READ, 1);
@@ -207,12 +330,11 @@ readmembl_no_mmut_2386(uint32_t addr, uint32_t a64)
map = read_mapping[addr >> MEM_GRANULARITY_BITS]; map = read_mapping[addr >> MEM_GRANULARITY_BITS];
if (map && map->read_b) if (map && map->read_b)
ret = map->read_b(addr, map->priv); return map->read_b(addr, map->priv);
return ret; return 0xff;
} }
/* Write a byte to memory without MMU translation - result of previous MMU translation passed as value. */ /* Write a byte to memory without MMU translation - result of previous MMU translation passed as value. */
void void
writemembl_no_mmut_2386(uint32_t addr, uint32_t a64, uint8_t val) writemembl_no_mmut_2386(uint32_t addr, uint32_t a64, uint8_t val)
@@ -236,14 +358,11 @@ writemembl_no_mmut_2386(uint32_t addr, uint32_t a64, uint8_t val)
map->write_b(addr, val, map->priv); map->write_b(addr, val, map->priv);
} }
uint16_t uint16_t
readmemwl_2386(uint32_t addr) readmemwl_2386(uint32_t addr)
{ {
mem_mapping_t *map; mem_mapping_t *map;
int i;
uint64_t a; uint64_t a;
uint16_t ret = 0xffff;
addr64a[0] = addr; addr64a[0] = addr;
addr64a[1] = addr + 1; addr64a[1] = addr + 1;
@@ -258,7 +377,7 @@ readmemwl_2386(uint32_t addr)
cycles -= timing_misaligned; cycles -= timing_misaligned;
if ((addr & 0xfff) > 0xffe) { if ((addr & 0xfff) > 0xffe) {
if (cr0 >> 31) { if (cr0 >> 31) {
for (i = 0; i < 2; i++) { for (uint8_t i = 0; i < 2; i++) {
a = mmutranslate_read_2386(addr + i); a = mmutranslate_read_2386(addr + i);
addr64a[i] = (uint32_t) a; addr64a[i] = (uint32_t) a;
@@ -267,8 +386,7 @@ readmemwl_2386(uint32_t addr)
} }
} }
return readmembl_no_mmut(addr, addr64a[0]) | return readmembl_no_mmut(addr, addr64a[0]) | (((uint16_t) readmembl_no_mmut(addr + 1, addr64a[1])) << 8);
(((uint16_t) readmembl_no_mmut(addr + 1, addr64a[1])) << 8);
} }
} }
@@ -286,21 +404,19 @@ readmemwl_2386(uint32_t addr)
map = read_mapping[addr >> MEM_GRANULARITY_BITS]; map = read_mapping[addr >> MEM_GRANULARITY_BITS];
if (map && map->read_w) if (map && map->read_w)
ret = map->read_w(addr, map->priv); return map->read_w(addr, map->priv);
else if (map && map->read_b) {
ret = map->read_b(addr, map->priv) | if (map && map->read_b) {
((uint16_t) (map->read_b(addr + 1, map->priv)) << 8); return map->read_b(addr, map->priv) | ((uint16_t) (map->read_b(addr + 1, map->priv)) << 8);
} }
return ret; return 0xffff;
} }
void void
writememwl_2386(uint32_t addr, uint16_t val) writememwl_2386(uint32_t addr, uint16_t val)
{ {
mem_mapping_t *map; mem_mapping_t *map;
int i;
uint64_t a; uint64_t a;
addr64a[0] = addr; addr64a[0] = addr;
@@ -316,7 +432,10 @@ writememwl_2386(uint32_t addr, uint16_t val)
cycles -= timing_misaligned; cycles -= timing_misaligned;
if ((addr & 0xfff) > 0xffe) { if ((addr & 0xfff) > 0xffe) {
if (cr0 >> 31) { if (cr0 >> 31) {
for (i = 0; i < 2; i++) { for (uint8_t i = 0; i < 2; i++) {
/* Do not translate a page that has a valid lookup, as that is by definition valid
and the whole purpose of the lookup is to avoid repeat identical translations. */
if (!page_lookup[(addr + i) >> 12] || !page_lookup[(addr + i) >> 12]->write_b) {
a = mmutranslate_write_2386(addr + i); a = mmutranslate_write_2386(addr + i);
addr64a[i] = (uint32_t) a; addr64a[i] = (uint32_t) a;
@@ -324,6 +443,7 @@ writememwl_2386(uint32_t addr, uint16_t val)
return; return;
} }
} }
}
/* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass /* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass
their result as a parameter to be used if needed. */ their result as a parameter to be used if needed. */
@@ -357,13 +477,11 @@ writememwl_2386(uint32_t addr, uint16_t val)
} }
} }
/* Read a word from memory without MMU translation - results of previous MMU translation passed as array. */ /* Read a word from memory without MMU translation - results of previous MMU translation passed as array. */
uint16_t uint16_t
readmemwl_no_mmut_2386(uint32_t addr, uint32_t *a64) readmemwl_no_mmut_2386(uint32_t addr, uint32_t *a64)
{ {
mem_mapping_t *map; mem_mapping_t *map;
uint16_t ret = 0xffff;
GDBSTUB_MEM_ACCESS(addr, GDBSTUB_MEM_READ, 2); GDBSTUB_MEM_ACCESS(addr, GDBSTUB_MEM_READ, 2);
@@ -378,8 +496,7 @@ readmemwl_no_mmut_2386(uint32_t addr, uint32_t *a64)
return 0xffff; return 0xffff;
} }
return readmembl_no_mmut(addr, a64[0]) | return readmembl_no_mmut(addr, a64[0]) | (((uint16_t) readmembl_no_mmut(addr + 1, a64[1])) << 8);
(((uint16_t) readmembl_no_mmut(addr + 1, a64[1])) << 8);
} }
} }
@@ -394,16 +511,15 @@ readmemwl_no_mmut_2386(uint32_t addr, uint32_t *a64)
map = read_mapping[addr >> MEM_GRANULARITY_BITS]; map = read_mapping[addr >> MEM_GRANULARITY_BITS];
if (map && map->read_w) if (map && map->read_w)
ret = map->read_w(addr, map->priv); return map->read_w(addr, map->priv);
else if (map && map->read_b) {
ret = map->read_b(addr, map->priv) | if (map && map->read_b) {
((uint16_t) (map->read_b(addr + 1, map->priv)) << 8); return map->read_b(addr, map->priv) | ((uint16_t) (map->read_b(addr + 1, map->priv)) << 8);
} }
return ret; return 0xffff;
} }
/* Write a word to memory without MMU translation - results of previous MMU translation passed as array. */ /* Write a word to memory without MMU translation - results of previous MMU translation passed as array. */
void void
writememwl_no_mmut_2386(uint32_t addr, uint32_t *a64, uint16_t val) writememwl_no_mmut_2386(uint32_t addr, uint32_t *a64, uint16_t val)
@@ -451,7 +567,6 @@ writememwl_no_mmut_2386(uint32_t addr, uint32_t *a64, uint16_t val)
} }
} }
uint32_t uint32_t
readmemll_2386(uint32_t addr) readmemll_2386(uint32_t addr)
{ {
@@ -495,8 +610,7 @@ readmemll_2386(uint32_t addr)
/* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass /* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass
their result as a parameter to be used if needed. */ their result as a parameter to be used if needed. */
return readmemwl_no_mmut(addr, addr64a) | return readmemwl_no_mmut(addr, addr64a) | (((uint32_t) readmemwl_no_mmut(addr + 2, &(addr64a[2]))) << 16);
(((uint32_t) readmemwl_no_mmut(addr + 2, &(addr64a[2]))) << 16);
} }
} }
@@ -516,19 +630,14 @@ readmemll_2386(uint32_t addr)
return map->read_l(addr, map->priv); return map->read_l(addr, map->priv);
if (map && map->read_w) if (map && map->read_w)
return map->read_w(addr, map->priv) | return map->read_w(addr, map->priv) | ((uint32_t) (map->read_w(addr + 2, map->priv)) << 16);
((uint32_t) (map->read_w(addr + 2, map->priv)) << 16);
if (map && map->read_b) if (map && map->read_b)
return map->read_b(addr, map->priv) | return map->read_b(addr, map->priv) | ((uint32_t) (map->read_b(addr + 1, map->priv)) << 8) | ((uint32_t) (map->read_b(addr + 2, map->priv)) << 16) | ((uint32_t) (map->read_b(addr + 3, map->priv)) << 24);
((uint32_t) (map->read_b(addr + 1, map->priv)) << 8) |
((uint32_t) (map->read_b(addr + 2, map->priv)) << 16) |
((uint32_t) (map->read_b(addr + 3, map->priv)) << 24);
return 0xffffffff; return 0xffffffff;
} }
void void
writememll_2386(uint32_t addr, uint32_t val) writememll_2386(uint32_t addr, uint32_t val)
{ {
@@ -550,6 +659,9 @@ writememll_2386(uint32_t addr, uint32_t val)
if ((addr & 0xfff) > 0xffc) { if ((addr & 0xfff) > 0xffc) {
if (cr0 >> 31) { if (cr0 >> 31) {
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
/* Do not translate a page that has a valid lookup, as that is by definition valid
and the whole purpose of the lookup is to avoid repeat identical translations. */
if (!page_lookup[(addr + i) >> 12] || !page_lookup[(addr + i) >> 12]->write_b) {
if (i == 0) { if (i == 0) {
a = mmutranslate_write_2386(addr + i); a = mmutranslate_write_2386(addr + i);
addr64a[i] = (uint32_t) a; addr64a[i] = (uint32_t) a;
@@ -569,6 +681,7 @@ writememll_2386(uint32_t addr, uint32_t val)
return; return;
} }
} }
}
/* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass /* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass
their result as a parameter to be used if needed. */ their result as a parameter to be used if needed. */
@@ -608,7 +721,6 @@ writememll_2386(uint32_t addr, uint32_t val)
} }
} }
/* Read a long from memory without MMU translation - results of previous MMU translation passed as array. */ /* Read a long from memory without MMU translation - results of previous MMU translation passed as array. */
uint32_t uint32_t
readmemll_no_mmut_2386(uint32_t addr, uint32_t *a64) readmemll_no_mmut_2386(uint32_t addr, uint32_t *a64)
@@ -628,8 +740,7 @@ readmemll_no_mmut_2386(uint32_t addr, uint32_t *a64)
return 0xffffffff; return 0xffffffff;
} }
return readmemwl_no_mmut(addr, a64) | return readmemwl_no_mmut(addr, a64) | ((uint32_t) (readmemwl_no_mmut(addr + 2, &(a64[2]))) << 16);
((uint32_t) (readmemwl_no_mmut(addr + 2, &(a64[2]))) << 16);
} }
} }
@@ -647,19 +758,14 @@ readmemll_no_mmut_2386(uint32_t addr, uint32_t *a64)
return map->read_l(addr, map->priv); return map->read_l(addr, map->priv);
if (map && map->read_w) if (map && map->read_w)
return map->read_w(addr, map->priv) | return map->read_w(addr, map->priv) | ((uint32_t) (map->read_w(addr + 2, map->priv)) << 16);
((uint32_t) (map->read_w(addr + 2, map->priv)) << 16);
if (map && map->read_b) if (map && map->read_b)
return map->read_b(addr, map->priv) | return map->read_b(addr, map->priv) | ((uint32_t) (map->read_b(addr + 1, map->priv)) << 8) | ((uint32_t) (map->read_b(addr + 2, map->priv)) << 16) | ((uint32_t) (map->read_b(addr + 3, map->priv)) << 24);
((uint32_t) (map->read_b(addr + 1, map->priv)) << 8) |
((uint32_t) (map->read_b(addr + 2, map->priv)) << 16) |
((uint32_t) (map->read_b(addr + 3, map->priv)) << 24);
return 0xffffffff; return 0xffffffff;
} }
/* Write a long to memory without MMU translation - results of previous MMU translation passed as array. */ /* Write a long to memory without MMU translation - results of previous MMU translation passed as array. */
void void
writememll_no_mmut_2386(uint32_t addr, uint32_t *a64, uint32_t val) writememll_no_mmut_2386(uint32_t addr, uint32_t *a64, uint32_t val)
@@ -713,7 +819,6 @@ writememll_no_mmut_2386(uint32_t addr, uint32_t *a64, uint32_t val)
} }
} }
uint64_t uint64_t
readmemql_2386(uint32_t addr) readmemql_2386(uint32_t addr)
{ {
@@ -756,8 +861,7 @@ readmemql_2386(uint32_t addr)
/* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass /* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass
their result as a parameter to be used if needed. */ their result as a parameter to be used if needed. */
return readmemll_no_mmut(addr, addr64a) | return readmemll_no_mmut(addr, addr64a) | (((uint64_t) readmemll_no_mmut(addr + 4, &(addr64a[4]))) << 32);
(((uint64_t) readmemll_no_mmut(addr + 4, &(addr64a[4]))) << 32);
} }
} }
@@ -773,12 +877,11 @@ readmemql_2386(uint32_t addr)
map = read_mapping[addr >> MEM_GRANULARITY_BITS]; map = read_mapping[addr >> MEM_GRANULARITY_BITS];
if (map && map->read_l) if (map && map->read_l)
return map->read_l(addr, map->priv) | ((uint64_t)map->read_l(addr + 4, map->priv) << 32); return map->read_l(addr, map->priv) | ((uint64_t) map->read_l(addr + 4, map->priv) << 32);
return readmemll(addr) | ((uint64_t) readmemll(addr + 4) << 32); return readmemll(addr) | ((uint64_t) readmemll(addr + 4) << 32);
} }
void void
writememql_2386(uint32_t addr, uint64_t val) writememql_2386(uint32_t addr, uint64_t val)
{ {
@@ -799,6 +902,9 @@ writememql_2386(uint32_t addr, uint64_t val)
if ((addr & 0xfff) > 0xff8) { if ((addr & 0xfff) > 0xff8) {
if (cr0 >> 31) { if (cr0 >> 31) {
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
/* Do not translate a page that has a valid lookup, as that is by definition valid
and the whole purpose of the lookup is to avoid repeat identical translations. */
if (!page_lookup[(addr + i) >> 12] || !page_lookup[(addr + i) >> 12]->write_b) {
if (i == 0) { if (i == 0) {
a = mmutranslate_write_2386(addr + i); a = mmutranslate_write_2386(addr + i);
addr64a[i] = (uint32_t) a; addr64a[i] = (uint32_t) a;
@@ -818,6 +924,7 @@ writememql_2386(uint32_t addr, uint64_t val)
return; return;
} }
} }
}
/* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass /* No need to waste precious CPU host cycles on mmutranslate's that were already done, just pass
their result as a parameter to be used if needed. */ their result as a parameter to be used if needed. */
@@ -862,7 +969,6 @@ writememql_2386(uint32_t addr, uint64_t val)
} }
} }
void void
do_mmutranslate_2386(uint32_t addr, uint32_t *a64, int num, int write) do_mmutranslate_2386(uint32_t addr, uint32_t *a64, int num, int write)
{ {

1221
src/qt/languages/ca-ES.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1201,6 +1201,12 @@ msgstr "Nepodařilo se inicializovat síťový ovladač"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Konfigurace sítě bude přepnuta na nulový ovladač" msgstr "Konfigurace sítě bude přepnuta na nulový ovladač"
msgid "Mouse sensitivity:"
msgstr "Citlivost myší:"
msgid "Select media images from program working directory"
msgstr "Výběr mediálních obrazů z pracovního adresáře programu"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Režim PIT:" msgstr "Režim PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Netzwerktreiber konnte nicht initialisiert werden"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Die Netzwerkkonfiguration wird auf den Nulltreiber umgestellt" msgstr "Die Netzwerkkonfiguration wird auf den Nulltreiber umgestellt"
msgid "Mouse sensitivity:"
msgstr "Empfindlichkeit der Maus:"
msgid "Select media images from program working directory"
msgstr "Medienbilder aus dem Arbeitsverzeichnis des Programms auswählen"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT-Modus:" msgstr "PIT-Modus:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Failed to initialize network driver"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "The network configuration will be switched to the null driver" msgstr "The network configuration will be switched to the null driver"
msgid "Mouse sensitivity:"
msgstr "Mouse sensitivity:"
msgid "Select media images from program working directory"
msgstr "Select media images from program working directory"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT mode:" msgstr "PIT mode:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Failed to initialize network driver"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "The network configuration will be switched to the null driver" msgstr "The network configuration will be switched to the null driver"
msgid "Mouse sensitivity:"
msgstr "Mouse sensitivity:"
msgid "Select media images from program working directory"
msgstr "Select media images from program working directory"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT mode:" msgstr "PIT mode:"

View File

@@ -29,7 +29,7 @@ msgid "&Hide status bar"
msgstr "&Ocultar barra de estado" msgstr "&Ocultar barra de estado"
msgid "Hide &toolbar" msgid "Hide &toolbar"
msgstr "Hide &toolbar" msgstr "Ocultar &barra de herramientas"
msgid "&Resizeable window" msgid "&Resizeable window"
msgstr "&Ventana redimensionable" msgstr "&Ventana redimensionable"
@@ -125,7 +125,7 @@ msgid "&Integer scale"
msgstr "&Escalado valor entero" msgstr "&Escalado valor entero"
msgid "E&GA/(S)VGA settings" msgid "E&GA/(S)VGA settings"
msgstr "&Ajustes EGA/(S)VGA" msgstr "&Configuraciones EGA/(S)VGA"
msgid "&Inverted VGA monitor" msgid "&Inverted VGA monitor"
msgstr "&Monitor VGA invertido" msgstr "&Monitor VGA invertido"
@@ -173,7 +173,7 @@ msgid "&Tools"
msgstr "&Herramientas" msgstr "&Herramientas"
msgid "&Settings..." msgid "&Settings..."
msgstr "&Ajustes..." msgstr "&Configuraciones..."
msgid "&Update status bar icons" msgid "&Update status bar icons"
msgstr "&Actualizar iconos en barra de estado" msgstr "&Actualizar iconos en barra de estado"
@@ -287,7 +287,7 @@ msgid "New Image"
msgstr "Nueva Imagen" msgstr "Nueva Imagen"
msgid "Settings" msgid "Settings"
msgstr "Ajustes" msgstr "Configuraciones"
msgid "Specify Main Window Dimensions" msgid "Specify Main Window Dimensions"
msgstr "Especificar Dimensiones de la Ventana Principal" msgstr "Especificar Dimensiones de la Ventana Principal"
@@ -299,7 +299,7 @@ msgid "Cancel"
msgstr "Cancelar" msgstr "Cancelar"
msgid "Save these settings as &global defaults" msgid "Save these settings as &global defaults"
msgstr "Salvar estos ajustes como por &defecto globalmente" msgstr "Salvar estos configuraciones como por &defecto globalmente"
msgid "&Default" msgid "&Default"
msgstr "&Por defecto" msgstr "&Por defecto"
@@ -650,13 +650,13 @@ msgid "ZIP images"
msgstr "Imagenes ZIP" msgstr "Imagenes ZIP"
msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory." msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory."
msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor <a href=\"https://github.com/86Box/roms/releases/latest\">descarga</a> un grupo de imágenes y extráelas en el directorio \"roms\"." msgstr "86Box no pudo encontrar ninguna imagen ROM usable.\n\nPor favor <a href=\"https://github.com/86Box/roms/releases/latest\">descargue</a> un conjunte de ROMs y extráigalo en el directorio \"roms\"."
msgid "(empty)" msgid "(empty)"
msgstr "(vacío)" msgstr "(vacío)"
msgid "All files" msgid "All files"
msgstr "All files" msgstr "Todos los archivos"
msgid "Turbo" msgid "Turbo"
msgstr "Turbo" msgstr "Turbo"
@@ -716,13 +716,13 @@ msgid "Other peripherals"
msgstr "Otros periféricos" msgstr "Otros periféricos"
msgid "Click to capture mouse" msgid "Click to capture mouse"
msgstr "Haz click para capturar el ratón" msgstr "Haga click para capturar el ratón"
msgid "Press F8+F12 to release mouse" msgid "Press F8+F12 to release mouse"
msgstr "Pulsa F8+F12 para liberar el ratón" msgstr "Pulse F8+F12 para liberar el ratón"
msgid "Press F8+F12 or middle button to release mouse" msgid "Press F8+F12 or middle button to release mouse"
msgstr "Pulsa F8+F12 o el botón central para liberar el ratón" msgstr "Pulse F8+F12 o el botón central para liberar el ratón"
msgid "Bus" msgid "Bus"
msgstr "Bus" msgstr "Bus"
@@ -743,7 +743,7 @@ msgid "KB"
msgstr "KB" msgstr "KB"
msgid "Could not initialize the video renderer." msgid "Could not initialize the video renderer."
msgstr "Incapaz de inicializar el renderizador de vídeo." msgstr "No fué posible inicializar el renderizador de vídeo."
msgid "Default" msgid "Default"
msgstr "Por defecto" msgstr "Por defecto"
@@ -788,10 +788,10 @@ msgid "None"
msgstr "Ninguno" msgstr "Ninguno"
msgid "Unable to load keyboard accelerators." msgid "Unable to load keyboard accelerators."
msgstr "Incapaz de cargar aceleradores de teclado." msgstr "No fué posible cargar aceleradores de teclado."
msgid "Unable to register raw input." msgid "Unable to register raw input."
msgstr "Incapaz de registrar entrada directa." msgstr "No fué posible registrar entrada directa."
msgid "%u" msgid "%u"
msgstr "%u" msgstr "%u"
@@ -803,22 +803,22 @@ msgid "Floppy %i (%s): %ls"
msgstr "Disquete %i (%s): %ls" msgstr "Disquete %i (%s): %ls"
msgid "Advanced sector images" msgid "Advanced sector images"
msgstr "Advanced sector images" msgstr "Imágenes avanzadas de sector"
msgid "Flux images" msgid "Flux images"
msgstr "Flux images" msgstr "Imágenes de fluxo"
msgid "Unable to initialize SDL, SDL2.dll is required" msgid "Unable to initialize SDL, SDL2.dll is required"
msgstr "Incapaz de inicializar SDL, se requiere SDL2.dll" msgstr "Incapaz de inicializar SDL, se requiere SDL2.dll"
msgid "Are you sure you want to hard reset the emulated machine?" msgid "Are you sure you want to hard reset the emulated machine?"
msgstr "¿Seguro que quieres resetear la máquina emulada?" msgstr "¿Está seguro de que quieres hacer una reinicialización completa de la máquina emulada?"
msgid "Are you sure you want to exit 86Box?" msgid "Are you sure you want to exit 86Box?"
msgstr "¿Seguro que quieres cerrar 86Box?" msgstr "¿Está seguro de que quiere cerrar a 86Box?"
msgid "Unable to initialize Ghostscript" msgid "Unable to initialize Ghostscript"
msgstr "Incapaz de inicializar Ghostscript" msgstr "No fué posible inicializar Ghostscript"
msgid "MO %i (%ls): %ls" msgid "MO %i (%ls): %ls"
msgstr "MO %i (%ls): %ls" msgstr "MO %i (%ls): %ls"
@@ -839,10 +839,10 @@ msgid "No ROMs found"
msgstr "No se encontraron ROMs" msgstr "No se encontraron ROMs"
msgid "Do you want to save the settings?" msgid "Do you want to save the settings?"
msgstr "¿Quieres guardar los ajustes?" msgstr "¿Quiere guardar los configuraciones?"
msgid "This will hard reset the emulated machine." msgid "This will hard reset the emulated machine."
msgstr "Se hará hard reset de la máquina emulada." msgstr "Se hará una reinicialización completa de la máquina emulada."
msgid "Save" msgid "Save"
msgstr "Guardar" msgstr "Guardar"
@@ -857,7 +857,7 @@ msgid "An emulator of old computers\n\nAuthors: Sarah Walker, Miran Grca, Fred N
msgstr "Un emulador de ordenadores antigüos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, y otros.\n\nLiberado bajo la GNU General Public License versión 2 o posterior. Ver LICENSE para más información." msgstr "Un emulador de ordenadores antigüos\n\nAutores: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, y otros.\n\nLiberado bajo la GNU General Public License versión 2 o posterior. Ver LICENSE para más información."
msgid "Hardware not available" msgid "Hardware not available"
msgstr "Hardware no disponible" msgstr "Equipo no disponible"
msgid "WinPcap" msgid "WinPcap"
msgstr "WinPcap" msgstr "WinPcap"
@@ -890,10 +890,10 @@ msgid "Don't exit"
msgstr "No salir" msgstr "No salir"
msgid "Reset" msgid "Reset"
msgstr "Resetear" msgstr "Reinicializar"
msgid "Don't reset" msgid "Don't reset"
msgstr "No resetear" msgstr "No reinicializar"
msgid "CD-ROM images" msgid "CD-ROM images"
msgstr "Imágenes de CD-ROM" msgstr "Imágenes de CD-ROM"
@@ -911,10 +911,10 @@ msgid "OpenGL options"
msgstr "Opciones OpenGL" msgstr "Opciones OpenGL"
msgid "You are loading an unsupported configuration" msgid "You are loading an unsupported configuration"
msgstr "Estás cargando una configuración no soportada" msgstr "Está cargando una configuración no soportada"
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." 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 "El Filtrado de tipo de CPU basado en máquina seleccionada está deshabilitado para la esta máquina.\n\nEsto hace posible seleccionar una CPU que sea incompatible con esta máquina. Por ello, pueden aparecer incompatibilidader con la BIOS de la máquina u otro software.\n\nActivar este ajuste no está oficialmente soportado y cualquier reporte de fallo puede ser cerrado como inválido." msgstr "El Filtrado de tipo de CPU basado en máquina seleccionada está deshabilitado para la esta máquina.\n\nEsto hace posible seleccionar una CPU que sea incompatible con esta máquina. Por ello, pueden aparecer incompatibilidader con la BIOS de la máquina u otro software.\n\nActivar esta configuración no está oficialmente soportado y cualquier reporte de fallo puede ser cerrado como inválido."
msgid "Continue" msgid "Continue"
msgstr "Continuar" msgstr "Continuar"
@@ -935,7 +935,7 @@ msgid "Error initializing renderer"
msgstr "Error al inicializar el renderizador" msgstr "Error al inicializar el renderizador"
msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer." msgid "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
msgstr "No se ha podido inicializar el renderizador OpenGL (3.0 Core). Utilice otro renderizador." msgstr "No fué posible inicializar el renderizador OpenGL (3.0 Core). Utilice otro renderizador."
msgid "Resume execution" msgid "Resume execution"
msgstr "Retomar la ejecución" msgstr "Retomar la ejecución"
@@ -965,7 +965,7 @@ msgid "%01i"
msgstr "%01i" msgstr "%01i"
msgid "MFM/RLL or ESDI CD-ROM drives never existed" msgid "MFM/RLL or ESDI CD-ROM drives never existed"
msgstr "Nunca hubo unidades de CD-ROM MFM/RLL o ESDI" msgstr "Nunca existieron unidades de CD-ROM MFM/RLL o ESDI"
msgid "Custom..." msgid "Custom..."
msgstr "A medida..." msgstr "A medida..."
@@ -1070,7 +1070,7 @@ msgid "Parent and child disk timestamps do not match"
msgstr "Las marcas de tiempo del padre e hijo no coinciden" msgstr "Las marcas de tiempo del padre e hijo no coinciden"
msgid "Could not fix VHD timestamp." msgid "Could not fix VHD timestamp."
msgstr "No se pudo corregir la marca de tiempo del VHD." msgstr "No fué posible corregir la marca de tiempo del VHD."
msgid "%01i:%02i" msgid "%01i:%02i"
msgstr "%01i:%02i" msgstr "%01i:%02i"
@@ -1196,11 +1196,17 @@ msgid "(System Default)"
msgstr "(Por defecto del sistema)" msgstr "(Por defecto del sistema)"
msgid "Failed to initialize network driver" msgid "Failed to initialize network driver"
msgstr "Error al inicializar el controlador de red" msgstr "No fué posible inicializar el controlador de red"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "La configuración de red se cambiará al controlador nulo" msgstr "La configuración de red se cambiará al controlador nulo"
msgid "Mouse sensitivity:"
msgstr "Sensibilidad del ratón:"
msgid "Select media images from program working directory"
msgstr "Seleccionar imágenes de media del directorio de trabajo del programa"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Modalidad PIT:" msgstr "Modalidad PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Verkkoajurin alustaminen epäonnistui"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Verkkokokoonpano vaihtuu nolla-ajuriin" msgstr "Verkkokokoonpano vaihtuu nolla-ajuriin"
msgid "Mouse sensitivity:"
msgstr "Hiiren herkkyys:"
msgid "Select media images from program working directory"
msgstr "Valitse mediakuvat ohjelman työhakemistosta"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT-tila:" msgstr "PIT-tila:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Échec de l'initialisation du pilote réseau"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "La configuration du réseau passera au pilote nul" msgstr "La configuration du réseau passera au pilote nul"
msgid "Mouse sensitivity:"
msgstr "Sensibilité de la souris:"
msgid "Select media images from program working directory"
msgstr "Sélectionner des images dans le répertoire de travail du programme"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Mode PIT:" msgstr "Mode PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Neuspješno pokretanje mrežnog upravljačkog programa"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Konfiguracija mreže bit će prebačena na nulti upravljački program" msgstr "Konfiguracija mreže bit će prebačena na nulti upravljački program"
msgid "Mouse sensitivity:"
msgstr "Osjetljivost miša:"
msgid "Select media images from program working directory"
msgstr "Medijske slike su odabrane iz radnog direktorija programa"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT način:" msgstr "PIT način:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Nem sikerült inicializálni a hálózati illesztőprogramot"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "A hálózati konfiguráció átvált a null illesztőprogramra" msgstr "A hálózati konfiguráció átvált a null illesztőprogramra"
msgid "Mouse sensitivity:"
msgstr "Egér érzékenység:"
msgid "Select media images from program working directory"
msgstr "Médiaképek kiválasztása a program munkakönyvtárából"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT üzemmód:" msgstr "PIT üzemmód:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Impossibile inizializzare il driver di rete"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "La configurazione di rete verrà commutata sul driver nullo" msgstr "La configurazione di rete verrà commutata sul driver nullo"
msgid "Mouse sensitivity:"
msgstr "Sensitività del mouse:"
msgid "Select media images from program working directory"
msgstr "Seleziona le immagini media dalla directory di lavoro del programma"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Modalità PIT:" msgstr "Modalità PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "ネットワークドライバの初期化に失敗しました"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "ネットワーク設定がヌル・ドライバに切り替わる" msgstr "ネットワーク設定がヌル・ドライバに切り替わる"
msgid "Mouse sensitivity:"
msgstr "マウスの感度:"
msgid "Select media images from program working directory"
msgstr "プログラムの作業ディレクトリからメディア画像を選択する"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PITモード:" msgstr "PITモード:"

View File

@@ -1201,6 +1201,12 @@ msgstr "네트워크 드라이버를 초기화하지 못했습니다"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "네트워크 구성이 널 드라이버로 전환됩니다" msgstr "네트워크 구성이 널 드라이버로 전환됩니다"
msgid "Mouse sensitivity:"
msgstr "마우스 감도:"
msgid "Select media images from program working directory"
msgstr "프로그램 작업 디렉토리에서 미디어 이미지 선택"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT 모드:" msgstr "PIT 모드:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Nie udało się zainicjować sterownika sieciowego"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Konfiguracja sieci zostanie przełączona na sterownik null" msgstr "Konfiguracja sieci zostanie przełączona na sterownik null"
msgid "Mouse sensitivity:"
msgstr "Wrażliwość myszy:"
msgid "Select media images from program working directory"
msgstr "Wybór obrazów multimedialnych z katalogu roboczego programu"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Tryb PIT:" msgstr "Tryb PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Falha ao inicializar o driver de rede"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "A configuração de rede será alterada para o driver nulo" msgstr "A configuração de rede será alterada para o driver nulo"
msgid "Mouse sensitivity:"
msgstr "Sensibilidade do rato:"
msgid "Select media images from program working directory"
msgstr "Selecione imagens de mídia do diretório de trabalho do programa"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Modo PIT:" msgstr "Modo PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Falha ao inicializar o driver de rede"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "A configuração da rede será alterada para o controlador nulo" msgstr "A configuração da rede será alterada para o controlador nulo"
msgid "Mouse sensitivity:"
msgstr "Sensibilidade do rato:"
msgid "Select media images from program working directory"
msgstr "Selecionar imagens multimédia do diretório de trabalho do programa"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Modo PIT:" msgstr "Modo PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Не удалось инициализировать сетевой др
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Сетевая конфигурация будет переключена на нулевой драйвер" msgstr "Сетевая конфигурация будет переключена на нулевой драйвер"
msgid "Mouse sensitivity:"
msgstr "Чувствительность мыши:"
msgid "Select media images from program working directory"
msgstr "Выбор медиа-образов из рабочего каталога программы"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Режим PIT:" msgstr "Режим PIT:"

1220
src/qt/languages/sk-SK.po Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1201,6 +1201,12 @@ msgstr "Ni uspelo inicializirati omrežnega gonilnika"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Omrežne nastavitve bodo preklopljene na ničelni gonilnik" msgstr "Omrežne nastavitve bodo preklopljene na ničelni gonilnik"
msgid "Mouse sensitivity:"
msgstr "Občutljivost miške:"
msgid "Select media images from program working directory"
msgstr "Izberi slike medijev iz delovnega imenika programa"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Način PIT:" msgstr "Način PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Ağ sürücüsü başlatılamadı"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Ağ yapılandırması null sürücüye geçirilecektir" msgstr "Ağ yapılandırması null sürücüye geçirilecektir"
msgid "Mouse sensitivity:"
msgstr "Fare hassasiyeti:"
msgid "Select media images from program working directory"
msgstr "Program çalışma dizininden medya görüntülerini seçme"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT modu:" msgstr "PIT modu:"

View File

@@ -1201,6 +1201,12 @@ msgstr "Не вдалося ініціалізувати мережевий др
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "Конфігурацію мережі буде змінено на нульовий драйвер" msgstr "Конфігурацію мережі буде змінено на нульовий драйвер"
msgid "Mouse sensitivity:"
msgstr "Чутливість миші:"
msgid "Select media images from program working directory"
msgstr "Виберіть медіа-зображення з робочої директорії програми"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "Режим PIT:" msgstr "Режим PIT:"

View File

@@ -1201,6 +1201,12 @@ msgstr "网络驱动程序初始化失败"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "网络配置将切换为空驱动程序" msgstr "网络配置将切换为空驱动程序"
msgid "Mouse sensitivity:"
msgstr "小鼠敏感性:"
msgid "Select media images from program working directory"
msgstr "从程序工作目录中选择媒体图像"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "PIT 模式:" msgstr "PIT 模式:"

View File

@@ -1201,6 +1201,12 @@ msgstr "初始化網絡驅動程序失敗"
msgid "The network configuration will be switched to the null driver" msgid "The network configuration will be switched to the null driver"
msgstr "網絡配置將切換為空驅動程序" msgstr "網絡配置將切換為空驅動程序"
msgid "Mouse sensitivity:"
msgstr "鼠標靈敏度:"
msgid "Select media images from program working directory"
msgstr "從程序工作目錄中選擇媒體圖像"
msgid "PIT mode:" msgid "PIT mode:"
msgstr "點模式:" msgstr "點模式:"

View File

@@ -754,10 +754,10 @@
<normaloff>:/menuicons/win/icons/acpi_shutdown.ico</normaloff>:/menuicons/win/icons/acpi_shutdown.ico</iconset> <normaloff>:/menuicons/win/icons/acpi_shutdown.ico</normaloff>:/menuicons/win/icons/acpi_shutdown.ico</iconset>
</property> </property>
<property name="text"> <property name="text">
<string>ACPI Shutdown</string> <string>ACPI shutdown</string>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>ACPI Shutdown</string> <string>ACPI shutdown</string>
</property> </property>
<property name="visible"> <property name="visible">
<bool>true</bool> <bool>true</bool>

View File

@@ -429,14 +429,16 @@ set_language(uint32_t id)
extern "C++" { extern "C++" {
QMap<uint32_t, QPair<QString, QString>> ProgSettings::lcid_langcode = { QMap<uint32_t, QPair<QString, QString>> ProgSettings::lcid_langcode = {
{0x0405, { "cs-CZ", "Czech (Czech Republic)" } }, { 0x0403, { "ca-ES", "Catalan (Spain)" } },
{ 0x0804, { "zh-CN", "Chinese (Simplified)" } },
{ 0x0404, { "zh-TW", "Chinese (Traditional)" } },
{ 0x041A, { "hr-HR", "Croatian (Croatia)" } },
{ 0x0405, { "cs-CZ", "Czech (Czech Republic)" } },
{ 0x0407, { "de-DE", "German (Germany)" } }, { 0x0407, { "de-DE", "German (Germany)" } },
{ 0x0409, { "en-US", "English (United States)" } },
{ 0x0809, { "en-GB", "English (United Kingdom)" }}, { 0x0809, { "en-GB", "English (United Kingdom)" }},
{ 0x0C0A, { "es-ES", "Spanish (Spain)" } }, { 0x0409, { "en-US", "English (United States)" } },
{ 0x040B, { "fi-FI", "Finnish (Finland)" } }, { 0x040B, { "fi-FI", "Finnish (Finland)" } },
{ 0x040C, { "fr-FR", "French (France)" } }, { 0x040C, { "fr-FR", "French (France)" } },
{ 0x041A, { "hr-HR", "Croatian (Croatia)" } },
{ 0x040E, { "hu-HU", "Hungarian (Hungary)" } }, { 0x040E, { "hu-HU", "Hungarian (Hungary)" } },
{ 0x0410, { "it-IT", "Italian (Italy)" } }, { 0x0410, { "it-IT", "Italian (Italy)" } },
{ 0x0411, { "ja-JP", "Japanese (Japan)" } }, { 0x0411, { "ja-JP", "Japanese (Japan)" } },
@@ -445,11 +447,11 @@ QMap<uint32_t, QPair<QString, QString>> ProgSettings::lcid_langcode = {
{ 0x0416, { "pt-BR", "Portuguese (Brazil)" } }, { 0x0416, { "pt-BR", "Portuguese (Brazil)" } },
{ 0x0816, { "pt-PT", "Portuguese (Portugal)" } }, { 0x0816, { "pt-PT", "Portuguese (Portugal)" } },
{ 0x0419, { "ru-RU", "Russian (Russia)" } }, { 0x0419, { "ru-RU", "Russian (Russia)" } },
{ 0x041B, { "sk-SK", "Slovak (Slovakia)" } },
{ 0x0424, { "sl-SI", "Slovenian (Slovenia)" } }, { 0x0424, { "sl-SI", "Slovenian (Slovenia)" } },
{ 0x0C0A, { "es-ES", "Spanish (Spain, Modern Sort)" } },
{ 0x041F, { "tr-TR", "Turkish (Turkey)" } }, { 0x041F, { "tr-TR", "Turkish (Turkey)" } },
{ 0x0422, { "uk-UA", "Ukrainian (Ukraine)" } }, { 0x0422, { "uk-UA", "Ukrainian (Ukraine)" } },
{ 0x0804, { "zh-CN", "Chinese (China)" } },
{ 0x0404, { "zh-TW", "Chinese (Taiwan)" } },
{ 0xFFFF, { "system", "(System Default)" } }, { 0xFFFF, { "system", "(System Default)" } },
}; };
} }

View File

@@ -113,7 +113,8 @@ Settings::Settings(QWidget *parent)
, ui(new Ui::Settings) , ui(new Ui::Settings)
{ {
ui->setupUi(this); ui->setupUi(this);
ui->listView->setModel(new SettingsModel(this)); auto *model = new SettingsModel(this);
ui->listView->setModel(model);
Harddrives::busTrackClass = new SettingsBusTracking; Harddrives::busTrackClass = new SettingsBusTracking;
machine = new SettingsMachine(this); machine = new SettingsMachine(this);
@@ -140,18 +141,27 @@ Settings::Settings(QWidget *parent)
ui->stackedWidget->addWidget(otherRemovable); ui->stackedWidget->addWidget(otherRemovable);
ui->stackedWidget->addWidget(otherPeripherals); ui->stackedWidget->addWidget(otherPeripherals);
connect(machine, &SettingsMachine::currentMachineChanged, display, &SettingsDisplay::onCurrentMachineChanged); connect(machine, &SettingsMachine::currentMachineChanged, display,
connect(machine, &SettingsMachine::currentMachineChanged, input, &SettingsInput::onCurrentMachineChanged); &SettingsDisplay::onCurrentMachineChanged);
connect(machine, &SettingsMachine::currentMachineChanged, sound, &SettingsSound::onCurrentMachineChanged); connect(machine, &SettingsMachine::currentMachineChanged, input,
connect(machine, &SettingsMachine::currentMachineChanged, network, &SettingsNetwork::onCurrentMachineChanged); &SettingsInput::onCurrentMachineChanged);
connect(machine, &SettingsMachine::currentMachineChanged, storageControllers, &SettingsStorageControllers::onCurrentMachineChanged); connect(machine, &SettingsMachine::currentMachineChanged, sound,
connect(machine, &SettingsMachine::currentMachineChanged, otherPeripherals, &SettingsOtherPeripherals::onCurrentMachineChanged); &SettingsSound::onCurrentMachineChanged);
connect(machine, &SettingsMachine::currentMachineChanged, network,
&SettingsNetwork::onCurrentMachineChanged);
connect(machine, &SettingsMachine::currentMachineChanged, storageControllers,
&SettingsStorageControllers::onCurrentMachineChanged);
connect(machine, &SettingsMachine::currentMachineChanged, otherPeripherals,
&SettingsOtherPeripherals::onCurrentMachineChanged);
connect(ui->listView->selectionModel(), &QItemSelectionModel::currentChanged, this, [this](const QModelIndex &current, const QModelIndex &previous) { connect(ui->listView->selectionModel(), &QItemSelectionModel::currentChanged, this,
ui->stackedWidget->setCurrentIndex(current.row()); [this](const QModelIndex &current, const QModelIndex &previous) {
}); ui->stackedWidget->setCurrentIndex(current.row()); });
ui->listView->setMinimumWidth(ui->listView->sizeHintForColumn(0) + qApp->style()->pixelMetric(QStyle::PM_ScrollBarExtent)); ui->listView->setMinimumWidth(ui->listView->sizeHintForColumn(0) +
qApp->style()->pixelMetric(QStyle::PM_ScrollBarExtent));
ui->listView->setCurrentIndex(model->index(0, 0));
Settings::settings = this; Settings::settings = this;
} }
@@ -184,13 +194,15 @@ void
Settings::accept() Settings::accept()
{ {
if (confirm_save && !settings_only) { if (confirm_save && !settings_only) {
QMessageBox questionbox(QMessageBox::Icon::Question, "86Box", QStringLiteral("%1\n\n%2").arg(tr("Do you want to save the settings?"), tr("This will hard reset the emulated machine.")), QMessageBox::Save | QMessageBox::Cancel, this); QMessageBox questionbox(QMessageBox::Icon::Question, "86Box",
QStringLiteral("%1\n\n%2").arg(tr("Do you want to save the settings?"),
tr("This will hard reset the emulated machine.")),
QMessageBox::Save | QMessageBox::Cancel, this);
QCheckBox *chkbox = new QCheckBox(tr("Don't show this message again")); QCheckBox *chkbox = new QCheckBox(tr("Don't show this message again"));
questionbox.setCheckBox(chkbox); questionbox.setCheckBox(chkbox);
chkbox->setChecked(!confirm_save); chkbox->setChecked(!confirm_save);
QObject::connect(chkbox, &QCheckBox::stateChanged, [](int state) { QObject::connect(chkbox, &QCheckBox::stateChanged, [](int state) {
confirm_save = (state == Qt::CheckState::Unchecked); confirm_save = (state == Qt::CheckState::Unchecked); });
});
questionbox.exec(); questionbox.exec();
if (questionbox.result() == QMessageBox::Cancel) { if (questionbox.result() == QMessageBox::Cancel) {
confirm_save = true; confirm_save = true;

View File

@@ -146,19 +146,6 @@ SettingsFloppyCDROM::SettingsFloppyCDROM(QWidget *parent)
for (int i = 0; i < 72; i++) for (int i = 0; i < 72; i++)
Models::AddEntry(model, QString("%1x").arg(i + 1), i + 1); Models::AddEntry(model, QString("%1x").arg(i + 1), i + 1);
#if 0
model = ui->comboBoxCDROMType->model();
i = 0;
while (true) {
QString name = tr(cdrom_getname(i));
if (name.isEmpty())
break;
Models::AddEntry(model, name, i);
++i;
}
#endif
model = new QStandardItemModel(0, 3, this); model = new QStandardItemModel(0, 3, this);
ui->tableViewCDROM->setModel(model); ui->tableViewCDROM->setModel(model);
model->setHeaderData(0, Qt::Horizontal, tr("Bus")); model->setHeaderData(0, Qt::Horizontal, tr("Bus"));

View File

@@ -1,5 +1,6 @@
<RCC> <RCC>
<qresource prefix="/"> <qresource prefix="/">
<file>86box_ca-ES.qm</file>
<file>86box_cs-CZ.qm</file> <file>86box_cs-CZ.qm</file>
<file>86box_de-DE.qm</file> <file>86box_de-DE.qm</file>
<file>86box_en-US.qm</file> <file>86box_en-US.qm</file>
@@ -16,6 +17,7 @@
<file>86box_pt-BR.qm</file> <file>86box_pt-BR.qm</file>
<file>86box_pt-PT.qm</file> <file>86box_pt-PT.qm</file>
<file>86box_ru-RU.qm</file> <file>86box_ru-RU.qm</file>
<file>86box_sk-SK.qm</file>
<file>86box_sl-SI.qm</file> <file>86box_sl-SI.qm</file>
<file>86box_tr-TR.qm</file> <file>86box_tr-TR.qm</file>
<file>86box_uk-UA.qm</file> <file>86box_uk-UA.qm</file>