Home » Artigos arquivados » 1997 – Instalações sem conflitos de hardware

1997 – Instalações sem conflitos de hardware

Instalações sem conflitos de hardware

Autor: Laércio Vasconcelos
Dezembro/1997

Artigo indicado para quem quer aprender sobre conflitos de hardware, como IRQ, DMA, E/S e memória. Explica o que são esses recursos, como ocorrem os conflitos e como solucioná-los. Esse tipo de conflito ocorre com placas ISA, e são raríssimos em placas baseadas no barramento PCI.

Evitando conflitos de hardware

Uma grande quantidade de defeitos em PCs não são na verdade defeitos, e sim conflitos de hardware gerados por instalações erradas. Neste capítulo estudaremos quais são esses recursos de hardware (E/S, Memória, IRQ e DMA) e veremos como fazer instalações de dispositivos PnP (Plug-and-Play) e de Legado (os que não são Plug-and-Play) sem que ocorram conflitos de hardware.

Alguns dos novos dispositivos que podemos adicionar ao PC são de instalação simples, principalmente aqueles que podem ser ligados diretamente em um dos conectores existentes na parte traseira do computador (ou seja, nas interfaces seriais e paralelas), sem a necessidade de uma placa controladora adicional, e sem ter que abrir o gabinete do computador para fazer a instalação. Nesta categoria citamos:

Impressora
Câmera digital
Caneta digital
Joystick
Modem externo
ZIP Drive, scanners e gravadores de CD-R paralelos

A instalação desses dispositivos consiste em conectá-los à interface adequada (já presente no PC) e, na maioria dos casos, instalar um software de controle.

Outros dispositivos são de instalação um pouco mais complicada, pois envolvem o uso de uma placa de interface. Este é o caso de diversos dispositivos, tais como:

Placa fax/modem
Drive de CD-ROM
Drive de CD-R SCSI
Placa de rede
Unidade de fita magnética
Placa de som
Scanner
Placa digitalizadora de vídeo
Discos óticos

Nessas instalações não basta fazer a simples conexão da placa em um slot. É preciso realizar a configuração de hardware da placa, caso contrário poderá ocorrer um problema chamado de conflito de hardware, resultando em problemas como:

“O mouse do meu computador estava funcionando bem, até que fiz a instalação de uma placa fax/modem. A placa não funcionou, e o que é pior, o mouse deixou de funcionar. Só quando retirei a placa fax/modem o mouse voltou a funcionar.”

“Instalei uma placa de som que funcionou, mas a impressora começou a apresentar problemas, imprimindo figuras pela metade e perdendo parte do texto impresso.”

“Troquei a placa SVGA do meu PC e a placa fax/modem deixou de funcionar.”

“Depois que instalei a placa de rede, a placa de som começou a apresentar problemas no Windows.”

“Depois que instalei um scanner, meu PC ficou maluco. Toda hora trava…”

Tais problemas caracterizam que uma nova placa instalada entrou em conflito com as demais. Existem quatro tipos diferentes de conflitos de hardware:

Conflito de endereços de memória
Conflito de endereços de E/S
Conflito de interrupções
Conflito de DMA

Ao instalarmos dispositivos PnP (Plug and Play), esses recursos são automaticamente escolhidos de forma a evitar conflitos. O problema é que ainda existem muitos dispositivos não PnP. Basta que apenas um dispositivo não seja PnP para que o processo de instalação automática de dispositivos PnP fique comprometido.

A instalação de dispositivos requer a determinação de quais recursos de hardware estão livres e quais estão ocupados. Para isto podemos usar o Gerenciador de Dispositivos do Windows 95/98 (são idênticos). Para chegar a ele, clicamos o ícone Meu Computador com o botão direito do mouse e no menu apresentado, escolhemos a opção Propriedades. É apresentado o quadro de Propriedades do Sistema. Neste quadro clicamos na guia Gerenciador de Dispositivos (figura 1).

ART50-01

Figura 1 – Gerenciador de Dispositivos.

O Gerenciador de Dispositivos nos dá diversas informações sobre os dispositivos instalados em um PC, inclusive os recursos de hardware que estão sendo utilizados. Na figura 1, deixando selecionado o item Computador, e clicando sobre o botão Propriedades, teremos o quadro mostrado na figura 2. Neste quadro vemos quais são os recursos em uso.

ART50-02

Figura 2 – Lista de interrupções.

Explicaremos ao longo deste capítulo, qual é o significado dos recursos de hardware, e como as informações exibidas em quadros como o da figura 2 podem ser úteis. O quadro mostrado na figura 2 possui opções que causam a exibição de todos os recursos de hardware:

Pedido de interrupção (IRQ)
Entrada e saída (E/S)
Acesso direto à memória (DMA)
Endereços de Memória

Para evitar conflitos de hardware, é preciso que a seguinte condição seja satisfeita:

Dois dispositivos não podem utilizar o mesmo recurso

Em outras palavras, não podemos ter duas placas utilizando a mesma interrupção, nem o mesmo canal de DMA, nem os mesmos endereços de memória, nem os mesmos endereços de E/S. É responsabilidade do Windows, garantir que novos dispositivos Plug and Play não utilizem recursos já ocupados por outros dispositivos. É responsabilidade do usuário, fazer com que os dispositivos que não atendem ao padrão Plug and Play (chamados de Dispositivos de Legado, ou em inglês, Legacy Devices) também não utilizem recursos de outros dispositivos. O usuário precisa ainda “avisar” ao Windows, quais são os recursos que estão sendo utilizados por dispositivos de legado. É exatamente o que ensinaremos agora.

Endereços de memória

Este conflito ocorre quando duas memórias ocupam os mesmos endereços. Isto ocorre com ROMs de placas de expansão. A faixa de endereços usados pelas ROMs é a região compreendida entre 768 kB e 1024 kB, o que corresponde aos valores C0000 a FFFFF, em hexadecimal. Placas que possuem ROMs, quando seguem o padrão PnP, têm seus endereços de memória configurados de forma automática, sem intervenção do usuário. Existem também placas de legado que usam memórias, e o usuário deve escolher endereços adequados na instalação.

ART50-03

Figura 3 – Lista de endereços de memória ocupados, apresentada pelo Gerenciador de Dispositivos.

O Gerenciador de Dispositivos do Windows 95/98 apresenta os recursos livres e os ocupados, indicando quais são os dispositivos que os estão ocupando. A partir do quadro de Propriedades do Sistema, mostrado na figura 1, selecionamos o item Computador, e o botão Propriedades. Ao usarmos a opção Memória, temos um relatório como o mostrado na figura 3. Este relatório traz todas as informações sobre uso da memória que um usuário precisa conhecer para instalar novas placas.

