; Routine de lecture de pixel en Mode X (320x240, en 256 couleurs). Fonctionne ; sur tous les VGA. Aucun clipping n'est effectué. ; Appelable en C near comme suit: ; ; unsigned int ReadPixelX(int X, int Y, unsigned int PageBase); GC_INDEX equ 03ceh ;Graphics Controller Index READ_MAP equ 04h ;index dans GC du registre Read Map 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 du pixel à lire Y dw ? ;coordonnée Y du pixel à lire PageBase dw ? ;offset de base dans la mémoire vidé de la page dans ;laquelle lire le pixel parms ends .model small .code public _ReadPixelX _ReadPixelX 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 ah,byte ptr [bp+X] and ah,011b ;AH = plan du pixel mov al,READ_MAP ;AL = index dans GC du registre Read Map mov dx,GC_INDEX ;positionne Read Map pour lire le out dx,ax ; plan du pixel mov al,es:[bx] ;lit la couleur du pixel sub ah,ah ;la convertit en unsigned int pop bp ;restaure la stack frame de l'appelant ret _ReadPixelX endp end