MEMO5 Multirom


Menu Bricolages


Une cartouche regroupant toutes les cartouches MO5 existantes et même plus.
Tout ceci avec un menu de sélection intégré.
 

Au commencement il s'agissait de recréer les cartouches MEMO5, parce que les cartouches originales sont devenues très rares à trouver.

Tracé d'un PCB reproduisant les MEMO5 originales, et après les tests fonctionnels, je me suis dit pourquoi pas créer une cartouche regroupant tous les softs MEMO5.

Donc création d'un prototype multirom.





Premier test avec une 27512 partitionnée en 4 banques, ça fonctionne impeccablement.

Techniquement c'est très simple :
J'utilise un CPLD pour décoder l'adresse $A8FF et paginer sur l'EEPROM.
Cela permet de réduire le nombre de composants et donc la taille de la carte.

Je suis loin d'être un expert et de tout maîtriser, mais j'arrive à réaliser ce dont j'ai besoin.

Quand j'ai découvert les CPLD j'utilisais la partie schématique, ça fonctionne très bien mais demande beaucoup plus de temps.
Ensuite j'ai commencé à me former au VHDL et maintenant je l'utilise plus facilement surtout lorsqu'il s'agit de seulement décoder et paginer sur une eeprom.

J'ai donc programmé le CPLD avec du code VHDL.

C'est très simple, il suffit de commencer par déclarer les signaux utiles, qui seront évidemment connectés au I/O du CPLD.

Dans le cas présent on a besoin des ADRESSE, des DATA, du signal E, du signal RW et des signaux que j'ai nommé PAGE pour paginer sur l'eeprom, bien entendu il faut indiquer si ce sont des signaux IN, OUT ou INOUT et leur format.
On aurait pu tout aussi bien pour les adresses et datas déclarer un à un les signaux A0,A1,A2 ... D0,D1.. mais ce serait vraiment trop long et inutile.
La partie déclaration des divers signaux :
--  MO5 Multirom
-- (c) 2021 by 6502man
--
--
entity MO5_MultiRom is
    PORT (
            adrs          : in  std_logic_vector(15 downto 0);    -- [A15-A00}
            data            : inout  std_logic_vector(4 downto 0); -- [D4-D0]
            E                : in  std_logic;
            RW                : in  std_logic;
            page            : out std_logic_vector(4 downto 0)
        );
end;
Après les déclarations il nous faut passer par la partie principale, qui consiste à décrire le comportement du CPLD.

Une simple ligne de code suffit à décoder l'adresse et réalise la pagination sur l'EEPROM.
Le corps principal du programme :
architecture behavioral of MO5_MultiRom is

begin
page <= data when ((adrs = x"A8FF") and (RW = '0') and  (E = '1')) ;
end behavioral;

Imaginez la version schématique de ce code VHDL et vous comprendrez l'avantage d'utiliser la version codée en VHDL ;)


Puisque le prototype est fonctionnel, l'étape suivante est de créer un PCB définitif.

L'objectif est de réaliser un PCB le plus compact possible, avec seulement 2 composants mais cela nécessite beaucoup de pistes partagées avec le bus MO5 pour les 16 adresses et 8 datas.

Il y a aussi 2 condensateurs CMS placés de l'autre côté du PCB.

Finalement, le PCB est légèrement plus grand que les MEMO5 16Ko originaux.

Un aperçu de la taille des PCB comparativement à l'original (au milieu):


Ensuite il me faut programmer un menu pour le MO5.
Je choisis de faire une sélection par menu, classée par type de logiciel, jeux, educatif, langage,...

Avec une petite animation de couleurs ;)

Le catalogue complet des cartouches MO5 existantes est inclus sur l'EEPROM (29) et j'y ajoute 2 jeux que j'ai converti pour l'occasion en version trainer   :)



Comme je trouve que le nombre de jeux en version cartouche est très limité, je me lance dans la conversion de plusieurs jeux k7 en version ROM 16Ko.
La première difficulté est la taille limitée de la cartouche (16 Ko), ensuite le plus compliqué est de trouver l'adresse d'entrée du programme assembleur.
Comme beaucoup de jeux utilisent les 32Ko de RAM, il m'a fallu compresser les données pour pouvoir les stocker dans les 16Ko de ROM, pour ça j'utilise exomizer, et pour la décompression j'ai repris le code du groupe PULS fourni avec exomizer, merci à eux.
Ensuite certains jeux chargent un "décor" écran avant le jeu et donc situé en RAM vidéo (2 x 8ko) il m'a fallu là aussi ruser pour pouvoir rentrer tout ça dans les 16ko et encore une fois compresser 8Ko (le résultat est très bon sur les données images).
Tout en ayant seulement 16Ko au total pour chaque ROM donc le programme +  les données écrans (pour quelques jeux) c'est très très juste mais j'y suis arrivé.
Et pour finir je me suis dit pourquoi pas faire une version trainer pour certains jeux (cela me rappelle ma grande époque C64), je n'ai d'ailleurs rien trouvé sur le net concernant des versions avec vies infinies ou autre pour les jeux Thomson !!!
L'émulateur DCmoto m'a bien aidé dans toutes ces tâches, encore merci à Daniel pour ces excellents émulateurs.


