Merge branch 'master' into audio

This commit is contained in:
Jasmine Iwanek
2022-01-26 19:59:37 -05:00
25 changed files with 1583 additions and 215 deletions

View File

@@ -160,7 +160,8 @@ int GAMEBLASTER = 0; /* (C) sound option */
int GUS = 0; /* (C) sound option */
int SSI2001 = 0; /* (C) sound option */
int voodoo_enabled = 0; /* (C) video option */
uint32_t mem_size = 0; /* (C) memory size */
uint32_t mem_size = 0; /* (C) memory size (Installed on system board)*/
uint32_t isa_mem_size = 0; /* (C) memory size (ISA Memory Cards) */
int cpu_use_dynarec = 0; /* (C) cpu uses/needs Dyna */
int cpu = 0; /* (C) cpu type */
int fpu_type = 0; /* (C) fpu type */
@@ -976,9 +977,6 @@ pc_reset_hard_init(void)
/* Reset and reconfigure the Sound Card layer. */
sound_card_reset();
/* Reset any ISA memory cards. */
isamem_reset();
/* Reset any ISA RTC cards. */
isartc_reset();

View File

@@ -21,4 +21,12 @@ add_library(dev OBJECT bugger.c cassette.c cartridge.c hasp.c hwm.c hwm_lm75.c h
if(LASERXT)
target_compile_definitions(dev PRIVATE USE_LASERXT)
endif()
if(ISAMEM_RAMPAGE)
target_compile_definitions(dev PRIVATE USE_ISAMEM_RAMPAGE)
endif()
if(ISAMEM_IAB)
target_compile_definitions(dev PRIVATE USE_ISAMEM_IAB)
endif()

View File

@@ -54,15 +54,29 @@ ibm_5161_in(uint16_t port, void *priv)
ret = dev->regs[port & 0x0007];
switch (port) {
case 0x211:
case 0x215:
case 0x210: /* Write to latch expansion bus data (ED0-ED7) */
/* Read to verify expansion bus data (ED0-ED7) */
break;
case 0x214: /* Write to latch data bus bits (DO - 07) */
/* Read data bus bits (DO - D7) */
break;
case 0x211: /* Read high-order address bits (A8 - A 15) */
case 0x215: /* Read high-order address bits (A8 - A 15) */
ret = (get_last_addr() >> 8) & 0xff;
break;
case 0x212:
case 0x216:
case 0x212: /* Read low-order address bits (A0 - A7) */
case 0x216: /* Read low-order address bits (A0 - A7) */
ret = get_last_addr() & 0xff;
break;
case 0x213:
case 0x213: /* Write 00 to disable expansion unit */
/* Write 01 to enable expansion unit */
/* Read status of expansion unit
00 = enable/disable
01 = wait-state request flag
02-03 = not used
04-07 = switch position
1 = Off
0 =On */
ret = dev->regs[3] & 0x01;
break;
}

View File

@@ -84,6 +84,16 @@
#include "cpu.h"
#define ISAMEM_IBMXT_CARD 0
#define ISAMEM_GENXT_CARD 1
#define ISAMEM_IBMAT_CARD 2
#define ISAMEM_GENAT_CARD 3
#define ISAMEM_P5PAK_CARD 4
#define ISAMEM_A6PAK_CARD 5
#define ISAMEM_EMS5150_CARD 6
#define ISAMEM_EV159_CARD 10
#define ISAMEM_RAMPAGEXT_CARD 11
#define ISAMEM_ABOVEBOARD_CARD 12
#define ISAMEM_DEBUG 0
@@ -95,6 +105,9 @@
#define EMS_PGSIZE (16 << 10) /* one page is this big */
#define EMS_MAXPAGE 4 /* number of viewport pages */
#define EXTRAM_CONVENTIONAL 0
#define EXTRAM_HIGH 1
#define EXTRAM_XMS 2
typedef struct {
int8_t enabled; /* 1=ENABLED */
@@ -398,28 +411,31 @@ isamem_init(const device_t *info)
/* Do per-board initialization. */
tot = 0;
switch(dev->board) {
case 0: /* IBM PC/XT Memory Expansion Card */
case 2: /* Paradise Systems 5-PAK */
case ISAMEM_IBMXT_CARD: /* IBM PC/XT Memory Expansion Card */
case ISAMEM_GENXT_CARD: /* Generic PC/XT Memory Expansion Card */
case ISAMEM_P5PAK_CARD: /* Paradise Systems 5-PAK */
case ISAMEM_A6PAK_CARD: /* AST SixPakPlus */
dev->total_size = device_get_config_int("size");
dev->start_addr = device_get_config_int("start");
tot = dev->total_size;
break;
case 1: /* IBM PC/AT Memory Expansion Card */
case ISAMEM_IBMAT_CARD: /* IBM PC/AT Memory Expansion Card */
case ISAMEM_GENAT_CARD: /* Generic PC/AT Memory Expansion Card */
dev->total_size = device_get_config_int("size");
dev->start_addr = device_get_config_int("start");
tot = dev->total_size;
dev->flags |= FLAG_WIDE;
break;
case 3: /* Micro Mainframe EMS-5150(T) */
case ISAMEM_EMS5150_CARD: /* Micro Mainframe EMS-5150(T) */
dev->base_addr = device_get_config_hex16("base");
dev->total_size = device_get_config_int("size");
dev->frame_addr = 0xD0000;
dev->flags |= (FLAG_EMS | FLAG_CONFIG);
break;
case 10: /* Everex EV-159 RAM 3000 */
case ISAMEM_EV159_CARD: /* Everex EV-159 RAM 3000 */
dev->base_addr = device_get_config_hex16("base");
dev->total_size = device_get_config_int("size");
dev->start_addr = device_get_config_int("start");
@@ -433,7 +449,8 @@ isamem_init(const device_t *info)
dev->frame_addr = 0xE0000;
break;
case 11:
case ISAMEM_RAMPAGEXT_CARD: /* AST RAMpage/XT */
case ISAMEM_ABOVEBOARD_CARD: /* Intel AboveBoard */
dev->base_addr = device_get_config_hex16("base");
dev->total_size = device_get_config_int("size");
dev->start_addr = device_get_config_int("start");
@@ -496,8 +513,8 @@ dev->frame_addr = 0xE0000;
t = tot;
isamem_log("ISAMEM: RAM at %05iKB (%iKB)\n", addr>>10, t>>10);
dev->ext_ram[0].ptr = ptr;
dev->ext_ram[0].base = addr;
dev->ext_ram[EXTRAM_CONVENTIONAL].ptr = ptr;
dev->ext_ram[EXTRAM_CONVENTIONAL].base = addr;
/* Create, initialize and enable the low-memory mapping. */
mem_mapping_add(&dev->low_mapping, addr, t,
@@ -507,7 +524,7 @@ dev->frame_addr = 0xE0000;
ram_writeb,
(dev->flags&FLAG_WIDE) ? ram_writew : NULL,
NULL,
ptr, MEM_MAPPING_EXTERNAL, &dev->ext_ram[0]);
ptr, MEM_MAPPING_EXTERNAL, &dev->ext_ram[EXTRAM_CONVENTIONAL]);
/* Tell the memory system this is external RAM. */
mem_set_mem_state(addr, t,
@@ -531,8 +548,8 @@ dev->frame_addr = 0xE0000;
isamem_log("ISAMEM: RAM at %05iKB (%iKB)\n", addr>>10, t>>10);
dev->ext_ram[1].ptr = ptr;
dev->ext_ram[1].base = addr + tot;
dev->ext_ram[EXTRAM_HIGH].ptr = ptr;
dev->ext_ram[EXTRAM_HIGH].base = addr + tot;
/* Update and enable the remap. */
mem_mapping_set(&ram_remapped_mapping,
@@ -540,7 +557,7 @@ dev->frame_addr = 0xE0000;
ram_readb, ram_readw, NULL,
ram_writeb, ram_writew, NULL,
ptr, MEM_MAPPING_EXTERNAL,
&dev->ext_ram[1]);
&dev->ext_ram[EXTRAM_HIGH]);
mem_mapping_disable(&ram_remapped_mapping);
/* Tell the memory system this is external RAM. */
@@ -565,14 +582,14 @@ dev->frame_addr = 0xE0000;
t = tot;
isamem_log("ISAMEM: RAM at %05iKB (%iKB)\n", addr>>10, t>>10);
dev->ext_ram[2].ptr = ptr;
dev->ext_ram[2].base = addr;
dev->ext_ram[EXTRAM_XMS].ptr = ptr;
dev->ext_ram[EXTRAM_XMS].base = addr;
/* Create, initialize and enable the high-memory mapping. */
mem_mapping_add(&dev->high_mapping, addr, t,
ram_readb, ram_readw, NULL,
ram_writeb, ram_writew, NULL,
ptr, MEM_MAPPING_EXTERNAL, &dev->ext_ram[2]);
ptr, MEM_MAPPING_EXTERNAL, &dev->ext_ram[EXTRAM_XMS]);
/* Tell the memory system this is external RAM. */
mem_set_mem_state(addr, t, MEM_READ_EXTERNAL | MEM_WRITE_EXTERNAL);
@@ -583,6 +600,8 @@ dev->frame_addr = 0xE0000;
addr += t;
}
isa_mem_size += dev->total_size - (k >> 10);
/* If EMS is enabled, use the remainder for EMS. */
if (dev->flags & FLAG_EMS) {
/* EMS 3.2 cannot have more than 2048KB per board. */
@@ -663,7 +682,7 @@ static const device_config_t ibmxt_config[] =
},
{
"start", "Start Address", CONFIG_SPINNER, "", 256, "",
{ 0, 640-64, 64 },
{ 0, 576, 64 },
{ { 0 } }
},
{
@@ -674,23 +693,50 @@ static const device_config_t ibmxt_config[] =
static const device_t ibmxt_device = {
"IBM PC/XT Memory Expansion",
DEVICE_ISA,
0,
ISAMEM_IBMXT_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
ibmxt_config
};
static const device_config_t genericxt_config[] =
{
{
"size", "Memory Size", CONFIG_SPINNER, "", 16, "",
{ 0, 640, 16 },
{ { 0 } }
},
{
"start", "Start Address", CONFIG_SPINNER, "", 0, "",
{ 0, 624, 16 },
{ { 0 } }
},
{
"", "", -1
}
};
static const device_t genericxt_device = {
"Generic PC/XT Memory Expansion",
DEVICE_ISA,
ISAMEM_GENXT_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
genericxt_config
};
static const device_config_t ibmat_config[] =
{
{
"size", "Memory Size", CONFIG_SPINNER, "", 512, "",
{ 0, 4096, 512 },
{ 0, 12288, 512 },
{ { 0 } }
},
{
"start", "Start Address", CONFIG_SPINNER, "", 512, "",
{ 0, 16128, 128 },
{ 0, 15872, 512 },
{ { 0 } }
},
{
@@ -701,13 +747,40 @@ static const device_config_t ibmat_config[] =
static const device_t ibmat_device = {
"IBM PC/AT Memory Expansion",
DEVICE_ISA,
1,
ISAMEM_IBMAT_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
ibmat_config
};
static const device_config_t genericat_config[] =
{
{
"size", "Memory Size", CONFIG_SPINNER, "", 512, "",
{ 0, 16384, 512 },
{ { 0 } }
},
{
"start", "Start Address", CONFIG_SPINNER, "", 512, "",
{ 0, 15872, 128 },
{ { 0 } }
},
{
"", "", -1
}
};
static const device_t genericat_device = {
"Generic PC/AT Memory Expansion",
DEVICE_ISA,
ISAMEM_GENAT_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
genericat_config
};
static const device_config_t p5pak_config[] =
{
{
@@ -728,13 +801,40 @@ static const device_config_t p5pak_config[] =
static const device_t p5pak_device = {
"Paradise Systems 5-PAK",
DEVICE_ISA,
2,
ISAMEM_P5PAK_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
p5pak_config
};
static const device_config_t a6pak_config[] =
{
{
"size", "Memory Size", CONFIG_SPINNER, "", 64, "",
{ 0, 576, 64 },
{ { 0 } }
},
{
"start", "Start Address", CONFIG_SPINNER, "", 256, "",
{ 64, 512, 64 },
{ { 0 } }
},
{
"", "", -1
}
};
static const device_t a6pak_device = {
"AST SixPakPlus",
DEVICE_ISA,
ISAMEM_A6PAK_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
a6pak_config
};
static const device_config_t ems5150_config[] =
{
{
@@ -774,7 +874,7 @@ static const device_config_t ems5150_config[] =
static const device_t ems5150_device = {
"Micro Mainframe EMS-5150(T)",
DEVICE_ISA,
3,
ISAMEM_EMS5150_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
ems5150_config
@@ -877,7 +977,7 @@ static const device_config_t ev159_config[] =
static const device_t ev159_device = {
"Everex EV-159 RAM 3000 Deluxe",
DEVICE_ISA,
10,
ISAMEM_EV159_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
ev159_config
@@ -975,10 +1075,10 @@ static const device_config_t rampage_config[] =
}
};
static const device_t isamem_rampage_device = {
static const device_t rampage_device = {
"AST RAMpage/XT",
DEVICE_ISA,
11,
ISAMEM_RAMPAGEXT_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
rampage_config
@@ -986,14 +1086,119 @@ static const device_t isamem_rampage_device = {
#endif
#ifdef USE_ISAMEM_IAB
static const device_config_t iab_config[] =
{
{
"base", "Address", CONFIG_HEX16, "", 0x0258, "", { 0 },
{
{
"208H", 0x0208
},
{
"218H", 0x0218
},
{
"258H", 0x0258
},
{
"268H", 0x0268
},
{
"2A8H", 0x02A8
},
{
"2B8H", 0x02B8
},
{
"2E8H", 0x02E8
},
{
""
}
},
},
{
"frame", "Frame Address", CONFIG_HEX20, "", 0, "", { 0 },
{
{
"Disabled", 0x00000
},
{
"C000H", 0xC0000
},
{
"D000H", 0xD0000
},
{
"E000H", 0xE0000
},
{
""
}
},
},
{
"width", "I/O Width", CONFIG_SELECTION, "", 8, "", { 0 },
{
{
"8-bit", 8
},
{
"16-bit", 16
},
{
""
}
},
},
{
"speed", "Transfer Speed", CONFIG_SELECTION, "", 0, "", { 0 },
{
{
"Standard", 0
},
{
"High-Speed", 1
},
{
""
}
}
},
{
"size", "Memory Size", CONFIG_SPINNER, "", 128,
"",
{ 0, 8192, 128 },
{ 0 }
},
{
"", "", -1
}
};
static const device_t iab_device = {
"Intel AboveBoard",
DEVICE_ISA,
ISAMEM_ABOVEBOARD_CARD,
isamem_init, isamem_close, NULL,
{ NULL }, NULL, NULL,
iab_config
};
#endif
static const struct {
const char *internal_name;
const device_t *dev;
} boards[] = {
{ "none", NULL },
{ "none", NULL },
{ "ibmxt", &ibmxt_device },
{ "genericxt", &genericxt_device },
{ "ibmat", &ibmat_device },
{ "genericat", &genericat_device },
{ "p5pak", &p5pak_device },
{ "a6pak", &a6pak_device },
{ "ems5150", &ems5150_device },
{ "ev159", &ev159_device },
#ifdef USE_ISAMEM_BRAT
@@ -1003,9 +1208,9 @@ static const struct {
{ "rampage", &rampage_device },
#endif
#ifdef USE_ISAMEM_IAB
{ "iab", &iab_device },
{ "iab", &iab_device },
#endif
{ "", NULL }
{ "", NULL }
};
@@ -1014,6 +1219,9 @@ isamem_reset(void)
{
int k, i;
/* We explicitly set to zero here or bad things happen */
isa_mem_size = 0;
for (i = 0; i < ISAMEM_MAX; i++) {
k = isamem_type[i];
if (k == 0) continue;

View File

@@ -83,6 +83,11 @@
#include <86box/isartc.h>
#define ISARTC_EV170 0
#define ISARTC_DTK 1
#define ISARTC_P5PAK 2
#define ISARTC_A6PAK 3
#define ISARTC_DEBUG 0
@@ -506,7 +511,7 @@ isartc_init(const device_t *info)
/* Do per-board initialization. */
switch(dev->board) {
case 0: /* Everex EV-170 Magic I/O */
case ISARTC_EV170: /* Everex EV-170 Magic I/O */
dev->flags |= FLAG_YEAR80;
dev->base_addr = device_get_config_hex16("base");
dev->base_addrsz = 32;
@@ -519,7 +524,7 @@ isartc_init(const device_t *info)
dev->year = MM67_AL_DOM; /* year, NON STANDARD */
break;
case 1: /* DTK PII-147 Hexa I/O Plus */
case ISARTC_DTK: /* DTK PII-147 Hexa I/O Plus */
dev->flags |= FLAG_YEARBCD;
dev->base_addr = device_get_config_hex16("base");
dev->base_addrsz = 32;
@@ -531,7 +536,8 @@ isartc_init(const device_t *info)
dev->year = MM67_AL_HUNTEN; /* year, NON STANDARD */
break;
case 2: /* Paradise Systems 5PAK */
case ISARTC_P5PAK: /* Paradise Systems 5PAK */
case ISARTC_A6PAK: /* AST SixPakPlus */
dev->flags |= FLAG_YEAR80;
dev->base_addr = 0x02c0;
dev->base_addrsz = 32;
@@ -627,7 +633,7 @@ static const device_config_t ev170_config[] = {
static const device_t ev170_device = {
"Everex EV-170 Magic I/O",
DEVICE_ISA,
0,
ISARTC_EV170,
isartc_init, isartc_close, NULL,
{ NULL }, NULL, NULL,
ev170_config
@@ -657,7 +663,7 @@ static const device_config_t pii147_config[] = {
static const device_t pii147_device = {
"DTK PII-147 Hexa I/O Plus",
DEVICE_ISA,
1,
ISARTC_DTK,
isartc_init, isartc_close, NULL,
{ NULL }, NULL, NULL,
pii147_config
@@ -693,13 +699,49 @@ static const device_config_t p5pak_config[] = {
static const device_t p5pak_device = {
"Paradise Systems 5-PAK",
DEVICE_ISA,
2,
ISARTC_P5PAK,
isartc_init, isartc_close, NULL,
{ NULL }, NULL, NULL,
p5pak_config
};
static const device_config_t a6pak_config[] = {
{
"irq", "IRQ", CONFIG_SELECTION, "", -1, "", { 0 },
{
{
"Disabled", -1
},
{
"IRQ2", 2
},
{
"IRQ3", 3
},
{
"IRQ5", 5
},
{
""
}
},
},
{
"", "", -1
}
};
static const device_t a6pak_device = {
"AST SixPakPlus",
DEVICE_ISA,
ISARTC_A6PAK,
isartc_init, isartc_close, NULL,
{ NULL }, NULL, NULL,
a6pak_config
};
static const struct {
const char *internal_name;
const device_t *dev;
@@ -708,6 +750,7 @@ static const struct {
{ "ev170", &ev170_device },
{ "pii147", &pii147_device },
{ "p5pak", &p5pak_device },
{ "a6pak", &a6pak_device },
{ "", NULL },
};

View File

@@ -55,6 +55,17 @@
#define STAT_IFULL 0x02
#define STAT_OFULL 0x01
// Keyboard Types
#define KBD_TYPE_PC81 0
#define KBD_TYPE_PC82 1
#define KBD_TYPE_XT82 2
#define KBD_TYPE_XT86 3
#define KBD_TYPE_COMPAQ 4
#define KBD_TYPE_TANDY 5
#define KBD_TYPE_TOSHIBA 6
#define KBD_TYPE_VTECH 7
#define KBD_TYPE_OLIVETTI 8
#define KBD_TYPE_ZENITH 9
typedef struct {
int want_irq;
@@ -357,8 +368,8 @@ kbd_log(const char *fmt, ...)
#endif
static uint8_t
get_fdd_switch_settings(){
get_fdd_switch_settings() {
int i, fdd_count = 0;
for (i = 0; i < FDD_NUM; i++) {
@@ -369,20 +380,18 @@ get_fdd_switch_settings(){
if (!fdd_count)
return 0x00;
else
return ((fdd_count - 1) << 6) | 0x01;
return ((fdd_count - 1) << 6) | 0x01;
}
static uint8_t
get_videomode_switch_settings(){
get_videomode_switch_settings() {
if (video_is_mda())
return 0x30;
else if (video_is_cga())
return 0x20; /* 0x10 would be 40x25 */
else
return 0x00;
return 0x00;
}
static void
@@ -392,7 +401,7 @@ kbd_poll(void *priv)
timer_advance_u64(&kbd->send_delay_timer, 1000 * TIMER_USEC);
if (!(kbd->pb & 0x40) && (kbd->type != 5))
if (!(kbd->pb & 0x40) && (kbd->type != KBD_TYPE_TANDY))
return;
if (kbd->want_irq) {
@@ -504,7 +513,7 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
xtkbd_t *kbd = (xtkbd_t *)priv;
switch (port) {
case 0x61:
case 0x61: /* Keyboard Control Register (aka Port B) */
if (!(kbd->pb & 0x40) && (val & 0x40)) {
key_queue_start = key_queue_end = 0;
kbd->want_irq = 0;
@@ -514,9 +523,9 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
kbd->pb = val;
ppi.pb = val;
timer_process();
timer_process();
if ((kbd->type <= 1) && (cassette != NULL))
if (((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)) && (cassette != NULL))
pc_cas_set_motor(cassette, (kbd->pb & 0x08) == 0);
speaker_update();
@@ -535,13 +544,13 @@ kbd_write(uint16_t port, uint8_t val, void *priv)
}
#ifdef ENABLE_KEYBOARD_XT_LOG
if (kbd->type <= 1)
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82))
kbd_log("Cassette motor is %s\n", !(val & 0x08) ? "ON" : "OFF");
#endif
break;
#ifdef ENABLE_KEYBOARD_XT_LOG
case 0x62:
if (kbd->type <= 1)
case 0x62: /* Switch Register (aka Port C) */
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82))
kbd_log("Cassette IN is %i\n", !!(val & 0x10));
break;
#endif
@@ -554,16 +563,17 @@ kbd_read(uint16_t port, void *priv)
{
xtkbd_t *kbd = (xtkbd_t *)priv;
uint8_t ret = 0xff;
switch (port) {
case 0x60:
if ((kbd->pb & 0x80) && ((kbd->type <= 3) || (kbd->type == 9))) {
if (kbd->type <= 1)
case 0x60: /* Keyboard Data Register (aka Port A) */
if ((kbd->pb & 0x80) && ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)
|| (kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86)
|| (kbd->type == KBD_TYPE_ZENITH))) {
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82))
ret = (kbd->pd & ~0x02) | (hasfpu ? 0x02 : 0x00);
else if ((kbd->type == 2) || (kbd->type == 3))
else if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86))
ret = 0xff; /* According to Ruud on the PCem forum, this is supposed to return 0xFF on the XT. */
else if (kbd->type == 9) {
else if (kbd->type == KBD_TYPE_ZENITH) {
/* Zenith Data Systems Z-151
* SW1 switch settings:
* bits 6-7: floppy drive number
@@ -586,32 +596,41 @@ kbd_read(uint16_t port, void *priv)
ret = kbd->pa;
break;
case 0x61:
case 0x61: /* Keyboard Control Register (aka Port B) */
ret = kbd->pb;
break;
case 0x62:
if (kbd->type == 0)
ret = 0x00;
else if (kbd->type == 1) {
if (kbd->pb & 0x04)
ret = ((mem_size - 64) / 32) & 0x0f;
case 0x62: /* Switch Register (aka Port C) */
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)) {
if (kbd->pb & 0x04) /* PB2 */
switch (mem_size + isa_mem_size) {
case 64:
case 48:
case 32:
case 16:
ret = 0x00;
break;
default:
ret = (((mem_size + isa_mem_size) - 64) / 32) & 0x0f;
break;
}
else
ret = ((mem_size - 64) / 32) >> 4;
} else if (kbd->type == 8 || kbd->type == 9) {
ret = (((mem_size + isa_mem_size) - 64) / 32) >> 4;
} else if (kbd->type == KBD_TYPE_OLIVETTI
|| kbd->type == KBD_TYPE_ZENITH) {
/* Olivetti M19 or Zenith Data Systems Z-151 */
if (kbd->pb & 0x04)
if (kbd->pb & 0x04) /* PB2 */
ret = kbd->pd & 0xbf;
else
else
ret = kbd->pd >> 4;
} else {
if (kbd->pb & 0x08)
if (kbd->pb & 0x08) /* PB3 */
ret = kbd->pd >> 4;
else {
/* LaserXT = Always 512k RAM;
LaserXT/3 = Bit 0: set = 512k, clear = 256k. */
#if defined(DEV_BRANCH) && defined(USE_LASERXT)
if (kbd->type == 6)
if (kbd->type == KBD_TYPE_TOSHIBA)
ret = ((mem_size == 512) ? 0x0d : 0x0c) | (hasfpu ? 0x02 : 0x00);
else
#endif
@@ -622,19 +641,21 @@ kbd_read(uint16_t port, void *priv)
/* This is needed to avoid error 131 (cassette error).
This is serial read: bit 5 = clock, bit 4 = data, cassette header is 256 x 0xff. */
if (kbd->type <= 1) {
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)) {
if (cassette == NULL)
ret |= (ppispeakon ? 0x10 : 0);
else
ret |= (pc_cas_get_inp(cassette) ? 0x10 : 0);
}
if (kbd->type == 5)
if (kbd->type == KBD_TYPE_TANDY)
ret |= (tandy1k_eeprom_read() ? 0x10 : 0);
break;
case 0x63:
if ((kbd->type == 2) || (kbd->type == 3) || (kbd->type == 4) || (kbd->type == 6))
case 0x63: /* Keyboard Configuration Register (aka Port D) */
if ((kbd->type == KBD_TYPE_XT82) || (kbd->type == KBD_TYPE_XT86)
|| (kbd->type == KBD_TYPE_COMPAQ)
|| (kbd->type == KBD_TYPE_TOSHIBA))
ret = kbd->pd;
break;
}
@@ -685,9 +706,14 @@ kbd_init(const device_t *info)
video_reset(gfxcard);
if ((kbd->type <= 3) || (kbd->type == 4) || (kbd->type == 6) || (kbd->type == 8)) {
if ((kbd->type == KBD_TYPE_PC81) || (kbd->type == KBD_TYPE_PC82)
|| (kbd->type == KBD_TYPE_XT82) || (kbd->type <= KBD_TYPE_XT86)
|| (kbd->type == KBD_TYPE_COMPAQ)
|| (kbd->type == KBD_TYPE_TOSHIBA)
|| (kbd->type == KBD_TYPE_OLIVETTI)) {
/* DIP switch readout: bit set = OFF, clear = ON. */
if (kbd->type == 8)
if (kbd->type == KBD_TYPE_OLIVETTI)
/* Olivetti M19
* Jumpers J1, J2 - monitor type.
* 01 - mono (high-res)
@@ -699,10 +725,13 @@ kbd_init(const device_t *info)
/* Switches 7, 8 - floppy drives. */
kbd->pd = get_fdd_switch_settings();
/* Siitches 5, 6 - video card type */
kbd->pd |= get_videomode_switch_settings();
/* Switches 3, 4 - memory size. */
if ((kbd->type == 3) || (kbd->type == 4) || (kbd->type == 6)) {
if ((kbd->type == KBD_TYPE_XT86)
|| (kbd->type == KBD_TYPE_COMPAQ)
|| (kbd->type == KBD_TYPE_TOSHIBA)) {
switch (mem_size) {
case 256:
kbd->pd |= 0x00;
@@ -718,34 +747,49 @@ kbd_init(const device_t *info)
kbd->pd |= 0x0c;
break;
}
} else if (kbd->type >= 1) {
} else if (kbd->type == KBD_TYPE_XT82) {
switch (mem_size) {
case 64:
case 64: /* 1x64k */
kbd->pd |= 0x00;
break;
case 128:
case 128: /* 2x64k */
kbd->pd |= 0x04;
break;
case 192:
case 192: /* 3x64k */
kbd->pd |= 0x08;
break;
case 256:
case 256: /* 4x64k */
default:
kbd->pd |= 0x0c;
break;
}
} else {
} else if (kbd->type == KBD_TYPE_PC82) {
switch (mem_size) {
case 16:
kbd->pd |= 0x00;
break;
case 32:
kbd->pd |= 0x04;
break;
case 48:
case 192: /* 3x64k, not supported by stock BIOS due to bugs */
kbd->pd |= 0x08;
break;
case 64:
case 64: /* 4x16k */
case 96: /* 2x32k + 2x16k */
case 128: /* 4x32k */
case 160: /* 2x64k + 2x16k */
case 224: /* 3x64k + 1x32k */
case 256: /* 4x64k */
default:
kbd->pd |= 0x0c;
break;
}
} else { /* really just the PC '81 */
switch (mem_size) {
case 16: /* 1x16k */
kbd->pd |= 0x00;
break;
case 32: /* 2x16k */
kbd->pd |= 0x04;
break;
case 48: /* 3x16k */
kbd->pd |= 0x08;
break;
case 64: /* 4x16k */
default:
kbd->pd |= 0x0c;
break;
@@ -755,7 +799,7 @@ kbd_init(const device_t *info)
/* Switch 2 - 8087 FPU. */
if (hasfpu)
kbd->pd |= 0x02;
} else if (kbd-> type == 9) {
} else if (kbd-> type == KBD_TYPE_ZENITH) {
/* Zenith Data Systems Z-151
* SW2 switch settings:
* bit 7: monitor frequency
@@ -799,8 +843,8 @@ kbd_init(const device_t *info)
keyboard_set_table(scancode_xt);
is_tandy = (kbd->type == 5);
is_t1x00 = (kbd->type == 6);
is_tandy = (kbd->type == KBD_TYPE_TANDY);
is_t1x00 = (kbd->type == KBD_TYPE_TOSHIBA);
is_amstrad = 0;
@@ -831,7 +875,7 @@ kbd_close(void *priv)
const device_t keyboard_pc_device = {
"IBM PC Keyboard (1981)",
0,
0,
KBD_TYPE_PC81,
kbd_init,
kbd_close,
kbd_reset,
@@ -841,7 +885,7 @@ const device_t keyboard_pc_device = {
const device_t keyboard_pc82_device = {
"IBM PC Keyboard (1982)",
0,
1,
KBD_TYPE_PC82,
kbd_init,
kbd_close,
kbd_reset,
@@ -851,7 +895,7 @@ const device_t keyboard_pc82_device = {
const device_t keyboard_xt_device = {
"XT (1982) Keyboard",
0,
2,
KBD_TYPE_XT82,
kbd_init,
kbd_close,
kbd_reset,
@@ -861,7 +905,7 @@ const device_t keyboard_xt_device = {
const device_t keyboard_xt86_device = {
"XT (1986) Keyboard",
0,
3,
KBD_TYPE_XT86,
kbd_init,
kbd_close,
kbd_reset,
@@ -871,7 +915,7 @@ const device_t keyboard_xt86_device = {
const device_t keyboard_xt_compaq_device = {
"Compaq Portable Keyboard",
0,
4,
KBD_TYPE_COMPAQ,
kbd_init,
kbd_close,
kbd_reset,
@@ -881,7 +925,7 @@ const device_t keyboard_xt_compaq_device = {
const device_t keyboard_tandy_device = {
"Tandy 1000 Keyboard",
0,
5,
KBD_TYPE_TANDY,
kbd_init,
kbd_close,
kbd_reset,
@@ -891,7 +935,7 @@ const device_t keyboard_tandy_device = {
const device_t keyboard_xt_t1x00_device = {
"Toshiba T1x00 Keyboard",
0,
6,
KBD_TYPE_TOSHIBA,
kbd_init,
kbd_close,
kbd_reset,
@@ -902,7 +946,7 @@ const device_t keyboard_xt_t1x00_device = {
const device_t keyboard_xt_lxt3_device = {
"VTech Laser XT3 Keyboard",
0,
7,
KBD_TYPE_VTECH,
kbd_init,
kbd_close,
kbd_reset,
@@ -913,7 +957,7 @@ const device_t keyboard_xt_lxt3_device = {
const device_t keyboard_xt_olivetti_device = {
"Olivetti XT Keyboard",
0,
8,
KBD_TYPE_OLIVETTI,
kbd_init,
kbd_close,
kbd_reset,
@@ -923,7 +967,7 @@ const device_t keyboard_xt_olivetti_device = {
const device_t keyboard_xt_zenith_device = {
"Zenith XT Keyboard",
0,
9,
KBD_TYPE_ZENITH,
kbd_init,
kbd_close,
kbd_reset,

View File

@@ -2311,7 +2311,7 @@ fdc_reset(void *priv)
fdc->max_track = (fdc->flags & FDC_FLAG_MORE_TRACKS) ? 85 : 79;
fdc_remove(fdc);
fdc_set_base(fdc, (fdc->flags & FDC_FLAG_PCJR) ? 0x00f0 : 0x03f0);
fdc_set_base(fdc, (fdc->flags & FDC_FLAG_PCJR) ? FDC_PRIMARY_PCJR_ADDR : FDC_PRIMARY_ADDR);
current_drive = 0;
@@ -2342,12 +2342,12 @@ fdc_init(const device_t *info)
fdc->flags = info->local;
fdc->irq = 6;
fdc->irq = FDC_PRIMARY_IRQ;
if (fdc->flags & FDC_FLAG_PCJR)
timer_add(&fdc->watchdog_timer, fdc_watchdog_poll, fdc, 0);
else
fdc->dma_ch = 2;
fdc->dma_ch = FDC_PRIMARY_DMA;
fdc_log("FDC added: %04X (flags: %08X)\n", fdc->base_address, fdc->flags);

View File

@@ -101,7 +101,7 @@ b215_init(const device_t *info)
rom_init(&dev->rom, ROM_B215, ROM_ADDR, 0x2000, 0x1fff, 0, MEM_MAPPING_EXTERNAL);
dev->fdc_controller = device_add(&fdc_um8398_device);
io_sethandler(0x03f0, 1, b215_read, NULL, NULL, NULL, NULL, NULL, dev);
io_sethandler(FDC_PRIMARY_ADDR, 1, b215_read, NULL, NULL, NULL, NULL, NULL, dev);
return dev;
}

View File

@@ -122,7 +122,8 @@ extern int sound_is_float, /* (C) sound uses FP values */
GUS, GUSMAX, /* (C) sound option */
SSI2001, /* (C) sound option */
voodoo_enabled; /* (C) video option */
extern uint32_t mem_size; /* (C) memory size */
extern uint32_t mem_size; /* (C) memory size (Installed on system board) */
extern uint32_t isa_mem_size; /* (C) memory size (ISA Memory Cards) */
extern int cpu, /* (C) cpu type */
cpu_use_dynarec, /* (C) cpu uses/needs Dyna */
fpu_type; /* (C) fpu type */

View File

@@ -24,6 +24,22 @@
extern int fdc_type;
#define FDC_PRIMARY_ADDR 0x03f0
#define FDC_PRIMARY_IRQ 6
#define FDC_PRIMARY_DMA 2
#define FDC_PRIMARY_PCJR_ADDR 0x00f0
#define FDC_PRIMARY_PCJR_IRQ 6
#define FDC_PRIMARY_PCJR_DMA 2
#define FDC_SECONDARY_ADDR 0x0370
#define FDC_SECONDARY_IRQ 6
#define FDC_SECONDARY_DMA 2
#define FDC_TERTIARY_ADDR 0x0360
#define FDC_TERTIARY_IRQ 6
#define FDC_TERTIARY_DMA 2
#define FDC_QUATERNARY_ADDR 0x03e0
#define FDC_QUATERNARY_IRQ 6
#define FDC_QUATERNARY_DMA 2
#define FDC_FLAG_PCJR 0x01 /* PCjr */
#define FDC_FLAG_DISKCHG_ACTLOW 0x02 /* Amstrad, PS/1, PS/2 ISA */
#define FDC_FLAG_AT 0x04 /* AT+, PS/x */

View File

@@ -19,6 +19,8 @@
* Copyright 2016-2020 Miran Grca.
* Copyright 2016-2020 TheCollector1995.
*/
#ifndef SOUND_MPU401_H
# define SOUND_MPU401_H
#define MPU401_VERSION 0x15
#define MPU401_REVISION 0x01
@@ -160,3 +162,6 @@ extern void mpu401_irq_attach(mpu_t *mpu, void (*ext_irq_update)(void *priv, int
extern int MPU401_InputSysex(void *p, uint8_t *buffer, uint32_t len, int abort);
extern void MPU401_InputMsg(void *p, uint8_t *msg, uint32_t len);
#endif /*SOUND_MPU401_H*/

View File

@@ -40,6 +40,7 @@
#include "cpu.h"
#include <86box/video.h>
#include <86box/machine.h>
#include <86box/isamem.h>
int bios_only = 0;
@@ -101,6 +102,9 @@ machine_init_ex(int m)
/* Prepare some video-related things if we're using internal
or no video. */
video_pre_reset(gfxcard);
/* Reset any ISA memory cards. */
isamem_reset();
}
/* All good, boot the machine! */

View File

@@ -105,7 +105,7 @@ const machine_type_t machine_types[] = {
const machine_t machines[] = {
/* 8088 Machines */
{ "[8088] IBM PC (1981)", "ibmpc", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 16, 64, 16, 0, machine_pc_init, NULL },
{ "[8088] IBM PC (1982)", "ibmpc82", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 256, 256, 256, 0, machine_pc82_init, NULL },
{ "[8088] IBM PC (1982)", "ibmpc82", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 64, 256, 64, 0, machine_pc82_init, NULL },
{ "[8088] IBM PCjr", "ibmpcjr", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 4772728, 4772728, 0, 0, 0, 0, MACHINE_PC | MACHINE_VIDEO_FIXED | MACHINE_CARTRIDGE, 128, 640, 128, 0, machine_pcjr_init, pcjr_get_device },
{ "[8088] IBM XT (1982)", "ibmxt", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 64, 256, 64, 0, machine_xt_init, NULL },
{ "[8088] IBM XT (1986)", "ibmxt86", MACHINE_TYPE_8088, CPU_PKG_8088, 0, 0, 0, 0, 0, 0, 0, MACHINE_PC, 256, 640, 64, 0, machine_xt86_init, NULL },

View File

@@ -1259,6 +1259,9 @@ static const device_config_t aha_154xb_config[] = {
{
"D800H", 0xd8000
},
{
"DC00H", 0xdc000
},
{
""
}
@@ -1357,6 +1360,9 @@ static const device_config_t aha_154x_config[] = {
{
"D800H", 0xd8000
},
{
"DC00H", 0xdc000
},
{
""
}
@@ -1450,12 +1456,21 @@ static const device_config_t aha_154xcf_config[] = {
{
"C800H", 0xc8000
},
{
"CC00H", 0xcc000
},
{
"D000H", 0xd0000
},
{
"D400H", 0xd4000
},
{
"D800H", 0xd8000
},
{
"DC00H", 0xdc000
},
{
""
}

View File

@@ -9,9 +9,11 @@
#include <86box/dma.h>
#include <86box/pic.h>
#include <86box/device.h>
#include <86box/gameport.h>
#include <86box/nvr.h>
#include <86box/sound.h>
#include <86box/filters.h>
#include <86box/midi.h>
#include <86box/snd_opl.h>
#include <86box/snd_ym7128.h>
@@ -38,6 +40,10 @@ typedef struct adgold_t
int adgold_mma_intpos[2];
pc_timer_t adgold_mma_timer_count;
uint8_t adgold_midi_ctrl, midi_queue[16];
int midi_r, midi_w;
int uart_in, uart_out, sysex;
struct
{
@@ -54,6 +60,7 @@ typedef struct adgold_t
int fm_vol_l, fm_vol_r;
int samp_vol_l, samp_vol_r;
int aux_vol_l, aux_vol_r;
int vol_l, vol_r;
int treble, bass;
@@ -61,7 +68,9 @@ typedef struct adgold_t
int16_t mma_buffer[2][SOUNDBUFLEN];
int pos;
int gameport_enabled;
int surround_enabled;
} adgold_t;
@@ -134,12 +143,17 @@ void adgold_update_irq_status(adgold_t *adgold)
uint8_t temp = 0xf;
if (!(adgold->adgold_mma_regs[0][8] & 0x10) && (adgold->adgold_mma_status & 0x10)) /*Timer 0*/
temp &= ~2;
temp &= ~2;
if (!(adgold->adgold_mma_regs[0][8] & 0x20) && (adgold->adgold_mma_status & 0x20)) /*Timer 1*/
temp &= ~2;
temp &= ~2;
if (!(adgold->adgold_mma_regs[0][8] & 0x40) && (adgold->adgold_mma_status & 0x40)) /*Timer 2*/
temp &= ~2;
temp &= ~2;
if (!(adgold->adgold_mma_regs[0][0xd] & 0x01) && (adgold->adgold_mma_status & 0x04))
temp &= ~2;
if (!(adgold->adgold_mma_regs[0][0xd] & 0x04) && (adgold->adgold_mma_status & 0x08))
temp &= ~2;
if (!(adgold->adgold_mma_regs[0][0xd] & 0x10) && (adgold->adgold_mma_status & 0x80))
temp &= ~2;
if ((adgold->adgold_mma_status & 0x01) && !(adgold->adgold_mma_regs[0][0xc] & 2))
temp &= ~2;
if ((adgold->adgold_mma_status & 0x02) && !(adgold->adgold_mma_regs[1][0xc] & 2))
@@ -249,11 +263,19 @@ void adgold_write(uint16_t addr, uint8_t val, void *p)
adgold->adgold_38x_regs[0x0c] = val;
adgold->samp_vol_r = (int)(int8_t)(val - 128);
break;
case 0x0d: /*Aux volume left*/
adgold->adgold_38x_regs[0x0d] = val;
adgold->aux_vol_l = (int)(int8_t)(val - 128);
break;
case 0x0e: /*Aux volume right*/
adgold->adgold_38x_regs[0x0e] = val;
adgold->aux_vol_r = (int)(int8_t)(val - 128);
break;
case 0x18: /*Surround*/
adgold->adgold_38x_regs[0x18] = val;
ym7128_write(&adgold->ym7128, val);
break;
break;
default:
adgold->adgold_38x_regs[adgold->adgold_38x_addr] = val;
@@ -380,6 +402,45 @@ void adgold_write(uint16_t addr, uint8_t val, void *p)
case 0xc:
adgold->adgold_mma_intpos[0] = (7 - ((val >> 2) & 7)) * 8;
break;
case 0xd:
adgold->adgold_midi_ctrl = val & 0x3f;
if ((adgold->adgold_midi_ctrl & 0x0f) != 0x0f) {
if ((adgold->adgold_midi_ctrl & 0x0f) == 0x00) {
adgold->uart_out = 0;
adgold->uart_in = 0;
adgold->midi_w = 0;
adgold->midi_r = 0;
adgold->adgold_mma_status &= ~0x8c;
} else {
if (adgold->adgold_midi_ctrl & 0x01)
adgold->uart_in = 1;
if (adgold->adgold_midi_ctrl & 0x04)
adgold->uart_out = 1;
if (adgold->adgold_midi_ctrl & 0x02) {
adgold->uart_in = 0;
adgold->midi_w = 0;
adgold->midi_r = 0;
}
if (adgold->adgold_midi_ctrl & 0x08)
adgold->uart_out = 0;
adgold->adgold_mma_status &= ~0x80;
}
} else
adgold->adgold_mma_status &= ~0x8c;
adgold_update_irq_status(adgold);
break;
case 0xe:
if (adgold->uart_out) {
midi_raw_out_byte(val);
adgold->adgold_mma_status &= ~0x08;
adgold_update_irq_status(adgold);
}
break;
}
adgold->adgold_mma_regs[0][adgold->adgold_mma_addr] = val;
break;
@@ -467,9 +528,9 @@ uint8_t adgold_read(uint16_t addr, void *p)
{
case 0x00: /*Control/ID*/
if (adgold->surround_enabled)
temp = 0x50; /*16-bit ISA, surround module, no telephone/CDROM*/
temp = 0x51; /*8-bit ISA, surround module, no telephone/CD-ROM*/
else
temp = 0x70; /*16-bit ISA, no telephone/surround/CD-ROM*/
temp = 0x71; /*8-bit ISA, no telephone/surround/CD-ROM*/
break;
default:
@@ -482,7 +543,7 @@ uint8_t adgold_read(uint16_t addr, void *p)
case 4: case 6:
temp = adgold->adgold_mma_status;
adgold->adgold_mma_status = 0; /*JUKEGOLD expects timer status flags to auto-clear*/
adgold->adgold_mma_status &= ~0xf3; /*JUKEGOLD expects timer status flags to auto-clear*/
adgold_update_irq_status(adgold);
break;
case 5:
@@ -491,12 +552,26 @@ uint8_t adgold_read(uint16_t addr, void *p)
{
case 6: /*Timer 2 low*/
adgold->adgold_mma.timer2_read = adgold->adgold_mma.timer2_count;
adgold->adgold_mma_status |= 0x40;
temp = adgold->adgold_mma.timer2_read & 0xff;
break;
case 7: /*Timer 2 high*/
temp = adgold->adgold_mma.timer2_read >> 8;
break;
case 0xe:
temp = 0;
if (adgold->uart_in) {
temp = adgold->midi_queue[adgold->midi_r];
if (adgold->midi_r != adgold->midi_w) {
adgold->midi_r++;
adgold->midi_r &= 0x0f;
}
adgold->adgold_mma_status &= ~0x04;
adgold_update_irq_status(adgold);
}
break;
default:
temp = adgold->adgold_mma_regs[0][adgold->adgold_mma_addr];
break;
@@ -579,6 +654,17 @@ void adgold_timer_poll(void *p)
adgold_t *adgold = (adgold_t *)p;
timer_advance_u64(&adgold->adgold_mma_timer_count, (uint64_t)((double)TIMER_USEC * 1.88964));
if (adgold->adgold_midi_ctrl & 0x3f) {
if ((adgold->adgold_midi_ctrl & 0x3f) != 0x3f) {
if (adgold->uart_out)
adgold->adgold_mma_status |= 0x08;
if (adgold->adgold_midi_ctrl & 0x10)
adgold->adgold_mma_status |= 0x80;
}
adgold_update_irq_status(adgold);
}
if (adgold->adgold_mma_regs[0][8] & 0x01) /*Timer 0*/
{
adgold->adgold_mma.timer0_count--;
@@ -752,6 +838,59 @@ static void adgold_get_buffer(int32_t *buffer, int len, void *p)
free(adgold_buffer);
}
static void
adgold_filter_cd_audio(int channel, double *buffer, void *p)
{
adgold_t *adgold = (adgold_t *)p;
double c;
int aux = channel ? adgold->aux_vol_r : adgold->aux_vol_l;
int vol = channel ? adgold->vol_r : adgold->vol_l;
c = ((((*buffer) * aux) / 4096.0) * vol) / 4096.0;
*buffer = c;
}
static void adgold_input_msg(void *p, uint8_t *msg, uint32_t len)
{
adgold_t *adgold = (adgold_t *)p;
uint8_t i;
if (adgold->sysex)
return;
if (adgold->uart_in) {
adgold->adgold_mma_status |= 0x04;
for (i=0; i < len; i++) {
adgold->midi_queue[adgold->midi_w++] = msg[i];
adgold->midi_w &= 0x0f;
}
adgold_update_irq_status(adgold);
}
}
static int adgold_input_sysex(void *p, uint8_t *buffer, uint32_t len, int abort)
{
adgold_t *adgold = (adgold_t *)p;
uint32_t i;
if (abort) {
adgold->sysex = 0;
return 0;
}
adgold->sysex = 1;
for (i=0;i<len;i++) {
if (adgold->midi_r == adgold->midi_w)
return (len-i);
adgold->midi_queue[adgold->midi_w++] = buffer[i];
adgold->midi_w &= 0x0f;
}
adgold->sysex = 0;
return 0;
}
void *adgold_init(const device_t *info)
{
@@ -762,6 +901,8 @@ void *adgold_init(const device_t *info)
memset(adgold, 0, sizeof(adgold_t));
adgold->surround_enabled = device_get_config_int("surround");
adgold->gameport_enabled = device_get_config_int("gameport");
opl3_init(&adgold->opl);
if (adgold->surround_enabled)
@@ -798,6 +939,8 @@ void *adgold_init(const device_t *info)
adgold->fm_vol_r = (int)(int8_t)(adgold->adgold_eeprom[0x0a] - 128);
adgold->samp_vol_l = (int)(int8_t)(adgold->adgold_eeprom[0x0b] - 128);
adgold->samp_vol_r = (int)(int8_t)(adgold->adgold_eeprom[0x0c] - 128);
adgold->aux_vol_l = (int)(int8_t)(adgold->adgold_eeprom[0x0d] - 128);
adgold->aux_vol_r = (int)(int8_t)(adgold->adgold_eeprom[0x0e] - 128);
adgold->adgold_mma_enable[0] = 0;
adgold->adgold_mma_fifo_start[0] = adgold->adgold_mma_fifo_end[0] = 0;
@@ -805,10 +948,17 @@ void *adgold_init(const device_t *info)
/*388/389 are handled by adlib_init*/
io_sethandler(0x0388, 0x0008, adgold_read, NULL, NULL, adgold_write, NULL, NULL, adgold);
if (adgold->gameport_enabled)
gameport_remap(gameport_add(&gameport_201_device), 0x201);
timer_add(&adgold->adgold_mma_timer_count, adgold_timer_poll, adgold, 1);
sound_add_handler(adgold_get_buffer, adgold);
sound_set_cd_audio_filter(adgold_filter_cd_audio, adgold);
if (device_get_config_int("receive_input"))
midi_in_handler(1, adgold_input_msg, adgold_input_sysex, adgold);
return adgold;
}
@@ -829,9 +979,15 @@ void adgold_close(void *p)
static const device_config_t adgold_config[] =
{
{
"gameport", "Enable Game port", CONFIG_BINARY, "", 1
},
{
"surround", "Surround module", CONFIG_BINARY, "", 1
},
{
"receive_input", "Receive input (MIDI)", CONFIG_BINARY, "", 1
},
{
"", "", -1
}

View File

@@ -67,9 +67,10 @@ typedef struct {
uint32_t sr_cir;
uint16_t sr_ram[128];
uint8_t uart_ctrl, uart_status,
uart_res;
uint32_t uart_fifo;
uint8_t uart_data, uart_ctrl,
uart_status, uart_res;
uint32_t uart_fifo[8];
uint8_t read_fifo_pos, write_fifo_pos;
ac97_codec_t * codec;
uint32_t codec_ctrl;
@@ -165,6 +166,8 @@ typedef struct {
#define UART_STATUS_TXRDY (1<<1)
#define UART_STATUS_RXRDY (1<<0)
#define UART_FIFO_BYTE_VALID 0x00000100
#define FORMAT_MONO_8 0
#define FORMAT_STEREO_8 1
#define FORMAT_MONO_16 2
@@ -174,7 +177,6 @@ typedef struct {
static void es1371_fetch(es1371_t *dev, int dac_nr);
static void update_legacy(es1371_t *dev, uint32_t old_legacy_ctrl);
#ifdef ENABLE_AUDIOPCI_LOG
int audiopci_do_log = ENABLE_AUDIOPCI_LOG;
@@ -205,10 +207,12 @@ es1371_update_irqs(es1371_t *dev)
if ((dev->int_status & INT_STATUS_DAC2) && (dev->si_cr & SI_P2_INTR_EN))
irq = 1;
/* MIDI input is unsupported for now */
if ((dev->int_status & INT_STATUS_UART) && (dev->uart_status & UART_STATUS_TXINT) &&
((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20))
dev->int_status &= ~INT_STATUS_UART;
if ((dev->uart_status & UART_STATUS_TXINT) || (dev->uart_status & UART_STATUS_RXINT)) {
dev->int_status |= INT_STATUS_UART;
irq = 1;
}
if (irq)
dev->int_status |= INT_STATUS_INTR;
@@ -225,10 +229,96 @@ es1371_update_irqs(es1371_t *dev)
}
static void
es1371_update_tx_irq(es1371_t *dev)
{
dev->uart_status &= ~UART_STATUS_TXINT;
if (((dev->uart_ctrl & UART_CTRL_TXINTEN) == 0x20) && (dev->uart_status & UART_STATUS_TXRDY))
dev->uart_status |= UART_STATUS_TXINT;
es1371_update_irqs(dev);
}
static void
es1371_set_tx_irq(es1371_t *dev, int set)
{
dev->uart_status &= ~UART_STATUS_TXRDY;
if (set)
dev->uart_status |= UART_STATUS_TXRDY;
es1371_update_tx_irq(dev);
}
static void
es1371_update_rx_irq(es1371_t *dev)
{
dev->uart_status &= ~UART_STATUS_RXINT;
if ((dev->uart_ctrl & UART_CTRL_RXINTEN) && (dev->uart_status & UART_STATUS_RXRDY))
dev->uart_status |= UART_STATUS_RXINT;
es1371_update_irqs(dev);
}
static void
es1371_set_rx_irq(es1371_t *dev, int set)
{
dev->uart_status &= ~UART_STATUS_RXRDY;
if (set)
dev->uart_status |= UART_STATUS_RXRDY;
es1371_update_rx_irq(dev);
}
static void
es1371_scan_fifo(es1371_t *dev)
{
if (dev->read_fifo_pos != dev->write_fifo_pos) {
dev->uart_data = dev->uart_fifo[dev->read_fifo_pos];
dev->read_fifo_pos = (dev->read_fifo_pos + 1) & 7;
es1371_set_rx_irq(dev, 1);
} else
es1371_set_rx_irq(dev, 0);
}
static void
es1371_write_fifo(es1371_t *dev, uint8_t val)
{
if (dev->write_fifo_pos < 8) {
dev->uart_fifo[dev->write_fifo_pos] = val | UART_FIFO_BYTE_VALID;
dev->write_fifo_pos = (dev->write_fifo_pos + 1) & 7;
}
}
static void
es1371_reset_fifo(es1371_t *dev)
{
int i;
for (i = 0; i < 8; i++)
dev->uart_fifo[i] = 0x00000000;
dev->read_fifo_pos = dev->write_fifo_pos = 0;
es1371_set_rx_irq(dev, 0);
}
static void
es1371_reset(void *p)
{
es1371_t *dev = (es1371_t *) p;
int i;
nmi = 0;
@@ -316,7 +406,14 @@ es1371_reset(void *p)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
dev->uart_fifo = 0xfffffe00;
for (i = 0; i < 8; i++)
dev->uart_fifo[i] = 0xffff0000;
/* Reset the UART TX. */
es1371_set_tx_irq(dev, 0);
/* Reset the UART (RX) FIFO. */
es1371_reset_fifo(dev);
/* Update interrupts to ensure they're all correctly cleared. */
es1371_update_irqs(dev);
@@ -344,7 +441,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
case 0xe: case 0xf:
ret = dev->uart_fifo;
audiopci_log("[30:%02X] ret = dev->uart_fifo[%02X] = %08X\n", page,
((page & 0x01) << 2) + ((frame >> 2) & 0x03),
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)]);
ret = dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)];
break;
}
break;
@@ -363,7 +463,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
case 0xe: case 0xf:
ret = dev->uart_fifo;
audiopci_log("[34:%02X] ret = dev->uart_fifo[%02X] = %08X\n", page,
((page & 0x01) << 2) + ((frame >> 2) & 0x03),
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)]);
ret = dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)];
break;
}
break;
@@ -377,7 +480,10 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
case 0xe: case 0xf:
ret = dev->uart_fifo;
audiopci_log("[38:%02X] ret = dev->uart_fifo[%02X] = %08X\n", page,
((page & 0x01) << 2) + ((frame >> 2) & 0x03),
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)]);
ret = dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)];
break;
}
break;
@@ -391,12 +497,19 @@ es1371_read_frame_reg(es1371_t *dev, int frame, int page)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
case 0xe: case 0xf:
ret = dev->uart_fifo;
audiopci_log("[3C:%02X] ret = dev->uart_fifo[%02X] = %08X\n", page,
((page & 0x01) << 2) + ((frame >> 2) & 0x03),
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)]);
ret = dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)];
break;
}
break;
}
if (page == 0x0e || page == 0x0f) {
audiopci_log("Read frame = %02x, page = %02x, uart fifo valid = %02x, temp = %03x\n", frame, page, dev->valid, ret);
}
return ret;
}
@@ -420,7 +533,9 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
case 0xe: case 0xf:
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
audiopci_log("[30:%02X] dev->uart_fifo[%02X] = %08X\n", page,
((page & 0x01) << 2) + ((frame >> 2) & 0x03), val);
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)] = val;
break;
}
break;
@@ -441,7 +556,9 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
case 0xe: case 0xf:
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
audiopci_log("[34:%02X] dev->uart_fifo[%02X] = %08X\n", page,
((page & 0x01) << 2) + ((frame >> 2) & 0x03), val);
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)] = val;
break;
}
break;
@@ -455,7 +572,9 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
case 0xe: case 0xf:
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
audiopci_log("[38:%02X] dev->uart_fifo[%02X] = %08X\n", page,
((page & 0x01) << 2) + ((frame >> 2) & 0x03), val);
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)] = val;
break;
}
break;
@@ -470,11 +589,17 @@ es1371_write_frame_reg(es1371_t *dev, int frame, int page, uint32_t val)
/* UART FIFO Register, Address 30H, 34H, 38H, 3CH, Memory Page 1110b, 1111b
Addressable as longword only */
case 0xe: case 0xf:
dev->uart_fifo = (dev->uart_fifo & 0xfffffe00) | (val & 0x000001ff);
audiopci_log("[3C:%02X] dev->uart_fifo[%02X] = %08X\n", page,
((page & 0x01) << 2) + ((frame >> 2) & 0x03), val);
dev->uart_fifo[((page & 0x01) << 2) + ((frame >> 2) & 0x03)] = val;
break;
}
break;
}
if (page == 0x0e || page == 0x0f) {
audiopci_log("Write frame = %02x, page = %02x, uart fifo = %08x, val = %02x\n", frame, page, dev->uart_fifo, val);
}
}
@@ -505,21 +630,27 @@ es1371_inb(uint16_t port, void *p)
must be for a reason */
case 0x04:
ret = dev->int_status & 0xff;
audiopci_log("[R] STATUS 0- 7 = %02X\n", ret);
break;
case 0x05:
ret = (dev->int_status >> 8) & 0xff;
audiopci_log("[R] STATUS 8-15 = %02X\n", ret);
break;
case 0x06:
ret = (dev->int_status >> 16) & 0x0f;
audiopci_log("[R] STATUS 16-23 = %02X\n", ret);
break;
case 0x07:
ret = ((dev->int_status >> 24) & 0x03) | 0xfc;
audiopci_log("[R] STATUS 24-31 = %02X\n", ret);
break;
/* UART Data Register, Address 08H
Addressable as byte only */
case 0x08:
ret = 0x00;
ret = dev->uart_data;
es1371_set_rx_irq(dev, 0);
audiopci_log("[R] UART DATA = %02X\n", ret);
break;
/* UART Status Register, Address 09H
@@ -533,6 +664,7 @@ es1371_inb(uint16_t port, void *p)
Addressable as byte only */
case 0x0a:
ret = dev->uart_res & 0x01;
audiopci_log("[R] UART RES = %02X\n", ret);
break;
/* Memory Page Register, Address 0CH
@@ -661,6 +793,8 @@ es1371_inw(uint16_t port, void *p)
break;
}
audiopci_log("es1371_inw: port=%04x ret=%04x\n", port, ret);
return ret;
}
@@ -682,6 +816,7 @@ es1371_inl(uint16_t port, void *p)
Addressable as longword only */
case 0x04:
ret = dev->int_status;
audiopci_log("[R] STATUS = %08X\n", ret);
break;
/* Memory Page Register, Address 0CH
@@ -783,22 +918,36 @@ es1371_outb(uint16_t port, uint8_t val, void *p)
/* UART Data Register, Address 08H
Addressable as byte only */
case 0x08:
audiopci_log("MIDI data = %02x\n", val);
/* TX does not use FIFO. */
midi_raw_out_byte(val);
es1371_set_tx_irq(dev, 1);
break;
/* UART Control Register, Address 09H
Addressable as byte only */
case 0x09:
audiopci_log("[W] UART CTRL = %02X\n", val);
dev->uart_ctrl = val & 0xe3;
if ((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20)
dev->int_status &= ~INT_STATUS_UART;
es1371_update_irqs(dev);
audiopci_log("ES1371 UART Cntrl = %02x\n", dev->uart_ctrl);
if ((val & 0x03) == 0x03) {
/* Reset TX */
es1371_set_tx_irq(dev, 1);
/* Software reset */
es1371_reset_fifo(dev);
} else {
es1371_set_tx_irq(dev, 1);
es1371_update_tx_irq(dev);
es1371_update_rx_irq(dev);
}
break;
/* UART Reserved Register, Address 0AH
Addressable as byte only */
case 0x0a:
audiopci_log("[W] UART RES = %02X\n", val);
dev->uart_res = val & 0x01;
break;
@@ -965,6 +1114,7 @@ es1371_outl(uint16_t port, uint32_t val, void *p)
/* Interrupt/Chip Select Status Register, Address 04H
Addressable as longword only */
case 0x04:
audiopci_log("[W] STATUS = %08X\n", val);
break;
/* Memory Page Register, Address 0CH
@@ -1704,29 +1854,10 @@ es1371_poll(void *p)
timer_advance_u64(&dev->dac[1].timer, dev->dac[1].latch);
es1371_scan_fifo(dev);
es1371_update(dev);
if (dev->int_ctrl & INT_UART_EN) {
//audiopci_log("UART INT Enabled\n");
if (dev->uart_ctrl & UART_CTRL_RXINTEN) {
/* We currently don't implement MIDI Input.
But if anything sets MIDI Input and Output together we'd have to take account
of the MIDI Output case, and disable IRQ's and RX bits when MIDI Input is
enabled as well but not in the MIDI Output portion */
dev->int_status &= ~INT_STATUS_UART;
dev->uart_status |= (UART_STATUS_TXINT | UART_STATUS_TXRDY);
} else if (!(dev->uart_ctrl & UART_CTRL_RXINTEN) && ((dev->uart_ctrl & UART_CTRL_TXINTEN))) {
/* Or enable the UART IRQ and the respective TX bits only when the MIDI Output is
enabled */
dev->int_status |= INT_STATUS_UART;
} else {
dev->uart_status |= (UART_STATUS_TXINT | UART_STATUS_TXRDY);
}
//audiopci_log("UART control = %02x\n", dev->uart_ctrl & (UART_CTRL_RXINTEN | UART_CTRL_TXINTEN));
es1371_update_irqs(dev);
}
if (dev->int_ctrl & INT_DAC1_EN) {
frac = dev->dac[0].ac & 0x7fff;
idx = dev->dac[0].ac >> 15;
@@ -1846,12 +1977,51 @@ generate_es1371_filter(void)
}
static void
es1371_input_msg(void *p, uint8_t *msg, uint32_t len)
{
es1371_t *dev = (es1371_t *)p;
uint8_t i;
for (i = 0; i < len; i++)
es1371_write_fifo(dev, msg[i]);
}
static int
es1371_input_sysex(void *p, uint8_t *buffer, uint32_t len, int abort)
{
es1371_t *dev = (es1371_t *)p;
uint32_t i = -1;
audiopci_log("Abort = %i\n", abort);
if (dev->uart_status & UART_STATUS_RXRDY)
abort = 1;
if (!abort) {
for (i = 0; i < len; i++) {
es1371_write_fifo(dev, buffer[i]);
if (dev->uart_status & UART_STATUS_RXRDY)
break;
}
}
/* The last sent position is in i. Return 7 - i. */
return 7 - i;
}
static void *
es1371_init(const device_t *info)
{
es1371_t *dev = malloc(sizeof(es1371_t));
memset(dev, 0x00, sizeof(es1371_t));
if (device_get_config_int("receive_input"))
midi_in_handler(1, es1371_input_msg, es1371_input_sysex, dev);
sound_add_handler(es1371_get_buffer, dev);
sound_set_cd_audio_filter(es1371_filter_cd_audio, dev);
@@ -1920,7 +2090,11 @@ static const device_config_t es1371_config[] =
}
},
.default_int = AC97_CODEC_CS4297A
}, {
},
{
"receive_input", "Receive input (MIDI)", CONFIG_BINARY, "", 1
},
{
"", "", -1
}
};

View File

@@ -17,6 +17,7 @@
#include <86box/filters.h>
#include <86box/snd_mpu401.h>
#include <86box/snd_opl.h>
#include <86box/snd_sb.h>
#include <86box/snd_sb_dsp.h>
@@ -413,7 +414,7 @@ static void pas16_pit_out(uint16_t port, uint8_t val, void *p)
{
if (!(val & 0x20))
{
if (val & 2) pas16->pit.rl[0] = timer_get_remaining_u64(&pit.timer[0]) / PITCONST;;
if (val & 2) pas16->pit.rl[0] = timer_get_remaining_u64(&pas16->pit.timer[0]) / PITCONST;;
if (val & 4) pas16->pit.rl[1] = pas16->pit.c[1];
if (val & 8) pas16->pit.rl[2] = pas16->pit.c[2];
}
@@ -429,7 +430,7 @@ static void pas16_pit_out(uint16_t port, uint8_t val, void *p)
if (!(pas16->pit.ctrl & 0x30))
{
if (!t)
pas16->pit.rl[t] = timer_get_remaining_u64(&pit.timer[t]) / PITCONST;
pas16->pit.rl[t] = timer_get_remaining_u64(&pas16->pit.timer[t]) / PITCONST;
else
{
pas16->pit.rl[t] = pas16->pit.c[t];
@@ -450,7 +451,7 @@ static void pas16_pit_out(uint16_t port, uint8_t val, void *p)
{
pas16->pit.rm[t] = 3;
if (!t)
pas16->pit.rl[t] = timer_get_remaining_u64(&pit.timer[t]) / PITCONST;
pas16->pit.rl[t] = timer_get_remaining_u64(&pas16->pit.timer[t]) / PITCONST;
else
pas16->pit.rl[t] = pas16->pit.c[t];
}
@@ -519,8 +520,8 @@ static uint8_t pas16_pit_in(uint16_t port, void *p)
pas16->pit.rereadlatch[t] = 0;
if (!t)
{
pas16->pit.rl[t] = timer_get_remaining_u64(&pit.timer[t]) / PITCONST;
if ((timer_get_remaining_u64(&pit.timer[t]) / PITCONST) > 65536)
pas16->pit.rl[t] = timer_get_remaining_u64(&pas16->pit.timer[t]) / PITCONST;
if ((timer_get_remaining_u64(&pas16->pit.timer[t]) / PITCONST) > 65536)
pas16->pit.rl[t] = 0xFFFF;
}
else

View File

@@ -379,6 +379,7 @@ END
#include "languages/it-IT.rc"
#include "languages/ja-JP.rc"
#include "languages/ko-KR.rc"
#include "languages/pl-PL.rc"
#include "languages/pt-BR.rc"
#include "languages/pt-PT.rc"
#include "languages/ru-RU.rc"

View File

@@ -69,6 +69,12 @@ ifeq ($(DEV_BUILD), y)
ifndef XL24
XL24 := y
endif
ifndef ISAMEM_RAMPAGE
ISAMEM_RAMPAGE := y
endif
ifndef ISAMEM_IAB
ISAMEM_IAB := y
endif
ifndef OLIVETTI
OLIVETTI := y
endif
@@ -118,6 +124,12 @@ else
ifndef XL24
XL24 := n
endif
ifndef ISAMEM_RAMPAGE
ISAMEM_RAMPAGE := n
endif
ifndef ISAMEM_IAB
ISAMEM_IAB := n
endif
ifndef OLIVETTI
OLIVETTI := n
endif
@@ -450,6 +462,14 @@ ifeq ($(XL24), y)
OPTS += -DUSE_XL24
endif
ifeq ($(ISAMEM_RAMPAGE), y)
OPTS += -DUSE_ISAMEM_RAMPAGE
endif
ifeq ($(ISAMEM_IAB), y)
OPTS += -DUSE_ISAMEM_IAB
endif
ifeq ($(OLIVETTI), y)
OPTS += -DUSE_OLIVETTI
DEVBROBJ += olivetti_eva.o

647
src/win/languages/pl-PL.rc Normal file
View File

@@ -0,0 +1,647 @@
////////////////////////////////////////////////////////////////////////////
// Polish (pl-PL) resources
#ifdef _WIN32
LANGUAGE LANG_POLISH, SUBLANG_DEFAULT
#pragma code_page(65001)
#endif //_WIN32
#define AUTHORS
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
MainMenu MENU DISCARDABLE
BEGIN
POPUP "&Akcje"
BEGIN
MENUITEM "&Klawaitura wymaga przechwytu myszy", IDM_ACTION_KBD_REQ_CAPTURE
MENUITEM "&Prawy CTRL to lewy Alt", IDM_ACTION_RCTRL_IS_LALT
MENUITEM SEPARATOR
MENUITEM "&Twardy reset...", IDM_ACTION_HRESET
MENUITEM "&Ctrl+Alt+Del\tCtrl+F12", IDM_ACTION_RESET_CAD
MENUITEM SEPARATOR
MENUITEM "Ctrl+Alt+&Esc", IDM_ACTION_CTRL_ALT_ESC
MENUITEM SEPARATOR
MENUITEM "&Pauza", IDM_ACTION_PAUSE
MENUITEM SEPARATOR
MENUITEM "W&yjdź...", IDM_ACTION_EXIT
END
POPUP "&Widok"
BEGIN
MENUITEM "&Ukryj pasek statusu", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Ukryj &pasek narzędzi", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Okno o zmiennym rozmiarze", IDM_VID_RESIZE
MENUITEM "P&amiętaj rozmiar &i pozycję", IDM_VID_REMEMBER
MENUITEM SEPARATOR
POPUP "Re&nderer"
BEGIN
MENUITEM "&SDL (Software)", IDM_VID_SDL_SW
MENUITEM "SDL (&Hardware)", IDM_VID_SDL_HW
MENUITEM "SDL (&OpenGL)", IDM_VID_SDL_OPENGL
MENUITEM "Open&GL (3.0 Core)", IDM_VID_OPENGL_CORE
#ifdef USE_VNC
MENUITEM "&VNC", IDM_VID_VNC
#endif
END
MENUITEM SEPARATOR
MENUITEM "Określ rozmiary...", IDM_VID_SPECIFY_DIM
MENUITEM "&Wymuś proporcje wyświetlania 4:3", IDM_VID_FORCE43
POPUP "&Czynnik skalowania okna"
BEGIN
MENUITEM "&0.5x", IDM_VID_SCALE_1X
MENUITEM "&1x", IDM_VID_SCALE_2X
MENUITEM "1.&5x", IDM_VID_SCALE_3X
MENUITEM "&2x", IDM_VID_SCALE_4X
END
POPUP "Metoda filtrowania"
BEGIN
MENUITEM "&Nearest", IDM_VID_FILTER_NEAREST
MENUITEM "&Linear", IDM_VID_FILTER_LINEAR
END
MENUITEM "Skalowanie Hi&DPI", IDM_VID_HIDPI
MENUITEM SEPARATOR
MENUITEM "&Pełny ekran\tCtrl+Alt+PageUP", IDM_VID_FULLSCREEN
POPUP "Fullscreen &stretch mode"
BEGIN
MENUITEM "&Tryb rozciągania na pełnym ekranie", IDM_VID_FS_FULL
MENUITEM "&4:3", IDM_VID_FS_43
MENUITEM "&Kwadratowe piksele (Zachowaj proporcje)", IDM_VID_FS_KEEPRATIO
MENUITEM "&Skalowanie całkowite", IDM_VID_FS_INT
END
POPUP "Ustawienia E&GA/(S)VGA"
BEGIN
MENUITEM "&Odwrócony monitor VGA", IDM_VID_INVERT
POPUP "Rodzaj ekranu &VGA"
BEGIN
MENUITEM "RGB - &Kolorowy", IDM_VID_GRAY_RGB
MENUITEM "&RGB - Skala szarości", IDM_VID_GRAY_MONO
MENUITEM "&Bursztynowy monitor", IDM_VID_GRAY_AMBER
MENUITEM "&Zielony monitor", IDM_VID_GRAY_GREEN
MENUITEM "&Biały monitor", IDM_VID_GRAY_WHITE
END
POPUP "Typ konwersji &w skali szarości"
BEGIN
MENUITEM "BT&601 (NTSC/PAL)", IDM_VID_GRAYCT_601
MENUITEM "BT&709 (HDTV)", IDM_VID_GRAYCT_709
MENUITEM "&Średni", IDM_VID_GRAYCT_AVE
END
END
MENUITEM SEPARATOR
MENUITEM "Overscan dla CGA/PCjr/Tandy/E&GA/(S)VGA", IDM_VID_OVERSCAN
MENUITEM "Zmień kontrast dla &monochromatycznego ekranu", IDM_VID_CGACON
END
MENUITEM "&Nośnik", IDM_MEDIA
POPUP "&Narzędzia"
BEGIN
MENUITEM "&Ustawienia...", IDM_CONFIG
MENUITEM "&Aktualizuj ikony na pasku statusu", IDM_UPDATE_ICONS
MENUITEM SEPARATOR
MENUITEM "Zrób &zrzut ekranu\tCtrl+F11", IDM_ACTION_SCREENSHOT
MENUITEM SEPARATOR
MENUITEM "&Preferencje...", IDM_PREFERENCES
MENUITEM "Włącz integrację z &Discord", IDM_DISCORD
MENUITEM SEPARATOR
MENUITEM "Wzmocnienie &dźwięku...", IDM_SND_GAIN
#ifdef MTR_ENABLED
MENUITEM SEPARATOR
MENUITEM "Rozpocznij śledzenie\tCtrl+T", IDM_ACTION_BEGIN_TRACE
MENUITEM "Zakończ śledzenie\tCtrl+T", IDM_ACTION_END_TRACE
#endif
END
#if defined(ENABLE_LOG_TOGGLES) || defined(ENABLE_LOG_COMMANDS)
POPUP "&Logowanie"
BEGIN
# ifdef ENABLE_BUSLOGIC_LOG
MENUITEM "Włącz logu BusLogic\tCtrl+F4", IDM_LOG_BUSLOGIC
# endif
# ifdef ENABLE_CDROM_LOG
MENUITEM "Włącz logi CD-ROM\tCtrl+F5", IDM_LOG_CDROM
# endif
# ifdef ENABLE_D86F_LOG
MENUITEM "Włącz logi dyskietek (86F)\tCtrl+F6", IDM_LOG_D86F
# endif
# ifdef ENABLE_FDC_LOG
MENUITEM "Włącz logi kontrolera dyskietek\tCtrl+F7", IDM_LOG_FDC
# endif
# ifdef ENABLE_IDE_LOG
MENUITEM "Włącz logi IDE\tCtrl+F8", IDM_LOG_IDE
# endif
# ifdef ENABLE_SERIAL_LOG
MENUITEM "Włącz logi portu szeregowego\tCtrl+F3", IDM_LOG_SERIAL
# endif
# ifdef ENABLE_NIC_LOG
MENUITEM "Włącz logi sieci\tCtrl+F9", IDM_LOG_NIC
# endif
# ifdef ENABLE_LOG_COMMANDS
# ifdef ENABLE_LOG_TOGGLES
MENUITEM SEPARATOR
# endif
# ifdef ENABLE_LOG_BREAKPOINT
MENUITEM "&Punkt przerwania dziennika\tCtrl+F10", IDM_LOG_BREAKPOINT
# endif
# ifdef ENABLE_VRAM_DUMP
MENUITEM "Zrzuć pamięć &wideo\tCtrl+F1", IDM_DUMP_VRAM
# endif
# endif
END
#endif
POPUP "&Pomoc"
BEGIN
MENUITEM "&Dokumentacja...", IDM_DOCS
MENUITEM "&O 86Box...", IDM_ABOUT
END
END
StatusBarMenu MENU DISCARDABLE
BEGIN
MENUITEM SEPARATOR
END
CassetteSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Nowy obraz...", IDM_CASSETTE_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "&Istniejący obraz...", IDM_CASSETTE_IMAGE_EXISTING
MENUITEM "Istniejący obraz (&Chroniony przed zapisem)...", IDM_CASSETTE_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "&Nagraj", IDM_CASSETTE_RECORD
MENUITEM "&Odtwórz", IDM_CASSETTE_PLAY
MENUITEM "&Przewiń do początku", IDM_CASSETTE_REWIND
MENUITEM "&Przewiń do końca", IDM_CASSETTE_FAST_FORWARD
MENUITEM SEPARATOR
MENUITEM "W&yjmij", IDM_CASSETTE_EJECT
END
END
CartridgeSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Obraz...", IDM_CARTRIDGE_IMAGE
MENUITEM SEPARATOR
MENUITEM "W&yjmij", IDM_CARTRIDGE_EJECT
END
END
FloppySubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Nowy obraz...", IDM_FLOPPY_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "&Istniejący obraz...", IDM_FLOPPY_IMAGE_EXISTING
MENUITEM "Istniejący obraz (&Chroniony przed zapisem)...", IDM_FLOPPY_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "E&ksportuj do 86F...", IDM_FLOPPY_EXPORT_TO_86F
MENUITEM SEPARATOR
MENUITEM "W&yjmij", IDM_FLOPPY_EJECT
END
END
CdromSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Ścisz", IDM_CDROM_MUTE
MENUITEM SEPARATOR
MENUITEM "P&usty", IDM_CDROM_EMPTY
MENUITEM "&Przeładuj poprzedni obraz", IDM_CDROM_RELOAD
MENUITEM SEPARATOR
MENUITEM "&Obraz", IDM_CDROM_IMAGE
END
END
ZIPSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Nowy obraz...", IDM_ZIP_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "&Istniejący obraz...", IDM_ZIP_IMAGE_EXISTING
MENUITEM "Istniejący obraz (&Chroniony przed zapisem)...", IDM_ZIP_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "W&yjmij", IDM_ZIP_EJECT
MENUITEM "&Przeładuj poprzedni obraz", IDM_ZIP_RELOAD
END
END
MOSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Nowy obraz...", IDM_MO_IMAGE_NEW
MENUITEM SEPARATOR
MENUITEM "&Istniejący obraz...", IDM_MO_IMAGE_EXISTING
MENUITEM "Istniejący obraz (&Chroniony przed zapisem)...", IDM_MO_IMAGE_EXISTING_WP
MENUITEM SEPARATOR
MENUITEM "W&yjmij", IDM_MO_EJECT
MENUITEM "&Przeładuj poprzedni obraz", IDM_MO_RELOAD
END
END
VidGLSubMenu MENU DISCARDABLE
BEGIN
POPUP "Docelowa &liczba klatek na sekundę"
BEGIN
MENUITEM "&Zsynchronizuj z wideo", IDM_VID_GL_FPS_BLITTER
MENUITEM "&25 fps", IDM_VID_GL_FPS_25
MENUITEM "&30 fps", IDM_VID_GL_FPS_30
MENUITEM "&50 fps", IDM_VID_GL_FPS_50
MENUITEM "&60 fps", IDM_VID_GL_FPS_60
MENUITEM "&75 fps", IDM_VID_GL_FPS_75
END
MENUITEM "&VSync", IDM_VID_GL_VSYNC
MENUITEM "&Wybierz shader...", IDM_VID_GL_SHADER
MENUITEM "&Usuń shader", IDM_VID_GL_NOSHADER
END
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
#define STR_PREFERENCES "Preferencje"
#define STR_SND_GAIN "Wzmocnienie dźwięku"
#define STR_NEW_FLOPPY "Nowy obraz"
#define STR_CONFIG "Ustawienia"
#define STR_SPECIFY_DIM "Określ rozmiary okna"
#define STR_OK "OK"
#define STR_CANCEL "Anuluj"
#define STR_GLOBAL "Zapisz ustawienia jako &globalne ustawienia domyślne"
#define STR_DEFAULT "&Domyślny"
#define STR_LANGUAGE "Język:"
#define STR_ICONSET "Zestaw ikon:"
#define STR_GAIN "Wzmacniacz"
#define STR_FILE_NAME "Nazwa pliku:"
#define STR_DISK_SIZE "Rozmiar dysku:"
#define STR_RPM_MODE "Tryb RPM:"
#define STR_PROGRESS "Postęp:"
#define STR_WIDTH "Szerokość:"
#define STR_HEIGHT "Wysokość:"
#define STR_LOCK_TO_SIZE "Stały rozmiar"
#define STR_MACHINE_TYPE "Rodzaj maszyny:"
#define STR_MACHINE "Maszyna:"
#define STR_CONFIGURE "Konfiguruj"
#define STR_CPU_TYPE "Rodzaj procesora:"
#define STR_SPEED "Szybkość:"
#define STR_FPU "Jednostka FPU:"
#define STR_WAIT_STATES "Stany oczekiwania:"
#define STR_MB "MB"
#define STR_MEMORY "Pamięć:"
#define STR_TIME_SYNC "Synchronizacja czasu"
#define STR_DISABLED "Wyłączona"
#define STR_ENABLED_LOCAL "Włączona (czas lokalny)"
#define STR_ENABLED_UTC "Włączona (UTC)"
#define STR_DYNAREC "Dynamiczny rekompilator"
#define STR_VIDEO "Wideo:"
#define STR_VOODOO "Grafika Voodoo"
#define STR_MOUSE "Mysz:"
#define STR_JOYSTICK "Joystick:"
#define STR_JOY1 "Joystick 1..."
#define STR_JOY2 "Joystick 2..."
#define STR_JOY3 "Joystick 3..."
#define STR_JOY4 "Joystick 4..."
#define STR_SOUND "Karta dźwiękowa:"
#define STR_MIDI "Urządzenie wyjściowe MIDI:"
#define STR_MIDI_IN "Urządzenie wejściowe MIDI:"
#define STR_MPU401 "Samodzielne urządzenie MPU-401"
#define STR_SSI "Innovation SSI-2001"
#define STR_CMS "CMS / Game Blaster"
#define STR_GUS "Gravis Ultrasound"
#define STR_FLOAT "Użyj dźwięku FLOAT32"
#define STR_NET_TYPE "Rodzaj sieci:"
#define STR_PCAP "Urządzenie PCap:"
#define STR_NET "Karta sieciowa:"
#define STR_LPT1 "Urządzenie LPT1:"
#define STR_LPT2 "Urządzenie LPT2:"
#define STR_LPT3 "Urządzenie LPT3:"
#define STR_SERIAL1 "Port szeregowy 1"
#define STR_SERIAL2 "Port szeregowy 2"
#define STR_SERIAL3 "Port szeregowy 3"
#define STR_SERIAL4 "Port Szeregowy 4"
#define STR_PARALLEL1 "Port równoległy 1"
#define STR_PARALLEL2 "Port równoległy 2"
#define STR_PARALLEL3 "Port równoległy 3"
#define STR_HDC "Kontroler dysku twardego:"
#define STR_FDC "Kontroler dyskietek:"
#define STR_IDE_TER "Trzeciorzędowy kontroler IDE"
#define STR_IDE_QUA "Czwartorzędowy kontroler IDE"
#define STR_SCSI "SCSI"
#define STR_SCSI_1 "Kontroler 1:"
#define STR_SCSI_2 "Kontroler 2:"
#define STR_SCSI_3 "Kontroler 3:"
#define STR_SCSI_4 "Kontroler 4:"
#define STR_CASSETTE "Kaseta"
#define STR_HDD "Dyski twarde:"
#define STR_NEW "&Nowy..."
#define STR_EXISTING "&Istniejący..."
#define STR_REMOVE "&Usuń"
#define STR_BUS "Magistrala:"
#define STR_CHANNEL "Kanał:"
#define STR_ID "ID:"
#define STR_SPECIFY "&Określ..."
#define STR_SECTORS "Sektory:"
#define STR_HEADS "Głowice:"
#define STR_CYLS "Cylindry:"
#define STR_SIZE_MB "Rozmiar (MB):"
#define STR_TYPE "Rodzaj:"
#define STR_IMG_FORMAT "Format obrazu:"
#define STR_BLOCK_SIZE "Rozmiar bloku:"
#define STR_FLOPPY_DRIVES "Napędy dyskietek:"
#define STR_TURBO "Rozrządy Turbo"
#define STR_CHECKBPB "Sprawdzaj BPB"
#define STR_CDROM_DRIVES "Napędy CD-ROM:"
#define STR_MO_DRIVES "Napędy MO:"
#define STR_ZIP_DRIVES "Napędy ZIP:"
#define STR_250 "ZIP 250"
#define STR_ISARTC "ISA RTC:"
#define STR_ISAMEM "Rozszerzenie pamięci ISA"
#define STR_ISAMEM_1 "Karta 1:"
#define STR_ISAMEM_2 "Karta 2:"
#define STR_ISAMEM_3 "Karta 3:"
#define STR_ISAMEM_4 "Karta 4:"
#define STR_BUGGER "Urządzenie ISABugger"
#define STR_POSTCARD "Karta POST"
#define FONT_SIZE 9
#define FONT_NAME "Segoe UI"
#include "dialogs.rc"
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
2048 "86Box"
IDS_2049 "Błąd"
IDS_2050 "Fatalny błąd"
IDS_2051 "<reserved>"
IDS_2052 "Naciśnij klawisze CTRL+ALT+PAGE DOWN aby wrócić to trybu okna."
IDS_2053 "Szybkość"
IDS_2054 "ZIP %03i %i (%s): %ls"
IDS_2055 "Obrazy ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
IDS_2056 "86Box nie może znaleźć obrazów ROM nadających się do użytku.\n\nProszę pobrać zestaw obrazów ROM ze strony <a href=""https://github.com/86Box/roms/releases/latest"">download</a>, i rozpakować je do katalogu ""roms""."
IDS_2057 "(pusty)"
IDS_2058 "Obrazy ZIP (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0Wszystkie pliki (*.*)\0*.*\0"
IDS_2059 "Turbo"
IDS_2060 "Włącz"
IDS_2061 "Wyłącz"
IDS_2062 "Wszystkie obrazy (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0Podstawowe obrazy sektorów(*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0Obrazy powierzchniowe (*.86F)\0*.86F\0"
IDS_2063 "Maszyna ""%hs"" nie jest dostępna, ponieważ brakuje obrazów ROM w katalogu roms/machines. Przełączanie na dostępną maszynę."
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_2064 "Karta wideo ""%hs"" nie jest dostępna, ponieważ brakuje obrazów ROM w katalogu roms/video. Przełączanie na dostępną kartę wideo."
IDS_2065 "Maszyna"
IDS_2066 "Ekran"
IDS_2067 "Urządzenia wejściowe"
IDS_2068 "Dźwięk"
IDS_2069 "Sieć"
IDS_2070 "Porty (COM & LPT)"
IDS_2071 "Kontrolery pamięci"
IDS_2072 "Dyski twarde"
IDS_2073 "Napędy dyskietek i CD-ROM"
IDS_2074 "Inne urządzenia wymienne"
IDS_2075 "Inne urządzenia peryferyjne"
IDS_2076 "Obrazy powierzchniowe (*.86F)\0*.86F\0"
IDS_2077 "Kliknij w celu przechwycenia myszy"
IDS_2078 "Naciśnij klawisze F8+F12 w celu uwolnienia myszy"
IDS_2079 "Naciśnij klawisze F8+F12 lub środkowy przycisk w celu uwolnienia myszy"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_2080 "Nie można zainicjować FluidSynth"
IDS_2081 "Magistrala"
IDS_2082 "Plik"
IDS_2083 "C"
IDS_2084 "H"
IDS_2085 "S"
IDS_2086 "MB"
IDS_2087 "Sprawdzaj BPB"
IDS_2088 "KB"
IDS_2089 "Nie można zainicjować renderera wideo."
IDS_2090 "Domyślny"
IDS_2091 "%i Stany oczekiwania"
IDS_2092 "Rodzaj"
IDS_2093 "Nie udało się ustawić PCap"
IDS_2094 "Nie znaleziono urządzeń PCap"
IDS_2095 "Nieprawidłowe urządzenie PCap"
IDS_2096 "Standardowe joysticki 2-przyciskowe"
IDS_2097 "Standardowy joystick 4-przyciskowy"
IDS_2098 "Standardowy joystick 6-przyciskowy"
IDS_2099 "Standardowy joystick 8-przyciskowy"
IDS_2100 "CH Flightstick Pro"
IDS_2101 "Microsoft SideWinder Pad"
IDS_2102 "Thrustmaster Flight Control System"
IDS_2103 "Żaden"
IDS_2104 "Nie można załadować akceleratorów klawiaturowych."
IDS_2105 "Nie można zarejestrować surowych danych wejściowych."
IDS_2106 "%u"
IDS_2107 "%u MB (CHS: %i, %i, %i)"
IDS_2108 "Dyskietka %i (%s): %ls"
IDS_2109 "Wszystkie obrazy (*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF)\0*.0??;*.1??;*.??0;*.86F;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.JSON;*.TD0;*.*FD?;*.MFM;*.XDF\0Zaawansowane obrazy sektorów (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0Podstawowe obrazy sektorów (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux images (*.FDI)\0*.FDI\0Obrazy powierzchniowe (*.86F;*.MFM)\0*.86F;*.MFM\0All files (*.*)\0*.*\0"
IDS_2110 "Nie można zainicjować FreeType"
IDS_2111 "Nie można zainicjować SDL, wymagany SDL2.dll"
IDS_2112 "Jesteś pewien że chcesz wykonać twardy reset emulowanej maszyny?"
IDS_2113 "Jesteś pewien że chcesz zakończyć 86Box?"
IDS_2114 "Nie można zainicjować Ghostscript"
IDS_2115 "MO %i (%ls): %ls"
IDS_2116 "Obrazy MO (*.IM?;*.MDI)\0*.IM?;*.MDI\0All files (*.*)\0*.*\0"
IDS_2117 "Witamy w 86Box!"
IDS_2118 "Kontroler wewnętrzny"
IDS_2119 "Zakończ"
IDS_2120 "Nie znaleziono obrazów ROM"
IDS_2121 "Czy chcesz zapisać ustawienia?"
IDS_2122 "To spowoduje twardy reset wirtualnej maszyny."
IDS_2123 "Zapisz"
IDS_2124 "O 86Box"
IDS_2125 "86Box v" EMU_VERSION
IDS_2126 "Emulator starych komputerów\n\nAutorzy: Sarah Walker, Miran Grca, Fred N. van Kempen (waltje), SA1988, Tiseno100, reenigne, leilei, JohnElliott, greatpsycho, i inni.\n\nPrzetłumaczony przez: Fanta-Shokata\n\nWydany na licencji GNU General Public License w wersji 2 lub nowszej. Zobacz LICENSE aby uzyskać więcej informacji."
IDS_2127 "OK"
IDS_2128 "Sprzęt niedostępny"
#ifdef _WIN32
#define LIB_NAME_PCAP "WinPcap"
#else
#define LIB_NAME_PCAP "libpcap"
#endif
IDS_2129 "Sprawdź, czy " LIB_NAME_PCAP " jest zainstalowany i czy posiadasz połączenie sieciowe kompatybilne z " LIB_NAME_PCAP "."
IDS_2130 "Nieprawidłowa konfiguracja"
#ifdef _WIN32
#define LIB_NAME_FREETYPE "freetype.dll"
#else
#define LIB_NAME_FREETYPE "libfreetype"
#endif
IDS_2131 LIB_NAME_FREETYPE " jest wymagany do emulacji drukarki ESC-P."
#ifdef _WIN32
#define LIB_NAME_GS "gsdll32.dll"
#else
#define LIB_NAME_GS "libgs"
#endif
IDS_2132 LIB_NAME_GS " jest wymagany do automatycznej konwersji plików PostScript do PDF.\n\nDokumenty wysłane do ogólnej drukarki PostScript zostaną zapisane jako pliki PostScript (.ps)."
#ifdef _WIN32
#define LIB_NAME_FLUIDSYNTH "libfluidsynth.dll"
#else
#define LIB_NAME_FLUIDSYNTH "libfluidsynth"
#endif
IDS_2133 LIB_NAME_FLUIDSYNTH " jest wymagany dla wyjścia FluidSynth MIDI."
IDS_2134 "Przechodzenie do trybu pełnoekranowego"
IDS_2135 "Nie pokazuj więcej tego komunikatu"
IDS_2136 "Nie kończ"
IDS_2137 "Przywróć"
IDS_2138 "Nie przywracaj"
IDS_2139 "Obrazy MO (*.IM?;*.MDI)\0*.IM?;*.MDI\0All files (*.*)\0*.*\0"
IDS_2140 "Obrazy CD-ROM (*.ISO;*.CUE)\0*.ISO;*.CUE\0All files (*.*)\0*.*\0"
IDS_2141 "Konfiguracja urządzenia %hs"
IDS_2142 "Monitor w trybie czuwania"
IDS_2143 "Shadery OpenGL (*.GLSL)\0*.GLSL\0Wszystkie pliki (*.*)\0*.*\0"
IDS_2144 "Opcje OpenGL"
IDS_2145 "Ładujesz nieobsługiwaną konfigurację"
IDS_2146 "Wybór rodzaju procesora oparty na wybranej maszynie jest wyłączony dla tej emulowanej maszyny.\n\nPozwala to na wybór procesora który jest niekompatybilny z wybraną maszyną. Jednak możesz napotkać niezgodności z BIOS-em maszyny lub innym oprogramowaniem.\n\nAktywacja tego ustawienia nie jest wspierana i każde zgłoszenie błędu może zostać zamknięte jako nieważne."
IDS_2147 "Kontynuuj"
IDS_2148 "Kaseta: %s"
IDS_2149 "Obrazy kaset (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0Wszystkie pliki (*.*)\0*.*\0"
IDS_2150 "Kartrydż %i: %ls"
IDS_2151 "Obrazy kartrydżu (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Wszystkie pliki (*.*)\0*.*\0"
IDS_2152 "Błąd inicjalizacji renderera"
IDS_2153 "Nie można zainicjować renderera OpenGL (3.0 Core). Użyj innego."
IDS_2154 "Wznów wykonywanie"
IDS_2155 "Zatrzymaj wykonywanie"
IDS_2156 "Naciśnij Ctrl+Alt+Del"
IDS_2157 "Naciśnij Ctrl+Alt+Esc"
IDS_2158 "Twardy reset"
IDS_2159 "Wyłączenie ACPI"
IDS_2160 "Ustawienia"
END
STRINGTABLE DISCARDABLE
BEGIN
IDS_4096 "Dysk twardy (%s)"
IDS_4097 "%01i:%01i"
IDS_4098 "%01i"
IDS_4099 "Napędy CD-ROM MFM/RLL lub ESDI nigdy nie istniały"
IDS_4100 "Niestandardowy..."
IDS_4101 "Niestandardowy (duży)..."
IDS_4102 "Dodaj nowy dysk twardy"
IDS_4103 "Dodaj istniejący dysk twardy"
IDS_4104 "Obrazy dysków HDI nie mogą być większe niż 4 GB."
IDS_4105 "Obrazy dysków nie mogą być większe niż 127 GB."
IDS_4106 "Obrazy dysku twardego (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Wszystkie pliki (*.*)\0*.*\0"
IDS_4107 "Nie można odczytać pliku"
IDS_4108 "Nie można zapisać pliku"
IDS_4109 "Obrazy HDI lub HDX z rozmiarem sektora innym niż 512 nie są wspierane."
IDS_4110 "USB nie jest jeszcze wspierane"
IDS_4111 "Plik obrazu dysku już istnieje"
IDS_4112 "Określ prawidłową nazwę pliku."
IDS_4113 "Utworzono obraz dysku"
IDS_4114 "Sprawdź, czy plik istnieje i nadaje się do odczytu."
IDS_4115 "Sprawdź, czy plik jest zapiyswany w katalogu z możliwością zapisu."
IDS_4116 "Obraz dysku jest za duży"
IDS_4117 "Nie zapomnij o partycjonowaniu u sformatowaniu nowo utworzego dysku"
IDS_4118 "Wybrany plik zostanie nadpisany. Czy na pewno chcesz użyć tego pliku?"
IDS_4119 "Niewspierany obraz dysku"
IDS_4120 "Nadpisz"
IDS_4121 "Nie nadpisuj"
IDS_4122 "Obraz surowy (.img)"
IDS_4123 "Obraz HDI (.hdi)"
IDS_4124 "Obraz HDX (.hdx)"
IDS_4125 "VHD o stałym rozmiarze (.vhd)"
IDS_4126 "VHD o dynamicznym rozmiarze (.vhd)"
IDS_4127 "VHD różnicujący (.vhd)"
IDS_4128 "Duże bloki (2 MB)"
IDS_4129 "Małe bloki (512 KB)"
IDS_4130 "Pliki VHD (*.VHD)\0*.VHD\0Wszystkie pliki (*.*)\0*.*\0"
IDS_4131 "Wybierz nadrzędny plik VHD"
IDS_4132 "Może to oznaczać, że obraz nadrzędny został zmodyfikowany po utworzeniu obrazu różnicującego.\n\nMoże się to również zdarzyć, jeśli pliki obrazów przeniesione lub skopiowane, lub wystąpił błąd w programie, który utworzył ten dysk\n\nCzy chcesz naprawić sygnatury czasowe?"
IDS_4133 "Sygnatury czasowe dysku nadrzędnego i podrzędnego nie zgadzają się"
IDS_4134 "Nie można naprawić sygnatury czasowej VHD."
IDS_4135 "%01i:%02i"
IDS_4352 "MFM/RLL"
IDS_4353 "XTA"
IDS_4354 "ESDI"
IDS_4355 "IDE"
IDS_4356 "ATAPI"
IDS_4357 "SCSI"
IDS_4608 "MFM/RLL (%01i:%01i)"
IDS_4609 "XTA (%01i:%01i)"
IDS_4610 "ESDI (%01i:%01i)"
IDS_4611 "IDE (%01i:%01i)"
IDS_4612 "ATAPI (%01i:%01i)"
IDS_4613 "SCSI (%01i:%02i)"
IDS_5120 "CD-ROM %i (%s): %s"
IDS_5376 "Wyłączony"
IDS_5381 "ATAPI"
IDS_5382 "SCSI"
IDS_5632 "Wyłączony"
IDS_5637 "ATAPI (%01i:%01i)"
IDS_5638 "SCSI (%01i:%02i)"
IDS_5888 "160 kB"
IDS_5889 "180 kB"
IDS_5890 "320 kB"
IDS_5891 "360 kB"
IDS_5892 "640 kB"
IDS_5893 "720 kB"
IDS_5894 "1,2 MB"
IDS_5895 "1,25 MB"
IDS_5896 "1,44 MB"
IDS_5897 "DMF (klaster 1024)"
IDS_5898 "DMF (klaster 2048)"
IDS_5899 "2,88 MB"
IDS_5900 "ZIP 100"
IDS_5901 "ZIP 250"
IDS_5902 "3.5"" 128Mb M.O. (ISO 10090)"
IDS_5903 "3.5"" 230Mb M.O. (ISO 13963)"
IDS_5904 "3.5"" 540Mb M.O. (ISO 15498)"
IDS_5905 "3.5"" 640Mb M.O. (ISO 15498)"
IDS_5906 "3.5"" 1,3Gb M.O. (GigaMO)"
IDS_5907 "3.5"" 2,3Gb M.O. (GigaMO 2)"
IDS_5908 "5.25"" 600Mb M.O."
IDS_5909 "5.25"" 650Mb M.O."
IDS_5910 "5.25"" 1Gb M.O."
IDS_5911 "5.25"" 1,3Gb M.O."
IDS_6144 "Idealne obroty"
IDS_6145 "1%% poniżej idealnych obrotów"
IDS_6146 "1.5%% poniżej idealnych obrotów"
IDS_6147 "2%% poniżej idealnych obrotów"
IDS_7168 "(Domyślne ustawienie systemowe)"
END
#define IDS_LANG_ENUS IDS_7168
// Polish (pl-PL) resources
/////////////////////////////////////////////////////////////////////////////

View File

@@ -31,8 +31,8 @@ BEGIN
END
POPUP "&Вид"
BEGIN
MENUITEM "&Скрыть строку статуса", IDM_VID_HIDE_STATUS_BAR
MENUITEM "Hide &toolbar", IDM_VID_HIDE_TOOLBAR
MENUITEM "&Скрыть строку состояния", IDM_VID_HIDE_STATUS_BAR
MENUITEM "С&крыть панель инструментов", IDM_VID_HIDE_TOOLBAR
MENUITEM SEPARATOR
MENUITEM "&Изменяемый размер окна", IDM_VID_RESIZE
MENUITEM "&Запомнить размер и положение", IDM_VID_REMEMBER
@@ -98,7 +98,7 @@ BEGIN
POPUP "&Инструменты"
BEGIN
MENUITEM "&Настройки машины...", IDM_CONFIG
MENUITEM "&Обновление значков строки статуса", IDM_UPDATE_ICONS
MENUITEM "&Обновление значков строки состояния", IDM_UPDATE_ICONS
MENUITEM SEPARATOR
MENUITEM "Сделать с&криншот\tCtrl+F11", IDM_ACTION_SCREENSHOT
MENUITEM SEPARATOR
@@ -208,7 +208,7 @@ CdromSubmenu MENU DISCARDABLE
BEGIN
POPUP ""
BEGIN
MENUITEM "&Mute", IDM_CDROM_MUTE
MENUITEM "О&тключить звук", IDM_CDROM_MUTE
MENUITEM SEPARATOR
MENUITEM "П&устой", IDM_CDROM_EMPTY
MENUITEM "&Снова загрузить предыдущий образ", IDM_CDROM_RELOAD
@@ -294,8 +294,8 @@ END
#define STR_MACHINE_TYPE "Тип машины:"
#define STR_MACHINE "Системная плата:"
#define STR_CONFIGURE "Настройка"
#define STR_CPU_TYPE "Тип ЦПУ:"
#define STR_SPEED "Speed:"
#define STR_CPU_TYPE "Тип ЦП:"
#define STR_SPEED "Скорость:"
#define STR_FPU "FPU:"
#define STR_WAIT_STATES "Циклы ожидания:"
#define STR_MB "МБ"
@@ -463,7 +463,7 @@ BEGIN
IDS_2102 "Система управления полетом Thrustmaster"
IDS_2103 "Нет"
IDS_2104 "Невозможно загрузить ускорители клавиатуры."
IDS_2105 "Невозможно зарегистрировать необработанный ввод."
IDS_2105 "Невозможно зарегистрировать необработанный (RAW) ввод."
IDS_2106 "%u"
IDS_2107 "%u МБ (CHS: %i, %i, %i)"
IDS_2108 "Дисковод %i (%s): %ls"
@@ -525,21 +525,21 @@ BEGIN
IDS_2143 "Шейдеры OpenGL (*.GLSL)\0*.GLSL\0Все файлы (*.*)\0*.*\0"
IDS_2144 "Параметры OpenGL"
IDS_2145 "Вы загружаете неподдерживаемую конфигурацию"
IDS_2146 "Выбор типов CPU для этой системной платы на данной эмулируемой машине отключен.\n\nЭто позволяет выбрать процессор, который в противном случае несовместим с выбранной материнской платой. Однако, вы можете столкнуться с несовместимостью с BIOS материнской платы или другим ПО.\n\nВключение этого параметра официально не поддерживается, и все поданные отчеты об ошибках могут быть закрыты как недействительные."
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_2151 "Образы картриджей (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0Все файлы (*.*)\0*.*\0"
IDS_2152 "Error initializing renderer"
IDS_2153 "OpenGL (3.0 Core) renderer could not be initialized. Use another renderer."
IDS_2154 "Resume execution"
IDS_2155 "Pause execution"
IDS_2156 "Press Ctrl+Alt+Del"
IDS_2157 "Press Ctrl+Alt+Esc"
IDS_2158 "Hard reset"
IDS_2159 "ACPI shutdown"
IDS_2160 "Settings"
IDS_2152 "Ошибка инициализации рендерера"
IDS_2153 "Невозможно инициализировать рендерер OpenGL (3.0). Пожалуйста, используйте другой рендерер."
IDS_2154 "Возобновить выполнение"
IDS_2155 "Приостановить выполнение"
IDS_2156 "Нажать Ctrl+Alt+Del"
IDS_2157 "Нажать Ctrl+Alt+Esc"
IDS_2158 "Холодная перезагрузка"
IDS_2159 "Сигнал завершения ACPI"
IDS_2160 "Настройки машины"
END
STRINGTABLE DISCARDABLE
@@ -548,10 +548,10 @@ BEGIN
IDS_4097 "%01i:%01i"
IDS_4098 "%01i"
IDS_4099 "MFM/RLL или ESDI дисководов CD-ROM никогда не существовало"
IDS_4100 "Custom..."
IDS_4101 "Custom (large)..."
IDS_4100 "Задать вручную..."
IDS_4101 "Задать вручную (large)..."
IDS_4102 "Создать новый жёсткий диск"
IDS_4103 "Добавить существующий жёсткий диск"
IDS_4103 "Выбрать существующий жёсткий диск"
IDS_4104 "Размер образов дисков HDI не может превышать 4 ГБ."
IDS_4105 "Размер образов дисков не может превышать 127 ГБ."
IDS_4106 "Образы жёстких дисков (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0Все файлы (*.*)\0*.*\0"

View File

@@ -52,8 +52,13 @@ typedef struct {
} disk_size_t;
static const disk_size_t disk_sizes[14] = { { 0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 2, 2, 1, 64 }, /* 160k */
{ 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 2, 2, 1, 64 }, /* 180k */
static const disk_size_t disk_sizes[14] = {
// { 1, 1, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 250k 8" */
// { 1, 2, 2, 1, 1, 77, 26, 0, 0, 4, 2, 6, 68 }, /* 500k 8" */
// { 1, 1, 2, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 616k 8" */
// { 1, 2, 0, 1, 1, 77, 8, 3, 0, 1, 2, 2, 192 }, /* 1232k 8" */
{ 0, 1, 2, 1, 0, 40, 8, 2, 0xfe, 1, 2, 1, 64 }, /* 160k */
{ 0, 1, 2, 1, 0, 40, 9, 2, 0xfc, 1, 2, 2, 64 }, /* 180k */
{ 0, 2, 2, 1, 0, 40, 8, 2, 0xff, 2, 2, 1, 112 }, /* 320k */
{ 0, 2, 2, 1, 0, 40, 9, 2, 0xfd, 2, 2, 2, 112 }, /* 360k */
{ 0, 2, 2, 1, 0, 80, 8, 2, 0xfb, 2, 2, 2, 112 }, /* 640k */
@@ -698,7 +703,7 @@ NewFloppyDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
uint8_t disk_size, rpm_mode;
int ret;
FILE *f;
int zip_types, mo_types;
int zip_types, mo_types, floppy_types;
wchar_t *twcs;
switch (message) {
@@ -716,7 +721,8 @@ NewFloppyDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, LPARAM lParam)
for (i = 0; i < mo_types; i++)
SendMessage(h, CB_ADDSTRING, 0, win_get_string(IDS_5902 + i));
} else {
for (i = 0; i < 12; i++)
floppy_types = 12;
for (i = 0; i < floppy_types; i++)
SendMessage(h, CB_ADDSTRING, 0, win_get_string(IDS_5888 + i));
}
SendMessage(h, CB_SETCURSEL, 0, 0);

View File

@@ -872,6 +872,8 @@ static void opengl_main(void* param)
static void opengl_blit(int x, int y, int w, int h)
{
int row;
if ((x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (thread == NULL) ||
atomic_flag_test_and_set(&blit_info[write_pos].in_use))
{
@@ -879,7 +881,8 @@ static void opengl_blit(int x, int y, int w, int h)
return;
}
video_copy(blit_info[write_pos].buffer, &(buffer32->line[y][x]), h * ROW_LENGTH * sizeof(uint32_t));
for (row = 0; row < h; ++row)
video_copy(&(((uint8_t *) blit_info[write_pos].buffer)[row * ROW_LENGTH * sizeof(uint32_t)]), &(buffer32->line[y + row][x]), w * sizeof(uint32_t));
if (screenshots)
video_screenshot(blit_info[write_pos].buffer, 0, 0, ROW_LENGTH);

View File

@@ -274,6 +274,7 @@ sdl_blit_ex(int x, int y, int w, int h)
SDL_Rect r_src;
void *pixeldata;
int pitch, ret;
int row;
if (!sdl_enabled || (x < 0) || (y < 0) || (w <= 0) || (h <= 0) || (w > 2048) || (h > 2048) || (buffer32 == NULL) || (sdl_render == NULL) || (sdl_tex == NULL)) {
video_blit_complete();
@@ -284,7 +285,8 @@ sdl_blit_ex(int x, int y, int w, int h)
SDL_LockTexture(sdl_tex, 0, &pixeldata, &pitch);
video_copy(pixeldata, &(buffer32->line[y][x]), h * 2048 * sizeof(uint32_t));
for (row = 0; row < h; ++row)
video_copy(&(((uint8_t *) pixeldata)[row * 2048 * sizeof(uint32_t)]), &(buffer32->line[y + row][x]), w * sizeof(uint32_t));
if (screenshots)
video_screenshot((uint32_t *) pixeldata, 0, 0, 2048);