Logicielsmoto.com http://www.logicielsmoto.com/phpBB/ |
|
Tortue Jeulin sur TO8/8D/9+ avec interface CC90-232 http://www.logicielsmoto.com/phpBB/viewtopic.php?f=3&t=585 |
Page 1 sur 1 |
Auteur: | Fool-DupleX [ 05 Fév 2019, 23:35 ] |
Sujet du message: | Tortue Jeulin sur TO8/8D/9+ avec interface CC90-232 |
Number-one m'a contacté récemment car il possède une tortue Jeulin modèle T2 et il souhaitait la faire fonctionner sur le TO8. Il a déjà tout ce qu'il faut pour la faire tourner sur TO7/70. En principe, sur TO8, il faut utiliser l'interface série RF57-932. Mais il ne l'a pas et elle est relativement rare. Sur TO7/70, c'est la plus commune CC90-232 qui est utilisée. Number-one s'est rapidement aperçu que cette dernière n'est pas compatible : la tortue "râle" (jargon officiel pour dire qu'elle détecte une erreur de communication ou de commande). Grâce aux travaux de PrehisTO, nous savions déjà qu'il est possible d'utiliser l'interface CC90-232 sur toutes les machines Thomson, à condition d'opérer une petite modification de son électronique pour générer le -12V à partir du +5V. Cependant, cela ne résout pas entièrement le problème lorsqu'on veut utiliser le port série de manière standard, par exemple et comme par hasard, dans LOGO, pour piloter la tortue. En effet, la routine moniteur du TO8, par définition, ne sait gérer que la RF57-932, puisque la CC90-232 n'est pas sensée fonctionner sur cette machine. Mais il existe une échappatoire : on peut rediriger l'appel au moniteur vers une routine utilisateur en RAM. Afin de dépanner Number-one, j'ai donc écrit un petit bout de code en assembleur qui comporte deux parties : une copie conforme de la routine moniteur du TO7-70 pour piloter la CC90-232, et un petit installeur qui va patcher la table d'appel des routines moniteurs. J'ai également dû légèrement modifier l'applicatif en LOGO pour que ce patch soit installé automatiquement. Le résultat est visible ici : https://www.youtube.com/watch?v=1GE98lFIqjw et là : https://forum.system-cfg.com/viewtopic.php?f=9&t=7574&start=41 Number-one est le premier et le seul à ce jour à avoir fait fonctionner une tortue sur TO8 avec l'interface CC90-232. Code: ******************************************************************************* * * CC90-232.ASM, v1.0 * Pilote pour interface CC90-232 sur TO8/8D/9+ * http://megarom.forler.ch * * La routine RSCOH standard (pour RF57-932) est remplacee de maniere * transparente par la routine RSCOH du TO7-70 pour CC90-232. * * L'interface CC90-232 (equipee du module -12V) fonctionne ainsi sur TO8/8D/9+. * Le port parallele est aussi gere ; le port parallele interne a la machine * devient inaccessible avec le moniteur. * * Usage : après chargement du fichier CC90-232.BIN, l'execution du point * d'entree INSTALL installe le pilote. Le flag INSTLD passe de $00 a * $FF. Un deuxieme appel a INSTALL desinstalle le pilote, retablit * le fonctionnement normal et le flag INSTLD repasse a $00. * * 1.0 2019-01-25 Version initiale. * ******************************************************************************* ***** DEFINITIONS ***** DIRECT EQU $60 Page directe en $6000 PRC EQU $E7C3 PIA systeme PRA2 EQU $E7E0 PIA CC90-232 CRA2 EQU $E7E2 PRB2 EQU $E7E1 CRB2 EQU $E7E3 STAD EQU $4000 Debut memoire video ENDAD EQU $5F40 Fin memoire video ENDRAM EQU $DFFF Fin de la RAM RSRED EQU $6010 Vecteur routine RSCOH RSOPC EQU $602B Code operation RSSTA EQU $602C Status BAUDS EQU $6044 Vitesse NOMBRE EQU $6046 Configuration GRCODE EQU $6047 Code graphique imprimante BLOCZ EQU $6076 Deux zeros RSCOH EQU $E812 Routine RSCOH CLRTS EQU $02 Bit CTS DTTRMN EQU $40 Bit DSR GRCTO7 EQU $07 Code graphique imprimante TO7 GRCTO8 EQU $1F Code graphique imprimante TO8 REQTS EQU $20 Code RTS RSOPR EQU $01 Ouverture lecture/ecriture RSRDC EQU $02 Lecture d'un caractere RSOPW EQU $04 Ouverture en ecriture seule RSWRC EQU $08 Ecriture d'un caractere RSCLO EQU $10 Fermeture RSCPY EQU $20 Copie d'ecran RSOPP EQU $40 Ecriture en parallele RSNRD EQU $80 Not ready RXDATA EQU $01 Bit RXDATA * Quelques macros tres courantes chez Thomson SKIP1 MACRO FCB $D5 ENDM SKIP2 MACRO FCB $F5 ENDM LSRD MACRO LSRA RORB ENDM CLC MACRO ANDCC #$FE ENDM SEC MACRO ORCC #1 ENDM * Debut ici. * ORG ENDRAM-410 Calcul au pif ORG ENDRAM-482 Version pour tortue Jeulin * Chargement en $DE65, $DE1D = 56861 pour usage avec la tortue Jeulin * Pt. d'entrée INSTALL en $DE68, $DE20 = 56864 pour usage avec la tortue Jeulin RSVECT FDB $0000 Ancien vecteur de routine RSCOH INSTLD FCB $00 $00 = pas installe, $FF = installe ***** INSTALLER ***** INSTALL EQU * PSHS U,X,Y,D,DP,CC Sauve le contexte ORCC #%01010000 Interdit les interruptions LDA #RSCLO Ferme les communications courantes STA RSOPC JSR RSCOH CLR BAUDS Reinitialise la configuration serie CLR BAUDS+1 CLR NOMBRE TST INSTLD Pas encore installe ? BEQ ENABL On y va LDD RSVECT Sinon, desinstallation STD RSRED LDA #GRCTO8 Configure l'imprimante STA GRCODE CLR INSTLD Flag d'installation BRA RETINS Et on quitte ENABL EQU * LDD RSRED Sauve le vecteur courant STD RSVECT LDD #RSCONT Installe le nouveau vecteur STD RSRED LDA #GRCTO7 Configure l'imprimante STA GRCODE COM INSTLD Flag d'installation RETINS EQU * PULS CC,DP,D,Y,X,U,PC Retour ***** ROUTINE MONITEUR ***** RSCONT EQU * PSHS A,B,CC,DP,X LDA #DIRECT TFR A,DP LDA RSOPC Code d'operation ORA #%00010000 Protection contre les interrupt request (IRQ) TFR A,CC BCS OPNRD Bit0 = Ouverture en lecture/ecriture BVS RRDCH Bit1 = Lecture d'un caractere BEQ OPNWR Bit2 = Ouverture en ecriture seule BMI RWRCH Bit3 = Envoi d'un caractere BITA #RSCPY Bit5 = Copie graphique d'un ecran BNE SCREEN BITA #RSOPP Bit6 = Ouverture en ecriture parallele BNE OPNPR RSCLOS EQU * LDA RSOPC STA RSSTA BRA OUTRW OPNRD EQU * LDA #RSOPW+RSOPP Verification que l'on n'est pas ouvert en ecriture * ou en ecriture parallele avant d'ouvrir en * lecture/ecriture SKIP2 OPNWR EQU * LDA #RSOPR+RSOPP Verification que l'on n'est pas deja ouvert en * lecture/ecriture ou en ecriture parallele avant * d'ouvrir en ecriture SKIP2 OPNPR EQU * LDA #RSOPW+RSOPR Verification que l'on n'est pas deja ouvert en * ecriture ou lecture/ecriture avant d'ouvrir * en ecriture parallele BITA RSSTA Par un "ET" avec l'etat courant du status BNE RSERR Si oui, erreur LDA RSOPC STA RSSTA Flag de l'operation realisee BSR RSINI Positionnement du PIA2 et reconnaissance de * peripherique absent BCS RSNRD Retour avec flag de peripherique absent BRA OUTRW RRDCH EQU * LDA #RSOPR Verification que l'on est ouvert en * lecture/ecriture avant de saisir un octet SKIP2 RWRCH EQU * LDA #RSOPW+RSOPR+RSOPP Verification que l'on est ouvert en * ecriture ou en lecture/ecriture ou en * ecriture parallele avant d'envoyer un octet SKIP2 SCREEN EQU * LDA #RSOPP Verification que l'on est ouvert en ecriture * parallele avant de recopier un ecran graphique BITA RSSTA Par un "ET" avec le status BEQ RSERR Si aucun flag n'est present, c'est une erreur BSR DTTEST Test de peripherique non pret BCS RSNRD Peripherique deconnecte BSR IOCH Lecture ou ecriture du caractere OUTRW EQU * PULS A,B,CC,DP,X CLC Flag d'operation correcte RTS RSNRD EQU * LDA #RSNRD Peripherique non pret STA RSSTA RSERR EQU * PULS A,B,CC,DP,X BUSY EQU * SEC Flag d'erreur RTS RSINI EQU * LDD BLOCZ Bloc de 00 en page 0 STD CRA2 Mise des ports en direction LDD #%0000001111111111 Bit7 : TXDATA en input, Bit6 : OTTRMN en input, * Bit5 : RQTS en input, Bit1 : CLRTS en output, * Bit0 : RXDATA en output. Tout le port B en * output. STD PRA2 Ecrit dans PRA2 et PRB2 LDD #%0000010000111100 CA2 inactif, CA1 actif sur front descendant * avec IRQ inhibee (REQUEST TO SEND), CB2 en * output a 1 (STROBE), CB1 actif sur front * descendant avec IRQ inhibee (ACKNOWLEDGE) STD CRA2 Dans CRA2 et CRB2 LDA PRB2 Test de l'existence du controleur : on lit le port B COMA STA PRB2 On reecrit dedans son complement CMPA PRB2 Et on verifie la reecriture BNE BUSY Si non conforme, controleur non present COM PRB2 Si present, on le remet dans son etat initial LDA #RXDATA+CLRTS STA PRA2 CLEAR TO SEND masque et RXDATA = mark DTTEST EQU * LDA PRA2 Bit6 de A = DATA TERMINAL READY EORA RSSTA Si RS.STA = RS.OPP ($40), A(6) est inverse, * sinon il est inchange ANDA #DTTRMN On ne conserve que le bit 6 ADDA #$FF CY=1 si A<>0 (flag de BUSY) et CY=0 si A=0 (READY) RTS * ***** ENVOI ET RECEPTION D'UN CARACTERE ***** * IOCH EQU * LDA RSOPC BITA #RSRDC Appel en lecture ? BNE RECECH Aucun doute, ce ne peut etre que la routine * de reception BITA #RSCPY Demande de recopie d'un ecran ? BNE COPYGR Aucun doute non plus LDA RSSTA Sinon, ce ne peut etre qu'un appel en ecriture. * Suivant RS.STA, il peut s'agir d'une ecriture * serie ou parallele BITA #RSOPR+RSOPW Ecriture serie ? BNE SENDCH SENDPA EQU * JSR PARALL Ecriture en parallele RTS Sortie sur READY COPYGR EQU * LDA PRC Mise en memoire caractere ORA #1 STA PRC LDB GRCODE Code qui declenche la mise en mode graphique JSR PARALL LDX #STAD Adresse de debut de l'ecran COPYLP EQU * LDB ,X+ Caractere physique JSR PARALL CMPX #ENDAD Fin de l'ecran ? BLO COPYLP BRA OUTLP RECECH EQU * LDA PRA2 REQUEST TO SEND ? BITA #REQTS BEQ CLEART Si oui, CLEAR TO SEND et reception d'un caractere CLR 4,S Si non, mise a zero de B sur la pile BRA OUTLP Sortie sur READY CLEART EQU * ANDA #CLRTS!X$FF Envoi de CLEAR TO SEND : PRA2(1) = 0 STA PRA2 RECSD EQU * LDD BAUDS Vitesse LSRD Divise par deux pour se synchroniser * a la moitie du bit de start TFR D,X X sert de compteur de boucle LDB NOMBRE Nombre de bits de transmission 7 (%01000000) ou * 8 (%10000000) START EQU * LDA PRA2 Sert aussi au RESET de CA1 BMI START Attente du bit de start BSR WAIT Des sa reception, on attend un demi-delai LDA PRA2 BMI RECSD Si non confirme, on recommence l'attente NXTBIT EQU * LDX BAUDS BSR WAIT Boucle de la duree d'un bit LDA PRA2 BMI BIT1 Si PRA2(7) est a 1, c'est un bit 1 BIT0 EQU * CLRA (CLC) C'est un bit 0 SKIP1 BIT1 EQU * COMA (SEC) C'est un bit 1 RORB On entre le bit dans B par la gauche BCC NXTBIT Et le 1 mis dans B finira par arriver dans CY TST NOMBRE 7 ou 8 bits a recevoir ? BMI PILE Si 8, fini LSRB Si 7 bits, 1 decalage de plus PILE EQU * STB 4,S On met B dans la pile pour la routine d'appel LDA PRA2 ORA #CLRTS Reset de CLEAR TO SEND : PRA2(1) = 1 STA PRA2 LDD BAUDS LSRD TFR D,X BSR WAIT Attente d'un 1/2 bit supplementaire OUTLP EQU * JSR DTTEST On ne sort pas tant que le terminal n'est pas pret BCS OUTLP RTS Remonte le pointeur de 2 et B est encore * deux positions plus haut SENDCH EQU * LDA PRA2 PSHS B Le mot a envoyer est range sur la pile BSR SENDCH0 Bit de start LDB NOMBRE %10000000 = bits ; %01000000 = 7 bits NXTSCH EQU * LSR ,S Positionne CY a 1 ou 0 suivant le bit a envoyer LDA PRA2 BCC SEND0 Si CY = 0 : on envoie un 0 SEND1 EQU * BSR SENCH1 Sinon, on envoie un 1 SKIP2 SEND0 EQU * BSR SENCH0 LSRB BNE NXTSCH Quand le 1 de nombre a disparu, on a fait 8 ou * 7 tours PULS B Reset du pointeur de pile OUTSCH EQU * LDA PRA2 BSR SENCH1 2 bits de stop BSR SENCH1 BRA OUTLP * ***** BOUCLE D'ATTENTE ***** ** WAIT EQU * LEAX -1,X BNE WAIT RTS * ***** EMISSION D'UN 0 OU D'UN 1 ***** * SENCH0 EQU * ANDA #$FE Mise a 0 de PRA2(0) SKIP2 SENCH1 EQU * ORA #1 Mise a 1 de PRA2(0) STA PRA2 LDX BAUDS BRA WAIT * ***** ENVOI D'UN OCTET EN PARALLELE ***** * PARALL EQU * LDA CRB2 ANDA #%11110111 Mise a 0 de STROBE STB PRB2 on positionne l'octet dans le port STA CRB2 puis on envoie le STROBE ORA #%00001000 Remise a 1 de STROBE STA CRB2 LDA #DTTRMN PAR0 EQU * BITA PRA2 BNE PAR0 Attente de la montee de BUSY PAR1 EQU * BITA PRA2 BEQ PAR1 Attente de la redescente de BUSY : READY RTS END INSTALL La première version de mon code ne fonctionnait pas. Je me suis alors aperçu que l'application Tortue Jeulin en LOGO installe elle-même un patch assembleur et redéfinit les primitives LISCAR et TOUCHE? de manière à ce qu'elles travaillent simultanément sur la console et sur le port série (normalement, en LOGO, c'est l'un ou l'autre). Mon code était donc écrasé partiellement. Il suffisait de le déplacer légèrement pour que tout rentre dans l'ordre. Au passage, j'ai découvert qu'on peut redéfinir entièrement le jeu d'instruction primitif de LOGO, comme cela se fait en BASIC. Quelques remarques en guise de conclusion :
Bien qu'inscrit sur ce forum, Number-one est terriblement timide et m'a donc demandé de poster un petit quelque chose, ce que j'ai accepté de faire avec plaisir. |
Auteur: | Prehisto [ 06 Fév 2019, 19:58 ] |
Sujet du message: | Re: Tortue Jeulin sur TO8/8D/9+ avec interface CC90-232 |
Coooooool! Quand je pense qu'il fut un temps où l'interface CC90-232 n'intéressait plus personne! Et il s'en fallait pourtant de peu pour qu'elle puisse être utilisable sur tous les Thomson. Avec ce nouveau projet, elle est définitevement sauvée de la mort et de l'oubli! |
Auteur: | Samuel Devulder [ 07 Fév 2019, 08:35 ] |
Sujet du message: | Re: Tortue Jeulin sur TO8/8D/9+ avec interface CC90-232 |
La video est cool @fool tu pouvais utiliser la nouvelle balise [VIDEO] pour l'intégrer dans le message |
Auteur: | Fool-DupleX [ 07 Fév 2019, 11:28 ] |
Sujet du message: | Re: Tortue Jeulin sur TO8/8D/9+ avec interface CC90-232 |
Ah, oui, c'est nouveau. En tout cas, je suis assez admiratif, la tortue fonctionne rudement bien. Je m'attendais à ce qu'elle patine, surtout en tournant. Ca fait plaisir de voir ça 30 ans plus tard. Concernant mon code, une fois le problème d'offset résolu, il a fonctionné du premier coup et sans aucune modification de l'applicatif LOGO (hormis le chargement du fichier .BIN), c'est la preuve que c'est vraiment transparent et c'est très agréable. Pour la bonne mesure, j'ai rajouté une procédure TO8? dans l'applicatif, de manière à ce que le logiciel détecte la combinaison TO8+CC90-232 et qu'il fonctionne indifféremment sur TO7/70+CC90-232, TO8+RF57-932 et TO8+CC90-232 (TO8 voulant dire ici TO8/8D/9+). |
Auteur: | Samuel Devulder [ 07 Fév 2019, 12:16 ] |
Sujet du message: | Re: Tortue Jeulin sur TO8/8D/9+ avec interface CC90-232 |
Par contre le sol de number-one a un peu morflé sur la fin de la vidéo par ce qu'il a oublié le LC (lève crayon) au moment de faire revenir la tortue à son emplacement d'origine, c'est à dire à l'extérieur de la feuille de papier. Il faut toujours prévoir une serpillère pas loin de la tortue pour nettoyer après lors des expérimentations.. |
Auteur: | Prehisto [ 07 Fév 2019, 13:40 ] |
Sujet du message: | Re: Tortue Jeulin sur TO8/8D/9+ avec interface CC90-232 |
J'avais remarqué aussi Mais bon, c'est la première fois que je vois la tortue en action. |
Auteur: | number-one [ 10 Mar 2019, 15:01 ] |
Sujet du message: | Re: Tortue Jeulin sur TO8/8D/9+ avec interface CC90-232 |
Émission Underscore #134 du 10 mars 2019 Radio Mega à Valence https://www.radio-mega.com/ Je suis interviewé par rapport à ma vidéo youtube sur la tortue jeulin Présenté par Cicile et mmu_man organisateurs des Alchimies à Tain l'hermitage avec Roudoudou (Amstrad CPC) https://www.triplea.fr/microalchimie/pages/index.php |
Page 1 sur 1 | Heures au format UTC + 1 heure |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |