O CONFIG.SYS e o AUTOEXEC.BAT são os principais arquivos de configuração do MS-DOS. Demonstro aqui em detalhes como ajustá-los corretamente, além de também explicar como fazer funcionar um teclado ABNT2 no DOS. E como um bônus super especial, destrincho em detalhes o complicado gerenciamento de memória do lendário sistema da Microsoft. Vale a pena conferir!
Ambos os arquivos são gerados automaticamente após a instalação do MS-DOS. No caso da versão 6.22 do sistema operacional, eles por padrão ficam desta forma:
CONFIG.SYS e AUTOEXEC.BAT logo após a instalação do MS-DOS 6.22 |
Arrumá-los parece fácil, não? Pode até ser. O problema é que após a instalação de drivers diversos (como o da unidade de CD-ROM e da placa de som) e do Windows 3.X, a complexidade e o desarranjo deles vão sempre aumentando:
CONFIG.SYS e AUTOEXEC.BAT bagunçados após a instalação do Windows 3.11 e de drivers diversos |
Arrumando o CONFIG.SYS e o gerenciamento de memória do MS-DOS
O CONFIG.SYS é utilizado pelo MS-DOS para a carga de drivers de dispositivos e para configurar parâmetros diversos do sistema. O ideal para uma melhor compreensão do arquivo é agrupar a carga dos drivers e o ajuste dos parâmetros em blocos distintos. As linhas que começam com DEVICE são as que carregam os drivers.
Há duas formas de carregar drivers no MS-DOS: a opção DEVICE faz a carga na área de memória convencional, enquanto que a DEVICEHIGH carrega o driver na área de memória alta. Sempre é recomendável fazer a carga na memória alta, visto que quanto mais memória convencional disponível melhor. Além de o próprio MS-DOS funcionar melhor, há softwares antigos que utilizam apenas a memória convencional.
Para facilitar a compreensão, vou explicar rapidamente como é o gerenciamento de memória do MS-DOS. O diagrama abaixo ilustra o processo:
O gerenciamento de memória do MS-DOS. Coisa de louco! |
Que salada, não é? O gerenciamento de memória do MS-DOS se confunde com a própria evolução do padrão IBM PC. Vamos lá:
Memória convencional: os primeiros 640 KB, ficam disponíveis para os softwares e para o próprio sistema operacional.
Memória superior (Upper Memory Blocks - UMB): no design original do IBM PC a faixa entre os primeiros 640 KB e 1 MB de RAM ficou reservada para armazenar a memória de vídeo (VRAM), imagens das memórias ROM dos dispositivos e os seus endereços de I/O. Nem sempre este segmento fica totalmente preenchido, sendo possível aproveitá-lo. Veremos no momento oportuno como fazer isto.
Memória alta (High Memory Area – HMA): com o advento dos processadores 80286 e uma vez que os mesmos endereçam até 16 MB de RAM, foi criada esta nova segmentação de memória. O MS-DOS é capaz de acessar este intervalo com a ajuda de gerenciadores como o HIMEM.SYS.
Memória estendida: é tudo o que se encontra após os 16 MB iniciais até o máximo de 4 GB, que é o limite teórico de endereçamento de memória dos processadores x86 a partir dos 80386. Como o MS-DOS funciona no modo real não pode acessar esta memória diretamente, somente com a ajuda de softwares que chaveiam o processador para o modo protegido. O mais famoso deles é o DOS/4GW, utilizado por muitos jogos.
Existe ainda a chamada memória expandida (não confundir com a estendida!), utilizada por softwares gerenciadores tais como o EMM386.EXE que teoricamente permite acessar toda a RAM mesmo com o processador operando no modo real. Estes softwares aplicam técnicas de chaveamento de endereços de memória: alguns segmentos da memória convencional são mapeados para apontar para um ou mais conjuntos de endereços da memória estendida (aquela acima dos primeiros 16 MB), e o software gerenciador faz o chaveamento de modo transparente ao sistema operacional.
Mas voltando ao nosso CONFIG.SYS, vejam como o mesmo ficou depois de organizado:
Comentarei linha a linha:
DEVICE=C:\WINDOWS\HIMEM.SYS
Carrega o gerenciador HIMEM para o DOS poder acessar a área de memória alta. Não pode ser utilizado em conjunto com o DEVICEHIGH.
DEVICEHIGH=C:\DOS\SETVER.EXE
O SETVER.EXE pode ser considerado como o bisavô do modo de compatibilidade dos Windows modernos. Ele permite “enganar” aplicações específicas para reconhecerem o MS-DOS como se fosse de versões anteriores, muito útil para softwares que exigem serem executados em uma versão específica do DOS.
DEVICEHIGH=C:\DOS\DISPLAY.SYS CON=(EGA,,1)
Carrega o driver de vídeo padrão do MS-DOS.
DEVICEHIGH=C:\WINDOWS\IFSHLP.SYS
Incluído pelo Windows 3.11, permite acessar o disco rígido no modo de 32 bits mesmo no DOS.
DEVICEHIGH=C:\SBCD\DRV\SBIDE.SYS /D:MSCD001 /P:170,15 /V
Driver da unidade de CD-ROM IDE.
DOS=HIGH,UMB
Configura o MS-DOS para ser carregado na área de memória alta (HMA) e na área de memória superior (UMB), liberando mais memória convencional.
COUNTRY=055,,C:\DOS\COUNTRY.SYS
É como se fosse o mapa de caracteres do MS-DOS.
FILES=30
Especifica o número máximo de arquivos que podem ser abertos simultaneamente pelo sistema.
LASTDRIVE=Z
Define até quais letras poderão ser utilizadas para montar unidades de armazenamento.
STACKS=9,256
O parâmetro STACKS define as filas de pedidos de IRQ vindos dos dispositivos recebidos pelo MS-DOS. Aqui definimos o número dos pedidos (9) e o tamanho de cada um em bytes (de 32 a até 512 bytes). Salvo por uma necessidade muito especial (como algum componente de hardware exótico) estes valores sugeridos funcionam sem problemas. Para maiores informações sobre o conceito de IRQs, recomendo a leitura da postagem que fiz sobre o barramento ISA.
Deixo aqui uma “colinha” do CONFIG.SYS caso você queira aproveitá-lo em um PC antigo ou mesmo em uma máquina virtual:
DEVICE=C:\WINDOWS\HIMEM.SYS
DEVICEHIGH=C:\DOS\SETVER.EXE
DEVICEHIGH=C:\DOS\DISPLAY.SYS CON=(EGA,,1)
DEVICEHIGH=C:\WINDOWS\IFSHLP.SYS
DEVICEHIGH=C:\SBCD\DRV\SBIDE.SYS /D:MSCD001 /P:170,15 /V
DOS=HIGH,UMB
COUNTRY=055,,C:\DOS\COUNTRY.SYS
FILES=30
LASTDRIVE=Z
STACKS=9,256
Arrumando e incrementando o AUTOEXEC.BAT
O AUTOEXEC.BAT é um arquivo de lote que permite automatizar a entrada de comandos e a carga de aplicativos para a configuração do sistema. As premissas são as mesmas do CONFIG.SYS: organização do arquivo e a carga dos softwares na área de memória alta, o que pode ser feito pelo prefixo LOADHIGH ou simplesmente LH.
Eis aqui o mesmo já devidamente arrumado:
Vamos lá, com os comentários linha a linha:
@ECHO OFF
Imprime na tela apenas o resultado dos comandos, para um melhor conforto visual.
PROMPT $p$g
Configura a apresentação do prompt do DOS. Neste caso o mesmo ficaria no padrão C:\>.
PATH C:\WINDOWS;C:\DOS
Informa ao sistema o caminho dos arquivos tanto do Windows quanto do DOS.
SET TEMP=C:\TEMP
Configura o caminho dos arquivos temporários. Note que o diretório TEMP é apenas uma sugestão, devendo ser criado manualmente com o comando MD (Ex. MD C:\TEMP).
MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI)
MODE CON CODEPAGE SELECT=850
Ajusta as configurações de exibição dos caracteres, neste caso para o idioma PT-BR.
KEYB BR,,C:\DOS\KEYBOARD.SYS
Carrega o driver do teclado, neste caso no padrão Estados Unidos internacional. Se você tiver um teclado ABNT2 substitua esta linha por:
C:\DOS\KEYB BR,,C:\DOS\KEYBRD2.SYS /ID:275
LH C:\SBCD\DRV\MSCDEX.EXE /D:MSCD001 /V /M:8
Carrega o MSCDEX.EXE, utilitário que monta a unidade de CD-ROM atribuindo a letra D: à mesma. Se você quiser montar o CD-ROM em outra letra de unidade basta alterar o parâmetro.
SET SOUND=C:\SB16
SET BLASTER=A220 I5 D1 H5 P330 T6
SET MIDI=SYNTH:1 MAP:E
LH C:\SB16\DIAGNOSE /S
LH C:\SB16\MIXERSET /P /Q
Configura o endereçamento da placa de som (no caso uma Sound Blaster 16) e carrega o seu programa de diagnóstico (DIAGNOSE.EXE) e o mixer (MIXERSET.EXE). Veja mais detalhes sobre esta configuração aqui.
LH C:\WINDOWS\net start
Carrega o suporte a redes locais do Windows for Workgroups 3.11.
LH C:\DOS\SMARTDRV.EXE /X
O SMARTDRV.EXE é um software de cache de disco, o qual agiliza bastante as cópias de arquivos e outras operações com o disco rígido e com a unidade de CD-ROM.
LH C:\DOS\MOUSE.EXE
Carrega o driver de modo real para o mouse.
LH C:\DOS\DOSKEY.COM
O DOSKEY.COM é um utilitário muito prático que armazena os últimos comandos rodados no sistema. Agiliza bastante tarefas repetitivas.
Segue a cola do AUTOEXEC.BAT:
@ECHO OFF
PROMPT $p$g
PATH C:\WINDOWS;C:\DOS
SET TEMP=C:\TEMP
MODE CON CODEPAGE PREPARE=((850) C:\DOS\EGA.CPI)
MODE CON CODEPAGE SELECT=850
KEYB BR,,C:\DOS\KEYBOARD.SYS
LH C:\SBCD\DRV\MSCDEX.EXE /D:MSCD001 /V /M:8
SET SOUND=C:\SB16
SET BLASTER=A220 I5 D1 H5 P330 T6
SET MIDI=SYNTH:1 MAP:E
LH C:\SB16\DIAGNOSE /S
LH C:\SB16\MIXERSET /P /Q
LH C:\WINDOWS\net start
LH C:\DOS\SMARTDRV.EXE /X
LH C:\DOS\MOUSE.EXE
LH C:\DOS\DOSKEY.COM
Ufa! Espero que tenham gostado! Em uma futura postagem mostrarei opções avançadas do MS-DOS 6.22 tais como a criação de um menu de inicialização. Até lá!
Veja também:
A área de memória alta (Inglês área de memória alta, HMA) é a área da memória de acesso aleatório (RAM), composto pelos primeiros 64 kibibytes (KiB), menos 16 bytes de memória estendida em um IBM PC ou microcomputador compatível .
ResponderExcluirNo gráfico wikipedia diz 16MB - 4GB, porque só 286 pode endereçar até 16 MB de RAM e 4 GB 386 e superior.
Quanto à RAM estendida começa a partir de 1 MB à quantidade de RAM instalada. O expandiu era uma maneira de acessar essa memória acima de 1 MB de RAM dividindo-a em partes de 64 kb que foi copiado para um bloco de UMB para usá-lo.
Agradeço pela contribuição. As definições e o diagrama que reproduzi aqui foram baseados na literatura da época, que difere talvez apenas pela metodologia e didática. Interessante saber que o Wikipedia segue um padrão similar.
ExcluirLembro que o Alone in the Dark 3 utilizava muita memória convencional e, na época, tive que chamar um técnico para liberar mais pro jogo entrar. Na época diziam que não adiantava ter 4 ou 8mb de ram se o que vale são apenas os 640kb de memória convencional.
ResponderExcluirVerdade. O World Circuit (mais conhecido como GP1) também era um devorador de memória convencional, me lembro que suei na época para conseguir liberar memória convencional suficiente para ele rodar.
ExcluirGraças a Deus o NT acabou com isso tudo.
ResponderExcluirSobre o assunto, Rob Short, parte do seleto time de Dave Cutler que deixou a DEC indo para a MS no final dos anos 80, diz que achava os PCs da época muito pouco sofisticados e que entre seus interesses estava como melhorar o hardware, não apenas o software. Esta entrevista vale a pena:
https://channel9.msdn.com/Shows/Behind+The+Code/Rob-Short-Operating-System-Evolution
Verdade, mesmo no Windows 9X a importância dos arquivos CONFIG.SYS e AUTOEXEC.BAT já havia caído bastante. Digo que o MS-DOS é o exemplo perfeito da colcha de retalhos que é o padrão PC... :-)
ExcluirNo mais, obrigado pelo ótimo link!
Ô tempos bons! Saudades.
ResponderExcluirAgora, uma curiosidade. Mesmo PCs com um i7 8086 (que ainda não foi lançado) ainda precisam pelo menos dos primeiros 640k para inicializar por conta de particularidades do projeto do IBM PC.
1. Os BIOSes com SETUPs gráficos são carregados na memória estendida, né? E os clássicos (com a interface de texto) continuam sendo carregados na memória convencional?
2. Esses PCs e sistemas operacionais modernos fazem uso das memórias convencional, superior, alta, e expandida, para algum legado, tirando o armazenamento do SETUP dos BIOSes textuais na memória convencional?
Respondendo de cabeça:
Excluir1. Exatamente.
2. Pelo que me lembro apenas a memória convencional e superior são mantidas para fins de compatibilidade, isso considerando sistemas com kernel NT.
Cara, me salvou aqui....rs.... criei uma VM win98 no VBOX, pra poder rodar um CD Children's Melodies que vinha no kit multimídia Creative... 1993.... quem disse q eu me lembrava como configurar o ambiente DOS?... e olha q fiz isso d+.... Obrigado!
ResponderExcluirBom dia galera, estou com problema de um driver de rede fabricante Intel® 82583V para instalar no MS-Dos, baixei o driver e1000,dos, configurei o bloco de nota protocol e system quando inicia a aparece a mensagem "não a memória suficiente disponível" se eu pegar outra placa de rede fabricante diferente funciona normalmente.
ResponderExcluirMatheus Silvs
ResponderExcluir