Obligement - L'Amiga au maximum

Samedi 29 août 2026 - 03:15  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in English


Réseaux sociaux

Suivez-nous sur Mastodon




Liste des 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,
ALL



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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


En pratique : Conseils de programmation du lecteur de disquette Amiga
(Article écrit par Bryce Nesbitt et extrait de ZINE - octobre 1990)


Attention aux programmeurs du lecteur de disquette

Les règles pour programmer correctement le matériel du lecteur de disquette par Bryce Nesbitt, un développeur de l'Amiga. Cet article traite de la manière de programmer correctement le matériel du lecteur de disquette avec quelques exemples en assembleur. Pour plus d'informations sur les lecteurs de disquette, lisez aussi l'article sur les conseils utilisation d'un lecteur de disquette Amiga.

Droit d'auteur 1988 Commodore-Amiga, Inc.
Ces informations sont fournies "en l'état" ; aucune garantie n'est donnée.
Toute utilisation se fait à vos risques et périls. Aucune responsabilité n'est assumée.
La reproduction est autorisée, à condition que cette notice soit conservée.

Il existe de très beaux jeux pour Amiga qui ignorent le système d'exploitation et prennent le contrôle de la machine. Cette pratique est déconseillée, mais autorisée. Certains de ces jeux utilisent le matériel du lecteur de disquette d'une manière incorrecte. Une telle utilisation est *non acceptable*.

Pire encore, certains livres publiés par de grands éditeurs préconisent une utilisation incorrecte du matériel du lecteur de disquette. Dans l'intérêt des vendeurs de logiciels, de Commodore, des revendeurs, des clients et de l'Amiga, cela doit cesser.

Commodore utilise des lecteurs de disquette fabriqués par plusieurs vendeurs différents. Ces fournisseurs améliorent ou modernisent souvent leurs gammes de lecteurs de disquette, ce qui rend généralement les anciens modèles indisponibles. Pour cette raison, il est impossible pour un développeur de tester tous les types de lecteurs possibles. Pour pouvoir travailler avec ce large éventail de lecteurs, certaines règles doivent être respectées. Pour simplifier le respect de ces règles, voici un code source complet et prêt à l'emploi. Trois fonctions sont fournies pour implémenter correctement les trois opérations du lecteur les plus critiques. Ce code peut être inséré directement dans un chargeur existant, sans tracas ni désordre.
  • MOTORON : met le moteur en marche et attend correctement que le lecteur atteigne sa vitesse maximale.
  • MOTOROFF : éteint et désélectionne tous les lecteurs.
  • STEPHEAD : fait avancer la tête, et attend correctement le délai d'attente de 3,0 millisecondes avec n'importe quelle vitesse du processeur.
  • TEST : programme de test montrant l'utilisation des fonctions ci-dessus.
* opt l+,c+,w-
;
; Fonctions de bas niveau "prise de contrôle de la machine" du lecteur de disquette.
;
;*** À N'UTILISER QUE LORSQUE VOUS AVEZ PRIS LE CONTRÔLE DE LA MACHINE ***
;
; Écrit par Bryce Nesbitt,
; Commodore-Amiga, Inc.
; Aucun droit d'auteur n'est revendiqué.
;
;*** Fonctions visibles de l'extérieur

XDEF MOTORON     ;Met le moteur 0 en marche et attente de READY.
XDEF MOTOROFF    ;Arrête tous les moteurs du lecteur.
XDEF STEPHEADS   ;Fait avancer la tête du lecteur et attend correctement.

;*** Emplacements des registres d'E/S codés en dur

CIAA_PRA   EQU $BFE001   ;Port "A" sur CIA "A"
CIAB_PRB   EQU $BFD100   ;Port "B" sur CIA "B"
CIAA_TALO  EQU $BFE401   ;Chronomètre A bas
CIAA_TAHI  EQU $BFE501   ;Chronomètre A haut
CIAA_ICR   EQU $BFED01   ;Registre de contrôle des interruptions
CIAA_CRA   EQU $BFEE01   ;Contrôle du chronomètre A

;;;;;;; MOTORON ;;;;;;;
;
;Éteint les moteurs des lecteurs 1 à 3, puis active le lecteur 0. Cette fonction
;revient quand l'unité 0 est activée et tourne à pleine vitesse. Si l'unité 0 est
;déjà en train de tourner, cette fonction revient très rapidement. Les lignes de
;direction et les lignes latérales ne sont pas modifiées.
;
MOTORON:
	or.b	#$F9,CIAB_PRB	;Met la ligne du moteur à l'arrêt, désélectionne tous
				;les lecteurs et désactive la ligne STEP.
	and.b	#$8F,CIAB_PRB	;Sélectionne les lecteurs 1 à 3 pour qu'ils voient
				;le réglage de l'arrêt du moteur.
	or.b	#$70,CIAB_PRB	;Désélectionne les lecteurs 1 à 3
	and.b   #$7F,CIAB_PRB   ;Règle le moteur sur ON. Ceci doit être fait
				;*AVANT* de sélectionner les lecteurs !
	and.b  	#$F7,CIAB_PRB	;Sélectionne le lecteur 0. Le lecteur "se souviendra"
				;du réglage du moteur, si le moteur était déjà activé,
				;rien ne se passe.

