MiniForthFpga V1.0

 

© F.BROTON Février 2003

http ://fbroton.free.fr/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.

 


1) Table des matières

 

1) Table des matières. 2

2) Installation.. 2

3) L’émulateur de terminal 3

4) L’émulateur d’écran VGA.. 4

5) L'émulateur de FPGA.. 5

6) L'émulateur de mémoire FLASH.. 7

7) L'émulateur de mémoire RAM.. 8

8) L'émulateur de registres d’extension.. 9

9) L'émulateur de circuit reset 11

10) L’émulateur de port A et port B.. 11

11) Séquencement de la carte. 12

12) Principes généraux de l'interface graphique. 13

13) Le menu Terminal 14

14) Le menu Emulateur. 14

15) Le menu Débogueur. 16

16) Le menu ?.. 19

17) Historique et évolutions. 19

18) Compatibilité, version et bugs. 19

19) Re-installation du noyau FORTH.. 20

20) Chiffres, remerciements, projets et copyrights. 22

 

 

2) Installation

 

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


3) L’émulateur de terminal

 

 

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 !

 

4) L’émulateur d’écran VGA

 

 

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.

 


5) L'émulateur de FPGA

 

 

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.

 


6) L'émulateur de mémoire FLASH

 

 

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

 


7) L'émulateur de mémoire RAM

 

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.


8) L'émulateur de registres d’extension

 

 

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


9) L'émulateur de circuit reset

 

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.

 

 

 

10) L’émulateur de port A et port B

 

 

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.

 


11) Séquencement de la carte

 

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

 


12) Principes généraux de l'interface graphique

           

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.

 

 


13) Le menu Terminal

 

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.

 

 

 

14) Le menu Emulateur

 

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.


15) Le menu Débogueur

 

            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                  

 

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.


16) Le menu ?

 

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.

 

 

17) Historique et évolutions

 

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.

           

 

18) Compatibilité, version et bugs

 

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.


19) Re-installation du noyau FORTH

 

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.

 

 

 


20) Chiffres, remerciements, projets et copyrights

 

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.