Une cartouche Memo7 DIY pour le TO7/70
Dans l'article précédent sur le TO7/70, j'expliquais que le réglage du magnétophone était assez pointu, et qu'il existe une cartouche "Autotest-1" qui permet d'aider à faire ce réglage. Sauf que cette cartouche est à peu près introuvable !
En revanche la ROM est disponible sur Internet (pour les émulateurs), et du coup il est tentant de retransformer ça en objet physique pour l'utiliser sur la vraie machine, mais comment faire ?
Sur le forum System CFG on trouve ici https://forum.system-cfg.com/viewtopic.php?f=18&t=2851 un thread expliquant comment faire les cartouches de 32Ko, avec un système de commutation de banque. Ce que je veux faire est plus simple car la ROM dont j'ai besoin ne fait que 16Ko. En fait cela se résume à brancher une EPROM sur le connecteur cartouche !
Sur le connecteur on trouve le bus de données (8 bits), 14 bits de bus d'adresse (de quoi gérer 16Ko), et le Chip Select signalant que l'ordinateur veut lire quelque chose dans la cartouche. Du coup le schéma se résume à peu de choses :
Pour la réalisation du PCB j'utilise KiCAD, qui est un logiciel libre fonctionnant sur Windows/Mac/Linux et qui n'a pas grand chose à envier aux logiciels pros !
Comme je ne voulais pas faire une commande en ligne pour un petit circuit comme cela, j'ai fait un PCB simple face (avec quelques straps)
La réalisation du circuit
Vous pouvez commander le circuit chez votre fournisseur préféré ou bien le réaliser vous-même !
Si vous le commandez en ligne, faites bien un circuit double face, les straps deviendront le dessin des pistes côté composants. Je vais faire prochainement un article sur la réalisation d'un circuit imprimé en prenant cette carte pour exemple.
Le câblage est très simple, quelques straps (en fil pas trop fin, c'est plus joli), un support 28 broches "tulipe" et un petit condensateur de 100nF :
Le boitier
Le circuit tout seul ne va pas tenir dans le lecteur de cartouche, il faut un boitier autour pour que cela corresponde mécaniquement à l'original.
Un raccourci possible est de coller un rectangle d'épaisseur 3mm (plastique) sur le dessus du circuit sur l'équivalent de toute la longueur et largeur du connecteur. Cela permet d'avoir quelque chose qui fonctionne à peu près, mais qui manque un peu d'élégance !
J'ai fait un peu plus compliqué pour approcher les dimensions d'une vraie cartouche, avec quelques pièces en plexiglass découpés au laser :
Voici à quoi ressemblent les différentes pièces :
Il faut coller les 4 pièces en longueur sur la partie centrale (le résultat ressemble à une petite table) et fraiser les 2 percements sur la plaque supérieure.
L'ensemble tient avec 2 vis M3 à tête fraisée (Attention à ce que les vis ne dépassent pas en dessous de la cartouche ! La cartouche posée sur une surface plane, les vis ne doivent pas toucher cette surface)
J'ai fait également un fichier pour l'impression 3D, c'est la même chose avec les éléments fusionnés pour arriver à 2 pièces à imprimer :
Sur le lien Github en bas de l'article il y a les fichier FreeCAD pour les 2 versions et le fichier dxf que j'ai utilisé pour faire la découpe.
La programmation de l'EPROM
J'ai trouvé une liste d'images ROM qui me semble assez complète ici : http://dcmoto.free.fr/programmes/_html/support_memo7.html
Les fichiers compatibles avec cette cartouche sont ceux qui font 16Ko une fois décompressés, soit la majorité d'entre eux (Exceptions notables BASIC 128 et Colorcalc, il y en a peut être d'autres).
Pour programmer l'EPROM j'utilise un programmeur MiniPRO TL866 (trouvable pour quelques dizaines d'euro chez AliExpress).
L'EPROM à utiliser est une 27c128, mais on peut aussi utiliser une 27c256 (32Ko), en mettant les 16Ko dans la deuxième moitié de la mémoire. On peut aussi utiliser une EEPROM (par exemple AT28c256) si on veut éviter d'avoir à effacer le contenu aux UVs.
Il ne reste plus qu'à mettre l'EPROM dans son support (dans le bon sens !) et vérifier si ça marche !
Pour aller un peu plus loin
Voici à quoi ressemble l'organisation mémoire du TO7/70 :
La cartouche utilise la plage d'adresses 0000-3FFF (16Ko). Le processeur étant un 6809, la ROM est à l'autre bout du plan d'adressage (E800-FFFF). Après un RESET le processeur lit l'adresse stockée en FFFE-FFFF et fait un saut à cet endroit.
Comment est faite la cartouche ? Si on regarde le contenu sur un exemple (Forth-79), cela commence comme cela :
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0000 20 46 4F 52 54 48 2D 37 39 20 20 53 2E 45 2E 46 FORTH-79 S.E.F 0010 2E 49 2E 20 31 2E 30 04 00 00 67 FF 00 9D 00 64 .I.1.0...gÿ...d
On voit un caractère espace en $0000, le texte que l'on voit sur le menu (FORTH-79 S.E.F.I. 1.0) suivi du caractère 04 (EOT), quelques zéros et autre chose à partir de $001A.
J'ai essayé de faire une "fausse" cartouche en mettant un texte terminé par le caractère 04 au début d'un fichier vide de 16Ko. Ca n'a pas marché. Il doit donc y avoir autre chose à faire ...
J'ai désassemblé la ROM du TO7 et j'ai trouvé ce morceau de code, que j'ai remis en forme pour qu'il soit plus lisible :
; Calcul somme de controle 0000 a 0019 cartouche MEMO7 LDB #$55 ; B <- $55 LDX #Z0000 ; X <- $0000 MEMO7SUML ADDB ,X+ ; B += *X++ CMPX #$001A ; *X == $001A ? BCS MEMO7SUML ; Non -> Loop CMPB ,X ; B == *X ? BNE ZFA70 ; Non -> Pas de cartouche MEMO 7
Donc à l'adresse $001A on trouve la somme du contenu des adresses à $0000 à $0019 , auquel on ajoute $55.
Si on essaie avec la cartouche Forth : 20+46+4F+52...+2E+30+04 on obtient 567 (hexa). L'octet de poids faible est 67, la même chose que l'on retrouve à l'adresse $001A ! Si la somme de contrôle est correcte on a un affichage sur le menu de démarrage.
L'octet suivant permet d'afficher le menu '2' (Cassette) si il vaut FF, ou non si il vaut 00 (cela doit être un peu plus subtil que cela, il doit y avoir un bit pour les cassettes et un autre pour les disquettes)
Un peu plus loin dans la ROM du TO7 on voit ces 2 lignes :
JMP [$001C] ZFAE5 JMP [$001E]
En fouillant un peu sur la cartouche Forth, on voit que cela correspond aux adresses de début du programme du menu 2 et du menu 1.
Fort de toutes ces infos, il y a de quoi créer une petite cartouche de test, dont voici le code :
; Hello Memo7 ORG $0000 FCC " HELLO MEMO7" FCB $04 ORG $001A FCC $72 ; somme contenu $0000 à $0019 + $55 FCC $FF ; menu cassette visible FCB $00,$20 ; adresse menu 2 FCB $00,$20 ; adresse menu 1 ORG $0020 MAIN BSR HELLO LOOP BRA LOOP HELLO LDX #STR HELLO1 LDB ,X+ BNE HELLO2 RTS HELLO2 JSR $E803 ; PUTC BRA HELLO1 STR FCC $0C ; clear screen FCC "Hello World !" FCB $0D,$0A FCB $00
Une fois assemblé et l'ordinateur démarré, le menu apparait :
Et en choisissant le menu 1, le programme s'exécute :