Nanoréseau Thomson sur PC "récents" : c'est possible !

Cette catégorie traite de développements récents pour nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Fool-DupleX »

Le dernier mot est-il dit ? L'espérance doit-elle disparaître ? La défaite est-elle définitive ? Non !

Croyez-moi, moi qui vous parle en connaissance de cause et vous dis que rien n’est perdu pour le Nanoréseau. Les mêmes moyens qui nous ont vaincus peuvent faire venir un jour la victoire.

Car le 8086 n'est pas seul ! Il n'est pas seul ! Il n'est pas seul ! Il a un vaste Empire derrière lui. Il peut faire bloc avec l'Empire AMD qui tient le marché et continue la lutte. Il peut, comme AMD, utiliser sans limites l'immense industrie de l'informatique.

Moi, Fool-DupleX, actuellement en Suisse, j'invite les passionnés et les collectionneurs français qui se trouvent en territoire Thomsoniste ou qui viendraient à s'y trouver, avec leurs fers à souder ou sans leurs fers à souder, j'invite les ingénieurs et les techniciens spécialisés des industries de l'informatique qui se trouvent en territoire Thomsoniste ou viendraient à s'y trouver, à se mettre en rapport avec moi.

Quoiqu'il arrive, la flamme de la résistance 8 bits ne doit pas s'éteindre et ne s'éteindra pas.

Demain comme aujourd'hui, je parlerai sur system-cfg.
Dernière modification par Fool-DupleX le 12 nov. 2022 17:28, modifié 1 fois.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par __sam__ »

C'est l'appel du 18 Joint ?
Le général Fool en Duplex de Suisse
Le général Fool en Duplex de Suisse
image_2022-11-12_162919939.png (1.04 Mio) Consulté 2185 fois
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Fool-DupleX »

Presque ... sauf que je n'ai rien fumé. Je suis juste heureux. J'ai réussi avec l'aide de Fabrice à écrire un code source (100% assembleur) de pilote pour la carte Nanoréseau qui sur le principe devrait permettre de faire un Nanoréseau avec n'importe quel PC entre le 386SX16 et les AthlonXP 2800+ ou PIII 1.2 GHz (au-dela, les ports ISA se font rares ...).

