From 89f6a3fe5fd9356c54117e07a90e5252acc54ad7 Mon Sep 17 00:00:00 2001 From: Akamaki <97360908+akmed772@users.noreply.github.com> Date: Thu, 26 Feb 2026 17:12:39 +0900 Subject: [PATCH 01/11] PS55DA2: Correct video timings * Corrected the height of the screen. * Added a pixel clock for IBM 8515 monitor. --- src/video/vid_ps55da2.c | 38 +++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/src/video/vid_ps55da2.c b/src/video/vid_ps55da2.c index 0bd5035b0..2de731afd 100644 --- a/src/video/vid_ps55da2.c +++ b/src/video/vid_ps55da2.c @@ -64,7 +64,8 @@ #define DA2_MASK_GAIJIRAM 0x3ffff /* 0x3FFFF */ #define DA2_MASK_VRAM 0xfffff /* 0xFFFFF */ #define DA2_MASK_VRAMPLANE 0x1ffff /* 0x1FFFF */ -#define DA2_PIXELCLOCK 58000000.0 /* 58 MHz interlaced */ +#define DA2_CLOCK_58MHZ 58000000.0 /* 58 MHz interlaced */ +#define DA2_CLOCK_45MHZ 45570000.0 /* 45.57 MHz interlaced */ #define DA2_BLT_MEMSIZE 0x10 #define DA2_BLT_REGSIZE 0x40 #define DA2_DEBUG_BLTLOG_SIZE (DA2_BLT_REGSIZE + 1) @@ -77,9 +78,9 @@ /* These ROMs are currently not found. At least, IBM-J released a Korean and PRC version of PS/55 for each market. */ #define DA2_DCONFIG_CHARSET_HANT 3 /* for Code page 938 Traditional Chinese */ -#define DA2_DCONFIG_MONTYPE_COLOR 0x0A -#define DA2_DCONFIG_MONTYPE_8515 0x0B -#define DA2_DCONFIG_MONTYPE_MONO 0x09 +#define DA2_DCONFIG_MONTYPE_COLOR 0x0A /* 1010: IBM 8514 */ +#define DA2_DCONFIG_MONTYPE_8515 0x0B /* 1011: IBM 8515 */ +#define DA2_DCONFIG_MONTYPE_MONO 0x09 /* 1001: IBM 8604 */ #define DA2_BLT_CIDLE 0 #define DA2_BLT_CFILLRECT 1 @@ -347,7 +348,7 @@ typedef struct da2_t { int hdisp, htotal, hdisp_time, rowoffset; int lowres; int rowcount; - double clock; + double clock, pixelclock; uint32_t memaddr_latch, ca_adj; uint64_t dispontime, dispofftime; @@ -681,7 +682,7 @@ static uint8_t pixel1tohex(uint32_t addr, int index, da2_t *da2) { uint8_t pixeldata = 0; - for (uint8_t i = 0; i < 8; j++) { + for (uint8_t i = 0; i < 8; i++) { if (da2_vram_r(((addr << 3) | i) & (1 << (7 - index)), da2)) pixeldata++; } @@ -2330,14 +2331,18 @@ da2_recalctimings(da2_t *da2) /* In the video mode 3, you'll see a blank below the screen. It's NOT a bug. */ da2->hdisp -= da2->crtc[LC_START_H_DISPLAY_ENAB]; da2->dispend -= da2->crtc[LC_START_V_DISPLAY_ENAB]; - da2->dispend += 1; da2->htotal = da2->crtc[LC_HORIZONTAL_TOTAL]; - da2->htotal += 1; + da2->htotal += 2; da2->rowoffset = da2->crtc[LC_OFFSET]; /* number of bytes in a scanline */ - da2->clock = da2->da2const; + if (da2->crtc[LC_END_HSYNC_PULSE] & 0x8000) + da2->pixelclock = DA2_CLOCK_45MHZ; + else + da2->pixelclock = DA2_CLOCK_58MHZ; + da2->da2const = (uint64_t) ((cpuclock / da2->pixelclock) * (double) (1ull << 32)); + da2->clock = (double)da2->da2const; if (da2->vtotal == 0) da2->vtotal = da2->vsyncstart = da2->vblankstart = 256; @@ -2407,9 +2412,11 @@ da2_recalctimings(da2_t *da2) da2->dispontime = TIMER_USEC; if (da2->dispofftime < TIMER_USEC) da2->dispofftime = TIMER_USEC; - da2_log("da2 horiz total %i display end %i vidclock %f\n", da2->crtc[0], da2->crtc[1], da2->clock); + da2_log("da2 horiz total %i display end %i vidclock %f\n", da2->htotal, da2->hdisp, da2->clock); da2_log("da2 vert total %i display end %i max row %i vsync %i\n",da2->vtotal,da2->dispend,(da2->crtc[9]&31)+1,da2->vsyncstart); - da2_log("da2 dispon %lu dispoff %lu on(us) %f off(us) %f\n",da2->dispontime, da2->dispofftime, (double)da2->dispontime / (double)cpuclock / (double) (1ULL << 32) * 1000000.0, (double)da2->dispofftime / (double)cpuclock / (double) (1ULL << 32) * 1000000.0); + da2_log("da2 dispon %lu dispoff %lu on(us) %f off(us) %f\n",da2->dispontime, da2->dispofftime, + (double)da2->dispontime / (double)cpuclock / (double) (1ULL << 32) * 1000000.0, + (double)da2->dispofftime / (double)cpuclock / (double) (1ULL << 32) * 1000000.0); da2_log("da2 linecompare %d\n", da2->split); } @@ -3231,7 +3238,7 @@ da2_reset(void *priv) da2->pos_regs[0] = DA2_POSID_L; /* Adapter Identification Byte (Low byte) */ da2->pos_regs[1] = DA2_POSID_H; /* Adapter Identification Byte (High byte) */ da2->pos_regs[2] = 0x40; /* Bit 7-5: 010=Mono, 100=Color, Bit 0 : Card Enable (set by reference diskette) */ - da2->ioctl[LS_CONFIG1] = OldLSI | Page_Two; /* Configuration 1 : DA-II, 1024 KB */ + da2->ioctl[LS_CONFIG1] = Page_Two; /* Configuration 1 : DA-III, 1024 KB */ da2->ioctl[LS_CONFIG1] |= ((da2->monitorid & 0x8) << 1); /* Configuration 1 : Monitor ID 3 */ da2->ioctl[LS_CONFIG2] = (da2->monitorid & 0x7); /* Configuration 2: Monitor ID 0-2 */ da2->fctl[0] = 0x2b; /* 3E3h:0 */ @@ -3270,7 +3277,7 @@ da2_init(UNUSED(const device_t *info)) da2->vram = calloc(1, DA2_SIZE_VRAM); da2->cram = calloc(1, DA2_SIZE_CRAM); da2->vram_display_mask = DA2_MASK_CRAM; - da2->monitorid = device_get_config_int("montype"); + da2->monitorid = device_get_config_int("montype"); da2->changedvram = calloc(1, (DA2_MASK_VRAMPLANE + 1) >> 9); /* XX000h */ da2->mmio.charset = device_get_config_int("charset"); @@ -3288,7 +3295,8 @@ da2_init(UNUSED(const device_t *info)) } mca_add(da2_mca_read, da2_mca_write, da2_mca_feedb, da2_mca_reset, da2); - da2->da2const = (uint64_t) ((cpuclock / DA2_PIXELCLOCK) * (double) (1ull << 32)); + da2->pixelclock = DA2_CLOCK_58MHZ; + da2->da2const = (uint64_t) ((cpuclock / DA2_CLOCK_58MHZ) * (double) (1ull << 32)); video_inform(VIDEO_FLAG_TYPE_SPECIAL, &timing_da2_mca); memset(da2->bitblt.payload, 0x00, DA2_BLT_MEMSIZE); memset(da2->bitblt.reg, 0xfe, DA2_BLT_REGSIZE * sizeof(uint32_t)); /* clear memory */ @@ -3436,7 +3444,7 @@ static void da2_speed_changed(void *priv) { da2_t *da2 = (da2_t *) priv; - da2->da2const = (uint64_t) ((cpuclock / DA2_PIXELCLOCK) * (double) (1ull << 32)); + da2->da2const = (uint64_t) ((cpuclock / da2->pixelclock) * (double) (1ull << 32)); da2_recalctimings(da2); } From 6b64833e1ce8fd77e7bbd2e2c9a0e812f36c8d2e Mon Sep 17 00:00:00 2001 From: Akamaki <97360908+akmed772@users.noreply.github.com> Date: Thu, 26 Feb 2026 19:51:50 +0900 Subject: [PATCH 02/11] PS55DA2: Added developer note --- src/video/vid_ps55da2.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/video/vid_ps55da2.c b/src/video/vid_ps55da2.c index 2de731afd..637e5bed2 100644 --- a/src/video/vid_ps55da2.c +++ b/src/video/vid_ps55da2.c @@ -64,8 +64,11 @@ #define DA2_MASK_GAIJIRAM 0x3ffff /* 0x3FFFF */ #define DA2_MASK_VRAM 0xfffff /* 0xFFFFF */ #define DA2_MASK_VRAMPLANE 0x1ffff /* 0x1FFFF */ -#define DA2_CLOCK_58MHZ 58000000.0 /* 58 MHz interlaced */ -#define DA2_CLOCK_45MHZ 45570000.0 /* 45.57 MHz interlaced */ +#define DA2_CLOCK_58MHZ 58000000.0 /* 58.000 MHz interlaced */ +#define DA2_CLOCK_45MHZ 45570000.0 /* 45.570 MHz interlaced */ +/* The DA-3 and later have the capability of monitor ID detection and 45.57/47.424 MHz OSCs. + They must be used for IBM 8515 monitor, but I don't know which OSC is used (or both). */ + #define DA2_BLT_MEMSIZE 0x10 #define DA2_BLT_REGSIZE 0x40 #define DA2_DEBUG_BLTLOG_SIZE (DA2_BLT_REGSIZE + 1) From 0c4877bd909ddcd011377be06c3f020775f0209d Mon Sep 17 00:00:00 2001 From: Akamaki <97360908+akmed772@users.noreply.github.com> Date: Thu, 26 Feb 2026 21:34:52 +0900 Subject: [PATCH 03/11] Changed 16/256c mode determination --- src/video/vid_ps55da2.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/video/vid_ps55da2.c b/src/video/vid_ps55da2.c index 637e5bed2..fe619a299 100644 --- a/src/video/vid_ps55da2.c +++ b/src/video/vid_ps55da2.c @@ -263,12 +263,12 @@ #define LG_SET_RESET_2 0x10 #ifndef RELEASE_BUILD -// #define ENABLE_DA2_LOG 1 +#define ENABLE_DA2_LOG 1 #endif #ifdef ENABLE_DA2_LOG -# define ENABLE_DA2_DEBUGIO 1 -# define ENABLE_DA2_DEBUGBLT 1 +// # define ENABLE_DA2_DEBUGIO 1 +// # define ENABLE_DA2_DEBUGBLT 1 // # define ENABLE_DA2_DEBUGVRAM 1 // # define ENABLE_DA2_DEBUGFULLSCREEN 1 // # define ENABLE_DA2_DEBUGMONWAIT 1 @@ -1379,7 +1379,7 @@ da2_out(uint16_t addr, uint16_t val, void *priv) case LC_START_H_DISPLAY_ENAB: case LC_START_V_DISPLAY_ENAB: case LC_VIEWPORT_SELECT: - case LC_VIEWPORT_PRIORITY: + case LC_COMMAND: da2->fullchange = 3; da2_recalctimings(da2); break; @@ -2368,7 +2368,8 @@ da2_recalctimings(da2_t *da2) if (!(da2->ioctl[LS_MODE] & 0x01)) { da2->hdisp *= 16; da2->char_width = 13; - if (da2->crtc[LC_VIEWPORT_PRIORITY] & 0x80) { + // if (da2->crtc[LC_VIEWPORT_PRIORITY] & 0x80) { + if (da2->crtc[LC_COMMAND] & 0x40) { da2_log("Set videomode to PS/55 8 bpp graphics.\n"); da2->render = da2_render_color_8bpp; da2->vram_display_mask = DA2_MASK_A000; From 96db09418c5e3ddd1c7aa6e6aa8122034073014e Mon Sep 17 00:00:00 2001 From: Akamaki <97360908+akmed772@users.noreply.github.com> Date: Thu, 26 Feb 2026 23:30:42 +0900 Subject: [PATCH 04/11] PS55DA2: Fix color palette issue in Win3.1 * Fixed an issue that the color palette remains changed after Windows 3.1 restarted with 1024x768 16 color mode. --- src/video/vid_ps55da2.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/video/vid_ps55da2.c b/src/video/vid_ps55da2.c index fe619a299..843dd791e 100644 --- a/src/video/vid_ps55da2.c +++ b/src/video/vid_ps55da2.c @@ -263,7 +263,7 @@ #define LG_SET_RESET_2 0x10 #ifndef RELEASE_BUILD -#define ENABLE_DA2_LOG 1 +// #define ENABLE_DA2_LOG 1 #endif #ifdef ENABLE_DA2_LOG @@ -3228,6 +3228,13 @@ da2_reset_ioctl(da2_t *da2) da2->ioctl[LS_RESET] = 0x00; /* Bit 0: Reset sequencer */ da2_outw(LS_INDEX, 0x0302, da2); /* Index 02, Bit 1: VGA passthrough, Bit 0: Character Mode */ da2_outw(LS_INDEX, 0x0008, da2); /* Index 08, Bit 0: Enable MMIO */ + /* Set default color palette (Windows 3.1 display driver won't reset palette regs) */ + for (uint16_t i = 0; i < 256; i++) { + da2->vgapal[i].r = ps55_palette_color[i & 0x3F][0]; + da2->vgapal[i].g = ps55_palette_color[i & 0x3F][1]; + da2->vgapal[i].b = ps55_palette_color[i & 0x3F][2]; + da2->pallook[i] = makecol32((da2->vgapal[i].r & 0x3f) * 4, (da2->vgapal[i].g & 0x3f) * 4, (da2->vgapal[i].b & 0x3f) * 4); + } } static void @@ -3255,13 +3262,6 @@ da2_reset(void *priv) da2->attrc[LV_CURSOR_CONTROL] = 0x13; /* cursor options */ da2->attr_palette_enable = 0; /* disable attribute generator */ - /* Set default color palette (Windows 3.1 display driver won't reset palette) */ - for (uint16_t i = 0; i < 256; i++) { - da2->vgapal[i].r = ps55_palette_color[i & 0x3F][0]; - da2->vgapal[i].g = ps55_palette_color[i & 0x3F][1]; - da2->vgapal[i].b = ps55_palette_color[i & 0x3F][2]; - da2->pallook[i] = makecol32((da2->vgapal[i].r & 0x3f) * 4, (da2->vgapal[i].g & 0x3f) * 4, (da2->vgapal[i].b & 0x3f) * 4); - } da2_log("da2_reset done.\n"); } From aa64aaa0a2573d0539a63e526845e963a61383a3 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 26 Feb 2026 22:37:25 +0500 Subject: [PATCH 05/11] Qt: Move the program icon path to qt_defs.hpp --- src/qt/qt_about.cpp | 11 ++--------- src/qt/qt_defs.hpp | 14 ++++++++++++-- src/qt/qt_main.cpp | 12 ++---------- 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/qt/qt_about.cpp b/src/qt/qt_about.cpp index f36282797..c47acd055 100644 --- a/src/qt/qt_about.cpp +++ b/src/qt/qt_about.cpp @@ -19,6 +19,7 @@ * Copyright 2022 dob205 */ #include "qt_about.hpp" +#include "qt_defs.hpp" extern "C" { #include <86box/86box.h> @@ -57,15 +58,7 @@ About::About(QWidget *parent) webSiteButton->connect(webSiteButton, &QPushButton::released, []() { QDesktopServices::openUrl(QUrl("https://" EMU_SITE)); }); -#ifdef RELEASE_BUILD - setIconPixmap(QIcon(":/settings/qt/icons/86Box-green.ico").pixmap(32, 32)); -#elif defined ALPHA_BUILD - setIconPixmap(QIcon(":/settings/qt/icons/86Box-red.ico").pixmap(32, 32)); -#elif defined BETA_BUILD - setIconPixmap(QIcon(":/settings/qt/icons/86Box-yellow.ico").pixmap(32, 32)); -#else - setIconPixmap(QIcon(":/settings/qt/icons/86Box-gray.ico").pixmap(32, 32)); -#endif + setIconPixmap(QIcon(EMU_ICON_PATH).pixmap(32, 32)); setWindowFlags(Qt::Dialog | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowCloseButtonHint); } diff --git a/src/qt/qt_defs.hpp b/src/qt/qt_defs.hpp index 58de88b67..c96c15256 100644 --- a/src/qt/qt_defs.hpp +++ b/src/qt/qt_defs.hpp @@ -2,9 +2,19 @@ #define QT_DEFS_HPP #if QT_VERSION >= QT_VERSION_CHECK(6, 7, 0) -#define CHECK_STATE_CHANGED checkStateChanged +# define CHECK_STATE_CHANGED checkStateChanged #else -#define CHECK_STATE_CHANGED stateChanged +# define CHECK_STATE_CHANGED stateChanged +#endif + +#ifdef RELEASE_BUILD +# define EMU_ICON_PATH ":/settings/qt/icons/86Box-green.ico" +#elif defined ALPHA_BUILD +# define EMU_ICON_PATH ":/settings/qt/icons/86Box-red.ico" +#elif defined BETA_BUILD +# define EMU_ICON_PATH ":/settings/qt/icons/86Box-yellow.ico" +#else +# define EMU_ICON_PATH ":/settings/qt/icons/86Box-gray.ico" #endif #endif // QT_DEFS_HPP diff --git a/src/qt/qt_main.cpp b/src/qt/qt_main.cpp index fd4bc5610..4b79c3acc 100644 --- a/src/qt/qt_main.cpp +++ b/src/qt/qt_main.cpp @@ -75,6 +75,7 @@ extern "C" { #include #include +#include "qt_defs.hpp" #include "qt_mainwindow.hpp" #include "qt_progsettings.hpp" #include "qt_settings.hpp" @@ -627,16 +628,7 @@ main(int argc, char *argv[]) #endif #ifndef Q_OS_MACOS -# ifdef RELEASE_BUILD - app.setWindowIcon(QIcon(":/settings/qt/icons/86Box-green.ico")); -# elif defined ALPHA_BUILD - app.setWindowIcon(QIcon(":/settings/qt/icons/86Box-red.ico")); -# elif defined BETA_BUILD - app.setWindowIcon(QIcon(":/settings/qt/icons/86Box-yellow.ico")); -# else - app.setWindowIcon(QIcon(":/settings/qt/icons/86Box-gray.ico")); -# endif - + app.setWindowIcon(QIcon(EMU_ICON_PATH)); # ifdef Q_OS_UNIX app.setDesktopFileName("net.86box.86Box"); # endif From d76c07fa8893cf818ca658175a00f3876d61a56d Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Thu, 26 Feb 2026 22:39:52 +0500 Subject: [PATCH 06/11] Qt: Replace the remaining use of 86box.png with .ico --- src/qt/assets/86box.png | Bin 846 -> 0 bytes src/qt/qt_updatedetails.cpp | 3 ++- src/qt/qt_vmmanager_addmachine.cpp | 5 ----- src/qt_resources.qrc | 1 - 4 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 src/qt/assets/86box.png diff --git a/src/qt/assets/86box.png b/src/qt/assets/86box.png deleted file mode 100644 index a90f63040182356ec829d792faf8994bf84f9f97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 846 zcmV-U1F`&xP) zprqQ`+5i9m|NsAhfPlcj!2bXM0DyodCMN%mjy^s<0RR90Yij`9-2X^O0J*uj006eO zwg6C2l9G~cZf;6SN&r>=06n>DkN^MTvHz+7vB&@aRRDkh001R(0RI30xd16g(@FpU z00DGTPE!Ct=GbNc0004Ra!ynM&!Tsl0007sNkl+WUl;xd=t!Nad*TrOFH`_?5p>J|NTY0doC&fT}X2e1NL5 z7ElEINmdAON>mjDMC+zJop}5Lpk|%GsA0igEducO!2{IwnN`;>P1CWO=EcjXfckg$rWAT=BSj7_e@GuQJG088oQXW?~~2HZMIV*ntY2R{TX zWUzS@(4h7-ySI0z|${#;-t(^A-^PNTB~6#5mhN0m4H63}T!c>KlJ_ z1nA!YwsGzo({K9j5?cfE&mhGaYZ&8jiEM(oAE18)XeZ7T1Bydz0OYrT0=SB)o`GXP zpC>5qLCsr0fmKWbC@}^kfcyPDC>MYT5{=IG*)9xT1PC`I{&_xy_+CR@hyXqwkB_qa zG&B5M{VRZ0{t)o^`g*c+-T>U&l>=Ck0Pg;80gKuLp3jGInm^tD1HQl4HP}yKQ7XEK zvjzOc14LMZMI8Z%;K$Gc7Ig$z5waGQ06;`YDh+UO*>(Vm?(nINg8g0Dj6gw^+*C+# z{Rm8M=u~(8RRxgTl)oCklKk1@-}_C0B{zaUPu^Q6>$S@zw0kRM1H1=oru-*2Ygh8vp #include @@ -52,7 +53,7 @@ UpdateDetails:: connect(ui->buttonBox, &QDialogButtonBox::accepted, [updateResult] { visitDownloadPage(updateResult.channel); }); - const auto logo = QPixmap(":/assets/86box.png").scaled(QSize(64, 64), Qt::KeepAspectRatio, Qt::SmoothTransformation); + const auto logo = QIcon(EMU_ICON_PATH).pixmap(QSize(64, 64)); ui->icon->setPixmap(logo); } diff --git a/src/qt/qt_vmmanager_addmachine.cpp b/src/qt/qt_vmmanager_addmachine.cpp index b8bed2fe5..6ff2a87a7 100644 --- a/src/qt/qt_vmmanager_addmachine.cpp +++ b/src/qt/qt_vmmanager_addmachine.cpp @@ -38,11 +38,6 @@ VMManagerAddMachine:: setPage(Page_NameAndLocation, new NameAndLocationPage); setPage(Page_Conclusion, new ConclusionPage); - // Need to create a better image - // QPixmap originalPixmap(":/assets/86box.png"); - // QPixmap scaledPixmap = originalPixmap.scaled(150, 150, Qt::KeepAspectRatio); - QPixmap wizardPixmap(":/assets/86box-wizard.png"); - #ifndef Q_OS_MACOS setWizardStyle(ModernStyle); setPixmap(LogoPixmap, QPixmap(":assets/addvm-logo.png")); diff --git a/src/qt_resources.qrc b/src/qt_resources.qrc index 1d6581fa9..5c125a9ba 100644 --- a/src/qt_resources.qrc +++ b/src/qt_resources.qrc @@ -83,7 +83,6 @@ qt/texture_frag.spv - qt/assets/86box.png qt/assets/86box-wizard.png qt/assets/addvm-logo.png qt/assets/addvm-watermark.png From 958761a67fb91a53f970831b9c571b2ff1bea279 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 27 Feb 2026 06:21:30 +0500 Subject: [PATCH 07/11] Remove unused icons --- src/qt/icons/green-square-16.png | Bin 115 -> 0 bytes src/qt/icons/pause-16.png | Bin 123 -> 0 bytes src/qt/icons/play-16.png | Bin 156 -> 0 bytes src/qt/icons/red-power-16.png | Bin 174 -> 0 bytes src/qt/icons/red-square-16.png | Bin 118 -> 0 bytes src/qt/icons/stop-16.png | Bin 120 -> 0 bytes src/qt/icons/yellow-square-16.png | Bin 117 -> 0 bytes 7 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 src/qt/icons/green-square-16.png delete mode 100644 src/qt/icons/pause-16.png delete mode 100644 src/qt/icons/play-16.png delete mode 100644 src/qt/icons/red-power-16.png delete mode 100644 src/qt/icons/red-square-16.png delete mode 100644 src/qt/icons/stop-16.png delete mode 100644 src/qt/icons/yellow-square-16.png diff --git a/src/qt/icons/green-square-16.png b/src/qt/icons/green-square-16.png deleted file mode 100644 index cb42c38ebbff15c1ca2a3a7289ee07d33323e338..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|bUj@hLo9le z6BY;<9E$ue`ET-y$%2UtD`!pQNmTMy7LqVcxYBSik>Tjf&LjqgJppV|iMIStfEpP* MUHx3vIVCg!0AmUubN~PV diff --git a/src/qt/icons/pause-16.png b/src/qt/icons/pause-16.png deleted file mode 100644 index 3757802324fb8df5973d732727932094a9ab89d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Og&v3Lo9le z6C_F=9PK{vUq6oJpL*CF!B|0~c&8*=WxGN)AW-v)waGfLf-!<|rDx>>Mux(biXx8< Sw`~R*z~JfX=d#Wzp$Py=TOw)z diff --git a/src/qt/icons/play-16.png b/src/qt/icons/play-16.png deleted file mode 100644 index bde40f503b155bffc67ccfaf035a058548575617..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|!aQ9ZLo9mF zUOLFjpuoZGV3PM>9?#)<=N7~>3*DOkH%s49$EI%u(&^R7bDqA5BI3}!*r V&Z{Hy#ejA)c)I$ztaD0e0swvyH(CGy diff --git a/src/qt/icons/red-square-16.png b/src/qt/icons/red-square-16.png deleted file mode 100644 index 32faa7cdcaaa5a44fa8c83ecab644de555e449ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 118 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|3_M*NLo9le z6BY;<9Fq7S8S!uOl8@)*-F7f8$#OGm>6Ga`k#MCUkeRKWQ6ychi;+S4BahUYq$`hs PdKo-j{an^LB{Ts54p}2u diff --git a/src/qt/icons/stop-16.png b/src/qt/icons/stop-16.png deleted file mode 100644 index d73cad140126d6c37246844369798397e90e4722..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|j67W&Lo9le z6C^SYbe#DqBJpFsgm2C3>xaJ{lsuBIl@z N;OXk;vd$@?2>@swA6@_e From c660e3589d6bc5e9d1bcfd8d9317a2f6941bdf27 Mon Sep 17 00:00:00 2001 From: Alexander Babikov Date: Fri, 27 Feb 2026 06:23:13 +0500 Subject: [PATCH 08/11] Fix floppy icon changing to ZIP if a removable drive is present --- src/qt/qt_machinestatus.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/qt/qt_machinestatus.cpp b/src/qt/qt_machinestatus.cpp index 668ebaf62..751506e76 100644 --- a/src/qt/qt_machinestatus.cpp +++ b/src/qt/qt_machinestatus.cpp @@ -772,9 +772,9 @@ MachineStatus::refresh(QStatusBar *sbar) if (rdisk_drives[i].bus_type == RDISK_BUS_DISABLED) { d->rdisk[i].pixmaps = &d->pixmaps.rdisk_disabled; } else if ((t == RDISK_TYPE_ZIP_100) || (t == RDISK_TYPE_ZIP_250)) { - d->fdd[i].pixmaps = &d->pixmaps.zip; + d->rdisk[i].pixmaps = &d->pixmaps.zip; } else { - d->fdd[i].pixmaps = &d->pixmaps.rdisk; + d->rdisk[i].pixmaps = &d->pixmaps.rdisk; } d->rdisk[i].label = std::make_unique(); d->rdisk[i].setEmpty(QString(rdisk_drives[i].image_path).isEmpty()); From 7da97a8987343a20bf898eaf01340514f1003aea Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Thu, 26 Feb 2026 22:10:03 -0600 Subject: [PATCH 09/11] Onboard video memory config overhaul part 1: Cirrus cards --- src/include/86box/video.h | 2 ++ src/machine/machine_table.c | 4 +-- src/video/vid_cl54xx.c | 61 ++++++++++++++++++++++++++++++++++--- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/src/include/86box/video.h b/src/include/86box/video.h index a83aa9371..01fdb5850 100644 --- a/src/include/86box/video.h +++ b/src/include/86box/video.h @@ -388,6 +388,7 @@ extern const device_t gd5426_onboard_isa_device; extern const device_t gd5426_onboard_device; extern const device_t gd5428_isa_device; extern const device_t gd5428_vlb_onboard_device; +extern const device_t gd5428_vlb_onboard_pb450_device; extern const device_t gd5428_vlb_onboard_tandy_device; extern const device_t gd5428_vlb_device; extern const device_t gd5428_diamond_speedstar_pro_b1_vlb_device; @@ -410,6 +411,7 @@ extern const device_t gd5434_vlb_device; extern const device_t gd5434_pci_device; extern const device_t gd5436_pci_device; extern const device_t gd5436_onboard_pci_device; +extern const device_t gd5436_onboard_pci_ics_device; extern const device_t gd5440_pci_device; extern const device_t gd5440_onboard_pci_device; extern const device_t gd5446_pci_device; diff --git a/src/machine/machine_table.c b/src/machine/machine_table.c index 2c22e4079..25fb1c42a 100644 --- a/src/machine/machine_table.c +++ b/src/machine/machine_table.c @@ -11070,7 +11070,7 @@ const machine_t machines[] = { .device = &sb486pv_device, .kbd_device = NULL, .fdc_device = NULL, - .vid_device = &gd5436_onboard_pci_device, + .vid_device = &gd5436_onboard_pci_ics_device, .snd_device = NULL, .net_device = NULL }, @@ -11213,7 +11213,7 @@ const machine_t machines[] = { .device = &pb450_device, .kbd_device = NULL, .fdc_device = NULL, - .vid_device = &gd5428_vlb_onboard_device, + .vid_device = &gd5428_vlb_onboard_pb450_device, .snd_device = NULL, .net_device = NULL }, diff --git a/src/video/vid_cl54xx.c b/src/video/vid_cl54xx.c index 91ec82912..611909cb0 100644 --- a/src/video/vid_cl54xx.c +++ b/src/video/vid_cl54xx.c @@ -4439,6 +4439,8 @@ gd54xx_init(const device_t *info) vram = 1024; else if ((id == CIRRUS_ID_CLGD5426) && (info->local & 0x200) && (info->local & 0x1000)) vram = 1024; + else if ((id == CIRRUS_ID_CLGD5420) && (info->local & 0x200)) + vram = 512; else if (id == CIRRUS_ID_CLGD5401) vram = 256; else @@ -4446,7 +4448,10 @@ gd54xx_init(const device_t *info) gd54xx->vram_size = vram << 10; } else { - vram = device_get_config_int("memory"); + if ((id == CIRRUS_ID_CLGD5436) && (info->local & 0x200) && (info->local & 0x1000)) + vram = 1; + else + vram = device_get_config_int("memory"); gd54xx->vram_size = vram << 20; } } @@ -4834,6 +4839,25 @@ static const device_config_t gd5426_config[] = { { .name = "", .description = "", .type = CONFIG_END } }; +static const device_config_t gd5428_1mb_config[] = { + { + .name = "memory", + .description = "Memory size", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 2048, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "1 MB", .value = 1024 }, + { .description = "2 MB", .value = 2048 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +}; + static const device_config_t gd5429_config[] = { { .name = "memory", @@ -4969,13 +4993,12 @@ static const device_config_t gd5434_onboard_config[] = { .description = "Memory size", .type = CONFIG_SELECTION, .default_string = NULL, - .default_int = 4, + .default_int = 2, .file_filter = NULL, .spinner = { 0 }, .selection = { { .description = "1 MB", .value = 1 }, { .description = "2 MB", .value = 2 }, - { .description = "4 MB", .value = 4 }, { .description = "" } }, .bios = { { 0 } } @@ -5098,7 +5121,7 @@ const device_t gd5420_onboard_device = { .available = NULL, .speed_changed = gd54xx_speed_changed, .force_redraw = gd54xx_force_redraw, - .config = gd542x_config, + .config = NULL, }; const device_t gd5422_isa_device = { @@ -5341,6 +5364,20 @@ const device_t gd5428_onboard_vlb_device = { .config = gd542x_config }; +const device_t gd5428_vlb_onboard_pb450_device = { + .name = "Cirrus Logic GD5428 (VLB) (On-Board) (PB450)", + .internal_name = "cl_gd5428_vlb_onboard_pb450", + .flags = DEVICE_VLB, + .local = CIRRUS_ID_CLGD5428 | 0x200, + .init = gd54xx_init, + .close = gd54xx_close, + .reset = gd54xx_reset, + .available = NULL, + .speed_changed = gd54xx_speed_changed, + .force_redraw = gd54xx_force_redraw, + .config = gd5428_1mb_config +}; + const device_t gd5428_vlb_onboard_tandy_device = { .name = "Cirrus Logic GD5428 (VLB) (On-Board) (Tandy)", .internal_name = "cl_gd5428_vlb_onboard_tandy", @@ -5536,7 +5573,21 @@ const device_t gd5436_onboard_pci_device = { .available = NULL, .speed_changed = gd54xx_speed_changed, .force_redraw = gd54xx_force_redraw, - .config = gd5434_config + .config = gd5434_onboard_config +}; + +const device_t gd5436_onboard_pci_ics_device = { + .name = "Cirrus Logic GD5436 (PCI) (On-Board) (ICS)", + .internal_name = "cl_gd5436_onboard_pci_ics", + .flags = DEVICE_PCI, + .local = CIRRUS_ID_CLGD5436 | 0x200 | 0x1000, + .init = gd54xx_init, + .close = gd54xx_close, + .reset = gd54xx_reset, + .available = NULL, + .speed_changed = gd54xx_speed_changed, + .force_redraw = gd54xx_force_redraw, + .config = NULL }; const device_t gd5436_pci_device = { From e617405539e72f100f730324f7b381eae924369d Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Thu, 26 Feb 2026 22:26:15 -0600 Subject: [PATCH 10/11] Onboard video memory config overhaul part 2: S3 cards --- src/video/vid_s3.c | 50 +++++++++++++++++++++++++++++++++++----- src/video/vid_s3_virge.c | 45 ++++++++++++++++++++++++++++++++++-- 2 files changed, 87 insertions(+), 8 deletions(-) diff --git a/src/video/vid_s3.c b/src/video/vid_s3.c index 37ade5ad1..07573e772 100644 --- a/src/video/vid_s3.c +++ b/src/video/vid_s3.c @@ -11606,6 +11606,14 @@ s3_init(const device_t *info) if (vram) vram_size = vram << 20; + else if (info->local == S3_86C805_ONBOARD) { + vram_size = 1024 << 10; + vram = 1; + } + else if (info->local == S3_PHOENIX_TRIO32_ONBOARD) { + vram_size = 1024 << 10; + vram = 1; + } else vram_size = 512 << 10; @@ -12651,6 +12659,36 @@ static const device_config_t s3_trio64v_config[] = { { .name = "", .description = "", .type = CONFIG_END } }; +static const device_config_t s3_trio64v_onboard_config[] = { + { + .name = "memory", + .description = "Memory size", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 2, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "1 MB", .value = 1 }, + { .description = "2 MB", .value = 2 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "colorkey", + .description = "Video chroma-keying", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +}; + static const device_config_t s3_standard_config[] = { { .name = "memory", @@ -12793,7 +12831,7 @@ const device_t s3_86c805_onboard_vlb_device = { .available = NULL, .speed_changed = s3_speed_changed, .force_redraw = s3_force_redraw, - .config = s3_9fx_config + .config = NULL }; const device_t s3_spea_mirage_86c805_vlb_device = { @@ -13172,7 +13210,7 @@ const device_t s3_phoenix_trio32_onboard_vlb_device = { .available = NULL, .speed_changed = s3_speed_changed, .force_redraw = s3_force_redraw, - .config = s3_phoenix_trio32_config + .config = NULL }; const device_t s3_phoenix_trio32_vlb_device = { @@ -13200,7 +13238,7 @@ const device_t s3_phoenix_trio32_onboard_pci_device = { .available = NULL, .speed_changed = s3_speed_changed, .force_redraw = s3_force_redraw, - .config = s3_phoenix_trio32_config + .config = s3_9fx_config }; const device_t s3_phoenix_trio32_pci_device = { @@ -13270,7 +13308,7 @@ const device_t s3_phoenix_trio64_onboard_pci_device = { .available = NULL, .speed_changed = s3_speed_changed, .force_redraw = s3_force_redraw, - .config = s3_standard_config + .config = s3_9fx_config }; const device_t s3_phoenix_trio64_pci_device = { @@ -13312,7 +13350,7 @@ const device_t s3_phoenix_trio64vplus_onboard_pci_device = { .available = NULL, .speed_changed = s3_speed_changed, .force_redraw = s3_force_redraw, - .config = s3_trio64v_config + .config = s3_trio64v_onboard_config }; const device_t s3_phoenix_trio64vplus_pci_device = { @@ -13494,5 +13532,5 @@ const device_t s3_trio64v2_dx_onboard_pci_device = { .available = NULL, .speed_changed = s3_speed_changed, .force_redraw = s3_force_redraw, - .config = s3_trio64v_config + .config = s3_trio64v_onboard_config }; diff --git a/src/video/vid_s3_virge.c b/src/video/vid_s3_virge.c index b53dd5e8c..88194688e 100644 --- a/src/video/vid_s3_virge.c +++ b/src/video/vid_s3_virge.c @@ -5336,6 +5336,10 @@ s3_virge_init(const device_t *info) virge->dithering_enabled = device_get_config_int("dithering"); if (virge->type >= S3_VIRGE_GX2) virge->memory_size = 4; + else if (virge->type == S3_VIRGE_325 && info->local & 0x100) + virge->memory_size = 2; + else if (virge->type == S3_VIRGE_DX && info->local & 0x100) + virge->memory_size = 2; else virge->memory_size = device_get_config_int("memory"); @@ -5749,6 +5753,43 @@ static const device_config_t s3_virge_config[] = { // clang-format on }; +static const device_config_t s3_virge_onboard_config[] = { + // clang-format off + { + .name = "bilinear", + .description = "Bilinear filtering", + .type = CONFIG_BINARY, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, + { + .name = "colorkey", + .description = "Video chroma-keying", + .type = CONFIG_BINARY, + .default_string = NULL, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, + { + .name = "dithering", + .description = "Dithering", + .type = CONFIG_BINARY, + .default_int = 1, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { { 0 } }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } + // clang-format on +}; + static const device_config_t s3_virge_stb_config[] = { // clang-format off { @@ -5933,7 +5974,7 @@ const device_t s3_virge_325_onboard_pci_device = { .available = NULL, .speed_changed = s3_virge_speed_changed, .force_redraw = s3_virge_force_redraw, - .config = s3_virge_config + .config = s3_virge_onboard_config }; const device_t s3_diamond_stealth_2000_pci_device = { @@ -6017,7 +6058,7 @@ const device_t s3_virge_375_onboard_pci_device = { .available = NULL, .speed_changed = s3_virge_speed_changed, .force_redraw = s3_virge_force_redraw, - .config = s3_virge_config + .config = s3_virge_onboard_config }; const device_t s3_diamond_stealth_2000pro_pci_device = { From e130b388b95c3cb8709c37af996f3f3711d78357 Mon Sep 17 00:00:00 2001 From: win2kgamer <47463859+win2kgamer@users.noreply.github.com> Date: Thu, 26 Feb 2026 22:38:59 -0600 Subject: [PATCH 11/11] Onboard video memory config overhaul part 3: ATi Mach32 and Trident --- src/video/vid_ati_mach8.c | 36 +++++++++++++++++++++++++++++++++++- src/video/vid_tgui9440.c | 2 +- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/video/vid_ati_mach8.c b/src/video/vid_ati_mach8.c index 58a54fb48..d4c98294b 100644 --- a/src/video/vid_ati_mach8.c +++ b/src/video/vid_ati_mach8.c @@ -7744,6 +7744,40 @@ static const device_config_t mach32_pci_config[] = { }, { .name = "", .description = "", .type = CONFIG_END } }; + +static const device_config_t mach32_pci_onboard_config[] = { + { + .name = "ramdac", + .description = "RAMDAC type", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = ATI_68860, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "ATI 68860", .value = ATI_68860 }, + { .description = "ATI 68875", .value = ATI_68875 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { + .name = "memory", + .description = "Memory size", + .type = CONFIG_SELECTION, + .default_string = NULL, + .default_int = 2048, + .file_filter = NULL, + .spinner = { 0 }, + .selection = { + { .description = "1 MB", .value = 1024 }, + { .description = "2 MB", .value = 2048 }, + { .description = "" } + }, + .bios = { { 0 } } + }, + { .name = "", .description = "", .type = CONFIG_END } +}; // clang-format on const device_t mach8_vga_isa_device = { @@ -7827,5 +7861,5 @@ const device_t mach32_onboard_pci_device = { .available = NULL, .speed_changed = mach_speed_changed, .force_redraw = mach_force_redraw, - .config = mach32_pci_config + .config = mach32_pci_onboard_config }; diff --git a/src/video/vid_tgui9440.c b/src/video/vid_tgui9440.c index f91fc3f96..426474a76 100644 --- a/src/video/vid_tgui9440.c +++ b/src/video/vid_tgui9440.c @@ -4294,7 +4294,7 @@ const device_t tgui9660_onboard_pci_device = { .available = NULL, .speed_changed = tgui_speed_changed, .force_redraw = tgui_force_redraw, - .config = tgui96xx_config + .config = tgui9440_config }; const device_t tgui9680_pci_device = {