mirror of
https://github.com/86Box/86Box.git
synced 2026-02-21 09:05:32 -07:00
Merge remote-tracking branch 'upstream/master' into feature/machine_cdpmpc
This commit is contained in:
2
.github/workflows/c-cpp.yml
vendored
2
.github/workflows/c-cpp.yml
vendored
@@ -95,7 +95,7 @@ jobs:
|
||||
libvncserver:p
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: make
|
||||
run: >-
|
||||
|
||||
17
.github/workflows/cmake.yml
vendored
17
.github/workflows/cmake.yml
vendored
@@ -62,11 +62,12 @@ jobs:
|
||||
static: on
|
||||
- name: Qt GUI
|
||||
qt: on
|
||||
static: off
|
||||
static: on
|
||||
slug: -Qt
|
||||
packages: >-
|
||||
qt5-base:p
|
||||
qt5-tools:p
|
||||
qt5-static:p
|
||||
# qt5-base:p
|
||||
# qt5-tools:p
|
||||
environment:
|
||||
# - msystem: MSYS
|
||||
# toolchain: ./cmake/flags-gcc-x86_64.cmake
|
||||
@@ -110,7 +111,7 @@ jobs:
|
||||
${{ matrix.ui.packages }}
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
|
||||
@@ -233,7 +234,7 @@ jobs:
|
||||
run: dir "C:/Program Files/Microsoft Visual Studio/2022/*/VC/Tools/MSVC/*/include" -include stdatomic.h -recurse | del
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
|
||||
@@ -340,7 +341,7 @@ jobs:
|
||||
${{ matrix.ui.packages }}
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
|
||||
@@ -426,7 +427,7 @@ jobs:
|
||||
${{ matrix.ui.packages }}
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis
|
||||
|
||||
@@ -457,10 +458,12 @@ jobs:
|
||||
sonar-scanner --define sonar.cfamily.build-wrapper-output="${{ env.BUILD_WRAPPER_OUT_DIR }}"
|
||||
|
||||
- name: Generate package
|
||||
if: 0
|
||||
run: |
|
||||
cmake --install build
|
||||
|
||||
- name: Upload artifact
|
||||
if: 0
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: '86Box${{ matrix.ui.slug }}${{ matrix.dynarec.slug }}${{ matrix.build.slug }}-macOS-x86_64-gha${{ github.run_number }}'
|
||||
|
||||
6
.github/workflows/codeql.yml
vendored
6
.github/workflows/codeql.yml
vendored
@@ -113,7 +113,7 @@ jobs:
|
||||
${{ matrix.ui.packages }}
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
@@ -199,7 +199,7 @@ jobs:
|
||||
${{ matrix.ui.packages }}
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
@@ -275,7 +275,7 @@ jobs:
|
||||
${{ matrix.ui.packages }}
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
|
||||
@@ -68,7 +68,7 @@ Donations
|
||||
---------
|
||||
|
||||
We do not charge you for the emulator but donations are still welcome:
|
||||
https://paypal.me/86Box.
|
||||
<https://paypal.me/86Box>.
|
||||
|
||||
You can also support the project on Patreon:
|
||||
https://www.patreon.com/86box.
|
||||
<https://www.patreon.com/86box>.
|
||||
|
||||
@@ -1071,11 +1071,13 @@ pc_reset_hard_init(void)
|
||||
/* Reset and reconfigure the Sound Card layer. */
|
||||
sound_card_reset();
|
||||
|
||||
/* Initialize parallel devices. */
|
||||
/* note: PLIP LPT side has to be initialized before the network side */
|
||||
lpt_devices_init();
|
||||
|
||||
/* Reset and reconfigure the Network Card layer. */
|
||||
network_reset();
|
||||
|
||||
lpt_devices_init();
|
||||
|
||||
/* Reset and reconfigure the serial ports. */
|
||||
serial_standalone_init();
|
||||
serial_passthrough_init();
|
||||
|
||||
@@ -128,14 +128,14 @@ acpi_update_irq(acpi_t *dev)
|
||||
else if (dev->irq_mode == 2)
|
||||
pci_set_mirq(5, dev->mirq_is_level, &dev->irq_state);
|
||||
else
|
||||
pci_set_mirq(PCI_DIRQ_BASE | dev->irq_line, 1, &dev->irq_state);
|
||||
picintlevel(1 << dev->irq_line, &dev->irq_state);
|
||||
} else {
|
||||
if (dev->irq_mode == 1)
|
||||
pci_clear_irq(dev->slot, dev->irq_pin, &dev->irq_state);
|
||||
else if (dev->irq_mode == 2)
|
||||
pci_clear_mirq(5, dev->mirq_is_level, &dev->irq_state);
|
||||
else
|
||||
pci_clear_mirq(PCI_DIRQ_BASE | dev->irq_line, 1, &dev->irq_state);
|
||||
picintclevel(1 << dev->irq_line, &dev->irq_state);
|
||||
}
|
||||
|
||||
acpi_timer_update(dev, (dev->regs.pmen & TMROF_EN) && !(dev->regs.pmsts & TMROF_STS));
|
||||
|
||||
@@ -531,7 +531,7 @@ cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf)
|
||||
f = pos & 0xff;
|
||||
|
||||
/* NEC CDR-260 speaks BCD. */
|
||||
if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC*/
|
||||
if ((dev->type == CDROM_TYPE_NEC_260_100) || (dev->type == CDROM_TYPE_NEC_260_101)) /*NEC*/
|
||||
msf_from_bcd(&m, &s, &f);
|
||||
|
||||
if (pos == 0xffffff) {
|
||||
@@ -545,7 +545,7 @@ cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf)
|
||||
f = len & 0xff;
|
||||
|
||||
/* NEC CDR-260 speaks BCD. */
|
||||
if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC*/
|
||||
if ((dev->type == CDROM_TYPE_NEC_260_100) || (dev->type == CDROM_TYPE_NEC_260_101)) /*NEC*/
|
||||
msf_from_bcd(&m, &s, &f);
|
||||
|
||||
len = MSFtoLBA(m, s, f) - 150;
|
||||
@@ -571,7 +571,6 @@ cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf)
|
||||
dev->cd_end = len;
|
||||
dev->cd_status = CD_STATUS_PLAYING;
|
||||
dev->cd_buflen = 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -624,6 +623,52 @@ cdrom_audio_track_search(cdrom_t *dev, uint32_t pos, int type, uint8_t playbit)
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
cdrom_audio_track_search_pioneer(cdrom_t *dev, uint32_t pos, uint8_t playbit)
|
||||
{
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
|
||||
if (dev->cd_status == CD_STATUS_DATA_ONLY)
|
||||
return 0;
|
||||
|
||||
f = bcd2bin((pos >> 24) & 0xff);
|
||||
s = bcd2bin((pos >> 16) & 0xff);
|
||||
m = bcd2bin((pos >> 8) & 0xff);
|
||||
if (pos == 0xffffffff) {
|
||||
pos = dev->seek_pos;
|
||||
} else
|
||||
pos = MSFtoLBA(m, s, f) - 150;
|
||||
|
||||
dev->seek_pos = pos;
|
||||
|
||||
dev->cd_buflen = 0;
|
||||
dev->cd_status = playbit ? CD_STATUS_PLAYING : CD_STATUS_PAUSED;
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
cdrom_audio_play_pioneer(cdrom_t *dev, uint32_t pos)
|
||||
{
|
||||
int m = 0;
|
||||
int s = 0;
|
||||
int f = 0;
|
||||
|
||||
if (dev->cd_status == CD_STATUS_DATA_ONLY)
|
||||
return 0;
|
||||
|
||||
f = bcd2bin((pos >> 24) & 0xff);
|
||||
s = bcd2bin((pos >> 16) & 0xff);
|
||||
m = bcd2bin((pos >> 8) & 0xff);
|
||||
pos = MSFtoLBA(m, s, f) - 150;
|
||||
dev->cd_end = pos;
|
||||
|
||||
dev->cd_buflen = 0;
|
||||
dev->cd_status = CD_STATUS_PLAYING;
|
||||
return 1;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
cdrom_audio_play_toshiba(cdrom_t *dev, uint32_t pos, int type)
|
||||
{
|
||||
@@ -664,7 +709,6 @@ cdrom_audio_play_toshiba(cdrom_t *dev, uint32_t pos, int type)
|
||||
|
||||
/* Unlike standard commands, if there's a data track on an Audio CD (mixed mode)
|
||||
the playback continues with the audio muted (Toshiba CD-ROM SCSI-2 manual reference). */
|
||||
|
||||
dev->cd_buflen = 0;
|
||||
dev->cd_status = CD_STATUS_PLAYING;
|
||||
return 1;
|
||||
@@ -751,7 +795,7 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf)
|
||||
ret = 0x13;
|
||||
}
|
||||
|
||||
cdrom_log("CD-ROM %i: Returned subchannel at %02i:%02i.%02i, ret = %02x, seek pos = %08x, cd_end = %08x.\n", dev->id, subc.abs_m, subc.abs_s, subc.abs_f, ret, dev->seek_pos, dev->cd_end);
|
||||
cdrom_log("CD-ROM %i: Returned subchannel absolute at %02i:%02i.%02i, relative at %02i:%02i.%02i, ret = %02x, seek pos = %08x, cd_end = %08x.\n", dev->id, subc.abs_m, subc.abs_s, subc.abs_f, subc.rel_m, subc.rel_s, subc.rel_f, ret, dev->seek_pos, dev->cd_end);
|
||||
|
||||
if (b[pos] > 1) {
|
||||
cdrom_log("B[%i] = %02x, ret = %02x.\n", pos, b[pos], ret);
|
||||
@@ -766,7 +810,7 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf)
|
||||
b[pos] = 0;
|
||||
|
||||
/* NEC CDR-260 speaks BCD. */
|
||||
if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC*/ {
|
||||
if ((dev->type == CDROM_TYPE_NEC_260_100) || (dev->type == CDROM_TYPE_NEC_260_101)) { /*NEC*/
|
||||
m = subc.abs_m;
|
||||
s = subc.abs_s;
|
||||
f = subc.abs_f;
|
||||
@@ -785,7 +829,7 @@ cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf)
|
||||
b[pos] = 0;
|
||||
|
||||
/* NEC CDR-260 speaks BCD. */
|
||||
if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) /*NEC*/ {
|
||||
if ((dev->type == CDROM_TYPE_NEC_260_100) || (dev->type == CDROM_TYPE_NEC_260_101)) { /*NEC*/
|
||||
m = subc.rel_m;
|
||||
s = subc.rel_s;
|
||||
f = subc.rel_f;
|
||||
@@ -820,36 +864,62 @@ void
|
||||
cdrom_get_current_subchannel_sony(cdrom_t *dev, uint8_t *b, int msf)
|
||||
{
|
||||
subchannel_t subc;
|
||||
int pos = 0;
|
||||
uint32_t dat;
|
||||
|
||||
dev->ops->get_subchannel(dev, dev->seek_pos, &subc);
|
||||
|
||||
cdrom_log("CD-ROM %i: Returned subchannel at %02i:%02i.%02i, seek pos = %08x, cd_end = %08x.\n", dev->id, subc.abs_m, subc.abs_s, subc.abs_f, dev->seek_pos, dev->cd_end);
|
||||
cdrom_log("CD-ROM %i: Returned subchannel at %02i:%02i.%02i, seek pos = %08x, cd_end = %08x, msf = %x.\n", dev->id, subc.abs_m, subc.abs_s, subc.abs_f, dev->seek_pos, dev->cd_end, msf);
|
||||
|
||||
b[pos++] = subc.attr;
|
||||
b[pos++] = subc.track;
|
||||
b[pos++] = subc.index;
|
||||
b[0] = subc.attr;
|
||||
b[1] = subc.track;
|
||||
b[2] = subc.index;
|
||||
|
||||
if (msf) {
|
||||
b[pos++] = subc.rel_m;
|
||||
b[pos++] = subc.rel_s;
|
||||
b[pos++] = subc.rel_f;
|
||||
b[pos++] = subc.abs_m;
|
||||
b[pos++] = subc.abs_s;
|
||||
b[pos++] = subc.abs_f;
|
||||
b[3] = subc.rel_m;
|
||||
b[4] = subc.rel_s;
|
||||
b[5] = subc.rel_f;
|
||||
b[6] = subc.abs_m;
|
||||
b[7] = subc.abs_s;
|
||||
b[8] = subc.abs_f;
|
||||
} else {
|
||||
dat = MSFtoLBA(subc.rel_m, subc.rel_s, subc.rel_f);
|
||||
b[pos++] = (dat >> 16) & 0xff;
|
||||
b[pos++] = (dat >> 8) & 0xff;
|
||||
b[pos++] = dat & 0xff;
|
||||
b[3] = (dat >> 16) & 0xff;
|
||||
b[4] = (dat >> 8) & 0xff;
|
||||
b[5] = dat & 0xff;
|
||||
dat = MSFtoLBA(subc.abs_m, subc.abs_s, subc.abs_f) - 150;
|
||||
b[pos++] = (dat >> 16) & 0xff;
|
||||
b[pos++] = (dat >> 8) & 0xff;
|
||||
b[pos++] = dat & 0xff;
|
||||
b[6] = (dat >> 16) & 0xff;
|
||||
b[7] = (dat >> 8) & 0xff;
|
||||
b[8] = dat & 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t
|
||||
cdrom_get_audio_status_pioneer(cdrom_t *dev, uint8_t *b)
|
||||
{
|
||||
uint8_t ret;
|
||||
subchannel_t subc;
|
||||
uint32_t dat;
|
||||
|
||||
dev->ops->get_subchannel(dev, dev->seek_pos, &subc);
|
||||
|
||||
if (dev->cd_status == CD_STATUS_DATA_ONLY)
|
||||
ret = 0x05;
|
||||
else {
|
||||
if (dev->cd_status == CD_STATUS_PLAYING)
|
||||
ret = dev->sound_on ? 0x00 : 0x02;
|
||||
else if (dev->cd_status == CD_STATUS_PAUSED)
|
||||
ret = 0x01;
|
||||
else
|
||||
ret = 0x03;
|
||||
}
|
||||
|
||||
b[0] = 0;
|
||||
b[1] = bin2bcd(subc.abs_m);
|
||||
b[2] = bin2bcd(subc.abs_s);
|
||||
b[3] = bin2bcd(subc.abs_f);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
cdrom_get_audio_status_sony(cdrom_t *dev, uint8_t *b, int msf)
|
||||
@@ -887,17 +957,36 @@ cdrom_get_audio_status_sony(cdrom_t *dev, uint8_t *b, int msf)
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint8_t
|
||||
cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b)
|
||||
void
|
||||
cdrom_get_current_subcodeq(cdrom_t *dev, uint8_t *b)
|
||||
{
|
||||
uint8_t ret;
|
||||
uint8_t ret;
|
||||
subchannel_t subc;
|
||||
|
||||
dev->ops->get_subchannel(dev, dev->seek_pos, &subc);
|
||||
|
||||
cdrom_log("Get Current Subcode-q Play Status = %02x, op = %02x.\n", dev->cd_status, dev->audio_op);
|
||||
b[0] = subc.attr;
|
||||
b[1] = bin2bcd(subc.track);
|
||||
b[2] = bin2bcd(subc.index);
|
||||
b[3] = bin2bcd(subc.rel_m);
|
||||
b[4] = bin2bcd(subc.rel_s);
|
||||
b[5] = bin2bcd(subc.rel_f);
|
||||
b[6] = bin2bcd(subc.abs_m);
|
||||
b[7] = bin2bcd(subc.abs_s);
|
||||
b[8] = bin2bcd(subc.abs_f);
|
||||
}
|
||||
|
||||
if ((dev->cd_status == CD_STATUS_DATA_ONLY) || (dev->cd_status == CD_STATUS_PLAYING_COMPLETED))
|
||||
uint8_t
|
||||
cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b)
|
||||
{
|
||||
uint8_t ret;
|
||||
subchannel_t subc;
|
||||
|
||||
dev->ops->get_subchannel(dev, dev->seek_pos, &subc);
|
||||
|
||||
if ((dev->cd_status == CD_STATUS_DATA_ONLY) ||
|
||||
(dev->cd_status == CD_STATUS_PLAYING_COMPLETED) ||
|
||||
(dev->cd_status == CD_STATUS_STOPPED))
|
||||
ret = 0x03;
|
||||
else
|
||||
ret = (dev->cd_status == CD_STATUS_PLAYING) ? 0x00 : dev->audio_op;
|
||||
@@ -957,9 +1046,7 @@ read_toc_normal(cdrom_t *dev, unsigned char *b, unsigned char start_track, int m
|
||||
|
||||
/* No suitable starting track, return with error. */
|
||||
if (first_track == -1) {
|
||||
#ifdef ENABLE_CDROM_LOG
|
||||
cdrom_log(" [ERROR] No suitable track found\n");
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -976,7 +1063,7 @@ read_toc_normal(cdrom_t *dev, unsigned char *b, unsigned char start_track, int m
|
||||
b[len++] = 0;
|
||||
|
||||
/* NEC CDR-260 speaks BCD. */
|
||||
if (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.01") || (!strcmp(cdrom_drive_types[dev->type].internal_name, "NEC_CD-ROM_DRIVE260_1.00"))) { /*NEC*/
|
||||
if ((dev->type == CDROM_TYPE_NEC_260_100) || (dev->type == CDROM_TYPE_NEC_260_101)) { /*NEC*/
|
||||
m = ti.m;
|
||||
s = ti.s;
|
||||
f = ti.f;
|
||||
@@ -1128,9 +1215,7 @@ read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf
|
||||
|
||||
/* No suitable starting track, return with error. */
|
||||
if (first_track == -1) {
|
||||
#ifdef ENABLE_CDROM_LOG
|
||||
cdrom_log(" [ERROR] No suitable track found\n");
|
||||
#endif
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -1138,8 +1223,8 @@ read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf
|
||||
cdrom_log(" tracks(%i) = %02X, %02X, %i:%02i.%02i\n", i, ti.attr, ti.number, ti.m, ti.s, ti.f);
|
||||
dev->ops->get_track_info(dev, i + 1, 0, &ti);
|
||||
|
||||
b[len++] = ti.attr;
|
||||
b[len++] = ti.number; /* track number */
|
||||
b[len++] = ti.attr;
|
||||
|
||||
if (msf) {
|
||||
b[len++] = 0;
|
||||
@@ -1154,7 +1239,6 @@ read_toc_sony(cdrom_t *dev, unsigned char *b, unsigned char start_track, int msf
|
||||
b[len++] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
return len;
|
||||
}
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ bin_read(void *priv, uint8_t *buffer, uint64_t seek, size_t count)
|
||||
track_file_t *tf = (track_file_t *) priv;
|
||||
|
||||
cdrom_image_backend_log("CDROM: binary_read(%08lx, pos=%" PRIu64 " count=%lu\n",
|
||||
tf->file, seek, count);
|
||||
tf->fp, seek, count);
|
||||
|
||||
if (tf->fp == NULL)
|
||||
return 0;
|
||||
@@ -101,14 +101,14 @@ bin_get_length(void *priv)
|
||||
off64_t len;
|
||||
track_file_t *tf = (track_file_t *) priv;
|
||||
|
||||
cdrom_image_backend_log("CDROM: binary_length(%08lx)\n", tf->file);
|
||||
cdrom_image_backend_log("CDROM: binary_length(%08lx)\n", tf->fp);
|
||||
|
||||
if (tf->fp == NULL)
|
||||
return 0;
|
||||
|
||||
fseeko64(tf->fp, 0, SEEK_END);
|
||||
len = ftello64(tf->fp);
|
||||
cdrom_image_backend_log("CDROM: binary_length(%08lx) = %" PRIu64 "\n", tf->file, len);
|
||||
cdrom_image_backend_log("CDROM: binary_length(%08lx) = %" PRIu64 "\n", tf->fp, len);
|
||||
|
||||
return len;
|
||||
}
|
||||
@@ -145,7 +145,7 @@ bin_init(const char *filename, int *error)
|
||||
memset(tf->fn, 0x00, sizeof(tf->fn));
|
||||
strncpy(tf->fn, filename, sizeof(tf->fn) - 1);
|
||||
tf->fp = plat_fopen64(tf->fn, "rb");
|
||||
cdrom_image_backend_log("CDROM: binary_open(%s) = %08lx\n", tf->fn, tf->file);
|
||||
cdrom_image_backend_log("CDROM: binary_open(%s) = %08lx\n", tf->fn, tf->fp);
|
||||
|
||||
if (stat(tf->fn, &stats) != 0) {
|
||||
/* Use a blank structure if stat failed. */
|
||||
@@ -332,6 +332,11 @@ cdi_get_track(cd_img_t *cdi, uint32_t sector)
|
||||
for (int i = 0; i < (cdi->tracks_num - 1); i++) {
|
||||
cur = &cdi->tracks[i];
|
||||
next = &cdi->tracks[i + 1];
|
||||
|
||||
/* Take into account cue sheets that do not start on sector 0. */
|
||||
if ((i == 0) && (sector < cur->start))
|
||||
return cur->number;
|
||||
|
||||
if ((cur->start <= sector) && (sector < next->start))
|
||||
return cur->number;
|
||||
}
|
||||
@@ -425,8 +430,9 @@ cdi_read_sector(cd_img_t *cdi, uint8_t *buffer, int raw, uint32_t sector)
|
||||
return 1;
|
||||
} else if (!raw && track_is_raw)
|
||||
return trk->file->read(trk->file, buffer, seek + offset, length);
|
||||
else
|
||||
else {
|
||||
return trk->file->read(trk->file, buffer, seek, length);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
|
||||
@@ -33,6 +33,10 @@
|
||||
#include <86box/plat.h>
|
||||
#include <86box/sound.h>
|
||||
|
||||
#define MCD_DEFAULT_IOPORT 0x310
|
||||
#define MCD_DEFAULT_IRQ 5
|
||||
#define MCD_DEFAULT_DMA 5
|
||||
|
||||
#define RAW_SECTOR_SIZE 2352
|
||||
#define COOKED_SECTOR_SIZE 2048
|
||||
|
||||
@@ -86,8 +90,9 @@ enum {
|
||||
IRQ_ERROR = 4
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
int dma, irq;
|
||||
typedef struct mcd_t {
|
||||
int dma;
|
||||
int irq;
|
||||
int change;
|
||||
int data;
|
||||
uint8_t stat;
|
||||
@@ -244,6 +249,8 @@ mitsumi_cdrom_in(uint16_t port, void *priv)
|
||||
ret |= FLAG_NOSTAT;
|
||||
pclog("Read port 1: ret = %02x\n", ret | FLAG_UNK);
|
||||
return ret | FLAG_UNK;
|
||||
case 2:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -394,10 +401,10 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv)
|
||||
}
|
||||
break;
|
||||
case CMD_GET_VER:
|
||||
dev->cmdbuf[1] = 1;
|
||||
dev->cmdbuf[2] = 'D';
|
||||
dev->cmdbuf[3] = 0;
|
||||
dev->cmdbuf_count = 4;
|
||||
dev->cmdbuf[0] = 1;
|
||||
dev->cmdbuf[1] = 'D';
|
||||
dev->cmdbuf[2] = 0;
|
||||
dev->cmdbuf_count = 3;
|
||||
break;
|
||||
case CMD_EJECT:
|
||||
cdrom_stop(&cdrom);
|
||||
@@ -419,6 +426,8 @@ mitsumi_cdrom_out(uint16_t port, uint8_t val, void *priv)
|
||||
case 1:
|
||||
mitsumi_cdrom_reset(dev);
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -432,10 +441,10 @@ mitsumi_cdrom_init(UNUSED(const device_t *info))
|
||||
dev = malloc(sizeof(mcd_t));
|
||||
memset(dev, 0x00, sizeof(mcd_t));
|
||||
|
||||
dev->irq = 5;
|
||||
dev->dma = 5;
|
||||
dev->irq = MCD_DEFAULT_IRQ;
|
||||
dev->dma = MCD_DEFAULT_DMA;
|
||||
|
||||
io_sethandler(0x310, 2,
|
||||
io_sethandler(MCD_DEFAULT_IOPORT, 3,
|
||||
mitsumi_cdrom_in, NULL, NULL, mitsumi_cdrom_out, NULL, NULL, dev);
|
||||
|
||||
mitsumi_cdrom_reset(dev);
|
||||
|
||||
@@ -510,7 +510,7 @@ load_machine(void)
|
||||
|
||||
cpu_use_dynarec = !!ini_section_get_int(cat, "cpu_use_dynarec", 0);
|
||||
fpu_softfloat = !!ini_section_get_int(cat, "fpu_softfloat", 0);
|
||||
if (machine_has_flags(machine, MACHINE_SOFTFLOAT_ONLY))
|
||||
if ((fpu_type != FPU_NONE) && machine_has_flags(machine, MACHINE_SOFTFLOAT_ONLY))
|
||||
fpu_softfloat = 1;
|
||||
|
||||
p = ini_section_get_string(cat, "time_sync", NULL);
|
||||
@@ -1804,7 +1804,7 @@ load_other_removable_devices(void)
|
||||
if (p[0] != 0x00) {
|
||||
if (path_abs(p)) {
|
||||
if (strlen(p) > 511)
|
||||
fatal("load_other_removable_devices(): strlen(p) > 511 (mo_drives[%i].image_path)\n",
|
||||
fatal("load_other_removable_devices(): strlen(p) > 511 (mo_drives[%i].image_path)\n",
|
||||
c);
|
||||
else
|
||||
strncpy(mo_drives[c].image_path, p, 511);
|
||||
|
||||
@@ -140,13 +140,13 @@ static uint8_t ide_ter_pnp_rom[] = {
|
||||
0x15, 0x09, 0xf8, 0x00, 0x01, 0x00, /* logical device BOX0001 */
|
||||
0x1c, 0x41, 0xd0, 0x06, 0x00, /* compatible device PNP0600 */
|
||||
0x31, 0x00, /* start dependent functions, preferred */
|
||||
0x22, 0x00, 0x04, /* IRQ 10 */
|
||||
0x47, 0x01, 0x68, 0x01, 0x68, 0x01, 0x01, 0x08, /* I/O 0x168, decodes 16-bit, 1-byte alignment, 8 addresses */
|
||||
0x47, 0x01, 0x6e, 0x03, 0x6e, 0x03, 0x01, 0x01, /* I/O 0x36E, decodes 16-bit, 1-byte alignment, 1 address */
|
||||
0x22, 0x00, 0x08, /* IRQ 11 */
|
||||
0x47, 0x01, 0xe8, 0x01, 0xe8, 0x01, 0x01, 0x08, /* I/O 0x1E8, decodes 16-bit, 1-byte alignment, 8 addresses */
|
||||
0x47, 0x01, 0xee, 0x03, 0xee, 0x03, 0x01, 0x01, /* I/O 0x3EE, decodes 16-bit, 1-byte alignment, 1 address */
|
||||
0x30, /* start dependent functions, acceptable */
|
||||
0x22, 0xb8, 0x1e, /* IRQ 3/4/5/7/9/10/11/12 */
|
||||
0x47, 0x01, 0x68, 0x01, 0x68, 0x01, 0x01, 0x08, /* I/O 0x168, decodes 16-bit, 1-byte alignment, 8 addresses */
|
||||
0x47, 0x01, 0x6e, 0x03, 0x6e, 0x03, 0x01, 0x01, /* I/O 0x36E, decodes 16-bit, 1-byte alignment, 1 address */
|
||||
0x47, 0x01, 0xe8, 0x01, 0xe8, 0x01, 0x01, 0x08, /* I/O 0x1E8, decodes 16-bit, 1-byte alignment, 8 addresses */
|
||||
0x47, 0x01, 0xee, 0x03, 0xee, 0x03, 0x01, 0x01, /* I/O 0x3EE, decodes 16-bit, 1-byte alignment, 1 address */
|
||||
0x30, /* start dependent functions, acceptable */
|
||||
0x22, 0xb8, 0x1e, /* IRQ 3/4/5/7/9/10/11/12 */
|
||||
0x47, 0x01, 0x00, 0x01, 0xf8, 0xff, 0x08, 0x08, /* I/O 0x100-0xFFF8, decodes 16-bit, 8-byte alignment, 8 addresses */
|
||||
@@ -163,13 +163,13 @@ static uint8_t ide_qua_pnp_rom[] = {
|
||||
0x15, 0x09, 0xf8, 0x00, 0x01, 0x00, /* logical device BOX0001 */
|
||||
0x1c, 0x41, 0xd0, 0x06, 0x00, /* compatible device PNP0600 */
|
||||
0x31, 0x00, /* start dependent functions, preferred */
|
||||
0x22, 0x00, 0x08, /* IRQ 11 */
|
||||
0x47, 0x01, 0xe8, 0x01, 0xe8, 0x01, 0x01, 0x08, /* I/O 0x1E8, decodes 16-bit, 1-byte alignment, 8 addresses */
|
||||
0x47, 0x01, 0xee, 0x03, 0xee, 0x03, 0x01, 0x01, /* I/O 0x3EE, decodes 16-bit, 1-byte alignment, 1 address */
|
||||
0x22, 0x00, 0x04, /* IRQ 10 */
|
||||
0x47, 0x01, 0x68, 0x01, 0x68, 0x01, 0x01, 0x08, /* I/O 0x168, decodes 16-bit, 1-byte alignment, 8 addresses */
|
||||
0x47, 0x01, 0x6e, 0x03, 0x6e, 0x03, 0x01, 0x01, /* I/O 0x36E, decodes 16-bit, 1-byte alignment, 1 address */
|
||||
0x30, /* start dependent functions, acceptable */
|
||||
0x22, 0xb8, 0x1e, /* IRQ 3/4/5/7/9/10/11/12 */
|
||||
0x47, 0x01, 0xe8, 0x01, 0xe8, 0x01, 0x01, 0x08, /* I/O 0x1E8, decodes 16-bit, 1-byte alignment, 8 addresses */
|
||||
0x47, 0x01, 0xee, 0x03, 0xee, 0x03, 0x01, 0x01, /* I/O 0x3EE, decodes 16-bit, 1-byte alignment, 1 address */
|
||||
0x47, 0x01, 0x68, 0x01, 0x68, 0x01, 0x01, 0x08, /* I/O 0x168, decodes 16-bit, 1-byte alignment, 8 addresses */
|
||||
0x47, 0x01, 0x6e, 0x03, 0x6e, 0x03, 0x01, 0x01, /* I/O 0x36E, decodes 16-bit, 1-byte alignment, 1 address */
|
||||
0x30, /* start dependent functions, acceptable */
|
||||
0x22, 0xb8, 0x1e, /* IRQ 3/4/5/7/9/10/11/12 */
|
||||
0x47, 0x01, 0x00, 0x01, 0xf8, 0xff, 0x08, 0x08, /* I/O 0x100-0xFFF8, decodes 16-bit, 8-byte alignment, 8 addresses */
|
||||
@@ -2979,7 +2979,7 @@ ide_ter_init(const device_t *info)
|
||||
if (irq == -1)
|
||||
isapnp_add_card(ide_ter_pnp_rom, sizeof(ide_ter_pnp_rom), ide_pnp_config_changed, NULL, NULL, NULL, (void *) 2);
|
||||
} else {
|
||||
ide_board_init(2, irq, 0x168, 0x36e, 0);
|
||||
ide_board_init(2, irq, HDC_TERTIARY_BASE, HDC_TERTIARY_SIDE, 0);
|
||||
}
|
||||
|
||||
return (ide_boards[2]);
|
||||
@@ -3010,7 +3010,7 @@ ide_qua_init(const device_t *info)
|
||||
if (irq == -1)
|
||||
isapnp_add_card(ide_qua_pnp_rom, sizeof(ide_qua_pnp_rom), ide_pnp_config_changed, NULL, NULL, NULL, (void *) 3);
|
||||
} else {
|
||||
ide_board_init(3, irq, 0x1e8, 0x3ee, 0);
|
||||
ide_board_init(3, irq, HDC_QUATERNARY_BASE, HDC_QUATERNARY_SIDE, 0);
|
||||
}
|
||||
|
||||
return (ide_boards[3]);
|
||||
@@ -3239,7 +3239,7 @@ static const device_config_t ide_ter_config[] = {
|
||||
.description = "IRQ",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = "",
|
||||
.default_int = 10,
|
||||
.default_int = HDC_TERTIARY_IRQ,
|
||||
.file_filter = "",
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
@@ -3265,7 +3265,7 @@ static const device_config_t ide_qua_config[] = {
|
||||
.description = "IRQ",
|
||||
.type = CONFIG_SELECTION,
|
||||
.default_string = "",
|
||||
.default_int = 11,
|
||||
.default_int = HDC_QUATERNARY_IRQ,
|
||||
.file_filter = "",
|
||||
.spinner = { 0 },
|
||||
.selection = {
|
||||
|
||||
@@ -222,8 +222,10 @@ static char target_xml[] = /* QEMU gdb-xml/i386-32bit.xml with modificati
|
||||
"<reg name=\"fs\" bitsize=\"16\" type=\"int32\"/>"
|
||||
"<reg name=\"gs\" bitsize=\"16\" type=\"int32\"/>"
|
||||
""
|
||||
#if 0
|
||||
"<reg name=\"fs_base\" bitsize=\"32\" type=\"int32\"/>"
|
||||
"<reg name=\"gs_base\" bitsize=\"32\" type=\"int32\"/>"
|
||||
#endif
|
||||
""
|
||||
"<flags id=\"i386_cr0\" size=\"4\">"
|
||||
"<field name=\"PG\" start=\"31\" end=\"31\"/>"
|
||||
@@ -548,10 +550,12 @@ gdbstub_client_write_reg(int index, uint8_t *buf)
|
||||
flushmmucache();
|
||||
break;
|
||||
|
||||
#if 0
|
||||
case GDB_REG_FS_BASE ... GDB_REG_GS_BASE:
|
||||
/* Do what qemu does and just load the base. */
|
||||
segment_regs[(index - 16) + (GDB_REG_FS - GDB_REG_CS)]->base = *((uint32_t *) buf);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case GDB_REG_CR0 ... GDB_REG_CR4:
|
||||
*cr_regs[index - GDB_REG_CR0] = *((uint32_t *) buf);
|
||||
@@ -627,10 +631,10 @@ gdbstub_client_respond(gdbstub_client_t *client)
|
||||
/* Send response packet. */
|
||||
client->response[client->response_pos] = '\0';
|
||||
#ifdef ENABLE_GDBSTUB_LOG
|
||||
i = client->response[995]; /* pclog_ex buffer too small */
|
||||
client->response[995] = '\0';
|
||||
i = client->response[994]; /* pclog_ex buffer too small */
|
||||
client->response[994] = '\0';
|
||||
gdbstub_log("GDB Stub: Sending response: %s\n", client->response);
|
||||
client->response[995] = i;
|
||||
client->response[994] = i;
|
||||
#endif
|
||||
send(client->socket, "$", 1, 0);
|
||||
send(client->socket, client->response, client->response_pos, 0);
|
||||
@@ -1096,7 +1100,7 @@ e00:
|
||||
} else if (!strcmp(client->response, "C")) {
|
||||
FAST_RESPONSE("QC1");
|
||||
} else if (!strcmp(client->response, "fThreadInfo")) {
|
||||
FAST_RESPONSE("m 1");
|
||||
FAST_RESPONSE("m1");
|
||||
} else if (!strcmp(client->response, "sThreadInfo")) {
|
||||
FAST_RESPONSE("l");
|
||||
} else if (!strcmp(client->response, "Rcmd")) {
|
||||
@@ -1344,7 +1348,7 @@ unknown:
|
||||
/* Flag this watchpoint's corresponding pages as having a watchpoint. */
|
||||
k = (breakpoint->end - 1) >> MEM_GRANULARITY_BITS;
|
||||
for (i = breakpoint->addr >> MEM_GRANULARITY_BITS; i <= k; i++)
|
||||
gdbstub_watch_pages[i >> 6] |= (1 << (i & 63));
|
||||
gdbstub_watch_pages[i >> 6] |= (1ULL << (i & 63));
|
||||
|
||||
breakpoint = breakpoint->next;
|
||||
} else {
|
||||
@@ -1748,8 +1752,10 @@ gdbstub_mem_access(uint32_t *addrs, int access)
|
||||
if (watchpoint) {
|
||||
/* Check if any component of this address is within the breakpoint's range. */
|
||||
for (i = 0; i < width; i++) {
|
||||
if ((addrs[i] >= watchpoint->addr) && (addrs[i] < watchpoint->end))
|
||||
if ((addrs[i] >= watchpoint->addr) && (addrs[i] < watchpoint->end)) {
|
||||
watch_addr = addrs[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i < width) {
|
||||
gdbstub_log("GDB Stub: %s watchpoint at %08X\n", (access & GDBSTUB_MEM_AWATCH) ? "Access" : ((access & GDBSTUB_MEM_WRITE) ? "Write" : "Read"), watch_addr);
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
#ifndef EMU_CDROM_H
|
||||
#define EMU_CDROM_H
|
||||
|
||||
#define CDROM_NUM 4
|
||||
#define CDROM_NUM 8
|
||||
|
||||
#define CD_STATUS_EMPTY 0
|
||||
#define CD_STATUS_DATA_ONLY 1
|
||||
@@ -60,7 +60,53 @@ enum {
|
||||
CDROM_BUS_USB = 8
|
||||
};
|
||||
|
||||
#define KNOWN_CDROM_DRIVE_TYPES 35
|
||||
enum
|
||||
{
|
||||
CDROM_TYPE_86BOX_100,
|
||||
CDROM_TYPE_AZT_CDA46802I_115,
|
||||
CDROM_TYPE_BTC_BCD36XH_U10,
|
||||
CDROM_TYPE_GOLDSTAR_CRD_8160B_314,
|
||||
CDROM_TYPE_HITACHI_CDR_8130_0020,
|
||||
CDROM_TYPE_KENWOOD_UCR_421_208E,
|
||||
CDROM_TYPE_MATSHITA_587_7S13,
|
||||
CDROM_TYPE_MATSHITA_588_LS15,
|
||||
CDROM_TYPE_MATSHITA_571_10e,
|
||||
CDROM_TYPE_MATSHITA_572_10j,
|
||||
CDROM_TYPE_MITSUMI_FX4820T_D02A,
|
||||
CDROM_TYPE_NEC_260_100,
|
||||
CDROM_TYPE_NEC_260_101,
|
||||
CDROM_TYPE_NEC_273_420,
|
||||
CDROM_TYPE_NEC_280_105,
|
||||
CDROM_TYPE_NEC_280_308,
|
||||
CDROM_TYPE_PHILIPS_PCA403CD_U31P,
|
||||
CDROM_TYPE_SONY_CDU76_10i,
|
||||
CDROM_TYPE_SONY_CDU311_30h,
|
||||
CDROM_TYPE_TOSHIBA_5302TA_0305,
|
||||
CDROM_TYPE_TOSHIBA_5702B_TA70,
|
||||
CDROM_TYPE_CHINON_CDS431_H42,
|
||||
CDROM_TYPE_DEC_RRD45_0436,
|
||||
CDROM_TYPE_MATSHITA_501_10b,
|
||||
CDROM_TYPE_NEC_38_103,
|
||||
CDROM_TYPE_NEC_211_100,
|
||||
CDROM_TYPE_NEC_464_105,
|
||||
CDROM_TYPE_SONY_CDU541_10i,
|
||||
CDROM_TYPE_SONY_CDU561_18k,
|
||||
CDROM_TYPE_SONY_CDU76S_100,
|
||||
CDROM_TYPE_PHILIPS_CDD2600_107,
|
||||
CDROM_TYPE_PIONEER_DRM604X_2403,
|
||||
CDROM_TYPE_PLEXTOR_PX32TS_103,
|
||||
CDROM_TYPE_TEAC_CD50_100,
|
||||
CDROM_TYPE_TEAC_R55S_10R,
|
||||
CDROM_TYPE_TEXEL_DMXX24_100,
|
||||
CDROM_TYPE_TOSHIBA_XM_3433,
|
||||
CDROM_TYPE_TOSHIBA_XM3201B_3232,
|
||||
CDROM_TYPE_TOSHIBA_XM3301TA_0272,
|
||||
CDROM_TYPE_TOSHIBA_XM5701TA_3136,
|
||||
CDROM_TYPE_TOSHIBA_SDM1401_1008,
|
||||
CDROM_TYPES_NUM
|
||||
};
|
||||
|
||||
#define KNOWN_CDROM_DRIVE_TYPES CDROM_TYPES_NUM
|
||||
#define BUS_TYPE_IDE CDROM_BUS_ATAPI
|
||||
#define BUS_TYPE_SCSI CDROM_BUS_SCSI
|
||||
#define BUS_TYPE_BOTH -2
|
||||
@@ -75,42 +121,48 @@ static const struct
|
||||
const char *internal_name;
|
||||
const int bus_type;
|
||||
} cdrom_drive_types[] = {
|
||||
{ "86BOX", "CD-ROM", "1.00", "(ATAPI/SCSI) 86BOX CD-ROM 1.00", "86BOX_CD-ROM_1.00", BUS_TYPE_BOTH }, /*1*/
|
||||
{ "AZT", "CDA46802I", "1.15", "(ATAPI) AZT CDA46802I 1.15", "AZT_CDA46802I_1.15", BUS_TYPE_IDE }, /*2*/
|
||||
{ "BTC", "CD-ROM BCD36XH", "U1.0", "(ATAPI) BTC CD-ROM BCD36XH U1.0", "BTC_CD-ROM_BCD36XH_U1.0", BUS_TYPE_IDE }, /*3*/
|
||||
{ "GOLDSTAR", "CRD-8160B", "3.14", "(ATAPI) GOLDSTAR CRD-8160B 3.14", "GOLDSTAR_CRD-8160B_3.14", BUS_TYPE_IDE }, /*4*/
|
||||
{ "HITACHI", "CDR-8130", "0020", "(ATAPI) HITACHI CDR-8130 0020", "HITACHI_CDR-8130_0020", BUS_TYPE_IDE }, /*5*/
|
||||
{ "KENWOOD", "CD-ROM UCR-421", "208E", "(ATAPI) KENWOOD CD-ROM UCR-421 208E", "KENWOOD_CD-ROM_UCR-421_208E", BUS_TYPE_IDE }, /*6*/
|
||||
{ "MATSHITA", "CD-ROM CR-587", "7S13", "(ATAPI) MATSHITA CD-ROM CR-587 7S13", "MATSHITA_CD-ROM_CR-587_7S13", BUS_TYPE_IDE }, /*7*/
|
||||
{ "MATSHITA", "CD-ROM CR-588", "LS15", "(ATAPI) MATSHITA CD-ROM CR-588 LS15", "MATSHITA_CD-ROM_CR-588_LS15", BUS_TYPE_IDE }, /*8*/
|
||||
{ "MATSHITA", "CR-571", "1.0e", "(ATAPI) MATSHITA CR-571 1.0e", "MATSHITA_CR-571_1.0e", BUS_TYPE_IDE }, /*9*/
|
||||
{ "MATSHITA", "CR-572", "1.0j", "(ATAPI) MATSHITA CR-572 1.0j", "MATSHITA_CR-572_1.0j", BUS_TYPE_IDE }, /*10*/
|
||||
{ "MITSUMI", "CRMC-FX4820T", "D02A", "(ATAPI) MITSUMI CRMC-FX4820T D02A", "MITSUMI_CRMC-FX4820T_D02A", BUS_TYPE_IDE }, /*11*/
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.00", "(ATAPI) NEC CD-ROM DRIVE:260 1.00", "NEC_CD-ROM_DRIVE260_1.00", BUS_TYPE_IDE }, /*12*/
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.01", "(ATAPI) NEC CD-ROM DRIVE:260 1.01", "NEC_CD-ROM_DRIVE260_1.01", BUS_TYPE_IDE }, /*13*/
|
||||
{ "NEC", "CD-ROM DRIVE:273", "4.20", "(ATAPI) NEC CD-ROM DRIVE:273 4.20", "NEC_CD-ROM_DRIVE273_4.20", BUS_TYPE_IDE }, /*14*/
|
||||
{ "NEC", "CD-ROM DRIVE:280", "1.05", "(ATAPI) NEC CD-ROM DRIVE:280 1.05", "NEC_CD-ROM_DRIVE280_1.05", BUS_TYPE_IDE }, /*15*/
|
||||
{ "NEC", "CD-ROM DRIVE:280", "3.08", "(ATAPI) NEC CD-ROM DRIVE:280 3.08", "NEC_CD-ROM_DRIVE280_3.08", BUS_TYPE_IDE }, /*16*/
|
||||
{ "PHILIPS", "CD-ROM PCA403CD", "U31P", "(ATAPI) PHILIPS CD-ROM PCA403CD U31P", "PHILIPS_CD-ROM_PCA403CD_U31P", BUS_TYPE_IDE }, /*17*/
|
||||
{ "SONY", "CD-ROM CDU76", "1.0i", "(ATAPI) SONY CD-ROM CDU76 1.0i", "SONY_CD-ROM_CDU76_1.0i", BUS_TYPE_IDE }, /*18*/
|
||||
{ "SONY", "CD-ROM CDU311", "3.0h", "(ATAPI) SONY CD-ROM CDU311 3.0h", "SONY_CD-ROM_CDU311_3.0h", BUS_TYPE_IDE }, /*19*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5302TA", "0305", "(ATAPI) TOSHIBA CD-ROM XM-5302TA 0305", "TOSHIBA_CD-ROM_XM-5302TA_0305", BUS_TYPE_IDE }, /*20*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5702B", "TA70", "(ATAPI) TOSHIBA CD-ROM XM-5702B TA70", "TOSHIBA_CD-ROM_XM-5702B_TA70", BUS_TYPE_IDE }, /*21*/
|
||||
{ "CHINON", "CD-ROM CDS-431", "H42 ", "(SCSI) CHINON CD-ROM CDS-431 H42", "CHINON_CD-ROM_CDS-431_H42", BUS_TYPE_SCSI }, /*22*/
|
||||
{ "DEC", "RRD45 (C) DEC", "0436", "(SCSI) DEC RRD45 0436", "DEC_RRD45_0436", BUS_TYPE_SCSI }, /*23*/
|
||||
{ "MATSHITA", "CD-ROM CR-501", "1.0b", "(SCSI) MATSHITA CD-ROM CR-501 1.0b", "MATSHITA_CD-ROM_CR-501_1.0b", BUS_TYPE_SCSI }, /*24*/
|
||||
{ "NEC", "CD-ROM DRIVE:75", "1.00", "(SCSI) NEC CD-ROM DRIVE:75 1.00", "NEC_CD-ROM_DRIVE75_1.00", BUS_TYPE_SCSI }, /*25*/
|
||||
{ "NEC", "CD-ROM DRIVE:464", "1.05", "(SCSI) NEC CD-ROM DRIVE:464 1.05", "NEC_CD-ROM_DRIVE464_1.05", BUS_TYPE_SCSI }, /*26*/
|
||||
{ "SONY", "CD-ROM CDU-541", "1.0i", "(SCSI) SONY CD-ROM CDU-541 1.0i", "SONY_CD-ROM_CDU-541_1.0i", BUS_TYPE_SCSI }, /*27*/
|
||||
{ "SONY", "CD-ROM CDU-76S", "1.00", "(SCSI) SONY CD-ROM CDU-76S 1.00", "SONY_CD-ROM_CDU-76S_1.00", BUS_TYPE_SCSI }, /*28*/
|
||||
{ "PHILIPS", "CDD2600", "1.07", "(SCSI) PHILIPS CDD2600 1.07", "PHILIPS_CDD2600_1.07", BUS_TYPE_SCSI }, /*29*/
|
||||
{ "PIONEER", "CD-ROM DRM-604X", "2403", "(SCSI) PIONEER CD-ROM DRM-604X 2403", "PIONEER_CD-ROM_DRM-604X_2403", BUS_TYPE_SCSI }, /*30*/
|
||||
{ "PLEXTOR", "CD-ROM PX-32TS", "1.03", "(SCSI) PLEXTOR CD-ROM PX-32TS 1.03", "PLEXTOR_CD-ROM_PX-32TS_1.03", BUS_TYPE_SCSI }, /*31*/
|
||||
{ "TEAC", "CD-R55S", "1.0R", "(SCSI) TEAC CD-R55S 1.0R", "TEAC_CD-R55S_1.0R", BUS_TYPE_SCSI }, /*32*/
|
||||
{ "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "(SCSI) TOSHIBA CD-ROM DRIVE:XM 3433", "TOSHIBA_CD-ROM_DRIVEXM_3433", BUS_TYPE_SCSI }, /*33*/
|
||||
{ "TOSHIBA", "CD-ROM XM-3301TA", "0272", "(SCSI) TOSHIBA CD-ROM XM-3301TA 0272", "TOSHIBA_CD-ROM_XM-3301TA_0272", BUS_TYPE_SCSI }, /*34*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5701TA", "3136", "(SCSI) TOSHIBA CD-ROM XM-5701TA 3136", "TOSHIBA_CD-ROM_XM-5701TA_3136", BUS_TYPE_SCSI }, /*35*/
|
||||
{ "", "", "", "", "", BUS_TYPE_NONE },
|
||||
{ "86BOX", "CD-ROM", "1.00", "86BOX CD-ROM 1.00", "86BOX_CD-ROM_1.00", BUS_TYPE_BOTH }, /*1*/
|
||||
{ "AZT", "CDA46802I", "1.15", "AZT CDA46802I 1.15", "AZT_CDA46802I_1.15", BUS_TYPE_IDE }, /*2*/
|
||||
{ "BTC", "CD-ROM BCD36XH", "U1.0", "BTC CD-ROM BCD36XH U1.0", "BTC_CD-ROM_BCD36XH_U1.0", BUS_TYPE_IDE }, /*3*/
|
||||
{ "GOLDSTAR", "CRD-8160B", "3.14", "GOLDSTAR CRD-8160B 3.14", "GOLDSTAR_CRD-8160B_3.14", BUS_TYPE_IDE }, /*4*/
|
||||
{ "HITACHI", "CDR-8130", "0020", "HITACHI CDR-8130 0020", "HITACHI_CDR-8130_0020", BUS_TYPE_IDE }, /*5*/
|
||||
{ "KENWOOD", "CD-ROM UCR-421", "208E", "KENWOOD CD-ROM UCR-421 208E", "KENWOOD_CD-ROM_UCR-421_208E", BUS_TYPE_IDE }, /*6*/
|
||||
{ "MATSHITA", "CD-ROM CR-587", "7S13", "MATSHITA CD-ROM CR-587 7S13", "MATSHITA_CD-ROM_CR-587_7S13", BUS_TYPE_IDE }, /*7*/
|
||||
{ "MATSHITA", "CD-ROM CR-588", "LS15", "MATSHITA CD-ROM CR-588 LS15", "MATSHITA_CD-ROM_CR-588_LS15", BUS_TYPE_IDE }, /*8*/
|
||||
{ "MATSHITA", "CR-571", "1.0e", "MATSHITA CR-571 1.0e", "MATSHITA_CR-571_1.0e", BUS_TYPE_IDE }, /*9*/
|
||||
{ "MATSHITA", "CR-572", "1.0j", "MATSHITA CR-572 1.0j", "MATSHITA_CR-572_1.0j", BUS_TYPE_IDE }, /*10*/
|
||||
{ "MITSUMI", "CRMC-FX4820T", "D02A", "MITSUMI CRMC-FX4820T D02A", "MITSUMI_CRMC-FX4820T_D02A", BUS_TYPE_IDE }, /*11*/
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.00", "NEC CD-ROM DRIVE:260 1.00", "NEC_CD-ROM_DRIVE260_1.00", BUS_TYPE_IDE }, /*12*/
|
||||
{ "NEC", "CD-ROM DRIVE:260", "1.01", "NEC CD-ROM DRIVE:260 1.01", "NEC_CD-ROM_DRIVE260_1.01", BUS_TYPE_IDE }, /*13*/
|
||||
{ "NEC", "CD-ROM DRIVE:273", "4.20", "NEC CD-ROM DRIVE:273 4.20", "NEC_CD-ROM_DRIVE273_4.20", BUS_TYPE_IDE }, /*14*/
|
||||
{ "NEC", "CD-ROM DRIVE:280", "1.05", "NEC CD-ROM DRIVE:280 1.05", "NEC_CD-ROM_DRIVE280_1.05", BUS_TYPE_IDE }, /*15*/
|
||||
{ "NEC", "CD-ROM DRIVE:280", "3.08", "NEC CD-ROM DRIVE:280 3.08", "NEC_CD-ROM_DRIVE280_3.08", BUS_TYPE_IDE }, /*16*/
|
||||
{ "PHILIPS", "CD-ROM PCA403CD", "U31P", "PHILIPS CD-ROM PCA403CD U31P", "PHILIPS_CD-ROM_PCA403CD_U31P", BUS_TYPE_IDE }, /*17*/
|
||||
{ "SONY", "CD-ROM CDU76", "1.0i", "SONY CD-ROM CDU76 1.0i", "SONY_CD-ROM_CDU76_1.0i", BUS_TYPE_IDE }, /*18*/
|
||||
{ "SONY", "CD-ROM CDU311", "3.0h", "SONY CD-ROM CDU311 3.0h", "SONY_CD-ROM_CDU311_3.0h", BUS_TYPE_IDE }, /*19*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5302TA", "0305", "TOSHIBA CD-ROM XM-5302TA 0305", "TOSHIBA_CD-ROM_XM-5302TA_0305", BUS_TYPE_IDE }, /*20*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5702B", "TA70", "TOSHIBA CD-ROM XM-5702B TA70", "TOSHIBA_CD-ROM_XM-5702B_TA70", BUS_TYPE_IDE }, /*21*/
|
||||
{ "CHINON", "CD-ROM CDS-431", "H42 ", "CHINON CD-ROM CDS-431 H42", "CHINON_CD-ROM_CDS-431_H42", BUS_TYPE_SCSI }, /*22*/
|
||||
{ "DEC", "RRD45 (C) DEC", "0436", "DEC RRD45 0436", "DEC_RRD45_0436", BUS_TYPE_SCSI }, /*23*/
|
||||
{ "MATSHITA", "CD-ROM CR-501", "1.0b", "MATSHITA CD-ROM CR-501 1.0b", "MATSHITA_CD-ROM_CR-501_1.0b", BUS_TYPE_SCSI }, /*24*/
|
||||
{ "NEC", "CD-ROM DRIVE:38", "1.03", "NEC CD-ROM DRIVE:38 1.03", "NEC_CD-ROM_DRIVE38_1.03", BUS_TYPE_SCSI }, /*25*/
|
||||
{ "NEC", "CD-ROM DRIVE:211", "1.00", "NEC CD-ROM DRIVE:211 1.00", "NEC_CD-ROM_DRIVE211_1.00", BUS_TYPE_SCSI }, /*26*/
|
||||
{ "NEC", "CD-ROM DRIVE:464", "1.05", "NEC CD-ROM DRIVE:464 1.05", "NEC_CD-ROM_DRIVE464_1.05", BUS_TYPE_SCSI }, /*27*/
|
||||
{ "SONY", "CD-ROM CDU-541", "1.0i", "SONY CD-ROM CDU-541 1.0i", "SONY_CD-ROM_CDU-541_1.0i", BUS_TYPE_SCSI }, /*28*/
|
||||
{ "SONY", "CD-ROM CDU-561", "1.8k", "SONY CD-ROM CDU-561 1.8k", "SONY_CD-ROM_CDU-561_1.8k", BUS_TYPE_SCSI }, /*29*/
|
||||
{ "SONY", "CD-ROM CDU-76S", "1.00", "SONY CD-ROM CDU-76S 1.00", "SONY_CD-ROM_CDU-76S_1.00", BUS_TYPE_SCSI }, /*30*/
|
||||
{ "PHILIPS", "CDD2600", "1.07", "PHILIPS CDD2600 1.07", "PHILIPS_CDD2600_1.07", BUS_TYPE_SCSI }, /*31*/
|
||||
{ "PIONEER", "CD-ROM DRM-604X", "2403", "PIONEER CD-ROM DRM-604X 2403", "PIONEER_CD-ROM_DRM-604X_2403", BUS_TYPE_SCSI }, /*32*/
|
||||
{ "PLEXTOR", "CD-ROM PX-32TS", "1.03", "PLEXTOR CD-ROM PX-32TS 1.03", "PLEXTOR_CD-ROM_PX-32TS_1.03", BUS_TYPE_SCSI }, /*33*/
|
||||
{ "TEAC", "CD 50", "1.00", "TEAC CD 50 1.00", "TEAC_CD_50_1.00", BUS_TYPE_SCSI }, /*34*/
|
||||
{ "TEAC", "CD-ROM R55S", "1.0R", "TEAC CD-ROM R55S 1.0R", "TEAC_CD-ROM_R55S_1.0R", BUS_TYPE_SCSI }, /*35*/
|
||||
{ "TEXEL", "CD-ROM DM-XX24", "1.00", "TEXEL CD-ROM DM-XX24 1.00", "TEXEL_CD-ROM_DM-XX24_1.00", BUS_TYPE_SCSI }, /*36*/
|
||||
{ "TOSHIBA", "CD-ROM DRIVE:XM", "3433", "TOSHIBA CD-ROM DRIVE:XM 3433", "TOSHIBA_CD-ROM_DRIVEXM_3433", BUS_TYPE_SCSI }, /*37*/
|
||||
{ "TOSHIBA", "CD-ROM XM-3201B", "3232", "TOSHIBA CD-ROM XM-3201B 3232", "TOSHIBA_CD-ROM_XM-3201B_3232", BUS_TYPE_SCSI }, /*38*/
|
||||
{ "TOSHIBA", "CD-ROM XM-3301TA", "0272", "TOSHIBA CD-ROM XM-3301TA 0272", "TOSHIBA_CD-ROM_XM-3301TA_0272", BUS_TYPE_SCSI }, /*39*/
|
||||
{ "TOSHIBA", "CD-ROM XM-5701TA", "3136", "TOSHIBA CD-ROM XM-5701TA 3136", "TOSHIBA_CD-ROM_XM-5701TA_3136", BUS_TYPE_SCSI }, /*40*/
|
||||
{ "TOSHIBA", "DVD-ROM SD-M1401", "1008", "TOSHIBA DVD-ROM SD-M1401 1008", "TOSHIBA_DVD-ROM_SD-M1401_1008", BUS_TYPE_SCSI }, /*41*/
|
||||
{ "", "", "", "", "", BUS_TYPE_NONE },
|
||||
};
|
||||
|
||||
/* To shut up the GCC compilers. */
|
||||
@@ -186,6 +238,7 @@ typedef struct cdrom {
|
||||
int prev_host_drive;
|
||||
int cd_buflen;
|
||||
int audio_op;
|
||||
int sony_msf;
|
||||
|
||||
const cdrom_ops_t *ops;
|
||||
|
||||
@@ -193,8 +246,8 @@ typedef struct cdrom {
|
||||
|
||||
void (*insert)(void *priv);
|
||||
void (*close)(void *priv);
|
||||
uint32_t (*get_volume)(void *priv, int channel);
|
||||
uint32_t (*get_channel)(void *priv, int channel);
|
||||
uint32_t (*get_volume)(void *p, int channel);
|
||||
uint32_t (*get_channel)(void *p, int channel);
|
||||
|
||||
int16_t cd_buffer[BUF_SIZE];
|
||||
} cdrom_t;
|
||||
@@ -215,12 +268,16 @@ extern int cdrom_is_pre(cdrom_t *dev, uint32_t lba);
|
||||
extern int cdrom_audio_callback(cdrom_t *dev, int16_t *output, int len);
|
||||
extern uint8_t cdrom_audio_play(cdrom_t *dev, uint32_t pos, uint32_t len, int ismsf);
|
||||
extern uint8_t cdrom_audio_track_search(cdrom_t *dev, uint32_t pos, int type, uint8_t playbit);
|
||||
extern uint8_t cdrom_audio_track_search_pioneer(cdrom_t *dev, uint32_t pos, uint8_t playbit);
|
||||
extern uint8_t cdrom_audio_play_pioneer(cdrom_t *dev, uint32_t pos);
|
||||
extern uint8_t cdrom_audio_play_toshiba(cdrom_t *dev, uint32_t pos, int type);
|
||||
extern void cdrom_audio_pause_resume(cdrom_t *dev, uint8_t resume);
|
||||
extern uint8_t cdrom_audio_scan(cdrom_t *dev, uint32_t pos, int type);
|
||||
extern uint8_t cdrom_get_audio_status_pioneer(cdrom_t *dev, uint8_t *b);
|
||||
extern uint8_t cdrom_get_audio_status_sony(cdrom_t *dev, uint8_t *b, int msf);
|
||||
extern uint8_t cdrom_get_current_subchannel(cdrom_t *dev, uint8_t *b, int msf);
|
||||
extern void cdrom_get_current_subchannel_sony(cdrom_t *dev, uint8_t *b, int msf);
|
||||
extern void cdrom_get_current_subcodeq(cdrom_t *dev, uint8_t *b);
|
||||
extern uint8_t cdrom_get_current_subcodeq_playstatus(cdrom_t *dev, uint8_t *b);
|
||||
extern int cdrom_read_toc(cdrom_t *dev, unsigned char *b, int type,
|
||||
unsigned char start_track, int msf, int max_len);
|
||||
@@ -243,6 +300,10 @@ extern int cdrom_image_open(cdrom_t *dev, const char *fn);
|
||||
extern void cdrom_image_close(cdrom_t *dev);
|
||||
extern void cdrom_image_reset(cdrom_t *dev);
|
||||
|
||||
extern void cdrom_ioctl_eject(void);
|
||||
extern void cdrom_ioctl_load(void);
|
||||
extern int cdrom_ioctl_open(cdrom_t *dev, const char d);
|
||||
|
||||
extern void cdrom_update_cdb(uint8_t *cdb, int lba_pos,
|
||||
int number_of_blocks);
|
||||
|
||||
|
||||
@@ -36,19 +36,19 @@ enum {
|
||||
|
||||
#ifdef USE_GDBSTUB
|
||||
|
||||
# define GDBSTUB_MEM_ACCESS(addr, access, width) \
|
||||
uint32_t gdbstub_page = addr >> MEM_GRANULARITY_BITS; \
|
||||
if (gdbstub_watch_pages[gdbstub_page >> 6] & (1 << (gdbstub_page & 63))) { \
|
||||
uint32_t gdbstub_addrs[width]; \
|
||||
for (int gdbstub_i = 0; gdbstub_i < width; gdbstub_i++) \
|
||||
gdbstub_addrs[gdbstub_i] = addr + gdbstub_i; \
|
||||
gdbstub_mem_access(gdbstub_addrs, access | width); \
|
||||
# define GDBSTUB_MEM_ACCESS(addr, access, width) \
|
||||
uint32_t gdbstub_page = (addr) >> MEM_GRANULARITY_BITS; \
|
||||
if (gdbstub_watch_pages[gdbstub_page >> 6] & (1ULL << (gdbstub_page & 63))) { \
|
||||
uint32_t gdbstub_addrs[(width)]; \
|
||||
for (int gdbstub_i = 0; gdbstub_i < (width); gdbstub_i++) \
|
||||
gdbstub_addrs[gdbstub_i] = (addr) + gdbstub_i; \
|
||||
gdbstub_mem_access(gdbstub_addrs, (access) | (width)); \
|
||||
}
|
||||
|
||||
# define GDBSTUB_MEM_ACCESS_FAST(addrs, access, width) \
|
||||
uint32_t gdbstub_page = addr >> MEM_GRANULARITY_BITS; \
|
||||
if (gdbstub_watch_pages[gdbstub_page >> 6] & (1 << (gdbstub_page & 63))) \
|
||||
gdbstub_mem_access(addrs, access | width);
|
||||
# define GDBSTUB_MEM_ACCESS_FAST(addrs, access, width) \
|
||||
uint32_t gdbstub_page = (addrs)[0] >> MEM_GRANULARITY_BITS; \
|
||||
if (gdbstub_watch_pages[gdbstub_page >> 6] & (1ULL << (gdbstub_page & 63))) \
|
||||
gdbstub_mem_access((addrs), (access) | (width));
|
||||
|
||||
extern int gdbstub_step, gdbstub_next_asap;
|
||||
extern uint64_t gdbstub_watch_pages[(((uint32_t) -1) >> (MEM_GRANULARITY_BITS + 6)) + 1];
|
||||
|
||||
@@ -28,12 +28,12 @@
|
||||
#define HDC_SECONDARY_BASE 0x0170
|
||||
#define HDC_SECONDARY_SIDE 0x0376
|
||||
#define HDC_SECONDARY_IRQ 15
|
||||
#define HDC_TERTIARY_BASE 0x0168
|
||||
#define HDC_TERTIARY_SIDE 0x036E
|
||||
#define HDC_TERTIARY_IRQ 10
|
||||
#define HDC_QUATERNARY_BASE 0x01E8
|
||||
#define HDC_QUATERNARY_SIDE 0x03EE
|
||||
#define HDC_QUATERNARY_IRQ 11
|
||||
#define HDC_TERTIARY_BASE 0x01E8
|
||||
#define HDC_TERTIARY_SIDE 0x03EE
|
||||
#define HDC_TERTIARY_IRQ 11
|
||||
#define HDC_QUATERNARY_BASE 0x0168
|
||||
#define HDC_QUATERNARY_SIDE 0x036E
|
||||
#define HDC_QUATERNARY_IRQ 10
|
||||
|
||||
enum {
|
||||
IDE_NONE = 0,
|
||||
|
||||
@@ -299,10 +299,10 @@ typedef struct _machine_ {
|
||||
uint32_t type;
|
||||
uintptr_t chipset;
|
||||
int (*init)(const struct _machine_ *);
|
||||
uintptr_t pad;
|
||||
uintptr_t pad0;
|
||||
uintptr_t pad1;
|
||||
uintptr_t pad2;
|
||||
uint8_t (*p1_handler)(uint8_t write, uint8_t val);
|
||||
uint32_t (*gpio_handler)(uint8_t write, uint32_t val);
|
||||
uintptr_t available_flag;
|
||||
uint32_t (*gpio_acpi_handler)(uint8_t write, uint32_t val);
|
||||
const machine_cpu_t cpu;
|
||||
uintptr_t bus_flags;
|
||||
uintptr_t flags;
|
||||
@@ -314,10 +314,7 @@ typedef struct _machine_ {
|
||||
#else
|
||||
void *kbc_device;
|
||||
#endif /* EMU_DEVICE_H */
|
||||
/* Bits:
|
||||
7-0 Set bits are forced set on P1 (no forced set = 0x00);
|
||||
15-8 Clear bits are forced clear on P1 (no foced clear = 0xff). */
|
||||
uint16_t kbc_p1;
|
||||
uint8_t kbc_p1;
|
||||
uint32_t gpio;
|
||||
uint32_t gpio_acpi;
|
||||
#ifdef EMU_DEVICE_H
|
||||
@@ -375,10 +372,17 @@ extern int machine_has_mouse(void);
|
||||
extern int machine_is_sony(void);
|
||||
|
||||
extern uint8_t machine_get_p1(void);
|
||||
extern void machine_load_p1(int m);
|
||||
extern uint32_t machine_get_gpi(void);
|
||||
extern void machine_load_gpi(int m);
|
||||
extern void machine_set_gpi(uint32_t gpi);
|
||||
extern void machine_set_p1(uint8_t val);
|
||||
extern void machine_init_p1(void);
|
||||
extern uint8_t machine_handle_p1(uint8_t write, uint8_t val);
|
||||
extern uint32_t machine_get_gpio(void);
|
||||
extern void machine_set_gpio(uint32_t val);
|
||||
extern void machine_init_gpio(void);
|
||||
extern uint32_t machine_handle_gpio(uint8_t write, uint32_t val);
|
||||
extern uint32_t machine_get_gpio_acpi(void);
|
||||
extern void machine_set_gpio_acpi(uint32_t gpio_val);
|
||||
extern void machine_init_gpio_acpi(void);
|
||||
extern uint32_t machine_handle_gpio_acpi(uint8_t write, uint32_t val);
|
||||
|
||||
/* Initialization functions for boards and systems. */
|
||||
extern void machine_common_init(const machine_t *);
|
||||
|
||||
@@ -37,17 +37,17 @@ typedef struct mo_type_t {
|
||||
#define KNOWN_MO_TYPES 10
|
||||
static const mo_type_t mo_types[KNOWN_MO_TYPES] = {
|
||||
// 3.5" standard M.O. disks
|
||||
{248826, 512 },
|
||||
{ 446325, 512 },
|
||||
{ 1041500, 512 },
|
||||
{ 310352, 2048},
|
||||
{ 605846, 2048},
|
||||
{ 1063146, 2048},
|
||||
{ 248826, 512 },
|
||||
{ 446325, 512 },
|
||||
{ 1041500, 512 },
|
||||
{ 310352, 2048 },
|
||||
{ 605846, 2048 },
|
||||
{ 1063146, 2048 },
|
||||
// 5.25" M.O. disks
|
||||
{ 573624, 512 },
|
||||
{ 314568, 1024},
|
||||
{ 904995, 512 },
|
||||
{ 637041, 1024},
|
||||
{ 573624, 512 },
|
||||
{ 314568, 1024 },
|
||||
{ 904995, 512 },
|
||||
{ 637041, 1024 },
|
||||
};
|
||||
|
||||
typedef struct mo_drive_type_t {
|
||||
@@ -60,7 +60,7 @@ typedef struct mo_drive_type_t {
|
||||
#define KNOWN_MO_DRIVE_TYPES 22
|
||||
static const mo_drive_type_t mo_drive_types[KNOWN_MO_DRIVE_TYPES] = {
|
||||
{"86BOX", "MAGNETO OPTICAL", "1.00", { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }},
|
||||
{ "FUJITSU", "M2512A", "1314", { 1, 1, 0, 0, 0, 0, 0, 0, 0 } },
|
||||
{ "FUJITSU", "M2512A", "1314", { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 }},
|
||||
{ "FUJITSU", "M2513-MCC3064SS", "1.00", { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }},
|
||||
{ "FUJITSU", "MCE3130SS", "0070", { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 }},
|
||||
{ "FUJITSU", "MCF3064SS", "0030", { 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 }},
|
||||
@@ -165,8 +165,10 @@ typedef struct mo_t {
|
||||
|
||||
extern mo_t *mo[MO_NUM];
|
||||
extern mo_drive_t mo_drives[MO_NUM];
|
||||
#if 0
|
||||
extern uint8_t atapi_mo_drives[8];
|
||||
extern uint8_t scsi_mo_drives[16];
|
||||
#endif
|
||||
|
||||
#define mo_sense_error dev->sense[0]
|
||||
#define mo_sense_key dev->sense[2]
|
||||
|
||||
@@ -78,13 +78,9 @@ enum {
|
||||
NET_LINK_1000_FD = (1 << 8),
|
||||
};
|
||||
|
||||
/* Supported network cards. */
|
||||
enum {
|
||||
NONE = 0,
|
||||
NE1000 = 1,
|
||||
NE2000 = 2,
|
||||
RTL8019AS = 3,
|
||||
RTL8029AS = 4
|
||||
NET_NONE = 0,
|
||||
NET_INTERNAL
|
||||
};
|
||||
|
||||
enum {
|
||||
|
||||
@@ -146,11 +146,11 @@
|
||||
pci_register_bus_slot(0, card, type, inta, intb, intc, intd)
|
||||
|
||||
#define pci_set_mirq(mirq, level, irq_state) \
|
||||
pci_irq(PCI_MIRQ_BASE | mirq, 0, level, 1, irq_state)
|
||||
pci_irq(PCI_MIRQ_BASE | (mirq), 0, level, 1, irq_state)
|
||||
#define pci_set_irq(slot, pci_int, irq_state) \
|
||||
pci_irq(slot, pci_int, 0, 1, irq_state)
|
||||
#define pci_clear_mirq(mirq, level, irq_state) \
|
||||
pci_irq(PCI_MIRQ_BASE | mirq, 0, level, 0, irq_state)
|
||||
pci_irq(PCI_MIRQ_BASE | (mirq), 0, level, 0, irq_state)
|
||||
#define pci_clear_irq(slot, pci_int, irq_state) \
|
||||
pci_irq(slot, pci_int, 0, 0, irq_state)
|
||||
|
||||
|
||||
@@ -224,12 +224,12 @@
|
||||
#define RW_DELAY (TIMER_USEC * 500)
|
||||
|
||||
/* Some generally useful CD-ROM information */
|
||||
#define CD_MINS 75 /* max. minutes per CD */
|
||||
#define CD_MINS 90 /* max. minutes per CD */
|
||||
#define CD_SECS 60 /* seconds per minute */
|
||||
#define CD_FRAMES 75 /* frames per second */
|
||||
#define CD_FRAMESIZE 2048 /* bytes per frame, "cooked" mode */
|
||||
#define CD_MAX_BYTES (CD_MINS * CD_SECS * CD_FRAMES * CD_FRAMESIZE)
|
||||
#define CD_MAX_SECTORS (CD_MAX_BYTES / 512)
|
||||
#define CD_MAX_SECTORS (CD_MAX_BYTES / 2048)
|
||||
|
||||
/* Event notification classes for GET EVENT STATUS NOTIFICATION */
|
||||
#define GESN_NO_EVENTS 0
|
||||
|
||||
@@ -22,5 +22,6 @@
|
||||
#define SCSI_SPOCK_H
|
||||
|
||||
extern const device_t spock_device;
|
||||
extern const device_t tribble_device;
|
||||
|
||||
#endif /*SCSI_SPOCK_H*/
|
||||
|
||||
@@ -366,6 +366,7 @@ typedef struct SGE_t {
|
||||
#define X54X_INT_GEOM_WRITABLE 8
|
||||
#define X54X_MBX_24BIT 16
|
||||
#define X54X_ISAPNP 32
|
||||
#define X54X_HAS_SIGNATURE 64
|
||||
|
||||
typedef struct x54x_t {
|
||||
/* 32 bytes */
|
||||
@@ -404,7 +405,7 @@ typedef struct x54x_t {
|
||||
|
||||
/* for multi-threading, keep these volatile */
|
||||
volatile uint8_t Status;
|
||||
volatile uint8_t Interrupt;
|
||||
volatile uint8_t Interrupt;
|
||||
volatile uint8_t MailboxIsBIOS;
|
||||
volatile uint8_t ToRaise;
|
||||
volatile uint8_t flags;
|
||||
|
||||
@@ -201,6 +201,8 @@ typedef struct xga_t {
|
||||
int dst_map;
|
||||
int bkgd_src;
|
||||
int fore_src;
|
||||
int oldx;
|
||||
int oldy;
|
||||
int x;
|
||||
int y;
|
||||
int sx;
|
||||
@@ -211,6 +213,7 @@ typedef struct xga_t {
|
||||
int py;
|
||||
int pattern;
|
||||
int command_len;
|
||||
int filling;
|
||||
|
||||
uint32_t short_stroke;
|
||||
uint32_t color_cmp;
|
||||
|
||||
@@ -348,7 +348,7 @@ ini_read(const char *fn)
|
||||
while (1) {
|
||||
memset(buff, 0x00, sizeof(buff));
|
||||
#ifdef __HAIKU__
|
||||
ini_fgetws(buff, sizeof_w(buff), f);
|
||||
ini_fgetws(buff, sizeof_w(buff), fp);
|
||||
#else
|
||||
(void) !fgetws(buff, sizeof_w(buff), fp);
|
||||
#endif
|
||||
|
||||
@@ -54,14 +54,14 @@ machine_at_p6rp4_init(const machine_t *model)
|
||||
device_add(&p6rp4_nvr_device);
|
||||
|
||||
pci_init(PCI_CONFIG_TYPE_1);
|
||||
pci_register_slot(0x19, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x14, PCI_CARD_AGPBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2);
|
||||
pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 1, 2, 3);
|
||||
pci_register_slot(0x19, PCI_CARD_NORTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x14, PCI_CARD_NORTHBRIDGE_SEC, 0, 0, 0, 0);
|
||||
pci_register_slot(0x02, PCI_CARD_SOUTHBRIDGE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x08, PCI_CARD_IDE, 0, 0, 0, 0);
|
||||
pci_register_slot(0x07, PCI_CARD_NORMAL, 1, 2, 3, 4);
|
||||
pci_register_slot(0x06, PCI_CARD_NORMAL, 2, 3, 4, 1);
|
||||
pci_register_slot(0x05, PCI_CARD_NORMAL, 3, 4, 1, 2);
|
||||
pci_register_slot(0x04, PCI_CARD_NORMAL, 4, 1, 2, 3);
|
||||
device_add(&i450kx_device);
|
||||
device_add(&sio_zb_device);
|
||||
device_add(&ide_cmd646_device);
|
||||
|
||||
@@ -362,11 +362,6 @@ static void
|
||||
model_50_write(uint16_t port, uint8_t val)
|
||||
{
|
||||
switch (port) {
|
||||
case 0x100:
|
||||
ps2.io_id = val;
|
||||
break;
|
||||
case 0x101:
|
||||
break;
|
||||
case 0x102:
|
||||
lpt1_remove();
|
||||
serial_remove(ps2.uart);
|
||||
@@ -499,11 +494,6 @@ static void
|
||||
model_55sx_write(uint16_t port, uint8_t val)
|
||||
{
|
||||
switch (port) {
|
||||
case 0x100:
|
||||
ps2.io_id = val;
|
||||
break;
|
||||
case 0x101:
|
||||
break;
|
||||
case 0x102:
|
||||
lpt1_remove();
|
||||
serial_remove(ps2.uart);
|
||||
@@ -563,10 +553,6 @@ static void
|
||||
model_70_type3_write(uint16_t port, uint8_t val)
|
||||
{
|
||||
switch (port) {
|
||||
case 0x100:
|
||||
break;
|
||||
case 0x101:
|
||||
break;
|
||||
case 0x102:
|
||||
lpt1_remove();
|
||||
serial_remove(ps2.uart);
|
||||
@@ -621,10 +607,6 @@ static void
|
||||
model_80_write(uint16_t port, uint8_t val)
|
||||
{
|
||||
switch (port) {
|
||||
case 0x100:
|
||||
break;
|
||||
case 0x101:
|
||||
break;
|
||||
case 0x102:
|
||||
lpt1_remove();
|
||||
serial_remove(ps2.uart);
|
||||
@@ -985,12 +967,12 @@ ps2_mca_mem_d071_init(int start_mb)
|
||||
}
|
||||
|
||||
static void
|
||||
ps2_mca_board_model_50_init(int slots)
|
||||
ps2_mca_board_model_50_init(void)
|
||||
{
|
||||
ps2_mca_board_common_init();
|
||||
|
||||
mem_remap_top(384);
|
||||
mca_init(slots);
|
||||
mca_init(4);
|
||||
device_add(&keyboard_ps2_mca_2_device);
|
||||
|
||||
ps2.planar_read = model_50_read;
|
||||
@@ -1005,6 +987,29 @@ ps2_mca_board_model_50_init(int slots)
|
||||
device_add(&ps1vga_mca_device);
|
||||
}
|
||||
|
||||
static void
|
||||
ps2_mca_board_model_60_init(void)
|
||||
{
|
||||
ps2_mca_board_common_init();
|
||||
|
||||
mem_remap_top(384);
|
||||
mca_init(8);
|
||||
device_add(&keyboard_ps2_mca_2_device);
|
||||
|
||||
ps2.planar_read = model_50_read;
|
||||
ps2.planar_write = model_50_write;
|
||||
|
||||
if (mem_size > 2048) {
|
||||
/* Only 2 MB supported on planar, create a memory expansion card for the rest */
|
||||
ps2_mca_mem_fffc_init(2);
|
||||
}
|
||||
|
||||
device_add(&ps2_nvr_55ls_device);
|
||||
|
||||
if (gfxcard[0] == VID_INTERNAL)
|
||||
device_add(&ps1vga_mca_device);
|
||||
}
|
||||
|
||||
static void
|
||||
ps2_mca_board_model_55sx_init(int has_sec_nvram, int slots)
|
||||
{
|
||||
@@ -1051,10 +1056,8 @@ ps2_mca_board_model_55sx_init(int has_sec_nvram, int slots)
|
||||
mca_init(slots);
|
||||
device_add(&keyboard_ps2_device);
|
||||
|
||||
if (has_sec_nvram == 1)
|
||||
if (has_sec_nvram)
|
||||
device_add(&ps2_nvr_55ls_device);
|
||||
else if (has_sec_nvram == 2)
|
||||
device_add(&ps2_nvr_device);
|
||||
|
||||
ps2.planar_read = model_55sx_read;
|
||||
ps2.planar_write = model_55sx_write;
|
||||
@@ -1312,7 +1315,7 @@ ps2_mca_board_model_70_type34_init(int is_type4, int slots)
|
||||
}
|
||||
|
||||
static void
|
||||
ps2_mca_board_model_80_type2_init(int is486ps2)
|
||||
ps2_mca_board_model_80_type2_init(void)
|
||||
{
|
||||
ps2_mca_board_common_init();
|
||||
|
||||
@@ -1372,7 +1375,7 @@ ps2_mca_board_model_80_type2_init(int is486ps2)
|
||||
NULL);
|
||||
mem_mapping_disable(&ps2.split_mapping);
|
||||
|
||||
if ((mem_size > 4096) && !is486ps2) {
|
||||
if (mem_size > 4096) {
|
||||
/* Only 4 MB supported on planar, create a memory expansion card for the rest */
|
||||
if (mem_size > 12288)
|
||||
ps2_mca_mem_d071_init(4);
|
||||
@@ -1426,7 +1429,7 @@ machine_ps2_model_50_init(const machine_t *model)
|
||||
machine_ps2_common_init(model);
|
||||
|
||||
ps2.planar_id = 0xfbff;
|
||||
ps2_mca_board_model_50_init(4);
|
||||
ps2_mca_board_model_50_init();
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1448,8 +1451,8 @@ machine_ps2_model_60_init(const machine_t *model)
|
||||
|
||||
machine_ps2_common_init(model);
|
||||
|
||||
ps2.planar_id = 0xfbff;
|
||||
ps2_mca_board_model_50_init(8);
|
||||
ps2.planar_id = 0xf7ff;
|
||||
ps2_mca_board_model_60_init();
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1509,7 +1512,6 @@ machine_ps2_model_70_type3_init(const machine_t *model)
|
||||
machine_ps2_common_init(model);
|
||||
|
||||
ps2.planar_id = 0xf9ff;
|
||||
|
||||
ps2_mca_board_model_70_type34_init(0, 4);
|
||||
|
||||
return ret;
|
||||
@@ -1530,7 +1532,7 @@ machine_ps2_model_80_init(const machine_t *model)
|
||||
machine_ps2_common_init(model);
|
||||
|
||||
ps2.planar_id = 0xfdff;
|
||||
ps2_mca_board_model_80_type2_init(0);
|
||||
ps2_mca_board_model_80_type2_init();
|
||||
|
||||
return ret;
|
||||
}
|
||||
@@ -1550,7 +1552,6 @@ machine_ps2_model_80_axx_init(const machine_t *model)
|
||||
machine_ps2_common_init(model);
|
||||
|
||||
ps2.planar_id = 0xfff9;
|
||||
|
||||
ps2_mca_board_model_70_type34_init(0, 8);
|
||||
|
||||
return ret;
|
||||
@@ -1571,7 +1572,6 @@ machine_ps2_model_70_type4_init(const machine_t *model)
|
||||
machine_ps2_common_init(model);
|
||||
|
||||
ps2.planar_id = 0xf9ff;
|
||||
|
||||
ps2_mca_board_model_70_type34_init(1, 4);
|
||||
|
||||
return ret;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -94,8 +94,23 @@ static const device_t net_none_device = {
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
static const device_t net_internal_device = {
|
||||
.name = "Internal",
|
||||
.internal_name = "internal",
|
||||
.flags = 0,
|
||||
.local = NET_TYPE_NONE,
|
||||
.init = NULL,
|
||||
.close = NULL,
|
||||
.reset = NULL,
|
||||
{ .available = NULL },
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = NULL
|
||||
};
|
||||
|
||||
static const device_t *net_cards[] = {
|
||||
&net_none_device,
|
||||
&net_internal_device,
|
||||
&threec501_device,
|
||||
&threec503_device,
|
||||
&pcnet_am79c960_device,
|
||||
|
||||
10
src/pci.c
10
src/pci.c
@@ -240,7 +240,6 @@ pci_relocate_slot(int type, int new_slot)
|
||||
{
|
||||
int card = -1;
|
||||
int old_slot;
|
||||
uint8_t mapping;
|
||||
|
||||
if ((new_slot < 0) || (new_slot > 31))
|
||||
return;
|
||||
@@ -257,9 +256,12 @@ pci_relocate_slot(int type, int new_slot)
|
||||
|
||||
old_slot = pci_cards[card].id;
|
||||
pci_cards[card].id = new_slot;
|
||||
mapping = pci_card_to_slot_mapping[0][old_slot];
|
||||
pci_card_to_slot_mapping[0][old_slot] = PCI_CARD_INVALID;
|
||||
pci_card_to_slot_mapping[0][new_slot] = mapping;
|
||||
|
||||
if (pci_card_to_slot_mapping[0][old_slot] == card)
|
||||
pci_card_to_slot_mapping[0][old_slot] = PCI_CARD_INVALID;
|
||||
|
||||
if (pci_card_to_slot_mapping[0][new_slot] == PCI_CARD_INVALID)
|
||||
pci_card_to_slot_mapping[0][new_slot] = card;
|
||||
}
|
||||
|
||||
/* Write PCI enable/disable key, split for the ALi M1435. */
|
||||
|
||||
433
src/pic.c
433
src/pic.c
@@ -51,23 +51,20 @@ pic_t pic2;
|
||||
|
||||
static pc_timer_t pic_timer;
|
||||
|
||||
static uint16_t smi_irq_mask = 0x0000;
|
||||
static uint16_t smi_irq_status = 0x0000;
|
||||
|
||||
static uint16_t enabled_latches = 0x0000;
|
||||
static uint16_t latched_irqs = 0x0000;
|
||||
|
||||
static int shadow = 0;
|
||||
static int elcr_enabled = 0;
|
||||
static int tmr_inited = 0;
|
||||
static int latched = 0;
|
||||
static int pic_pci = 0;
|
||||
static int kbd_latch = 0;
|
||||
static int mouse_latch = 0;
|
||||
|
||||
static void (*update_pending)(void);
|
||||
static uint16_t smi_irq_mask = 0x0000;
|
||||
static uint16_t smi_irq_status = 0x0000;
|
||||
|
||||
static void pic_update_request(pic_t *dev, int irq);
|
||||
static void pic_update_irr(pic_t *dev, uint16_t num);
|
||||
static uint16_t latched_irqs = 0x0000;
|
||||
|
||||
static void pic_cascade(int set);
|
||||
static void (*update_pending)(void);
|
||||
|
||||
#ifdef ENABLE_PIC_LOG
|
||||
int pic_do_log = ENABLE_PIC_LOG;
|
||||
@@ -226,27 +223,29 @@ find_best_interrupt(pic_t *dev)
|
||||
static __inline void
|
||||
pic_update_pending_xt(void)
|
||||
{
|
||||
if (!(pic.flags & PIC_FREEZE))
|
||||
if (!(pic.interrupt & 0x20))
|
||||
pic.int_pending = (find_best_interrupt(&pic) != -1);
|
||||
}
|
||||
|
||||
/* Only check if PIC 1 frozen, because it should not happen
|
||||
that one is frozen but the other is not. */
|
||||
static __inline void
|
||||
pic_update_pending_at(void)
|
||||
{
|
||||
if (!(pic2.flags & PIC_FREEZE)) {
|
||||
if (!(pic.interrupt & 0x20)) {
|
||||
pic2.int_pending = (find_best_interrupt(&pic2) != -1);
|
||||
|
||||
if (pic2.int_pending)
|
||||
pic.irr |= (1 << pic2.icw3);
|
||||
else
|
||||
pic.irr &= ~(1 << pic2.icw3);
|
||||
|
||||
pic_cascade(pic2.int_pending);
|
||||
}
|
||||
|
||||
if (!(pic.flags & PIC_FREEZE))
|
||||
pic.int_pending = (find_best_interrupt(&pic) != -1);
|
||||
|
||||
pic_log("pic_update_pending_at(): dev->int_pending = %i (%i)\n", pic.int_pending, !!(pic.flags & PIC_FREEZE));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pic_callback(UNUSED(void *priv))
|
||||
pic_callback(void *priv)
|
||||
{
|
||||
update_pending();
|
||||
}
|
||||
@@ -263,13 +262,8 @@ pic_reset(void)
|
||||
pic.is_master = 1;
|
||||
pic.interrupt = pic2.interrupt = 0x17;
|
||||
|
||||
pic.has_slaves = 0;
|
||||
pic2.has_slaves = 0;
|
||||
|
||||
if (is_at) {
|
||||
if (is_at)
|
||||
pic.slaves[2] = &pic2;
|
||||
pic.has_slaves = 1;
|
||||
}
|
||||
|
||||
if (tmr_inited)
|
||||
timer_on_auto(&pic_timer, 0.0);
|
||||
@@ -320,25 +314,14 @@ picint_is_level(int irq)
|
||||
}
|
||||
|
||||
static void
|
||||
pic_acknowledge(pic_t *dev, int poll)
|
||||
pic_acknowledge(pic_t *dev)
|
||||
{
|
||||
int pic_int = dev->interrupt & 7;
|
||||
int pic_int_num = 1 << pic_int;
|
||||
|
||||
dev->isr |= pic_int_num;
|
||||
|
||||
/* Simulate the clearing of the edge pulse. */
|
||||
dev->edge_lines &= ~pic_int_num;
|
||||
/* Clear the edge sense latch. */
|
||||
dev->irq_latch &= ~pic_int_num;
|
||||
|
||||
if (!poll) {
|
||||
dev->flags |= PIC_FREEZE; /* Freeze it so it still takes interrupts but they do not
|
||||
override the one currently being processed. */
|
||||
|
||||
/* Clear the reset latch. */
|
||||
pic_update_request(dev, pic_int);
|
||||
}
|
||||
if (!pic_level_triggered(dev, pic_int) || (dev->lines[pic_int] == 0))
|
||||
dev->irr &= ~pic_int_num;
|
||||
}
|
||||
|
||||
/* Find IRQ for non-specific EOI (either by command or automatic) by finding the highest IRQ
|
||||
@@ -375,7 +358,6 @@ pic_action(pic_t *dev, uint8_t irq, uint8_t eoi, uint8_t rotate)
|
||||
if (rotate)
|
||||
dev->priority = (irq + 1) & 7;
|
||||
|
||||
pic_update_request(dev, irq);
|
||||
update_pending();
|
||||
}
|
||||
}
|
||||
@@ -415,10 +397,13 @@ pic_latch_read(UNUSED(uint16_t addr), UNUSED(void *priv))
|
||||
{
|
||||
uint8_t ret = 0xff;
|
||||
|
||||
pic_log("pic_latch_read(%04X): %04X\n", enabled_latches, latched_irqs & 0x1002);
|
||||
pic_log("pic_latch_read(%i, %i)\n", kbd_latch, mouse_latch);
|
||||
|
||||
if (latched_irqs & 0x1002)
|
||||
picintc(latched_irqs & 0x1002);
|
||||
if (kbd_latch && (latched_irqs & 0x0002))
|
||||
picintc(0x0002);
|
||||
|
||||
if (mouse_latch && (latched_irqs & 0x1000))
|
||||
picintc(0x1000);
|
||||
|
||||
/* Return FF - we just lower IRQ 1 and IRQ 12. */
|
||||
return ret;
|
||||
@@ -447,23 +432,24 @@ pic_read(uint16_t addr, void *priv)
|
||||
dev->data_bus = dev->irr;
|
||||
#endif
|
||||
if (dev->ocw3 & 0x04) {
|
||||
dev->interrupt &= ~0x20; /* Freeze the interrupt until the poll is over. */
|
||||
if (dev->int_pending) {
|
||||
dev->data_bus = 0x80 | (dev->interrupt & 7);
|
||||
pic_acknowledge(dev, 1);
|
||||
pic_acknowledge(dev);
|
||||
dev->int_pending = 0;
|
||||
update_pending();
|
||||
} else
|
||||
dev->data_bus = 0x00;
|
||||
dev->ocw3 &= ~0x04;
|
||||
dev->flags &= ~PIC_FREEZE; /* Freeze the interrupt until the poll is over. */
|
||||
pic_update_irr(dev, 0x00ff); /* Update IRR, just in case anything came while frozen. */
|
||||
update_pending();
|
||||
} else if (addr & 0x0001)
|
||||
dev->data_bus = dev->imr;
|
||||
else if (dev->ocw3 & 0x02) {
|
||||
if (dev->ocw3 & 0x01)
|
||||
dev->data_bus = dev->isr;
|
||||
#ifdef UNDEFINED_READ
|
||||
else
|
||||
dev->data_bus = dev->irr;
|
||||
dev->data_bus = 0x00;
|
||||
#endif
|
||||
}
|
||||
/* If A0 = 0, VIA shadow is disabled, and poll mode is disabled,
|
||||
simply read whatever is currently on the data bus. */
|
||||
@@ -505,7 +491,7 @@ pic_write(uint16_t addr, uint8_t val, void *priv)
|
||||
if (is286)
|
||||
update_pending();
|
||||
else
|
||||
timer_on_auto(&pic_timer, 1.0 * ((10000000.0 * (double) xt_cpu_multi) / (double) cpu_s->rspeed));
|
||||
timer_on_auto(&pic_timer, .0 * ((10000000.0 * (double) xt_cpu_multi) / (double) cpu_s->rspeed));
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -522,13 +508,11 @@ pic_write(uint16_t addr, uint8_t val, void *priv)
|
||||
if (!(dev->icw1 & 1))
|
||||
dev->icw4 = 0x00;
|
||||
dev->ocw2 = dev->ocw3 = 0x00;
|
||||
dev->flags = PIC_MASTER_CLEAR;
|
||||
dev->irr = 0x00;
|
||||
dev->edge_lines = 0x00;
|
||||
dev->irq_latch = 0x00;
|
||||
for (uint8_t i = 0; i <= 7; i++)
|
||||
pic_update_request(dev, i);
|
||||
dev->flags &= ~PIC_MASTER_CLEAR;
|
||||
dev->irr = 0x00;
|
||||
for (uint8_t i = 0; i <= 7; i++) {
|
||||
if (dev->lines[i] > 0)
|
||||
dev->irr |= (1 << i);
|
||||
}
|
||||
dev->imr = dev->isr = 0x00;
|
||||
dev->ack_bytes = dev->priority = 0x00;
|
||||
dev->auto_eoi_rotate = dev->special_mask_mode = 0x00;
|
||||
@@ -539,7 +523,7 @@ pic_write(uint16_t addr, uint8_t val, void *priv)
|
||||
} else if (val & 0x08) {
|
||||
dev->ocw3 = val;
|
||||
if (dev->ocw3 & 0x04)
|
||||
dev->flags |= PIC_FREEZE; /* Freeze the interrupt until the poll is over. */
|
||||
dev->interrupt |= 0x20; /* Freeze the interrupt until the poll is over. */
|
||||
if (dev->ocw3 & 0x40)
|
||||
dev->special_mask_mode = !!(dev->ocw3 & 0x20);
|
||||
} else {
|
||||
@@ -566,15 +550,12 @@ pic_set_pci(void)
|
||||
void
|
||||
pic_kbd_latch(int enable)
|
||||
{
|
||||
uint16_t old_latches = enabled_latches;
|
||||
|
||||
pic_log("PIC keyboard latch now %sabled\n", enable ? "en" : "dis");
|
||||
|
||||
enable = (!!enable) << 1;
|
||||
enabled_latches = (enabled_latches & 0x1000) | enable;
|
||||
if (!!(enable | mouse_latch) != !!(kbd_latch | mouse_latch))
|
||||
io_handler(!!(enable | mouse_latch), 0x0060, 0x0001, pic_latch_read, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
if (!!(enabled_latches & 0x1002) != !!(old_latches & 0x1002))
|
||||
io_handler(!!(enabled_latches & 0x1002), 0x0060, 0x0001, pic_latch_read, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
kbd_latch = !!enable;
|
||||
|
||||
if (!enable)
|
||||
picintc(0x0002);
|
||||
@@ -583,15 +564,12 @@ pic_kbd_latch(int enable)
|
||||
void
|
||||
pic_mouse_latch(int enable)
|
||||
{
|
||||
uint16_t old_latches = enabled_latches;
|
||||
|
||||
pic_log("PIC mouse latch now %sabled\n", enable ? "en" : "dis");
|
||||
|
||||
enable = (!!enable) << 12;
|
||||
enabled_latches = (enabled_latches & 0x0002) | enable;
|
||||
if (!!(kbd_latch | enable) != !!(kbd_latch | mouse_latch))
|
||||
io_handler(!!(kbd_latch | enable), 0x0060, 0x0001, pic_latch_read, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
|
||||
if (!!(enabled_latches & 0x1002) != !!(old_latches & 0x1002))
|
||||
io_handler(!!(enabled_latches & 0x1002), 0x0060, 0x0001, pic_latch_read, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
mouse_latch = !!enable;
|
||||
|
||||
if (!enable)
|
||||
picintc(0x1000);
|
||||
@@ -603,11 +581,11 @@ pic_reset_hard(void)
|
||||
pic_reset();
|
||||
|
||||
/* Explicitly reset the latches. */
|
||||
enabled_latches = 0x0000;
|
||||
kbd_latch = mouse_latch = 0;
|
||||
latched_irqs = 0x0000;
|
||||
|
||||
/* The situation is as follows: There is a giant mess when it comes to these latches on real hardware,
|
||||
to the point that there's even boards with board-level latches that get used in place of the latches
|
||||
to the point that there's even boards with board-level latched that get used in place of the latches
|
||||
on the chipset, therefore, I'm just doing this here for the sake of simplicity. */
|
||||
if (machine_has_bus(machine, MACHINE_BUS_PS2_LATCH)) {
|
||||
pic_kbd_latch(0x01);
|
||||
@@ -643,169 +621,118 @@ pic2_init(void)
|
||||
pic.slaves[2] = &pic2;
|
||||
}
|
||||
|
||||
void
|
||||
pic_update_lines(pic_t *dev, uint16_t num, int level, int set, uint8_t *irq_state)
|
||||
{
|
||||
uint8_t old_edge_lines;
|
||||
uint8_t bit;
|
||||
|
||||
switch (level) {
|
||||
case PIC_IRQ_EDGE:
|
||||
old_edge_lines = dev->edge_lines;
|
||||
|
||||
dev->edge_lines &= ~num;
|
||||
if (set)
|
||||
dev->edge_lines |= num;
|
||||
|
||||
if ((dev->isr & num) || (dev->flags & PIC_MASTER_CLEAR))
|
||||
dev->irq_latch = (dev->irq_latch & ~num) | (dev->edge_lines & num);
|
||||
else if ((dev->edge_lines & num) && !(old_edge_lines & num))
|
||||
dev->irq_latch |= num;
|
||||
break;
|
||||
case PIC_IRQ_LEVEL:
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
bit = (1 << i);
|
||||
if ((num & bit) && ((!!*irq_state) != !!set))
|
||||
dev->lines[i] += (set ? 1 : -1);
|
||||
}
|
||||
|
||||
if ((!!*irq_state) != !!set)
|
||||
*irq_state = set;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
pic_irq_get_request(pic_t *dev, int irq)
|
||||
{
|
||||
uint8_t ret;
|
||||
|
||||
ret = ((dev->edge_lines & (1 << irq)) || (dev->lines[irq] > 0));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
pic_es_latch_clear(pic_t *dev, int irq)
|
||||
{
|
||||
uint8_t ret;
|
||||
|
||||
ret = (dev->isr & (1 << irq)) || (dev->flags & PIC_MASTER_CLEAR);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
pic_es_latch_out(pic_t *dev, int irq)
|
||||
{
|
||||
uint8_t ret;
|
||||
|
||||
ret = !((pic_es_latch_clear(dev, irq) && (dev->irq_latch & (1 << irq))) || !pic_irq_get_request(dev, irq));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
pic_es_latch_nor(pic_t *dev, int irq)
|
||||
{
|
||||
uint8_t ret;
|
||||
|
||||
ret = !(pic_es_latch_out(dev, irq) || picint_is_level(irq));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
pic_irq_request_nor(pic_t *dev, int irq)
|
||||
{
|
||||
uint8_t ret;
|
||||
|
||||
ret = !(pic_es_latch_nor(dev, irq) || !pic_irq_get_request(dev, irq));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void
|
||||
pic_update_request(pic_t *dev, int irq)
|
||||
{
|
||||
dev->irr &= ~(1 << irq);
|
||||
|
||||
if (!(dev->flags & PIC_FREEZE))
|
||||
dev->irr |= (pic_irq_request_nor(dev, irq) << irq);
|
||||
}
|
||||
|
||||
static void
|
||||
pic_update_irr(pic_t *dev, uint16_t num)
|
||||
{
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
if (num & (1 << i))
|
||||
pic_update_request(dev, i);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
picint_common(uint16_t num, int level, int set, uint8_t *irq_state)
|
||||
{
|
||||
pic_log("picint_common(%04X, %i, %i, %08X)\n", num, level, set, (uint32_t) (uintptr_t) irq_state);
|
||||
|
||||
set = !!set;
|
||||
int raise;
|
||||
int max = 16;
|
||||
uint8_t b;
|
||||
uint8_t slaves = 0;
|
||||
uint16_t w;
|
||||
uint16_t lines = level ? 0x0000 : num;
|
||||
pic_t *dev;
|
||||
|
||||
/* Make sure to ignore all slave IRQ's, and in case of AT+,
|
||||
translate IRQ 2 to IRQ 9. */
|
||||
if (num & pic.icw3) {
|
||||
num &= ~pic.icw3;
|
||||
if (pic.at)
|
||||
num |= (1 << 9);
|
||||
for (uint8_t i = 0; i < 8; i++) {
|
||||
b = (uint8_t) (1 << i);
|
||||
raise = num & b;
|
||||
|
||||
if (pic.icw3 & b) {
|
||||
slaves++;
|
||||
|
||||
if (raise) {
|
||||
num &= ~b;
|
||||
if (pic.at && (i == 2))
|
||||
num |= (1 << 9);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!pic.has_slaves)
|
||||
num &= 0x00ff;
|
||||
if (!slaves)
|
||||
max = 8;
|
||||
|
||||
if (!num) {
|
||||
pic_log("Attempting to %s null IRQ\n", set ? "raise" : "lower");
|
||||
return;
|
||||
}
|
||||
|
||||
if (num & 0x0100)
|
||||
acpi_rtc_status = !!set;
|
||||
if (level) {
|
||||
dev = &pic;
|
||||
|
||||
smi_irq_status &= ~num;
|
||||
if (set && (smi_irq_mask & num)) {
|
||||
smi_raise();
|
||||
smi_irq_status |= num;
|
||||
for (uint16_t i = 0; i < max; i++) {
|
||||
if (i == 8)
|
||||
dev = &pic2;
|
||||
|
||||
b = i & 7;
|
||||
w = 1 << i;
|
||||
|
||||
if (num & w) {
|
||||
if ((!!*irq_state) != !!set)
|
||||
set ? dev->lines[b]++ : dev->lines[b]--;
|
||||
|
||||
if (!pic_level_triggered(dev, b) ||
|
||||
(((!!*irq_state) != !!set) && (dev->lines[b] == (!!set))))
|
||||
lines |= w;
|
||||
}
|
||||
}
|
||||
|
||||
if ((!!*irq_state) != !!set)
|
||||
*irq_state = set;
|
||||
|
||||
num = lines;
|
||||
}
|
||||
|
||||
if (!slaves)
|
||||
num &= 0x00ff;
|
||||
|
||||
if (num & 0x0100)
|
||||
acpi_rtc_status = !!set;
|
||||
|
||||
if (num) {
|
||||
if (set) {
|
||||
if (smi_irq_mask & num) {
|
||||
smi_raise();
|
||||
smi_irq_status |= num;
|
||||
}
|
||||
|
||||
if (num & 0xff00) {
|
||||
/* Latch IRQ 12 if the mouse latch is enabled. */
|
||||
if ((num & 0x1000) && mouse_latch)
|
||||
latched_irqs |= 0x1000;
|
||||
|
||||
pic2.irr |= (num >> 8);
|
||||
}
|
||||
|
||||
if (num & 0x00ff) {
|
||||
/* Latch IRQ 1 if the keyboard latch is enabled. */
|
||||
if (kbd_latch && (num & 0x0002))
|
||||
latched_irqs |= 0x0002;
|
||||
|
||||
pic.irr |= (num & 0x00ff);
|
||||
}
|
||||
} else {
|
||||
smi_irq_status &= ~num;
|
||||
|
||||
if (num & 0xff00) {
|
||||
/* Unlatch IRQ 12 if the mouse latch is enabled. */
|
||||
if ((num & 0x1000) && mouse_latch)
|
||||
latched_irqs &= 0xefff;
|
||||
|
||||
pic2.irr &= ~(num >> 8);
|
||||
}
|
||||
|
||||
if (num & 0x00ff) {
|
||||
/* Unlatch IRQ 1 if the keyboard latch is enabled. */
|
||||
if (kbd_latch && (num & 0x0002))
|
||||
latched_irqs &= 0xfffd;
|
||||
|
||||
pic.irr &= ~(num & 0x00ff);
|
||||
}
|
||||
}
|
||||
|
||||
update_pending();
|
||||
}
|
||||
|
||||
if (num & 0xff00) {
|
||||
pic_update_lines(&pic2, num >> 8, level, set, irq_state);
|
||||
|
||||
/* Latch IRQ 12 if the mouse latch is enabled. */
|
||||
if ((num & enabled_latches) & 0x1000)
|
||||
latched_irqs = (latched_irqs & 0xefff) | (set << 12);
|
||||
|
||||
pic_update_irr(&pic2, num >> 8);
|
||||
}
|
||||
|
||||
if (num & 0x00ff) {
|
||||
pic_update_lines(&pic, num & 0x00ff, level, set, irq_state);
|
||||
|
||||
/* Latch IRQ 1 if the keyboard latch is enabled. */
|
||||
if ((num & enabled_latches) & 0x0002)
|
||||
latched_irqs = (latched_irqs & 0xfffd) | (set << 1);
|
||||
|
||||
pic_update_irr(&pic, num & 0x00ff);
|
||||
}
|
||||
|
||||
update_pending();
|
||||
}
|
||||
|
||||
static void
|
||||
pic_cascade(int set)
|
||||
{
|
||||
pic_update_lines(&pic, (1 << pic2.icw3), PIC_IRQ_EDGE, set, NULL);
|
||||
pic_update_irr(&pic, (1 << pic2.icw3));
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -817,13 +744,16 @@ pic_i86_mode(pic_t *dev)
|
||||
static uint8_t
|
||||
pic_irq_ack_read(pic_t *dev, int phase)
|
||||
{
|
||||
uint8_t intr = dev->interrupt & 0x07;
|
||||
uint8_t slave = dev->flags & PIC_SLAVE_PENDING;
|
||||
uint8_t intr = dev->interrupt & 0x47;
|
||||
uint8_t slave = intr & 0x40;
|
||||
intr &= 0x07;
|
||||
pic_log(" pic_irq_ack_read(%08X, %i)\n", dev, phase);
|
||||
|
||||
if (dev != NULL) {
|
||||
if (phase == 0) {
|
||||
pic_acknowledge(dev, 0);
|
||||
dev->interrupt |= 0x20; /* Freeze it so it still takes interrupts but they do not
|
||||
override the one currently being processed. */
|
||||
pic_acknowledge(dev);
|
||||
if (slave)
|
||||
dev->data_bus = pic_irq_ack_read(dev->slaves[intr], phase);
|
||||
else
|
||||
@@ -855,9 +785,6 @@ pic_irq_ack_read(pic_t *dev, int phase)
|
||||
return dev->data_bus;
|
||||
}
|
||||
|
||||
/* 808x: Update the requests for all interrupts since any of them
|
||||
could have arrived during the freeze. */
|
||||
|
||||
uint8_t
|
||||
pic_irq_ack(void)
|
||||
{
|
||||
@@ -871,7 +798,7 @@ pic_irq_ack(void)
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
pic.flags |= PIC_SLAVE_PENDING;
|
||||
pic.interrupt |= 0x40; /* Mark slave pending. */
|
||||
}
|
||||
|
||||
ret = pic_irq_ack_read(&pic, pic.ack_bytes);
|
||||
@@ -879,13 +806,8 @@ pic_irq_ack(void)
|
||||
|
||||
if (pic.ack_bytes == 0) {
|
||||
/* Needed for Xi8088. */
|
||||
if (pic.flags & PIC_SLAVE_PENDING) {
|
||||
pic2.flags &= ~PIC_FREEZE;
|
||||
pic_update_irr(&pic2, 0x00ff);
|
||||
if (pic.interrupt & 0x40)
|
||||
pic2.interrupt = 0x17;
|
||||
}
|
||||
pic.flags &= ~(PIC_SLAVE_PENDING | PIC_FREEZE);
|
||||
pic_update_irr(&pic, 0x00ff);
|
||||
pic.interrupt = 0x17;
|
||||
update_pending();
|
||||
}
|
||||
@@ -893,9 +815,6 @@ pic_irq_ack(void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* 286+: Only update the request for the pending interrupt as it is
|
||||
impossible that any other interrupt has arrived during the
|
||||
freeze. */
|
||||
int
|
||||
picinterrupt(void)
|
||||
{
|
||||
@@ -905,32 +824,34 @@ picinterrupt(void)
|
||||
if (pic_slave_on(&pic, pic.interrupt)) {
|
||||
if (!pic.slaves[pic.interrupt]->int_pending) {
|
||||
/* If we are on AT, IRQ 2 is pending, and we cannot find a pending IRQ on PIC 2, fatal out. */
|
||||
fatal("IRQ %i pending on AT without a pending IRQ on PIC %i (normal)\n", pic.interrupt, pic.interrupt);
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
pic.flags |= PIC_SLAVE_PENDING;
|
||||
// fatal("IRQ %i pending on AT without a pending IRQ on PIC %i (normal)\n", pic.interrupt, pic.interrupt);
|
||||
// exit(-1);
|
||||
/* Error correction mechanism: Do a supurious IRQ 15 (spurious IRQ 7 on PIC 2). */
|
||||
pic.slaves[pic.interrupt]->int_pending = 1;
|
||||
pic.slaves[pic.interrupt]->interrupt = 0x07;
|
||||
} else
|
||||
pic.interrupt |= 0x40; /* Mark slave pending. */
|
||||
}
|
||||
} else {
|
||||
/* pic.int_pending was somehow cleared despite the fact we made it here,
|
||||
do a spurious IRQ 7. */
|
||||
pic.int_pending = 1;
|
||||
pic.interrupt = 0x07;
|
||||
}
|
||||
|
||||
if ((pic.interrupt == 0) && (pit_devs[1].data != NULL))
|
||||
pit_devs[1].set_gate(pit_devs[1].data, 0, 0);
|
||||
if ((pic.interrupt == 0) && (pit_devs[1].data != NULL))
|
||||
pit_devs[1].set_gate(pit_devs[1].data, 0, 0);
|
||||
|
||||
/* Two ACK's - do them in a loop to avoid potential compiler misoptimizations. */
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
ret = pic_irq_ack_read(&pic, pic.ack_bytes);
|
||||
pic.ack_bytes = (pic.ack_bytes + 1) % (pic_i86_mode(&pic) ? 2 : 3);
|
||||
/* Two ACK's - do them in a loop to avoid potential compiler misoptimizations. */
|
||||
for (uint8_t i = 0; i < 2; i++) {
|
||||
ret = pic_irq_ack_read(&pic, pic.ack_bytes);
|
||||
pic.ack_bytes = (pic.ack_bytes + 1) % (pic_i86_mode(&pic) ? 2 : 3);
|
||||
|
||||
if (pic.ack_bytes == 0) {
|
||||
if (pic.flags & PIC_SLAVE_PENDING) {
|
||||
pic2.flags &= ~PIC_FREEZE;
|
||||
pic_update_request(&pic2, pic2.interrupt & 0x07);
|
||||
pic2.interrupt = 0x17;
|
||||
}
|
||||
pic.flags &= ~(PIC_SLAVE_PENDING | PIC_FREEZE);
|
||||
pic_update_request(&pic, pic.interrupt & 0x07);
|
||||
pic.interrupt = 0x17;
|
||||
update_pending();
|
||||
}
|
||||
if (pic.ack_bytes == 0) {
|
||||
if (pic.interrupt & 0x40)
|
||||
pic2.interrupt = 0x17;
|
||||
pic.interrupt = 0x17;
|
||||
update_pending();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
msgid "&Action"
|
||||
msgstr "動作(&A)"
|
||||
msgstr "操作(&A)"
|
||||
|
||||
msgid "&Keyboard requires capture"
|
||||
msgstr "キーボードはキャプチャが必要(&K)"
|
||||
|
||||
msgid "&Right CTRL is left ALT"
|
||||
msgstr "右CTRLを左ALTへ(&R)"
|
||||
msgstr "右CTRLを左ALTへ変換(&R)"
|
||||
|
||||
msgid "&Hard Reset..."
|
||||
msgstr "ハードリセット(&H)..."
|
||||
msgstr "ハード リセット(&H)..."
|
||||
|
||||
msgid "&Ctrl+Alt+Del\tCtrl+F12"
|
||||
msgstr "Ctrl+Alt+Del(&C)\tCtrl+F12"
|
||||
@@ -26,16 +26,16 @@ msgid "&View"
|
||||
msgstr "表示(&V)"
|
||||
|
||||
msgid "&Hide status bar"
|
||||
msgstr "ステータスバーを隠す(&H)"
|
||||
msgstr "ステータス バーを隠す(&H)"
|
||||
|
||||
msgid "Hide &toolbar"
|
||||
msgstr "ツールバーを隠す(&T)"
|
||||
msgstr "ツール バーを隠す(&T)"
|
||||
|
||||
msgid "&Resizeable window"
|
||||
msgstr "ウィンドウのサイズをリサイズ可能(&R)"
|
||||
msgstr "ウィンドウのサイズを変更可能(&R)"
|
||||
|
||||
msgid "R&emember size && position"
|
||||
msgstr "ウィンドウのサイズと位置を記憶(&E)"
|
||||
msgstr "ウィンドウのサイズと位置を保存(&E)"
|
||||
|
||||
msgid "Re&nderer"
|
||||
msgstr "レンダラー(&N)"
|
||||
@@ -56,10 +56,10 @@ msgid "&VNC"
|
||||
msgstr "VNC(&V)"
|
||||
|
||||
msgid "Specify dimensions..."
|
||||
msgstr "ウィンドウのサイズを指定..."
|
||||
msgstr "ディメンションを指定..."
|
||||
|
||||
msgid "F&orce 4:3 display ratio"
|
||||
msgstr "4:3アスペクト比を固定(&O)"
|
||||
msgstr "4:3の縦横比を強制表示(&O)"
|
||||
|
||||
msgid "&Window scale factor"
|
||||
msgstr "ウィンドウの表示倍率(&W)"
|
||||
@@ -107,13 +107,13 @@ msgid "Hi&DPI scaling"
|
||||
msgstr "HiDPIスケーリング(&D)"
|
||||
|
||||
msgid "&Fullscreen\tCtrl+Alt+PgUp"
|
||||
msgstr "フルスクリーン(&F)\tCtrl+Alt+PgUp"
|
||||
msgstr "全画面表示(&F)\tCtrl+Alt+PgUp"
|
||||
|
||||
msgid "Fullscreen &stretch mode"
|
||||
msgstr "フルスクリーンのスケール(&S)"
|
||||
msgstr "全画面の拡大表示モード(&S)"
|
||||
|
||||
msgid "&Full screen stretch"
|
||||
msgstr "フルスクリーンに拡大(&F)"
|
||||
msgstr "全画面の拡大表示(&F)"
|
||||
|
||||
msgid "&4:3"
|
||||
msgstr "4:3(&4)"
|
||||
@@ -128,7 +128,7 @@ msgid "E&GA/(S)VGA settings"
|
||||
msgstr "E&GA/(S)VGAの設定"
|
||||
|
||||
msgid "&Inverted VGA monitor"
|
||||
msgstr "色を反転(&I)"
|
||||
msgstr "色反転(&I)"
|
||||
|
||||
msgid "VGA screen &type"
|
||||
msgstr "画面タイプ(&T)"
|
||||
@@ -140,7 +140,7 @@ msgid "&RGB Grayscale"
|
||||
msgstr "RGB(グレースケール)(&R)"
|
||||
|
||||
msgid "&Amber monitor"
|
||||
msgstr "モニター(琥珀色)(&A)"
|
||||
msgstr "モニター(黄色)(&A)"
|
||||
|
||||
msgid "&Green monitor"
|
||||
msgstr "モニター(緑色)(&G)"
|
||||
@@ -185,10 +185,10 @@ msgid "&Preferences..."
|
||||
msgstr "環境設定(&P)..."
|
||||
|
||||
msgid "Enable &Discord integration"
|
||||
msgstr "Discordとの連携機能(&D)"
|
||||
msgstr "Discord連携機能(&D)"
|
||||
|
||||
msgid "Sound &gain..."
|
||||
msgstr "音量を調節(&G)..."
|
||||
msgstr "音量調整(&G)..."
|
||||
|
||||
msgid "Begin trace\tCtrl+T"
|
||||
msgstr "トレース開始\tCtrl+T"
|
||||
@@ -200,7 +200,7 @@ msgid "&Help"
|
||||
msgstr "ヘルプ(&H)"
|
||||
|
||||
msgid "&Documentation..."
|
||||
msgstr "ドキュメント(&D)..."
|
||||
msgstr "文書(&D)..."
|
||||
|
||||
msgid "&About 86Box..."
|
||||
msgstr "86Boxのバージョン情報(&A)..."
|
||||
@@ -221,7 +221,7 @@ msgid "&Play"
|
||||
msgstr "再生(&P)"
|
||||
|
||||
msgid "&Rewind to the beginning"
|
||||
msgstr "冒頭に巻き戻す(&R)"
|
||||
msgstr "先頭まで巻き戻す(&R)"
|
||||
|
||||
msgid "&Fast forward to the end"
|
||||
msgstr "最後まで早送り(&F)"
|
||||
@@ -239,7 +239,7 @@ msgid "&Mute"
|
||||
msgstr "ミュート(&M)"
|
||||
|
||||
msgid "E&mpty"
|
||||
msgstr "空(&M)"
|
||||
msgstr "なし(&M)"
|
||||
|
||||
msgid "&Reload previous image"
|
||||
msgstr "前のイメージを再読み込み(&R)"
|
||||
@@ -299,7 +299,7 @@ msgid "Cancel"
|
||||
msgstr "キャンセル"
|
||||
|
||||
msgid "Save these settings as &global defaults"
|
||||
msgstr "これらの設定をグローバル既定値として保存する(&G)"
|
||||
msgstr "これらの設定をグローバル既定値として保存(&G)"
|
||||
|
||||
msgid "&Default"
|
||||
msgstr "既定値(&D)"
|
||||
@@ -320,7 +320,7 @@ msgid "Disk size:"
|
||||
msgstr "ディスクサイズ:"
|
||||
|
||||
msgid "RPM mode:"
|
||||
msgstr "回転数モード:"
|
||||
msgstr "RPMモード:"
|
||||
|
||||
msgid "Progress:"
|
||||
msgstr "進行状況:"
|
||||
@@ -332,10 +332,10 @@ msgid "Height:"
|
||||
msgstr "高さ:"
|
||||
|
||||
msgid "Lock to this size"
|
||||
msgstr "このサイズをロックする"
|
||||
msgstr "サイズを固定"
|
||||
|
||||
msgid "Machine type:"
|
||||
msgstr "マシンタイプ:"
|
||||
msgstr "マシン タイプ:"
|
||||
|
||||
msgid "Machine:"
|
||||
msgstr "マシン:"
|
||||
@@ -353,7 +353,7 @@ msgid "FPU:"
|
||||
msgstr "FPU:"
|
||||
|
||||
msgid "Wait states:"
|
||||
msgstr "待機状態:"
|
||||
msgstr "ウェイトステート:"
|
||||
|
||||
msgid "MB"
|
||||
msgstr "MB"
|
||||
@@ -365,13 +365,13 @@ msgid "Time synchronization"
|
||||
msgstr "時刻同期機能"
|
||||
|
||||
msgid "Disabled"
|
||||
msgstr "無効にする"
|
||||
msgstr "無効"
|
||||
|
||||
msgid "Enabled (local time)"
|
||||
msgstr "有効にする (現地時間)"
|
||||
msgstr "有効(現地時間)"
|
||||
|
||||
msgid "Enabled (UTC)"
|
||||
msgstr "有効にする (UTC)"
|
||||
msgstr "有効(UTC)"
|
||||
|
||||
msgid "Dynamic Recompiler"
|
||||
msgstr "動的リコンパイラ"
|
||||
@@ -407,16 +407,16 @@ msgid "Joystick 4..."
|
||||
msgstr "ジョイスティック4..."
|
||||
|
||||
msgid "Sound card 1:"
|
||||
msgstr "サウンドカード 1:"
|
||||
msgstr "サウンドカード1:"
|
||||
|
||||
msgid "Sound card 2:"
|
||||
msgstr "サウンドカード 2:"
|
||||
msgstr "サウンドカード2:"
|
||||
|
||||
msgid "Sound card 3:"
|
||||
msgstr "サウンドカード 3:"
|
||||
msgstr "サウンドカード3:"
|
||||
|
||||
msgid "Sound card 4:"
|
||||
msgstr "サウンドカード 4:"
|
||||
msgstr "サウンドカード4:"
|
||||
|
||||
msgid "MIDI Out Device:"
|
||||
msgstr "MIDI出力デバイス:"
|
||||
@@ -434,13 +434,13 @@ msgid "FM synth driver"
|
||||
msgstr "FMシンセドライバー"
|
||||
|
||||
msgid "Nuked (more accurate)"
|
||||
msgstr "Nuked (高精度化)"
|
||||
msgstr "Nuked(高精度化)"
|
||||
|
||||
msgid "YMFM (faster)"
|
||||
msgstr "YMFM (より速く)"
|
||||
msgstr "YMFM(より速く)"
|
||||
|
||||
msgid "Network type:"
|
||||
msgstr "ネットワークタイプ:"
|
||||
msgstr "ネットワーク タイプ:"
|
||||
|
||||
msgid "PCap device:"
|
||||
msgstr "PCapデバイス:"
|
||||
@@ -497,16 +497,16 @@ msgid "Parallel port 4"
|
||||
msgstr "パラレルポート4"
|
||||
|
||||
msgid "HD Controller:"
|
||||
msgstr "HDコントローラー:"
|
||||
msgstr "HDDコントローラー:"
|
||||
|
||||
msgid "FD Controller:"
|
||||
msgstr "FDコントローラー:"
|
||||
msgstr "FDDコントローラー:"
|
||||
|
||||
msgid "Tertiary IDE Controller"
|
||||
msgstr "第三のIDEコントローラー"
|
||||
msgstr "第三IDEコントローラー"
|
||||
|
||||
msgid "Quaternary IDE Controller"
|
||||
msgstr "第四のIDEコントローラー"
|
||||
msgstr "第四IDEコントローラー"
|
||||
|
||||
msgid "SCSI"
|
||||
msgstr "SCSI"
|
||||
@@ -527,7 +527,7 @@ msgid "Cassette"
|
||||
msgstr "カセット"
|
||||
|
||||
msgid "Hard disks:"
|
||||
msgstr "ハードディスク:"
|
||||
msgstr "ハード ディスク:"
|
||||
|
||||
msgid "&New..."
|
||||
msgstr "新規(&N)..."
|
||||
@@ -536,7 +536,7 @@ msgid "&Existing..."
|
||||
msgstr "既定(&E)..."
|
||||
|
||||
msgid "&Remove"
|
||||
msgstr "除去(&R)"
|
||||
msgstr "削除(&R)"
|
||||
|
||||
msgid "Bus:"
|
||||
msgstr "バス:"
|
||||
@@ -578,13 +578,13 @@ msgid "Turbo timings"
|
||||
msgstr "高速タイミング"
|
||||
|
||||
msgid "Check BPB"
|
||||
msgstr "BPBをチェック"
|
||||
msgstr "BPBチェック"
|
||||
|
||||
msgid "CD-ROM drives:"
|
||||
msgstr "CD-ROMドライブ:"
|
||||
|
||||
msgid "Earlier drive"
|
||||
msgstr "アーリードライブ"
|
||||
msgstr "先のドライブ"
|
||||
|
||||
msgid "MO drives:"
|
||||
msgstr "光磁気ドライブ:"
|
||||
@@ -599,7 +599,7 @@ msgid "ISA RTC:"
|
||||
msgstr "ISA RTCカード:"
|
||||
|
||||
msgid "ISA Memory Expansion"
|
||||
msgstr "ISAメモリー拡張カード"
|
||||
msgstr "ISAメモリ拡張カード"
|
||||
|
||||
msgid "Card 1:"
|
||||
msgstr "カード1:"
|
||||
@@ -677,10 +677,10 @@ msgid "Surface images"
|
||||
msgstr "表面イメージ"
|
||||
|
||||
msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."
|
||||
msgstr "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。"
|
||||
msgstr "roms/machines ディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。"
|
||||
|
||||
msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card."
|
||||
msgstr "roms/videoディレクトリにROMがないため、ビデオカード「%hs」は使用できません。使用可能なビデオカードに切り替えます。"
|
||||
msgstr "roms/video ディレクトリにROMがないため、ビデオ カード「%hs」は使用できません。使用可能なビデオカードに切り替えます。"
|
||||
|
||||
msgid "Machine"
|
||||
msgstr "マシン"
|
||||
@@ -698,22 +698,22 @@ msgid "Network"
|
||||
msgstr "ネットワーク"
|
||||
|
||||
msgid "Ports (COM & LPT)"
|
||||
msgstr "ポート (COM & LPT)"
|
||||
msgstr "ポート (COM/LPT)"
|
||||
|
||||
msgid "Storage controllers"
|
||||
msgstr "ストレージコントローラ"
|
||||
msgstr "ストレージ コントローラ"
|
||||
|
||||
msgid "Hard disks"
|
||||
msgstr "ハードディスク"
|
||||
msgstr "ハード ディスク"
|
||||
|
||||
msgid "Floppy & CD-ROM drives"
|
||||
msgstr "フロッピー/CD-ROMドライブ"
|
||||
|
||||
msgid "Other removable devices"
|
||||
msgstr "その他のリムーバブルデバイス"
|
||||
msgstr "他のリムーバブル デバイス"
|
||||
|
||||
msgid "Other peripherals"
|
||||
msgstr "その他の周辺装置"
|
||||
msgstr "他の周辺デバイス"
|
||||
|
||||
msgid "Click to capture mouse"
|
||||
msgstr "クリックするとマウスをキャプチャします"
|
||||
@@ -722,7 +722,7 @@ msgid "Press F8+F12 to release mouse"
|
||||
msgstr "F8+F12キーでマウスを解放します"
|
||||
|
||||
msgid "Press F8+F12 or middle button to release mouse"
|
||||
msgstr "F8+F12キーまたは中ボタンでマウスを解放します"
|
||||
msgstr "F8+F12キーまたはマウスの中ボタンを押してマウスを解放します"
|
||||
|
||||
msgid "Bus"
|
||||
msgstr "バス"
|
||||
@@ -749,7 +749,7 @@ msgid "Default"
|
||||
msgstr "既定値"
|
||||
|
||||
msgid "%i Wait state(s)"
|
||||
msgstr "%iつの待機状態"
|
||||
msgstr "%iつのウェイト ステート"
|
||||
|
||||
msgid "Type"
|
||||
msgstr "タイプ"
|
||||
@@ -779,10 +779,10 @@ msgid "CH Flightstick Pro"
|
||||
msgstr "CH Flightstick Pro"
|
||||
|
||||
msgid "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinder Pad"
|
||||
msgstr "Microsoft SideWinderパッド"
|
||||
|
||||
msgid "Thrustmaster Flight Control System"
|
||||
msgstr "Thrustmaster Flight Control System"
|
||||
msgstr "Thrustmaster飛行制御システム"
|
||||
|
||||
msgid "None"
|
||||
msgstr "なし"
|
||||
@@ -791,13 +791,13 @@ msgid "Unable to load keyboard accelerators."
|
||||
msgstr "キーボードアクセラレータを読み込めません。"
|
||||
|
||||
msgid "Unable to register raw input."
|
||||
msgstr "生の入力が登録できません。"
|
||||
msgstr "生入力が登録できません。"
|
||||
|
||||
msgid "%u"
|
||||
msgstr "%u"
|
||||
|
||||
msgid "%u MB (CHS: %i, %i, %i)"
|
||||
msgstr "%u MB (CHS: %i, %i, %i)"
|
||||
msgstr "%u MB (CHS値: %i、%i、%i)"
|
||||
|
||||
msgid "Floppy %i (%s): %ls"
|
||||
msgstr "フロッピー %i (%s): %ls"
|
||||
@@ -806,13 +806,13 @@ msgid "Advanced sector images"
|
||||
msgstr "アドバンスドセクターイメージ"
|
||||
|
||||
msgid "Flux images"
|
||||
msgstr "フラックスイメージ"
|
||||
msgstr "Fluxイメージ"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "SDLが初期化できません。SDL2.dllが必要です"
|
||||
|
||||
msgid "Are you sure you want to hard reset the emulated machine?"
|
||||
msgstr "使用中のマシンをハードリセットしますか?"
|
||||
msgstr "使用中のマシンをハード リセットしますか?"
|
||||
|
||||
msgid "Are you sure you want to exit 86Box?"
|
||||
msgstr "86Boxを終了しますか?"
|
||||
@@ -842,7 +842,7 @@ msgid "Do you want to save the settings?"
|
||||
msgstr "設定を保存しますか?"
|
||||
|
||||
msgid "This will hard reset the emulated machine."
|
||||
msgstr "保存すると使用中のマシンがハードリセットされます。"
|
||||
msgstr "使用中のマシンがハードリセットされます。"
|
||||
|
||||
msgid "Save"
|
||||
msgstr "保存"
|
||||
@@ -878,10 +878,10 @@ msgid "libgs"
|
||||
msgstr "libgs"
|
||||
|
||||
msgid " is required for automatic conversion of PostScript files to PDF.\n\nAny documents sent to the generic PostScript printer will be saved as PostScript (.ps) files."
|
||||
msgstr "PostScriptファイルをPDFに自動変換するにはlibgsが必要です。\n\n汎用PostScriptプリンターに送信されたドキュメントは、PostScript(.ps)ファイルとして保存されます。"
|
||||
msgstr "PostScriptファイルをPDFに自動変換するにはlibgsが必要です。\n\n汎用PostScriptプリンターに送信された文書は、PostScript (.ps) ファイルとして保存されます。"
|
||||
|
||||
msgid "Entering fullscreen mode"
|
||||
msgstr "フルスクリーンに切り替えています"
|
||||
msgstr "全画面モードを入力"
|
||||
|
||||
msgid "Don't show this message again"
|
||||
msgstr "今後、このメッセージを表示しない"
|
||||
@@ -914,7 +914,7 @@ msgid "You are loading an unsupported configuration"
|
||||
msgstr "サポートされていない設定を読み込んでいます"
|
||||
|
||||
msgid "CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid."
|
||||
msgstr "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。"
|
||||
msgstr "選択したマシンに基づくCPUタイプのフィルター機能は、使用中のマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。しかし、マシンのBIOSや他のソフトウェアと互換性がない場合があります。\n\nこの設定を有効にすることは公式にはサポートされておらず、バグレポートは無効として中止される可能性があります。"
|
||||
|
||||
msgid "Continue"
|
||||
msgstr "続行"
|
||||
@@ -998,7 +998,7 @@ msgid "HDI or HDX images with a sector size other than 512 are not supported."
|
||||
msgstr "512以外のセクタサイズを持つHDIまたはHDXイメージはサポートされていません。"
|
||||
|
||||
msgid "USB is not yet supported"
|
||||
msgstr "USBはまだサポートされていません"
|
||||
msgstr "USBはまだ非対応です"
|
||||
|
||||
msgid "Disk image file already exists"
|
||||
msgstr "ディスクイメージファイルが既に存在します"
|
||||
@@ -1022,10 +1022,10 @@ msgid "Remember to partition and format the newly-created drive."
|
||||
msgstr "新規ドライブをパーティション分割し、フォーマットを必ずしといてください。"
|
||||
|
||||
msgid "The selected file will be overwritten. Are you sure you want to use it?"
|
||||
msgstr "選択したファイルが上書きされます。使っていいですか?"
|
||||
msgstr "選択したファイルは上書きされます。よろしいですか?"
|
||||
|
||||
msgid "Unsupported disk image"
|
||||
msgstr "サポートされていないディスクイメージ"
|
||||
msgstr "非対応のディスクイメージジ"
|
||||
|
||||
msgid "Overwrite"
|
||||
msgstr "上書き"
|
||||
@@ -1043,19 +1043,19 @@ msgid "HDX image (.hdx)"
|
||||
msgstr "HDXイメージ (.hdx)"
|
||||
|
||||
msgid "Fixed-size VHD (.vhd)"
|
||||
msgstr "VHD(容量固定)(.vhd)"
|
||||
msgstr "VHD (容量固定) (.vhd)"
|
||||
|
||||
msgid "Dynamic-size VHD (.vhd)"
|
||||
msgstr "VHD(容量可変)(.vhd)"
|
||||
msgstr "VHD (容量可変) (.vhd)"
|
||||
|
||||
msgid "Differencing VHD (.vhd)"
|
||||
msgstr "VHD(差分)(.vhd)"
|
||||
msgstr "VHD (差分) (.vhd)"
|
||||
|
||||
msgid "Large blocks (2 MB)"
|
||||
msgstr "大型ブロック (2 MB)"
|
||||
msgstr "大きなブロック (2 MB)"
|
||||
|
||||
msgid "Small blocks (512 KB)"
|
||||
msgstr "小型ブロック (512 KB)"
|
||||
msgstr "小さなブロック (512 KB)"
|
||||
|
||||
msgid "VHD files"
|
||||
msgstr "VHDファイル"
|
||||
@@ -1064,13 +1064,13 @@ msgid "Select the parent VHD"
|
||||
msgstr "親VHDの選択"
|
||||
|
||||
msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?"
|
||||
msgstr "親イメージがディファレンシングイメージの作成の後に修正した可能性があります。\n\nイメージファイルの移動、コピーまたはこのディスクを作成したプログラムにバグが発生した可能性があります。\n\nタイムスタンプを修正しますか?"
|
||||
msgstr "親イメージが差分イメージの作成の後に変更される可能性があります。\n\nイメージ ファイルが移動またはコピーされたか、イメージ ファイルを作成したプログラムにバグが発生した可能性があります。\n\nタイムスタンプを修正しますか?"
|
||||
|
||||
msgid "Parent and child disk timestamps do not match"
|
||||
msgstr "親ディスクと子ディスクのタイムスタンプが一致しません"
|
||||
msgstr "親ディスクと子ディスクのタイムス タンプが一致しません"
|
||||
|
||||
msgid "Could not fix VHD timestamp."
|
||||
msgstr "VHD のタイムスタンプを修正できませんでした。"
|
||||
msgstr "VHD のタイムスタンプを修正できません。"
|
||||
|
||||
msgid "%01i:%02i"
|
||||
msgstr "%01i:%02i"
|
||||
@@ -1181,16 +1181,16 @@ msgid "5.25\" 1.3 GB"
|
||||
msgstr "5.25\" 1.3 GB"
|
||||
|
||||
msgid "Perfect RPM"
|
||||
msgstr "規定の回転数"
|
||||
msgstr "規定のRPM"
|
||||
|
||||
msgid "1% below perfect RPM"
|
||||
msgstr "1%低い回転数"
|
||||
msgstr "1%低いRPM"
|
||||
|
||||
msgid "1.5% below perfect RPM"
|
||||
msgstr "1.5%低い回転数"
|
||||
msgstr "1.5%低いRPM"
|
||||
|
||||
msgid "2% below perfect RPM"
|
||||
msgstr "2%低い回転数"
|
||||
msgstr "2%低いRPM"
|
||||
|
||||
msgid "(System Default)"
|
||||
msgstr "(システム既定値)"
|
||||
@@ -1199,13 +1199,13 @@ msgid "Failed to initialize network driver"
|
||||
msgstr "ネットワークドライバの初期化に失敗しました"
|
||||
|
||||
msgid "The network configuration will be switched to the null driver"
|
||||
msgstr "ネットワーク設定がヌル・ドライバに切り替わる"
|
||||
msgstr "ネットワーク設定がヌルドライバに切り替えられます"
|
||||
|
||||
msgid "Mouse sensitivity:"
|
||||
msgstr "マウスの感度:"
|
||||
|
||||
msgid "Select media images from program working directory"
|
||||
msgstr "プログラムの作業ディレクトリからメディアイメージを選択する"
|
||||
msgstr "プログラムの作業ディレクトリからメディアイメージを選択してください"
|
||||
|
||||
msgid "PIT mode:"
|
||||
msgstr "PITモード:"
|
||||
|
||||
@@ -206,13 +206,13 @@ msgid "&About 86Box..."
|
||||
msgstr "关于 86Box(&A)..."
|
||||
|
||||
msgid "&New image..."
|
||||
msgstr "新建镜像(&N)..."
|
||||
msgstr "新建映像(&N)..."
|
||||
|
||||
msgid "&Existing image..."
|
||||
msgstr "打开已存在的镜像(&E)..."
|
||||
msgstr "打开已存在的映像(&E)..."
|
||||
|
||||
msgid "Existing image (&Write-protected)..."
|
||||
msgstr "打开已存在的镜像并写保护(&W)..."
|
||||
msgstr "打开已存在的映像并写保护(&W)..."
|
||||
|
||||
msgid "&Record"
|
||||
msgstr "录制(&R)"
|
||||
@@ -230,7 +230,7 @@ msgid "E&ject"
|
||||
msgstr "弹出(&J)"
|
||||
|
||||
msgid "&Image..."
|
||||
msgstr "镜像(&I)..."
|
||||
msgstr "映像(&I)..."
|
||||
|
||||
msgid "E&xport to 86F..."
|
||||
msgstr "导出为 86F 格式(&x)..."
|
||||
@@ -242,7 +242,7 @@ msgid "E&mpty"
|
||||
msgstr "空置驱动器(&M)"
|
||||
|
||||
msgid "&Reload previous image"
|
||||
msgstr "载入上一个镜像(&R)"
|
||||
msgstr "载入上一个映像(&R)"
|
||||
|
||||
msgid "&Folder..."
|
||||
msgstr "文件夹(&F)..."
|
||||
@@ -284,7 +284,7 @@ msgid "Sound Gain"
|
||||
msgstr "音量增益"
|
||||
|
||||
msgid "New Image"
|
||||
msgstr "新建镜像"
|
||||
msgstr "新建映像"
|
||||
|
||||
msgid "Settings"
|
||||
msgstr "设置"
|
||||
@@ -533,7 +533,7 @@ msgid "&New..."
|
||||
msgstr "新建(&N)..."
|
||||
|
||||
msgid "&Existing..."
|
||||
msgstr "已有镜像(&E)..."
|
||||
msgstr "已有映像(&E)..."
|
||||
|
||||
msgid "&Remove"
|
||||
msgstr "移除(&R)"
|
||||
@@ -566,7 +566,7 @@ msgid "Type:"
|
||||
msgstr "类型:"
|
||||
|
||||
msgid "Image Format:"
|
||||
msgstr "镜像格式:"
|
||||
msgstr "映像格式:"
|
||||
|
||||
msgid "Block Size:"
|
||||
msgstr "块大小:"
|
||||
@@ -599,7 +599,7 @@ msgid "ISA RTC:"
|
||||
msgstr "ISA 实时时钟:"
|
||||
|
||||
msgid "ISA Memory Expansion"
|
||||
msgstr "ISA 内存扩充"
|
||||
msgstr "ISA 内存扩展"
|
||||
|
||||
msgid "Card 1:"
|
||||
msgstr "扩展卡 1:"
|
||||
@@ -647,10 +647,10 @@ msgid "ZIP %03i %i (%s): %ls"
|
||||
msgstr "ZIP %03i %i (%s): %ls"
|
||||
|
||||
msgid "ZIP images"
|
||||
msgstr "ZIP 镜像"
|
||||
msgstr "ZIP 映像"
|
||||
|
||||
msgid "86Box could not find any usable ROM images.\n\nPlease <a href=\"https://github.com/86Box/roms/releases/latest\">download</a> a ROM set and extract it into the \"roms\" directory."
|
||||
msgstr "86Box 找不到任何可用的 ROM 镜像。\n\n请<a href=\"https://github.com/86Box/roms/releases/latest\">下载</a>ROM 包并将其解压到 \"roms\" 文件夹。"
|
||||
msgstr "86Box 找不到任何可用的 ROM 映像。\n\n请<a href=\"https://github.com/86Box/roms/releases/latest\">下载</a>ROM 包并将其解压到 \"roms\" 文件夹中。"
|
||||
|
||||
msgid "(empty)"
|
||||
msgstr "(空)"
|
||||
@@ -668,13 +668,13 @@ msgid "Off"
|
||||
msgstr "关"
|
||||
|
||||
msgid "All images"
|
||||
msgstr "所有镜像"
|
||||
msgstr "所有映像"
|
||||
|
||||
msgid "Basic sector images"
|
||||
msgstr "基本扇区镜像"
|
||||
msgstr "基本扇区映像"
|
||||
|
||||
msgid "Surface images"
|
||||
msgstr "表面镜像"
|
||||
msgstr "表面映像"
|
||||
|
||||
msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine."
|
||||
msgstr "由于 roms/machines 文件夹中缺少合适的 ROM,机型 \"%hs\" 不可用。将切换到其他可用机型。"
|
||||
@@ -803,10 +803,10 @@ msgid "Floppy %i (%s): %ls"
|
||||
msgstr "软盘 %i (%s): %ls"
|
||||
|
||||
msgid "Advanced sector images"
|
||||
msgstr "高级扇区镜像"
|
||||
msgstr "高级扇区映像"
|
||||
|
||||
msgid "Flux images"
|
||||
msgstr "Flux 镜像"
|
||||
msgstr "Flux 映像"
|
||||
|
||||
msgid "Unable to initialize SDL, SDL2.dll is required"
|
||||
msgstr "无法初始化 SDL,需要 SDL2.dll"
|
||||
@@ -824,7 +824,7 @@ msgid "MO %i (%ls): %ls"
|
||||
msgstr "磁光盘 %i (%ls): %ls"
|
||||
|
||||
msgid "MO images"
|
||||
msgstr "磁光盘镜像"
|
||||
msgstr "磁光盘映像"
|
||||
|
||||
msgid "Welcome to 86Box!"
|
||||
msgstr "欢迎使用 86Box!"
|
||||
@@ -854,7 +854,7 @@ msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "一个旧式计算机模拟器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\nWith previous core contributions from Sarah Walker、leilei、JohnElliott、greatpsycho 等人。\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。"
|
||||
msgstr "一个旧式计算机模拟器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。"
|
||||
|
||||
msgid "Hardware not available"
|
||||
msgstr "硬件不可用"
|
||||
@@ -896,7 +896,7 @@ msgid "Don't reset"
|
||||
msgstr "不重置"
|
||||
|
||||
msgid "CD-ROM images"
|
||||
msgstr "光盘镜像"
|
||||
msgstr "光盘映像"
|
||||
|
||||
msgid "%hs Device Configuration"
|
||||
msgstr "%hs 设备配置"
|
||||
@@ -923,13 +923,13 @@ msgid "Cassette: %s"
|
||||
msgstr "磁带: %s"
|
||||
|
||||
msgid "Cassette images"
|
||||
msgstr "磁带镜像"
|
||||
msgstr "磁带映像"
|
||||
|
||||
msgid "Cartridge %i: %ls"
|
||||
msgstr "卡带 %i: %ls"
|
||||
|
||||
msgid "Cartridge images"
|
||||
msgstr "卡带镜像"
|
||||
msgstr "卡带映像"
|
||||
|
||||
msgid "Error initializing renderer"
|
||||
msgstr "初始化渲染器时出错"
|
||||
@@ -980,13 +980,13 @@ msgid "Add Existing Hard Disk"
|
||||
msgstr "添加已存在的硬盘"
|
||||
|
||||
msgid "HDI disk images cannot be larger than 4 GB."
|
||||
msgstr "HDI 磁盘镜像不能超过 4 GB。"
|
||||
msgstr "HDI 磁盘映像不能超过 4 GB。"
|
||||
|
||||
msgid "Disk images cannot be larger than 127 GB."
|
||||
msgstr "磁盘镜像不能超过 127 GB。"
|
||||
msgstr "磁盘映像不能超过 127 GB。"
|
||||
|
||||
msgid "Hard disk images"
|
||||
msgstr "硬盘镜像"
|
||||
msgstr "硬盘映像"
|
||||
|
||||
msgid "Unable to read file"
|
||||
msgstr "无法读取文件"
|
||||
@@ -995,19 +995,19 @@ msgid "Unable to write file"
|
||||
msgstr "无法写入文件"
|
||||
|
||||
msgid "HDI or HDX images with a sector size other than 512 are not supported."
|
||||
msgstr "不支持非 512 字节扇区大小的 HDI 或 HDX 镜像。"
|
||||
msgstr "不支持非 512 字节扇区大小的 HDI 或 HDX 映像。"
|
||||
|
||||
msgid "USB is not yet supported"
|
||||
msgstr "尚未支持 USB"
|
||||
|
||||
msgid "Disk image file already exists"
|
||||
msgstr "磁盘镜像文件已存在"
|
||||
msgstr "磁盘映像文件已存在"
|
||||
|
||||
msgid "Please specify a valid file name."
|
||||
msgstr "请指定有效的文件名。"
|
||||
|
||||
msgid "Disk image created"
|
||||
msgstr "已创建磁盘镜像"
|
||||
msgstr "已创建磁盘映像"
|
||||
|
||||
msgid "Make sure the file exists and is readable."
|
||||
msgstr "请确定此文件已存在并可读取。"
|
||||
@@ -1016,16 +1016,16 @@ msgid "Make sure the file is being saved to a writable directory."
|
||||
msgstr "请确定此文件保存在可写目录中。"
|
||||
|
||||
msgid "Disk image too large"
|
||||
msgstr "磁盘镜像太大"
|
||||
msgstr "磁盘映像太大"
|
||||
|
||||
msgid "Remember to partition and format the newly-created drive."
|
||||
msgstr "请记得为新创建的镜像分区并格式化。"
|
||||
msgstr "请记得为新创建的映像分区并格式化。"
|
||||
|
||||
msgid "The selected file will be overwritten. Are you sure you want to use it?"
|
||||
msgstr "选定的文件将被覆盖。确定继续使用此文件吗?"
|
||||
|
||||
msgid "Unsupported disk image"
|
||||
msgstr "不支持的磁盘镜像"
|
||||
msgstr "不支持的磁盘映像"
|
||||
|
||||
msgid "Overwrite"
|
||||
msgstr "覆盖"
|
||||
@@ -1034,13 +1034,13 @@ msgid "Don't overwrite"
|
||||
msgstr "不覆盖"
|
||||
|
||||
msgid "Raw image (.img)"
|
||||
msgstr "原始镜像 (.img)"
|
||||
msgstr "原始映像 (.img)"
|
||||
|
||||
msgid "HDI image (.hdi)"
|
||||
msgstr "HDI 镜像 (.hdi)"
|
||||
msgstr "HDI 映像 (.hdi)"
|
||||
|
||||
msgid "HDX image (.hdx)"
|
||||
msgstr "HDX 镜像 (.hdx)"
|
||||
msgstr "HDX 映像 (.hdx)"
|
||||
|
||||
msgid "Fixed-size VHD (.vhd)"
|
||||
msgstr "固定大小 VHD (.vhd)"
|
||||
@@ -1064,7 +1064,7 @@ msgid "Select the parent VHD"
|
||||
msgstr "选择父 VHD 文件"
|
||||
|
||||
msgid "This could mean that the parent image was modified after the differencing image was created.\n\nIt can also happen if the image files were moved or copied, or by a bug in the program that created this disk.\n\nDo you want to fix the timestamps?"
|
||||
msgstr "父映像可能在创建差异镜像后被修改。\n\n如果镜像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。\n\n是否需要修复时间戳?"
|
||||
msgstr "父映像可能在创建差异映像后被修改。\n\n如果映像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。\n\n是否需要修复时间戳?"
|
||||
|
||||
msgid "Parent and child disk timestamps do not match"
|
||||
msgstr "父盘与子盘的时间戳不匹配"
|
||||
@@ -1205,7 +1205,7 @@ msgid "Mouse sensitivity:"
|
||||
msgstr "鼠标敏感度:"
|
||||
|
||||
msgid "Select media images from program working directory"
|
||||
msgstr "从程序工作目录中选择介质镜像"
|
||||
msgstr "从程序工作目录中选择介质映像"
|
||||
|
||||
msgid "PIT mode:"
|
||||
msgstr "PIT 模式:"
|
||||
|
||||
@@ -854,7 +854,7 @@ msgid "86Box v"
|
||||
msgstr "86Box v"
|
||||
|
||||
msgid "An emulator of old computers\n\nAuthors: Miran Grča (OBattler), RichardG867, Jasmine Iwanek, TC1995, coldbrewed, Teemu Korhonen (Manaatti), Joakim L. Gilje, Adrien Moulin (elyosh), Daniel Balsom (gloriouscow), Cacodemon345, Fred N. van Kempen (waltje), Tiseno100, reenigne, and others.\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\nReleased under the GNU General Public License version 2 or later. See LICENSE for more information."
|
||||
msgstr "一個舊式電腦模擬器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\nWith previous core contributions from Sarah Walker、leilei、JohnElliott、greatpsycho 等人。\n\n本軟體依據 GNU 通用公共授權第二版或更新版本發布。詳情見 LICENSE 檔案。"
|
||||
msgstr "一個舊式電腦模擬器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\n本軟體依據 GNU 通用公共授權第二版或更新版本發布。詳情見 LICENSE 檔案。"
|
||||
|
||||
msgid "Hardware not available"
|
||||
msgstr "硬體不可用"
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
#include <QLibraryInfo>
|
||||
#include <QString>
|
||||
#include <QFont>
|
||||
#include <QDialog>
|
||||
#include <QMessageBox>
|
||||
|
||||
#ifdef QT_STATIC
|
||||
/* Static builds need plugin imports */
|
||||
@@ -274,6 +276,21 @@ main(int argc, char *argv[])
|
||||
main_window->installEventFilter(&socket);
|
||||
socket.connectToServer(qgetenv("86BOX_MANAGER_SOCKET"));
|
||||
}
|
||||
|
||||
/* Warn the user about unsupported configs */
|
||||
if (cpu_override) {
|
||||
QMessageBox warningbox(QMessageBox::Icon::Warning, QObject::tr("You are loading an unsupported configuration"),
|
||||
QObject::tr("CPU type filtering based on selected machine is disabled for this emulated machine.\n\nThis makes it possible to choose a CPU that is otherwise incompatible with the selected machine. However, you may run into incompatibilities with the machine BIOS or other software.\n\nEnabling this setting is not officially supported and any bug reports filed may be closed as invalid."),
|
||||
QMessageBox::NoButton, main_window);
|
||||
warningbox.addButton(QObject::tr("Continue"), QMessageBox::AcceptRole);
|
||||
warningbox.addButton(QObject::tr("Exit"), QMessageBox::RejectRole);
|
||||
warningbox.exec();
|
||||
if (warningbox.result() == QDialog::Accepted) {
|
||||
confirm_exit_cmdl = 0; /* skip the confirmation prompt without touching the config */
|
||||
emit main_window->close();
|
||||
}
|
||||
}
|
||||
|
||||
// pc_reset_hard_init();
|
||||
|
||||
/* Set the PAUSE mode depending on the renderer. */
|
||||
|
||||
@@ -333,6 +333,8 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
|
||||
#ifndef DISCORD
|
||||
ui->actionEnable_Discord_integration->setVisible(false);
|
||||
#else
|
||||
ui->actionEnable_Discord_integration->setEnabled(discord_loaded);
|
||||
#endif
|
||||
|
||||
#if defined Q_OS_WINDOWS || defined Q_OS_MACOS
|
||||
|
||||
@@ -110,7 +110,10 @@ SettingsDisplay::onCurrentMachineChanged(int machineId)
|
||||
void
|
||||
SettingsDisplay::on_pushButtonConfigure_clicked()
|
||||
{
|
||||
auto *device = video_card_getdevice(ui->comboBoxVideo->currentData().toInt());
|
||||
int videoCard = ui->comboBoxVideo->currentData().toInt();
|
||||
auto *device = video_card_getdevice(videoCard);
|
||||
if (videoCard == VID_INTERNAL)
|
||||
device = machine_get_vid_device(machineId);
|
||||
DeviceConfig::ConfigureDevice(device, 0, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
@@ -138,7 +141,11 @@ SettingsDisplay::on_comboBoxVideo_currentIndexChanged(int index)
|
||||
}
|
||||
auto curVideoCard_2 = videoCard[1];
|
||||
videoCard[0] = ui->comboBoxVideo->currentData().toInt();
|
||||
ui->pushButtonConfigure->setEnabled(video_card_has_config(videoCard[0]) > 0);
|
||||
if (videoCard[0] == VID_INTERNAL)
|
||||
ui->pushButtonConfigure->setEnabled(machine_has_flags(machineId, MACHINE_VIDEO) &&
|
||||
device_has_config(machine_get_vid_device(machineId)));
|
||||
else
|
||||
ui->pushButtonConfigure->setEnabled(video_card_has_config(videoCard[0]) > 0);
|
||||
bool machineHasPci = machine_has_bus(machineId, MACHINE_BUS_PCI) > 0;
|
||||
ui->checkBoxVoodoo->setEnabled(machineHasPci);
|
||||
if (machineHasPci) {
|
||||
|
||||
@@ -278,7 +278,7 @@ SettingsMachine::on_comboBoxSpeed_currentIndexChanged(int index)
|
||||
if (!(flags & CPU_SUPPORTS_DYNAREC)) {
|
||||
ui->checkBoxDynamicRecompiler->setChecked(false);
|
||||
ui->checkBoxDynamicRecompiler->setEnabled(false);
|
||||
} else if (flags & CPU_REQUIRES_DYNAREC) {
|
||||
} else if ((flags & CPU_REQUIRES_DYNAREC) && !cpu_override) {
|
||||
ui->checkBoxDynamicRecompiler->setChecked(true);
|
||||
ui->checkBoxDynamicRecompiler->setEnabled(false);
|
||||
} else {
|
||||
@@ -288,7 +288,6 @@ SettingsMachine::on_comboBoxSpeed_currentIndexChanged(int index)
|
||||
#endif
|
||||
|
||||
// win_settings_machine_recalc_fpu
|
||||
int machineId = ui->comboBoxMachine->currentData().toInt();
|
||||
auto *modelFpu = ui->comboBoxFPU->model();
|
||||
int removeRows = modelFpu->rowCount();
|
||||
|
||||
@@ -306,11 +305,27 @@ SettingsMachine::on_comboBoxSpeed_currentIndexChanged(int index)
|
||||
ui->comboBoxFPU->setEnabled(modelFpu->rowCount() > 1);
|
||||
ui->comboBoxFPU->setCurrentIndex(-1);
|
||||
ui->comboBoxFPU->setCurrentIndex(selectedFpuRow);
|
||||
}
|
||||
}
|
||||
|
||||
ui->checkBoxFPUSoftfloat->setChecked(machine_has_flags(machineId, MACHINE_SOFTFLOAT_ONLY) ?
|
||||
true : fpu_softfloat);
|
||||
ui->checkBoxFPUSoftfloat->setEnabled(machine_has_flags(machineId, MACHINE_SOFTFLOAT_ONLY) ?
|
||||
false : true);
|
||||
void
|
||||
SettingsMachine::on_comboBoxFPU_currentIndexChanged(int index)
|
||||
{
|
||||
if (index >= 0) {
|
||||
int cpuFamilyId = ui->comboBoxCPU->currentData().toInt();
|
||||
const auto *cpuFamily = &cpu_families[cpuFamilyId];
|
||||
int cpuId = ui->comboBoxSpeed->currentData().toInt();
|
||||
int machineId = ui->comboBoxMachine->currentData().toInt();
|
||||
|
||||
if (fpu_get_type_from_index(cpuFamily, cpuId, index) == FPU_NONE) {
|
||||
ui->checkBoxFPUSoftfloat->setChecked(false);
|
||||
ui->checkBoxFPUSoftfloat->setEnabled(false);
|
||||
} else {
|
||||
ui->checkBoxFPUSoftfloat->setChecked(machine_has_flags(machineId, MACHINE_SOFTFLOAT_ONLY) ?
|
||||
true : fpu_softfloat);
|
||||
ui->checkBoxFPUSoftfloat->setEnabled(machine_has_flags(machineId, MACHINE_SOFTFLOAT_ONLY) ?
|
||||
false : true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -21,6 +21,9 @@ signals:
|
||||
private slots:
|
||||
void on_pushButtonConfigure_clicked();
|
||||
|
||||
private slots:
|
||||
void on_comboBoxFPU_currentIndexChanged(int index);
|
||||
|
||||
private slots:
|
||||
void on_comboBoxSpeed_currentIndexChanged(int index);
|
||||
|
||||
|
||||
@@ -47,7 +47,12 @@ SettingsNetwork::enableElements(Ui::SettingsNetwork *ui)
|
||||
|
||||
intf_cbox->setEnabled(net_type_cbox->currentData().toInt() == NET_TYPE_PCAP);
|
||||
nic_cbox->setEnabled(adaptersEnabled);
|
||||
conf_btn->setEnabled(adaptersEnabled && network_card_has_config(nic_cbox->currentData().toInt()));
|
||||
int netCard = nic_cbox->currentData().toInt();
|
||||
if ((i == 0) && (netCard == NET_INTERNAL))
|
||||
conf_btn->setEnabled(adaptersEnabled && machine_has_flags(machineId, MACHINE_NIC) &&
|
||||
device_has_config(machine_get_net_device(machineId)));
|
||||
else
|
||||
conf_btn->setEnabled(adaptersEnabled && network_card_has_config(nic_cbox->currentData().toInt()));
|
||||
socket_line->setEnabled(net_type_cbox->currentData().toInt() == NET_TYPE_VDE);
|
||||
}
|
||||
}
|
||||
@@ -110,6 +115,12 @@ SettingsNetwork::onCurrentMachineChanged(int machineId)
|
||||
selectedRow = 0;
|
||||
|
||||
while (true) {
|
||||
/* Skip "internal" if machine doesn't have it or this is not the primary card. */
|
||||
if ((c == 1) && ((i > 0) || (machine_has_flags(machineId, MACHINE_NIC) == 0))) {
|
||||
c++;
|
||||
continue;
|
||||
}
|
||||
|
||||
auto name = DeviceConfig::DeviceName(network_card_getdevice(c), network_card_get_internal_name(c), 1);
|
||||
if (name.isEmpty()) {
|
||||
break;
|
||||
@@ -182,23 +193,33 @@ SettingsNetwork::on_comboIndexChanged(int index)
|
||||
void
|
||||
SettingsNetwork::on_pushButtonConf1_clicked()
|
||||
{
|
||||
DeviceConfig::ConfigureDevice(network_card_getdevice(ui->comboBoxNIC1->currentData().toInt()), 1, qobject_cast<Settings *>(Settings::settings));
|
||||
int netCard = ui->comboBoxNIC1->currentData().toInt();
|
||||
auto *device = network_card_getdevice(netCard);
|
||||
if (netCard == NET_INTERNAL)
|
||||
device = machine_get_net_device(machineId);
|
||||
DeviceConfig::ConfigureDevice(device, 1, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
void
|
||||
SettingsNetwork::on_pushButtonConf2_clicked()
|
||||
{
|
||||
DeviceConfig::ConfigureDevice(network_card_getdevice(ui->comboBoxNIC2->currentData().toInt()), 2, qobject_cast<Settings *>(Settings::settings));
|
||||
int netCard = ui->comboBoxNIC2->currentData().toInt();
|
||||
auto *device = network_card_getdevice(netCard);
|
||||
DeviceConfig::ConfigureDevice(device, 2, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
void
|
||||
SettingsNetwork::on_pushButtonConf3_clicked()
|
||||
{
|
||||
DeviceConfig::ConfigureDevice(network_card_getdevice(ui->comboBoxNIC3->currentData().toInt()), 3, qobject_cast<Settings *>(Settings::settings));
|
||||
int netCard = ui->comboBoxNIC3->currentData().toInt();
|
||||
auto *device = network_card_getdevice(netCard);
|
||||
DeviceConfig::ConfigureDevice(device, 3, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
void
|
||||
SettingsNetwork::on_pushButtonConf4_clicked()
|
||||
{
|
||||
DeviceConfig::ConfigureDevice(network_card_getdevice(ui->comboBoxNIC4->currentData().toInt()), 4, qobject_cast<Settings *>(Settings::settings));
|
||||
int netCard = ui->comboBoxNIC4->currentData().toInt();
|
||||
auto *device = network_card_getdevice(netCard);
|
||||
DeviceConfig::ConfigureDevice(device, 4, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
@@ -82,8 +82,8 @@ SettingsSound::onCurrentMachineChanged(int machineId)
|
||||
selectedRow = 0;
|
||||
|
||||
while (true) {
|
||||
/* Skip "internal" if machine doesn't have it. */
|
||||
if ((c == 1) && (machine_has_flags(machineId, MACHINE_SOUND) == 0)) {
|
||||
/* Skip "internal" if machine doesn't have it or this is not the primary card. */
|
||||
if ((c == 1) && ((i > 0) || (machine_has_flags(machineId, MACHINE_SOUND) == 0))) {
|
||||
c++;
|
||||
continue;
|
||||
}
|
||||
@@ -192,13 +192,22 @@ SettingsSound::on_comboBoxSoundCard1_currentIndexChanged(int index)
|
||||
if (index < 0) {
|
||||
return;
|
||||
}
|
||||
ui->pushButtonConfigureSoundCard1->setEnabled(sound_card_has_config(ui->comboBoxSoundCard1->currentData().toInt()));
|
||||
int sndCard = ui->comboBoxSoundCard1->currentData().toInt();
|
||||
if (sndCard == SOUND_INTERNAL)
|
||||
ui->pushButtonConfigureSoundCard1->setEnabled(machine_has_flags(machineId, MACHINE_SOUND) &&
|
||||
device_has_config(machine_get_snd_device(machineId)));
|
||||
else
|
||||
ui->pushButtonConfigureSoundCard1->setEnabled(sound_card_has_config(sndCard));
|
||||
}
|
||||
|
||||
void
|
||||
SettingsSound::on_pushButtonConfigureSoundCard1_clicked()
|
||||
{
|
||||
DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard1->currentData().toInt()), 0, qobject_cast<Settings *>(Settings::settings));
|
||||
int sndCard = ui->comboBoxSoundCard1->currentData().toInt();
|
||||
auto *device = sound_card_getdevice(sndCard);
|
||||
if (sndCard == SOUND_INTERNAL)
|
||||
device = machine_get_snd_device(machineId);
|
||||
DeviceConfig::ConfigureDevice(device, 0, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -207,13 +216,16 @@ SettingsSound::on_comboBoxSoundCard2_currentIndexChanged(int index)
|
||||
if (index < 0) {
|
||||
return;
|
||||
}
|
||||
ui->pushButtonConfigureSoundCard2->setEnabled(sound_card_has_config(ui->comboBoxSoundCard2->currentData().toInt()));
|
||||
int sndCard = ui->comboBoxSoundCard2->currentData().toInt();
|
||||
ui->pushButtonConfigureSoundCard2->setEnabled(sound_card_has_config(sndCard));
|
||||
}
|
||||
|
||||
void
|
||||
SettingsSound::on_pushButtonConfigureSoundCard2_clicked()
|
||||
{
|
||||
DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard2->currentData().toInt()), 0, qobject_cast<Settings *>(Settings::settings));
|
||||
int sndCard = ui->comboBoxSoundCard2->currentData().toInt();
|
||||
auto *device = sound_card_getdevice(sndCard);
|
||||
DeviceConfig::ConfigureDevice(device, 0, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -222,13 +234,16 @@ SettingsSound::on_comboBoxSoundCard3_currentIndexChanged(int index)
|
||||
if (index < 0) {
|
||||
return;
|
||||
}
|
||||
ui->pushButtonConfigureSoundCard3->setEnabled(sound_card_has_config(ui->comboBoxSoundCard3->currentData().toInt()));
|
||||
int sndCard = ui->comboBoxSoundCard3->currentData().toInt();
|
||||
ui->pushButtonConfigureSoundCard3->setEnabled(sound_card_has_config(sndCard));
|
||||
}
|
||||
|
||||
void
|
||||
SettingsSound::on_pushButtonConfigureSoundCard3_clicked()
|
||||
{
|
||||
DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard3->currentData().toInt()), 0, qobject_cast<Settings *>(Settings::settings));
|
||||
int sndCard = ui->comboBoxSoundCard3->currentData().toInt();
|
||||
auto *device = sound_card_getdevice(sndCard);
|
||||
DeviceConfig::ConfigureDevice(device, 0, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
void
|
||||
@@ -237,13 +252,16 @@ SettingsSound::on_comboBoxSoundCard4_currentIndexChanged(int index)
|
||||
if (index < 0) {
|
||||
return;
|
||||
}
|
||||
ui->pushButtonConfigureSoundCard4->setEnabled(sound_card_has_config(ui->comboBoxSoundCard4->currentData().toInt()));
|
||||
int sndCard = ui->comboBoxSoundCard4->currentData().toInt();
|
||||
ui->pushButtonConfigureSoundCard4->setEnabled(sound_card_has_config(sndCard));
|
||||
}
|
||||
|
||||
void
|
||||
SettingsSound::on_pushButtonConfigureSoundCard4_clicked()
|
||||
{
|
||||
DeviceConfig::ConfigureDevice(sound_card_getdevice(ui->comboBoxSoundCard4->currentData().toInt()), 0, qobject_cast<Settings *>(Settings::settings));
|
||||
int sndCard = ui->comboBoxSoundCard4->currentData().toInt();
|
||||
auto *device = sound_card_getdevice(sndCard);
|
||||
DeviceConfig::ConfigureDevice(device, 0, qobject_cast<Settings *>(Settings::settings));
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -86,6 +86,7 @@ static SCSI_CARD scsi_cards[] = {
|
||||
{ &buslogic_640a_device, },
|
||||
{ &ncr53c90_mca_device, },
|
||||
{ &spock_device, },
|
||||
{ &tribble_device, },
|
||||
{ &buslogic_958d_pci_device, },
|
||||
{ &ncr53c810_pci_device, },
|
||||
{ &ncr53c815_pci_device, },
|
||||
|
||||
@@ -1025,6 +1025,7 @@ aha_init(const device_t *info)
|
||||
dev->rom_shramsz = 128; /* size of shadow RAM */
|
||||
dev->rom_ioaddr = 0x3F7E; /* [2:0] idx into addr table */
|
||||
dev->rom_fwhigh = 0x0022; /* firmware version (hi/lo) */
|
||||
dev->flags |= X54X_HAS_SIGNATURE;
|
||||
dev->ven_get_host_id = aha_get_host_id; /* function to return host ID from EEPROM */
|
||||
dev->ven_get_irq = aha_get_irq; /* function to return IRQ from EEPROM */
|
||||
dev->ven_get_dma = aha_get_dma; /* function to return DMA channel from EEPROM */
|
||||
@@ -1041,6 +1042,7 @@ aha_init(const device_t *info)
|
||||
dev->rom_ioaddr = 0x3F7E; /* [2:0] idx into addr table */
|
||||
dev->rom_fwhigh = 0x0022; /* firmware version (hi/lo) */
|
||||
dev->flags |= X54X_CDROM_BOOT;
|
||||
dev->flags |= X54X_HAS_SIGNATURE;
|
||||
dev->ven_get_host_id = aha_get_host_id; /* function to return host ID from EEPROM */
|
||||
dev->ven_get_irq = aha_get_irq; /* function to return IRQ from EEPROM */
|
||||
dev->ven_get_dma = aha_get_dma; /* function to return DMA channel from EEPROM */
|
||||
@@ -1061,6 +1063,7 @@ aha_init(const device_t *info)
|
||||
dev->rom_fwhigh = 0x0055; /* firmware version (hi/lo) */
|
||||
dev->flags |= X54X_CDROM_BOOT;
|
||||
dev->flags |= X54X_ISAPNP;
|
||||
dev->flags |= X54X_HAS_SIGNATURE;
|
||||
dev->ven_get_host_id = aha_get_host_id; /* function to return host ID from EEPROM */
|
||||
dev->ven_get_irq = aha_get_irq; /* function to return IRQ from EEPROM */
|
||||
dev->ven_get_dma = aha_get_dma; /* function to return DMA channel from EEPROM */
|
||||
@@ -1085,6 +1088,7 @@ aha_init(const device_t *info)
|
||||
dev->fw_rev = "BB01";
|
||||
|
||||
dev->flags |= X54X_LBA_BIOS;
|
||||
dev->flags |= X54X_HAS_SIGNATURE; /*To be confirmed*/
|
||||
|
||||
/* Enable MCA. */
|
||||
dev->pos_regs[0] = 0x1F; /* MCA board ID */
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1553,10 +1553,14 @@ ncr_init(const device_t *info)
|
||||
ncr_dev->bios_ver = 1;
|
||||
}
|
||||
|
||||
if (ncr_dev->bios_ver == 1)
|
||||
fn = RT1000B_820R_ROM;
|
||||
else
|
||||
fn = RT1000B_810R_ROM;
|
||||
switch (ncr_dev->bios_ver) {
|
||||
case 0:
|
||||
fn = RT1000B_810R_ROM;
|
||||
break;
|
||||
case 1:
|
||||
fn = RT1000B_820R_ROM;
|
||||
break;
|
||||
}
|
||||
|
||||
rom_init(&ncr_dev->bios_rom, fn,
|
||||
ncr_dev->rom_addr, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
@@ -1601,9 +1605,8 @@ ncr_init(const device_t *info)
|
||||
ncr_dev->irq = device_get_config_int("irq");
|
||||
ncr_dev->t128.bios_enabled = device_get_config_int("boot");
|
||||
|
||||
if (ncr_dev->t128.bios_enabled)
|
||||
rom_init(&ncr_dev->bios_rom, T128_ROM,
|
||||
ncr_dev->rom_addr, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
rom_init(&ncr_dev->bios_rom, T128_ROM,
|
||||
ncr_dev->rom_addr, 0x4000, 0x3fff, 0, MEM_MAPPING_EXTERNAL);
|
||||
|
||||
mem_mapping_add(&ncr_dev->mapping, ncr_dev->rom_addr, 0x4000,
|
||||
t128_read, NULL, NULL,
|
||||
@@ -1635,15 +1638,12 @@ ncr_init(const device_t *info)
|
||||
ncr_log("%s\n", temp);
|
||||
|
||||
ncr_reset(ncr_dev, &ncr_dev->ncr);
|
||||
if (ncr_dev->type < 3 || ncr_dev->type == 4) {
|
||||
if ((ncr_dev->type < 3) || (ncr_dev->type == 4)) {
|
||||
ncr_dev->status_ctrl = STATUS_BUFFER_NOT_READY;
|
||||
ncr_dev->buffer_host_pos = 128;
|
||||
} else {
|
||||
ncr_dev->t128.status = 0x04;
|
||||
ncr_dev->t128.host_pos = 512;
|
||||
|
||||
if (!ncr_dev->t128.bios_enabled)
|
||||
ncr_dev->t128.status |= 0x80;
|
||||
}
|
||||
timer_add(&ncr_dev->timer, ncr_callback, ncr_dev, 0);
|
||||
|
||||
@@ -1894,13 +1894,6 @@ static const device_config_t t128_config[] = {
|
||||
{ .description = "" }
|
||||
},
|
||||
},
|
||||
{
|
||||
.name = "boot",
|
||||
.description = "Enable Boot ROM",
|
||||
.type = CONFIG_BINARY,
|
||||
.default_string = "",
|
||||
.default_int = 1
|
||||
},
|
||||
{ .name = "", .description = "", .type = CONFIG_END }
|
||||
};
|
||||
// clang-format on
|
||||
|
||||
@@ -135,7 +135,7 @@ typedef struct {
|
||||
int cir_status;
|
||||
|
||||
uint8_t pacing;
|
||||
|
||||
uint8_t irq_state;
|
||||
uint8_t buf[0x600];
|
||||
|
||||
struct {
|
||||
@@ -159,6 +159,7 @@ typedef struct {
|
||||
int scb_state;
|
||||
int in_reset;
|
||||
int in_invalid;
|
||||
int spock_16bit;
|
||||
|
||||
uint64_t temp_period;
|
||||
double media_period;
|
||||
@@ -674,9 +675,9 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb)
|
||||
spock_log("Get POS Info\n");
|
||||
get_pos_info_t *get_pos_info = &scsi->get_pos_info;
|
||||
|
||||
get_pos_info->pos = 0x8eff;
|
||||
get_pos_info->pos = scsi->spock_16bit ? 0x8efe : 0x8eff;
|
||||
get_pos_info->pos1 = scsi->pos_regs[3] | (scsi->pos_regs[2] << 8);
|
||||
get_pos_info->pos2 = 0x0e | (scsi->pos_regs[4] << 8);
|
||||
get_pos_info->pos2 = scsi->irq | (scsi->pos_regs[4] << 8);
|
||||
get_pos_info->pos3 = 1 << 12;
|
||||
get_pos_info->pos4 = (7 << 8) | 8;
|
||||
get_pos_info->pos5 = (16 << 8) | scsi->pacing;
|
||||
@@ -716,7 +717,7 @@ spock_execute_cmd(spock_t *scsi, scb_t *scb)
|
||||
case CMD_SEND_OTHER_SCSI:
|
||||
scsi->cdb_id = scsi->assign ? scsi->dev_id[scsi->scb_id].phys_id : scsi->present[scsi->scb_id];
|
||||
dma_bm_read(scsi->scb_addr + 0x18, scsi->cdb, 12, 2);
|
||||
spock_log("Send Other SCSI, SCB ID=%d, PHYS ID=%d\n", scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id);
|
||||
spock_log("Send Other SCSI, SCB ID=%d, PHYS ID=%d, CDB[0]=%02x, CDB_ID=%d\n", scsi->scb_id, scsi->dev_id[scsi->scb_id].phys_id, scsi->cdb[0], scsi->cdb_id);
|
||||
scsi->cdb[1] = (scsi->cdb[1] & 0x1f) | (scsi->dev_id[scsi->scb_id].lun_id << 5); /*Patch correct LUN into command*/
|
||||
scsi->cdb_len = (scb->lba_addr & 0xff) ? (scb->lba_addr & 0xff) : 6;
|
||||
scsi->scsi_state = SCSI_STATE_SELECT;
|
||||
@@ -916,7 +917,7 @@ spock_process_scsi(spock_t *scsi, scb_t *scb)
|
||||
scsi_device_command_phase0(sd, scsi->temp_cdb);
|
||||
spock_log("SCSI ID %i: Current CDB[0] = %02x, LUN = %i, data len = %i, max len = %i, phase val = %02x\n", scsi->cdb_id, scsi->temp_cdb[0], scsi->temp_cdb[1] >> 5, sd->buffer_length, spock_get_len(scsi, scb), sd->phase);
|
||||
|
||||
if (sd->phase != SCSI_PHASE_STATUS && sd->buffer_length > 0) {
|
||||
if ((sd->phase != SCSI_PHASE_STATUS) && (sd->buffer_length > 0)) {
|
||||
p = scsi_device_get_callback(sd);
|
||||
if (p <= 0.0)
|
||||
spock_add_to_period(scsi, sd->buffer_length);
|
||||
@@ -969,9 +970,9 @@ spock_process_scsi(spock_t *scsi, scb_t *scb)
|
||||
scsi->scsi_state = SCSI_STATE_IDLE;
|
||||
|
||||
spock_log("State to idle, cmd timer %d\n", scsi->cmd_timer);
|
||||
if (!scsi->cmd_timer) {
|
||||
if (!scsi->cmd_timer)
|
||||
scsi->cmd_timer = 1;
|
||||
}
|
||||
|
||||
spock_add_to_period(scsi, 1);
|
||||
break;
|
||||
}
|
||||
@@ -1056,7 +1057,7 @@ spock_callback(void *priv)
|
||||
|
||||
period = 0.2 * ((double) scsi->temp_period);
|
||||
timer_on_auto(&scsi->callback_timer, (scsi->media_period + period + 10.0));
|
||||
spock_log("Temporary period: %lf us (%" PRIi64 " periods)\n", scsi->callback_timer.period, scsi->temp_period);
|
||||
spock_log("Temporary period: %lf us (%" PRIi64 " periods), media period = %lf\n", scsi->callback_timer.period, scsi->temp_period, scsi->media_period);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -1081,6 +1082,7 @@ spock_mca_write(int port, uint8_t val, void *priv)
|
||||
mem_mapping_enable(&scsi->bios_rom.mapping);
|
||||
}
|
||||
}
|
||||
spock_log("[%04X:%08X]: POS Write Port = %x, val = %02x, rom addr = %05x\n", CS, cpu_state.pc, port & 7, val, ((scsi->pos_regs[2] >> 4) * 0x2000) + 0xc0000);
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -1088,6 +1090,8 @@ spock_mca_read(int port, void *priv)
|
||||
{
|
||||
const spock_t *scsi = (spock_t *) priv;
|
||||
|
||||
spock_log("[%04X:%08X]: POS Read Port = %x, val = %02x\n", CS, cpu_state.pc,
|
||||
port & 7, scsi->pos_regs[port & 7]);
|
||||
return scsi->pos_regs[port & 7];
|
||||
}
|
||||
|
||||
@@ -1118,10 +1122,14 @@ spock_mca_reset(void *priv)
|
||||
scsi_device_reset(&scsi_devices[scsi->bus][i]);
|
||||
scsi->present[i] = 0;
|
||||
}
|
||||
|
||||
spock_log("Reset.\n");
|
||||
mem_mapping_disable(&scsi->bios_rom.mapping);
|
||||
spock_mca_write(0x102, 0, scsi);
|
||||
}
|
||||
|
||||
static void *
|
||||
spock_init(UNUSED(const device_t *info))
|
||||
spock_init(const device_t *info)
|
||||
{
|
||||
spock_t *scsi = malloc(sizeof(spock_t));
|
||||
memset(scsi, 0x00, sizeof(spock_t));
|
||||
@@ -1131,23 +1139,24 @@ spock_init(UNUSED(const device_t *info))
|
||||
scsi->irq = 14;
|
||||
|
||||
scsi->bios_ver = device_get_config_int("bios_ver");
|
||||
scsi->spock_16bit = info->local & 0xff;
|
||||
|
||||
switch (scsi->bios_ver) {
|
||||
case 1:
|
||||
rom_init_interleaved(&scsi->bios_rom, SPOCK_U68_1991_ROM, SPOCK_U69_1991_ROM,
|
||||
0xc8000, 0x8000, 0x7fff, 0x4000, MEM_MAPPING_EXTERNAL);
|
||||
break;
|
||||
case 0:
|
||||
rom_init_interleaved(&scsi->bios_rom, SPOCK_U68_1990_ROM, SPOCK_U69_1990_ROM,
|
||||
0xc8000, 0x8000, 0x7fff, 0x4000, MEM_MAPPING_EXTERNAL);
|
||||
break;
|
||||
case 1:
|
||||
rom_init_interleaved(&scsi->bios_rom, SPOCK_U68_1991_ROM, SPOCK_U69_1991_ROM,
|
||||
0xc8000, 0x8000, 0x7fff, 0x4000, MEM_MAPPING_EXTERNAL);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
mem_mapping_disable(&scsi->bios_rom.mapping);
|
||||
|
||||
scsi->pos_regs[0] = 0xff;
|
||||
scsi->pos_regs[0] = scsi->spock_16bit ? 0xfe : 0xff;
|
||||
scsi->pos_regs[1] = 0x8e;
|
||||
mca_add(spock_mca_read, spock_mca_write, spock_mca_feedb, spock_mca_reset, scsi);
|
||||
|
||||
@@ -1218,3 +1227,17 @@ const device_t spock_device = {
|
||||
.force_redraw = NULL,
|
||||
.config = spock_rom_config
|
||||
};
|
||||
|
||||
const device_t tribble_device = {
|
||||
.name = "IBM PS/2 SCSI Adapter (Tribble)",
|
||||
.internal_name = "tribble",
|
||||
.flags = DEVICE_MCA,
|
||||
.local = 1,
|
||||
.init = spock_init,
|
||||
.close = spock_close,
|
||||
.reset = NULL,
|
||||
{ .available = spock_available },
|
||||
.speed_changed = NULL,
|
||||
.force_redraw = NULL,
|
||||
.config = spock_rom_config
|
||||
};
|
||||
|
||||
@@ -103,7 +103,7 @@ x54x_irq(x54x_t *dev, int set)
|
||||
else
|
||||
picintc(1 << irq);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -466,6 +466,7 @@ x54x_bios_command(x54x_t *x54x, uint8_t max_id, BIOSCMD *cmd, int8_t islba)
|
||||
}
|
||||
|
||||
return 0;
|
||||
break;
|
||||
|
||||
case 0x02: /* Read Desired Sectors to Memory */
|
||||
case 0x03: /* Write Desired Sectors from Memory */
|
||||
@@ -1341,24 +1342,27 @@ x54x_in(uint16_t port, void *priv)
|
||||
if (dev->flags & X54X_INT_GEOM_WRITABLE)
|
||||
ret = dev->Geometry;
|
||||
else {
|
||||
switch (dev->Geometry) {
|
||||
default:
|
||||
case 0:
|
||||
ret = 'A';
|
||||
break;
|
||||
case 1:
|
||||
ret = 'D';
|
||||
break;
|
||||
case 2:
|
||||
ret = 'A';
|
||||
break;
|
||||
case 3:
|
||||
ret = 'P';
|
||||
break;
|
||||
}
|
||||
ret ^= 1;
|
||||
dev->Geometry++;
|
||||
dev->Geometry &= 0x03;
|
||||
if (dev->flags & X54X_HAS_SIGNATURE) {
|
||||
switch (dev->Geometry) {
|
||||
default:
|
||||
case 0:
|
||||
ret = 'A';
|
||||
break;
|
||||
case 1:
|
||||
ret = 'D';
|
||||
break;
|
||||
case 2:
|
||||
ret = 'A';
|
||||
break;
|
||||
case 3:
|
||||
ret = 'P';
|
||||
break;
|
||||
}
|
||||
ret ^= 1;
|
||||
dev->Geometry++;
|
||||
dev->Geometry &= 0x03;
|
||||
} else
|
||||
ret = 0xff;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -40,6 +40,7 @@ typedef struct pc87306_t {
|
||||
uint8_t tries;
|
||||
uint8_t regs[29];
|
||||
uint8_t gpio[2];
|
||||
uint16_t gpioba;
|
||||
int cur_reg;
|
||||
fdc_t *fdc;
|
||||
serial_t *uart[2];
|
||||
@@ -65,22 +66,35 @@ pc87306_gpio_read(uint16_t port, void *priv)
|
||||
static void
|
||||
pc87306_gpio_remove(pc87306_t *dev)
|
||||
{
|
||||
io_removehandler(dev->regs[0x0f] << 2, 0x0001,
|
||||
pc87306_gpio_read, NULL, NULL, pc87306_gpio_write, NULL, NULL, dev);
|
||||
io_removehandler((dev->regs[0x0f] << 2) + 1, 0x0001,
|
||||
pc87306_gpio_read, NULL, NULL, pc87306_gpio_write, NULL, NULL, dev);
|
||||
if (dev->gpioba != 0x0000) {
|
||||
io_removehandler(dev->gpioba, 0x0001,
|
||||
pc87306_gpio_read, NULL, NULL, pc87306_gpio_write, NULL, NULL, dev);
|
||||
io_removehandler(dev->gpioba + 1, 0x0001,
|
||||
pc87306_gpio_read, NULL, NULL, pc87306_gpio_write, NULL, NULL, dev);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pc87306_gpio_init(pc87306_t *dev)
|
||||
{
|
||||
if ((dev->regs[0x12]) & 0x10)
|
||||
io_sethandler(dev->regs[0x0f] << 2, 0x0001,
|
||||
pc87306_gpio_read, NULL, NULL, pc87306_gpio_write, NULL, NULL, dev);
|
||||
dev->gpioba = ((uint16_t) dev->regs[0x0f]) << 2;
|
||||
|
||||
if ((dev->regs[0x12]) & 0x20)
|
||||
io_sethandler((dev->regs[0x0f] << 2) + 1, 0x0001,
|
||||
pc87306_gpio_read, NULL, NULL, pc87306_gpio_write, NULL, NULL, dev);
|
||||
if (dev->gpioba != 0x0000) {
|
||||
if ((dev->regs[0x12]) & 0x10)
|
||||
io_sethandler(dev->regs[0x0f] << 2, 0x0001,
|
||||
pc87306_gpio_read, NULL, NULL, pc87306_gpio_write, NULL, NULL, dev);
|
||||
|
||||
if ((dev->regs[0x12]) & 0x20)
|
||||
io_sethandler((dev->regs[0x0f] << 2) + 1, 0x0001,
|
||||
pc87306_gpio_read, NULL, NULL, pc87306_gpio_write, NULL, NULL, dev);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
pc87306_gpio_handler(pc87306_t *dev)
|
||||
{
|
||||
pc87306_gpio_remove(dev);
|
||||
pc87306_gpio_init(dev);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -315,13 +329,13 @@ pc87306_write(uint16_t port, uint8_t val, void *priv)
|
||||
break;
|
||||
case 0xF:
|
||||
if (valxor)
|
||||
pc87306_gpio_init(dev);
|
||||
pc87306_gpio_handler(dev);
|
||||
break;
|
||||
case 0x12:
|
||||
if (valxor & 0x01)
|
||||
nvr_wp_set(!!(val & 0x01), 0, dev->nvr);
|
||||
if (valxor & 0x30)
|
||||
pc87306_gpio_init(dev);
|
||||
pc87306_gpio_handler(dev);
|
||||
break;
|
||||
case 0x19:
|
||||
if (valxor) {
|
||||
|
||||
@@ -16,7 +16,9 @@
|
||||
#include <86box/pic.h>
|
||||
#include <86box/sound.h>
|
||||
#include <86box/timer.h>
|
||||
#include <86box/snd_ad1848.h>
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
# include <86box/snd_ad1848.h>
|
||||
#endif
|
||||
#include <86box/plat_fallthrough.h>
|
||||
#include <86box/plat_unused.h>
|
||||
|
||||
@@ -104,9 +106,12 @@ typedef struct gus_t {
|
||||
pc_timer_t timer_1;
|
||||
pc_timer_t timer_2;
|
||||
|
||||
uint8_t type;
|
||||
|
||||
int irq;
|
||||
int dma;
|
||||
int irq_midi;
|
||||
int dma2;
|
||||
uint16_t base;
|
||||
int latch_enable;
|
||||
|
||||
@@ -139,9 +144,9 @@ typedef struct gus_t {
|
||||
|
||||
uint8_t usrr;
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
uint8_t max_ctrl;
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
ad1848_t ad1848;
|
||||
#endif
|
||||
} gus_t;
|
||||
@@ -211,16 +216,16 @@ gus_update_int_status(gus_t *gus)
|
||||
|
||||
if (gus->irq != -1) {
|
||||
if (intr_pending)
|
||||
picintlevel(1 << gus->irq, &gus->irq_state);
|
||||
picint(1 << gus->irq);
|
||||
else
|
||||
picintclevel(1 << gus->irq, &gus->irq_state);
|
||||
picintc(1 << gus->irq);
|
||||
}
|
||||
|
||||
if (gus->irq_midi != -1) {
|
||||
if ((gus->irq_midi != -1) && (gus->irq_midi != gus->irq)) {
|
||||
if (midi_intr_pending)
|
||||
picintlevel(1 << gus->irq_midi, &gus->midi_irq_state);
|
||||
picint(1 << gus->irq_midi);
|
||||
else
|
||||
picintclevel(1 << gus->irq_midi, &gus->midi_irq_state);
|
||||
picintc(1 << gus->irq_midi);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -589,14 +594,24 @@ writegus(uint16_t addr, uint8_t val, void *priv)
|
||||
} else
|
||||
gus->irq_midi = gus_midi_irqs[(val >> 3) & 7];
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
ad1848_setirq(&gus->ad1848, gus->irq);
|
||||
if (gus->type == GUS_MAX)
|
||||
ad1848_setirq(&gus->ad1848, gus->irq);
|
||||
#endif
|
||||
|
||||
gus->sb_nmi = val & 0x80;
|
||||
} else {
|
||||
gus->dma = gus_dmas[val & 7];
|
||||
|
||||
if (val & 0x40) {
|
||||
if (gus->dma == -1)
|
||||
gus->dma = gus->dma2 = gus_dmas[(val >> 3) & 7];
|
||||
else
|
||||
gus->dma2 = gus->dma;
|
||||
} else
|
||||
gus->dma2 = gus_dmas[(val >> 3) & 7];
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
ad1848_setdma(&gus->ad1848, gus->dma);
|
||||
if (gus->type == GUS_MAX)
|
||||
ad1848_setdma(&gus->ad1848, gus->dma2);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
@@ -655,20 +670,24 @@ writegus(uint16_t addr, uint8_t val, void *priv)
|
||||
break;
|
||||
case 0x306:
|
||||
case 0x706:
|
||||
if (gus->dma >= 4)
|
||||
val |= 0x30;
|
||||
gus->max_ctrl = (val >> 6) & 1;
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
if (val & 0x40) {
|
||||
if ((val & 0xF) != ((addr >> 4) & 0xF)) {
|
||||
csioport = 0x30c | ((addr >> 4) & 0xf);
|
||||
io_removehandler(csioport, 4,
|
||||
ad1848_read, NULL, NULL,
|
||||
ad1848_write, NULL, NULL, &gus->ad1848);
|
||||
csioport = 0x30c | ((val & 0xf) << 4);
|
||||
io_sethandler(csioport, 4,
|
||||
ad1848_read, NULL, NULL,
|
||||
ad1848_write, NULL, NULL, &gus->ad1848);
|
||||
if (gus->type == GUS_MAX) {
|
||||
if (gus->dma >= 4)
|
||||
val |= 0x10;
|
||||
if (gus->dma2 >= 4)
|
||||
val |= 0x20;
|
||||
gus->max_ctrl = (val >> 6) & 1;
|
||||
if (val & 0x40) {
|
||||
if ((val & 0xF) != ((addr >> 4) & 0xF)) {
|
||||
csioport = 0x30c | ((addr >> 4) & 0xf);
|
||||
io_removehandler(csioport, 4,
|
||||
ad1848_read, NULL, NULL,
|
||||
ad1848_write, NULL, NULL, &gus->ad1848);
|
||||
csioport = 0x30c | ((val & 0xf) << 4);
|
||||
io_sethandler(csioport, 4,
|
||||
ad1848_read, NULL, NULL,
|
||||
ad1848_write, NULL, NULL, &gus->ad1848);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -723,9 +742,11 @@ readgus(uint16_t addr, void *priv)
|
||||
return val;
|
||||
|
||||
case 0x20F:
|
||||
if (gus->max_ctrl)
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
if (gus->type == GUS_MAX)
|
||||
val = 0x02;
|
||||
else
|
||||
#endif
|
||||
val = 0x00;
|
||||
break;
|
||||
|
||||
@@ -844,9 +865,11 @@ readgus(uint16_t addr, void *priv)
|
||||
break;
|
||||
case 0x306:
|
||||
case 0x706:
|
||||
if (gus->max_ctrl)
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
if (gus->type == GUS_MAX)
|
||||
val = 0x0a; /* GUS MAX */
|
||||
else
|
||||
#endif
|
||||
val = 0xff; /*Pre 3.7 - no mixer*/
|
||||
break;
|
||||
|
||||
@@ -1128,21 +1151,21 @@ gus_get_buffer(int32_t *buffer, int len, void *priv)
|
||||
gus_t *gus = (gus_t *) priv;
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
if (gus->max_ctrl)
|
||||
if ((gus->type == GUS_MAX) && (gus->max_ctrl))
|
||||
ad1848_update(&gus->ad1848);
|
||||
#endif
|
||||
gus_update(gus);
|
||||
|
||||
for (int c = 0; c < len * 2; c++) {
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
if (gus->max_ctrl)
|
||||
if ((gus->type == GUS_MAX) && (gus->max_ctrl))
|
||||
buffer[c] += (int32_t) (gus->ad1848.buffer[c] / 2);
|
||||
#endif
|
||||
buffer[c] += (int32_t) gus->buffer[c & 1][c >> 1];
|
||||
}
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
if (gus->max_ctrl)
|
||||
if ((gus->type == GUS_MAX) && (gus->max_ctrl))
|
||||
gus->ad1848.pos = 0;
|
||||
#endif
|
||||
gus->pos = 0;
|
||||
@@ -1277,7 +1300,9 @@ gus_reset(void *priv)
|
||||
|
||||
gus->usrr = 0;
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
gus->max_ctrl = 0;
|
||||
#endif
|
||||
|
||||
gus->irq_state = 0;
|
||||
gus->midi_irq_state = 0;
|
||||
@@ -1317,6 +1342,8 @@ gus_init(UNUSED(const device_t *info))
|
||||
|
||||
gus->uart_out = 1;
|
||||
|
||||
gus->type = device_get_config_int("type");
|
||||
|
||||
gus->base = device_get_config_hex16("base");
|
||||
|
||||
io_sethandler(gus->base, 0x0010, readgus, NULL, NULL, writegus, NULL, NULL, gus);
|
||||
@@ -1325,11 +1352,13 @@ gus_init(UNUSED(const device_t *info))
|
||||
io_sethandler(0x0388, 0x0002, readgus, NULL, NULL, writegus, NULL, NULL, gus);
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
ad1848_init(&gus->ad1848, AD1848_TYPE_CS4231);
|
||||
ad1848_setirq(&gus->ad1848, 5);
|
||||
ad1848_setdma(&gus->ad1848, 3);
|
||||
io_sethandler(0x10C + gus->base, 4,
|
||||
ad1848_read, NULL, NULL, ad1848_write, NULL, NULL, &gus->ad1848);
|
||||
if (gus->type == GUS_MAX) {
|
||||
ad1848_init(&gus->ad1848, AD1848_TYPE_CS4231);
|
||||
ad1848_setirq(&gus->ad1848, 5);
|
||||
ad1848_setdma(&gus->ad1848, 3);
|
||||
io_sethandler(0x10C + gus->base, 4,
|
||||
ad1848_read, NULL, NULL, ad1848_write, NULL, NULL, &gus->ad1848);
|
||||
}
|
||||
#endif
|
||||
|
||||
timer_add(&gus->samp_timer, gus_poll_wave, gus, 1);
|
||||
@@ -1364,7 +1393,7 @@ gus_speed_changed(void *priv)
|
||||
gus->samp_latch = (uint64_t) (TIMER_USEC * (1000000.0 / gusfreqs[gus->voices - 14]));
|
||||
|
||||
#if defined(DEV_BRANCH) && defined(USE_GUSMAX)
|
||||
if (gus->max_ctrl)
|
||||
if ((gus->type == GUS_MAX) && (gus->max_ctrl))
|
||||
ad1848_speed_changed(&gus->ad1848);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1461,7 +1461,7 @@ sb_16_pnp_config_changed(uint8_t ld, isapnp_device_config_t *config, void *priv)
|
||||
break;
|
||||
|
||||
case 1: /* IDE */
|
||||
ide_pnp_config_changed(0, config, (void *) 2);
|
||||
ide_pnp_config_changed(0, config, (void *) 3);
|
||||
break;
|
||||
|
||||
case 2: /* Reserved (16) / WaveTable (32+) */
|
||||
@@ -2033,7 +2033,7 @@ sb_16_pnp_init(UNUSED(const device_t *info))
|
||||
|
||||
sb->gameport = gameport_add(&gameport_pnp_device);
|
||||
|
||||
device_add(&ide_ter_pnp_device);
|
||||
device_add(&ide_qua_pnp_device);
|
||||
|
||||
isapnp_add_card(sb_16_pnp_rom, sizeof(sb_16_pnp_rom), sb_16_pnp_config_changed, NULL, NULL, NULL, sb);
|
||||
|
||||
@@ -2200,7 +2200,7 @@ sb_awe32_pnp_init(const device_t *info)
|
||||
sb->gameport = gameport_add(&gameport_pnp_device);
|
||||
|
||||
if ((info->local != 2) && (info->local != 3) && (info->local != 4))
|
||||
device_add(&ide_ter_pnp_device);
|
||||
device_add(&ide_qua_pnp_device);
|
||||
|
||||
const char *pnp_rom_file = NULL;
|
||||
switch (info->local) {
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
# After a successful build, you can install the RPMs as follows:
|
||||
# sudo dnf install RPMS/$(uname -m)/86Box-3* RPMS/noarch/86Box-roms*
|
||||
|
||||
%global romver 3.11
|
||||
%global romver 4.0
|
||||
|
||||
Name: 86Box
|
||||
Version: 4.0
|
||||
@@ -27,11 +27,14 @@ Source1: https://github.com/86Box/roms/archive/refs/tags/v%{romver}.zip
|
||||
BuildRequires: cmake
|
||||
BuildRequires: desktop-file-utils
|
||||
BuildRequires: extra-cmake-modules
|
||||
BuildRequires: fluidsynth-devel
|
||||
BuildRequires: freetype-devel
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libFAudio-devel
|
||||
BuildRequires: libappstream-glib
|
||||
BuildRequires: libatomic
|
||||
BuildRequires: libevdev-devel
|
||||
BuildRequires: libslirp-devel
|
||||
BuildRequires: libxkbcommon-x11-devel
|
||||
BuildRequires: libXi-devel
|
||||
BuildRequires: ninja-build
|
||||
@@ -118,5 +121,5 @@ popd
|
||||
%{_datadir}/%{name}/roms
|
||||
|
||||
%changelog
|
||||
* Tue Feb 28 2023 Robert de Rooy <robert.de.rooy[AT]gmail.com> 4.0-1
|
||||
* Sat Aug 26 2023 Robert de Rooy <robert.de.rooy[AT]gmail.com> 4.0-1
|
||||
- Bump release
|
||||
|
||||
@@ -149,7 +149,7 @@ plat_serpt_set_params(void *priv)
|
||||
BAUDRATE_RANGE(dev->baudrate, 57600, 115200, B57600);
|
||||
BAUDRATE_RANGE(dev->baudrate, 115200, 0xFFFFFFFF, B115200);
|
||||
|
||||
term_attr.c_cflag &= CSIZE;
|
||||
term_attr.c_cflag &= ~CSIZE;
|
||||
switch (dev->data_bits) {
|
||||
case 8:
|
||||
default:
|
||||
@@ -165,13 +165,13 @@ plat_serpt_set_params(void *priv)
|
||||
term_attr.c_cflag |= CS5;
|
||||
break;
|
||||
}
|
||||
term_attr.c_cflag &= CSTOPB;
|
||||
term_attr.c_cflag &= ~CSTOPB;
|
||||
if (dev->serial->lcr & 0x04)
|
||||
term_attr.c_cflag |= CSTOPB;
|
||||
#if !defined(__linux__)
|
||||
term_attr.c_cflag &= PARENB | PARODD;
|
||||
term_attr.c_cflag &= ~(PARENB | PARODD);
|
||||
#else
|
||||
term_attr.c_cflag &= PARENB | PARODD | CMSPAR;
|
||||
term_attr.c_cflag &= ~(PARENB | PARODD | CMSPAR);
|
||||
#endif
|
||||
if (dev->serial->lcr & 0x08) {
|
||||
term_attr.c_cflag |= PARENB;
|
||||
|
||||
@@ -144,13 +144,13 @@ ibm8514_log(const char *fmt, ...)
|
||||
dest_dat = MAX(src_dat, dest_dat); \
|
||||
break; \
|
||||
case 0x15: \
|
||||
dest_dat = (dest_dat - src_dat) / 2; \
|
||||
dest_dat = (dest_dat - src_dat) >> 1; \
|
||||
break; \
|
||||
case 0x16: \
|
||||
dest_dat = (src_dat - dest_dat) / 2; \
|
||||
dest_dat = (src_dat - dest_dat) >> 1; \
|
||||
break; \
|
||||
case 0x17: \
|
||||
dest_dat = (dest_dat + src_dat) / 2; \
|
||||
dest_dat = (dest_dat + src_dat) >> 1; \
|
||||
break; \
|
||||
case 0x18: \
|
||||
dest_dat = MAX(0, (dest_dat - src_dat)); \
|
||||
@@ -162,7 +162,7 @@ ibm8514_log(const char *fmt, ...)
|
||||
dest_dat = MAX(0, (src_dat - dest_dat)); \
|
||||
break; \
|
||||
case 0x1b: \
|
||||
dest_dat = MIN(0xff, (dest_dat + src_dat)); \
|
||||
dest_dat = MIN(~0, (dest_dat + src_dat)); \
|
||||
break; \
|
||||
case 0x1c: \
|
||||
dest_dat = MAX(0, (dest_dat - src_dat)) / 2; \
|
||||
@@ -174,7 +174,7 @@ ibm8514_log(const char *fmt, ...)
|
||||
dest_dat = MAX(0, (src_dat - dest_dat)) / 2; \
|
||||
break; \
|
||||
case 0x1f: \
|
||||
dest_dat = (0xff < (src_dat + dest_dat)) ? 0xff : ((src_dat + dest_dat) / 2); \
|
||||
dest_dat = (~0 < (src_dat + dest_dat)) ? ~0 : ((src_dat + dest_dat) >> 1); \
|
||||
break; \
|
||||
} \
|
||||
}
|
||||
@@ -1297,7 +1297,7 @@ ibm8514_accel_start(int count, int cpu_input, uint32_t mix_dat, uint32_t cpu_dat
|
||||
/*Bit 4 of the Command register is the draw yes bit, which enables writing to memory/reading from memory when enabled.
|
||||
When this bit is disabled, no writing to memory/reading from memory is allowed. (This bit is almost meaningless on
|
||||
the NOP command)*/
|
||||
ibm8514_log("CMD8514: CMD=%d, full=%04x, pixcntl=%x, count=%d.\n", cmd, dev->accel.cmd, pixcntl, count);
|
||||
ibm8514_log("CMD8514: CMD=%d, full=%04x, pixcntl=%x, count=%d, frgdmix = %02x, bkgdmix = %02x, polygon=%x.\n", cmd, dev->accel.cmd, pixcntl, count, frgd_mix, bkgd_mix, dev->accel.multifunc[0x0a] & 6);
|
||||
|
||||
switch (cmd) {
|
||||
case 0: /*NOP (Short Stroke Vectors)*/
|
||||
@@ -3057,13 +3057,39 @@ rect_fill:
|
||||
old_dest_dat = dest_dat;
|
||||
MIX(mix_dat & mix_mask, dest_dat, src_dat);
|
||||
dest_dat = (dest_dat & wrt_mask) | (old_dest_dat & ~wrt_mask);
|
||||
if ((dev->accel.cmd & 4) && (dev->accel.sy < dev->accel.maj_axis_pcnt)) {
|
||||
if (!dev->accel.sy) {
|
||||
WRITE((dev->accel.cy * dev->pitch) + (dev->accel.cx), dest_dat);
|
||||
} else if ((dev->accel.cmd & 0x40) && dev->accel.sy && (dev->accel.cy == (dev->accel.oldcy + 1))) {
|
||||
WRITE((dev->accel.cy * dev->pitch) + (dev->accel.cx), dest_dat);
|
||||
} else if (!(dev->accel.cmd & 0x40) && dev->accel.sy && (dev->accel.err_term >= 0) && (dev->accel.cy == (dev->accel.oldcy + 1))) {
|
||||
if (dev->accel.cmd & 4) {
|
||||
if (dev->accel.sy < dev->accel.maj_axis_pcnt) {
|
||||
if (dev->accel.cmd & 0x40) {
|
||||
WRITE((dev->accel.cy * dev->pitch) + (dev->accel.cx), dest_dat);
|
||||
} else {
|
||||
if (dev->accel.cy == (dev->accel.oldcy + 1)) {
|
||||
if (dev->accel.cmd & 0x20) {
|
||||
if (dev->accel.err_term < (dev->accel.destx_distp + dev->accel.desty_axstp)) {
|
||||
WRITE((dev->accel.cy * dev->pitch) + (dev->accel.cx), dest_dat);
|
||||
}
|
||||
} else {
|
||||
if (dev->accel.err_term >= 0) {
|
||||
WRITE((dev->accel.cy * dev->pitch) + (dev->accel.cx), dest_dat);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (dev->accel.cmd & 0x40) {
|
||||
WRITE((dev->accel.cy * dev->pitch) + (dev->accel.cx), dest_dat);
|
||||
} else {
|
||||
if (dev->accel.cy == (dev->accel.oldcy + 1)) {
|
||||
if (dev->accel.cmd & 0x20) {
|
||||
if (dev->accel.err_term < (dev->accel.destx_distp + dev->accel.desty_axstp)) {
|
||||
WRITE((dev->accel.cy * dev->pitch) + (dev->accel.cx), dest_dat);
|
||||
}
|
||||
} else {
|
||||
if (dev->accel.err_term >= 0) {
|
||||
WRITE((dev->accel.cy * dev->pitch) + (dev->accel.cx), dest_dat);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3080,7 +3106,42 @@ rect_fill:
|
||||
break;
|
||||
}
|
||||
|
||||
if (dev->accel.err_term >= dev->accel.maj_axis_pcnt) {
|
||||
/*Step major axis*/
|
||||
switch (dev->accel.cmd & 0xe0) {
|
||||
case 0x00:
|
||||
dev->accel.cx--;
|
||||
break;
|
||||
case 0x20:
|
||||
dev->accel.cx++;
|
||||
break;
|
||||
case 0x40:
|
||||
dev->accel.oldcy = dev->accel.cy;
|
||||
dev->accel.cy--;
|
||||
break;
|
||||
case 0x60:
|
||||
dev->accel.oldcy = dev->accel.cy;
|
||||
dev->accel.cy--;
|
||||
break;
|
||||
case 0x80:
|
||||
dev->accel.cx--;
|
||||
break;
|
||||
case 0xa0:
|
||||
dev->accel.cx++;
|
||||
break;
|
||||
case 0xc0:
|
||||
dev->accel.oldcy = dev->accel.cy;
|
||||
dev->accel.cy++;
|
||||
break;
|
||||
case 0xe0:
|
||||
dev->accel.oldcy = dev->accel.cy;
|
||||
dev->accel.cy++;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (dev->accel.err_term >= 0) {
|
||||
dev->accel.err_term += dev->accel.destx_distp;
|
||||
/*Step minor axis*/
|
||||
switch (dev->accel.cmd & 0xe0) {
|
||||
@@ -3119,41 +3180,6 @@ rect_fill:
|
||||
} else
|
||||
dev->accel.err_term += dev->accel.desty_axstp;
|
||||
|
||||
/*Step major axis*/
|
||||
switch (dev->accel.cmd & 0xe0) {
|
||||
case 0x00:
|
||||
dev->accel.cx--;
|
||||
break;
|
||||
case 0x20:
|
||||
dev->accel.cx++;
|
||||
break;
|
||||
case 0x40:
|
||||
dev->accel.oldcy = dev->accel.cy;
|
||||
dev->accel.cy--;
|
||||
break;
|
||||
case 0x60:
|
||||
dev->accel.oldcy = dev->accel.cy;
|
||||
dev->accel.cy--;
|
||||
break;
|
||||
case 0x80:
|
||||
dev->accel.cx--;
|
||||
break;
|
||||
case 0xa0:
|
||||
dev->accel.cx++;
|
||||
break;
|
||||
case 0xc0:
|
||||
dev->accel.oldcy = dev->accel.cy;
|
||||
dev->accel.cy++;
|
||||
break;
|
||||
case 0xe0:
|
||||
dev->accel.oldcy = dev->accel.cy;
|
||||
dev->accel.cy++;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
dev->accel.sy++;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -99,6 +99,7 @@ typedef struct mach_t {
|
||||
uint8_t bank_w;
|
||||
uint8_t bank_r;
|
||||
uint16_t shadow_set;
|
||||
int ext_on;
|
||||
|
||||
struct {
|
||||
uint8_t line_idx;
|
||||
@@ -2599,7 +2600,6 @@ mach_recalctimings(svga_t *svga)
|
||||
|
||||
if (dev->on) {
|
||||
mach_log("8514/A ON.\n");
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen);
|
||||
if (dev->local >= 2) {
|
||||
dev->h_disp = (dev->hdisp + 1) << 3;
|
||||
dev->h_total = (dev->htotal + 1);
|
||||
@@ -2614,6 +2614,9 @@ mach_recalctimings(svga_t *svga)
|
||||
if (dev->dispend == 598)
|
||||
dev->dispend += 2;
|
||||
|
||||
if (dev->h_disp == 1024)
|
||||
dev->accel.advfunc_cntl |= 4; /*Bit 2 means high resolution e.g.: 1024x768*/
|
||||
|
||||
if (dev->accel.advfunc_cntl & 4) {
|
||||
if (mach->shadow_set & 2) {
|
||||
if (dev->h_disp == 8) {
|
||||
@@ -2622,14 +2625,20 @@ mach_recalctimings(svga_t *svga)
|
||||
dev->v_total = 1536;
|
||||
dev->v_syncstart = 1536;
|
||||
}
|
||||
}
|
||||
mach_log("Shadow set 2.\n");
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / 44900000.0;
|
||||
} else
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen);
|
||||
} else {
|
||||
if (mach->shadow_set & 1) {
|
||||
if (dev->h_disp == 1024) {
|
||||
dev->h_disp = 640;
|
||||
dev->dispend = 480;
|
||||
}
|
||||
if (dev->h_disp == 1024) {
|
||||
dev->h_disp = 640;
|
||||
dev->dispend = 480;
|
||||
}
|
||||
if (mach->shadow_set & 1) {
|
||||
mach_log("Shadow set 1.\n");
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / 25175000.0;
|
||||
} else
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen);
|
||||
}
|
||||
|
||||
if (dev->interlace) {
|
||||
@@ -2721,14 +2730,18 @@ mach_recalctimings(svga_t *svga)
|
||||
dev->v_total = 1536;
|
||||
dev->v_syncstart = 1536;
|
||||
}
|
||||
}
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / 44900000.0;
|
||||
} else
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen);
|
||||
} else {
|
||||
if (mach->shadow_set & 1) {
|
||||
if (dev->h_disp == 1024) {
|
||||
dev->h_disp = 640;
|
||||
dev->dispend = 480;
|
||||
}
|
||||
if (dev->h_disp == 1024) {
|
||||
dev->h_disp = 640;
|
||||
dev->dispend = 480;
|
||||
}
|
||||
if (mach->shadow_set & 1) {
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / 25175000.0;
|
||||
} else
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen);
|
||||
}
|
||||
if (dev->interlace) {
|
||||
dev->dispend >>= 1;
|
||||
@@ -2740,7 +2753,7 @@ mach_recalctimings(svga_t *svga)
|
||||
}
|
||||
dev->pitch = dev->ext_pitch;
|
||||
dev->rowoffset = dev->ext_crt_pitch;
|
||||
mach_log("hv(%d,%d), pitch=%d, rowoffset=%d, gextconfig=%03x.\n", dev->h_disp, dev->dispend, dev->pitch, dev->rowoffset, mach->accel.ext_ge_config & 0xcec0);
|
||||
mach_log("cntl=%d, hv(%d,%d), pitch=%d, rowoffset=%d, gextconfig=%03x.\n", dev->accel.advfunc_cntl & 4, dev->h_disp, dev->dispend, dev->pitch, dev->rowoffset, mach->accel.ext_ge_config & 0xcec0);
|
||||
svga->map8 = dev->pallook;
|
||||
svga->render8514 = ibm8514_render_8bpp;
|
||||
if (mach->regs[0xb8] & 0x40)
|
||||
@@ -2750,6 +2763,7 @@ mach_recalctimings(svga_t *svga)
|
||||
|
||||
if (!svga->scrblank && (svga->crtc[0x17] & 0x80) && svga->attr_palette_enable) {
|
||||
if (((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1))) {
|
||||
mach_log("VGA clock=%02x.\n", mach->regs[0xa7] & 0x80);
|
||||
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen);
|
||||
if (mach->regs[0xa7] & 0x80)
|
||||
svga->clock *= 3;
|
||||
@@ -3688,7 +3702,9 @@ mach_accel_out(uint16_t port, uint8_t val, mach_t *mach)
|
||||
} else {
|
||||
dev->on = (dev->accel.advfunc_cntl & 0x01);
|
||||
vga_on = !dev->on;
|
||||
mach_log("ATI 8514/A: (0x4ae8) val = %04x\n", val & 0x01);
|
||||
mach->ext_on = dev->on;
|
||||
mach_log("ATI 8514/A: (0x4ae9) val = %04x, ext = %d.\n", dev->accel.advfunc_cntl & 0x01, mach->ext_on);
|
||||
mach32_updatemapping(mach);
|
||||
}
|
||||
svga_recalctimings(svga);
|
||||
break;
|
||||
@@ -3777,6 +3793,7 @@ mach_accel_out(uint16_t port, uint8_t val, mach_t *mach)
|
||||
|
||||
case 0x36ee:
|
||||
case 0x36ef:
|
||||
mach_log("ATI 8514/A: (0x%04x) val = %04x.\n", port, val);
|
||||
WRITE8(port, mach->misc, val);
|
||||
mach->misc &= 0xfff0;
|
||||
break;
|
||||
@@ -3813,21 +3830,27 @@ mach_accel_out(uint16_t port, uint8_t val, mach_t *mach)
|
||||
case 0x4aef:
|
||||
WRITE8(port, mach->accel.clock_sel, val);
|
||||
if (port & 1) {
|
||||
mach_log("ATI 8514/A: (0x4aee) val = %04x\n", mach->accel.clock_sel & 0x01);
|
||||
dev->on = mach->accel.clock_sel & 0x01;
|
||||
vga_on = !dev->on;
|
||||
pclog("ATI 8514/A: (0x4aef) val = %04x, ext = %d.\n", mach->accel.clock_sel & 0x01, mach->ext_on);
|
||||
}
|
||||
svga_recalctimings(svga);
|
||||
break;
|
||||
|
||||
case 0x52ee:
|
||||
case 0x52ef:
|
||||
mach_log("ATI 8514/A: (0x%04x) val = %04x.\n", port, val);
|
||||
WRITE8(port, mach->accel.scratch0, val);
|
||||
if (port & 1)
|
||||
mach->ext_on = 1;
|
||||
break;
|
||||
|
||||
case 0x56ee:
|
||||
case 0x56ef:
|
||||
mach_log("ATI 8514/A: (0x%04x) val = %04x.\n", port, val);
|
||||
WRITE8(port, mach->accel.scratch1, val);
|
||||
if (port & 1)
|
||||
mach->ext_on = 1;
|
||||
break;
|
||||
|
||||
case 0x5aee:
|
||||
@@ -4744,13 +4767,8 @@ mach32_write_linear(uint32_t addr, uint8_t val, void *priv)
|
||||
static void
|
||||
mach32_write(uint32_t addr, uint8_t val, void *priv)
|
||||
{
|
||||
svga_t *svga = (svga_t *) priv;
|
||||
const ibm8514_t *dev = &svga->dev8514;
|
||||
|
||||
if (!dev->on) {
|
||||
svga_write(addr, val, svga);
|
||||
return;
|
||||
}
|
||||
mach_t *mach = (mach_t *) priv;
|
||||
svga_t *svga = &mach->svga;
|
||||
|
||||
addr = (addr & svga->banked_mask) + svga->write_bank;
|
||||
mach32_write_linear(addr, val, svga);
|
||||
@@ -4759,33 +4777,25 @@ mach32_write(uint32_t addr, uint8_t val, void *priv)
|
||||
static void
|
||||
mach32_writew(uint32_t addr, uint16_t val, void *priv)
|
||||
{
|
||||
svga_t *svga = (svga_t *) priv;
|
||||
const ibm8514_t *dev = &svga->dev8514;
|
||||
mach_t *mach = (mach_t *) priv;
|
||||
svga_t *svga = &mach->svga;
|
||||
|
||||
if (!dev->on) {
|
||||
svga_writew(addr, val, svga);
|
||||
return;
|
||||
}
|
||||
|
||||
mach32_write(addr, val & 0xff, svga);
|
||||
mach32_write(addr + 1, val >> 8, svga);
|
||||
addr = (addr & svga->banked_mask) + svga->write_bank;
|
||||
mach32_write_linear(addr, val & 0xff, svga);
|
||||
mach32_write_linear(addr + 1, val >> 8, svga);
|
||||
}
|
||||
|
||||
static void
|
||||
mach32_writel(uint32_t addr, uint32_t val, void *priv)
|
||||
{
|
||||
svga_t *svga = (svga_t *) priv;
|
||||
const ibm8514_t *dev = &svga->dev8514;
|
||||
mach_t *mach = (mach_t *) priv;
|
||||
svga_t *svga = &mach->svga;
|
||||
|
||||
if (!dev->on) {
|
||||
svga_writel(addr, val, svga);
|
||||
return;
|
||||
}
|
||||
|
||||
mach32_write(addr, val & 0xff, svga);
|
||||
mach32_write(addr + 1, val >> 8, svga);
|
||||
mach32_write(addr + 2, val >> 16, svga);
|
||||
mach32_write(addr + 3, val >> 24, svga);
|
||||
addr = (addr & svga->banked_mask) + svga->write_bank;
|
||||
mach32_write_linear(addr, val & 0xff, svga);
|
||||
mach32_write_linear(addr + 1, val >> 8, svga);
|
||||
mach32_write_linear(addr + 2, val >> 16, svga);
|
||||
mach32_write_linear(addr + 3, val >> 24, svga);
|
||||
}
|
||||
|
||||
static uint8_t
|
||||
@@ -4872,15 +4882,10 @@ mach32_read_linear(uint32_t addr, void *priv)
|
||||
static uint8_t
|
||||
mach32_read(uint32_t addr, void *priv)
|
||||
{
|
||||
svga_t *svga = (svga_t *) priv;
|
||||
const ibm8514_t *dev = &svga->dev8514;
|
||||
mach_t *mach = (mach_t *) priv;
|
||||
svga_t *svga = &mach->svga;
|
||||
uint8_t ret;
|
||||
|
||||
if (!dev->on) {
|
||||
ret = svga_read(addr, svga);
|
||||
return ret;
|
||||
}
|
||||
|
||||
addr = (addr & svga->banked_mask) + svga->read_bank;
|
||||
ret = mach32_read_linear(addr, svga);
|
||||
return ret;
|
||||
@@ -4889,36 +4894,28 @@ mach32_read(uint32_t addr, void *priv)
|
||||
static uint16_t
|
||||
mach32_readw(uint32_t addr, void *priv)
|
||||
{
|
||||
svga_t *svga = (svga_t *) priv;
|
||||
const ibm8514_t *dev = &svga->dev8514;
|
||||
mach_t *mach = (mach_t *) priv;
|
||||
svga_t *svga = &mach->svga;
|
||||
uint16_t ret;
|
||||
|
||||
if (!dev->on) {
|
||||
ret = svga_readw(addr, svga);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = mach32_read(addr, svga);
|
||||
ret |= (mach32_read(addr + 1, svga) << 8);
|
||||
addr = (addr & svga->banked_mask) + svga->read_bank;
|
||||
ret = mach32_read_linear(addr, svga);
|
||||
ret |= (mach32_read_linear(addr + 1, svga) << 8);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
mach32_readl(uint32_t addr, void *priv)
|
||||
{
|
||||
svga_t *svga = (svga_t *) priv;
|
||||
const ibm8514_t *dev = &svga->dev8514;
|
||||
mach_t *mach = (mach_t *) priv;
|
||||
svga_t *svga = &mach->svga;
|
||||
uint32_t ret;
|
||||
|
||||
if (!dev->on) {
|
||||
ret = svga_readl(addr, svga);
|
||||
return ret;
|
||||
}
|
||||
|
||||
ret = mach32_read(addr, svga);
|
||||
ret |= (mach32_read(addr + 1, svga) << 8);
|
||||
ret |= (mach32_read(addr + 2, svga) << 16);
|
||||
ret |= (mach32_read(addr + 3, svga) << 24);
|
||||
addr = (addr & svga->banked_mask) + svga->read_bank;
|
||||
ret = mach32_read_linear(addr, svga);
|
||||
ret |= (mach32_read_linear(addr + 1, svga) << 8);
|
||||
ret |= (mach32_read_linear(addr + 2, svga) << 16);
|
||||
ret |= (mach32_read_linear(addr + 3, svga) << 24);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -4986,7 +4983,7 @@ mach32_ap_writel(uint32_t addr, uint32_t val, void *priv)
|
||||
mach_accel_outw(0x02e8 + (port_dword << 8) + 4, val >> 16, mach);
|
||||
}
|
||||
} else {
|
||||
mach_log("Linear WORDL Write=%08x, val=%08x, mode=%d, rop=%02x.\n", addr, val, mach->svga.writemode, mach->svga.gdcreg[3] & 0x18);
|
||||
mach_log("Linear WORDL Write=%08x.\n", addr);
|
||||
mach32_write_linear(addr, val & 0xff, svga);
|
||||
mach32_write_linear(addr + 1, val >> 8, svga);
|
||||
mach32_write_linear(addr + 2, val >> 16, svga);
|
||||
@@ -5069,6 +5066,7 @@ static void
|
||||
mach32_updatemapping(mach_t *mach)
|
||||
{
|
||||
svga_t *svga = &mach->svga;
|
||||
ibm8514_t *dev = &svga->dev8514;
|
||||
|
||||
if (mach->pci_bus && (!(mach->pci_regs[PCI_REG_COMMAND] & PCI_COMMAND_MEM))) {
|
||||
mem_mapping_disable(&svga->mapping);
|
||||
@@ -5118,6 +5116,13 @@ mach32_updatemapping(mach_t *mach)
|
||||
mach->ap_size = 4;
|
||||
mem_mapping_disable(&mach->mmio_linear_mapping);
|
||||
}
|
||||
if (mach->ext_on && (dev->local >= 2)) {
|
||||
mem_mapping_set_handler(&svga->mapping, mach32_read, mach32_readw, mach32_readl, mach32_write, mach32_writew, mach32_writel);
|
||||
mem_mapping_set_p(&svga->mapping, mach);
|
||||
} else {
|
||||
mem_mapping_set_handler(&svga->mapping, svga_read, svga_readw, svga_readl, svga_write, svga_writew, svga_writel);
|
||||
mem_mapping_set_p(&svga->mapping, svga);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -5692,7 +5697,6 @@ mach8_init(const device_t *info)
|
||||
mach->config1 |= 0x0400;
|
||||
svga->clock_gen = device_add(&ati18811_0_device);
|
||||
}
|
||||
mem_mapping_set_handler(&svga->mapping, mach32_read, mach32_readw, mach32_readl, mach32_write, mach32_writew, mach32_writel);
|
||||
mem_mapping_add(&mach->mmio_linear_mapping, 0, 0, mach32_ap_readb, mach32_ap_readw, mach32_ap_readl, mach32_ap_writeb, mach32_ap_writew, mach32_ap_writel, NULL, MEM_MAPPING_EXTERNAL, mach);
|
||||
mem_mapping_disable(&mach->mmio_linear_mapping);
|
||||
} else {
|
||||
|
||||
@@ -1739,6 +1739,10 @@ gd54xx_recalctimings(svga_t *svga)
|
||||
|
||||
svga->interlace = (svga->crtc[0x1a] & 0x01);
|
||||
|
||||
if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /*Text mode*/
|
||||
svga->interlace = 0;
|
||||
}
|
||||
|
||||
svga->map8 = svga->pallook;
|
||||
if (svga->seqregs[7] & CIRRUS_SR7_BPP_SVGA) {
|
||||
if (linedbl)
|
||||
@@ -1921,6 +1925,13 @@ gd54xx_recalctimings(svga_t *svga)
|
||||
}
|
||||
|
||||
svga->vram_display_mask = (svga->crtc[0x1b] & 2) ? gd54xx->vram_mask : 0x3ffff;
|
||||
|
||||
if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /*Text mode*/
|
||||
if (svga->seqregs[1] & 8) {
|
||||
svga->render = svga_render_text_40;
|
||||
} else
|
||||
svga->render = svga_render_text_80;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -1085,7 +1085,7 @@ im1024_speed_changed(void *priv)
|
||||
const device_t im1024_device = {
|
||||
.name = "ImageManager 1024",
|
||||
.internal_name = "im1024",
|
||||
.flags = DEVICE_ISA | DEVICE_AT,
|
||||
.flags = DEVICE_ISA,
|
||||
.local = 0,
|
||||
.init = im1024_init,
|
||||
.close = im1024_close,
|
||||
|
||||
@@ -341,23 +341,44 @@ paradise_recalctimings(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /*Text mode*/
|
||||
svga->interlace = 0;
|
||||
}
|
||||
|
||||
if (paradise->type < WD90C30) {
|
||||
if (svga->bpp >= 8 && !svga->lowres) {
|
||||
if ((svga->bpp >= 8) && !svga->lowres) {
|
||||
svga->render = svga_render_8bpp_highres;
|
||||
}
|
||||
} else {
|
||||
if (svga->bpp >= 8 && !svga->lowres) {
|
||||
if ((svga->bpp >= 8) && !svga->lowres) {
|
||||
if (svga->bpp == 16) {
|
||||
svga->render = svga_render_16bpp_highres;
|
||||
svga->hdisp >>= 1;
|
||||
if (svga->hdisp == 788)
|
||||
svga->hdisp += 12;
|
||||
if (svga->hdisp == 800)
|
||||
svga->ma_latch -= 3;
|
||||
} else if (svga->bpp == 15) {
|
||||
svga->render = svga_render_15bpp_highres;
|
||||
svga->hdisp >>= 1;
|
||||
if (svga->hdisp == 788)
|
||||
svga->hdisp += 12;
|
||||
if (svga->hdisp == 800)
|
||||
svga->ma_latch -= 3;
|
||||
} else {
|
||||
svga->render = svga_render_8bpp_highres;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!(svga->gdcreg[6] & 1) && !(svga->attrregs[0x10] & 1)) { /*Text mode*/
|
||||
if (svga->hdisp == 360)
|
||||
svga->hdisp <<= 1;
|
||||
if (svga->seqregs[1] & 8) {
|
||||
svga->render = svga_render_text_40;
|
||||
} else
|
||||
svga->render = svga_render_text_80;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
||||
@@ -830,7 +830,7 @@ svga_poll(void *priv)
|
||||
return;
|
||||
}
|
||||
if (xga_active && xga->on) {
|
||||
if ((xga->disp_cntl_2 & 7) >= 3) {
|
||||
if ((xga->disp_cntl_2 & 7) >= 2) {
|
||||
xga_poll(xga, svga);
|
||||
return;
|
||||
}
|
||||
@@ -1247,11 +1247,12 @@ svga_write_common(uint32_t addr, uint8_t val, uint8_t linear, void *priv)
|
||||
if (((xga->op_mode & 7) >= 4) && (xga->aperture_cntl >= 1)) {
|
||||
if (val == 0xa5) { /*Memory size test of XGA*/
|
||||
xga->test = val;
|
||||
xga->a5_test = 1;
|
||||
if (addr == 0xa0001)
|
||||
xga->a5_test = 1;
|
||||
|
||||
xga->on = 0;
|
||||
vga_on = 1;
|
||||
xga->disp_cntl_2 = 0;
|
||||
xga->clk_sel_1 = 0;
|
||||
svga_log("XGA test1 addr = %05x.\n", addr);
|
||||
return;
|
||||
} else if (val == 0x5a) {
|
||||
@@ -1259,7 +1260,7 @@ svga_write_common(uint32_t addr, uint8_t val, uint8_t linear, void *priv)
|
||||
xga->on = 0;
|
||||
vga_on = 1;
|
||||
xga->disp_cntl_2 = 0;
|
||||
xga->clk_sel_1 = 0;
|
||||
svga_log("XGA test2 addr = %05x.\n", addr);
|
||||
return;
|
||||
} else if ((addr == 0xa0000) || (addr == 0xa0010)) {
|
||||
addr += xga->write_bank;
|
||||
@@ -1469,6 +1470,7 @@ svga_read_common(uint32_t addr, uint8_t linear, void *priv)
|
||||
xga->on = 1;
|
||||
vga_on = 0;
|
||||
} else if ((addr == 0xa0000) && xga->a5_test) { /*This is required by XGAKIT to pass the memory test*/
|
||||
svga_log("A5 test bank = %x.\n", addr);
|
||||
addr += xga->read_bank;
|
||||
ret = xga->vram[addr & xga->vram_mask];
|
||||
} else {
|
||||
@@ -1476,7 +1478,7 @@ svga_read_common(uint32_t addr, uint8_t linear, void *priv)
|
||||
xga->on = 1;
|
||||
vga_on = 0;
|
||||
}
|
||||
svga_log("A5 read: XGA ON = %d, addr = %05x.\n", xga->on, addr);
|
||||
svga_log("A5 read: XGA ON = %d, addr = %05x, ret = %02x, test1 = %x.\n", xga->on, addr, ret, xga->a5_test);
|
||||
return ret;
|
||||
} else if (xga->test == 0x5a) {
|
||||
ret = xga->test;
|
||||
|
||||
@@ -1399,6 +1399,7 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
uint32_t trans_col = (tgui->accel.flags & TGUI_TRANSREV) ? tgui->accel.fg_col : tgui->accel.bg_col;
|
||||
uint16_t *vram_w = (uint16_t *) svga->vram;
|
||||
uint32_t *vram_l = (uint32_t *) svga->vram;
|
||||
uint8_t ger22upper = (tgui->accel.ger22 >> 8);
|
||||
|
||||
if (tgui->accel.bpp == 0) {
|
||||
trans_col &= 0xff;
|
||||
@@ -1454,6 +1455,16 @@ tgui_accel_command(int count, uint32_t cpu_dat, tgui_t *tgui)
|
||||
}
|
||||
}
|
||||
|
||||
/*For delayed mode switches.*/
|
||||
if (tgui->type == TGUI_9440) {
|
||||
if (tgui->accel.pitch == 800)
|
||||
tgui->accel.pitch += 32;
|
||||
|
||||
if (tgui->accel.bpp == 1) {
|
||||
if (!ger22upper)
|
||||
tgui->accel.pitch = svga->rowoffset << 2;
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
pclog("TGUI accel command = %x, ger22 = %04x, hdisp = %d, dispend = %d, vtotal = %d, rowoffset = %d, svgabpp = %d, interlace = %d, accelbpp = %d, pitch = %d.\n", tgui->accel.command, tgui->accel.ger22, svga->hdisp, svga->dispend, svga->vtotal, svga->rowoffset, svga->bpp, svga->interlace, tgui->accel.bpp, tgui->accel.pitch);
|
||||
#endif
|
||||
@@ -2066,6 +2077,19 @@ tgui_accel_out(uint16_t addr, uint8_t val, void *priv)
|
||||
|
||||
case 0x2123:
|
||||
//pclog("Pitch IO23: val = %02x, rowoffset = %x, pitch = %d.\n", val, svga->rowoffset, tgui->accel.pitch);
|
||||
switch (svga->bpp) {
|
||||
case 8:
|
||||
case 24:
|
||||
tgui->accel.bpp = 0;
|
||||
break;
|
||||
case 15:
|
||||
case 16:
|
||||
tgui->accel.bpp = 1;
|
||||
break;
|
||||
case 32:
|
||||
tgui->accel.bpp = 3;
|
||||
break;
|
||||
}
|
||||
tgui->accel.ger22 = (tgui->accel.ger22 & 0xff) | (val << 8);
|
||||
if ((val & 0x80) || ((val & 0xc0) == 0x40))
|
||||
tgui->accel.pitch = svga->rowoffset << 3;
|
||||
@@ -2075,15 +2099,14 @@ tgui_accel_out(uint16_t addr, uint8_t val, void *priv)
|
||||
tgui->accel.pitch = 1024;
|
||||
}
|
||||
|
||||
if (tgui->accel.pitch == 800)
|
||||
tgui->accel.pitch += 32;
|
||||
|
||||
if (tgui->accel.bpp == 1)
|
||||
tgui->accel.pitch >>= 1;
|
||||
else if (tgui->accel.bpp == 3)
|
||||
tgui->accel.pitch >>= 2;
|
||||
|
||||
|
||||
if (tgui->accel.pitch == 800)
|
||||
tgui->accel.pitch += 32;
|
||||
|
||||
svga_recalctimings(svga);
|
||||
break;
|
||||
|
||||
@@ -2722,7 +2745,19 @@ tgui_accel_write(uint32_t addr, uint8_t val, void *priv)
|
||||
break;
|
||||
|
||||
case 0x23:
|
||||
//pclog("Pitch MM23: val = %02x, rowoffset = %x, pitch = %d.\n", val, svga->rowoffset, tgui->accel.pitch);
|
||||
switch (svga->bpp) {
|
||||
case 8:
|
||||
case 24:
|
||||
tgui->accel.bpp = 0;
|
||||
break;
|
||||
case 15:
|
||||
case 16:
|
||||
tgui->accel.bpp = 1;
|
||||
break;
|
||||
case 32:
|
||||
tgui->accel.bpp = 3;
|
||||
break;
|
||||
}
|
||||
tgui->accel.ger22 = (tgui->accel.ger22 & 0xff) | (val << 8);
|
||||
if ((val & 0x80) || ((val & 0xc0) == 0x40))
|
||||
tgui->accel.pitch = svga->rowoffset << 3;
|
||||
@@ -2732,14 +2767,15 @@ tgui_accel_write(uint32_t addr, uint8_t val, void *priv)
|
||||
tgui->accel.pitch = 1024;
|
||||
}
|
||||
|
||||
if (tgui->accel.pitch == 800)
|
||||
tgui->accel.pitch += 32;
|
||||
|
||||
if (tgui->accel.bpp == 1)
|
||||
tgui->accel.pitch >>= 1;
|
||||
else if (tgui->accel.bpp == 3)
|
||||
tgui->accel.pitch >>= 2;
|
||||
|
||||
if (tgui->accel.pitch == 800)
|
||||
tgui->accel.pitch += 32;
|
||||
|
||||
//pclog("Pitch MM23: fullval = %04x, rowoffset = %x, pitch = %d.\n", tgui->accel.ger22, svga->rowoffset, tgui->accel.pitch);
|
||||
svga_recalctimings(svga);
|
||||
break;
|
||||
|
||||
|
||||
@@ -49,6 +49,7 @@ static uint8_t xga_ext_inb(uint16_t addr, void *priv);
|
||||
static void xga_writew(uint32_t addr, uint16_t val, void *priv);
|
||||
static uint16_t xga_readw(uint32_t addr, void *priv);
|
||||
|
||||
static void xga_render_4bpp(svga_t *svga);
|
||||
static void xga_render_8bpp(svga_t *svga);
|
||||
static void xga_render_16bpp(svga_t *svga);
|
||||
|
||||
@@ -376,7 +377,7 @@ xga_ext_out_reg(xga_t *xga, svga_t *svga, uint8_t idx, uint8_t val)
|
||||
case 0x51:
|
||||
xga_log("Reg51 write = %02x.\n", val);
|
||||
xga->disp_cntl_2 = val;
|
||||
xga->on = ((val & 7) >= 3);
|
||||
xga->on = ((val & 7) >= 2);
|
||||
vga_on = !xga->on;
|
||||
svga_recalctimings(svga);
|
||||
break;
|
||||
@@ -406,7 +407,7 @@ xga_ext_out_reg(xga_t *xga, svga_t *svga, uint8_t idx, uint8_t val)
|
||||
if ((xga->sprite_pos >= 0) && (xga->sprite_pos <= 16)) {
|
||||
if ((xga->op_mode & 7) >= 5)
|
||||
xga->cursor_data_on = 1;
|
||||
else if ((xga->sprite_pos >= 1) || ((xga->disp_cntl_2 & 7) == 4))
|
||||
else if ((xga->sprite_pos >= 1) || (((xga->disp_cntl_2 & 7) == 2) || (xga->disp_cntl_2 & 7) == 4))
|
||||
xga->cursor_data_on = 1;
|
||||
else if (xga->aperture_cntl == 0) {
|
||||
if (xga->linear_endian_reverse && !(xga->access_mode & 8))
|
||||
@@ -888,7 +889,7 @@ xga_ext_inb(uint16_t addr, void *priv)
|
||||
d = MIN(s, d); \
|
||||
break; \
|
||||
case 0x12: \
|
||||
d = MIN(0xff, s + d); \
|
||||
d = MIN(~0, s + d); \
|
||||
break; \
|
||||
case 0x13: \
|
||||
d = MAX(0, d - s); \
|
||||
@@ -908,7 +909,7 @@ xga_accel_read_pattern_map_pixel(svga_t *svga, int x, int y, int map, uint32_t b
|
||||
const xga_t *xga = &svga->xga;
|
||||
uint32_t addr = base;
|
||||
int bits;
|
||||
uint32_t byte;
|
||||
uint8_t byte;
|
||||
uint8_t px;
|
||||
int skip = 0;
|
||||
|
||||
@@ -978,6 +979,15 @@ xga_accel_read_map_pixel(svga_t *svga, int x, int y, int map, uint32_t base, int
|
||||
}
|
||||
px = (byte >> bits) & 1;
|
||||
return px;
|
||||
case 2: /*4-bit*/
|
||||
addr += (y * (width >> 1));
|
||||
addr += (x >> 1);
|
||||
if (!skip) {
|
||||
READ(addr, byte);
|
||||
} else {
|
||||
byte = mem_readb_phys(addr);
|
||||
}
|
||||
return byte;
|
||||
case 3: /*8-bit*/
|
||||
addr += (y * width);
|
||||
addr += x;
|
||||
@@ -1060,6 +1070,29 @@ xga_accel_write_map_pixel(svga_t *svga, int x, int y, int map, uint32_t base, ui
|
||||
}
|
||||
mem_writeb_phys(addr, byte);
|
||||
break;
|
||||
case 2: /*4-bit*/
|
||||
addr += (y * (width >> 1));
|
||||
addr += (x >> 1);
|
||||
if (!skip) {
|
||||
READ(addr, byte);
|
||||
} else {
|
||||
byte = mem_readb_phys(addr);
|
||||
}
|
||||
if (xga->linear_endian_reverse) {
|
||||
mask = 0x0f << ((1 - (x & 1)) << 2);
|
||||
} else {
|
||||
if ((xga->accel.px_map_format[map] & 8) && !(xga->access_mode & 8)) {
|
||||
mask = 0x0f << ((x & 1) << 2);
|
||||
} else {
|
||||
mask = 0x0f << ((1 - (x & 1)) << 2);
|
||||
}
|
||||
}
|
||||
byte = (byte & ~mask) | (pixel & mask);
|
||||
if (!skip) {
|
||||
WRITE(addr, byte);
|
||||
}
|
||||
mem_writeb_phys(addr, byte);
|
||||
break;
|
||||
case 3: /*8-bit*/
|
||||
addr += (y * width);
|
||||
addr += x;
|
||||
@@ -1076,14 +1109,12 @@ xga_accel_write_map_pixel(svga_t *svga, int x, int y, int map, uint32_t base, ui
|
||||
pixel = ((pixel & 0xff00) >> 8) | ((pixel & 0x00ff) << 8);
|
||||
else if (xga->access_mode & 8)
|
||||
pixel = ((pixel & 0xff00) >> 8) | ((pixel & 0x00ff) << 8);
|
||||
|
||||
mem_writew_phys(addr, pixel);
|
||||
} else {
|
||||
if (!skip) {
|
||||
WRITEW(addr, pixel);
|
||||
}
|
||||
mem_writew_phys(addr, pixel);
|
||||
}
|
||||
mem_writew_phys(addr, pixel);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1243,6 +1274,7 @@ xga_line_draw_write(svga_t *svga)
|
||||
int x = 0;
|
||||
int dx;
|
||||
int dy;
|
||||
int draw_pixel;
|
||||
|
||||
dminor = (xga->accel.bres_k1);
|
||||
if (xga->accel.bres_k1 & 0x2000)
|
||||
@@ -1257,7 +1289,7 @@ xga_line_draw_write(svga_t *svga)
|
||||
|
||||
err = (xga->accel.bres_err_term);
|
||||
if (xga->accel.bres_err_term & 0x2000)
|
||||
destxtmp |= ~0x1fff;
|
||||
err |= ~0x1fff;
|
||||
|
||||
if (xga->accel.octant & 0x02) {
|
||||
ydir = -1;
|
||||
@@ -1279,6 +1311,9 @@ xga_line_draw_write(svga_t *svga)
|
||||
if (xga->accel.dst_map_y >= 0x1800)
|
||||
dy |= ~0x17ff;
|
||||
|
||||
if ((xga->accel.command & 0x30) == 0x30)
|
||||
xga_log("Line Draw Write: BLTWIDTH=%d, BLTHEIGHT=%d, FRGDCOLOR=%04x, XDIR=%i, YDIR=%i, steep=%s, ERR=%04x.\n", xga->accel.blt_width, xga->accel.blt_height, xga->accel.frgd_color & 0xffff, xdir, ydir, (xga->accel.octant & 0x01) ? "0" : "1", err);
|
||||
|
||||
if (xga->accel.octant & 0x01) {
|
||||
steep = 0;
|
||||
SWAP(dx, dy);
|
||||
@@ -1287,6 +1322,7 @@ xga_line_draw_write(svga_t *svga)
|
||||
|
||||
if (xga->accel.pat_src == 8) {
|
||||
while (y >= 0) {
|
||||
draw_pixel = 1;
|
||||
if (xga->accel.command & 0xc0) {
|
||||
if (steep) {
|
||||
if ((dx >= xga->accel.mask_map_origin_x_off) && (dx <= ((xga->accel.px_map_width[0] & 0xfff) + xga->accel.mask_map_origin_x_off)) && (dy >= xga->accel.mask_map_origin_y_off) && (dy <= ((xga->accel.px_map_height[0] & 0xfff) + xga->accel.mask_map_origin_y_off))) {
|
||||
@@ -1303,6 +1339,21 @@ xga_line_draw_write(svga_t *svga)
|
||||
xga_accel_write_map_pixel(svga, dx, dy, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
else if (((xga->accel.command & 0x30) == 0x20) && y)
|
||||
xga_accel_write_map_pixel(svga, dx, dy, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
else if ((xga->accel.command & 0x30) == 0x30) {
|
||||
if (err < 0)
|
||||
draw_pixel = 0;
|
||||
else {
|
||||
if (ydir == -1) { /*Bottom-to-Top*/
|
||||
if (!x)
|
||||
draw_pixel = 0;
|
||||
} else { /*Top-to-Bottom*/
|
||||
if (!y)
|
||||
draw_pixel = 0;
|
||||
}
|
||||
}
|
||||
if (draw_pixel)
|
||||
xga_accel_write_map_pixel(svga, dx, dy, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1320,6 +1371,17 @@ xga_line_draw_write(svga_t *svga)
|
||||
xga_accel_write_map_pixel(svga, dy, dx, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
else if (((xga->accel.command & 0x30) == 0x20) && y)
|
||||
xga_accel_write_map_pixel(svga, dy, dx, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
else if ((xga->accel.command & 0x30) == 0x30) {
|
||||
if (xdir == -1) { /*Bottom-to-Top*/
|
||||
if (!x)
|
||||
draw_pixel = 0;
|
||||
} else { /*Top-to-Bottom*/
|
||||
if (!y)
|
||||
draw_pixel = 0;
|
||||
}
|
||||
if (draw_pixel)
|
||||
xga_accel_write_map_pixel(svga, dy, dx, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1338,6 +1400,21 @@ xga_line_draw_write(svga_t *svga)
|
||||
xga_accel_write_map_pixel(svga, dx, dy, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
else if (((xga->accel.command & 0x30) == 0x20) && y)
|
||||
xga_accel_write_map_pixel(svga, dx, dy, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
else if ((xga->accel.command & 0x30) == 0x30) {
|
||||
if (err < 0)
|
||||
draw_pixel = 0;
|
||||
else {
|
||||
if (ydir == -1) { /*Bottom-to-Top*/
|
||||
if (!x)
|
||||
draw_pixel = 0;
|
||||
} else { /*Top-to-Bottom*/
|
||||
if (!y)
|
||||
draw_pixel = 0;
|
||||
}
|
||||
}
|
||||
if (draw_pixel)
|
||||
xga_accel_write_map_pixel(svga, dx, dy, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
src_dat = (((xga->accel.command >> 28) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.src_map_x & 0xfff, xga->accel.src_map_y & 0xfff, xga->accel.src_map, srcbase, xga->accel.px_map_width[xga->accel.src_map] + 1, 1) : xga->accel.frgd_color;
|
||||
@@ -1353,6 +1430,17 @@ xga_line_draw_write(svga_t *svga)
|
||||
xga_accel_write_map_pixel(svga, dy, dx, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
else if (((xga->accel.command & 0x30) == 0x20) && y)
|
||||
xga_accel_write_map_pixel(svga, dy, dx, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
else if ((xga->accel.command & 0x30) == 0x30) {
|
||||
if (xdir == -1) { /*Bottom-to-Top*/
|
||||
if (!x)
|
||||
draw_pixel = 0;
|
||||
} else { /*Top-to-Bottom*/
|
||||
if (!y)
|
||||
draw_pixel = 0;
|
||||
}
|
||||
if (draw_pixel)
|
||||
xga_accel_write_map_pixel(svga, dy, dx, xga->accel.dst_map, dstbase, dest_dat, xga->accel.px_map_width[xga->accel.dst_map] + 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1361,7 +1449,7 @@ xga_line_draw_write(svga_t *svga)
|
||||
break;
|
||||
}
|
||||
|
||||
while (err > 0) {
|
||||
while (err >= 0) {
|
||||
dy += ydir;
|
||||
err -= (dmajor << 1);
|
||||
}
|
||||
@@ -1383,10 +1471,13 @@ xga_line_draw_write(svga_t *svga)
|
||||
}
|
||||
}
|
||||
|
||||
#undef SWAP
|
||||
|
||||
static void
|
||||
xga_bitblt(svga_t *svga)
|
||||
{
|
||||
xga_t *xga = &svga->xga;
|
||||
uint8_t area_state = 0;
|
||||
uint32_t src_dat;
|
||||
uint32_t dest_dat;
|
||||
uint32_t old_dest_dat;
|
||||
@@ -1405,9 +1496,12 @@ xga_bitblt(svga_t *svga)
|
||||
#endif
|
||||
uint32_t frgdcol = xga->accel.frgd_color;
|
||||
uint32_t bkgdcol = xga->accel.bkgd_color;
|
||||
int mix = 0;
|
||||
int mix = 0;
|
||||
int xdir;
|
||||
int ydir;
|
||||
int skip = 0;
|
||||
int x = 0;
|
||||
int y = 0;
|
||||
|
||||
if (xga->accel.octant & 0x02) {
|
||||
ydir = -1;
|
||||
@@ -1556,17 +1650,105 @@ xga_bitblt(svga_t *svga)
|
||||
xga_log("Pattern Map = %d: CMD = %08x: PATBase = %08x, SRCBase = %08x, DSTBase = %08x\n",
|
||||
xga->accel.pat_src, xga->accel.command, patbase, srcbase, dstbase);
|
||||
xga_log("CMD = %08x: Y = %d, X = %d, patsrc = %02x, srcmap = %d, dstmap = %d, py = %d, "
|
||||
"sy = %d, dy = %d, width0 = %d, width1 = %d, width2 = %d, width3 = %d\n",
|
||||
"sy = %d, dy = %d, width0 = %d, width1 = %d, width2 = %d, width3 = %d, bkgdcol = %02x\n",
|
||||
xga->accel.command, xga->accel.y, xga->accel.x, xga->accel.pat_src,
|
||||
xga->accel.src_map, xga->accel.dst_map, xga->accel.py, xga->accel.sy, xga->accel.dy,
|
||||
xga->accel.px_map_width[0], xga->accel.px_map_width[1],
|
||||
xga->accel.px_map_width[2], xga->accel.px_map_width[3]);
|
||||
xga->accel.px_map_width[2], xga->accel.px_map_width[3], bkgdcol);
|
||||
|
||||
while (xga->accel.y >= 0) {
|
||||
mix = xga_accel_read_pattern_map_pixel(svga, xga->accel.px, xga->accel.py, xga->accel.pat_src, patbase, patwidth + 1);
|
||||
if (((xga->accel.command >> 24) & 0x0f) == 0x0a) {
|
||||
while (xga->accel.y >= 0) {
|
||||
mix = xga_accel_read_pattern_map_pixel(svga, xga->accel.px, xga->accel.py, xga->accel.pat_src, patbase, patwidth + 1);
|
||||
if (mix)
|
||||
area_state ^= 1;
|
||||
|
||||
if (xga->accel.command & 0xc0) {
|
||||
if ((xga->accel.dx >= xga->accel.mask_map_origin_x_off) && (xga->accel.dx <= ((xga->accel.px_map_width[0] & 0xfff) + xga->accel.mask_map_origin_x_off)) && (xga->accel.dy >= xga->accel.mask_map_origin_y_off) && (xga->accel.dy <= ((xga->accel.px_map_height[0] & 0xfff) + xga->accel.mask_map_origin_y_off))) {
|
||||
if (xga->accel.command & 0xc0) {
|
||||
if ((xga->accel.dx >= xga->accel.mask_map_origin_x_off) && (xga->accel.dx <= ((xga->accel.px_map_width[0] & 0xfff) + xga->accel.mask_map_origin_x_off)) && (xga->accel.dy >= xga->accel.mask_map_origin_y_off) && (xga->accel.dy <= ((xga->accel.px_map_height[0] & 0xfff) + xga->accel.mask_map_origin_y_off))) {
|
||||
if (area_state)
|
||||
src_dat = (((xga->accel.command >> 28) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : frgdcol;
|
||||
else
|
||||
src_dat = (((xga->accel.command >> 30) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : bkgdcol;
|
||||
|
||||
if ((xga->accel.px_map_format[xga->accel.dst_map] & 7) <= 3)
|
||||
src_dat &= 0xff;
|
||||
|
||||
dest_dat = xga_accel_read_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dstwidth + 1, 0);
|
||||
if ((xga->accel.cc_cond == 4) || ((xga->accel.cc_cond == 1) && (dest_dat > color_cmp)) || ((xga->accel.cc_cond == 2) && (dest_dat == color_cmp)) || ((xga->accel.cc_cond == 3) && (dest_dat < color_cmp)) || ((xga->accel.cc_cond == 5) && (dest_dat >= color_cmp)) || ((xga->accel.cc_cond == 6) && (dest_dat != color_cmp)) || ((xga->accel.cc_cond == 7) && (dest_dat <= color_cmp))) {
|
||||
old_dest_dat = dest_dat;
|
||||
ROP(area_state, dest_dat, src_dat);
|
||||
dest_dat = (dest_dat & plane_mask) | (old_dest_dat & ~plane_mask);
|
||||
xga_log("1SRCDat=%02x, DSTDat=%02x, Old=%02x, MIX=%d.\n", src_dat, dest_dat, old_dest_dat, area_state);
|
||||
xga_accel_write_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dest_dat, dstwidth + 1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (area_state)
|
||||
src_dat = (((xga->accel.command >> 28) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : frgdcol;
|
||||
else
|
||||
src_dat = (((xga->accel.command >> 30) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : bkgdcol;
|
||||
|
||||
if ((xga->accel.px_map_format[xga->accel.dst_map] & 7) <= 3)
|
||||
src_dat &= 0xff;
|
||||
|
||||
dest_dat = xga_accel_read_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dstwidth + 1, 0);
|
||||
if ((xga->accel.cc_cond == 4) || ((xga->accel.cc_cond == 1) && (dest_dat > color_cmp)) || ((xga->accel.cc_cond == 2) && (dest_dat == color_cmp)) || ((xga->accel.cc_cond == 3) && (dest_dat < color_cmp)) || ((xga->accel.cc_cond == 5) && (dest_dat >= color_cmp)) || ((xga->accel.cc_cond == 6) && (dest_dat != color_cmp)) || ((xga->accel.cc_cond == 7) && (dest_dat <= color_cmp))) {
|
||||
old_dest_dat = dest_dat;
|
||||
ROP(area_state, dest_dat, src_dat);
|
||||
dest_dat = (dest_dat & plane_mask) | (old_dest_dat & ~plane_mask);
|
||||
xga_log("2Fill: NumXY(%d,%d): DXY(%d,%d): SRCDat=%02x, DSTDat=%02x, Old=%02x, frgdcol=%02x, bkgdcol=%02x, MIX=%d, frgdmix=%02x, bkgdmix=%02x, dstmapfmt=%02x, srcmapfmt=%02x, srcmapnum=%d.\n", x, y, xga->accel.dx, xga->accel.dy, src_dat, dest_dat, old_dest_dat, frgdcol, bkgdcol, area_state, xga->accel.frgd_mix & 0x1f, xga->accel.bkgd_mix & 0x1f, xga->accel.px_map_format[xga->accel.dst_map] & 0x0f, xga->accel.px_map_format[xga->accel.src_map] & 0x0f, xga->accel.src_map);
|
||||
xga_accel_write_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dest_dat, dstwidth + 1);
|
||||
}
|
||||
}
|
||||
|
||||
xga->accel.sx = ((xga->accel.sx + 1) & srcwidth) | (xga->accel.sx & ~srcwidth);
|
||||
xga->accel.px = ((xga->accel.px + 1) & patwidth) | (xga->accel.px & ~patwidth);
|
||||
xga->accel.dx++;
|
||||
xga->accel.x--;
|
||||
x++;
|
||||
if (xga->accel.x < 0) {
|
||||
area_state = 0;
|
||||
x = 0;
|
||||
xga->accel.y--;
|
||||
xga->accel.x = xga->accel.blt_width & 0xfff;
|
||||
|
||||
xga->accel.dx = xga->accel.dst_map_x & 0x1fff;
|
||||
if (xga->accel.dst_map_x >= 0x1800)
|
||||
xga->accel.dx |= ~0x17ff;
|
||||
xga->accel.sx = xga->accel.src_map_x & 0xfff;
|
||||
xga->accel.px = xga->accel.pat_map_x & 0xfff;
|
||||
|
||||
xga->accel.sy = ((xga->accel.sy + ydir) & srcheight) | (xga->accel.sy & ~srcheight);
|
||||
xga->accel.py += ydir;
|
||||
xga->accel.dy += ydir;
|
||||
y++;
|
||||
|
||||
if (xga->accel.y < 0) {
|
||||
xga->accel.dst_map_x = xga->accel.dx;
|
||||
xga->accel.dst_map_y = xga->accel.dy;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
while (xga->accel.y >= 0) {
|
||||
mix = xga_accel_read_pattern_map_pixel(svga, xga->accel.px, xga->accel.py, xga->accel.pat_src, patbase, patwidth + 1);
|
||||
|
||||
if (xga->accel.command & 0xc0) {
|
||||
if ((xga->accel.dx >= xga->accel.mask_map_origin_x_off) && (xga->accel.dx <= ((xga->accel.px_map_width[0] & 0xfff) + xga->accel.mask_map_origin_x_off)) && (xga->accel.dy >= xga->accel.mask_map_origin_y_off) && (xga->accel.dy <= ((xga->accel.px_map_height[0] & 0xfff) + xga->accel.mask_map_origin_y_off))) {
|
||||
if (mix) {
|
||||
src_dat = (((xga->accel.command >> 28) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : frgdcol;
|
||||
} else {
|
||||
src_dat = (((xga->accel.command >> 30) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : bkgdcol;
|
||||
}
|
||||
dest_dat = xga_accel_read_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dstwidth + 1, 0);
|
||||
if ((xga->accel.cc_cond == 4) || ((xga->accel.cc_cond == 1) && (dest_dat > color_cmp)) || ((xga->accel.cc_cond == 2) && (dest_dat == color_cmp)) || ((xga->accel.cc_cond == 3) && (dest_dat < color_cmp)) || ((xga->accel.cc_cond == 5) && (dest_dat >= color_cmp)) || ((xga->accel.cc_cond == 6) && (dest_dat != color_cmp)) || ((xga->accel.cc_cond == 7) && (dest_dat <= color_cmp))) {
|
||||
old_dest_dat = dest_dat;
|
||||
ROP(mix, dest_dat, src_dat);
|
||||
dest_dat = (dest_dat & plane_mask) | (old_dest_dat & ~plane_mask);
|
||||
xga_accel_write_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dest_dat, dstwidth + 1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mix) {
|
||||
src_dat = (((xga->accel.command >> 28) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : frgdcol;
|
||||
} else {
|
||||
@@ -1580,49 +1762,36 @@ xga_bitblt(svga_t *svga)
|
||||
xga_accel_write_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dest_dat, dstwidth + 1);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (mix) {
|
||||
src_dat = (((xga->accel.command >> 28) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : frgdcol;
|
||||
} else {
|
||||
src_dat = (((xga->accel.command >> 30) & 3) == 2) ? xga_accel_read_map_pixel(svga, xga->accel.sx, xga->accel.sy, xga->accel.src_map, srcbase, srcwidth + 1, 1) : bkgdcol;
|
||||
}
|
||||
dest_dat = xga_accel_read_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dstwidth + 1, 0);
|
||||
if ((xga->accel.cc_cond == 4) || ((xga->accel.cc_cond == 1) && (dest_dat > color_cmp)) || ((xga->accel.cc_cond == 2) && (dest_dat == color_cmp)) || ((xga->accel.cc_cond == 3) && (dest_dat < color_cmp)) || ((xga->accel.cc_cond == 5) && (dest_dat >= color_cmp)) || ((xga->accel.cc_cond == 6) && (dest_dat != color_cmp)) || ((xga->accel.cc_cond == 7) && (dest_dat <= color_cmp))) {
|
||||
old_dest_dat = dest_dat;
|
||||
ROP(mix, dest_dat, src_dat);
|
||||
dest_dat = (dest_dat & plane_mask) | (old_dest_dat & ~plane_mask);
|
||||
xga_accel_write_map_pixel(svga, xga->accel.dx, xga->accel.dy, xga->accel.dst_map, dstbase, dest_dat, dstwidth + 1);
|
||||
}
|
||||
}
|
||||
|
||||
xga->accel.sx += xdir;
|
||||
if (xga->accel.pattern)
|
||||
xga->accel.px = ((xga->accel.px + xdir) & patwidth) | (xga->accel.px & ~patwidth);
|
||||
else
|
||||
xga->accel.px += xdir;
|
||||
xga->accel.dx += xdir;
|
||||
xga->accel.x--;
|
||||
if (xga->accel.x < 0) {
|
||||
xga->accel.y--;
|
||||
xga->accel.x = (xga->accel.blt_width & 0xfff);
|
||||
|
||||
xga->accel.dx = xga->accel.dst_map_x & 0x1fff;
|
||||
if (xga->accel.dst_map_x >= 0x1800)
|
||||
xga->accel.dx |= ~0x17ff;
|
||||
xga->accel.sx = xga->accel.src_map_x & 0xfff;
|
||||
xga->accel.px = xga->accel.pat_map_x & 0xfff;
|
||||
|
||||
xga->accel.sy += ydir;
|
||||
xga->accel.sx += xdir;
|
||||
if (xga->accel.pattern)
|
||||
xga->accel.py = ((xga->accel.py + ydir) & patheight) | (xga->accel.py & ~patheight);
|
||||
xga->accel.px = ((xga->accel.px + xdir) & patwidth) | (xga->accel.px & ~patwidth);
|
||||
else
|
||||
xga->accel.py += ydir;
|
||||
xga->accel.dy += ydir;
|
||||
xga->accel.px += xdir;
|
||||
xga->accel.dx += xdir;
|
||||
xga->accel.x--;
|
||||
if (xga->accel.x < 0) {
|
||||
xga->accel.y--;
|
||||
xga->accel.x = (xga->accel.blt_width & 0xfff);
|
||||
|
||||
if (xga->accel.y < 0) {
|
||||
xga->accel.dst_map_x = xga->accel.dx;
|
||||
xga->accel.dst_map_y = xga->accel.dy;
|
||||
return;
|
||||
xga->accel.dx = xga->accel.dst_map_x & 0x1fff;
|
||||
if (xga->accel.dst_map_x >= 0x1800)
|
||||
xga->accel.dx |= ~0x17ff;
|
||||
xga->accel.sx = xga->accel.src_map_x & 0xfff;
|
||||
xga->accel.px = xga->accel.pat_map_x & 0xfff;
|
||||
|
||||
xga->accel.sy += ydir;
|
||||
if (xga->accel.pattern)
|
||||
xga->accel.py = ((xga->accel.py + ydir) & patheight) | (xga->accel.py & ~patheight);
|
||||
else
|
||||
xga->accel.py += ydir;
|
||||
xga->accel.dy += ydir;
|
||||
|
||||
if (xga->accel.y < 0) {
|
||||
xga->accel.dst_map_x = xga->accel.dx;
|
||||
xga->accel.dst_map_y = xga->accel.dy;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2054,24 +2223,29 @@ exec_command:
|
||||
#endif
|
||||
|
||||
switch ((xga->accel.command >> 24) & 0x0f) {
|
||||
case 2: /*Short Stroke Vectors Read */
|
||||
xga_log("Short Stroke Vectors Read.\n");
|
||||
break;
|
||||
case 3: /*Bresenham Line Draw Read*/
|
||||
xga_log("Line Draw Read\n");
|
||||
break;
|
||||
case 4: /*Short Stroke Vectors*/
|
||||
xga_log("Short Stroke Vectors.\n");
|
||||
case 4: /*Short Stroke Vectors Write*/
|
||||
xga_log("Short Stroke Vectors Write.\n");
|
||||
break;
|
||||
case 5: /*Bresenham Line Draw Write*/
|
||||
xga_log("Line Draw Write.\n");
|
||||
xga_line_draw_write(svga);
|
||||
break;
|
||||
case 8: /*BitBLT*/
|
||||
xga_log("BitBLT.\n");
|
||||
xga_bitblt(svga);
|
||||
break;
|
||||
case 9: /*Inverting BitBLT*/
|
||||
xga_log("Inverting BitBLT\n");
|
||||
break;
|
||||
case 0x0a: /*Area Fill*/
|
||||
xga_log("Area Fill.\n");
|
||||
xga_log("Area Fill BitBLT.\n");
|
||||
xga_bitblt(svga);
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -2355,6 +2529,47 @@ xga_render_overscan_right(xga_t *xga, svga_t *svga)
|
||||
*line_ptr++ = svga->overscan_color;
|
||||
}
|
||||
|
||||
static void
|
||||
xga_render_4bpp(svga_t *svga)
|
||||
{
|
||||
xga_t *xga = &svga->xga;
|
||||
uint32_t *p;
|
||||
uint32_t dat;
|
||||
|
||||
if ((xga->displine + svga->y_add) < 0)
|
||||
return;
|
||||
|
||||
if (xga->changedvram[xga->ma >> 12] || xga->changedvram[(xga->ma >> 12) + 1] || svga->fullchange) {
|
||||
p = &svga->monitor->target_buffer->line[xga->displine + svga->y_add][svga->x_add];
|
||||
|
||||
if (xga->firstline_draw == 2000)
|
||||
xga->firstline_draw = xga->displine;
|
||||
xga->lastline_draw = xga->displine;
|
||||
|
||||
for (int x = 0; x <= xga->h_disp; x += 16) {
|
||||
dat = *(uint32_t *) (&xga->vram[xga->ma & xga->vram_mask]);
|
||||
p[0] = xga->pallook[(dat >> 4) & 0x0f];
|
||||
p[1] = xga->pallook[dat & 0x0f];
|
||||
p[2] = xga->pallook[(dat >> 12) & 0x0f];
|
||||
p[3] = xga->pallook[(dat >> 8) & 0x0f];
|
||||
p[4] = xga->pallook[(dat >> 20) & 0x0f];
|
||||
p[5] = xga->pallook[(dat >> 16) & 0x0f];
|
||||
p[6] = xga->pallook[(dat >> 28) & 0x0f];
|
||||
p[7] = xga->pallook[(dat >> 24) & 0x0f];
|
||||
|
||||
dat = *(uint32_t *) (&xga->vram[(xga->ma + 4) & xga->vram_mask]);
|
||||
p[9] = xga->pallook[dat & 0x0f];
|
||||
p[11] = xga->pallook[(dat >> 8) & 0x0f];
|
||||
p[13] = xga->pallook[(dat >> 16) & 0x0f];
|
||||
p[15] = xga->pallook[(dat >> 24) & 0x0f];
|
||||
|
||||
xga->ma += 8;
|
||||
p += 16;
|
||||
}
|
||||
xga->ma &= xga->vram_mask;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
xga_render_8bpp(svga_t *svga)
|
||||
{
|
||||
@@ -2449,7 +2664,7 @@ xga_write(uint32_t addr, uint8_t val, void *priv)
|
||||
if (addr >= xga->vram_size)
|
||||
return;
|
||||
|
||||
cycles -= video_timing_write_b;
|
||||
cycles -= svga->monitor->mon_video_timing_write_b;
|
||||
|
||||
if (xga->access_mode & 8) {
|
||||
if ((xga->access_mode & 7) == 4)
|
||||
@@ -2510,7 +2725,7 @@ xga_read(uint32_t addr, void *priv)
|
||||
if (addr >= xga->vram_size)
|
||||
return ret;
|
||||
|
||||
cycles -= video_timing_read_b;
|
||||
cycles -= svga->monitor->mon_video_timing_read_b;
|
||||
|
||||
if (xga->access_mode & 8) {
|
||||
if ((xga->access_mode & 7) == 4)
|
||||
@@ -2695,6 +2910,9 @@ xga_do_render(svga_t *svga)
|
||||
|
||||
xga_log("DISPCNTL = %d, vga = %d.\n", xga->disp_cntl_2 & 7, vga_on);
|
||||
switch (xga->disp_cntl_2 & 7) {
|
||||
case 2:
|
||||
xga_render_4bpp(svga);
|
||||
break;
|
||||
case 3:
|
||||
xga_render_8bpp(svga);
|
||||
break;
|
||||
@@ -2773,15 +2991,9 @@ xga_poll(xga_t *xga, svga_t *svga)
|
||||
if (xga->sc == xga->rowcount) {
|
||||
xga->sc = 0;
|
||||
|
||||
if ((xga->disp_cntl_2 & 7) == 4) {
|
||||
xga->maback += (xga->rowoffset << 4);
|
||||
if (xga->interlace)
|
||||
xga->maback += (xga->rowoffset << 4);
|
||||
} else {
|
||||
xga->maback += (xga->rowoffset << 3);
|
||||
if (xga->interlace)
|
||||
xga->maback += (xga->rowoffset << 3);
|
||||
}
|
||||
xga->maback += (xga->rowoffset << (xga->disp_cntl_2 & 7));
|
||||
if (xga->interlace)
|
||||
xga->maback += (xga->rowoffset << (xga->disp_cntl_2 & 7));
|
||||
xga->maback &= xga->vram_mask;
|
||||
xga->ma = xga->maback;
|
||||
} else {
|
||||
|
||||
@@ -15,12 +15,12 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
|
||||
|
||||
MainMenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP "動作(&A)"
|
||||
POPUP "操作(&A)"
|
||||
BEGIN
|
||||
MENUITEM "キーボードはキャプチャが必要(&K)", IDM_ACTION_KBD_REQ_CAPTURE
|
||||
MENUITEM "右CTRLを左ALTへ(&R)", IDM_ACTION_RCTRL_IS_LALT
|
||||
MENUITEM "右CTRLを左ALTへ変換(&R)", IDM_ACTION_RCTRL_IS_LALT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "ハードリセット(&H)...", IDM_ACTION_HRESET
|
||||
MENUITEM "ハード リセット(&H)...", IDM_ACTION_HRESET
|
||||
MENUITEM "Ctrl+Alt+Del(&C)\tCtrl+F12", IDM_ACTION_RESET_CAD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Ctrl+Alt+Esc(&E)", IDM_ACTION_CTRL_ALT_ESC
|
||||
@@ -34,9 +34,9 @@ BEGIN
|
||||
MENUITEM "ステータスバーを隠す(&H)", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "ツールバーを隠す(&T)", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Show non-primary monitors", IDM_VID_MONITORS
|
||||
MENUITEM "ウィンドウのサイズをリサイズ可能(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "ウィンドウのサイズと位置を記憶(&E)", IDM_VID_REMEMBER
|
||||
MENUITEM "プライマリ以外のモニターを表示(&S)", IDM_VID_MONITORS
|
||||
MENUITEM "ウィンドウのサイズを変更可能(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "ウィンドウのサイズと位置を保存(&E)", IDM_VID_REMEMBER
|
||||
MENUITEM SEPARATOR
|
||||
POPUP "レンダラー(&N)"
|
||||
BEGIN
|
||||
@@ -49,8 +49,8 @@ BEGIN
|
||||
#endif
|
||||
END
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "ウィンドウのサイズを指定...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "4:3アスペクト比を固定(&O)", IDM_VID_FORCE43
|
||||
MENUITEM "ディメンションを指定...", IDM_VID_SPECIFY_DIM
|
||||
MENUITEM "4:3の縦横比を強制表示(&O)", IDM_VID_FORCE43
|
||||
POPUP "ウィンドウの表示倍率(&W)"
|
||||
BEGIN
|
||||
MENUITEM "0.5x(&0)", IDM_VID_SCALE_1X
|
||||
@@ -71,22 +71,22 @@ BEGIN
|
||||
END
|
||||
MENUITEM "HiDPIスケーリング(&D)", IDM_VID_HIDPI
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "フルスクリーン(&F)\tCtrl+Alt+PgUp", IDM_VID_FULLSCREEN
|
||||
POPUP "フルスクリーンのスケール(&S)"
|
||||
MENUITEM "全画面表示(&F)\tCtrl+Alt+PgUp", IDM_VID_FULLSCREEN
|
||||
POPUP "全画面の拡大表示モード(&S)"
|
||||
BEGIN
|
||||
MENUITEM "フルスクリーンに拡大(&F)", IDM_VID_FS_FULL
|
||||
MENUITEM "ストレッチ モード(&F)", IDM_VID_FS_FULL
|
||||
MENUITEM "4:3(&4)", IDM_VID_FS_43
|
||||
MENUITEM "正方形ピクセル(アスペクト比を維持)(&S)", IDM_VID_FS_KEEPRATIO
|
||||
MENUITEM "整数倍(&I)", IDM_VID_FS_INT
|
||||
END
|
||||
POPUP "E&GA/(S)VGAの設定"
|
||||
BEGIN
|
||||
MENUITEM "色を反転(&I)", IDM_VID_INVERT
|
||||
MENUITEM "色反転(&I)", IDM_VID_INVERT
|
||||
POPUP "画面タイプ(&T)"
|
||||
BEGIN
|
||||
MENUITEM "RGB(カラー)(&C)", IDM_VID_GRAY_RGB
|
||||
MENUITEM "RGB(グレースケール)(&R)", IDM_VID_GRAY_MONO
|
||||
MENUITEM "モニター(琥珀色)(&A)", IDM_VID_GRAY_AMBER
|
||||
MENUITEM "モニター(黄色)(&A)", IDM_VID_GRAY_AMBER
|
||||
MENUITEM "モニター(緑色)(&G)", IDM_VID_GRAY_GREEN
|
||||
MENUITEM "モニター(白色)(&W)", IDM_VID_GRAY_WHITE
|
||||
END
|
||||
@@ -111,10 +111,10 @@ BEGIN
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "環境設定(&P)...", IDM_PREFERENCES
|
||||
#ifdef DISCORD
|
||||
MENUITEM "Discordとの連携機能(&D)", IDM_DISCORD
|
||||
MENUITEM "Discord連携機能(&D)", IDM_DISCORD
|
||||
#endif
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "音量を調節(&G)...", IDM_SND_GAIN
|
||||
MENUITEM "音量調整(&G)...", IDM_SND_GAIN
|
||||
#ifdef MTR_ENABLED
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "トレース開始\tCtrl+T", IDM_ACTION_BEGIN_TRACE
|
||||
@@ -123,7 +123,7 @@ BEGIN
|
||||
END
|
||||
POPUP "ヘルプ(&H)"
|
||||
BEGIN
|
||||
MENUITEM "ドキュメント(&D)...", IDM_DOCS
|
||||
MENUITEM "文書(&D)...", IDM_DOCS
|
||||
MENUITEM "86Boxのバージョン情報(&A)...", IDM_ABOUT
|
||||
END
|
||||
END
|
||||
@@ -142,9 +142,9 @@ BEGIN
|
||||
MENUITEM "既存のイメージを開く(&E)...", IDM_CASSETTE_IMAGE_EXISTING
|
||||
MENUITEM "既存のイメージを開く(書き込み保護)(&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "録音(&R)", IDM_CASSETTE_RECORD
|
||||
MENUITEM "記録(&R)", IDM_CASSETTE_RECORD
|
||||
MENUITEM "再生(&P)", IDM_CASSETTE_PLAY
|
||||
MENUITEM "冒頭に巻き戻す(&R)", IDM_CASSETTE_REWIND
|
||||
MENUITEM "先頭まで巻き戻す(&R)", IDM_CASSETTE_REWIND
|
||||
MENUITEM "最後まで早送り(&F)", IDM_CASSETTE_FAST_FORWARD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "取り出す(&J)", IDM_CASSETTE_EJECT
|
||||
@@ -241,47 +241,47 @@ END
|
||||
//
|
||||
|
||||
#define STR_PREFERENCES "環境設定"
|
||||
#define STR_SND_GAIN "音量ゲイン"
|
||||
#define STR_SND_GAIN "音量調整"
|
||||
#define STR_NEW_FLOPPY "新規のイメージ"
|
||||
#define STR_CONFIG "設定"
|
||||
#define STR_SPECIFY_DIM "メインウィンドウのサイズ指定"
|
||||
#define STR_SPECIFY_DIM "メイン ウィンドウのサイズ指定"
|
||||
|
||||
#define STR_OK "OK"
|
||||
#define STR_CANCEL "キャンセル"
|
||||
#define STR_GLOBAL "これらの設定をグローバル既定値として保存する(&G)"
|
||||
#define STR_GLOBAL "これらの設定をグローバル既定値として保存(&G)"
|
||||
#define STR_DEFAULT "既定値(&D)"
|
||||
#define STR_LANGUAGE "言語:"
|
||||
#define STR_ICONSET "アイコンセット:"
|
||||
#define STR_ICONSET "アイコン セット:"
|
||||
|
||||
#define STR_GAIN "ゲイン値"
|
||||
|
||||
#define STR_FILE_NAME "ファイル名:"
|
||||
#define STR_DISK_SIZE "ディスクサイズ:"
|
||||
#define STR_RPM_MODE "回転数モード:"
|
||||
#define STR_DISK_SIZE "ディスク サイズ:"
|
||||
#define STR_RPM_MODE "RPMモード:"
|
||||
#define STR_PROGRESS "進行状況:"
|
||||
|
||||
#define STR_WIDTH "幅:"
|
||||
#define STR_HEIGHT "高さ:"
|
||||
#define STR_LOCK_TO_SIZE "このサイズをロックする"
|
||||
#define STR_LOCK_TO_SIZE "このサイズを固定"
|
||||
|
||||
#define STR_MACHINE_TYPE "マシンタイプ:"
|
||||
#define STR_MACHINE_TYPE "マシン タイプ:"
|
||||
#define STR_MACHINE "マシン:"
|
||||
#define STR_CONFIGURE "設定"
|
||||
#define STR_CPU_TYPE "CPUタイプ:"
|
||||
#define STR_CPU_SPEED "速度:"
|
||||
#define STR_FPU "FPU:"
|
||||
#define STR_WAIT_STATES "待機状態:"
|
||||
#define STR_WAIT_STATES "ウェイト ステート:"
|
||||
#define STR_MB "MB"
|
||||
#define STR_MEMORY "メモリ:"
|
||||
#define STR_TIME_SYNC "時刻同期機能"
|
||||
#define STR_DISABLED "無効にする"
|
||||
#define STR_ENABLED_LOCAL "有効にする (現地時間)"
|
||||
#define STR_ENABLED_UTC "有効にする (UTC)"
|
||||
#define STR_DISABLED "無効"
|
||||
#define STR_ENABLED_LOCAL "有効(現地時間)"
|
||||
#define STR_ENABLED_UTC "有効(UTC)"
|
||||
#define STR_DYNAREC "動的リコンパイラ"
|
||||
#define STR_SOFTFLOAT "Softfloat FPU"
|
||||
|
||||
#define STR_VIDEO "ビデオカード:"
|
||||
#define STR_VIDEO_2 "ビデオカード 2:"
|
||||
#define STR_VIDEO_2 "ビデオカード2:"
|
||||
#define STR_VOODOO "Voodooグラフィック"
|
||||
#define STR_IBM8514 "IBM 8514/aグラフィック"
|
||||
#define STR_XGA "XGAグラフィック"
|
||||
@@ -293,25 +293,25 @@ END
|
||||
#define STR_JOY3 "ジョイスティック3..."
|
||||
#define STR_JOY4 "ジョイスティック4..."
|
||||
|
||||
#define STR_SOUND1 "サウンドカード 1:"
|
||||
#define STR_SOUND2 "サウンドカード 2:"
|
||||
#define STR_SOUND3 "サウンドカード 3:"
|
||||
#define STR_SOUND4 "サウンドカード 4:"
|
||||
#define STR_SOUND1 "サウンド カード1:"
|
||||
#define STR_SOUND2 "サウンド カード2:"
|
||||
#define STR_SOUND3 "サウンド カード3:"
|
||||
#define STR_SOUND4 "サウンド カード4:"
|
||||
#define STR_MIDI_OUT "MIDI出力デバイス:"
|
||||
#define STR_MIDI_IN "MIDI入力デバイス:"
|
||||
#define STR_MPU401 "独立型MPU-401"
|
||||
#define STR_FLOAT "FLOAT32サウンドを使用する"
|
||||
#define STR_FLOAT "FLOAT32サウンドを使用"
|
||||
#define STR_FM_DRIVER "FMシンセドライバー"
|
||||
#define STR_FM_DRV_NUKED "Nuked (高精度化)"
|
||||
#define STR_FM_DRV_YMFM "YMFM (より速く)"
|
||||
#define STR_FM_DRV_NUKED "Nuked(高精度化)"
|
||||
#define STR_FM_DRV_YMFM "YMFM(より速く)"
|
||||
|
||||
#define STR_NET_TYPE "ネットワークタイプ:"
|
||||
#define STR_PCAP "PCapデバイス:"
|
||||
#define STR_NET "ネットワークアダプター:"
|
||||
#define STR_NET1 "Network card 1:"
|
||||
#define STR_NET2 "Network card 2:"
|
||||
#define STR_NET3 "Network card 3:"
|
||||
#define STR_NET4 "Network card 4:"
|
||||
#define STR_NET1 "ネットワーク カード1:"
|
||||
#define STR_NET2 "ネットワーク カード2:"
|
||||
#define STR_NET3 "ネットワーク カード3:"
|
||||
#define STR_NET4 "ネットワーク カード4:"
|
||||
|
||||
#define STR_COM1 "COM1デバイス:"
|
||||
#define STR_COM2 "COM2デバイス:"
|
||||
@@ -321,23 +321,23 @@ END
|
||||
#define STR_LPT2 "LPT2デバイス:"
|
||||
#define STR_LPT3 "LPT3デバイス:"
|
||||
#define STR_LPT4 "LPT4デバイス:"
|
||||
#define STR_SERIAL1 "シリアルポート1"
|
||||
#define STR_SERIAL2 "シリアルポート2"
|
||||
#define STR_SERIAL3 "シリアルポート3"
|
||||
#define STR_SERIAL4 "シリアルポート4"
|
||||
#define STR_PARALLEL1 "パラレルポート1"
|
||||
#define STR_PARALLEL2 "パラレルポート2"
|
||||
#define STR_PARALLEL3 "パラレルポート3"
|
||||
#define STR_PARALLEL4 "パラレルポート4"
|
||||
#define STR_SERIAL_PASS1 "Serial port passthrough 1"
|
||||
#define STR_SERIAL_PASS2 "Serial port passthrough 2"
|
||||
#define STR_SERIAL_PASS3 "Serial port passthrough 3"
|
||||
#define STR_SERIAL_PASS4 "Serial port passthrough 4"
|
||||
#define STR_SERIAL1 "シリアル ポート1"
|
||||
#define STR_SERIAL2 "シリアル ポート2"
|
||||
#define STR_SERIAL3 "シリアル ポート3"
|
||||
#define STR_SERIAL4 "シリアル ポート4"
|
||||
#define STR_PARALLEL1 "パラレル ポート1"
|
||||
#define STR_PARALLEL2 "パラレル ポート2"
|
||||
#define STR_PARALLEL3 "パラレル ポート3"
|
||||
#define STR_PARALLEL4 "パラレル ポート4"
|
||||
#define STR_SERIAL_PASS1 "シリアル ポート パススルー対応1"
|
||||
#define STR_SERIAL_PASS2 "シリアル ポート パススルー対応2"
|
||||
#define STR_SERIAL_PASS3 "シリアル ポート パススルー対応3"
|
||||
#define STR_SERIAL_PASS4 "シリアル ポート パススルー対応4"
|
||||
|
||||
#define STR_HDC "HDコントローラー:"
|
||||
#define STR_FDC "FDコントローラー:"
|
||||
#define STR_IDE_TER "第三のIDEコントローラー"
|
||||
#define STR_IDE_QUA "第四のIDEコントローラー"
|
||||
#define STR_HDC "HDDコントローラー:"
|
||||
#define STR_FDC "FDDコントローラー:"
|
||||
#define STR_IDE_TER "第三IDEコントローラー"
|
||||
#define STR_IDE_QUA "第四IDEコントローラー"
|
||||
#define STR_SCSI "SCSI"
|
||||
#define STR_SCSI_1 "コントローラー1:"
|
||||
#define STR_SCSI_2 "コントローラー2:"
|
||||
@@ -345,14 +345,14 @@ END
|
||||
#define STR_SCSI_4 "コントローラー4:"
|
||||
#define STR_CASSETTE "カセット"
|
||||
|
||||
#define STR_HDD "ハードディスク:"
|
||||
#define STR_HDD "ハード ディスク:"
|
||||
#define STR_NEW "新規(&N)..."
|
||||
#define STR_EXISTING "既定(&E)..."
|
||||
#define STR_REMOVE "除去(&R)"
|
||||
#define STR_BUS "バス:"
|
||||
#define STR_CHANNEL "チャンネル:"
|
||||
#define STR_ID "ID:"
|
||||
#define STR_SPEED "Speed:"
|
||||
#define STR_SPEED "速度:"
|
||||
|
||||
#define STR_SPECIFY "参照(&S)..."
|
||||
#define STR_SECTORS "セクター:"
|
||||
@@ -361,11 +361,11 @@ END
|
||||
#define STR_SIZE_MB "サイズ(MB):"
|
||||
#define STR_TYPE "タイプ:"
|
||||
#define STR_IMG_FORMAT "イメージ形式:"
|
||||
#define STR_BLOCK_SIZE "ブロックサイズ:"
|
||||
#define STR_BLOCK_SIZE "ブロック サイズ:"
|
||||
|
||||
#define STR_FLOPPY_DRIVES "フロッピードライブ:"
|
||||
#define STR_FLOPPY_DRIVES "フロッピー ドライブ:"
|
||||
#define STR_TURBO "高速タイミング"
|
||||
#define STR_CHECKBPB "BPBをチェック"
|
||||
#define STR_CHECKBPB "BPBチェック"
|
||||
#define STR_CDROM_DRIVES "CD-ROMドライブ:"
|
||||
#define STR_CD_SPEED "速度:"
|
||||
|
||||
@@ -374,7 +374,7 @@ END
|
||||
#define STR_250 "ZIP 250"
|
||||
|
||||
#define STR_ISARTC "ISA RTCカード:"
|
||||
#define STR_ISAMEM "ISAメモリー拡張カード"
|
||||
#define STR_ISAMEM "ISAメモリ拡張カード"
|
||||
#define STR_ISAMEM_1 "カード1:"
|
||||
#define STR_ISAMEM_2 "カード2:"
|
||||
#define STR_ISAMEM_3 "カード3:"
|
||||
@@ -409,27 +409,27 @@ BEGIN
|
||||
IDS_2060 "オン"
|
||||
IDS_2061 "オフ"
|
||||
IDS_2062 "すべてのイメージ (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0基本的なセクターイメージ (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0表面イメージ (*.86F)\0*.86F\0"
|
||||
IDS_2063 "roms/machinesディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。"
|
||||
IDS_2063 "「roms/machines」ディレクトリにROMがないため、マシン「%hs」は使用できません。使用可能なマシンに切り替えます。"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_2064 "roms/videoディレクトリにROMがないため、ビデオカード「%hs」は使用できません。使用可能なビデオカードに切り替えます。"
|
||||
IDS_2064 "「roms/video」ディレクトリにROMがないため、ビデオカード「%hs」は使用できません。使用可能なビデオカードに切り替えます。"
|
||||
IDS_2065 "マシン"
|
||||
IDS_2066 "画面表示"
|
||||
IDS_2067 "入力デバイス"
|
||||
IDS_2068 "サウンド"
|
||||
IDS_2069 "ネットワーク"
|
||||
IDS_2070 "ポート (COM & LPT)"
|
||||
IDS_2071 "ストレージコントローラ"
|
||||
IDS_2072 "ハードディスク"
|
||||
IDS_2070 "ポート (COM/LPT)"
|
||||
IDS_2071 "ストレージ コントローラ"
|
||||
IDS_2072 "ハード ディスク"
|
||||
IDS_2073 "フロッピー/CD-ROMドライブ"
|
||||
IDS_2074 "その他のリムーバブルデバイス"
|
||||
IDS_2075 "その他の周辺装置"
|
||||
IDS_2074 "他のリムーバブル デバイス"
|
||||
IDS_2075 "他の周辺デバイス"
|
||||
IDS_2076 "表面イメージ (*.86F)\0*.86F\0"
|
||||
IDS_2077 "クリックするとマウスをキャプチャします"
|
||||
IDS_2078 "F8+F12キーでマウスを解放します"
|
||||
IDS_2079 "F8+F12キーまたは中ボタンでマウスを解放します"
|
||||
IDS_2078 "F8+F12キーを押してマウスを解放します"
|
||||
IDS_2079 "F8+F12キーまたはマウスの中ボタンを押してマウスを解放します"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
@@ -441,11 +441,11 @@ BEGIN
|
||||
IDS_2085 "S"
|
||||
IDS_2086 "MB"
|
||||
IDS_2087 "Speed"
|
||||
IDS_2088 "BPBをチェック"
|
||||
IDS_2088 "BPBチェック"
|
||||
IDS_2089 "KB"
|
||||
IDS_2090 "ビデオレンダラーが初期化できません。"
|
||||
IDS_2091 "既定値"
|
||||
IDS_2092 "%iつの待機状態"
|
||||
IDS_2092 "%iつのウェイト ステート"
|
||||
IDS_2093 "タイプ"
|
||||
IDS_2094 "PCapのセットアップに失敗しました"
|
||||
IDS_2095 "PCapデバイスがありません"
|
||||
@@ -455,17 +455,17 @@ BEGIN
|
||||
IDS_2099 "標準ジョイスティック(6ボタン)"
|
||||
IDS_2100 "標準ジョイスティック(8ボタン)"
|
||||
IDS_2101 "CH Flightstick Pro"
|
||||
IDS_2102 "Microsoft SideWinder Pad"
|
||||
IDS_2103 "Thrustmaster Flight Control System"
|
||||
IDS_2102 "Microsoft SideWinderパッド"
|
||||
IDS_2103 "Thrustmaster飛行制御システム"
|
||||
IDS_2104 "なし"
|
||||
IDS_2105 "キーボードアクセラレータを読み込めません。"
|
||||
IDS_2106 "生の入力が登録できません。"
|
||||
IDS_2105 "キーボード アクセラレータを読み込めません。"
|
||||
IDS_2106 "生入力が登録できません。"
|
||||
IDS_2107 "%u"
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2108 "%u MB (CHS値: %i、%i、%i)"
|
||||
IDS_2109 "フロッピー %i (%s): %ls"
|
||||
IDS_2110 "すべてのイメージ (*.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\0アドバンスドセクターイメージ (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本セクターイメージ (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0フラックスイメージ (*.FDI)\0*.FDI\0表面イメージ (*.86F;*.MFM)\0*.86F;*.MFM\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2112 "SDLが初期化できません。SDL2.dllが必要です"
|
||||
IDS_2113 "使用中のマシンをハードリセットしますか?"
|
||||
IDS_2113 "使用中のマシンをハードリ セットしますか?"
|
||||
IDS_2114 "86Boxを終了しますか?"
|
||||
IDS_2115 "Ghostscriptが初期化できません"
|
||||
IDS_2116 "光磁気 %i (%ls): %ls"
|
||||
@@ -475,7 +475,7 @@ BEGIN
|
||||
IDS_2120 "終了"
|
||||
IDS_2121 "ROMが見つかりません"
|
||||
IDS_2122 "設定を保存しますか?"
|
||||
IDS_2123 "保存すると使用中のマシンがハードリセットされます。"
|
||||
IDS_2123 "使用中のマシンがハードリ セットされます。"
|
||||
IDS_2124 "保存"
|
||||
IDS_2125 "86Boxのバージョン情報"
|
||||
IDS_2126 "86Box v" EMU_VERSION
|
||||
@@ -489,14 +489,14 @@ BEGIN
|
||||
#define LIB_NAME_PCAP "libpcap"
|
||||
#endif
|
||||
IDS_2130 LIB_NAME_PCAP "がインストールされてるか、" LIB_NAME_PCAP "に対応したネットワークに接続されてるか確認してください。"
|
||||
IDS_2131 "不正な設定です"
|
||||
IDS_2131 "無効な設定"
|
||||
#ifdef _WIN32
|
||||
#define LIB_NAME_GS "gsdll32.dll"
|
||||
#else
|
||||
#define LIB_NAME_GS "libgs"
|
||||
#endif
|
||||
IDS_2133 "PostScriptファイルをPDFに自動変換するには" LIB_NAME_GS "が必要です。\n\n汎用PostScriptプリンターに送信されたドキュメントは、PostScript(.ps)ファイルとして保存されます。"
|
||||
IDS_2135 "フルスクリーンに切り替えています"
|
||||
IDS_2133 "PostScriptファイルをPDFに自動変換するには" LIB_NAME_GS "が必要です。\n\n汎用PostScriptプリンターに送信された文書は、PostScript (.ps) ファイルとして保存されます。"
|
||||
IDS_2135 "全画面モードを入力"
|
||||
IDS_2136 "今後、このメッセージを表示しない"
|
||||
IDS_2137 "終了しない"
|
||||
IDS_2138 "リセット"
|
||||
@@ -504,16 +504,16 @@ BEGIN
|
||||
IDS_2140 "光磁気イメージ (*.IM?;*.MDI)\0*.IM?;*.MDI\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2141 "CD-ROMイメージ (*.ISO;*.CUE)\0*.ISO;*.CUE\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2142 "%hs デバイスの設定"
|
||||
IDS_2143 "モニターのスリープモード"
|
||||
IDS_2143 "モニターのスリープ モード"
|
||||
IDS_2144 "OpenGLシェーダー (*.GLSL)\0*.GLSL\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2145 "OpenGL設定"
|
||||
IDS_2146 "サポートされていない設定を読み込んでいます"
|
||||
IDS_2147 "選択したマシンに基づくCPUタイプのフィルタリングは、このエミュレートされたマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。ただし、マシンのBIOSまたは他のソフトウェアとの互換性が失われる可能性があります。\n\nこの設定の有効化は公式サポートができません。また、バグレポートが無効として閉じられる場合があります。"
|
||||
IDS_2147 "選択したマシンに基づくCPUタイプのフィルター機能は、使用中のマシンでは無効になっています。\n\nこれにより、選択したマシンと互換性のないCPUが選択できます。しかし、マシンのBIOSや他のソフトウェアと互換性がない場合があります。\n\nこの設定を有効にすることは公式にはサポートされておらず、バグレポートは無効として中止される可能性があります。"
|
||||
IDS_2148 "続行"
|
||||
IDS_2149 "カセット: %s"
|
||||
IDS_2150 "カセットイメージ (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2150 "カセット イメージ (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2151 "カートリッジ %i: %ls"
|
||||
IDS_2152 "カートリッジイメージ (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2152 "カートリッジ イメージ (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_2153 "レンダラーの初期化エラー"
|
||||
IDS_2154 "OpenGL (3.0コア) レンダラーが初期化できませんでした。別のレンダラーを使用してください。"
|
||||
IDS_2155 "実行を再開"
|
||||
@@ -523,56 +523,56 @@ BEGIN
|
||||
IDS_2159 "ハードリセット"
|
||||
IDS_2160 "ACPIシャットダウン"
|
||||
IDS_2161 "設定"
|
||||
IDS_2162 "Type"
|
||||
IDS_2163 "No Dynarec"
|
||||
IDS_2164 "Old Dynarec"
|
||||
IDS_2165 "New Dynarec"
|
||||
IDS_2166 "Video card #2 ""%hs"" is not available due to missing ROMs in the roms/video directory. Disabling the second video card."
|
||||
IDS_2167 "Failed to initialize network driver"
|
||||
IDS_2168 "The network configuration will be switched to the null driver"
|
||||
IDS_2162 "タイプ"
|
||||
IDS_2163 "Dynarecなし"
|
||||
IDS_2164 "旧型Dynarec"
|
||||
IDS_2165 "新型Dynarec"
|
||||
IDS_2166 "「roms/video」ディレクトリにROMがないため、ビデオカード#2「%hs」は使用できません。2枚目のビデオカードを無効にします。"
|
||||
IDS_2167 "ネットワーク ドライバの初期化に失敗しました。"
|
||||
IDS_2168 "ネットワーク設定がヌル ドライバに切り替えられます"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
BEGIN
|
||||
IDS_4096 "ハードディスク (%s)"
|
||||
IDS_4096 "ハード ディスク (%s)"
|
||||
IDS_4097 "%01i:%01i"
|
||||
IDS_4098 "%01i"
|
||||
IDS_4099 "MFM/RLLまたはESDIのCD-ROMドライブが存在しません"
|
||||
IDS_4100 "カスタム..."
|
||||
IDS_4101 "カスタム (大型)..."
|
||||
IDS_4101 "カスタム (大容量)..."
|
||||
IDS_4102 "新規のディスクを追加"
|
||||
IDS_4103 "既定のディスクを追加"
|
||||
IDS_4104 "HDIディスクイメージは4GBを超えることはできません。"
|
||||
IDS_4105 "ディスクイメージは127GBを超えることはできません。"
|
||||
IDS_4106 "ハードディスクイメージ (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_4104 "HDIディスク イメージは4GBを超えることはできません。"
|
||||
IDS_4105 "ディスク イメージは127GBを超えることはできません。"
|
||||
IDS_4106 "ハード ディスク イメージ (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_4107 "ファイルの読み込みができません"
|
||||
IDS_4108 "ファイルの書き込みができません"
|
||||
IDS_4109 "512以外のセクタサイズを持つHDIまたはHDXイメージはサポートされていません。"
|
||||
IDS_4110 "USBはまだサポートされていません"
|
||||
IDS_4111 "ディスクイメージファイルが既に存在します"
|
||||
IDS_4109 "512以外のセクタ サイズを持つHDIまたはHDXイメージは対応していません。"
|
||||
IDS_4110 "USBはまだ非対応です"
|
||||
IDS_4111 "ディスク イメージ ファイルが既に存在します"
|
||||
IDS_4112 "有効なファイル名を指定してください。"
|
||||
IDS_4113 "ディスクイメージが作成されました"
|
||||
IDS_4113 "ディスク イメージが作成されました"
|
||||
IDS_4114 "ファイルが存在し、読み取り可能であることを確認してください。"
|
||||
IDS_4115 "ファイルが書き込み可能なディレクトリに保存されていることを確認してください。"
|
||||
IDS_4116 "ディスクイメージのサイズが大きすぎます"
|
||||
IDS_4116 "ディスク イメージのサイズが大きすぎます"
|
||||
IDS_4117 "新規ドライブをパーティション分割し、フォーマットを必ずしといてください。"
|
||||
IDS_4118 "選択したファイルが上書きされます。使っていいですか?"
|
||||
IDS_4119 "サポートされていないディスクイメージ"
|
||||
IDS_4118 "選択したファイルは上書きされます。よろしいですか?"
|
||||
IDS_4119 "非対応のディスク イメージ"
|
||||
IDS_4120 "上書き"
|
||||
IDS_4121 "上書きしない"
|
||||
IDS_4122 "Rawイメージ (.img)"
|
||||
IDS_4123 "HDIイメージ (.hdi)"
|
||||
IDS_4124 "HDXイメージ (.hdx)"
|
||||
IDS_4125 "VHD(容量固定)(.vhd)"
|
||||
IDS_4126 "VHD(容量可変)(.vhd)"
|
||||
IDS_4127 "VHD(差分)(.vhd)"
|
||||
IDS_4125 "VHD (容量固定) (.vhd)"
|
||||
IDS_4126 "VHD (容量可変) (.vhd)"
|
||||
IDS_4127 "VHD (差分) (.vhd)"
|
||||
IDS_4128 "大型ブロック (2 MB)"
|
||||
IDS_4129 "小型ブロック (512 KB)"
|
||||
IDS_4130 "VHDファイル (*.VHD)\0*.VHD\0すべてのファイル (*.*)\0*.*\0"
|
||||
IDS_4131 "親VHDの選択"
|
||||
IDS_4132 "親イメージがディファレンシングイメージの作成の後に修正した可能性があります。\n\nイメージファイルの移動、コピーまたはこのディスクを作成したプログラムにバグが発生した可能性があります。\n\nタイムスタンプを修正しますか?"
|
||||
IDS_4133 "親ディスクと子ディスクのタイムスタンプが一致しません"
|
||||
IDS_4134 "VHD のタイムスタンプを修正できませんでした。"
|
||||
IDS_4132 "親イメージが差分イメージの作成の後に変更される可能性があります。\n\nイメージ ファイルが移動またはコピーされたか、イメージ ファイルを作成したプログラムにバグが発生した可能性があります。\n\nタイム スタンプを修正しますか?"
|
||||
IDS_4133 "親ディスクと子ディスクのタイム スタンプが一致しません"
|
||||
IDS_4134 "VHD のタイム スタンプを修正できませんでした。"
|
||||
IDS_4135 "%01i:%02i"
|
||||
|
||||
IDS_4352 "MFM/RLL"
|
||||
@@ -624,10 +624,10 @@ BEGIN
|
||||
IDS_5910 "5.25"" 1 GB"
|
||||
IDS_5911 "5.25"" 1.3 GB"
|
||||
|
||||
IDS_6144 "規定の回転数"
|
||||
IDS_6145 "1%低い回転数"
|
||||
IDS_6146 "1.5%低い回転数"
|
||||
IDS_6147 "2%低い回転数"
|
||||
IDS_6144 "規定のRPM"
|
||||
IDS_6145 "1%低いRPM"
|
||||
IDS_6146 "1.5%低いRPM"
|
||||
IDS_6147 "2%低いRPM"
|
||||
|
||||
IDS_7168 "(システム既定値)"
|
||||
END
|
||||
|
||||
@@ -34,7 +34,7 @@ BEGIN
|
||||
MENUITEM "隐藏状态栏(&H)", IDM_VID_HIDE_STATUS_BAR
|
||||
MENUITEM "隐藏工具栏(&T)", IDM_VID_HIDE_TOOLBAR
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "Show non-primary monitors(&S)", IDM_VID_MONITORS
|
||||
MENUITEM "显示次要显示器(&S)", IDM_VID_MONITORS
|
||||
MENUITEM "窗口大小可调(&R)", IDM_VID_RESIZE
|
||||
MENUITEM "记住窗口大小和位置(&E)", IDM_VID_REMEMBER
|
||||
MENUITEM SEPARATOR
|
||||
@@ -137,10 +137,10 @@ CassetteSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新建镜像(&N)...", IDM_CASSETTE_IMAGE_NEW
|
||||
MENUITEM "新建映像(&N)...", IDM_CASSETTE_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "打开已存在的镜像(&E)...", IDM_CASSETTE_IMAGE_EXISTING
|
||||
MENUITEM "打开已存在的镜像并写保护(&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
|
||||
MENUITEM "打开已存在的映像(&E)...", IDM_CASSETTE_IMAGE_EXISTING
|
||||
MENUITEM "打开已存在的映像并写保护(&W)...", IDM_CASSETTE_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "录制(&R)", IDM_CASSETTE_RECORD
|
||||
MENUITEM "播放(&P)", IDM_CASSETTE_PLAY
|
||||
@@ -155,7 +155,7 @@ CartridgeSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "镜像(&I)...", IDM_CARTRIDGE_IMAGE
|
||||
MENUITEM "映像(&I)...", IDM_CARTRIDGE_IMAGE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "弹出(&J)", IDM_CARTRIDGE_EJECT
|
||||
END
|
||||
@@ -165,10 +165,10 @@ FloppySubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新建镜像(&N)...", IDM_FLOPPY_IMAGE_NEW
|
||||
MENUITEM "新建映像(&N)...", IDM_FLOPPY_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "打开已存在的镜像(&E)...", IDM_FLOPPY_IMAGE_EXISTING
|
||||
MENUITEM "打开已存在的镜像并写保护(&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP
|
||||
MENUITEM "打开已存在的映像(&E)...", IDM_FLOPPY_IMAGE_EXISTING
|
||||
MENUITEM "打开已存在的映像并写保护(&W)...", IDM_FLOPPY_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "导出为 86F 格式(&x)...", IDM_FLOPPY_EXPORT_TO_86F
|
||||
MENUITEM SEPARATOR
|
||||
@@ -183,9 +183,9 @@ BEGIN
|
||||
MENUITEM "静音(&M)", IDM_CDROM_MUTE
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "空置驱动器(&M)", IDM_CDROM_EMPTY
|
||||
MENUITEM "载入上一个镜像(&R)", IDM_CDROM_RELOAD
|
||||
MENUITEM "载入上一个映像(&R)", IDM_CDROM_RELOAD
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "镜像(&I)...", IDM_CDROM_IMAGE
|
||||
MENUITEM "映像(&I)...", IDM_CDROM_IMAGE
|
||||
MENUITEM "文件夹(&F)...", IDM_CDROM_DIR
|
||||
END
|
||||
END
|
||||
@@ -194,13 +194,13 @@ ZIPSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新建镜像(&N)...", IDM_ZIP_IMAGE_NEW
|
||||
MENUITEM "新建映像(&N)...", IDM_ZIP_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "打开已存在的镜像(&E)...", IDM_ZIP_IMAGE_EXISTING
|
||||
MENUITEM "打开已存在的镜像并写保护(&W)...", IDM_ZIP_IMAGE_EXISTING_WP
|
||||
MENUITEM "打开已存在的映像(&E)...", IDM_ZIP_IMAGE_EXISTING
|
||||
MENUITEM "打开已存在的映像并写保护(&W)...", IDM_ZIP_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "弹出(&J)", IDM_ZIP_EJECT
|
||||
MENUITEM "载入上一个镜像(&R)", IDM_ZIP_RELOAD
|
||||
MENUITEM "载入上一个映像(&R)", IDM_ZIP_RELOAD
|
||||
END
|
||||
END
|
||||
|
||||
@@ -208,13 +208,13 @@ MOSubmenu MENU DISCARDABLE
|
||||
BEGIN
|
||||
POPUP ""
|
||||
BEGIN
|
||||
MENUITEM "新建镜像(&N)...", IDM_MO_IMAGE_NEW
|
||||
MENUITEM "新建映像(&N)...", IDM_MO_IMAGE_NEW
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "打开已存在的镜像(&E)...", IDM_MO_IMAGE_EXISTING
|
||||
MENUITEM "打开已存在的镜像并写保护(&W)...", IDM_MO_IMAGE_EXISTING_WP
|
||||
MENUITEM "打开已存在的映像(&E)...", IDM_MO_IMAGE_EXISTING
|
||||
MENUITEM "打开已存在的映像并写保护(&W)...", IDM_MO_IMAGE_EXISTING_WP
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "弹出(&J)", IDM_MO_EJECT
|
||||
MENUITEM "载入上一个镜像(&R)", IDM_MO_RELOAD
|
||||
MENUITEM "载入上一个映像(&R)", IDM_MO_RELOAD
|
||||
END
|
||||
END
|
||||
|
||||
@@ -242,7 +242,7 @@ END
|
||||
|
||||
#define STR_PREFERENCES "首选项"
|
||||
#define STR_SND_GAIN "音量增益"
|
||||
#define STR_NEW_FLOPPY "新建镜像"
|
||||
#define STR_NEW_FLOPPY "新建映像"
|
||||
#define STR_CONFIG "设置"
|
||||
#define STR_SPECIFY_DIM "指定主窗口大小"
|
||||
|
||||
@@ -276,15 +276,15 @@ END
|
||||
#define STR_TIME_SYNC "时间同步"
|
||||
#define STR_DISABLED "禁用"
|
||||
#define STR_ENABLED_LOCAL "启用 (本地时间)"
|
||||
#define STR_ENABLED_UTC "启用 (UTC)"
|
||||
#define STR_ENABLED_UTC "启用 (协调世界时)"
|
||||
#define STR_DYNAREC "动态重编译器"
|
||||
#define STR_SOFTFLOAT "Softfloat FPU"
|
||||
#define STR_SOFTFLOAT "软浮点 FPU"
|
||||
|
||||
#define STR_VIDEO "显卡:"
|
||||
#define STR_VIDEO_2 "显卡 2:"
|
||||
#define STR_VOODOO "Voodoo Graphics"
|
||||
#define STR_IBM8514 "IBM 8514/a Graphics"
|
||||
#define STR_XGA "XGA Graphics"
|
||||
#define STR_VOODOO "Voodoo 显卡"
|
||||
#define STR_IBM8514 "IBM 8514/a 显卡"
|
||||
#define STR_XGA "XGA 显卡"
|
||||
|
||||
#define STR_MOUSE "鼠标:"
|
||||
#define STR_JOYSTICK "操纵杆:"
|
||||
@@ -308,10 +308,10 @@ END
|
||||
#define STR_NET_TYPE "网络类型:"
|
||||
#define STR_PCAP "PCap 设备:"
|
||||
#define STR_NET "网络适配器:"
|
||||
#define STR_NET1 "Network card 1:"
|
||||
#define STR_NET2 "Network card 2:"
|
||||
#define STR_NET3 "Network card 3:"
|
||||
#define STR_NET4 "Network card 4:"
|
||||
#define STR_NET1 "网卡 1:"
|
||||
#define STR_NET2 "网卡 2:"
|
||||
#define STR_NET3 "网卡 3:"
|
||||
#define STR_NET4 "网卡 4:"
|
||||
|
||||
#define STR_COM1 "COM1 设备:"
|
||||
#define STR_COM2 "COM2 设备:"
|
||||
@@ -329,10 +329,10 @@ END
|
||||
#define STR_PARALLEL2 "并口 2"
|
||||
#define STR_PARALLEL3 "并口 3"
|
||||
#define STR_PARALLEL4 "并口 4"
|
||||
#define STR_SERIAL_PASS1 "Serial port passthrough 1"
|
||||
#define STR_SERIAL_PASS2 "Serial port passthrough 2"
|
||||
#define STR_SERIAL_PASS3 "Serial port passthrough 3"
|
||||
#define STR_SERIAL_PASS4 "Serial port passthrough 4"
|
||||
#define STR_SERIAL_PASS1 "串口直通 1"
|
||||
#define STR_SERIAL_PASS2 "串口直通 2"
|
||||
#define STR_SERIAL_PASS3 "串口直通 3"
|
||||
#define STR_SERIAL_PASS4 "串口直通 4"
|
||||
|
||||
#define STR_HDC "硬盘控制器:"
|
||||
#define STR_FDC "软盘控制器:"
|
||||
@@ -347,12 +347,12 @@ END
|
||||
|
||||
#define STR_HDD "硬盘:"
|
||||
#define STR_NEW "新建(&N)..."
|
||||
#define STR_EXISTING "已有镜像(&E)..."
|
||||
#define STR_EXISTING "已有映像(&E)..."
|
||||
#define STR_REMOVE "移除(&R)"
|
||||
#define STR_BUS "总线:"
|
||||
#define STR_CHANNEL "通道:"
|
||||
#define STR_ID "ID:"
|
||||
#define STR_SPEED "Speed:"
|
||||
#define STR_SPEED "速度:"
|
||||
|
||||
#define STR_SPECIFY "指定(&S)..."
|
||||
#define STR_SECTORS "扇区(S):"
|
||||
@@ -360,7 +360,7 @@ END
|
||||
#define STR_CYLS "柱面(C):"
|
||||
#define STR_SIZE_MB "大小 (MB):"
|
||||
#define STR_TYPE "类型:"
|
||||
#define STR_IMG_FORMAT "镜像格式:"
|
||||
#define STR_IMG_FORMAT "映像格式:"
|
||||
#define STR_BLOCK_SIZE "块大小:"
|
||||
|
||||
#define STR_FLOPPY_DRIVES "软盘驱动器:"
|
||||
@@ -401,14 +401,14 @@ BEGIN
|
||||
IDS_2052 "按下 Ctrl+Alt+PgDn 返回到窗口模式。"
|
||||
IDS_2053 "速度"
|
||||
IDS_2054 "ZIP %03i %i (%s): %ls"
|
||||
IDS_2055 "ZIP 镜像 (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
|
||||
IDS_2056 "86Box 找不到任何可用的 ROM 镜像。\n\n请<a href=""https://github.com/86Box/roms/releases/latest"">下载</a>ROM 包并将其解压到 ""roms"" 文件夹。"
|
||||
IDS_2055 "ZIP 映像 (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0"
|
||||
IDS_2056 "86Box 找不到任何可用的 ROM 映像。\n\n请<a href=""https://github.com/86Box/roms/releases/latest"">下载</a>ROM 包并将其解压到 ""roms"" 文件夹中。"
|
||||
IDS_2057 "(空)"
|
||||
IDS_2058 "ZIP 镜像 (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2058 "ZIP 映像 (*.IM?;*.ZDI)\0*.IM?;*.ZDI\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2059 "加速"
|
||||
IDS_2060 "开"
|
||||
IDS_2061 "关"
|
||||
IDS_2062 "所有镜像 (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0基本扇区镜像 (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0表面镜像 (*.86F)\0*.86F\0"
|
||||
IDS_2062 "所有映像 (*.86F;*.DSK;*.FLP;*.IM?;*.*FD?)\0*.86F;*.DSK;*.FLP;*.IM?;*.*FD?\0基本扇区映像 (*.DSK;*.FLP;*.IM?;*.*FD?)\0*.DSK;*.FLP;*.IM?;*.IMG;*.*FD?\0表面映像 (*.86F)\0*.86F\0"
|
||||
IDS_2063 "由于 roms/machines 文件夹中缺少合适的 ROM,机型 ""%hs"" 不可用。将切换到其他可用机型。"
|
||||
END
|
||||
|
||||
@@ -426,7 +426,7 @@ BEGIN
|
||||
IDS_2073 "软盘/光盘驱动器"
|
||||
IDS_2074 "其他可移动设备"
|
||||
IDS_2075 "其他外围设备"
|
||||
IDS_2076 "表面镜像 (*.86F)\0*.86F\0"
|
||||
IDS_2076 "表面映像 (*.86F)\0*.86F\0"
|
||||
IDS_2077 "单击窗口捕捉鼠标"
|
||||
IDS_2078 "按下 F8+F12 释放鼠标"
|
||||
IDS_2079 "按下 F8+F12 或鼠标中键释放鼠标"
|
||||
@@ -440,7 +440,7 @@ BEGIN
|
||||
IDS_2084 "H"
|
||||
IDS_2085 "S"
|
||||
IDS_2086 "MB"
|
||||
IDS_2087 "Speed"
|
||||
IDS_2087 "速度"
|
||||
IDS_2088 "检查 BPB"
|
||||
IDS_2089 "KB"
|
||||
IDS_2090 "无法初始化视频渲染器。"
|
||||
@@ -463,13 +463,13 @@ BEGIN
|
||||
IDS_2107 "%u"
|
||||
IDS_2108 "%u MB (CHS: %i, %i, %i)"
|
||||
IDS_2109 "软盘 %i (%s): %ls"
|
||||
IDS_2110 "所有镜像 (*.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\0高级扇区镜像 (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本扇区镜像 (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux 镜像 (*.FDI)\0*.FDI\0表面镜像 (*.86F;*.MFM)\0*.86F;*.MFM\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2110 "所有映像 (*.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\0高级扇区映像 (*.IMD;*.JSON;*.TD0)\0*.IMD;*.JSON;*.TD0\0基本扇区映像 (*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?)\0*.0??;*.1??;*.??0;*.BIN;*.CQ?;*.D??;*.FLP;*.HDM;*.IM?;*.XDF;*.*FD?\0Flux 映像 (*.FDI)\0*.FDI\0表面映像 (*.86F;*.MFM)\0*.86F;*.MFM\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2112 "无法初始化 SDL,需要 SDL2.dll"
|
||||
IDS_2113 "确定要硬重置模拟器吗?"
|
||||
IDS_2114 "确定要退出 86Box 吗?"
|
||||
IDS_2115 "无法初始化 Ghostscript"
|
||||
IDS_2116 "磁光盘 %i (%ls): %ls"
|
||||
IDS_2117 "磁光盘镜像 (*.IM?;*.MDI)\0*.IM?;*.MDI\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2117 "磁光盘映像 (*.IM?;*.MDI)\0*.IM?;*.MDI\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2118 "欢迎使用 86Box!"
|
||||
IDS_2119 "内部控制器"
|
||||
IDS_2120 "退出"
|
||||
@@ -480,7 +480,7 @@ BEGIN
|
||||
IDS_2125 "关于 86Box"
|
||||
IDS_2126 "86Box v" EMU_VERSION
|
||||
|
||||
IDS_2127 "一个旧式计算机模拟器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\nWith previous core contributions from Sarah Walker、leilei、JohnElliott、greatpsycho 等人。\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。"
|
||||
IDS_2127 "一个旧式计算机模拟器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\n本软件依据 GNU 通用公共许可证第二版或更新版本发布。详情见 LICENSE 文件。"
|
||||
IDS_2128 "确定"
|
||||
IDS_2129 "硬件不可用"
|
||||
#ifdef _WIN32
|
||||
@@ -497,12 +497,12 @@ BEGIN
|
||||
#endif
|
||||
IDS_2133 LIB_NAME_GS " 是将 PostScript 文件转换为 PDF 所需要的库。\n\n使用通用 PostScript 打印机打印的文档将被保存为 PostScript (.ps) 文件。"
|
||||
IDS_2135 "正在进入全屏模式"
|
||||
IDS_2136 "不要再显示此消息"
|
||||
IDS_2136 "不再显示此消息"
|
||||
IDS_2137 "不退出"
|
||||
IDS_2138 "重置"
|
||||
IDS_2139 "不重置"
|
||||
IDS_2140 "磁光盘镜像 (*.IM?;*.MDI)\0*.IM?;*.MDI\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2141 "光盘镜像 (*.ISO;*.CUE)\0*.ISO;*.CUE\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2140 "磁光盘映像 (*.IM?;*.MDI)\0*.IM?;*.MDI\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2141 "光盘映像 (*.ISO;*.CUE)\0*.ISO;*.CUE\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2142 "%hs 设备配置"
|
||||
IDS_2143 "显示器处在睡眠状态"
|
||||
IDS_2144 "OpenGL 着色器 (*.GLSL)\0*.GLSL\0所有文件 (*.*)\0*.*\0"
|
||||
@@ -511,9 +511,9 @@ BEGIN
|
||||
IDS_2147 "此模拟计算机禁用了基于选定计算机的 CPU 类型过滤。\n\n能够选中与所选机器本不兼容的 CPU,但是可能会遇到与机器 BIOS 或其他软件不兼容的问题。\n\n启用此设置不受官方支持,并且提交的任何错误报告可能会视为无效而关闭。"
|
||||
IDS_2148 "继续"
|
||||
IDS_2149 "磁带: %s"
|
||||
IDS_2150 "磁带镜像 (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2150 "磁带映像 (*.PCM;*.RAW;*.WAV;*.CAS)\0*.PCM;*.RAW;*.WAV;*.CAS\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2151 "卡带 %i: %ls"
|
||||
IDS_2152 "卡带镜像 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2152 "卡带映像 (*.A;*.B;*.JRC)\0*.A;*.B;*.JRC\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_2153 "初始化渲染器时出错"
|
||||
IDS_2154 "无法初始化 OpenGL (3.0 核心) 渲染器。请使用其他渲染器。"
|
||||
IDS_2155 "恢复执行"
|
||||
@@ -523,13 +523,13 @@ BEGIN
|
||||
IDS_2159 "硬重置"
|
||||
IDS_2160 "ACPI 关机"
|
||||
IDS_2161 "设置"
|
||||
IDS_2162 "Type"
|
||||
IDS_2163 "No Dynarec"
|
||||
IDS_2164 "Old Dynarec"
|
||||
IDS_2165 "New Dynarec"
|
||||
IDS_2166 "Video card #2 ""%hs"" is not available due to missing ROMs in the roms/video directory. Disabling the second video card."
|
||||
IDS_2167 "Failed to initialize network driver"
|
||||
IDS_2168 "The network configuration will be switched to the null driver"
|
||||
IDS_2162 "类型"
|
||||
IDS_2163 "无动态重编译"
|
||||
IDS_2164 "旧式动态重编译"
|
||||
IDS_2165 "新式动态重编译"
|
||||
IDS_2166 "由于 roms/video 文件夹中缺少合适的 ROM,显卡 #2 ""%hs"" 不可用。将禁用第二张显卡。"
|
||||
IDS_2167 "初始化网络驱动程序失败"
|
||||
IDS_2168 "网络配置将切换为空驱动程序"
|
||||
END
|
||||
|
||||
STRINGTABLE DISCARDABLE
|
||||
@@ -542,27 +542,27 @@ BEGIN
|
||||
IDS_4101 "自定义 (大容量)..."
|
||||
IDS_4102 "添加新硬盘"
|
||||
IDS_4103 "添加已存在的硬盘"
|
||||
IDS_4104 "HDI 磁盘镜像不能超过 4 GB。"
|
||||
IDS_4105 "磁盘镜像不能超过 127 GB。"
|
||||
IDS_4106 "硬盘镜像 (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_4104 "HDI 磁盘映像不能超过 4 GB。"
|
||||
IDS_4105 "磁盘映像不能超过 127 GB。"
|
||||
IDS_4106 "硬盘映像 (*.HD?;*.IM?;*.VHD)\0*.HD?;*.IM?;*.VHD\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_4107 "无法读取文件"
|
||||
IDS_4108 "无法写入文件"
|
||||
IDS_4109 "不支持非 512 字节扇区大小的 HDI 或 HDX 镜像。"
|
||||
IDS_4109 "不支持非 512 字节扇区大小的 HDI 或 HDX 映像。"
|
||||
IDS_4110 "尚未支持 USB"
|
||||
IDS_4111 "磁盘镜像文件已存在"
|
||||
IDS_4111 "磁盘映像文件已存在"
|
||||
IDS_4112 "请指定有效的文件名。"
|
||||
IDS_4113 "已创建磁盘镜像"
|
||||
IDS_4113 "已创建磁盘映像"
|
||||
IDS_4114 "请确定此文件已存在并可读取。"
|
||||
IDS_4115 "请确定此文件保存在可写目录中。"
|
||||
IDS_4116 "磁盘镜像太大"
|
||||
IDS_4117 "请记得为新创建的镜像分区并格式化。"
|
||||
IDS_4116 "磁盘映像太大"
|
||||
IDS_4117 "请记得为新创建的映像分区并格式化。"
|
||||
IDS_4118 "选定的文件将被覆盖。确定继续使用此文件吗?"
|
||||
IDS_4119 "不支持的磁盘镜像"
|
||||
IDS_4119 "不支持的磁盘映像"
|
||||
IDS_4120 "覆盖"
|
||||
IDS_4121 "不覆盖"
|
||||
IDS_4122 "原始镜像 (.img)"
|
||||
IDS_4123 "HDI 镜像 (.hdi)"
|
||||
IDS_4124 "HDX 镜像 (.hdx)"
|
||||
IDS_4122 "原始映像 (.img)"
|
||||
IDS_4123 "HDI 映像 (.hdi)"
|
||||
IDS_4124 "HDX 映像 (.hdx)"
|
||||
IDS_4125 "固定大小 VHD (.vhd)"
|
||||
IDS_4126 "动态大小 VHD (.vhd)"
|
||||
IDS_4127 "差分 VHD (.vhd)"
|
||||
@@ -570,7 +570,7 @@ BEGIN
|
||||
IDS_4129 "小块 (512 KB)"
|
||||
IDS_4130 "VHD 文件 (*.VHD)\0*.VHD\0所有文件 (*.*)\0*.*\0"
|
||||
IDS_4131 "选择父 VHD 文件"
|
||||
IDS_4132 "父映像可能在创建差异镜像后被修改。\n\n如果镜像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。\n\n是否需要修复时间戳?"
|
||||
IDS_4132 "父映像可能在创建差异映像后被修改。\n\n如果映像文件被移动或复制,或创建此磁盘的程序中存在错误,也可能发生这种情况。\n\n是否需要修复时间戳?"
|
||||
IDS_4133 "父盘与子盘的时间戳不匹配"
|
||||
IDS_4134 "无法修复 VHD 时间戳。"
|
||||
IDS_4135 "%01i:%02i"
|
||||
|
||||
@@ -480,7 +480,7 @@ BEGIN
|
||||
IDS_2125 "關於 86Box"
|
||||
IDS_2126 "86Box v" EMU_VERSION
|
||||
|
||||
IDS_2127 "一個舊式電腦模擬器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\nWith previous core contributions from Sarah Walker、leilei、JohnElliott、greatpsycho 等人。\n\n本軟體依據 GNU 通用公共授權第二版或更新版本發布。詳情見 LICENSE 檔案。"
|
||||
IDS_2127 "一個舊式電腦模擬器\n\n作者: Miran Grča (OBattler)、RichardG867、Jasmine Iwanek、TC1995、coldbrewed、Teemu Korhonen (Manaatti)、Joakim L. Gilje、Adrien Moulin (elyosh)、Daniel Balsom (gloriouscow)、Cacodemon345、Fred N. van Kempen (waltje)、Tiseno100、reenigne 等人。\n\nWith previous core contributions from Sarah Walker, leilei, JohnElliott, greatpsycho, and others.\n\n本軟體依據 GNU 通用公共授權第二版或更新版本發布。詳情見 LICENSE 檔案。"
|
||||
IDS_2128 "確定"
|
||||
IDS_2129 "硬體不可用"
|
||||
#ifdef _WIN32
|
||||
|
||||
@@ -739,7 +739,7 @@ NewFloppyDialogProcedure(HWND hdlg, UINT message, WPARAM wParam, UNUSED(LPARAM l
|
||||
new_floppy_msgbox_header(hdlg, MBX_ERROR, (wchar_t *) IDS_4108, (wchar_t *) IDS_4115);
|
||||
return TRUE;
|
||||
}
|
||||
/*FALLTHROUGH*/
|
||||
fallthrough;
|
||||
case IDCANCEL:
|
||||
EndDialog(hdlg, 0);
|
||||
plat_pause(0);
|
||||
|
||||
@@ -688,6 +688,18 @@ win_settings_save(void)
|
||||
pc_reset_hard_init();
|
||||
}
|
||||
|
||||
static void
|
||||
win_settings_machine_recalc_softfloat(HWND hdlg)
|
||||
{
|
||||
if (temp_fpu == FPU_NONE) {
|
||||
settings_set_check(hdlg, IDC_CHECK_SOFTFLOAT, FALSE);
|
||||
settings_enable_window(hdlg, IDC_CHECK_SOFTFLOAT, FALSE);
|
||||
} else {
|
||||
settings_set_check(hdlg, IDC_CHECK_SOFTFLOAT, (machine_has_flags(temp_machine, MACHINE_SOFTFLOAT_ONLY) ? TRUE : temp_fpu_softfloat));
|
||||
settings_enable_window(hdlg, IDC_CHECK_SOFTFLOAT, (machine_has_flags(temp_machine, MACHINE_SOFTFLOAT_ONLY) ? FALSE : TRUE));
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
win_settings_machine_recalc_fpu(HWND hdlg)
|
||||
{
|
||||
@@ -714,12 +726,11 @@ win_settings_machine_recalc_fpu(HWND hdlg)
|
||||
c++;
|
||||
}
|
||||
|
||||
settings_set_check(hdlg, IDC_CHECK_SOFTFLOAT, (machine_has_flags(temp_machine, MACHINE_SOFTFLOAT_ONLY) ? TRUE : temp_fpu_softfloat));
|
||||
settings_enable_window(hdlg, IDC_CHECK_SOFTFLOAT, (machine_has_flags(temp_machine, MACHINE_SOFTFLOAT_ONLY) ? FALSE : TRUE));
|
||||
|
||||
settings_enable_window(hdlg, IDC_COMBO_FPU, c > 1);
|
||||
|
||||
temp_fpu = fpu_get_type_from_index(temp_cpu_f, temp_cpu, settings_get_cur_sel(hdlg, IDC_COMBO_FPU));
|
||||
|
||||
win_settings_machine_recalc_softfloat(hdlg);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -737,7 +748,7 @@ win_settings_machine_recalc_cpu(HWND hdlg)
|
||||
cpu_flags = temp_cpu_f->cpus[temp_cpu].cpu_flags;
|
||||
if (!(cpu_flags & CPU_SUPPORTS_DYNAREC) && (cpu_flags & CPU_REQUIRES_DYNAREC))
|
||||
fatal("Attempting to select a CPU that requires the recompiler and does not support it at the same time\n");
|
||||
if (!(cpu_flags & CPU_SUPPORTS_DYNAREC) || (cpu_flags & CPU_REQUIRES_DYNAREC)) {
|
||||
if (!(cpu_flags & CPU_SUPPORTS_DYNAREC) || ((cpu_flags & CPU_REQUIRES_DYNAREC) && !cpu_override)) {
|
||||
if (!(cpu_flags & CPU_SUPPORTS_DYNAREC))
|
||||
temp_dynarec = 0;
|
||||
if (cpu_flags & CPU_REQUIRES_DYNAREC)
|
||||
@@ -1046,6 +1057,7 @@ win_settings_machine_proc(HWND hdlg, UINT message, WPARAM wParam, UNUSED(LPARAM
|
||||
temp_fpu = fpu_get_type_from_index(temp_cpu_f, temp_cpu,
|
||||
settings_get_cur_sel(hdlg, IDC_COMBO_FPU));
|
||||
}
|
||||
win_settings_machine_recalc_softfloat(hdlg);
|
||||
break;
|
||||
case IDC_CONFIGURE_MACHINE:
|
||||
temp_machine = listtomachine[settings_get_cur_sel(hdlg, IDC_COMBO_MACHINE)];
|
||||
@@ -4384,7 +4396,7 @@ win_settings_mo_drives_init_columns(HWND hdlg)
|
||||
static void
|
||||
win_settings_zip_drives_resize_columns(HWND hdlg)
|
||||
{
|
||||
int width[C_COLUMNS_MO_DRIVES] = {
|
||||
int width[C_COLUMNS_ZIP_DRIVES] = {
|
||||
C_COLUMNS_ZIP_DRIVES_BUS,
|
||||
C_COLUMNS_ZIP_DRIVES_TYPE
|
||||
};
|
||||
@@ -4701,12 +4713,12 @@ cdrom_recalc_location_controls(HWND hdlg, int assign_id)
|
||||
settings_show_window(hdlg, IDC_COMBO_CD_SPEED, bus != CDROM_BUS_DISABLED);
|
||||
settings_show_window(hdlg, IDT_CD_SPEED, bus != CDROM_BUS_DISABLED);
|
||||
#if 0
|
||||
settings_show_window(hdlg, IDC_CHECKEARLY, bus != CDROM_BUS_DISABLED);
|
||||
settings_show_window(hdlg, IDC_COMBO_CD_TYPE, bus != CDROM_BUS_DISABLED);
|
||||
#endif
|
||||
if (bus != CDROM_BUS_DISABLED) {
|
||||
settings_set_cur_sel(hdlg, IDC_COMBO_CD_SPEED, temp_cdrom[lv2_current_sel].speed - 1);
|
||||
#if 0
|
||||
settings_set_check(hdlg, IDC_CHECKEARLY, temp_cdrom[lv2_current_sel].early);
|
||||
settings_set_check(hdlg, IDC_COMBO_CD_TYPE, temp_cdrom[lv2_current_sel].early);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -4912,7 +4924,7 @@ static void
|
||||
mo_track(uint8_t id)
|
||||
{
|
||||
if (temp_mo_drives[id].bus_type == MO_BUS_ATAPI)
|
||||
ide_tracking |= (1 << (temp_zip_drives[id].ide_channel << 3));
|
||||
ide_tracking |= (1 << (temp_mo_drives[id].ide_channel << 3));
|
||||
else if (temp_mo_drives[id].bus_type == MO_BUS_SCSI)
|
||||
scsi_tracking[temp_mo_drives[id].scsi_device_id >> 3] |= (1 << (temp_mo_drives[id].scsi_device_id & 0x07));
|
||||
}
|
||||
@@ -4921,7 +4933,7 @@ static void
|
||||
mo_untrack(uint8_t id)
|
||||
{
|
||||
if (temp_mo_drives[id].bus_type == MO_BUS_ATAPI)
|
||||
ide_tracking &= ~(1 << (temp_zip_drives[id].ide_channel << 3));
|
||||
ide_tracking &= ~(1 << (temp_mo_drives[id].ide_channel << 3));
|
||||
else if (temp_mo_drives[id].bus_type == MO_BUS_SCSI)
|
||||
scsi_tracking[temp_mo_drives[id].scsi_device_id >> 3] &= ~(1 << (temp_mo_drives[id].scsi_device_id & 0x07));
|
||||
}
|
||||
@@ -5098,8 +5110,8 @@ win_settings_floppy_and_cdrom_drives_proc(HWND hdlg, UINT message, WPARAM wParam
|
||||
break;
|
||||
|
||||
#if 0
|
||||
case IDC_CHECKEARLY:
|
||||
temp_cdrom[lv2_current_sel].early = settings_get_check(hdlg, IDC_CHECKEARLY);
|
||||
case IDC_COMBO_CD_TYPE::
|
||||
temp_cdrom[lv2_current_sel].early = settings_get_check(hdlg, IDC_COMBO_CD_TYPE:);
|
||||
win_settings_cdrom_drives_update_item(hdlg, lv2_current_sel);
|
||||
break;
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user