terça-feira, 28 de agosto de 2012

Memórias no Spectrum128 e no TKMEM-128

Fiquei um tempo sem postar, mas não quer dizer que estava parado no hobby. Eu e o Eduardo Luccas estivemos testando a interface de 128KB para o TK90X, a TKMEM-128, para vermos as suas possibilidades e limitações. Interessante é que nós nunca nos encontramos pessoalmente, e muito menos com o autor original da expansão, o Velesoft da República Tcheca.

Fonte: Wikipédia.

Por eu ainda não possuir esta expansão, todo o trabalho tem sido feito no emulador Fuse. Para simular o TK90X com TKMEM, seleciono o modo Spectrum 128 (Machine > Select > Spectrum 128K):


com ambas as ROMs definidas como de TK90X (Options > Select ROMs > Spectrum 128K...).

Não há como desativar a 2ª página de vídeo (shadow video) na emulação, característica que está ausente no TK90X com TKMEM. Outra incompatibilidade é a ausência da interface Beta 48, por isso eu uso como quebra-galho a emulação da Beta 128. Concluindo, o fato de funcionar no emulador não é garantia de sucesso no TK real.

O funcionamento das 128K de RAM está bem descrito neste FAQ (em inglês), mas farei mesmo assim uma descrição resumida. O Z80 consegue endereçar no máximo 65536 bytes (64 KB), portanto no Spectrum 128 foi criado um circuito extra para contornar esta deficiência. Para entender melhor, é necessário introduzir alguns conceitos.

O primeiro conceito é o de página de memória. Uma página é uma região contínua de endereço de memória diretamente acessível ao microprocessador. No Spectrum 128 uma página é composta de 16384 bytes (16 KB), portanto existem 4 páginas acessíveis:
  1. página 0 (0-16383 ou #0000-#3FFF) ocupada pela ROM;
  2. página 1 (16384-32768 ou #4000-#7FFF) com RAM;
  3. página 2 (32768-49151 ou #8000-#BFFF) com RAM;
  4. página 3 (49152-65535 ou #C000-#FFFF) com RAM.
Outro conceito importante é o de banco de memória, que corresponde a uma porção contínua dentro da memória física existente. No Spectrum 128, a RAM física é dividida em 8 bancos de 16 KB cada. Cada banco é identificada por um número entre 0 a 7.

Como o número de bancos de RAM é maior do que o número de páginas disponíveis, é impossível acessar todos eles simultaneamente; o que o circuito do Spectrum faz é atribuir um banco de memória para cada página. A página 1 está associada permanentemente ao banco 5 e a página 2, ao banco 2.

A página 3 é a única em que se pode atribuir qualquer um dos 8 bancos de RAM, inclusive os bancos 2 e 5 (estes já se encontram nas páginas 2 e 1, respectivamente). A seleção do banco da página 3 é feita pela porta 32765 (ou #7FFD) no modo de escrita (OUT). Os bits D0, D1 e D2 especificam qual banco entre 0 (0) a 7 (%111) ocupará esta página.

A porta 32765 tem outras funções. Em resumo:
  • D0-D2: seleciona banco de RAM da página 3;
  • D3: seleciona para exibição, o vídeo normal (0) ou o shadow video (1);
  • D4: seleciona ROM 0 (BASIC 128) ou ROM 1 (BASIC 48) da página 0;
  • D5: uma vez que este bit receba valor 1, a porta não aceitará mais nenhum comando até o Spectrum ser desligado ou sofrer reset
  • D6-D7: usados em computadores como Pentagon
Para selecionar os diferentes bancos de RAM, deve-se usar a instrução OUT no assembly Z80 ou no BASIC com o bit D4 levantado (caso contrário, ativa-se a ROM 0). Portanto: OUT 32765,16 seleciona banco 0, OUT 32765,17 seleciona banco 1 e assim por diante, até OUT 32765,23 para o banco 7. Alguns cuidados devem ser tomados enquanto se troca o banco da página 3: as interrupções devem ser desativas no modo BASIC 128, e o apontador de pilha do Z80 (SP) deve localizar-se em endereço abaixo de 49152.

Na TKMEM-128 há algumas diferenças. Não há a ROM do BASIC 128, nem o shadow video. Outra diferença é que o banco 5 realmente não aparece na página 1, pois os 16KB desta região é a RAM do próprio TK90X. O banco 5 do TKMEM pode ser utilizado de forma independente, portanto há no total 144 KB ao invés de 128 KB.

Atualização em 02/02/2013: na versão da TKMEM-128 foi implementada a ROM 128, ativada através de jumpers

Nenhum comentário:

Postar um comentário

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