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 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 | ROM 2 | ROM 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:
Enviar um comentário