Merge remote-tracking branch 'origin/master' into feature/recompiler_improvements

This commit is contained in:
OBattler
2025-12-19 15:31:28 +01:00
3 changed files with 70 additions and 76 deletions

View File

@@ -1667,7 +1667,7 @@ msgid "Unknown Bus"
msgstr "不明なバス"
msgid "Null Driver"
msgstr "ヌルドライバー"
msgstr "ヌルドライバー"
msgid "NIC:"
msgstr "NIC:"
@@ -1778,16 +1778,16 @@ msgid "Novell NetWare 2.x Key Card"
msgstr "Novell NetWare 2.xキーカード"
msgid "Serial port passthrough 1"
msgstr "シリアルポートパススルー 1"
msgstr "シリアルポートパススルー 1"
msgid "Serial port passthrough 2"
msgstr "シリアルポートパススルー 2"
msgstr "シリアルポートパススルー 2"
msgid "Serial port passthrough 3"
msgstr "シリアルポートパススルー 3"
msgstr "シリアルポートパススルー 3"
msgid "Serial port passthrough 4"
msgstr "シリアルポートパススルー 4"
msgstr "シリアルポートパススルー 4"
msgid "Renderer &options…"
msgstr "レンダラー設定(&O)…"
@@ -2015,10 +2015,10 @@ msgid "Chorus Voices"
msgstr "コーラスの声"
msgid "Chorus Level"
msgstr "コーラスレベル"
msgstr "コーラスレベル"
msgid "Chorus Speed"
msgstr "コーラススピード"
msgstr "コーラススピード"
msgid "Chorus Depth"
msgstr "コーラスの深さ"
@@ -2030,16 +2030,16 @@ msgid "Reverb"
msgstr "リバーブ"
msgid "Reverb Room Size"
msgstr "リバーブルームの大きさ"
msgstr "リバーブルームの大きさ"
msgid "Reverb Damping"
msgstr "リバーブダンピング"
msgstr "リバーブダンピング"
msgid "Reverb Width"
msgstr "リバーブ幅"
msgid "Reverb Level"
msgstr "リバーブレベル"
msgstr "リバーブレベル"
msgid "Interpolation Method"
msgstr "補間法"
@@ -2054,7 +2054,7 @@ msgid "Reversed stereo"
msgstr "逆ステレオ"
msgid "Nice ramp"
msgstr "ナイススロープ"
msgstr "ナイススロープ"
msgid "Hz"
msgstr "ヘルツ"
@@ -2144,7 +2144,7 @@ msgid "SID Filter Strength"
msgstr "SIDフィルターの強度"
msgid "Surround module"
msgstr "サラウンドモジュール"
msgstr "サラウンドモジュール"
msgid "SB Address"
msgstr "SBアドレス"
@@ -2219,7 +2219,7 @@ msgid "Display type"
msgstr "表示タイプ"
msgid "Composite type"
msgstr "コンポジットタイプ"
msgstr "コンポジットタイプ"
msgid "RGB type"
msgstr "RGBタイプ"
@@ -2228,7 +2228,7 @@ msgid "Line doubling type"
msgstr "ライン倍増タイプ"
msgid "Snow emulation"
msgstr "スノーエミュレーション"
msgstr "スノーエミュレーション"
msgid "Monitor type"
msgstr "モニタータイプ"
@@ -2255,7 +2255,7 @@ msgid "Font"
msgstr "フォント"
msgid "Bilinear filtering"
msgstr "バイリニアフィルタリング"
msgstr "バイリニアフィルタリング"
msgid "Video chroma-keying"
msgstr "ビデオのクロマキー処理"
@@ -2549,16 +2549,16 @@ msgid "Apply overscan deltas"
msgstr "オーバースキャンデルタを適用する"
msgid "Mono Interlaced"
msgstr "モノラルインターレース"
msgstr "モノラルインターレース"
msgid "Mono Non-Interlaced"
msgstr "モノラルノンインターレース"
msgstr "モノラルノンインターレース"
msgid "Color Interlaced"
msgstr "カラーインターレース"
msgstr "カラーインターレース"
msgid "Color Non-Interlaced"
msgstr "カラーノンインターレース"
msgstr "カラーノンインターレース"
msgid "3Dfx Voodoo Graphics"
msgstr "3dfx Voodooグラフィック"
@@ -2594,7 +2594,7 @@ msgid "Stereo LPT DAC"
msgstr "ステレオLPT DAC"
msgid "Generic Text Printer"
msgstr "汎用テキストプリンタ"
msgstr "汎用テキストプリンタ"
msgid "Generic ESC/P 2 Dot-Matrix Printer"
msgstr "汎用ESC/P 2ドットマトリクスプリンタ"
@@ -2606,19 +2606,19 @@ msgid "Generic PCL5e Printer"
msgstr "汎用PCL5eプリンタ"
msgid "Parallel Line Internet Protocol"
msgstr "パラレルラインインターネットプロトコル"
msgstr "パラレルラインインターネットプロトコル"
msgid "Protection Dongle for Savage Quest"
msgstr "サベージクエスト用プロテクションドングル"
msgstr "サベージクエスト用プロテクションドングル"
msgid "Serial Passthrough Device"
msgstr "シリアルポートパススルーデバイス"
msgstr "シリアルポートパススルーデバイス"
msgid "Passthrough Mode"
msgstr "パススルーモード"
msgid "Host Serial Device"
msgstr "ホストシリアルデバイス"
msgstr "ホストシリアルデバイス"
msgid "Name of pipe"
msgstr "パイプ名"

