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