Vejamos um exemplo real, que é a configuração da placa controladora SCSI ADAPTEC, modelo AHA-2840A. Trata-se de uma placa de legado, e por isto o usuário precisa configurá-la através de jumpers. Esta placa possui uma ROM com 32 kB, cujo endereço é configurado de acordo as instruções do seu manual, mostradas a seguir. Neste exemplo, dois jumpers, indicados na placa como SW6 e SW5 são usados para o selecionamento do endereço desta ROM.

Table 2-5. Host Adapter BIOS Base Address Switch Settings

BIOS BASE ADDRESS SW6 SW5
D8000h (Default) OFF OFF
C8000h ON OFF
D0000h OFF ON
E0000h(*) ON ON

OFF = OPEN
ON = CLOSED
(*) Some systems do not support BIOS address E0000h

Observe que os endereços hexadecimais possuem cinco dígitos (Ex: D8000). Ao invés de usar 5 dígitos, é muito comum a representação com 4 dígitos (Ex: D800). A letra “h” colocada após cada endereço, é opcional, e serve para indicar que o número está em hexadecimal. Às vezes usam-se quatro dígitos e às vezes cinco. A razão é que os endereços de memória podem ser expressos de duas formas:

Endereço absoluto: Usa cinco dígitos, como por exemplo, D8000
Segmento: Usa apenas quatro dígitos, como por exemplo D800

Para saber o endereço de um segmento, basta acrescentar um ZERO no seu final. Por exemplo, o segmento D800 corresponde ao endereço D8000. Tome cuidado, pois muitos confundem segmentos com endereços. Muitos manuais indicarão endereço D800, quando o certo seria dizer segmento D800 ou então endereço D8000.

Na lista de endereços apresentada na figura 3, são utilizados 8 dígitos. Por outro lado, muitos manuais mostram seus endereços usando 4 ou 5, e às vezes até 8 dígitos. Por exemplo, o endereço D8000 poderia ser representado de 3 formas:

Endereço de 8 dígitos: 000D8000
Endereço absoluto de 5 dígitos: D8000
Segmento hexadecimal: D800

A tabela do nosso exemplo usa o termo BIOS base address. BIOS, porque a memória ROM existente nesta placa contém um programa que também é chamado de BIOS SCSI. O base address indica o endereço da memória a partir do qual o BIOS SCSI está localizado. O BIOS VGA fica localizado no endereço base C0000, enquanto o BIOS da placa de CPU normalmente está localizado a partir do endereço E0000, E8000 ou do F0000, dependendo da placa. Todas as placas que possuem BIOS, com exceção das placas VGA e placas de CPU, podem ter o seu endereço de memória reconfigurado.

Podemos ainda ver na tabela que o fabricante apresenta o endereço base default como D8000. As chaves SW5 e SW6 devem ser colocadas nas posições ON ou OFF para a escolha do endereço desejado. Em se tratando de jumpers, a palavra close significa “com jumper”, e open significa “sem jumper”.

Finalmente, uma última informação é apresentada na tabela: alguns sistemas não suportam o endereço base E0000. A maioria das placas de CPU 486 e anteriores possui um BIOS com 64 KB, localizado a partir do endereço F0000 (nesse caso, esta controladora SCSI poderia usar o endereço E0000), mas algumas possuem um BIOS com 128 KB localizado a partir de E0000, ou mesmo um BIOS com 96 kB, localizado a partir do endereço E8000. Nas placas de CPU Pentium e superiores, assim como placas de 486 e 586 de fabricação mais recente, é muito comum o BIOS começar em E0000 ou E8000.

Para escolher o endereço base, devemos visualizar o mapa de memória do PC, antes da instalação da nova placa. Para isto podemos usar o Gerenciador de Dispositivos, como mostra a figura 3. Na lista apresentada, podemos verificar quais são as faixas de endereços já ocupadas, e quais estão livres. No PC da figura 3 temos:

00000-9FFFF: Ocupada
A0000-AFFFF: Ocupada
B0000-BFFFF: Ocupada
C0000-C7FFF: Ocupada
C8000-DFFFF: Livre
E0000-E7FFF: Não disponível
E8000-FFFFF: Ocupada

Para decidir qual das faixas de endereços utilizar, é preciso determinar o início e o final de cada uma delas. Devemos levar em conta o seguinte:

Endereço base
Tamanho

A placa ADAPTEC AHA-2840 do nosso exemplo, possui 32 kB na sua ROM. Sabendo o endereço base e o seu tamanho, podemos determinar o endereço final. Sabendo o endereço base (inicial) e o final, automaticamente temos a faixa de endereços ocupada pela ROM. Para isto, precisamos converter os números em kB para o formato hexadecimal. A tabela que se segue será útil nesta conversão.

Valor

em kB

Valor

hex

Segmento hex

Valor

em kB

Valor

hex

Segmento hex

4 kB

1000

0100

36 kB

9000

0900

8 kB

2000

0200

40 kB

A000

0A00

12 kB

3000

0300

44 kB

B000

0B00

16 kB

4000

0400

48 kB

C000

0C00

20 kB

5000

0500

52 kB

D000

0D00

24 kB

6000

0600

56 kB

E000

0E00

28 kB

7000

0700

60 kB

F000

0F00

32 kB

8000

0800

64 kB

10000

1000

A fórmula para calcular o endereço final é muito simples:

Endereço final = Endereço inicial + tamanho – 1

Suponha que a ROM da nossa placa seja configurada para que seu endereço base (inicial) seja D0000. Sendo o seu tamanho igual a 32 kB, que de acordo com a tabela acima equivale a 8000 em hexadecimal, seu endereço final é calculado como:

Endereço final = D0000 + 8000 – 1 = D8000 – 1 = D7FFF

Somando o endereço inicial (D0000) e o tamanho da ROM (8000), temos D8000. Subtraindo 1 deste resultado, temos D7FFF (se fossem números decimais, subtrair 1 resultaria em um final 999, mas em hexadecimal, este valor final é FFF). Levando em conta esses cálculos, as faixas de endereços que a ROM ocuparia seriam:

Endereço base

Faixa de Endereços

D8000

D8000-DFFFF

C8000

C8000-CFFFF

D0000

D0000-D7FFF

E0000

E0000-E7FFF

De acordo com o Gerenciador de Dispositivos (figura 3), a faixa de endereços disponível na área reservada para ROMs (C0000 a FFFFF) é C8000-DFFFF. Confrontando esta faixa com as 4 opções oferecidas pela placa do nosso exemplo, temos:

D8000: Permitida
C8000: Permitida
D0000: Permitida
E0000: Não permitida

Portanto, a nossa placa controladora SCSI funcionaria se fosse configurada com qualquer uma das três primeiras opções de endereços, e certamente não funcionaria se fosse configurada na quarta opção, pois ocorreria um conflito de hardware.

O mapa de memória apresentado pelo Gerenciador de Dispositivos é suficiente para ajudar neste tipo de instalação, mas como instalar um dispositivo antes do Windows estar instalado, ou quando o disco rígido estiver com problemas e não permitir o uso do Windows? Neste caso podemos usar o programa MSD (Microsoft Diagnostics). Nos CDs de instalação do Windows 98, este software é encontrado no diretório C:\TOOLS\OLDMSDOS. Pode ser também encontrado em todas as versões do Windows, a partir da 3.1, e também a partir do MS-DOS 5.0.

Para utilizar o MSD, é preciso executar um boot limpo (no Windows 95/98, corresponde à opção Somente Prompt do Modo de Segurança). Se esta opção não for satisfeita, o mapa de memória apresentado não mostrará as áreas que estão realmente livres, pois estarão sendo ocupadas pelos gerenciadores de memória.

A figura 4 mostra a tela principal do MSD, um menu para seus comandos. Ao teclarmos “M”, é apresentado um mapa de memória, como o mostrado na figura 5.

ART50-04
Figura 4 – Tela principal do MSD.

ART50-05

Figura 5 – Mapa de memória apresentado pelo MSD.

O mapa de memória apresentado pelo MSD mostra a utilização da região compreendida entre os endereços 640 kB (segmento A000, em hexadecimal) e 1024 kB (FFFF, em hexadecimal). Para ver toda a região, basta usar as setas do teclado. As áreas em cinza no mapa de memória do MSD correspondem a memória ROM. As ROMs mostradas na figura 5 são o BIOS VGA (segmentos C000-C7FF) e o BIOS da placa de CPU, na parte superior do mapa. Áreas pontilhadas são indicadas como “possivelmente livres”, mas o MSD não nos dá a total certeza de que realmente estejam livres (na figura 5, entre E000 e EFFF). Finalmente, áreas totalmente pretas são garantidamente livres (na figura 5, entre C800 e DFFF).

Para que o uso da memória superior seja mais eficiente, devemos evitar a sua fragmentação. As áreas vazias entre C0000 e FFFFF são preenchidas por memória RAM pelos gerenciadores de memória (esta área é chamada de UMB – Upper Memory Blocks). Nesta área são carregados programas residentes e drivers ativados pelo CONFIG.SYS e AUTOEXEC.BAT, deixando assim mais espaço livre na memória convencional (abaixo de 640 kB), o que é importante para jogos que operam no modo MS-DOS. Devemos portanto evitar configurar o endereço de uma ROM no meio da área de memória livre. O melhor endereço para configuração é aquele logo após o BIOS VGA (C8000), ou então logo antes do BIOS da placa de CPU. Desta forma a área vazia formará uma região de maior tamanho, ao invés de duas regiões menores. Será possível armazenar mais programas na UMB.

Um outro tipo de placa que pode apresentar conflitos de endereços de memória são as placas de rede. Essas placas podem opcionalmente usar uma ROM com um programa chamado boot remoto. Normalmente as placas são fornecidas sem esta ROM. O boot remoto é necessário em computadores do tipo diskless, e o usuário deve comprar a placa de rede com esta ROM, se for o caso. Algumas placas de rede possuem, além da ROM opcional com o boot remoto, uma área de RAM que serve como buffer para transmissão e recepção de dados. Apesar de se tratar de uma RAM, normalmente fica localizada na faixa de endereços reservada para as ROMs. A escolha do seu endereço segue às mesmas regras usadas para as ROMs.

Além das placas controladoras SCSI e das placas de rede, é difícil encontrar outras placas que também possuem memórias. Entre os raros exemplos, podemos citar ainda as placas digitalizadoras de vídeo.

Evitando conflitos de endereços de E/S

Os conflitos de endereços de E/S são muito comuns, já que todas as placas de expansão necessitam deste recurso de hardware. Se o usuário não escolher esses endereços corretamente, ocorrerão conflitos de hardware, e as placas envolvidas não funcionarão.

Todos os comandos que o processador envia para os circuitos do computador são acompanhados de um endereço de E/S. Cada dispositivo de hardware, cada interface, ocupa uma determinada faixa de endereços. Cabe aos softwares que chamamos de drivers, fazer o acesso ao hardware, através desses endereços. Quando é feito o BOOT em um PC, normalmente é mostrado na tela um relatório sobre a sua configuração de hardware, onde constam informações como:

Parallel Port(s): 378
Serial Port(s): 3F8, 2F8

Na verdade a interface paralela indicada no endereço 378 não ocupa apenas este endereço, e sim, uma seqüência de 8 bytes no mapa de E/S. Esses 8 bytes ocupam os endereços hexadecimais 378, 379, 37A, 37B, 37C, 37D, 37E e 37F. O endereço 378 é chamado de endereço base, ou seja, o primeiro da faixa ocupada pela interface. Da mesma forma, no endereço base 3F8 encontramos a interface serial COM1, que ocupa os endereços hexadecimais 3F8, 3F9, 3FA, 3FB, 3FC, 3FD, 3FE e 3FF. A COM2, localizada a partir do endereço base 2F8, ocupa toda a faixa de 2F8 até 2FF. Portanto, tome cuidado com o duplo significado da palavra PORTA. Para o usuário, PORTA é sinônimo de interface. Para o processador, PORTA é um byte no mapa de E/S. Normalmente uma interface ocupa diversos bytes no mapa de E/S, assim como exemplificamos para as interfaces seriais e paralelas.

Sempre que vamos fazer a instalação de uma nova placa precisamos, entre outras coisas, definir qual a faixa de endereços de E/S a ser ocupada. Por exemplo, ao instalar uma placa Sound Blaster, existem várias opções para os endereços de E/S que serão ocupados pelos seus circuitos de áudio:

220 a 233
240 a 253
260 a 273
280 a 293

