terça-feira, 19 de fevereiro de 2013

Espelhamento de bancos de RAM

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.

Nenhum comentário:

Postar um comentário

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