CODING ★ GESTION DIRECTE DU FDC 765 ★

Bidouilles ACPC n°39 - Gestion directe du FDC 765
IN BED WITH FDC

Confessions sur l'oreiller, c'est ce que je vous propose de faire ce mois-ci. Après la lecture disque en mode direct, nous allons nous attaquer à l'écriture. J'y ai passé de longues nuits, allongé sur mon lit, entre le sommeil et le rêve, en me demandant si un jour je réussirai à programmer ce circuit si sauvage. Voilà qui est fait, il ne nous reste donc plus qu'à en parler.

Encore et encore un petit bout de listing pour rassasier vos claviers si avides de touchers tendres et instructifs. Nous allons écrire pour que le CPC écrive, ce qui nous changera de l'habituel écrire pour qu'il fasse autre chose. Tout cela pour ne rien dire, mais tant de gens agissent ainsi dans la vie de tous les jours qu'il faut bien en faire autant de temps en temps, histoire de ne pas trop se sentir mis à l'écart. Cela dit, je n'ai plus rien à dire. Passons donc à la suite de notre bricolage hefdécien.

COPIEUR...

Ceux d'entre vous qui sont perspicaces verront rapidement que les deux listings, d'écriture et de lecture directes, se ressemblent étonnamment. Seules quelques étiquettes et deux instructions changent. Pour ceux qui n'ont pas eu le listing du mois dernier, voici le programme total. Nous vous offrirons, le mois prochain, la méthode permettant de travailler avec les deux versions sans avoir à garder tout le code commun inutile, ainsi que les routines de traitement d'erreurs. Il est tout de même bon de savoir si la dernière opération disque s'est bien passée ou non. Pour le moment, rien ne plante, mais si tout ne se passe pas comme dans le meilleur des mondes, rien ne nous le fait savoir. Bref, ce n'est pas ce genre de chose qui nous fera pousser des poils à la place des cheveux pour le moment (ne te gratte pas la tête, c'est degueulasse)

FONCTIONNEMENT

Comme la routine de lecture, celle d'écriture présentée ce mois-ci utilise le format détaillé dans le numéro 36 de Cent Pour Cent. La disquette générée contient deux faces de 42 pistes de 5 secteurs d'1 Ko. Soit, donc, deux faces de 210 Ko contre 178 sous Amsdos. Lorsque vous savez que les temps de lecture-écriture sont aproximativement quadruplés avec notre nouveau format, ça vaut le coup de se pencher dessus. Nous vous fournissons les routines générales de traitement. Il ne tient qu'à vous d'organiser vos disquettes avec une gestion quelconque de répertoire. Vous pouvez, par exemple, sacrifier la première piste de la face pour y stocker des noms de fichiers ainsi que des entrées sur des zones de la disquette, comme le fait l'Amsdos. Qui sait si un coup de folie ne nous prendra pas et si nous ne vous fournirons pas le coding et le programme de cette application? Dans le cas de l'utilisation de la présente routine avec des disquettes protégées, aucune écriture ne sera générée, même si aucun message d'erreur n'apparaît. Secundo, il vous est possible de retirer la disquette du lecteur lors des lectures-écritures, et ce sans aucun risque de plantage. En effet, quoi qu'il arrive, le contrôleur est initialisé avant chaque appel de fonction, ce qui évite des transmissions de commandes erronées Bref, tout baigne.

EN ATTENDANT

Deux pages, c'est trop peu même s il y a plus d'une idée par page. C'est pas le pied, mais ça vaut mieux que rien. En attendant le mois prochain, nous vous souhaitons bonnes routines de gestion directe du FDC 765 sur CPC.

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

   ORG #9000
;
;    ; ECRITURE 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,(MEM)
  CALL LECTURE
  LD A,30
  LD DE,#105
  LD HL,(MEM)
  CALL LECTURE
  LD A,40
  LD DE,#101
  LD HL,(MEM)
  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   (M0T0R),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,LIIFDC2
   RLA
  JR   C,ECRIS
LIS:
  INC   C
  IN   A,(C)
  DEC   C
  JR   LITFDC
ECRIS:
   XOR   #FF
  INC   C
  ;OUI   (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
;
ECRITURE:
  LD   (PISTE),A
  LD   A,D
  LD   (SECTEUR),A
  LD   A,E
  LD   (END),A
  CALL  SEEKTEST
;
START:
  PUSH  HL
  LD   BL,COMMAND
  LD   D,9
WRITE1:
  LD   A,(HL)
  INC   HL
  CALL  PUTFDC
  DEC   D
  JR   NZ,WRITE1
  POP   HL
  JR   GETGATA
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   (MEM),HL
  LD   HL,RES
LISRES:
  CALL  GETFDC
  LD   (HL),A
  INC   HL
  DEC   D
  JR   NZ,LISRES
;
  RET
;
COMMAND DB  #45
LECTEUR DB   0
PISTE DB   0
TETE  DB   0
SECTEUR DB   0
TYPE  DB   3
END   DB   0
GAP3  DB   #20
TAILLE DB   0
;
MEM   DW   0
MOTOR DB   0
RES   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
;

Sined, ACPC n°39, page 32-33

Page précédente : Bidouilles ACPC n°38 - Lecture sans AMSDOS

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

Lien(s):
» Coding » Assembleur ACPC n°46 - La multiplication et la division
» Coding » Assembleur ACPC n°21 - CRTC + astuces
» Coding » Bidouilles ACPC n°38 - Lecture sans AMSDOS
» Coding » Assembleur ACPC n°36 - Dis moi, c'est quoi l'assembleur
» Coding » Bidouilles ACPC n°44 - Les vecteurs system (2/6)
» Coding » Bidouilles ACPC n 04 - Le PSG (1/2)
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.73-desktop/c
Page créée en 502 millisecondes et consultée 2854 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.