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:
- 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.
- O jogo não deve fazer uso da ROM do Spectrum 128.
- Tampouco deve fazer uso da segunda área de vídeo do Spectrum 128.
- 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.
loading...
Conforme prometido, esta postagem explicará o que vem a ser o espelhamento (mirroring) de bancos de RAM no Spectrum 128 e na TKMEM-128. Como já foi explicado antes, o Z80 não tem como acessar simultaneamente mais do que 64KB de memória. A solução...
Apesar de já ter comentado sobre esta porta de entrada e saída (I/O) do Spectrum 128 e da TKMEM-128, julguei conveniente repetir, pois ajudará na compreensão da listagem BASIC publicada ontem. Fonte: Wikipédia Esta é uma das novas portas introduzidas...
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....
A adaptação de jogos para Spectrum 128 para um TK90X com a TKMEM 128 e a Beta 48 envolve procedimentos bastante parecidos com os que foram explicados nos tutoriais anteriores. O principal diferencial é a necessidade de carregar os diferentes banco...
O TKMEM-128 não tem a ROM 0 do Spectrum 128, mas não é muito difícil gravar uma EPROM e fazer uma mod na interface. Com isto, o TK90X ficaria mais semelhante ao Spectrum 128 e seria possível usar o BASIC 128. Aqueles que usam o emulador obrigatoriamente...