ARTICLES
14 / 74 |
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 :
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 :
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 |