inverser une image PI1

Bah, tout est dit non ?

Re: inverser une image PI1

Messagede tomchi » Dim 6 Mai 2012 21:04

0.465 compilé, toujours pas déroulé, par contre, j'ai comparé REPEAT/UNTIL et FOR/NEXT et à la compile j'obtient le même resultat ^^'

et 0.145 avec un inline asm pas deroulé non plus donc moins de 150 octets, par contre ça va aussi vite compilé qu'interpreté evidemment.

je posterai tout ça demain matin.
Avatar de l’utilisateur
tomchi
Administrateur du site
 
Messages: 342
Inscription: Mer 15 Oct 2008 20:51

Re: inverser une image PI1

Messagede tomchi » Lun 7 Mai 2012 08:19

ptite amélioration avec l'inline asm, 0.13
j'ai essayé de derouler un peu plus mais on gagne 0.05 pour un code qui fait 1.5 ko alors que là on est à 140 octets et encore, j'ai pas enlevé le header ^^'

pour ceux que ça interesse, le code asm pour l'inline:

Code: Tout sélectionner
;   a0 adresse ecran source
;   a1   ""    dest
;   a2 adresse table correspondance
;
   movem.l   d0-d3/a0-a2,-(sp)   ; 4*4+4*3=28
   move.l   32(sp),a0      ; source
   move.l   36(sp),a1      ; dest
   move.l   40(sp),a2      ; lut
;
;
   moveq   #0,d1
   moveq   #0,d2         ; pour etre sur ...
   moveq   #0,d0         ; pareil ;)
   move.w   #199,d1         ; nbe de lignes
   add.l   #152,a1         ; droite de l'ecran dest
ligne:
   moveq   #19,d3         ; nbe de copies par ligne
bloc:
; plan1   
   move.b   (a0)+,d2      ; byte source et pointe sur suivant
   move.b   (a0)+,d0
   move.b   (a2,d0.w),(a1)+
   move.b   (a2,d2.w),(a1)+
; plan2
   move.b   (a0)+,d2      ; byte source et pointe sur suivant
   move.b   (a0)+,d0
   move.b   (a2,d0.w),(a1)+
   move.b   (a2,d2.w),(a1)+
; plan3
   move.b   (a0)+,d2      ; byte source et pointe sur suivant
   move.b   (a0)+,d0
   move.b   (a2,d0.w),(a1)+
   move.b   (a2,d2.w),(a1)+
; plan4
   move.b   (a0)+,d2      ; byte source et pointe sur suivant
   move.b   (a0)+,d0
   move.b   (a2,d0.w),(a1)+
   move.b   (a2,d2.w),(a1)+
;
   sub.l   #16,a1
   dbra   d3,bloc
;
   add.l   #320,a1
   dbra   d1,ligne
;
;
   movem.l   (sp)+,d0-d3/a0-a2
   rts
   end


un pro de l'asm pourrait peut être encore améliorer ça.
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Avatar de l’utilisateur
tomchi
Administrateur du site
 
Messages: 342
Inscription: Mer 15 Oct 2008 20:51

Re: inverser une image PI1

Messagede rockyone » Lun 7 Mai 2012 11:30

Bravo tonchi
C’est incroyable ce qu’il est possible de faire en ASM en si peut de temps machine

C’est bizarre, mais j’ais je suis sur que je me plante dans la manière de convertir mes plans…

M'erci pour le code asm, je vais regarder
...
Bluffant le résultat, ManuM vas être comptant.
rockyone
 
Messages: 52
Inscription: Dim 1 Aoû 2010 18:38

Re: inverser une image PI1

Messagede ManuM » Lun 7 Mai 2012 13:57

Ça décoiffe, :o on a meme plus le temps de voir l'image original :D

superbe travail Tomchi, maitrise du GFA et de l'assembleur bravo!!!!
ManuM
 
Messages: 69
Inscription: Lun 15 Juin 2009 12:57

Re: inverser une image PI1

Messagede rockyone » Lun 7 Mai 2012 17:52

J’ai testé ta routine asm, impeccable.

Je vois pas ce que je pourrais faire de plus en Omicron..
Le GFA est certainement plus rapide


J’pense à ManuM …
Il n’a pas besoin de convertir le basic, mais juste à faire une table de conversion ;)

invers_inline.zip
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
rockyone
 
Messages: 52
Inscription: Dim 1 Aoû 2010 18:38

Re: inverser une image PI1

Messagede rockyone » Sam 12 Mai 2012 12:53

Dans l’inlin , je ne comprend pas a qoi sert : movem.l d0-d3/a0-a2,-(sp)

Pour le reste ok, idem a ce que je faisais en Omikron.

Je viens de faire mon premier inlin pour afficher une image compressé « Mi1 » format que j’avais créé pour je jeu du serpent uniquement pour gagner de la place sur la disquette.

Ça n’a pas été trop compliqué les plans n’étant pas mélangé lors de la compression
Par contre pour la compression…. Il me faudra une bonne doc sur l’asm

.05 en Omikron
.035 en asm
Le but n’était pas de gagné du temps, mais de me mettre un peut a l’asm

;
;A0 adresse de l'image compressé‚ "*.MI1"
;
;A1 adresse de l'écran
;
;
move.l 4(sp),a0 ;source
adda #34,a0 ;début des pointeurs de donné (après la palette)
move.l 8(sp),a1 ;destination
;
clr.l (a2)
move.l a0,a2
adda #4000,a2 ;début des blocs a afficher

;
clr.l d0
clr.l d1
add.l #1999,d1
;
boucle:
move.w (a0)+,d0 ;pointeur sur les blocs a afficher

move.l 0(a2,d0.l),(a1)+
move.l 4(a2,d0.l),(a1)+
move.l 8(a2,d0.l),(a1)+
move.l 12(a2,d0.l),(a1)+
;
dbra d1,boucle
rts
end
rockyone
 
Messages: 52
Inscription: Dim 1 Aoû 2010 18:38

Précédent

Retourner vers Questions/aide

Qui est en ligne

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

cron