bon voila une routine plus rapide que celle de pphd... mais bon ca reprend le meme principe...
PutPixel_DeTiMad:
move.w #1,%d0
move.w #1,%d1
move.w %d1,-(%a7)
move.l %a0,-(%a7)
add.w %d1,%d1
movea.w Screen(%pc,%d1.w),%a0
move.w %d0,%d1
lsr.w #3,%d1
add.w %d1,%a0
move.w %d0,%d1
not.w %d1
bset.b %d1,(%a0)
move.l (%a7)+,%a0
move.w (%a7)+,%d1
rts
PutPixel_DePpHd:
move.w #3,%d0
move.w #3,%d1
move.w %d0,-(%a7)
move.w %d1,-(%a7)
move.l %a0,-(%a7)
add.w %d1,%d1
movea.w Screen(%pc,%d1.w),%a0
move.w %d0,%d1
lsr.w #3,%d1
not.w %d0
bset.b %d0,0(%a0,%d1.w)
move.l (%a7)+,%a0
move.w (%a7)+,%d1
move.w (%a7)+,%d0
rts
PutPixel_DePollux:
move.w #2,%d0 /* x.w */
move.w #2,%d1 /* y.w */
move.w %d0,-(%a7) /*; 8 Sauvegarde des registres. Avec leur */
move.w %d1,-(%a7) /*; 8 petit nombre, et leur différence de */
pea (%a0) /*; 12 taille, il est plus rapide de le faire 1 par 1 */
add.w %d1,%d1 /*; 4 */
move.w %d1,%a0 /*; 4 a0 = d1 */
lsl.w #4,%d1 /*; 6+2*4=14 d1 = 32*d1 */
sub.w %a0,%d1 /*; 4 d1 = 30*le numéro de ligne */
move.w %d1,%a0 /*; 4 a0 pointe sur cette ligne */
lea 0x4c00(%a0),%a0 /*; 8 d1 = ligne en VM du pixel */
move.w %d0,%d1 /*; 4 d0 = d1 */
lsr.w #3,%d0 /*; 6+2*3=12 d0 = numéro de l'octet contenant le pixel */
not.b %d1 /*; 4 équivalent à eor.b #7,d1, bref on soustrait 7 à d1 */
bset.b %d1,0(%a0,%d0.w) /*; 10+8=18 */
move.l (%a7)+,%a0 /*; 12 Restaurations */
move.w (%a7)+,%d1 /*; 8 */
move.w (%a7)+,%d0 /*; 8 */
rts
resultat bench:
1: TiMad: 28622 c/S
2: PpHd: 26206 c/S
3: Pollux: 24702 c/S
NB: la routine que je propose n'est qu'une routine de pphd optimisee

donc c'est un peut de la gruge mais bon l'idee est de faire du precalcule... ce qui n'est pas qqc de tres complique a pense

[edit]Edité par TiMad le 29-10-2001 à 23:55:56[/edit]