VOGONS


First post, by FalconFour

User metadata
Rank Newbie
Rank
Newbie

I'm a sucker for anachronism. You know something that really bugged me? That Windows 3.x supported Hercules, but 95/98 didn't. You can try to load the Win3.x driver into Win95 by upgrading, but the best you'll get is a BSOD (black screen of death on Hercules, that is) claiming an exception occurred, the moment it tries loading the driver and going graphical. Hercules on 9x was dead... for 30 years.

Now it's back.

The attachment IMG_6231.JPG is no longer available

Presenting... Herc9x. Crafted from the torched and gutted carcass of vmdisp9x, the only open-source mostly-feature-complete modern-ish driver architecture I could find for Win9x, this driver adequately massages one of those old single-chip graphics cards you have in the junk bin into semi-competently displaying the world of Windows 9x through a 1-bit lens.

Relies heavily/exclusively on Windows 9x's DIB engine, which is new for Windows 95 and a big reason that Hercules was never ported to it. The Hercules display area is an unusual-aspect 720x348 (2.06 AR). To compensate for this, a virtual mode is also implemented - 720x522 (1.38 AR) which skips every 3rd scanline and produces a distorted, but much-more-usable, display area.

Very open to contributors to help fix bugs:

  • Stability. The driver is not fully stable. Random crashes (system hangs) occur both during rapid drawing activity and near-idle states, but it can also stay stable for over an hour playing audio in Winamp and it can blast through the rapid draws of winning Solitaire without crashing. This is the primary issue still under investigation.
  • INF installation not supported. The driver must be installed manually via SYSTEM.INI. Normal Add New Hardware / INF-based installation does not work because the driver breaks too many VGA and PnP conventions. Display Properties and Device Manager will not show the driver.
  • DOS box corruption. Opening a DOS prompt (Command Prompt) shows a "This program cannot run in a window" message. The driver blocks full-screen DOS switching since there is no VGA hardware to switch to. DOS/console applications are not currently usable.
  • Black rectangles. Black boxes sometimes appear behind removed on-screen objects (ghost artifacts). This appears to be a limitation of the Windows 9x DIB engine itself when operating in 1-bit color mode - the same behavior occurs with Microsoft's own framebuf.drv on VGA hardware in monochrome mode.
  • ISA bus contention. Heavy drawing activity generates substantial ISA bus traffic from the async blit timer. This can cause stuttering on ISA sound cards sharing the bus.

Find it here - easy download under the Releases section: https://github.com/FalconFour/Herc9x

Reply 1 of 17, by FalconFour

User metadata
Rank Newbie
Rank
Newbie

Just checked - it runs Quake 2. Playably. (I need to get a good video, but it runs great at 512x384 and ... less great at 640x480; I believe fullscreen is impossible unless a custom resolution is added)

Let the "pinnacle of sleepers" era begin. There are so many absurd builds possible now.

Reply 2 of 17, by roytam1

User metadata
Rank Member
Rank
Member

I wonder if you may extend this project to other 1bpp targets (like VGA Mono, or even CGA)?

Reply 4 of 17, by wierd_w

User metadata
Rank Oldbie
Rank
Oldbie

Now it needs to fake 256color mode (with aggressive dithering) for running applications that obcess over that, and you'll be able to have the most retro early 90s experience anywhere.

Doom95 would be another fun one to make video of, since you already did quake.

Unreal Tournament in software mode (*wahaha*) would be another amusing entry.

Reply 5 of 17, by BitWrangler

User metadata
Rank l33t++
Rank
l33t++

Heh, who has a PowerVR to test 3D accelerated hercules mono? (Think it might rely more on PCI communication though)

EGA dithering for 256 color may actually be slightly more than a novelty to anyone who got early 386 portable/clamshell/laptop with EGA graphics, and possibly jammed in the RAM to 16Mb and/or used upgrade chips to get it into upper end 486 performance.

roytam1 wrote on 2026-02-17, 12:20:

I wonder if you may extend this project to other 1bpp targets (like VGA Mono, or even CGA)?

If you've ever experienced the "joy" of Windows 2/3 CGA drivers, I doubt you want the same on 95... or to ever be forced to use them on 2 or 3 again.

Now the enhanced 16 color mode that GEM 2 or 3 ran in on Amstrad graphics, and possibly plantronics, that would be more interesting and more barely useable.

