10Fermer12
FadestLe 04/12/2007 à 13:00
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 wink
J'espère que tu aies plus familier avec MS DOS que moi roll

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 wink


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.