Clique sobre os objetivos listados abaixo para navegar até o conteúdo desejado.

  1. Memória
  2. Armazenamento
  3. Valores 16-bits
  4. Mapeamento de memória
  5. Registrador em memória
  6. Bancos de memória
  7. Vetor de Interrupções

A memória virtual do Z80 pode ser vista como um array de bytes. Como o barramento de memória é de 16-bits, é possível um endereçamento de 65.536 locais de memória ou intervalor entre 0000h a FFFFh.

A memória armazena dados em formato Little-Endian quando o tipo de dados 16-bits(word) é utilizado tanto para dados quanto para endereços de memória.

Nesta parte do tutorial vamos discutir sobre a memória do Z80, armazenamento de dados, bancos de memória, registradores mapeados em memória e outros.

Os dados word armazenados pelo Z80 utiliza o formato Little-endian(LE) Para conhecimento, um outro formato utilizado para armazenar dados em memória por outros processadores é o formato Big-endian(BE) que armazena os dados de forma oposta ao LE.

Ex 1: Big-endian
0x1234
Ex 2: Little-endian
0x3412
Onde:
b: binário
0x, h: hexadecimal

Abaixo, uma abstração da memória contendo os valores 1234h e BB0Ah armazenados no formato little-endian.

Tab. 1: valores LE.
RAM 00 01 02 03 04 05 06 07 (...)
0000 34h 12h - - - - - - (...)
0010 - - - - - 0Ah BBh - (...)

O símbolo h é utilizado para informar que o valor é hexadecimal não sendo literalmente armazenados em memória.

Os valores com tamanho de 16-bits no Z80 são vistos como LSB e MSB que significam Least Significant Byte(Byte Menos Significativo) e Most Significant Byte(Byte Mais Significativo). O MSB é o byte mais à direita e o LSB é o byte mais à esquerda.

Tab. 2: Big-endian
MSB(8-bits) LSB(8-bits)
HH LL
12 34
Tab. 3: Little-endian
LSB(8-bits) MSB(8-bits)
LL HH
34 12

Os hardwares listados anteriormente na seção Introdução: Uso, utilizam a memória do Z80 dividida em pequenas partes. Essas partes são mapeadas com outros componentes do hardware para leitura e escrita de dados por intermédio do processador.

Tab. 4: Exemplo real de mapeamento
Endereço Tamanho Uso
$0000–$3FFF 16K ROM
$4000–$7FFF 16K ROM
$8000–$9FFF 8K RAM
$A000–$CFFF 8K SRAM
$C000–$DFFF 8K VRAM
$E000–$FFFF 8K I/O

O uso, definição do mapeamento é de total responsabilidade do hardware que utiliza o Z80 como processador principal. O Z80 não possui nenhum mapeamento nativo. Algum variavante ou derivado pode conter algum chip integrado.

Semelhante aos outros processadores 6502 e 8080, o Z80 também não possui mapeamento de bancos de memória nativo em que a memória é dividida em partes para usos distintos.

Quando um chip de Memory Bank Controller é utilizado, um valor é escrito em um registrador mapeado em memória ou porta para informar qual banco de memoría física deve ser carregado e em qual banco deve ser carregado.

O hardware que utiliza o Z80 deve fornecer os chips necessários para os recursos de gerenciamento de bancos para programas maiores que 64K.

Tab. 5: bancos de memória
Registrador Banco Destino Uso
$FFFD 0x0000~0x3FFF banco 0 - ROM
$FFFE 0x4000~0x7FFF banco 1 - ROM
$FFFF 0x8000~0xBFFF banco 2 - RAM

O exemplo de mapeamento acima é arbitrário. Cada hardware que utiliza o Z80 pode definir diferentes regiões e tamanhos de bancos de memória.

Com bancos de memória, a memória do Z80 é vista como memória virtual em que dados de outra memória física como arquivo ou outro é mapeada e carregada em partes ou por demanda.

Apesar do Z80 possuir instruções e barramento para Entrada e Saída de Dados(ES), é possível utilizar regiões da memória como E/S. Um chip específico deve ser utilizado para mapear endereços de memória como registradores para ter o funcionamento semelhante ao uso de portas.

Tab. 6: Registrador em memória
Registrador Valor 8-bits Descrição
FFF0 LLh Endereço 16-bits byte1
FFF1 HHh Endereço 16-bits byte2
FFF2 NNh Valor de E/S

A leitura e escrita de valores e endereços nos registradores mapeados em memória é feito utilizando instruções de load.

Ex:
LD (de),a ; store
LD a, (de) ; load

Os primeiros bytes de memória do Z80 estão destinados a armazenar trechos de código para lidar com as interrupções nos modos 0 e 1. As instruções RST utilizam as regiões ou endereços mostrados na tabela abaixo:

Tab. 7: VDI Z80 Padrão
RST Endereço Descrição/Uso
000b 00h RESET
001b 08h INT
010b 10h INT
011b 18h INT
100b 20h INT
101b 28h INT
110b 30h INT
111b 38h INT Modo 1
- - Reservado?
- 66h NMI

Os endereços mais comuns utilizados para interrupções são 38h(INT) e 66h(NMI) dependendo do modo de interrupção definido pela instrução IM.

O modo de interrupção 2 utiliza uma tabela semelhante a tab. 7 predefinida em outro local de memória. Nesse modo, o registrador I é utilizado para armazenar a o byte mais alto do endereço do VDI.

  1. 16/02/2026 - versão inicial: Memória, Armazenamento, 16-bits, Mapeamento, registrador em memória, bancos e VDI