
The second edition of this programmer's guide to DOS features a tutorial on the proper use of undocumented functions and a reference to all undocumented functions, as well a powerful utilities disk.
For the past 6 months I've also been working on a period-accurate QBASIC 1.1 simulator (and corresponding virtual hardware layer) that runs entirely in the browser.
I've got a stack of books on my desk from when I was a kid in the 90s that have literally been my religious texts (Undocumented DOS, The Programmer's PC Sourcebook, etc), so I know how hard it is to get this right.
I've actually posted about it a couple times here in HN.
Anyway small bit of feedback:
Technically if you don't clear the screen (using CLS, or set a SCREEN mode other than zero), the cursor retains its position even between program executions.
So basically if you have a program like this:
PRINT "WHY IS A RAVEN LIKE A WRITING DESK"
END
And then you run it again - the output screen should display: WHY IS A RAVEN LIKE A WRITING DESK
WHY IS A RAVEN LIKE A WRITING DESK
There's a thousand other subtleties like this that make the proverbial "last mile" sometimes feel insurmountable. Fun though!* Your definition of "fun" may vary.
The HAL has a virtualized CPU, and I spent more time than I’d care to admit precisely timing instructions on various period-accurate hardware (386SX, 486DX). I even tuned it to the point where programs that take advantage of it actually run faster on the 486 because of the built‑in math coprocessor.
> Writing directly to VRAM? WAIT for vsync?
All screen modes are supported including the ability to draw to hidden pages. It’s got a fully emulated VGA hardware layer and even a synthetic VGA beam clock, so you can do tricks like `WAIT &H3DA, 8, 8` for vertical retrace to minimize flicker.
> Call absolute for mouse usage?
Yup! Int 33h is fully supported, we basically use a virtual TSR driver which is pointed to by the interrupt vector table. I actually tested it with an old pixel art editor I made in the 90s!
PEEK/POKE and much of the BIOS are fully simulated, so you can use more advanced QuickBasic 4.5 features like calling interrupts (including silly stuff like rebooting the computer via int 19h).
There's a ton more (including a Hayes compatible modem plugged into COM1) as well.
I basically dug out a stack of my old PC books from the late ’80s and early ’90s, and they’ve been my bibles for the past several months (Undocumented DOS, The Programmer’s PC Sourcebook, etc.).
It’s about 99% done at this point. I’m hoping to do a Show HN in the next couple of weeks.
Also, missing the very important, closer to primary sources, physical dead tree resources that are needed as reference to program things.
- Black Book of Graphics Programming (Special Edition) (now FOSS)
- Programmer's Guide To The EGA, VGA, And Super VGA Cards (3rd Edition)
- PC-Intern (where I learned how Central Point, Norton, and later FreeBSD made "GUI" with sub-character graphical pointers in text mode through custom fonts)
- Undocumented PC
- Undocumented DOS
- PC Interrupts (and) Uninterrupted Interrupts (Ralf Brown)
- Microsoft MS-DOS Programmer's Reference
- The Programmer's PC Sourcebook: Reference Tables for IBM PCs and Compatibles, PS/2 Systems, EISA-based Systems, MS-DOS Operating System Through Version 5
- (various hardware books by MindShare)
- Also useful would be real BIOS dumps and (dis)assembly, and MS-DOS source
- Emulators are no substitute for the real thing because the problem is that no emulator (commercial or otherwise) is faithful to the quirks, capabilities, and limitations of real hardware (in system, protected mode debuggers/profilers sure are nice though compared to triggering lockup, spontaneous reboot, or a beeping deadlock). If anyone remembers Bochs, its floppy behavior definitely doesn't act or look anything like a real FDC. (I submitted some patches for it many moons ago in college.)
(Yep, I own a "braindead" 286, 386DX, 486DX-100, Am5, and P5, P2, P Pro, and P4.)
Because if something can't work on real hardware and original OSes, then it's probably make believe. Prefer to make honest, real things wherever feasible.
I still remember the DWIM (Do what I mean) interrupt they used as the demonstration of how each interrupt was documented.
