Dans cet article je présente un projet que j'ai débuté en septembre 2015 puis mis sur pause pour le reprendre en octobre 2016. Depuis j'y travaille régulièrement de sorte que le projet est maintenant suffisant avancé pour considérer ForthEx, un petit ordinateur basé sur système forth, comme fonctionnel.
Origine du projet
En septembre 2015 j'ai trouvé un document pdf dans l'internet écris par Charles Moore créateur du langage forth. Dans ce document Charles Moore explique la construction d'un système forth à partir de rien (bare metal programming). C'est à dire en programmant la machine d'abord en assembleur puis lorsque le minimum requis en assembleur est fonctionnel continuer le développement en utilisant forth lui-même.
Après avoir lu ce document je me suis dis que ce serais intéressant de tenter cette expérience. Il me fallait donc une base matériel c'est à dire un ordinateur pour faire le travail. J'aurais pu prendre un vieux PC mais dans un vieux PC il y a déjà le BIOS d'installé. Je voulais vraiment partir de zéro au point de vu logiciel. J'ai donc conçu un petit ordinateur simple et peu coûteux en utilisant un MCU 16 bits de Microchip. Nommément le PIC24EP512GP202-I/SP. Il s'agit d'un microcontrôleur 16 bits, le même que j'ai utilisé pour le projet PV16SOG.
À partir de cette plateforme matérielle j'ai commencé à construire le système en assembleur et en forth jusqu'à ce que j'arrive à un système utilisable en autonome.
ForthEx
C'est le nom que j'ai donné à ce petit système forth. Ce nom englobe la plateforme matérielle et le système logiciel embarqué. Les caractéristiques de cet ordinateur sont les suivantes:
- périphériques:
- clavier d'ordinateur avec connecteur USB.
- Sortie vidéo composite NTSC ou PAL monochrome
mode texte 25 lignes de 64 caractères. - port de communication RS-232.
- sortie audio simple tonalité.
- stockage persistant:
- Mémoire FLASH du MCU environ 475Ko disponible pour l'utilisateur.
- Mémoire EEPROM externe avec interface SPI de 128Ko.
- Carte SD et SDHC.
- Extension RAM externe avec interface SPI de 128Ko.
- système forth incluant presque la totalité du vocabulaire core et core extension du standard ANSI 2012, plus le vocabulaire spécifique à ce système. Bien que le système ne soit pas encore complété le mot WORDS affiche présentement 367 mots. Il y en a plus que ça dans le dictionnaire car certains mots utilisés par le compilateur sont caché à l'utilisateur.
Plateforme matérielle
On a donc le processeur principal PIC24EP512GP202-I/SP. Comme le clavier fonctionne à 5 volt il faut 2 régulateurs de tension 5 volt pour le clavier et le PIC12F1572 et 3,3 volt pour le reste du circuit. Pour le détail de l'interface clavier il faut consulter le projet interface pour clavier ps2. Notez que même si un clavier USB est utilisé il fonctionne en mode PS2. En effet de par la façon dont les lignes D- et D+ sont connectés à des pullup le MCU du clavier reconnaît qu'il s'agit d'une configuration PS2 et non USB.
Ce petit ordinateur est donc très peu coûteux à fabriqué car il utilise un minimum de composants. On peut même laisser tomber certains composants comme l'extension RAM externe et/ou la l'EEPROM externe. Une autre option serait de laisser tomber l'interface pour la carte SD et à la place utilisé seulement des EEPROM SPI enfichable pour le stockage persistant.
Le prototype est assemblé sur une carte à pastille avec trous passants (pastilles sur les 2 faces). Il s'agit d'une carte Vector electonics modèle 8015 de 4" x 6" ( 10cm x 15cm). Ce n'est pas très long à assembler. Le gros du travail c'est l'écriture du système logiciel.
Liste matérielle
Reference | Value |
R11 | 4k7 |
R8 | 120R |
R10 | 680R |
P1 | ICSP |
R7 | 470R |
R6 | 10K |
C7 | 100nF |
SW2 | reset |
C8 | 100nF |
C11 | 100nF |
C12 | 47µF |
X1 | 8Mhz |
C6 | 18pF |
C4 | 18pF |
C13 | 100nF |
R15 | 10k |
U4 | 25LC1024 |
SW1 | Power |
R17 | 10k |
R13 | 10K |
R5 | 150R |
D2 | LED |
CON2 | BARREL_JACK 2,1mm |
C1 | 47µF |
C3 | 100nF |
U1 | LD1117v33 |
J2 | RCA_JACK |
J1 | RCA_JACK |
R12 | 1K |
C14 | 100nF |
U5 | 23LC1024 |
R16 | 10k |
R9 | 4k7 |
C9 | 10nF |
C10 | 22nF |
D3 | 1N6263 |
U3 | PIC24EP512GP202 |
Q2 | 2N3904 |
R2 | 47K |
D1 | 1N6263 |
C2 | 33µF |
Q1 | 2N3906 |
R4 | 10k |
R1 | 3K3 |
R3 | 47K |
U2 | LM7805CT |
C5 | 220nF |
CON1 | SD_Card |
F1 | 500mA |
D4 | 1N4148 |
J3 | RJ12 |
R14 | 10K |
R23 | 10K |
R24 | 10K |
R25 | 10K |
D7 | 1N4148 |
D6 | 1N4148 |
R18 | 10K |
P2 | keyboard |
C15 | 100nF |
C16 | 100nF |
U6 | PIC12F1572 |
D5 | LED |
R20 | 470 |
P3 | ICSP |
R19 | 470 |
R21 | 10k |
R22 | 10k |
C17 | 10µF/50v |
D8 | 1N4148 |
R26 | 470 |
Dans la partie 2 je vais débuter la description du système logiciel.
liens
- dépot github du projet.
- brève introduction à forth
Aucun commentaire:
Publier un commentaire
Remarque : Seuls les membres de ce blogue sont autorisés à publier des commentaires.