[Alice32] [Forth] Sokoban pour Alice
Modérateurs : Papy.G, fneck, Carl
Re: [Alice32] [Forth] Sokoban pour Alice
@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' 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
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' 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
Re: [Alice32] [Forth] Sokoban pour Alice
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
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.
Re: [Alice32] [Forth] Sokoban pour Alice
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
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
- Carl
- Modérateur
- Messages : 13301
- Inscription : 08 avr. 2007 13:21
- Localisation : http://www.doledujura.fr
- Contact :
Re: [Alice32] [Forth] Sokoban pour Alice
Merci à la Team Alice
Carl
Carl
Re: [Alice32] [Forth] Sokoban pour Alice
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
Du coup je viens d'en faire une version cartouche (standard, à démarrer en tapant EXEC 4096 au basic) 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
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].
Je m'absente quelques jours et voila qu'il pleut des nouveaux programmes pour Alice
Du coup je viens d'en faire une version cartouche (standard, à démarrer en tapant EXEC 4096 au basic) 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
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].
Re: [Alice32] [Forth] Sokoban pour Alice
Oh merci Phil.
Re: [Alice32] [Forth] Sokoban pour Alice
Merci Phil pour ton message
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.
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.
Re: [Alice32] [Forth] Sokoban pour Alice
- 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.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 ?). ...
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é.
Re: [Alice32] [Forth] Sokoban pour Alice
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é.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.
Re: [Alice32] [Forth] Sokoban pour Alice
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 :
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.
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
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.
Re: [Alice32] [Forth] Sokoban pour Alice
@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
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
et ainsi de suite.
On ne peut pas faire plus simple que ça !
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 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
On ne peut pas faire plus simple que ça !
Re: [Alice32] [Forth] Sokoban pour Alice
@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 :
-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
Re: [Alice32] [Forth] Sokoban pour Alice
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 ?
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 ?
Re: [Alice32] [Forth] Sokoban pour Alice
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.
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.