Pour ce programme, on va commencer simple : afficher une image.
Avec ton logiciel de dessin, tu crées une image 160x102 16 couleurs, que tu sauvegardes en BMP dans le sous-répertoire BMP de ton projet.
Mettons qu'elle s'appelle fond.bmp
Vu que tu n'as qu'une image, on va la convertir à la main avec SPRPCK (il y a moyen d'automatiser tout ça)
SPRPCK est l'outil qui te permet de convertir des fichiers graphiques en fichiers objets lisibles par la Lynx.
Il est dans Newcc65/bin
Note, tu utiliseras une session MS-DOS pour programmer la Lynx
J'espère que tu aies plus familier avec MS DOS que moi
La commande est :
SPRPCK -t6 -S160102 -p0 fond.bmp
(attention aux minuscules/majuscules, et c'est bien pzéro : -p0)
Ca va te générer un fichier fond.pal (que je mets dans INC pour ma part) et un fichier fond.obj (que je mets dans OBJ)
Le fichier .pal sera inclus dans le source, alors que le fichier .obj sera ajouté à ton programme après compilation pour former le programme exécutable format BLL (autonome = programme + données). Personnellement, j'aime bien inclure tous mes objets dans une librairie, c'est plus facile pour la programmation.
Dans le répertoire OBJ, je crées donc un fichier batch que j'appelle MAKELIBR.BAT :
del test.olb
libr65 a test.olb fond.OBJ
move test.olb ..
Il faut une ligne
libr65 a test.olb fond.OBJ
par objet à inclure dans la librairie
C'est brute comme méthode vu que ça regénère la librairie à chaque fois qu'on le veut (même si on vient de changer 1 seul objet)
Le nom de la librairie doit être celui du dossier (donc test.olb dans notre exemple).
Exécutes ce batch, ça te créeras la librairie au bon endroit
Voilà, il ne te manque que le source du programme :
tu crées un fichier test.c directement dans le répertoire test
#include <stdlib.h>
#include <lynx.h>
#include <lynxlib.h>
#include "inc\fond.pal"
/* LYNX-specific #defines: */
#define JOY_RIGHT 0x10
#define JOY_LEFT 0x20
#define JOY_DOWN 0x40
#define JOY_UP 0x80
#define BUTTON_OPTION1 0x08
#define BUTTON_OPTION2 0x04
#define BUTTON_INNER 0x02
#define BUTTON_OUTER 0x01
#define BUTTON_PAUSE 0x01
char SCREEN[8160] at (MEMTOP-16320);
char RENDER[8160] at (MEMTOP-8160);
extern char fond[];
extern char SCB[];
#asm
_SCB dc.b $c0,$10,$20
dc.w 0,0
dc.w 0,0,$100,$100
dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef
#endasm
// assembler vertical retrace syncronisation routine
void Vsync()
{
#asm
vretrace:
lda $fd0a
bne vretrace
#endasm
}
/**************************************************************************
** **
** **
**************************************************************************/
char main()
{
InitIRQ();
CLI;
SetBuffers(SCREEN, RENDER ,0);
/* set the palette */
SetRGB(pal);
DrawFBox(0,0,160,102,0);
SCBX(SCB) = 0;
SCBY(SCB) = 0;
SCBDATA(SCB) = fond;
DrawSprite(SCB);
Vsync();
SwapBuffers();
for(;;);
}
et tu le sauvegardes.
Là, en faisant l'exemple à la main, je me rends compte qu'il manque un fichier untime.run dans ton répertoire test. Copies le depuis newcc65/lib
Une fois ceci fait, revient au niveau de ton répertoires projet et tapes :
c test
normalement, ça te crées un fichier test.o que tu peux utiliser avec handy (ou envoyer via BLL sur la lynx)
Prochaine étape, explication de source
Edit : bon, c'est sur, l'installation du kit, la structure, tout ça, c'est pas mal bidouille/à l'arrache et adapté à mes besoins pour pas perdre trop de temps; il doit y avoir moyen de bien améliorer tout ça, mais je n'ai plus trop envie de m'y mettre. Personellement, ça me convient bien comme ça.