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:
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