CPC-POWER : CPC-SOFTS - CPCArchives 
Options de Recherche :
 
 
 

ARTICLES

14 / 71

AutoStart : Exécution automatique d’un programme d’une disquette.

 

Exécution automatique d’un programme d’une image au format DSK d’une disquette.

 

Préalable : Cette fonction n’est vraiment utile que lorsque la disquette a été préalablement préparée en ne laissant visible qu’un seul fichier exécutable (extension .BIN, .BAS ou sans extension). Avant d’effectuer la recherche d’un seul fichier exécutable, la disquette a été chargée par l’émulateur. Cela veut dire que toutes les informations concernant les pistes et les secteurs sont déjà disponibles en mémoire.

 

Première étape : Lire le format de la disquette

Récupérer le numéro du premier secteur de la disquette.

Il y a deux méthodes pour cela :

1.       En pointant sur le premier secteur de la première piste, on lit l’octet R du CHRN.

Soit en langage C :

  sectorP = &driveP->track[0][0].sector[0]; // First sector pointer

 

  switch (sectorP->CHRN[SECTOR_CHRN_R] & 0xC0)

 

2.       A partir du fichier DSK, ce numéro peut être lu en appliquant la formule suivante :

Numéro du secteur (1 octet) = Taille en-tête DSK (100h) + Taille en-tête piste 0 (18h) + Octet R du CHRN (2h)

 

Si ce numéro est compris entre C1h et C9h, il s’agit du format DATA. Dans ce cas, le catalogue attendu sur la piste 0.

Si ce numéro est compris entre 41h et 49h, il s’agit du format VENDOR. Dans ce cas, le catalogue est attendu en piste 2.

Si ce numéro est compris entre 00h et 07h, il s’agit du format IBM. Dans ce cas, le catalogue est attendu en piste 1.

 

Deuxième étape : Compter le nombre de fichiers valides

Pour cela, on va chercher le catalogue depuis la piste 0 jusqu’à la piste 2 incluse.

Une face de disquette ne peut contenir que 64 entrées dans le répertoire. Avec 32 octets par entrée, le catalogue tiendra sur 4 secteurs de 512 octets. Une entrée peut contenir jusqu’à 16Ko, soit 16 blocs de 1Ko (2 secteurs). Un fichier de plus de 16Ko prendra plusieurs entrées dans le répertoire.

Pour chaque piste, on va chercher seulement sur les 4 premiers secteurs.

Chaque entrée du répertoire se présente sous la forme suivante :

  • Octet 0 = USER. 0 par défaut et E5h pour fichier effacé.
  • Octets 1 à 8 = Nom du fichier ;
  • Octets 9 à 11 = Extension (MSB de l’octet 9 = lecture seule, MSB de l’octet 10 = caché) ;
  • Octets 12 à 14 sont non utilisés ;
  • Octet 15 = Taille des données en multiple de 128 octets.
  • Octets 16 à 31 = Numéros des blocs occupés par ce fichier.

 

Nous allons parcourir chaque entrée du répertoire, ou soi-disant répertoire, afin de compter le nombre de fichiers valides.

 

Critères de détection d’un fichier valide :

  1. USER (octet 0) doit être égal à 0.
  2. Le fichier doit être visible. (bit 7 de l’octet 10 égal 0).
  3. La taille de l’entrée ne doit pas être nulle (octet 15 non nul).
  4. Vérifier le nom du fichier et de l’extension. Pour cela, les 12 caractères doivent avoir un code ASCII compris entre 20h (espace) et 5Ah (caractère Z).
  5. L’extension doit être « BAS » ou « BIN » ou sans extension (3 espaces).
  6. Ne pas prendre en compte les autres entrées du même fichier.

 

S’il s’agit du premier fichier valide, on mémorise son nom et son extension.

 

 

Troisième étape : Quelle commande exécuter ?

Maintenant, il reste à savoir quand exécuter une commande « RUN » ou une commande « |CPM ».

Si le format de la disquette est VENDOR, que nous n’avons trouvé aucun fichier valide et que le catalogue ne se trouve pas sur la piste 2, alors la commande à lancer sera « |CPM ».

S’il n’existe qu’UN seul fichier valide, la commande sera « RUN » plus le nom du premier fichier valide.

Dans les autres cas, aucune commande ne sera exécutée car la recherche n’a pas permis de trouver un seul fichier.

 

 

Quatrième étape : Exécuter la commande.

Cette étape s’exécute au cœur même du moteur de l’émulateur car il faut maintenant simuler l’appui sur les touches du clavier.

Pour cela, j’ai ajouté une machine à état dont le rôle est de simuler l’appui sur la touche puis d’attendre un peu, puis de simuler le relâchement de cette touche et d’attendre encore un peu. Cela pour tous les caractères de la chaîne. Pour mon émulateur, je laisse une touche appuyée pendant 100ms, puis je la laisse relâchée pendant 50ms avant la prochaine.

Si la fonctionnalité « AutoStart » est couplée à la fonction « AutoLoad » il faut attendre que l’Amstrad ait démarré avant de commencer à simuler l’appui sur les touches. Pour mon émulateur, j’attends 1,5s après le reset de l’Amstrad avant de commencer à simuler l’appui sur la première touche.

 

 

Bibliographie

 

 

Fredouille

 

 

Article créé le : Mardi 20 Octobre 2009 à 21 h 15
Dernière mise à jour le : Mercredi 08 Mai 2013 à 23 h 05
 
 

CPC-POWER/CPCArchives, projet maintenu par Fredouille.
Programmation par Kukulcan © 2007-2017 tous droits réservés.
Reproduction sans autorisation interdite. Tous les titres utilisées appartiennent à leurs propriétaires respectifs.