[Alice32] [Forth] Sokoban pour Alice

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

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

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Dominique »

@Farvadin

Le noyau du Fig-Forth possède de nombreux 'MOTS' en Assembler, c'est d'ailleurs comme ça qu'il débute.
Traditionnellement c'est le mot LIT
Puis viennent les MOTS de manipulation de pile (DUP, OVER, SWAP etc..) toujours écrits en ASM, puis les LOOP, les BRANCH également toujours en ASM.
Et tant d'autres.

J'ai d'ailleurs donné le source du noyau :

M. Joel Rees pour le FIG-FORTH du 6801
https://osdn.net/users/reiisi/pf/exorsi ... ee/master/

Il est aussi parfaitement informé et m'a donné 'le signal positif' :D
Joel Rees.jpg
Joel Rees.jpg (48.59 Kio) Consulté 814 fois
J'ai juste écrit les routines spécifiques Alice et le programme qui commence à CF_R0BIS; comme tu peux voir 95% FORTH.
C'est à peu de choses près le même programme que celui que j'avais fait pour le VG5K

http://dcvg5k.free.fr/programmes/sokoban/index.html

où j'ai commenté le listing de façon détaillée; Il n'y a pas plus FORTH que ça.

Là le compilateur Forth du VG5K, oui, c'était le mien
Avatar de l’utilisateur
Dominique
Messages : 833
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Dominique »

Tu as bien compris, @hlide.

D'ailleurs il n'existe pas de compilateur Forth pour Alice.

Si on connait le Forth sur le bout des doigts, si on a bien compris la Machine Virtuelle, si on a bien compris ce qui se passe au niveau de la compilation pour certains MOTS spéciaux comme IF ELSE ENFIF, ou DO LOOP et une dizaine d'autres, on n'a plus besoin de compilateur;
On tape directement les Codes Field Adress avec les FDB.
Le A09 calcule même les sauts relatifs, c'est dire.

J'avais, il y a quelques années, tenté de démontrer la machine virtuelle Forth et montré comment on peut en faire sans compilateur.
viewtopic.php?f=6&t=11545
Dernière modification par Dominique le 09 mars 2024 09:43, modifié 1 fois.
Avatar de l’utilisateur
Dominique
Messages : 833
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Dominique »

Daniel vient de publier la mise à jour du Sokoban, suite aux observations faites par Patrice.

http://alice32.free.fr/programmes/sokoban/index.html

"Pour voir la nouvelle version il faut peut-être vider le cache du
navigateur, sinon on risque de récupérer l'ancienne si elle est dans le
cache"

Merci Daniel
Avatar de l’utilisateur
Carl
Modérateur
Messages : 13301
Inscription : 08 avr. 2007 13:21
Localisation : http://www.doledujura.fr
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Carl »

Merci à la Team Alice 8)

Carl
Avatar de l’utilisateur
6502man
Messages : 12336
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par 6502man »

Super ca un Sokoban en Forth pour Alice, merci Dominique .

Je m'absente quelques jours et voila qu'il pleut des nouveaux programmes pour Alice :lol: :lol:

Du coup je viens d'en faire une version cartouche (standard, à démarrer en tapant EXEC 4096 au basic) :wink:
SokobanB.zip
(6.43 Kio) Téléchargé 9 fois
Dominique est ce qu'il serait envisageable de porter le Forth en tant que langage autonome pour l'Alice,
un peu comme pour les Hector, car avec l'extension multiports on peux mettre une cartouche "ROM" qui remplace
la ROM d'origine et donc booter directement l'Alice avec un autre langage :D
Ne connaissant absolument pas le Forth je ne pourrais le faire moi même, mais vu que toi tu maitrise le Forth et
que tu commence à bien connaitre l'Alice ???
L'espace cartouche permet de stocker 4 banks de 16 Ko ($C000-$FFFF) [commutation des banks en écrivant en $Cxxx-$Fxxx].
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Brochiman
Messages : 3546
Inscription : 02 juin 2019 11:26
Localisation : Angers

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Brochiman »

Oh merci Phil.😁👍
Avatar de l’utilisateur
Dominique
Messages : 833
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Dominique »

Merci Phil pour ton message :D

Oui, faire un compilateur pour Alice, et mettre à jour celui du VG5K, fait parti de mes projets.

J'ai passé quelques mois assez difficiles mais je suis sur la bonne voie et je dois être prêt à attaquer tout ça fin avril.
Je serais ravi de collaborer avec toi.

OBS : Je continue à travailler sur le listing du Sokoban. J'ai d'ailleurs trouvé un bug au niveau de la gestion des flèches en mode EDITEUR. Pour Patrice : C'est la même chose que ce que tu avais trouvé : Il ne reconnaissait pas <Ctrl>Z du Alice. La solution est bien entendu la même.
Avatar de l’utilisateur
Dominique
Messages : 833
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Dominique »

