[THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Tout ce qui concerne le logiciel original et sa sauvegarde avec entre autre la régénération des disquettes ou autres supports physiques.

Modérateurs : Papy.G, fneck, Carl

Répondre
DavidC
Messages : 12
Inscription : 10 mars 2021 18:43

[THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par DavidC »

Bonjour à tous,

Je me rappelle avoir fait mes premiers programmes en BASIC 1.0 sur TO7/70 il y a de cela 35 ans.
Je passais aussi de longues journées à recopier les listings du magazine Hebdogiciel.

Je n'ai pas persévéré dans la programmation informatique.
Les émulateurs Thomson sur PC ont fait ressortir chez moi une question qui reste encore un mystère des années après.

J'avais été émerveillé à l'époque par le jeu Fox (pourtant un des tout premier à sortir sur TO7 avec pulsar, eliminator...).
Dans ce jeu, les animations de l'hélicoptère (que l'on pilotait au clavier ou à la manette) et des araignées étaient très fluides (et même épatantes pour un TO7-70 à l'époque).

Je n'ai jamais réussi à reproduire une telle animation avec mes programmes BASIC.
Dans ce jeu, l'hélicoptère et les araignées se déplaçaient pixel/pixel (trop beau sur 320 × 200 pixels) très fluidement et très rapidement.
Dans ma programmation BASIC, j'utilisai la fonction LOCATE et du coup je ne pouvais déplacer mon objet que de 8 pixels / 8 pixels (animation lente et saccadée, trop moche et limitée à 40 colonnes × 25 lignes).

Ma première question:
Le jeu Fox semble ne pas avoir été programmé en Basic.
Indice supplémentaire: il me semble qu'on faisait un LOADM pour charger le jeu...

Ma deuxième question:
Le jeu Fox a peut être été programmé en Assembleur.
Du coup, j'ai relu dernièrement le livre 'Faites vos jeu en Assembleur sur TO7 / TO7-70' et surtout le chapitre 3 'Déplacement d'une figure'.
Mais là, encore grosse déception, le déplacement décrit dans ce chapitre se fait en 8 pixels / 8 pixels...
Quelle astuce a dont été utilisée pour faire déplacer l'hélicoptère et les araignées pixel/pixel aussi fluidement et rapidement ?

Je vous remercie par avance si vous avez la solution qui m'interroge depuis tant d'années.
Zebulon
Messages : 2787
Inscription : 02 nov. 2020 14:03

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par Zebulon »

Bonjour. Sur une machine qui ne possède pas une gestion native matérielle des sprites, l'assembleur est incontournable avec écriture direct dans la mémoire vidéo. Sur CPC ça marche comme ça, j'imagine que le TO7 aussi.

Après selon les animations souhaitées et les diverses contraintes du jeu les programmeurs optimisent les algorithmes au maximum.

Ah oui une dernière chose pour que l'animation soit fluide il faut soit faire du double buffering soit être en mesure d'effectuer les écritures en mémoire sur le temps d'une synchro du moniteur.
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par __sam__ »

@DavidC oui c'est de l'assembleur (LOADM = charge du code Machine), mais le déplacement n'est probablement pas au pixel près dans le sens horizontal car c'est très compliqué à réaliser à cause du "color-clash" sur TO7 (2 couleurs maxi tous les 8 pixels horizontaux). Seul le déplacement vertical peut se faire au pixel près car il n'y a pas de color-clash dans cette direction. Et d'ailleurs les araignées se déplacent de haut en bas il me semble. C'est la vitesse du jeu qui te fait croire que cela se déplace pixel par pixel, mais ca n'est probablement pas le cas.
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
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par jasz »

Les déplacements d'un sprite en 1x1 seraient assez difficiles en BASIC. On pourrait toujours définir 8 caractères x2 pour chaque sprite mais cela n'empêcherait pas la gêne visuelle (sorte de clignotement) à l'écran due à la non synchronisation vidéo.

En effet, il y a aussi ce problème de couleur où pour un caractère de 8x8 pixels on ne dispose que de deux couleurs (color-clash)...
DavidC
Messages : 12
Inscription : 10 mars 2021 18:43

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par DavidC »

Je vous remercie tous pour vos premières réponses.


@Zebulon
Merci pour la piste de l'écriture directe dans la mémoire vidéo en assembleur.
Du coup, en relisant le livre 'Faites vos jeu en Assembleur sur TO7 / TO7-70', je pense que cette technique n'est pas abordée (ou alors je n'ai pas les compétences pour la comprendre).
J'adorerai savoir comment est synthétisée cette technique... merci à ceux qui aurait la patience de m'aider à comprendre...

@__sam__
L'hélicoptère est blanc sur fond noir; il n'y a pas de couleurs.
Effectivement je ne sais pas si pour de longs déplacements, tout se fait pixel/pixel.
C'est difficile à voir à l’œil nu, le déplacement étant tellement bien fait et super fluide.
Par contre, je reste sur ma question initiale car je remarque que l'hélicoptère s'arrête bien au pixel prêt en horizontal.
L'hélicoptère n'est pas limité à 1000 positions (40 colonnes × 25 lignes) mais peut se positionner sur 64000 positions (320 × 200 pixels).

@jazz
Je ne sais pas si j'ai le droit de l'écrire sur ce forum mais le jeu Fox est en fichier exécutable pour PC sur DCMOTO.
Cela permet de se rendre compte de l'animation...


Pour poursuivre, la performance de l'animation de ce jeu m'a tellement étonné à l'époque que j'ai franchi le pas pour poster mon message initial 35 ans après !
N'hésitez pas à participer à l'explication de cette performance sur un TO7-70.
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par Fool-DupleX »

Effectivement, Fox est écrit en assembleur et le déplacement de l'hélicoptère se fait pixel par pixel dans les deux directions. L'hélicoptere est toujours blanc et les obstacles en couleur sont calés sur 8 pixels, ce qui evite le color-clash et facilite la detection de collision.

Pour deplacer un sprite pixel par pixel (on neglige le probleme du color-clash pour simplifier), il faut et il suffit d'avoir 8 sprites différents, en fait 8 fois le même sprite, décalé de 0, 1, 2, 3 ... 7 pixels et d'afficher le bon parmi les 8 en fonction de la position.
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par Asic512 »

Bonsoir,
Quelle astuce a dont été utilisée pour faire déplacer l'hélicoptère et les araignées pixel/pixel aussi fluidement et rapidement ?
Je ne sais pas si on peut parler d'astuce. Un programme en assembleur sur TO/MO est en fait très rapide ! Il faut chiner sur le forum, trouver quelques exemples de code ASM, les assembler et les faire tourner par exemple sur DCMOTO pour s'en convaincre. On peut aussi consulter les vidéo de Bruno Aubin, cf. https://www.youtube.com/watch?v=tImpfXQ1G_U


Si l'on travaille uniquement sur la mémoire vidéo "forme" (dite RAM A), l'écran est découpée en 40 octets (40 segments de 8 pixels) x 200 lignes. Déplacer verticalement un caractère 8x8 (en noir et blanc disons) revient à déplacer le contenu de 8 octets. Le déplacer horizontalement (au pixel près) demande plus de calculs car on se retrouve à cheval sur deux octets sur la même ligne.
Asic512
Fool-DupleX
Messages : 2284
Inscription : 06 avr. 2009 12:07

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par Fool-DupleX »

Pour se familiariser avec ces techniques, on pourra jeter un oeil au programme "Lutin" de François Jamin.

http://www.hebdogiciel.free.fr/THOMSON_10.htm
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par jasz »

Fool-DupleX a écrit : 10 mars 2021 21:16 Pour deplacer un sprite pixel par pixel (on neglige le probleme du color-clash pour simplifier), il faut et il suffit d'avoir 8 sprites différents, en fait 8 fois le même sprite, décalé de 0, 1, 2, 3 ... 7 pixels et d'afficher le bon parmi les 8 en fonction de la position.
C'est ce que je disais ;) Le x2 c'est sur deux octets ^^
DavidC a écrit : 10 mars 2021 21:13 @jazz
Je ne sais pas si j'ai le droit de l'écrire sur ce forum mais le jeu Fox est en fichier exécutable pour PC sur DCMOTO.
Cela permet de se rendre compte de l'animation...
Je connais le jeu pour l'avoir eu sur MO6 ;)
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par jasz »

Asic512 a écrit : 10 mars 2021 21:18 Si l'on travaille uniquement sur la mémoire vidéo "forme" (dite RAM A), l'écran est découpée en 40 octets (40 segments de 8 pixels) x 200 lignes. Déplacer verticalement un caractère 8x8 (en noir et blanc disons) revient à déplacer le contenu de 8 octets.
En es-tu sûr?
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par Asic512 »

Déplacer verticalement un caractère 8x8 (en noir et blanc disons) revient à déplacer le contenu de 8 octets.

En es-tu sûr?
Bon d'accord, à condition que le "caractère" lui-même ne soit pas à cheval sur deux octets d'une même ligne ... Disons 16 octets dans le pire des cas.
Asic512
__sam__
Messages : 7923
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par __sam__ »

Ok bien vu pour le déplacement pixel par pixel horizontalement. Ca doit être comme pour shoplifter: couleur uniforme + 8 sprites pour les décalages de 0 à 7. L'hélico n'est pas très gros, donc ca ne mange pas de pain d'en avoir plusieurs versions en mémoire. Ensuite au niveau vitesse assembleur versus basic, l'assembleur gagne haut la main. Si tu veux voir ce qu'on peut faire en asm sur thomson je te recommande de jeter un oeil sur les Démos thomson de pouet.net: https://www.pouet.net/prodlist.php?plat ... son&page=1

@Asic512 8 octets de décalage fait déplacer le lutin de 8*8=64 pixels horizontalement. Tu veux sans doute parler de 8 pixels verticalement (hauteur d'un caractère).. Oh!!! ahahah.. Non... je vois d'où vient le quiproquo.

Quand tu dis "déplacer .. le contenu de 8 octets"... j'avais (et Jasz aussi je présume) compris: [déplacer de 8 octets] le contenu (les 8 octets sont du déplacement), alors que pour toi les 8 octets sont le contenu que tu déplaces (la matrice du caractère): déplacer [le contenu de 8 octets]. Arf.. l'ambiguïté du Français fait qu'on peut comprendre ce que tu as écrit de deux façon différentes. C'est trop rigolo. On devrait utiliser des crochets pour lever l'ambiguïté :P
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
Zebulon
Messages : 2787
Inscription : 02 nov. 2020 14:03

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par Zebulon »

Dans son emprise maximum (rotor de queue visible et rotor principal vers l'avant) l'hélico fait 14 pix de large et 8 pix de haut. Donc allons pour deux caractères côte à côte.

Capture d’écran 2021-03-10 231022.png
Capture d’écran 2021-03-10 231022.png (34.72 Kio) Consulté 5538 fois

Combien cela fait-il de caractères à définir pour afficher l'hélicoptère dans les deux sens droite/gauche et dans toutes les positions intermédiaires horizontalement/verticalement? Sachant en plus que les rotors sont animés (deux états possibles).

Sinon si j'ai compris l'organisation de la mémoire vidéo on a une zone mémoire qui défini si les pixels sont éteints ou allumés (8 pix par octet) et une autre zone mémoire qui défini les couleurs par sous-groupe de 4 pixels (donc 4 bit pour 16 couleurs pour chaque groupe de 4 pixels par octet). Donc on suppose que cette dernière est initialisée à la couleur blanc pour les zones où circule l'hélico.

Dans le cas le plus défavorable nos 14 pixels se retrouvent à cheval sur 3 octets donc il faut manipuler au maximum 24 octets pour afficher l'hélico et 16 au minimum.
Avatar de l’utilisateur
adnz
Messages : 213
Inscription : 10 janv. 2010 00:07

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par adnz »

Déplacement genre comme ça ?
le sprite fait 3*8 pixels et on à 9 image pour le déplacement au pixel et on saute d'1 caractère (8 pixel) et on recommence !
deplacement-sprite.gif
deplacement-sprite.gif (9.14 Kio) Consulté 5526 fois
Daniel
Messages : 17316
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel

Message par Daniel »

Zebulon a écrit : 10 mars 2021 23:23 Combien cela fait-il de caractères à définir pour afficher l'hélicoptère dans les deux sens droite/gauche et dans toutes les positions intermédiaires horizontalement/verticalement?(deux états possibles).
Dans le sens vertical il n'y a pas de problème, on peut descendre ligne par ligne avec le même sprite en écrivant directement en mémoire vidéo. Il ne faut pas passer (comme le BASIC) par la routine système d'affichage d'un caractère.

L'hélicoptère se déplace horizontalement et verticalement pixel par pixel, mais aussi en diagonale dans les quatre directions.

Les deux hélices sont dessinées indépendamment du sprite, elles ne nécessitent pas de multiplier par deux le nombre de sprites.
Daniel
L'obstacle augmente mon ardeur.
Répondre