Thomson TO8 : Lancer de rayons et Animation.

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

__sam__
Messages : 7964
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par __sam__ »

Je suis une andouille!!!! :twisted:

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é). :oops:

:arrow: 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
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

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

Code : Tout sélectionner

	 FDB     $A000           * adresse en RAM à copier 
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 (?).
Asic512
__sam__
Messages : 7964
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par __sam__ »

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
Asic512
Messages : 128
Inscription : 30 juin 2019 21:13

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par Asic512 »

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

Code : Tout sélectionner

START
    FDB     $A000           ; adresse en RAM à copier

Code : Tout sélectionner

LDS     START   
et pour l'autre

Code : Tout sélectionner

LDU     #$4000+6
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 :

Code : Tout sélectionner

LEAU    6+6,U 
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.
Asic512
__sam__
Messages : 7964
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: Thomson TO8 : Lancer de rayons et Animation.

Message par __sam__ »

C'est la différence entre l'adressage immédiat (#START) et étendu (START). Si on fait

Code : Tout sélectionner

LDU #START
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

Code : Tout sélectionner

LDU START
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).
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 TO8 : Lancer de rayons et Animation.

Message par jasz »

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 :)
Répondre