First post, by TinPlat
Hi everyone,
Over the past few months I've been working on a project to bring several modern web engine components to 16-bit Windows for Workgroups 3.11. The goal was to make it possible to parse HTML5, CSS, and run JavaScript directly on period hardware without relying on a proxy or modern machine.
Here's what I've ported:
- FreeType (compiled with MSVC 1.52c) – TrueType/OpenType font rendering
- Gumbo-parser (compiled with Open Watcom 2.0) – HTML5 parser
- LibCSS + libparserutils + libwapcaplet (Open Watcom 2.0) – CSS parsing and selection engine
- QuickJS (Open Watcom 2.0) – modern JavaScript engine (ES2020 support)
All of these are compiled as 16-bit DLLs and can be loaded dynamically or statically by Win16 applications (FreeType is dynamic-load only).
Current status:
- FreeType, Gumbo-parser, and the LibCSS family successfully compile and can be initialized from a test program. Basic functionality should work, though not every feature has been thoroughly tested.
- QuickJS also compiles and JS_NewRuntime / JS_NewContext work without GPF. However, JS_Eval currently hits a GPF when performing string concatenation inside an OP_add bytecode handler. The root cause appears to be a stack-pointer corruption issue when the JavaScript code uses string operations.
The project is hosted on GitHub:
Win16WebStack
Each subdirectory contains the original project's license and the modified source files.
I'm sharing this in the hope that the retro computing community finds it useful, and maybe someone with a deep knowledge of Open Watcom's code generation or QuickJS internals might be interested in taking a look at the remaining QuickJS bug. I've spent a lot of time on this, but I'm not sure how much more I can personally dedicate to it. That said, I'd be very happy if others want to pick it up, improve it, or even build something cool on top of it.
Building:
I've kept the project files intact, so you can open and compile them directly in the IDE.
If you have questions, feel free to open an issue on GitHub or reply here.
Thanks!