Alors s'il y a des personnes intéressées à remonter des Nanoréseau, à tester des configs ou à développer du logiciel qui utilise ce fameux Nanoréseau, je les invite à me contacter et à échanger sur ce fil !
Avatar de l’utilisateur
boris
Messages : 355
Inscription : 04 mars 2011 13:55
Localisation : Normandie (près d'Honfleur)
Contact :

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par boris »

Du coup le fichier CTNR3.SYS sera bientôt disponible ?
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Fool-DupleX »

Aussi vite que possible mais aussi lentement que nécessaire. Je dois faire du ménage dans le code et puis la diffusion ne fonctionne pas encore. C'est un mécanisme un peu particulier dans le Nanoréseau. Je publierai aussi le code source.
dfuriet
Messages : 15
Inscription : 12 nov. 2022 23:09

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par dfuriet »

Bravo, beau travail
Avatar de l’utilisateur
Leraptor06
Messages : 672
Inscription : 15 févr. 2022 10:34
Localisation : Mandelieu

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Leraptor06 »

Bravo c'est très intéressant merci
Jp
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Fool-DupleX »

Au printemps dernier, suite au projet de Rodrik de refaire la carte NR, j'ai décidé de reprendre le reverse-engineering du soft côté PC de zéro. J'avais déjà plusieurs fois ces 20 dernières années commencé un reverse, mais il manquait toujours des éléments techniques pour comprendre pourquoi certaines choses étaient écrites ainsi. Le code de l'interruption qui reçoit les paquets par exemple commence d'une manière à priori perturbante, car il ne vérifie pas que des octets sont prêts à être lus et il jette même certains octets de la trame qui à priori ont de l'utilité.

En plus, faire par exemple du pas-à-pas pour essayer de comprendre l'exécution est un vrai parcours du combattant, puisqu'on est obligé de travailler sur un vrai PC-XT extrêmement lent et monotâche. Aucun émulateur ne peut faire ce travail, car on est au niveau matériel le plus bas, qui plus est, avec une carte ISA complètement custom. Réécrire un émulateur de carte par exemple pour un pcemu ou un qemu nécessite de comprendre le comportement du soft pour y coller, or c'est précisément ce qu'on cherche à élucider. Poule et oeuf.

Mais suite au projet de Rodrik, j'ai compris grâce au schéma complet que les problèmes ne pouvaient vraiment pas venir de la carte. C'est pour ça que je me suis (re-)lancé. Un petit logiciel de diagnostic spécialement écrit par FreddyV a confirmé que la carte fonctionnait potentiellement sur des machines plus rapides.

J'ai utilisé IDA Pro pour désassembler les fichiers CTIBM.SYS (driver IBM PC) et CTLOG.SYS (driver Olivetti-Logabax Persona 1600). Après environ 6 semaines de mon temps libre, j'ai obtenu un code assembleur étiqueté et commenté assemblable avec Turbo-Assembleur pour donner les mêmes fichiers .SYS à l'octet près. Il va de soi quand sans les documents accumulés depuis toutes ces années sur notre site www.nanoreseau.net, il était impossible de comprendre le fonctionnement. Le contrôleur de communication est complexe et le protocole aussi.

Ce que j'ai fait ensuite, c'est comparer les deux codes pour IBM et Olivetti. Ca m'a permis de trouver deux choses :

1. Tous les endroits où les temporisations et les time-out diffèrent.
2. La routine d'émission d'un paquet est fondamentalement différente entre les deux machines.

L'IBM PC est équipé d'un 8088 à 4.77 MHz et l'Olivetti d'un 8086 à 8 MHz. Non seulement l'horloge est presque deux fois plus rapide, mais le bus de données du 8086 est 16 bits contre 8 pour le 8088, ce qui rajoute encore un petit peu de peps.

Sur l'IBM PC, le code rentre au chausse-pied : chaque cycle d'exécution compte et on se rend compte que l'IBM PC, en fait, a du mal à suivre la cadence du MO5 ... tandis que sur l'Olivetti, le gain de puissance permet plus de souplesse dans la manière de gérer la réception et l'envoi des paquets réseau.

En isolant toutes les différences, j'ai réussi à modifier le driver pour IBM pour faire tourner un Thomson TO16 équipé d'un 8088 à 9.54 MHz. Ce fut une première victoire car jusqu'à présent, le TO16 qui me servait de central devait tourner à 4.77 MHz pour que le Nanoréseau fonctionne parfaitement.

En accord avec Rodrik, j'ai alors envisagé d'aller plus loin. Suite au prochain épisode si ça vous intéresse.
Dernière modification par Fool-DupleX le 13 nov. 2022 22:47, modifié 3 fois.
Avatar de l’utilisateur
Leraptor06
Messages : 672
Inscription : 15 févr. 2022 10:34
Localisation : Mandelieu

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Leraptor06 »

Oh que oui on attends la suite.
Merci
Jp
dfuriet
Messages : 15
Inscription : 12 nov. 2022 23:09

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par dfuriet »

Passionnant ... c'est très intéressant et çà me rappelle mes débuts en informatique
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Fool-DupleX »

Pour réaliser ce pilote pour TO16, j'ai principalement fait deux choses : j'ai doublé toutes les valeurs utilisée dans des boucles de temporisation ou de scrutation de time-out par rapport à celles du pilote pour IBM PC et j'ai remplacé la routine d'émission de l'IBM PC par celle de l'Olivetti. Ca a fonctionné quasiment du premier coup.

En ce qui concerne la routine d'émission d'un paquet, sur l'IBM PC, chaque cycle compte. Au lieu par exemple de faire du polling sur le buffer d'émission pour s'assurer qu'il est vide avant d'envoyer l'octet suivant, on attend simplement le nombre de cycles que prend l'envoi d'un octet avec des NOPs et on envoie le suivant. En effet, scruter le buffer est trop gourmand et si l'octet suivant ne vient pas à temps, le contrôleur annule automatiquement l'échange en envoyant un flag ABORT sur la ligne. Par contre, l'Olivetti est suffisamment rapide pour réaliser le polling, qui est la manière standard de procéder.

Comme tout est très maitrisé (un seul coeur CPU, pas de cache, pas d'exécution spéculative, pas d'horloge dynamique etc. etc. et aucune autre interruption hardware autorisée que celle du Nanoréseau), compter les cycles fonctionne bien et l'IBM PC se comporte remarquablement comme central Nanoréseau. Mais en fait, c'est vraiment au cordeau. Voici pour exemple le début de la routine :

Code : Tout sélectionner

XmitPacket:
                push    dx
                mov     dx, upd7201_dataA
                out     dx, al                             ; Send Dst address

                pushf                                      ; Wait a bit
                popf
                cld
                cld
                
                mov     al, cl                             
                out     dx, al                             ; Send Ctrl Word

                pushf                                      ; Wait a bit
                popf
                pushf
                popf
                nop
                nop
                
                mov     al, ds:ComputerAddress             
                out     dx, al                             ; Send Src address
                
                pop     cx                                 ; Size (was in DX)
                jcxz    XP_SendCRC

XP_SendPayload:                              
                mov     al, es:[bx]
                out     dx, al                             ; Send one payload byte
                inc     bx

                cld                                        ; Wait a bit
                cld
                cld
                cld
                cld
                cld
                cld
                loop    XP_SendPayload

                nop                                        ; Wait a bit
                nop
                ...
Les NOP, CLD, PUSHF/POPF et LOOP ne font rien d'autre que manger des cycles. Leur nombre est leur position sont soigneusement étudiés pour que les octets du paquet soient envoyés à une cadence compatible avec celle exigée par le contrôleur de la carte NR.

A contrario, la partie de la routine sur Olivetti pour l'envoi d'un octet se présente ainsi, dans une boucle :

Code : Tout sélectionner

wait_buffer_ready:                 
                in      al, dx
                and     al, ah
                jz      wait_buffer_ready
                
                dec     dx
                mov     al, bl
                out     dx, al                  ; Send one payload byte
                inc     dx
Donc, pour réaliser un pilote pour des machines plus puissantes, je suis parti sur une idée simple : calculer un ratio de performance entre l'IBM PC et la machine cible (par exemple 286 à 12 MHz), l'appliquer à tous les paramètres de time-out et de temporisation et utiliser la routine de l'Olivetti pour l'envoi des paquets. J'ai utilisé l'utilitaire Landmark v6.0 pour trouver les ratios.

Malheureusement, ça s'est avéré plus compliqué que ça et les premiers essais avec la machine de Rodrik (386SX25) ont tous lamentablement échoué.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Fool-DupleX »

Pour une raison qui m'échappait, le pilote ne fonctionnait pas du tout sur le 386. Il semblait que l'IRQ ne réagissait pas du tout aux paquets reçus. Dans un premier temps, nous avons essayé de changer l'IRQ. Moyennant une petite modif hardware, on peut basculer de l'IRQ2 vers l'IRQ5. J'ai corrigé le pilote en conséquence.

Mais toujours aucun résultat. Rodrik ayant d'autres priorités et c'est bien normal, nous avons convenu de faire une pause. Pourquoi ça ne fonctionne pas avec l'IRQ5 n'est pas compris à ce jour, mais je me promets d'y revenir.

J'avais un peu mis ça de côté et puis est arrivé Fabrice. Je n'ai je crois jamais vu quelqu'un d'aussi motivé à remonter son Nanoréseau. Au cours de l'inventaire de son matériel et des premiers essais avec son Duron, qui évidemment n'ont rien donné, on en est vite arrivé à échanger presque tous les jours sur Discord. Il ne voulait pas lâcher l'affaire. Donc pendant à peu près un mois, nous avons travaillé ensemble sans relâche pour faire sauter un à un tous les problèmes. Et il y en a eu pas mal.

Setup de test : un MO5 clavier mécanique sans son extension 64 Ko pour commencer, relié au Duron tournant sous FreeDOS avec le logiciel NR d'origine. Avec une petite subtilité en plus : un PC supplémentaire sous Linux équipé d'un clone Saleae, pour espionner la communication sur la ligne réseau.

Je renvoie au fil de discussion précédent pour les premières étapes du travail.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par Fool-DupleX »

Un echange NR se passe ainsi : la source émet un paquet (on dit trame dans le NR) d'appel initial (APPEL). La destination répond par un ECHO. La source envoie ensuite un code tache réseau (CTR). La destination répond par un paquet de prise en charge (PCH). La source répond par un AMA (avis de mise en attente). A ce moment-là, la destination prend le contrôle de la discussion et la source est en attente de sa réponse. Les courriers sont échangés, jusqu'à ce que la discussion se termine, quand l'interlocuteur qui a la main annonce un DISC (déconnecte-toi). Le pair répond alors par un ACQUIT et la communication est terminée.

Chaque courrier envoyé est confirmé par le destinataire par un ACQUIT.

Nous sommes longtemps restés coincés sur un problème incompréhensible : le MO5 ne répondait jamais AMA au premier PCH pourtant bien formé par le central. Et puis l'idée lumineuse : et si un des transceivers, soit en émission cote central, soit en réception cote mo5 etait grillé ? Au final, c'était un défaut électrique sur la prise DIN du MO5 juste avant son transceiver de réception.

Pendant les 15 derniers jours, beaucoup de traces et de modifications de code pour adapter les temporisations. Il a fallu en rajouter qui n'existaient pas. l'exécution est tellement lente sur l'IBM PC, qu'un simple MOV ou un PUSH peut simultanément faire office de temporisation de quelques us. Ceci n'est évidemment plus vrai sur un Duron sur lequel on est plutôt à quelques dizaines de ns. Et puis sur le Duron, les timings bougent tout le temps de quelques us, probablement à cause de la mémoire cache, de l'exécution spéculative, désordonnée, etc. Il faut ajouter des marges d'erreur.

Il y a aussi un endroit où, pour gagner de la vitesse, le code s'auto-modifie à très court intervalle. Re problème ici avec le cache et le pipeline du processeur. Ce dernier souci m'a laissé perplexe un bout de temps. Finalement, la performance étant là, on peut simplement supprimer ce code auto-modifiant ou rajouter quelques instructions inutiles pour allonger le passage dans le pipeline.

Petit à petit, chaque nouvelle trame dans le train s'est mise à fonctionner, jusqu'à obtenir l'ACQUIT du MO5 et là, le fameux menu Nanoréseau est apparu sur son écran !
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17424
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par fneck »

Je salue le travail effectué, félicitations 8)
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
jb_jb_fr
Messages : 391
Inscription : 29 mars 2010 10:36
Localisation : Essonne (91)
Contact :

Re: Nanoréseau Thomson sur PC "récents" : c'est possible !

Message par jb_jb_fr »

A lire tes messages Fool, je me retrouve exactement.
En effet, comme tu le sais je tente de faire un serveur Nanoreseau, pas avec un PC, mais avec un TO9+.
Et j'ai rencontré les même problemes.
- Trame mal formatés
- Non acquittement du MO5
- Timing de trames trop long
- Pb électriques
- MO5 qui en balance trop, et perte de données dans le driver
- Boucle de réception trop lente
- etc...

Je vois que quelque soit le CPU (Motorola, Intel, AMD), et la fréquence (1MHz, 4,77MHz, ou 8MHz), on rencontre a peu prés les même soucis.
Sauf que je triche un peu car j'ai un TO9+ avec un 6309, mis en mode 6309
Sinon ca ne marcherait pas.
Car 2 machines cadencé à 1MHz, avec une transmission à 500KHz, ca ne le fait pas :-(

En tout cas bravo pour le boulot effectué, et longue vie au NanoRéseau

Jacques
Répondre