Thomson TO8 : Lancer de rayons et Animation.
Modérateurs : Papy.G, fneck, Carl
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Thomson TO8 : Lancer de rayons et Animation.
Je suis une andouille!!!!
J'ai écrit "ANDCC #255-$50" dans le code plus haut, mais c'est "ORCC #$50" qu'il faut utiliser pour masquer les interruptions (corrigé).
Les traits que tu vois sont la sauvegarde de la pile lorsqu'une interruption se produit alors qu'on recopie l'écran et que le registre S pointe dans la ram vidéo.
J'ai écrit "ANDCC #255-$50" dans le code plus haut, mais c'est "ORCC #$50" qu'il faut utiliser pour masquer les interruptions (corrigé).
Les traits que tu vois sont la sauvegarde de la pile lorsqu'une interruption se produit alors qu'on recopie l'écran et que le registre S pointe dans la ram vidéo.
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 TO8 : Lancer de rayons et Animation.
Fantastique ! Ça marche ! Le résultat est vraiment convaincant. J'ai essayé avec 9 images affichées dans l'ordre croissant puis décroissant. Il faudrait que je fasse des essais avec plus d'images.
Je pourrais aussi mettre deux images par banque avec deux programmes COPY1.BIN et COPY2.BIN. Je décalerais dans le loadm l'adresse de chargement du COPY2.BIN : il suffit ensuite qu'à la ligne de COPY2
je décale cette adresse de 8000 octets (avec évidemment le même décalage pour charger mes images "paires"). Ce n'est probablement pas le plus économique mais cela devrait marcher (?).
Je pourrais aussi mettre deux images par banque avec deux programmes COPY1.BIN et COPY2.BIN. Je décalerais dans le loadm l'adresse de chargement du COPY2.BIN : il suffit ensuite qu'à la ligne de COPY2
Code : Tout sélectionner
FDB $A000 * adresse en RAM à copier
Asic512
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Thomson TO8 : Lancer de rayons et Animation.
Oui ca marchera. 20 images, c'est pas mal sans compression.
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 TO8 : Lancer de rayons et Animation.
Merci encore pour le partage du code assembleur ! Je suis content de voir enfin le "dessous des cartes".
J'ai encore quelques questions (de néophyte je précise) :
-- Pourquoi y-a-t-il une dissymétrie entre la fonction "copier" et la fonction "coller". Par exemple, on fait pour l'un
et pour l'autre
Je crois que j'ai compris le +6 mais pourquoi # dans l'un et pas dans l'autre ?
-- Cette dissymétrie semble jouer un rôle plus important dans le corps du programme avec la ligne :
Si je comprends bien (mais rien n'est moins sûr), on semble en permanence courir après un décalage. D'où la question : est-ce qu'il y a matière à optimiser le code en commençant par "coller" la fin de l'image ? Bien sûr, cela suppose, pour avoir un résultat correct, d'effectuer a priori une certaine symétrie à la création du fichier BIN. Si le raisonnement est bon, je n'ai pas compris si c'était une symétrie simple où le début devient la fin ou si la symétrie portait sur les blocs de 6 octets (avec l'effet de bord dû au fait que 40, pas plus que 40*200, n'est pas un multiple de 6).
-- J'avais également imaginé utiliser cette routine pour afficher une image 320x400 (donc 16ko dans une banque) par tranche de 320x200 avec un effet de "déplacement de caméra" (de scrolling si je n'étais pas comme Daniel à faire la chasse aux anglicismes). Quel est le moyen le plus pratique pour passer un paramètre du basic au programme assembleur ? J'ai lu beaucoup de choses dans les forums mais sans arriver à me faire une opinion. En gros, je voudrais juste passer une adresse.
J'ai encore quelques questions (de néophyte je précise) :
-- Pourquoi y-a-t-il une dissymétrie entre la fonction "copier" et la fonction "coller". Par exemple, on fait pour l'un
Code : Tout sélectionner
START
FDB $A000 ; adresse en RAM à copier
Code : Tout sélectionner
LDS START
Code : Tout sélectionner
LDU #$4000+6
-- Cette dissymétrie semble jouer un rôle plus important dans le corps du programme avec la ligne :
Code : Tout sélectionner
LEAU 6+6,U
-- J'avais également imaginé utiliser cette routine pour afficher une image 320x400 (donc 16ko dans une banque) par tranche de 320x200 avec un effet de "déplacement de caméra" (de scrolling si je n'étais pas comme Daniel à faire la chasse aux anglicismes). Quel est le moyen le plus pratique pour passer un paramètre du basic au programme assembleur ? J'ai lu beaucoup de choses dans les forums mais sans arriver à me faire une opinion. En gros, je voudrais juste passer une adresse.
Asic512
-
- Messages : 7967
- Inscription : 18 sept. 2010 12:08
- Localisation : Brest et parfois les Flandres
Re: Thomson TO8 : Lancer de rayons et Animation.
C'est la différence entre l'adressage immédiat (#START) et étendu (START). Si on fait on charge dans U la valeur #START, c'est à dire l'adresse de START. Or ce qu'on veut c'est le contenu des 2 octets START/START+1, donc
Pour le décalage de 6, c'est parce que le PSHU "descend". Donc en démarrant à $4000+6, le PSHU descend jusqu'à $4000. Mais pour le tour suivant il faut remonter à $4000+12 = ($4000+6) + 6 encore, donc LEAU 6+6,U. Tu vois ? Le push écrit en descendant. C'est comme si on faisait plein de "STD ,--U; STX ,--U; STY ,--U" mais en beaucoup beaucoup plus rapide.
On peut faire plus rapide en retirant le LEAU et en copiant la RAM VIDEO depuis la fin. Mais il faut aussi que les images en $A000 soient elles inversées (la fin au début).
Code : Tout sélectionner
LDU #START
Code : Tout sélectionner
LDU START
On peut faire plus rapide en retirant le LEAU et en copiant la RAM VIDEO depuis la fin. Mais il faut aussi que les images en $A000 soient elles inversées (la fin au début).
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 TO8 : Lancer de rayons et Animation.
Pour faire plus simple,
START est une variable comme en BASIC START=&HA000:U=PEEK(START)*256+PEEK(START+1)
# Indique une adresse directe donc invariable comme en BASIC S=PEEK(&H4000+6)*256+PEEK(&H4000+7)
Après, S et U sont des adresses d'empilage, c'est à dire de stockage. En sortant du BASIC et nous immisçant dans le langage machine, les adresses S et U sont des piles. Leur rôle, stocker des informations dans un ordre précis (empiler) en décrémentant l'adresse de stockage de tant d'octets que c'est nécessaire. On peut donc jouer de leurs particularités pour gagner des cycles ou faire des pipelines
START est une variable comme en BASIC START=&HA000:U=PEEK(START)*256+PEEK(START+1)
# Indique une adresse directe donc invariable comme en BASIC S=PEEK(&H4000+6)*256+PEEK(&H4000+7)
Après, S et U sont des adresses d'empilage, c'est à dire de stockage. En sortant du BASIC et nous immisçant dans le langage machine, les adresses S et U sont des piles. Leur rôle, stocker des informations dans un ordre précis (empiler) en décrémentant l'adresse de stockage de tant d'octets que c'est nécessaire. On peut donc jouer de leurs particularités pour gagner des cycles ou faire des pipelines