Quando se fala em Knighmare, vem à minha mente este jogo da Activision, mas não é o caso desta vez. O Knightmare a que estou me referindo é um grande sucesso do MSX que agora foi finalmente portado para o ZX Spectrum, mas somente para o modelo 128K.
Eduardo Luccas resolveu testar este jogo na TKMEM-128, mas não funcionou. Segundo sua descrição, não é que o jogo seja inoperante, mas só aparece a tela do menu paralisada, apesar do som indicar que está funcionando.
Baixei o jogo do blog Bytemaniacos e rodei no emulador Fuse para verificar o que acontecia. Olhando no debugger, pude verificar que periodicamente era enviada à porta 32765 um byte com bit 3 ora em nível alto, ora em nível baixo. Isto indica que haveria uma alternância entre o vídeo principal e o vídeo shadow, provavelmente usando a técnica de double buffering. Notei ainda que a área de vídeo principal na página 1 nunca era escrita, apesar de observar que a tela sofria rolamento (scroll).
Ocorre que o vídeo principal localiza-se no banco de RAM 5 que se localiza normalmente na página 1, e o secundário no banco 7. Apesar do acesso normal ao banco 5 ser na página 1, para não ter que duplicar a rotina de escrita no vídeo, o programador preferiu acessá-lo na página 3, onde pode ser chaveada tanto este banco como o banco 7 (para saber mais, veja esta postagem).
O problema surgiu porque o protótipo do TKMEM não faz o espelhamento (mirroring) do banco 5, que permitiria que fosse acessado simultaneamente pela página 1 (16384-32767) como pela página 3 (49152-65535). Velesoft apresentou uma nova versão do firmware que ativaria o espelhamento. Teoricamente bastaria regravar o GAL para que este jogo passe a funcionar no protótipo de expansão de memória.
Uma outra solução seria modificar a rotina de escrita da memória de vídeo do programa, eu até acredito que irá dar resultados melhores, porém o trabalho seria considerável. Vou deixar na lista dos afazeres futuros, mas sem promessa de prazos... Se alguém quiser tocar este projeto no meu lugar, seria muito bom!
Para finalizar, eu gostaria de ressaltar que é o primeiro caso que vi do uso de espelhamento do banco 5 na página 3. Não sei se existe algum outro caso assim.
Baixei o jogo do blog Bytemaniacos e rodei no emulador Fuse para verificar o que acontecia. Olhando no debugger, pude verificar que periodicamente era enviada à porta 32765 um byte com bit 3 ora em nível alto, ora em nível baixo. Isto indica que haveria uma alternância entre o vídeo principal e o vídeo shadow, provavelmente usando a técnica de double buffering. Notei ainda que a área de vídeo principal na página 1 nunca era escrita, apesar de observar que a tela sofria rolamento (scroll).
Ocorre que o vídeo principal localiza-se no banco de RAM 5 que se localiza normalmente na página 1, e o secundário no banco 7. Apesar do acesso normal ao banco 5 ser na página 1, para não ter que duplicar a rotina de escrita no vídeo, o programador preferiu acessá-lo na página 3, onde pode ser chaveada tanto este banco como o banco 7 (para saber mais, veja esta postagem).
O problema surgiu porque o protótipo do TKMEM não faz o espelhamento (mirroring) do banco 5, que permitiria que fosse acessado simultaneamente pela página 1 (16384-32767) como pela página 3 (49152-65535). Velesoft apresentou uma nova versão do firmware que ativaria o espelhamento. Teoricamente bastaria regravar o GAL para que este jogo passe a funcionar no protótipo de expansão de memória.
Uma outra solução seria modificar a rotina de escrita da memória de vídeo do programa, eu até acredito que irá dar resultados melhores, porém o trabalho seria considerável. Vou deixar na lista dos afazeres futuros, mas sem promessa de prazos... Se alguém quiser tocar este projeto no meu lugar, seria muito bom!
Para finalizar, eu gostaria de ressaltar que é o primeiro caso que vi do uso de espelhamento do banco 5 na página 3. Não sei se existe algum outro caso assim.
Parabéns Flávio! Apesar de meu conhecimento não ser tão aprofundado (não sei nada de ASM), sempre procuro ler seus posts para, pelo menos, ter noção do que está acontecendo!
ResponderExcluirParabéns pelo seu empenho!
Aprender assembly não é tao difícil, mas fazer algo de útil com essa linguagem é que não é fácil. Valeu, Branco!
Excluir