jeudi 23 mars 2017

ForthEx (partie 1)

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

Aucun commentaire:

Publier un commentaire