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

  1. Memória
  2. Armazenamento
  3. Paginação
  4. Mapeamento de memória
  5. Registrador mapeamento de memória
  6. Bancos de memória
  7. layout zp, stack e proposito geral

O 6502 possui um barramento de memória de 16-bits, o que permite o endereçamento de 65.536 posições ou locais que vão da posição 0 até 65.535 ou 0x0000 a 0xFFFF em notação hexadecimal.

A memória do 6502 armazena dados em formato Little-Endian, registradores mapeados em memória e é paginada e pode ser divida em bancos de memória via chips adicionais.

A leitura e escrita de dados é feita através dos pinos de endereço A0-A15, pinos de dados D0-D7 e pinos de controle RDY e R/W.

Os dados armazenados pelo 6502 utilizam apenas o formato Little-endian(LE) que significa que um valor tem seus bytes menos significativo é armazenado primeiro, seguido de seu byte mais significativo. O que foi dito se refere apenas a valores 16-bits.

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, são mostrados os endereços 0x1234 e 0xBB0A no formato LE armazenados na memória do 6502:

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

O espaço de memória endereçável do 6502, por padrão, é dividido em 256 páginas contendo 256 bytes em cada página. A tabela abaixo exemplifica a organização dessas páginas.

Tab. 2: Paginação da memória
Página Endereço Tamanho
0 0000-00FF 256B
1 0100-01FF 256B
2 0200-02FF 256B
3 0300-0FF 256B
(...) (...) (...)
255 $FF00–$FFFF 256B

Para a página 0, utilizando o modo de endereçamento Zero Page , quando um endereço de memória de 16-bits calculado é superior a 00FFh, por exemplo 0x100, o MSB do endereço é descartado e substituído para 00h formando um endereço do tipo 00XXh.

Onde:
b: binário
0x, h, X: hexadecimal

Ex:
00FF + 04 = 0103 = 0003

A página 1, 0100h a 01FFh, utilizada como a pilha do 6502, possui o funcionamento circular semelhante. Ver Pilha/Stack para entender o funcionamento da pilha e página 1.

A memória do 6502 pode ser divida 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. 3: mapeamento
Endereço Uso
$0000–$07FF Página Zero, Pilha e RAM
$0800–$1FFF Espelho de $0000–$07FF
$2000–$2007 Vídeo
$2008–$3FFF Espelho de $2000-$2007
$2000–$2007 Vídeo
$4000–$4017 Áudio
$4020–$FFFF Código

O uso, definição do mapeamento é de total responsabilidade do hardware que utiliza o 6502 como processador principal. O 6502 não possui nenhum mapeamento nativo além das páginas 0 e 1 destinadas à pilha e página zero.

Uma forma de se comunicar ou trocar informações com periféricos ligados ao processador é via registradores mapeados em memória. O 6502 não possui instrução de Input e Output como 8080 e Z80. Esses tipo de registrador possuem um endereço fixo em memória destinado à leitura e escrita de dados.

Ex 1: IO
lda #$38
sta $2000 ; endereço HH
lda $00
sta $2001 ; endereço LL
lda $2002 ; lê dados de $3800
;uso omitido

Abaixo, alguns exemplos de dispositivos e outros processadores que podem utilizar registradores mapeados em memória.

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

Como exemplo real de registradores mapeados em memória temos os registradores abaixo destinados a comunicação com processadores de áudio e vídeo.

Registradores
  1. $2000-2007 : Vídeo
  2. $4000-2017 : Áudio

O uso, definição de endereço e outras configurações é de total responsabilidade do hardware que utiliza o 6502 como processador principal.

Como o 6502 possui apenas 64K de memória endereçável fazendo com que muitos hardwares utilizem um sistema de mapeamento de bancos que tem 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 de tamanho.

Tab. 4: Bancos - 16KB
Endereço Uso
$8000-$BFFF Banco 1
$C000-$FFFF Banco 0 (Fixo)
Tab. 5: Bancos - 8KB
Endereço Uso
$8000-$9FFF Banco 3
$A000-$BFFF Banco 2
$C000-$DFFF Banco 1
$E000-$FFFF Banco 0 (Fixo)

Os programas maiores que 64K utilizam o banco 1 para troca de bancos de 8 KBytes de tamanho. O número de banco e seus tamanhos podem variar de hardware.

Ex 2: banco de memória
lda #$0F ; banco 0F do programa
sta $8000 ; carrega banco 0F em banco 1 da memória

Como o Vetor De Interrupções do 6502 é fixo em $FFFA a $FFFF, o banco que contém o VDI fica armazenado nessa região de memória para funcionamento correto do reset e interrupções.

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

  1. 09/03/2026 - revisão 5 - Ajustes: pontuais e tabs. 1, 2, 3; Adição: Tabs. 4 e 5
  2. 12/01/2025 - revisão 4 - Ajustes pontuais; Adição: info. sobre pinos na intro e Exs 1 e 2
  3. 12/03/2025 - revisão 3 - Remoção de tópico 'valores 16-bits; Melhorias pontuais
  4. 11/09/2024 - revisão 2 - correção em descrição de armazenamento, tabelas LE e BE e adição de link Pagina Zero
  5. 04/10/2023 - revisão 1 - adição de links, correção em layout, navegação e erros gramaticais
  6. 28/04/2023 - versão inicial