[Thomson MO5] L-system pour MO5

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

sporniket
Messages : 254
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

[Thomson MO5] L-system pour MO5

Message par sporniket »

En cherchant ce que je pourrais bien programmer pour le MO5, je me suis rappelé d'un programme publié sur Atari Magazine 21, et utilisant le principe des systèmes de Lindenmayer pour générer des images.

Je me suis dit que c'était tout-à-fait dans les corde de mon brave MO5. Après avoir laissé de coté le sujet (pleins d'autres projets), non sans avoir griffoné ça et là quelques bouts de l'algorithme, j'ai fini par dégager du temps hier, jusqu'au bout de la nuit. J'ai sorti le MO5, le SDDrive, avec une image disque dédiée, et j'ai tant bien que mal écrit et dépanné mon programme comme à l'époque...

Mode d'emploi

Le programme démarre avec un préréglage permettant d'obtenir un flocon de Koch. Pour changer, aller dans l'écran de saisie (option 2).

On doit saisir la graine, l'angle de base, et les différentes règles de substitution nécessaires (de A à Z).

La syntaxe des règles et de la graine (si ça peut aider, imaginer qu'au final on obtient un programme suivi par la proverbiale tortue du LOGO) :
  • Toute lettre (de A à Z, sans distinction de casse) désigne une règle de substitution. Lors de la phase de dessin, ce sera transformé en un tracé de une unité de longueur.
  • '+' pour "tourner vers la droite", '-' pour "tourner vers la gauche", l'ampleur de la rotation égale l'angle de base.
  • '(' pour "commencer une sous-branche", ')' pour "finir la sous-branche et revenir à la branche". On peut aller jusqu'à 100 niveaux d'embranchement.
Notes techniques

(Pour que je me souvienne un peu de comment que j'ai fait pour que ça marchouille)

Le programme en lui même n'est pas trop compliqué -je crois-.

Le mécanisme le plus sophistiqué est la gestion de la mémoire, je réserve le plus de tranches de 4 Kio possible, et j'utilise cet espace comme un tampon mémoire circulaire pour stocker l'étape de génération n et n+1.

Les règles et la graines sont utilisées en convertissant les caractères en codes opérationnels, (code 128 + i pour désigner la règle i, code 1 à 4 pour tourner et gérer les branches)

Pour dessiner, on parcours une première fois la séquence finale sans facteur d'échelle, pour obtenir la boîte englobante du dessin. On calcule les facteurs d'échelle x et y et la translation pour que le dessin tienne dans un carré de 180 par 180 calé en bas de l'écran et centré.

L'angle de cap 0 pointe vers le nord, et on augmente en tournant vers la droite (dans le sens des aiguilles d'une montre conventionnelle), on a précalculé une table des vecteurs unitaires (de longueur 1) pour chaque angle de cap de 0 à 359.

Le plan de route

(si j'ai du temps un de ces quatres matins... dans quelques mois ou années)
  • Pour le moment, j'utilise le SDDrive sans extension mémoire et c'est donc un peu serré, je n'ai que 4Kio à consacrer au tampon mémoire. Ça tombe bien, j'ai un kit pour une extension mémoire de 512Ko à monter -et à domestiquer- (j'ai aussi une extension mémoire 64Ko, mais j'obtiens un plantage au démarrage -ecran façon zebre orange qui flashouille par endroits-, j'imagine que cette extension est défectueuse, et/ou que je n'ai pas bien lu tout sur le SDDrive)
  • Une version pour mon TO8 ? J'imagine que le programme sauvé ASCII est utilisable directement, mais je n'ai pas vérifié.
  • Pouvoir sauvegarder les images genérées.
  • Ergonomie.
Galerie

Version 0

Une capture montrant en temps réel (soyez patients), depuis la sélection de l'image disquette jusqu'au résultat final, la génération du flocon de Koch prédéfini en 2 itérations.
2023-10-02-lsystem-mo5-v0.0.0.gif
2023-10-02-lsystem-mo5-v0.0.0.gif (949.94 Kio) Consulté 1433 fois
Un exemple montrant les branches, en remplaçant la règle F préchargée par celle-ci : F(-F)F
2023-10-02--flocon-a-branches.jpg
2023-10-02--flocon-a-branches.jpg (103.94 Kio) Consulté 1433 fois
Un exemple plus végétal, montré dans l'article d'origine (angle : 22°, graine : F, règle F : FF+(+F-F-F)-(-F+F+F), en 3 itérations )
2023-10-02--02-arbre.jpg
2023-10-02--02-arbre.jpg (91.29 Kio) Consulté 1412 fois
Téléchargements

v0.0.2 - 14 octobre 2023
10_lsystem_mo5__2023-10-14.zip
(41.32 Kio) Téléchargé 17 fois
  • Gestion correcte de la mémoire, le tampon mémoire passe à 6 Kio
  • Dessin avec un facteur d'échelle uniforme, la zone de dessin passe à 300×180 pixels
v0.0.1 - 10 octobre 2023
10_lsystem_mo5__2023-10-08.zip
(38.65 Kio) Téléchargé 17 fois
  • Un correctif (bancal) pour le dépassement mémoire
  • Lorsque la capacité mémoire est dépassée, la génération s'arrête et on passe au dessin, au lieu de tout stopper.
v0.0.0 - 2 octobre 2023
10_lsystem_mo5__2023-10-02_00.zip
(34.98 Kio) Téléchargé 21 fois
L'image est brute de décoffrage, charger "lsysmo5b" ('b' pour basic, le fichier "lsysmo5.bas" est la version ascii). Les autres fichiers sont des versions intermédiaire du programme.
Dernière modification par sporniket le 14 oct. 2023 10:43, modifié 2 fois.
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson MO5]L-system pour MO5

Message par Daniel »

Il semble qu'on ne puisse pas faire plus de 3 itérations. A partir de 4 le programme plante. Il ne faut pas chercher l'erreur 141, elle n'existe pas, le message d'erreur est affiché par hasard suite au plantage :

iteration4.png
iteration4.png (1.91 Kio) Consulté 1409 fois
Daniel
L'obstacle augmente mon ardeur.
sporniket
Messages : 254
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

Re: [Thomson MO5]L-system pour MO5

Message par sporniket »

Oui, effectivement, ça devrait plutôt s'arrêter avec un message "Out of memory" (taille de la mémoire tampon de 4096 octets, sachant que l'étape 3 occupe 893 octets et que l'étape 4, au vu de l'expansion, aura besoin de pas loin de 4000 octets)

