La communication
c'est l'échange de données. Et en informatique, il y a
plusieurs moyen de réaliser cet échange de données.
Dans notre cas, nous parlerons plus particulièrement de la communication
par liaison série, car elle facilement accessible sur le PC,
et puis aussi parce que l'Atari l'utilise pour communiquer avec ses
périphériques.
Nous expliquons
ici les éléments essentiels à la compréhension
de la communication par liaison série pour l'application suivante:
relier notre PC à un lecteur de disquette
Atari et communiquer afin d'échanger des données.
1.1
- Qu'est ce qu'une liaison série?
Une liaison
série reliant 2 appareils communicant est constituée
d'un bus externe (cable) qui relie 2 processeurs spécialisés
appelés UART, nécessairement inclus dans chaque appareil.
Le cable est installé entre les connecteurs des appareils.
Le bus
de la liaison série standard type RS232 est constituée
d'un minimum de 2 fils (ou 2 lignes), TX pour Transmission et RX pour
Réception. Par ce support physique, les UART échangent
des octets dans un flux de données. Les octets sont convertis
en une sucession de bits (et inversement)(un octet est constitué
de 8 bits). Les bits correspondent aux 0 et 1 logiques (soit 2 niveaux
de tension). Ces bits constituent les octets de données à
échanger.
Une liaison
série peut aussi mettre en jeu d'autre lignes facilitant le
contrôle du flux de données à échanger.
La vitesse de transmission, le format des octets et des bits de contrôle
échangés sont paramètrables dans les UART. Par
exemple, pour communiquer avec un lecteur de disquette Atari, la vitesse
est de 19200 bauds (19200 bits par seconde), il n'y a pas de bit de
parité et il y a un bit stop pour le contrôle.
Voilà,
théoriquement, c'est facile: après
le réglage de ces paramètres, des octets peuvent être
échangés sur une liaison série.
Mais
voilà ce n'est pas aussi simple dans notre cas (communication
liaison série entre un PC et un lecteur de disquette Atari),
car Atari a développé une ''communication série''
un peu différente et particulière afin de donner robustesse,
qualité et rapidité.
1.2
- La liaison série Atari: différence des signaux RS232
entre le PC et l'Atari
Dans
un ordinateur Atari, le processeur de communication UART est inclus
dans le processeur POKEY.
Les
bits sont réalisés par POKEY avec 2 niveaux de tension
différents. Ces niveaux de tension sont au format TTL côté
Atari (soit 0VDC pour le 0 logique et +5VDC pour le 1 logique). Mais
côté PC, ils sont conformes au format RS232C standard
(soit entre -10 et +10VDC pour les niveaux logiques).
Il
faut donc mettre en place un circuit d'interfaçage capable
de convertir ces niveaux de tension afin de les rendre compatibles
et identiques.
L'ordinateur
Atari est relié par une même chaine à tous les
périphériques connectés sur la liaison série.
Cette liaison est constituée par les cables série de
l'Atari (avec connecteur 13 broches).
Chaque
phériphérique Atari à sa propre étiquette,
son propre numéro d'identification sur la chaine liaison serie,
que nous appelerons numéro d'esclave (terme d'usage dans la
communication par liaison série).
Ce numéro
est en partie accessible, pour les lecteurs de disquette par exemple,
il peut-être ajusté de $31 à $34, en réglant
un switch à l'arrière du lecteur de disquette. Il peut
y avoir donc 4 lecteurs de disquette différents pour un ordinateur
Atari.
1.3
- Le connecteur de liaison série Atari: connecteur non standard
Intéressons-nous
au cable et au connecteur Atari série. Constitué de
13 broches (et cable de 13 fils + masse) en voici la description:
Broche |
NOM |
Description |
1 |
BIDIRECTIONAL
CLOCK |
ENTREE
HORLOGE BIDIRECTIONNELLE |
2 |
SERIAL
CLOCK OUT |
SORTIE
HORLOGE |
3 |
DATA
IN |
ENTREE
DONNEES |
4 |
GND |
MASSE |
5 |
DATA
OUT |
SORTIE
DONNEES |
6 |
GND |
MASSE |
7 |
COMMAND |
COMMANDE |
8 |
MOTOR
ON |
MARCHE
MOTEUR |
9 |
PROCEED |
EXECUTION |
10 |
+5VDC/READY |
PRET
+5VDC |
11 |
AUDIO
IN |
ENTREE
AUDIO |
12
(*) |
+12
VDC |
+12
VDC |
13 |
INTERRUPT |
INTERRUPTION |
(*)
Non connecté et non utilisé sur Atari XL/XE
CLOCK
IN, CLOCK OUT, PROCEED, INTERRRUPT:
ne
sont normalement pas utilisés pour stockage de données
disque ou cassette en standard.
[De nouvelles informations sur ces signaux seront disponibles bientot]
MOTOR
ON, AUDIO IN:
sont
normalement dédiés au lecteur de cassette Atari.
DATA
IN et DATA OUT :
correspondent
aux 2 lignes ''standard'' RX et TX, i.e. ligne de
réception de données et ligne d'envoi de données.
+5VDC/READY:
avec
ce signal, l'ordinateur Atari montre sa présence dans l'état
actif (état de marche) à tous ses périphériques
esclaves connectés et à l'écoute, en mettant
la ligne +5VDC/READY à +5VDC.
Pour
communiquer avec un lecteur de disquette Atari, un +5VDC sur la
ligne +5VDC/READY doit donc être généré.
Cette tension est normalement fournie par l'ordinateur Atari. Si
nous voulons connecter le lecteur de disquette Atari à notre
PC, le PC remplaçant l'ordinateur Atari, il devra fournir
cette tension.
Or
cette tension n'est pas disponible sur le connecteur série
RS232C du PC, une
alimentation externe doit
donc être mise en place .
COMMAND:
Lorsque
l'ordinateur Atari veut communiquer avec un de ses périphériques,
il emet un signal de niveau TTL vers ses esclave, signifiant qu'il
va envoyer une commande. Pour cela il utilise la ligne COMMAND.
Puis il envoie une trame (succession d'octet) de commande sur la
liaison série à tous les esclaves présents
connectés en utilisant la ligne DATA OUT (TX).
Tous
les périphériques esclave lisent alors le message,
mais un seul répondra, celui dont le numéro d'esclave
correspond à celui présent dans la trame des octets
de commande.
Pour
communiquer avec un lecteur de disque, il faut donc généré
le signal COMMAND sur la ligne COMMAND.
Si
nous voulons connecter le lecteur de disquette Atari au PC, le PC
remplaçant l'ordinateur Atari, il faut utiliser un des signaux
de la liaison série PC pour générer le signal
COMMAND.
Nous
utiliserons, par exemple, le signal PC série RTS, qui sera
lui aussi converti par le circuit d'interface en un signal TTL compatible
pour le lecteur de disquette Atari.
1.4
- Le Protocole : Trame d'octets de commande et de données:
Tout
comme les octets de la trame de commande ne sont pas pris au hasard,
il est important de comprendre quels sont les octets à envoyer
ou à recevoir. Il faut donc comprendre comment fonctionne le
processus d'échange de données, c'est à dire
connaitre le protocole d'échange de données.
Ce protocole
correspond à une ''couche logicielle'' (software) contrairement
à la couche physique (hardware) que constitue le cablage et
les signaux electriques. Ce protocole est caractéristique de
chaque appareil communicant. C'est la langue commune, il doit être
le même pour les 2 appareils reliés.
Pour
l'Atari, ce protocole est facile à comprendre, il est constitué
d'un échange d'octets de commande, d'octets de données
et d'octets de contrôle. C'est une discussion entre le demandeur
maitre (l'ordinateur Atari) et l'esclave (le périphérique),
schématiquement, cela donne a peu près cela:
Pour
une lecture de données:
Appareil
|
Type
d'octet
|
''Traduction''
|
ORDINATEUR
ATARI |
Commande |
Lecteur
de disquette numéro un, je veux lire le secteur 10! |
LECTEUR
n°1 |
Contrôle |
OK
commande BIEN RECUE! |
- |
-
|
(Le
disque se met à tourner, le lecteur lit alors le secteur
10) |
LECTEUR
n°1 |
Contrôle |
OK
EFFECTUE, le secteur est prêt à être envoyé
à ordinateur! |
LECTEUR
n°1 |
Données |
Envoie
des données sur le bus série |
LECTEUR
n°1 |
Contrôle |
Envoie
du dernier octet de somme de contrôle |
Pour
une écriture de données:
Appareil
|
Type
d'octet
|
''Traduction''
|
ORDI. ATARI |
Commande |
Lecteur
de disquette numéro un, je veux écrire des données
au secteur 10! |
LECTEUR n°1 |
Contrôle |
OK
commande BIEN RECUE, je suis prêt àrecevoir les données! |
ORDI. ATARI |
Données |
Envoie
des données sur le bus série |
ORDI. ATARI |
Contrôle |
Envoie
du dernier octet de somme de contrôle |
LECTEUR n°1 |
Contrôle |
OK
données BIEN RECUES! |
- |
- |
(Le
disque se met à tourner, le lecteur écrit alors
le secteur 10) |
LECTEUR n°1 |
Contrôle |
OK
EFFECTUE: données bien écrites, terminé! |
Ce protocole
est inclus dans un programme, réagissant et donnant les octets
nécessaire à l'échange de données. Sur
Atari, ce programme est stocké en mémoire morte dans
les ROM OS (Operating System) de l'ordinateur et des périphériques.
Pour
notre application PC, il est relativement simple de programmer ce
protocole dans un langage soft PC, en C++ par exemple, plutôt
que de vouloir modifier celui du lecteur de disquette Atari, ce qui
est impossible sans changer la ROM OS de ce lecteur!
1.5
- Détails de la trame de commande:
Séquentiellement,
l'ordinateur Atari envoie la trame de commande pour la requette en
premier, car il est le maitre. Cette trame de commande contient 5
octets, dans l'ordre d'envoi:
- 1er
octet: le numéro d'esclave du périphérique
(imprimante, lecteur de cassette, lecteur de disquette #1...),
- 2eme
octet: l'ordre à executer (lecture, ecritute, formatage...)
- 3eme
et 4eme octets: des
paramètres auxilaires (comme le numéro de secteur).
- 5eme
octet: la somme de contrôle ou checksum. Cette valeur est
la somme modulo 256 des 4 premiers octets.
1.6 - Les octets de contrôle:
Normalement,
l'esclave périphérique doit répondre à
une trame de commande avec un octet ACK (acknowledge = bien reçu!).
De manière générale, ces octets de contrôle
sont envoyés par les périphériques à l'Atari
en fonction du déroulement de la communication. Ces octets
de contrôle sont nommés ACK, CPL, ERR et NAK.
Contrôle
|
eq.
Char/Hexa
|
Nom
|
Description
|
ACK |
'A'
/ $41 |
ACKNOLEDGE |
OK
BIEN RECU! |
NAK |
'N'
/ $4E |
NON
ACKNOLEDGE |
NON
RECU! |
CPL |
'C'
/ $43 |
COMPLETE |
OK
EFFECTUE! |
ERR |
'E'
/ $45 |
ERROR |
ERREUR! |
1.7
- La checksum:
Les trames
de commande et de données contiennent un octet supplémentaire
pour la checksum, ou somme de contrôle. Cette valeur (un octet)
est la somme ''modulo 256'' de tous les octets de données de
la trame qui viennent d'être envoyés.
1.8
- Les erreurs de communication renvoyées par le lecteur:
- NAK:
erreur 139 ($8B) sur l'ordinateur Atari. Apparait généralement
lorsque l'Atari demande au lecteur de disquette de lire un secteur
inexistant ou lorsque le lecteur ne contient pas de disquette.
- ERR:
erreur 144 ($90) sur l'ordinateur Atari. Apparait généralement
lorsque le lecteur de disquette n'arrive pas à lire un secteur
défectueux (Bad Sector), ou que la disquette est protégée
en écriture.
1.9
- Les autres erreurs renvoyées par l'Operating System de l'ordinateur
Atari:
- Erreur
143 ($8F) Erreur de checksum (Checksum Error). En effet, l'Atari
calcul la checksum des octets de la trame de données reçues.
Il compare cette checksum avec celle envoyée par le périphérique
en fin de trame de données. Si elles sont différentes,
c'est qu'il y a eu erreur dans le processus de communication.
- Erreur
140 ($8C) Erreur sur trame octet en entrée sur port série
(Serial Data Input Frame Error).
- Erreur
142 ($8E) Erreur de débordement en lecture sur port série
(Serial Data Input Over-run).
- Erreur
138 ($8A)
Erreur temps de réponse écoulé sur port série
(Serial Data Input Time-Out).
(Liste
non exhaustive)
Pour
la réalisation du cable et circuit d'interface, cliquer ici.