Unidades de I/O Interface Entrada/Saída Existem três formas básicas de efectuar operações de entrada/saída entrada/saída isoladaas instruções IN e OUT transferem dados entre o registo AX ou a memória e o dispositivo I/O; entrada/saída com mapeamento de memóriasão utilizadas instruções de referência a posições de memória utilizadas na transferência dos dados com o dispositivo I/O; acesso directo à memória (DMA)éuma forma especial de entrada/saída com mapeamento de memória, em que os dados transitam entre o periférico e a memória, sem passarem pelo CPU. 133 Unidades de I/O O método mais utilizado é o de entrada/saída isolada. O termo isolada significa que as localizações de entrada/saída se encontram isoladas do sistema de memória do microprocessador, num espaço de endereços de I/O separado. 134
Unidades de I/O Exemplos IN AL, porta IN AX, porta IN AL, DX IN AX, DX OUT porta, AL OUT porta, AX OUT DX, AL OUT DX, AX Sempre que são utilizadas as instruções IN ou OUT, o endereço I/O, designado por número da porta, é colocado no endereço de memória. Este método permite ao utilizador expandir a memória para o máximo sem sobrepor o espaço utilizado pelos dispositivos de I/O. A desvantagem da entrada/saída isolada é a necessidade da utilização das instruções IN ou OUT. 135 Unidades de I/O O método de entrada/saída mapeada utiliza qualquer instrução de transferência de memória entre o microprocessador e a memória. Os dispositivos de I/O são tratados como posições de memória. A vantagem deste método é a possibilidade de utilizar as várias instruções de transferência de dados com a memória. A desvantagem está na perda de memória disponível para executar as aplicações. 136
Unidades de I/O Exemplos/Resumo Memory Mapped I/O Dispositivo de I/O que partilha o espaço de endereçamento da memória Exemplo da Placa gráfica 8086 78K RAM CPU Video RAM Placa Gráfica Monitor 640K Isolated I/O Espaço de endereçamento de I/O distinto do espaço de endereçamento de memória. No caso do 8086 o espaço de endereçamento é de 64K ( bits) 137 Unidades de I/O Instruções de I/O IN AL,<end. 8 bits> 0000h 00FFh 8 bits INPUT IN AL,DX 0000h FFFFh bits IN AX,<end. 8 bits> IN AX,DX 0000h 00FFh 0000h FFFFh OUT <end. 8 bits>,al 8 bits OUTPUT OUT DX,AL bits OUT <end. 8 bits>,ax OUT DX,AX 138
Unidades de I/O Placa Gráfica Memory Mapped I/O Standard VGA Modo Tipo Linhas/Colunas Cores 00h 5 linhas x 40 colunas 01h 5 linhas x 40 colunas 0h 5 linhas x 80 colunas 03h 5 linhas x 80 colunas 11h 640x480 1h 640x480 13h 30x00 56 139 VGA (Video Graphics Array) é um standard vídeo para PC introduzido no mercado em 1987 pela IBM. O sistema VGA pertence a uma família anterior de standards de vídeo da IBM como CGA, EGA e MCGA, sendo este uma versão mais simples do VGA. Note-se que o sistema VGA mantém a compatibilidade com os sistemas anteriores. 140
Detalhes Técnicos 56KByte Video RAM Modos de cores e 56 cores 6144 (^18 seis bits [64 valores] cada para vermelho, verde, e azul) palete de cores Selecção de 5MHz ou 8MHz para frequência do master clock Máximo de 70 pixels horizontais Máximo de 480 linhas Refresh rates até 70 Hz Modo planar até cores (planos de 4 bit) Modo packed-pixel 56 cores (Modo 13h) Suporta Hardware smooth scrolling Suporta Raster Ops Suporta Split screen Software fontes 141 Modos VGA Modo Tipo Linhas/Colunas Cores 00h 5 linhas x 40 colunas 01h 5 linhas x 40 colunas 0h 5 linhas x 80 colunas 03h 5 linhas x 80 colunas 11h 640x480 1h 640x480 13h 30x00 56 14
Endereçamento A memória de vídeo do VGA está mapeada numa janela com o intervalo entre 0xA000 e 0xBFFFF no espaço de endereçamento em modo real dos PC's. Tipicamente estes são 0xB000 para modo de texto monocromático 0xB800 para modo de texto colorido e modos gráficos compatíveis CGA 0xA000 para modos EGA/VGA 143 Modo 3 (5 linhas, 80 colunas, cores) O ecrã é organizado numa matriz com 5 linhas e 80 colunas, sendo cada caracter representado por dois bytes em memória. O primeiro representa o código ASCII do caracter a visualizar e o segundo representa os seus atributos. Cada matriz ocupa 4000 bytes de memória (5x80x), existindo 4 blocos com estas dimensões designados por páginas. Em cada instante, apenas uma das páginas se encontra activa. Esta memória encontra-se mapeada no segmento de memória B800h, conforme se descreve na figura seguinte 144
Página 0 Endereço (Hex.) Coluna 0 Coluna 1 Coluna Coluna 79 Linha 0 B8000000 Linha 1 B80000A0 Página 1 Linha 0 B8001000 Linha 1 B80010A0 Página 3 Linha 0 B8003000 Linha 1 B80030A0 145 Para uma determinada posição no display (página=0..3, linha=0..4, coluna=0..79) a informação relativa a um caracter ocupará as posições SegmentoB800h Deslocamento ( Código ASCII) 4096 x página + 0 x linha + x coluna Deslocamento ( ibuto) 4096 x página + 0 x linha + x coluna +1 O byte correspondente aos atributos codifica o conjunto de características da representação dos caracteres, conforme se descreve na figura seguinte Bit 7 Bit 0 BLNK BAK BAK1 BAK0 INT FOR FOR1 FOR0 BLNK 1 - Blinking 0 - Not blinking BAK, BAK1, BAK0 000 = black 001=blue 010=green 011=cyan 100 = red 101=magenta 110=brown 111=white INT, FOR, FOR1, FOR0 0000 = black 0001=blue 0010=green 0011=cyan 0100 = red 0101=magenta 0110=brown 0111=white 1000 = grey 1001=light blue 1010=light green 1011=light cyan 1100 = light red 1101= light magenta 1110=yellow 1111=bright white 146
Modo 19=13h(30x00,56 cores) Neste modo gráfico, o ecrã é organizado numa matriz de pixels (0..319,0..199) sendo cada pixel representado por um byte em memória (56 cores). São, portanto, necessários 30x00 bytes (64000 bytes) para armazenar toda a informação necessária para a definição da imagem vídeo. Esta memória encontra-se mapeada no segmento de memória A000h, conforme se descreve na figura seguinte 147 Endereço (segmentodeslocamento/offset) Um determinado pixel de coordenada (x,y) ocupará o byte com offset 30*y+x. Por exemplo, ao pixel de coordenadas (,0) está associado a célula de memória A000h000h. Para colocar um determinado pixel no ecrã com uma determinada cor, basta armazenar na célula de memória correspondente o valor da cor desejada. Note-se que o sistema de coordenadas utilizado é diferente do habitual. O ponto de coordenadas (0,0) coincide com o canto superior esquerdo do ecrã e o ponto de coordenadas (319,199) coincide com o canto inferior direito. 148
INT 10H - Algumas funções para o subsistema vídeo Função (AH) Parâmetros de entrada Parâmetros de saída Descrição 00h AL - Modo Vídeo Define o modo vídeo do display (consulte a tabela de Modos Vídeo para Placas Gráficas VGA) 01h CH - Primeiro linha do cursor (0..15). CL - Última linha do cursor (0..15). Define a forma do cursor. 0h BH - Número da página DH - Coordenada Y DL - Coordenada X Coloca o cursor na posição (X,Y) no display. 03h CH - Primeiro linha do cursor (0..15). CL - Última linha do cursor (0..15). DL - Coordenada X DH - Coordenada Y Obtém a forma e localização do cursor. 05h AL - Número da página Define a página a ser visualizada no display (0..7) 06h AL - Número de linhas a deslocar para cima. BH - ibutos da área afectada pelo deslocamento. CL - Coordenada X do canto superior esquerdo. CH - Coordenada Y do canto superior esquerdo. DL - Coordenada X do canto inferior direito. DH - Coordenada Y do canto inferior direito. Limpa ou desloca linhas para cima. Se AL=0, esta função limpa a janela rectangular definida pelo canto superior esquerdo (CL/CH) e o canto inferior direito (DL/DH). Se AL<>0, esta função desloca para cima o número de linhas especificado em AL 149 INT 10H - Algumas funções para o subsistema vídeo (cont.) Função (AH) Parâmetros de entrada Parâmetros de saída Descrição 07h AL - Número de linhas a deslocar para baixo. BH - ibutos da área afectada pelo deslocamento. CL - Coordenada X do canto superior esquerdo. CH - Coordenada Y do canto superior esquerdo. DL - Coordenada X do canto inferior direito. DH - Coordenada Y do canto inferior direito. Limpa ou desloca linhas para baixo. Se AL=0, esta função limpa a janela rectangular definida pelo canto superior esquerdo (CL/CH) e o canto inferior direito (DL/DH). Se AL<>0, esta função desloca para baixo o número de linhas especificado em AL 08h AL - Número da página AL - Caracter AH - ibutos Leitura do código ASCII e atributos do caracter existente na posição corrente (cursor). 09h AL - Caracter BH - Número da página BL - ibutos CX - Número de vezes Copia CX vezes o caracter/atributo especificado em AL/BL a partir da posição corrente (cursor). Não altera a posição do cursor. 150