Quand j'étais encore à réfléchir, je m'étais basé sur un espace libre d'environ 15 à 20 Ko, soit un tampon de 12 à 16Ko, donc permettant d'aller plus loin.

edit: c'est pour ça que je compte mettre à profit les récentes méga extensions de mémoire. Ça va me motiver à assembler mon exemplaire pour ensuite l'exploiter.
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson MO5]L-system pour MO5

Message par __sam__ »

edit: c'est pour ça que je compte mettre à profit les récentes méga extensions de mémoire. Ça va me motiver à assembler mon exemplaire pour ensuite l'exploiter.
Tu n'aura pas accès à cette mémoire depuis le basic. En parlant d'assembler l'extension mémoire, il faudra aussi passer à l'assembleur pour en profiter.
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
Daniel
Messages : 17426
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [Thomson MO5]L-system pour MO5

Message par Daniel »

Il y a peut-être une possibilité d'utiliser le BASIC en le copiant dans une banque de l'extension mémoire.
L'assembleur est toutefois indispensable pour faire cette copie.
Daniel
L'obstacle augmente mon ardeur.
sporniket
Messages : 254
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

Re: [Thomson MO5]L-system pour MO5

Message par sporniket »

ok pour l'assembleur, je comptais m'y mettre à un moment de toutes les façons, et j'avais même une autre idée de projet pour ça (un jeu). Mais ce sera pas pour tout de suite.
Fool-DupleX
Messages : 2367
Inscription : 06 avr. 2009 12:07

Re: [Thomson MO5]L-system pour MO5

Message par Fool-DupleX »

Ce genre d'algorithme se prête extrêmement bien au langage LOGO. Une quinzaine de lignes de programme suffisent. Il y a eu une publication à ce sujet dans Science&Vie Micro pp.89-92. Je me souviens que j'avais rajouté des fruits et la couleur "orange" pour les branches et vert pour les feuilles. Ca semblait ultra-réaliste pour l'époque.