edit: I did try Doom on hercules mono once. It was possible in late 90s on Linux... and also possible in text mode with AAlib.
edit2: it needed some direct hardware thing for console, PC specific, I have been trying to remember what it was, sdlib sounds right, can't remember the sound setup, but think it was pre-ALSA
edit3: hmmm that might have been an early form of libsdl, some later intermediate version... one I used might have been svgalib, kinda ironically because it was hercules.... anyway you probably need something like slackware 4 to 6

Last edited by BitWrangler on 2026-02-18, 15:25. Edited 2 times in total.

Unicorn herding operations are proceeding, but all the totes of hens teeth and barrels of rocking horse poop give them plenty of hiding spots.

Reply 6 of 17, by Benedikt

User metadata
Rank Oldbie
Rank
Oldbie

I am wondering:
Are the timers in Win9x precise enough to allow a video driver to swap the displayed page during the vertical blanking interval?
Since a Hercules card typically has two pages of video memory and supports setting which one is displayed, combining that 50 Hz page swapping with the card's CRTC's Interlace Sync Mode should effectively enable an interlaced 720x696 pixel video mode.
That would be a much more convenient screen resolution for Win9x. Alternatively, the 50Hz page swapping could be used for temporal dithering.

Reply 7 of 17, by leileilol

User metadata
Rank l33t++
Rank
l33t++

why does the github credit claude

apsosig.png
long live PCem
FUCK "AI"

Reply 8 of 17, by digger

User metadata
Rank Oldbie
Rank
Oldbie

Just because Claude may have been used to help with some parts of the development doesn't necessarily mean that the entire driver was vibe-coded.

Regardless, this is a pretty cool accomplishment, especially given how you got Quake 2 running on it. I too am a sucker for anachronisms, especially in retro computing. There's just something unexplainably fun about getting technologies from different eras to work together.

Reply 9 of 17, by FalconFour

User metadata
Rank Newbie
Rank
Newbie

Short teaser video here:

https://www.youtube.com/watch?v=BbdCYTdJE0c

To address the burning question: Yes, AI was used in the making of this driver. While I am very savvy with Windows and PC hardware internals, I am not a kernel expert. I'm just a guy that sat there, said "Dang it, someone should make this a thing!", and realized "I am someone, and I now have tools to make it a reality". Navigating the knowns and unknowns, directing the tool to go down one debug path and backtrack when it was a dead end, think about possible examples and conflicts, implement features (like virtual resolution extension/AR correction), setting up a debugger and running enough failed builds that I dang near gave up hope - that was all me. I can read C code pretty well, but the number of complex APIs and function calls are a jungle of unknown-unknowns to me. The absolute elation when ONE single line of assembly (a bug present in the original vmdisp9x code under a path that was never taken until now) - that was Claude. Every line of actual code (that's not part of original vmdisp9x) is written by Claude. The direction of how that code was written - that was me.

Extending to other targets like EGA/CGA? It's definitely worth a thought. CGA (320×200 in 4 colors or 640x200 in 2) is even more unusable in its graphics mode (and god, the gaudy color pallette). EGA is slightly better but even more punatively cramped than Hercules in the vertical axis (640×350 × 16 colors if you play it right, it seems). Managing color mapping/pallette might be a jungle on top of line-skipping to make a usable display area. EGA is at least worth thinking about...

Glad it's at least mostly positively received, and I hope the news of AI's involvement doesn't tarnish the new frontiers we can take-on in absurd builds. I'm totally open to having every line be rewritten by a real human that knows what they're doing and will gladly consider/accept pull requests to improve the state of things. At least now we have this thing to play with 😀

Reply 10 of 17, by FalconFour

User metadata
Rank Newbie
Rank
Newbie
FalconFour wrote on 2026-02-18, 08:59:

The absolute elation when ONE single line of assembly (a bug present in the original vmdisp9x code under a path that was never taken until now)

Huh. Can't edit posts? Well, I meant to say - the absolute elation when ONE single line of assembly was diagnosed to be the cause of initial inability to get the driver to display graphical mode at all. Or something on that fragmented thought process - the initial build/test process was a tough slog of getting a debug pipeline working (COM ports come out as "named pipes" in 86box - a somewhat-tough thing to deal with) was not off to a great start. But once we discovered that loading the VxD in "static" mode bypasses a working "dynamic" loading path in vmdisp9x and triggers a seemingly-untested area... found there was a mismatched "push/pop" that trashed the stack. The first time I booted up the fix and saw the desktop come to life, I shot back in my chair across the room and shouted pure joy for a few seconds. That's a hell of a feeling. ❤

