Obligement - L'Amiga au maximum

Lundi 19 novembre 2018 - 03:53  

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 : C - Sectorise
(Article écrit par Jean-Pierre Vitulli et extrait d'Amiga News Tech - novembre 1989)


Après Microïds et son Eagle's Rider, c'est au tour de Loriciel de dévoiler l'un de ses secrets. Il ne s'agit pas d'une routine utilisée dans un jeu quelconque, mais d'un utilitaire permettant d'écrire n'importe quel fichier AmigaDOS (programme exécutable, image, musique, etc.) sur une suite de secteurs de la disquette.

Les avantages sont évidents : le chargement par lecture directe de secteurs est de toute manière beaucoup plus rapide que par l'appel de fonctions DOS évoluées, donc lourdes. Ce critère de rapidité de chargement est l'un des points auxquels Loriciel s'attache tout particulièrement lors de la réalisation de ses jeux.

Le programme sectorise.c a été écrit par Jean-Pierre Vitulli, programmeur professionnel chez Loriciel. Toutes les explications quant à son utilisation sont incluses. Il vous donnera en outre un exemple d'utilisation du trackdisk.device en C.

Ce programme est écrit pour le Lattice version 4.0 ou supérieure. Pour compiler, utilisez le Script cc, et pour lier, le Script bl. Lors de la compilation, ignorez les messages d'avertissement ("pointers do not point to same object").

Fichier Script cc :

.key file
.bra {
.ket }
lc -csuw -d -v -r -b {file}

Fichier Script bl :

blink with with

Fichier de lien avec :

FROM LIB:c.o
sectorise.o
LIBRARY LIB:lc.lib,LIB:amiga.lib
NODEBUG
SHALLCODE
SMALLDATA
TO sector
VERBOSE

Programme sectoriae.c :

Exemple d'utilisation du trackdisk.device en C pour Amiga News Tech. Ce programme lit un fichier (sur un autre lecteur ou en RAM:) et l'installe sur une suite de secteurs d'une disquette formatée en DF0:. Il s'utilise à partir du CLI en lui donnant sur la ligne de commande le "path" (chemin) et nom du fichier et le numéro du tel secteur à utiliser (0-1759).

Exemple : "sector DF1:toto 50" place le fichier "toto" sur la disquette se trouvant dans "DF1:" à partir du secteur "50".

C
C

Boucle lecture fichier/écriture disque si vous n'avez qu'un lecteur, il vaut mieux mettre le fichier en RAM: sinon il faut augmenter la taille du tampon mémoire et lire tout le fichier avant de l'écrire dans les secteurs. Cette version présente l'avantage de fonctionner quelle que soit la taille du fichier à transférer.

C
C

Évidement, les données placées sur disquette de cette façon n'apparaissent pas dans le répertoire... De plus, le bloc "BitMap" n'étant pas mis à jour, vous risquez d'effacer ces données en inscrivant un fichier sur la disquette. De même, vous pouvez détruire une disquette DOS en écrivant dans n'importe quel secteur (exemple : bloc 550 = racine du répertoire). D'un autre côté, rien ne vous empêche de stocker vos données dans un format qui vous est propre.

Petit exercice

Comment relire ces données ? Remplacez le "CMD_WRITE" par un "CMD_READ". L'élément de structure "io_Length" doit être multiple de 512 puisque vous devez lire par secteurs entiers. "io_Offset" donne la position du premier secteur.

Exemple :

diskreq->io_Length = 512*2; (taille à lire)
diskreq->io_Data = buffer;
diskreq->io_Command = CMD_READ;
diskreq->io_Offset = (long) (0*512); (secteur de départ)
DoIO(diskreq);

On va lire deux secteurs à partir du secteur 0 (donc le bloc d'amorce en entier). Le tout est stocké dans le tampon mémoire nommée "buffer".

Voilà, c'est tout simple. Bonne chance !


[Retour en haut] / [Retour aux articles]