https://download.abandonware.org/magazi ... -01%29.jpg
Ythunder
Messages : 941
Inscription : 21 août 2019 10:12

Re: [Thomson MO5]L-system pour MO5

Message par Ythunder »

Daniel a écrit : 02 oct. 2023 11:13Il ne faut pas chercher l'erreur 141, elle n'existe pas, le message d'erreur est affiché par hasard suite au plantage
Ca serait possible de commenter ce type de comportement de la machine ? Plantage ok, mais y a t-il une explication quelconque du coup ? Et ça renvoi systématiquement une erreur libellée 141, soit du hasard sans aucun sens alors ?
sporniket
Messages : 254
Inscription : 22 mars 2022 20:23
Localisation : Pas trop loin au sud de Paris

Re: [Thomson MO5]L-system pour MO5

Message par sporniket »

Pour ma part, je verrai à corriger le bug le week-end prochain, quand je ressortirai tous le matos.
Fool-DupleX
Messages : 2367
Inscription : 06 avr. 2009 12:07

Re: [Thomson MO5]L-system pour MO5

Message par Fool-DupleX »

Ca serait possible de commenter ce type de comportement de la machine ? Plantage ok, mais y a t-il une explication quelconque du coup ?
Ca sent bon l'écrasement des données après la pile de travail de l'interpréteur BASIC. N'oublions pas que BASIC utilisent plusieurs centaines d'octets dans la RAM et que toutes les instructions et les erreurs sont déroutables. On peut imaginer que le programme aille écraser la table d'erreur ou de saut, provoquant ce genre de comportement. C'est toujours mieux qu'un BASIC qui ne répond strictement rien ou seulement OK quand on tapes n'importe quoi, ce qui arrive souvent dans ce genre de situation.

Il n'y a pas de hasard sans aucun sens sur un ordinateur, même sur les machines modernes, je crois que c'est une évidence de dire cela. Le 141 est peut-être le bout d'une variable flottante qui dépasse de la pile ou quelque chose comme ça.

Et typiquement, LOGO permet de faire beaucoup beaucoup plus d'itérations sur ce genre d'algorithme, car il gère entièrement sa mémoire comme une pile.
__sam__
Messages : 7989
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [Thomson MO5]L-system pour MO5

Message par __sam__ »

Moi j'avais fait le programme "Forêt" de SVM pour TO9. Ca se fait très bien en basic. Sur la diskette on trouve aussi sous les noms "ARBRE*.BAS" divers essais de conversion de LOGO en BASIC avec gestion de pile "à la main" apparemment.
Pièces jointes
sam_foret.zip
DISKETTE
(100.59 Kio) Téléchargé 20 fois
Exemple de RUN"FORET" avec NOMBRE=10
Exemple de RUN"FORET" avec NOMBRE=10
Capture.PNG (69.38 Kio) Consulté 1186 fois
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
Fool-DupleX
Messages : 2367
Inscription : 06 avr. 2009 12:07

Re: [Thomson MO5]L-system pour MO5

Message par Fool-DupleX »

Ca n'a décidément rien à envier à Unreal 5. :lol:

Zebulon
Messages : 2806
Inscription : 02 nov. 2020 14:03

Re: [Thomson MO5]L-system pour MO5

Message par Zebulon »

Franchement tu n'aurais rien dit c'est à s'y méprendre. 🤣
Avatar de l’utilisateur
fneck
Site Admin
Messages : 17541
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: [Thomson MO5]L-system pour MO5

Message par fneck »

Très impressionnant :roll:
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Fool-DupleX
Messages : 2367
Inscription : 06 avr. 2009 12:07

Re: [Thomson MO5]L-system pour MO5

Message par Fool-DupleX »

Mais j'étais sincère. Quand j'étais gamin, ca semblait ultra-réaliste et franchement, je suis pas sûr qu'Unreal 5 fasse beaucoup mieux avec seulement 320x200 pixels et 4 couleurs.

Y'avait aussi le générateur de montagnes, basé sur le même principe, mais en 3D (SVM 51 de juin 1988). Je l'avais converti en Turbo-Pascal et je pouvais déplacer le point de vue pour faire des petites animations de survol de quelques images. Ca mettait des heures à calculer en niveau 5, mais c'était beau. Que de souvenirs ...

https://fr.1001mags.com/parution/svm/nu ... e-integral
Répondre