VOGONS


First post, by RetroPCCupboard

User metadata
Rank Oldbie
Rank
Oldbie

Sorry if this is the wrong place to post this, but none of the sections looked a good fit for this question.

I am collecting books on PC game dev. Specifically I am interested in the DOS and Win9x eras. This is primarily because I just want to understand how to game engines work. At least when they were at the level where an average person might stand a chance of comprehending it and writing their own based on described techniques.

I would like to have suggestions for books that I am missing. These are the books I have (a large proportion are Andre LaMothe or endorsed by him):

The attachment 20250827_133926.jpg is no longer available
The attachment 20250827_133934.jpg is no longer available
The attachment 20250827_133941.jpg is no longer available

I havent seen any physical books on 3DFX Glide, but I do have this PDF:

https://archive.org/details/bitsavers_3dfxGli … eP99806_1152130

I don't plan to make any games to sell. Nor do I want to try to be employed to write games (it's very competetive market, and I have read that many game dev companies are struggling). I mostly just want to play around in DOS and with early 3D acceleration.

I also have many books on C, C++, Assembly, DOS and IBM PC internals.

Any opinions on the books I have, or suggestions for ones to get, would be appreciated.

Reply 1 of 9, by megatron-uk

User metadata
Rank l33t
Rank
l33t

I'm not sure you'll find much for DOS - there just wasn't the level of standardisation that occurred in Windows.

There were some common libraries used; the Miles sound system and the Human Machine Interface sound system being two. But beyond that you wrote your engine and game logic from scratch, unless you were prepared to license something proprietary like the Doom or Build engines from their owners.

There *are* some standard API's available; but they were implemented in spite of DOS, not because of it - in an attempt to bring cross-platform development. The best example being Allegro (DOS support removed after Allegro 4.2.x) - that's possibly your best bet for anything published during the period it was used. Anything else is likely to exist either only in an online format (either released posthumously after the death of DOS to the community - some of the 3DFX technical information may possibly fall into this category, or pulled together by the community itself).

There just isn't much of it, because most DOS games were written from scratch, direct on the hardware.

My collection database and technical wiki:
https://www.target-earth.net

Reply 2 of 9, by RetroPCCupboard

User metadata
Rank Oldbie
Rank
Oldbie
megatron-uk wrote on Yesterday, 16:17:
I'm not sure you'll find much for DOS - there just wasn't the level of standardisation that occurred in Windows. […]
Show full quote

I'm not sure you'll find much for DOS - there just wasn't the level of standardisation that occurred in Windows.

There were some common libraries used; the Miles sound system and the Human Machine Interface sound system being two. But beyond that you wrote your engine and game logic from scratch, unless you were prepared to license something proprietary like the Doom or Build engines from their owners.

There *are* some standard API's available; but they were implemented in spite of DOS, not because of it - in an attempt to bring cross-platform development. The best example being Allegro (DOS support removed after Allegro 4.2.x) - that's possibly your best bet for anything published during the period it was used. Anything else is likely to exist either only in an online format (either released posthumously after the death of DOS to the community - some of the 3DFX technical information may possibly fall into this category, or pulled together by the community itself).

There just isn't much of it, because most DOS games were written from scratch, direct on the hardware.

Thanks for the info. Yes, Allegro rings a bell. I may have even downloaded it to play with back in the day.

You are right that there are not so many books on DOS, but some books are fairly generic so the concepts could be used. "Beginning C++ Game Programming" by Michael Dawson for instance or those on the architecture of a game engine or game AI.

Three standout books I have that do cover DOS are "Graphics Programming Black Book" by Michael Abrash, and "Black Art of 3D Game Programming " and "Teach Yourself Game Programming in 21 Days" (both by Andre LaMothe)

I haven't got any books dedicated to audio though, so good shout on that. Will have to see if I find anything old enough to cover what I want.

Reply 3 of 9, by Jo22

User metadata
Rank l33t++
Rank
l33t++