Antes de decidir se uma certa faixa de endereços de E/S pode ser usada por uma nova placa, precisamos saber se todos os seus bytes estão livres, ou seja, não estão em uso por outras placas. Uma das formas de saber quais são os endereços de E/S livres é tomando como base o mapa de E/S padrão definido pela IBM. Este mapa nada mais é que uma tabela que mostra como a IBM utilizou os diversos endereços para suas diversas interfaces. A tabela a seguir ajuda um pouco, mas não é suficiente para saber se uma determinada faixa de endereços está ou não livre. Além disso, um determinado PC pode possuir interfaces que não estejam descritas nesta tabela padrão da IBM. De qualquer forma, é útil ter esta tabela como referência.

Endereços / Interface que os utiliza

000-01F Controlador de DMA (placa de CPU)
020-03F Controlador de interrupções (placa de CPU)
040-05F Timer (placa de CPU)
060-06F Controlador de teclado do AT
070-07F Chip CMOS
080-09F Registro de página de DMA (placa de CPU)
0A0-0BF Segundo controlador de interrupções (CPU)
0C0-0DF Segundo controlador de DMA (placa de CPU)
0F0-0F1 CLEAR e RESET do coprocessador
170-177 Controladora IDE secundária
1F0-1F7 Controladora IDE primária
200-207 Interface de joystick
278-27F Porta paralela
2E8-2EF Porta serial COM4
2F8-2FF Porta serial COM2
370-377 Interface de drives secundária
378-37F Porta paralela
3B0-3BF Placa de vídeo MDA e HÉRCULES
3C0-3CF Placa VGA
3D0-3DF Placas CGA e VGA
3E8-3EF Porta serial COM3
3F0-3F7 Interface de drives primária
3F8-3FF Porta serial COM1

Figura 6 – Tabela padrão IBM para endereços de E/S.

Existem métodos mais seguros para determinar se uma faixa de endereços está livre ou ocupada, mas mesmo assim a tabela acima pode ser útil, pelo menos para eliminar opções que com certeza não podem ser usadas. Vejamos um exemplo:

Exemplo

Digamos que uma placa controladora de scanner possa ocupar uma das seguintes faixas de endereços:

200 a 207
210 a 217
220 a 227
230 a 237

De acordo com a tabela da figura 6, a faixa de endereços de 200 a 207 é usada pela interface de joystick. Como normalmente todos os computadores possuem este tipo de interface, não devemos deixar que outras placas utilizem esta faixa de endereços. De acordo com a tabela, apenas as três últimas opções poderiam ser utilizadas. Cabe aqui usar mais informações, pois obedecer a tabela não é suficiente para evitar os conflitos de hardware. O PC pode possuir outras interfaces não previstas na configuração básica do IBM PC original. É o que ocorre quando o PC possui uma placa de som. Normalmente, os modelos da Sound Blaster ocupam a faixa de 220 a 233, o que invalida o uso das opções 220-227 e 230-237. Nossa controladora de scanner só poderia usar, portanto, a faixa 210-217.

Usando o Gerenciador de Dispositivos do Windows 95/98

O Gerenciador de Dispositivos do Windows 95/98 apresenta uma lista com as faixas de endereços que estão em uso, bem como uma descrição das interfaces que as contém. A partir do quadro da figura 2, marcamos a opção Entrada/Saída (E/S), e teremos o quadro mostrado na figura 7. A lista apresenta as faixas de endereços que estão ocupadas, bem como as interfaces que as contém. As faixas que não constam da lista estão, a princípio, livres.

ART50-07

Figura 7 – Encontrando endereços livres e ocupados.

Teríamos então:

200-207: Joystick para porta de jogos
208-21F: Livre
220-22F: Creative Labs Sound Blaster 16 PnP
230-26F: Livre
270-273: Porta de dados de leitura de E/S para o enumerador ISA PnP
274-2F7: Livre
2F8-2FF: COM2
300-32F: Livre
330-331: Creative Labs Sound Blaster 16 PnP
332-33F: Livre
340-35F: NE2000 Compatível
360-36D: Livre
36E-36F: Creative SB32 PnP

Encontrando endereços livres desta forma, temos a primeira pista para a escolha de endereços de novas placas a serem instaladas.

Usando o programa IOVIEW

O IOVIEW é um utilitário que opera em modo MS-DOS, ideal para fazer o levantamento do mapa de E/S. Pode ser encontrado em http://www.laercio.com.br. Deve ser usado em modo MS-DOS. Partindo do Windows, executamos o comando Desligar, e escolhemos a opção Reiniciar em modo MS-DOS. Podemos então executar o IOVIEW, que apresenta uma tela como a da figura 8. Usamos as setas do teclado (para cima e para baixo) para percorrer a lista de endereços.

ART50-08
Figura 8 – Mapa de E/S entre 200-2FF, obtido com o IOVIEW.

No IOVIEW, valores “FF” indicam que os endereços correspondentes estão provavelmente livres. Valores diferentes de “FF” indicam que os endereços estão certamente ocupados. Na figura 8, temos logo no início, uma seqüência de valores “F0”, correspondendo aos endereços 200, 201, 202, 203, 204, 205, 206 e 207. A partir de 208, temos uma seqüência de valores FF, o que indica que esta faixa provavelmente está livre. Mais adiante, encontramos bytes ocupados em 220, 221, 222, 223, 228, 229, 22A, 22C e 22E. Depois de uma grande faixa provavelmente livre, temos uma faixa ocupada nos endereços 2F8 a 2FF.

ART50-09
Figura 9 – Mapa de E/S entre 300-3FF, obtido com o IOVIEW.

Da mesma forma, na figura 9 temos as seguintes faixas ocupadas:

330-331
340-357
376
378-37A
37C-37E
388-38B
3C0-3DF
3E8-3EF
3F2-3FF

Esses endereços não podem ser usados na instalação de novas placas. Os endereços restantes, ocupados por FF, estão provavelmente livres, digamos que com 99% de certeza. Não estão 100% livres porque um circuito pode estar ativo e mesmo assim retornar o valor FF.

Durante a instalação das modernas placas PnP, os recursos de hardware são escolhidos de forma automática. Entretanto, essa escolha automática possui algumas limitações. Por exemplo, as placas oferecem diversas opções de endereços de E/S. Sendo placas PnP, quando um desses endereços já está ocupado, é automaticamente selecionado outro endereço. O problema é que o número de opções é pequeno, e se nenhuma das opções puder ser usada, a instalação pelo processo PnP falha. Tomemos como exemplo uma placa Sound Blaster AWE32 PnP. Entre os seus diversos recursos de hardware, são utilizados os seguintes endereços de E/S:

Circuito Endereço base
Interface de joystick 200
Circuitos de áudio 220, 240, 260 ou 280
UART MPU-401 300 ou 330
Sintetizador FM 388

