From c9c584727fd31df5579d1424ffbd219766c29176 Mon Sep 17 00:00:00 2001 From: Nelson Kerber Hennemann Filho <87081197+nelsonhef@users.noreply.github.com> Date: Tue, 19 Aug 2025 18:02:59 -0300 Subject: [PATCH 1/7] Update pt-BR.po Update mnemonic --- src/qt/languages/pt-BR.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt/languages/pt-BR.po b/src/qt/languages/pt-BR.po index acdf9681c..4e90dbd2f 100644 --- a/src/qt/languages/pt-BR.po +++ b/src/qt/languages/pt-BR.po @@ -2935,4 +2935,4 @@ msgid "The system will not be added." msgstr "O sistema não será adicionado." msgid "&Update mouse every CPU frame" -msgstr "&Atualiza o estado do mouse em cada quadro do CPU" +msgstr "At&ualiza o estado do mouse em cada quadro do CPU" From f0d93aa00cf4bdce98f7d8518ae1d8623c71b025 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Wed, 20 Aug 2025 18:07:15 +0200 Subject: [PATCH 2/7] Video clock changes of the day (August 20th, 2025) Make the clocks of the ATI cards (pre-Mach64) more sane and precise (especially the Mach8/32). --- src/include/86box/vid_8514a.h | 1 + src/include/86box/vid_svga.h | 9 +- src/video/clockgen/vid_clockgen_ics2494.c | 341 +++++++++++++++---- src/video/vid_ati18800.c | 2 +- src/video/vid_ati28800.c | 4 +- src/video/vid_ati_mach8.c | 380 ++++++++++++++++------ 6 files changed, 569 insertions(+), 168 deletions(-) diff --git a/src/include/86box/vid_8514a.h b/src/include/86box/vid_8514a.h index e15dadfca..4c534c47b 100644 --- a/src/include/86box/vid_8514a.h +++ b/src/include/86box/vid_8514a.h @@ -278,6 +278,7 @@ typedef struct ibm8514_t { int _8514on; int _8514crt; PALETTE _8514pal; + uint8_t ven_clock; latch8514_t latch; diff --git a/src/include/86box/vid_svga.h b/src/include/86box/vid_svga.h index ea34827c3..02c2e0f17 100644 --- a/src/include/86box/vid_svga.h +++ b/src/include/86box/vid_svga.h @@ -498,9 +498,12 @@ extern const device_t bt485a_ramdac_device; extern const device_t gendac_ramdac_device; extern const device_t ibm_rgb528_ramdac_device; extern const device_t ics2494an_305_device; -extern const device_t ati18810_device; -extern const device_t ati18811_0_device; -extern const device_t ati18811_1_device; +extern const device_t ati18810_28800_device; +extern const device_t ati18811_0_28800_device; +extern const device_t ati18811_1_28800_device; +extern const device_t ati18810_mach32_device; +extern const device_t ati18811_0_mach32_device; +extern const device_t ati18811_1_mach32_device; extern const device_t ics2595_device; extern const device_t icd2061_device; extern const device_t ics9161_device; diff --git a/src/video/clockgen/vid_clockgen_ics2494.c b/src/video/clockgen/vid_clockgen_ics2494.c index 350a490cc..33a74fe62 100644 --- a/src/video/clockgen/vid_clockgen_ics2494.c +++ b/src/video/clockgen/vid_clockgen_ics2494.c @@ -48,6 +48,120 @@ ics2494_log(const char *fmt, ...) # define ics2494_log(fmt, ...) #endif +/* Two consecutive byte-writes are NOT allowed. Furthermore an index + * written to 0x01CE is only usable ONCE! Note also that the setting of ATI + * extended registers (especially those with clock selection bits) should be + * bracketed by a sequencer reset. + * + * Boards prior to V5 use 4 crystals. Boards V5 and later use a clock + * generator chip. V3 and V4 boards differ when it comes to choosing clock + * frequencies. + * + * VGA Wonder V3/V4 Board Clock Frequencies + * R E G I S T E R S + * 1CE(*) 3C2 3C2 Frequency + * B2h/BEh + * Bit 6/4 Bit 3 Bit 2 (MHz) + * ------- ------- ------- ------- + * 0 0 0 50.175 + * 0 0 1 56.644 + * 0 1 0 Spare 1 + * 0 1 1 44.900 + * 1 0 0 44.900 + * 1 0 1 50.175 + * 1 1 0 Spare 2 + * 1 1 1 36.000 + * + * (*): V3 uses index B2h, bit 6; V4 uses index BEh, bit 4 + * + * V5, PLUS, XL and XL24 usually have an ATI 18810 clock generator chip, but + * some have an ATI 18811-0, and it's quite conceivable that some exist with + * ATI 18811-1's or ATI 18811-2's. Mach32 boards are known to use any one of + * these clock generators. The possibilities for Mach64 boards also include + * two different flavours of the newer 18818 chips. I have yet to figure out + * how BIOS initialization sets up the board for a particular set of + * frequencies. Mach32 and Mach64 boards also use a different dot clock + * ordering. ATI says there is no reliable way for the driver to determine + * which clock generator is on the board (their BIOS's are tailored to the + * board). + * + * VGA Wonder V5/PLUS/XL/XL24 Board Clock Frequencies + * R E G I S T E R S + * 1CE 1CE 3C2 3C2 Frequency + * B9h BEh (MHz) 18811-0 18811-1 + * Bit 1 Bit 4 Bit 3 Bit 2 18810 18812-0 18811-2 18818-? 18818-? + * ------- ------- ------- ------- ------- ------- ------- ------- ------- + * 0 0 0 0 30.240 30.240 135.000 (*3) (*3) + * 0 0 0 1 32.000 32.000 32.000 110.000 110.000 + * 0 0 1 0 37.500 110.000 110.000 126.000 126.000 + * 0 0 1 1 39.000 80.000 80.000 135.000 135.000 + * 0 1 0 0 42.954 42.954 100.000 50.350 25.175 + * 0 1 0 1 48.771 48.771 126.000 56.644 28.322 + * 0 1 1 0 (*1) 92.400 92.400 63.000 31.500 + * 0 1 1 1 36.000 36.000 36.000 72.000 36.000 + * 1 0 0 0 40.000 39.910 39.910 (*3) (*3) + * 1 0 0 1 56.644 44.900 44.900 80.000 80.000 + * 1 0 1 0 75.000 75.000 75.000 75.000 75.000 + * 1 0 1 1 65.000 65.000 65.000 65.000 65.000 + * 1 1 0 0 50.350 50.350 50.350 40.000 40.000 + * 1 1 0 1 56.640 56.640 56.640 44.900 44.900 + * 1 1 1 0 (*2) (*3) (*3) 49.500 49.500 + * 1 1 1 1 44.900 44.900 44.900 50.000 50.000 + * + * (*1) External 0 (supposedly 16.657 Mhz) + * (*2) External 1 (supposedly 28.322 MHz) + * (*3) This setting doesn't seem to generate anything + * + * Mach32 and Mach64 Board Clock Frequencies + * R E G I S T E R S + * 1CE 1CE 3C2 3C2 Frequency + * B9h BEh (MHz) 18811-0 18811-1 + * Bit 1 Bit 4 Bit 3 Bit 2 18810 18812-0 18811-2 18818-? 18818-? + * ------- ------- ------- ------- ------- ------- ------- ------- ------- + * 0 0 0 0 42.954 42.954 100.000 50.350 25.175 + * 0 0 0 1 48.771 48.771 126.000 56.644 28.322 + * 0 0 1 0 (*1) 92.400 92.400 63.000 31.500 + * 0 0 1 1 36.000 36.000 36.000 72.000 36.000 + * 0 1 0 0 30.240 30.240 135.000 (*3) (*3) + * 0 1 0 1 32.000 32.000 32.000 110.000 110.000 + * 0 1 1 0 37.500 110.000 110.000 126.000 126.000 + * 0 1 1 1 39.000 80.000 80.000 135.000 135.000 + * 1 0 0 0 50.350 50.350 50.350 40.000 40.000 + * 1 0 0 1 56.640 56.640 56.640 44.900 44.900 + * 1 0 1 0 (*2) (*3) (*3) 49.500 49.500 + * 1 0 1 1 44.900 44.900 44.900 50.000 50.000 + * 1 1 0 0 40.000 39.910 39.910 (*3) (*3) + * 1 1 0 1 56.644 44.900 44.900 80.000 80.000 + * 1 1 1 0 75.000 75.000 75.000 75.000 75.000 + * 1 1 1 1 65.000 65.000 65.000 65.000 65.000 + * + * (*1) External 0 (supposedly 16.657 Mhz) + * (*2) External 1 (supposedly 28.322 MHz) + * (*3) This setting doesn't seem to generate anything + * + * Note that, to reduce confusion, this driver masks out the different clock + * ordering. + * + * For all boards, these frequencies can be divided by 1, 2, 3 or 4. + * + * Register 1CE, index B8h + * Bit 7 Bit 6 + * ------- ------- + * 0 0 Divide by 1 + * 0 1 Divide by 2 + * 1 0 Divide by 3 + * 1 1 Divide by 4 + * + * There is some question as to whether or not bit 1 of index 0xB9 can + * be used for clock selection on a V4 board. This driver makes it + * available only if the "undocumented_clocks" option (itself + * undocumented :-)) is specified in XF86Config. + * + * Also it appears that bit 0 of index 0xB9 can also be used for clock + * selection on some boards. It is also only available under XF86Config + * option "undocumented_clocks". + */ + float ics2494_getclock(int clock, void *priv) { @@ -56,7 +170,6 @@ ics2494_getclock(int clock, void *priv) if (clock > 15) clock = 15; - ics2494_log("Clock=%d, freq=%f.\n", clock, ics2494->freq[clock]); return ics2494->freq[clock]; } @@ -67,62 +180,116 @@ ics2494_init(const device_t *info) memset(ics2494, 0, sizeof(ics2494_t)); switch (info->local) { - case 10: + case 0: /* ATI 18810 for ATI 28800 */ - ics2494->freq[0x0] = 42954000.0; - ics2494->freq[0x1] = 48771000.0; - ics2494->freq[0x2] = 0.0; - ics2494->freq[0x3] = 36000000.0; - ics2494->freq[0x4] = 50350000.0; - ics2494->freq[0x5] = 56640000.0; - ics2494->freq[0x6] = 0.0; - ics2494->freq[0x7] = 44900000.0; - ics2494->freq[0x8] = 30240000.0; - ics2494->freq[0x9] = 32000000.0; - ics2494->freq[0xa] = 37500000.0; - ics2494->freq[0xb] = 39000000.0; - ics2494->freq[0xc] = 40000000.0; - ics2494->freq[0xd] = 56644000.0; - ics2494->freq[0xe] = 75000000.0; - ics2494->freq[0xf] = 65000000.0; + ics2494->freq[0] = 30240000.0; + ics2494->freq[1] = 32000000.0; + ics2494->freq[2] = 37500000.0; + ics2494->freq[3] = 39000000.0; + ics2494->freq[4] = 42954000.0; + ics2494->freq[5] = 48771000.0; + ics2494->freq[6] = 0.0; + ics2494->freq[7] = 36000000.0; + ics2494->freq[8] = 40000000.0; + ics2494->freq[9] = 56644000.0; + ics2494->freq[10] = 75000000.0; + ics2494->freq[11] = 65000000.0; + ics2494->freq[12] = 50350000.0; + ics2494->freq[13] = 56640000.0; + ics2494->freq[14] = 0.0; + ics2494->freq[15] = 44900000.0; break; - case 110: - /* ATI 18811-0 for ATI Mach32 */ - ics2494->freq[0x0] = 42954000.0; - ics2494->freq[0x1] = 48771000.0; - ics2494->freq[0x2] = 92400000.0; - ics2494->freq[0x3] = 36000000.0; - ics2494->freq[0x4] = 50350000.0; - ics2494->freq[0x5] = 56640000.0; - ics2494->freq[0x6] = 0.0; - ics2494->freq[0x7] = 44900000.0; - ics2494->freq[0x8] = 30240000.0; - ics2494->freq[0x9] = 32000000.0; - ics2494->freq[0xa] = 110000000.0; - ics2494->freq[0xb] = 80000000.0; - ics2494->freq[0xc] = 39910000.0; - ics2494->freq[0xd] = 44900000.0; - ics2494->freq[0xe] = 75000000.0; - ics2494->freq[0xf] = 65000000.0; + case 1: + /* ATI 18811-0/ATI 18812-0 for ATI 28800 */ + ics2494->freq[0] = 42950000.0; + ics2494->freq[1] = 48770000.0; + ics2494->freq[2] = 92400000.0; + ics2494->freq[3] = 36000000.0; + ics2494->freq[4] = 50350000.0; + ics2494->freq[5] = 56640000.0; + ics2494->freq[7] = 44900000.0; + ics2494->freq[8] = 30240000.0; + ics2494->freq[9] = 32000000.0; + ics2494->freq[10] = 110000000.0; + ics2494->freq[11] = 80000000.0; + ics2494->freq[12] = 39910000.0; + ics2494->freq[13] = 44900000.0; + ics2494->freq[14] = 75000000.0; + ics2494->freq[15] = 65000000.0; break; - case 111: - /* ATI 18811-1 for ATI Mach32 MCA */ - ics2494->freq[0x0] = 100000000.0; - ics2494->freq[0x1] = 126000000.0; - ics2494->freq[0x2] = 92400000.0; - ics2494->freq[0x3] = 36000000.0; - ics2494->freq[0x4] = 50350000.0; - ics2494->freq[0x5] = 56640000.0; - ics2494->freq[0x6] = 0.0; - ics2494->freq[0x7] = 44900000.0; - ics2494->freq[0x8] = 135000000.0; - ics2494->freq[0x9] = 32000000.0; - ics2494->freq[0xa] = 110000000.0; - ics2494->freq[0xb] = 80000000.0; - ics2494->freq[0xc] = 39910000.0; - ics2494->freq[0xd] = 44900000.0; - ics2494->freq[0xe] = 75000000.0; - ics2494->freq[0xf] = 65000000.0; + case 2: + /* ATI 18811-1/ATI 18811-2 for ATI 28800 */ + ics2494->freq[0] = 100000000.0; + ics2494->freq[1] = 126000000.0; + ics2494->freq[2] = 92400000.0; + ics2494->freq[3] = 36000000.0; + ics2494->freq[4] = 50350000.0; + ics2494->freq[5] = 56640000.0; + ics2494->freq[7] = 44900000.0; + ics2494->freq[8] = 135000000.0; + ics2494->freq[9] = 32000000.0; + ics2494->freq[10] = 110000000.0; + ics2494->freq[11] = 80000000.0; + ics2494->freq[12] = 39910000.0; + ics2494->freq[13] = 44900000.0; + ics2494->freq[14] = 75000000.0; + ics2494->freq[15] = 65000000.0; + break; + case 100: + /* ATI 18810 for ATI Mach32 */ + ics2494->freq[0] = 42954000.0; + ics2494->freq[1] = 48771000.0; + ics2494->freq[2] = 0.0; + ics2494->freq[3] = 36000000.0; + ics2494->freq[4] = 30240000.0; + ics2494->freq[5] = 32000000.0; + ics2494->freq[6] = 37500000.0; + ics2494->freq[7] = 39000000.0; + ics2494->freq[8] = 50350000.0; + ics2494->freq[9] = 56640000.0; + ics2494->freq[10] = 0.0; + ics2494->freq[11] = 44900000.0; + ics2494->freq[12] = 40000000.0; + ics2494->freq[13] = 56644000.0; + ics2494->freq[14] = 75000000.0; + ics2494->freq[15] = 65000000.0; + break; + case 101: + /* ATI 18811-0/ATI 18812-0 for ATI Mach32 */ + ics2494->freq[0] = 42954000.0; + ics2494->freq[1] = 48771000.0; + ics2494->freq[2] = 92400000.0; + ics2494->freq[3] = 36000000.0; + ics2494->freq[4] = 30240000.0; + ics2494->freq[5] = 32000000.0; + ics2494->freq[6] = 110000000.0; + ics2494->freq[7] = 80000000.0; + ics2494->freq[8] = 50350000.0; + ics2494->freq[9] = 56640000.0; + ics2494->freq[10] = 0.0; + ics2494->freq[11] = 44900000.0; + ics2494->freq[12] = 39910000.0; + ics2494->freq[13] = 44900000.0; + ics2494->freq[14] = 75000000.0; + ics2494->freq[15] = 65000000.0; + break; + case 102: + /* ATI 18811-1/ATI 18811-2 for ATI Mach32 */ + ics2494->freq[0] = 100000000.0; + ics2494->freq[1] = 126000000.0; + ics2494->freq[2] = 92400000.0; + ics2494->freq[3] = 36000000.0; + ics2494->freq[4] = 50350000.0; + ics2494->freq[5] = 56640000.0; + ics2494->freq[7] = 44900000.0; + ics2494->freq[8] = 135000000.0; + ics2494->freq[9] = 32000000.0; + ics2494->freq[10] = 110000000.0; + ics2494->freq[11] = 80000000.0; + ics2494->freq[12] = 39910000.0; + ics2494->freq[13] = 44900000.0; + ics2494->freq[14] = 75000000.0; + ics2494->freq[15] = 65000000.0; break; case 305: /* ICS2494A(N)-205 for S3 86C924 */ @@ -174,11 +341,11 @@ const device_t ics2494an_305_device = { .config = NULL }; -const device_t ati18810_device = { - .name = "ATI 18810 Clock Generator", - .internal_name = "ati18810", +const device_t ati18810_28800_device = { + .name = "ATI 18810 (ATI 28800) Clock Generator", + .internal_name = "ati18810_28800", .flags = 0, - .local = 10, + .local = 0, .init = ics2494_init, .close = ics2494_close, .reset = NULL, @@ -188,11 +355,11 @@ const device_t ati18810_device = { .config = NULL }; -const device_t ati18811_0_device = { - .name = "ATI 18811-0 Clock Generator", - .internal_name = "ati18811_0", +const device_t ati18811_0_28800_device = { + .name = "ATI 18811-0 (ATI 28800) Clock Generator", + .internal_name = "ati18811_0_28800", .flags = 0, - .local = 110, + .local = 1, .init = ics2494_init, .close = ics2494_close, .reset = NULL, @@ -202,11 +369,53 @@ const device_t ati18811_0_device = { .config = NULL }; -const device_t ati18811_1_device = { - .name = "ATI 18811-1 Clock Generator", - .internal_name = "ati18811_1", +const device_t ati18811_1_28800_device = { + .name = "ATI 18811-1 (ATI 28800) Clock Generator", + .internal_name = "ati18811_1_28800", .flags = 0, - .local = 111, + .local = 2, + .init = ics2494_init, + .close = ics2494_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t ati18810_mach32_device = { + .name = "ATI 18810 (ATI Mach32) Clock Generator", + .internal_name = "ati18810_mach32", + .flags = 0, + .local = 100, + .init = ics2494_init, + .close = ics2494_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t ati18811_0_mach32_device = { + .name = "ATI 18811-0 (ATI Mach32) Clock Generator", + .internal_name = "ati18811_0_mach32", + .flags = 0, + .local = 101, + .init = ics2494_init, + .close = ics2494_close, + .reset = NULL, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + +const device_t ati18811_1_mach32_device = { + .name = "ATI 18811-1 (ATI Mach32) Clock Generator", + .internal_name = "ati18811_1_mach32", + .flags = 0, + .local = 102, .init = ics2494_init, .close = ics2494_close, .reset = NULL, diff --git a/src/video/vid_ati18800.c b/src/video/vid_ati18800.c index 9c87746c6..11124a35b 100644 --- a/src/video/vid_ati18800.c +++ b/src/video/vid_ati18800.c @@ -269,7 +269,7 @@ ati18800_init(const device_t *info) ati18800_in, ati18800_out, NULL, NULL); - ati18800->svga.clock_gen = device_add(&ati18810_device); + ati18800->svga.clock_gen = device_add(&ati18810_28800_device); ati18800->svga.getclock = ics2494_getclock; io_sethandler(0x01ce, 0x0002, ati18800_in, NULL, NULL, ati18800_out, NULL, NULL, ati18800); diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c index 284abe78c..69924e53d 100644 --- a/src/video/vid_ati28800.c +++ b/src/video/vid_ati28800.c @@ -568,7 +568,7 @@ ati28800k_init(const device_t *info) ati28800k_in, ati28800k_out, NULL, NULL); - ati28800->svga.clock_gen = device_add(&ati18810_device); + ati28800->svga.clock_gen = device_add(&ati18810_28800_device); ati28800->svga.getclock = ics2494_getclock; io_sethandler(0x01ce, 0x0002, ati28800k_in, NULL, NULL, ati28800k_out, NULL, NULL, ati28800); @@ -646,7 +646,7 @@ ati28800_init(const device_t *info) ati28800_in, ati28800_out, NULL, NULL); - ati28800->svga.clock_gen = device_add(&ati18810_device); + ati28800->svga.clock_gen = device_add(&ati18810_28800_device); ati28800->svga.getclock = ics2494_getclock; io_sethandler(0x01ce, 2, diff --git a/src/video/vid_ati_mach8.c b/src/video/vid_ati_mach8.c index c34ec5514..63b5d02ca 100644 --- a/src/video/vid_ati_mach8.c +++ b/src/video/vid_ati_mach8.c @@ -2431,6 +2431,11 @@ mach_out(uint16_t addr, uint8_t val, void *priv) svga_out(addr, val, svga); return; + case 0x3C2: + if (mach->regs[0xb8] & 0x08) + return; + break; + case 0x3C6: case 0x3C7: case 0x3C8: @@ -2465,10 +2470,56 @@ mach_out(uint16_t addr, uint8_t val, void *priv) case 0x3D5: if (svga->crtcreg & 0x20) return; - if ((svga->crtcreg < 7) && (svga->crtc[0x11] & 0x80) && !(mach->regs[0xb4] & 0x80)) + if ((svga->crtcreg < 7) && ((svga->crtc[0x11] & 0x80) || (mach->regs[0xb4] & 0x40)) && !(mach->regs[0xb4] & 0x80)) return; - if ((svga->crtcreg == 7) && (svga->crtc[0x11] & 0x80) && !(mach->regs[0xb4] & 0x80)) + if ((svga->crtcreg == 7) && ((svga->crtc[0x11] & 0x80) || (mach->regs[0xb4] & 0x40)) && !(mach->regs[0xb4] & 0x80)) val = (svga->crtc[7] & ~0x10) | (val & 0x10); + if (mach->regs[0xb8] & 0x04) { + if ((svga->crtcreg < 0x0a) && (svga->crtcreg > 0x0d)) + return; + } + if (mach->regs[0xb4] & 0x04) { + if (svga->crtcreg == 9) { + if (val & 0x8f) + return; + } + } + if (mach->regs[0xb4] & 0x08) { + if (svga->crtcreg == 6) + return; + if (svga->crtcreg == 7) { + if (val & 0xaf) + return; + } + if (svga->crtcreg == 9) { + if (val & 0x20) + return; + } + if (svga->crtcreg == 0x11) { + if (val & 0x0f) + return; + } + if ((svga->crtcreg == 0x10) || + (svga->crtcreg == 0x12) || + (svga->crtcreg == 0x15) || + (svga->crtcreg == 0x16)) + return; + } + if (mach->regs[0xb4] & 0x10) { + if ((svga->crtcreg == 0x0a) || + (svga->crtcreg == 0x0b)) + return; + } + if (mach->regs[0xb4] & 0x20) { + if (svga->crtcreg == 8) { + if (val & 0x7f) + return; + } + if (svga->crtcreg == 0x14) { + if (val & 0x1f) + return; + } + } old = svga->crtc[svga->crtcreg]; svga->crtc[svga->crtcreg] = val; @@ -2726,28 +2777,82 @@ mach_set_resolution(mach_t *mach, svga_t *svga) dev->v_syncstart = 0x0601; mach->accel.clock_sel_mode = 0; - mach_log("ATI Mode: set=%02x, dispcntl=%02x, h_total=%d, hdisp=%d, vdisp=%d, v_total=%04x, v_syncstart=%04x, hsync_start=%d, hsync_width=%d, clocksel=%02x, advancedcntl=%02x.\n", mach->shadow_set & 0x03, dev->disp_cntl, dev->h_total, dev->hdisp, dev->vdisp, dev->v_total, dev->v_syncstart, dev->hsync_start, dev->hsync_width, mach->accel.clock_sel & 0xff, dev->accel.advfunc_cntl & 0x05); if ((dev->disp_cntl_2 >> 5) == 1) { /*Enable the 8514/A subsystem and set modes according to the shadow sets if needed.*/ switch (mach->shadow_set & 0x03) { case 0x01: if (!(dev->accel.advfunc_cntl & 0x04)) { - dev->h_total = 0x64; dev->hdisp = 640; dev->vdisp = 480; - dev->v_total = 0x0419; - dev->v_syncstart = 0x03d7; - mach->accel.clock_sel_mode = 0x50; + mach_log("Mach: EEPROM 640x480: %04x.\n", mach->eeprom.data[7]); + switch (mach->eeprom.data[7] & 0xff) { + case 0x00: /*640x480 60Hz Non-interlaced*/ + default: + dev->h_total = 0x64; + dev->v_total = 0x0419; + dev->v_syncstart = 0x03d7; + mach->accel.clock_sel_mode = 0x50; + break; + case 0x01: /*640x480 72Hz Non-interlaced*/ + dev->h_total = 0x6a; + dev->v_total = 0x040c; + dev->v_syncstart = 0x03d1; + mach->accel.clock_sel_mode = 0x24; + break; + case 0x03: /*640x480 72Hz Non-interlaced Alt*/ + dev->h_total = 0x71; + dev->v_total = 0x04ca; + dev->v_syncstart = 0x0422; + mach->accel.clock_sel_mode = 0x6c; + break; + } } break; case 0x02: if (dev->accel.advfunc_cntl & 0x04) { - dev->h_total = 0x9e; dev->hdisp = 1024; dev->vdisp = 768; - dev->v_total = 0x0669; - dev->v_syncstart = 0x0601; - mach->accel.clock_sel_mode = 0x1c; + mach_log("Mach: EEPROM 1024x768: %04x.\n", mach->eeprom.data[9]); + switch (mach->eeprom.data[9] & 0xff) { + case 0x00: /*1024x768 76Hz Non-interlaced*/ + dev->h_total = 0xa3; + dev->v_total = 0x064b; + dev->v_syncstart = 0x060c; + mach->accel.clock_sel_mode = 0x2c; + break; + + case 0x01: /*1024x768 87Hz Interlaced*/ + default: + dev->h_total = 0x9e; + dev->v_total = 0x0669; + dev->v_syncstart = 0x0601; + mach->accel.clock_sel_mode = 0x1c; + break; + case 0x02: /*1024x768 60Hz Non-interlaced*/ + dev->h_total = 0xa8; + dev->v_total = 0x064a; + dev->v_syncstart = 0x0603; + mach->accel.clock_sel_mode = 0x3c; + break; + case 0x04: /*1024x768 70Hz Non-interlaced*/ + dev->h_total = 0xa6; + dev->v_total = 0x064a; + dev->v_syncstart = 0x0603; + mach->accel.clock_sel_mode = 0x38; + break; + case 0x08: /*1024x768 72Hz Non-interlaced*/ + dev->h_total = 0xa1; + dev->v_total = 0x064a; + dev->v_syncstart = 0x0603; + mach->accel.clock_sel_mode = 0x38; + break; + case 0x82: /*1024x768 66Hz Non-interlaced*/ + dev->h_total = 0xac; + dev->v_total = 0x065c; + dev->v_syncstart = 0x060b; + mach->accel.clock_sel_mode = 0x38; + break; + } } break; @@ -2758,22 +2863,76 @@ mach_set_resolution(mach_t *mach, svga_t *svga) } else if ((dev->disp_cntl_2 >> 5) == 2) { /*Reset 8514/A to defaults if needed.*/ if (dev->accel.advfunc_cntl & 0x04) { if (dev->hdisp == 640) { - dev->h_total = 0x9e; dev->hdisp = 1024; dev->vdisp = 768; - dev->v_total = 0x0669; - dev->v_syncstart = 0x0601; - mach->accel.clock_sel_mode = 0x1c; + mach_log("Mach Reset: EEPROM 1024x768: %04x.\n", mach->eeprom.data[9]); + switch (mach->eeprom.data[9] & 0xff) { + case 0x00: /*1024x768 76Hz Non-interlaced*/ + dev->h_total = 0xa3; + dev->v_total = 0x064b; + dev->v_syncstart = 0x060c; + mach->accel.clock_sel_mode = 0x2c; + break; + case 0x01: /*1024x768 87Hz Interlaced*/ + default: + dev->h_total = 0x9e; + dev->v_total = 0x0669; + dev->v_syncstart = 0x0601; + mach->accel.clock_sel_mode = 0x1c; + break; + case 0x02: /*1024x768 60Hz Non-interlaced*/ + dev->h_total = 0xa8; + dev->v_total = 0x064a; + dev->v_syncstart = 0x0603; + mach->accel.clock_sel_mode = 0x3c; + break; + case 0x04: /*1024x768 70Hz Non-interlaced*/ + dev->h_total = 0xa6; + dev->v_total = 0x064a; + dev->v_syncstart = 0x0603; + mach->accel.clock_sel_mode = 0x38; + break; + case 0x08: /*1024x768 72Hz Non-interlaced*/ + dev->h_total = 0xa1; + dev->v_total = 0x064a; + dev->v_syncstart = 0x0603; + mach->accel.clock_sel_mode = 0x38; + break; + case 0x82: /*1024x768 66Hz Non-interlaced*/ + dev->h_total = 0xac; + dev->v_total = 0x065c; + dev->v_syncstart = 0x060b; + mach->accel.clock_sel_mode = 0x38; + break; + } svga_recalctimings(svga); } } else { if (dev->hdisp == 1024) { - dev->h_total = 0x64; dev->hdisp = 640; dev->vdisp = 480; - dev->v_total = 0x0419; - dev->v_syncstart = 0x03d7; - mach->accel.clock_sel_mode = 0x50; + mach_log("Mach Reset: EEPROM 640x480: %04x.\n", mach->eeprom.data[7]); + switch (mach->eeprom.data[7] & 0xff) { + case 0x00: /*640x480 60Hz Non-interlaced*/ + default: + dev->h_total = 0x64; + dev->v_total = 0x0419; + dev->v_syncstart = 0x03d7; + mach->accel.clock_sel_mode = 0x50; + break; + case 0x01: /*640x480 72Hz Non-interlaced*/ + dev->h_total = 0x6a; + dev->v_total = 0x040c; + dev->v_syncstart = 0x03d1; + mach->accel.clock_sel_mode = 0x24; + break; + case 0x03: /*640x480 72Hz Non-interlaced Alt*/ + dev->h_total = 0x71; + dev->v_total = 0x04ca; + dev->v_syncstart = 0x0422; + mach->accel.clock_sel_mode = 0x6c; + break; + } svga_recalctimings(svga); } } @@ -2797,14 +2956,29 @@ ati8514_recalctimings(svga_t *svga) dev->accel.ge_offset = (mach->accel.ge_offset_lo | (mach->accel.ge_offset_hi << 16)) << 2; mach->accel.crt_offset = (mach->accel.crt_offset_lo | (mach->accel.crt_offset_hi << 16)) << 2; - if (mach->accel.clock_sel_mode == 0x1c) { - dev->interlace = 1; - _8514_modes = 1; - } else if (mach->accel.clock_sel_mode == 0x50) { - dev->interlace = 0; - _8514_modes = 2; + switch (mach->accel.clock_sel_mode) { + case 0x1c: + dev->interlace = 1; + _8514_modes = 1; + break; + case 0x24: + case 0x2c: + case 0x38: + case 0x3c: + case 0x50: + case 0x6c: + dev->interlace = 0; + _8514_modes = 2; + break; + default: + break; } + if (_8514_modes) + dev->ven_clock = mach->accel.clock_sel_mode & 0x7c; + else + dev->ven_clock = mach->accel.clock_sel & 0x7c; + dev->accel.ge_offset -= mach->accel.crt_offset; mach_log("HDISP=%d, VDISP=%d, shadowset=%x, 8514/A mode=%x, clocksel=%02x.\n", @@ -2826,22 +3000,14 @@ ati8514_recalctimings(svga_t *svga) else if (dev->h_disp == 640) dev->dispend = 480; - dev->h_disp_time = dev->hdisp >> 3; + dev->h_disp_time = dev->h_disp >> 3; - if (_8514_modes) { - svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock8514((mach->accel.clock_sel_mode >> 2) & 0x0f, svga->clock_gen8514) / 2; - if (mach->accel.clock_sel_mode & 0x40) - svga->clock_8514 *= 2; - } else { - svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock8514((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen8514) / 2; - if (mach->accel.clock_sel & 0x40) - svga->clock_8514 *= 2; - } + svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock8514((dev->ven_clock >> 2) & 0x0f, svga->clock_gen8514) / 2.0; + if ((((dev->ven_clock >> 2) & 0x0f) == 0x09) && (dev->h_total == 0x6b)) + svga->clock_8514 /= 2.0; - if (dev->interlace) { + if (dev->interlace) dev->dispend >>= 1; - svga->clock_8514 /= 2; - } mach_log("cntl=%d, hv(%d,%d), pitch=%d, rowoffset=%d, gextconfig=%03x, shadow=%x interlace=%d.\n", dev->accel.advfunc_cntl & 0x04, dev->h_disp, dev->dispend, dev->pitch, dev->rowoffset, @@ -2864,13 +3030,24 @@ mach_recalctimings(svga_t *svga) { mach_t *mach = (mach_t *) svga->priv; ibm8514_t *dev = (ibm8514_t *) svga->dev8514; - int clock_sel; + int clock_sel = 0x00; int _8514_modes = 0; if (mach->regs[0xad] & 0x08) svga->hblankstart = ((mach->regs[0x0d] >> 2) << 8) + svga->crtc[2]; - clock_sel = ((svga->miscout >> 2) & 3) | ((mach->regs[0xbe] & 0x10) >> 1) | ((mach->regs[0xb9] & 2) << 1); + if (svga->miscout & 0x04) + clock_sel |= 0x01; + if (svga->miscout & 0x08) + clock_sel |= 0x02; + if (mach->regs[0xb9] & 0x02) + clock_sel |= 0x04; + if (mach->regs[0xbe] & 0x10) + clock_sel |= 0x08; + + svga->interlace = !!(mach->regs[0xbe] & 0x02); + if (svga->interlace) + svga->dispend >>= 1; if (ATI_MACH32) { if (mach->regs[0xad] & 0x04) @@ -2911,11 +3088,8 @@ mach_recalctimings(svga_t *svga) svga->ati_4color = 0; } - svga->interlace = !!(mach->regs[0xbe] & 0x02); - if (svga->interlace) - svga->dispend >>= 1; - mach_log("ON=%d, override=%d, gelo=%04x, gehi=%04x, crtlo=%04x, crthi=%04x, vgahdisp=%d.\n", dev->on, svga->override, mach->accel.ge_offset_lo, mach->accel.ge_offset_hi, mach->accel.crt_offset_lo, mach->accel.crt_offset_hi, svga->hdisp); + if (dev->on) { dev->memaddr_latch = 0; /*(mach->accel.crt_offset_lo | (mach->accel.crt_offset_hi << 16)) << 2;*/ dev->interlace = !!(dev->disp_cntl & 0x10); @@ -2925,14 +3099,41 @@ mach_recalctimings(svga_t *svga) dev->accel.ge_offset = (mach->accel.ge_offset_lo | (mach->accel.ge_offset_hi << 16)); mach->accel.crt_offset = (mach->accel.crt_offset_lo | (mach->accel.crt_offset_hi << 16)); - if (mach->accel.clock_sel_mode == 0x1c) { - dev->interlace = 1; - _8514_modes = 1; - } else if (mach->accel.clock_sel_mode == 0x50) { - dev->interlace = 0; - _8514_modes = 2; + switch (mach->accel.clock_sel_mode) { + case 0x1c: + dev->interlace = 1; + _8514_modes = 1; + break; + case 0x24: + case 0x2c: + case 0x38: + case 0x3c: + case 0x50: + case 0x6c: + dev->interlace = 0; + _8514_modes = 2; + break; + default: + break; } + if (_8514_modes) + dev->ven_clock = mach->accel.clock_sel_mode & 0x7c; + else + dev->ven_clock = mach->accel.clock_sel & 0x7c; + + if (ATI_MACH32) { + mach_log("Mach32: Clock=%02x, double=%02x, h_total=%02x.\n", (dev->ven_clock >> 2) & 0x0f, dev->ven_clock & 0x40, dev->h_total); + svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock8514((dev->ven_clock >> 2) & 0x0f, svga->clock_gen8514) / 2.0; + } else { + mach_log("Mach8: Clock=%02x, double=%02x, h_total=%02x, selmode=%02x.\n", (dev->ven_clock >> 2) & 0x0f, dev->ven_clock & 0x40, dev->h_total, mach->accel.clock_sel_mode); + svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock8514((dev->ven_clock >> 2) & 0x0f, svga->clock_gen8514) / 2.0; + if ((((dev->ven_clock >> 2) & 0x0f) == 0x09) && (dev->h_total == 0x6b)) + svga->clock_8514 /= 2.0; + } + if (dev->ven_clock & 0x40) + svga->clock_8514 *= 2.0; + if (dev->bpp) { dev->accel.ge_offset <<= 1; mach->accel.crt_offset <<= 1; @@ -2956,31 +3157,19 @@ mach_recalctimings(svga_t *svga) dev->h_disp = dev->hdisp; dev->dispend = dev->vdisp; if (dev->dispend == 959) { /*FIXME: vertical resolution mess on EEPROM tests on Mach8*/ - dev->dispend >>= 1; dev->dispend++; + dev->dispend >>= 1; } else if (dev->dispend == 600) dev->h_disp = 800; else if (dev->h_disp == 640) dev->dispend = 480; - dev->h_disp_time = dev->hdisp >> 3; + dev->h_disp_time = dev->h_disp >> 3; - if (_8514_modes) { - svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel_mode >> 2) & 0x0f, svga->clock_gen) / 2; - if (mach->accel.clock_sel_mode & 0x40) - svga->clock_8514 *= 2; - } else { - svga->clock_8514 = (cpuclock * (double) (1ULL << 32)) / svga->getclock((mach->accel.clock_sel >> 2) & 0x0f, svga->clock_gen) / 2; - if (mach->accel.clock_sel & 0x40) - svga->clock_8514 *= 2; - } + mach_log("8514/A modes=%d, clocksel=%02x, clkselmode=%02x, divide reg ibm=%02x, divide reg vga=%02x, vgainterlace=%x, interlace=%x, htotal=%02x.\n", _8514_modes, mach->accel.clock_sel & 0xfe, mach->accel.clock_sel_mode & 0xfe, mach->accel.clock_sel & 0x40, mach->regs[0xb8] & 0x40, svga->interlace, dev->interlace, dev->htotal); - mach_log("8514/A clock sel=%x, divide reg ibm=%02x, divide reg vga=%02x, vgainterlace=%x, interlace=%x.\n", clock_sel, mach->accel.clock_sel & 0x40, mach->regs[0xb8] & 0xc0, svga->interlace, dev->interlace); - - if (dev->interlace) { + if (dev->interlace) dev->dispend >>= 1; - svga->clock_8514 /= 2; - } if (ATI_MACH32) { switch ((mach->shadow_set >> 8) & 0x03) { @@ -3104,33 +3293,30 @@ mach_recalctimings(svga_t *svga) } } else { dev->mode = VGA_MODE; - if (!svga->scrblank && (svga->crtc[0x17] & 0x80) && svga->attr_palette_enable) { + 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); - svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen); - mach_log("VGA clock sel=%x, divide reg=%02x.\n", clock_sel, mach->regs[0xb8] & 0xc0); - if (svga->interlace) - svga->clock /= 2; + 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); - if (ATI_MACH32) { - if (mach->regs[0xb8] & 0x40) - svga->clock *= 2; - } else { - switch (mach->regs[0xb8] & 0xc0) { - case 0x40: - svga->clock *= 2; - break; - case 0x80: - svga->clock *= 3; - break; - case 0xc0: - svga->clock *= 4; - break; - - default: - break; - } + 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; } + + 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)) { svga->map8 = svga->pallook; @@ -6376,7 +6562,7 @@ mach32_hwcursor_draw(svga_t *svga, int displine) case 8: color0 = dev->pallook[mach->cursor_col_0]; color1 = dev->pallook[mach->cursor_col_1]; - mach_log("4/8BPP: Color0=%08x, Color1=%08x.\n", color0, color1); + mach_log("4/8BPP: Color0=%08x, Color1=%08x, interlace=%x, oddeven=%d.\n", color0, color1, dev->interlace, dev->hwcursor_oddeven); break; case 15: color0 = video_15to32[((mach->ext_cur_col_0_r << 16) | (mach->ext_cur_col_0_g << 8) | mach->cursor_col_0) & 0xffff]; @@ -7196,7 +7382,7 @@ mach8_init(const device_t *info) else mach->config1 |= 0x0c; mach->config1 |= 0x0400; - svga->clock_gen = device_add(&ati18811_1_device); + svga->clock_gen = device_add(&ati18811_1_mach32_device); } else if (mach->mca_bus) { video_inform(VIDEO_FLAG_TYPE_8514, &timing_mach32_mca); if (is286 && !is386) @@ -7204,7 +7390,7 @@ mach8_init(const device_t *info) else mach->config1 |= 0x06; mach->config1 |= 0x0400; - svga->clock_gen = device_add(&ati18811_1_device); + svga->clock_gen = device_add(&ati18811_1_mach32_device); } else if (mach->pci_bus) { video_inform(VIDEO_FLAG_TYPE_8514, &timing_mach32_pci); mach->config1 |= 0x0e; @@ -7213,11 +7399,11 @@ mach8_init(const device_t *info) else mach->config1 |= 0x0400; mach->config2 |= 0x2000; - svga->clock_gen = device_add(&ati18811_1_device); + svga->clock_gen = device_add(&ati18811_1_mach32_device); } else { video_inform(VIDEO_FLAG_TYPE_8514, &timing_gfxultra_isa); mach->config1 |= 0x0400; - svga->clock_gen = device_add(&ati18811_1_device); + svga->clock_gen = device_add(&ati18811_1_mach32_device); } 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); @@ -7239,10 +7425,12 @@ mach8_init(const device_t *info) mach->config1 |= 0x20; mach->config2 = 0x02; - svga->clock_gen = device_add(&ati18811_0_device); + svga->clock_gen = device_add(&ati18811_1_mach32_device); } dev->bpp = 0; svga->getclock = ics2494_getclock; + svga->clock_gen8514 = svga->clock_gen; + svga->getclock8514 = svga->getclock; dev->on = 0; dev->pitch = 1024; @@ -7341,7 +7529,7 @@ ati8514_init(svga_t *svga, void *ext8514, void *dev8514) dev->accel_out_fifo = ati8514_accel_out_fifo; dev->vblank_start = ati8514_vblank_start; - svga->clock_gen8514 = device_add(&ati18811_0_device); + svga->clock_gen8514 = device_add(&ati18811_1_mach32_device); svga->getclock8514 = ics2494_getclock; } From dd075b23b5852aa24ad1b4b1e2194ec681863d4b Mon Sep 17 00:00:00 2001 From: Lili Kurek Date: Wed, 20 Aug 2025 17:16:18 +0000 Subject: [PATCH 3/7] Update pl-PL.po --- src/qt/languages/pl-PL.po | 346 +++++++++++++++++++------------------- 1 file changed, 173 insertions(+), 173 deletions(-) diff --git a/src/qt/languages/pl-PL.po b/src/qt/languages/pl-PL.po index 711e05eaf..cc850b161 100644 --- a/src/qt/languages/pl-PL.po +++ b/src/qt/languages/pl-PL.po @@ -28,7 +28,7 @@ msgid "&Pause" msgstr "&Pauza" msgid "Pause" -msgstr "" +msgstr "Pauza" msgid "Re&sume" msgstr "&Wznów" @@ -49,7 +49,7 @@ msgid "&Resizeable window" msgstr "&Okno o zmiennym rozmiarze" msgid "R&emember size && position" -msgstr "P&amiętaj rozmiar &i pozycję" +msgstr "P&amiętaj rozmiar i pozycję" msgid "Re&nderer" msgstr "Re&nderer" @@ -193,7 +193,7 @@ msgid "&Settings..." msgstr "&Ustawienia..." msgid "Settings..." -msgstr "" +msgstr "Ustawienia..." msgid "&Update status bar icons" msgstr "&Aktualizuj ikony na pasku statusu" @@ -220,7 +220,7 @@ msgid "End trace" msgstr "Zakończ śledzenie" msgid "&Help" -msgstr "&Pomoc" +msgstr "Pomo&c" msgid "&Documentation..." msgstr "&Dokumentacja..." @@ -361,7 +361,7 @@ msgid "Configure" msgstr "Konfiguruj" msgid "CPU:" -msgstr "" +msgstr "Procesor:" msgid "CPU type:" msgstr "Rodzaj procesora:" @@ -424,25 +424,25 @@ msgid "XGA Graphics" msgstr "Grafika XGA" msgid "IBM PS/55 Display Adapter Graphics" -msgstr "" +msgstr "Karta graficzna IBM PS/55" msgid "Keyboard:" msgstr "Klawiatura:" msgid "Keyboard" -msgstr "" +msgstr "Klawiatura" msgid "Mouse:" msgstr "Mysz:" msgid "Mouse" -msgstr "" +msgstr "Mysz" msgid "Joystick:" msgstr "Joystick:" msgid "Joystick" -msgstr "" +msgstr "Joystick" msgid "Joystick 1..." msgstr "Joystick 1..." @@ -475,7 +475,7 @@ msgid "MIDI In Device:" msgstr "Urządzenie wejściowe MIDI:" msgid "MIDI Out:" -msgstr "" +msgstr "Wyjście MIDI:" msgid "Standalone MPU-401" msgstr "Samodzielne urządzenie MPU-401" @@ -517,7 +517,7 @@ msgid "LPT4 Device:" msgstr "Urządzenie LPT4:" msgid "Internal LPT ECP DMA:" -msgstr "" +msgstr "Wewnętrzne DMA LPT ECP:" msgid "Serial port 1" msgstr "Port szeregowy 1" @@ -640,10 +640,10 @@ msgid "MO drives:" msgstr "Napędy MO:" msgid "MO:" -msgstr "" +msgstr "MO:" msgid "Removable disks:" -msgstr "" +msgstr "Dyski wymienne:" msgid "Removable disk drives:" msgstr "Stacje dysków wymiennych:" @@ -742,16 +742,16 @@ msgid "Surface images" msgstr "Obrazy powierzchni" msgid "Machine \"%hs\" is not available due to missing ROMs in the roms/machines directory. Switching to an available machine." -msgstr "Maszyna \"%hs\" nie jest dostępna, ponieważ brakuje ROM-ów w katalogu roms/machines. Przełączanie na dostępną maszynę." +msgstr "Maszyna „%hs” nie jest dostępna, ponieważ brakuje ROM-ów w katalogu roms/machines. Przełączanie na dostępną maszynę." msgid "Video card \"%hs\" is not available due to missing ROMs in the roms/video directory. Switching to an available video card." -msgstr "Karta wideo \"%hs\" nie jest dostępna, ponieważ brakuje ROM-ów w katalogu roms/video. Przełączanie na dostępną kartę graficzną." +msgstr "Karta wideo „%hs” nie jest dostępna, ponieważ brakuje ROM-ów w katalogu roms/video. Przełączanie na dostępną kartę graficzną." msgid "Video card #2 \"%hs\" is not available due to missing ROMs in the roms/video directory. Disabling the second video card." -msgstr "Karta wideo 2 \"%hs\" nie jest dostępna, ponieważ brakuje ROM-ów w katalogu roms/video. Wyłączenie drugiej karty graficznej." +msgstr "Karta wideo 2 „%hs” nie jest dostępna, ponieważ brakuje ROM-ów w katalogu roms/video. Wyłączenie drugiej karty graficznej." msgid "Device \"%hs\" is not available due to missing ROMs. Ignoring the device." -msgstr "Urządzenie \"%hs\" nie jest dostępne, ponieważ brakuje ROM-ów. Ignorowanie urządzenia." +msgstr "Urządzenie „%hs” nie jest dostępne, ponieważ brakuje ROM-ów. Ignorowanie urządzenia." msgid "Machine" msgstr "Maszyna" @@ -772,13 +772,13 @@ msgid "Ports (COM & LPT)" msgstr "Porty (COM & LPT)" msgid "Ports" -msgstr "" +msgstr "Porty" msgid "Serial ports" -msgstr "" +msgstr "Porty szeregowe" msgid "Parallel ports" -msgstr "" +msgstr "Porty równoległe" msgid "Storage controllers" msgstr "Kontrolery pamięci masowej" @@ -787,13 +787,13 @@ msgid "Hard disks" msgstr "Dyski twarde" msgid "Disks:" -msgstr "" +msgstr "Dyski:" msgid "Floppy:" -msgstr "" +msgstr "Dyskietki:" msgid "Controllers:" -msgstr "" +msgstr "Kontrolery:" msgid "Floppy & CD-ROM drives" msgstr "Napędy dyskietek i CD-ROM" @@ -805,7 +805,7 @@ msgid "Other peripherals" msgstr "Inne urządzenia peryferyjne" msgid "Other devices" -msgstr "" +msgstr "Inne urządzenia" msgid "Click to capture mouse" msgstr "Kliknij, by przechwycić mysz" @@ -952,16 +952,16 @@ msgid "Internal device" msgstr "Urządzenie wewnętrzne" msgid "&File" -msgstr "" +msgstr "&Plik" msgid "&New machine..." -msgstr "" +msgstr "&Nowa maszyna..." msgid "&Check for updates..." -msgstr "" +msgstr "&Sprawdź aktualizacje..." msgid "Exit" -msgstr "Zakończ" +msgstr "Za&kończ" msgid "No ROMs found" msgstr "Nie znaleziono ROM-ów" @@ -982,7 +982,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 "Emulator starych komputerów\n\nAutorzy: 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, i inni.\n\nZ wcześniejszym wkładem od Sarah Walker, leilei, JohnElliott, greatpsycho i innych.\n\nPrzetłumaczony przez: Fanta-Shokata, Lili1228\n\nWydany na licencji GNU General Public License w wersji 2 lub nowszej. Zobacz LICENSE aby uzyskać więcej informacji." +msgstr "Emulator starych komputerów\n\nAutorzy: 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, i inni.\n\nZ wcześniejszym wkładem od Sarah Walker, leilei, JohnElliott, greatpsycho i innych.\n\nPrzetłumaczony przez: Lili1228\n\nWydany na licencji GNU General Public License w wersji 2 lub nowszej. Zobacz LICENSE aby uzyskać więcej informacji." msgid "Hardware not available" msgstr "Sprzęt niedostępny" @@ -1057,7 +1057,7 @@ msgid "Pause execution" msgstr "Zatrzymaj wykonywanie" msgid "Ctrl+Alt+Del" -msgstr "" +msgstr "Ctrl+Alt+Del" msgid "Press Ctrl+Alt+Del" msgstr "Naciśnij Ctrl+Alt+Del" @@ -1069,271 +1069,271 @@ msgid "Hard reset" msgstr "Twardy reset" msgid "Force shutdown" -msgstr "" +msgstr "Wymuś zamknięcie" msgid "Start" -msgstr "" +msgstr "Uruchom" msgid "Not running" -msgstr "" +msgstr "Wyłączona" msgid "Running" -msgstr "" +msgstr "Uruchomiona" msgid "Paused" -msgstr "" +msgstr "Wstrzymana" msgid "Waiting" -msgstr "" +msgstr "Oczekiwanie" msgid "Powered Off" -msgstr "" +msgstr "Wyłączona" msgid "%n running" -msgstr "" +msgstr "%n uruchomion(a/e/ych)" msgid "%n paused" -msgstr "" +msgstr "%n wstrzyman(a/e/ych)" msgid "%n waiting" -msgstr "" +msgstr "%n oczekując(a/e/ych)" msgid "%1 total" -msgstr "" +msgstr "Łącznie %1" msgid "VMs: %1" -msgstr "" +msgstr "Maszyny wirtualne: %1" msgid "System Directory:" -msgstr "" +msgstr "Folder systemowy:" msgid "Choose directory" -msgstr "" +msgstr "Wybierz folder" msgid "Choose configuration file" -msgstr "" +msgstr "Wybierz plik konfiguracyjny" msgid "86Box configuration files (86box.cfg)" -msgstr "" +msgstr "Pliki konfiguracyjne 86Boxa (86box.cfg)" msgid "Configuration read failed" -msgstr "" +msgstr "Nieudany odczyt konfiguracji" msgid "Unable to open the selected configuration file for reading: %1" -msgstr "" +msgstr "Nie udało się otworzyć wybranego pliku konfiguracyjnego do odczytu: %1" msgid "Use regular expressions in search box" -msgstr "" +msgstr "Użyj wyrażeń regularnych w polu wyszukiwania" msgid "%1 machine(s) are currently active. Are you sure you want to exit the VM manager anyway?" -msgstr "" +msgstr "Liczba obecnie aktywnych maszyn: %1. Czy na pewno chcesz, mimo to, wyjść z menedżera maszyn wirtualnych?" msgid "Add new system wizard" -msgstr "" +msgstr "Kreator dodawania nowego systemu" msgid "Introduction" -msgstr "" +msgstr "Wstęp" msgid "This will help you add a new system to 86Box." -msgstr "" +msgstr "Ten kreator pomoże Ci dodać nowy system do 86Boxa." msgid "New configuration" -msgstr "" +msgstr "Nowa konfiguracja" msgid "Complete" -msgstr "" +msgstr "Ukończono" msgid "The wizard will now launch the configuration for the new system." -msgstr "" +msgstr "Kreator teraz uruchomi konfigurację dla nowego systemu." msgid "Use existing configuration" -msgstr "" +msgstr "Użyj istniejącej konfiguracji" msgid "Type some notes here" -msgstr "" +msgstr "Wpisz tutaj swoje notatki" msgid "Paste the contents of the existing configuration file into the box below." -msgstr "" +msgstr "Wklej zawartość istniejącego pliku konfiguracyjnego w poniższe pole." msgid "Load configuration from file" -msgstr "" +msgstr "Wczytaj konfigurację z pliku" msgid "System name" -msgstr "" +msgstr "Nazwa systemu" msgid "System name:" -msgstr "" +msgstr "Nazwa systemu:" msgid "System name cannot contain certain characters" -msgstr "" +msgstr "Nazwa systemu nie może zawierać niektórych znaków" msgid "System name already exists" -msgstr "" +msgstr "Nazwa systemu już istnieje" msgid "Please enter a directory for the system" -msgstr "" +msgstr "Wprowadź folder dla systemu" msgid "Directory does not exist" -msgstr "" +msgstr "Folder nie istnieje" msgid "A new directory for the system will be created in the selected directory above" -msgstr "" +msgstr "Zostanie utworzony nowy folder dla systemu w wybranym powyżej folderze" msgid "System location:" -msgstr "" +msgstr "Lokalizacja systemu:" msgid "System name and location" -msgstr "" +msgstr "Nazwa i lokalizacja systemu" msgid "Enter the name of the system and choose the location" -msgstr "" +msgstr "Podaj nazwę system i wybierz jego lokalizację" msgid "Enter the name of the system" -msgstr "" +msgstr "Podaj nazwę systemu" msgid "Please enter a system name" -msgstr "" +msgstr "Proszę podać nazwę systemu" msgid "Display name (optional):" -msgstr "" +msgstr "Nazwa wyświetlana (opcjonalne):" msgid "Display name:" -msgstr "" +msgstr "Nazwa wyświetlana:" msgid "Set display name" -msgstr "" +msgstr "Ustaw nazwę wyświetlaną" msgid "Enter the new display name (blank to reset)" -msgstr "" +msgstr "Podaj nową nazwę wyświetlaną (wyczyść, by zresetować)" msgid "Change &display name..." -msgstr "" +msgstr "Zmień wyświetlaną &nazwę..." msgid "Context Menu" -msgstr "" +msgstr "Menu kontekstowe" msgid "&Open folder..." -msgstr "" +msgstr "&Otwórz folder..." msgid "Open &printer tray..." -msgstr "" +msgstr "Otwórz &tackę drukarki..." msgid "Set &icon..." -msgstr "" +msgstr "&Ustaw ikonę..." msgid "Select an icon" -msgstr "" +msgstr "Wybierz ikonę" msgid "C&lone..." -msgstr "" +msgstr "&Klonuj..." msgid "Virtual machine \"%1\" (%2) will be cloned into:" -msgstr "" +msgstr "Maszyna wirtualna „%1” (%2) zostanie sklonowana jako:" msgid "Directory %1 already exists" -msgstr "" +msgstr "Folder %1 już istnieje" msgid "You cannot use the following characters in the name: %1" -msgstr "" +msgstr "Nie możesz użyć następujących znaków w nazwie: %1" msgid "Clone" -msgstr "" +msgstr "Klonuj" msgid "Failed to create directory for cloned VM" -msgstr "" +msgstr "Nie udało się stworzyć folderu dla klonowanej maszyny wirtualnej" msgid "Failed to clone VM." -msgstr "" +msgstr "Nie udało się sklonować maszyny wirtualnej." msgid "Directory in use" -msgstr "" +msgstr "Folder w użyciu" msgid "The selected directory is already in use. Please select a different directory." -msgstr "" +msgstr "Wybrany folder jest już w użyciu. Proszę wybrać inny folder." msgid "Create directory failed" -msgstr "" +msgstr "Nieudane utworzenie folderu" msgid "Unable to create the directory for the new system" -msgstr "" +msgstr "Nie udało się utworzyć folderu dla nowego systemu" msgid "Configuration write failed" -msgstr "" +msgstr "Nieudany zapis konfiguracji" msgid "Unable to open the configuration file at %1 for writing" -msgstr "" +msgstr "Nie udało się otworzyć pliku %1 do zapisu" msgid "Error adding system" -msgstr "" +msgstr "Błąd dodawania systemu" msgid "Remove directory failed" -msgstr "" +msgstr "Nieudane usunięcie folderu" msgid "Some files in the machine's directory were unable to be deleted. Please delete them manually." -msgstr "" +msgstr "Nie udało się usunąć niektórych plików w folderze maszyny wirtualnej. Proszę usunąć je ręcznie." msgid "Build" -msgstr "" +msgstr "Kompilacja" msgid "Version" -msgstr "" +msgstr "Wersja" msgid "An update to 86Box is available: %1 %2" -msgstr "" +msgstr "Dostępna jest aktualizacja 86Boxa: %1 %2" msgid "An error has occurred while checking for updates: %1" -msgstr "" +msgstr "Wystąpił błąd podczas sprawdzania aktualizacji %1" msgid "An update to 86Box is available!" -msgstr "" +msgstr "Dostępna jest aktualizacja 86Boxa!" msgid "Warning" -msgstr "" +msgstr "Ostrzeżenie" msgid "&Kill" -msgstr "" +msgstr "&Zabij" msgid "Killing a virtual machine can cause data loss. Only do this if the 86Box process gets stuck.\n\nDo you really wish to kill the virtual machine \"%1\"?" -msgstr "" +msgstr "Zabicie maszyny wirtualnej może spowodować utratę danych. Zrób to tylko, jeśli proces 86Boxa się zawiesił.\n\nCzy na pewno chcesz zabić maszynę wirtualną „%1”?" msgid "&Delete" -msgstr "" +msgstr "&Usuń" msgid "Do you really want to delete the virtual machine \"%1\" and all its files? This action cannot be undone!" -msgstr "" +msgstr "Czy na pewno chcesz usunąć maszynę wirtualną „%1” i jej wszystkie pliki? Tej operacji nie można cofnąć!" msgid "Show &config file" -msgstr "" +msgstr "&Pokaż plik konfiguracyjny" msgid "No screenshot" -msgstr "" +msgstr "Brak zrzutów ekranu" msgid "Search" -msgstr "" +msgstr "Szukanie" msgid "Searching for VMs..." -msgstr "" +msgstr "Szukanie maszyn wirtualnych..." msgid "Found %1" -msgstr "" +msgstr "Znaleziono %1" msgid "System" -msgstr "" +msgstr "System" msgid "Storage" -msgstr "" +msgstr "Pamięć" msgid "Disk %1: " -msgstr "" +msgstr "Dysk %1: " msgid "No disks" -msgstr "" +msgstr "Brak dysków" msgid "Audio" -msgstr "" +msgstr "Dźwięk" msgid "Audio:" -msgstr "" +msgstr "Dźwięk:" msgid "ACPI shutdown" msgstr "Wyłączenie ACPI" @@ -1639,10 +1639,10 @@ msgid "&MCA devices..." msgstr "Urządzenia MCA..." msgid "Show non-&primary monitors" -msgstr "Pokaż monitory inne niż podstawowe" +msgstr "Pokaż monitory &inne niż podstawowe" msgid "Open screenshots &folder..." -msgstr "Otwórz folder zrzutów ekranu..." +msgstr "Otwórz folder zrzutów &ekranu..." msgid "Appl&y fullscreen stretch mode when maximized" msgstr "Zastosowanie trybu rozciągania na pełnym ekranie w stanie zmaksymalizowanym" @@ -1675,7 +1675,7 @@ msgid "Null Driver" msgstr "Null Driver" msgid "NIC:" -msgstr "" +msgstr "NIC:" msgid "NIC %1 (%2) %3" msgstr "NIC %1 (%2) %3" @@ -1729,13 +1729,13 @@ msgid "This machine might have been moved or copied." msgstr "To urządzenie mogło zostać przeniesione lub skopiowane." msgid "In order to ensure proper networking functionality, 86Box needs to know if this machine was moved or copied.\n\nSelect \"I Copied It\" if you are not sure." -msgstr "Aby zapewnić prawidłową funkcjonalność sieci, 86Box musi wiedzieć, czy to urządzenie zostało przeniesione lub skopiowane.\n\nW przypadku braku pewności, wybrać opcję \"Zostało skopiowane\"." +msgstr "Aby zapewnić prawidłową funkcjonalność sieci, 86Box musi wiedzieć, czy to maszyna zostało przeniesiona albo skopiowana.\n\nW przypadku braku pewności, wybierz opcję „Została skopiowana”." msgid "I Moved It" -msgstr "Zostało przeniesione" +msgstr "Została przeniesiona" msgid "I Copied It" -msgstr "Zostało skopiowane" +msgstr "Została skopiowana" msgid "86Box Monitor #" msgstr "86Box Monitor " @@ -1747,7 +1747,7 @@ msgid "MiB" msgstr "MiB" msgid "GiB" -msgstr "" +msgstr "GiB" msgid "Network Card #1" msgstr "Karta sieciowa nr 1" @@ -1924,10 +1924,10 @@ msgid "IRQ" msgstr "IRQ" msgid "Serial port IRQ" -msgstr "" +msgstr "IRQ portu szeregowego" msgid "Parallel port IRQ" -msgstr "" +msgstr "IRQ portu równoległego" msgid "BIOS Revision" msgstr "Rewizja BIOS-u" @@ -2155,7 +2155,7 @@ msgid "SB Address" msgstr "Adres SB" msgid "Adlib Address" -msgstr "" +msgstr "Adres Adlib" msgid "Use EEPROM setting" msgstr "Użyj ustawień z EEPROM" @@ -2206,7 +2206,7 @@ msgid "GUS type" msgstr "Typ GUS" msgid "Enable 0x04 \"Exit 86Box\" command" -msgstr "Włącz polecenie 0x04 \"Wyjdź z 86Boxa\"" +msgstr "Włącz polecenie 0x04 „Wyjdź z 86Boxa”" msgid "Display type" msgstr "Typ ekranu" @@ -2215,7 +2215,7 @@ msgid "Composite type" msgstr "Typ kompozytowy" msgid "True color" -msgstr "" +msgstr "Prawdziwy kolor" msgid "RGB type" msgstr "Typ RGB" @@ -2560,7 +2560,7 @@ msgid "3Dfx Voodoo Graphics" msgstr "Grafika 3Dfx Voodoo" msgid "3Dfx Voodoo 2" -msgstr "" +msgstr "3Dfx Voodoo 2" msgid "Obsidian SB50 + Amethyst (2 TMUs)" msgstr "Obsidian SB50 + Amethyst (2 jednostki TMU)" @@ -2695,7 +2695,7 @@ msgid "Unable to find Dot-Matrix fonts" msgstr "Nie można znaleźć fontów igłowych" msgid "TrueType fonts in the \"roms/printer/fonts\" directory are required for the emulation of the Generic ESC/P Dot-Matrix Printer." -msgstr "Fonty TrueType w katalogu \"roms/printer/fonts\" są wymagane do emulacji generycznej drukarki igłowej ESC/P." +msgstr "Fonty TrueType w katalogu „roms/printer/fonts” są wymagane do emulacji generycznej drukarki igłowej ESC/P." msgid "Inhibit multimedia keys" msgstr "Przejmij klawisze multimedialne" @@ -2815,124 +2815,124 @@ msgid "SoundFont files" msgstr "Pliki SoundFont" msgid "Local Switch" -msgstr "" +msgstr "Switch lokalny" msgid "Remote Switch" -msgstr "" +msgstr "Switch zdalny" msgid "Switch:" -msgstr "" +msgstr "Switch:" msgid "Hub Mode" -msgstr "" +msgstr "Tryb hub" msgid "Hostname:" -msgstr "" +msgstr "Nazwa komputera:" msgid "ISA RTC" -msgstr "" +msgstr "ISA RTC" msgid "ISA RAM" -msgstr "" +msgstr "ISA RAM" msgid "ISA ROM" -msgstr "" +msgstr "ISA ROM" msgid "&Wipe NVRAM" -msgstr "" +msgstr "&Wyczyść NVRAM" msgid "This will delete all NVRAM (and related) files of the virtual machine located in the \"nvr\" subdirectory. You'll have to reconfigure the BIOS (and possibly other devices inside the VM) settings again if applicable.\n\nAre you sure you want to wipe all NVRAM contents of the virtual machine \"%1\"?" -msgstr "" +msgstr "To usunie wszystkie pliki NVRAM (i powiązane) maszyny wirtualnej, zlokalizowane w podkatalogu „nvr”. Będziesz musieć przekonfigurować BIOS (i prawdopodobnie inne urządzenia w maszynie wirtualnej), jeśli dotyczy.\n\nCzy na pewno chcesz wyczyścić całą zawartość NVRAM maszyny wirtualnej \"%1\"?" msgid "Success" -msgstr "" +msgstr "Sukces" msgid "Successfully wiped the NVRAM contents of the virtual machine \"%1\"" -msgstr "" +msgstr "Pomyślnie wyczyszczono zawartość NVRAM maszyny wirtualnej „%1”" msgid "An error occurred trying to wipe the NVRAM contents of the virtual machine \"%1\"" -msgstr "" +msgstr "Wystąpił błąd podczas próby wyczyszczenia zawartości NVRAM maszyny wirtualnej „%1”" msgid "%1 VM Manager" -msgstr "" +msgstr "Menedżer maszyn wirtualnych %1" msgid "%n disk(s)" -msgstr "" +msgstr "%n dysk(i/ów)" msgid "Unknown Status" -msgstr "" +msgstr "Status nieznany" msgid "No Machines Found!" -msgstr "" +msgstr "Nie znaleziono maszyn!" msgid "Check for updates on startup" -msgstr "" +msgstr "Sprawdzaj aktualizacje przy starcie" msgid "Unable to determine release information" -msgstr "" +msgstr "Nie udało się ustalić informacji o wydaniu" msgid "There was an error checking for updates:\n\n%1\n\nPlease try again later." -msgstr "" +msgstr "Wystąpił błąd podczas sprawdzania aktualizacji:\n\n%1\n\nSpróbuj ponownie później." msgid "Update check complete" -msgstr "" +msgstr "Sprawdzanie aktualizacji ukończone" msgid "stable" -msgstr "" +msgstr "stabilnej" msgid "beta" -msgstr "" +msgstr "beta" msgid "You are running the latest %1 version of 86Box: %2" -msgstr "" +msgstr "Używasz najnowszej wersji %1 86Boxa: %2" msgid "version" -msgstr "" +msgstr "wersja" msgid "build" -msgstr "" +msgstr "kompilacja" msgid "You are currently running version %1." -msgstr "" +msgstr "Aktualnie używasz wersji %1." msgid "Version %1 is now available." -msgstr "" +msgstr "Wersja %1 jest teraz dostępna." msgid "You are currently running build %1." -msgstr "" +msgstr "Aktualnie używasz kompilacji %1." msgid "Build %1 is now available." -msgstr "" +msgstr "Kompilacja %1 jest teraz dostępna." msgid "Would you like to visit the download page?" -msgstr "" +msgstr "Czy chcesz odwiedzić stronę pobierania?" msgid "Visit download page" -msgstr "" +msgstr "Odwiedź stronę pobierania" msgid "Update check" -msgstr "" +msgstr "Sprawdzanie aktualizacji" msgid "Checking for updates..." -msgstr "" +msgstr "Sprawdzanie aktualizacji..." msgid "86Box Update" -msgstr "" +msgstr "Aktualizacja 86Boxa" msgid "Release notes:" -msgstr "" +msgstr "Uwagi do wydania:" msgid "%1 Hz" msgstr "%1 Hz" msgid "Virtual machine crash" -msgstr "" +msgstr "Awaria maszyny wirtualnej" msgid "The virtual machine \"%1\"'s process has unexpectedly terminated with exit code %2." -msgstr "" +msgstr "Proces maszyny wirtualnej „%1” zakończył się nieoczekiwanie z kodem błędu %2." msgid "The system will not be added." -msgstr "" +msgstr "System nie będzie dodany." msgid "&Update mouse every CPU frame" -msgstr "" +msgstr "Aktualizuj &mysz z każdą ramką CPU" From 56485f834a3c5e239d5b4f3dca07f2b85349b7f8 Mon Sep 17 00:00:00 2001 From: TC1995 Date: Wed, 20 Aug 2025 19:49:31 +0200 Subject: [PATCH 4/7] Fix clocks of the ATI 28800 series of cards --- src/video/vid_ati28800.c | 40 +++++++++++++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/src/video/vid_ati28800.c b/src/video/vid_ati28800.c index 69924e53d..205d934ee 100644 --- a/src/video/vid_ati28800.c +++ b/src/video/vid_ati28800.c @@ -407,13 +407,23 @@ static void ati28800_recalctimings(svga_t *svga) { ati28800_t *ati28800 = (ati28800_t *) svga->priv; - int clock_sel; + int clock_sel = 0x00; if (ati28800->regs[0xad] & 0x08) svga->hblankstart = ((ati28800->regs[0x0d] >> 2) << 8) + svga->crtc[2]; - clock_sel = ((svga->miscout >> 2) & 3) | ((ati28800->regs[0xbe] & 0x10) >> 1) | - ((ati28800->regs[0xb9] & 2) << 1); + if (svga->miscout & 0x04) + clock_sel |= 0x01; + if (svga->miscout & 0x08) + clock_sel |= 0x02; + if (ati28800->regs[0xb9] & 0x02) + clock_sel |= 0x04; + if (ati28800->regs[0xbe] & 0x10) + clock_sel |= 0x08; + + svga->interlace = !!(ati28800->regs[0xbe] & 0x02); + if (svga->interlace) + svga->dispend >>= 1; if (ati28800->regs[0xa3] & 0x10) svga->memaddr_latch |= 0x10000; @@ -452,9 +462,25 @@ ati28800_recalctimings(svga_t *svga) } else svga->ati_4color = 0; - if (!svga->scrblank && (svga->crtc[0x17] & 0x80) && svga->attr_palette_enable) { + if (!svga->scrblank && svga->attr_palette_enable) { + svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel ^ 0x08, svga->clock_gen); + + switch ((ati28800->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; + } + if ((svga->gdcreg[6] & 1) || (svga->attrregs[0x10] & 1)) { - svga->clock = (cpuclock * (double) (1ULL << 32)) / svga->getclock(clock_sel, svga->clock_gen); ati28800_log("SEQREG1 bit 3=%x. gdcreg5 bits 5-6=%02x, 4bit pel=%02x, " "planar 16color=%02x, apa mode=%02x, attregs10 bit 7=%02x.\n", svga->seqregs[1] & 8, svga->gdcreg[5] & 0x60, @@ -568,7 +594,7 @@ ati28800k_init(const device_t *info) ati28800k_in, ati28800k_out, NULL, NULL); - ati28800->svga.clock_gen = device_add(&ati18810_28800_device); + ati28800->svga.clock_gen = device_add(&ati18811_1_28800_device); ati28800->svga.getclock = ics2494_getclock; io_sethandler(0x01ce, 0x0002, ati28800k_in, NULL, NULL, ati28800k_out, NULL, NULL, ati28800); @@ -646,7 +672,7 @@ ati28800_init(const device_t *info) ati28800_in, ati28800_out, NULL, NULL); - ati28800->svga.clock_gen = device_add(&ati18810_28800_device); + ati28800->svga.clock_gen = device_add(&ati18811_1_28800_device); ati28800->svga.getclock = ics2494_getclock; io_sethandler(0x01ce, 2, From 14172b3d396ab7957dd6614457a4a01ee6df73f5 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Wed, 20 Aug 2025 15:45:20 -0300 Subject: [PATCH 5/7] Manager: Cache listview icon and color objects to improve performance --- src/qt/qt_vmmanager_listviewdelegate.cpp | 36 +++++++++++++++--------- src/qt/qt_vmmanager_listviewdelegate.hpp | 10 +++++++ 2 files changed, 32 insertions(+), 14 deletions(-) diff --git a/src/qt/qt_vmmanager_listviewdelegate.cpp b/src/qt/qt_vmmanager_listviewdelegate.cpp index 28820a044..c5bcbbdd9 100644 --- a/src/qt/qt_vmmanager_listviewdelegate.cpp +++ b/src/qt/qt_vmmanager_listviewdelegate.cpp @@ -34,6 +34,15 @@ VMManagerListViewDelegate::VMManagerListViewDelegate(QObject *parent) : QStyledItemDelegate(parent), m_ptr(new VMManagerListViewDelegateStyle) { + default_icon = QIcon(":/settings/qt/icons/86Box-gray.ico"); + stop_icon = QApplication::style()->standardIcon(QStyle::SP_MediaStop); + running_icon = QIcon(":/menuicons/qt/icons/run.ico"); + stopped_icon = QIcon(":/menuicons/qt/icons/acpi_shutdown.ico"); + paused_icon = QIcon(":/menuicons/qt/icons/pause.ico"); + unknown_icon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion); + + highlight_color = QColor("#616161"); + bg_color = QColor("#272727"); } VMManagerListViewDelegate::~VMManagerListViewDelegate() @@ -56,34 +65,33 @@ void VMManagerListViewDelegate::paint(QPainter *painter, const QStyleOptionViewI -m_ptr->margins.bottom())); // The status icon represents the current state of the vm. Initially set to a default state. - QIcon status_icon = QApplication::style()->standardIcon(QStyle::SP_MediaStop); auto process_variant = index.data(VMManagerModel::Roles::ProcessStatus); auto process_status = process_variant.value(); // The main icon, configurable. Falls back to default if it cannot be loaded. - auto customIcom = index.data(VMManagerModel::Roles::Icon).toString(); - opt.icon = QIcon(":/settings/qt/icons/86Box-gray.ico"); - if(!customIcom.isEmpty()) { - if (const auto customPixmap = QPixmap(customIcom); !customPixmap.isNull()) { + auto customIcon = index.data(VMManagerModel::Roles::Icon).toString(); + opt.icon = default_icon; + if (!customIcon.isEmpty()) { + const auto customPixmap = QPixmap(customIcon); + if (!customPixmap.isNull()) opt.icon = customPixmap; - } } - // opt.icon = QIcon(":/settings/qt/icons/86Box-gray.ico"); // Set the status icon based on the process status + QIcon status_icon; switch(process_status) { case VMManagerSystem::ProcessStatus::Running: - status_icon = QIcon(":/menuicons/qt/icons/run.ico"); + status_icon = running_icon; break; case VMManagerSystem::ProcessStatus::Stopped: - status_icon = QIcon(":/menuicons/qt/icons/acpi_shutdown.ico"); + status_icon = stopped_icon; break; case VMManagerSystem::ProcessStatus::PausedWaiting: case VMManagerSystem::ProcessStatus::RunningWaiting: case VMManagerSystem::ProcessStatus::Paused: - status_icon = QIcon(":/menuicons/qt/icons/pause.ico"); + status_icon = paused_icon; break; default: - status_icon = QApplication::style()->standardIcon(QStyle::SP_MessageBoxQuestion); + status_icon = unknown_icon; } @@ -105,13 +113,13 @@ void VMManagerListViewDelegate::paint(QPainter *painter, const QStyleOptionViewI // When selected, only draw the highlighted part until the horizontal separator int offset = 2; auto highlightRect = rect.adjusted(0, 0, 0, -offset); - painter->fillRect(highlightRect, windows_light_mode ? palette.highlight().color() : QColor("#616161")); + painter->fillRect(highlightRect, windows_light_mode ? palette.highlight().color() : highlight_color); // Then fill the remainder with the normal color auto regularRect = rect.adjusted(0, rect.height()-offset, 0, 0); - painter->fillRect(regularRect, windows_light_mode ? palette.light().color() : QColor("#272727")); + painter->fillRect(regularRect, windows_light_mode ? palette.light().color() : bg_color); } else { // Otherwise just draw the background color as usual - painter->fillRect(rect, windows_light_mode ? palette.light().color() : QColor("#272727")); + painter->fillRect(rect, windows_light_mode ? palette.light().color() : bg_color); } // Draw bottom line. Last line gets a different color diff --git a/src/qt/qt_vmmanager_listviewdelegate.hpp b/src/qt/qt_vmmanager_listviewdelegate.hpp index 84325086d..9e320653b 100644 --- a/src/qt/qt_vmmanager_listviewdelegate.hpp +++ b/src/qt/qt_vmmanager_listviewdelegate.hpp @@ -63,5 +63,15 @@ public: const QModelIndex &index) const override; private: VMManagerListViewDelegateStyle *m_ptr; + + QIcon default_icon; + QIcon stop_icon; + QIcon running_icon; + QIcon stopped_icon; + QIcon paused_icon; + QIcon unknown_icon; + + QColor bg_color; + QColor highlight_color; }; #endif // QT_VMMANAGER_LISTVIEWDELEGATE_H \ No newline at end of file From eb56961f101c2f9c3b094fc3b950f3f63f3c44c6 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Wed, 20 Aug 2025 16:40:57 -0300 Subject: [PATCH 6/7] Manager: Icon caching in details pane --- src/qt/qt_vmmanager_details.cpp | 15 +++++++++------ src/qt/qt_vmmanager_details.hpp | 3 +++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/qt/qt_vmmanager_details.cpp b/src/qt/qt_vmmanager_details.cpp index d6dd814ee..61214a083 100644 --- a/src/qt/qt_vmmanager_details.cpp +++ b/src/qt/qt_vmmanager_details.cpp @@ -115,9 +115,12 @@ VMManagerDetails::VMManagerDetails(QWidget *parent) : } ui->ssNavTBHolder->setStyleSheet(toolButtonStyleSheet); + pauseIcon = QIcon(":/menuicons/qt/icons/pause.ico"); + runIcon = QIcon(":/menuicons/qt/icons/run.ico"); + // Experimenting startPauseButton = new QToolButton(); - startPauseButton->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + startPauseButton->setIcon(runIcon); startPauseButton->setAutoRaise(true); startPauseButton->setEnabled(false); startPauseButton->setToolTip(tr("Start")); @@ -192,10 +195,10 @@ VMManagerDetails::updateData(VMManagerSystem *passed_sysconfig) { bool running = sysconfig->getProcessStatus() == VMManagerSystem::ProcessStatus::Running || sysconfig->getProcessStatus() == VMManagerSystem::ProcessStatus::RunningWaiting; if(running) { - startPauseButton->setIcon(QIcon(":/menuicons/qt/icons/pause.ico")); + startPauseButton->setIcon(pauseIcon); connect(startPauseButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::pauseButtonPressed); } else { - startPauseButton->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + startPauseButton->setIcon(runIcon); connect(startPauseButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::startButtonPressed); } startPauseButton->setEnabled(true); @@ -341,10 +344,10 @@ VMManagerDetails::updateProcessStatus() { cadButton->setEnabled(running); if(running) { if(sysconfig->getProcessStatus() == VMManagerSystem::ProcessStatus::Running) { - startPauseButton->setIcon(QIcon(":/menuicons/qt/icons/pause.ico")); + startPauseButton->setIcon(pauseIcon); startPauseButton->setToolTip(tr("Pause")); } else { - startPauseButton->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + startPauseButton->setIcon(runIcon); startPauseButton->setToolTip(tr("Continue")); } @@ -352,7 +355,7 @@ VMManagerDetails::updateProcessStatus() { disconnect(startPauseButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::startButtonPressed); connect(startPauseButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::pauseButtonPressed); } else { - startPauseButton->setIcon(QIcon(":/menuicons/qt/icons/run.ico")); + startPauseButton->setIcon(runIcon); disconnect(startPauseButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::pauseButtonPressed); disconnect(startPauseButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::startButtonPressed); connect(startPauseButton, &QToolButton::clicked, sysconfig, &VMManagerSystem::startButtonPressed); diff --git a/src/qt/qt_vmmanager_details.hpp b/src/qt/qt_vmmanager_details.hpp index 2fb1a9d57..0a6c2d35a 100644 --- a/src/qt/qt_vmmanager_details.hpp +++ b/src/qt/qt_vmmanager_details.hpp @@ -68,6 +68,9 @@ private: QToolButton *configureButton; QToolButton *cadButton; + QIcon pauseIcon; + QIcon runIcon; + void updateConfig(VMManagerSystem *passed_sysconfig); void updateScreenshots(VMManagerSystem *passed_sysconfig); static QWidget* createHorizontalLine(int leftSpacing = 25, int rightSpacing = 25); From c836f6e10365e356fbc3b774df466e10c233e487 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Wed, 20 Aug 2025 17:17:06 -0300 Subject: [PATCH 7/7] Manager: Render details section only once it's fully populated with data --- src/qt/qt_vmmanager_details.cpp | 9 ++++ src/qt/qt_vmmanager_detailsection.cpp | 75 +++++++++++++-------------- src/qt/qt_vmmanager_detailsection.hpp | 3 +- 3 files changed, 48 insertions(+), 39 deletions(-) diff --git a/src/qt/qt_vmmanager_details.cpp b/src/qt/qt_vmmanager_details.cpp index 61214a083..0316b4321 100644 --- a/src/qt/qt_vmmanager_details.cpp +++ b/src/qt/qt_vmmanager_details.cpp @@ -281,6 +281,15 @@ VMManagerDetails::updateConfig(VMManagerSystem *passed_sysconfig) { otherSection->addSection(tr("ISA RTC"), passed_sysconfig->getDisplayValue(Display::Name::IsaRtc)); otherSection->addSection(tr("ISA RAM"), passed_sysconfig->getDisplayValue(Display::Name::IsaMem)); otherSection->addSection(tr("ISA ROM"), passed_sysconfig->getDisplayValue(Display::Name::IsaRom)); + + systemSection->setSections(); + videoSection->setSections(); + storageSection->setSections(); + audioSection->setSections(); + networkSection->setSections(); + inputSection->setSections(); + portsSection->setSections(); + otherSection->setSections(); } void diff --git a/src/qt/qt_vmmanager_detailsection.cpp b/src/qt/qt_vmmanager_detailsection.cpp index 23c940706..907b5ab94 100644 --- a/src/qt/qt_vmmanager_detailsection.cpp +++ b/src/qt/qt_vmmanager_detailsection.cpp @@ -143,7 +143,6 @@ VMManagerDetailSection::addSection(const QString &name, const QString &value, Di { const auto new_section = DetailSection { name, value}; sections.push_back(new_section); - setSections(); } void @@ -154,30 +153,8 @@ VMManagerDetailSection::setupMainLayout() mainLayout = new QVBoxLayout; } void -VMManagerDetailSection::clearContentsSetupGrid() -{ - // Clear everything out - if(frameGridLayout) { - while(frameGridLayout->count()) { - QLayoutItem * cur_item = frameGridLayout->takeAt(0); - if(cur_item->widget()) - delete cur_item->widget(); - delete cur_item; - } - } - - delete frameGridLayout; - frameGridLayout = new QGridLayout(); - qint32 *left = nullptr, *top = nullptr, *right = nullptr, *bottom = nullptr; - frameGridLayout->getContentsMargins(left, top, right, bottom); - frameGridLayout->setContentsMargins(getMargins(MarginSection::DisplayGrid)); - ui->detailFrame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); - ui->detailFrame->setLayout(frameGridLayout); -} -void VMManagerDetailSection::setSections() { - clearContentsSetupGrid(); int row = 0; @@ -191,6 +168,19 @@ VMManagerDetailSection::setSections() sectionsToAdd.push_back(section.value); } bool keyAdded = false; + + // Reduce the text size for the label + // First, get the existing font + auto reference_label = new QLabel(); + auto smaller_font = reference_label->font(); + // Get a smaller size + // Not sure if I like the smaller size, back to regular for now + // auto smaller_size = 0.85 * smaller_font.pointSize(); + const auto smaller_size = 1 * smaller_font.pointSize(); + // Set the font to the smaller size + smaller_font.setPointSizeF(smaller_size); + delete reference_label; + for(const auto&line : sectionsToAdd) { if(line.isEmpty()) { // Don't bother adding entries if the values are blank @@ -203,15 +193,6 @@ VMManagerDetailSection::setSections() labelValue->setTextInteractionFlags(labelValue->textInteractionFlags() | Qt::TextSelectableByMouse); labelKey->setTextInteractionFlags(labelValue->textInteractionFlags() | Qt::TextSelectableByMouse); - // Reduce the text size for the label - // First, get the existing font - auto smaller_font = labelValue->font(); - // Get a smaller size - // Not sure if I like the smaller size, back to regular for now - // auto smaller_size = 0.85 * smaller_font.pointSize(); - const auto smaller_size = 1 * smaller_font.pointSize(); - // Set the font to the smaller size - smaller_font.setPointSizeF(smaller_size); // Assign that new, smaller font to the label labelKey->setFont(smaller_font); labelValue->setFont(smaller_font); @@ -237,6 +218,24 @@ VMManagerDetailSection::clear() { sections.clear(); setVisible(false); + + // Clear everything out + if(frameGridLayout) { + while(frameGridLayout->count()) { + QLayoutItem * cur_item = frameGridLayout->takeAt(0); + if(cur_item->widget()) + delete cur_item->widget(); + delete cur_item; + } + } + + delete frameGridLayout; + frameGridLayout = new QGridLayout(); + qint32 *left = nullptr, *top = nullptr, *right = nullptr, *bottom = nullptr; + frameGridLayout->getContentsMargins(left, top, right, bottom); + frameGridLayout->setContentsMargins(getMargins(MarginSection::DisplayGrid)); + ui->detailFrame->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); + ui->detailFrame->setLayout(frameGridLayout); } // QT for Linux and Windows doesn't have the same default margins as QT on MacOS. @@ -284,7 +283,7 @@ void CollapseButton::setButtonText(const QString &text) { void CollapseButton::setContent(QWidget *content) { assert(content != nullptr); content_ = content; - const auto animation_ = new QPropertyAnimation(content_, "maximumHeight"); // QObject with auto delete + /*const auto animation_ = new QPropertyAnimation(content_, "maximumHeight"); // QObject with auto delete animation_->setStartValue(0); animation_->setEasingCurve(QEasingCurve::InOutQuad); animation_->setDuration(300); @@ -294,16 +293,16 @@ void CollapseButton::setContent(QWidget *content) { animator_.addAnimation(animation_); if (!isChecked()) { content->setMaximumHeight(0); - } + }*/ } void CollapseButton::hideContent() { - animator_.setDirection(QAbstractAnimation::Backward); - animator_.start(); + /*animator_.setDirection(QAbstractAnimation::Backward); + animator_.start();*/ } void CollapseButton::showContent() { - animator_.setDirection(QAbstractAnimation::Forward); - animator_.start(); + /*animator_.setDirection(QAbstractAnimation::Forward); + animator_.start();*/ } diff --git a/src/qt/qt_vmmanager_detailsection.hpp b/src/qt/qt_vmmanager_detailsection.hpp index 7619a476c..a7da9470e 100644 --- a/src/qt/qt_vmmanager_detailsection.hpp +++ b/src/qt/qt_vmmanager_detailsection.hpp @@ -61,8 +61,10 @@ public: ~VMManagerDetailSection() override; void addSection(const QString &name, const QString &value, VMManager::Display::Name displayField = VMManager::Display::Name::Unknown); + void setSections(); void clear(); + QLabel *tableLabel; CollapseButton *collapseButton; // QGridLayout *buttonGridLayout; QGridLayout *frameGridLayout; @@ -82,7 +84,6 @@ private: void setSectionName(const QString &name); void setupMainLayout(); void clearContentsSetupGrid(); - void setSections(); static QMargins getMargins(MarginSection section);