Reply 11 of 17, by noshutdown

User metadata
Rank Oldbie
Rank
Oldbie
FalconFour wrote on 2026-02-17, 08:04:

Just checked - it runs Quake 2. Playably. (I need to get a good video, but it runs great at 512x384 and ... less great at 640x480; I believe fullscreen is impossible unless a custom resolution is added)

Let the "pinnacle of sleepers" era begin. There are so many absurd builds possible now.

I am not a big fan of hgc but remember that there was some hack getting cga games run on hgc, right?

Reply 12 of 17, by BinaryDemon

User metadata
Rank Oldbie
Rank
Oldbie
FalconFour wrote on 2026-02-17, 08:04:

Just checked - it runs Quake 2. Playably. (I need to get a good video, but it runs great at 512x384 and ... less great at 640x480; I believe fullscreen is impossible unless a custom resolution is added)

Let the "pinnacle of sleepers" era begin. There are so many absurd builds possible now.

Crazy. I never would have imagined Quake2 playable on an ISA card. Must be because monochrome just uses much less data.

I'm curious how it looks, can you post a ScreenShot? Nevermind, I saw the youtube video. Very cool.

Reply 13 of 17, by noshutdown

User metadata
Rank Oldbie
Rank
Oldbie
BinaryDemon wrote on 2026-02-18, 11:59:

Crazy. I never would have imagined Quake2 playable on an ISA card. Must be because monochrome just uses much less data.

I'm curious how it looks, can you post a ScreenShot? Nevermind, I saw the youtube video. Very cool.

Quake2 should run on all isa vga cards that i know of, it runs at 320*240*8bpp mode by default, which is supported by all standard vga cards, although i would not try win9x with any card that doesn't support 640*480*8bpp desktop.
Isa bandwidth is not a major limitation for vga mode, fastest cards can transfer 4mb per second, while a frame of 320*200*8bpp graphics takes 62.5kb.

Reply 14 of 17, by DEAT

User metadata
Rank Member
Rank
Member
BinaryDemon wrote on 2026-02-18, 11:59:

Crazy. I never would have imagined Quake2 playable on an ISA card. Must be because monochrome just uses much less data.

You can get well over 20 FPS at 320x240 on software mode with the right combination of hardware.

win16.page | Twitch

Reply 15 of 17, by FalconFour

User metadata
Rank Newbie
Rank
Newbie

On an 8-bit ISA card though? At 512x384? 😀 Yeah, I'm quite surprised it's able to run Quake II so well. Throw a bright-lit map at it, and you'll actually have a good time. LOTS of other software (games) refuse to run without 256-color mode, though. It's got its limitations, but the doors of "what can you run on this hardware" just got blown much wider open. Even web browsers are happy to play ball (IE4 at least, haven't yet tried others).

Big news: the biggest issue with the driver (random crashes) is fixed. Semaphores are hard. Just the wrong timing and the driver locks up forever. Fixed that. Haven't had a crash in the past 2 days' play sessions.

New "feature": created "bsplash.exe" - boot splash utility that reads a 1-bit Windows bitmap (save in mspaint as "monochrome") and dumps it to the screen at startup. Plop "@echo off" and "bsplash logo.bmp" into your autoexec.bat, and the whole dang computer starts to look like it *belongs* in Windows 98-land.

https://photos.app.goo.gl/u5E9crZ15th5Hd5F6

Totally ready to play some crazy tricks at the next VCF. All released and documented in the GitHub page.

Reply 16 of 17, by FalconFour

User metadata
Rank Newbie
Rank
Newbie

Little update. Next biggest issue - random black boxes behind redrawn areas - fixed. "Bare metal" Windows 95 setup now works too (100% "blank system to Win95 desktop" with just a Herc card) with a setup patching utility you get onto the system via floppy. 98 still requires a VGA-installed setup to start with.

Now you basically just have "Windows, but in 1-bit" and I think I'm cool leaving the project here for now 😀 hope folks have fun with it.

Reply 17 of 17, by digger

User metadata
Rank Oldbie
Rank
Oldbie

Thanks for working on this and sharing this with the world!