Obligement - L'Amiga au maximum

Vendredi 24 mai 2019 - 05:46  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles en d'autres langues


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Logiciels
 · Jeux
 · Scène démo
 · Divers


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Contact

David Brunet

Courriel

 


Programmation : GFA Basic - trackdisk.device
(Article écrit par Pierre-Philippe Launay et extrait d'Amiga News Tech - février 1992)


Il existe plusieurs fonctions très agréables pour lire les fichiers, mais elles sont insuffisantes pour une véritable gestion des secteurs. Il faut alors utiliser les structures et les routines propres au système.

Vous savez que toutes les routines C ont été réécrites en GFA 3.52F, aussi nous ne serons pas vraiment dépaysés. La démarche est tout à fait identique, voire un peu plus simple en GFA : le trackdisk.device utilise bien sûr une structure d'entrée-sortie étendue (IOExtTD). Pour plus de détails, je vous conseille de lire le message des Thaïlandaises de Max dans l'ANT 24, ainsi que la Bible de l'Amiga pages 357, 543 et 687. Voici ce que cela donne pour notre programme :

GFA Basic

Ainsi, une structure Message est associée à un message ne devant pas dépasser 64 ko. Ce nombre est une limite qui peut avoir ses contraintes.

GFA et C, mon général !

Les bibliothèques et les périphériques logiques (devices) ont une logique de base assez semblable, ou tout au moins assez similaire (gasp, j'ai dû dire la même chose). Les structures d'unité sont également assez classiques et nous devons seulement savoir que nous disposons ici des unités DF0: à DF3: et que nous écrirons pour cela 0, 1, 2 ou 3 dans l'IO.
  • iodata contiendra l'adresse où débutent les données à lire. Attention, le système s'avère ici particulièrement ségrégationniste : tout d'abord, celles-ci doivent avoir une taille au minimum égale à 512 octets, ce qui élimine Super OctetoPhage. Le pauvre. Et ensuite on ne pourra les trouver qu'en mémoire Chip (MALLOC).

  • io_offset doit également toujours être un multiple de 512 octets. Il n'est donc pas possible de se positionner à cheval sur deux secteurs en écrivant par exemple 300.

  • iotd_count indique le nombre d'insertions et de retraits de disquettes dans le lecteur. Cette valeur augmente de 2 pour un simple échange de disquettes. Or, comme la valeur de référence correspond au dernier réamorçage du système, un nombre impair signalera immanquablement un lecteur vide et un nombre pair, la présence d'une disquette.

  • iotd seclabel doit avoir 16 octets d'un seul tenant et est soit réservé aux lettres du droit d'auteur, soit rempli avec des 0. SuperOctetoPhage y écrit d'ailleurs un 0 par lettre de son nom et comme il dit, personne ne pensera à les modifier.
Toujours du C, mon général !

Il reste à parler de la structure ReplyPort :

GFA Basic

Et enfin du GFA, mon général !

Tout cela nous permet de savoir où nous allons et grâce aux remarques, le codage se laissera ainsi déchiffrer très facilement.

On trouve d'abord l'adresse de notre propre tâche par la méthode "longue" : FindTask(0). Il existe en effet la possibilité de remplacer cette ligne par un appel direct plus rapide à la structure Exec à l'offset 276, appelé justement ThisTask, mais attention, ce procédé ne peut fonctionner qu'avec la recherche de notre propre tâche car ce pointeur n'indique que la tâche actuellement traitée et ne peut donc indiquer les autres tâches. Ouf, Super OctetoPhage peut reprendre sa respiration après cette longue tirade. Nous modifions ensuite le pointeur mp_sigtask et nous pouvons alors nous ajouter au système.

Et que le périphérique logique soit

L'ouverture du dispositif se fait bien entendu avec la fonction OpenDevice(). Voici les erreurs possibles :
  • 0 IOERR_NOERROR
  • -1 IOERR_OPENFAIL : l'a pas lu.
  • -2 IOERR_ABORTED : fin provoquée par l'action ABORTIO().
  • -3 IOERR_NOCMD : commande impossible.
  • -4 IOERR_BADLENGTH : longueur impossible.
  • 20 TDERR_NOTSPECIFIED : erreur du trackdisk non reconnue.
  • 21 TDERR_NOTSECHDR : absence d'en-tête de secteur.
  • 22 TDERR_BADSECPREAMBLE : mauvais préambule du secteur.
  • 23 TDERR_BASECID : mauvaise interruption disquette dans le secteur.
  • 24 TDERR_BADHDRSUM : mauvaise somme de contrôle du gestionnaire.
  • 25 TDERR_BADSECSUM : mauvaise somme de contrôle du secteur.
  • 26 TDERR_TOOFEWSECS : pas assez de secteurs sur la piste.
  • 27 TDERR_BASECHDR : en-tête de secteur illisible.
  • 28 TDERR_WRITEPROT : disquette protégée contre l'écriture.
  • 29 TDERR_DISKCHANGED : lecteur de disquette vide.
  • 30 TDERR_SEEKERROR : mauvaise position de la tête de lecture.
  • 31 TDERR_NOMEM : pas assez de mémoire.
  • 32 TDERR_BADUNITNUM : lecteur de disquette non connecté.
  • 33 TDERR_BADDRIVETYP : mauvais lecteur de disquette.
  • 34 TDERR_DRIVEINUSE : lecteur déjà en cours d'utilisation.
  • 35 TDERR_POSTRESET : pas d'accès autorisé après réinitialisation.
Voilà. Nous lirons les données grâce à Io et celui-ci modifiera la structure diskio% avant de se lancer avec ~DoIO(). L'affichage du secteur tient compte de quelques offsets spécifiques, puis nous libérons le système.

GFA Basic
GFA Basic
GFA Basic


[Retour en haut] / [Retour aux articles]