Fonctions 13h (2)
Quelques fonctions C et structures C utiles pour le mode 13h.

Librairie : lib_graph_c.zip

Fonctions de dessin

Afficher un pixel à l'écran avec une couleur de la palette graphique courante

void Put_Pixel_Video( int x , int y , unsigned char color )
{
  asm
  {
    mov ax,0a000h
    mov es,ax
    mov bx,y
    shl bx,8
    mov ax,y
    shl ax,6
    add ax,bx
    add ax,x
    mov di,ax
    mov al,byte ptr color
    mov es:[di],al
  }
}


Tracer une ligne avec une couleur de la palette graphique courante

void Line_Video( int x1 , int y1 , int x2 , int y2 , unsigned char color )
{
  int x = 0, y = 0, xdiff = 0, ydiff = 0, longueur = 0 ;
  int erreur = 0, xincr = 0, yincr = 0, tmp = 0 ;
  x = x1 ;
  y = y1 ;
  asm
  {
    mov ax,x2
    sub ax,x1
    mov xdiff,ax
    mov xincr,1
    cmp xdiff,0
    jg x0
    neg xdiff
    neg xincr
    x0:
    mov ax,y2
    sub ax,y1
    mov ydiff,ax
    mov yincr,1
    cmp ydiff,0
    jg y0
    neg ydiff
    neg yincr
    y0:
    mov ax,xdiff
    cmp ax,ydiff
    jl ysup
    mov ax,xdiff
    add ax,1
    mov longueur,ax
    bouclex:
    mov bx,y
    shl bx,8
    mov ax,y
    shl ax,6
    add ax,bx
    add ax,x
    mov di,ax
    mov al,byte ptr color
    mov es:[di],al
    mov ax,x
    add ax,xincr
    mov x,ax
    mov ax,erreur
    add ax,ydiff
    mov erreur,ax
    mov ax,erreur
    cmp ax,xdiff
    jl nonsupxdiff
    mov ax,y
    add ax,yincr
    mov y,ax
    mov ax,erreur
    sub ax,xdiff
    mov erreur,ax
    nonsupxdiff:
    add tmp,1
    mov ax,tmp
    cmp ax,longueur
    jl bouclex
    jmp fin
    ysup:
    mov ax,ydiff
    add ax,1
    mov longueur,ax
    boucley:
    mov bx,y
    shl bx,8
    mov ax,y
    shl ax,6
    add ax,bx
    add ax,x
    mov di,ax
    mov al,byte ptr color
    mov es:[di],al
    mov ax,y
    add ax,yincr
    mov y,ax
    mov ax,erreur
    add ax,xdiff
    mov erreur,ax
    cmp erreur,0
    jl nonsupydiff
    mov ax,x
    add ax,xincr
    mov x,ax
    mov ax,erreur
    sub ax,ydiff
    mov erreur,ax
    nonsupydiff:
    add tmp,1
    mov ax,tmp
    cmp ax,longueur
    jl boucley
    fin:
  }
}


Affichage d'un caractère

void Put_Car_Video( int x , int y , char car )
{
  unsigned char far *ASCII = (unsigned char far *)0xF000FA6EL ;
  unsigned char Image[ 8 ], bit_mask ;
  int pos ;
  int i, j ;
  pos = car<<3 ;
  for ( i = 0 ; i < 8 ; i++ )
    Image[ i ] = ASCII[ pos + i ] ;
  for ( j = 0 ; j < 8 ; j++ )
  {
    bit_mask = 0x80 ;
    for ( i = 0 ; i < 8 ; i++ )
    {
    if ( ( Image[ j ] & bit_mask ) && ( x < 319 ) && ( y < 199 ) )
        Put_Pixel_Video( x + i , y + j , 1 ) ;
    bit_mask = bit_mask >> 1;
    }
  }
}


Affichage d'une chaine de caractères

void Put_String_Video( int x , int y , char *text )
{
  int i, x_car ;
  i = 0 ;
  x_car = x ;
  while ( text[ i ] != 0 )
  {
    Put_Car_Video( x_car , y , text[ i ] ) ;
    x_car += 8 ;
    i++ ;
  }
}


Modifier la couleur d'un pixel d'une structure IMAGE

void Put_Pixel_Image( int x , int y , unsigned char color , struct IMAGE *DATA )
{
  DATA->data[ y * DATA->x + x ] = color ;
}


Afficher un fond de couleur uniforme

void Color_Fond( unsigned char color )
{
  unsigned int pos ;
  asm
  {
    mov ax,0a000h
    mov es,ax
    mov pos,0
    boucle:
    mov ax,pos
    mov di,ax
    mov al,byte ptr color
    mov es:[di],al
    add pos,1
    cmp pos,64000
    jnz boucle
  }
}



Tutoriaux - Fonctions 13h (2) - Photographies, projects informatiques et tutoriaux de programmation.
Chandelier Japonais - Annonce immobilière maison - Sellette occasion - Logiciel de rendez-vous - Velo route occasion - Chat sans inscription - Masque - Pic petrolier