; Routine d'écriture de pixel en Mode X (320x240, en 256 couleurs). Fonctionne ; sur tous les VGAs. Aucun clipping n'est effectué. ; Appelable en C near comme suit: ; ; void WritePixelX(int X, int Y, unsigned int PageBase, int Color); SC_INDEX equ 03c4h ;Sequence Controller Index MAP_MASK equ 02h ;index dans SC du registre Map Mask SCREEN_SEG equ 0a000h ;segment de la mémoire vidéo en mode X SCREEN_WIDTH equ 80 ;largeur de l'écran en octets d'une ligne ; d'affichage à l'autre parms struc dw 2 dup (?) ; BP empilé et adresse de retour X dw ? ;coordonnée X de pixel à afficher Y dw ? ;coordonnée Y de pixel à afficher PageBase dw ? ; offset de base dans la mémoire vidéo de la page ; dans laquelle afficher le pixel Color dw ? ;couleur dans laquelle afficher le pixel parms ends .model small .code public _WritePixelX _WritePixelX proc near push bp ;préserve la stack frame de l'appelant mov bp,sp ;pointe sur la stack frame locale mov ax,SCREEN_WIDTH mul [bp+Y] ;offset de la ligne d'affichage du pixel dans la page mov bx,[bp+X] shr bx,1 shr bx,1 ;X/4 = offset du pixel dans la ligne d'affichage add bx,ax ;offset du pixel dans la page add bx,[bp+PageBase] ;offset du pixel dans la mémoire vidéo mov ax,SCREEN_SEG mov es,ax ; ES:BX pointe sur l'adresse du pixel mov cl,byte ptr [bp+X] and cl,011b ;CL = plan du pixel mov ax,0100h + MAP_MASK ;AL = index dans SC du registre Map Mask shl ah,cl ;ne positionne que le bit du plan du pixel à 1 mov dx,SC_INDEX ;positionne Map Mask pour n'activer que le out dx,ax ; plan du pixel mov al,byte ptr [bp+Color] mov es:[bx],al ;affiche le pixel dans la couleur désirée pop bp ;restaure la stack frame de l'appelant ret _WritePixelX endp end