ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ ³ TI92 LINK PROTOCOL ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ Edition 1.0 03/21/1997 par Vincent CARON (Vincent.Caron@ecl1999.ec-lyon.fr) "Comment communiquer avec la TI92 … partir d'une application PC" HARDWARE ÄÄÄÄÄÄÄÄ 1 - Cƒble 'maison' 2 - Protocole ‚lectronique SOFTWARE ÄÄÄÄÄÄÄÄ 1 - Les paquets TI 2 - Description des paquets 3 - Description du contenu d'une variable 4 - Recevoir/envoyer une variable 5 - catalogue de la TI92 6 - Copie d'‚cran 7 - Sauvegardes (backups) 8 - Contr“le … distance ATTENTION : ÄÄÄÄÄÄÄÄÄ - Ce fichier de documentation technique est fourni avec le logiciel de communication PLINK!. N'h‚sitez pas … contacter l'auteur pour avoir plus d'informations. - Tous les nombres sont en HEXADECIMAL (offsets et octets de donn‚e), sauf pr‚cision. Exemple : 1..27d se lit "1 … 27 d‚cimal". - LSB = Least Significant Byte (octet de poids faible) MSB = Most Significant Byte (octet de poids fort) Byte = octet Word = mot Double Word = ... Header = entˆte Body = corps (de variable, de programme) Checksum = somme de contr“le : elle doit ˆtre ‚gale … la somme sur 16 (checksum est un mot) ou 32 (checksum est un double mot) bits des octets de donn‚e (data bytes) pr‚c‚dents. - Toutes les chaŒnes de caractŠre sont au format C. Ce sont des tableaux [1..taillemax] de caractŠres, avec un z‚ro terminal si la taille effective de la chaŒne est inf‚rieure … taillemax. Dans ce cas, tout caractŠre situ‚ aprŠs un #0 n'a pas de signification et n'est pas n‚cessairement ‚gal … #0. Il semble que la TI92 'remplisse' la fin des chaŒnes par des #0 dans tous les cas. - Convention de description des donn‚es : offset longueur (octets) description/type +0 1 ... +xx yy ... Vous rencontrerez ‚galement : xl xh : x est un mot, LSB en premier (l=poids faible/h=poids fort) Ll Lh Hl Hh : lire un double mot, LSB en premier. Ce sont les notations de Pascal BOURON (merci Pascal !). - Aucun type de donn‚e n'est sign‚ sauf si pr‚cis‚. (octet,mot,double mot) - Du fait que le processeur Motorola MC68000 utilise le format 'big endian', il faut lire les entiers de droite … gauche, LSB en premier. Exemple : +10 4 12 51 78 A3 (double mot) On lira le double mot A3785112 … l'offset 10 (hexa). N'oubliez pas que les processeurs Intel (ix86) utilisent le format 'little endian' : il faut lire les entiers de gauche … droite, MSB en premier. Ainsi 12 51 78 A3 est le double mot 125178A3. "LSB (TI92) ou MSB (PC) en premier" sera sp‚cifi‚ pour les types entier mot et double mot. En pratique, seul le format 'big endian' (MC68000, LSB en premier) est utlis‚ dans le protocole TI92. Le format 'little endian' n'apparaŒt que dans les fichiers d'archivage. - Ces informations sont le fruit de longues recherches (depuis 02/95!), et ont ‚t‚ compl‚t‚es par et compar‚es … TI-PROT.TXT par Pascal BOURON (bouron@ENS-Cachan.fr). Les routines de communication bas niveau sont de Ben EATER (themouse@wam.umd.edu) and George NACHMAN (ltduck@wam.umd.edu). Vous pouvez trouver d'autres informations auprŠs de David ELLSWORTH (davidells@aol.com), l'auteur de FARGO (assembleur pour TI92), Dan EBLE et Rob TAYLOR (voir http://www.ticalc.org). - Consid‚rations g‚n‚rales sur le comportement de la TI92 (ROM 1.3) : * Sauf dans certains cas (copie d'‚cran...), toutes les communications fonctionneront lorsque la TI92 affiche l'‚cran 'HOME'. Le transfert de variable ne marchera pas si une boŒte de dialogue est ouverte (la TI92 r‚pondra invariablement 'occup‚'). * Si la TI92 est ‚teinte, elle se rallumera dŠs qu'elle recevra un octet sur son port de communication. La TI92 n‚cessite environ 800 ms pour se 'r‚veiller' (d‚lai pour atteindre l'‚tat 'prˆt'). L'extinction automatique de la TI92 aura lieu 1 ou 2 minutes aprŠs que la TI92 ait ‚t‚ r‚veill‚e par son port de communication. L'extinction automatique classique (d‚lai aprŠs le dernier appui de touche) utilise un temps de latence de 6 minutes. * Avec les cƒbles 'maison', la TI92 a l'air de se figer de temps en temps. Ceci est d– … l'‚tat de repos du port LPT1 (0) qui ne correspond pas … l'‚tat de repos de la TI92 (1). Windows95 remet LPT1 … 0 lorsque une session DOS est ferm‚e (Windows 3.1 ne le fait pas). Donc attention, et pensez … d‚brancher le cƒble de votre TI92 lorsque vous avez fini de l'utiliser (sinon les piles ne le sup- porteront pas !) Notez que la TI92 n‚cessite environ 800 ms pour atteindre l'‚tat 'prˆt' … partir de l'‚tat fig‚ (LPT1 … 0). ÚÄÄÄÄÄÄÄÄÄÄ¿ ³ HARDWARE ³ ÀÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄ¿ ³ 1 ³ CABLE 'MAISON' ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Ce cƒble fonctionne sur le port parrallŠle d'un ordinateur compatible PC. Il devrait en fait fonctionner plus g‚n‚ralement sur tout ordinateur muni d'un port parrallŠle. Composants requis : - une fiche mƒle DB25 - un jack st‚r‚o 2.5 mm - du cƒble … 2 brins avec blindage (<1.5 m) - 2 diodes silicone (devant supporter quelques mA, un seuil de 0.6V, comme les 1N4148) \ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ/ \ . . . . . . . . . . . . . / \ . . . . . . . . . . . . / DB25 mƒle \ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ/ 13 3 12 2 22 Num‚ro de broche ³ ³ ³ ³ ³ ³ ÚÄÄÄÄÄÄÄÂÄ¿ ³ ³ ÚÄÄÄÄÄÄÄÂÄ¿ ³ ³ ÃÄ´ D ³ ÃÄÙ ÃÄ´ D ³ ÃÄÙ ³ Diodes ³ ÀÄÄÄÄÄÄÄÁÄÙ ³ ÀÄÄÄÄÄÄÄÁÄÙ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ Tˆte Anneau Blindage Tˆte Anneau Blindage ³ ³ ³ ³ ³ ³ ÚÄÄÄÄÄÄÄ ÜÜÜÄÄÄÜÜÜÄÄÜÜÜÜÜÜÜÄÙ ÛÛÛÛ ÛÛÛ ÛÛÛÛÛÛÛ ÛÛÛÛÛ ÛÛÛ ÛÛÛÛÛÛÛ jack st‚r‚o 2.5 mm ÛÛÛÛ ÛÛÛ ÛÛÛÛÛÛÛ ßßßÄÄÄßßßÄÄßßßßßßßÄ¿ ÀÄÄÄÄÄÄÄ Brochage sur le port parallŠle : 2 D0 data bit 0 3 D1 data bit 1 12 PO Paper Out 13 OL On Line 22 GND Ground Attention lorsque vous achetez le jack 2.5 mm. Ils ont en effet souvent des formes diff‚rentes, ce qui pourrait causer des problŠmes. Si le connecteur est trop fin, vous aurez des faux contacts. Si il a une trop 'grosse tˆte', vous risquez d'endommager le port I/O de votre TI92. ÚÄÄÄ¿ ³ 2 ³ PROTOCOLE ELETRONIQUE ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ La TI92 n'utilise pas le protocole s‚riel standard RS232. D‚crire le protocole ‚lectronique complet sort du cadre de cette documentation. Si vous utilisez un cƒble parallŠle 'fait maison', le pseudo-code suivant fera l'affaire : (merci … George NACHMAN et Ben EATER) - InPort et OutPort se rapportent … 2 registres distincts du PIO. Pour un PC, OutPort=adresse de base LPTx (data register), Inport=OutPort+001 (status register). Les broches D0 et D1 sont utilis‚es pour la sortie PC, les broches OL (On Line) et PO (Paper Out) pour l'entr‚e PC. OutPort=$01 (bit 0, data register) -> D0 mis … +5V OutPort=$02 (bit 1, data register) -> D1 mis … +5V InPort =$10 (bit 4, status register)-> OL mis … +5V Inport =$20 (bit 5, status register)-> PO mis … +5V - L'instruction Wait() attends qu'une expression bool‚enne soit vraie, ou qu'un certain d‚lai soit ‚coul‚. En cas de problŠme (le bool‚en reste bloqu‚ sur FAUX), la fonction peut ˆtre quitt‚e et l'erreur d‚tect‚e par le programme. Dans tous les cas, le programme ne devrait pas pouvoir rester coinc‚ dans une instruction Wait(), attendant une valeur sur le port qui ne viendra jamais. Procedure Send (x : byte) ³ Byte n ³ For n<-0 To 7 ;envoi des bits de x (poids faible vers fort) ³ OutPort<-$03 ;on s'assure que la sortie est au repos (11b) ³ If (x And 2^n)=0 ³ OutPort<-$01 ; bit n de x vaut 0 ³ Wait (InPort And $20=0) ³ OutPort<-$03 ³ Wait (InPort And $20=$20) ³ Else ³ OutPort<-$02 ; bit n de x vaut 1 ³ Wait (InPort And $10=0) ³ OutPort<-$03 ³ Wait (InPort And $10=$10) ³ EndIf ³ EndFor End Send() Function Get : Byte ³ Byte i,n,x ³ x<-0 ³ For n<-0 To 7 ;re‡oit les bits de x ³ Wait ((i<-InPort And $30)<>$30) ;code … la C ! ³ If i=$10 ³ x<-x+2^n ;bit n de x vaut 1 ³ OutPort<-$01 ³ Wait ((InPort And $20)=$20) ³ Else ³ OutPort<-$02 ;bit n de x vaut 0 ³ Wait ((InPort And $10)=$10) ³ EndIf ³ OutPort<-$03 ;met la sortie au repos (11b) ³ EndFor ³ Return (x) End Send Ces routines devraient fonctionner sur d'autres plateformes que celle du PC... Je serais content de l'entendre. J'essaierai peut ˆtre de les adapter pour une station HP Apollo/9000 (HPUX), mais je ne suis pas s–r que beaucoup de gens seraient interress‚s. J'ai atteint un taux de transfert de 6 ko/s avec une version assembleur (80286/16 bits) de ces routines, mais elles n'‚taient fiables que sur certains ordinateurs. La fa‡on la plus s–re de les coder est de les coder lentes. ÚÄÄÄÄÄÄÄÄÄÄ¿ ³ SOFTWARE ³ ÀÄÄÄÄÄÄÄÄÄÄÙ ÚÄÄÄ¿ ³ 1 ³ LES PAQUETS TI ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ La TI92, comme les autres calculatrices, communique de maniŠre structur‚e, c'est … dire qu'elle n'envoie pas directement les donn‚es d'une variable vers le port I/ sans autre forme de procŠs. Le protocole de communication consiste en un dialogue permanent entre la TI92 et l'ordinateur. Ce dialogue est constitu‚ de mots appel‚s 'paquets'. Physiquement, un paquet ne peut contenir moins de 4 octets, et a un format standard : ENTETE +0 1 Exp‚diteur (identification) +1 1 Type +2 2 info (contient souvent taille du paquet = n) CORPS (certains types de paquet seulement) +4 n n octets de donn‚es CHECKSUM (certains types de paquet seulement) +4+n 2 checksum Les paquets de taille=0 sont constitu‚s de 4 octets. Lorsque taille=info, on peut lire la taille des donn‚es … l'offset +2 (2 octets) du paquet. Pour calculer le checksum du paquet, il vous faut sommer octet par octet les n octet de donn‚es du BODY dans un compteur 16bits non sign‚. Il suffit alors de comparer le CHECKSUM a la fin du paquet avec celui calcul‚ : s'ils sont diff‚rents, le paquet est corrompu. Exp‚diteur : 09 = Ordinateur 89 = TI92 Type : 06 = Entˆte de variable taille=info (LSB d'abord) (7 … 23 octets) 09 = Attente taille=0 info=0 ou -1 15 = Donn‚es de variable taille=info (LSB d'abord) 56 = Etat d'occupation taille=0 info=0 (exp‚diteur prˆt) info=1 (exp‚diteur occup‚) 68 = Demande d'‚tat taille=0 info=0 6D = Copie d'‚cran taille=0 info=0 78 = Continue taille=0 info=0 87 = Contr“le … distance taille=0 info=code de la touche (LSB d'abord) (voir le manuel TI92) 92 = Fin de transmission taille=0 info=0 A2 = Requˆte (variable ou catalogue) taille=info (LSB d'abord) ÚÄÄÄ¿ ³ 2 ³ DESCRIPTION DES PAQUETS ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ L'exp‚diteur sera not‚ xx, ce qui vaudra 09 pour un transfert PC->TI92, et 89 pour un transfert TI92->PC. Certains paquets sont unidirectionnels (6D/ copie d'‚cran, 87/contr“le … distance, A2/requˆte). 06 (Entˆte de variable) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENTETE xx 06 lo hi CORPS Ll Lh Hl Hh ty le c1 c2 ... CHECKSUM sl sh lo hi = taille de CORPS (7..23d octets) (word) Ll Lh Hl Hh = taille de la variable (long word) ty = Type de la variable (voir table plus loin) le = Longueur du descripteur de la variable (1..17d chars) c1 c2 ... = descripteur de la variable (chaŒne de caractŠre) sl sh = checksum de CORPS (word) Les types de variable TI92 valides sont : 00 EXPR 0E FIG 04 LIST 10 PIC 06 MAT 12 PGRM 0A DATA 13 FUNC 0B TEXT 14 MAC 0C STR 19 DIR 0D GDB 1F FOLD Le type 'DIR' est seulement utilis‚ dans le cas d'une requˆte de catalogue. Ne confondez pas avec 'FOLD' qui est un r‚pertoire TI92. (voir section 5). La TI92 utilise ‚galement une pseudo-variable pour les backups (type 1D). Le descripteur d'une variable contient de 1 … 17 caractŠres. Il peut contenir le nom d'un r‚pertoire (facultatif, 8 caractŠres max + anti-slash '\'), et doit contenir le nom de la variable (8 caractŠres max). Exemples : 'x' 'var1' 'main\example' 'dir_maxx\var_maxx' Quand la TI92 re‡oit une variable dont le descripteur ne contient que le nom de la variable "varxxxxx", elle la stockera dans son r‚pertoire courant, et ‚crasera sans pr‚venir toute variable du mˆme nom dans ce r‚pertoire. Si la TI92 re‡oit une variable dont le descripteur est complet, "repxxxxx\varxxxxx", elle essaye de la stocker dans le r‚pertoire "repxxxxx". Si ce r‚pertoire n'existe pas, il est imm‚diatement cr‚‚. Dans l'autre cas, si la variable existait d‚j… dans le r‚pertoire, elle sera ‚cras‚e sans pr‚avis. (Ces deux paragraphes se rapportent au protocole de transfert direct, qui fonctionne lorsque la TI92 affiche l'‚cran HOME. Vous aurez des confirmations d'effacement si vous utilisez le Var-Link.) Les variables de type 1F sont particuliŠres : elles contiennent la description d'un r‚pertoire TI92. Dans ce cas, le nom de la variable contient de 1 … 8 caractŠres, et le champ 'taille de la variable' indique le nombre de variables stock‚es dans ce r‚pertoire. 09 (Attente) ÄÄÄÄÄÄÄÄÄÄÄÄ ENTETE xx 09 00 00 CORPS aucun CHECKSUM aucun L'exp‚diteur signifie au destinataire qu'il attend des donn‚es. 15 (donn‚es de variable) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENTETE xx 15 lo hi CORPS ?? ?? ?? ... CHECKSUM sl sh lo hi = taille de CORPS (word) sl sh = checksum de CORPS (word) La structure du corps d'un paquet 'donn‚es de variable' d‚pend du type de variable. Vous pourrez lire le format de quelques variables dans la section 3. 56 (Etat d'occupation) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENTETE xx 56 00 st CORPS aucun CHECKSUM aucun st = octet d'‚tat Si st=0, l'exp‚diteur (xx) est prˆt pour le transfert. Si st<>0, l'exp‚diteur n'est pas prˆt ) recevoir des donn‚es (st=1 en g‚n‚ral). 68 (Demande d'‚tat) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ HEADER xx 68 00 00 BODY aucun CHECKSUM aucun Ce paquet est une 'commande' qui attent un paquet 'Etat d'occupation' (56) en retour. Il permet de tester si le destinataire est prˆt pour le transfert. 6D (Copie d'‚cran) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENTETE 09 6D 00 00 CORPS ?? ?? ?? ... CHECKSUM sl sh lo hi = taille de CORPS (word) sl sh = checksum de CORPS (word) On peut demander une copie d'‚cran … la TI92 … tout moment. Elle r‚pondra par un paquet de donn‚e (15), dont le corps contient un bitmap 240d*128d (3840d octets). Voir la section 6. 87 (Contr“le … distance) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENTETE 09 87 lo hi CORPS aucun CHECKSUM aucun lo hi = code de la touche (word) Le contr“le … distance simule exactement l'appui d'une touche sur le clavier de la TI92. Voir la section 8. 92 (Fin de transmission) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENTETE xx 92 00 00 CORPS aucun CHECKSUM aucun Cette commande est utilis‚e … la fin d'un dialogue de transfert, pour lib‚rer le r‚cepteur. A2 (Requˆte variable/r‚pertoire) ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ ENTETE 09 A2 lo hi CORPS 00 00 00 00 ty le c1 c2 ... CHECKSUM sl sh lo hi = taille de CORPS (6..23 bytes) (word) ty = type de la variable (voir la table du paquet 06) le = Longueur du descripteur (0..17d chars) c1 c2 ... = descripteur sl sh = checksum de CORPS (word) Ce paquet demande … la TI92 d'envoyer une variable, ou un r‚pertoire entier. Voir les sections 4 et 5 pour plus de d‚tails. ÚÄÄÄ¿ ³ 3 ³ DESCRIPTION DU CONTENU D'UNE VARIABLE ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Cette section d‚crit le CORPS d'un paquet de 'donn‚es de variable' (15), re‡u lors d'un transfert T92->PC. L'information contenue dans CORPS s'interprŠte bien s–r de maniŠre diff‚rente suivant le type de variable. Cette section ne contient actuellement que la description des variables texte 'TXT'. (inachev‚) TEXT +0 2 00 00 +2 4 taille de la variable (taille du Var-link - 2) = 2+n+2 +6 2 position du curseur (en caractŠres) +8 n caractŠres (voir les remarques) +8+n 2 00 E0 Remarques: -Une ligne commence toujours par un blanc (#32). -Une ligne s'achŠve par un RC (#13), … l'exception de la derniŠre ligne. ... (… suivre) ÚÄÄÄ¿ ³ 4 ³ RECEVOIR/ENVOYER UNE VARIABLE ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Le protocole est d‚crit par le dialogue suivant, o— ss est l'exp‚diteur, et rr le destinataire (09 ou 92). (Les ‚tapes 1 et 2 sont optionnelles) Le protocole d'envoi (PC->TI92) est g‚r‚ par la routine d'interruption du port I/O de la TI92, qui ne peut ˆtre d‚clench‚e que lorsque la TI92 affiche l'‚cran HOME. Le Var-Link utilise le mˆme dialogue, … partir de l'‚tape 3, mais n‚cessite une intervention de l'utilisateur pour mettre la TI92 en ‚tat de reception. Le protocole de r‚ception (TI92->PC) sera identique, mais cette fois la TI92 initiera le transfert en envoyant un paquet 'entˆte de variable' (06). 1- ss 68 00 00 le destinataire est prˆt ? 2- rr 56 00 xx xx=0 -> prˆt xx<>0 -> occup‚, retour ‚tape 1 3- ss 06 lo hi envoi l'entˆte de variable ?? ?? ?? ... 4- rr 56 00 xx xx=0 -> prˆt xx<>0 -> occup‚/d‚rangement 5- rr 09 00 00 attente de donn‚e 6- ss 56 00 00 exp‚diteur prˆt, les donn‚es arrivent 7- ss 15 lo hi donn‚es de variable ?? ?? ?? ... 8- rr 56 00 xx xx=0 -> OK xx<>0 -> occup‚/d‚rangement 9- ss 92 00 00 fin de transfert 10-rr 56 00 xx xx=0 -> OK xx<>0 -> occup‚/d‚rangement Non seulement la TI92 peut recevoir une variable … tout moment (tant qu'elle est dans l'‚cran HOME), mais elle peut ‚galement fournir sur simple demande une variable : de mˆme la TI92 devra ˆtre dans l'‚cran HOME, aucune fenˆtre de dialogue ouverte, sinon vous aurez un '‚tat occup‚' de la part de la TI92. Pour utiliser la commande 'requˆte', rajoutez les ‚tapes 2a et 2b aprŠs l'‚tape 2 du dialogue pr‚c‚dent : 2a- 09 A2 lo hi requˆte de variable ?? ?? ?? ... voir la section 2 2b- 89 56 00 xx TI92 OK/occup‚e Si la variable demand‚e n'existe pas, le dialogue s'arrˆte … l'‚tape 2b, o— la calculette envoie un '‚tat occup‚' (56 avec info<>0). ÚÄÄÄ¿ ³ 5 ³ CATALOGUE DE LA TI92 ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ La requˆte de catalogue est un cas particulier de la commande 'requˆte'. Il suffit de demander … la TI92 une variable particuliŠre dont le descripteur est une chaŒne vide, et dont le type est 19 (DIR). 1- 09 A2 06 00 ENTETE requˆte de catalogue TI92 00 00 00 00 19 00 CORPS 19 00 CHECKSUM 2- 89 56 00 xx xx=0 -> TI92 prˆte xx<>0 -> TI92 occup‚e, retour ‚tape 1 3- 89 06 lo hi ENTETE entˆte de variable (infos r‚pertoire) ?? ?? ?? ... CORPS sl sh CHECKSUM A l'‚tape 3, la TI92 envoie dans un paquet 'entˆte de variable' la description du r‚pertoire (nom, nombre de variables). Suit alors ce dialogue r‚current : REPEAT 1- 09 56 00 00 prˆt 2- 09 09 FF FF attente 3- 89 56 00 xx xx=0 -> TI92 prˆte xx<>0 -> TI92 occup‚e 4- 89 15 lo hi ENTETE description variable/r‚pertoire 00 00 00 00 c1 .. c8 nom variable/r‚pertoire (8 chars) ty type de la variable type (r‚pertoire=1F) st ‚tat de la variable (0=normal, 1=edit) Ll Lh Hl Hh taille de la variable (nombre de variables si le type est 1F=r‚pertoire) sl sh CHECKSUM 5- 09 56 00 00 prˆt 6- 89 xx 00 00 continue (xx=78) OU fin de transmission (xx=92) UNTIL xx<>78 xx=92 pour une terminaison normale La TI92 va envoyer de fa‡on s‚quentielle : - un r‚pertoire 'repxxxxx' (variable 1F, taille = nombre de variables) - les descripteurs de variable (paquet 'entˆte de variable') - un autre r‚pertoire, puis son contenu... Notez que la TI92 enverra les r‚pertoires et les variables dans l'ordre alphab‚tique. ÚÄÄÄ¿ ³ 6 ³ COPIES D'ECRAN ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ On peut demander une copie d'‚cran … la TI92 … tout moment, mˆme quand le symbole 'BUSY' est affich‚ en bas … droite de l'‚cran. Cette requˆte stoppera momentan‚ment la TI92, et effectuera la copie via le port I/O. Cette op‚ration prend quelques secondes (1 seconde au mieux). Voici le dialogue : 1- 09 6D 00 00 l'ordinateur demande une copie d'‚cran 2- 89 56 00 xx xx=0 -> TI92 prˆte xx<>0 -> TI92 occup‚e, aller … l'‚tape 1 ou abandonner 3- 89 15 lo hi ENTETE paquet de donn‚es ?? ?? ?? ... CORPS 240d*128d bitmap (3840d bytes) sl sh CHECKSUM 4- 09 56 00 00 prˆt lo hi = 3840d bytes (240d*128d bits) ÚÄÄÄ¿ ³ 7 ³ SAUVEGARDES (BACKUPS) ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Un backup consiste en une copie partielle de la m‚moire de la TI92. Il peut contenir entre 38 Ko et 100 Ko de donn‚es. La TI92 peut envoyer ou recevoir un backup … tout moment. Si un envoi de backup vers la TI ‚choue en cours de route, la TI92 effectue un reset standard, et reprend une nouvelle session (vide). (Note : FARGO installation is an exception) Quand l'ordinateur demande un backup, le dialogue commence comme une requˆte de varaible : 1- 09 A2 11 00 requˆte 00 00 00 00 1D 0B 6D 61 69 6E 5C 62 61 63 6B 75 70 "main\backup" type 1D, size 0 9F 04 checksum 2- 89 56 00 xx xx=0 (prˆt), occup‚ sinon REPEAT 3- 89 06 09 00 entˆte de variable Bl Bh 00 00 1D 03 31 2E 33 block size = B bytes block ROM = "1.3" type = 1D B6 00 checksum 4- 09 56 00 00 PC OK 5- 09 09 Bl Bh attente de BhBl octets 6- 89 56 00 xx xx=0 (prˆt), occup‚ sinon 7- 89 15 Dl Dh paquet de donn‚es, DhDl=BhBl+4 octets ?? ?? ?? ... Sl Sh checksum 8- 09 56 00 00 PC OK END REPEAT 9- 89 92 00 00 TI92 end of transmission 10- 09 56 00 00 PC OK Quelques explications : On ne peut pas savoir la taille d'un backup avant que son transfert soit termin‚ ! La meilleur fa‡on de d‚tecter la fin de la boucle REPEAT...END REPEAT est d'attendre le paquet 89 92 00 00 (Fin de transmission) qui se substitue … l'‚tape 3 (entˆte de variable) lorsque le dernier block a ‚t‚ transf‚r‚. Le paquets de donn‚es font 4 octets de plus que la taille annonc‚e dans le paquet d'entˆte de variable. C'est ainsi que la TI92 envoie des variables. Pour stocker le backup dans un fichier, il suffit d'‚liminer les 4 premiers octets de chaque block (ils indiquent en fait la taille du block !), et de concat‚ner le tout en un seul block. La TI92 envoie en principe ses backups par block de 1024d octets, exception faite du dernier paquet, du fait que la taille du backup n'est pas n‚cessairement un multiple de 1024d ! Et maintenant, comment envoyer un backup. Lors d'un transfert de backup, si le dialogue s'interrompt plus de 1.5 secondes (environ), la TI92 effectuera automatiquement un reset (heureusement !). Voici le protocole : 1- 09 06 05 00 entˆte de variable Ll Lh Hl Hh 1D taille du backup, variable type 1D Sl Sh checksum 2- 89 56 00 xx xx=0 (prˆt), occup‚ sinon REPEAT 3- 09 06 05 00 entˆte de variable 00 00 00 00 1D type 1D 1D 00 checksum 4- 89 56 00 xx xx=0 (prˆt), occup‚ sinon 5- 89 09 00 00 attente du block 6- 09 56 00 00 PC OK 7- 09 15 Bl Bh BhBl = taille du block ?? ?? ?? ... donn‚es block Sl Sh checksum 8- 89 56 00 xx xx=0 (prˆt), occup‚ sinon END REPEAT 9 - 09 92 00 00 fin de transmission Quelques explications : Le transfert se fait en principe par blocks de 1024d octets, comme la ROM 1.3 le fait. Ces blocks se r‚cupŠrent tels quels dans un fichier backup. Consultez le fichier FORMATS.DOC (anglais) pour les d‚tails. Si le transfert r‚ussit, la TI92 fera un reset (ou restart!), et l'‚cran deviendra bleu : vous r‚cup‚rerez alors la session sauvegard‚e. C'est tout... ÚÄÄÄ¿ ³ 8 ³ CONTROLE A DISTANCE ÀÄÄÄÙÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Il y a deux fa‡ons de contr“ler la TI92 … distance. Vous pouvez mettre la TI92 dans un mode sp‚cial. A partir de l'‚cran HOME, appuyez sur F5 + Diamant + '(' + 'R' (l'un aprŠsz l'autre). La TI92 va alors imm‚diatement convertir tout mot (2 octets) re‡u par son port I/O en un appui de touche (code TI). Elle r‚pondra l'octet = FF aprŠs chaque mot envoy‚. (cf manuel de la TI92) La sortie est ‚galement redirig‚e vers le port I/O. Chaque r‚sultat (appui de la touche Enter) est envoy‚ en ASCII avec un octet FF terminal. Pour remettre la TI92 en mode normal, envoyez la combinaison magique suivante au port I/O : F5 + Diamant + '(' + 'R'. Vous pouvez ‚galement utiliser la TI92 en mode normal. Envoyez un paquet : 09 87 ll hh o— hhll est le code de la touche (cf manuel TI92) La TI92 r‚pondra … chaque code re‡u : 89 56 00 xx xx=0 (prˆt), occup‚ sinon Ce mode de contr“le … distance simule complŠtement l'appui d'une touche par l'utilisateur. Le r‚sultat sera affich‚ sur l'‚cran de la TI92 comme si de rien n'‚tait. - Fin de PROTOCOL.FR -