ðH geocities.com /fbroton/MiniForthFpgaV10/MiniForthFpgaV10.html geocities.com/fbroton/MiniForthFpgaV10/MiniForthFpgaV10.html layed x ŽÕJ ÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ 1˜ 1n OK text/html àœgó 1n ÿÿÿÿ b‰.H Sat, 22 Feb 2003 22:04:09 GMT Á Mozilla/4.5 (compatible; HTTrack 3.0x; Windows 98) en, * ÿÕJ 1n
MiniForthFpga V1.0
© F.BROTON Février 2003
http ://www.geocities/fbroton/MiniForth.html
un émulateur de la carte
Coeur FORTH V0.99
© JPB.FORTH Février 2003
http ://jpb.forth.free.fr.
Ce
programme est un démonstrateur/émulateur/débogueur de la carte Coeur Forth Fpga
présentée sur le site http ://jpb.forth.free.fr.
Il
permet donc d'évaluer cette carte, avant de la construire, et de faire quelques
petits programmes en FORTH. Néanmoins un certain nombre de différences existe
et le comportement réel sera parfois différent. Le but n’a pas été de coller au
plus près de la carte (car le hard de cette carte peut évoluer selon les choix
de réalisation et le budget de chacun) mais de donner une bonne idée de ce que
l’on pouvait en attendre. Le plus gros des restrictions et différences est
détaillé ci-dessous, au fil de l’eau.
Cet
émulateur a été conçu pour tourner sur tout PC équipé d’un Windows 32 bits (95, 98, Me, XP, NT, 2000). Il nécessite une
machine au moins à 300 MHz et a été testé sur des PC à 800 MHz et 1,2 GHz. Avec
une dégradation notable des performances, il peut également tourner sur un iMac
avec un émulateur PC supportant Windows.
Tant
qu’il n’y a pas trop de calculs, ce qui est très souvent le cas (utilisation de
petits programmes ou du multitache temps réel) l’émulation est assez fidèle.
Néanmoins l’interface graphique consomme beaucoup de ressources. C’est
d’ailleurs pourquoi elle a été partiellement accélérée par l’émulateur.
La base de ce
démonstrateur est un émulateur de CPU
FPGA. Ce cpu est un cpu propriétaire dont les instructions au nombre de 32
sont spécialisées pour le FORTH. En plus du CPU, une émulation de la mémoire et
des périphériques existant sur la carte a été faite, notamment pour assurer les
entrées/sorties (de base un terminal série, une souris et un écran VGA). Le
programme peut se suffire à lui seul, mais on peut aussi connecter des
terminaux sur les ports du PC, le PC émulant alors seulement le fonctionnement
de la carte.
6) L'émulateur de mémoire FLASH
8) L'émulateur de registres
d’extension
9) L'émulateur de circuit reset
10) L’émulateur de port A et port B
12) Principes généraux de
l'interface graphique
18) Compatibilité, version et bugs
19) Re-installation du noyau FORTH
20) Chiffres, remerciements, projets
et copyrights
Créez un
répertoire temporaire sur le disque dur (ou servez vous du c:\Temp de Windows)
et recopiez les fichiers setup.exe,
MiniFort.001 et MiniFort.002 (du
kit de distribution) dedans, éventuellement après les avoir dézippés.
Lancez le
setup.exe et modifiez éventuellement le chemin d'installation (par défaut
c:\MiniForthFpga) MiniForthFpga Directory.
Détruisez le
répertoire temporaire et lancez MiniForthFpga.exe.
Utilisez toujours le kit de distribution. La recopie
des fichiers de l’application (MiniForthFpga.exe et MiniForthFpga.uir) ne
suffit pas. Vous pouvez déplacer ces 2 fichiers sur votre machine dans un autre
répertoire si vous voulez mais pour les installer sur un autre PC, utilisez le
kit, car d’autres fichiers (dll,…) sont aussi installés.
Tous les
réglages utilisateurs sont stockés dans un fichier MiniForthFpga.ini qui est créé s’il n’existe pas. Si le programme a
un comportement anormal, commencez par supprimer ce fichier. Il sera recréé
avec des valeurs par défaut qui doivent satisfaire le plus grand nombre et qui
de plus sont stables. Faites de même si vous n’arrivez plus à atteindre
certaines fenêtres.
Un quatrième
fichier MiniForthFpga.bot est
également installé. Il contient le code minimal de boot qui permet de
télécharger le code FORTH de base. Ceci constitue le minimum vital. Pour plus
de simplicité, un cinquième fichier MiniForthFpga.bin
est installé. Il reflète le contenu de la flash et contient l’une des
dernières versions du système de JPB. Vous aurez par la suite tout le loisir de
faire vos mises à jour du système à partir du site JPB FORTH.
Les seuls
fichiers vitaux sont donc l’exécutable MiniForthFpga.exe,
le fichier de ressources graphiques de l’émulateur MiniForthFpga.uir, et le fichier image de la ROM de boot JPB FORTH MiniForthFpga.bot, que l’on peut aussi
récupérer sur l’internet.
Sous Windows
NT/2000 vous devrez être administrateur lors de l’installation sur une machine
(ce n’est plus vrai ensuite pour pouvoir l’utiliser).
Cet émulateur
a été conçu pour pouvoir se passer d’un programme annexe de type HyperTerminal
(qui est livré avec Windows et qui n’est d’ailleurs pas un exemple de
stabilité !). Il a pour avantage d’être intégré et donc d’être sous
contrôle. Il n’a pas un nombre de colonnes prédéfini et s’adapte à la largeur
que vous donnerez à la fenêtre (rappel en bas à gauche) (ici 43 colonnes par 18
lignes).
Dans le menu Terminal/Réglages on peut librement changer les couleurs du
fond d’écran et du texte. Si on active le menu Terminal/Verrouillage Majuscule,
tous les caractères alphabétiques seront mis en majuscule à la saisie avant
d’être envoyé au FORTH, qui est un grand adepte des majuscules.
Le menu Terminal/Efface
Terminal nettoie entièrement l’écran de façon irrémédiable. Il est
possible d’enregistrer une image texte de l’écran y compris l’historique
(lignes au dessus de l’écran, accessibles par l’ascenseur) dans un fichier par
le menu Terminal/Sauve Terminal.
Une LED verte FPGA
oscillante indique que le FPGA tourne bien. Elle devient rouge en cas d’erreur
de fonctionnement ou d’arrêt du CPU.
Vous ne serez
amener à utiliser ce terminal que quand vous voudrez installer un nouveau
logiciel applicatif de base FORTH. Il correspond en fait à ce qui se passe sur
la liaison série, quand il n’y a pas d’interface graphique active. Pour passer
du mode Terminal texte au mode Vga graphique, remuez
l’interrupteur Vga/Term visible en bas à gauche de la fenêtre.
La saisie
d’une ligne FORTH ne gère en sus des caractères que les touches Suppr,
Backspace, flèche droite/gauche, tabulation (convertie en espace) et Echap. Le
reste est non géré. En dehors de la saisie intégrale des commandes au clavier,
plusieurs façons existent pour se simplifier la tache :
·
Le CTRL C, CTRL D
(équivalent au CTRL C, CTRL V habituel de Windows) dans le terminal lui même ou
entre une autre application et le terminal (dans l’autre sens continuez
d’utiliser le CTRL V !).
·
Le double-clic gauche à la souris sur un mot présent dans le
texte du terminal suivi par un clic droit recopie ce mot dans la saisie suivi
d’un espace (au lieu du clic droit on peut aussi utiliser le CTRL Z).
·
Le menu Terminal/Charge Terminal ou CTRL L permet de déposer dans la saisie
tout le contenu d’un fichier texte. C’est la méthode officielle pour
télécharger tous les programmes sur la carte. Le transfert peut être interrompu
par CTRL C, X, Q, ou S.
Pour augmenter
les performances d’affichage, celui-ci ne se fait pas en continu mais lors des
périodes de rafraîchissement de toutes les fenêtres, à savoir une fois toutes
les Emulateur/Réglages/Intervalle
Affichage périodes HTR. Pour ne pas avoir un affichage trop saccadé on prendra soin de ne pas mettre une valeur
trop grande dans ce champ (restez en dessous des 200 millisecondes pour le
produit Intervalle Période x Intervalle Affichage).
Les restrictions actuelles de l'émulateur
sont:
·
Pour une raison système, on ne peut pas écrire sur la
dernière ligne de l’écran.
·
Pour une autre raison système, l’historique de l’émulateur
(lignes au dessus de l’écran) a été limitée à 2048 lignes.
·
Pour une dernière raison système, on ne peut pas faire de
CTRL C, CTRL V. Le CTRL V étant déjà interprété par le système, il faut
apprendre la séquence CTRL C, CTRL D qui fait la même chose. Et si vous êtes un
utilisateur habitué de Windows vous verrez que les habitudes sont dures à
changer !
L’écran VGA
est la véritable nouveauté pour les utilisateurs de la carte CŒUR FORTH. Il
apporte à un faible coût, puisque intégré dans le FPGA, la possibilité
d’avoir une interface graphique qui peut supporter le multi-fenêtrage et
utiliser un périphérique de pointage tel qu’une souris. De part la quantité de
mémoire allouée, le nombre de couleur est limité à 256. Sur l’émulateur
différentes résolutions existent, à l’inverse de ce que la carte est capable de
faire (1 seule résolution).
La version du
CŒUR FORTH V0.99 ne gère que le 640x480. Si pour une future version vous avez
besoin de changer la résolution, allez dans Emulateur/Réglages/Résolution.
La souris PC
est automatiquement déroutée vers la souris de l’émulateur quand elle
passe sur la fenêtre de l’écran VGA afin d’avoir un fonctionnement des plus
souples. Les menus de l’émulateur restent accessibles à chaque instant.
Les fenêtres du système FORTH peuvent être déplacées et redimensionnées, bien
que la façon de faire diffère du monde Windows. Les icônes s’ouvrent en
double-cliquant dessus.
La gestion de
l’écran graphique consomme beaucoup de temps processeur sur la carte et sur
l’émulateur. Aussi certaines optimisations ont été faites dans
l’émulateur pour accroître la fluidité et par là même le confort.
Pour passer du
mode Vga graphique au mode Terminal texte, remuez l’interrupteur Vga/Term
visible en bas à gauche de la fenêtre.
Les restrictions actuelles de l'émulateur
sont:
·
A cause des optimisations, l’écriture d’un pixel par le FPGA
n’apparaît pas instantanément dans la fenêtre de l’émulateur (à savoir une fois
toutes les Emulateur/Réglages/Intervalle Affichage périodes HTR). De plus
des pixels qui n’ont pas été modifiés exactement en même temps vont apparaître
simultanément. Mais cela reste très peu visible.
·
Les 256 couleurs de la palette sont recalculées et
pourraient être légèrement différentes sur la vraie carte.
L'émulateur
qui a été écrit spécialement pour ce programme est un émulateur complet du Fpga, voire plus. C'est à
dire que certains mécanismes non implémentés dans le Fpga existent dans
l’émulateur, notamment des contrôles d’adressage plus poussés pour aider la
mise au point. Il a été écrit comme on dit couramment « from
scratch » à partir de la spécification de JPB.
Comme le Fpga
est un cpu non figé, il se peut que dans d'éventuels développements futurs, des
opcodes soient modifiés. Dans ces cas là, il faudra veiller à avoir un
émulateur et un logiciel applicatif de base compatible. Sinon, l’émulateur
risquera de s'arrêter de lui même et d’afficher une erreur. A tout instant on
peut faire un reset quelconque
(chaud ou froid) de la carte pour redémarrer l’applicatif. Néanmoins il vaut
mieux éviter de le faire quand la LED d’accès à la FLASH clignote en JAUNE
(accès en écriture en cours). Dans ce cas là on risquerait de redémarrer avec
une FLASH incohérente.
L’émulateur
FPGA fonctionne en mode normal (RUNNING), peut être suspendu (menu Emulateur/Arrêt)
ou passer en mode trace RUNNING (liste toutes les instructions exécutées et
registres) ou enfin en mode trace pas à pas (permet de surprendre la naissance
d’une bogue).
Lors d’un
RESET froid ou très froid, tous les registres sont réinitialisés.
A l’affichage
tous les registres sont affichés en hexadécimal.
A noter que le
registre S est le registre en dessous du sommet de la pile (T).
Les .0, .1
ou .2 qui sont dans l’affichage du PC indique quelle instruction du mot de
16 bits est en cours (il peut y en avoir 3).
Le FPGA est
orienté 16 bits.
Les restrictions actuelles de l'émulateur
sont:
·
Contrôle supplémentaire de l’espace d’adressage.
·
Surveillance des pointeurs de pile lors de l’exécution des
opcodes manipulant les piles.
·
Les instructions implémentées peuvent encore contenir des
bogues (tout n'a pas pu être testé). Dans ce but il existe dans un menu Débogueur/Trace
qui s'active par Débogueur/Réglages et
qui permet de tracer le comportement du FPGA pendant un paquet d'instructions
successives.
·
Gestion des vecteurs d'exception. Seules les exceptions
utilisées ont été déverminées.
A titre
d’information, le source de l’émulateur du FPGA fait 400 lignes de C du fait du
faible nombre d’instructions, processeur RISC oblige (celui du 68000 qui est un
CISC en faisait 1500). En plus de l'émulateur, le programme contient un
désassembleur FPGA orienté FORTH (recherche des noms de fonctions).
13 Registres |
|||
Adresse IO Réelle |
Nom |
Description |
Largeur
utile |
Variable |
T |
Sommet de la pile de donnée |
16 |
Variable |
R |
Sommet de la pile de retour |
16 |
Aucune |
A |
Registre d’adresse (poids faible) |
16 |
0 |
PA |
Page A (poids fort) |
5 |
1 |
PR |
Page R (poids fort) |
5 |
2 |
PNTT |
Pointeur de la pile de donnée |
8 |
3 |
PNTR |
Pointeur de la pile de retour |
8 |
4 |
CE |
Contrôle Etat |
5 |
5 |
SA |
Sauvegarde A (pendant les ITs) |
16 |
6 |
SPA |
Sauvegarde Page A (pendant les ITs) |
5 |
7 |
SPR |
Sauvegarde Page R(pendant les ITs) |
5 |
8 |
SCE |
Sauvegarde Contrôle Etat(pendant les ITs) |
5 |
Aucune |
PC |
Pointeur programme d’exécution |
21 |
33
Instructions |
||
Code |
Mnémonique |
Description |
0 |
JMP |
Branchement
relatif inconditionnel |
1 |
JZ |
Branchement
relatif si T est égal à 0 |
2 |
CALL |
Empilement
de PC dans R (2 niveaux) et branchement relatif |
3 |
JNC |
Branchement
relatif si C est égale à 0 |
4 |
FCW |
Lecture
du registre d’extension pointé par R dans T |
5 |
STCW |
Ecriture
de T dans le registre d’extension pointé par R |
6 |
RET |
Dépilement
de PC depuis R (2 niveaux) |
7 |
IRET |
Dépilement
de PC depuis R (2 niveaux) et des registres sauvegardés |
8 |
FTCHRP |
Lecture
d’un octet ou mot (selon B) pointé par (Page R, R) et incrémentation de 1 ou
2 de (Page R, R) |
9 |
FTCHAP |
Lecture
d’un octet ou mot (selon B) pointé par (Page A, A) et incrémentation de 1 ou
2 de (Page A, A) |
10 |
LIT |
Lecture
du mot pointé par PC et incrémentation par 2 de PC |
11 |
FTCHA |
Lecture
d’un octet ou mot (selon B) pointé par (Page A, A) |
12 |
STRP |
Ecriture
d’un octet ou mot (selon B) pointé par (Page R, R) et incrémentation de 1 ou
2 de (Page R, R) |
13 |
STAP |
Ecriture
d’un octet ou mot (selon B) pointé par (Page A, A) et incrémentation de 1 ou
2 de (Page A, A) |
14 |
SWI |
Interruption
logicielle |
15 |
STA |
Ecriture
d’un octet ou mot (selon B) pointé par (Page A, A) |
16 |
COM |
Complément
à 1 de T |
17 |
ROLC |
Rotation
à gauche de T avec C |
18 |
RORC |
Rotation
à droite de T avec C |
19 |
ADDC |
Addition
de S et T si bit 0 de T dans T |
20 |
XORR |
Ou
exclusif de S et T dans T |
21 |
ANDD |
Et
logique de S et T dans T |
22 |
RES |
Réservé
pour de futurs développements |
23 |
ADDD |
Addition
de S et T dans T |
24 |
POP |
Dépilement
de R dans T |
25 |
POPA |
Empilement
de A dans T |
26 |
DUP |
Empilement
de T dans T |
27 |
OVER |
Empilement
de S dans T |
28 |
PUSH |
Empilement
de T dans R |
29 |
PUSHA |
Dépilement
de T dans A |
30 |
NOP |
Délai
d’un cycle machine |
31 |
DROP |
Dépilement
de T |
xxxxx1 |
CALLA |
Empilement
de PC dans R (2 niveaux) et branchement absolu |
Pour plus de
détails, voir la documentation concernant les registres, les drapeaux et les
instructions de ce processeur sur le site JPB FORTH.
En dehors de
la ROM de boot contenue dans le FPGA lui-même, la carte COEUR FORTH contient
une flash de 1 Moctets ; plus précisément 2 flashs de 512 Koctets (partie
haute et partie basse de la fenêtre ci-dessus, séparée par un trait noir).
C’est cette flash qui va contenir les différents programmes résidents et
notamment le logiciel applicatif de base FORTH. Par défaut, le rouge indique
une partie utilisée de la FLASH. L’abscisse est graduée en Kmots de 16 bits.
En fait la FLASH
est gérer par blocs de 64 Koctets. L’applicatif de base (v099_telec.bin)
est stocké en mode 16 bits et donc à cheval sur les 2 flashs (c’est le bloc
rouge à gauche ci-dessus, qui occupe le premier bloc de 64Kmots soit
128Koctets). Le système de fichier gère le reste des flashs, mais cette fois-ci
en accès 8 bits et ce par page de 64Koctets. Le bloc rouge à droite ci-dessus
contient v099_v040_lance.bin. Ce n’est pas simple à expliquer et à
comprendre, mais regardez le registre flash pendant que vous réinstallez
tout le système et ce sera peut-être plus clair.
Dans le kit
d’installation, pour des raisons de facilité, une FLASH copie de la v099 est intégrée (ROM de référence
pour ce développement). La FLASH utilisée doit impérativement s’appeler MiniForthFpga.bin. Chaque utilisateur
est ensuite libre de récupérer ou de se faire des versions différentes et de
les renommer pour pouvoir être prise en compte par l’émulateur.
Au RESET
(froid ou très froid), la FLASH est branchée à partir de $000000 (et se termine
donc en $0FFFFF). Sur la vraie carte, pour des raisons d’économies hardware,
elle est ensuite répliquée en alternance avec la RAM. Dans l'émulateur elle
n'est pas répliquée de la même
manière car j’ai voulu mettre dans le plan mémoire la RAM vidéo (ce qui n’est
pas fait sur la vraie carte du fait de contraintes sur le timing mémoire) de
$500000 à $5FFFFF, et les registres
internes du FPGA (ce qui n’est également pas fait sur la vraie carte) de
$600000 à $6FFFFF. Ceci a été fait afin d’unifier/simplifier le système et de
permettre une visualisation de ces espaces spéciaux via l’outil standard de vidage
mémoire.
Après la
séquence d'initialisation, l’espace FLASH se retrouve de $100000 a $1FFFFF, et
le système a été recopié en RAM. La FLASH n’est quasiment plus utilisée, à part
pour lire ou écrire des fichiers.
Les accès à la
FLASH font clignoter la LED FLASH sur la fenêtre principale selon le code des
couleurs suivant :
·
GRIS : pas
d’accès,
·
VERT : lecture,
·
JAUNE : écriture,
·
ROUGE : effacement
total,
·
ORANGE : effacement
page.
Les restrictions actuelles de l'émulateur
sont:
·
Temps d’accès plus lents qu’en RAM non émulés.
·
Espace FLASH non exactement répliqué (insertion d’une image
de la RAM vidéo et des registres internes).
La RAM
équipant la carte CŒUR FORTH a une capacité de 1Moctets.
Au RESET la
RAM est branchée à partir de $100000 (et se termine donc en $1FFFFF). Pour des
raisons d’économies hardware, elle est ensuite répliquée en alternance avec la
FLASH.
Après la
séquence d'initialisation, l’espace RAM se retrouve de $000000 a $0FFFFF.
Au RESET très
froid toute la mémoire est effacée et remplie avec le motif présent dans
l’objet Emulateur/Réglages/Motif RAM Reset Très Froid (par défaut à 0).
A noter que ce motif est impérativement défini sur 32 bits. Ceci permet de voir
quelles adresses sont écrasées par le système au démarrage ou par la suite. Il
est à noter que sur la vraie carte actuelle, cette fonctionnalité n'existe pas.
Dans
l’émulateur, la RAM réservée est en permanence de la taille maximum (1Mo). On
peut écrire et lire dans cet espace de 1Mo en permanence avec les menus Emulateur/Charge
Mémoire
Ram et Sauve Mémoire Ram.
Pas de restriction actuelle de l'émulateur.
Ces registres
correspondent aux registres qu’il y avait dans le 68681 de la carte 68000, à
ceci près que sur la carte CŒUR FORTH, ils sont implémentés dans le FPGA
lui-même. D’autre part ces registres ne sont pas dans le plan d’adressage des
mémoires FLASH et RAM. Ils sont dans un espace réservé d’entrées/sortie (un peu
à la façon Z80). A noter que sur l’émulateur ils sont de plus visibles dans le
plan mémoire en $600000 (un peu à la façon 6502).
A noter qu’à
l’inverse des zones FLASH et ROM qui changent d’adresse, cette zone est fixe.
L'émulation de
ce circuit est faite de façon allégée pour assurer le strict nécessaire avec la
carte CŒUR FORTH. Les accès aux UART sont détournés et renvoyés soit vers le
terminal intégré soit vers une ou plusieurs liaison série du PC. Les 2 UARTS
sont par contre gérés. Les liaisons séries sont tamponnées par l'émulateur en
entrée et en sortie par des espaces de 100 Ko.
Lors d’un
RESET froid ou très froid, tous les registres sont réinitialisés.
A l’affichage
tous les registres sont affichés en binaire et hexadécimal. Certains registres
sont internes et ne peuvent être lus ou relus par le CPU. Les vitesses des
liaisons séries sont décodées en clair en rouge.
Par rapport à
la vraie carte, de nombreux registres ont été rajoutés dans l’émulateur.
Certains en avance par rapport au développement du hard, d’autres pour le
« fun ». Voici un tableau les reprenant exhaustivement :
29 Registres d’extension |
||||||
Adresse IO
réelle (carte) |
Adresse
MEMOIRE virtuelle (émulateur) |
Nom du
registre |
Existence CŒUR FORTH |
Utilisé en V0.99 |
Accès |
Note |
$0000 |
$600000 |
PA |
O |
O |
R/W |
Registres
FPGA internes |
$0001 |
$600002 |
PR |
O |
O |
R/W |
" |
$0002 |
$600004 |
PNTT |
O |
O |
R/W |
" |
$0003 |
$600006 |
PNTR |
O |
O |
R/W |
" |
$0004 |
$600008 |
CE |
O |
O |
R/W |
" |
$0005 |
$60000A |
SA |
O |
O |
R/W |
" |
$0006 |
$60000C |
SPA |
O |
O |
R/W |
" |
$0007 |
$60000E |
SPR |
O |
O |
R/W |
" |
$0008 |
$600010 |
SCE |
O |
O |
R/W |
" |
$001D |
$60003A |
PCH |
N |
N |
R |
Rajout des
seuls registres FPGA internes manquant |
$001E |
$60003C |
PCL |
N |
N |
R |
" |
$001F |
$60003E |
A |
N |
N |
R/W |
" |
$00F6 |
$6001EC |
SOUND |
N |
O |
R/W |
Permet de
faire du bruit. |
$00F7 |
$6001EE |
RESOLUTION_X |
N |
N |
R |
Largeur de
l’écran VGA (statique) |
$00F8 |
$6001F0 |
RESOLUTION_Y |
N |
N |
R |
Hauteur de
l’écran VGA (statique) |
$00F9 |
$6001F2 |
MOUSE_X |
N |
O |
R/W |
Abscisse de
la souris |
$00FA |
$6001F4 |
MOUSE_Y |
N |
O |
R/W |
Ordonnée de
la souris |
$00FB |
$6001F6 |
MOUSE_BUTTON |
N |
O |
R/W |
Etat des
boutons de la souris |
$00FC |
$6001F8 |
KEYBOARD |
N |
O |
R/W |
Touche
clavier appuyée |
$00FD |
$6001FA |
TIME_H |
N |
N |
R |
Temps absolu
en format 32 bits |
$00FE |
$6001FC |
TIME_L |
N |
N |
R |
" |
$00FF |
$6001FE |
RESET |
N |
N |
W |
Commande
interne du reset de l’émulateur (réservé) |
$0100 |
$600200 |
TIMER |
O |
O |
R/W |
Génère la
HTR |
$0101 |
$600202 |
UART_BAUDA |
O |
O |
R/W |
Port série A |
$0102 |
$600204 |
UART_CTRLA |
O |
O |
R/W |
" |
$0103 |
$600206 |
UART_DATAA |
O |
O |
R/W |
" |
$0104 |
$600208 |
UART_BAUDB |
N |
N |
R/W |
Port série B |
$0105 |
$60020A |
UART_CTRLB |
N |
N |
R/W |
" |
$0106 |
$60020C |
UART_DATAB |
N |
N |
R/W |
" |
$0110 |
$600220 |
PORT_A |
N |
N |
R/W |
Port 16 bits
A (à noter que la LED VOYANT est branchée sur le bit 0 de ce port) |
$0111 |
$600222 |
PORT_B |
N |
N |
R/W |
Port 16 bits
B |
$0120 |
$600240 |
USB_CMD/USB_ERR |
N |
N |
R/W |
Pour préparer l’USB |
$0121 |
$600242 |
USB_UNIT |
N |
N |
R/W |
" |
$0122 |
$600244 |
USB_SECTOR |
N |
N |
R/W |
" |
$0123 |
$600246 |
USB_DATA |
N |
N |
R/W |
" |
$0124 |
$600248 |
USB_CNT |
N |
N |
R/W |
" |
$0130 |
$600260 |
DMA_ORGNH |
N |
N |
R/W |
Vraiment
pour le fun |
$0131 |
$600262 |
DMA_ORGNL |
N |
N |
R/W |
" |
$0132 |
$600264 |
DMA_DESTH |
N |
N |
R/W |
" |
$0133 |
$600266 |
DMA_DESTL |
N |
N |
R/W |
" |
$0134 |
$600268 |
DMA_CNT |
N |
N |
R/W |
" |
$0180 |
$600300 |
VGA |
O |
O |
R/W |
Ecran VGA (fifo) |
$0200 à $02FF |
$600400 à $6005FF |
T |
O |
O |
R/W |
Pile données
(256 mots de 16 bits) |
$0300 à $03FF |
$600600 à $6007FF |
R |
O |
O |
R/W |
Pile retour
(256 mots de 16 bits) |
Les restrictions actuelles de l'émulateur
sont:
·
L’émulateur limite les flux d’échanges entre le FORTH et le
PC à 1 octet par HTR (soit au maximum à 1 octet par ms), ce qui représente
approximativement une vitesse de 9600 bauds.
·
Les vitesses des liaisons série ne servent que quand on
utilise un terminal externe au PC relié par COM1/COM2. Avec le terminal
intégré, le réglage est indifférent. De plus quand on utilise un terminal
externe, c’est la vitesse déclarée dans Terminal/Réglages/Baudrate qui
prime.
·
Les vitesses utilisables des liaisons séries sont 110, 300, 600, 1200, 2400, 4800, 9600,
14400, 19200, 28800, 38400, 56000, 57600, 115200 bauds.
·
La position de la souris n’est rafraîchie qu’à chaque HTR.
·
La FIFO VGA en écriture n’est pas gérée à la différence de
la réalité, du fait de l’absence de contrainte de l’émulateur dû au balayage
vidéo (fifo émulateur réduite à une taille de 1).
·
La FIFO VGA en lecture fait 8 éléments à la différence de la
réalité (fifo carte réduite à une taille de 1).
Sur la vraie
carte, au RESET la FLASH occupe la zone $000000 à $0FFFFF et la RAM de $100000
à $1FFFFF. Après la séquence d'initialisation (notamment après une écriture
dans le bit S du registre CE), la RAM se retrouve de $000000 à $0FFFFF et la
FLASH de $100000 à $1FFFFF. Le re-basculement se produit après l’application
d’un RESET. L'émulateur est conforme à
ce principe.
Pas de restriction actuelle de l'émulateur.
Ils permettent
de simuler un port au format 16 bits où sont branchés des LEDS et des
interrupteurs. Cela consiste en un périphérique de sortie primitif où l’on peut
afficher quelques informations. Ces registres sont totalement artificiels car
il n’existent pas sur la vraie carte (c’est un souvenir de la carte 68000). .
Le port
s'initialise systématiquement à $FFFF au démarrage ou lors d’un RESET très
froid. En sortie, les LEDS (dont la couleur est réglable dans Emulateur/Réglages/Couleur
Leds Port A et B) visualisent l'état 1 de chaque bit (si l'interrupteur
est en position HiZ). En entrée, les interrupteurs
permettent d'imposer un 0 avec la
position 0. Pour imposer un 1, il faut être en position HiZ et écrire un 1.
Cela est un peu tordu, mais reflète le comportement réel d’un port classique.
Le champ Donnée Ecrite indique la valeur que la
carte a écrit dans le circuit, mais n’est pas modifiable par l’utilisateur. Le
champ Donnée Lue peut être écrit par
l’utilisateur pour simuler l’entrée d’un mot (c’est une autre façon de forcer
la valeur à relire qui n’existe pas dans la réalité ou la seule façon est avec
les interrupteurs). Un $FFFF est alors automatiquement placé dans Donnée
Ecrite.
L’adresse de
ces 2 ports est fixe et l’on y accède virtuellement via la zone des registres
d’extension du FPGA.
Port |
Adresse |
A |
$110 |
B |
$111 |
Les restrictions actuelles de l'émulateur
sont:
·
L’affichage de LEDS est fait au rythme général des
affichages et selon la vitesse d’écriture, des effets stroboscopiques peuvent apparaître laissant croire que rien
ne se passe. L’utilisateur peut régler la vitesse d’affichage dans Emulateur/Réglages/Intervalle
Affichage.
Sur la vraie
carte, une interruption HTR (horloge
temps réel) a lieu toutes les millisecondes,
ce qui permet de compter le temps écoulé et de basculer d'une tâche à une
autre. Deux autres interruptions permettent de traiter les caractères à émettre
et à recevoir sur la liaison série vers un terminal assurant les
entrées/sorties.
L'émulateur utilise
une pseudo HTR qui peut être aussi rapide que 1 milliseconde (limite basse de
Windows). Néanmoins cette base de temps peut être réglée plus lente par
l'utilisateur par pas de 1 milliseconde. Sur les PC lents (100 MHz)
l'utilisateur aura peut-être intérêt à ralentir cette base de temps s’il
constate que le PC n’a plus le temps de tout faire. Sur les PC plus rapides,
cette base de temps peut être laissée à 1 milliseconde. Cette base de temps est
modifiable dans Emulateur/Réglages/Intervalle Période HTR.
A la
différence de la vraie carte, un PC doit garder du temps pour gérer toutes les
applications Windows. Aussi le principe retenu est d'exécuter un nombre
d'instructions FPGA lors de chaque HTR avant de redonner la main au système et
avant la prochaine HTR. Ce nombre
d'instructions peut aussi être réglé dans Emulateur/Réglages/Nombre
Instructions FPGA par HTR (sa valeur minimale est de 7000 et la valeur
conseillée de 10000 instructions).
Cette valeur est un nombre maximal d’instructions que le CPU exécutera, mais si
celui-ci se place en attente d’interruption, ce nombre ne sera jamais atteint
et il passera à la HTR suivante sans rien faire de plus. Si la valeur mise est
trop grande, on aura un glissement du temps réel, étant donné que dans
l’émulateur, la HTR n’est pas plus prioritaire. Plus le PC sera rapide, plus on
peut mettre un grand nombre d'instructions, et plus le FPGA virtuel que l’on
aura sera rapide.
Fréquence du
PC |
Intervalle
Période HTR conseillé en ms |
Nb max
d’instructions FPGA conseillé |
100 MHz |
4 |
5000 |
300 MHz |
2 |
5000 |
500 MHz |
1 |
6000 |
750 MHz |
1 |
7000 |
1 GHz |
1 |
>8000 |
1,5 GHz |
1 |
>8000 |
2 GHz |
1 |
>8000 |
Un système de calibrage automatique aurait pu
être fait. J'ai, pour l'instant, vu l'optique du programme, préféré laisser le
contrôle total à l'utilisateur (quitte à ce qu’il puisse faire des
sottises !). Cela permet de régler artificiellement plus ou moins la
puissance de la carte (Mips).
Les
interruptions pour les entrées/sorties
sont quand à elles gérées entre 2 HTR pour optimiser les transferts et des
différences avec la carte sont à prévoir (en mieux ou en moins bien) sur les
flux réception et émission. Aujourd’hui un débit maximum voisin du 9600 bauds original est assuré.
La fenêtre
principale rassemble un émulateur de terminal texte et un émulateur graphique
VGA qui par l’intermédiaire d’une barre des menus donne accès à tous les
émulateurs et outils intégrés. Dans les menus un chevron indique que l'option est active ou que la fenêtre correspondante
est déjà ouverte. Une deuxième sélection fait alors réapparaître cette dernière
en avant-plan. Ceci est vrai sauf pour la fenêtre Trace qui a un comportement différent. Le deuxième clic ferme cette
fenêtre. Cela est dû au fait que l'on ne peut fermer cette fenêtre système de
la même façon que les autres fenêtres de l'application.
Les réglages que l'on fait sont immédiatement pris en compte. Ca simplifie le code (ca évite les variables
temporaires), ca dynamise le code (on voit tout de suite ce qu'on fait), par
contre quand on fait une erreur on se ramasse plus vite aussi. Quand on saisit
une valeur, il faut faire un appui sur Entrée pour que la valeur soit prise en
compte. Tous les réglages utilisateurs sont stockés dans le fichier MiniForthFpga.ini. Si le programme a un
comportement anormal, commencez par effacer ce fichier. Il sera recréé avec des
valeurs par défaut qui doivent satisfaire le plus grand nombre et qui sont
stables.
Quand le
programme est quitté normalement (s’il n'y a pas de plantage), il sauvegarde
tous ses réglages, conserve la position des fenêtres et si elles sont ouvertes.
Bien que cela soit géré, il se peut que certaines fenêtres ne soient plus
accessibles lors de leur ouverture. Dans ce cas là, détruire le fichier
MiniForthFpga.ini permet de s'en sortir. Certains réglages annexes ne sont par
contre pas mémorisés, c'est normal.
Les affichages
des différents outils (qui n'existent pas sur la carte, ou qui serait du hard
externe) sont tous dynamiques (changent au fil du temps) mais cependant ils ne
sont pas rafraîchis en temps réel pour ne pas dégrader les performances de
l’émulateur. En règle générale, tous les affichages sont faits lors d'une HTR,
une HTR sur n. L’utilisateur peut régler la vitesse d’affichage dans Emulateur/Réglages/Intervalle
Affichage (un nombre faible indique une vitesse de réaffichage élevée
impliquant une vitesse d’émulation de la carte ralentie : la somme
affichage+émulation étant constante si l’une augmente, l’autre baisse). Ce
système peut générer des effets stroboscopiques (la donnée change mais
l’affichage ne voit qu’un changement sur n).
La résolution
de l’écran VGA (si elle est gérée par le logiciel applicatif de base) peut être
modifiée dynamiquement dans Emulateur/Réglages/Résolution. La
taille est affichée en bas à gauche de la fenêtre principale. Le logiciel
applicatif de base gère souvent une résolution de 640x480 pixels soit la
résolution VGA.
Les commandes
accessibles par les menus sont réparties dans 3 groupes : un menu pour les commandes relatives à la fenêtre
principale (Terminal/VGA) ; un menu pour les commandes relatives aux
fenêtres des différents émulateurs ; un menu pour les commandes relatives
aux outils d’investigation, le débogueur. Ces menus correspondent en fait au
niveau de l’utilisateur. L’utilisateur
novice se contentera du menu Terminal. Au bout d’un moment
d’utilisation, l’utilisateur habitué
pourra utiliser également le menu Emulateur.
Enfin pour les utilisateurs avancés
qui voudront laisser traîner leurs yeux en mémoire ou mettre leur nez dans le
code FPGA, il existe le menu Débogueur.
Charge
Terminal:
permet de recopier dans le terminal intégré un fichier texte FORTH, de la même
façon que l'on ferait avec un CTRL C, CTRL V dans la fenêtre d’un l'HyperTerminal
sur un PC. C’est la méthode officielle pour télécharger les programmes sur la
carte en mode TERMINAL (mais pas en mode VGA). Le transfert peut alors être
interrompu par CTRL C, X, Q, ou S. L’extension par défaut de ce type de fichier
est .txt.
Sauve
Terminal:
sauvegarde tout le contenu du terminal intégré (soit au maximum les dernières
2048 lignes) dans un fichier texte sur le PC. Cela permet de garder une trace
de l'exécution ou des erreurs. L’extension par défaut de ce type de fichier est
TRM.
Efface Terminal: nettoie la
fenêtre du terminal intégré (soit au maximum 2048 lignes). Impossible de
revenir en arrière.
Charge Xmodem: permet de
télécharger un fichier texte ou binaire vers la carte. C’est la méthode
officielle pour télécharger les programmes sur la carte en mode VGA. Il n’y a
pas d’extension par défaut pour ce type de fichier. Le noyau FORTH doit au
préalable passer également en XMODEM.
Sauve Xmodem: permet de
sauver un fichier texte ou binaire vers le PC. Il n’y a pas d’extension par défaut
pour ce type de fichier. . Le noyau FORTH doit au préalable passer également en
XMODEM.
Verrouillage Majuscule: tous les caractères alphabétiques seront mis en majuscule à
la saisie dans le terminal intégré avant d’être envoyé au FORTH, qui est un grand
adepte des majuscules.
Réglages: contient tous
les réglages relatifs au menu Terminal. Permet de définir si on utilise le
terminal intégré ou si on utilise un terminal externe branché sur un port série
du PC (ce peut aussi être grâce à un rebouclage du COM1 vers COM2 du PC,
l'HyperTerminal de Windows). Les entrées/sorties peuvent être routées vers 0,
1, plusieurs ou toutes les interfaces. Attention de ne pas en abuser. Permet de
définir les couleurs de texte et de
fond du terminal intégré. Permet de
fixer la tabulation courante pour
les sorties écran (non encore gérée par le noyau FORTH). Permet de définir la langue du logiciel (anglais ou
français). Afficher et régler la vitesse
des ports série quand ils sont actifs.
Quitter: permet de
sortir définitivement du logiciel. Tous les réglages sont sauvegardés
automatiquement. Un clic dans le coin supérieur droit de la fenêtre principale
aboutit au même résultat.
Reset Chaud: le RESET
chaud permet de ne perdre aucune définition, par contre dans certains cas de
plantage, il ne permet pas de reprendre la main, ou il reprend la main avec une
mémoire qui n’est pas très propre. Il ne faut donc pas en abuser. Le RESET
chaud permet de redémarrer à une adresse configurable dans l’objet Emulateur/Réglages/Adresse Reset A Chaud.
Par défaut c'est l'adresse de la fonction ABORT
qui est en $77E4 dans la version 0.99 du binaire. Pour d'autres versions du
logiciel, c’est de la responsabilité de l’utilisateur que de renseigner ce
vecteur (il suffit de faire un HEX FIND ABORT .) et de mettre l'adresse dans le
champs mentionné ci dessus pour s'assurer un fonctionnement correct. Pour aider
l’utilisateur, un système de recherche
automatique de ce vecteur est intégré au code (mais il se peut qu’il ne
marche pas avec toutes les versions ultérieures de la FLASH). Il est à noter
que sur la vraie carte actuelle, cette fonctionnalité n'existe pas.
Reset Froid: cette action
entraîne le RESET du FPGA et de ses périphériques et donc de la carte. Dans le
cas où le FPGA est arrêté suite à une erreur ou un arrêt volontaire, il est
remis en fonction. Toutes les fonctions qui avaient été compilées sont perdues.
Même si elles sont encore en partie présentes en mémoire, les pointeurs qui les
gèrent sont réinitialisés. La mémoire qui n'est pas initialisée par JPB FORTH
n'est pas altérée, ce qui permet d'y stocker des choses. Le contenu de cette
mémoire est par contre perdu définitivement dès que l'on quitte l’émulateur. On
peut par contre la sauvegarder/recharger par les menus Sauve Mémoire Ram/Charge
Mémoire Ram ci-dessous.
Reset Très
Froid:
cette action est équivalente au RESET froid (voir ci-dessus) à ceci près que
toute la mémoire est préalablement effacée et remplie avec le motif de RESET
réglable dans l’objet Emulateur/Réglages/Motif RAM/FLASH/VGA Reset
Très Froid (voir le chapitre sur la mémoire RAM). Le contenu du système
de fichier FLASH est effacé, bien que le logiciel applicatif de base soit
conservé en FLASH. Ceci permet de partiellement s’en sortir, si le système de
fichier est par exemple accidentellement corrompu et qu’on n’arrive pas à
prendre la main au démarrage.
Arrêt: le FPGA est
gelé (la LED FPGA passe au rouge). Permet de quasiment suspendre le temps. On
peut sortir de cette situation en re-sélectionnant Arrêt (pour repasser en
marche), en faisant un RESET ou en quittant le logiciel.
Registres
Fpga:
permet d'afficher le contenu des registres du FPGA en pseudo temps réel. Un
clic dans le coin supérieur droit de cette fenêtre la ferme (voir aussi le chapitre
sur l’émulateur de FPGA).
Registres
Flash:
permet d'afficher synthétiquement le contenu de la FLASH en pseudo temps réel
pour voir son taux de remplissage. Un clic dans le coin supérieur droit de
cette fenêtre la ferme (voir aussi le chapitre sur l’émulateur de mémoire
FLASH).
Registres
Extension:
permet d'afficher le contenu des registres d’extension du FPGA en pseudo temps
réel. Un clic dans le coin supérieur droit de cette fenêtre la ferme (voir
aussi le chapitre sur l’émulateur de registres d’extension).
Registres Port
A:
permet d'afficher le contenu du registre d’un port de 16 bits en pseudo temps
réel. Un clic dans le coin supérieur droit de cette fenêtre la ferme (voir
aussi le chapitre sur l’émulateur de port A et port B).
Registres Port
B:
permet d'afficher le contenu du registre d’un port de 16 bits en pseudo temps
réel. Un clic dans le coin supérieur droit de cette fenêtre la ferme (voir
aussi le chapitre sur l’émulateur de port A et port B).
Charge Mémoire
Ram:
permet de mettre dans la mémoire de la carte un fichier du PC contenant par
exemple des données à traiter. Attention:
tout le fichier est chargé et cette commande travaille dans le plan RAM de 1Mo.
L’adresse destination en mémoire est demandée en hexadécimal. Si le fichier
déborde de l’espace RAM , il est tronqué (pas de rebouclage en début de
RAM). Cette fonctionnalité n’existe pas sur la vraie carte où tous les
transferts de données se font par XMODEM. Il n’y a pas d’extension par défaut
pour ce type de fichier.
Sauve Mémoire
Ram:
permet de mettre une image de la mémoire de la carte dans un fichier du PC
contenant par exemple des résultats traités. Attention: cette commande travaille dans le plan RAM de 1Mo. L’
adresse source en mémoire et la
longueur sont demandées en hexadécimal. Si la zone déborde de l’espace
RAM , le fichier est tronqué (pas de rebouclage en début de RAM). Cette
fonctionnalité n’existe pas sur la vraie carte où tous les transferts de
données se font par XMODEM. Il n’y a pas d’extension par défaut pour ce type de
fichier.
Réglages: contient tous
les réglages relatifs au menu Emulateur. Permet de choisir la taille de
l’écran graphique VGA parmi 6 résolutions entre 320x240 et 1024x1024.
Permet de basculer en mode de boot pour recharger l’ensemble du logiciel
applicatif de base. Permet de spécifier l’intervalle
de la période HTR et le nombre d’instructions FPGA par HTR (voir
ci-dessus le séquencement de la carte). Permet de choisir l’intervalle d’affichage en HTR (voir ci-dessus Principe généraux
de l’interface graphique), le motif
écrit dans la RAM/FLASH/VGA lors
d’un RESET très froid, l’adresse de
branchement lors d’un RESET chaud. Permet de définir la couleur du registre FLASH. Définit la couleur des LEDS
des fenêtres Registres Port A et B.
Ce
menu est réservé aux utilisateurs avancés. Ne
vous y aventurez que quand vous aurez une bonne maîtrise du logiciel et une
bonne connaissance de ce document, du FPGA et de la carte. En règle
générale, les outils de ce menu n’ont hélas pas d’équivalent sur la vraie
carte.
Vidage
Mémoire:
permet d’afficher une fenêtre visualisant le vidage du plan mémoire (c’est à
dire ce que voit le FPGA) en pseudo temps réel. L’interface permet de
visualiser tous les 4Go d’espace adressable sur 32 bits en modifiant l’adresse de base en hexadécimal en
haut à gauche. Pour déplacer la zone visualisée on peut utiliser Page Haut/Page
Bas ou Flèche Haut/ Flèche Bas. Comme le FPGA n’a que 2Mo d’espace adressable
(le bus ne sort qu’en 21 bits), le reste de l’espace consiste en une
réplication de cette zone de 2Mo. En fait au lieu d’avoir une réplication en
RAM/FLASH/ RAM/FLASH/ RAM/FLASH/ RAM/FLASH/ en 2Mo comme sur la vraie carte,
l’émulateur à une réplication en RAM/FLASH/ RAM/FLASH/ RAM/VGA/
REGISTRES/FLASH/ en 8Mo.
Quand il y a
des valeurs ? ?, cela
signifie qu’il n’y a rien dans le plan mémoire à cette adresse (ni RAM, ni
FLASH, ni périphérique) et qu’un accès avec le FORTH à cette adresse se soldera
par une erreur bus rattrapée par le
logiciel qui arrêtera l’émulateur FORTH. L’affichage est dynamique et permet de
voir les compteurs évoluer, les
zones mémoires se remplir, il permet aussi de voir l’effet de la redondance. Le
seul manque de cet outil est qu’il permette également d’éditer la mémoire. Mais
ce serait dangereux et le FORTH est là qui permet de le faire de façon on ne
peut plus simple.
Sauve Vidage: sauvegarde
tout le contenu de la fenêtre de vidage mémoire telle qu’il est affiché, dans
un fichier texte sur le PC. Cela permet de garder l’image d’une zone mémoire comme
référence pour faire une comparaison ultérieure. L’extension par défaut de ce
type de fichier est DUM.
Désassemblage
Mémoire:
permet d’afficher une fenêtre visualisant le désassemblage du plan mémoire
(c’est à dire ce que voit le FPGA) en pseudo temps réel. L’interface permet de
visualiser tous les 4Go d’espace adressable sur 32 bits en modifiant l’adresse de base en hexadécimal en
haut à gauche. Pour déplacer la zone visualisée on peut utiliser Page Haut/Page
Bas ou Flèche Haut/ Flèche Bas.
Quand il y a
des valeurs ? ? dans la
zone vidage, cela signifie qu’il n’y
a rien dans le plan mémoire à cette adresse (ni RAM, ni FLASH, ni périphérique)
et qu’un accès avec le FORTH à cette adresse se soldera par une erreur bus. L’affichage est dynamique
et permet de voir le code se construire ou changer.
C’est un
désassembleur FPGA classique auquel une zone FORTH a été adjointe pour
présenter le nom de la routine FORTH sur laquelle un CALL ou CALLA pointe. On
distingue 6 zones dans l’exemple de désassemblage de la fonction FORTH
BELL:
Adresse Mnémonique
Opérande
FORTH Vidage Ascii
00005300.0
JMP $0000531C 00 1A ..
00005302.0
JMP $00004F46 04 42 .B
00005304.0
FTCHRP
00005304.1
ANDD
00005304.2
RET
45 4C EL
00005306.0
FTCHAP
00005306.1
COM
00005306.2
????
4C 00 L.
00005308.0
LIT #$0007
00005308.1
LIT #$0000
00005308.2
NOP
52 BC 00 07 00 00 ¼....
0000530E.0
CALL $00005202 (EMIT) 16 F2 .ò
00005310.0 RET 37 BC 7¼
Les .0, .1 et
.2 indiquent quelle instruction (de 5 bits) du mot de 16 bits est désassemblée.
On peut ainsi
aisément décompiler cette fonction (les huit premières lignes ne sont pas
significatives) et obtenir :
: BELL 7
EMIT ;
Mais le but de
cet outil n’est pas de ressourcer tout le JPB FORTH, c’est seulement pour quand
on a un doute, de vérifier que le travail de compilation a été bien fait.
Sauve
Désassemblage: sauvegarde tout le contenu de la fenêtre de désassemblage
mémoire tel qu’il est affiché, dans un fichier texte sur le PC. Cela permet de
lister un morceau de code. L’extension par défaut de ce type de fichier est DES.
Trace: permet
d'afficher le contenu de la fenêtre système de trace. Pour fermer cette fenêtre
il faut impérativement recliquer sur le menu Trace. Cette fenêtre sert en
partenariat avec le menu suivant Réglages qui fixe les conditions, à stocker la
trace des instructions FPGA (contenu des registres+OPCODES). Pour sauver cette
trace on peut faire un copier coller vers une autre fenêtre d’un éditeur de
texte Windows (par exemple WordPad). Voici par exemple ce que l’on obtient si
on trace la routine BELL vu ci-dessus :
====== TRACE PC=$00005308 ==================== 19-02-2003 22:48:06 ======
Pas 0
SPR=0000 SPA=0001 SA=0000 SCE=4800 PR=0000 PA=0000 A=0000 CE=0800 ....S
PNTT=0200 S=0000 T=0000 PNTR=03F4 R=0000 PC=00005308.0 LIT #$0007
Pas 1
SPR=0000 SPA=0001 SA=0000 SCE=4800 PR=0000 PA=0000 A=0000 CE=4800 .I..S
PNTT=02FF S=0000 T=0007 PNTR=03F4 R=0000
PC=00005308.1 LIT #$0000
Pas 2
SPR=0000 SPA=0001 SA=0000 SCE=4800 PR=0000 PA=0000 A=0000 CE=4800 .I..S
PNTT=02FE S=0007 T=0000 PNTR=03F4 R=0000 PC=00005308.2 NOP
Pas 3
SPR=0000 SPA=0001 SA=0000 SCE=4800 PR=0000 PA=0000 A=0000 CE=4800 .I..S
PNTT=02FE S=0007 T=0000 PNTR=03F4 R=0000
PC=0000530E.0 CALL $00005202
On obtient les conditions de
déclenchement, la date et pour chaque pas du FPGA, son numéro, le vidage de
tous les registres internes du FPGA et enfin le désassemblage de l’instruction
(non encore exécutée, elle le sera lors du passage au pas suivant).
Efface Trace: nettoie la
fenêtre de trace. Impossible de revenir en arrière.
Réglages: permet de
spécifier les conditions de déclenchement de la trace.
Pour rester simple le critère de
déclenchement est soit quand le PROGRAM COUNTER du FPGA atteint une certaine
adresse sur 32 bits (quand Et Registre
vaut Aucun), soit une double condition sur la valeur du PC sur 32 bits et sur
la valeur d’un registre FPGA sur 16 bits (quand Et Registre vaut le nom d'un des registres du FPGA). Pour passer en
mode trace pas à pas lors de l’appel
de la fonction BELL renseignez la fenêtre Réglages
Débogueur comme ci-dessus ( pour trouver l’adresse de la fonction BELL dans
votre ROM, il suffit de faire HEX FIND BELL . ) puis taper BELL et valider.
Vous obtiendrez quelque chose comme la trace ci-dessus. Noter que le bouton d’armement ressort lorsque le critère de
déclenchement est rencontré et que l’on passe du mode normal au mode trace. On
rebascule vers le mode normal quand
le nombre d’instructions FPGA prévu (ici 50) est déroulé. Ce nombre
d’instructions est modifiable même une fois en mode trace.
C’est
une trace en mode pas à pas, c’est à
dire que vous devez valider chaque pas en appuyant sur le bouton Pas (la LED FPGA est passée en rouge
pour indiquer que le FPGA est arrêté). C’est très pratique pour suivre le FPGA.
Vous
pouvez également faire une trace en mode
running en appuyant sur le bouton Exécution
avant d’armer la trace. C’est pratique quand le nombre de pas à faire et grand
et que vous ne savez pas trop ce que vous cherchez. Vous ferez alors du
dépouillage.
Vous
pouvez enfin passer du mode trace pas à
pas au mode trace en mode running
en appuyant sur le bouton Exécution une
fois que vous êtes entrés en mode trace pas à pas (l’inverse n’est pas
faisable).
L’utilisation
d’un registre en plus du PC pour le
déclenchement n’a rien de sorcier si ce n’est qu’il faut savoir quelle valeur
chercher et par quel registre elle va transiter (se reporter au site de JPB
FORTH pour connaître l’utilisation des registres).
Statistiques: permet
d’afficher quelques statistiques sur le fonctionnement de l’émulateur et du
code applicatif.
Les couleurs
des courbes sont modifiables dans l’objet Debogueur/Réglages/Couleur
Opcodes/Routines/….
Le graphique Opcodes
indique depuis le lancement de l’émulateur le nombre exécuté de chacune des 33
instructions. L’échelle peut être mise en logarithmique. En cliquant sur
une colonne on obtient le nombre exact et l’intitulé au dessus du graphique. On
peut aussi zoomer dans le graphique en jonglant avec les touches SHIFT et les
boutons de la souris. Il est conseillé d’arrêter le FPGA si on veut zoomer.
Le graphique Routines
indique depuis le lancement de l’émulateur le nombre exécuté de chacun des
mot-clefs FORTH. L’échelle peut être mise en logarithmique. En cliquant
sur une colonne on obtient le nombre exact, l’adresse du mot-clef et l’intitulé
au dessus du graphique. On peut aussi zoomer dans le graphique en jonglant avec
les touches SHIFT et les boutons de la souris.
Le graphique Activité
indique dans une fenêtre glissante le taux d’occupation du CPU. Si l’on
augmente le nombre d’instructions par HTR, ce taux diminue. Si on le diminue,
le taux augmente. Ce peut être un moyen de régler le nombre d’instruction par
HTR. L’idéal est de rester en dessous de 50% afin d’avoir de la marge pour
quand on veut faire un peu de calcul.
Efface Statistiques: nettoie la
fenêtre de statistiques. Impossible de revenir en arrière.
A propos de
MiniForthFpga: donne la version courante de l’émulateur et l'adresse du
site de JPB FORTH. Un clic dans le coin supérieur droit de cette fenêtre la
ferme.
V0.5: Première
version en test envoyée à tous les membres du forum en mars 2002 pour
évaluation.
V0.6: Ajout
de l’écran VGA.
V0.7: Modification
de l’écran de statistique. Ajout des registres SOUND et RESOLUTION.
V0.8: Ajout
du protocole d’écriture en FLASH.
V0.9: Modification
des Resets.
V1.0: Accélération
des accès à l’écran VGA, du téléchargement Xmodem. Ajout de la LED FLASH.
V099_TELEC.BIN + V099_V040_LANCE.BIN:
Cette version V1.0 de MiniForthFpga a
été conçue et déboguée face à la ROM V0.99 du 08/12/2002 de JPB FORTH.
TETRIS.TXT V0.10:
Pas de problème.
PALETTE.TXT V1.00:
Pas de problème.
Voici les
opérations nécessaires pour installer un nouveau noyau depuis le néant. Ceci
est utile quand on veut faire une mise a
jour avec une version plus récente ou re-installer la version courante suite à
un problème. La procédure décrite ici est la méthode standard, qui est très
proche de la procédure avec la vraie carte. Une méthode plus rapide évitant le
premier transfert Xmodem existe aussi (supprimer MiniForthFpga.bin, puis
recopier v099_telec.bin dans MiniForthFpga.bin).
Attention cette méthode dépend énormément du
processus codé dans le noyau FORTH. Si cette procedure devient caduque, se
reporter alors au site de JPB FORTH. Elle n'est fournie ici que pour aider
l'utilisateur.
Première partie: le système de base
·
Lancez l'émulateur.
·
Positionnez l'objet Emulateur/Réglages/Mode Boot sur ROM.
·
Dans la fenêtre
principale passez en mode Terminal (en bas à gauche) puis faites un Emulateur/Reset
Très Froid. Confirmez. Vous devez voir apparaître dans le terminal:
FORTH core V
0.1
M.BOVET L.FOUBE
www.eif.ch
XMODEM boot V 1.5
JPB
jpb.forth.free.fr
·
Faites ensuite Terminal/Charge
Xmodem avec la version du logiciel applicatif de base désirée ( ici par
exemple v099_telec.bin). Vous devez voir apparaître sur le coté gauche
du terminal:
Xmodem:
10 Essais
xxx Acks
0 Nack
·
Rebasculez l'objet Emulateur/Réglages/Mode Boot sur FLASH.
·
Attendre patiemment que
le téléchargement s'arrête et que l'affichage ci-dessus disparaisse ( ca dure
environ 3 minutes ). Puis la LED FLASH doit clignoter et le système démarrer.
·
Répondez "N"
à la question du changement de nom de système.
Deuxième partie: le système graphique
·
Une fois la première partie effectuée, vous êtes donc en
mode Terminal.
·
Faites Terminal/Charge
Terminal avec le fichier init_flash.txt.
·
Répondez "N"
à la question concernant le changement de nom de système.
·
Faites ensuite Terminal/Charge
Xmodem avec la version du logiciel applicatif graphique désirée ( ici
par exemple v099_v040_lance.bin ). Vous devez voir apparaître sur le
coté gauche du terminal:
Xmodem:
10 Essais
xxx Acks
0 Nack
·
Attendez patiemment que
le téléchargement s'arrête et que l'affichage ci-dessus disparaisse ( encore 3
minutes ). Pour passer le temps, vous pouvez ouvrir Emulateur/Registre
Flash. La LED FLASH doit clignoter JAUNE pour indiquer les écritures du
fichier en FLASH.
·
Faites ensuite Terminal/Charge
Xmodem avec la version du logiciel applicatif lanceur désirée ( ici par
exemple lance_vga.bin). Vous devez voir apparaître sur le coté gauche du
terminal:
Xmodem:
10 Essais
xxx Acks
0 Nack
·
Attendez patiemment que
le téléchargement s'arrête et que l'affichage ci-dessus disparaisse (c'est très
rapide). Le système rend la main (OK>).
·
Dans la fenêtre
principale repassez en mode Vga (en bas à gauche) puis faites un Emulateur/Reset Froid. Vérifiez que ca redémarre
correctement.
·
Par sécurité, quittez
l'emulateur (confirmez) pour enregistrer sur le disque du PC le contenu de la
nouvelle FLASH.
Troisième partie (optionnelle): les applications
·
Une fois les 2 premières parties effectuées et après avoir
tout redémarré, vous êtes donc en mode Vga.
·
Ouvrez la fenêtre shell
FORTH (celle marquée d'un F stylilsé) en double-cliquant dessus et tapez par
exemple dedans XMODEM_RECOIT" ./APPLICATIONS/JEUX/TETRIS.TXT"
·
Faites ensuite Terminal/Charge
Xmodem avec l'application désirée ( ici par exemple tetris.txt ).
Vous devez voir apparaître sur le coté gauche du terminal:
Xmodem:
10 Essais
xxx Acks
0 Nack
·
Attendez patiemment que
le téléchargement s'arrête et que l'affichage ci-dessus disparaîsse. Une
animation vous fait patientez. La LED FLASH doit clignoter JAUNE pour indiquer
les écritures du fichier en FLASH. Le système rend la main (OK>).
·
Par sécurité, quittez
l'émulateur (confirmez) pour enregistrer sur le disque du PC le contenu de la
nouvelle FLASH.
·
Pour lancer
l'application, il faut d'abord la compiler ( toujours dans la fenêtre F ) avec CF"
./APPLICATIONS/JEUX/TETRIS.TXT"
·
Puis la lancer en tapant TETRIS.
·
Ouvrez la fenêtre
TETRIS (celle marquée d'une icône changeante) en double-cliquant dessus.
·
Jouez.
Pour
plus de facilité, la FLASH contenue dans le kit d'installation est déja dans
cet état et contient les premières applications TETRIS et PALETTE.
MiniForthFpga
V1.0 a été écrit en langage C à l’aide de LabWindows CVI, un environnement de
développement sur PC/SUN issu du monde industriel et que je conseille à tous
ceux qui veulent faire de petites applications assez graphiques sans se prendre
la tête avec les API de Windows. Il est d’une stabilité remarquable et possède
un excellent débogueur. Dommage que ce ne soit pas un produit grand public.
Le source fait
4600 lignes de code parfois dense et représente une taille de 260 Ko.
L’émulateur FPGA représente 1/10 du volume, les autres émulateurs 1/3 et la
gestion de l’interface graphique le reste.
Il a été écrit à partir de l’émulateur MiniForth68k écrit l’an dernier
dont il a repris l’ossature et une grande partie des fonctionnalités.
Tout d’abord
merci à Charles H. MOORE pour avoir créé ce langage semi-compilé si original à
la fin des années 60.
Ensuite merci
à JPB d’avoir apporté les éclaircissements techniques sur le fonctionnement
interne de sa machine quand ma compréhension faisait défaut. Merci à lui aussi
pour avoir assuré la phase d’alpha tests.
Maintenant
c’est à vous de bosser. Que diable !
Utilisez le forum
de JPB FORTH pour communiquer vos questions, les points à éclaircir dans la
documentation, les fautes à supprimer, lister les bogues trouvées, soumettre
des évolutions et proposer vos applications (ca fera plaisir à JPB):
jpb_forth@yahoogroups.com
La
prochaine version devrait contenir les idées qui auront germé d’ici là.
LabWindows CVI est une marque déposée
de National Instruments Corporation.
Windows 95, 98, 2000, NT, Millenium,
HyperTerminal, WordPad sont des marques déposés de Microsoft Corporation.