Logicielsmoto.com

Nous sommes le 28 Mar 2024, 13:41

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 
Auteur Message
MessagePosté: 05 Fév 2019, 23:35 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
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.

Image

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 :
  • Cette modification fonctionne sur TO8/8D et TO9+
  • L'interface CC90-232 peut dès lors être utilisée par n'importe quel logiciel faisant appel à la routine moniteur, par exemple en BASIC, mais évidemment, dans les limites officiellement fixées. Pour rappel, l'outil TOCOMM de Prehisto permet de monter à des vitesses plus élevées.
  • Le port parallèle de l'interface CC90-232 est aussi géré. Dans ce cas, le port parallèle interne du TO8 est masqué. Mais cela permet d'utiliser par exemple une ancienne imprimante prévue pour TO7-70 :)
  • Il suffit de rappeler l'installeur pour désinstaller le patch et se retrouver dans l'état normal (RF57-932 + port parallèle interne).

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. :)


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 06 Fév 2019, 19:58 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Coooooool! :good: :good:
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!

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Fév 2019, 08:35 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
La video est cool :cool:
@fool tu pouvais utiliser la nouvelle balise [VIDEO] pour l'intégrer dans le message
phpBB [video]

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Fév 2019, 11:28 
Hors ligne

Inscription: 06 Juin 2004, 08:23
Messages: 464
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+).


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Fév 2019, 12:16 
Hors ligne

Inscription: 21 Aoû 2006, 09:06
Messages: 1802
Localisation: Brest
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.. :p

_________________
Good morning, that's a nice Tnetennba


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 07 Fév 2019, 13:40 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
J'avais remarqué aussi :p
Mais bon, c'est la première fois que je vois la tortue en action.

_________________
Marche a suivre pour s'inscrire sur ce forum
Do not forget to contact one of the administrators to validate your registration.
Le site des démos de Puls
L'émulateur Teo


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 10 Mar 2019, 15:01 
Hors ligne

Inscription: 20 Juil 2017, 14:54
Messages: 1
É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


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 7 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 37 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com