RetroChallengeRetry, 2020/04

Sommaire: M'amuser avec un ordinateur MSX

Vers la fin du mois de Mars 2020, lors d'une de mes visites périodiques à un magasin Hard Off (une chaîne japonaise vendant, entre-autre, du matériel électronique usagé), je suis tombé par hasard sur un ordinateur MSX fabriqué par Sony, modèle HB-10. Il n'était pas testé, mais il était physiquement en bon était et le prix semblait raisonnable alors j'ai décidé de l'acheter.

L'ordinateur Sony HB-10 que j'ai acheté

L'ordinateur Sony HB-10 que j'ai acheté



Je ne connais strictement rien aux ordinateurs MSX. C'était très peu commun il me semble là où j'ai grandi au Canada. Je soupçonne que ce type d'ordinateur a connu beaucoup plus de succés au Japon et en Europe... Quoi qu'il en soit, je suis curieux et le Retro Challenge Retry est la parfaite occasion pour passer du temps à faire fonctionner cet ordinateur Sony HB-10 et à me familiariser avec l'écosystème MSX.

Une fois que mon MSX sera fonctionnel (sans trop de difficultés j'espère) mon premier objectif sera de jouer à un certain jeu qu'un développeur que je suis sur Twitter (@reidrac) a récemment terminé de créer. Ce nouveau jeu MSX qui semble vraiment très bien est nommé Uchūsen Gamma. Voici quelques screenshots:



Petite inspection visuelle

Il ne manque aucune touche au clavier. Restera à faire un bon nettoyage plus tard.



Il y avait de légères traces d'oxydation sur les connecteurs, en particulier sur la sortie RF.



Mais sinon l'intérieur était en parfait état, sauf un peu de poussière.



Alimenter la bête!

L'ordinateur était vendu sans câbles et sans bloc d'alimentation. L'absence de bloc d'alimentation était d'ailleur l'excuse du magain pour ne pas avoir testé cet item. J'allais donc devoir me débrouiller pour l'alimenter.

Selon l'étiquette du dessous, il faudrait fournir 6V DC et 16V AC...


Je n'avais rien sous la main pour fournir ces tensions alors je me suis demandé, cette machine fonctionne surement avec 5v DC à l'interne... Puis-je simplement injecter 5v DC? Pourquoi la machine demande-t-elle une alimentation 16v AC? Quel usage en fait-elle?

Pour répondre à ces questions, j'ai consulté le manuel de service d'un modèle similaire qui était disponible sur Archive.org. Ce manuel n'est pas exactement le bon, j'ai la version japonaise HB-10 alors que ce manuel est pour les modèles HB-10P (Europe) et HB-10B (Angleterre). Mais selon cette page concernant la série HB-10 du Wiki MSX, les différences seraient surtout au niveau du clavier et des connecteurs Audio/Vidéo.

(https://archive.org/details/sonyhb10p10bsm/mode/2up)

Alors, voici à quoi servent ces alimentations:

  • 6V DC: Tension abaissée à 5V DC à l'aide d'un régulateur 7805.
  • 16V AC: Utilisé pour générer 12V et -12V à l'aide de régulateur 7812 et 7912.
    • 12V: Présent sur le port de cassette dans les fentes pour cartouche.
    • -12V: Présent sur les fentes pour cartouches.
Je n'ai trouvé aucun endroit sur la carte mère où les alimentations 12 et -12v sont utilisés. Je prévois me servir du port de casstte, mais il sera branché à la sortie audio d'un PC. Je n'utiliserai pas le 12v. Je ne possède pas encore de cartouches, mais je soupçonne que la plupart fonctionnent avec 5v seulement.

Conclusion: Pour le moment, je peux me contenter d'injecter 5v, car je n'utiliserai pas les tensions +12,-12, et l'alimentation 6V brute (avant d'être abaissée à 5v) ne sert pas. Je ferai peut-être mieux plus tard, mais pour l'instant, j'ai simplement soudé un câble USB à la sortie du régulateur...



J'ai raccordé l'ordinateur à un écran PVM de Sony (très approprié, même marque que le PC) et j'ai branché le câble USB... Et l'ordinateur semble fonctionner à merveille!



Toutes les touches du clavier fonctionnent bien! Je me suis amusé à coder un petit programme Hello, World! en BASIC.



J'ai eu de la chance, l'ordinateur ne semble pas avoir besoin de réparations! Je suis un peu déçu, un petit déboggage de carte mère, un remplacement de CPU ou de mémoire (pièces qui sont soudées) aurait été un petit défi amusant à relever, mais bon...

Prochaine étape: Charger le jeu Uchūsen Gamma!


Uchūsen Gamma

Uchūsen Gamma est distribué sous forme de fichier ROM (cartouche) et fichier CAS (cassette). Mon plan était de charger le jeu par le port de cassette de l'ordinateur en le raccordant à la carte de son de mon PC. Pour cela, il me fallait un câble! Comme je n'avais le bon type de connecteur DIN sous la main, j'ai simplement utilisé des fils. Les pièces pour faire un câble plus propre sont en commande...

Connecteur audio et fils

Connecteur audio et fils

Fils dans le connecteur DIN

Fils dans le connecteur DIN



Pour transformer le fichier .CAS en son, j'ai utilisé le projet MSX CAS Packager qui permet d'obtenir un fichier .WAV.



J'ai passé le fichier .WAV à VLC, tapé load"cas:",r sur le MSX et appuyé sur PLAY dans VLC. Quelques secondes plus tard, les mots "Found:ugamma" sont apparus à l'écran. Très bon signe!



Mais il était trop tôt pour crier victoire. Car peu de temps après....



Mais je croyais que Uchūsen Gamma était un jeu pour MSX avec 16k de RAM.. J'avais mal lu la page du jeu. La version cassette demande 64k... C'est logique, car après tout, s'il n'est pas en ROM, le code du jeu doit être chargé en mémoire...

Bon, alors mon modèle de MSX n'a que 16k de mémoire. Dans la série HB-10, seul le modèle japonais (le mien) a 16k de mémore. Tous les autres modèles ont 64k. Vraiment pas de chance... Il n'y a qu'une chose à faire: Ajouter de la mémoire et réessayer!


Extension de mémoire

Selon les informations disponibles sur le wiki MSX concernant la série HB-10, le modèle HB-10 comporte 16k de mémoire dans la SLOT 0 alors que tous les autres modèles (HB-10P, HB-10B, HB-10D) auraient 64k dans la SLOT 3.

Je vais tenter deux approches pour augmenter la mémoire de mon HB-10.

  1. Fabriquer une cartouche de mémoire. Il suffira de l'insérer dans une des deux fentes pour ajouter 64k de mémoire vive au système.
  2. Modifier la carte mère pour avoir 64k de mémoire.
Les pièces pour les deux approches sont déjà en commande et arriveront vers la fin du mois.

J'ai bon espoir pour la modification de la carte mère. En ce moment, deux puces TMS4416 (IC10 et IC11) sont installées. On remarque tout de suite les inscriptions sur le circuit imprimé 4416(N) et 4464(P). Je pense que N est pour NTSC et P pour PAL. Dans le contexte du HB-10, sachant qu'il a été vendu au Japon et en Europe, NTSC = Japon, PAL = Europe, et qui dit Europe dit 64k! Le plan est donc de remplacer les deux TMS4416 par des TMS4464 et faire les autres modifications qui s'imposeront. Par exemple, en regardant la carte, je peux voir d'autres composants optionnels identifiés par (N) et (P), notammant R61 et C43.



Je n'ai pas le manuel de service Japonais, mais j'ai celui de la version européenne qui provient de archive.org. Le schéma du circuit de mémoire me sera surement très utile pour comprendre les modifications!




Câble de cassette

La pièce qui me manquait pour fabriquer un câble de cassette, un connecteur DIN à 8 broches, est arrivée!

Les composants

Les composants

Câblage

Câblage

Câblage

Câblage

Et voilà!

Et voilà!



Câble branché

Câble branché



BASIC 10-liners et KansasEncoder

En attendant les pièces pour augmenter la mémoire de mon MSX, j'ai eu l'idée d'essayer des jeux du concours annuel de programmation BASIC en 10 lignes (Basic 10 liner contest). Pour ne pas avoir à les taper, je les charge par le port de cassette!

Pour convertir le programme en son, j'utilise un petit outil tout à fait génial qui tourne à même un navigateur web: KansasEncoder for MSX. Il suffit de copier-coller le texte du programme dans la boîte et d'appuyer sur Play après avoir tapé Load"cas:" sur le MSX!

À titre d'exemple, voici un jeu que j'ai beaucoup apprécié dans le concours 2019 (Il a remporté la huitième place)
Ballistic Challenge!

Je récupère d'abord le code...
Le code de Ballistic Challenge sur github

Le code de Ballistic Challenge sur github



Je le recopie dans KansasEncoder...
Le code dans KansasEncoder

Le code dans KansasEncoder



Je tape load"cas:" sur le MSX, j'appuie sur Play dans KansasEncoder, et quelques instants plus tard...


Et hop! Le jeu tourne sur mon MSX!




Voici un autre jeu vraiment pas mal pour seulement 10 lignes, SuperFish! (Celui-ci a remporté la quatrième place du concours)

Le jeu dans KansasEncoder..

Le jeu dans KansasEncoder..

Et il tourne sur mon MSX!

Et il tourne sur mon MSX!



Cartouche mémoire 64KB

J'ai finalement reçu les pièces pour me fabriquer une cartouche permettant d'ajouter 64 kilo-octets à ma machine MSX qui n'en a que 16. J'ai conçu un petit circuit imprimé utilisant une puce SRAM de 128KB. La raison pour l'emploi d'une puce SRAM du double de la taille requise est que je voulais utiliser des pièces neuvent, et malheureusement le choix est limité de nos jours...


Schéma

Alors bon, voici d'abord le schéma:



Lors de la conception, j'ai fait mon possible pour suivre les conseils disponibles sur le Wiki MSX à https://www.msx.org/wiki/Hardware_Design, du moins ceux qui me semblaient applicables à ma situation. En particulier, je me suis assuré d'utiliser une SRAM compatible TTL et pour faciliter des modifications et expériences futures, j'ai bien exposé tous les signaux du connecteur de cartouche.


Circuit imprimé

Le circuit imprimé est aux dimensions des circuits de type Konami.

Circuit imprimé

Circuit imprimé

Assemblé et installé

Assemblé et installé



Vous en voulez un tout fait?

Conformément à mon habitude, j'en ai fabriqué plusieurs et ils sont en vente sur raphnet-tech.com



Test 1

Le premier test que j'ai fait était de vérifier si BASIC voyait la mémoire supplémentaire. Et oui, la mémoire libre passe de 12431 octets à 28815 octets!

Avant...

Avant...

Carte insérée...

Carte insérée...

Et après!

Et après!



Seulement 28815 alors que je viens d'ajouter une cartouche de 64kB? C'est normal. L'unité centrale peut accéder un espace de 64k, et 32k sont d'entrée de jeu occupés par le ROM qui contient le code du BIOS et BASIC. Comme BASIC utilise un peu de mémoire RAM également, des 32768 octets de mémoire ne restent que 28815 octets.

Voir le Wiki MSX: I have 64kB of memory, but BASIC only reports 28xxx Bytes free



Test 2

BASIC ne touchant qu'à 32kB de mémoire, j'ai eu recours à un autre outil conçu pour examiner le contenu des différentes "slots" dans le système. Il s'agit de TINY SLOT CHECKER par Tiny-yarou. http://www.tiny-yarou.com/slotchecker.html

Le .zip de cet outil contient plusieurs version de l'outil, dont une version cassette au format .WAV bien pratique pour moi. Suffit d'utiliser VLC et le câble de cassette que j'ai fabriqué.

Test avec Tiny Slot Checker

Test avec Tiny Slot Checker



On voit ci-dessus que Tiny Slot Checker détecte de la mémoire dans slot 1 (fente pour cartouche de gauche), et c'est bien là où j'ai inséré mon extension de mémoire. La page 3 de slot 0 est la mémoire vive interne, et c'est de là que l'outil s'exécute. La version mémoire vive (contrairement à la version cartouche) de Tiny Slot Checker ne peut pas inspecter la page 3, ce qui explique les cases vides...


Test 3

J'aurais aimé faire un test avec un outil spécialement conçu pour tester la mémoire vive, mais je n'ai pas trouvé un tel outil en format cassette... alors il ne restait qu'un chose à faire: Réessayer de jouer à Uchūsen Gamma! Cette fois avec 64k de mémoire, il ne devrait pas y avoir de problèmes!

Eh oui, après quelques instants, plutôt qu'un message comme quoi il n'y a pas assez de mémoire, un écran de chargement est apparu! Et environ 5 minutes plus tard, le jeu était lancé!

Écran de chargement

Écran de chargement

Enfin le jeu!

Enfin le jeu!

Enfin le jeu!

Enfin le jeu!



J'espère bientôt (les pièces sont commandées) pouvoir remplacer ma cartouche d'expansion de mémoire par une modification internel de la machine qui consistera à remplacer les deux puces 4416 par une paire de puces 4464 (plus quelques modifications qui s'imposent). Comme ce sera amusant!

Mais en attendant, je vais jouer à quelques jeux et peut-être faire un adaptateur de joystick...

À suivre...


Fin du RC2020/04 et suite

J'ai tenté de modifier ma machine pour y intégrer directement 64k de mémoire vive en remplaçant les puces 4416 par des 4464 et en modifiant l'emplacement de plusieurs fils et résistances, selon les indications (P) et (N) sur la carte mère, mais malheureusement j'ai échoué. Et le RetroChallenge a pris fin.

J'ai toutefois continué (et continuerai probablement très longtemps) de jouer avec mon MSX, et le tout sera documenté dans les sections suivantes.


PCB ROM 64k (48k)

Le temps de chargement des jeux par le port cassette est un peu long, je dois patienter 5 minutes chaque fois que j'ai envie de jouer à Uchuusen gamma! Pour régler ce petit problème, j'ai décidé de concevoir un petit circuit imprimé simple permettant d'utiliser un EPROM de 64k. Les dimensions et l'emplacement des trous permettent au circuit d'être installé dans un boîtier de style Konami.
Le circuit imprimé, côté pièces

Le circuit imprimé, côté pièces

Le circuit imprimé, côté soudure

Le circuit imprimé, côté soudure





Il s'agit d'un câblage direct utilisant le signal SLTSL (Slot select). L'entièreté de la slot où le circuit est inséré est donc occupée par l'EPROM. Naturellement, seulement 48k risquent d'êtres utilisables, puisqu'il faudra normalement garder une page de mémoire vive active. (J'ai quelques idées de techniques de programmation qui pourraient permettre de contourner cet obstacle, en particulier sur un MSX ayant au delà de 16k de mémoire vive, mais j'ignore s'il existe des logiciels qui font ce genre de chose)

Lorsqu'on programme un EPROM pour un jeu ou outil de moins de 48k, disons 16k par exemple, il faut programmer les adresses correspondant à la page 1, c'est à dire les addresse 4000 à 7FFF. Il est aussi possible d'utiliser un EPROM plus petit que 64k, par exemple 32k, mais puisque mon circuit utilise le signal de SLOT SELECT, le contenu du ROM sera répété (les pages 0 et 2 seront identiques, de même que les pages 1 et 3).

Selon la taille du fichier ROM à programmer et la taille de l'EPROM utilisé, le tableau ci-dessous indique à quelle addresse le contenu du fichier devrait être programmé dans l'EPROM:
Fichier 16k Fichier 32k Fichier 48k Fichier 64k
EPROM 32k 4000-7FFF Fichier 0000-3FFF -> EPROM 4000-7FFF
Fichier 4000-7FFF -> EPROM 0000-3FFF
- -
EPROM 64k 4000-7FFF 4000-BFFF 0000-BFFF 0000-FFFF (non testé)
Il pourrait y avoir des exceptions. Je n'ai pas encore fait beaucoup de tests.

Il y a une petite complication pour le cas d'un fichier 32k sur EPROM 32k. Si le contenu est destiné aux pages 1 et 2 et est stocké dans cet ordre dans le fichier, la machine verra ce contenu dans les pages 0 et 1 (et répété dans les pages 2 et 3) - autrement dit, les pages ne seront pas dans le bon ordre! Pour remédier à cela, il faut soit modifier le fichier pour inverser les deux blocs de 16k, soit programmer en deux passes, configurant à chaque étape l'adresse source et l'adresse de destination à être utilisées par le programmeur d'EPROM. C'est ce que j'ai fait quand j'ai testé Cold Blood.

Voici les jeux et les puces que j'ai testés jusqu'à présent:
Jeu/outil Taille du fichier EPROM ou Flash utilisé Programmation
Uchūsen Gamma 48k 64k OTP EPROM (Atmel AT27C512R) 0000-BFFF
Tiny slot checker 16k 32k EEPROM (Winbond W27E257) 4000-7FFF
Cold Blood 32k 32k EEPROM (Winbond W27E257) File 0000-3FFF -> EEPROM 4000-7FFF
File 4000-7FFF -> EEPROM 0000-3FFF
Cold Blood 32k 64k EPROM (TMS27C512) 4000-BFFF
Voici quelques photos démontrant quelques utilisations:
Avec EPROM AT27C512R

Avec EPROM AT27C512R

Avec un socket

Avec un socket

Avec un EEPROM dans un socket

Avec un EEPROM dans un socket



Il vous en faut un?

Ce circuit est disponible dans la boutique en ligne raphnet-tech.com.


Manette de jeu

Il est normalement possible de jouer par le clavier, mais je préfère tout de même utiliser une manette. Mon MSX est doté de deux ports de manette sur le côté droit. Il s'agit de connecteurs à 9 broches genre DE-9 comme on retrouve sur l'Atari 2600, le Commodore 64, la Sega Master system, la Megadrive (et bien d'autres).

J'ai branché une manette pour Master System pour voir, et cela semblait fonctionner. Mais je me suis rapidement rendu compte qu'il manquait quelque-chose: Un seul bouton fonctionnait!

Quelques minutes plus tard, j'avais trois tableaux devant les yeux et comparait le câblage des ports SMS, Megadrive et MSX.

BrocheMSXSMSMegadrive
1Haut Haut Haut
2Bas Bas Bas
3Gauche Gauche 0 / Gauche
4Droite Droite 0 / Droite
5+5v +5v
6Bouton 1 Bouton 1 Bouton A / Bouton B
7Bouton 2 SELECT
8Sortie(OUT) GND GND
9GND Bouton 2 Bouton C


La manette de SMS est câblée pour que le GND soit sur la broche 8 alors que la broche 8 sur MSX est une sortie pouvant être contrôlé par le logiciel. Par défaut, la sortie est à un niveau logique bas (plus ou moins équivalent à GND), c'est pourquoi la manette de SMS fonctionne partiellement. Mais aucune chance pour le bouton 2.

SMSMSX Fonction
1 1 Haut
2 2 Bas
3 3 Gauche
4 Droite
5 5* Alimentation 5 volt (utilisée par les manettes Megadrive)
6 6 Bouton 1
7 Non câblé
8 9 GND
9 7 Bouton 2

Je me suis demandé si je devais relier la broche MSX 8 (OUT) à la broche SELECT pour les manettes Genesis. Mais le signal OUT étant par défaut à un niveau logique bas, les directions Gauche/Droite n'aurait pas fonctionnés, et les boutons fonctionnels auraient été Start et A.

J'aurais pu utiliser un inverseur, comme le fait le projet JoyMega, ce qui a comme avantage de permettre l'utilisation des boutons supplémentaires des manettes Megadrive avec certains jeux et outils. Mais comme je ne voulais qu'une manette avec deux boutons fonctionnels et un D-pad confortable pour jouer, j'ai câblé mon adaptateur selon le tableau ci-dessus.

L'adaptateur que j'ai construit

L'adaptateur que j'ai construit

En utilisation sur mon Sony HB-10 et une manette pour SMS

En utilisation sur mon Sony HB-10 et une manette pour SMS




Vous en voulez un tout fait?

Conformément à mon habitude, j'en ai fabriqué plusieurs et ils sont en vente sur raphnet-tech.com