VGA and MCGA, what’s the difference?

When running old DOS games, you often have to manually select which type of graphics adapter you use. Some games allow you to select VGA for 256 colour mode. Others use the term MCGA for 256 colour mode, and some just call it VGA/MCGA. So what is it exactly?

I suppose the real question is: What is MCGA? Because VGA will probably be familiar to you, as it’s been such an influential standard in PC history for many years. MCGA on the other hand, is somewhat obscure.

In short, it’s all IBM’s fault. We have to go back to 1987, when IBM introduced their PS/2 line of products. VGA (Video Graphics Array) was the new graphics standard they introduced for the PS/2. However, IBM also introduced some low-end models in the PS/2 line, which did not quite have the same specs. One obvious difference is that the low-end models used the legacy ISA bus instead of the new MCA bus. Another difference is that the entry-level model, the Model 30, did not get VGA, but MCGA (Multi-Color Graphics Array) instead. A few months later, another low-end model, the Model 25 was introduced, also with MCGA.

So our first clue is that MCGA is an entry-level graphics solution, where VGA was for the models higher up in the range. I would like to describe MCGA as CGA with a minimal implementation of VGA’s 320×200 256-colour mode (mode 13h) and 640×480 monochrome mode (mode 11h).

Yes, CGA. Where VGA is a superset of EGA, MCGA is not. In other words, MCGA is backwards-compatible with CGA, but not with EGA. MCGA has 64k of memory, instead of the 256k that VGA has. This is barely enough for a single framebuffer in 320×200 256-colour mode.

You could say it is BIOS-compatible with VGA’s mode 13h: it works the same when setting the mode via a BIOS call, and the framebuffer is at segment A000h, just like with VGA. It also supports the same palette registers. But that is exactly where the similarities end.

VGA has all sorts of extra functionality (the majority of which is carried over from EGA), such as hardware scrolling, an ‘unchained’ mode that allows access to the full 256k of memory, and an ALU that can perform various operations when reading or writing, such as rotating and masking pixels. MCGA has none of that. VGA also introduced some 640×480 modes, in monochrome (mode 11h) and 16 colours (mode 12h). Because of the 64k memory limitation, MCGA only supports the monochrome 640×480 mode. And since it is monochrome, it does not require any EGA bitplane functionality either, as there is only one bitplane.

This makes MCGA an interesting ‘lowest common denominator’: if you write a game that works on MCGA, it will also work on VGA. And this is what many early games did. They just used mode 13h as a dumb 64k framebuffer. For many types of games, such as graphics adventures, this was good enough.

However, MCGA never quite caught on. Only one non-PS/2 machine that supports MCGA is known to exist: the Epson Equity Ie. Fully compatible VGA clones quickly flooded the market, and after a while, even IBM dropped MCGA from their product line.

So that’s why you’ll see MCGA listed with some early 256-colour games, and that’s why you rarely see any MCGA hardware around. It’s only found as a built-in option in the machines mentioned above. No discrete graphics card with MCGA chipset exists.

This entry was posted in Oldskool/retro programming and tagged , , , , , , , , , . Bookmark the permalink.

3 Responses to VGA and MCGA, what’s the difference?

  1. nickysn says:

    Whan I was young, I had the IBM PS/2 model 30 with MCGA. I was very frustrated by the lack of EGA support. However, games that supported mode 13h looked great, especially adventure games. Not much to add, your description of MCGA is correct. Something I’d like to add is that MCGA has a much better CGA support, compared to VGA. Several games that program the CGA registers directly to set the graphics mode, instead of using the BIOS, actually work correctly on MCGA, while they don’t work on VGA. Another thing worth mentioning is that MCGA probably influenced VGA’s mode design, because mode 13h is actually a little crippled on a VGA. It is 320×200, 256 colours, single page, while the real VGA is capable of doing several video pages (“mode X”?) or 320×400 with 256 colours. None of these modes were implemented by int 10h on the VGA, probably to force software to be compatible with MCGA.

  2. nickysn says:

    Btw, another feature that MCGA has is software redefinable fonts in text mode. The character generator is in RAM, not in ROM, like on the CGA. However, programming this at the register level is not the same as on EGA/VGA. However, there’s int 10h support for changing the fonts. I know this, because I used it for Cyrillic support in text mode. Not all EGA/VGA Cyrillic drivers worked on the MCGA, however one did. Oh, and the character cell in text mode is 8×16, not 9×16, like on the VGA. This means that text mode block fill patterns with characters 0xB0..0xB2 look better, compared to VGA 🙂

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s