|
Monitores e Circuitos de Vídeo
Circuitos de Vídeo
Vamos escrever na memória RAM da placa gráfica com o Debug
C:\ cls
É
C:\ Debug
É
- R DS
É
1CE6: B800
É
- R
É
- E0
É
E0 20.41 [ ] ; a em (0,0) (41=A)
É
E0 20.41 07.0F ; atributo
É
E0 20.41 07.0F 20.43 ; (43=D)
É
E0 20.41 07.0F 20.43 07.78
É
Para monitores monocromáticos há quatro possibilidades de apresentação de caracteres:
-
Normal;
-
Intensificado;
-
Vídeo invertido (texto preto e fundo branco)
-
Blinking (o digito a piscar)
·
07.0F
à
branco intenso sobre preto.
·
07.07
à
branco normal sobre preto.
|
Byte
de Atributo
|
|
Bit 0
|
Cor do digito |
000
à
preto
111
à
branco |
|
Bit 1
|
|
Bit 2
|
|
Bit 3
|
Intensidade |
0
à
Normal : 1
à
Intenso |
|
Bit 4
|
Cor de fundo |
000
à
preto
111
à
branco |
|
Bit 5
|
|
Bit 6
|
|
Bit 7
|
Blinking |
0
à
Normal : 1
à
Blinking |
Vamos criar um programa que escreva directamente na memória RAM da placa de vídeo, com o MASM. Para isso escrevemos o programa no editor de texto.
Janela Segment
Assume CS:Janela
; limpa o monitor com a função
scrool up
MOV AH,06h
;
coordenada
do deslocamento das linhas e o atributo dos dígitos
MOV AL,00h
;
nº de linhas a deslocar, 00h todas as linhas
MOV CH,00H
;
coordenada
do canto superior esquerdo no monitor
MOV CL,00H
; “
MOV DH,24
; coordenada do canto inferior direito no monitor
MOV DL,79
; ”
MOV BH,07H
;
o atributo é em BH
INT 10H
;
para executar a função
;posiciona o cursor no canto inferior esquerdo
POS_CURS:
*
MOV AH,02H ;
o número da função em AH
MOV DH,16 ;
linha 16
MOV DL,30 ;
coluna 30
MOV BH,00H ;
o
número
da pagina
*
INT 10H
;lê caracteres do teclado;
MOV CX,20d
;
para cada linha só ter 20 dígitos
LE_CHAR:
MOV AH,01H
INT 21H
CMP AL,03H
;
código ASCII
à
AL,
Ctrl + C
à
03h para sair
JZ FIM
LOOP LE_CHAR
;
lê o próximo dígito, até 20 dígitos
; sobe uma linha
MOV AH,06H
MOV AL,01H ;
o
número
de linhas a subir
MOV CH,08H ;
canto superior esquerdo
MOV CL,30
MOV DH,16
MOV DL,50
MOV BH,07H ;
atributo normal
INT 10H
JMP POS_CURS
FIM
INT 20H ;
estabelece os valores iniciais
JANELA ENDS
END
Na utilização do programa não carregue no
enter
, pois leva o cursor para fora da janela.
O
byte
de atributo dos caracteres em modo de texto nas placas de cor é diferente. Nestas placas pode-se descodificar até 16 cores de cada conjunto de 4
bits, nible
, e como temos 2
nibles
por
byte
, o
byte
atributo é dividido em dois conjuntos de
4bits
, 2
nibles
.
A cada
nible
é atribuído um conjunto de 4
bits
que correspondem as cores pela ordem IRGB da tabela seguinte. Os 4
bits
de menor peso é a cor da letra e os 4
bits
de maior peso é a cor de fundo.
|
Cor
|
IRG
|
Para escrever azul sobre vermelho, o atributo é formado pelo
bit
azul 1001,
nible
de menor peso e pelo
bit
vermelho 0100 que é o
nible
de maior peso, o
byte
fica então,
01001001
(binário) que corresponde a
49
(hexadecimal) |
|
Preto |
0000
|
|
Azul |
0001
|
|
Verde |
0010
|
|
Azul-Claro |
0011
|
|
Vermelho |
0100
|
|
Violeta |
0101
|
|
Castanho |
0110
|
|
Cinzento-Claro |
0111
|
|
Cinzento-escuro |
1000
|
|
Azul intensificado |
1001
|
|
Verde intensificado |
1010
|
|
Azul-Claro intensificado |
1011
|
|
Vermelho intensificado |
1100
|
|
Violeta intensificado |
1101
|
|
Amarelo |
1110
|
|
Branco |
1111
|
|