Merge branch '86Box:master' into nec-v20

This commit is contained in:
Jasmine Iwanek
2022-02-05 13:58:34 -05:00
committed by GitHub
10 changed files with 988 additions and 449 deletions

View File

@@ -100,7 +100,7 @@ jobs:
run: cmake --build build --target ${{ matrix.build.target }}
- uses: actions/upload-artifact@v2
with:
name: '86Box${{ matrix.build.slug }}-MSYS2-${{ matrix.environment.msystem }}-gha${{ github.run_number }}'
name: '86Box${{ matrix.build.slug }}-Windows-${{ matrix.environment.msystem }}-gha${{ github.run_number }}'
path: build/artifacts/**
llvm-windows:

View File

@@ -62,6 +62,7 @@ typedef struct _piix_ {
uint8_t cur_readout_reg, rev,
type, func_shift,
max_func, pci_slot,
no_mirq0, pad,
regs[4][256],
readout_regs[256], board_config[2];
uint16_t func0_id, nvr_io_base,
@@ -1412,7 +1413,7 @@ piix_reset(void *p)
sff_set_irq_mode(dev->bm[0], 0, 0);
sff_set_irq_mode(dev->bm[1], 0, 0);
if (dev->type >= 4) {
if (dev->no_mirq0 || (dev->type >= 4)) {
sff_set_irq_mode(dev->bm[0], 1, 0);
sff_set_irq_mode(dev->bm[1], 1, 0);
} else {
@@ -1458,7 +1459,8 @@ static void
dev->type = info->local & 0x0f;
/* If (dev->type == 4) and (dev->rev & 0x08), then this is PIIX4E. */
dev->rev = (info->local >> 4) & 0x0f;
dev->func_shift = info->local >> 8;
dev->func_shift = (info->local >> 8) & 0x0f;
dev->no_mirq0 = (info->local >> 12) & 0x0f;
dev->func0_id = info->local >> 16;
dev->pci_slot = pci_add_card(PCI_ADD_SOUTHBRIDGE, piix_read, piix_write, dev);
@@ -1477,7 +1479,7 @@ static void
sff_set_irq_mode(dev->bm[0], 0, 0);
sff_set_irq_mode(dev->bm[1], 0, 0);
if (dev->type >= 4) {
if (dev->no_mirq0 || (dev->type >= 4)) {
sff_set_irq_mode(dev->bm[0], 1, 0);
sff_set_irq_mode(dev->bm[1], 1, 0);
} else {
@@ -1643,6 +1645,21 @@ const device_t piix3_device =
NULL
};
const device_t piix3_ioapic_device =
{
"Intel 82371SB (PIIX3) (Boards with I/O APIC)",
"piix3",
DEVICE_PCI,
0x70001403,
piix_init,
piix_close,
piix_reset,
{ NULL },
piix_speed_changed,
NULL,
NULL
};
const device_t piix4_device =
{
"Intel 82371AB/EB (PIIX4/PIIX4E)",

View File

@@ -49,6 +49,9 @@
#define RAMMAP_REMP386 (1 << 4)
#define EMSEN1_EMSMAP (1 << 4)
#define EMSEN1_EMSENAB (1 << 7)
#define NR_ELEMS(x) (sizeof(x) / sizeof(x[0]))
@@ -72,13 +75,25 @@ typedef struct {
int bank;
} ram_struct_t;
typedef struct {
void * parent;
int segment;
} ems_struct_t;
typedef struct {
int cfg_index;
uint8_t cfg_regs[256];
int cfg_enable, ram_config;
int ems_index;
int ems_autoinc;
uint16_t ems[0x24];
mem_mapping_t ems_mappings[20]; /*a0000-effff*/
uint32_t mappings[20];
mem_mapping_t ram_mapping[2];
ram_struct_t ram_struct[2];
ems_struct_t ems_struct[20];
uint32_t ram_virt_base[2], ram_phys_base[2];
uint32_t ram_mask[2];
@@ -521,10 +536,109 @@ recalc_mappings(void *priv)
}
static void
shadow_control(uint32_t addr, uint32_t size, int state)
static void
recalc_sltptr(scamp_t *dev)
{
switch (state) {
uint32_t sltptr = dev->cfg_regs[CFG_SLTPTR] << 16;
if (sltptr >= 0xa0000 && sltptr < 0x100000)
sltptr = 0x100000;
if (sltptr > 0xfe0000)
sltptr = 0xfe0000;
if (sltptr >= 0xa0000)
{
mem_set_mem_state(0, 0xa0000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
mem_set_mem_state(0x100000, sltptr - 0x100000, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
mem_set_mem_state(sltptr, 0x1000000 - sltptr, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
}
else
{
mem_set_mem_state(0, sltptr, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
mem_set_mem_state(sltptr, 0xa0000-sltptr, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
mem_set_mem_state(0x100000, 0xf00000, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
}
}
static uint8_t
scamp_ems_read(uint32_t addr, void *priv)
{
ems_struct_t *ems = (ems_struct_t *) priv;
scamp_t *dev = ems->parent;
int segment = ems->segment;
addr = (addr & 0x3fff) | dev->mappings[segment];
return ram[addr];
}
static void
scamp_ems_write(uint32_t addr, uint8_t val, void *priv)
{
ems_struct_t *ems = (ems_struct_t *) priv;
scamp_t *dev = ems->parent;
int segment = ems->segment;
addr = (addr & 0x3fff) | dev->mappings[segment];
ram[addr] = val;
}
static void
recalc_ems(scamp_t *dev)
{
int segment;
const uint32_t ems_base[12] =
{
0xc0000, 0xc4000, 0xc8000, 0xcc000,
0xd0000, 0xd4000, 0xd8000, 0xdc000,
0xe0000, 0xe4000, 0xe8000, 0xec000
};
uint32_t new_mappings[20];
uint16_t ems_enable;
for (segment = 0; segment < 20; segment++)
new_mappings[segment] = 0xa0000 + segment*0x4000;
if (dev->cfg_regs[CFG_EMSEN1] & EMSEN1_EMSENAB)
ems_enable = dev->cfg_regs[CFG_EMSEN2] | ((dev->cfg_regs[CFG_EMSEN1] & 0xf) << 8);
else
ems_enable = 0;
for (segment = 0; segment < 12; segment++)
{
if (ems_enable & (1 << segment))
{
uint32_t phys_addr = dev->ems[segment] << 14;
/*If physical address is in remapped memory then adjust down to a0000-fffff range*/
if ((dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386) && phys_addr >= (mem_size * 1024)
&& phys_addr < ((mem_size + 384) * 1024))
phys_addr = (phys_addr - mem_size * 1024) + 0xa0000;
new_mappings[(ems_base[segment] - 0xa0000) >> 14] = phys_addr;
}
}
for (segment = 0; segment < 20; segment++)
{
if (new_mappings[segment] != dev->mappings[segment])
{
dev->mappings[segment] = new_mappings[segment];
if (new_mappings[segment] < (mem_size * 1024))
{
mem_mapping_set_exec(&dev->ems_mappings[segment], ram + dev->mappings[segment]);
mem_mapping_enable(&dev->ems_mappings[segment]);
}
else
mem_mapping_disable(&dev->ems_mappings[segment]);
}
}
}
static void
shadow_control(uint32_t addr, uint32_t size, int state, int ems_enable)
{
if (ems_enable)
mem_set_mem_state(addr, size, MEM_READ_INTERNAL | MEM_WRITE_INTERNAL);
else switch (state) {
case 0:
mem_set_mem_state(addr, size, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
break;
@@ -542,6 +656,55 @@ shadow_control(uint32_t addr, uint32_t size, int state)
flushmmucache_nopc();
}
static void
shadow_recalc(scamp_t *dev)
{
uint8_t abaxs = (dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386) ? 0 : dev->cfg_regs[CFG_ABAXS];
uint8_t caxs = (dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386) ? 0 : dev->cfg_regs[CFG_CAXS];
uint8_t daxs = (dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386) ? 0 : dev->cfg_regs[CFG_DAXS];
uint8_t feaxs = (dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386) ? 0 : dev->cfg_regs[CFG_FEAXS];
uint32_t ems_enable;
if (dev->cfg_regs[CFG_EMSEN1] & EMSEN1_EMSENAB) {
if (dev->cfg_regs[CFG_EMSEN1] & EMSEN1_EMSMAP) /*Axxx/Bxxx/Dxxx*/
ems_enable = (dev->cfg_regs[CFG_EMSEN2] & 0xf) | ((dev->cfg_regs[CFG_EMSEN1] & 0xf) << 4) | ((dev->cfg_regs[CFG_EMSEN2] & 0xf0) << 8);
else /*Cxxx/Dxxx/Exxx*/
ems_enable = (dev->cfg_regs[CFG_EMSEN2] << 8) | ((dev->cfg_regs[CFG_EMSEN1] & 0xf) << 16);
} else
ems_enable = 0;
/*Enabling remapping will disable all shadowing*/
if (dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386)
mem_remap_top(384);
shadow_control(0xa0000, 0x4000, abaxs & 3, ems_enable & 0x00001);
shadow_control(0xa0000, 0x4000, abaxs & 3, ems_enable & 0x00002);
shadow_control(0xa8000, 0x4000, (abaxs >> 2) & 3, ems_enable & 0x00004);
shadow_control(0xa8000, 0x4000, (abaxs >> 2) & 3, ems_enable & 0x00008);
shadow_control(0xb0000, 0x4000, (abaxs >> 4) & 3, ems_enable & 0x00010);
shadow_control(0xb0000, 0x4000, (abaxs >> 4) & 3, ems_enable & 0x00020);
shadow_control(0xb8000, 0x4000, (abaxs >> 6) & 3, ems_enable & 0x00040);
shadow_control(0xb8000, 0x4000, (abaxs >> 6) & 3, ems_enable & 0x00080);
shadow_control(0xc0000, 0x4000, caxs & 3, ems_enable & 0x00100);
shadow_control(0xc4000, 0x4000, (caxs >> 2) & 3, ems_enable & 0x00200);
shadow_control(0xc8000, 0x4000, (caxs >> 4) & 3, ems_enable & 0x00400);
shadow_control(0xcc000, 0x4000, (caxs >> 6) & 3, ems_enable & 0x00800);
shadow_control(0xd0000, 0x4000, daxs & 3, ems_enable & 0x01000);
shadow_control(0xd4000, 0x4000, (daxs >> 2) & 3, ems_enable & 0x02000);
shadow_control(0xd8000, 0x4000, (daxs >> 4) & 3, ems_enable & 0x04000);
shadow_control(0xdc000, 0x4000, (daxs >> 6) & 3, ems_enable & 0x08000);
shadow_control(0xe0000, 0x4000, feaxs & 3, ems_enable & 0x10000);
shadow_control(0xe4000, 0x4000, feaxs & 3, ems_enable & 0x20000);
shadow_control(0xe8000, 0x4000, (feaxs >> 2) & 3, ems_enable & 0x40000);
shadow_control(0xec000, 0x4000, (feaxs >> 2) & 3, ems_enable & 0x80000);
shadow_control(0xf0000, 0x8000, (feaxs >> 4) & 3, 0);
shadow_control(0xf8000, 0x8000, (feaxs >> 6) & 3, 0);
}
static void
scamp_write(uint16_t addr, uint8_t val, void *priv)
@@ -549,6 +712,26 @@ scamp_write(uint16_t addr, uint8_t val, void *priv)
scamp_t *dev = (scamp_t *) priv;
switch (addr) {
case 0xe8:
dev->ems_index = val & 0x1f;
dev->ems_autoinc = val & 0x40;
break;
case 0xea:
if (dev->ems_index < 0x24) {
dev->ems[dev->ems_index] = (dev->ems[dev->ems_index] & 0x300) | val;
recalc_ems(dev);
}
break;
case 0xeb:
if (dev->ems_index < 0x24) {
dev->ems[dev->ems_index] = (dev->ems[dev->ems_index] & 0x0ff) | ((val & 3) << 8);
recalc_ems(dev);
}
if (dev->ems_autoinc)
dev->ems_index = (dev->ems_index + 1) & 0x1f;
break;
case 0xec:
if (dev->cfg_enable)
dev->cfg_index = val;
@@ -559,72 +742,26 @@ scamp_write(uint16_t addr, uint8_t val, void *priv)
dev->cfg_regs[dev->cfg_index] = val;
switch (dev->cfg_index) {
case CFG_SLTPTR:
recalc_sltptr(dev);
break;
case CFG_RAMMAP:
recalc_mappings(dev);
mem_mapping_disable(&ram_remapped_mapping);
if (dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386) {
/* Enabling remapping will disable all shadowing */
mem_remap_top(384);
shadow_control(0xa0000, 0x60000, 0);
} else {
shadow_control(0xa0000, 0x8000, dev->cfg_regs[CFG_ABAXS] & 3);
shadow_control(0xa8000, 0x8000, (dev->cfg_regs[CFG_ABAXS] >> 2) & 3);
shadow_control(0xb0000, 0x8000, (dev->cfg_regs[CFG_ABAXS] >> 4) & 3);
shadow_control(0xb8000, 0x8000, (dev->cfg_regs[CFG_ABAXS] >> 6) & 3);
shadow_recalc(dev);
break;
shadow_control(0xc0000, 0x4000, dev->cfg_regs[CFG_CAXS] & 3);
shadow_control(0xc4000, 0x4000, (dev->cfg_regs[CFG_CAXS] >> 2) & 3);
shadow_control(0xc8000, 0x4000, (dev->cfg_regs[CFG_CAXS] >> 4) & 3);
shadow_control(0xcc000, 0x4000, (dev->cfg_regs[CFG_CAXS] >> 6) & 3);
shadow_control(0xd0000, 0x4000, dev->cfg_regs[CFG_DAXS] & 3);
shadow_control(0xd4000, 0x4000, (dev->cfg_regs[CFG_DAXS] >> 2) & 3);
shadow_control(0xd8000, 0x4000, (dev->cfg_regs[CFG_DAXS] >> 4) & 3);
shadow_control(0xdc000, 0x4000, (dev->cfg_regs[CFG_DAXS] >> 6) & 3);
shadow_control(0xe0000, 0x8000, dev->cfg_regs[CFG_FEAXS] & 3);
shadow_control(0xe8000, 0x8000, (dev->cfg_regs[CFG_FEAXS] >> 2) & 3);
shadow_control(0xf0000, 0x8000, (dev->cfg_regs[CFG_FEAXS] >> 4) & 3);
shadow_control(0xf8000, 0x8000, (dev->cfg_regs[CFG_FEAXS] >> 6) & 3);
}
case CFG_EMSEN1:
case CFG_EMSEN2:
shadow_recalc(dev);
recalc_ems(dev);
break;
case CFG_ABAXS:
if (!(dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386)) {
shadow_control(0xa0000, 0x8000, val & 3);
shadow_control(0xa8000, 0x8000, (val >> 2) & 3);
shadow_control(0xb0000, 0x8000, (val >> 4) & 3);
shadow_control(0xb8000, 0x8000, (val >> 6) & 3);
}
break;
case CFG_CAXS:
if (!(dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386)) {
shadow_control(0xc0000, 0x4000, val & 3);
shadow_control(0xc4000, 0x4000, (val >> 2) & 3);
shadow_control(0xc8000, 0x4000, (val >> 4) & 3);
shadow_control(0xcc000, 0x4000, (val >> 6) & 3);
}
break;
case CFG_DAXS:
if (!(dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386)) {
shadow_control(0xd0000, 0x4000, val & 3);
shadow_control(0xd4000, 0x4000, (val >> 2) & 3);
shadow_control(0xd8000, 0x4000, (val >> 4) & 3);
shadow_control(0xdc000, 0x4000, (val >> 6) & 3);
}
break;
case CFG_FEAXS:
if (!(dev->cfg_regs[CFG_RAMMAP] & RAMMAP_REMP386)) {
shadow_control(0xe0000, 0x8000, val & 3);
shadow_control(0xe8000, 0x8000, (val >> 2) & 3);
shadow_control(0xf0000, 0x8000, (val >> 4) & 3);
shadow_control(0xf8000, 0x8000, (val >> 6) & 3);
}
shadow_recalc(dev);
break;
}
}
@@ -648,6 +785,21 @@ scamp_read(uint16_t addr, void *priv)
uint8_t ret = 0xff;
switch (addr) {
case 0xe8:
ret = dev->ems_index | dev->ems_autoinc;
break;
case 0xea:
if (dev->ems_index < 0x24)
ret = dev->ems[dev->ems_index] & 0xff;
break;
case 0xeb:
if (dev->ems_index < 0x24)
ret = dev->ems[dev->ems_index] = (dev->ems[dev->ems_index] >> 8) & 0xfc;
if (dev->ems_autoinc)
dev->ems_index = (dev->ems_index + 1) & 0x1f;
break;
case 0xed:
if (dev->cfg_enable && (dev->cfg_index >= 0x00) && (dev->cfg_index <= 0x16))
ret = (dev->cfg_regs[dev->cfg_index]);
@@ -717,6 +869,8 @@ scamp_init(const device_t *info)
ram_mirrored_read, NULL, NULL,
ram_mirrored_write, NULL, NULL);
mem_mapping_disable(&ram_high_mapping);
mem_mapping_set_addr(&ram_mid_mapping, 0xf0000, 0x10000);
mem_mapping_set_exec(&ram_mid_mapping, ram+0xf0000);
addr = 0;
for (c = 0; c < 2; c++) {
@@ -785,6 +939,17 @@ scamp_init(const device_t *info)
mem_set_mem_state(0xfe0000, 0x20000, MEM_READ_EXTANY | MEM_WRITE_EXTANY);
for (c = 0; c < 20; c++) {
dev->ems_struct[c].parent = dev;
dev->ems_struct[c].segment = c;
mem_mapping_add(&dev->ems_mappings[c],
0xa0000 + c*0x4000, 0x4000,
scamp_ems_read, NULL, NULL,
scamp_ems_write, NULL, NULL,
ram + 0xa0000 + c*0x4000, MEM_MAPPING_INTERNAL, (void *)&dev->ems_struct[c]);
dev->mappings[c] = 0xa0000 + c*0x4000;
}
dev->port_92 = device_add(&port_92_device);
return dev;

View File

@@ -92,6 +92,7 @@ extern const device_t piix_device;
extern const device_t piix_old_device;
extern const device_t piix_rev02_device;
extern const device_t piix3_device;
extern const device_t piix3_ioapic_device;
extern const device_t piix4_device;
extern const device_t piix4e_device;
extern const device_t slc90e66_device;

View File

@@ -334,7 +334,7 @@ machine_at_pb520r_init(const machine_t *model)
int ret;
ret = bios_load_linear_combined("roms/machines/pb520r/1009bc0r.bio",
"roms/machines/pb520r/1009bc0r.bi1", 0x1c000, 128);
"roms/machines/pb520r/1009bc0r.bi1", 0x1d000, 128);
if (bios_only || !ret)
return ret;

View File

@@ -303,7 +303,7 @@ machine_at_p65up5_common_init(const machine_t *model, const device_t *northbridg
pci_register_slot(0x0C, PCI_CARD_NORMAL, 1, 2, 3, 4);
pci_register_slot(0x0D, PCI_CARD_NORMAL, 4, 1, 2, 3);
device_add(northbridge);
device_add(&piix3_device);
device_add(&piix3_ioapic_device);
device_add(&keyboard_ps2_ami_pci_device);
device_add(&w83877f_device);
device_add(&sst_flash_29ee010_device);

View File

@@ -178,7 +178,7 @@ const machine_t machines[] = {
/* Uses Compaq KBC firmware. */
{ "[ISA] Compaq Portable III", "portableiii", MACHINE_TYPE_286, CPU_PKG_286, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_VIDEO, 640, 16384, 128, 127, machine_at_portableiii_init, at_cpqiii_get_device },
/* Has IBM AT KBC firmware. */
{ "[ISA] MR 286 clone", "mr286", MACHINE_TYPE_286, CPU_PKG_286, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_IDE, 512, 16384, 128, 127, machine_at_mr286_init, NULL },
{ "[ISA] MR BIOS 286 clone", "mr286", MACHINE_TYPE_286, CPU_PKG_286, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_IDE, 512, 16384, 128, 127, machine_at_mr286_init, NULL },
/* Has IBM AT KBC firmware. */
{ "[ISA] NCR PC8/810/710/3390/3392", "pc8", MACHINE_TYPE_286, CPU_PKG_286, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT, 512, 16384, 128, 127, machine_at_pc8_init, NULL },
#if defined(DEV_BRANCH) && defined(USE_OLIVETTI)
@@ -246,7 +246,7 @@ const machine_t machines[] = {
{ "[ALi M1217] Flytech 386", "flytech386", MACHINE_TYPE_386SX, CPU_PKG_386SX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_BUS_PS2 | MACHINE_IDE | MACHINE_VIDEO, 1024, 16384, 1024, 127, machine_at_flytech386_init, at_flytech386_get_device },
/* I'm going to assume this has a standard/generic IBM-compatible AT KBC
firmware until the board is identified. */
{ "[ALi M1217] MR 386SX clone", "mr1217", MACHINE_TYPE_386SX, CPU_PKG_386SX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_BUS_PS2 | MACHINE_IDE | MACHINE_VIDEO, 1024, 16384, 1024, 127, machine_at_mr1217_init, NULL },
{ "[ALi M1217] MR BIOS 386SX clone", "mr1217", MACHINE_TYPE_386SX, CPU_PKG_386SX, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_BUS_PS2 | MACHINE_IDE | MACHINE_VIDEO, 1024, 16384, 1024, 127, machine_at_mr1217_init, NULL },
/* Has IBM PS/2 Type 1 KBC firmware. */
{ "[ALi M6117] Acrosser PJ-A511M", "pja511m", MACHINE_TYPE_386SX, CPU_PKG_M6117, 0, 0, 0, 0, 0, 0, 0, MACHINE_AT | MACHINE_BUS_PS2 | MACHINE_IDE, 1024, 32768, 1024, 127, machine_at_pja511m_init, NULL },
/* Has IBM PS/2 Type 1 KBC firmware. */

View File

@@ -227,7 +227,7 @@ BEGIN
DLG_CFG_MACHINE, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
#ifdef USE_DYNAREC
BOTTOMMARGIN, 87
@@ -239,7 +239,7 @@ BEGIN
DLG_CFG_VIDEO, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 38
END
@@ -247,7 +247,7 @@ BEGIN
DLG_CFG_INPUT, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 58
END
@@ -255,7 +255,7 @@ BEGIN
DLG_CFG_SOUND, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 109
END
@@ -263,7 +263,7 @@ BEGIN
DLG_CFG_NETWORK, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 56
END
@@ -271,7 +271,7 @@ BEGIN
DLG_CFG_PORTS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 48
END
@@ -279,7 +279,7 @@ BEGIN
DLG_CFG_PERIPHERALS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 85
END
@@ -287,7 +287,7 @@ BEGIN
DLG_CFG_HARD_DISKS, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 137
END
@@ -295,7 +295,7 @@ BEGIN
DLG_CFG_FLOPPY_DRIVES, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 96
END
@@ -303,7 +303,7 @@ BEGIN
DLG_CFG_OTHER_REMOVABLE_DEVICES, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 260
RIGHTMARGIN, 300
TOPMARGIN, 7
BOTTOMMARGIN, 214
END

File diff suppressed because it is too large Load Diff

View File

@@ -15,7 +15,7 @@ LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT
MainMenu MENU DISCARDABLE
BEGIN
POPUP "&Действие"
POPUP "&Дія"
BEGIN
MENUITEM "&Клавіатура потребує захвату", IDM_ACTION_KBD_REQ_CAPTURE
MENUITEM "&Правий CTRL - це лівий ALT", IDM_ACTION_RCTRL_IS_LALT
@@ -29,7 +29,7 @@ BEGIN
MENUITEM SEPARATOR
MENUITEM "&Вихід...", IDM_ACTION_EXIT
END
POPUP "&Вид"
POPUP "&Вигляд"
BEGIN
MENUITEM "&Приховати рядок стану", IDM_VID_HIDE_STATUS_BAR
MENUITEM "&Приховати панель інструментів", IDM_VID_HIDE_TOOLBAR
@@ -385,7 +385,7 @@ END
#define STR_250 "ZIP 250"
#define STR_ISARTC "ISA RTC:"
#define STR_ISAMEM "Карта розширення памя'ті (ISA)"
#define STR_ISAMEM "Карта розширення пам'яті (ISA)"
#define STR_ISAMEM_1 "Карта 1:"
#define STR_ISAMEM_2 "Карта 2:"
#define STR_ISAMEM_3 "Карта 3:"
@@ -414,12 +414,12 @@ BEGIN
IDS_2054 "ZIP %03i %i (%s): %ls"
IDS_2055 "Образи ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
IDS_2056 "86Box не зміг знайти жодного відповідного для використання файлу з ПЗУ.\n\nБудь ласка <a href=""https://github.com/86Box/roms/releases/latest"">завантажте</a> набір ПЗУ і витягніть його в каталог ""roms""."
IDS_2057 "(пусто)"
IDS_2057 "(порожньо)"
IDS_2058 "Образи ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Всі файли (*.*)\0*.*\0"
IDS_2059 "Турбо"
IDS_2060 "Увімк"
IDS_2061 "Вимк"
IDS_2062 "Всі образи (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Прості посекторні образи (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Surface образы (*.86F)\0*.86F\0"
IDS_2062 "Всі образи (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Прості посекторні образи (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Образ поверхні (*.86F)\0*.86F\0"
IDS_2063 "Системна плата ""%hs"" недоступна через відсутність файлу її ПЗУ в каталозі roms/machines. Переключення на доступну системну плату."
END
@@ -439,8 +439,8 @@ BEGIN
IDS_2075 "Інша периферія"
IDS_2076 "Образи Surface (*.86F)\0*.86F\0"
IDS_2077 "Клацніть мишею для захвату курсора"
IDS_2078 "Натисніть F8+F12 щоб звільнити курсор"
IDS_2079 "Натисніть F8+F12 або середню кнопку миши щоб звільнити курсор"
IDS_2078 "Натисніть F8+F12, щоб звільнити курсор"
IDS_2079 "Натисніть F8+F12 або середню кнопку миші, щоб звільнити курсор"
END
STRINGTABLE DISCARDABLE
@@ -470,7 +470,7 @@ BEGIN
IDS_2102 "Система управління польотом Thrustmaster"
IDS_2103 "Ні"
IDS_2104 "Неможливо завантажити прискорювачі клавіатури."
IDS_2105 "Неможливо зарреєструвати необроблене (RAW) введ."
IDS_2105 "Неможливо зарреєструвати необроблене (RAW) введення."
IDS_2106 "%u"
IDS_2107 "%u МБ (CHS: %i, %i, %i)"
IDS_2108 "Дисковод %i (%s): %ls"
@@ -487,9 +487,9 @@ BEGIN
IDS_2119 "Вихід"
IDS_2120 "ПЗУ не знайдені"
IDS_2121 "Чи бажаєте ви зберегти налаштування?"
IDS_2122 "Це призведе до холодної перезагрузки эмулируемой машины."
IDS_2122 "Це призведе до холодної перезагрузки емульованої машини."
IDS_2123 "Зберегти"
IDS_2124 "О 86Box"
IDS_2124 "Про 86Box"
IDS_2125 "86Box v." EMU_VERSION
IDS_2126 "Емулятор старих комп'ютерів\n\nАвтори: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, and others.\n\nВипускаєтся під ліцензією GNU General Public License версії 2 або більше пізніше. Додадкову інформацію см. у файлі LICENSE."
@@ -501,7 +501,7 @@ BEGIN
#define LIB_NAME_PCAP "libpcap"
#endif
IDS_2129 "Переконайтесь, що " LIB_NAME_PCAP " встановлений і ваше мережеве з'єднання, сумісне з " LIB_NAME_PCAP "."
IDS_2130 "Недопустимая конфигурация"
IDS_2130 "Неприпустима конфігурація"
#ifdef _WIN32
#define LIB_NAME_FREETYPE "freetype.dll"
#else
@@ -525,18 +525,18 @@ BEGIN
IDS_2136 "Не виходити"
IDS_2137 "Перезавантажити"
IDS_2138 "Не перезавантажувати"
IDS_2139 "Образи магнітооптичних дисків (*.IM?;*.MDI)\0*.IM?;*.MDI\0Всі файли (*.*)\0*.*\0"
IDS_2140 "Образи CD-ROM (*.ISO;*.CUE)\0*.ISO;*.CUE\0Всі файли (*.*)\0*.*\0"
IDS_2139 "Образи магнітооптичних дисків (*.IM?;*.MDI)\0*.IM?;*.MDI\0Усі файли (*.*)\0*.*\0"
IDS_2140 "Образи CD-ROM (*.ISO;*.CUE)\0*.ISO;*.CUE\0Усі файли (*.*)\0*.*\0"
IDS_2141 "Конфігурація пристрою %hs"
IDS_2142 "Монітор у сплячому режимі"
IDS_2143 "Шейдери OpenGL (*.GLSL)\0*.GLSL\0Все файлы (*.*)\0*.*\0"
IDS_2143 "Шейдери OpenGL (*.GLSL)\0*.GLSL\0Усі файли (*.*)\0*.*\0"
IDS_2144 "Параметри OpenGL"
IDS_2145 "Ви завантажуєте непідтримувану конфігурацію"
IDS_2146 "Вибір типів ЦП для цієї системної плати на даній емульованій машині відключено.\n\nЦе дозволяє вибрати процесор, який в іншому випадку не сумісний з вибраною материнською платою. Однак, ви можете зіткнутися з несумісністю з BIOS материнської плати або іншим ПО.\n\nВключення цього параметра офіційно не підтримується, і всі подані звіти про помилки можуть бути закриті як недійсні."
IDS_2147 "Продовжити"
IDS_2148 "Касета: %s"
IDS_2149 "Образи касет (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Всі файли (*.*)\0*. *\0"
IDS_2150 "Картидж %i: %ls"
IDS_2149 "Образи касет (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Усі файли (*.*)\0*. *\0"
IDS_2150 "Картридж %i: %ls"
IDS_2151 "Образи картриджів (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Всі файли (*.*)\0*.*\0"
IDS_2152 "Помилка ініціалізації рендерера"
IDS_2153 "Неможливо ініціалізувати рендерер OpenGL (3.0). Будь ласка, використовуйте інший рендерер."
@@ -570,7 +570,7 @@ BEGIN
IDS_4112 "Вкажіть правильне ім'я файлу."
IDS_4113 "Образ диску створено"
IDS_4114 "Переконайтеся, що файл є доступним для читання."
IDS_4115 "Переконайтеся, що файл зберігається в каталогі, доступному для запису."
IDS_4115 "Переконайтеся, що файл зберігається в каталог, який є доступним для запису."
IDS_4116 "Занадто великий образ диска"
IDS_4117 "Не забудьте розмітити та відформатувати новостворений диск."
IDS_4118 "Вибраний файл буде перезаписано. Ви впевнені, що хочете використовувати його?"