Documentation Hector - Forth PAMPUK

Les bouquins, les scans, les pdf ou les liens qui vont bien... ici c'est la bibliothèque.

Modérateurs : Papy.G, fneck, Carl

Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Documentation Hector - Forth PAMPUK

Message par Dominique »

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
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par Dominique »

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.

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
Par c_fill2 on fait :

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
Par c_fill3 on fait :

Code : Tout sélectionner

	D9                  EXX 
	1E 00       	    LD      E,00H 
	21  D9 DE           LD HL, DED9h
	D1                  POP     DE
Par c_fill on fait :

Code : Tout sélectionner

	D9          	EXX
	D1              POP     DE
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.
ForthHector.rar
(59.97 Kio) Téléchargé 122 fois
Salut
Dernière modification par Dominique le 02 sept. 2020 08:15, modifié 1 fois.
Xavier_

Re: Documentation Hector - Forth PAMPUK

Message par Xavier_ »

Merci Dominique, superbe travail d'enquêteur…
8)
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par Daniel »

Merci au nom de tous les utilisateurs d'Hector 8)
Le fichier a été ajouté à la page Documentation du site dchector : http://dchector.free.fr/doc.html
Daniel
L'obstacle augmente mon ardeur.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par Dominique »

Bien !

En fait ça a mal commencé : J'ai écrit PAMPU(C)K - Sera corrigé dans les autres versions
:D
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par Dominique »

Salut à tous,

Voici la mise à jour du fichier.
FORTHHECTOR V11.zip
(66.33 Kio) Téléchargé 117 fois
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
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par 6502man »

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 .... :wink:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Patrick
Messages : 2019
Inscription : 16 mai 2009 09:30
Localisation : Clermont-Ferrand

Re: Documentation Hector - Forth PAMPUK

Message par Patrick »

C'est évident, sinon le pseudo de Philippe serait 6809man :D
Patrick
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par 6502man »

Oui mais ca sonne pas bien je trouve :lol: :lol: :lol: :arrow: :arrow:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par Dominique »

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.
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par 6502man »

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 ?
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Documentation Hector - Forth PAMPUK

Message par __sam__ »

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

Code : Tout sélectionner

JSR [,U++]
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:

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
à comparer avec quelque chose comme

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
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par 6502man »

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 !!!
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Avatar de l’utilisateur
Dominique
Messages : 828
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: Documentation Hector - Forth PAMPUK

Message par Dominique »

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

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	;
Le 6809 fait ça

Code : Tout sélectionner

	EC42                    LDD    $02,U              
	E3D4                    ADDD   [,U]               
	EDD1                    STD    [,U++]                       
	3342                    LEAU   $02,U
Edit
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.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Documentation Hector - Forth PAMPUK

Message par __sam__ »

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
Répondre