Les disquettes 3” destinées aux micro-ordinateurs Amstrad sont fiables et pratiques, grâce à leur structure rigide et à la protection du disque. Mais elles présentent l'inconvénient, lorsqu'elles ne sont pas rares, d'être assez chères en raison du manque de concurrence. Deux solutions se présentent à l'utilisateur qui a besoin d'une importante mémoire de masse: acheter sans hésitation de nombreuses disquettes du programme pour réaliser des copies intégrales de disquette sur cassette, à une vitesse acceptable.Regardez votre collection de disquettes et comptez celles dont vous ne vous servez presque jamais. Il y a les jeux dont on s'est lassé mais que l'on souhaite néanmoins garder, les nombreuses copies qui permettent de conserver un double au cas où il arriverait malheur à l'original (l'exemple commun à tous est la copie de la disquette CPM et de Dr Logo... Le programme que nous vous proposons offre la possibilité de transférer une face de disquette sur cassette en 12 min 30 s (à 2 000 bauds). On peut ainsi loger 3 disquettes entières sur une C90. De cette façon, vous pourrez libérer de nombreuses faces de disquette pour d'autres emplois. Bien entendu, il faudra patienter 25 minutes avant de réutiliser ces programmes, le temps de les retransférer sur une disquette. Il faut également signaler que ce programme ne fonctionne que pour les disquettes au format « SYSTEME » ou « DATA ». Les disquettes jeux ou utilitaires du commerce ne pourront pas la plupart du temps être sauve- gardées sur cassette car leur format est souvent non conforme aux deux cités précédemment. Dans ce cas, le programme vous indiquera une erreur de lecture. Principe du transfert Comme vous le savez certainement, une disquette est formatée, SYSTEME et DATA, en 40 pistes comprenant chacune 9 secteurs de 512 octets. La ROM de l'AMSDOS comporte des routines qui autorisent la lecture ou l'écriture d'un secteur donné. Le rôle du programme sera de lire les 360 secteurs que comporte la disquette (180 Ko) et d'écrire les données ainsi lues sur la cassette, et vice versa. Mais la RAM de l'Amstrad étant limitée, le transfert est décomposé en 5 étapes semblables, où 8 pistes sont lues et les données écrites sur la cassette en un seul bloc de 36 Ko. On procède exactement de la même façon pour l'opération inverse (lecture de la cassette et écriture sur la disquette). Particularités du programme Le listing complet du programme en assembleur Z80 , présenté en fin d'article, permettra aux initiés de comprendre aisément le fonctionnement de celui-ci. Cependant, quelques points doivent être précisés : le programme utilise les instructions étendues (appelées en Basic par |, comme |DIR, |TAPE...) &04 et &05 situées dans la ROM contrôleur, correspondant respectivement à « Lire secteur » et « Ecrire secteur » (impossible de les appeler en Basic car &04 et &05 ne peuvent être obtenues à partir du clavier, et, de plus, les paramètres doivent être transmis dans des registres du Z80). Le programme doit aussi réaliser l'appel direct d'une routine du contrôleur pour déterminer le format d'une disquette. Lorsque l'Amstrad est mis sous tension, une lecture dans les adresses allant de C000H à FFFFH nous renvoie l'octet adressé en RAM (mémoire écran). Dans ce cas, ceci n'a aucun intérêt et il est préférable de sélectionner une lecture en ROM pour appeler simplement les routines du contrôleur. Cette opération est réalisée par la routine KL ROM SELECT (paramètre C = numéro de la ROM à autoriser). En passant 7 (numéro de la ROM contrôleur) comme paramètre, toute lecture ultérieure effectuée dans les 16 Ko supérieurs de la mémoire se fera dans la ROM 7. Pour trouver l'adresse des instructions étendues &04 et &05, on peut utiliser la routine KL FIND COMMAND, qui retourne l'adresse sur 3 octets de l'instruction dont le nom est pointé par le double registre HL. La dernière lettre du nom de l'instruction doit avoir son code ASCII augmenté de 128 (mise à 1 du bit 7, afin de marquer la fin du nom). Par exemple, pour avoir l'adresse de IDIR, on écrira : LD HL, NAME CALL KL FIND COMMAND RET NAME: DEFM "DI","R"+80HHL contiendra en retour l'adresse effective de la routine et C le numéro de ROM (qui vaut toujours 7 pour les routines du contrôleur).De même, pour &04 et &05, on mettra en NAME: 84H ou 85H. Un JP (HL) au retour de KL FIND COMMAND exécute directement la routine (puisque la ROM 7 est sélectionnée dès le début). Une autre difficulté pourrait provenir des « jump-blocks » du lecteur de cassettes. En effet, comme nous sommes en version disquette, la plupart des jump-blocks cassette sont effacés. Mais ceux qui sont employés (cas write, read, set speed) n'ont aucun équivalent en version disquette, ils sont donc toujours présents en RAM et peuvent être appelés sans précaution particulière. Aucune instruction étendue et aucun jumpblock ne peuvent déterminer le format d'une disquette placée dans le lecteur. Il faut alors faire appel à la fonction BIOS SELDSK, avec demande de sélection automatique du format (routine GETFOR). Mais nous sommes sous AMSDOS et les vecteurs du Bios ne sont écrits en mémoire que lorsqu'on lance CPM ; il est nécessaire de faire appel directement en ROM à la routine correspondante en C4F0H, Les instructions étendues &04 et &05 n'éteignant pas systématiquement le moteur du lecteur de disquettes, des routines de mise en route (TOURNE) et d'arrêt (STOP) du moteur sont présentes. Une temporisation est nécessaire pour le démarrage du moteur, afin que celui-ci ait atteint sa pleine vitesse avant l'appel du Bios, sinon celui-ci nous envoie le message d'erreur « Disk missing ». Finalement, le retour au Basic doit être précédé par une sélection de la ROM Basic, sinon le « plantage » est assuré puisque l'interpréteur ne peut être lancé. Cela est fait par KL ROM DESELECT, qui remet la sélection présente avant l'appel de KL ROM SELECT, c'est-à-dire la ROM Basic non autorisée (lecture en RAM). Fig. 1. - Organigrammes respectifs du transfert disquette-cassette et cassette-disquette.
Structure du programme Celui-ci est constitué de deux blocs principaux (dont les organigrammes généraux sont donnés figure 1) qui réalisent les deux fonctions essentielles du programme (le transfert disquette-cassette et vice versa), de nombreuses routines appelées par ces deux blocs (la fonction de ces routines est explicitée au début de chacune d'elles sur le listing source), et enfin d'une série de messages destinés à rendre l'utilisation du programme aussi pratique que possible. Utilisation duprogramme Pour saisir le programme, utilisez le programme Basic donné figure 2. Il vous permettra de saisir l'intégralité des codes machine donnés en figure 3. Après l'avoir lancé, vous avez l'affichage de « adresse courante 9C40 » et « - > ». Entrez alors la première ligne de la figure 4 sous la forme d'une chaîne de 40 caractères : « 0E07CD... », puis la somme de contrôle. Si aucune erreur n'est détectée, l'adresse courante est incrémentée de 20 et vous continuez de la même façon les 20 octets suivants, etc. En cas d'erreur, un bip sonore est émis et vous devrez retaper la ligne. Lorsque vous aurez tapé la dernière ligne (adresse A078), le programme sauvegardera automatiquement l'utilitaire sur disquette. A partir de cet instant, il vous suffira pour l'exécuter de taper LOAD «TRANSFER.BIN» et CALL 40000. Vous aurez alors l'affichage du menu avec ses 4 options. Les deux premières effectuent le transfert dans un sens ou dans l'autre. Pour transférer le contenu d'une disquette sur cassette, introduisez la disquette source dans le lecteur, et la cassette vierge dans le magnéto, puis pressez REC PLAY. Sélectionnez ensuite l'option 1, le transfert s'effectue automatiquement (si le format de la disquette est convenable) et la fin de l'opération est signalée par un nouvel affichage du menu. Pour transférer ie contenu d'une cassette sur une disquette, il faut placer dans le lecteur une disquette formatée comme l'était celle que l'on veut récupérer à travers la cassette. Le format ayant été enregistré sur la cassette, le programme vérifie s'il peut faire le transfert. En cas de non-compatibilité il signale le format que doit avoir la disquette pour être écrite correctement. Attention ! pour le cas où le programme signale un mauvais format, il faudra non seulement changer de disquette, mais rembobiner la cassette pour que le programme puisse à nouveau lire le format enregistré. La troisième option effectue le démarrage du moteur du magnéto, ce qui permet le positionnement précis de la bande magnétique avant la lecture ou l'enregistrement. La frappe d'une touche quelconque fera revenir au menu et arrêtera le moteur. La quatrième option est le retour au Basic, li sera possible de relancer le programme à tout moment par CALL 40000. Il n'est pas possible d'arrêter immédiatement le programme lors d'un transfert, et il est préférable d'éteindre et de recharger, plutôt que d'attendre la fin de celui-ci. MS ★ AMSTRAD CPC ★ DOWNLOAD ★ |
|
CPCrulez[Content Management System] v8.73-desktop/c Page créée en 281 millisecondes et consultée 74 foisL'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. |
|
|