Pourquoi ne pas proposer un utilitaire qui nous permettra de réaliser notre propre sélection de ROMs.

J'ai donc créé un petit programme windows nous permettant de sélectionner jusqu'à 31 logiciels ROMs en incluant un menu qui sera adapté à notre sélection.

Une fois la sélection terminée on peut créer un fichier eeprom qu'il suffit de graver sur l'eeprom W27C040 de la cartouche MULTIROM, et ensuite il ne nous reste plus qu'à profiter de ces logiciels sur notre MO5.

Attention : les fichiers à utiliser ne sont pas les ROM que l'on trouve sur internet, mais le format doit être celui des EPROMs, que vous pouvez trouver plus bas sur cette page.

Cet utilitaire intègre un menu pour sélectionner les 31 ROMs, il sera évidemment inclus dans le fichier EPROM produit et chaque choix contiendra le nom de la ROM, comme présenté dans l'utilitaire réparti en 3 pages.



Pour finir voici 2 vidéos vous présentant le fonctionnement de cette cartouche MEMO5 MULTIROM :




Conclusion:
Ça a été l'occasion encore une fois de mettre en œuvre un CPLD sur nos vieux micros :)

Et je dois dire que j'ai quand même été surpris que mon prototype avec des fils volants fonctionne du premier coup.
Je m'attendais à débugger à coup d'oscillo et d'analyseur logique, mais non même pas un faux contact  :)

J'aurais pu très simplement rajouter 512Ko de RAM et d'autres fonctionnalités sur la cartouche assez facilement, il reste des I/O de libres, mais ce sera pour un autre projet ;)

Et puis comme aucun soft n'utilise ni l'extension de RAM ni d'autres fonctionnalités, ça n'aurait pas servi de toute manière.


Pour ceux qui sont intéressés je peux fournir :
PCB MEMO5 :

KIT MEMO5 MULTIROM :
- PCB
- EEPROM W27C512 (vierge)
- condensateur 100nf

- PCB
- support PLCC 44 et 32
- CPLD et EEPROM programmés
- 2 condensateurs 100nf


How to assemble the kit:



- Les ROMs au format EPROMs à graver directement sur un PCB MEMO5:
 






- Le gestionnaire pour réaliser sa propre sélection de ROMs à utiliser avec les fichiers EPROMs:


- Les fichiers STL pour imprimer un boitier spécifique pour la cartouche multirom:
Merci STOUF49




Pour d'éventuelles questions vous pouvez consulter le forum  :


Liste des softs disponibles au formats EPROMs utilisables sur MO5 et MO6* :
Les cartouches originales:
les conversions

  • airbus
  • blitz
  • choplifter
  • controle aerien
  • enigmatika
  • gemini
  • glouton
  • kandy krush Java
  • miner 2049er
  • motus
  • threshold
  • trap
  • tridi 444
  • la grille
  • la maison d'amedee
  • la peche a la barre
  • melimemot
  • assembleur 6809-1.0
  • assembleur 6809-v3
  • logo
  • agenda
  • carnet d'adresses
  • file manager
  • gerez vos fiches
  • portefeuille boursier
  • scriptor
  • pictor
  • melodia
  • videotex interactif
  • ANDROIDES
  • ARKANOID +
  • ATOMIK
  • BASIC PLUS
  • BRAINPOWER
  • CRYSTANN
  • DAMES et  ROGER PAULO
  • DEMONIA
  • DIANNE
  • DOS UTILITY
  • ELIMINATOR
  • ENDURO RACER
  • FLIPPER
  • FOX
  • INVASION
  • KARATE
  • KRAKOUT +
  • METEO7 et SCRONTCH
  • MINE AUX DIAMANTS +
  • MINOTAURE 3D
  • POPNPOP
  • PULSAR2
  • RUNWAY
  • SAPHIR
  • SLAP FIGHT
  • SORTILEGES
  • STONE ZONE
  • SUPER JIMMIE
  • TOP CHRONO
  • TORANN
  • VOL SOLO
  • WYZBALL
  • YETI


* Les titres en rouge sont compatibles uniquement avec les MO5.