Over the last few days I have been pushing forward on several fronts, and I also published a short YouTube video showing a quick installation flow for MS-DOS 3.30 and Windows 2.10: https://www.youtube.com/watch?v=EyJ-g8DnEoM

Quite a lot of time also went into MS-DOS 5.0 compatibility work, but the biggest change so far is adding protected mode support to the 286 core. At this point that work is roughly 85% complete. Because this code path has not been properly profiled yet, there is a noticeable performance drop right now, but that is something I plan to address in the next nightly releases.

Probably the biggest milestone of all is installing and correctly booting Windows 3.0, in real mode for now.

Windows 3.0 setup on 286

I spent a good few days on that alone. The current blocker is still protected mode and the exact LOADALL handling semantics, including some unofficial documentation around that instruction. Even though I already have LOADALL implemented, the Windows 3.0 protected-mode boot still falls into an infinite loop.

This was a bit of a move into the future, because stable Windows 3.0 protected mode was something I originally planned only for the 0.1.0 beta milestone, but I could not resist trying it earlier.

The emulator codebase has also grown enough that I had to introduce ccache on CI/CD. Building and running one full pipeline, whether on Windows or Linux, was taking roughly 15 minutes. Fortunately I have already managed to cut a few solid minutes off that.

I am also preparing a separate test suite. These will be end-to-end tests, because unit tests alone will not cover everything here. As the 286 core keeps expanding with protected mode support, regressions sometimes slip in, so I want to harden the project by running CI scenarios such as booting DOS 5.0, booting Windows 3.0 in real mode, and launching a program afterward.

Another thing that sometimes makes itself felt now is performance regression. Because of the work around 286 protected mode, quite a lot of extra emulator state tracing code has been added. Some of it is already disabled behind preprocessor directives, but I still need to profile the code properly and generate flamegraphs, because I have the impression there are still many low-hanging fruits left to collect.

We are slowly getting closer to version 0.1.0 alpha. There are still quite a few smaller bugs on my TODO list. They are not always critical, but they can definitely be annoying.

Thanks, and see you next time!

Previous Post Next Post