View File

@@ -2371,7 +2371,7 @@ mach_out(uint16_t addr, uint8_t val, void *priv)
svga->write_bank = mach->bank_w << 16;
if (mach->index == 0xbe) {
if ((old ^ val) & 0x10) {
if ((old ^ val) & 0x13) {
mach_log("ATI BE bit 4.\n");
svga_recalctimings(svga);
}
@@ -3320,30 +3320,30 @@ mach_recalctimings(svga_t *svga)
} else {
dev->mode = VGA_MODE;
if (!svga->scrblank && svga->attr_palette_enable) {
mach_log("GDCREG5=%02x, ATTR10=%02x, ATI B0 bit 5=%02x, ON=%d.\n",
svga->gdcreg[5] & 0x60, svga->attrregs[0x10] & 0x40, mach->regs[0xb0] & 0x20, dev->on);
mach_log("GDCREG5=%02x, ATTR10=%02x, ATI B0 bit 5=%02x, ON=%d, char_width=%d, seqreg1 bit 3=%x, clk_sel=%02x.\n",
svga->gdcreg[5] & 0x60, svga->attrregs[0x10] & 0x40, mach->regs[0xb0] & 0x20, dev->on, svga->char_width, svga->seqregs[1] & 0x08, clock_sel);
if (ATI_MACH32)
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen);
else
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel ^ 0x08, svga->clock_gen);
switch ((mach->regs[0xb8] >> 6) & 3) {
case 1:
svga->clock *= 2.0;
break;
case 2:
svga->clock *= 3.0;
break;
case 3:
svga->clock *= 4.0;
break;
default:
break;
}
mach_log("VGA clock sel=%02x, divide reg=%02x, miscout bits2-3=%x, machregbe bit4=%02x, machregb9 bit1=%02x, charwidth=%d, htotal=%02x, hdisptime=%02x, seqregs1 bit 3=%02x.\n", clock_sel, (mach->regs[0xb8] >> 6) & 3, svga->miscout & 0x0c, mach->regs[0xbe] & 0x10, mach->regs[0xb9] & 0x02, svga->char_width, svga->htotal, svga->hdisp_time, svga->seqregs[1] & 8);
if ((svga->gdcreg[6] & 0x01) || (svga->attrregs[0x10] & 0x01)) {
if ((svga->gdcreg[5] & 0x40) || (svga->attrregs[0x10] & 0x40) || (mach->regs[0xb0] & 0x20)) {
if (ATI_MACH32)
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen);
else
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel ^ 0x08, svga->clock_gen);
switch ((mach->regs[0xb8] >> 6) & 3) {
case 1:
svga->clock *= 2.0;
break;
case 2:
svga->clock *= 3.0;
break;
case 3:
svga->clock *= 4.0;
break;
default:
break;
}
svga->map8 = svga->pallook;
mach_log("Lowres=%x, seqreg[1]bit3=%x.\n", svga->lowres, svga->seqregs[1] & 8);
if (svga->lowres)
@@ -3356,26 +3356,6 @@ mach_recalctimings(svga_t *svga)
}
}
}
} else {
if (ATI_MACH32)
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen);
else
svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel ^ 0x08, svga->clock_gen);
switch ((mach->regs[0xb8] >> 6) & 3) {
case 0:
default:
break;
case 1:
svga->clock *= 2.0;
break;
case 2:
svga->clock *= 3.0;
break;
case 3:
svga->clock *= 4.0;
break;
}
}
}
}

