; Boucle interne pour afficher une colonne par plaquage de texture, à la place ; d'une ligne d'affichage horizontale. Ce qui permet à tous les pixels gérés par ; ce code de résider dans le même plan, afin que le temps pris lors de la ; permutation de plan puisse être consommé à l'extérieur de la boucle interne. ; ; A ce stade: ;DS:BX =pointeur de texture source initiale ;DX = offset pour avancer au prochain pixel dans la colonne destination (la largeur ;de la ligne d'affichage est soit négative soit positive) ;SI = nombre de pixels à remplir ;ES:DL = pointeur sur le pixel destination initial ;VGA est configuré pour afficher le plan approprié à cette colonne REPT LOOP_UNROLL ; Positionne Map Mask pour le plan de ce pixel, puis affiche le pixel. mov ah.[bx) ;récupère le pixel de la texture mov es:[di],ah ;paramètre le pixel de l'écran ;Pointe sur le prochain pixel source. add bx,[bp].lXBaseAdvance ;avance un minimum de pixels dans X mov cx.word ptr [bp].lSourceStepX add word ptr [bp].1SourceX,cx ;avance la partie fractionnaire X ;source jnc NoExtraXAdvance ;n'a pas permuté; n'avance pas add bx,[bp].1XAdvanceByOne ;a permuté: avance X de un NoExtraXAdvance: add bx.[bp].1YBaseAdvance ;avance un minimum de pixels dans Y mov cx,word ptr [bp].1SourceStepY add word ptr [bp].lSourceY.cx ;avance la partie fractionnaire ;Y source jnc NoExtraYAdvance ;n'a pas permuté; n'avance pas add bx,[bp].lYAdvanceByOne ;a permuté; avance Y de un NoExtraYAdvance: ;Pointe sur le prochain pixel destination, qui est sur la prochaine ligne ;d'affichage. adc di,dx ENDM