CODINGLA BIBLE DU CPC 6128

La bible du CPC 6128 : 1.10.5 L'interface d'imprimante centronics

On trouve sur tout ordinateur quelque chose qu'on considère comme pouvant être amélioré. Sur le CPC, c'est sans conteste l'interface imprimante. Bien que de nombreux points faibles ou défauts du CPC 464 aient été éliminés sur ses successeurs 664 et 6128, aucune modification n'a été apportée au point faible le plus regrettable, l'interface imprimante. La cause de notre 'mauvaise humeur' est le fait que l'interface ne dispose toujours que de 7 bits. La plupart des imprimantes, y compris celle proposée par AMSTRAD pour le CPC, ont une entrée 8 bits et donc de nombreuses commandes et possibilités de ces imprimantes ne peuvent être obtenues que par des détours, ou même ne peuvent pas être obtenues du tout.
Mais considérons d'abord la structure électronique de cette interface.

L'interface se compose principalement d'un octuple latch 74LS273. Les huit différents latchs travaillent comme des flip-flops, l'information envoyée sur les entrées est stockée avec une bascule high-low sur l'entrée d'horloge pin 11 et elle est disponible sur les sorties, jusqu'à un RESET ou à une nouvelle programmation, quelles que soient les modifications sur les signaux d'entrée.

Le signal d'horloge dont la bascule high-low déclenche le stockage des valeurs d'entrée est produit avec une porte logique OR. La sortie pin 11 devient low, lorsque les deux entrées sont low. La connexion de l'imprimante est également appelée à travers l'adressage de port. C'est pourquoi le signal IOWR* se trouve sur une entrée de la porte logique OR et que le canal d'adresse Al2 se trouve sur l'autre entrée.

Comme sur les autres éléments périphériques, le décodage est ici donc également très incomplet. Les canaux d'adresse qui ne sont pas utilisés pour le décodage doivent donc être high pour éviter des collisions avec d'autres adresses de port utilisées. Ceci donne une adresse de port effective de &EFxx.

Les entrées du latch de l'imprimante sont reliées au bus de données du processeur. Les sorties se trouvent sur la connexion de l'imprimante. Seul le bit 7 est envoyé au port Centronics à travers une porte logique NAND utilisée comme inverseur. Ce bit représente le signal strobe nécessité par l'imprimante. Ce signal est normalement high. Mais si l'ordinateur veut envoyer un caractère à l'imprimante, il envoie l'octet à transmettre sur les canaux de données et place peu après le signal strobe sur low. L'octet à transmettre est ainsi accepté par l'imprimante.
A condition toutefois que le signal busy de l'imprimante soit low. L'état du signal busy est interrogé par le bit 6 du port B du 8255.
Mais comment le signal strobe peut-41 être produit? Rien de plus
simple.

Chaque octet à transmettre est d'abord ANDé avec &7F. Le bit supérieur de l'octet est ainsi supprimé de façon certaine. Cet octet est sorti sur le port de l'imprimante par une instruction OUT.

Les bits à transmettre se trouvent maintenant déjà sur l'imprimante, mais le signal strobe est toujours high, à travers l'inverseur. C'est pourquoi on met ensuite avec OR &80 le bit 7 de la valeur à sortir qui est également sortie sur le port imprimante. La valeur à transmettre n'a pas été modifiée, seul le signal strobe est devenu low à travers l'inverseur. Ce signal doit cependant redevenir également high, c'est pourquoi le bit supérieur est à nouveau supprimé avec AND et l'octet est à nouveau sorti. Un octet a été ainsi envoyé de l'ordinateur à l'imprimante.

La sortie sur l'imprimante ne pose pas de problème en Basic. Mais même en langage-machine, il n'est pas nécessaire d'écrire soi-même toute cette procédure. Il y a plusieurs routines système qui vous évitent une bonne part de ce travail de programmation. Il y a d'abord la routine dont l'entrée est en &BD2B. A travers cette routine, vous pouvez sortir un caractère sur l'imprimante. Le caractère doit chaque fois se trouver dans l'accumulateur. Cette routine teste en outre si l'imprimante est 'busy'. Si l'imprimante ne répond pas dans un délai de 0.4 secondes, la routine revient avec un flag carry nul.

Il faut alors faire une nouvelle tentative avec le même caractère. Cette routine est également utilisée par l'interpréteur Basic. Si la transmission est réussie, le carry est mis. Le prochain caractère peut alors être envoyé.

Une autre routine a son entrée trois octets plus loin (&BD2E). Cette routine peut être utilisée pour examiner l'état de l'imprimante. Si aucune imprimante n'est connectée ou si l'imprimante répond 'busy', si elle ne peut donc pas recevoir de caractères pour le moment, cette routine revient avec un carry mis, sinon le carry est annulé.

La troisième routine exploitable (&BD31) accomplit toutes les procédures nécessaires à la sortie d'un caractère sur l'imprimante. Le programmeur doit cependant tester alors auparavant si l'imprimante est prête à recevoir puis transmettre le caractère voulu dans l'accumulateur. Si le test de l'état de l'imprimante est négligé, le caractère peut éventuellement se perdre dans le 'vide'.

Comment ces routines peuvent être mises en œuvre, nous vous l'indiquerons plus tard dans cet ouvrage. Nous vous montrerons en effet pour l'exemple d'un hardcopy de texte et de graphisme, comment utiliser ces routines et d'autres.

Mais il convient de tenir compte d'une autre particularité de cette connexion Centronics.

La disposition des contacts du port d'imprimante incite à se procurer les fiches nécessaires ainsi qu'un bout de câble plat pour réaliser soi-même un tel câble. Si les connecteurs sont en outre des pinces crocodile, même des possesseurs de CPC peu doués manuellement peuvent réaliser un tel câble en 5 à 10 minutes. Toutes les imprimantes Centronics peuvent être alors utilisées. Mais lors du premier essai de fonctionnement, vous aurez une grosse surprise. L'imprimante dépense curieusement le papier très généreusement. Une ligne vide est ajoutée après chaque ligne imprimée.

La raison en est la suivante:

Le CPC ajoute à la fin de chaque ligne imprimée la suite de caractères CR/LF (Carriage Return, Line Feed) c'est-à-dire la suite d'instructions pour retour de chariot et passage à la ligne. Le papier avance donc d'une ligne. De plus, et sans raison très claire, le pin 14 de la connexion centronics du CPC est cependant encore relié à la masse. Cela produit sur la plus part des imprimantes un passage à la ligne supplémentaire, de sorte qu'une ligne vide est ainsi toujours produite.

La solution est dans ce cas l'interruption du canal menant au pin 14. Après avoir écarté ce canal et éventuellement installé des commutateurs dans l'imprimante si nécessaire comme par exemple sur Epson, tout devrait fonctionner correctement.

★ ANNÉE: 1985

Page précédente : La bible du CPC 6128 : 1.10.04 Le lecteur de cassette
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 542 millisecondes et consultée 1430 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.