Pc Assembler Bios
Transcript of Pc Assembler Bios
-
7/25/2019 Pc Assembler Bios
1/73
-
7/25/2019 Pc Assembler Bios
2/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 2
NDICE
NDICE ............................................................................................................................................................... 2
PREFCIO DA EDIO ELETRNICA .......................... ......................... .......................... ......................... ................ 4
PREFCIO DA EDIO ORIGINAL ......................... .......................... ......................... .......................... .................... 5
1 INTRODUO ............................................................................................................................................. 6
1.1 OQUE O BIOS ............................................................................................................................................................61.2 POR QUE USAR O BIOS ...................................................................................................................................................61.3 OBJETIVOS DESTE LIVRO ..................................................................................................................................................61.4 OACESSO AO BIOS ........................................................................................................................................................71.5 MDULOS DO BIOS ......................................................................................................................................................71.6 UMA RPIDA REVISO DE CONCEITOS................................................................................................................................7 1.7 UMA VISO RPIDA DO HARDWARE DO PC ........................................................................................................................8
2 ACESSO AO TECLADO ......................... ......................... .......................... ......................... ........................... 11
2.1 CARACTERSTICAS DO HARDWARE ...................................................................................................................................112.2 ESTRUTURA DE DADOS ..................................................................................................................................................112.3 FUNES DISPONVEIS ..................................................................................................................................................112.4 EXEMPLO ....................................................................................................................................................................12
3 ACESSO AO VDEO .................................................................................................................................... 13
3.1 CARACTERSTICAS DO HARDWARE ...................................................................................................................................13
3.2 ESTRUTURA DE DADOS ..................................................................................................................................................153.3 FUNES DISPONVEIS ..................................................................................................................................................163.4 EXEMPLO ....................................................................................................................................................................20
4 ACESSO AO DISQUETE ........................... .......................... .......................... .......................... ...................... 21
4.1 CARACTERSTICAS DO HARDWARE ...................................................................................................................................214.2 ESTRUTURA DE DADOS ..................................................................................................................................................214.3 FUNES DISPONVEIS ..................................................................................................................................................224.4 EXEMPLO ....................................................................................................................................................................25
5 ACESSO AO DISCO RGIDO .......................... .......................... ......................... .......................... .................. 26
5.1 CARACTERSTICAS DO HARDWARE ...................................................................................................................................265.2 ESTRUTURA DE DADOS ..................................................................................................................................................265.3 FUNES DISPONVEIS ..................................................................................................................................................275.4 EXEMPLO ....................................................................................................................................................................31
6 ACESSO IMPRESSORA ............................................................................................................................ 32
6.1 CARACTERSTICAS DO HARDWARE...................................................................................................................................32 6.2 ESTRUTURA DE DADOS ..................................................................................................................................................326.3 FUNES DISPONVEIS ..................................................................................................................................................326.4 EXEMPLO ....................................................................................................................................................................33
7 ACESSO S INTERFACES SERIAIS ................................. ............................ .......................... ......................... 34
7.1 CARACTERSTICAS DO HARDWARE ...................................................................................................................................347.2 ESTRUTURA DE DADOS ..................................................................................................................................................34
-
7/25/2019 Pc Assembler Bios
3/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 3
7.3 FUNES DISPONVEIS ..................................................................................................................................................347.4 EXEMPLO ....................................................................................................................................................................36
8 ACESSO AO RELGIO ................................................................................................................................ 37
8.1 CARACTERSTICAS DO HARDWARE ...................................................................................................................................378.2 ESTRUTURA DE DADOS ..................................................................................................................................................37
8.3 FUNES DISPONVEIS ..................................................................................................................................................388.4 EXEMPLO ....................................................................................................................................................................38
9 OUTRAS FUNES DO BIOS ........................ ......................... .......................... .......................... .................. 39
9.1 INFORMAO DA MEMRIA DISPONVEL..........................................................................................................................39 9.2 INFORMAO DOS DISPOSITIVOS DISPONVEIS ..................................................................................................................399.3 IMPRESSO DE TELA .....................................................................................................................................................399.4 LEITURA DO CARREGADOR DO SISTEMA OPERACIONAL .......................................................................................................409.5 TESTES INICIAIS ............................................................................................................................................................40
10 UMA ROTINA PARA ACESSO AO ALTO-FALANTE ........... ......................... ............................ ......................... 42
10.1 INTRODUO...............................................................................................................................................................42 10.2 CARACTERSTICAS DO HARDWARE ..................................................................................................................................4210.3 DESCRIO DA ROTINA .................................................................................................................................................4310.4 LISTAGEM DA ROTINA ...................................................................................................................................................43
11 PROGRAMAS EXEMPLO ............................................................................................................................ 48
11.1 COMO ENTRAR COM ESTES PROGRAMAS EM UM PC ........................................................................................................4811.2 QUADRO DE AVISOS .....................................................................................................................................................4811.3 DUPLICADOR DE DISCO .................................................................................................................................................57
APNDICE AMAPA DA MEMRIA ................................................................................................................... 69
APNDICE BCDIGOS DO TECLADO ................................................................................................................ 70
APNDICE CSMBOLOS DO VDEO ......................... ......................... .......................... ......................... .............. 73
-
7/25/2019 Pc Assembler Bios
4/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 4
PREFCIO DA EDIO ELETRNICA
com grande prazer e imenso atraso que eu disponibilizo o meu segundo livro em formato eletrnico.
Em 1986, com o relativo sucesso do primeiro volume do PC Assembler, acertei rapidamente a publicao
deste segundo volume, PC Assembler Usando o BIOS. Novamente o livro foi escrito em um Unitron
(clone do Apple ][) e os originais foram enviados impressos para serem redigitados e compostos na editora.
O livro tambm teve o seu sucesso: foram impressos 5305 livros em trs edies, do segundo semestre de
87 at o incio de 98, quando a Editora Campus decidiu no mais reeditar a obra e me devolveu os direitos
de publicao.
Esta edio eletrnica segue a formatao que adotei com o primeiro volume, publicado h quase dois
anos atrs.
Espero que seja til para algum.
Daniel Quadros
Abril/2012
-
7/25/2019 Pc Assembler Bios
5/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 5
PREFCIO DA EDIO ORIGINAL
Este livro resultado da minha experincia profissional com micros compatveis com o PC-IBM, em
particular meu envolvimento no projeto do programa monitor do microcomputador Nexus. Gostaria,
portanto, de dedic-lo a Alberto Koga, Chen, Eduardo Fujii, Elisabeth Yoshida, Luiz Claudio Navarro, MarcioDondon e a todos os demais amigos da Scopus que direta ou indiretamente estiveram ligados a este
projeto.
Gostaria tambm de agradecer Humana Informticao apoio fornecido, sem o qual esta obra no teria
sido vivel.
Finalmente, um agradecimento especial pacincia de minha esposa e sua colaborao na reviso do
original.
Daniel Quadros,
So Paulo 11 de dezembro de 1986
-
7/25/2019 Pc Assembler Bios
6/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 6
1
INTRODUO
1. 1 O QUE O BIOS
O ROM BIOS (Read Only Memory based Basic Input Output System) ou simplesmente BIOS, um conjuntode rotinas armazenadas em memria no voltil nos computadores da linha PC.
Estas rotinas interagem diretamente com o hardware, sendo responsveis pela iniciao e acesso s
interfaces instaladas.
1. 2 POR QUE USAR O BIOS
O programador Assembler tem no PC-IBM trs maneiras de acessar o hardware:
Diretamente, atravs de instrues de entrada e sada
Atravs do BIOS
Atravs do sistema operacional
O acesso via BIOS permite obter um desempenho e um controle prximos ao do acesso direto, sem a
necessidade de um conhecimento profundo do hardware. O BIOS capaz tambm de mascarar diferenas
de hardware, aumentando a portabilidade do programa que o acessa.
Portanto, usa-se o BIOS quando:
Necessita-se de maior controle
Necessita-se maior desempenho
Deseja-se aumentar a portabilidade
Um exemplo tpico o acesso ao vdeo. O acesso via sistema operacional e relativamente lento e no
permite, por exemplo, o posicionamento do cursor. O acesso direto extremamente rpido, porm exige o
conhecimento do hardware e tem variaes conforme a interface de vdeo utilizada. O acesso via BIOS
representa um bom compromisso, com a obteno de uma boa velocidade e funes extras em relao ao
sistema operacional, acessadas de forma independente da interface utilizada.
1. 3
OBJETIVOS DESTE LIVRO
O objetivo principal deste livro fornecer ao programador assembler informaes para que ele possa usar
as funes do BIOS em seus programas.
Juntamente com a descrio das funes so fornecidos exemplos e sugestes, bem como lembretes
quanto a restries existentes.
Embora uma apresentao profunda do hardware do PC fuja do escopo deste livro, cada captulo contem
uma curta descrio do hardware envolvido.
-
7/25/2019 Pc Assembler Bios
7/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 7
1. 4 O ACESSO AO BIOS
O acesso s funes do BIOS sempre feito atravs de interrupes de software. Os parmetros de entrada
e os resultados so normalmente passados atravs de registradores. Normalmente, apenas os
registradores utilizados para resultados so alterados; entretanto deve-se tomar cuidado, pois existem
algumas excees.
Uma chamada tpica ao BIOS feita da seguinte forma:
Salvam-se os registradores alterados pela funo e cujo contedo no se deseja perder
Colocam-se os parmetros de entrada nos respectivos registradores
Chama-se a funo, atravs de uma instruo INT
Recuperam-se os registradores salvos
1. 5
MDULOS DO BIOS
O BIOS est organizado como uma srie de grupos de rotinas, aqui denominadas mdulos. Os mdulos que
sero apresentados neste livro so os seguintes:
Acesso ao teclado
Acesso ao vdeo
Acesso ao disquete
Acesso ao disco rgido (winchester)
Acesso impressora
Acesso s interfaces seriais
Acesso ao relgio
Informao da memria disponvel
Informao dos dispositivos disponveis
Impresso da tela (hardcopy)
Leitura do carregador do sistema operacional
Testes iniciais
Em alguns modelos de PC, existem ainda outros mdulos que no sero aqui discutidos, como, por
exemplo, as rotinas de acesso fita cassete existentes no PC-IBM original.
1. 6 UMA RPIDA REVISO DE CONCEITOS
O microprocessador 8088 manipula dados de 8 bits (BYTEs), 16 bits (WORDs) e, em algumas ocasies
especiais, 32 bits (DOUBLE WORDs). Os double wordsnormalmente armazenam endereos, que no 8088
so constitudos de duas partes: um SEGMENTOe um OFFSET, ambos de 16 bits. O endereo "fsico" de
uma posio obtido multiplicando o segmento por 16 e somando o offset, de forma a se obter um
endereo de 20 bits. Os words so armazenados na memria com o byte MENOS significativo no endereo
-
7/25/2019 Pc Assembler Bios
8/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 8
MENOR; os double words so armazenados com o word MENOS significativo no endereo MENOR. Por
exemplo, o endereo 1234H:5678H seria armazenado a partir do endereo 2000H da seguinte forma:
Endereo contedo
2000H 78H
2001H 56H2002H 34H
2003H 12H
(Neste livro adotamos a conveno de indicar nmeros hexadecimais atravs do sufixo "H", como no
exemplo acima.)
Os bits de um dado so numerados a partir de 0, que o bit menos significativo. Desta forma o bit mais
significativo de um byte o bit 7 e o mais significativo de um word o 15.
O 8088 possui 13 registradores de 16 bits: DS, ES, CS, SS, PC, SP, BP, SI, DI, DX, CX, BX e AX; os quatro
ltimos podem ser manipulados como pares de registradores de 8 bits (DH, DL, CH, CL, BH, BL, AH e AL). Os
quatro primeiros so os REGISTRADORES de SEGMENTO, que contm os segmentos de dados (DS e ES),
cdigo (CS) e pilha (SS).
Vamos nos referir com frequncia a INTERRUPES de SOFTWARE e HARDWARE. As primeiras so desvios
causados pela execuo da instruo INT e as segundas so desvios causados pela sinalizao de um
dispositivo externo. O 8088 dispe de 256 interrupes, armazenando os endereos das rotinas que as
tratam em double words, a partir do incio da memria (endereo 0). O endereo da rotina que trata a
interrupo "i" est armazenado no double word de endereo "4*i".
Para conhecer maiores detalhes sobre o 8088 sugere-se a leitura do primeiro volume do "PC Assembler".
1. 7 UMA VISO RPIDA DO HARDWARE DO PC
O hardware do PC bastante modular, sendo normalmente composto de uma placa de sistema que dispe
de conectores ("slots") nos quais so conectadas as vrias placas de expanso. Neste item, vamos
apresentar rapidamente a placa de sistema; outras placas de expanso sero apresentadas nos captulos
que tratam dos mdulos do BIOS que com elas interagem.
A figura abaixo mostra, em grandes blocos, a arquitetura da placa de sistema.
-
7/25/2019 Pc Assembler Bios
9/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 9
Vamos agora analisar os diversos blocos:
8088 Microprocessador
um processador com via interna de 16 bits e via externa de 8 bits, capaz de enderear
diretamente 1 Mbyte de memria e 64 K endereos de E/S. No PC original e na maioria dos
compatveis, trabalha com uma frequncia de 4.77 MHz.
8087 Coprocessador numrico
Permite a rpida execuo de operaes aritmticas, logartmicas e trigonomtricas, com alta
preciso.
ROM Memria permanente (no voltil)
Contm o BIOS e, no caso do PC IBM, o ROM BASIC (linguagem BASIC sem comandos de acesso a
disco).
RAM Memria de leitura/escrita
Localizada a partir do endereo 00000H, o tamanho desta memria varia de modelo para modelo;
os tamanhos mais comuns so 256, 512, 640 e 704 Kbytes. O PC utiliza deteco de erro atravs
de paridade na memria RAM, armazenando cada byte em 9 bits (o nono bit no acessvel
diretamente).
DMA Acesso direto memria
composto de um controlador de DMA 8037 da Intel, capaz de enderear 64 Kbytes e um
conjunto de registradores (denominados registradores de pgina de DMA) que contm os 4 bitsmais significativos do endereo de transferncia. Por este motivo, uma transferncia via DMA
deve ter os 4 bits mais significativos de DMA fixos. O 8037 dispe de 4 canais de DMA, sendo um
deles utilizado para o refrescamento da memria RAM, no estando, portanto, disponvel para as
placas de expanso.
8259 Controlador de interrupes
Gerencia 8 nveis de interrupo, que so mapeados para os vetores 08H a 0FH. Os dois primeiros
nveis so usados internamente placa de sistema: o nvel 0 (INT 8) corresponde a uma
interrupo de tempo real gerada pelo temporizador 8253 e o nvel 1 (INT 9) corresponde chegada de um cdigo do teclado. O controle das interrupes feito atravs do registrador de
mscara da 8259, acessvel por instrues de entrada e sada no endereo 21H. Os bits em "1"
neste registrador correspondem a interrupes MASCARADAS, isto , interrupes no
permitidas. Ao final do tratamento de uma interrupo deve-se escrever o comando "End Of
Interrupt" (EOI - 20H) no registrador de comandos da 8259 (endereo de E/S 20H)
8253 Temporizador
O temporizador/contador 8253 dispe de 3 canais independentes e recebe como entrada uma
frequncia de 1.193.180 Hz. O canal 0 est conectado ao nvel 0 de interrupo, o canal 1
utilizado no refrescamento da memria, e o canal 2 est conectado ao circuito de gerao de
sons. A programao de um canal da 8253 feito escrevendo-se uma palavra de controle no
-
7/25/2019 Pc Assembler Bios
10/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 10
registrador de controle (endereo de E/S 43H) e em seguida a contagem inicial no registrador
correspondente ao canal (canal 0 - 40H, 1 - 41H, 2 - 42H). O formato da palavra de controle :
bits 7 e 6 00 - seleciona canal 0
01 - seleciona canal 1
10 - seleciona canal 2bits 5 e 4 00 - prepara leitura do contador
01 - ler/carregar somente o byte menos significativo
10 - ler/carregar somente o byte mais significativo
11 - ler/carregar primeiro o byte menos significativo e depois o mais significativo
bits 3 a 0 0110 - seleciona modo divisor binrio
8255 Interface paralela
Esta interface programada de forma a ter dois registradores de leitura e um de escrita. O
primeiro registrador de leitura (endereo de E/S 60H) utilizado para ler os cdigos enviados pelo
teclado. O segundo registrador de leitura (endereo de E/S 62H) permite ler as seguintes
informaes:
bit 7 1 se ocorreu erro de paridade na RAM da placa de sistema
bit 6 1 se ocorreu erro de paridade em expanso de memria
bit 5 sada o canal 2 da 8253
bit 4 reservado
bits 3 a 0 chaves de configurao. O significado destas chaves varia de modelo para modelo
O registrador de escrita fica no endereo de E/S 61H e tem as seguintes funes:
bit 7 "0" permite a recepo de cdigos do teclado; deve ser pulsado em "1" apos a
leitura do cdigo
bit 6 "1" na operao normal, mantido em "0" por 20 ms re-inicia o teclado
bit 5 "0" habilita teste de paridade na RAM da placa de sistema.
"1" desabilita o teste e limpa erro anterior
bit 4 idem ao bit 5, para a expanso de memria
bit 3 reservado (no PC XT da IBM seleciona o conjunto de chaves de configurao a serlido)
bit 2 no usado
bit 1 controla o alto-falante
bit 0 controla o canal 2 da 8253
Apesar deste registrador ser de escrita, ele pode ser lido para obter a programao anterior.
NMI Interrupo no mascarvel
Uma interrupo no mascarvel pode ser gerada por um erro de paridade ou pelo coprocessadornumrico 8087. A escrita de 080H no endereo de E/S 0A0H habilita a gerao desta interrupo;
a escrita de 00H neste mesmo endereo a desabilita.
-
7/25/2019 Pc Assembler Bios
11/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 11
2
ACESSO AO TECLADO
2. 1 CARACTERSTICAS DO HARDWARE
O teclado dos micros compatveis com o PC-IBM se caracteriza por possuir um microprocessador prprio epor enviar um cdigo (de 8 bits) para o processador principal sempre que uma tecla for pressionada (ou
mantida pressionada por certo tempo) ou liberada. Este cdigo, denominado pela IBM de "scan code"
(cdigo de varredura), possui o bit mais significativo igual a "1" se a tecla foi liberada ou "0" se a tecla foi
apertada (ou mantida pressionada). Os demais bits indicam qual a tecla detectada (ver apndice B).
O envio deste cdigo ao 8088 sinalizado atravs de uma interrupo de hardware (INT 09H). O
tratamento desta interrupo normalmente efetuado pelo BIOS, que recolhe e trata o cdigo fornecido
pelo teclado. Este tratamento consiste em:
Ler o cdigo da tecla, no port da 8255 de endereo 60H
Sinalizar a leitura ao teclado, pulsando o bit 7 do port da 8255 de endereo 62H (colocando-o em
"1" e logo em seguida retornando-o a "0")
Atualizar os estados das teclas alteradoras de cdigo (Shift, Control, Alt, Caps Lock, Num Lock e
Scroll Lock)
Suprimir a auto repetio da tecla Ins e as combinaes invlidas de teclas
Tratar combinaes especiais ( Ctrl Alt Del, Ctrl Break, Ctrl Num Lock e Shift PrtSc)
Gerar o cdigo apropriado para as demais combinaes e o armazenar na fila de teclado
Um tratamento especial realizado na liberao da tecla Alt permite gerar todos os cdigos de 1 a 255atravs da digitao do seu cdigo decimal no teclado numrico, com a tecla Alt pressionada. Ao se liberar
a tecla Alt o cdigo correspondente gerado.
Os cdigos colocados na fila de recepo esto codificados em 16 bits, no que a IBM denomina " Extended
ASCII" (ASCII expandido), que consiste no cdigo ASCII (American Standard Code for Information
Interchange) acrescido de cdigos especiais (os "extended codes" ou cdigos expandidos). Os cdigos ASCII
normais se caracterizam por terem o byte mais significativo igual a zero e os " extended codes" por terem o
byte menos significativo igual a zero.
2. 2 ESTRUTURA DE DADOS
A principal estrutura de dados utilizada a fila de teclado, normalmente com 15 posies, utilizada para
armazenar os cdigos gerados em tempo de interrupo at que os eles sejam lidos pelo programa que
est sendo executado.
2. 3 FUNES DISPONVEIS
O acesso s funes do teclado feito atravs de INT 16H, com AH contendo o nmero da funo desejada:
AH = 0 L um cdigo do teclado
Aguarda existir um cdigo disponvel na fila do teclado e o retira da fila, retornando-o em AX.
-
7/25/2019 Pc Assembler Bios
12/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 12
AH = 1 Informa se h tecla disponvel
Retorna com o flag Z ativo se no houver tecla disponvel. Caso contrrio, retorna com o flag Z
inativo e com o cdigo da prxima tecla a ser lida em AX (o cdigo NO retirado da fila).
AH = 2 Informa estado das teclas alteradoras
Retorna em AL o estado com a seguinte codificao:
Bit Ativo se
7 Ins travado
6 Caps Lock travado
5 Num Lock travado
4 Scroll Lock travado
3 Alt pressionado
2 Control pressionado
1 Shift esquerdo pressionado
0 Shift direito pressionado
Em todas as funes o contedo de AX alterado; na funo chamada por AH = 1 os flags so tambm
alterados.
2. 4 EXEMPLO
O trecho abaixo espera um cdigo estar disponvel ou a tecla Shift esquerda ser pressionada:
ESPERA:
MOV AH,2
INT 16H
TEST AL,2
JNZ SHIFT_ESQ ; desvia, se shift esquerdo pressionado
MOV AH,1
INT 16H
JZ ESPERA ; repete, se no h cdigo disponvel
MOV AH,0 ; tem cdigo disponvel
INT 16H ; AX = cdigo
-
7/25/2019 Pc Assembler Bios
13/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 13
3
ACESSO AO VDEO
3. 1 CARACTERSTICAS DO HARDWARE
Inicialmente, vamos definir alguns conceitos:
Vdeo alfanumrico um vdeo onde a leitura e escrita so feitas em termos de caractere
Vdeo grfico um vdeo onde a leitura e escrita so feitas em termos de pontos
Atributo um modificador que determina a apresentao de um caractere (reverso, intenso,
sublinhado, etc.)
Cor de frente a cor dos pontos acesos de um caractere
Cor de fundo a cor dos pontos apagados de um caractere
O BIOS dos micros compatveis com o PC-IBM suporta dois tipos de placas controladoras de vdeo:
Monochrome Display Adapter
Capaz de gerar apenas vdeo alfanumrico monocromtico de alta definio
Color/Graphics Adapter
Capaz de gerar vdeo alfanumrico e grfico, ambos coloridos.
3.1.1 "MONOCHROME DISPLAY ADAPTER"
Esta placa possui um nico modo de operao, gerando um vdeo de 25 linhas de 80 caracteres. Cadacaractere apresentado na tela dentro de um bloco de 9x14 pontos, ocupando uma regio de 7x9 pontos.
Isto permite a obteno de caracteres de alta definio, prprios para a leitura de texto com baixa fadiga
visual.
A tela armazenada em memria contida na prpria placa, de endereo inicial 0B0000H. Cada posio da
tela corresponde a 2 bytes nesta memria. O primeiro (posio par) determina o caractere a ser
apresentado (ver apndice C). O segundo (posio impar) contem o atributo do caractere:
Bit 7 = 1 piscante
Bit 3 = 1 intensoBits 6 5 4 2 1 0
1 1 1 0 0 0 reverso
0 0 0 1 1 1 normal
0 0 0 0 0 1 sublinhado
0 0 0 0 0 0 invisvel
Demais normal
-
7/25/2019 Pc Assembler Bios
14/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 14
O armazenamento da tela na memria feito sequencialmente, ou seja, o caractere na linha l(0 a 24) e
coluna c(0 a 79) fica armazenado no endereo
0B0000H + 160 * l + c
A memria de tela est sempre acessvel ao processador, sem ocorrncia de interferncia no vdeo.
3.1.2 "COLOR/GRAPHICS ADAPTER"
Esta placa possui quatro modos de operao:
Alfanumrico, 25 linhas de 40 caracteres, 16 cores
Alfanumrico, 25 linhas de 80 caracteres, 16 cores
Grfico, 200 linhas de 320 pontos, 4 cores
Grfico, 200 linhas de 640 pontos, monocromtico
Em todos os modos a tela armazenada em uma memria de 16Kbytes, de endereo inicial 0B8000H,contida na prpria placa. O BIOS suporta 8 pginas independentes de vdeo no modo alfanumrico de 40
colunas e 4 pginas no modo alfanumrico de 80 colunas.
O armazenamento da tela no modo alfanumrico semelhante ao j visto na "Monochrome Adapter",
mudando apenas a codificao do atributo:
Bit 7 - este bit pode ser programado como atributo piscante (programao normal do BIOS) ou
como intensidade da cor de fundo.
Bits 6,5,4 -selecionam a cor de fundo do caractere, correspondendo respectivamente s cores
Vermelho (R - Red), Verde (G - Green) e Azul (B -Blue)
Bit 3 -intensidade da cor de frente (1 = intenso)
Bits 2,1,0 - selecionam a cor de frente, correspondendo respectivamente a R,G e B
O caractere correspondente linha l (0 a 25) e coluna c (0 a 79) da pgina p (0 a 3) armazenado no
endereo
0B8000H + 01000H * p + 160 * l + c
No modo 40 colunas (c de 0 a 39) temos
0B8000H + 00800H * p + 80 * l + c
Notar que em ambos os casos h um arredondamento do tamanho da pgina: de 4000 para 4096 (80
colunas) e de 2000 para 2048 (40 colunas).
Nos modos grficos as linhas pares so armazenadas a partir do endereo 0B8000H e as mpares a partir do
endereo 0BA000H.
No modo 200 linhas de 320 pontos ("media resoluo") cada byte na memria corresponde a 4 pontos na
tela:
a0 a1 b0 b1 c0 c1 d0 d1
-
7/25/2019 Pc Assembler Bios
15/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 15
Onde a0 e a1 determinam a cor do primeiro ponto, b0 e b1 do ponto a sua direita e assim por diante. Os
dois bits associados a cada ponto permitem selecionar uma dentre quatro cores, que podemos chamar de
cores "lgicas". A cor lgica 0 pode ser escolhida livremente dentre 16 cores; para as demais cores existem
dois conjuntos possveis:
Cor lgica Primeiro conjunto Segundo conjunto
1 cian (B + G) verde (G)2 magenta (B + R) vermelho (R)3 branco (R + G + B) amarelo (R + G)
A escolha do conjunto e da cor 0 fixa para toda a tela. Notar que este esquema probe algumas
combinaes de cores (por exemplo, no e possvel desenhar uma bandeira brasileira - verde, amarelo, azul
e branco simultneos).
Neste modo o ponto na linha l(0 a 199) coluna c(0 a 319) fica no byte de endereo:
Se lpar 0B8000H + 80 * l + c / 4
Se limpar 0BA000H + 80 * l + c / 4
No modo 200 linhas de 640 pontos ("alta resoluo") as coisas so mais simples: a cada ponto da tela
corresponde um bit que 1 se o ponto est aceso ou 0 se o ponto est apagado. O bit mais significativo de
cada byte corresponde ao ponto mais esquerda.
O endereo correspondente ao ponto na linha l(0 a 199) e coluna c(0 a 639) e:
Se lpar 0B8000H + 80 * l + c / 8
Se limpar 0BA000H + 80 * l + c / 8
O acesso memria de vdeo no modo alfanumrico 80 colunas s deve ser feito quando a imagem da tela
no estiver sendo refrescada, sob o risco de se gerar perturbaes na imagem. Isto pode ser feito lendo-se
a porta de entrada de endereo 03DAH; o bit 0 indica o retrao horizontal e o bit 3 o retrao vertical. O
retrao vertical ocorre 60 vezes por segundo e sua durao suficiente para o acesso a cerca de 40 words
da memria de vdeo; o retrao horizontal ocorre 1200 vezes por segundo, porm sua durao s permite o
acesso a um word da memria de vdeo.
Nos demais modos a memria de vdeo pode ser acessada a qualquer instante, sem afetar a imagem.
3. 2 ESTRUTURA DE DADOS
Nas operaes de leitura e escrita de caracteres, o BIOS refere- se a um ponteiro, denominado cursor, que
aponta para a linha e coluna onde ser realizada a operao.
Conforme j dito, o BIOS suporta vrias pginas independentes de vdeo na placa "Color/Graphics Adapter".
Para tanto, ele mantm uma tabela contendo a posio do cursor de cada pgina do vdeo.
Existe ainda o conceito da pgina ativa de vdeo, que a que est sendo exibida. Na apresentao da
pgina ativa, a posio do cursor indicada atravs de um bloco (ou linha) piscante.
O BIOS suporta tambm a escrita e leitura de caracteres em modo grfico. Para isso utiliza duas tabelas,
uma em EPROM (no endereo 0FFA6EH) e outra em RAM (apontada pelo vetor de interrupo 1FH). A
-
7/25/2019 Pc Assembler Bios
16/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 16
primeira tabela corresponde aos caracteres de cdigo 00H a 7FH, e a segunda aos de cdigo 80H a 0FFH.
Cada tabela contm 8 bytes por caractere, com os bits "ligados" indicando pontos "acesos" do caractere.
Por exemplo, a letra "A" (cdigo ASCII 41H) corresponde aos bytes 030H, 078H, 0CCH, 0CCH, 0FCH, 0CCH,
0CCH e 000H, contidos a partir do endereo 0FFC76 (0FFA6EH + 8*41H):
00110000
01111000
11001100
11001100
11111100
11001100
11001100
00000000
O BIOS inicia o vetor 1FH com 0:0, o que indica para o BIOS que no existe a segunda tabela.
3. 3
FUNES DISPONVEIS
O acesso s funes do vdeo feito atravs de INT 10H, com AH contendo o nmero da funo desejada.
As seguintes convenes so adotadas:
Pgina de vdeo: 0 "Monochrome" ou modo grfico
0 a 3 80x25, "Color/Graphics"
0 a 7 40x25, "Color/Graphics"
Linha: 0 a 23
Coluna: 0 a 39 40x25 ou grfico 320x200
0 a 79 demais modos
O registrador AX sempre alterado; os registradores BX, CX e DX s so alterados quando usados para
retornar valor; o registrador BP alterado por algumas funes; os demais registradores nunca so
alterados.
AH = 0 Seleciona modo
Reinicia a interface de vdeo, programando-a para o modo selecionado em AL:
0 = alfa, 40x25, desabilita "burst" de cor
1 = alfa, 40x25, habilita "burst" de cor
2 = alfa, 80x25, desabilita "burst" de cor
3 = alfa, 80x25, habilita "burst" de cor
4 = graf, 320x200, habilita "burst" de cor
5 = graf, 320x200, desabilita "burst" de cor
6 = graf, 640x200
O "burst" de cor o sinal de seleo das cores quando o monitor for ligado atravs da sada de
vdeo composto. Normalmente utilizam-se monitores ligados na sada RGB, que no soafetados por esta programao.
-
7/25/2019 Pc Assembler Bios
17/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 17
No caso de uso de placa "Monochrome" esta funo ir sempre programar o modo 80x25.
AH = 1 Seleciona formato do cursor
Esta funo recebe em CH a linha inicial do cursor e em CL a linha final. Para a placa"Color/Graphics" as linhas vo de 0 a 7; para a "Monochrome" de 0 a 12.
Por exemplo, para dar ao cursor o formato de um bloco especificamos linha inicial 0 e linha
final 7 ("Color/Graphics") ou 12 ("Monochrome").
AH = 2 Posiciona o cursor
Posiciona o cursor da pgina especificada em BH na linha e coluna especificadas em DH e DL.
AH = 3 L posio do cursor
Recebe em BH o nmero de uma pgina de vdeo e devolve em DH e DL a linha e coluna do
cursor desta pgina.
AH = 4 L posio do "light pen"
Retorna AH = 0 se no detectou "light pen". Caso contrrio retorna AH = 1, a linha e coluna em
que o light penfoi detectado (DH e DL) e as coordenadas aproximadas do ponto (BX = coluna
grfica, 0 a 319 ou 639; CH = linha grfica, 0 a 199). Se no detectou o light-pen, BX, CX e DX
tem seu contedo indefinido.
AH = 5 Seleciona pgina ativa
Seleciona a pgina passada em AL como nova pgina ativa. Esta funo s deve ser usada nos
modos alfanumricos da placa "Color/Graphics".
AH = 6 "Rola" pgina ativa para cima
Esta funo permite rolar para cima uma ou vrias linhas de uma regio da pgina ativa.
Recebe os seguintes parmetros:
AL = nmero de linhas a rolar
se for 0, toda a regio limpaCH = linha superior da regio a rolar
CL = coluna esquerda da regio a rolar
DH = linha inferior da regio a rolar
DL = coluna direita da regio a rolar
BH = atributo a ser usado nas novas linhas
Altera o contedo de BP; o cursor no movido.
Por exemplo, se chamarmos esta funo com AL = 2, CH = 0, CL = 0, DH = 24, DL = 9 e BH =
70H, as primeiras 10 colunas das 25 linhas sero roladas duas linhas para cima (i.e., as
primeiras 10 colunas da linha 2 iro para a linha 0, as da linha 3 para a linha 1, etc). As
-
7/25/2019 Pc Assembler Bios
18/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 18
primeiras 10 colunas das duas ltimas linhas sero preenchidas com o caractere branco (20H)
e o atributo 70H.
AH = 7 "Rola" pgina ativa para baixo
Esta funo e anloga a anterior, recebendo os mesmos parmetros, porem rola a regio para
baixo.
AH = 8 L caractere e atributo
Devolve em AL o caractere e em AH o atributo presentes na posio do cursor na pgina
especificada em BH. O atributo s fornecido nos modos alfanumricos. No modo grfico o
BIOS procura reconhecer na posio do cursor um dos caracteres contidos nas tabelas de
caracteres grficos. Para isso considera apagados os pontos na cor 0 e acesos os pontos nas
demais cores.
Altera BP, o cursor no movido.
AH = 9 Escreve caractere e atributo
Recebe em AL um caractere, e em AH um atributo a ser escrito na pgina selecionada por BH,
o nmero de vezes especificado em CX.
Nos modos grficos, AH a cor dos pontos "acesos" do caractere; os pontos "apagados" so
sempre escritos na cor 0. Nestes modos, CX deve ser tal que todos os caracteres fiquem na
mesma linha. Por exemplo, se o cursor est na coluna 10 e estamos no modo grfico 320x200,
CX pode ser no mximo 30. Se o bit mais significativo de AH for 1 feito um "ou exclusivo" nos
pontos acesos do caractere da cor j presente na tela com a cor especificada nos demais bitsde AH. Por exemplo, se o caractere for um caractere com todos os pontos acesos,
especificando AH = 83H iremos "complementar" todas as cores na posio do cursor:
cor 0cor 3, cor 1cor 2
cor 2cor 1, cor 3cor 0
Altera BP, o cursor no movido.
AH = 10 Escreve caractere
Recebe em AL um caractere a ser escrito na pgina selecionada por BH, o nmero de vezesespecificado em CX, sem alterar os atributos.
Nos modos grficos, esta funo idntica anterior, devendo ser fornecida em AH a cor dos
pontos acesos.
Altera BP, o cursor no movido.
AH = 11 Seleciona cor
Esta funo s tem sentido com a placa "Color Graphics".
Nos modos alfanumricos, esta funo permite escolher a cor da "borda" do vdeo e a
intensidade das cores de fundo dos caracteres. Para tanto, deve ser chamada com BH igual a 0
-
7/25/2019 Pc Assembler Bios
19/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 19
e BL contendo nos bits 0 a 3 a cor da borda e no bit 4 a intensidade das cores de fundo (1 =
intenso, 0 = normal).
Nos modos grficos, temos duas sub-funes:
BH = 0 seleciona cor 0
BL contem a cor fsica (0 a 15)
BH = 1 seleciona conjunto de cores
BL = 0 Verde / Vermelho / Amarelo
BL = 1 Cian / Magneta / Branco
AH = 12 Escreve ponto
Esta funo s est disponvel nos modos grficos e permite alterar a cor de um ponto da tela.
Recebe em DX o nmero da linha grfica (0 a 199), em CX o nmero da coluna grfica (0 a 319
ou 639) e em AL a nova cor do ponto. Se o bit mais significativo de AL for 1 a cor do ponto
alterada para o "ou exclusivo" entre a sua cor atual e a cor especificada nos demais bits de AL.
AH = 13 L cor de ponto
Esta funo devolve em AL a cor do ponto situado na linha grfica especificada em DX e na
coluna grfica especificada em CX.
AH = 14 Escreve em modo "TTY"
Esta rotina escreve o caractere passado em AL no vdeo, identificando os seguintes cdigos
especiais:
07H -"Bell"
Soa um tom no alto-falante por cerca de 0,5 segundo. No retorna do BIOS
enquanto no acabar o tom.
08H - "Backspace"
Recua o cursor uma posio, sem mudar de linha.
0AH -"Line Feed"
Desce o cursor uma linha, sem mudar de coluna. Se o cursor estiver na ultima linha
a tela rolada para cima.
0DH -"Carriage Return"
Move o cursor para a coluna 0 da mesma linha.
Os demais caracteres tero o seu cdigo escrito na tela (mesmo que seja um cdigo de
controle) e o cursor ser avanado para a coluna seguinte. Se o cursor j estiver na ltimacoluna de uma linha, ela passar para a coluna inicial da linha seguinte, rolando a linha se
necessrio.
-
7/25/2019 Pc Assembler Bios
20/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 20
Nos modos alfanumricos deve-se especificar em BH a pgina ativa, devido a erros de
programao em varias verses do BIOS da IBM. Nestes modos, as linhas em branco geradas
pela rolagem da tela so preenchidas com o atributo da primeira posio da ultima linha da
tela. Os caracteres so escritos sem alterao do atributo.
Nos modos grficos deve-se especificar em BL a cor de escrita dos pontos acesos do caractere
e colocar-se zero em BH. As linhas em branco geradas pela rolagem da tela so preenchidas
com a cor 0.
Esta funo altera BP.
AH = 15 Informa estado do vdeo
Retorna em AL o modo do vdeo, em AH o nmero de colunas (40 ou 80) e em BH a pgina
ativa. O modo retornado est codificado da mesma forma que na funo chamada por AH = 0,
exceto que se a placa for a "Monochrome" retorna AL = 7.
3. 4 EXEMPLO
O trecho abaixo limpa a tela e escreve uma mensagem na linha 12:
MENSAGEM DB 'Exemplo de acesso ao vdeo'
DB 0 ; marca o fim
ESCREVE:
MOV AH,15
INT 10H ; AH = # de colunasPUSH BX ; BH = pgina ativa
MOV DL,AH
DEC DL ; coluna final
MOV DH,24 ; linha final
SUB CX,CX ; linha e coluna inicial
MOV BH,07H ; atributo normal
MOV AX,0600H
INT 10H ; limpa tela
POP BX
MOV DH,12
SUB DL,DLMOV AH,2
INT 10H ; posiciona cursor
MOV SI,OFFSET MENSAGEM
CLD
MOSTRA:
LODSB
OR AL,AL
JZ FIM
MOV AH,14
INT 10H
JMP MOSTRAFIM:
-
7/25/2019 Pc Assembler Bios
21/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 21
4 ACESSO AO DISQUETE
4. 1 CARACTERSTICAS DO HARDWARE
A interface controladora de disquetes do PC-IBM utiliza um circuito uPD 765 da NEC (ou 8272 da Intel) paracontrolar at 4 unidades de disquete de 5 1/4 polegadas. A codificao dos dados sempre feita em
densidade dupla (MFM).
As unidades normalmente utilizadas trabalham com 40 trilhas de gravao e permitem operar tanto com
discos de face simples como de face dupla. Estas unidades fornecem interface indicao de disco
protegido e da deteco do furo de ndice, porm no informam a abertura da porta da unidade nem o tipo
de disco presente (face simples ou dupla).
O sistema operacional DOS formata as trilhas com 8 (verso 1) ou 9 (verso 2 e posteriores) setores de 512
bytes, o que fornece as seguintes capacidades:
Disco face Setores/trilhas Capacidade
Simples 8 160 Kbytes9 180 Kbytes
Dupla 8 320 Kbytes9 360 Kbytes
A transferncia de dados entre a interface e o processador feita atravs do canal 2 de DMA (" Direct
Memory Access" - acesso direto a memria). Uma caracterstica do circuito de DMA utilizado no PC o fato
dele controlar apenas os 16 bits menos significativos de endereo, ficando os 4 bits mais significativos fixos
durante uma transferncia. Infelizmente, esta restrio no contornada pelo BIOS, o que significa queuma transferncia no pode cruzar fronteiras fsicas de 64 Kbytes. Por exemplo, no possvel transferir
diretamente, via BIOS, 4 setores (4 x 512 bytes = 2 Kbytes) a partir do endereo de memria 2FE00H, pois,
na passagem do primeiro para o segundo setor, os 4 bits mais significativos mudam de 02H para 03H.
4. 2 ESTRUTURA DE DADOS
A principal estrutura de dados uma tabela de parmetros para o controlador, apontada pelo vetor 1EH. O
contedo desta tabela o seguinte:
Byte Bits Contedo0 7 a 4 "step rate time"
2 a 32 ms em passos de 2 ms
3 a 0 "head unload time"
0 a 480 ms em passos de 32 ms
1 7 a 1 "head load time"
4 a 512 ms em passos de 4 ms
0 1 = usa DMA
0 = no usa DMA2 7 a 0 tempo de espera apos um acesso antes de desligar o motor da unidade. Especificado
em unidades de 55 ms
-
7/25/2019 Pc Assembler Bios
22/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 22
3 7 a 0 bytes por setor (N):
0 = DTL 1 = 256 2 = 512 3 = 1024
4 7 a 0 setores por trilha
5 7 a 0 tamanho do "gap" de escrita
6 7 a 0 nmero de bytes por setor qdo N = 0deve ser 0FFH quando N no for 0
7 7 a 0 tamanho do "gap" de formatao
8 7 a 0 byte de preenchimento na formatao
9 7 a 0 "head settle time", em ms
10 7 a 0 tempo de partida do motor, em oitavos de segundo
Embora esta tabela no seja normalmente manipulada pelo programador Assembler, cabe notar que o
sistema DOS altera o vetor de forma a utilizar valores diferentes do padro iniciado pelo BIOS:
byte BIOS DOS 1.1 DOS 2.00 0CFH 0DFH 0DFH1 002H 002H 002H2 025H 025H 025H3 002H 002H 002H4 008H 008H 009H5 02AH 02AH 02AH6 0FFH 0FFH 0FFH7 050H 050H 050H8 0F6H 0F6H 0F6H9 019H 00BH 00FH
10 004H 002H 002H
4. 3 FUNES DISPONVEIS
O acesso s funes de disquete feito atravs de INT 13H, com AH contendo o nmero da funo
desejada.
Nestas funes as seguintes convenes so adotadas:
Unidade a acessar: 0 (A:) a 3 (D:)
Face a acessar: 0 ou 1Trilha a acessar: 0 a 39
Setor a acessar: 1 a 9
Em todas as funes, o flag CY indica no retorno se ocorreu um erro (CY = 1) ou se a operao foi bem
sucedida (CY = 0) e AH fornece o resultado da operao:
00H - operao bem sucedida
01H - funo invalida
02H - "addres mark" no encontrado
03H - tentativa de escrita em disco protegido
04H - setor no encontrado
-
7/25/2019 Pc Assembler Bios
23/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 23
08H - falha no controlador de DMA
09H - buffer ultrapassou fronteira fsica de 64K
O BIOS verifica se o endereo inicial fornecido est no mesmo segmento fsico de 64K que o
endereo final (que o endereo inicial mais o nmero de setores multiplicado por 512
bytes).
10H - setor com erro
20H - falha no controlador de disco
40H - trilha no encontrada
80H - unidade sem disco ("time-out")
Nas funes de leitura e verificao o BIOS no espera o tempo de partida do motor. Normalmente isto no
ocasiona erro, o que permite um ganho substancial de tempo no acesso. Deve-se, entretanto, prever o caso
em que a primeira leitura no bem sucedida. Isto feito realizando-se pelo menos trs tentativas de
leitura antes de considerar o erro como definitivo (as tentativas adicionais no necessitam ser feitas em
caso de "time-out").
Nas funes de leitura, escrita e verificao, AL retorna o nmero de setores efetivamente acessados,
exceto se ocorreu erro de unidade sem disco.
Em todas as funes apenas o registrador AX e osflagsso alterados.
AH = 0 Reinicia a interface
Esta funo reinicia a interface de disquete, ligando a pendncia de recalibrao
(movimentao da cabea de leitura/escrita para a trilha 0) em todas as unidades. Deve ser
chamada sempre que ocorrer um erro em acesso ao disco. Conforme ser detalhado noprximo captulo, conveniente chamar esta funo com DL = 0 para garantir que a interface
de disco rgido no ser iniciada tambm.
AH = 1 Informa resultado da ultima operao
Retorna em AL o resultado da ltima operao realizada.
AH = 2 L setores
AL = nmero de setores a serem lidos, devem estar na mesma face e na mesma trilha
ES:BX = endereo da rea onde sero colocados os dados
CH = trilha
CL = setor inicial
DH = face
DL = unidade
AH = 3 Escreve setores
AL = nmero de setores a serem escritos, devem estar na mesma face e na mesma trilha
-
7/25/2019 Pc Assembler Bios
24/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 24
ES:BX = endereo da rea de onde sero obtidos os dados
CH = trilha
CL = setor inicial
DH = face
DL = unidade
AH = 4 Verifica setores
Esta funo efetua a leitura dos dados sem transferi-los da interface para a memria. Desta
forma, verifica-se se o setor pode ser acessado sem erro.
AL = nmero de setores a serem verificados, devem estar na mesma face e na mesma
trilha
ES:BX = embora nenhuma transferncia seja realizada, o BIOS testa (erroneamente) a
presena de fronteira de 64K na regio de transferncia. Por este motivo deve-se
colocar um valor vlido para leitura nestes registradores
CH = trilha
CL = setor inicial
DH = face
DL = unidade
AH = 5 Formata trilha
AL = nmero de setores por trilha
ES:BX = endereo de uma rea que contem os identificadores para os setores da trilha. Para
cada setor esta rea deve conter 4 bytes: o nmero da trilha (C), a face (H), o nmero
do setor (R) e a indicao do nmero de bytes por setor (N). O BIOS testa a presena
de fronteira de DMA considerando 512 bytes por setor, o que obriga cuidado na
seleo deste endereo.
CH = trilha
CL = setor inicial
DH = face
DL = unidade
-
7/25/2019 Pc Assembler Bios
25/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 25
4. 4 EXEMPLO
O trecho abaixo copia o contedo do disco na unidade A: para o disco na unidade B:, assumindo que o
disco est formatado em 9 setores/trilha, dupla face e que o buffer utilizado no contem fronteira de 64K:
COPIA:
MOV CH,0 ; trilha
COPTRK:
MOV DH,0 ; face
COPHD:
MOV SI,3 ; # de tentativas
LE:
MOV DL,0
MOV CL,1
MOV BX,OFFSET BUFFER
MOV AH,2
MOV AL,9INT 13H ; tenta ler a trilha da unidade A:
JNC LEU
CMP AH,80H ; no conseguiu:
JE ERRO ; desiste se "time-out"
MOV AH,0
INT 13H ; reinicia interface
DEC SI
JNZ LE ; repete no mximo 3 vezes
JMP ERRO
LEU:
MOV DL,1MOV AH,3
MOV AL,9
INT 13H ; escreve na unidade B:
JC ERRO
INC DH
CMP DH,2 ; repete para as 2 faces
JB COPHD ; da trilha atual
INC CH
CMP CH,40
JB COPTRK ; repete para as 40 trilhas
BUFFER DB 9 * 512 DUP (?)
-
7/25/2019 Pc Assembler Bios
26/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 26
5
ACESSO AO DISCO RGIDO
5. 1 CARACTERSTICAS DO HARDWARE
A interface controladora de discos rgidos do PC-IBM controla at 2 unidades de disco rgido (winchester).
As unidades normalmente utilizadas so de 5 1/4 polegadas, com 4 faces e 306 trilhas formatadas em 17
setores de 512 bytes, o que d uma capacidade total de 4 x 306 x 17 x 512 bytes, ou seja,
aproximadamente 10 Mbytes.
A transferncia de dados entre a interface e o processador feita atravs do canal 3 de DMA (" Direct
Memory Access" - acesso direto memria). Uma caracterstica do circuito de DMA utilizado no PC o fato
dele controlar apenas os 16 bits menos significativos de endereo, ficando os 4 bits mais significativos fixos
durante uma transferncia. Infelizmente, esta restrio no contornada pelo BIOS, o que significa que
uma transferncia no pode cruzar fronteiras fsicas de 64 Kbytes. Por exemplo, no possvel transferir
diretamente, via BIOS, 4 setores (4 x 512 bytes = 2 Kbytes) a partir do endereo de memria 2FE00H, pois
na passagem do primeiro para o segundo setor os 4 bits mais significativos mudam de 02H para 03H.
Os setores so gravados em disco com o uso de ECC ("Error Checking and Correction") - deteco e correo
de erros. Esta tcnica permite a deteco de grande porcentagem dos erros de leitura/escrita e correo da
maioria deles.
As unidades de disco rgido so normalmente testadas rigorosamente na fabricao, sendo levantadas
quais as trilhas potencialmente defeituosas. A partir desta informao feita a formatao fsica da
unidade, com estas trilhas suspeitas sendo formatadas como trilhas "ruins" e as demais como "boas". A
"formatao" realizada pelo sistema operacional consiste apenas na verificao das trilhas.
5. 2 ESTRUTURA DE DADOS
As rotinas de BIOS que efetuam o tratamento da interface de disco rgido esto na prpria interface.
Durante a iniciao, o BIOS da placa de sistema reconhece a presena da interface e ativa a sua rotina de
iniciao (como ser detalhado no item9.5). Esta rotina de iniciao intercepta os vetores de interrupo
13H (acesso a disco) e 19H (leitura do carregador do sistema operacional). O vetor de interrupo 40H
utilizado para salvar o endereo originalmente contido em INT 13H e passar adiante os comandos
endereados s unidades de disquete.
O BIOS utiliza tambm uma tabela de parmetros para o controlador, apontada pelo vetor 41H. O
contedo desta tabela o seguinte:
Bytes Contedo
0 e 1 Nmero de trilhas
2 Nmero de faces
3 e 4 Trilha inicial para reduo da corrente de gravao
5 e 6 Trilha inicial para pr-compensao na gravao
7 Tamanho do ECC8 Byte de controle
bit 7 - se 1, desabilita repetio de acesso em caso de erro
-
7/25/2019 Pc Assembler Bios
27/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 27
bit 6 - se 1, desabilita repetio de acesso em caso de erro de ECC
9 Tempo mximo de espera em operaes normais
10 Tempo mximo de espera em formatao
11 Tempo mximo em iniciao
12 a 15 Reservados
5. 3 FUNES DISPONVEIS
O acesso s funes de disco rgido feito atravs de INT 13H, com AH contendo o nmero da funo
desejada e DL o nmero da unidade com o bit mais significativo ligado. Caso o bit mais significativo de DL
seja "0" efetuado um acesso em unidade de disquete.
Nestas funes as seguintes convenes so adotadas:
unidade a acessar: 80H ou 81H
face a acessar: 0 a 3
trilha a acessar: 0 a 305
setor a acessar: 1 a 17
O nmero da trilha e o nmero do setor so codificados conjuntamente em um word:
trilha: t9 t8 t7 t6 t5 t4 t3 t2 t1 t0
setor: s7 s6 s5 s4 s3 s2 s1 s0
codificao: t7 t6 t5 t4 t3 t2 t1 t0 (+ significativo)
t9 t8 s5 s4 s3 s2 s1 s0 (- significativo)
Em todas as funes o flagCY indica no retorno se ocorreu um erro (CY = 1) ou se a operao foi bem
sucedida (CY = 0), e AH fornece o resultado da operao:
00H - operao bem sucedida
01H - funo invalida
02H - "address mark" no encontrado
04H - setor no encontrado
05H - falha em iniciao
07H - falha na programao dos parmetros
09H - buffer ultrapassou fronteira fsica de 64K
O BIOS verifica se o endereo inicial fornecido est no mesmo segmento fsico de 64K que o
endereo final (que o endereo inicial mais o nmero de setores multiplicado por 512
bytes).
0BH - tentativa de ler ou escrever em trilha formatada como ruim
10H - setor com erro
11H - setor com erro, corrigido atravs do ECC
20H - falha no controlador de disco40H - trilha no encontrada
80H - ultrapassou tempo mximo de espera
-
7/25/2019 Pc Assembler Bios
28/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 28
B8H - erro indefinido
FFH - falha em leitura de status do controlador
Nas funes de leitura, escrita e verificao AL retorna o nmero de setores efetivamente acessados. Em
todas as funes, exceto obteno dos parmetros, apenas o registrador AX e osflags so alterados.
AH = 0 Reinicia as interfaces de disco
Esta funo reinicia as interfaces de disquete e de disco rgido. Para reiniciar somente a
interface de disco rgido usar a funo AH = 13.
AH = 1 Informa resultado da ultima operao
Retorna em AL o resultado da ultima operao realizada.
AH = 2 L setores
AL = nmero de setores a serem lidos, pode estar implcita mudana de face e trilha.
ES:BX = endereo da rea onde sero colocados os dados
CX = trilha e setor iniciais
DH = face inicial
DL = unidade
AH = 3 Escreve setores
AL = nmero de setores a serem escritos, pode estar implcita mudana de face e trilha.
ES:BX = endereo da rea de onde sero obtidos os dados
CX = trilha e setor iniciais
DH = face inicial
DL = unidade
AH = 4 Verifica setores
Esta funo efetua a leitura dos dados sem transferi-los da interface para a memria. Desta
forma, verifica-se se o setor pode ser acessado sem erro.
AL = nmero de setores a serem verificados, pode estar implcita mudana de face e
trilha.
ES:BX = no utilizados nesta funo, podem conter qualquer valor.
CX = trilha e setor iniciais
DH = face inicial
DL = unidade
-
7/25/2019 Pc Assembler Bios
29/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 29
AH = 5 Formata trilha como "boa"
AL = fator de entrelaamento ("interleave"), normalmente 6
ES:BX = no utilizados nesta funo, podem conter qualquer valor.
CX = trilha a formatar, setor deve ser 1
DH = face
DL = unidade
AH = 6 Formata trilha como "ruim"
AL = fator de entrelaamento ("interleave"), normalmente 6
ES:BX = no utilizados nesta funo, podem conter qualquer valor.
CX = trilha a formatar, setor deve ser 1
DH = face
DL = unidade
AH = 7 Formata unidade a partir de uma trilha
Esta funo formata como "boa" uma trilha e todas as que a seguem, at o fim da unidade.
AL = fator de entrelaamento ("interleave"), normalmente 6
ES:BX = no utilizados nesta funo, podem conter qualquer valor.
CX = trilha inicial a formatar, setor deve ser 1
DH = face inicial a formatar
DL = unidade
AH = 8 Informa parmetros da unidade
Retorna os parmetros da unidade especificada em DL:
DL = nmero de unidades de disco rgido
DH = valor mximo para face
CX = valores mximos para trilha e setor
AH = 9 Inicia parmetros das unidades
Esta funo passa para a interface os parmetros das unidades, apontados pelo vetor de INT
41H.
AH = 10 Leitura "longa"
-
7/25/2019 Pc Assembler Bios
30/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 30
Esta funo semelhante chamada por AH = 2, recebendo os mesmos parmetros, porm
transfere 516 bytes por setor, sendo os 512 primeiros os dados e os 4 ltimos referentes ao
ECC.
AH = 11 Escrita "longa"
Esta funo semelhante chamada por AH = 3, recebendo os mesmos parmetros, pormtransfere 516 bytes por setor, sendo os 512 primeiros os dados e os 4 ltimos referentes ao
ECC.
AH = 12 Posiciona cabea em uma trilha
Posiciona a cabea de leitura/escrita da unidade especificada em DL na trilha especificada em
CX (setor deve ser 1).
AH = 13 Reinicia interface de disco rgido
Esta funo serve como alternativa para a funo chamada por AH = 0, reiniciando apenas ainterface de disco rgido sem acessar a interface de disquetes.
AH = 14 L "buffer" da interface
A interface de disco rgido dispe de uma memria local (um "buffer") com capacidade para
um setor. Esta funo l para este "buffer" o setor especificado atravs dos seguintes
parmetros:
ES:BX = no utilizados nesta funo, podem conter qualquer valor.
CX = trilha e setor
DH = face
DL = unidade
AH = 15 Escreve "buffer" da interface
Esta funo grava o "buffer" da interface no setor especificado atravs dos seguintes
parmetros:
ES:BX = no utilizados nesta funo, podem conter qualquer valor.
CX = trilha e setor
DH = face
DL = unidade
AH = 16 Testa se unidade pronta
Informa se a unidade em DL est pronta (CY = 0 e AH = 0) ou se h um posicionamento da
cabea em andamento (CY =1 e AH = 40H).
AH = 17 Recalibra unidade
-
7/25/2019 Pc Assembler Bios
31/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 31
Posiciona a cabea de leitura/escrita na trilha 0.
5. 4 EXEMPLO
O trecho abaixo l os 3 ltimos setores da face 2 da trilha 110H, os 17 setores da face 3 da mesma trilha e
os 4 primeiros setores da face 0 da trilha 111H da primeira unidade de disco rgido. Assume que o buffer
no contem fronteira de 64K.
MOV DH,2 ; face inicial
MOV DL,80H ; unidade
MOV CX,110H ; trilha inicial
ROR CH,1 ; move 2 bits + significativos
ROR CH,1 ; da trilha
OR CH,0FH ; setor inicial
XCHG CH,CL ; coloca nos regs corretos
MOV BX,OFFSET BUFFER
MOV AH,2
MOV AL,24 ; total de 24 setores
INT 13H ; le os setores
JC ERRO
-
7/25/2019 Pc Assembler Bios
32/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 32
6
ACESSO IMPRESSORA
6. 1 CARACTERSTICAS DO HARDWARE
A placa de interface com impressora utilizada no PC-IBM uma placa de interface paralela, destinada aconexo de impressoras com interface padro Centronics.
6. 2 ESTRUTURA DE DADOS
O BIOS prev at 3 interfaces, identificadas por um nmero de 0 a 2. Utiliza uma tabela de 3 words,
localizada no endereo 00408H, para obter o endereo da interface, considerando o endereo 0000H como
indicao da inexistncia da interface.
As verses mais recentes do BIOS utilizam uma segunda tabela, no endereo 00478H para definir o tempo
mximo de espera por interface pronta.
6. 3 FUNES DISPONVEIS
O acesso s funes de impressora feito atravs de INT 17H, com AH contendo o nmero da funo
desejada, e DX o nmero da interface (0 a 2); o contedo de AH sempre alterado.
AH = 0 imprime o caractere passado em AL
Se a interface no ficar pronta dentro de um tempo mximo, retorna com AH = 1. Caso
contrrio, retorna em AH o estado da interface (ver abaixo)
AH = 1 inicia a interface de impressora
Retorna em AH o estado da interface (ver abaixo).
AH = 2 informa estado da interface
Retorna em AH o estado com a seguinte codificao:
bit ativo se
7 interface pronta
6 recebeu sinal "acknowledge" da impressora5 recebeu indicao de fim de papel
4 interface selecionada
3 recebeu sinal de erro
os bits 2, 1 e 0 no so usados.
-
7/25/2019 Pc Assembler Bios
33/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 33
6. 4 EXEMPLO
A rotina abaixo envia para a impressora conectada interface 1 a cadeia de caracteres apontada por SI e
finalizada por um caractere '#':
IMPRIME PROC NEAR
CLD ;para LODSB incrementar SI
MOV DX,1 ;nmero da interface
IMPCH:
LODSB ;pega prximo caractere
CMP AL,'#'
JE FIM ;retorna se chegou ao fim
SUB AH,AH
INT 17H ;imprime o caractere
JMP IMPCH ;repete
FIM:
RETIMPRIME ENDP
-
7/25/2019 Pc Assembler Bios
34/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 34
7
ACESSO S INTERFACES SERIAIS
7. 1 CARACTERSTICAS DO HARDWARE
As interfaces seriais tratadas pelo BIOS so baseadas na UART ("Universal AssyncronousReceiver/Transmiter" - Receptor/Transmissor Assncrono Universal) 8250, permitindo a comunicao serial
assncrona com as seguintes caractersticas:
5, 6, 7 ou 8 bits de dados (o BIOS no suporta o uso de 5 ou 6 bits de dados)
Paridade par, impar ou ausente
1, 1 1/2 ou 2 "stop bits" (o BIOS no suporta 1 1/2 "stop bit")
Velocidade de comunicao selecionada por software, sendo a velocidade de recepo igual de
transmisso. O circuito utilizado pela IBM permite gerar as taxas de 50, 75, 110, 150, 300, 600,1200, 1800, 2400, 3600, 4800, 7200 e 9600 bps com excelente preciso (o BIOS no suporta as
taxas de 50, 75, 1800, 3600 e 7200).
A 8250 dispe ainda de um sistema completo de interrupes, suportado pelo hardware, porem no
utilizado pelo BIOS.
7. 2 ESTRUTURA DE DADOS
O BIOS prev at 4 interfaces, identificadas por um nmero de 0 a 3. Utiliza uma tabela de 4 words,
localizada no endereo 00400H, para obter o endereo da interface, considerando o endereo 0000H como
indicao da inexistncia da interface.
As verses mais recentes do BIOS utilizam uma segunda tabela, no endereo 0047CH, para definir o tempo
mximo de espera por interface pronta.
7. 3 FUNES DISPONVEIS
O acesso s funes de tratamento das interfaces seriais feito atravs de INT 14H, com AH contendo o
nmero da funo desejada, e DX o nmero da interface (0 a 3); o contedo de AH e sempre alterado.
AH = 0 Inicia a interface serial
Recebe em AL os parmetros desejados:
bits 7,6,5 - velocidade bits 4,3 - paridade
0 0 0 110 0 0 sem
0 0 1 150 0 1 impar
0 1 0 300 1 0 sem
0 1 1 600 1 1 par
1 0 0 1200
1 0 1 2400
1 1 0 4800
-
7/25/2019 Pc Assembler Bios
35/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 35
1 1 1 9600
bit 2 - "stop bits" bits 1,0 - tamanho
0 1 1 0 7 bits
1 2 1 1 8 bits
Retorna em AX o estado da interface (ver abaixo)
AH = 1 Transmite o caractere passado em AL
Se a interface no ficar pronta dentro de um tempo mximo, retorna com o bit mais
significativo de AH = 1. Os demais bits de AH correspondem ao estado da interface (ver
abaixo). O contedo de AL preservado.
AH = 2 Recebe um caractere pela interface
Se a interface no indicar a recepo de um caractere dentro de um tempo mximo, retorna
com o bit mais significativo de AH = 1. Os bits 4, 3, 2 e 1 de AH correspondem ao estado dainterface (ver abaixo). O caractere recebido devolvido em AL.
AH =3 Informa estado da interface
Retorna em AH o estado da comunicao:
Bit Ativo se
7 no conseguiu transmitir ou receber no tempo mximo
6 nenhum caractere em transmisso
5 pronto para aceitar caractere a transmitir4 recebeu sinal de BREAK
3 recebeu caractere com erro de formato
2 recebeu caractere com erro de paridade
1 perdeu caractere na recepo, por ter chegado outro antes dele ter sido lido
0 recebeu dado
e em AL o estado dos sinais de modem:
Bit Ativo se
7 sinal CD (deteco de portadora) presente
6 sinal RI ("ring indicator" - deteco de chamada) presente
5 sinal DSR ("data set ready" - modem pronto) presente
4 sinal CTS ("clear to send" - modem pronto para transmitir) presente
3 houve variao no sinal CD desde a ltima leitura de status
2 o sinal RI ficou ausente desde a ltima leitura de status
1 houve variao no sinal DSR desde a ltima leitura de status
0 houve variao no sinal CTS desde a ltima leitura de status
-
7/25/2019 Pc Assembler Bios
36/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 36
7. 4 EXEMPLO
A rotina abaixo envia para a interface serial nmero 2 (COM3) a cadeia de caracteres apontada por SI e
finalizada por um caractere '#':
ENVIA PROC NEAR
CLD ;para LODSB incrementar SI
MOV DX,2 ;nmero da interface
TXCH:
LODSB ;pega prximo caractere
CMP AL,'#'
JE FIM ;retorna se chegou ao fim
MOV AH,1
INT 14H ;envia o caractere
JMP TXCH ;repete
FIM: RET
ENVIA ENDP
-
7/25/2019 Pc Assembler Bios
37/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 37
8
ACESSO AO R ELGIO
8. 1 CARACTERSTICAS DO HARDWARE
O hardware do PC para medio de tempo bastante rudimentar, consistindo em um temporizador("timer") que interrompe periodicamente o processador. O BIOS programa este timer para interromper
1193180/65536 vezes por segundo (aproximadamente 18.2 vezes) o que corresponde a um intervalo de 55
ms entre interrupes. Esta interrupo utilizada para incrementar um contador, que zerado quando a
contagem atinge o correspondente a 24 horas.
Entrando em maiores detalhes, o PC dispe de um circuito temporizador/ contador 8253 da Intel (ou
equivalente), cujo canal 1 recebe uma frequncia de 1193180 Hz e tem sua sada conectada ao sistema de
interrupes (gerando a interrupo 8). A programao da taxa de interrupo e feita da seguinte forma:
1. Seleciona-se o canal 1, escrevendo-se o valor 36H no port de controle da 8253 (endereo 043H).
2. Escreve-se o byte menos significativo do contador no canal 1 da 8253 (endereo 041H)
3. Escreve-se o byte mais significativo do contador no canal 1 da 8253 (endereo 041H)
A taxa de interrupo ser de 1193180/contador interrupes por segundo; uma contagem de zero
interpretada como 65536 e o valor usado normalmente pelo BIOS.
8. 2 ESTRUTURA DE DADOS
O tratamento do relgio do PC-IBM envolve duas interrupes, uma de hardware e outra de software:
1. O hardware gera um INT 8, que normalmente tratado pelo BIOS;
2. No decorrer do tratamento do INT 8, o BIOS executa INT 1CH, de forma a fornecer uma base de
tempo para programas aplicativos. Na sua iniciao, o BIOS aponta esta interrupo para uma
instruo IRET.
O programa que reprogramar o timer deve tomar os seguintes cuidados:
1. Assumir o tratamento de INT 8;
2.
Continuar chamando o tratamento original de INT 8 na taxa anterior, de forma a no interferir nastemporizaes do BIOS;
3. Restaurar o vetor de INT 8 ao final de sua execuo.
O programa que assumir o tratamento de INT 1CH deve continuar chamando o tratamento original e
restaurar o vetor ao final de sua execuo.
No captulo 10, quando tratamos do acesso ao alto-falante, e apresentado um exemplo prtico de
reprogramao do timer.
-
7/25/2019 Pc Assembler Bios
38/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 38
8. 3 FUNES DISPONVEIS
O acesso s funes de relgio feito atravs de INT 1AH, com AH contendo o nmero da funo desejada:
AH = 0 L o contador de tempo
Retorna em CX o word mais significativo e em DX o word menos significativo do contador deinterrupes de relgio ("tics"). Retorna com AL diferente de zero se o contador foi zerado
("mudou de dia") desde a ltima leitura.
AH = 1 Inicia o contador de tempo
Recebe em CX o word mais significativo e em DX o word menos significativo do novo valor
("hora atual") do contador de interrupes.
Somente so alterados os registradores utilizados para retornar resultados.
8. 4
EXEMPLO
A rotina apresentada a seguir devolve a hora atual no formato hora (CH), minuto (CL) e segundo (AL),
assumindo que o contador de tempo foi acertado com a hora correta (o que feito, por exemplo, pelo
comando TIME do DOS):
TICS_HORA EQU 65520 ; 18.2 * 60 * 60
TICS_MIN EQU 1092 ; 18.2 * 60
TICS_SEG EQU 18
LE_HORA PROC NEAR
MOV AH,0
INT 1AH
MOV AX,DX
MOV DX,CX ; DXAX = tics
MOV BX,TICS_HORA
DIV BX
MOV CH,AL ; CH = hora
MOV AX,DX
SUB DX,DX ; DXAX = tics restantes
MOV BX,TICS_MINDIV BX
MOV CL,AL ; CL = minutos
MOV AX,DX ; AX = tics restantes
MOV BL,TICS_SEG
DIV BL ; AL = segundos
RET ; AH = tics restantes
LE_HORA ENDP
Lembrar que o 8088 s tm dois tipos de diviso: diviso de DXAX por um word (valor de 1 a 65535) com
quociente em AX e resto em DX, e diviso de AX por um byte (valor de 1 a 255) com quociente em AL eresto em AH.
-
7/25/2019 Pc Assembler Bios
39/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 39
9
OUTRAS FUNES DO BIOS
9. 1 INFORMAO DA MEMRIA DISPONVEL
Esta funo permite obter o tamanho da memria RAM do microcomputador. chamada atravs de INT12H, no tem parmetros, e devolve em AX o tamanho da memria em Kbytes.
9. 2 INFORMAO DOS DISPOSITIVOS DISPONVEIS
Esta funo permite obter a configurao de dispositivos e interfaces do microcomputador. chamada
atravs de INT 11H, no tem parmetros, e devolve o resultado em AX, conforme descrito abaixo:
Bits Significado
15 e 14 Nmero de interfaces paralelas de impressora (0 a 3)
13 Indefinido12 "1" se tem interface para "joystick"
11 a 9 Nmero de interfaces seriais (0 a 4)
8 No usado
7 e 6 Nmero de unidades de disquete menos um, desde que o bit 0 esteja em "1"
5 e 4 Modo inicial do vdeo:
00 - invalido
01 - 40x25, placa "Color/Graphics"
10 - 80x25, placa "Color/Graphics"11 - 80x25, placa "Monochrome"
3 e 2 Indefinidos
1 "1" se processador numrico 8087 configurado
0 "1" se interface de disquete configurada
No modelo original do PC-IBM as informaes contidas nos bits 7 a 0 eram provenientes de chaves de
configurao ("dip-switchs")
9. 3 IMPRESSO DE TELA
Esta rotina normalmente chamada pelo tratamento da interrupo de teclado, atravs de INT 5, e realiza
a impresso do contedo da tela na impressora conectada primeira interface paralela.
A leitura da tela feita atravs de INT 10H e a impresso atravs de INT 17H. Existem alguns efeitos
colaterais na rotina original que devem ser considerados:
1. Sempre pula de linha antes de comear a imprimir a tela e ao final de cada tela (ou seja, duas
impresses consecutivas no saem contguas);
2. Nos modos grficos, imprime um branco no lugar dos caracteres no identificados; exceto neste
caso, os cdigos da tela so sempre jogados diretamente para a impressora, o que pode causar o
envio de cdigos de controle e cdigos no ASCII (maiores de 07FH);
-
7/25/2019 Pc Assembler Bios
40/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 40
3. Nos modos grficos, o registrador BP alterado; se a funo foi chamada pela interrupo de
teclado, isto pode causar um mau funcionamento do programa aplicativo que est sendo
executado;
4. Quando esta funo chamada pela interrupo de teclado, se o vdeo estava apagado (como
ocorre durante uma operao de "rolagem") ele permanece apagado durante toda a impresso.
9. 4 LEITURA DO CARREGADOR DO SISTEMA OPERACIONAL
Esta funo l o setor 1 da face 0 da trilha 0 (que normalmente contem o carregador do sistema
operacional) para o endereo 07C00H e executa um desvio para 0:7C00H.
Na codificao de um carregador, deve-se considerar que DS, ES e CS contero 0, e que a pilha (SS:SP)
poder estar em qualquer regio da memria.
Esta funo pode ser chamada atravs de INT 19H, sem parmetros. Deve-se tomar o cuidado de posicionar
a pilha fora da regio de leitura.
Se existir uma interface de disco fixo, o vetor de INT 19H aponta para uma rotina que efetua a leitura da
primeira unidade winchester (setor 1 da face 0 da trilha 0), caso no consiga ler do disquete. Para que um
carregador escrito em winchester seja considerado vlido ele deve conter 0AAH e 055H nos seus dois
ltimos bytes.
9. 5 TESTES INICIAIS
Toda vez que o PC ligado ou reiniciado (por exemplo, atravs de CTRL ALT DEL) executada a rotina de
iniciao e teste do BIOS, que segue os seguintes passos:
Testa o processador 8088
Testa a memria que contem o BIOS
Testa o "timer" 8253
Testa o controlador de DMA 8237
Testa a memria RAM
Inicia o controlador de interrupes 8259
Inicia o vetor de interrupes
L as chaves de configurao
Testa a interface de vdeo
Testa o teclado
Determina a presena de gabinete de expanso
Procura "expanses" do BIOS em placas de expanso
Inicia a interface de disquete
Verifica a presena de interfaces seriais e paralelas
Desvia para a leitura do carregador do sistema
-
7/25/2019 Pc Assembler Bios
41/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 41
Para evitar que o teste de memria RAM seja realizado a cada reiniciao, o BIOS s o executa quando a
varivel no endereo 0472H no contm 1234H. Este valor colocado pelo BIOS quando detecta a
combinao CTRL ALT DEL.
Para facilitar a integrao de placas de expanso, o BIOS permite a presena de "expanses" do BIOS. Estas
expanses so procuradas entre os endereos 0C8000H e 0F4000H, de 2 em 2 Kbytes, e se caracterizam
por terem a seguinte estrutura:
Byte 0: contm 55H
Byte 1: contm AAH
Byte 2: contm o tamanho do mdulo, em blocos de 512 bytes
Byte 3: rotina de iniciao do mdulo. O BIOS executa uma chamada intersegmento ("call far")
para esta posio. Esta rotina pode interceptar vetores de interrupo, iniciar a placa de
expanso, etc. Deve considerar o contedo dos registradores como indeterminado e no
alter-lo.
O BIOS efetua a soma de todos os bytes da expanso, mdulo 256, considerando a expanso vlida
somente se esta soma for 0.
Para ativar a iniciao do BIOS deve-se executar um desvio longo ("jump far") para o endereo 0FFFFH:0.
-
7/25/2019 Pc Assembler Bios
42/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 42
10
UMA ROTINA PARA ACESSO AO ALTO-FALANTE
10.1 INTRODUO
Um dos pontos mais omissos do BIOS o tratamento do alto-falante. A nica funo disponvel a geraode um tom de aproximadamente 1KHz, por cerca de 0,5 segundo, obtido pela escrita do cdigo 07H
atravs de INT 10H com AH = 14. Ainda por cima, o controle do processador permanece com o BIOS
durante toda a durao do tom, travando momentaneamente o processamento.
Neste captulo ser apresentada e discutida uma rotina com as seguintes caractersticas:
Permite a gerao de tons de freqncia a partir de 37Hz e durao de 10ms a quase 4 minutos.
O controle do alto-falante feito atravs da interrupo de tempo real, permitindo a execuo de
outros processamentos em paralelo.
Permite o enfileiramento de tons para execuo, dispensando o aguardo do trmino do tom atual.
10.2 CARACTERSTICAS DO HARDWARE
O corao do tratamento do alto-falante o circuito temporizador/contador 8253 da Intel (ou equivalente),
que recebe uma freqncia de 1193180 Hz e tem seu canal 1 conectado ao sistema de interrupes
(gerando a interrupo 8), e o seu canal 2 conectado ao circuito do alto-falante.
O controle do alto-falante envolve ainda dois bits do port B da 8255: o bit 0 habilita o canal 2 do timer e o
bit 1 permite a passagem para o alto-falante do tom gerado pelo timer (ver figura abaixo).
Normalmente, geram-se apenas tons puros a partir do timer; neste caso segue-se o seguinte esquema:
1. Seleciona-se o canal 2, escrevendo-se o valor B6H no port de controle da 8253 (endereo 043H).
2. Escreve-se o byte menos significativo do contador no canal 2 da 8253 (endereo 042H).
3. Escreve-se o byte mais significativo do contador no canal 2 da 8253 (endereo 042H).
4. Permite-se a passagem do tom ao alto-falante, programando-se para 1 os bits 0 e 1 do port B da
8255 (endereo 061H).
A frequncia do tom ser 2386360/contador Hz.
-
7/25/2019 Pc Assembler Bios
43/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 43
10.3 DESCRIO DA ROTINA
A rotina composta de quatro partes:
1. Iniciao
Nesta parte, assumido o tratamento da interrupo de tempo real e a sua taxa aumentada 16vezes. Desta forma, obtm-se uma base de tempo de 3,4 ms, suficientemente precisa para a
aplicao. Os ponteiros da fila so tambm iniciados.
2. Colocao de tons na fila
Os valores fornecidos pelo usurio, em Hz e centsimos de segundos, so convertidos para
contagens do timer. Aguarda-se ento a existncia de um lugar na fila e colocam-se nela os valores
obtidos.
3. Tratamento da interrupo de tempo real
A cada interrupo verifica-se se existe nota em execuo e, em caso afirmativo, se chegou-se ao
fim de sua durao. Se o alto-falante est (ou ficou) livre, uma nova nota retirada da fila, sendo
reprogramado o canal 2 do timer. A cada 16 interrupes chama-se o tratamento original de INT 8,
de forma a no afetar as interrupes do BIOS.
4. Finalizao
Esta rotina restaura o vetor 8 e a programao do canal 1 do timer, encerrando a execuo de tons
no alto-falante.
10.4 LISTAGEM DA ROTINA
;
; Rotina de Acesso ao Alto Falante
;
TIM_0 EQU 40H ; Contador do canal 0
TIM_2 EQU 42H ; Contador do canal 2
TIM_CTRL EQU 43H ; Controle do timer
INT_CTRL EQU 20H ; Controle da 8259
EOI EQU 20H ; Comando EOI p/ 8259
PORT_B EQU 61H ; Port B da 8255
SOM EQU 3 ; Mscara para os bits de controle
; do alto-falante
TAM_FILA EQU 30 ; Tamanho da fila de notas
VETOR SEGMENT AT 0
ORG 8*4
INT8_OFF DW ? ; Vetor da interrupo do timer
INT8_SEG DW ?
VETOR ENDS
MUSICA SEGMENT
ASSUME CS:MUSICA, DS:MUSICA
PRIMEIRO DW ? ; Ponteiro para o primeiro da fila
-
7/25/2019 Pc Assembler Bios
44/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 44
ULTIMO DW ? ; Ponteiro para depois do ltimo da fila
; i.e., onde colocar o prximo
INICIO LABEL BYTE
DW (TAM_FILA+1)*2 DUP (?) ; Fila de notas
FIM LABEL BYTE
ENTR_FILA STRUCT ; Estrutura de uma entrada na fila de notas
FREQ DW ?
TEMPO DW ?
ENTR_FILA ENDS
DURACAO DW 0 ; Durao da nota atual
CONT_INT DB 0 ; Contador de interrupes
INT_BIOS LABEL DWORD
OFF_BIOS DW ? ; Endereo da rotina original de interrupo
SEG_BIOS DW ?
;
; PREP_TIMER Rotina para preparar a execuo de notas
; Assume a interrupo do timer e o reprograma
;
PREP_TIMER PROC NEAR
MOV AX,OFFSET INICIO ; Inicia a fila
MOV PRIMEIRO,AX
MOV ULTIMO,AX
MOV DX,DS
SUB AX,AX
MOV DS,AX
ASSUME DS:VETOR
MOV BX,OFFSET INT_TIMER
MOV CX,CS
CLI
XCHG INT8_OFF,BX ; Assume interrupes do timer
XCHG INT8_SEG,CX
MOV AL,36H
OUT TIM_CTRL,AL ; Reprograma o timer, 16 vezes
MOV AL,0 ; mais rpidoOUT TIM_0,AL
MOV AL,10H
OUT TIM_0,AL
MOV DS,DX
ASSUME DS:MUSICA
MOV OFF_BIOS,BX ; Salva endereo anterior
MOV SEG_BIOS,CX
STI
RET
PREP_TIMER ENDP
-
7/25/2019 Pc Assembler Bios
45/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 45
;
; POE_NOTA Rotina que coloca uma nota na fila
; BX freqncia da nota (37 a 32767 Hz)
; 0 indica pausa (silncio)
; CX durao da nota (1 a 65535 1/100 segundo)
;
POE_NOTA PROC NEAR
OR BX,BX ; Pausa?
JZ PN_1 ; No:
MOV DX,36 ; contagem = 2386360 / freq
MOV AX,27064
ADD AX,BX
DEC AX ; (arredondamento)
DIV BX
MOV BX,AX
PN_1:
MOV AX,1000 ; contagem = durao * 1000 / 343
MUL CX
ADD AX,342 ; (arredondamento)
ADC DX,0
MOV CX,343
DIV CX
MOV CX,AX
MOV DI,ULTIMO
MOV [DI].TEMPO,CX ; Coloca no fim da fila
MOV [DI].FREQ,BX
ADD DI,4 ; Avana ponteiro
CMP DI,OFFSET FIM
JB PN_2 ; Se chegou ao fim,
MOV DI,OFFSET INICIO ; circula para o incio
PN_2:
CMP DI,PRIMEIRO
JE PN_2 ; Espera ter espao na fila
MOV ULTIMO,DI ; Atualiza o ponteiro
RET
POE_NOTA ENDP
;; INT_TIMER Tratamento da interrupo do timer
;
INT_TIMER PROC NEAR
PUSH AX
PUSH BX
PUSH DS ; Salva registradores
MOV AX,CS
MOV DS,AX
CMP DURACAO,0 ; Tem nota em execuo?
JE IT_1 ; Sim:DEC DURACAO ; decrementa durao da nota
JNZ IT_4 ; acabou?
-
7/25/2019 Pc Assembler Bios
46/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 46
IN AL,PORT_B ; sim:
AND AL,NOT SOM
OUT PORT_B,AL ; desliga alto-falante
IT_1: ; Alto-falante est livre:
MOV BX,PRIMEIRO
CMP BX,ULTIMO ; tem nota na fila?
JE IT_4 ; Sim:
MOV AX,[BX].TEMPO
MOV DURACAO,AX ; guarda durao
MOV AX,[BX].FREQ
OR AX,AX ; pausa?
JZ IT_2 ; No:
OUT TIM_2,AL ; reprograma o timer
MOV AL,AH
OUT TIM_2,AL
IN AL,PORT_B
OR AL,SOM
OUT PORT_B,AL ; liga alto-falante
IT_2:
ADD BX,4 ; avana ponteiro p/ primeiro
CMP BX,OFFSET FIM ; se chegou ao fim
JB IT_3
MOV BX,OFFSET INICIO ; circula para o incio
IT_3:
MOV PRIMEIRO,BX ; atualiza o ponteiro
IT_4:
INC CONT_INT ; Incrementa o contador de ints
TEST CONT_INT,0FH ; Contador mltiplo de 16?
JNZ IT_5 ; Sim:
POP DS
POP BX
POP AX ; restaura registradores
JMP CS:INT_BIOS ; desvia para a rotina original
IT_5: ; No:
MOV AL,EOI
OUT INT_CTRL,AL ; sinaliza fim do tratamento
POP DS
POP BX
POP AX ; restaura registradoresIRET ; retoma execuo interrompida
INT_TIMER ENDP
;
; DEV_TIMER Finaliza a execuo das notas
;
DEV_TIMER PROC NEAR
MOV AX,ULTIMO
DEV_1:
CMP AX,PRIMEIROJNE DEV_1 ; Espera a fila esvaziar
DEV_2:
-
7/25/2019 Pc Assembler Bios
47/73
PCAssemblerUsando o BIOS
1987, Daniel Quadros Pgina 47
CMP DURACAO,0
JNE DEV_2 ; Espera acabar a ltima nota
MOV DX,DS ; Salva DS
SUB AX,AX
MOV DS,AX
ASSUME DS:VETOR
MOV BX,OFF_BIOS
MOV AX,SEG_BIOS
CLI
MOV INT8_OFF,BX ; Restaura vetor original
MOV INT8_SEG,AX
MOV AL,36H
OUT TIMER_CTRL,AL ; Volta programao original
MOV AL,0
OUT TIM_0,AL
MOV AL,0
OUT TIM_0,AL
STI
MOV DS,DX ; Restaura DS
RET
DEV_TIMER ENDP
MUSICA ENDS
END
-
7/25/2019 Pc Asse