Documentation Hector - Forth PAMPUK
Modérateurs : Papy.G, fneck, Carl
Documentation Hector - Forth PAMPUK
Bonjour à tous,
Je regardais par curiosité le Forth PAMPUK du Hector. La seule notice que j'ai pu trouver est "La pratique du Forth avec Hector" par Michel Henric-Coll.
La commande VLIST nous montre que le vocabulaire est bien plus complet (Standard 79) et bon nombre de mots non-standard ne sont pas expliqués.
Existe-t-il une autre documentation ? Merci
Je regardais par curiosité le Forth PAMPUK du Hector. La seule notice que j'ai pu trouver est "La pratique du Forth avec Hector" par Michel Henric-Coll.
La commande VLIST nous montre que le vocabulaire est bien plus complet (Standard 79) et bon nombre de mots non-standard ne sont pas expliqués.
Existe-t-il une autre documentation ? Merci
Re: Documentation Hector - Forth PAMPUK
Salut à tous,
Bien que le "La pratique du Forth avec Hector" soit très bien fait et instructif ( J'ai beaucoup aimé le chapitre sur les Vocabulaires) il manque quelques informations.
Sauf erreur de ma part rien n'est dit sur l'interpréteur d'adresse NEXT ce qui fait que bon nombre de candidats utilisateurs sont passés à coté des mots en ASM.
C'est pourtant l'un des points forts du Forth. Ceci et d'autres choses m'ont amenés à désassembler le compilateur Forth Pampuk.
Il est assez remarquable.
La première surprise est justement la façon de retourner à l'interpréteur d'adresse : Généralement les Forth font un JUMP à l'adresse de l'interpréteur. (C3 Adresse).
Comme vous pourrez le voir dans le listing, ici l'adresse se trouve dans le registre IX et le jump se fait par un JP (IX).
Une partie de la ROM étant justement adaptée à ces JP (IX).
1 - J'ai trouvé quelques perles :
Ainsi la partie ASM du mot FILL (adr 2A69 ) possède plusieurs entrées.
Par c_fill2 on fait :
Par c_fill3 on fait :
Par c_fill on fait :
Les trois sont valides.
2 - Ne connaissant pas le Hector ni sa ROM, tout n'est pas clair encore: Où se situe le point d'entrée (Cold3 ?)
Y a-t-il des routines ASM cachées dans les quelques blancs que j'ai trouvés ? (2Fe4H à 3040H - 37eah à 3840h et autres)
3 - Dans la mesure du possible j'ai décompilé les instructions mais sans les vérifier toutes et le mot TAPE1 a résisté.
4 - Merci de me signaler d'éventuelles corrections.
5 - Je pense que cependant le document peut être utile et Daniel, Yo_fr et d'autres peuvent l'inclurent s'ils le souhaitent sachant qu'il est sujet à corrections.
OBS : Il y a encore un espace laissé intact "DW SUP." (adr 2FED). Peut être un reste de l'assembleur de l'époque. Salut
Bien que le "La pratique du Forth avec Hector" soit très bien fait et instructif ( J'ai beaucoup aimé le chapitre sur les Vocabulaires) il manque quelques informations.
Sauf erreur de ma part rien n'est dit sur l'interpréteur d'adresse NEXT ce qui fait que bon nombre de candidats utilisateurs sont passés à coté des mots en ASM.
C'est pourtant l'un des points forts du Forth. Ceci et d'autres choses m'ont amenés à désassembler le compilateur Forth Pampuk.
Il est assez remarquable.
La première surprise est justement la façon de retourner à l'interpréteur d'adresse : Généralement les Forth font un JUMP à l'adresse de l'interpréteur. (C3 Adresse).
Comme vous pourrez le voir dans le listing, ici l'adresse se trouve dans le registre IX et le jump se fait par un JP (IX).
Une partie de la ROM étant justement adaptée à ces JP (IX).
1 - J'ai trouvé quelques perles :
Ainsi la partie ASM du mot FILL (adr 2A69 ) possède plusieurs entrées.
Code : Tout sélectionner
c_fill2:
D9 EXX
1E 20 LD E,20H
21 .DB 21h
c_fill3:
D9 EXX
1E 00 LD E,00H
21 .DB 21h
c_fill:
D9 EXX
D1 POP DE
Code : Tout sélectionner
D9 EXX
1E 20 LD E,20H
21 D9 1E LD HL, 1ED9h
00 NOP
21 D9 DE LD HL, DED9h
D1 POP DE
Code : Tout sélectionner
D9 EXX
1E 00 LD E,00H
21 D9 DE LD HL, DED9h
D1 POP DE
Code : Tout sélectionner
D9 EXX
D1 POP DE
2 - Ne connaissant pas le Hector ni sa ROM, tout n'est pas clair encore: Où se situe le point d'entrée (Cold3 ?)
Y a-t-il des routines ASM cachées dans les quelques blancs que j'ai trouvés ? (2Fe4H à 3040H - 37eah à 3840h et autres)
3 - Dans la mesure du possible j'ai décompilé les instructions mais sans les vérifier toutes et le mot TAPE1 a résisté.
4 - Merci de me signaler d'éventuelles corrections.
5 - Je pense que cependant le document peut être utile et Daniel, Yo_fr et d'autres peuvent l'inclurent s'ils le souhaitent sachant qu'il est sujet à corrections.
OBS : Il y a encore un espace laissé intact "DW SUP." (adr 2FED). Peut être un reste de l'assembleur de l'époque. Salut
Dernière modification par Dominique le 02 sept. 2020 08:15, modifié 1 fois.
Re: Documentation Hector - Forth PAMPUK
Merci au nom de tous les utilisateurs d'Hector
Le fichier a été ajouté à la page Documentation du site dchector : http://dchector.free.fr/doc.html
Le fichier a été ajouté à la page Documentation du site dchector : http://dchector.free.fr/doc.html
Daniel
L'obstacle augmente mon ardeur.
L'obstacle augmente mon ardeur.
Re: Documentation Hector - Forth PAMPUK
Bien !
En fait ça a mal commencé : J'ai écrit PAMPU(C)K - Sera corrigé dans les autres versions
En fait ça a mal commencé : J'ai écrit PAMPU(C)K - Sera corrigé dans les autres versions
Re: Documentation Hector - Forth PAMPUK
Salut à tous,
Voici la mise à jour du fichier. J'ai testé toutes les définitions modifiant celles qui ne marchaient pas.
Je suis actuellement plongé dans le GRAFORTH APPLE II de P Lutus (Magnifique !) avec le rêve fou de l'adapter
sur le MO5. Le 6809 étant nettement plus évolué que le 6502 j'ai bon espoir.
A+ Dominique
Voici la mise à jour du fichier. J'ai testé toutes les définitions modifiant celles qui ne marchaient pas.
Je suis actuellement plongé dans le GRAFORTH APPLE II de P Lutus (Magnifique !) avec le rêve fou de l'adapter
sur le MO5. Le 6809 étant nettement plus évolué que le 6502 j'ai bon espoir.
A+ Dominique
Re: Documentation Hector - Forth PAMPUK
Il ne faut pas croire que le 6809 soit plus évolué que le 6502.
même si sous ces air "simple" le 6502 est très puissant et utilise des modes d'adressages performant, même si le nombre de registres processeur paraissent limité il n'en est rien ....
même si sous ces air "simple" le 6502 est très puissant et utilise des modes d'adressages performant, même si le nombre de registres processeur paraissent limité il n'en est rien ....
Re: Documentation Hector - Forth PAMPUK
C'est évident, sinon le pseudo de Philippe serait 6809man
Patrick
Re: Documentation Hector - Forth PAMPUK
Oui mais ca sonne pas bien je trouve
Re: Documentation Hector - Forth PAMPUK
C'est vrai Phil que j'aurai dû dire : "Pour le Forth" -
On dit du Forth qu'il est un " imperative stack-based computer programming language" et c'est pour ça que le 6809 y est particulièrement bien adapté. Aussi bien le 6502 que le Z80 doivent piloter leur pile par soft et pointeurs de pile et c'est pénible.
On dit du Forth qu'il est un " imperative stack-based computer programming language" et c'est pour ça que le 6809 y est particulièrement bien adapté. Aussi bien le 6502 que le Z80 doivent piloter leur pile par soft et pointeurs de pile et c'est pénible.
Re: Documentation Hector - Forth PAMPUK
Pour la gestion de la pile le 6809 à peut être des avantages par rapport aux 6502 et Z80, quoique je vois pas exactement quel usage précis donnerais
un avantage au 6809 hormis qu'il à 2 piles (S et U) ???
Je suis curieux de voir un exemple de code dans ce sens ?
un avantage au 6809 hormis qu'il à 2 piles (S et U) ???
Je suis curieux de voir un exemple de code dans ce sens ?
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Documentation Hector - Forth PAMPUK
le 6809 a aussi des registres d'index 16bits. C'est bien pratique. Concernant le forth et le 6809, tu peux regarder les premières pages du source de FIG-FORTH 6809 >>ici<< qui utilise abondamment ces registres 16bits du 6809 dans les primitives du noyau sans compter ce joli dans la routine EXEC. Le but ici est de faire les primitives les plus compactes (occupation mémoire), et les plus rapides possibles. Tous les registres du 6809 sont utilisés par le forth.
Dans la routine U* (mutliplication 16bits * 16bits non signée), il n'est en revanche pas tenu compte de l'instruction MUL du 6809, probablement pour garder le code court au dépends de la vitesse:
à comparer avec quelque chose comme
Code : Tout sélectionner
JSR [,U++]
Dans la routine U* (mutliplication 16bits * 16bits non signée), il n'est en revanche pas tenu compte de l'instruction MUL du 6809, probablement pour garder le code court au dépends de la vitesse:
Code : Tout sélectionner
* The following is a subroutine which multiplies top
* 2 words on stack, leaving 32-bit result: high order in D
*- and low order word in 2ND word of stack.
USTARS
LDX #17
LDD #0
USTAR2
ROR 2,U shift mult
ROR 3,U
LEAX -1,X
BEQ USTAR4
BCC USTAR3
ADD ,U
USTAR3
RORA
RORB
BRA USTAR2
USTAR4
RTS
Code : Tout sélectionner
USTARS
LDD 2,U
PSHS D
LDD ,U
PSHS D
LDA 3,S
MUL
STD 2,U
LDA 2,S
LDB ,S
MUL
STD ,U
LDA 3,S
LDB ,S
MUL
ADDD 1,U
STD 1,U
BCC USTAR2
INC ,U
USTAR2
LDD 1,S
MUL
ADDD 1,U
STD 1,U
LDD 1,U
BCC USTAR3
INCA
USTAR3
LEAS 4,S ; word(,U) n'est pas le même qu'au début contrairement au code Forth
RTS
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
Re: Documentation Hector - Forth PAMPUK
Le saut avec incrément de la pile U est effectivement un avantage on ne retrouve pas d'équivalent sur 6502 ou Z80 il faut utiliser des registres processeurs ou la page zéro pour le 6502 mais beaucoup moins souple !!!
Re: Documentation Hector - Forth PAMPUK
En complément de ce que vient de dire SAM et sans trop rentrer dans le détail, FORTH utilise au moins deux piles :
Une pour passer plusieurs valeurs entre les différentes procédures (C'est la pile U du 6809)
L'autre pour mettre les adresses retour des procédures un peu comme RST (C'est la pile S du 6809)
Comme le Z80 et le 6502 n'ont qu'une pile on gère l'autre en déclarant une adresse de base et un offset que l'on INC ou DEC selon qu'on fait des PUSH ou des POP.
Pour faire l'addition de deux valeurs dans la pile de données Le Graforth APPLE fait ça
Le 6809 fait ça
Edit
Après observation de SAM, corriger :
Une pour passer plusieurs valeurs entre les différentes procédures (C'est la pile U du 6809)
L'autre pour mettre les adresses retour des procédures un peu comme RST (C'est la pile S du 6809)
Comme le Z80 et le 6502 n'ont qu'une pile on gère l'autre en déclarant une adresse de base et un offset que l'on INC ou DEC selon qu'on fait des PUSH ou des POP.
Pour faire l'addition de deux valeurs dans la pile de données Le Graforth APPLE fait ça
Code : Tout sélectionner
a4 9c LDY $9C 3 ; Y <- ($9C) Offset Pile U dans Y
88 DEY 2 ; Y=Y-1
88 DEY 2 ; Y=Y-1
84 9c STY $9C 3 ; Save Offset
18 CLC 2 ; Clear Carry
b9 fe 1d LDA $1DFE,Y 5 ; Pile U
79 00 1e ADC $1E00,Y 4 ;
99 fe 1d STA $1DFE,Y 6 ;
b9 ff 1d LDA $1DFF,Y 5 ;
79 01 1e ADC $1E01,Y 4 ;
99 ff 1d STA $1DFF,Y 6 ;
Code : Tout sélectionner
EC42 LDD $02,U
E3D4 ADDD [,U]
EDD1 STD [,U++]
3342 LEAU $02,U
Après observation de SAM, corriger :
Code : Tout sélectionner
;****************
;* LE MOT +
;****************
48D1 3706 PULU A,B
48D3 E3C4 ADDD ,U
45B0 EDC4 STD ,U
Dernière modification par Dominique le 13 oct. 2020 09:47, modifié 1 fois.
-
- Messages : 7964
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Documentation Hector - Forth PAMPUK
Le code 6809 fait un truc bizarre avec [,U]. Il n'additionne pas les deux valeurs aux sommet de la pile, mais ajoute le second element de la pile à la valeur pointée par l'adresse en sommet de pile. En C il fait un truc du genre *(*U++) += *U (double indirection sur U) et pas *U += *U++ (pas facile à lire à cause de l'effet de bord sur U++ qui modifie la valeur utilisée par la partie gauche de l'affectation). Pour ajouter les deux premiers elements de la pile, c'est encore plus court en 6809
Code : Tout sélectionner
PULU D ; D = *U++
ADD ,U ; D += *U
STD ,U ; *U += *U++
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