4. SEÇÃO DO ESPECIALISTA A seguir damos uma série de informações técnicas que recomendamos que sejam lidas apenas por aqueles que tenham um mínimo de conhecimentos sobre a linguagem de máquina e sobre o BIOS do MSX. São aqui dadas informações sobre os processos para se desabilitar um slot qualquer a partir de software. Quando ligamos um micro de padrão MSX inicia-se automaticamente uma série de testes de hardware e software. Se tudo correr bem nessa fase, o processo acaba com o aparecimento de mensagem do fabricante e a liberação do cursor para o usuário. A verificação de software e hardware inclui a localização de todos os Expansores de Slots que existirem. É na verdade, esta a primeira preocupação do micro: a constatação da presença de um expansor de slots em cada um dos slots primários. Essas verificações iniciais (que chamaremos start-up) são efetuadas em 2 estágios: um pelo BIOS e outro pelo BASIC residente (interpretador). Ao final do primeiro estágio, os seguintes itens estarão definidos: 1- Conteúdo definitivo do registro 0A8h da PPI, ajustado nas páginas 0 e 1 do slot primário zero e páginas e páginas 2 e 3 dos demais slots. 2- Os registros dos Expansores terão o último valor usado na busca da RAM, com exceção do eleito com a RAM nas páginas mais próximas do slot primário zero. 3- A únicas variáveis do sistema inicializadas serão EXTBL e SLTBL. EXTBL indica quais os slots primários que se encontram expandidos, enquanto SLTBL contém uma cópia do último usado nos registros dos expansores encontrados. EXTBL= quatro bytes a partir de FCC1h (se o slot estiver expandido, nele será armazenado o valor 80h: slot primário 0 - FCC1h slot primário 1 - FCC2h slot primário 2 - FCC3h slot primário 3 - FCC4h). Sy= quatro bytes indicados em FCC5h. A seguir começa o start-up comandado pelo BASIC residente. Enquanto a verificação de BIOS concentra-se mais na integridade do hardware, a verificação do BASIC diz respeito a integridade dos softwares e a sua identificação e inicializações. A seguir, damos explicações sobre algumas variáveis que controlam os slots e os respectivos expansores. A primeira delas é EXTBL que possui 4 bytes. Cada um desses bytes diz respeito a um slot primário pode possuir apenas dois valores: 00h ou 80h. O valor 80h em um desses bytes assinalará a presença de um expansor de slots secundários no slot primário respectivo. Esta variável é ajustada pelo BIOS no start-up. Conforme especificações do padrão MSX, preparadas pela Microsoft, o registro de controle de um slot expandido deve estar endereçável em memória RAM e não em E/S, na posição FFFFh do slot primário em que se encontra o expansor. Para que essa posição não seja confundida com uma posição da RAM ordinária, o expansor deve responder, no caso da leitura a esta posição com o complemento do seu conteúdo. Essa resposta dá certeza ao BIOS de que naquele slot primário existe um expansor; ao contrário, se ali existisse uma expansão de memória apenas, a resposta em FFFFh seria com o mesmo valor escrito. Os bits do registro FFFFh do expansor têm o seguinte significado: bits 0 e 1 - página 0 de um dos 4 slots secundários bits 2 e 3 - página 1 de um dos 4 slots secundários bits 4 e 5 - página 2 de um dos 4 slots secundários bits 6 e 7 - página 3 de um dos 4 slots secundários Para se acessar este registro diretamente, devemos desabilitar as interrupções, setar a página 3 do slot primário requerido no registro 0A8h da PPI e em seguida escrever na posição de momória FFFFh o valor desejado. Podemos concluir facilmente que cada expansor possui 16 páginas e o padrão MSX possui 4 slots primários tendo-se assim a possibilidade de se trabalhar com até 64 páginas de memória. Isto é teórico, já que micros nacionais têm apenas dois slots primários acessíveis. A variável SLTATR possui 64 bytes, um para uma das posições das páginas acima citadas. Esta variável é muito importante para o manuseio de cartuchos no expansor de slots. Cada 16 bytes consecutivos pertencem a 1 slot primário a cada 4 bytes seguidos pertencem a 1 slot secundário possuindo assim, a seguinte configuração: (Valores em hexadecimal) SLOT PRIMÁRIO ZERO pg.0 pg.1 pg.2 pg.3 Secund. FCC9 FCCA FCCB FCCC 0 FCCD FCCE FCCF FCD0 1 FCD1 FCD2 FCD3 FCD4 2 FCD5 FCD6 FCD7 FCD8 3 SLOT PRIMÁRIO UM pg.0 pg.1 pg.2 pg.3 Secund. FCD9 FCDA FCDB FCDC 0 FCDD FCDE FCDF FCEO 1 FCE1 FCE2 FCE3 FCE4 2 FCE5 FCE6 FCE7 FCE8 3 SLOT PRIMÁRIO DOIS pg.0 pg.1 pg.2 pg.3 Secund. FCE9 FCEA FCEB FCEC 0 FCED FCEE FCEF FCF0 1 FCF1 FCF2 FCF3 FCF4 2 FCF5 FCF6 FCF7 FCF8 3 SLOT PRIMÁRIO TRÊS pg.0 pg.1 pg.2 pg.3 Secund. FCF9 FCFA FCFB FCFC 0 FCFD FCFE FCFF FD00 1 FD01 FD02 FD03 FD04 2 FD05 FD06 FD07 FD08 3 Cada um desses endereços tem uma função importante para os sistema. Fim do processo de inicialização do BIOS, o início do start-up do BASIC varre todos os possíveis slots (secundários inclusive), a procura de estensores de ROM para inicializá-las, transferindo o controle do sistema para os programas residentes nas mesmas. Esta rotina assinalará em cada uma das posições da tabela de 64 bytes de SLTATR o tipo de ROM que se encontra na página correspondente. Isto é feito nos bits 5, 6 e 7 de cada byte, com o seguinte critério: BIT 5 - Handler para comando CALL do BASIC BIT 6 - Handler de um dispositivo Quando a rotina transfere o controle para um cartucho, isto é armazenado no stack e não numa variável. Assim, se quisermos mudar o curso da inicialização, teremos de localizar em que posição do stack se encontra o ponteiro para alterarmos o mesmo. Outra atitude a ser tomada é ajustar os ponteiros EXTBL e SLTATR, que também se encontram no stack, e setar o tipo de ROM correspondente é de controle que o usuário estiver manipulando.