Voilà comme j'en ai déjà un peu parlé sur d'autres forums, je travaille sur un plugin d'émulation de l'AGC (Apollo Guidance Computer) et du DSKY (DiSplay and KeYboard).
Vous l'avez sans doute tous déjà vu, soit dans des films, soit dans des documentaires, ou au moins entendus parler. Pour les quelques réfractaires, voiçi une photo du DSKY :
Le truc c'était donc pas mal de filasse, et des specification digne d'une calculatrice de bureau.
-Système 16bits
-2048 mots de mémoire RAM (1 mot : 2 octets... Ca fait.... 4096 octets de RAM. Sacré barrette, hein?)
-36864 mots de mémoire ROM (l'équivalent de nos CD-R, non réinscriptible, mais en version ultra-slim. 73 728 octets)
-Un cycle machine de 12ms (85Hz, ca c'est du "CPU")
Bon et avec tout ça fallait faire voler une fusée. C'est un peu le défi que je me propose, et que je vous proposerai, donc, quand le plugin sera finalisé.
A l'intérieur, rien de précoder, le plugin sera livré avec un compilateur (KYUL, sans jeu de mots, l'original s'appellait YUL, et si je remplace le Y par K, c'est trop... 'fin voilà.). Enfin je dit compilateur, en fait c'est un assembleur.
Un petit exemple avec la portion de code du Luminary (le programme du LEM) qui sert à poser le machin sur la lune.
The Luminary Lunar Landing
J'en suis pour l'instant à la phase plugin brute (c'est à dire que j'ai besoin d'un truc qui marche déjà en ligne de commande), et c'est vraiment le tout début.
un début de wiki est dispo (pour l'instant plus technique que plugin) en français(02/11/2013)
Wiki gitHub
Sur le github, le code est normalement a peu près commenté, si y'en qui s'intéressent à la source. Mais c'est en anglais (et non, désolé, celui-là je le passerai pas en français.) J'ai encore pas mal de précision à apporter sur le fonctionnement interne de certaines fonctions (notemment celles qui manipulent les registres dans l'AGC et YUL, mais c'est du WIP.)
Avancée du truc : 07/11/2013
- 07/11/2013
-API : Gestion des valeurs négatives.
-AGC : Opcode TC (Transfer control)
-YUL : gestion des operands relatif (+x / -x)
- 06/11/2013
-Refactoring du code pour plus de clareté et lisibilité.
-Recodage de fonctions de l'AGC_SUPPORT, YUL et AGC pour optimiser certains appels.
-Renommage des fichiers de YUL_GUI pour clarifier le truc.
-Un fichier "AGC_Test.agc" est inclus à l'application de test en CLI de l'AGC pour voir ce que ça donne.
-Gestions des erreurs dans YUL, qui est maintenant opérationnel (soit via le GUI, soit en CLI via une application codée).
-Doc de YUL en cours de rédaction.
- 03/11/2013
- YUL : YUL fonctionne et devrait compiler le code AGC normalement. Le code interprété n'est pas encore géré.
YUL GUI : c'est moche, mais ça fait ce qu'on lui demande. Je le laisse en état pour l'instant, c'est pas ma priorité, ça tient lieu de placeholder pour un futur debugger.
Wiki GitHub : Ce qui avait été tapé est maintenant traduit en français. Maintenant faut que je le continue.
AGC :- Les premiers opcodes sont implémentés (TS CA AD).
Du coup j'ai réussi à gérer les accès en mémoire fixe qui auparavant provoquait une réecriture des registres de l'AGC. Plus dur au codage, mais plus simple à l'utilisation maintenant : on dispose de banques méméoires accessibles de n'importe où, n'importe quand
Pas mal d'optimisations dans les classes de support. Plus les opérations intra-cycles seront courtes, meilleur sera le timing pour avoir un temps d'exécution réaliste.
- Les premiers opcodes sont implémentés (TS CA AD).
- YUL: Résolutions des labels Reconnaissance des OPCODEs Changement de bank. TODO : Implémentation des instructions de compilation
- Accès mémoire et fichier mémoire : DONE (Bank class)
Manipulation de mots de 16 bits : DONE (sWord class)
Emulation d'horloge : TODO (placeholder CLOCK class)
AGC : TBC
- YUL : YUL fonctionne et devrait compiler le code AGC normalement. Le code interprété n'est pas encore géré.