Je fais un peu de programmation rétro pour m'amuser. Ce que je veux créer est un jeu DOS utilisant des graphismes EGA mais j'ai un peu de mal à trouver une bonne référence sur le web. Tout le monde qui parle de faire de la programmation DOS suppose que le programmeur utilisera le mode 13h, et bien que certaines pages mentionnent les autres modes graphiques, je n'en ai pas encore trouvé un qui parle de leur bon usage.DOS Programmation graphique EGA en mode 0Dh
Voici ce que je suis en train de se mettre au travail en ce moment:
//------------------------------------------------------------------------------
// DOS graphics test
//
// Thanks to the following links:
// http://gamebub.com/cpp_graphics.php
//
// Written for Digital Mars C compiler to be compiled as a DOS 16 bit binary.
//------------------------------------------------------------------------------
#include <dos.h>
#include <stdio.h>
#define SCREEN_WIDTH 320;
#define SCREEN_HEIGHT 200;
unsigned char far *vram = (unsigned char far *)0xA0000000L;
//------------------------------------------------------------------------------
void set_video_mode(unsigned char mode)
{
union REGS in, out;
in.h.ah = 0;
in.h.al = mode;
int86(0x10, &in, &out);
}
//------------------------------------------------------------------------------
void plot_pixel(unsigned int x, unsigned int y, unsigned char color)
{
// this is wrong because it's only 4 bpp not 8
vram[y * 320 + x] = color;
//vram[((y<<8)+(y<<6))+x] = color;
}
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
// EGA 320 x 200 x 16
set_video_mode(0x0d);
for (unsigned char i = 0; i < 255; i++)
{
vram[i] = i;
}
//plot_pixel(10, 10, 1);
getc(stdin);
return 0;
}
Ce code exemple fonctionne très bien si vous changez set_video_mode() pour prendre 0x13 au lieu de 0x0D, mais comme je l'ai dit que je suis en train de obtenir graphique EGA ici, pas VGA. :) Je me rends compte que pour faire quatre bits par pixel, je vais devoir soit supposer que plot_pixel écrit deux pixels en même temps ou faire un peu de twittling pour m'assurer que je n'écris que les quatre bits que je veut vraiment. Mon problème est que je ne vois pas ce que j'attends en sortie - en particulier, pas de couleurs! Tout semble être monochrome, ce qui n'est pas ce que je veux du tout. Existe-t-il une sorte de procédure différente pour utiliser une palette de couleurs dans ce mode graphique que dans 13h? Ou ai-je invoqué en quelque sorte un mode graphique complètement différent de celui que j'avais prévu? L'orientation serait très appréciée.
Je ne pense pas que mes args compilateur seraient pertinents, mais juste au cas où:
..\dm\bin\dmc test.c -o test -mm
Merci pour le conseil! Je ne connaissais pas les graphismes planaires, donc ça va aider. Je voudrais vraiment vérifier les docs, mais une partie du problème que j'ai ici est que je n'ai pas encore trouvé une bonne documentation sur ce sujet. :) – Parappa
Essayez http://www.phatcode.net/res/224/files/html/index.html. Il est très utile pour VGA et EGA car l'idée de mode planaire est la même sur CGA, EGA et VGA. – Francis
Cela l'explique bien aussi: http://www.shikadi.net/moddingwiki/Raw_EGA_data – Aybe