mirror of
https://github.com/86Box/86Box.git
synced 2026-02-23 09:58:19 -07:00
Merge remote-tracking branch 'upstream/master' into feature/ich2
This commit is contained in:
@@ -167,7 +167,7 @@ i420ex_drb_recalc(i420ex_t *dev)
|
||||
{
|
||||
uint32_t boundary;
|
||||
|
||||
for (uint8_t i = 4; i >= 0; i--)
|
||||
for (int8_t i = 4; i >= 0; i--)
|
||||
row_disable(i);
|
||||
|
||||
for (uint8_t i = 0; i <= 4; i++) {
|
||||
|
||||
@@ -450,7 +450,7 @@ retry_vhd:
|
||||
else
|
||||
fatal("hdd_image_load(): VHD: Error opening VHD file '%s': %s\n", fn, mvhd_strerr(vhd_error));
|
||||
} else if (vhd_error == MVHD_ERR_TIMESTAMP) {
|
||||
fatal("hdd_image_load(): VHD: Parent/child timestamp mismatch for VHD file '%s'\n", fn);
|
||||
pclog("hdd_image_load(): VHD: Parent/child timestamp mismatch for VHD file '%s'\n", fn);
|
||||
}
|
||||
|
||||
hdd[id].tracks = hdd_images[id].vhd->footer.geom.cyl;
|
||||
|
||||
@@ -214,7 +214,7 @@ row_reset(UNUSED(void *priv))
|
||||
uint32_t boundary;
|
||||
uint32_t shift;
|
||||
|
||||
for (uint8_t i = (rows_num - 1); i >= 0; i--)
|
||||
for (int8_t i = (rows_num - 1); i >= 0; i--)
|
||||
row_disable(i);
|
||||
|
||||
for (uint8_t i = 0; i < rows_num; i++) {
|
||||
|
||||
@@ -182,7 +182,7 @@ msgid "Take s&creenshot\tCtrl+F11"
|
||||
msgstr "擷圖(&C)\tCtrl+F11"
|
||||
|
||||
msgid "&Preferences..."
|
||||
msgstr "首選項(&P)..."
|
||||
msgstr "偏好設定(&P)..."
|
||||
|
||||
msgid "Enable &Discord integration"
|
||||
msgstr "啟用 Discord 整合(&D)"
|
||||
@@ -278,7 +278,7 @@ msgid "&Remove shader"
|
||||
msgstr "移除著色器(&R)"
|
||||
|
||||
msgid "Preferences"
|
||||
msgstr "首選項"
|
||||
msgstr "偏好設定"
|
||||
|
||||
msgid "Sound Gain"
|
||||
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 輸出裝置:"
|
||||
@@ -557,7 +557,7 @@ msgid "Heads:"
|
||||
msgstr "磁頭(H):"
|
||||
|
||||
msgid "Cylinders:"
|
||||
msgstr "柱面(C):"
|
||||
msgstr "磁柱(C):"
|
||||
|
||||
msgid "Size (MB):"
|
||||
msgstr "大小 (MB):"
|
||||
|
||||
@@ -621,27 +621,16 @@ mach64_updatemapping(mach64_t *mach64)
|
||||
/*8 MB aperture*/
|
||||
mem_mapping_set_addr(&mach64->linear_mapping, mach64->linear_base, (8 << 20) - 0x4000);
|
||||
mem_mapping_set_addr(&mach64->mmio_linear_mapping, mach64->linear_base + ((8 << 20) - 0x4000), 0x4000);
|
||||
} else if ((mach64->config_cntl & 3) == 1) {
|
||||
} else {
|
||||
/*4 MB aperture*/
|
||||
mem_mapping_set_addr(&mach64->linear_mapping, mach64->linear_base, (4 << 20) - 0x4000);
|
||||
mem_mapping_set_addr(&mach64->mmio_linear_mapping, mach64->linear_base + ((4 << 20) - 0x4000), 0x4000);
|
||||
} else {
|
||||
/*Disable aperture on reserved values*/
|
||||
mem_mapping_disable(&mach64->linear_mapping);
|
||||
mem_mapping_disable(&mach64->mmio_linear_mapping);
|
||||
}
|
||||
} else {
|
||||
if ((mach64->config_cntl & 3) == 2) {
|
||||
/*2*8 MB aperture*/
|
||||
mem_mapping_set_addr(&mach64->linear_mapping, mach64->linear_base, (8 << 20) - 0x4000);
|
||||
mem_mapping_set_addr(&mach64->mmio_linear_mapping, mach64->linear_base + ((8 << 20) - 0x4000), 0x4000);
|
||||
mem_mapping_set_addr(&mach64->mmio_linear_mapping_2, mach64->linear_base + ((16 << 20) - 0x4000), 0x4000);
|
||||
} else {
|
||||
/*Disable aperture on reserved values*/
|
||||
mem_mapping_disable(&mach64->linear_mapping);
|
||||
mem_mapping_disable(&mach64->mmio_linear_mapping);
|
||||
mem_mapping_disable(&mach64->mmio_linear_mapping_2);
|
||||
}
|
||||
/*2*8 MB aperture*/
|
||||
mem_mapping_set_addr(&mach64->linear_mapping, mach64->linear_base, (8 << 20) - 0x4000);
|
||||
mem_mapping_set_addr(&mach64->mmio_linear_mapping, mach64->linear_base + ((8 << 20) - 0x4000), 0x4000);
|
||||
mem_mapping_set_addr(&mach64->mmio_linear_mapping_2, mach64->linear_base + ((16 << 20) - 0x4000), 0x4000);
|
||||
}
|
||||
} else {
|
||||
mem_mapping_disable(&mach64->linear_mapping);
|
||||
|
||||
@@ -279,6 +279,7 @@ typedef struct virge_t {
|
||||
uint32_t dma_ptr;
|
||||
uint64_t blitter_time;
|
||||
volatile int fifo_slot;
|
||||
int fifo_slots_num;
|
||||
|
||||
pc_timer_t tri_timer;
|
||||
|
||||
@@ -1031,6 +1032,8 @@ s3_virge_mmio_fifo_write_l(uint32_t addr, uint32_t val, virge_t *virge)
|
||||
else
|
||||
s3_virge_bitblt(virge, 32, val);
|
||||
} else {
|
||||
if (virge->fifo_slot >= virge->fifo_slots_num)
|
||||
return;
|
||||
virge->fifo_slot++;
|
||||
switch (addr & 0xfffc) {
|
||||
case 0x8590:
|
||||
@@ -1480,16 +1483,25 @@ s3_virge_mmio_read(uint32_t addr, void *priv)
|
||||
|
||||
switch (addr & 0xffff) {
|
||||
case 0x8505:
|
||||
ret = 0;
|
||||
if (virge->s3d_busy || virge->fifo_slot) {
|
||||
ret = 0x10;
|
||||
} else {
|
||||
ret = 0x30;
|
||||
}
|
||||
ret = 0xc0;
|
||||
if (!virge->s3d_busy && !virge->fifo_slot)
|
||||
ret |= 0x20;
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
ret |= (virge->fifo_slots_num - virge->fifo_slot);
|
||||
return ret;
|
||||
|
||||
case 0x850c:
|
||||
ret = virge->advfunc_cntl & 0x3f;
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
ret |= (virge->fifo_slots_num - virge->fifo_slot) << 6;
|
||||
ret &= 0xff;
|
||||
break;
|
||||
case 0x850d:
|
||||
ret = (virge->fifo_slots_num - virge->fifo_slot) >> 2;
|
||||
break;
|
||||
|
||||
case 0x83b0:
|
||||
case 0x83b1:
|
||||
case 0x83b2:
|
||||
@@ -1564,15 +1576,25 @@ s3_virge_mmio_read_w(uint32_t addr, void *priv)
|
||||
|
||||
switch (addr & 0xfffe) {
|
||||
case 0x8504:
|
||||
ret = 0xc000;
|
||||
if (!virge->s3d_busy && !virge->fifo_slot)
|
||||
ret |= 0x2000;
|
||||
if (!virge->fifo_slot)
|
||||
virge->subsys_stat |= INT_FIFO_EMP;
|
||||
ret |= virge->subsys_stat;
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
ret |= 0x30; /*A bit of a workaround at the moment.*/
|
||||
ret |= (virge->fifo_slots_num - virge->fifo_slot) << 8;
|
||||
s3_virge_update_irqs(virge);
|
||||
return ret;
|
||||
|
||||
case 0x850c:
|
||||
ret = virge->advfunc_cntl & 0x3f;
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
ret |= (virge->fifo_slots_num - virge->fifo_slot) << 6;
|
||||
break;
|
||||
|
||||
case 0x859c:
|
||||
return virge->cmd_dma;
|
||||
|
||||
@@ -1660,10 +1682,9 @@ s3_virge_mmio_read_l(uint32_t addr, void *priv)
|
||||
break;
|
||||
|
||||
case 0x8504:
|
||||
if (virge->s3d_busy || virge->fifo_slot) {
|
||||
ret = (0x10 << 8);
|
||||
} else {
|
||||
ret = (0x10 << 8) | (1 << 13);
|
||||
ret = 0x0000c000;
|
||||
if (!virge->s3d_busy && !virge->fifo_slot) {
|
||||
ret |= 0x00002000;
|
||||
if (!virge->s3d_busy)
|
||||
virge->subsys_stat |= INT_3DF_EMP;
|
||||
if (!virge->fifo_slot)
|
||||
@@ -1672,9 +1693,17 @@ s3_virge_mmio_read_l(uint32_t addr, void *priv)
|
||||
ret |= virge->subsys_stat;
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
ret |= (virge->fifo_slots_num - virge->fifo_slot) << 8;
|
||||
s3_virge_update_irqs(virge);
|
||||
break;
|
||||
|
||||
case 0x850c:
|
||||
ret = virge->advfunc_cntl & 0x3f;
|
||||
if (virge->fifo_slot)
|
||||
virge->fifo_slot--;
|
||||
ret |= (virge->fifo_slots_num - virge->fifo_slot) << 6;
|
||||
break;
|
||||
|
||||
case 0x8590:
|
||||
ret = virge->cmd_dma_base;
|
||||
break;
|
||||
@@ -3498,26 +3527,41 @@ s3_virge_hwcursor_draw(svga_t *svga, int displine)
|
||||
svga->hwcursor_latch.addr += 16;
|
||||
|
||||
switch (svga->bpp) {
|
||||
default:
|
||||
if (virge->chip != S3_VIRGEGX2) {
|
||||
fg = svga->pallook[virge->hwc_fg_col & 0xff];
|
||||
bg = svga->pallook[virge->hwc_bg_col & 0xff];
|
||||
break;
|
||||
}
|
||||
#ifdef FALLTHROUGH_ANNOTATION
|
||||
[[fallthrough]];
|
||||
#endif
|
||||
|
||||
case 15:
|
||||
fg = video_15to32[virge->hwc_fg_col & 0xffff];
|
||||
bg = video_15to32[virge->hwc_bg_col & 0xffff];
|
||||
break;
|
||||
if (virge->chip != S3_VIRGEGX2) {
|
||||
fg = video_15to32[virge->hwc_fg_col & 0xffff];
|
||||
bg = video_15to32[virge->hwc_bg_col & 0xffff];
|
||||
break;
|
||||
}
|
||||
#ifdef FALLTHROUGH_ANNOTATION
|
||||
[[fallthrough]];
|
||||
#endif
|
||||
|
||||
case 16:
|
||||
fg = video_16to32[virge->hwc_fg_col & 0xffff];
|
||||
bg = video_16to32[virge->hwc_bg_col & 0xffff];
|
||||
break;
|
||||
if (virge->chip != S3_VIRGEGX2) {
|
||||
fg = video_16to32[virge->hwc_fg_col & 0xffff];
|
||||
bg = video_16to32[virge->hwc_bg_col & 0xffff];
|
||||
break;
|
||||
}
|
||||
#ifdef FALLTHROUGH_ANNOTATION
|
||||
[[fallthrough]];
|
||||
#endif
|
||||
|
||||
case 24:
|
||||
case 32:
|
||||
fg = virge->hwc_fg_col;
|
||||
bg = virge->hwc_bg_col;
|
||||
break;
|
||||
|
||||
default:
|
||||
fg = svga->pallook[virge->hwc_fg_col & 0xff];
|
||||
bg = svga->pallook[virge->hwc_bg_col & 0xff];
|
||||
break;
|
||||
}
|
||||
|
||||
for (uint8_t x = 0; x < 64; x += 16) {
|
||||
@@ -3527,6 +3571,9 @@ s3_virge_hwcursor_draw(svga_t *svga, int displine)
|
||||
/*X11*/
|
||||
for (xx = 0; xx < 16; xx++) {
|
||||
if (offset >= 0) {
|
||||
if (virge->chip == S3_VIRGEGX2)
|
||||
dat[0] ^= 0x8000;
|
||||
|
||||
if (dat[0] & 0x8000)
|
||||
buffer32->line[displine][offset + svga->x_add] = (dat[1] & 0x8000) ? fg : bg;
|
||||
}
|
||||
@@ -4086,24 +4133,29 @@ s3_virge_reset(void *priv)
|
||||
switch (virge->local) {
|
||||
case S3_VIRGE_325:
|
||||
case S3_DIAMOND_STEALTH3D_2000:
|
||||
virge->fifo_slots_num = 8;
|
||||
virge->svga.crtc[0x59] = 0x70;
|
||||
break;
|
||||
case S3_DIAMOND_STEALTH3D_3000:
|
||||
case S3_STB_VELOCITY_3D:
|
||||
virge->fifo_slots_num = 8;
|
||||
virge->svga.crtc[0x59] = 0x70;
|
||||
break;
|
||||
case S3_VIRGE_GX2:
|
||||
case S3_DIAMOND_STEALTH3D_4000:
|
||||
virge->fifo_slots_num = 16;
|
||||
virge->svga.crtc[0x6c] = 1;
|
||||
virge->svga.crtc[0x59] = 0x70;
|
||||
break;
|
||||
|
||||
case S3_TRIO_3D2X:
|
||||
virge->fifo_slots_num = 16;
|
||||
virge->svga.crtc[0x6c] = 1;
|
||||
virge->svga.crtc[0x59] = 0x70;
|
||||
break;
|
||||
|
||||
default:
|
||||
virge->fifo_slots_num = 8;
|
||||
virge->svga.crtc[0x6c] = 1;
|
||||
virge->svga.crtc[0x59] = 0x70;
|
||||
break;
|
||||
@@ -4262,6 +4314,7 @@ s3_virge_init(const device_t *info)
|
||||
switch (info->local) {
|
||||
case S3_VIRGE_325:
|
||||
case S3_DIAMOND_STEALTH3D_2000:
|
||||
virge->fifo_slots_num = 8;
|
||||
virge->svga.decode_mask = (4 << 20) - 1;
|
||||
virge->virge_id_high = 0x56;
|
||||
virge->virge_id_low = 0x31;
|
||||
@@ -4271,6 +4324,7 @@ s3_virge_init(const device_t *info)
|
||||
break;
|
||||
case S3_DIAMOND_STEALTH3D_3000:
|
||||
case S3_STB_VELOCITY_3D:
|
||||
virge->fifo_slots_num = 8;
|
||||
virge->svga.decode_mask = (8 << 20) - 1;
|
||||
virge->virge_id_high = 0x88;
|
||||
virge->virge_id_low = 0x3d;
|
||||
@@ -4280,6 +4334,7 @@ s3_virge_init(const device_t *info)
|
||||
break;
|
||||
case S3_VIRGE_GX2:
|
||||
case S3_DIAMOND_STEALTH3D_4000:
|
||||
virge->fifo_slots_num = 16;
|
||||
virge->svga.decode_mask = (4 << 20) - 1;
|
||||
virge->virge_id_high = 0x8a;
|
||||
virge->virge_id_low = 0x10;
|
||||
@@ -4291,6 +4346,7 @@ s3_virge_init(const device_t *info)
|
||||
break;
|
||||
|
||||
case S3_TRIO_3D2X:
|
||||
virge->fifo_slots_num = 16;
|
||||
virge->svga.decode_mask = (8 << 20) - 1;
|
||||
virge->virge_id_high = 0x8a;
|
||||
virge->virge_id_low = 0x13;
|
||||
@@ -4309,6 +4365,7 @@ s3_virge_init(const device_t *info)
|
||||
#endif
|
||||
|
||||
default:
|
||||
virge->fifo_slots_num = 8;
|
||||
virge->svga.decode_mask = (4 << 20) - 1;
|
||||
virge->virge_id_high = 0x8a;
|
||||
virge->virge_id_low = 0x01;
|
||||
|
||||
@@ -109,7 +109,7 @@ BEGIN
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "擷圖(&C)\tCtrl+F11", IDM_ACTION_SCREENSHOT
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "首選項(&P)...", IDM_PREFERENCES
|
||||
MENUITEM "偏好設定(&P)...", IDM_PREFERENCES
|
||||
#ifdef DISCORD
|
||||
MENUITEM "啟用 Discord 整合(&D)", IDM_DISCORD
|
||||
#endif
|
||||
@@ -240,7 +240,7 @@ END
|
||||
// Dialog
|
||||
//
|
||||
|
||||
#define STR_PREFERENCES "首選項"
|
||||
#define STR_PREFERENCES "偏好設定"
|
||||
#define STR_SND_GAIN "音量增益"
|
||||
#define STR_NEW_FLOPPY "新增映像"
|
||||
#define STR_CONFIG "設定"
|
||||
@@ -293,10 +293,10 @@ 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"
|
||||
@@ -357,7 +357,7 @@ END
|
||||
#define STR_SPECIFY "指定(&S)..."
|
||||
#define STR_SECTORS "磁區(S):"
|
||||
#define STR_HEADS "磁頭(H):"
|
||||
#define STR_CYLS "柱面(C):"
|
||||
#define STR_CYLS "磁柱(C):"
|
||||
#define STR_SIZE_MB "大小 (MB):"
|
||||
#define STR_TYPE "類型:"
|
||||
#define STR_IMG_FORMAT "映像格式:"
|
||||
|
||||
Reference in New Issue
Block a user