Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
01/02/1993

< Até Aqui, Tudo Bem... >


Hoje continuamos nossa jornada em busca de mais memória convencional entrando no escorregadio terreno dos blocos de memória superior, os UMB. Se você está animado pela facilidade com que jogamos todo o código do DOS para a HMA e acha que "Até aqui, tudo bem", permita-me lembrá-lo que era exatamente este o estado de espírito do incurável otimista que caiu do vigésimo andar - quando passava pelo terceiro. Pois, daqui pra frente, vai ser dureza. Primeiro porque, gostando ou não, agora vamos ter que raciocinar em hexadecimal. Depois, porque o processo de definir o que pode ser carregado nos UMB é doloroso e pontilhado de insucessos. O que, afinal, não é tão ruim assim: o bom micreiro só se sente realmente feliz depois de vencer um duro desafio. Você vai ver, ao subjugar o dragão que se esconde entre os 640K e 1Mb a espreita dos incautos, como é boa a sensação de vencer um bom combate. Então, ao trabalho. Começando por exorcizar o fantasma do números em hexa, já que os endereços de memória com que iremos trabalhar são assim expressos. Mas não tem problema: afinal, somente usamos o sistema decimal porque a natureza nos deu dez dedos. Tivéssemos doze, usaríamos um sistema numérico muito mais prático. E com dezesseis dedos, a vida dos micreiros seria muito mais fácil. Pois o sistema hexadecimal é exatamente igual ao decimal. Só muda a base, de dez para dezesseis. Portanto, ao invés de zero a nove, como o decimal, ele precisa do zero mais quinze algarismos. O que obrigou a se adotar novos símbolos para os seis que faltam. Para não complicar mais ainda, convencionou-se usar as seis primeiras letras do alfabeto. Os algarismos até nove são os mesmos do decimal. Depois, vem o A, (que, vindo após o nove, vale evidentemente dez), o B, o C, o D, o E e o F, que vale quinze. E dezesseis, como é? Ora, fácil: no sistema decimal depois do nove vem o dez (ou seja, o "1" é deslocado uma "casa" para a esquerda e entra o zero, para formar dez, a base). No hexadecimal ocorre o mesmo: depois do F vem o 10. Só que vale dezesseis, a sua base. Complicado? É mesmo. E mais: como saber que o 10 aí de cima é hexadecimal? Para evitar confusão, convencionou-se acrescentar um "h" depois dos números em hexa. Então 10h vale dezesseis e não dez. Não espere encontrar aqui um curso de hexadecimal. Lamento, mas não dá: vamos nos limitar ao essencial para poder fuçar a memória. Por exemplo: qual o maior número que cabe em quatro dígitos hexadecimais? Ora, FFFFh, naturalmente (pensou que era 9999? Ora, meu amigo, em hexa. Agora é em hexa! Pense no Bussunda dizendo isso e tome tenência, companheiro!). Vou lhe poupar o trabalho de converter: FFFFh vale exatamente 65535 em decimal. Nosso conhecido 64K, o maior número que "cabe" em dezesseis bits. Como no sistema decimal - ou qualquer outro sistema numérico posicional cada vez que um algarismo "anda" uma posição (ou "casa") para a esquerda, é multiplicado pela base. Como a base é igual ao maior número que "cabe" em quatro bits (16), fica muito mais fácil trabalhar em hexa para perscrutar as entranhas da memória. Então é por isto que um segmento de memória vale 64K! Mas o que acontece se acrescentarmos um ao FFFFh? O mesmo que quando acrescentamos um a 9999: vira 10000. Só que 10000h vale 65536, um a mais que 64K, o primeiro endereço do segundo segmento. Acrescente mais 64K e chegue a 1FFFFh. Aí, acrescente mais um: pronto, estamos no 20000h, já no terceiro segmento. E como exprimir, em hexa, 640K, o tamanho da memória convencional? Fácil, já que nela cabem dez segmentos de 64K cada. E o final do décimo segmento fica em 9FFFFh. Somando mais um, dá A0000h. O início dos UMB, enfim. Agora é fácil. Pois nos UMB só cabem seis segmentos. Que começam em A0000h, B0000h, C0000h, D0000h, E0000h e F0000h respectivamente. E o último acaba em FFFFFh. Adivinhou: o que antecede imediatamente a 1Mb, o maior número que "cabe" em 20 bits, o maior endereço que um 8088 "enxerga" com suas vinte linhas de endereçamento. Entendeu agora porquê? Isso, cada "F", quatro bits... Pronto. Como diria o sorridente dentista (nunca consegui entender por que, mas eles sempre sorriem nestas horas) com seu dente engastado no boticão e já fora de sua boca: não vai doer mais. Chega de discutir sistema hexadecimal. Agora, vamos usá-lo. E usá-lo para conhecer os ocupantes originais dos UMB. Sim, porque, a pesar de haver muito espaço livre por ali, o trecho entre A0000h e FFFFFh não está vazio. Os dois primeiros segmentos, por exemplo, que vão de A0000h até BFFFFh, são destinados à memória de vídeo. Se o vídeo for VGA, ambos estarão ocupados. Se não for, mais tarde aprenderemos como usar o pedaço que sobra. O terceiro segmento dos UMB, que começa em C0000h, em geral é usado por programas em ROM das placas adaptadoras. Mas não todo. Por exemplo: a própria placa de vídeo costuma usar um trecho inicial, de até 32K, para um programa em ROM que controla o vídeo, assim como as controladoras de discos usam mais um trecho que em geral começa no endereço C8000h. Mas sempre sobra algo. Já o próximo segmento, cujo início está em D0000h, quase sempre está todo livre. Se bem que algum pedaço possa ser usado por programas em ROM (por exemplo, certos adaptadores SCSI usam os 32K que começam no endereço DC000h e se estendem até o final do segmento). Sobram dois segmentos. O que começa em E0000h em geral é usado para a "moldura" da memória expandida. Se seus programas não usam memória expandida, ele fica livre. Mas, para usá-lo, teremos que tomar certas providências que aprenderemos adiante. Finalmente, o último segmento está interditado: inicialmente ele era usado para um Basic gravado em ROM que integrava os primeiros computadores da IBM. Depois, passou a ser usado pelo próprio sistema, sempre para código gravado em ROM. Podemos desistir dele. Pronto. Dados os trâmites por findos, podemos concluir que, garantido mesmo, temos algum espaço nos segmentos C0000h e D0000h, e mesmo assim somente o que sobrou depois que os programas em ROM ocuparam seus nichos. Em geral é o bastante. Se não for, aprenderemos a garimpar mais alguma coisa fora deles. Semana que vem, claro...

B. Piropo