Cambiar color de pantalla en TASM (1)

En esta entrada, veremos lo basico para poder modificar el fondo de la consola de video de ensamblador, asi como el color del texto de cualquier mensaje que enviemos a ella.

Primeramente, debemos saber un poco sobre la interrupcion que usaremos para ello:
Interrupción 10h: Nos permite invocar servicios de video de la ROM BIOS, manipulando algunas de sus funciones.

Los servicios que nos permiten hacer este tipo de cambio de colores son:

  • 02h: nos permite controlar la posicion de nuestro cursor en la pantalla. Los registros BH,DH y DL son los que usaremos para indicar la posicion en donde debe estar el cursor.
  • 06h:Permite inicializar la ventana de video o desplazar su contenido. En este servicio el registro CX indica el pixel donde va a comenzar a cambiar el color y el registro DX indica donde terminara.
Como siguiente punto, debemos saber como es que se representan los colores dentro de emulador.



Cada uno de estos colores al momento de ingresarlos al emulador, podemos representarlo por su parte hexadecimal o binaria:

Los primeros 4 numeros  representan el color que sera para el color de letra, los siguientes 3 representan el color del fondo , el ultimo bit solo es un indicador, si esta en 1 el texto completo en pantalla estara parpadeando.


01011110
0: indicador que nos hara que el texto parpade o no
101: Color de fondo de la pantalla
1110: color del texto en la pantalla.

Ejemplo en un programa:

PILA SEGMENT STACK 'STACK'
     DB 100H DUP (?)
PILA ENDS

DATOS SEGMENT
              MENSAJE DB 'Se ha cambiado el color de la pantalla$'
DATOS ENDS
          
CODIGO SEGMENT
              
              ASSUME CS:CODIGO, SS:PILA, DS:DATOS

INICIO: 

           mov ah,06h
           mov bH,11111111B
           mov cx,0000h
           mov dx,184fh
           int 10h
           
           MOV AH,02H   ;Para posicionar el cursor
           MOV BH,00H   ;Coloco en la pagina 0
           MOV DX,0000H ;Establesco las coordenadas, x=dh=renglon y=dl=columna
           INT 10H      ;ejecuto la interrupci?n
       
           MOV AX,DATOS ;Coloco la pila de datos en ax
           MOV DS,AX    ;paso ax a ds
           
           LEA DX,MENSAJE   ;imprimmo el mensaje
           MOV AH,9H        ;utilizo el servicio 9h para visulizarla en pantalla
           INT 21H          ;ejecuto llamo a la interrupcion 21h
           
         
           
           
           mov ax,4c00h
           int 21h

       MOV AX,4C00H
       INT 21H

CODIGO ENDS
END INICIO

Comentarios