View File

@@ -161,7 +161,7 @@ typedef struct tgui_t {
uint8_t ramdac_ctrl;
uint8_t alt_clock;
int clock_m, clock_n, clock_k;
uint16_t vclk;
uint32_t vram_size, vram_mask;
@@ -567,17 +567,18 @@ tgui_out(uint16_t addr, uint8_t val, void *priv)
return;
case 0x3DB:
tgui->alt_clock = val & 0xe3;
tgui->alt_clock = val;
svga_recalctimings(svga);
return;
case 0x43c8:
tgui->clock_n = val & 0x7f;
tgui->clock_m = (tgui->clock_m & ~1) | (val >> 7);
break;
tgui->vclk = (tgui->vclk & 0xff00) | val;
svga_recalctimings(svga);
return;
case 0x43c9:
tgui->clock_m = (tgui->clock_m & ~0x1e) | ((val << 1) & 0x1e);
tgui->clock_k = (val & 0x10) >> 4;
break;
tgui->vclk = (tgui->vclk & 0x00ff) | (val << 8);
svga_recalctimings(svga);
return;
default:
break;
@@ -693,6 +694,9 @@ tgui_recalctimings(svga_t *svga)
uint8_t ger22lower = (tgui->accel.ger22 & 0xff);
uint8_t ger22upper = (tgui->accel.ger22 >> 8);
int std_vga_clock = 1;
int m = 0;
int n = 0;
int k = 0;
if (tgui->type >= TGUI_9440) {
if ((svga->crtc[0x38] & 0x19) == 0x09)
@@ -764,13 +768,23 @@ tgui_recalctimings(svga_t *svga)
svga->lowres = !(svga->crtc[0x2a] & 0x40);
if (tgui->type >= TGUI_9440) {
if (svga->miscout & 8)
svga->clock = (cpuclock * (double) (1ULL << 32)) / (((tgui->clock_n + 8) * 14318180.0) / ((tgui->clock_m + 2) * (1 << tgui->clock_k)));
// Bits 0-6: M
// Bits 7-11: N
// Bit 12: K
// Later formula extends each variable by one extra bit (Providia 9685 and later)
if (((svga->miscout & 0x0c) >> 2) == 0x02) {
m = tgui->vclk & 0x007f;
n = (tgui->vclk & 0x0f80) >> 7;
k = (tgui->vclk & 0x1000) >> 12;
svga->clock = (cpuclock * (double) (1ULL << 32)) / (((m + 8) * 14318180.0) / ((n + 2) * (1 << k)));
}
if (svga->gdcreg[0xf] & 0x08)
if ((svga->gdcreg[0xf] & 0x08) || (tgui->alt_clock & 0x20))
svga->clock *= 2.0;
else if (svga->gdcreg[0xf] & 0x40)
svga->clock *= 3.0;
pclog("GDCREGF=%02x, miscout=%02x.\n", svga->gdcreg[0xf] & 0x48, svga->miscout & 0x0c);
} else {
//pclog("TGUI9400CXi: Clock double=%d.\n", (((svga->miscout >> 2) & 3) | ((tgui->newctrl2 << 2) & 4) | ((tgui->newctrl2 >> 3) & 8)));
switch (((svga->miscout >> 2) & 3) | ((tgui->newctrl2 << 2) & 4) | ((tgui->newctrl2 >> 3) & 8)) {