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°03 - Catalogue décorés
» Coding » Assembleur ACPC n°34
» Coding » Assembleur ACPC n 07 - Initiation : Les INC / DEC / CP
» Coding » Assembleur ACPC n 06 - Initiation : Les transferts
» Coding » Bidouilles ACPC n°47 - Les vecteurs system (5/6)
» Coding » Bidouilles ACPC n°40 - Gestion d'erreurs des routines disques
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.7-desktop/c
Page créée en 303 millisecondes et consultée 2188 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.