quinta-feira, 21 de junho de 2012

É possível adaptar jogos do Spectrum 128 para TK90X com Beta 48?

Depois de ter conseguido adaptar o Typhoon 128 para o Beta 48, apareceram sugestões de adaptar outros jogos do ZX Spectrum 128 para funcionarem no TK90X com interface de drive. Acabei adaptando o Typhoon 128 meio que por acaso, mas quem sabe se não existem versões 128 de outros jogos em que caberiam o mesmo procedimento? Nesta postagem levantarei algumas considerações a respeito das dificuldades e viabilidade de tais adaptações.


Organização da RAM do Spectrum 128

O Z80 consegue endereçar somente 64 k de memória no total, não há como a CPU do Spectrum acessar simultaneamente os 128 k de RAM disponíveis. O que se faz então é dividir os 128 k em pedaços menores conhecidos como páginas. No Spectrum cada página tem 16 k de tamanho, portanto a RAM é dividida em 8 páginas.

Os endereços entre 49152 a 65535 admitem a seleção de uma entre as 8 páginas de RAM, portanto apesar de não ser possível acessar todos os 128 k de uma vez, é possível acessar cada página por vez. As páginas são numeradas de 0 a 7 e, normalmente, a página 0 é que ocupa a área acima de 49152. A página 2 é a mesma RAM localizada entre os endereços 32768 a 49151, e a página 5, a mesma da que está entre 16384 a 32767. Assim, na prática, as páginas 0, 1, 3, 4, 6 e 7 são as disponíveis para serem selecionadas.

Para definir a página a ocupar a região 49152-65535 escreve-se na porta #7FFD (32765) um valor de 8 bits através da instrução OUT. Os bits D0 a D2 especificam qual página de RAM será selecionada. Deve-se tomar cuidados no uso desta porta, pois os demais bits também são usados no Spectrum 128 (vide maiores detalhes neste FAQ).

Como adaptar para o Beta 48?

A resposta conceitualmente é fácil: quando o jogo requisitar a seleção de nova página, basta carregá-la do disco. É algo parecido com o esquema de carregamento multiload de jogos em fitas cassetes. Bastaria então salvar o conteúdo de cada página de RAM no disco e alterar o programa para que, ao invés de chavear a página, busque o arquivo no disquete.

Entretanto há algumas dificuldades que devem ser consideradas:
  1. O chaveamento de páginas não deve ocorrer com muita frequência, pois o acesso ao disquete é muitas vezes mais lento do que à RAM.
  2. O jogo não deve fazer uso da ROM do Spectrum 128.
  3. Tampouco deve fazer uso da segunda área de vídeo do Spectrum 128.
  4. Se o jogo faz operação de escrita na RAM a partir de 49152, torna-se necessário permitir a gravação da página no disquete, não somente a leitura.
Os aspectos acima listados podem ser investigados com o uso de um emulador.

Candidatos a conversão

Alguns jogos foram sugeridos na lista TK90X, outros foram curiosidades minhas: Auf Wiedersehen Monty, Chase HQ, Midnight Resistance Target Renegade e Where Time Stood Still.

Carreguei cada um deles no emulador Fuse em modo 128k e depois, no debugger, criei um breakpoint para ocasiões em que a porta #7FFD for escrita. O comando correspondente é: br port w 0x7ffd. Com isto dá para ter uma ideia da frequência com que ocorre o chaveamento. Neste quesito, somente o Chase HQ não teve tanto acionamento do breakpoint. Todos os demais jogos chaveiam excessivamente as páginas de RAM e, como consequência, iria demandar carregamento de arquivo do disco a todo instante.

Examinei com um pouco mais de detalhes o Midnight Resistance. Nele o chaveamento ocorre a cada interrupção mascarável, para executar a rotina responsável pela música do PSG AY-3-8912. No TK90X ocorrem 60 interrupções por segundo. Imagine o que seria ter de carregar um arquivo do disco a cada interrupção. Para contornar o problema, o som PSG poderia ser desativado por completo. Entretanto qual seria a graça de fazer uma adaptação assim, se o som é um dos principais diferenciais no 128?

Assim, da lista inicial, sobrou só o Chase HQ com alguma viabilidade de adaptação, mas mesmo assim não é 100% de certeza. Se os leitores tiverem mais sugestões, podem fornecer que tentarei ao menos estudar a viabilidade.

Nenhum comentário:

Postar um comentário

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.