Un programme TRS-80 sur un vinyle du groupe Pinback

Encore un programme sur un vinyle, et je l’ai découvert récemment. Il est sur le disque Information Retrieved Pt. B de Pinback, qui date de 2011.

Au lieu de vous mettre tous les articles précédents à chaque fois, je vous renvoie vers la page dédiée, elle explique ce que je fais avec les vinyles et liste toutes les pages qui contiennent les programmes, les explications, etc.

 

Premièrement, le contexte. C’est à la suite du précédent disque que j’ai cherché un peu plus précisément s’il existait des disques pour le Dragon 32 et ses équivalents comme le TRS-80. Bingo : dans ce thread Reddit, je trouve une info, confirmée par cet autre sujet.

La pochette


Le texte évoque les sons du programme

Le disque est un 7 pouces qui contient un piste qui porte le nom « CLOAD "Q" », la commande qui permet de lancer un programme. Il y a une petite explication en rapport dans un des papiers fournis avec. Les coordonnées sur la pochette renvoie à cette adresse, en Russie.

C’est en Russie

Premier écueil, le disque est compliqué à lire. J’ai une platine assez basique dans l’absolu, et elle a un mécanisme d’auto-stop qui n’est pas débrayable : quand elle arrive aux limites « officielles », le bras se range tout seul. Le problème, c’est que la piste de données est placées un peu plus loin que la limite. Il y a la musique, une piste sans fin, un espace et puis la piste. Après quelques essais à tenter de placer la pointe au bon endroit – sans succès -, j’ai trouvé une solution : la placer au niveau de la piste sans fin, la relever et la décaler manuellement d’une pichenette pour qu’elle se place sur la piste de données. C’était fastidieux, mais j’ai obtenu un enregistrement.

On voit bien l’espace entre les deux pistes

Ensuite, l’exploitation des données a été compliquée. Les différents outils que j’ai tenté d’utiliser pour décoder le contenu ne marchaient pas. Plus exactement, ils décodaient éventuellement le début, mais c’est tout.

Après une analyse basique du fichier audio, je me suis rendu compte que j’avais des trous dans l’audio. Je ne sais pas si ça vient de mon enregistrement, de mon disque ou du pressage, mais c’était embêtant. J’ai essayé de supprimer les silences, mais sans réel succès. J’ai tenté de refaire des enregistrements, de nettoyer le disque, mais là encore… rien. Après l’équivalent d’une journée de boulot dessus, j’ai abandonné et jetté une bouteille à la mer. Sur le coup, c’est assez rare que des enregistrements résistent : sur la trentaine de vinyles, j’en ai deux ou trois dans le cas et c’est tout, sans que je sois certain qu’ils contiennent des données cohérentes.

Mais la bouteille à la mer a fonctionné : Anton, auteur de WAV2CAS, a pu m’aider et je le remercie vraiment. Il a d’abord noté les mêmes problèmes que moi, des trous dans le flux audio. Mais il a eu une idée que je n’ai pas eu : il a pris la version décodée et a décalé les bits dans un éditeur hexadécimale en supposant que les trous ne contenaient pas de données. Visiblement, après quelques décalages, il a obtenu du code BASIC lisible. Il a ensuite corrigé quelques erreurs de typographie dans le code, probablement liées au décodage, et m’a fourni un fichier CAS utilisable.

L’émulation

Pour l’émulation, je pensais que le programme utilisé pour le Dragon 32 fonctionnerait. Avec Xroar et les ROMs, on peut émuler le TRS-80… mais le modèle CoCo. Pas celui dont j’ai besoin. J’ai donc utilisé le même programme qu’Anton : TRS80GP. Il a le bon goût de fonctionner sur Mac, ce qui me simplifie la vie. Après quelques errements parce que je ne connais pas la machine (il démarre sur son propre DOS par défaut dans l’émulateur), j’ai lancé le programme en ligne de commande. Il faut récupérer l’excéutable dans le package (/trs80gp.app/Contents/MacOS/trs80gp) et simplement mettre le fichier .cas en argument.

Le programme lui-même est très simple : c’est un jeu textuel en BASIC. Je vous mets les captures des différents tableaux, mais il n’y en a pas beaucoup…

L’ouverture


Le choix 3 : perdu


Le choix 1


1 et 4 donnent la même réponse (ce qui n’est pas logique).

Au vu du code BASIC, il y a probablement une erreur de décodage dans la logique (ou une erreur dans le programme) : a priori, les choix 3 et 4 doivent renvoyer vers une erreur. De même (je ne l’ai pas corrigé), c’est probablement EXISTENTIAL plutôt que EXMSTENTIAL.

Il manque probablement un IF D = 1 THEN à la ligne 170

Mais dans l’ensemble, on comprend ce que doit faire le programme (encore merci Anton).

Le dernier point, c’est que le texte tend à indiquer qu’il y a un Information Retrieved Pt. C mais je n’ai pas trouvé d’informations sur le sujet. La partie A contient aussi visiblement des choses, mais je n’ai pas encore récupéré le disque.