Objetivos
Memória
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.
Histórico de atualizações
- 16/02/2026 - versão inicial: Memória, Armazenamento, 16-bits, Mapeamento, registrador em memória, bancos e VDI
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.