Organisation de la disquette
La disquette utilise un format proche du format DATA reconnu par l'Amsdos. Le format Data est normalement constitué de 40 pistes numérotées de 0 à 39, chacune ayant 9 secteurs numérotés de #C1 à #C9, chaque secteur ayant une taille de 512 octets. On peut aisément utiliser 42 pistes sur le CPC sans problème de lecture/écriture.
De plus, on peut facilement formater 10 secteurs de 512 octets par pistes. Ce qui nous permet d'obtenir une face de disquette contenant : 512 * 10 * 42 = 215040 octets, soit 210 Ko.
Deux possibilités s'offrent alors :
- soit utiliser un format proche du format
SYSTEM, ce format permet de démarrer un code à l'aide de l'instruction |CPM
(ùCPM sur un clavier AZERTY).
- Soit utiliser un format proche du format DATA.
L'avantage du format SYSTEM, est qu'il n'a besoin que d'un seul secteur pour lancer le programme. Mais si l'on veut garder le catalogue de la disquette, on perd forcément 4 secteurs de la piste 2 (le directory d'une disquette au format SYSTEM commence sur la piste 2). Cela ne permet donc pas une structure simple de la disquette, sachant que les données devront commencer après la piste 2, tout du moins après le secteur #44 de la piste 2. Ou alors, il faudra jongler avec le début de la disquette (piste 0 et 1) et la suite en piste 2 secteur #44. Cela peut s'avérer fort peu pratique si on a besoin d'une zone de données dépassant la taille des deux premières pistes.
J'ai donc préféré opter pour un format
proche du format DATA, qui utilise un catalogue sur la piste 0, secteurs #C1 à
#C4. Les données à stocker sur la disquette étant principalement les images du
jeu, il faut un moyen pour facilement localiser une image sur la disquette.
J'ai choisi un format utilisant une " bitmap ", en quelque sorte, une
structure contenant pour chaque image sa position physique sur la disquette.
Les images ne tenant pas sur une face, il faut placer la " bitmap "
sur les deux faces de la disquette, et de préférence au même endroit. L'idéal
étant de la positionner au tout début de la disquette. Mais comme le premier
secteur d'une disquette au format DATA est utilisé pour le catalogue, j'ai
choisi d'ajouter le secteur #C0 sur chaque piste de la disquette. Cela donne
donc 10 secteurs numérotés de #C0 à #C9. L'avantage de cette méthode, est que
le premier secteur de la disquette n'est pas détecté par l'Amsdos, et donc, le
catalogue de la disquette n'est pas altéré.
La " bitmap " est donc placée sur la piste 0, secteur #C0 des deux faces de la disquette. Elle est identique sur les deux faces. Elle est constituée de plusieurs éléments (80 car on a 80 images) d'une même structure dont voici la définition :
BYTE NumVue
Numéro de la vue, les vues
étant numérotées de 1 à 80
BYTE NumFace Numéro de face (1 ou 2)
BYTE StartTrack Piste de départ (de 0 à 41)
BYTE StartSect Secteur de départ (
de #C0 à #C9)
BYTE NbSects Nombre de
secteurs utilisés par l'image (de 1 à xx)
(Le type BYTE désigne un entier non signé sur 1 octet, et peut donc avoir une valeur qui varie de 0 à 255). On a donc cette structure répétée 80 fois, pour contenir la position de chaque image sur la disquette. J'ai ajouté 16 octets au début de la structure qui contiennent :
- une chaîne d'identification, qui permet de
vérifier que le secteur #C0 de la piste 0 correspond bien à la " bitmap
" de CPC-Aventure (cette chaîne fait 12 octets, terminée par des zéros
pour arriver à 15 octets),
- un octet identifiant le numéro de la face (1 ou 2)
Ce qui fait que les " bitmaps "
des deux faces ne sont pas identiques à 100%, un octet permet d'identifier la
face sur laquelle on se trouve.
La " bitmap " a donc une taille de 16 + (5 * 80) = 416 octets. Avec
cette structure, on peut aller jusqu'à 99 images. (16+(5*99)=511 octets).
Ensuite, il a fallu placer sur la face 1 les différents programmes
(introduction et jeu), et réserver une place pour la sauvegarde de la partie en
cours de jeu. Les données du jeu prenant moins de 512 octets, un seul secteur
suffit pour sauvegarder la partie. J'ai choisir le secteur #C9 de la piste 41,
dernier secteur de la disquette.
Ce qui amène à l'organisation suivante :
FACE 1
Piste 0
Secteur(s)
#C0 Bitmap positions images
Secteur(s)
#C1 - #C4 Réservé directory Amsdos
Secteur(s)
#C5 - #C6 Réservé loader Basic
Secteur(s)
#C7 - #C9 Programme introduction
Piste 1
Secteur(s)
#C0 - #C9 Programme introduction
Piste 2
Secteur(s)
#C0 - #C8 Programme introduction
Secteur(s)
#C9 Sprites du jeu (Banque #C6)
Piste 3-4
Secteur(s)
#C0 - #C9 Sprites du jeu
Piste 5
Secteur(s)
#C0 Sprites du jeu
Secteur(s)
#C1 - #C9 Dialogues du jeu (Banque #C5)
Piste 6-7
Secteur(s)
#C0 - #C9 Dialogues du jeu
Piste 8
Secteur(s)
#C0 - #C2 Dialogues du jeu
Secteur(s)
#C3 - #C9 Programme du jeu
Piste 9
Secteur(s)
#C0 - #C9 Programme du jeu
Piste 10
Secteur(s)
#C0 - #C1 Programme du jeu
Secteur(s)
#C2 - #C9 Dialogues Banque #C7
Piste 11 - 40
Secteur(s)
#C0 - #C1 Dialogues Banque #C7
Secteur(s)
#C2 - #C9 Images du jeu
Piste 41
Secteur(s)
#C0 - #C8 Images du jeu
Secteur(s) #C9
Sauvegarde du jeu
FACE 2
Piste 0
Secteur(s)
#C0 Bitmap positions images
Secteur(s)
#C1 - #C4 Réservé directory Amsdos
Secteur(s)
#C5 - #C9 Images du jeu
Piste 1 - 41
Secteur(s)
#C0 - #C9 Images du jeu