Hi, not very common, but..
- Turbo Pascal/Turbo C BGI drivers for graphics (incl. supervga.bgi)
- AdLib/Creative sound drivers for hardware abstraction (sound.com, sb-sound.com)
- Quick Basic libraries, such as DirectQB and SVGAQB.Lib
- Microsoft Game Shop (it's QBasic before QBasic basically; a cut-down version of QuickBASIC 4.5 without compiler)

Then there's also the mvsound.sys of the Media Vision ProAudioSpectrum 16 soundcard.
It initializes the souncard, but has some PCM features too? SDK isn't available, details unknown.

PS: In theory, the ADI drivers of AutoCAD provided good abstraction and compatibilty with graphics cards.
Because many of the SVGA and other graphics cards had ADI drivers.
Unfortunately, the API isn't very good for games. It has 8 to 16 colours limit, too, I think.

PS/2: For accelerated graphics, there's basically just IBM 8514/A (2D) and 3dfx Voodoo (3D) in terms of industry standards.
Because 8514/A was cloned a few times or being implemented in SVGA cards (ATI Mach8etc).
There's also an emulator for ET-4000AX card, which can run Mah Jongg -8514-

PGA, TIGA and XGA/XGA2 also existed, as well as various APIs for 90s 3D cards (S3 Virge, Matrox Mystique, ATI Rage etc).
They didn't really catch on, though, I'm afraid.

Btw, it's also possible to write fullscreen applications using Windows 3.0 MME.
There's an Windows API to write directly to VGA graphics using infamous mode 13h.
Another solution is to use SciTech's WinDirect library. It uses VESA VBE to write directly to graphics framebuffer.

WinDirect and MGL

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 4 of 9, by RetroPCCupboard

User metadata
Rank Oldbie
Rank
Oldbie
Jo22 wrote on Yesterday, 19:03:
Hi, not very common, but.. - Turbo Pascal/Turbo C BGI drivers for graphics (incl. supervga.bgi) - AdLib/Creative sound drivers f […]
Show full quote

Hi, not very common, but..
- Turbo Pascal/Turbo C BGI drivers for graphics (incl. supervga.bgi)
- AdLib/Creative sound drivers for hardware abstraction (sound.com, sb-sound.com)
- Quick Basic libraries, such as DirectQB and SVGAQB.Lib
- Microsoft Game Shop (it's QBasic before QBasic basically; a cut-down version of QuickBASIC 4.5 without compiler)

Then there's also the mvsound.sys of the Media Vision ProAudioSpectrum 16 soundcard.
It initializes the souncard, but has some PCM features too? SDK isn't available, details unknown.

PS: In theory, the ADI drivers of AutoCAD provided good abstraction and compatibilty with graphics cards.
Because many of the SVGA and other graphics cards had ADI drivers.
Unfortunately, the API isn't very good for games. It has 8 to 16 colours limit, too, I think.

PS/2: For accelerated graphics, there's basically just IBM 8514/A (2D) and 3dfx Voodoo (3D) in terms of industry standards.
Because 8514/A was cloned a few times or being implemented in SVGA cards (ATI Mach8etc).
There's also an emulator for ET-4000AX card, which can run Mah Jongg -8514-

PGA, TIGA and XGA/XGA2 also existed, as well as various APIs for 90s 3D cards (S3 Virge, Matrox Mystique, ATI Rage etc).
They didn't really catch on, though, I'm afraid.

Btw, it's also possible to write fullscreen applications using Windows 3.0 MME.
There's an Windows API to write directly to VGA graphics using infamous mode 13h.
Another solution is to use SciTech's WinDirect library. It uses VESA VBE to write directly to graphics framebuffer.

WinDirect and MGL

Thanks for all of the useful info and links.

A colleague was actually recommending that I look into Turbo C BGI. So, rather disappinting to see on that link you gave that one of the first responders said it was really slow.

I want to start right from the basics to be honest. My maths is really rusty, and so is my C++. It's been 15yrs since I used C++. I program in C# and Javascript these days for my day job. I have started learning x86 Assembly on my 8088 CPU, but haven't got far yet.

I think initially I am just going to try to make a simple 2D game on my 8088. The book collection will most likely take me years to work through. But I am collecting them now whilst they are mostly affordable.

Reply 5 of 9, by Jo22

User metadata
Rank l33t++
Rank
l33t++
RetroPCCupboard wrote on Yesterday, 20:30:

Thanks for all of the useful info and links.

You're welcome. ^^

RetroPCCupboard wrote on Yesterday, 20:30:

A colleague was actually recommending that I look into Turbo C BGI. So, rather disappinting to see on that link you gave that one of the first responders said it was really slow.

Hi, that's true for the Borland BGIs. The third-party drivers are some faster.
There's even a 386 version that's optimized, I think.

https://www.von-bassewitz.de/uz/bgi.php

RetroPCCupboard wrote on Yesterday, 20:30:

I want to start right from the basics to be honest. My maths is really rusty, and so is my C++. It's been 15yrs since I used C++. I program in C# and Javascript these days for my day job. I have started learning x86 Assembly on my 8088 CPU, but haven't got far yet.

Sounds good! 🙂

RetroPCCupboard wrote on Yesterday, 20:30:

I think initially I am just going to try to make a simple 2D game on my 8088. The book collection will most likely take me years to work through. But I am collecting them now whilst they are mostly affordable.

Hi, that's a good start. Once it works, there's still a lot of room for optimizations!

If you have an V20, you can use some newer real-mode instructions found on 80186 and 80286 (8086-2 generation of x86).
Things like OUTS/INS are much faster than what 8086/8088 have to offer.
You probably know this, I just wanted to mention it.

Another thing to consider is an x87 FPU.
Some compilers that rely on a runtime may benefit from an x87.
QuickBASIC 4.5 runtime uses it by default, if available.

So drawing commands using co-ordinates or colour filling and
so on are a little bit being "accelerated" indirectly because it helps the runtime.

Here's an example (two) using the QB Torus demo:
https://www.youtube.com/watch?v=FaQa9INqZf8
https://www.youtube.com/watch?v=mYJ1IPph4tw

Maybe Borland has something similar, not sure.

A good software FPU used to be Franke.387 for 386 PCs. It runs very fast, too.
http://icfs.de/english/franke387.html

There's also another type of FPU emulator that uses software interrupts.
It basically patches them in software, so that *some* 8087 applications can run on an 8086/8088 system with the FPU emulator instead an x87 FPU.

This is a curiosity insofar, because normally an 80286 (or 80186) is required for 8087 emulation,
because of the required error handling that this CPU features.

https://forum.vcfed.org/index.php?threads/808 … for-8088.36890/

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 6 of 9, by RetroPCCupboard

User metadata
Rank Oldbie
Rank
Oldbie
Jo22 wrote on Yesterday, 21:04:
Hi, that's true for the Borland BGIs. The third-party drivers are some faster. There's even a 386 version that's optimized, I th […]
Show full quote

Hi, that's true for the Borland BGIs. The third-party drivers are some faster.
There's even a 386 version that's optimized, I think.

https://www.von-bassewitz.de/uz/bgi.php

RetroPCCupboard wrote on Yesterday, 20:30:

I want to start right from the basics to be honest. My maths is really rusty, and so is my C++. It's been 15yrs since I used C++. I program in C# and Javascript these days for my day job. I have started learning x86 Assembly on my 8088 CPU, but haven't got far yet.

Sounds good! 🙂

RetroPCCupboard wrote on Yesterday, 20:30:

I think initially I am just going to try to make a simple 2D game on my 8088. The book collection will most likely take me years to work through. But I am collecting them now whilst they are mostly affordable.

Hi, that's a good start. Once it works, there's still a lot of room for optimizations!

If you have an V20, you can use some newer real-mode instructions found on 80186 and 80286 (8086-2 generation of x86).
Things like OUTS/INS are much faster than what 8086/8088 have to offer.
You probably know this, I just wanted to mention it.

Another thing to consider is an x87 FPU.
Some compilers that rely on a runtime may benefit from an x87.
QuickBASIC 4.5 runtime uses it by default, if available.

So drawing commands using co-ordinates or colour filling and
so on are a little bit being "accelerated" indirectly because it helps the runtime.

Here's an example (two) using the QB Torus demo:
https://www.youtube.com/watch?v=FaQa9INqZf8
https://www.youtube.com/watch?v=mYJ1IPph4tw

Maybe Borland has something similar, not sure.

A good software FPU used to be Franke.387 for 386 PCs. It runs very fast, too.
http://icfs.de/english/franke387.html

There's also another type of FPU emulator that uses software interrupts.
It basically patches them in software, so that *some* 8087 applications can run on an 8086/8088 system with the FPU emulator instead an x87 FPU.

This is a curiosity insofar, because normally an 80286 (or 80186) is required for 8087 emulation,
because of the required error handling that this CPU features.

https://forum.vcfed.org/index.php?threads/808 … for-8088.36890/

Yes, lots of possibilities. I will probably do the dev work in DOSBox on my modern PC and periodically test it on the 8088. This is in a Pocket 8086 laptop. I have put an AMD 8088 in it and can run at either 4.77mhz or 10Mhz. I can swap for a V30 if I want more speed and more advanced instructions. But, initally I want it in its slowest configuration to see what I can make it do. I like a challenge. Lol.

I also have a Pentium MMX system at 300Mhz which I think would be fun to muck around with for making a basic 3d engine for DOS. But it will be some way off before I attempt anything like that.

Reply 7 of 9, by megatron-uk

User metadata
Rank l33t
Rank
l33t
RetroPCCupboard wrote on Yesterday, 21:28:

Yes, lots of possibilities. I will probably do the dev work in DOSBox on my modern PC and periodically test it on the 8088.

That's the way to do it, IMO. My development environment of choice for DOS based stuff is either OpenWatcom on Linux, or a modern GCC cross compiler (if targetting protected mode) and firing up Dosbox on the compiler output.

I'd never go back to native development tools now.

My collection database and technical wiki:
https://www.target-earth.net

Reply 8 of 9, by Jo22

User metadata
Rank l33t++
Rank
l33t++

GCC cross compiler

Heh. GCC gross compiler, rather. Compiling GCC7 took 6 days on my Power Mac (via macports)! 🥲

Edit:

But, initally I want it in its slowest configuration to see what I can make it do. I like a challenge. Lol.

+1

I read the Sanyo MBC-550 and 555 was among the slowest IBM PCs, btw.
It had a custom graphics chip with partial CGA compatibility.

An CGA/memory board and a special boot-up DOS diskette was available as an upgrade.
Together, they made it mostly IBM PC compatible; good enough to run MS Flight Simulator.

It just comes to mind, because of challenge.
An Sanyo emulator is maybe available for testing purposes.

Videos:
https://www.youtube.com/playlist?list=PLGt6Ig … O8Ue2wMryQtWNam

What's interesting about the 8088/8086 era is that there are so many obscure, yet beatiful systems.
And with a little, reversable V20/V30 upgrade they can be made compatible with 90s era software, even.

What comes to mind are the Rainbow 100, Alphatronics PC16, the c't-86 computer, NCR PC4..

PS: For sake of curiosity, you may also have a look for PC-Ditto.
It's an IBM PC emulator for Atari ST, which was available since 1986 or so.
The first version emulated an entire IBM PC with CGA graphics in software.

It was very slow, but actually usable to play slow-paced games and run a few business applications.
I myself played some graphics adventures that used CGA graphics, such as Fahrenheit 451. It was "ok" actually.

If I had to use a copy back in the day, then I would have switched the Atari Mega ST to 16 MHz, maybe.
Or installed an accelerator card, not sure. It would have helped the emulator.

I still use it for compatibility testing purposes, besides DOSBox and PCem.
Such as here: Re: Olivetti/Logabax/AT&T/Toshiba 640x400 hi-res graphics mode
PC-Ditto had issues with text-mode (the MDA type), so I used CGA graphics for text in QB.

The supplied utilities of Ditto do speed up text output on DOS and add some functionality.
They speed up utility is also usable on real XT class hardware.

PC-DOS 3.30 and MS-DOS 6.20 ran just fine last time I checked.
Re: Minimal hardware/peripherals to emulate for Windows
https://www.youtube.com/watch?v=ytM-uznCZc4

Oh, and then there's another one. The BBC Master 512.
It was an upgraded BBC Master 128 with an 80186 co-processor card.
It ran DOS Plus and GEM, had a mouse too. BeebEm emulated it at one point (older releases).
There's CGA emulation, which re-directs graphics to the BBC's native video modes.
Quite interesting. The palettes have different colours..
https://www.youtube.com/watch?v=V15vk2043mI

PS: What comes to mind about PC/XT class hardware:
MS-DOS 2.11 was very lightweight, easy to use and could use Unix style separators! It's also in ROM of Tandy 1000 series.
However, it wasn't the fastest when it comes to i/o and had limited floppy support.

Early emulators such as PC-Ditto thus had recommended to use DOS 3.x when possible.
Such as MS-DOS 3.20, because 3.30 wasn't out yet.

I do recommended PC-DOS 3.30, thus. It's more modern than the others, I think.
Compaq DOS 3.31 is another good alternative, MS-DOS 4.01 is a bit memory heavy.

If you're curious about CP/M-86, you may consider DOS Plus 1.2.
It can run both CP/M-86 and DOS 2.x applications and read both filesystems (CP/M and FAT12).
https://www.youtube.com/watch?v=D1v3e-pF4Kg

Multitasking on PC/XT is possible on PC-MOS/386 and Wendin DOS..
https://www.youtube.com/watch?v=zl6dZq0aV2w
https://www.youtube.com/watch?v=LtHNEUEF2Iw

Alternatively, Minix 1.0, ELKS and Eumel can be run, too.
https://6xq.net/eumel/
https://en.wikipedia.org/wiki/Embeddable_Linux_Kernel_Subset

"Time, it seems, doesn't flow. For some it's fast, for some it's slow.
In what to one race is no time at all, another race can rise and fall..." - The Minstrel

//My video channel//

Reply 9 of 9, by RetroPCCupboard

User metadata
Rank Oldbie
Rank
Oldbie
Jo22 wrote on Today, 12:09:
I read the Sanyo MBC-550 and 555 was among the slowest IBM PCs, btw. It had a custom graphics chip with partial CGA compatibilit […]
Show full quote

I read the Sanyo MBC-550 and 555 was among the slowest IBM PCs, btw.
It had a custom graphics chip with partial CGA compatibility.

An CGA/memory board and a special boot-up DOS diskette was available as an upgrade.
Together, they made it mostly IBM PC compatible; good enough to run MS Flight Simulator.

It just comes to mind, because of challenge.
An Sanyo emulator is maybe available for testing purposes.

Videos:
https://www.youtube.com/playlist?list=PLGt6Ig … O8Ue2wMryQtWNam

What's interesting about the 8088/8086 era is that there are so many obscure, yet beatiful systems.
And with a little, reversable V20/V30 upgrade they can be made compatible with 90s era software, even.

What comes to mind are the Rainbow 100, Alphatronics PC16, the c't-86 computer, NCR PC4..

PS: For sake of curiosity, you may also have a look for PC-Ditto.
It's an IBM PC emulator for Atari ST, which was available since 1986 or so.
The first version emulated an entire IBM PC with CGA graphics in software.

It was very slow, but actually usable to play slow-paced games and run a few business applications.
I myself played some graphics adventures that used CGA graphics, such as Fahrenheit 451. It was "ok" actually.

If I had to use a copy back in the day, then I would have switched the Atari Mega ST to 16 MHz, maybe.
Or installed an accelerator card, not sure. It would have helped the emulator.

I still use it for compatibility testing purposes, besides DOSBox and PCem.
Such as here: Re: Olivetti/Logabax/AT&T/Toshiba 640x400 hi-res graphics mode
PC-Ditto had issues with text-mode (the MDA type), so I used CGA graphics for text in QB.

The supplied utilities of Ditto do speed up text output on DOS and add some functionality.
They speed up utility is also usable on real XT class hardware.

PC-DOS 3.30 and MS-DOS 6.20 ran just fine last time I checked.
Re: Minimal hardware/peripherals to emulate for Windows
https://www.youtube.com/watch?v=ytM-uznCZc4

Oh, and then there's another one. The BBC Master 512.
It was an upgraded BBC Master 128 with an 80186 co-processor card.
It ran DOS Plus and GEM, had a mouse too. BeebEm emulated it at one point (older releases).
There's CGA emulation, which re-directs graphics to the BBC's native video modes.
Quite interesting. The palettes have different colours..
https://www.youtube.com/watch?v=V15vk2043mI

PS: What comes to mind about PC/XT class hardware:
MS-DOS 2.11 was very lightweight, easy to use and could use Unix style separators! It's also in ROM of Tandy 1000 series.
However, it wasn't the fastest when it comes to i/o and had limited floppy support.

Early emulators such as PC-Ditto thus had recommended to use DOS 3.x when possible.
Such as MS-DOS 3.20, because 3.30 wasn't out yet.

I do recommended PC-DOS 3.30, thus. It's more modern than the others, I think.
Compaq DOS 3.31 is another good alternative, MS-DOS 4.01 is a bit memory heavy.

If you're curious about CP/M-86, you may consider DOS Plus 1.2.
It can run both CP/M-86 and DOS 2.x applications and read both filesystems (CP/M and FAT12).
https://www.youtube.com/watch?v=D1v3e-pF4Kg

Multitasking on PC/XT is possible on PC-MOS/386 and Wendin DOS..
https://www.youtube.com/watch?v=zl6dZq0aV2w
https://www.youtube.com/watch?v=LtHNEUEF2Iw

Alternatively, Minix 1.0, ELKS and Eumel can be run, too.
https://6xq.net/eumel/
https://en.wikipedia.org/wiki/Embeddable_Linux_Kernel_Subset

Nice. Thanks for all the info. Must have taken you a while to type that, and find links etc. Much appreciated.

I haven't heard of the Sanyo MBC-550/5 before. Just watched the Nostalgia Nerd video on it. What a lovely looking machine. I didn't realise there were IBM compatibles that were even slower. At 4.77mhz you can almost see it "thinking". Lol. So I can't imagine something worse. But, for the price it sold for compared to IBM, I can see it being worth it at the time.

I think I am very limited on how old a version of DOS I can put on my Pocket 8086 due to the 512mb CF card in it. Though, I do have some smaller CF cards around that I could try. The smallest I have is only 8mb! Would an older DOS make much difference to the speed? It currently has DOS 6.22. That is what it came with (and Windows 3.0). I would need to use another PC to install an OS though, as this device has no floppy drive.