segunda-feira, 2 de março de 2020

Paginação em 128K (I)

Enquanto no modelo do ZX Spectrum 48K, só existe a ROM de 16KB e RAM de 48KB, saiu em 1985 o modelo de 128K.

O processador Z80 só endereça 64KB. Para endereçar 128KB, é necessário recorrer ao conceito de paginação. Não existindo hardware dedicado que trate de uma forma transparente de paginação, é necessária mudar posições de páginas, directamente através de portas de input/ouput para aceder a mais RAM.

No caso do ZX Spectrum 128K,  as páginas têm 16KB, distribuídas por 8 bancos.

No entanto, (ab)usar da paginação requer algumas cautelas. Ao trocar posição de páginas:
  • Os interrupts devem ser desactivados;
  • O stack não deve ser movido de sitio;
  • Os apontadores stacks aplicacionais da ROM também não devem ser movidos de sitio, especialmente se se pretende voltar ao BASIC ou usar rotinas da ROM;
  • A rotina actual C/M não deve ser movida;
  • Caso se pretenda voltar ao BASIC, a zona de BASIC e variáveis também não deve ser mexida;
  • O valor enviado para a porta de paginação deve ser copiado na variável correspondente de RAM;
  • Ao reactivar as interrupts, o endereço de interrupt deve ter uma rotina válida;
  • Os valores enviados para os ports, devem ser copiados para as variáveis a este efeito destinadas;
  • Algumas destas condições podem ser ignoradas caso se faça inicialização com outra ROM, depois de definir o esquema de paging.
Os bancos de RAM também têm usos especiais pelas ROMs. Os bancos 1,3,4 e 6 são usados para cache de disco e RAMdisc, enquanto o banco 7 é usado para espaço temporário do editor e do +3DOS. Portanto, usar os 128K em paginação, recomenda-se usar a partir de código máquina e não de rotinas BASIC.

Note-se que a paginação deve ser feita entrando em modo BASIC 128.

128K

No caso do 128K, a porta $7ffd controla o comportamento de paging.

Port
Bit
7
6
5
4
3
2
1
0
$7ffd


Disable Paging
ROM low
Active Screen
RAM Bank

O bit 5, desliga a funcionalidade de paging, não sendo possível reactivar a funcionalidade sem desligar o computador.

O bit 4 selecciona o banco de ROM, sendo 0 o 128k editor, e 1 a ROM de 48K BASIC.

O bit 3 define o ecrã activo, sendo 0 o primeiro ecrã e 1 o ecrã secundário.

Do bit 0-2 define a página activa na posição $C000

A cópia em RAM do último valor enviado para esta porta está na posição de memória $5b5c.

$FFFF
-
$C000
Bank 0
Bank 1
Bank 2
Bank 3
Bank 4
Bank 5
(screen 0)
Bank 6
Bank 7
(screen 1)
$BFFF
-
$8000
Bank 2

$7FFF
-
$4000
Bank 5
(screen 0)

$3FFF
-
$0000
ROM 0
ROM 1

Neste mapa, podem-se escolher entre duas ROMs, e em $C000, 7 bancos de páginas RAM.

Os bancos 5 e 7 são bancos especiais, em que o banco 5 é o ecrã 0, e o banco 7 o ecrã 1.

128K +2A/+2B/3

Nos modelos de Amstrad a funcionalidade de paginação foi ampliada. Notavelmente com a capacidade de paginar RAM em cima de ROM, e ter 4 ROMs em vez de 2.

Ou seja:
ROM 0 -> 128K editor
ROM 1 -> 128K syntax checker
ROM 2 -> +3DOS
ROM 3 -> 48K BASIC

Além de responder à porta $7ffd, copiada em $5b5c, como nos modelos anteriores de ZX Spectrum 128K, também ganhou uma nova porta de controle de paginação, a $1ffd.

Port
Bit
7
6
5
4
3
2
1
0
$1ffd



Printer Strobe
Disk Motor
ROM high

0
Special paging
1

Bit 0: se 1 paginação especial; se a 0 normal.

Se paginação normal, o bit 2 define o bit alto para definir a ROM, enquanto o bit 4 de $7ffd define o bit baixo, permitindo assim paginar 4 ROMs.

Se paginação especial, os bits 2 e 1 definem o modo.

A cópia em RAM do último valor enviado para esta porta está na posição de memória $5b67.

O mapa de combinações possíveis de paginação também mudou:

Modo de paginação normal

$FFFF
-
$C000
Bank 0Bank 1Bank 2Bank 3Bank 4Bank 5
(screen 0)
Bank 6Bank 7
(screen 1)
$BFFF
-
$8000
Bank 2
$7FFF
-
$4000
Bank 5
(screen 0)
$3FFF
-
$0000
ROM 0ROM 1ROM 2ROM 3

Neste mapa, podem-se escolher entre quatro ROMs, e em $C000, 7 bancos de páginas RAM.

Os bancos 5 e 7 são bancos especiais, em que o banco 5 é o ecrã 0, e o banco 7 o ecrã 1.

Modo de paginação especial

O modo de paginação especial tem 4 modos diferentes, cada qual com o seu esquema de ordenamento de bancos.

O principal interesse destes modos especiais, é poder mapear RAM em cima de RAM. O modo 1 poderá também ter o seu interesse para mapear RAM e usar double caching de vídeo por hardware.


mode 0
mode 1
mode 2
mode 3
$FFFF
-
$C000
Bank 3
Bank 7 (screen 1)
Bank 3
Bank 3
$BFFF
-
$8000
Bank 2
Bank 6
Bank 6
Bank 6
$7FFF
-
$4000
Bank 1
Bank 5 (screen 0)
Bank 5 (screen 0)
Bank 7 (screen 1)
$3FFF
-
$0000
Bank 0
Bank 4
Bank 4
Bank 4

ver:
https://www.worldofspectrum.org/faq/reference/128kreference.htm
https://spectrumforeveryone.com/technical/spectrum-compatibility-issues/

Sem comentários:

Publicar um comentário