ALICE90 dans un FPGA

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

Répondre
network
Messages : 23
Inscription : 04 mai 2015 07:30

ALICE90 dans un FPGA

Message par network »

Bonjour à tous,

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 projet est entièrement « codé » en VHDL, qui est plutôt un langage de description de matériel. Un des points forts de ce langage est sa portabilité sur tout type de FPGA, sa vitesse d’exécution, etc... mais en contre parti il est aussi très complexe. Pour ceux que sa intéressent, il y a de nombreux articles et autres sur internet traitant le sujet.
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.

Image

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.

    Image
  • 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 :

    Image
    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 :

    Image

    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.

Image

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
Image
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.

Image


Voici quelques captures d'écran mais pas de grande qualités

Ecran d'acceuil mode32
Image

Crocky
Image

La chenille infernale
Image

Fringale
Image

Image


Le fichier MCS pour le FPGA, sans prise en charge de la remontée des donnée de l'EF9345
ALICE32-90.rar
(171.19 Kio) Téléchargé 170 fois
Le fichier MCS pour le FPGA, avec prise en charge de la remontée des donnée de l'EF9345
ALICE32-90 version display.rar
(170.51 Kio) Téléchargé 165 fois
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é.
__sam__
Messages : 7964
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: ALICE90 dans un FPGA

Message par __sam__ »

Pfew, félicitation. C'est un sacré projet. Je suis content pour toi que ca marche :D
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Avatar de l’utilisateur
Papy.G
Modérateur
Messages : 3051
Inscription : 10 juin 2014 13:40
Localisation : Haute-Garonne/Gers

Re: ALICE90 dans un FPGA

Message par Papy.G »

Excellent, c'est quand-même énorme de boulot! :shock:
Pourquoi ne pas avoir émulé l'incrustation (pas pour incruster, mais pour avoir les Pastels)?
Y-at'il des machines dans lesquelles le 9345 a 16ko de VRam?
Les commandes non implémentées, notamment les CLG et CLF ne servent jamais?
Tu simules le VBlank à 50Hz, et l'affichage est rafraîchi en 75Hz côté écran?
Soyez exigeants, ne vous contentez pas de ce que l'on vous vend.
Demandez-en plus, ou faites-le vous-même.
Daniel
Messages : 17410
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: ALICE90 dans un FPGA

Message par Daniel »

Depuis nos premiers contacts sur le sujet (en particulier l'émulation de l'EF9345) je suis admiratif. Non seulement network a réussi l'émulation dans le FGPA, mais encore il a trouvé des anomalies et des lacunes dans le code de dcalice, que je vais pouvoir améliorer grâce à lui.

Après ce projet, l'émulation du VG5000 semblera beaucoup plus facile. Avec dcalice et dcvg5k j'avais fait le chemin inverse : VG5000 d'abord, Alice ensuite. Plusieurs mois pour le VG5000 et moins d'une semaine pour l'Alice. Parce que le gros morceau, c'est l'émulation de l'EF9345. On ne répètera jamais assez que ce processeur vidéo est complexe, aussi bien pour l'émulation que pour la programmation.

Bravo !
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17490
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: ALICE90 dans un FPGA

Message par fneck »

Bravo pour cette belle réalisation 8)
Pourrais-tu nous mettre une photo du montage ?
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13290
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: ALICE90 dans un FPGA

Message par Carl »

Bravo pour cette réalisation !

Bientôt peut être un vg5000 dans un fpga

Carl
Avatar de l’utilisateur
Patrice
Messages : 1544
Inscription : 14 janv. 2008 10:42
Localisation : https://www.ville-saintes.fr/
Contact :

Re: ALICE90 dans un FPGA

Message par Patrice »

Un grand bravo pour ce excellent travail!
Y aura-t'il un kit disponible dans l'avenir?
Avatar de l’utilisateur
6502man
Messages : 12312
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: ALICE90 dans un FPGA

Message par 6502man »

Félicitations pour cette réalisation :D

Et chapeau pour l'émulation du EF-9345 :D :wink:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
kweeky
Messages : 372
Inscription : 24 avr. 2008 18:17
Localisation : Pas très loin de Bordeaux

Re: ALICE90 dans un FPGA

Message par kweeky »

Impressionnant... :D
Avatar de l’utilisateur
farvardin
Messages : 436
Inscription : 27 déc. 2014 16:07
Contact :

Re: ALICE90 dans un FPGA

Message par farvardin »

bravo !

Je vois que le boîtier MiST, qui est assez populaire, utilise du VHDL, peut-être qu'il est possible de compiler et d'adapter ce code...
Il faudrait que je m'installe le chaîne de compilation, mais ça fait une grosse installation de 6 Go à télécharger...
network
Messages : 23
Inscription : 04 mai 2015 07:30

Re: ALICE90 dans un FPGA

Message par network »

Bonjour,

A Papy.G,
Les commandes CLG et CLF, effectivement ne servent jamais, mais elles sont très simple à implanter le cas ou. Concernant le VBLANK, non il n'est pas à 50Hz mais à 60Hz, qui est le taux de rafraîchissement que j'utilise. Du côté des machines utilisant l'EF9345 avec 16Ko de VRAM, je ne sais pas, surtout que les seules machines avec ce VDU que je connaissent sont l'ALICE et le VG5000.

Je mettrais des photos du montage prochainement, pas de problème.
Pour utiliser le projet VHDL sur un autre FPGA ou une autre carte de développement, les modifications se portent sur la définition des BLOCK RAM internes, mise à part cela, son portage sur le MIST est très facile.

Pour l'implantation du VG5000, j'ai commencé à regarder la schématique et le fonctionnement via l'outil de Daniel l'émulateur DCVG5K, il y a quelques adaptations à faire, notamment la gestion du clavier, le mapping, l'interface avec l'EF9345. D'autre part le VG5000 n'utilise que le mode commande courte en 16bits et non la commande longue 24 bits comme pour l'alice. Le mode 16 bits je n'ai pu que partiellement le tester faute de motivation, donc je pense qu'il y aura des modifications de ce côté là.

Je vous souhaite à tous de bonnes fêtes de noël.
Avatar de l’utilisateur
farvardin
Messages : 436
Inscription : 27 déc. 2014 16:07
Contact :

Re: ALICE90 dans un FPGA

Message par farvardin »

Je viens d'installer la suite Quartus II pour gérer le fpga du MiST. Par contre je ne vois pas le code source pour l'Alice90, est-il disponible ?
Répondre