A interface para joystick só pode ocupar o endereço 200. Se alguma outra placa já estiver usando este endereço, a interface de joystick não poderá ser habilitada. Da mesma forma, os circuitos de áudio podem ocupar faixas de endereços começando em 220, 240, 260 ou 280. Se todas estiverem ocupadas, a instalação poderá falhar. Mais provável de ocorrer é a ocupação dos endereços 300 e 330, entrando em conflito com a UART MPU-401 da placa de som. Placas de rede e placas de interface de scanner freqüentemente usam esses endereços. Pior ainda é quando o endereço 388 já está ocupado, pois esta é a única opção válida para o Sintetizador FM da placa de som. Temos então que alterar os endereços das placas que estão ocupando as faixas que entram em conflito com a nova placa a ser instalada.

Evitando conflitos de interrupções

A interrupção é uma operação de hardware na qual o processador suspende provisoriamente a execução de um programa para o atendimento de um determinado evento. Essa suspensão dura tão pouco que o usuário não chega a perceber que o programa parou. Na maioria dos casos este tempo é inferior a um milésimo de segundo. Existem diversos dispositivos que necessitam interromper o processador:

A interface de teclado, para avisar que o usuário pressionou uma tecla
A interface paralela, para avisar que ocorreu algum problema com a impressora
A interface serial, para indicar que terminou de transmitir ou receber um byte
A interface de drives, para avisar que terminou a leitura ou gravação solicitada
Idem para a interface de disco rígido

Nas placas de CPU existem Controladores de Interrupção, através dos quais placas e dispositivos de hardware podem enviar requisições de interrupção (Interrupt Requests, ou IRQ) para o processador. Nos PCs antigos, esses controladores eram chips 8259A. Nos PCs modernos, esses circuitos fazem parte do chipset.

ART50-10

Figura 10 – Estrutura de interrupções de micros PC 286 e superiores.

A figura 10 mostra a estrutura de interrupções dos PCs 286, 386, 486, Pentium e superiores. Observe que existem dois controladores de interrupção 8259A ligados em cascata. O segundo controlador está ligado ao primeiro através do IRQ2. As interrupções são usadas da seguinte forma:

IRQ0 TIMER. Usada para marcar tempo.
IRQ1 TECLADO. A interface de teclado interrompe o processador para avisar que o usuário pressionou uma tecla.
IRQ2 CASCADE. Ligação com o segundo controlador de interrupções (ligação em cascata).
IRQ3 COM2 / COM4. Apesar de permitir até 4 portas seriais, não existem 4 IRQs exclusivos para cada uma delas. A COM4 deve usar a mesma interrupção que a COM2, enquanto a COM3 deve usar a mesma interrupção que a COM1. Esta é uma das principais razões de conflitos de hardware envolvendo as interfaces seriais.
IRQ4 COM1 / COM3.
IRQ5 PARALELA. A IBM reservou esta interrupção para a segunda interface paralela.
IRQ6 INTERFACE DE DRIVES DE DISQUETES
IRQ7 PARALELA. Normalmente esta interrupção é usada pela primeira interface paralela (LPT1), ficando a IRQ5 para a LPT2. Entretanto, nem sempre esta regra é seguida. Existem placas em que a LPT1 está ligada na IRQ5.
IRQ8 ALARM CLOCK. Esta interrupção está ligada ao chip CMOS, que pode ser programado para gerar uma interrupção após um período pré-programado.
IRQ9 EGA / VGA. Originalmente esta interrupção era utilizada pela placa de vídeo EGA. As placas VGA podem opcionalmente, por questão de compatibilidade com a EGA, usar também esta interrupção.
IRQ10 RESERVADO. Normalmente esta interrupção está livre, e pode ser usada por novas placas, como por exemplo, placas de rede e placas de som.
IRQ11 RESERVADO (na verdade livre).
IRQ12 RESERVADO (na verdade livre).
IRQ13 COPROCESSADOR. Reservada para uso exclusivo do coprocessador aritmético. Através dela o microprocessador pode ser informado sobre condições anormais do cálculo, como por exemplo, a divisão por zero e a raiz quadrada de um número negativo.
IRQ14 Interface IDE primária.
IRQ15 RESERVADO (na verdade livre, ou usada pela interface IDE secundária).

Todos os IRQs, com exceção dos que são usados internamente pela placa de CPU, são ligados aos slots ISA e PCI. Desta forma placas conectadas nesses slots podem requisitar interrupções.

A confusão entre IRQ2 e IRQ9

No antigo IBM PC XT, existia apenas um controlador de interrupções. A linha IRQ2 (veja a figura 10) era ligada a um dos pinos do slot ISA, e podia ser utilizada por placas de expansão. Nos PCs modernos, o IRQ2 não está disponível, sendo usado para a conexão com o segundo controlador de interrupções. No pino do slot ISA onde antes ficava ligado o IRQ2, a IBM colocou uma nova interrupção, a IRQ9. Por isso muitos fazem confusão entre IRQ2 e IRQ9. Em placas atuais, quando o manual faz referência ao uso da IRQ2, entenda que na verdade o correto é IRQ9, já que o IRQ2 está indisponível. Graças à substituição do IRQ2 pelo IRQ9, placas de expansão de 8 bits que antes usavam o IRQ2 nos velhos PCs de classe XT, puderam funcionar nos slots ISA de 16 bits, fazendo uso da IRQ9.

Placas de vídeo que usam a IRQ9

As antigas placas de vídeo EGA utilizavam a IRQ9 para indicar o início do retraço vertical. Esta operação era necessária para que os programas não acessassem a memória de vídeo durante o período no qual os seus dados estavam sendo enviados ao monitor, o que causaria uma distorção na imagem conhecida como snow, que consiste em uma série de traços horizontais. Placas de vídeo modernas não apresentam mais este problema. Sua memória de vídeo pode ser acessada a qualquer instante, sem a ocorrência do snow. Por questões de compatibilidade, muitas placas de vídeo possuem um jumper indicado como IRQ9. Quando este jumper é ligado, a placa passa a gerar as interrupções de retraço vertical. Muitos jogos antigos necessitavam desta interrupção para funcionar. Se você precisar de uma interrupção livre para usar em uma nova placa de expansão, pode desabilitar o uso da IRQ9 na placa de vídeo. Exceto no caso de jogos muito antigos (em geral dos anos 80), não ocorrerão problemas em deixar a placa de vídeo trabalhar sem IRQ9.

Encontrando IRQs livres

