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

 

Retour      -      La suite : Organisation des modules