jueves, 4 de abril de 2019

Cambiando el color de pantalla y texto con ensamblador

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:


CR EQU 13
LF EQU 10
TECLADO_8 EQU 8
IMPRIMIR_9 EQU 9
FIN_4C00H EQU 4C00H
DOS_21H EQU 21H
BIOS_10H EQU 10H
TAB EQU 09H
BELL EQU 07H

DATOS SEGMENT
    RENGLON DB 0
    COLUMNA DB 0
    MENSAJE DB CR,LF,'POSICION (X,Y), DEL MENSAJE: Hola mundo'
            DB 'DESPUES DE BORRAR PANTALLA',CR,LF,'$'
        DATOS ENDS
        PILA SEGMENT STACK
            DW 100 DUP('0')
        PILA ENDS

        CODIGO SEGMENT
            CLSP PROC FAR
            ASSUME CS:CODIGO,DS:DATOS,SS:PILA
            
            
            MOV AX,DATOS
            MOV DS,AX
            LEA DX,MENSAJE
            CALL LIMPIA_PANTALLA
            CALL POSICIONA_CURSOR
            MOV AH,IMPRIMIR_9
            INT DOS_21H
            MOV AX,FIN_4C00H
            INT DOS_21H
            
            CLSP ENDP
            
            LIMPIA_PANTALLA PROC NEAR
            MOV AX,0600H
            MOV BH,01011110b ;color que se modifico
            MOV CX,000H
            MOV DX,484FH
            INT BIOS_10H
            RET
            LIMPIA_PANTALLA ENDP
            
            POSICIONA_CURSOR PROC NEAR
            MOV AH,02 ;Posicion del cursor
            MOV BH,00 ;Pagina en 0,es decir que usara esa pantalla y no otra
            MOV DH,RENGLON ; coordenadas de la pagina por renglon
            MOV DL,COLUMNA ;coordenadas de la pagina por columna
            INT BIOS_10H
            RET
            POSICIONA_CURSOR ENDP
            
        CODIGO ENDS
        END CLSP


Corrida en pantalla.


No hay comentarios.:

Publicar un comentario