No Windows 95/98, podemos usar o Gerenciador de Dispositivos para verificar quais são as interrupções livres, bem como para saber quais dispositivos estão ocupando cada uma delas. A figura 11 mostra o tipo de relatório apresentado.

ART50-11

Figura 11 – Lista de interrupções, apresentada pelo Gerenciador de Dispositivos do Windows 95.

Quando o Windows é instalado em um computador, ainda com uma configuração básica, são detectados todos os dispositivos presentes, bem como os recursos de hardware que os utilizam. Em um PC que possui apenas uma configuração básica, (sem placa fax/modem, placa de som, e sem outras placas adicionais), as interrupções estarão sendo utilizadas da seguinte forma:

IRQ0 TIMER
IRQ1 TECLADO
IRQ2 CASCADE
IRQ3 COM2
IRQ4 COM1
IRQ5 PARALELA ou LIVRE. Se a interface paralela estiver usando a IRQ7, a IRQ5 estará livre.
IRQ6 INTERFACE DE DRIVES
IRQ7 PARALELA ou LIVRE. Se a interface paralela estiver usando a IRQ5, a IRQ7 estará livre.
IRQ8 ALARM CLOCK
IRQ9 EGA / VGA ou LIVRE. Se o jumper IRQ9 da placa VGA estiver desabilitado, então a IRQ9 estará livre.
IRQ10 LIVRE
IRQ11 LIVRE
IRQ12 LIVRE
IRQ13 COPROCESSADOR
IRQ14 INTERFACE IDE PRIMÁRIA
IRQ15 INTERFACE IDE SECUNDÁRIA ou LIVRE. Se a controladora IDE secundária não existir, ou estiver desabilitada, a IRQ15 estará livre.

Temos portanto diversas interrupções livres para serem usadas por novas placas:

IRQ5 ou IRQ7

São reservadas para interfaces paralelas. Como na configuração básica existe apenas uma interface paralela, apenas uma dessas interrupções, normalmente a IRQ7, estará sendo usada. A outra, normalmente a IRQ5, estará livre. Tome cuidado, pois em certos casos ocorre o contrário, ou seja, a IRQ5 está em uso e a IRQ7 está livre. Use o Gerenciador de Dispositivos para tirar a dúvida.

IRQ9

Poderá estar sendo usada pela placa de vídeo, caso seja um modelo ISA ou VLB. Podemos desabilitar seu uso através de um jumper, de acordo com as instruções existentes no manual da placa de vídeo. Caso esteja instalada uma placa SVGA PCI, outra IRQ estará sendo usada, porém nem sempre será possível desabilitá-la.

IRQ10, IRQ11, IRQ12

Essas interrupções estarão livres, já que não são usadas pelos dispositivos que fazem parte da configuração básica de um PC.

IRQ15

Esta interrupção poderá estar sendo utilizada pela interface IDE secundária. As placas de CPU modernas possuem duas interfaces IDE. Caso esteja sem uso, podemos desabilitá-la no CMOS Setup, e assim ficaremos com a IRQ15 livre.

À medida em que novas placas são instaladas, as listas de recursos do Gerenciador de Dispositivos são atualizadas. Quando é instalada uma placa PnP, esta atualização é automática. Quando é instalada uma placa que não é do tipo PnP, é responsabilidade do usuário atualizar manualmente a lista de recursos utilizados. Vejamos agora o exemplo da instalação de uma placa que não possui o recurso PnP.

Exemplo: Instalando uma placa de rede

As placas de rede mais usadas são as compatíveis com a NE2000, produzida pela Novell. Podemos encontrar modelos ISA, alguns VLB (já caíram em desuso) e PCI. Muitas operam em modo PnP, mas muitas necessitam de configuração manual. Normalmente placas como esta possuem jumpers para selecionamento de:

Endereço de E/S
IRQ
Endereço de memória

O endereço de memória só precisa ser configurado quando a placa possui uma ROM com boot remoto, ou RAM com buffer de transmissão/recepção. Quando não existe esta ROM ou RAM, deveremos desabilitá-la, usando instruções do seu manual. A placa usada no nosso exemplo possui jumpers para essas finalidades:

ART50-J

Temos um bloco de jumpers chamado JP1. Cada um desses jumpers é numerado de 1 a 7. Os 4 primeiros servem para definir o endereço de E/S a ser ocupado pela placa, e os três jumpers seguintes definem a interrupção a ser usada.

Digamos que já tenhamos feito as devidas consultas ao Gerenciador de Dispositivos para determinar endereços e IRQs livres, e tenhamos optado por usar o seguinte:

Endereço de E/S: 300H
Interrupção: 10

Programamos os jumpers de acordo com as tabelas, conectamos a placa em um slot livre e ligamos o PC. Como não se trata de uma placa PnP, não será reconhecida de forma automática. Será preciso fazer a instalação com o comando Adicionar Novo Hardware, no Painel de Controle. Entrará em ação o Assistente para Adicionar Novo Hardware (figura 12). Devemos clicar sobre o botão Avançar.

ART50-12

Figura 12 – Assistente para Adicionar Novo Hardware.

A seguir, o Assistente pergunta se queremos que o novo hardware seja detectado automaticamente, ou se desejamos especificar manualmente a sua marca e modelo, como mostra a figura 13. A princípio, devemos deixar o Assistente detectar o novo hardware, a menos que o manual do fabricante forneça instruções específicas ao contrário. Respondemos então “Sim”, e a seguir clicamos em Avançar.

ART50-13

Figura 13 – O Assistente irá detectar o novo hardware.

Após alguns minutos, estará feita a detecção. Para ver a lista de dispositivos detectados, devemos clicar sobre o botão Detalhes (figura 14). Neste exemplo, foi detectada uma placa NE2000 Compatível. Clicamos então sobre o botão Concluir.

ART50-14

Figura 14 – Término da detecção.

Em se tratando de dispositivos que não são PnP, nem sempre é possível identificar com precisão a interrupção utilizada. Por isso, é apresentado um quadro no qual devemos informar a interrupção utilizada, como mostra a figura 15. No nosso exemplo, especificaremos a interrupção 10 (IRQ10).

Será pedida a colocação de alguns dos disquetes de instalação do Windows, para que possam ser lidos os drivers da placa instalada. Terminada a leitura desses drivers, será preciso executar um novo boot para que as alterações sejam efetivadas.

ART50-15

Figura 15 – Devemos indicar qual é a interrupção utilizada pela placa.

Depois de realizado o novo boot, podemos abrir o Gerenciador de Dispositivos, e lá veremos registrada a placa recém-instalada, que no nosso caso é indicada como NE2000 Compatível, como mostra a figura 16,

