CODINGCLASSEURS WEKA ★ Comment exploiter toutes les ressources et augmenter les performances de votre AMSTRAD CPC ★

8/5.3.1 - Le modem Digitelec DTL 2000Coding Classeurs Weka

8/5.3 - Les modems

8/5.3.1 - Le modem Digitelec DTL 2000

L'univers de la communication est à votre portée grâce aux lignes téléphoniques, votre ordinateur et un modem. La société Digitelec fabrique différents types de modems se connectant sur votre Amstrad : les séries DTL 2000 et DTL 2100 sont intéressantes pour l'amateur.

Comme vous trouverez en partie 10, chapitre 4.3 un montage permettant à votre CPC de détecter un appel sur votre ligne téléphonique nous ne nous intéresserons pas de ce fait au DTL 2100 qui possède son détecteur intégré.

Le modem qui nous intéressera tout particulièrement sera le DTL 2000 +, qui a la particularité de pouvoir fonctionner en mode V23 Réponse Full Duplex, c'est-à-dire qu'il peut émettre sur la ligne à la vitesse de 1200 bauds et recevoir à 75 bauds. Nous pouvons donc déduire que ce modem pourra se connecter à un minitel via la ligne téléphonique.

Toutes les possibilités du DTL 2000+ sont résumées ci-dessous :

  • V23 appel en Full-Duplex, c'est-à-dire que le modem se comporte comme le modem du minitel (émission à 75 bauds et réception à 1200 bauds), donc que l'on pourrait émuler le fonctionnement d'un minitel grâce à l'Amstrad.
  • V23 réponse en Full-Duplex (voir ci-dessus).
  • V23 Half Duplex, permet de communiquer rapidement avec un autre modem, configuré de la même façon, à 1200 bauds en émission et réception.
  • V21 appel en Full-Duplex, permet d'entrer directement sur le réseau Transpac (émission et réception à 300 bauds).
  • V21 réponse en Full-Duplex (émission et réception à 300 bauds sur Transpac).

I. Connexion à l'Amstrad

Le modem DTL2000+ a la particularité de posséder une interface série simplifiée, donc d'éviter le recours à une interface RS232, ce qui lui permet de se connecter directement sur le bus d'extension de votre Amstrad. En prenant soin de manipuler délicatement le connecteur 2x25 broches, l'enfichage à l'arrière du CPC ne doit poser aucun problème.
Un autre câble sur lequel est montée une fiche gigogne sera connecté sur la ligne téléphonique, le poste venant ensuite dessus.

Enfin, et seulement maintenant, vous pouvez brancher la prise d'alimentation 220 V. Vos périphériques, si vous en avez, seront ensuite mis sous tension, et en dernier lieu, votre ordinateur.

Le modem est prêt à fonctionner, vous pouvez charger le logiciel d'émulation minitel livré avec, ou créer vos propres programmes.

II. L'émulateur minitel

UTILISATION

Le modem est livré avec un programme d'émulation de terminal mini-tiel, somme toute assez sommaire, mais suffisant si vous désirez utiliser l'annuaire électronique. Le programme est livré sur cassette et ne pose aucun problème pour être transféré sur disquette, moyen tout de même plus rapide pour ce type d'utilisation.

Une fois lancé par RUN « DTL 2000 », vous vous trouverez face à une page d'accueil vous permettant de choisir entre :

  • faire connaissance avec les touches de fonctionnement propres au minitel {celles-ci sont résumées sur la figure à la page 4),
  • procéder à un appel V23, ou un appel V21.

L'annuaire électronique sera choisi par l'option appel en V23. Une fois la connexion établie et une demande effectuée, vous vous trouverez face à des pages écran minitel telles qu'elles sont représentées sur les copies graphiques suivantes :

Comme vous pourrez le remarquer, la qualité graphique n'est pas excellente, mais pour une utilisation en mode texte, cet émulateur est largement suffisant.

SAUVEGARDE DE PAGES MINITEL

Lors de la déconnexion, la page minitel affichée sur le moniteur de l'Amstrad est effacée pour laisser place au menu, aussi une sauvegarde éventuelle est-elle intéressante pour relire ultérieurement.

