Dans cet article, je mets à disposition le résultat de mon dernier projet ; une bibliothèque graphique basse résolution pour Apple II. Cette librairie intitulée LRG (pour low resolution graphics) a été développée grâce à cc65 et est destinée à la programmation en C. Elle offre un ensemble de fonctions graphiques permettant de dessiner en mode graphique basse résolution soit 40 x 48 points en 16 couleurs.
La bibliothèque tgi offre des fonctionnalités similaires mais j’ai réalisé ce projet à des fins d’apprentissage ; programmation en C bas niveau et développement d’une bibliothèque pour Apple II.
Les fonctions disponibles
Voici la liste des fonctions disponibles dans la librairie LRG.
/* Efface l'écran graphique courant */
t_lrg_acq lrg_clear(void);
/* Renvoie le nombre de couleurs disponibles */
t_lrg_color lrg_getcolorcount(void);
/* Renvoie la valeur maximale d'indice de couleurs */
t_lrg_color lrg_getmaxcolor(void);
/* Renvoie la valeur maximale de x (coordonnées horizontales) */
t_lrg_coord lrg_getmaxx(void);
/* Renvoie la valeur maximale de y (coordonnées verticales) */
t_lrg_coord lrg_getmaxy(void);
/* Renvoie la couleur du point de coordonnées x, y) */
t_lrg_color lrg_getpixel(t_lrg_coord x, t_lrg_coord y);
/* Renvoie la résolution horizontale */
t_lrg_coord lrg_getxres(void);
/* Renvoie la résolution verticale */
t_lrg_coord lrg_getyres(void);
/* Renvoie la valeur de la couleur courante */
t_lrg_color lrg_getcolor(void);
/* Fixe la couleur courante */
t_lrg_acq lrg_setcolor(t_lrg_color col);
/* Fixe la page graphique courante (page 1 ou 2) */
t_lrg_acq lrg_setpage(unsigned char page);
/* Renvoie la page graphique courante */
unsigned char lrg_getpage(void);
/* Affecte la couleur courante au point de coordonnées x,y) */
t_lrg_acq lrg_setpixel(t_lrg_coord x, t_lrg_coord y);
/* Définit le mode graphique avec les paramètres suivants :
mode : graphique (LRG_MODE_LRG) ou texte (LRG_MODE_TEXT)
page : page 1 ou 2 (LRG_PAGE1 ou LRG_PAGE2)
full : affichage graphique complet (LGR_GR_FULL) ou mixe (LGR_GR_MIXED)
*/
t_lrg_acq lrg_set_graphic_mode(unsigned char mode, unsigned char page, unsigned char full);
/* Trace une ligne horizontale de x1 à x2 d'ordonnée y */
t_lrg_acq lrg_hlin(t_lrg_coord x1, t_lrg_coord x2, t_lrg_coord y);
/* Trace une ligne verticale de y1 à y2 d'abscice x */
t_lrg_acq lrg_vlin(t_lrg_coord y1, t_lrg_coord y2, t_lrg_coord x);
/* En mode graphique et en mode mixe, efface la zone de texte en bas de l'écran */
t_lrg_acq t_lrg_clrbscr(void);
/* Initialisation du mode LRG en définissant le nombre maximum de pages */
t_lrg_acq lrg_init(unsigned char nb_pages);
Le code source
Voici les sources de la bibliothèque graphique LRG (sous licence GPL3).
Le fichier lrg_apple2.c
contient le code source de la bibliothèque lrg_apple2.lib
. Pour compiler la librairie :
make lib
L’archive contient un fichier de test lrg_tst.c
. Il est possible de fabriquer l’exécutable de test LRG puis de l’installer sur l’image de disquette LRG.DSK :
make lib
make install
Vous pouvez ensuite lancer l’exécutable depuis un Apple II ou un émulateur :
BRUN LRG
Mise en œuvre
Pour utiliser la bibliothèque LRG pour développer votre propre programme, vous devez utiliser les ressources suivantes :
lrg_apple2.h Fichier d'entête.
lrg_apple2.lib Bibliothèque LRG.
Il est nécessaire d’insérer la directive #include "lrg_apple2.h"
dans votre code source. Il est également nécessaire avant d’utiliser les fonctions disponibles dans LRG d’initialiser le mode graphique grâce à la commande lrg_init(nb_pages)
, sinon ça ne fonctionnera pas. Cette commande permet de définir le nombre de pages graphique basse résolution utilisables ; 1
ou 2
(à passer en paramètre d’appel).
Pour compiler et fabriquer votre propre programme :
cl65 -t apple2 --start-addr 0xC00 monprog.c lrg_apple2.lib -o MONPROG
Vous pouvez également créer un makefile
en vous inspirant de celui livré avec la bibliothèque LRG.
L’option --start-addr 0xC00
est indispensable si vous envisagez d’utiliser la page graphique 2, afin que votre programme n’empiète pas sur la zone mémoire réservée à la page 2 (plage 0x800-0xBFF
).
Exemple : le logo applE
Voici un exemple d’utilisation de la bibliothèque LGR inspiré du livre « Apple II computer graphics » de Ken Williams, Bob Kernaghan et Lisa Kernaghan (1983). Je vous conseille la lecture de ce livre qui explique bien comment fonctionne la gestion des graphismes basse et haute résolution sur Apple II.
Le fichier sources est apple_logo.c
. Il figure dans l’archive de la bibliothèque LRG, à titre d’exemple. Voici la commande permettant de le compiler :
cl65 -t apple2 --start-addr 0xC00 apple_logo.c lrg_apple2.lib -o APPLE
Il reste à transférer l’exécutable APPLE sur une disquette puis à l’exécuter.