PC 8088 sur FPGA

De Wiki LOGre
Révision de 27 avril 2017 à 01:37 par A427 (discuter | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)
Aller à : navigation, rechercher

Un de mes projets en cours est de re-creer un systeme de type PC a base de processeur intel 8088 sur une board FPGA low-cost, la papilio de chez Gadget Factory.

Contexte

Mon premier ordinateur familial (circa 1988) etait un Thomson TO16-PC a base de 8088 (variante low-cost du 8086).

Specs initiales

  • 512kB RAM
  • processeur 8088 4.77/9.54 MHz
  • lecteur de disquettes 5"1/4 360kB
  • Ameliore par la suite avec 640kB de RAM
  • filecard (disque-dur) de 40MB.

But

Je vais donc essayer de pouvoir faire tourner quelques logiciels de l'epoque (MS-DOS 3.1, alleycat.exe, etc..), juste pour le fun.

Realisation

J'ai trouve ce site qui offre une implementation du 8088 en VHDL pour une carte FPGA (drigmorn1). Mon portage pour papilio est sur mon github : github.com/nsauzede/cpu86

Sur papilio one 500k

J'ai reussi a porter le design pour la papilio one 500k. Le software de test (Mon88, un petit moniteur/desassembleur+pseudo BIOS) fonctionne parfaitement, synthetise a 40MHz. L'UART est reliee au host par USB, et on peut interagir avec un emulateur de terminal de type putty.

Statistiques : environ 65% des ressources FPGA consommees pour le spartan3e500. Drawback : ce FPGA n'offre que 40kB de SRAM, on va pas aller loin avec ca. )-: Mais au moins la preuve de concept fonctionne.

Sur Papilio Duo

J'envisage ensuite de porter le design sur ma Papilio Duo fraichement recue, a base de FPGA spartan6-lx9, qui dispose elle de 2 MB SRAM. On devrait pouvoir faire tourner les logiciels de l'epoque sans probleme, avec un vrai BIOS, sortie graphique, etc..

Bon, apres un rapide portage vers la duo, j'arrive a faire tourner le design avec succes. Mauvaise nouvelle, les stats de synthese sont environ 85% de ressources FPGA consommees pour le spartan6lx9 :-( Je crains le pire si on voulait synthetiser par ex: une carte graphique de type CGA..

NEWS : en fait j'ai reussi a porter un design de petite carte graphique type VGA qui ne prend presque rien, donc c'est jouable !

Statut actuel

Une fois le design configure dans le FPGA, on peut interagir avec le moniteur par le biais de putty, il faut choisir comme reglage serie : 3840,8,N,1 La commande 'l' (Load Intel Hex) permet de charger un fichier binaire en memoire, ex : l >:020000020000FC => choisir le segment 0000 pour inscrire les donnees

05000000616263640A67 => ecrire la donnee "abc\n" a l'offset 0
00000001FF => quitter (EOF)

Attention : il faut taper les caracteres lentement (a la main) et pas en copiant-collant sinon ca ne marche pas

La sortie VGA ainsi que la sortie type LCD Sharp fonctionne a merveille, on peut afficher une partie de la memoire accessible par le 86, et meme la modifier en temps reel par le moniteur (Write Byte ou Load Intel Hex)

There's a 8088/VGA running in my FPGA!

A suivre..

Mapping memoire initial

range zone
FFFFF
FFF00
ROM 256 bytes
03603
00400
mon88 14kB
00000 int vectors
  • Generer la ROM originale :

Dans DOSBOX :

  1. A86.com +L1 +P0 +W0 +T0 +G2 +S jump0400.asm jump0400.bin
  • Generer le moniteur :

Dans DOSBOX :

  1. A86.com +L1 +P0 +W0 +T0 +G2 +S mon88.asm mon88.bin
  2. bin2coe.exe mon88.bin mon88.coe

Mapping memoire alternatif

range zone
FFFFF
F0000
ROM 64kB
7FFFF
00000
RAM 512kB