motor_wait
	btst.b	#5,CIAA_PRA	;Vérifie la ligne READY
	bne.s	motor_wait	;Occupé - attend que le lecteur soit prêt
	rts

;;;;;;; MOTOROFF ;;;;;;;
;
;Coupe tous les moteurs des lecteurs.
;
MOTOROFF:
	or.b	#$F8,CIAB_PRB	;Désélectionne tous les lecteurs et met la ligne
				;moteur sur OFF
	and.b	#$87,CIAB_PRB   ;Sélectionne tous les lecteurs pour qu'ils voient
				;le nouveau réglage du moteur.
	or.b	#$F8,CIAB_PRB   ;Désélectionne tous les lecteurs
	rts

;;;;;;; STEPHEADS ;;;;;;;
;
;D0 doit contenir zéro pour faire avancer les têtes du lecteur vers l'intérieur,
;et -1 pour faire avancer les têtes vers l'extérieur de la disquette. Les têtes
;se déplacent dans la direction indiquée.
;
;Les têtes fonctionneront dans la direction indiquée. Après le pas, cette fonction
;fonction effectuera une attente indépendante du processeur pour le délai requis de
;3,0 millisecondes. Notez que certains lecteurs de disquette n'ont pas besoin de
;3,0 millisecondes, mais que d'autres en ont besoin. Il n'est pas sûr de sortir un
;produit commercial avec un délai d'attente plus court.
;
;Notez que la ligne STEP doit toujours commencer à l'état haut, être pulsée à l'état
;bas, puis revenir à l'état haut.
;
;En utilisant cette méthode de temporisation et des interruptions, il est
;facile de créer un chargeur qui continue à se charger pendant que votre musique
;de fond est jouée.
;
STEPHEADS:
	and.b	#2,d0		;Supprime les bits de déchets
	or.b	d0,CIAB_PRB  	;Définit le registre de direction FIRST

	;(essaye d'être un peu lent à propos de l'impulsion de la ligne de pas)
	bclr.b	#0,CIAB_PRB	;Impulsion basse de la ligne STEP
	bset.b	#0,CIAB_PRB	;Renvoie la ligne STEP haute

;
;Utilise la puce du chronomètre pour gaspiller 3 millisecondes.
;
;Les fréquences du cristal de base de l'Amiga sont :
;    NTSC 28,318181 MHz
;    PAL  28,37516 MHz
;Les deux chronomètres 16 bits sur les puces 8520 décomptent chacun à 1/10e
;de l'horloge du processeur, soit 0,715909 MHz. Cela donne 1,3968255
;microsecondes par décompte. En PAL, le compte à rebours est un peu
;plus lent, soit 0,709379 MHz.
;
;Pour attendre 1/100e de seconde, il faudrait attendre 10 ,000 microsecondes.
;Le registre du chronomètre serait réglé sur (10 000/1,3968255=7159).
;
;Pour attendre 3 millisecondes, il faut attendre 3000 microsecondes.
;Le registre serait réglé sur (3000/1,3968255=2148).
;
;Voir le manuel de référence du matériel pour plus d'informations sur les puces 8520.

;----Setup (ne doit vraiment être fait qu'une fois)
	move.w  #$7fff,$dff09a   ;Tue les interruptions de toutes les puces spécialisées
;----Ceci met le chronomètre A en mode "un coup" (one-shot).
	move.b  CIAA_CRA,d0      ;Met en place le registre de contrôle A
	and.b   #%000000,d0      ;Ne met pas à la poubelle le drapeau 60/50Hz
	or.b    #%001000,d0      ;ou les bits de direction série
	move.b  d0,CIAA_CRA
	move.b  #%111111,CIAA_ICR ;Efface toutes les interruptions du 8520
;----end setup

;----Set time (octet de poids faible puis octet de poids fort)
	move.b #(2148&255),CIAA_TALO  ;Masque la partie basse
	move.b #(2148>>8),CIAA_TAHI   ;Décale la partie haute de 8 bits

;----Attend le compte à rebours du chronomètre
busy_wait:	btst.b #0,CIAA_ICR    ;Attend le drapeau d'expiration du chronomètre
                beq.s busy_wait
                rts

;;;;;;; TEST ;;;;;;;
;
; Programme de test rapide et sauvage
;

*	INCDIR "inc:"
        INCLUDE "exec/types.i"
        INCLUDE "exec/ables.i"

        XREF _LVODisable


TEST: 	move.l  4,a6
        jsr     _LVODisable(a6)
        bsr     MOTORON

        moveq   #10,d3		;Dix recherches complètes avant la fin
fullseek:
	bset.b  #1,CIAB_PRB	;Règle la direction à OUTWARD
	moveq   #80-1,d2	;80 pistes
test4   bsr     STEPHEADS
        btst.b  #4,CIAA_PRA 	;Vérifie le capteur de la piste 00
        dbeq    d2,test4    	;Décrémentation et branchement jusqu'à ce que
                               	;EQual ou jusqu'à ce que le compte soit dépassé
        moveq   #80-1,d2
        bclr.b  #1,CIAB_PRB 	;Règle la direction sur INWARD
test3	bsr     STEPHEADS
        dbra    d2,test3

        dbra    d3,fullseek


        bsr     MOTOROFF
fish	bra.s   fish
;
; Nous avons tué le système d'exploitation, de sorte que ce testeur ne se termine jamais
;


[Retour en haut] / [Retour aux articles]