ART50-16

Figura 16 – A nova placa está agora registrada no Gerenciador de Dispositivos.

Selecionando esta placa na lista da figura 16, e usando o botão Propriedades, temos um quadro como o da figura 17. Na guia Recursos, vemos que a placa está usando a interrupção 10, e a faixa de endereços de E/S 300-31F, conforme foi instalada.

ART50-17

Figura 17 – Visualizando os recursos de hardware utilizados por uma placa.

Evitando conflitos de DMA

Enquanto existem eventos de hardware que demandam uma interrupção do processador, existem casos em que a memória precisa ser acessada diretamente por determinadas interfaces, sem o envolvimento direto do processador. Por exemplo, uma interface de disquetes faz acessos diretos à memória para guardar os bytes que são lidos de um disquete. Terminada a leitura, esta interface gera uma interrupção (no caso, a IRQ6) para avisar ao processador que a leitura terminou.

O Acesso Direto à Memória (Direct Memory Access – DMA) é utilizado por diversas interfaces, como por exemplo:

Interface de disquetes
Interfaces IDE, quando operando em modos DMA e Ultra DMA
Placas de som
Alguns tipos de interfaces para scanner
Interface paralela, quando operando em modo ECP
Placas digitalizadora de vídeo

A vantagem do DMA é que o processador não precisa se ocupar diretamente da operação de recepção e transmissão de cada byte, ficando livre para executar outros processamentos. Normalmente as interfaces que utilizam DMA, utilizam também uma interrupção para avisar o processador sobre o término da transferência.

Os PCs podem operar com até 7 dispositivos utilizando DMA. Dizemos então que o circuito controlador de DMA implementa 7 canais. Na verdade, este circuito é formado por dois controladores de DMA, cada um sendo capaz de gerenciar 4 canais. Esses dois controladores estão ligados em cascata, e um dos canais é utilizado nesta ligação, sobrando apenas 7. Os oito canais e seus usos são os seguintes:

DMA0: Livre
DMA1: Livre
DMA2: Interface de drives
DMA3: Livre
DMA4: [CASCADE]
DMA5: Livre
DMA6: Livre
DMA7: Livre

No Windows 95/98, podemos visualizar os canais de DMA que estão em uso, através do Gerenciador de Dispositivos, como mostra a figura 18. Neste exemplo, além dos canais DMA2 e DMA4, que estão sempre ocupados em qualquer PC, temos ainda os canais DMA1 e DMA5 sendo utilizados pela placa de som.

ART50-18

Figura 18 – Visualizando o uso dos canais de DMA com a ajuda do Gerenciador de Dispositivos.

Quando o Windows é instalado em um PC com configuração básica, apenas estarão em uso os canais 2 e 4. Os canais 0, 1, 3, 5, 6 e 7 estarão disponíveis para serem usadas por placas de expansão. À medida em que novas placas são instaladas, os canais livres vão sendo ocupados. Quando instalamos placas PnP, os canais de DMA necessários são atribuídos automaticamente. No caso de placas de legado, cabe ao usuário descobrir quais são os canais de DMA livres, bem como atribuir canais às placas que estão sendo instaladas.

Exemplo: placa Sound Blaster

As placas Sound Blaster 16 e todas as suas sucessoras utilizam dois canais de DMA, sendo um para operações de 8 bits, e outro para operações de 16 bits:

DMA LOW: Pode ser escolhido entre DMA0, DMA1 e DMA3
DMA HIGH: Pode ser escolhido entre DMA5, DMA6 e DMA7

O mesmo ocorre com todas as placas compatíveis com a Sound Blaster 16, como é o caso das suas sucessoras:

Sound Blaster 32
Sound Blaster AWE32
Sound Blaster AWE64

Reservando recursos

Existem certos tipos de instalação em que temos que usar o comando Reservar Recursos no Gerenciador de Dispositivos. São casos em que o Windows não consegue reconhecer a placa que está sendo instalada, e por isso, não sabe das suas necessidades em termos de endereços de E/S, DMA, memória e IRQ.

ART50-19

Figura 19 – O Assistente para Adicionar Novo Hardware não conseguiu detectar a nova placa.

Ao tentarmos usar a detecção do Assistente para Adicionar Novo Hardware, é apresentado como resultado o quadro da figura 19. Tipicamente isto ocorre com placas antigas que são acompanhadas de drivers para Windows 3.x, e não para Windows 95/98. Os drivers para Windows 3.x funcionarão no Windows 95/98, mas é preciso “avisá-lo” sobre os recursos de hardware que estão sendo utilizados. Fazemos então o seguinte:

1. Reservar os recursos de hardware necessários para a nova placa.
2. Uma vez com os recursos reservados, instalar o software para Windows 3.x.

Vamos ilustrar a reserva de recursos usando como exemplo a placa de interface que acompanha o scanner Genius ScanMate Color. Trata-se de um scanner manual, capaz de operar com 16 milhões de cores, e muito vendido por volta de 1995. De acordo com o manual deste scanner, a placa de interface que o acompanha necessita dos seguintes recursos de hardware:

Endereços de E/S, escolhidos entre 280-283, 2A0-2A3, 330-333 ou 340-343.
Interrupção, escolhida entre IRQ5, IRQ10, IRQ11 ou IRQ12
Canal de DMA, escolhido entre DMA1, DMA3, DMA5 ou DMA6

Uma vez identificadas as opções suportadas pela placa, devemos verificar, com a ajuda do Gerenciador de Dispositivos, quais delas podem ser usadas, ou seja, não estão em uso. Por exemplo, na figura 20 verificamos que a IRQ5 está livre, e na figura 21, vemos que o mesmo ocorre com a IRQ11. Podemos então escolher entre IRQ5 ou IRQ11, sendo que a IRQ11 é a escolha mais sensata, já que a IRQ5 normalmente é usada pelas placas de som.

ART50-20

Figura 20 – Lista de interrupções em uso.

ART50-21

Figura 21 – Lista de interrupções em uso – continuação.

A figura 22 mostra que o PC do nosso exemplo possui ocupados apenas os canais DMA2 e DMA4. Nossa placa pode ser configurada com qualquer uma das opções oferecidas para o canal de DMA. Da mesma forma, a figura 23 mostra um trecho do mapa de E/S, e vemos que as faixas 280-283, 2A0-2A3, 330-333 e 340-343 estão todas livres. Entretanto, não é sensato usar a faixa 330-333, pois normalmente os endereços 330 e 331 são usados pelas placas de som.

ART50-22

Figura 22 – Relatório sobre o uso dos canais de DMA.

