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 é dividir a RAM física em partes menores conhecidas como bancos, ao mesmo tempo que se divide o endereçamento do microprocessador em porções de mesmo tamanho, conhecidas como páginas.
Os bancos de memória Spectrum 128/TKMEM-128 são de 16KB, portanto há 8 bancos de RAM que totalizam 128KB. Cada banco é identificados por um número, que pode variar de 0 a 7.
Os 64KB acessíveis ao Z80 são divididas em 4 páginas de 16KB. Na página 0 (endereços 0-16383 ou #0000-#3FFF) fica a ROM e as demais, são preenchidas com a RAM. No caso do Spectrum, a página 1 (16384-32767 ou #4000-#7FFF, onde fica a RAM de vídeo) é ocupada pelo banco 5, a página 2 (32768-49151 ou #8000-#BFFF) pelo banco 2 e a página 3 (49152-65535 ou #C000-#FFFF), inicialmente pelo banco 0 mas, através da porta 32765, pode abrigar qualquer um dos 8 bancos de RAM.
Quando é selecionado o banco de RAM 2 na página 3, este é repetido na página 2. Nesta situação, o conteúdos das páginas 2 e 3 serão idênticos, pois são ocupadas pelo mesmo banco. Portanto se diz que a página 3 está espelhando a página 2.
Situação semelhante ocorre com a página 1 que pode ser espelhada pela página 3, se for selecionado o banco de RAM 5. Como a página 1 contém a RAM de vídeo, pode-se fazer uma coisa inusitada como imprimir na tela a partir do endereço 49152, ao invés de 16384, procedimento adotado em Knightmare ZX.
O problema é que no
TK90X com TKMEM-128, a página 1 é ocupada pela RAM interna e não pelo banco 5 da expansão. Como a RAM de vídeo está sob controle direto da
ULA, não há como um periférico externo tomar conta dela. Portanto a RAM na página 1 e do banco 5 são coisas distintas na TKMEM-128.
Existem duas versões de
firmwares para GAL da TKMEM-128 elaboradas por Velesoft, sendo que a mais antiga não provê espelhamento para o banco 5. Na
firmware mais nova, o banco 5 espelha tudo que é escrito na RAM interna. Por exemplo, se um
byte for escrito na RAM de vídeo durante impressão na tela, também será escrito na posição correspondente no banco 5.
Entretanto a compatibilização é apenas parcial, pois a RAM interna não pode espelhar o que for escrito no banco 5. Isto ocorre porque uma expansão externa não pode interferir na RAM ligada diretamente à ULA (talvez não seja totalmente verdade, pois se poderia usar /BUSREQ). Por exemplo, escrevendo no endereço 49152 sobre o banco 5, não se altera o endereço 16384. No caso do Knightmare ZX, o programa não funciona por causa desta incompatibilidade.
loading...
Conforme tinha prometido na postagem sobre incompatibilidade do Bubble Bobble, eu vou mostrar a rotina de detecção de tamanho de RAM 48/128K que elaborei na ocasião. A ideia era fazer uma rotina que não altere o conteúdo da RAM a ser testada;...
A ROM 128 faz um teste simples dos 8 bancos de RAM que pode ser empregado na TKMEM-128. Criado a partir de fotos de Leonardo Suárez e WOS Existe um trabalho de disassembly dos dois bancos de ROMs do ZX Spectrum 128, cujas listagens estão neste link....
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...