[FORTH] Le mécanisme Forth
Modérateurs : Papy.G, fneck, Carl
Re: [FORTH] Le mécanisme Forth
Merci à toi jice,
Une chose que je n'avais pas dite mais que certains ont du noter est que :
Une des trois routines de la Machine Virtuelle se nomme "docol" qui vient de l'anglais "Do Colon" (faire deux points)
L'autre de nomme "semis" qui est en anglais (Point Virgule)
Qui a eu la curiosité de tester le Forth a bien vu que pour déclarer un mot en Forth on fait
: NNNN blablabla ;
Ceci expliquant cela
Une chose que je n'avais pas dite mais que certains ont du noter est que :
Une des trois routines de la Machine Virtuelle se nomme "docol" qui vient de l'anglais "Do Colon" (faire deux points)
L'autre de nomme "semis" qui est en anglais (Point Virgule)
Qui a eu la curiosité de tester le Forth a bien vu que pour déclarer un mot en Forth on fait
: NNNN blablabla ;
Ceci expliquant cela
Re: [FORTH] Le mécanisme Forth
Bonjour,
Le créateur de FORTH travaille toujours et au fil des ans, a conçu des SoC FORTH, remarquables par leur simplicité architecturale.
Un des plus connu est le J1, facile d'ailleurs à implémenter sur FPGA :
https://www.excamera.com/sphinx/fpga-j1.html
https://github.com/howerj/forth-cpu
Moins connu, le GA144, avec 144 "ordinateurs" FORTH indépendants et parallèles.
En théorie, il se prête bien aux taches parallélisables, DSP comme les calculs FFT, ou l'apprentissage machine.
En pratique, il est peu connu, difficile à se procurer, et difficile à faire fonctionner. Quelques-un s'y sont quand même essayés :
https://hackaday.com/2012/10/03/breadbo ... processor/
https://bitlog.it/20141224_getting_star ... forth.html
On peut s'en procurer un ici, mais la soudure d'un SMD aussi minuscule me fait peur !
https://schmartboard.com/schmartboard-e ... 2-0048-02/
Le créateur de FORTH travaille toujours et au fil des ans, a conçu des SoC FORTH, remarquables par leur simplicité architecturale.
Un des plus connu est le J1, facile d'ailleurs à implémenter sur FPGA :
https://www.excamera.com/sphinx/fpga-j1.html
https://github.com/howerj/forth-cpu
Moins connu, le GA144, avec 144 "ordinateurs" FORTH indépendants et parallèles.
En théorie, il se prête bien aux taches parallélisables, DSP comme les calculs FFT, ou l'apprentissage machine.
En pratique, il est peu connu, difficile à se procurer, et difficile à faire fonctionner. Quelques-un s'y sont quand même essayés :
https://hackaday.com/2012/10/03/breadbo ... processor/
https://bitlog.it/20141224_getting_star ... forth.html
On peut s'en procurer un ici, mais la soudure d'un SMD aussi minuscule me fait peur !
https://schmartboard.com/schmartboard-e ... 2-0048-02/
Re: [FORTH] Le mécanisme Forth
Par ailleurs, les "ordinateurs" F18A composant le GA144 :
http://www.greenarraychips.com/home/doc ... 2-F18A.pdf
http://www.greenarraychips.com/home/doc ... 2-F18A.pdf
- Mokona
- Messages : 1041
- Inscription : 17 déc. 2016 22:01
- Localisation : Nord Est des Yvelines
- Contact :
Re: [FORTH] Le mécanisme Forth
Ah merci, je ne connaissais pas du tout.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [FORTH] Le mécanisme Forth
Si je me souviens bien, ces cpus ont la particularité de consommer très peu. En fait ils n'ont pas d'horloge, Ils travaillent au rythme des données qui leur arrivent. C'est un truc très particulier, et très rigolo quand on regarde le jeu d'instructions minimaliste qu'il possède (tout comme le jeu d'instruction du J1). De ce que je me souviens d'avoir lu des white-paper sur green-array ce chip pouvait générer en temps réel logiciellement les signaux VGA.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
- Mokona
- Messages : 1041
- Inscription : 17 déc. 2016 22:01
- Localisation : Nord Est des Yvelines
- Contact :
Re: [FORTH] Le mécanisme Forth
Je ne connaissais pas du tout le principe des CPUs asynchrones, je lis ça depuis tout à l'heure et je suis fasciné.
Le principe est ancien pourtant, à ce que je lis.
Le principe est ancien pourtant, à ce que je lis.
Re: [FORTH] Le mécanisme Forth
Tout à fait, d'ailleurs l'IAS de Von Neumann, conçu en 1945, était asynchrone.
https://en.wikipedia.org/wiki/IAS_machine
https://en.wikipedia.org/wiki/IAS_machine
Re: [FORTH] Le mécanisme Forth
Excellente intervention Theor; merci
Malheureusement ça me dépasse un peu, mais ceci démontre que contrairement à ce qu'on pourrait penser le FORTH n'est pas une langue morte.
J'ai appris récemment qu'un des instruments de la fameuse sonde Philae avait été piloté par un processeur FORTH.
http://www.octodecillion.com/forth-lang ... -on-comet/
Malheureusement ça me dépasse un peu, mais ceci démontre que contrairement à ce qu'on pourrait penser le FORTH n'est pas une langue morte.
J'ai appris récemment qu'un des instruments de la fameuse sonde Philae avait été piloté par un processeur FORTH.
http://www.octodecillion.com/forth-lang ... -on-comet/
Re: [FORTH] Le mécanisme Forth
Il y a un point sur lequel je trouve Forth difficile : son manque de structuration apparente. Tout semble être à la même ligne et comme il n'y a pas de parenthèse (ce langage n'en a point besoin contrairement au Lisp), ça le rend difficile à lire et probablement aussi à déboguer car ce n'est pas formulé comme dans une langue naturelle (quoique le japonais a bien son verbe toujours à la fin et il doit faire preuve de patience pour savoir si vous l'autorisez ou l'interdisez de faire quelque chose parce que la négation se trouve porté par le suffixe du verbe). ^^
Concernant le F18A, il ne faut pas le considérer comme une alternative au processeur généraliste, mais plutôt à un FPGA dans le cas du GA144.
Concernant le F18A, il ne faut pas le considérer comme une alternative au processeur généraliste, mais plutôt à un FPGA dans le cas du GA144.
Re: [FORTH] Le mécanisme Forth
Bonjour à tous,
Il m'est venu l'idée de tester le FIG-FORTH sur le processeur 6803 du ALICE.
Dans un forum dédié au Forth j'ai eu un contact avec M. Joel Rees auteur d'un Fig-Forth pour le 6800 qu'il a optimisé pour le 6801
J'ai donc repris et testé la Machine Virtuelle qu'il a écrite.
- Le manque de registres 16 bits nous oblige à les sauvegarder provisoirement ce qui doit rendre le Forth peu performant.
- je vous laisse tester le programme
OBS : On peut bien entendu remplacer les JMP NEXT par des JR NEXT
- Testé sur le DCAlice 2020.08.04 - Mise au point - Fichier Bin chargé à $4250 - Registre PC modifié à $4250 - Pas à Pas
- Après avoir fait un premier Pas à Pas qui nous ramène à docol, on peut mettre un point d'arrêt à $4281 et vérifier l'état de la pile SP qui se trouve au dessus de $44E0
- Un suite d'exécutions en statique nous permet de vérifier que la somme est en train de s'effectuer.
- Ne connaissant pas le Alice comme certains sur ce forum, merci de me faire part de vos observation et améliorations
EDIT : Corrigé l'adresse de départ du fichier BIN - C'était $4250 et non 4550 comme bêtement écrit
Il m'est venu l'idée de tester le FIG-FORTH sur le processeur 6803 du ALICE.
Dans un forum dédié au Forth j'ai eu un contact avec M. Joel Rees auteur d'un Fig-Forth pour le 6800 qu'il a optimisé pour le 6801
J'ai donc repris et testé la Machine Virtuelle qu'il a écrite.
- Le manque de registres 16 bits nous oblige à les sauvegarder provisoirement ce qui doit rendre le Forth peu performant.
- je vous laisse tester le programme
Code : Tout sélectionner
;; a09 xxx.txt -b -l
; Remerciements à M. Joel Rees pour le FIG-FORTH du 6801
; dont il est l'auteur.
; https://osdn.net/users/reiisi/pf/exorsim6801/scm/tree/master/
OPT M03 ; Option pour le 6803
ORG $4250
4250 7E428E JMP Entree_Forth
PROGRAM
4253 42A4 FDB cf_somme_recurse
IP
4255 0000 FDB $0000 ; Pointeur d'adresse
W
4257 0000 FDB $0000 ; Vecteur
RP
4259 5000 FDB $5000 ; Pile Retour
;*****************************************
; MACHINE VIRTUELLE FORTH BY JOEL REES
;*****************************************
NEXT
425B FE4255 LDX IP
425E 08 NEXTWI INX pre-increment mode
425F 08 INX
4260 FF4255 STX IP
4263 EE00 NEXT2 LDX 0,X get W which points to CFA of word to be done
4265 FF4257 NEXT3 STX W
4268 EE00 LDX 0,X get VECT which points to executable code
426A 6E00 NEXTGO JMP 0,X
;***************
c_docol
426C FE4259 LDX RP make room in the return stack
426F 09 DEX
4270 09 DEX
4271 FF4259 STX RP
4274 FC4255 LDD IP Store address of the high level word
4277 ED02 STD 2,X that we are starting to execute.
4279 FE4257 LDX W Get first sub-word of that definition
427C 7E425E JMP NEXTWI and execute it.
*** warning 1: Long branch within short branch range could be optimized
;***************
cf_semis
427F 4281 FDB c_semis ; Code Field de semis
c_semis
4281 FE4259 LDX RP
4284 08 INX
4285 08 INX
4286 FF4259 STX RP
4289 EE00 LDX 0,X get address we have just finished.
428B 7E425E JMP NEXTWI increment the return address & do next word
*** warning 1: Long branch within short branch range could be optimized
;***********************************
******
; FIN DE LA MV FORTH
;***********************************
******
; Programme principal
; Somme des entiers naturels
Entree_Forth
428E 8E4500 LDS #$4500 ; Pile de données
4291 CE4700 LDX #$4700
4294 FF4259 STX RP ; Pile Retour
4297 CE0010 LDX #$0010 ; Valeur initiale N
429A 3C PSHX
429B FE4253 LDX PROGRAM ; Adresse début
429E FF4255 STX IP ; Sauvegarde dans IP
42A1 7E4265 JMP NEXT3
*** warning 1: Long branch within short branch range could be optimized
;*****************
; : SOMME-RECURSE ( N .. ΣN'0->n') DUP 1- DUP IF RECURSIVE + ENDIF ;
; Cette définition écrite sur le compilateur donne le programme suivant
;*******************
cf_somme_recurse
42A4 426C FDB c_docol ; c_docol à chaque passage mettra dans la pile Retour RP l'adresse $42B0 qui pointera sur le mot
+ après les 2 INX de NEXT
42A6 42C2 FDB cf_dup ; Le TOS de la pile de
données est dupliqué pour conserver l'ancienne valeur avant de faire 1- à la nouvelle
42A8 42EC FDB cf_moinsun ; - 1 sur une des valeur - la pile SP vaudra $10 puis $10 $0F puis $10 $0F $0E puis etc...
42AA 42C2 FDB cf_dup ; Dupliquée car cf_zerobran détruit le sommet
42AC 42CA FDB cf_zerobran ; Tant que le sommet ne vaut pas zero zerobranche ne fait pas le saut $0004
42AE 0004 FDB $0004 ; Quant il le fera W sera amené à $42B0 + 2 pour faire le +
42B0 42A4 FDB cf_somme_recurse ; sinon W retourne à $424A où c_docol empilera son adresse $42B0 dans RP
42B2 42B6 FDB cf_plus ; Au premier passage le TOS vaut 0 il sera sommé à 1 puis la somme à 2 puis la somme à 3 et....
42B4 427F FDB cf_semis ; Retire de la pile RP les valeurs laissés par W ($42B0) autant de fois que c_docol les a empilées.
; *********
; FIN DU PROGRAMME - SOMME DANS LE TOS DE LA PILE
; **********
; MOTS DU VOCABULAIRE
;************************
;* LE MOT +
;************************
cf_plus
42B6 42B8 FDB c_plus
c_plus
42B8 32 PULA commutative
42B9 33 PULB
42BA 30 TSX
42BB E300 ADDD 0,X
42BD ED00 STD 0,X
42BF 7E425B JMP NEXT ; Optimisation possible par JR NEXT
*** warning 1: Long branch within short branch range could be optimized
;************************
;* LE MOT DUP
;************************
cf_dup
42C2 42C4 FDB c_dup
c_dup
42C4 38 PULX
42C5 3C PSHX
42C6 3C PSHX
42C7 7E425B JMP NEXT ; Optimisation possible par JR NEXT
*** warning 1: Long branch within short branch range could be optimized
;************************
;* LE MOT 0BRANCH
;************************
cf_zerobran
42CA 42CC FDB c_zerobran
c_zerobran
42CC 32 PULA
42CD 33 PULB
42CE C30000 ADDD #0 save two cycles, no bytes
42D1 260E BNE ZBNO
42D3 FE4255 ZBYES LDX IP Note: code is shared with BRANCH, (+LOOP), (LOOP)
42D6 EC02 LDD 2,X
42D8 F34255 ADDD IP
42DB FD4255 STD IP
42DE 7E425B JMP NEXT
42E1 FE4255 ZBNO LDX IP no branch. This code is shared with (+LOOP), (LOOP).
42E4 08 INX jump over branch delta
42E5 08 INX
42E6 FF4255 STX IP
42E9 7E425B JMP NEXT ; Optimisation possible par JR NEXT
;************************
;* LE MOT 1-
;************************
cf_moinsun
42EC 42EE FDB Code_moinsun
Code_moinsun
42EE 38 PULX
42EF 09 DEX
42F0 3C PSHX
42F1 7E425B JMP NEXT ; Optimisation possible par JR NEXT
- Testé sur le DCAlice 2020.08.04 - Mise au point - Fichier Bin chargé à $4250 - Registre PC modifié à $4250 - Pas à Pas
- Après avoir fait un premier Pas à Pas qui nous ramène à docol, on peut mettre un point d'arrêt à $4281 et vérifier l'état de la pile SP qui se trouve au dessus de $44E0
- Un suite d'exécutions en statique nous permet de vérifier que la somme est en train de s'effectuer.
- Ne connaissant pas le Alice comme certains sur ce forum, merci de me faire part de vos observation et améliorations
EDIT : Corrigé l'adresse de départ du fichier BIN - C'était $4250 et non 4550 comme bêtement écrit