[THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
Modérateurs : Papy.G, fneck, Carl
[THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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.
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.
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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.
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.
-
- Messages : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
@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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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)...
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)...
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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.
@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.
-
- Messages : 2365
- Inscription : 06 avr. 2009 12:07
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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.
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.
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
Bonsoir,
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.
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_UQuelle astuce a dont été utilisée pour faire déplacer l'hélicoptère et les araignées pixel/pixel aussi fluidement et rapidement ?
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
-
- Messages : 2365
- Inscription : 06 avr. 2009 12:07
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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
http://www.hebdogiciel.free.fr/THOMSON_10.htm
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
C'est ce que je disais Le x2 c'est sur deux octets ^^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.
Je connais le jeu pour l'avoir eu sur MO6
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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.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 : 7986
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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é
@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é
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
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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.
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.
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.
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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 !
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 !
Re: [THOMSON] MO5 TO7-70 programmation animation FOX pixel/pixel
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.
L'obstacle augmente mon ardeur.