J'en sais rien, je n'ai jamais vu les sources d'ExtGraph. Essaie, tu verras. Par rapport à memset, oui c'est plus rapide.
J'ai pris la peine de convertir le truc en ASM GNU. Normalement tu n'as plus qu'à insérer ce qui suit dans ta source, et à appeler les fonctions aux moments voulus
#define GX_PLANE unsigned char
extern void
GX_clrscr (GX_PLANE *Plane),
GX_CopyBuffer(GX_PLANE *Dest, GX_PLANE *Src);
asm("
GX_clrscr:
; Code optimise par Julien Monville
movem.l %d3-%d7/%a2-%a7,GXSvgReg
move.l 4(%a7),%a7
lea 3840(%a7),%a7
moveq #0,%d0
moveq #0,%d1
moveq #0,%d2
moveq #0,%d3
moveq #0,%d4
moveq #0,%d5
moveq #0,%d6
move.w %d0,%a0
move.w %d0,%a1
move.w %d0,%a2
move.w %d0,%a3
move.w %d0,%a4
move.w %d0,%a5
move.w %d0,%a6
moveq #10,%d7
GXCS_loop:
movem.l %d0-%d6/%a0-%a6,-(%a7)
movem.l %d0-%d6/%a0-%a6,-(%a7)
movem.l %d0-%d6/%a0-%a6,-(%a7)
movem.l %d0-%d6/%a0-%a6,-(%a7)
movem.l %d0-%d6/%a0-%a6,-(%a7)
movem.l %d0-%d6/%a0-%a6,-(%a7)
dbf %d7,GXCS_loop
movem.l %d0-%d6/%a0-%a6,-(%a7)
movem.l %d0-%d6/%a0-%a6,-(%a7)
movem.l %d0-%d6/%a0,-(%a7)
movem.l GXSvgReg(%pc),%d3-%d7/%a2-%a7
rts
GX_CopyBuffer:
movem.l %d3-%d7/%a2-%a7,GXSvgReg
move.l 4(%a7),%a6
move.l 8(%a7),%a7
moveq #11,%d7
CB_loop:
movem.l (%a7)+,%d0-%d6/%a0-%a5
movem.l %d0-%d6/%a0-%a5,(%a6)
movem.l (%a7)+,%d0-%d6/%a0-%a5
movem.l %d0-%d6/%a0-%a5,52(%a6)
movem.l (%a7)+,%d0-%d6/%a0-%a5
movem.l %d0-%d6/%a0-%a5,104(%a6)
movem.l (%a7)+,%d0-%d6/%a0-%a5
movem.l %d0-%d6/%a0-%a5,156(%a6)
movem.l (%a7)+,%d0-%d6/%a0-%a5
movem.l %d0-%d6/%a0-%a5,208(%a6)
movem.l (%a7)+,%d0-%d6/%a0-%a5
movem.l %d0-%d6/%a0-%a5,260(%a6)
lea 312(%a6),%a6
dbf %d7,CB_loop
movem.l (%a7)+,%d0-%d6/%a0-%a5
movem.l %d0-%d6/%a0-%a5,(%a6)
movem.l (%a7),%d0-%d6/%a0-%a3
movem.l %d0-%d6/%a0-%a3,52(%a6)
movem.l GXSvgReg(%pc),%d3-%d7/%a2-%a7
rts
GXSvgReg:
ds.l 16
")