A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Oficina

8. O loader Numaboa

Sab

26

Mai

2007


16:20

(6 votos, média 5.00 de 5) 


Identificando o sistema operacional Numaboa

Escrever apenas uma letra é um negócio marreta. No mínimo, precisamos limpar a tela e identificar nosso sistema operacional. Para isto, bastam alguns ajustes.

Limpando a tela

Como já sabemos que a INT 10 possui os serviços de vídeo, precisamos apenas identificar a rotina para limpar a tela: pode ser a 06 (Scroll window up) que rola a tela para cima ou a 07 (Scroll window down) que rola a tela para baixo. Fica a seu critério qual das duas usar pois o efeito será o mesmo:

	AH = 06 - ROLAGEM PARA CIMA

	AL = número de linhas de rolagem. As linhas anteriores serão
		limpas. Se 0 ou maior que o tamanho da tela, a tela toda
		será limpa.
	BH = atributo usado para limpar a(s) linha(s).
	CH = linha do canto superior esquerdo da janela de rolagem.
	CL = coluna do canto superior esquerdo da janela de rolagem.
	DH = linha do canto inferior direito da janela de rolagem.
	DL = coluna do canto inferior direito da janela de rolagem.
	- não tem valor de retorno

	AH = 07 - ROLAGEM PARA BAIXO
	- usa os mesmos registradores com os mesmos valores.

Eu optei pelo serviço 07 da INT 10.

[BITS 16] ; Código de 16 bits [ORG 0x7C00] ; Origem do código em 7C00 principal: ; Marcador do início do programa ; Limpar a tela mov ah,0x07 ; Indica a rotina de rolagem de tela da BIOS mov al,0x00 ; Rolar TODAS as linhas mov bh,0x07 ; Texto branco em fundo preto mov ch,0x00 ; Linha do canto superior esquerdo mov cl,0x00 ; Coluna do canto superior esquerdo mov dh,800 ; Linha do canto inferior direito (maior que a tela) mov dl,1200 ; Coluna do canto inferior direito (maior que a tela) int 0x10 ; Chamar a INT 10 mov ah,0x0E ; Indica a rotina de teletipo da BIOS ...

Para dar as coordenadas do canto superior esquerdo da tela também poderíamos usar mov cx, 0x0000 (observe o hexadecimal 0x0000 com quatro zeros! os quatro zeros são necessários para que os 16 bits sejam preenchidos). Se indicarmos um número de linha e coluna maior que a tela para o canto inferior direito, temos a certeza de que toda a tela será limpa.

Posicionando o cursor

Limpar a tela não significa que o cursor seja deslocado na posição 0,0 - o início da tela. É preciso usar mais um serviço da INT 10 que seta a posição do cursor: INT 10 serviço 02.

[BITS 16] ; Código de 16 bits [ORG 0x7C00] ; Origem do código em 7C00 principal: ; Marcador do início do programa ; Limpar a tela mov ah,0x07 ; Indica a rotina de rolagem de tela da BIOS mov al,0x00 ; Rolar TODAS as linhas mov bh,0x07 ; Texto branco em fundo preto mov ch,0x00 ; Linha do canto superior esquerdo mov cl,0x00 ; Coluna do canto superior esquerdo mov dh,800 ; Linha do canto inferior direito (maior que a tela) mov dl,1200 ; Coluna do canto inferior direito (maior que a tela) int 0x10 ; Chamar a INT 10 ; Posicionar o cursor mov ah,0x02 ; Indica a rotina de posicionamento do cursor mov bh,0x00 ; Número da página de vídeo mov dx,0x0000 ; Linha e coluna da nova posição do cursor (0,0) int 0x10 ; Chamar a INT 10 mov ah,0x0E ; Indica a rotina de teletipo da BIOS ...

Informações adicionais