Here is my late tribute to the first crap graphic displays for the PCs. Those old video cards have in common the use of little video memory for graphics (it was expensive at the time !) placed at base address B800h or B000h.
It is one of the two first graphics board for the PC. Its base address was B800h and its standard resolutions are 320x200 x 4 colours and 640x200 monochrome. The only tweaked mode I'm aware of is a bewildering 160x100 x 16 colours mode, used in the Styx game, the CompuShow picture viewer and in few demos. Normally the 160x100x16 mode doesnt work on EGA and VGA boards (might work with some of them forcing a hardware CGA emulaton) and some of the 640x400 "SuperCGA" cards (such as the Olivetti M24 one) fail to display some colors, replacing them with the monochrome text style attributes. There is a lot of interesting informations here: http://www.seasip.info/VintagePC/cga.html
TANDY graphics card
I know very little about it. It is somehow half-way between the old display cards world and the EGA/VGA one. It uses the B800h base segment for the low resolution modes, and A000h for its highest resolution (640x200 x 16 colours).
"Super" CGA boards (640x400 mode)
Some old CGA based cards wanted to give both the benefits of the color and the high resolution modes. This was normally obtained by adding an extra 640x400 monochrome graphics mode and a better text quality (often the monochrome style text attributes were supported, too). The computers adopting this sort of "super CGA" concept I'm aware of are:
BIOS display Mode
Olivetti M24 and M240, and AT&T 6300 family
40h, 48h, C8h
Compaq portable 386 (and family) plasma display
ABC Bicom (B240i, B260i, SL60, SL80..)
Toshiba 3200 and similar plasma display models (newer BIOSes)
Probably many of the computers using the CT82C426 extended CGA controller are capable of such extended mode, but the BIOS support could not be present. I investigated a bit on the Zenith Supersport and the Victor Technologies notebooks: officially they do not seem to be able to work in 640x400.
In the above cases the video BIOS hook code to activate the extra 640x400 mode varies, but the video memory was always placed at B800h base address and it always had a two-pass interlaced addressing map. In very few cases the base video memory is at address B000h:
BIOS display Mode
It was the "professional choice", at the very beginning. It didn't have colour, but the text and the graphics definition was much more accurate. It is quite flexible, but the graphics modes aren't supported directly by BIOS (unless you don't install a software extension, such as the one used by "Derive"). The Hercules card is even capable of two frame buffers, the first one placed at B000h and the second one at B800h. There is a lot of interesting informations here: http://www.seasip.info/VintagePC/mda.html
As far as I know very few people tried to bring this card up to its limits, probably because of the risk of damaging the video monitor with wrong frequencies, so It was commonly used at its "default" resolution of 720x348, placed at address B000h. The parameters table used to set the 6845 CRT chip was normally something like:
I'm aware of two programs making use of tweaked modes, though:
- A peculiar version of "GWBASIC" I've seen in bundle with a Hunday 286 clone, implementing the BASIC graphics mode 3 on hercules boards (page B800), using this table:
36h, 28h, 2ch, 08h, 68h, 02h, 64h ,64h, 00h, 03h, 02h, 01h
- An earlier C64 emulator developed in germany (author unknown).
31h, 28h, 29h, 08h, 6dh, 00h, 64h, 67h, 02h, 03h, 00h, 00h
- Yet another table suggested by Sinisa Mikor in a forum.
34h, 28h, 2Ah, 47h, 69h, 00h, 64h, 65h, 02h, 03h, 00h, 00h
These gems use a very interesting 640x400 graphics mode, perfectly hooked by the standard Hercules monitors ! Many CGA emulators were written for the Hercules card, all based on the same mechanism: the memory at B800h acts as a buffer for the application, while a clock-driven interrupt copies the picture to B000h, adapting its resolution from 640x200 to 720x348; the color modes are dithered.
- Sinisa Mikor suggests also this table for a full CGA emulation (perhaps a CGA capable monitor is required, though..)
6Eh, 28h, 2Eh, 07h, 67h, 0Ah, 64h, 65h, 02h, 01h, 00h, 00h
My own experiments on the tweaked 640x400 mode
As soon as I discovered this incredible featured I realized it was possible to write CGA and AT&T emulators in a totally new manner. Since the Hercules card could be set natively to work as if it was a "Super CGA" I managed to realize a much simpler emulator with incredible performances..
CGA400.ASM is the source of the CGA emulator above. It is not just an emulator, it maps the memory where it is expected to be !
640HERC.ASM is an Olivetti M24 / AT&T 6300 mode emulator for the Hercules graphics card, it uses the tweaked 640x600 mode and itercepts the 'init graphics mode' BIOS call. On the other side it is not able to display text, but it is enough to see windows run with a better fitting resolution !