Ce matn , PT_ et moi avons réfléchi sur la façon la plus rapide d'effacer l'écran (en mode 8bpp)...
Voici le résultat :
- Code: Select all
FastClr:
ld de,$555555 ; octet à écrire (= couleur bleue)
or a
sbc hl,hl
ld b,217
di
add hl,sp ; on sauvegarde SP dans HL
ld sp,vram+76818 ; Pour optimiser au mieux , on écrit 18 octets en trop
ClrLp: .fill 118,$d5 ; = 118 * "PUSH DE"
djnz ClrLp ; pendant 217 fois
ld sp,hl ; on restaure SP
ei
16+4+8+8+4+4+16+217*(118*10+13)-5+4+4=258944 States !!!

( à titre de comparaison, en utilisant le classique LDIR, on est dans les 537600 States !!)
Imaginez cette routine relocalisée en adresse $e30800 !! ça tournerait encore plus vite !

** EDIT **
Encore (un peu) plus vite !
- Code: Select all
FastClr:
ld de,$555555 ; will write byte 85 (= blue color)
or a
sbc hl,hl
ld b,213
di
add hl,sp ; saves SP in HL
ld sp,vram+76800 ; as a PUSH is decreasing SP, begin at end of 8bpp mode physical screen
ClrLp: .fill 120,$d5 ; = 120 * "PUSH DE"
djnz ClrLp ; during 213 times
.fill 40,$d5 ; 40 * "PUSH DE"
ld sp,hl ; restore SP
ei
16+4+8+8+4+4+16+213*(120*10+13)-5+40*10+4+4 = 258832 States =D