Pc Assembler Bios

download Pc Assembler Bios

of 73

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