Le logiciel ne possédant pas d'option permettant la sauvegarde de pages écran, nous vous proposons donc une façon de procéder pour l'y insérer.

Lancez le programme et effectuez une connexion sur l'annuaire électronique. Une fois la page de présentation affichée, appuyez sur la touche (commande de déconnexion), et aussitôt sur que vous maintiendrez enfoncée plusieurs fois de suite. Vous verrez apparaître le message Break in XXXX (sur notre logiciel XXXX = 2110). Insérez alors la ligne de sauvegarde de page écran entre le numéro de ligne affiché et le précédent ; sur notre logiciel :

2105 SAVE « PAGEECRAN.BIN », B,&C000,&4000

Attention, ne faites pas d'erreur, les touches < DEL> et flèche de retour arrière ne sont plus disponibles ; vous validerez par la touche < ENTER > (et non qui n'est plus active). Frappez ensuite GOTO XXXX (dans notre cas : GOTO 2110) et le logiciel est prêt à sauvegarder la page minitel que vous aurez devant les yeux lors de la déconnexion. Vous pouvez aussi insérer les lignes suivantes, si vous voulez sauvegarder plusieurs pages minitel avant relecture : (programme sur page 5).


Tables de correspondance . Touches CPC/Fonction minitel

2102 SAVE "TEMPORAI.BIN",B,&C000,&400O
2104 MODE 2
2106 INPUT "NOM DE LA PAGE (8 LETTRES), PUIS ";A$
2108 LOAD "TEMPORAI.BIN"
2109 SAVE AS,B,&C000,&4000

Les lignes 2108 et 2109 auraient pu être remplacées par l'instruction ÙREN, As, « TEMPORAI.BIN » dans un autre programme, mais ce logiciel redéfinissant les touches, la fonction ÙREN n'est plus disponible.