hlide a écrit : 08 mars 2024 21:06 ...
J'ai l'impression que le source contient le noyau Forth épuré puis la "compilation" Forth du jeu stocké via des FDB, ce qui est une façon très efficace de démarrer le jeu sans passer par le parsing source textuel d'un programme vers le code interne Forth (ce qu'on appelle le dictionnaire chez Forth ?). ...
- Pour répondre à ta question, le DICTIONNAIRE est la liste des MOTS qui composent ET le noyau Fig-Forth ET les MOTS que tu as crées en écrivant ton programme. Forth connait le dernier MOT que tu as créé et par l'intermédiaire d'un lien entre le dernier mot et l'avant-dernier puis ainsi de suite il parcours le DICTIONNAIRE.
http://www.massmind.org/techref/languag ... naries.htm

- Le programme pour Alice est très exactement ce qu'aurait donné un programme compilé si le Forth Alice existait; si ce n'est que j'ai enlevé :
1- Les entêtes des mots.
2- Les liens du chainage dont je viens de parler (parce que le chainage c'est le A09 qui le fait en trouvant les étiquettes).
3- Tous les mots superflus, en particulier les MOTS de compilation, pour ne garder que ceux qui font tourner le programme, ce que tu appelles, très justement, "le noyau Forth épuré". Si je crée un MOT qui a besoin d'un MOT du noyau, je rajoute ce dernier en lui enlevant l'entête et le lien, et mon noyau Forth épuré sera modifié.
Brochiman
Messages : 3546
Inscription : 02 juin 2019 11:26
Localisation : Angers

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Brochiman »

6502man a écrit : 09 mars 2024 23:05 Du coup je viens d'en faire une version cartouche (standard, à démarrer en tapant EXEC 4096 au basic) :wink:
SokobanB.zip
Je viens de tester cette version mais je n'arrive pas à faire bouger le personnage :cry:
Avatar de l’utilisateur
farvardin
Messages : 436
Inscription : 27 déc. 2014 16:07
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par farvardin »

Dominique a écrit : 08 mars 2024 22:52
C'est à peu de choses près le même programme que celui que j'avais fait pour le VG5K

http://dcvg5k.free.fr/programmes/sokoban/index.html

où j'ai commenté le listing de façon détaillée; Il n'y a pas plus FORTH que ça.
d'accord, dans le fichier screen-soko.djvu de la page sur le vg5k c'est effectivement du code forth, j'imagine que tu as fais de même pour la version Alice, mais le code source n'est pas publié dans l'archive SokoAliceV1.zip de ce que je vois, ou alors c'est dans un autre fichier que je n'ai pas trouvé.
Avatar de l’utilisateur
hlide
Messages : 3507
Inscription : 29 nov. 2017 10:23

Re: [Alice32] [Forth] Sokoban pour Alice

Message par hlide »

Je crois que tu n'as toujours pas compris : il n'a pas nécessairement besoin d'avoir le source en Forth. Il suffit juste de "compiler" à la main. D'ailleurs le source Forth est donné en commentaire dans le source assembleur précisément à cet effet pour rappeler à quoi correspond la sequence de FDB.

EDIT: j'ai peut-être parlé un peu vite en disant que le source Forth peut se trouver en commentaire, mais ce que je peux dire, c'est qu'en lisant :

Code : Tout sélectionner

CF_ZEROSET
 4808 4298                    FDB     DOCOL
 480A 4476                    FDB     ZERO
 480C 4419                    FDB     SWAP
 480E 4455                    FDB     STORE
 4810 42AA                    FDB     SEMIS
Je comprends que c'est le mot définit en Forth comme étant ": 0SET 0 SWAP ! ;", cad, dépiler l'adresse de stockage déjà dans la pile pour mettre un 0 à cette adresse. Mais en disant cela, je simplifie car ça doit faire : 1) empilage de 0, 2) échange de place entre l'adresse et le 0 dans la pile et 3) opération de stockage qui va dépiler l'adresse puis la valeur - en l'occurrence, 0 ici - pour affecter le mot à cette adresse)

EDIT2: alors oui, le fichier .lst n'est pas vraiment le source mais il découle de SokoAliceV1.txt que l'on retrouve évidemment dans le .lst avec l'adresse et les octets d'instructions rajoutés au source.
Avatar de l’utilisateur
Dominique
Messages : 833
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Dominique »

@farvadin
Il n'y a pas de code source généré par un compilateur, déjà parce qu'il n'y a pas de compilateur Forth pour Alice et ensuite parce que, comme je l'ai dit plus haut, "Si on connait le Forth sur le bout des doigts, ....on n'a plus besoin de compilateur";

