El modo gráfico 13h nos permite manejar la pantalla como una matriz de 320 píxeles de ancho por 200 píxeles de alto. Cada píxel puede tomar uno de 256 colores, estos colores están definidos en una paleta de colores la cual podemos configurar.
El siguiente programa despliega primero líneas verticales, espera por una tecla, despliega líneas horizontales y espera por otra tecla. Los colores mostrados son los de la paleta default de colores. Usamos la interrupción 10h, servicio 0Ch para modificar los píxeles; el parámetro AL más que especificar directamente el color, indica la entrada de la paleta de colores que se debe usar para el píxel ubicado en la fila DX y la columna CX.
En el siguiente post veremos con más detalle la paleta de colores y cómo podemos pintar en pantalla mediante escrituras a memoria en lugar de usar la interrupción 10h.
La siguiente entrada en Wikipedia muestra la paleta default de colores que corresponde a los colores mostrados por el programa.
.model small .stack 128 .data .code .startup main proc ; INT 10h / AH = 0 - configurar modo de video. ; AL = modo de video deseado. ; 00h - modo texto. 40x25. 16 colores. 8 paginas. ; 03h - modo texto. 80x25. 16 colores. 8 paginas. ; 13h - modo grafico. 40x25. 256 colores. ; 320x200 pixeles. 1 pagina. mov ax,0013h int 10h ; ============== Lineas verticales ====================== ; INT 10h / AH = 0Ch - cambiar color de un pixel. ; AL = color ; CX = columna ; DX = fila ; for CX=0 to 256 ; for DX=0 to 200 ; Poner pixel (DX,CX) con color CX mov cx,0000h mov dx,0000h ciclo_1: mov ah,0ch mov al,cl int 10h inc dx cmp dx,200 jne ciclo_1 mov dx,0000h inc cx cmp cx,256 jne ciclo_1 ; esperar por tecla mov ah,10h int 16h ; ============== Lineas horizontales ====================== ; INT 10h / AH = 0Ch - cambiar color de un pixel. ; AL = color ; CX = columna ; DX = fila ; for DX=0 to 200 ; for CX=0 to 320 ; Poner pixel (DX,CX) con color DX mov cx,0000h mov dx,0000h ciclo_2: mov ah,0ch mov al,dl int 10h inc cx cmp cx,320 jne ciclo_2 mov cx,0000h inc dx cmp dx,200 jne ciclo_2 ; esperar por tecla mov ah,10h int 16h ; regresar a modo texto mov ax,0003h int 10h ; finalizar el programa mov ax,4c00h int 21h ret main endp end
como acelero el pintado?
ResponderEliminarya hice el programa, pero como hago que los pixeles se pinten mas rápido?
ResponderEliminar