Pour une utilisation ultérieure du logiciel ainsi modifié, vous pouvez le sauvegarder sous le nom « DTL » par exemple (de préférence sur disquette – sinon il faudra le sauvegarder sur une cassette vierge, puis sauvegarder dans l'ordre les logiciels suivants de la cassette originale).

LECTURE DES PAGES ENREGISTREES

La lecture des pages enregistrées grâce au programme modifié, peut être effectuée par l'instruction :

LOAD "NOMPAGE.BIN"

Le petit programme suivant vous permettra de relire une parmi plusieurs pages enregistrées sur une disquette, et vous permettra d'en faire une copie sur imprimante :

10 MODE 1
20 INPUT "NOM DE LA PAGE A LIRE";AS
30 LOAD A$ :REM CHARGEMENT DE LA PAGE
40 AS = INKEY$ :REM ATTENTE TOUCHE SANS AFFICHAGE
50 IF A$ = "1" THEN 80
60 IF A$ = "2" THEN 10
70 GOTO 40
80 REM ******* PLACEZ ICI LA COPIE D'ECRAN *******

Vous pouvez placer après la ligne 80 la copie d'écran graphique proposée en Partie 9 chapitre 8.1. Si vous ne désirez imprimer que le texte de la page minitel (numéros de téléphone, relevé de compte bancaire,...) nous vous proposons le programme de copie page suivante, qui a l'avantage d'être beaucoup plus rapide car il fonctionne en mode texte.

80 PRINT #8
90 FOR I = 1 TO 25:REM LECTURE PAR LIGNE
1G0 FOR J = 1 TO 40:REM LECTURE PAR COLONNE
110 LOCATE J,I
120 AS = COPYCHR$(#0):REM LECTURE CARACTERE SUR ECRAN
130 IF AS = "" THEN AS ~ " "
140 IF ASC(AS) > 127 THEN AS = " "
150 PRINT#8,AS;
160 NEXT J
170 PRINT#8
180 NEXT I
190 GOTO 10

La ligne 140 élimine tout caractère graphique lu à l'écran, et la ligne 130 évite l'éventuelle erreur « TYPE MISMATCH ».

III. Programmation avancée

La programmation du Modem DTL2000+ requiert une connaissance de la structure interne du modem, sur laquelle le manuel est assez discret. Trois fonctions principales permettent de réaliser la communication de données grâce au DTL2000+ : la modulation/démodulation des données à transmettre, la mémorisation des caractéristiques de modulation, et la conversion des données parallèle/série.

Les structures réalisant ces fonctions sont respectivement : le MODEM, un P.l.A. (port d'entrées/sorties parallèles, le composant EF 6821 de chez Motorola), et un A.C.I.A. (le composant EF 6850 de chez Motorola). L'organisation du système vous permettant de communiquer est donnée sur la figure suivante, l'unité centrale étant composée par votre CPC.

Nous laisserons de côté le composant MODEM, sa programmation s'effectuant par l'intermédiaire du PIA 6821.

LE PIA 6821 (PIA : Peripheral interface Adaptor)

Ce composant se trouve placé aux adresses hexadécimales &F8F8 et &F8F9 par un décodage approprié. Ces adresses correspondent respectivement à deux registres A et B qui sont les registres de données (DDR/OR) et de contrôle (CR) du PIA.


Schéma fonctionnel de la transmission par modem

Le registre de contrôle

Ce registre permet de valider diverses caractéristiques de fonctionnement du PIA. Il est composé de huit bits dont seul le bit CR2 est utilisé.
CR7  CR6  CR5  CR4  CR3  CR2  CR1  CRO  B

Ce bit permet lorsqu'il est à 0 de choisir le registre DDR, et lorsqu'il est à 1 de choisir le registre OR (nous verrons ci-dessous l'explication de ces deux registres). Tous les autres bits seront placés à 0

OUT &F8F9,&00 - choix de DDR
OUT &F8F9,&04 - choix de OR

Le registre double DDR/OR

Le registre placé à l'adresse &F8F8 est un registre double, dont le choix est conditionné par le registre CR comme indiqué ci-dessus.

La première opération à effectuer est de choisir le DDR qui est le registre de direction de données. Ce registre est composé de huit bits (DDR7 à DDRO) qui indiquent le sens du transfert des données. Par exemple si le bit DDR7 est à 1 et le bit DDR5 à 0, le PIA pourra émettre des données sur la ligne numéro 7 (on dira qu'elle est en sortie) et en recevoir sur la ligne numéro 5 (on dira qu'elle est en entrée). La programmation des directions pour le DTL2000 + est : toutes les lignes en sorties sauf la ligne 0 en entrée ; donc on écrira dans DDR la valeur &FE par l'instruction : OUT &F8F8.&FE

La deuxième opération est de sélectionner le registre OR qui permet d'écrire ou de lire des données sur le PIA (comme indiqué pour le registre de contrôle). Ce registre est un registre huit bits dont les significations suivantes sont données.

Si nous voulons émuler un minitel connecté sur la ligne téléphonique nous programmerons : OUT &F8F8,&B8
Il faut remarquer que lorsqu'il y a ordre de connexion sur la ligne, le modem attend 45 secondes, puis il se déconnecte automatiquement en cas de perte de porteuse du modem distant. Pour une nouvelle connexion, il faut mettre OR2 à 1 puis de nouveau à 0.
L'ACIA 6850 {Asynchronous communication interface adaptor)
Ce composant se trouve placé aux adresses hexadécimales &F8FC et &F8FD (registres C et D). Le registre C est le registre de contrôle et d'état des données et le registre D, celui de transmission.
Le registre de contrôle et d'état
Ce registre est un registre double qui peut être lu ou écrit.
En écriture, i! permet de programmer les caractéristiques de transfert des
données vers le composant Modem – il est nommé registre de contrôle.
En lecture, il permet de connaître l'état de l'ACIA (porteuse présente, donnée reçue...) – il est nommé registre d'état.

a) Le registre de contrôle (en écriture)

Lors de la programmation de l'ACIA, une phase d'initialisation doit toujours être prévue avant toute modification par l'instruction : OUT &F8FC.&03

b) Le registre d'état (en lecture)

Le registre de transmission

Ce registre permet, lorsque toutes les phases de programmation précédentes sont correctes, de communiquer sur la ligne. Une donnée sera émise lorsque l'on y effectuera une écriture, ou pourra être lue par lecture de ce même registre.

OUT &F8FD,&41        –> Emet le code ASCII du caractère A

X = INP(&F8FD)        Place dans la variable X la valeur hexadécimale reçue.

ORGANIGRAMMES ET PROGRAMMES D'UTILISATIONS

initialisation

Avant toute programmation du modem DTL2000 +, une initialisation est nécessaire et sera la même quelle que soit l'utilisation sur la ligne :

10 OUT &F8F9,&00:REM  SELECTION DDR(PIA)
20 OUT &F8F8,&FE:REM  OR1 A OR7 EN SORTIE
30 OUT &F8F9,&04:REM  SELECTION OR
40 OUT &F8F8,&00:REM  INITIALISATION MODEM
50 OUT &F8FC,&03:REM  INITIALISATION ACIA
60 OUT &F8FC,&40:REM  PAS D'EMISSION

Par expérience, il est parfois nécessaire d'ajouter entre chacune des instructions une boucle d'attente du genre

FOR I = 1 TO 1:NEXT I

qui laissera au modem DTL2000+ le temps de « digérer » les valeurs envoyées.

Emulation d'un minitel

Suite à l'initialisation précédente, le DTL2000+ peut être programmé pour émuler un minitel, par exemple. En se référant à la figure page 8, le minitel fonctionnant en mode V23 appel Full Duplex, nous aurons donc pour le registre A, les valeurs OR4 OR3 OR1  = 110.
Si nous supposons que le minitel ne doit pas être connecté de suite, nous aurons 0R2 = 1, l'octet à écrire dans A sera : 10111100 = &BC.

En se référant au registre de contrôle de la page 9, il reste l'ACIA à configurer. Nous aurons CR1 CRO = 01 (mode V23) ; CR4 CR3 CR2 = 010

(le minitel communique au format 7 bits, parité paire et 1 bit de stop), et CR6 CR5 - 10 (pas d'émission) ; ce qui donne 01001001 - &49 à écrire dans le registre de contrôle de l'ACIA.
Vous pourrez composer le numéro du service télématique sur le téléphone et, lorsque la porteuse se fera entendre, il suffira de mettre le bit 0R2 à 0 (ce qui donnera 10111000 = &B8 dans A) et le bit CR6 du registre de contrôle de l'ACIA à 0 (00001001  = &09 dans C) :

70 OUT &F8F8,&BC:REM CONFIGURATION MODEM
80 OUT &F8FC,&49:REM CONFIGURATION ACIA
90 REM *** ATTENTE DE PORTEUSE ***
100 OUT &F8F8,&B8:REM CONNEXION A LA LIGNE
110 OUT &F8FC,&09:REM ORDRE D'ENVOYER LA PORTEUSE

Comme précédemment, il sera utile d'insérer des boucles de temporisation, entre chaque instruction.

DISCUSSION PAR AMSTRAD INTERPOSE

Le programme que nous vous proposons de réaliser permettra, grâce à la même configuration matérielle (un Amstrad, un modem DTL2000 + et une ligne téléphonique pour chacun des partenaires), de discuter l'un et l'autre grâce au clavier et deux fenêtres sur l'écran de la visu.

L'algorigramme gérant la procédure de communication vous est donné page suivante.
Cet organigramme est valable pour l'un des interlocuteurs (que nous appellerons A) et demandera quelques modifications pour le deuxième (B). Nous allons l'analyser pour vous permettre de le modifier afin de le rendre opérationnel de chaque côté de la ligne.
Une première initialisation concernera l'écran de l'Amstrad pour une présentation sur deux fenêtres de chacun des partenaires, vient ensuite la communication effective.
Tout d'abord, la phase d'initialisation du modem sera la même.

Ensuite nous trouvons une phase d'initialisation du mode de communication : nous avons choisi de programmer le modem de l'interlocuteur A en Mode V23 réponse Full Duplex, B devra donc programmer le sien en mode V23 appel Full Duplex. Vient ensuite un test de sonnerie : ce test pourra s'appliquer sur le port joystick si l'on y a connecté le détecteur de sonnerie, ou pourra être manuel par la détection d'appui sur une touche quelconque du clavier. La réponse à ce test sera oui pour l'interlocuteur A dès que la sonnerie se fera entendre (ou dès que l'accord entre A et B aura été établi oralement), B ne répondra oui à ce test (appuie sur une touche) que lorsqu'il entendra un sifflement aigu dans le combiné, indiquant que la porteuse de A est présente sur la ligne. Suite à la détection de sonnerie, A se connecte à la ligne puis envoie sa porteuse. Il attend quelques secondes que B réagisse et fasse de même.
Le test suivant est là pour permettre à l'algorigramme d'avoir une fin et aura pour réponse NON si la communication est rompue (par programmation, manuellement ou par arrêt de l'un des ordinateurs).

Le reste de l'algorigramme est ensuite commun pour les deux partenaires. Il faut d'abord effectuer une lecture du registre d'état de l'ACIA en &F8FC. Un test sur le bit 0 permettra de savoir si un caractère a été reçu. Si c'est le cas, il faut lire le registre de réception de l'ACIA (&F8FD), le caractère reçu sera ensuite affiché dans la zone écran prévue à cet effet.

Si aucun caractère n'a été reçu, on testera si une touche a été enfoncée. Si NON, le cycle recommence. Si OUI, on relira le registre d'état de l'ACIA afin de tester le bit 1. Tant que ce bit n'est pas à 1, un caractère est encore en instance d'être envoyé, il faut donc relire et tester à nouveau ce bit, jusqu'à ce qu'il soit à 1 Ile registre d'émission sera alors vide). On pourra alors écrire le code ASCII du caractère dans &F8FD et l'afficher a l'écran dans la zone d'émission. On bouclera ensuite pour la suite de la communication.

Ce programme peut être écrit en langage Basic sans problème particulier. Les deux fenêtres seront créées par l'instruction WINDOW#... Les instructions de lectures sont :

X = INP (&F8FC)

pour lire dans la variable X le contenu du registre d'état de l'ACIA, est :

Y = INP (&F8FD)

pour lire dans Y le code ASCII d'un caractère reçu. En écriture, l'instruction d'envoi d'un caractère est :

OUT &F8FD,Z

avec Z étant le code ASCII du caractère à émettre. Le test SRO = 1 se traduit par :

IF(XAND1)   =   1   THEN GOTO {réponse OUI) ELSE GOTO (réponse NON)

Le test SR1  = 1 sera effectué par :

IF (X AND 2)   =   2 THEN GOTO (réponse OUI) ELSE GOTO (réponse NON)

Vous êtes ainsi en possession de toutes les informations nécessaires pour écrire ce programme. Nous vous conseillons tout de même d'effectuer les essais étape par étape et de réfléchir posément en cas de problème. La première étape concernera par exemple un essai de connexion, la deuxième consistera à recevoir un caractère et l'afficher, etc. Cette façon de procéder vous permettra de mieux comprendre le fonctionnement de votre modem et de détecter plus facilement les erreurs éventuelles.

Un dernier conseil : lorsque vous travaillerez avec un des registres (&F8F8, &F8F9, &F8FC), tâchez de transcrire sur papier les valeurs à y écrire en binaire et reportez-vous aux explications du paragraphe 3 pour anticiper le fonctionnement.

ECHANGE DE PROGRAMMES

L'échange de programmes a été étudié lors de l'utilisation de la RS232 Amstrad conjointement au modem du minitel (voir partie 8/5.2.3). Cet échange ne pouvait s'effectuer que sur 7 bits car le minitel ne communique que sous ce format. Le modem DTL2000 + peut lui communiquer en 8 bits, ce qui nous permettra d'envoyer n'importe quel programme ou fichier en mémoire centrale possédant des codes de contrôle et un jeu de caractères étendus sur 8 bits (un fichier CPM, un programme Basic en RAM).

Nous vous proposons l'algorigramme de la page 17 que votre perspicacité traduira en programme.

Ici encore, l'un des interlocuteurs sera en mode Appel et l'autre en mode Réponse.

Afin d'améliorer les performances, vous pourrez écrire ce programme en assembleur, mais le Basic Amstrad traitera correctement la communication.
Vous pourrez modifier cet algorigramme pour envoyer un fichier contenu sur disquette comme donné par exemple dans ces algorithmes d'émission et de réception :

 

Page précédente : 8/5.3 - Les modems

CPCrulez[Content Management System] v8.75-desktop/c
Page créée en 123 millisecondes et consultée 6412 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.