Après de longues heures de développement, je suis arrivé à bout de mon projet d'implémentation de l'ALICE version 32/90 au sein d'un FPGA. Ayant déjà implanté la version 4K dans ce même FPGA, la modification majeure fût le développement de l'EF9345.
Le FPGA utilisé est un XC3S500E de chez XILINX de la famille SPARTAN 3E, la carte de développement est le starter kit SPARTAN 3E de chez DIGILENT, et le logiciel de synthétisation est ISE Design Suite 14.1.
Les périphériques mise en œuvre de la carte starter kit sont :
- Le driver RS232 pour l’émission/réception logiciel, ou le DEBUG,
- Le port PS2 pour l’interface clavier,
- Le port VGA pour l’affichage,
- Une sortie pour la génération du son,
Le portage peut donc être réalisé sur un autre FPGA et/ou carte de développement, cependant la contrainte se porte sur le nombre de bits RAM embarqué au sein du FPGA.
Ce qui fonctionne
- MCU géré à 100%,
- Les interruptions gérées à 100%,
- EF9345, cependant toutes les fonctions ne sont pas prises en charge,
- L’UART est Ok, hormis le mode WU (Wake Up), le débit sériel est issu de l’horloge interne de la carte, le mode externe n’est pas implanté. Les débits sériels sont normalisés et indépendant de la fréquence de fonctionne du MCU.
- Le TIMER est géré à 100%,
- Les ports P1 et P2 sont géré à 100%,
- Le clavier est géré à 100%,
- Le son est géré à 100%,
- L’interface imprimante n’est pas gérée,
- L’interface cassette est modifiée au profit d’une liaison série. Cependant les instructions de chargement et de sauvegarde sont conservées,
- La fréquence de fonctionnement d’ALICE est conservée.
Le mapping :
Les blocs RAM embarqués dans le FPGA n'étant pas suffisante, j'y ai ajouté une SRAM externe de 32Ko pour la mémoire vive. Par contre Les différentes ROM sont embarquées au sein du FPGA.
Présentation rapide du module EF9345 :
La fréquence de fonctionnement du module est de 130Mhz, cette dernière est synthétisée à partir des 50Mhz d'entrée du FPGA via une PLL interne. Cette fréquence permet d'afficher correctement les modes 40 et 80 colonnes en mode VGA, avec comme résolution 1024X768, et un rafraîchissement de 60 hertz. L'affichage à proprement dit et hors contour est de 960X750 pixels, cela garantie de garder le ratio entre le mode 40/80 colonnes.
Le mode 40 colonnes utilise 320 pixels, et le mode 80, 480 pixels. Donc pour obtenir un affichage correct un caractère mode 40, est égal à 24 pixels et il est de 12 pixels pour le mode 80.
Le module est doté en interne des ROM caractères, et des VRAM de type double port pour l'affichage. L'agencement VRAM est différentes et cela afin d'alléger le développement. Les temps d'exécutions des commandes sont nettement plus rapides, il faut compter moins de 100µs pour mettre à jours en écritures les 3 blocs R1, R2, R3 de 1024 octets chacun, commande MVT. Cependant cela n'accélère pas pour autant l'ALICE, car ce dernier est dépendant des commandes du 6803.
- Les limitations :
- Le module utilise uniquement 8Ko de VRAM et non 16Ko max possible,
- Les caractéristiques vidéo du registre TGS ne sont pas toute implantées, et seulement les bit7 et 6 sont fonctionnels,
- Les bits 5,4 (INSERT) du registre PAT ne sont pas implantés,
- L'incrustation de la marge n'est pas implantée, bit 3 du registre MAT,
- Les commandes KRE, CMP, KRC, KRV, CLF et CLG ne sont pas implantées,
- Seulement 8 couleurs utilisables.
L’interface série
La liaison série permet le chargement/sauvegarde logiciel, ou bien utilisé pour un mode dit de DEBUG. Deux logiciels distincts sont utilisés pour réaliser les deux modes décrits ci-dessus.
La capture ci-dessous correspond au logiciel de chargement/sauvegarde. Le format des fichiers K7/MC10 sont supportés. Le débit sériel est 115200 bauds pour le chargement d'un programme, et pour la sauvegarde. Ce débit permet de charger très rapidement une application.
Ci-dessus, un exemple de chargement du jeu " La chenille infernale "
Le mode DEBUG est tout simplement un outil permettant de venir modifier ou lire l'intégralité de l'espace adressable du système. Un EXEC10240 permet de lancer la routine de la ROM et de dialoguer avec le deuxième logiciel. Ci-dessous la lecture de la zone mémoire $0000..$0160
Ces deux logiciels sont très basiques mais fonctionnels.
J'ai développé petit logiciel permettant d'aller lire la VRAM de l'EF9345 afin de me faciliter le portage. Ci-dessous une capture d'écran de l'écran d'accueil avec les données de la VRAM.
Voici quelques captures d'écran mais pas de grande qualités
Ecran d'acceuil mode32
Crocky
La chenille infernale
Fringale
Le fichier MCS pour le FPGA, sans prise en charge de la remontée des donnée de l'EF9345 Le fichier MCS pour le FPGA, avec prise en charge de la remontée des donnée de l'EF9345 Je tiens à remercier Daniel pour ses conseils, et de la mise à disposition de son émulateur DCALICE qui m'a permis
de faire du debug sans pour autant prendre un vrai ALICE, dans la limite du possible.
Mon futur développement est l'implantation du VG5000, vu que l'EF9345 est implémenté.