Je veux écrire le MOT "5PLUS5". Un mot qui met 5 dans le sommet de la pile, le duplique et le somme avec lui même.

En FORTH c'est
: 5PLUS5 5 DUP + ;
Ai-je besoin d'un code source ? Non !

Je sais que : va générer l'étiquette de DOCOL.
Pour que FORTH prenne 5 et le mette dans la pile, c'est l'étiquette du mot LIT suivi de $0005
Pour dupliquer la pile, je sais que c'est l'étiquette du mot mot DUP
Pour faire la somme de deux valeurs dans la pile je sais que c'est l'étiquette du mot PLUS
Pour ; je sais que c'est l'étiquette du mot SEMIS

Je peux donc taper directement mon MOT 5PLUS5

Code : Tout sélectionner

5PLUS5
	FDB	DOCOL
	FDB	LIT
	FDB	$0005
	FDB	DUP
	FDB	PLUS
	FDB	SEMIS
Je prend DOCOL, LIT, DUP, PLUS et SEMIS dans le noyau donné par Joel Rees,
je rajoute la Machine Virtuelle donnée ici:
viewtopic.php?f=6&t=11545

Code : Tout sélectionner

DOCOL	LDX	RP	make room in the return stack
	DEX
	DEX
	STX	RP
	LDD	IP	Store address of the high level word
	STD	2,X	that we are starting to execute.
	LDX	W	Get first sub-word of that definition
	JMP	NEXTWI	and execute it.

Code : Tout sélectionner

LIT	FDB	*+2
	LDX	IP
	INX
	INX
	STX	IP
	LDD	0,X
	JMP	PUSHBA
et ainsi de suite.

On ne peut pas faire plus simple que ça !
Avatar de l’utilisateur
Dominique
Messages : 833
Inscription : 09 mars 2010 13:37
Localisation : Limoges
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Dominique »

@Brochiman et @6502man

-Attention : Le programme a besoin de RAM pour sauvegarder des valeurs provisoirement.
Des adresses $3403 à $3413 il faut que ce soit de la RAM
Même chose vers la fin : Il y a un Buffer entre la fin du programme et le début des tableaux qui enregistre les mouvements; Donc RAM.
Je peux arranger tout ça pour modifier les adresses d'enregistrement, mais je ne peux pas le faire maintenant, surtout que le programme évolue.
-Autre chose : Parfois le programme s'auto modifie :

Code : Tout sélectionner

CF_REG_AT
	FDB    	*+2
	PULA			Constante registre
	PULB
	STD	REGISTRE_AT+1	Modifie la ligne en accord
	CLRA
REGISTRE_AT
[b]	LDB	R0		Lecture par ligne modifiée. RO peut devenir R1 R2 R3 etc.. suivant A[/b]
	JMP	PUSHBA		Dans le TOS
                   ;*****************************************
                   ;
                   ; LE MOT REG!
		   ; 
		   ;  (Valeur, Constante_Registre....)
		   ;
                   ;*****************************************	
CF_REG_SLA
	FDB    	*+2
	PULA			Constante registre
	PULB
	STD	REGISTRE_SLA+1	Modifie la ligne en accord
	PULA			Valeur
	PULB
REGISTRE_SLA
	[b]STAB	R0		Ecriture par ligne modifiée. RO peut devenir R1 R2 R3 etc.. suivant A[/b]
	JMP	NEXT
Avatar de l’utilisateur
6502man
Messages : 12336
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [Alice32] [Forth] Sokoban pour Alice

Message par 6502man »

Concernant la version cartouche je ne fait que recopie le binaire qui est stocké dans la cartouche vers la RAM ;)
Donc le fonctionnement ne devrait pas être différent.
Dominique ne change rien pour la cartouche cela n'à aucun impact sauf à vouloir en faire un programme qui
s'exécute uniquement en cartouche mais c'est autre chose...

Ensuite je n'ai testé que sur émulateur, et ca fonctionne par contre Brochiman sur quelle machine tu test alice 32 ?
Donc il faut utiliser CTRL + (les touches avec les fleches inscrite au dessus) sinon à tester avec le joystick je ne sait
pas sir Dominique à géré les joystick et est ce le droit ou le gauche ?
Phil.

www.6502man.com

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

Re: [Alice32] [Forth] Sokoban pour Alice

Message par Dominique »

Ah d'accord Phil ! C'est encore mieux comme ça.
Non je n'ai pas géré le Joystick, mais ça peut se faire sans problème (enfin, je pense).
Comme je suis sur le programme, je peux le rajouter : Il faudra me dire où aller chercher la routine du Joy.
Répondre