Added PL (Polish) translation.

More cleanups in ZIP/CDROM/DISK code to fix heap trashing (all the heap-trashing changes were done together with OBattler)
This commit is contained in:
waltje
2018-10-27 19:39:04 -04:00
parent 2a34698c74
commit 30405527f1
7 changed files with 954 additions and 473 deletions

View File

@@ -9,7 +9,7 @@
* Implementation of the Iomega ZIP drive with SCSI(-like) * Implementation of the Iomega ZIP drive with SCSI(-like)
* commands, for both ATAPI and SCSI usage. * commands, for both ATAPI and SCSI usage.
* *
* Version: @(#)zip.c 1.0.24 2018/10/26 * Version: @(#)zip.c 1.0.24 2018/10/27
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -469,10 +469,7 @@ static const mode_sense_pages_t mode_sense_pages_changeable250 = {
} }; } };
static void command_complete(zip_t *dev); static void do_callback(void *p);
static void zip_init(zip_t *dev);
static void zip_callback(void *p);
#ifdef _LOGGING #ifdef _LOGGING
@@ -492,109 +489,6 @@ zip_log(int level, const char *fmt, ...)
#endif #endif
int
find_zip_for_channel(uint8_t channel)
{
uint8_t i = 0;
for (i = 0; i < ZIP_NUM; i++) {
if ((zip_drives[i].bus_type == ZIP_BUS_ATAPI) &&
(zip_drives[i].bus_id.ide_channel == channel))
return i;
}
return 0xff;
}
int
zip_load(zip_t *dev, const wchar_t *fn)
{
int read_only = dev->drv->ui_writeprot;
int size = 0;
dev->drv->f = plat_fopen(fn, dev->drv->ui_writeprot ? L"rb" : L"rb+");
if (!dev->drv->ui_writeprot && !dev->drv->f) {
dev->drv->f = plat_fopen(fn, L"rb");
read_only = 1;
}
if (dev->drv->f) {
fseek(dev->drv->f, 0, SEEK_END);
size = ftell(dev->drv->f);
if ((size == ((ZIP_SECTORS_250 << 9) + 0x1000)) || (size == ((ZIP_SECTORS << 9) + 0x1000))) {
/* This is a ZDI image. */
size -= 0x1000;
dev->drv->base = 0x1000;
} else
dev->drv->base = 0;
if (dev->drv->is_250) {
if ((size != (ZIP_SECTORS_250 << 9)) && (size != (ZIP_SECTORS << 9))) {
DEBUG("File is incorrect size for a ZIP image\nMust be exactly %i or %i bytes\n",
ZIP_SECTORS_250 << 9, ZIP_SECTORS << 9);
fclose(dev->drv->f);
dev->drv->f = NULL;
dev->drv->medium_size = 0;
ui_zip_eject(dev->id); /* Make sure the host OS knows we've rejected (and ejected) the image. */
return 0;
}
} else {
if (size != (ZIP_SECTORS << 9)) {
DEBUG("File is incorrect size for a ZIP image\nMust be exactly %i bytes\n",
ZIP_SECTORS << 9);
fclose(dev->drv->f);
dev->drv->f = NULL;
dev->drv->medium_size = 0;
ui_zip_eject(dev->id); /* Make sure the host OS knows we've rejected (and ejected) the image. */
return 0;
}
}
dev->drv->medium_size = size >> 9;
fseek(dev->drv->f, dev->drv->base, SEEK_SET);
memcpy(dev->drv->image_path, fn, sizeof(dev->drv->image_path));
dev->drv->read_only = read_only;
return 1;
}
return 0;
}
void
zip_disk_reload(zip_t *dev)
{
int ret = 0;
if (wcslen(dev->drv->prev_image_path) == 0)
return;
else
ret = zip_load(dev, dev->drv->prev_image_path);
if (ret)
dev->unit_attention = 1;
}
void
zip_disk_close(zip_t *dev)
{
if (dev->drv->f) {
fclose(dev->drv->f);
dev->drv->f = NULL;
memcpy(dev->drv->prev_image_path, dev->drv->image_path, sizeof(dev->drv->prev_image_path));
memset(dev->drv->image_path, 0, sizeof(dev->drv->image_path));
dev->drv->medium_size = 0;
}
}
static void static void
set_callback(zip_t *dev) set_callback(zip_t *dev)
{ {
@@ -636,14 +530,18 @@ current_mode(zip_t *dev)
{ {
if (!supports_pio(dev) && !supports_dma(dev)) if (!supports_pio(dev) && !supports_dma(dev))
return 0; return 0;
if (supports_pio(dev) && !supports_dma(dev)) { if (supports_pio(dev) && !supports_dma(dev)) {
DEBUG("ZIP %i: Drive does not support DMA, setting to PIO\n", dev->id); DEBUG("ZIP %i: Drive does not support DMA, setting to PIO\n", dev->id);
return 1; return 1;
} }
if (!supports_pio(dev) && supports_dma(dev)) if (!supports_pio(dev) && supports_dma(dev))
return 2; return 2;
if (supports_pio(dev) && supports_dma(dev)) { if (supports_pio(dev) && supports_dma(dev)) {
DEBUG("ZIP %i: Drive supports both, setting to %s\n", dev->id, (dev->features & 1) ? "DMA" : "PIO"); DEBUG("ZIP %i: Drive supports both, setting to %s\n",
dev->id, (dev->features & 1) ? "DMA" : "PIO");
return (dev->features & 1) ? 2 : 1; return (dev->features & 1) ? 2 : 1;
} }
@@ -665,8 +563,8 @@ err_stat_to_scsi(void *p)
/* Translates ATAPI phase (DRQ, I/O, C/D) to SCSI phase (MSG, C/D, I/O). */ /* Translates ATAPI phase (DRQ, I/O, C/D) to SCSI phase (MSG, C/D, I/O). */
int static int
zip_atapi_phase_to_scsi(zip_t *dev) atapi_phase_to_scsi(zip_t *dev)
{ {
if (dev->status & 8) { if (dev->status & 8) {
switch (dev->phase & 3) { switch (dev->phase & 3) {
@@ -694,38 +592,21 @@ static void
mode_sense_load(zip_t *dev) mode_sense_load(zip_t *dev)
{ {
wchar_t temp[512]; wchar_t temp[512];
const mode_sense_pages_t *ptr;
FILE *fp; FILE *fp;
int i;
memset(&dev->ms_pages_saved, 0, sizeof(mode_sense_pages_t));
for (i = 0; i < 0x3f; i++) {
if (dev->drv->is_250) { if (dev->drv->is_250) {
if (mode_sense_pages_default250.pages[i][1] != 0) { if (zip_drives[dev->id].bus_type == ZIP_BUS_SCSI)
if (zip_drives[dev->id].bus_type == ZIP_BUS_SCSI) { ptr = &mode_sense_pages_default250_scsi;
memcpy(dev->ms_pages_saved.pages[i], else
mode_sense_pages_default250_scsi.pages[i], ptr = &mode_sense_pages_default250;
mode_sense_pages_default250_scsi.pages[i][1] + 2);
} else { } else {
memcpy(dev->ms_pages_saved.pages[i], if (zip_drives[dev->id].bus_type == ZIP_BUS_SCSI)
mode_sense_pages_default250.pages[i], ptr = &mode_sense_pages_default_scsi;
mode_sense_pages_default250.pages[i][1] + 2); else
} ptr = &mode_sense_pages_default;
}
} else {
if (mode_sense_pages_default.pages[i][1] != 0) {
if (dev->drv->bus_type == ZIP_BUS_SCSI) {
memcpy(dev->ms_pages_saved.pages[i],
mode_sense_pages_default_scsi.pages[i],
mode_sense_pages_default_scsi.pages[i][1] + 2);
} else {
memcpy(dev->ms_pages_saved.pages[i],
mode_sense_pages_default.pages[i],
mode_sense_pages_default.pages[i][1] + 2);
}
}
}
} }
memcpy(&dev->ms_pages_saved, ptr, sizeof(mode_sense_pages_t));
memset(temp, 0, sizeof(temp)); memset(temp, 0, sizeof(temp));
if (dev->drv->bus_type == ZIP_BUS_SCSI) if (dev->drv->bus_type == ZIP_BUS_SCSI)
@@ -782,6 +663,7 @@ read_capacity(void *p, uint8_t *cdb, uint8_t *buffer, uint32_t *len)
buffer[2] = (size >> 8) & 0xff; buffer[2] = (size >> 8) & 0xff;
buffer[3] = size & 0xff; buffer[3] = size & 0xff;
buffer[6] = 2; /* 512 = 0x0200 */ buffer[6] = 2; /* 512 = 0x0200 */
*len = 8; *len = 8;
return 1; return 1;
@@ -942,7 +824,7 @@ command_common(zip_t *dev)
dev->phase = 1; dev->phase = 1;
dev->pos = 0; dev->pos = 0;
if (dev->packet_status == PHASE_COMPLETE) { if (dev->packet_status == PHASE_COMPLETE) {
zip_callback((void *) dev); do_callback((void *) dev);
dev->callback = 0LL; dev->callback = 0LL;
} else { } else {
if (dev->drv->bus_type == ZIP_BUS_SCSI) { if (dev->drv->bus_type == ZIP_BUS_SCSI) {
@@ -1246,13 +1128,6 @@ zip_blocks(zip_t *dev, int32_t *len, int first_batch, int out)
} }
void
zip_insert(zip_t *dev)
{
dev->unit_attention = 1;
}
static int static int
pre_execution_check(zip_t *dev, uint8_t *cdb) pre_execution_check(zip_t *dev, uint8_t *cdb)
{ {
@@ -1333,7 +1208,7 @@ pre_execution_check(zip_t *dev, uint8_t *cdb)
static void static void
zip_seek(zip_t *dev, uint32_t pos) do_seek(zip_t *dev, uint32_t pos)
{ {
DBGLOG(1, "ZIP %i: Seek %08X\n", dev->id, pos); DBGLOG(1, "ZIP %i: Seek %08X\n", dev->id, pos);
dev->sector_pos = pos; dev->sector_pos = pos;
@@ -1341,19 +1216,19 @@ zip_seek(zip_t *dev, uint32_t pos)
static void static void
zip_rezero(zip_t *dev) do_rezero(zip_t *dev)
{ {
dev->sector_pos = dev->sector_len = 0; dev->sector_pos = dev->sector_len = 0;
zip_seek(dev, 0); do_seek(dev, 0);
} }
void static void
zip_reset(void *p) do_reset(void *p)
{ {
zip_t *dev = (zip_t *)p; zip_t *dev = (zip_t *)p;
zip_rezero(dev); do_rezero(dev);
dev->status = 0; dev->status = 0;
dev->callback = 0LL; dev->callback = 0LL;
@@ -1462,7 +1337,7 @@ buf_free(zip_t *dev)
static void static void
zip_command(void *p, uint8_t *cdb) do_command(void *p, uint8_t *cdb)
{ {
zip_t *dev = (zip_t *)p; zip_t *dev = (zip_t *)p;
int pos = 0, block_desc = 0; int pos = 0, block_desc = 0;
@@ -1564,7 +1439,7 @@ zip_command(void *p, uint8_t *cdb)
case GPCMD_REZERO_UNIT: case GPCMD_REZERO_UNIT:
dev->sector_pos = dev->sector_len = 0; dev->sector_pos = dev->sector_len = 0;
zip_seek(dev, 0); do_seek(dev, 0);
set_phase(dev, SCSI_PHASE_STATUS); set_phase(dev, SCSI_PHASE_STATUS);
break; break;
@@ -2037,7 +1912,7 @@ atapi_out:
pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5]; pos = (cdb[2] << 24) | (cdb[3] << 16) | (cdb[4] << 8) | cdb[5];
break; break;
} }
zip_seek(dev, pos); do_seek(dev, pos);
command_complete(dev); command_complete(dev);
break; break;
@@ -2143,7 +2018,7 @@ atapi_out:
DBGLOG(1, "ZIP %i: Phase: %02X, request length: %i\n", DBGLOG(1, "ZIP %i: Phase: %02X, request length: %i\n",
dev->id, dev->phase, dev->request_length); dev->id, dev->phase, dev->request_length);
if (zip_atapi_phase_to_scsi(dev) == SCSI_PHASE_STATUS) if (atapi_phase_to_scsi(dev) == SCSI_PHASE_STATUS)
buf_free(dev); buf_free(dev);
} }
@@ -2319,7 +2194,7 @@ pio_request(zip_t *dev, uint8_t out)
dev->status = BUSY_STAT; dev->status = BUSY_STAT;
dev->phase = 1; dev->phase = 1;
zip_callback(dev); do_callback(dev);
dev->callback = 0LL; dev->callback = 0LL;
set_callback(dev); set_callback(dev);
@@ -2480,7 +2355,7 @@ write_to_dma(zip_t *dev)
static void static void
zip_callback(void *p) do_callback(void *p)
{ {
zip_t *dev = (zip_t *)p; zip_t *dev = (zip_t *)p;
int ret; int ret;
@@ -2497,7 +2372,7 @@ zip_callback(void *p)
DEBUG("ZIP %i: PHASE_COMMAND\n", dev->id); DEBUG("ZIP %i: PHASE_COMMAND\n", dev->id);
dev->status = BUSY_STAT | (dev->status & ERR_STAT); dev->status = BUSY_STAT | (dev->status & ERR_STAT);
memcpy(dev->atapi_cdb, dev->buffer, 12); memcpy(dev->atapi_cdb, dev->buffer, 12);
zip_command(dev, dev->atapi_cdb); do_command(dev, dev->atapi_cdb);
return; return;
case PHASE_COMPLETE: case PHASE_COMPLETE:
@@ -2678,22 +2553,13 @@ packet_write(void *p, uint32_t val, int length)
dev->status = BUSY_STAT; dev->status = BUSY_STAT;
dev->packet_status = PHASE_COMMAND; dev->packet_status = PHASE_COMMAND;
timer_process(); timer_process();
zip_callback((void *) dev); do_callback((void *) dev);
timer_update_outstanding(); timer_update_outstanding();
} }
} }
} }
/* Peform a master init on the entire module. */
void
zip_global_init(void)
{
/* Clear the global data. */
memset(zip_drives, 0x00, sizeof(zip_drives));
}
static void static void
zip_100_identify(ide_t *ide) zip_100_identify(ide_t *ide)
{ {
@@ -2769,7 +2635,7 @@ get_timings(int ide_has_dma, int type)
static void static void
zip_identify(void *p, int ide_has_dma) do_identify(void *p, int ide_has_dma)
{ {
ide_t *ide = (ide_t *)p; ide_t *ide = (ide_t *)p;
zip_t *zip = (zip_t *)ide->p; zip_t *zip = (zip_t *)ide->p;
@@ -2789,7 +2655,7 @@ zip_identify(void *p, int ide_has_dma)
static void static void
zip_init(zip_t *dev) do_init(zip_t *dev)
{ {
dev->requested_blocks = 1; dev->requested_blocks = 1;
dev->sense[0] = 0xf0; dev->sense[0] = 0xf0;
@@ -2800,13 +2666,15 @@ zip_init(zip_t *dev)
dev->drv->bus_mode |= 2; dev->drv->bus_mode |= 2;
if (dev->drv->bus_type < ZIP_BUS_SCSI) if (dev->drv->bus_type < ZIP_BUS_SCSI)
dev->drv->bus_mode |= 1; dev->drv->bus_mode |= 1;
DEBUG("ZIP %i: Bus type %i, bus mode %i\n", dev->id, dev->drv->bus_type, dev->drv->bus_mode); DEBUG("ZIP %i: Bus type %i, bus mode %i\n",
if (dev->drv->bus_type < ZIP_BUS_SCSI) dev->id, dev->drv->bus_type, dev->drv->bus_mode);
if (dev->drv->bus_type == ZIP_BUS_ATAPI)
set_signature(dev); set_signature(dev);
dev->status = READY_STAT | DSC_STAT; dev->status = READY_STAT | DSC_STAT;
dev->pos = 0; dev->pos = 0;
dev->packet_status = 0xff; dev->packet_status = 0xff;
dev->sense[2] = dev->sense[12] = dev->sense[13] = dev->unit_attention = 0; dev->sense[2] = dev->sense[12] = dev->sense[13] = 0;
dev->unit_attention = 0;
} }
@@ -2820,22 +2688,23 @@ drive_reset(int c)
dev = (zip_t *)zip_drives[c].priv; dev = (zip_t *)zip_drives[c].priv;
if (dev == NULL) { if (dev == NULL) {
dev = (zip_t *)mem_alloc(sizeof(zip_t)); dev = (zip_t *)mem_alloc(sizeof(zip_t));
memset(dev, 0x00, sizeof(zip_t));
zip_drives[c].priv = dev; zip_drives[c].priv = dev;
} }
memset(dev, 0x00, sizeof(zip_t));
dev->id = c; dev->id = c;
dev->drv = &zip_drives[c]; dev->drv = &zip_drives[c];
switch (zip_drives[c].bus_type) { switch (zip_drives[c].bus_type) {
case ZIP_BUS_SCSI: case ZIP_BUS_SCSI:
sd = &scsi_devices[zip_drives[c].bus_id.scsi.id][zip_drives[c].bus_id.scsi.lun]; pclog(0,"ZIP: attaching to SCSI device %d:%d\n", dev->drv->bus_id.scsi.id, dev->drv->bus_id.scsi.lun);
sd = &scsi_devices[dev->drv->bus_id.scsi.id][dev->drv->bus_id.scsi.lun];
sd->p = dev; sd->p = dev;
sd->command = zip_command; sd->command = do_command;
sd->callback = zip_callback; sd->callback = do_callback;
sd->err_stat_to_scsi = err_stat_to_scsi; sd->err_stat_to_scsi = err_stat_to_scsi;
sd->request_sense = request_sense_scsi; sd->request_sense = request_sense_scsi;
sd->reset = zip_reset; sd->reset = do_reset;
sd->read_capacity = read_capacity; sd->read_capacity = read_capacity;
sd->type = SCSI_REMOVABLE_DISK; sd->type = SCSI_REMOVABLE_DISK;
@@ -2844,7 +2713,8 @@ drive_reset(int c)
break; break;
case ZIP_BUS_ATAPI: case ZIP_BUS_ATAPI:
id = ide_drives[zip_drives[c].bus_id.ide_channel]; pclog(0,"ZIP: attaching to IDE device %d\n", dev->drv->bus_id.ide_channel);
id = ide_drives[dev->drv->bus_id.ide_channel];
/* /*
* If the IDE channel is initialized, we attach to it, * If the IDE channel is initialized, we attach to it,
@@ -2856,13 +2726,13 @@ drive_reset(int c)
id->p = dev; id->p = dev;
id->get_max = get_max; id->get_max = get_max;
id->get_timings = get_timings; id->get_timings = get_timings;
id->identify = zip_identify; id->identify = do_identify;
id->set_signature = set_signature; id->set_signature = set_signature;
id->packet_write = packet_write; id->packet_write = packet_write;
id->packet_read = packet_read; id->packet_read = packet_read;
id->stop = NULL; id->stop = NULL;
id->packet_callback = zip_callback; id->packet_callback = do_callback;
id->device_reset = zip_reset; id->device_reset = do_reset;
id->interrupt_drq = 1; id->interrupt_drq = 1;
ide_atapi_attach(id); ide_atapi_attach(id);
@@ -2874,6 +2744,15 @@ drive_reset(int c)
} }
/* Peform a master init on the entire module. */
void
zip_global_init(void)
{
/* Clear the global data. */
memset(zip_drives, 0x00, sizeof(zip_drives));
}
void void
zip_hard_reset(void) zip_hard_reset(void)
{ {
@@ -2882,13 +2761,13 @@ zip_hard_reset(void)
for (c = 0; c < ZIP_NUM; c++) { for (c = 0; c < ZIP_NUM; c++) {
if ((zip_drives[c].bus_type != ZIP_BUS_ATAPI) && if ((zip_drives[c].bus_type != ZIP_BUS_ATAPI) &&
(zip_drives[c].bus_type == ZIP_BUS_SCSI)) continue; (zip_drives[c].bus_type != ZIP_BUS_SCSI)) continue;
DEBUG("ZIP hard_reset drive=%d\n", c); DEBUG("ZIP hard_reset drive=%d\n", c);
/* Ignore any SCSI ZIP drive that has an out of range ID. */ /* Ignore any SCSI ZIP drive that has an out of range ID. */
if ((zip_drives[c].bus_type == ZIP_BUS_SCSI) && if ((zip_drives[c].bus_type == ZIP_BUS_SCSI) &&
(zip_drives[c].bus_id.scsi.id > SCSI_ID_MAX)) continue; (zip_drives[c].bus_id.scsi.id >= SCSI_ID_MAX)) continue;
/* Ignore any ATAPI ZIP drive that has an out of range IDE channel. */ /* Ignore any ATAPI ZIP drive that has an out of range IDE channel. */
if ((zip_drives[c].bus_type == ZIP_BUS_ATAPI) && if ((zip_drives[c].bus_type == ZIP_BUS_ATAPI) &&
@@ -2898,7 +2777,7 @@ zip_hard_reset(void)
dev = (zip_t *)zip_drives[c].priv; dev = (zip_t *)zip_drives[c].priv;
zip_init(dev); do_init(dev);
if (wcslen(dev->drv->image_path)) if (wcslen(dev->drv->image_path))
zip_load(dev, dev->drv->image_path); zip_load(dev, dev->drv->image_path);
@@ -2935,7 +2814,7 @@ zip_reset_bus(int bus)
for (i = 0; i < ZIP_NUM; i++) { for (i = 0; i < ZIP_NUM; i++) {
if ((zip_drives[i].bus_type == bus) && zip_drives[i].priv) if ((zip_drives[i].bus_type == bus) && zip_drives[i].priv)
zip_reset(zip_drives[i].priv); do_reset(zip_drives[i].priv);
} }
} }
@@ -2980,3 +2859,96 @@ zip_bus_to_string(int bus)
return(ret); return(ret);
} }
void
zip_disk_close(zip_t *dev)
{
if (dev->drv->f) {
fclose(dev->drv->f);
dev->drv->f = NULL;
dev->drv->medium_size = 0;
}
}
int
zip_load(zip_t *dev, const wchar_t *fn)
{
int read_only = dev->drv->ui_writeprot;
int size = 0;
dev->drv->f = plat_fopen(fn, dev->drv->ui_writeprot ? L"rb" : L"rb+");
if (!dev->drv->ui_writeprot && !dev->drv->f) {
dev->drv->f = plat_fopen(fn, L"rb");
read_only = 1;
}
if (dev->drv->f) {
fseek(dev->drv->f, 0, SEEK_END);
size = ftell(dev->drv->f);
if ((size == ((ZIP_SECTORS_250 << 9) + 0x1000)) || (size == ((ZIP_SECTORS << 9) + 0x1000))) {
/* This is a ZDI image. */
size -= 0x1000;
dev->drv->base = 0x1000;
} else
dev->drv->base = 0;
if (dev->drv->is_250) {
if ((size != (ZIP_SECTORS_250 << 9)) && (size != (ZIP_SECTORS << 9))) {
DEBUG("File is incorrect size for a ZIP image\nMust be exactly %i or %i bytes\n",
ZIP_SECTORS_250 << 9, ZIP_SECTORS << 9);
fclose(dev->drv->f);
dev->drv->f = NULL;
dev->drv->medium_size = 0;
ui_zip_eject(dev->id); /* Make sure the host OS knows we've rejected (and ejected) the image. */
return 0;
}
} else {
if (size != (ZIP_SECTORS << 9)) {
DEBUG("File is incorrect size for a ZIP image\nMust be exactly %i bytes\n",
ZIP_SECTORS << 9);
fclose(dev->drv->f);
dev->drv->f = NULL;
dev->drv->medium_size = 0;
ui_zip_eject(dev->id); /* Make sure the host OS knows we've rejected (and ejected) the image. */
return 0;
}
}
dev->drv->medium_size = size >> 9;
fseek(dev->drv->f, dev->drv->base, SEEK_SET);
memcpy(dev->drv->image_path, fn, sizeof(dev->drv->image_path));
dev->drv->read_only = read_only;
return 1;
}
return 0;
}
void
zip_disk_reload(zip_t *dev)
{
int ret = 0;
if (wcslen(dev->drv->prev_image_path) == 0)
return;
else
ret = zip_load(dev, dev->drv->prev_image_path);
if (ret)
dev->unit_attention = 1;
}
void
zip_insert(zip_t *dev)
{
dev->unit_attention = 1;
}

View File

@@ -9,7 +9,7 @@
* Implementation of the Iomega ZIP drive with SCSI(-like) * Implementation of the Iomega ZIP drive with SCSI(-like)
* commands, for both ATAPI and SCSI usage. * commands, for both ATAPI and SCSI usage.
* *
* Version: @(#)zip.h 1.0.11 2018/10/26 * Version: @(#)zip.h 1.0.12 2018/10/26
* *
* Author: Miran Grca, <mgrca8@gmail.com> * Author: Miran Grca, <mgrca8@gmail.com>
* *
@@ -134,7 +134,6 @@ extern void zip_reset_bus(int bus);
extern int zip_string_to_bus(const char *str); extern int zip_string_to_bus(const char *str);
extern const char *zip_bus_to_string(int bus); extern const char *zip_bus_to_string(int bus);
extern void zip_reset(void *p);
extern int zip_load(zip_t *dev, const wchar_t *fn); extern int zip_load(zip_t *dev, const wchar_t *fn);
extern void zip_close(void); extern void zip_close(void);

View File

@@ -8,7 +8,7 @@
* *
* Emulation of SCSI (and ATAPI) CD-ROM drives. * Emulation of SCSI (and ATAPI) CD-ROM drives.
* *
* Version: @(#)scsi_cdrom.c 1.0.9 2018/10/25 * Version: @(#)scsi_cdrom.c 1.0.10 2018/10/27
* *
* Authors: Fred N. van Kempen, <decwiz@yahoo.com> * Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com> * Miran Grca, <mgrca8@gmail.com>
@@ -334,12 +334,8 @@ static const mode_sense_pages_t mode_sense_pages_changeable = {
{ GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } { GPMODE_CAPABILITIES_PAGE, 0x12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
} }; } };
uint8_t scsi_cdrom_read_capacity_cdb[12] = {0x25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
static void do_callback(void *p);
static void command_complete(scsi_cdrom_t *dev);
static void mode_sense_load(scsi_cdrom_t *dev);
static void scsi_cdrom_callback(void *p);
#ifdef _LOGGING #ifdef _LOGGING
@@ -464,33 +460,25 @@ static void
mode_sense_load(scsi_cdrom_t *dev) mode_sense_load(scsi_cdrom_t *dev)
{ {
wchar_t temp[512]; wchar_t temp[512];
const mode_sense_pages_t *ptr;
FILE *fp; FILE *fp;
int i;
memset(&dev->ms_pages_saved, 0, sizeof(mode_sense_pages_t));
for (i = 0; i < 0x3f; i++) {
if (mode_sense_pages_default.pages[i][1] != 0) {
if (dev->drv->bus_type == CDROM_BUS_SCSI)
memcpy(dev->ms_pages_saved.pages[i],
mode_sense_pages_default_scsi.pages[i],
mode_sense_pages_default_scsi.pages[i][1] + 2);
else
memcpy(dev->ms_pages_saved.pages[i],
mode_sense_pages_default.pages[i],
mode_sense_pages_default.pages[i][1] + 2);
}
}
memset(temp, 0, sizeof(temp)); memset(temp, 0, sizeof(temp));
if (dev->drv->bus_type == CDROM_BUS_SCSI) if (dev->drv->bus_type == CDROM_BUS_SCSI) {
swprintf(temp, sizeof_w(temp), swprintf(temp, sizeof_w(temp),
L"scsi_cdrom_%02i_mode_sense_bin", dev->id); L"scsi_cdrom_%02i_mode_sense_bin", dev->id);
else ptr = &mode_sense_pages_default_scsi;
} else {
swprintf(temp, sizeof_w(temp), swprintf(temp, sizeof_w(temp),
L"cdrom_%02i_mode_sense_bin", dev->id); L"cdrom_%02i_mode_sense_bin", dev->id);
ptr = &mode_sense_pages_default;
}
memcpy(&dev->ms_pages_saved, ptr, sizeof(mode_sense_pages_t));
fp = plat_fopen(nvr_path(temp), L"rb"); fp = plat_fopen(nvr_path(temp), L"rb");
if (fp != NULL) { if (fp != NULL) {
(void)fread(dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE], (void)fread(&dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE],
1, 0x10, fp); 1, 0x10, fp);
(void)fclose(fp); (void)fclose(fp);
} }
@@ -513,7 +501,7 @@ mode_sense_save(scsi_cdrom_t *dev)
fp = plat_fopen(nvr_path(temp), L"wb"); fp = plat_fopen(nvr_path(temp), L"wb");
if (fp != NULL) { if (fp != NULL) {
(void)fwrite(dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE], (void)fwrite(&dev->ms_pages_saved.pages[GPMODE_CDROM_AUDIO_PAGE],
1, 0x10, fp); 1, 0x10, fp);
(void)fclose(fp); (void)fclose(fp);
} }
@@ -536,6 +524,7 @@ read_capacity(void *priv, uint8_t *cdb, uint8_t *buffer, uint32_t *len)
buffer[2] = (size >> 8) & 0xff; buffer[2] = (size >> 8) & 0xff;
buffer[3] = size & 0xff; buffer[3] = size & 0xff;
buffer[6] = 8; /* 2048 = 0x0800 */ buffer[6] = 8; /* 2048 = 0x0800 */
*len = 8; *len = 8;
return 1; return 1;
@@ -716,7 +705,7 @@ command_common(scsi_cdrom_t *dev)
dev->id, cdrom_speeds[dev->drv->cur_speed].speed); dev->id, cdrom_speeds[dev->drv->cur_speed].speed);
if (dev->packet_status == PHASE_COMPLETE) { if (dev->packet_status == PHASE_COMPLETE) {
scsi_cdrom_callback(dev); do_callback(dev);
dev->callback = 0LL; dev->callback = 0LL;
} else { } else {
switch(dev->current_cdb[0]) { switch(dev->current_cdb[0]) {
@@ -1331,7 +1320,7 @@ read_dvd_structure(scsi_cdrom_t *dev, int format, const uint8_t *packet, uint8_t
static void static void
scsi_cdrom_insert(void *p) do_insert(void *p)
{ {
scsi_cdrom_t *dev = (scsi_cdrom_t *)p; scsi_cdrom_t *dev = (scsi_cdrom_t *)p;
@@ -1440,7 +1429,7 @@ skip_ready_check:
static void static void
scsi_cdrom_rezero(scsi_cdrom_t *dev) do_rezero(scsi_cdrom_t *dev)
{ {
dev->sector_pos = dev->sector_len = 0; dev->sector_pos = dev->sector_len = 0;
@@ -1449,14 +1438,14 @@ scsi_cdrom_rezero(scsi_cdrom_t *dev)
static void static void
scsi_cdrom_reset(void *p) do_reset(void *p)
{ {
scsi_cdrom_t *dev = (scsi_cdrom_t *) p; scsi_cdrom_t *dev = (scsi_cdrom_t *) p;
if (dev == NULL) if (dev == NULL)
return; return;
scsi_cdrom_rezero(dev); do_rezero(dev);
dev->status = 0; dev->status = 0;
dev->callback = 0LL; dev->callback = 0LL;
@@ -1516,7 +1505,7 @@ request_sense(scsi_cdrom_t *dev, uint8_t *buffer, uint8_t alloc_length)
static void static void
request_sense_for_scsi(void *p, uint8_t *buffer, uint8_t alloc_length) request_sense_scsi(void *p, uint8_t *buffer, uint8_t alloc_length)
{ {
scsi_cdrom_t *dev = (scsi_cdrom_t *)p; scsi_cdrom_t *dev = (scsi_cdrom_t *)p;
int ready = 0; int ready = 0;
@@ -1571,8 +1560,8 @@ buf_free(scsi_cdrom_t *dev)
} }
void static void
scsi_cdrom_command(void *p, uint8_t *cdb) do_command(void *p, uint8_t *cdb)
{ {
scsi_cdrom_t *dev = (scsi_cdrom_t *) p; scsi_cdrom_t *dev = (scsi_cdrom_t *) p;
int len, max_len, used_len, alloc_length, msf; int len, max_len, used_len, alloc_length, msf;
@@ -2571,7 +2560,8 @@ atapi_out:
break; break;
} }
DBGLOG(1, "CD-ROM %i: Phase: %02X, request length: %i\n", dev->phase, dev->request_length); DBGLOG(1, "CD-ROM %i: Phase: %02X, request length: %i\n",
dev->phase, dev->request_length);
if (atapi_phase_to_scsi(dev) == SCSI_PHASE_STATUS) if (atapi_phase_to_scsi(dev) == SCSI_PHASE_STATUS)
buf_free(dev); buf_free(dev);
@@ -2702,7 +2692,7 @@ pio_request(scsi_cdrom_t *dev, uint8_t out)
dev->status = BUSY_STAT; dev->status = BUSY_STAT;
dev->phase = 1; dev->phase = 1;
scsi_cdrom_callback(dev); do_callback(dev);
dev->callback = 0LL; dev->callback = 0LL;
set_callback(dev); set_callback(dev);
@@ -2745,7 +2735,8 @@ read_from_scsi_dma(uint8_t scsi_id, uint8_t scsi_lun)
if (dev == NULL) if (dev == NULL)
return 0; return 0;
DEBUG("Reading from SCSI DMA: SCSI ID %02X, init length %i\n", scsi_id, *BufLen); DEBUG("Reading from SCSI DMA: SCSI ID %02X, init length %i\n",
scsi_id, *BufLen);
memcpy(dev->buffer, scsi_devices[scsi_id][scsi_lun].cmd_buffer, *BufLen); memcpy(dev->buffer, scsi_devices[scsi_id][scsi_lun].cmd_buffer, *BufLen);
return 1; return 1;
@@ -2858,7 +2849,7 @@ write_to_dma(scsi_cdrom_t *dev)
static void static void
scsi_cdrom_callback(void *priv) do_callback(void *priv)
{ {
scsi_cdrom_t *dev = (scsi_cdrom_t *)priv; scsi_cdrom_t *dev = (scsi_cdrom_t *)priv;
int ret; int ret;
@@ -2875,7 +2866,7 @@ scsi_cdrom_callback(void *priv)
DEBUG("CD-ROM %i: PHASE_COMMAND\n", dev->id); DEBUG("CD-ROM %i: PHASE_COMMAND\n", dev->id);
dev->status = BUSY_STAT | (dev->status & ERR_STAT); dev->status = BUSY_STAT | (dev->status & ERR_STAT);
memcpy(dev->atapi_cdb, dev->buffer, 12); memcpy(dev->atapi_cdb, dev->buffer, 12);
scsi_cdrom_command(dev, dev->atapi_cdb); do_command(dev, dev->atapi_cdb);
return; return;
case PHASE_COMPLETE: case PHASE_COMPLETE:
@@ -3059,7 +3050,7 @@ packet_write(void *priv, uint32_t val, int length)
dev->status = BUSY_STAT; dev->status = BUSY_STAT;
dev->packet_status = PHASE_COMMAND; dev->packet_status = PHASE_COMMAND;
timer_process(); timer_process();
scsi_cdrom_callback(dev); do_callback(dev);
timer_update_outstanding(); timer_update_outstanding();
} }
} }
@@ -3067,7 +3058,7 @@ packet_write(void *priv, uint32_t val, int length)
static void static void
scsi_cdrom_close(void *priv) do_close(void *priv)
{ {
scsi_cdrom_t *dev = (scsi_cdrom_t *)priv; scsi_cdrom_t *dev = (scsi_cdrom_t *)priv;
@@ -3077,7 +3068,7 @@ scsi_cdrom_close(void *priv)
static void static void
scsi_cdrom_stop(void *priv) do_stop(void *priv)
{ {
scsi_cdrom_t *dev = (scsi_cdrom_t *)priv; scsi_cdrom_t *dev = (scsi_cdrom_t *)priv;
@@ -3150,7 +3141,7 @@ get_timings(int ide_has_dma, int type)
* maybe use a new function cdrom_set_ident() for that? --FvK * maybe use a new function cdrom_set_ident() for that? --FvK
*/ */
static void static void
scsi_cdrom_identify(void *priv, int ide_has_dma) do_identify(void *priv, int ide_has_dma)
{ {
ide_t *ide = (ide_t *)priv; ide_t *ide = (ide_t *)priv;
#ifdef _LOGGING #ifdef _LOGGING
@@ -3184,10 +3175,10 @@ scsi_cdrom_identify(void *priv, int ide_has_dma)
static void static void
scsi_cdrom_init(scsi_cdrom_t *dev) do_init(scsi_cdrom_t *dev)
{ {
/* Do a reset (which will also rezero it). */ /* Do a reset (which will also rezero it). */
scsi_cdrom_reset(dev); do_reset(dev);
/* Configure the drive. */ /* Configure the drive. */
dev->requested_blocks = 1; dev->requested_blocks = 1;
@@ -3241,23 +3232,23 @@ scsi_cdrom_drive_reset(int c)
dev->drv = drv; dev->drv = drv;
/* Link in our local methods. */ /* Link in our local methods. */
drv->insert = scsi_cdrom_insert; drv->insert = do_insert;
drv->get_volume = get_volume; drv->get_volume = get_volume;
drv->get_channel = get_channel; drv->get_channel = get_channel;
drv->close = scsi_cdrom_close; drv->close = do_close;
scsi_cdrom_init(dev); do_init(dev);
if (drv->bus_type == CDROM_BUS_SCSI) { if (drv->bus_type == CDROM_BUS_SCSI) {
/* SCSI CD-ROM, attach to the SCSI bus. */ /* SCSI CD-ROM, attach to the SCSI bus. */
sd = &scsi_devices[drv->bus_id.scsi.id][drv->bus_id.scsi.lun]; sd = &scsi_devices[drv->bus_id.scsi.id][drv->bus_id.scsi.lun];
sd->p = dev; sd->p = dev;
sd->command = scsi_cdrom_command; sd->command = do_command;
sd->callback = scsi_cdrom_callback; sd->callback = do_callback;
sd->err_stat_to_scsi = err_stat_to_scsi; sd->err_stat_to_scsi = err_stat_to_scsi;
sd->request_sense = request_sense_for_scsi; sd->request_sense = request_sense_scsi;
sd->reset = scsi_cdrom_reset; sd->reset = do_reset;
sd->read_capacity = read_capacity; sd->read_capacity = read_capacity;
sd->type = SCSI_REMOVABLE_CDROM; sd->type = SCSI_REMOVABLE_CDROM;
@@ -3273,13 +3264,13 @@ scsi_cdrom_drive_reset(int c)
id->p = dev; id->p = dev;
id->get_max = get_max; id->get_max = get_max;
id->get_timings = get_timings; id->get_timings = get_timings;
id->identify = scsi_cdrom_identify; id->identify = do_identify;
id->set_signature = set_signature; id->set_signature = set_signature;
id->packet_write = packet_write; id->packet_write = packet_write;
id->packet_read = packet_read; id->packet_read = packet_read;
id->stop = scsi_cdrom_stop; id->stop = do_stop;
id->packet_callback = scsi_cdrom_callback; id->packet_callback = do_callback;
id->device_reset = scsi_cdrom_reset; id->device_reset = do_reset;
id->interrupt_drq = 0; id->interrupt_drq = 0;
ide_atapi_attach(id); ide_atapi_attach(id);

File diff suppressed because it is too large Load Diff

85
src/ui/lang/Extra-PL.txt Normal file
View File

@@ -0,0 +1,85 @@
**** Additional strings for the Installer itself ****
**** (keep the > lines, add translation after : ****
> Wybierz język instalatora:
:
> Pulpit (w sensie: "Ikony Pulpitu")
:
> Wykonuję operacje usuwania plików
:
> Przygotowuję pliki do usunięcia
:
> Odtwarzam usunięte pliki
:
> Wypakowywanie plików z archiwum
:
> Wykonuję usunięcie pliku
:
> Przygotowywuję plik
:
> Odtwarzam plik
:
> Ten pakiet może być uruchomiony tylko z poziomu bootstrappera.
:
> Kilka narzędzi linii komend
:
> Zestaw przykładowych konfiguracji na początek.
:
> Zwyczajny klon Turbo-XT.
:
> Oryginalny IBM-PC.
:
> Nowy model IBM-PC
:
> Fonty Segoe UI dla Windows XP
:
> Dodatkowe pliki tłumaczeń.
:
> Twoje maszyny wirtualne.
:
> Pliki runtime dla syntezatora MIDI FluidSynth
:
> Różne pliki runtime wymagane przez aplikację.
:
> Obrazy ROM BIOS-ów emulowanych maszyn i urządzeń.
:
> Pliki runtime wymagane przez renderer SDL2.
:
> Aplikacja VARCem we własnej osobie
:
> Umowa Licencyjna
:
> Instalator [ProductName].
:
> Zespół VARCem
:

401
src/ui/lang/VARCem-PL.str Normal file
View File

@@ -0,0 +1,401 @@
/*
* VARCem Virtual ARchaeological Computer EMulator.
* An emulator of (mostly) x86-based PC systems and devices,
* using the ISA,EISA,VLB,MCA and PCI system buses, roughly
* spanning the era between 1981 and 1995.
*
* This file is part of the VARCem Project.
*
* String definitions for "Polish (Poland)" language.
*
* Version: @(#)VARCem-PL.str 1.0.1 2018/10/27
*
* Authors: Ola Hughson, <ohughson@varcem.com>
* Fred N. van Kempen, <decwiz@yahoo.com>
*
* Copyright 2018, Ola Hughson.
* Copyright 2017,2018 Fred N. van Kempen.
*
* Redistribution and use in source and binary forms, with
* or without modification, are permitted provided that the
* following conditions are met:
*
* 1. Redistributions of source code must retain the entire
* above notice, this list of conditions and the following
* disclaimer.
*
* 2. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other
* materials provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names
* of its contributors may be used to endorse or promote
* products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/* Main application strings (2000) - DO NOT TRANSLATE! */
#define STR_VERSION 1,0,1
#define STR_AUTHOR "Ola Hughson"
#define STR_EMAIL "ohughson@varcem@gmail.com"
#define STR_NAME "VARCem"
#define STR_TITLE "Virtual ARchaeological Computer EMulator"
/* Messagebox classes (2100.) */
#define STR_2100 "Błąd"
#define STR_2101 "Błąd krytyczny"
#define STR_2102 "Błąd konfiguracji"
#define STR_2103 "Ostrzeżenie"
/* System errors (2200.) */
#define STR_2200 "Nie mogę wczytać Akceleratorów Klawiatury!"
#define STR_2201 "Nie mogę odczytać surowych danych wejścia!"
#define STR_2202 "PCap jest nieustawiony, gdyż nie można go zinicjalizować"
#define STR_2203 "Nie znaleziono urządzeń typu PCap"
#define STR_2204 "Invalid PCap device"
#define STR_2205 "Nie mogę zinicjalizować %s, sprawdź, czy posiadasz bibliotekę '%s' w systemie lub katalogu programu!"
/* Application error messages (2300.) */
#define STR_2300 "Brak pamięci!"
#define STR_2301 "Nie znaleziono poprawnych obrazów pamięci ROM!"
#define STR_2302 "Nie znaleziono poprawnej konfiguracji.\n\nCzy chcesz otworzyć okno Ustawienia, aby ją utworzyć?"
#define STR_2303 "Ustawione %ls:\n\n %s\n\nnie jest dostępne.\n\nCzy chcesz otworzyć okno Ustawienia?"
#define STR_2304 "Wybrane urządzenie renderowania:\n\n %s\n\nnie jest dostępne. Użyć domyślnego?"
#define STR_2305 "Najpierw musisz zapisać ustawienia!"
#define STR_2306 "Nie mogę utworzyć pliku mapy bitowej: %ls"
#define STR_2307 "USB nie jest jeszcze wspierane"
/* Application messages (2400.) */
#define STR_2400 "Czy na pewno chcesz zapisać te ustawienia?\n\n(Może nastąpić restart...)"
#define STR_2401 "Zapisano zmiany, proszę zrestartować emulator!"
#define STR_2402 "Żądane urządzenie:\n\n %s\n\njest obecnie w trakcie opracowywania i może spowodować problemy.\n\nCzy na pewno chcesz je uruchomić?"
#define STR_2403 "Kliknij aby przechwytywać mysz"
#define STR_2404 "Wciśnij F8+F12 aby uwolnić mysz"
#define STR_2405 "Wciśnij F8+F12 lub środkowy przycisk myszki aby ją uwolnić"
#define STR_2406 "Wciśnij CTRL+ALT+PAGE DOWN aby powrócić do trybu okna"
/* Misc application strings (2500.) */
#define STR_2500 "Pliki konfiguracyjne\0*.varc\0Wszystkie pliki\0*.*\0"
/* UI: common elements (3000.) */
#define STR_OK "OK"
#define STR_CANCEL "Poniechaj"
#define STR_YES "Tak"
#define STR_NO "Nie"
#define STR_CONFIGURE "Skonfiguruj"
#define STR_BROWSE "Przeglądaj"
/* UI: dialog shared strings (3100.) */
#define STR_NONE "Żadne"
#define STR_INTERNAL "Wewnętrzny"
#define STR_DISABLED "Niesprawny"
#define STR_ENABLED "Sprawna"
#define STR_OFF "Wyłącz"
#define STR_ON "Włącz"
#define STR_UNLOCK "Unlock"
#define STR_LOCK "Zabezpiecz"
#define STR_TYPE "Typ"
#define STR_FILENAME "Nazwa pliku:"
#define STR_PROGRESS "Postęp:"
#define STR_BUS "Magistrala:"
#define STR_CHANNEL "Kanał:"
#define STR_ID "ID:"
#define STR_LUN "LUN:"
#define STR_INV_NAME "Proszę wpisać poprawną nazwę pliku"
#define STR_IMG_EXIST "Ten obraz istnieje i będzie nadpisany.\nCzy na pewno tego chcesz?"
#define STR_OPEN_READ "Nie mogę otworzyć pliku do odczytu"
#define STR_OPEN_WRITE "Nie mogę otworzyć pliku do zapisu"
#define STR_DEVCONF_1 "Konfiguracja"
#define STR_DEVCONF_2 "Urządzenie:"
/* UI dialog: About (3200.) */
#define STR_ABOUT "O VARCem.."
#define STR_3201 "Autorzy:"
#define STR_3202 "Fred N. van Kempen, Miran Grca, Sarah Walker i inni.\nOparte na wcześniejszych pracacch, takich, jak 86Box, PCem, MAME, DOSbox i Qemu."
#define STR_3203 "Wypuszczono pod 3-klauzulową licencją BSD, oraz Ogólną Publiczną Licencją GNU (w wersji 2-giej lub wyższej) dla istniejącego, zaimportowanego kodu pochodzącego z innych projektów."
#define STR_3204 "Zobacz LICENSE.txt po więcej informacji."
/* UI dialog: Localization (3210.) */
#define STR_LOCALIZE "Tłumaczenie"
#define STR_3211 "Tłumaczenia z angielskiego do tych oto języków przekazane przez:"
/* UI dialog: Status (3225.) */
/* (Unused now) */
/* UI dialog: Sound Gain (3250.) */
#define STR_SNDGAIN "Wzmocnienie dźwięku"
#define STR_3251 "Wzmocnienie"
/* UI dialog: New Image (3275.) */
#define STR_NEWIMG "Nowy obraz dyskietki"
#define STR_3276 "Rozmiar dysku:"
#define STR_3277 "Tryb RPM:"
#define STR_3278 "Perfekcyjne RPM"
#define STR_3279 "1% poniżej perfekcyjnego RPM"
#define STR_3280 "1.5% poniżej perfekcyjnego RPM"
#define STR_3281 "2% poniżej perfekcyjnego RPM"
#define STR_3282 "160 KB"
#define STR_3283 "180 KB"
#define STR_3284 "320 KB"
#define STR_3285 "360 KB"
#define STR_3286 "640 KB"
#define STR_3287 "720 KB"
#define STR_3288 "1.2 MB"
#define STR_3289 "1.25 MB"
#define STR_3290 "1.44 MB"
#define STR_3291 "DMF (klaster o rozmiarze 1024)"
#define STR_3292 "DMF (klaster o rozmiarze 2048)"
#define STR_3293 "2.88 MB"
#define STR_3294 "ZIP 100MB"
#define STR_3295 "ZIP 250MB"
/* UI dialog: Settings (3300.) */
#define STR_SETTINGS "Ustawienia"
#define STR_3310 "Typ komputera"
#define STR_3311 "Ekran"
#define STR_3312 "Urządzenia wejścia"
#define STR_3313 "Dźwięk"
#define STR_3314 "Sieć"
#define STR_3315 "Porty (COM & LPT)"
#define STR_3316 "Inne urządzenia peryferyjne"
#define STR_3317 "Dyski twarde"
#define STR_3318 "Dyski elastyczne"
#define STR_3319 "Inne urządzenia wymienne"
/* UI dialog: Settings (Machine, 3325.) */
#define STR_3325 "Typ komputera:"
#define STR_3326 "Rodzaj mikroprocesora:"
#define STR_3327 "Mikroprocesor:"
#define STR_3328 "Czasy oczekiwania:"
#define STR_3329 "Pamięć:"
#define STR_3330 "MB"
#define STR_3331 "Synchronizacja czasu:"
#define STR_3332 "Włącz jednostkę zmiennoprzecinkową"
#define STR_3333 "Dynamiczny rekompilator"
#define STR_3334 "KB"
#define STR_3335 "Domyślne"
#define STR_3336 "Wybrano (UTC)"
/* UI dialog: Settings (Video, 3350.) */
#define STR_3350 "Wideo:"
#define STR_3351 "Akcelerator serii Voodoo"
/* UI dialog: Settings (Input, 3375.) */
#define STR_3375 "Mysz:"
#define STR_3376 "Joystick:"
#define STR_3377 "1-wszy Joystick"
#define STR_3378 "2-gi Joystick"
#define STR_3379 "3-ci Joystick"
#define STR_3380 "4-ty Joystick"
/* UI dialog: Settings (Sound, 3400.) */
#define STR_3400 "Karta dźwiękowa:"
#define STR_3401 "Urządzenie wyjścia MIDI:"
#define STR_3402 "Samodzielne MPU-401"
#define STR_3403 "Użyj Nuked OPL"
#define STR_3404 "Użyj dźwięku FLOAT32"
/* UI dialog: Settings (Network, 3425.) */
#define STR_3425 "Typ sieci:"
#define STR_3426 "Urządzenie PCap:"
#define STR_3427 "Kontroler sieci:"
/* UI dialog: Settings (Ports, 3450.) */
#define STR_3450 "Game port"
#define STR_3451 "1-wszy port równoległy"
#define STR_3452 "2-gi port równoległy"
#define STR_3453 "3-ci port równoległy"
#define STR_3454 "1-wszy port szeregowy"
#define STR_3455 "2-gi port szeregowy"
/* UI dialog: Settings (Other Devices, 3475.) */
#define STR_3475 "Kontroler SCSI:"
#define STR_3476 "Kontroler dysku twardego:"
#define STR_3477 "Trzecie IDE"
#define STR_3478 "Czwarte IDE"
#define STR_3479 "karta ISABugger"
#define STR_3480 "Karta rozszerzenia pamięci na złącze ISA"
#define STR_3481 "Karta zegara czasu rzeczywistego na złącze ISA"
/* UI dialog: Settings (Hard Disks, 3500.) */
#define STR_3500 "Dyski twarde:"
#define STR_3501 "&Nowy.."
#define STR_3502 "&Istniejący.."
#define STR_3503 "&Usuń"
#define STR_3504 "Magistrala"
#define STR_3505 "Pliki"
#define STR_3506 "C"
#define STR_3507 "H"
#define STR_3508 "S"
#define STR_3509 "MB"
#define STR_3510 "MB (CHS: %u, %u, %u)"
#define STR_3511 "Własne..."
#define STR_3512 "Własne (duże)..."
#define STR_3515 "ST506"
#define STR_3516 "ESDI"
#define STR_3517 "IDE"
#define STR_3518 "SCSI"
#define STR_3519 "USB"
/* UI dialog: Settings (Add Hard Disk, 3525.) */
#define STR_3525 "Dodaj dysk twardy"
#define STR_3526 "Dodaj nowy dysk twardy"
#define STR_3527 "Dodaj istniejący dysk twardy"
#define STR_3528 "Cylindry:"
#define STR_3529 "Głowice:"
#define STR_3530 "Sektory:"
#define STR_3531 "Rozmiar (MB):"
#define STR_3532 "Typ:"
#define STR_3533 "Próbujesz stworzyć obraz dysku w formacie HDi większy, niż 4 GB"
#define STR_3534 "Próbuję stworzyć przeogromny obraz dysku twardego"
#define STR_3535 "Obrazy typów HDI lub HDX z rozmiarem sektora innym, niż 512 bajtów nie są wspierane"
#define STR_3536 "Obrazy dysków twardych\0*.hd?;*.im?;*.vhd\0Wszystkie pliki\0*.*\0"
#define STR_3537 "pamiętaj o sformatowaniu i spartycjonowaniu nowego dysku"
/* UI dialog: Settings (Floppy Drives, 3550.) */
#define STR_3550 "Napędy dysków elastycznych:"
#define STR_3551 "Typ:"
#define STR_3552 "Synchronizacja trybu Turbo"
#define STR_3553 "Sprawdź BPB"
#define STR_3554 "Turbo"
#define STR_3555 "Sprawdź BPB"
/* UI dialog: Settings (Removable Devices, 3575.) */
#define STR_3575 "Napędy CD-ROM:"
#define STR_3576 "Prędkość:"
#define STR_3577 "Napędy ZIP 150MB:"
#define STR_3578 "Napędy ZIP 250MB"
#define STR_3579 "Prędkość"
#define STR_3580 "ATAPI"
#define STR_3581 "SCSI"
#define STR_3582 "USB"
/* UI: Status Bar (3900.) */
#define STR_3900 "(pusty)"
#define STR_3901 "(napęd hosta %c:)"
#define STR_3902 " [Zabezpieczony przed zapisem]"
#define STR_3903 " [Tylko do odczytu]"
#define STR_3904 "&Nowy obraz.."
#define STR_3905 "Wczytaj &obraz.."
#define STR_3906 "&Wczytaj &ponownie poprzedni obraz"
#define STR_3907 "&Wysuń"
#define STR_3908 "Powiadom o &zmianie dysku"
#define STR_3910 "Dyskietka %i (%s): %ls"
#define STR_3911 "Wszystkie obrazy\0*.0??;*.1??;*.360;*.720;*.86f;*.bin;*.cq?;*.ddi;*.dsk;*.flp;*.hdm;*.im?;*.json;*.td0;*.*fd?;*.xdf\0Zaawansowane obrazy sektorów\0*.imd;*.json;*.td0\0Podstawowe obrazy sektorów\0*.0??;*.1??;*.360;*.720;*.bin;*.cq?;*.ddi;*.dsk;*.flp;*.hdm;*.im?;*.xdf;*.*fd?\0Flux images\0*.fdi\0Obrazy powierzchni\0*.86f\0Wszystkie pliki\0*.*\0"
#define STR_3912 "Wszystkie pliki\0*.86f;*.ddi;*.dsk;*.flp;*.im?;*.*fd?\0Podstawowe obrazy sektorów\0*.ddi;*.dsk;*.flp;*.im?;*.img;*.*fd?\0Obrazy powierzchni\0*.86f\0"
#define STR_3913 "Obrazy powierzchni\0*.86f\0"
#define STR_3914 "Wyeksportuj do &86F..."
#define STR_3920 "CD-ROM %i (%ls): %ls"
#define STR_3921 "Napęd CD/DVD hosta (%c:)"
#define STR_3922 "Obrazy CD-ROM\0*.iso;*.cue\0Wszystkie pliki (*.*)\0*.*\0"
#define STR_3923 "Wy&cisz"
#define STR_3930 "Dysk %i (%ls): %ls"
#define STR_3950 "ZIP%03i %i (%ls): %ls"
#define STR_3951 "Obrazy dyskietek ZIP\0*.im?;*.zdi\0Wszystkie pliki\0*.*\0"
#define STR_3952 "Obrazy dyskietek ZIP\0*.im?;*.zdi\0"
#define STR_3960 "Sieć (%s)"
#define STR_3970 "Dźwięk (%s)"
/* UI menu: Action (4000.) */
#define STR_ACTION "&Akcja"
#define STR_4001 "&Twardy reset"
#define STR_4002 "&Ctrl+Alt+Del"
#define STR_4003 "Wyślij Ctrl+Alt+&Esc"
#define STR_4004 "Wyślij Ctrl+Alt+&Break"
#define STR_4005 "&Pauza"
#define STR_4006 "&Wyjdź"
/* UI menu: View (4010.) */
#define STR_VIEW "&Podejrzyj"
#define STR_4011 "&Skalowalne okno"
#define STR_4012 "P&amiętaj rozmiar i pozycję"
#define STR_4013 "&Pełny ekran\tCtrl+Alt+PageUP"
#define STR_4014 "P&rawy CTRL jest lewym ALT-em"
/* UI menu: View > Renderer (4020.) */
#define STR_4020 "Urzą&dzenie renderowania"
/* UI menu: View > Window Scale Factor (4030.) */
#define STR_4030 "&Poziom wyskalowania ekranu"
#define STR_4031 "&0.5x"
#define STR_4032 "&1x"
#define STR_4033 "1.&5x"
#define STR_4034 "&2x"
/* UI menu: View > Fullscreen Stretch Mode (4040.) */
#define STR_4040 "Tryb r&ozciągnięcia na pełnym ekranie"
#define STR_4041 "Rozci&ągnięcie na pełen ekran"
#define STR_4042 "&4:3"
#define STR_4043 "&Kwadratowe piksele"
#define STR_4044 "&Skala w liczbach całkowitych"
#define STR_4045 "&Utrzymuj rozmiar"
/* UI menu: Display (4050.) */
#define STR_DISPLAY "&Ekran"
#define STR_4051 "&Obrócony ekran"
#define STR_4052 "Włącz &overscan"
#define STR_4053 "W&ymuś proporcje obrazu 4:3"
#define STR_4054 "Zmień &kontrast monitora monochromatycznego"
/* UI menu: Display > Display Type (4060.) */
#define STR_DISPTYPE "&Typ ekranu"
#define STR_4061 "Monitor &kolorowy RGB"
#define STR_4062 "Monitor w &odcieniach szarości"
#define STR_4063 "Monitor &bursztynowy"
#define STR_4064 "Monitor &zielony"
#define STR_4065 "Monitor &biały"
/* UI menu: Display > Grayscale Conversion Type (4070.) */
#define STR_GRAYSCALE "Typ konwersji w odcienie sz&arości"
#define STR_4071 "BT&601 (NTSC/PAL)"
#define STR_4072 "BT&709 (HDTV)"
#define STR_4073 "&Przeciętny"
/* UI menu: Tools (4080.) */
#define STR_TOOLS "&Narzędzia"
#define STR_4081 "&Ustawienia"
#define STR_4082 "&Język"
#define STR_4083 "&Logowanie"
#define STR_4084 "Punkt przerwania logowania"
#define STR_4085 "Przełącz logowanie %s"
#define STR_4086 "Wczytaj &konfigurację"
#define STR_4087 "&Zapisz konfigurację"
#define STR_4088 "Zrzut &ekranu"
/* UI menu: Help (4090.) */
#define STR_HELP "&Pomoc"
#define STR_4091 "&O VARCem"
/* End of file. */

View File

@@ -8,7 +8,7 @@
# #
# Supported Languages database. # Supported Languages database.
# #
# Version: @(#)VARCem.lang 1.0.4 2018/09/26 # Version: @(#)VARCem.lang 1.0.5 2018/10/27
# #
# Author: Fred N. van Kempen, <decwiz@yahoo.com> # Author: Fred N. van Kempen, <decwiz@yahoo.com>
# #
@@ -57,6 +57,7 @@ KR,0412,LANG_KOREAN,SUBLANG_KOREAN,Korean
KZ,043f,LANG_KAZAK,SUBLANG_KAZAK_KAZAKHSTAN,Kazakh KZ,043f,LANG_KAZAK,SUBLANG_KAZAK_KAZAKHSTAN,Kazakh
LT,0427,LANG_LITHUANIAN,SUBLANG_LITHUANIAN_LITHUANIA,Lithuanian LT,0427,LANG_LITHUANIAN,SUBLANG_LITHUANIAN_LITHUANIA,Lithuanian
NO,0414,LANG_NORWEGIAN,SUBLANG_NORWEGIAN_BOKMAL,Norwegian NO,0414,LANG_NORWEGIAN,SUBLANG_NORWEGIAN_BOKMAL,Norwegian
PL,0415,LANG_POLISH,SUBLANG_POLISH_POLAND,Polish
RU,0419,LANG_RUSSIAN,SUBLANG_RUSSIAN_RUSSIA,Russian RU,0419,LANG_RUSSIAN,SUBLANG_RUSSIAN_RUSSIA,Russian
SL,0424,LANG_SLOVENIAN,SUBLANG_SLOVENIAN_SLOVENIA,Slovenian SL,0424,LANG_SLOVENIAN,SUBLANG_SLOVENIAN_SLOVENIA,Slovenian
UA,0422,LANG_UKRAINIAN,SUBLANG_UKRAINIAN_UKRAINE,Ukrainian UA,0422,LANG_UKRAINIAN,SUBLANG_UKRAINIAN_UKRAINE,Ukrainian