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

  1. Memória
  2. Armazenamento
  3. Valores 16-bits
  4. Paginação
  5. Mapeamento de memória
  6. I/O - Entrada e Saída
  7. Registrador mapeamento de memória
  8. Bancos de memória

O Intel 8080 possui um barramento de memória de 16-bits, o que permite o endereçamento de 65.536 posições ou locais de memória, que vai da posição 0 até 65.535 ou 0x0000h a 0xFFFFh.

A memória do 8080 armazena dados em formato Little-Endian e pode ser divida em bancos de memória. Nesta parte do tutorial vamos discutir o que foi visto nesta introdução.

Os dados armazenados pelo 8080 utiliza o formato Little-endian(LE) que significa que um valor tem seu byte menos significativo armazenado primeiro, seguido de seu byte mais significativo.

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 dos valores 0x1234 e 0xBB0A armazenados no formato little-endian.

Tab. 1: Um local de memória contendo valores LE.
Endereço 00 00 01 02 03 04 05 06 07 (...)
0000 $34 $12 - $0A $BB - - - - (...)
0010 - - - - - - - - - (...)

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

Os valores com tamanho de 16-bits no 8080 são vistos como LSB e MSB que significam Least Significant Byte e Most Significant Byte. Em uma tradução literal: Byte Menos Significativo e Byte Mais Significativo. O LSB é o byte mais à direita e o MSB é o byte mais à esquerda. Como mostrado no Ex 1.

Tab. 2: Big-endian
MSB(8-bits) LSB(8-bits)
12 34

Como o 8080 armazena seus dados em LE, os valores acima ficam invertidos em memória. Como mostrado no exemplo Ex 2 abaixo:

Tab. 3: Little-endian
MSB(8-bits) LSB(8-bits)
12 34

Os hardwares listados anteriormente na seção Introdução:Uso, utilizam a memória do 8080 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. Tendo todas as partes definidas, temos o tão conhecido mapeamento de memória.

Tab. 4: Exemplo real de mapeamento
Endereço Tamanho Dispositivo
$0000–$1FFF 8K ROM
$2000–$23FF 1K RAM
$2400–$3FFF 7K Vídeo RAM
$4000–$FFFF - RAM / Espelho RAM

O uso, definição do mapeamento é de total responsabilidade do hardware que utiliza o 8080 como processador principal. O 8080 não possui nenhum mapeamento nativo.

Para se comunicar com periféricos e trocar informações com periféricos ligados ao processador 8080 é feita utilizando as portas de entrada(Input) e saída(Output).

Instruções específicas de I/O enviam e recebem valores 8-Bits de outros periféricos via registradores A, B, C, D, E, H e L sendo o registrador C utilizando para armazenar o valor da porta de comunicação de entrada ou saída.

Abaixo, alguns exemplos de dispositivos e outros processadores com que o 8080 pode ser comunicar utilizando portas de entrada e saída.

Dispositivos
  1. Mouse
  2. Joystick
  3. Teclado
  4. Áudio
  5. Vídeo

Como exemplo real, as portas abaixo destinados a comunicação com um hardware utilizado para controlar a nave do jogo Space Invaders. Os bits 4, 5 e 6 retornam o status dos botões de tiro, esquerda e direita respectivamente.

Ex: Entrada de dados
  1. $01 : Joystick 1
  2. $02 : Joystick 2
Ex: Saída
  1. $01 : Reprodução de áudio

O uso, definição de portas é de total responsabilidade do hardware que utiliza o 8080 como processador principal.

Como o 8080 possui apenas 64KB de memória, semelhante ao 6502, muitos hardwares utilizam um sistema de mapeamento de bancos que têm como objetivo armazenar "bancos trocáveis" de tamanhos específicos em um local de memória para que seja possível executar programas maiores que 64K.

Quando o sistema de bancos é utilizado, um valor é escrito em um registrador mapeado em memória ou porta para informar qual banco de memoría deve ser carregado em um local de memória defindo para a troca de bancos.

Abaixo um exemplo real de registradores de mapeamento de bancos de 16K de tamanho. Ao escrever um valor entre 0x00~0xff nos locais abaixo, um trecho de 16K é copiado para seu destino

Tab. 1: Exemplo de bancos de memória
Registrador Banco Destino Descrição
$FFFF 0x8000~0xBFFF banco 2
$FFFE 0x4000~0x7FFF banco 1
$FFFD 0x0000~0x3FFF banco 0

O uso, definição de endereço e outras configurações é de total responsabilidade do hardware que utiliza o 8080 como processador principal. O 8080 não possui nenhum mapeamento de banco nativo.

  1. 12/12/2024 - revisão 3 - correções, melhorias e ajustes pontuais
  2. 09/09/2024 - revisão 2 - correção em erros gramaticais e adição de tabela de bancos de memória
  3. 04/10/2023 - revisão 1 - adição de links, correção em layout e navegação
  4. 08/08/2023 - versão inicial