CODING ★ LECTURE SANS AMSDOS ★

Bidouilles ACPC n°38 - Lecture sans AMSDOS
Enfin le siècle, l'année, le mois, la semaine, le jour, l'heure et la seconde promise et tant attendue. Après le formatage direct, voici la lecture directe. Fini les appels au système à la mords-moi le noeud. Il est temps de faire table rase et de programmer des accès disques enfin dignes du FDC. C'est ce que nous nous proposons de faire avec la routine de ce mois. Voici sans plus attendre quelques instructions d'utilisation.

Vous vous rappelez la routine de formatage passée dans les pages du numéro 36 ? Pour que notre programme de ce jour travaille de manière optimale, il vous faudra remplacer les datas 1, 4, 2, 5, 3 de la ligne adressée par SECT par les valeurs 1,2,3,4,5 (on a eu le tiercé dans le désordre, maintenant nous le passons dans l'ordre). Voici pourquoi.

En bossant sur le FDC, nous nous sommes aperçus qu'il est capable de lire non pas un seul secteur d'affilée, mais plusieurs, cela malheureusement sur
une seule piste.

Moi : « Hé ! Roger, donne-moi. les 5 secteurs de type trois de la piste 12 (5 Ko) ! »
Lui (FDC Master) : « Vla-t'y-pas que j'tenvoie tout ça d'un coup d'un seul ! »
Moi: «???!!!#, Ga ! Zo Bon...»

Je ne vous raconte même pas comment on gagne de la vitesse lorsque les secteurs sont en ligne. Avec le format du numéro 36 de Cent Pour Cent et des secteurs et pistes contigus, je pense pouvoir annoncer des chiffres de l'ordre de 10 Ko seconde moteur du lecteur lancé. Adios Amsdos, salut poilu. Maintenant que vous en avez l'eau à la bouche, voici quelques explications sur le fonctionnement de ce petit programme. Avant tout, formatez une disquette avec le programme des bidouilles du numéro 36 et ouvrez vos veux.

DIX KILOS PAR SECONDE

Ce n'est pas le poids que prend le lieutenant Lambyfox ou Poum par repas mais simplement le taux de transfert en lecture sur un lecteur de disquette de bonne qualité. C'est pas des blagues.

Essayez et vous verrez. Voici comment se décompose le programme de lecture.

  • MOTOFF : coupe le moteur instantanément.
  • MOTON : vérifie que le moteur du lecteur soit en marche et le lance avec tempo dans le cas contraire.
  • SEEKTEST : permet la remise en route du contrôleur en cas d'erreur. S'il est resté coincé sur une instruction pétouiller, il repartira à l'aide de la zone contenue avant l'étiquette SEEK. Après celle-ci se trouve la routine permettant au contrôleur de se positionner sur la piste recherchée.
  • LECTURE : est le module réel de lecture. Il faut lui donner quatre paramètres en entrée. HL doit contenir l'adresse de réception des données, A le numéro de piste recherchée, D le secteur de début de lecture et E le secteur de fin. Si ces deux derniers registres sont identiques, un seul secteur sera lu.
  • COMMAND : sont les données de lecture utilisées par la routine.
  • PUTFDC : écrit des octets au contrôleur.
  • GETFDC : fait de même en lecture. Nous verrons effectivement comment fonctionne ce programme le mois prochain. En attendant la routine de lecture, lancez tout de même ce petft programme. Vous ne serez sûrement pas déçu.
TO THE END

Bien entendu, ce programme ne gère pas de fichiers mais des zones. A vous de faire une petite table de gestion des données à charger, four chaque bloc, des indications sur le secteur et piste de début et de fin peuvent être stockées dans un secteur donné pour traitement ultérieur. A vous d'organiser vos disquettes. Nous verrons plus tard de quoi il retourne, lorsque toutes les routines vous seront disponibles.

J'ai du pain sur la planche. Après tout cela, nous verrons les algorithmes de compression. Reposez-vous bien car cela sera dur. Bonne nuit.

; ------------------------------------------------------------
;

   ORG #9000
;    ; LECTURE SECTEUR :
;    ; HL=ADRESSE MÉMOIRE
;    ; A=PISTE
;    ; D=SECTEUR DEBUT
;    ; E=SECTEUR FIN
DEB:
   CALL MOTON
   LD A,10
   LD DE,#105
   LD HL,#C000
   CALL LECTURE
   LD A,20
   LD DE,#105
   LD HL,(MEM1)
   CALL LECTURE
   LD A,30
   LD DE,#105
   LD HL,(MEM1)
   CALL LECTURE
   LD A,40
   LD DE,#101
   LD HL,(MEM1)
   CALL LECTURE
   CALL MOTOFF
   RET
;
MOTOFF:
   LD BC,#FA7E
   XOR A
   LD  (MOTOR),A
   OUT (C),A
   RET
MOTON:
   LD   A,(MOTOR)
   OR   A
   JR   NZ,READY
   LD   BC,#FA7E
   LD   A,1
   LD   (MOTOR),A
   OUT   (C),A
;
   LD   A,#C0
B0UC1:
   PUSH  AF
   LD   A,#FF
B0UC2:
   PUSH  AF
   PUSH  AF
   POP   AF
   POP   AF
   DEC   A
   JR   NZ,B0UC2
   POP   AF
   DEC   A
   JR   NZ,B0UC1
READY:
   RET
;
SEEKTEST:
   DI
   LD   BC,#FB7E
LITFDC:
   IN   A,(c)
   AND   #10
   JR   Z,SEEK
LITFDC2:
   IN   A,(C)
   RLA
   JR   NC,LITFDC2
   RLA
   JR   C,ECRIS
LIS:
   INC   C
   IN   A,(C)
   DEC   C
   JR   LITFDC
ECRIS:
   XOR   #FF
   INC   C
   OUT   (C),A
   DEC   C
   JR   LITFDC
SEEK:
   LD   A,#0F
   CALL  PUTFDC
   XOR   A
   CALL  PUTFDC
   LD   A,(PISTE)
   CALL  PUTFDC
SEEKOK:
   LD   A,8
   CALL  PUTFDC
   CALL  GETFDC
   LD   D,A
   CALL  GETFDC
   LD   A,D
   AND   #20
   JR   Z,SEEKOK
   RET
;
LECTURE
   LD   (PISTE),A
   LD   A,D
   LD   (SECTEUR),A
   LD   A,E
   LD   (END1),A
   CALL  SEEKTEST
;
START:
   PUSH  HL
   LD   HL,COMMAND
   LD   D,9
READ1:
   LD   A,(HL)
   INC   HL
   CALL  PUTFDC
   DEC   D
   JR   NZ,READ1
   POP   HL
   JR   GETDATA
PASRES
   INC   C
   IN   A,(C)
   LD   (HL),A
   INC   HL
   DEC   C
GETDATA:
   IN   A,(C)
   JP   P,GETDATA
   AND   #20
   JR   NZ,PASRES
RESULT:
   LD   D,7
   LD   (MEM1),HL
   LD   HL,RES1
LISRES:
   CALL  GETFDC
   LD   (HL),A
   INC   HL
   DEC   D
   JR   NZ,LISRES
;
   EI
   RET
;
COMMAND DB   #66
LECTEUR DB   0
PISTE DB   0
TETE  DB   0
SECTEUR DB   0
TYPE  DB   3
END1  DB   0
GAP3  DB   #20
TAILLE DB   0
;
MEM1  DW   0
MOTOR DB   0
RES1  DS   7
;
PUTFDC:
   PUSH  AF
PUTFDC2
   IN   A,(C)
   RLA
   JR   NC,PUTFDC2
   POP   AF
   INC   C
   OUT   (C),A
   DEC   C
   RET
;
GETFDC
   IN A,(C)
   RLA
   JR NC,GETFDC
   INC C
   IN A,(C)
   DEC C
   RET
;

Sidned le Barbare

Page précédente : Bidouilles ACPC n°37 - FDC en mode direct

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding » Bidouilles ACPC n 04 - Le PSG (1/2)
» Coding » Assembleur ACPC n°11
» Coding » Bidouilles ACPC n°32 - Bip, son and sound
» Coding » Assembleur ACPC n°36 - Dis moi, c'est quoi l'assembleur
» Coding » Assembleur ACPC n°12 - AS : SANS DANS
» Coding » Bidouilles ACPC n°41 - L'art de la compression
Je participe au site:

» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.732-desktop/c
Page créée en 585 millisecondes et consultée 2709 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.