ASM

Bah, tout est dit non ?

ASM

Messagede rockyone » Mar 5 Juin 2012 07:27

Avec un peut plus de doc, j’ai réussi la compression d’image dans un format MI 1que j’avait créer pour jeu, dans le but de gagner la place sur la disquette.
C’est deux fois plus rapide qu’en basic compilé, mais ce n’est pas encore le top et ça dépend des images.
Bien que ça produise dans certain cas des fichiers plus gros qu’en PI1, le temps de décompression, ne varie pas.
Ça me sert a rien, mais bon j’avance un peut en ASM.

Par contre, encore beaucoup d’incompréhension sur la gestion du PC, de l’USP…
Je cherche de la doc, des exemples simples ... Merci d’avance
Code: Tout sélectionner
;convertisseur écran en image.MI1
;
;A0  adresse écran
;A1  adresse destination
;    Condiendra :
;   +0   ffff = MI1   
;   +2   la palette
;   +34   les pointeurs de donnés a afficher
;   +4034   données( ce premier groupe de 4 bloc existant et conservé)
;   +33996   nombre de groupe sauvé

    movem.l d0-d5/a0-a2,-(a7)
   movem.l   40(sp),a0-a1
;   
;   move.w   #2,-(a7)      ;adresse écran pour Debug
;   trap   #14         ;
;   addq.l   #2,a7         ;
;   move.l    d0,a0         ;
;
   movem.l $ffff8240.w,d0-d7   ;sauvegade palette
   movem.l d0-d7,2(a1)
   move.w   #$ffff,(a1)      ;identité  MI1
   clr.l   d0
   clr.l   d1
   clr.l   d2
   clr.l   d4
   clr.l   d5

   add.w   #1999,d5   ;32000/16 fin ‚cran
   movea.l   a1,a2
;-------------------------------------------------------------------------
Lire_bloc:      
   moveq.l   #0,d3      ;pour les pointeur de groupe
;
   lea   4034(a2),a1     ;début des groupe sauvé
;
;-------------------------------------------------------------------------
BLoc_1:   
   move.l   (a0),d0      ;lecture 1ø bloc
   cmp.l   (a1),d0
   bne   suivant      ; 1ø bloc différant
      
         move.l   4(a0),d0
   cmp.l   4(a1),d0
   bne    suivant      ; 2ø bloc différant

   move.l   8(a0),d0
   cmp.l   8(a1),d0
   bne    suivant      ; 3ø bloc différant

   move.l   12(a0),d0
   cmp.l   12(a1),d0
   bne    suivant      ; 4ø bloc différant

   adda   #16,a0      ; pointe sur le prochain groupe de l'écran

   bra   save_adr   ; 4 blocs identiques
;            ; sauver uniquement l'adresse
;-------------------------------------------------------------------------
Suivant:
   adda   #16,a1      ; pointe sur le prochain groupe sauvegardé    
   
   addi   #16,d3      ; Conteur de boucle pour calculer
;            ; les pointeurs de groupe
   
   dbra   d2,bloc_1                   ; fin des groupe sauvé ?
;                                                               ; nouveau groupe a sauver
;-------------------------------------------------------------------------
Save_groupe:         
   move.l   (a0)+,(a1)+   
   move.l   (a0)+,(a1)+
   move.l   (a0)+,(a1)+
   move.l   (a0)+,(a1)+   ; pointe sur le prochain groupe suivant
   addi   #1,d1      ; Compteur de groupe sauvé
;-------------------------------------------------------------------------   
Save_adr:
   move.w   d1,d2      ;réinit le compteur
   move.w   d3,34(a2,d4.w)   ;save pointeur bloc
   addi   #2,d4      ;Nb pointeur sauvé
;
   dbra   d5,lire_bloc   ;fin écran ?
;            ;
;-------------------------------------------------------------------------
   move.l   #33996,d4                   ;pour calculer la taille du fichier   
   move.l   d1,0(a2,d4.l)   ;a sauvegarder (d1*16)+4034+16
;-------------------------------------------------------------------------
   movem.l   (a7)+,d0-d5/a0-a2
   rts
   end
rockyone
 
Messages: 52
Inscription: Dim 1 Aoû 2010 18:38

Re: ASM

Messagede tomchi » Mar 5 Juin 2012 11:35

pour poser des questions uniquement sur l'asm et en français, je te conseille d'aller voir ce forum.

je pense pas trop m'avancer en te disant que dans le forum gfa, yaura peu ou prou de réponses et pour cause ;)
Avatar de l’utilisateur
tomchi
Administrateur du site
 
Messages: 342
Inscription: Mer 15 Oct 2008 20:51

Re: ASM

Messagede Daroou » Mer 6 Juin 2012 21:12

Cours asm du Feroce Lapin:
http://atariste.free.fr/asm/assembleur.html


PC, permet un adressage relatif au PC pour adresser les variables par exemple

move.l d0, score(PC)

section Bss
.even
Score:
Ds.L 1

A vérifier, ça remonte à loin :roll:


USP = a7 , pointeur de Pile en mode utilisateur (sp)
SSP = a7', pointeur de pile en superviseur



Wiki 68000
http://fr.wikipedia.org/wiki/Motorola_68000



Concernant ta routine:

Tu peux optimiser un peu en remplaçant certaine addition, par AddQ
http://fr.wikipedia.org/wiki/Motorola_6 ... ion_rapide

addi.l #1,d1 16 cycles
addq.l #1,d1 8 cycles


Nombre de cycle des instructions 68000
http://oldwww.nvg.ntnu.no/amiga/MC680x0 ... iming.HTML

Sinon, quand tu lis le premier bloc, tu le compares aux bloc sauvergardé, sauf que c'est le premier et il y en a pas de sauvegardé.
Tu devrais enregistrer le premier groupe avant d'entrer dans la boucle.
Avatar de l’utilisateur
Daroou
 
Messages: 10
Inscription: Jeu 30 Déc 2010 18:22

Re: ASM

Messagede rockyone » Jeu 7 Juin 2012 21:25

Merci Daroou
Bien les cours de Féroce Lapin

daroou
Sinon, quand tu lis le premier bloc, tu le compares aux bloc sauvergardé, sauf que c'est le premier et il y en a pas de sauvegardé.
Tu devrais enregistrer le premier groupe avant d'entrer dans la boucle


Le premier bloc écran est comparé a celui ce trouvant dans le buffer +4034 qui contient l’image au format PI1, est celui, ci je le conserve.
rockyone
 
Messages: 52
Inscription: Dim 1 Aoû 2010 18:38


Retourner vers Questions/aide

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité

cron