ART50-23

Figura 23 – Relatório sobre o uso dos endereços de E/S.

Consultando os relatórios sobre uso de endereços de E/S, interrupções e canais de DMA apresentados pelo Gerenciador de Dispositivos, resolvemos usar para a nossa placa de interface de scanner, a seguinte configuração:

Endereços de E/S: 2A0-2A3
Interrupção: IRQ11
Canal de DMA: DMA6

Selecionamos então, a partir do quadro da figura 21, a guia Reservar Recursos. O quadro assumirá o aspecto mostrado na figura 24.

ART50-24

Figura 24 – Quadro para reservar recursos.

Para reservar um recurso, devemos antes indicar o seu tipo. No quadro da figura 24, está sendo indicado o tipo Pedido de interrupção (IRQ). Clicamos então sobre o botão Adicionar. É apresentado um quadro como o da figura 25, no qual especificamos a interrupção a ser reservada.

ART50-25

Figura 25 – Reservando a IRQ11.

Teremos então a IRQ11 reservada. O procedimento é semelhante para os endereços de E/S e para o canal de DMA. Apenas no caso dos endereços de E/S e endereços de memória, é preciso especificar uma faixa, ou seja, um endereço inicial e um endereço final, como mostra a figura 26.

ART50-26

Figura 26 – Reservando uma faixa de endereços de E/S.

Terminada a reserva, é preciso reinicializar o computador para que as mudanças tenham efeito. Observe que neste momento ainda não instalamos a placa no computador, apenas reservamos os seus recursos. Depois do boot, podemos usar novamente o Gerenciador de Dispositivos para confirmar a reserva dos recursos. Veja por exemplo na figura 27, a IRQ11 reservada.

ART50-27

Figura 27 – A IRQ11 já está reservada.

Uma vez com os recursos reservados, podemos desligar o computador para instalar a placa. A placa do nosso exemplo tem apenas jumpers para configurar o endereço de E/S. O canal de DMA e a IRQ são configurados pelo seu software de controle.

A seguir, temos um exemplo de como os manuais apresentam tabelas de configurações de jumpers para selecionamento de endereços de E/S. Na nossa placa, existem dois jumpers, indicados como AD0 e AD1. Dependendo da situação de cada um deles (Open=sem jumper, Short=com jumper), teremos selecionado um dos quatro endereços possíveis.

Jumpers

Addresses

280H

2A0H

330H

340H

AD0

Short

Short

Open

Open

AD1

Short

Open

Short

Open

O próximo passo é conectar a placa em um slot livre, o scanner no conector existente na parte posterior da placa, e ligar o computador. Instalamos então o software que acompanha a placa. Aqui temos um detalhe muito importante. Mesmo quando um equipamento é antigo, não devemos jogar fora os programas que o acompanham. No caso deste scanner, sem o disquete que o acompanha, não será possível configurar a placa de interface, e por conseguinte, não poderemos usá-lo.

Feita a instalação do software, é apresentado o quadro da figura 28, onde somos avisados de que é preciso configurar o DMA e o IRQ da placa. Usamos a seguir o botão “Hardware Test…”, para capturar uma figura, verificando se o scanner está funcionando. Neste momento, não se preocupe com a qualidade da imagem, pois o objetivo é testar se as opções de DMA e IRQ são válidas. Está terminada a instalação. A partir daí, o scanner já poderá ser usado por programas editores gráficos.

ART50-28

Figura 28 – Indicando o canal de DMA e a linha de IRQ utilizada.

Uso de endereços de E/S acima de 3FF

Um certo cuidado adicional deve ser tomado com o uso de endereços de E/S usados por placas modernas. Tradicionalmente as placas utilizam apenas a faixa de 000 a 3FF, sendo que o endereço 400 é uma repetição do endereço 000, o endereço 500 é uma repetição do endereço 100, o endereço 600 é uma repetição do endereço 200, e assim por diante. Esta repetição ocorre devido a uma técnica usada em hardware para economizar circuitos, chamada decodificação incompleta. No PC esta técnica foi empregada pois a IBM estipulou o uso apenas da faixa de 000 e 3FF. Para distinguir um endereço nesta faixa basta usar um decodificador de endereços de 10 bits ao invés de 16. A diferença entre, por exemplo, 170 e 570 (hexadecimal) está no 11º bit. Uma interface de disco rígido usando um decodificador de 10 bits para reconhecer a sua faixa de endereços (170 a 177) responderá indevidamente a comandos direcionados para endereços 570-577, 970-977, etc. Se configurarmos uma nova placa para utilizar a faixa 550-57F, certamente ocorrerá um conflito de endereços de E/S, a menos que o decodificador de endereços utilize pelo menos 11 bits, ao invés de 10. Diversas placas de interface modernas utilizam decodificadores completos, usando 16 bits ao invés de 10, com o objetivo de evitar este tipo de conflito. Entretanto esta característica não é obrigatória, já que o padrão PC especifica o uso de decodificadores de apenas 10 bits. A realidade é que além de muitas placas estarem utilizando decodificadores de 16 bits, muitas estão também ocupando faixas acima do endereço 3FF, que também é considerado como o limite máximo para endereços de E/S estipulado pela IBM. Ao escolher endereços de E/S para a instalação de uma determinada placa devem ser utilizadas as mesmas técnicas apresentadas até agora. Programas como o IOVIEW podem ser usados normalmente, mesmo para buscar endereços livres acima do endereço 3FF.

ART50-29
Figura 29 – Mapa de E/S entre 300 e 3FF.

ART50-30

Figura 30 – Mapa de E/S entre 700 e 7FF.

As figuras 29 e 30 mostram as faixas de endereços 300-3FF e 700-7FF em um certo PC. Conforme já explicamos, a decodificação incompleta com 10 bits faz com que o endereço 700 seja uma repetição do endereço 300. Comparando essas duas figuras podemos observar que a maioria dos valores existentes na faixa 300-3FF aparecem idênticos na faixa 700-7FF. Nesse caso, não poderíamos deixar que uma placa ocupe, por exemplo, a faixa 700-70F, pois encontraríamos aí uma repetição da faixa 300-30F, que como vemos, já está ocupada. Observe ainda um caso interessante. A faixa 3C0-3DF representada na figura 29 não aparece repetida em 7C0-7DF. Como já abordamos neste capítulo, a faixa 3C0-3DF é ocupada pela placa VGA. A repetição na faixa 7C0-7DF não ocorre pois a placa VGA utilizada neste exemplo utiliza um decodificador de endereços de 16 bits.