@Matze79: Brueggi meint nicht die CGA (color graphics adapters) von 1981, sondern die MCGA (memory controller gate array) von 1987. MCGA hatte 64kb und volle CGA-Kompatibilität. Zusätzlich gab es die Modi 640x480p1 und 320x200p8 (Mode $13, 256 Farben). Dieser 256-Farbenmode führte dann auch dazu, dass die MCGA im allgemeinen Sprachgebrauch in "Fachzeitschriften" mit "multi color graphics adapter" ausgeschrieben wurde, obwohl das nichts mit der originalen ibm-Definition zu tun hatte. Bei VGA war es übrigens genauso. Das stand nach ibm für "video gate array", weil es - wie MCGA- eine Chipansammlung auf dem Motherboard und gerade keine Steckkarte war. Die Fachzeitschriften haben daraus "video graphics adapter" gemacht, wohl weil es besser in die Linie von CGA; EGA, PGA gepasst hat, die ja alle für "... graphics adapter" stehen.
Da IBM aus Kostengründen ab 1987 nur noch VGA-Monitore produzieren wollte (die waren billiger als die EGA-Monitore), hatte ibm die MCGA ebenfalls so designt, dass diese vorrangig an die VGA-Monitore anzuschliessen ist. MCGA ist aber nicht EGA-kompatibel, hat insbesondere keine Bitplanes. Die VGA dagegen ist eigentlich die Superversion einer EGA-Karte und ist - auch wenn die Videomodes $11 (640x480p1) und $13 (320x200p8) etwas anderes vorgaukeln - in jedem Mode um die Bitplanes herumgestrickt.
@Brueggi: 800x600p1 ist wie jeder 800x600-Mode in egal wieviel Farben ein reiner SVGA-Mode, hat also mit VGA nichts mehr zu tun. Du schreibst ja selbst, dass das auf alten VGA-Monitoren nicht mehr geht - aber bitte glaube nicht, dass es die nicht mehr gibt: ich habe (bzw. hatte bis vor ein paar Wochen) nämlich noch drei. Und denen tut es nicht so gut, wenn man sie in Modi versetzt, die sie nicht vertragen. Vor Einschalten in einen SVGA-Mode sollte man daher den User irgendwie darauf hin weisen, dass er unbedingt auch einen SVGA-Mode benötigt..

Nicht ohne Grund schalten frühere Windows - Versionen immer in einen 640x480-Mode und überlassen es der Verantwortung des Users, ob er einen höheren Mode riskieren will.
800x600 ist aber nicht nur monitormäßig ein reiner SVGA-Mode, sondern auch, was die VGA selbst anbelangt. Die VGA hat einen 25.175 und einen 28.322 Mhz-Clock. Um 800x600 in 60 Hz darzustellen brauchst Du aber schon einen 40 Mhz-Clock. Den aber hat weder die VGA noch die MCGA. Und auch die ersten SVGAs haben den nicht, weil die 800x600 nur in 56Hz darstellen konnten, was nur einen 36 Mhz-Clock benötigt.
800x600p1 ist unter allen Gesichtspunkten SVGA, also was den auf VGA per definition nicht vorhandenen hochtaktigen Clock anbelangt, was die auf VGA per definition nicht vorhandene Zeilenzahl von 600 anbelangt und vor allem was die per definition auf VGA nicht zulässige Abweichung von der Zeilen-Festfrequenz von 31.5 khz anbelangt. 800x600p1 passt nur zufällig in die 64 kb!
Wenn Du 800x600p1 nativ unterstützen willst, musst Du es wohl so wie alle damalige Software Ende der 80er machen: Der User muss im Handbuch seiner Grafikkarte kucken, ob diese einen solchen Mode unterstützt (und sich sicher sein, dass sein Monitor diesen Mode verträgt). Dann muss der User dem Programm per Hand die Modenummer mitteilen, damit das Programm den Mode einstellen kann.
Wenn Du es etwas dreckiger haben willst, dann mach es so wie ich

: Alle16-Farben-Modi eignen sich zur monochromen Darstellung. Das heisst, wenn Du den Standard Mode 800x600/16 (planar) einstellst, dann kannst Du mit Deinen monochromen Grafikroutinen uneingeschränkt zugreifen und in schwarz-weiss zeichnen. Du mußt kein Fitzelchen Code verändern. Denn die Grundeinstellung in allen Standard 16-Farbenmodi ist, dass alle Bitplanes freigeschalten sind, d.h. jeder Zugriff auf alle vier Bitplanes syncron erfolgt. Dies hat das praktische Ergebnis, dass das Setzen eines Bits im Adressbereich $a0000-$affff dem Zeichnen mit Farbe 15 (weiss) und das Löschen eines Bits dem Zeichnen mit Farbe 0 (schwarz) entspricht.
Für 800x600p1 kannst Du mit dieser Methode also den Standard SVGA-Mode 800x600/16 mißbrauchen, der ja auf fast jeder SVGA vorhanden ist. Das Problem ist nur, dass die Videomode-Nummer auch hier nicht standardisiert ist und ein Absuchen auch nicht auf allen SVGAs funktioniert (insbesondere auf uralten; die neueren VESA 1.x-kompatiblen SVGA haben alle $6A als Modenummer, wenn ich das richtig im Kopf habe). Zur Sicherheit sollte man daher auch bei Verwendung von 800x600/16 dem User die Möglichkeit geben, die Videomode-Nummer von Hand einzustellen (und ihn darauf hinweisen, dass er einen SVGA-Monitor braucht. Das weiss nämlich oft auch die SVGA-Karte nicht).
Edit: Ups - Brueggi hat ja schon auf das MCGA geantwortet... hatte ich irgendwie verpennt, als ich meinen Text gerade gebastelt habe...
