Objetivos
Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.
Memória
O 65816 possui um barramento de memória de 24-bits o que permite o endereçamento de 16MB de
bytes de memória ou endereços entre 000000h e FFFFFFh.
Os dados são armazenados em formato Little-Endian quando os tipos de dados
16-bits(word) ou 24-bits que são utilizados tanto para dados quanto para dados quanto
endereços de memória.
Nesta parte do tutorial vamos discutir sobre a memória, modos de operação,
armazenamento de dados, bancos de memória, registradores mapeados em memória e
vetores de interrupção.
No modo emulação, o 65816 define uma memória endereçável de 64K. A forma "flat" pode ser
vista abaixo:
Tab. 1: RAM modo E=1
| Endereço |
Uso |
| 0000-00FF |
Zero Page |
| 0100-01FF |
Stack |
| 0200-FFF9 |
IO/ROM/RAM |
| FFFA-FFFF |
Vetor de interrupções |
Para mais informações sobre como a memória é organizada no modo emulação, visite
6502: Memória.
No modo nativo, a memória endereçável é de 16MB(24-bits). Em sua forma "flat" pode ser vista
abaixo:
Tab. 2: RAM modo E=0
| Endereço |
Uso |
| 000000-00FFF9h |
Direct Page |
| 00FFFA-00FFFFh |
VDI |
| 010000-01FFFFh |
Stack |
| 020000-FFFFFFh |
IO/RAM/ROM/SRAM |
As páginas que antes eram de 256 bytes no processador 65(C)02 agora foram expandidas para
bancos de 64KB no 65816. O termo Zero Page foi substituído pelo termo Direct Page.
Tab. 3: Bancos/Páginas de memória
| Banco |
Endereço |
Uso |
| 0 |
000000-00FFF9h |
Direct Page |
|
00FFFA-00FFFFh |
VDI |
| 1 |
010000-01FFFF |
Stack |
| 2 |
020000-02FFFF |
Uso geral |
| (...) |
(...) |
(...) |
| FF |
FF0000-FFFFFF |
Uso geral |
Os registradores DBR(X e Y) e PBR(PC) são usados para "alcançar" instruções e dados
sendo carregados com o valor do Banco na tabela acima para formar endereços 24-bits.
Para código, caso o endereço da instrução ultrapasse o limite do banco, o efeito de
wrap-around ou efeito circular ocorre. Para dados, o endereço para ultrapassar o limite
do banco normalmente tendo o DBR apontando para o próximo banco.
A memória é vista como uma array de byte. Os dados 16/24-bits armazenados em memória utilizam o
formato Little-endian(LE). Isso significa que um valor ou endereço tem seu byte menos
significativo é armazenado primeiro seguido de seu byte mais significativo.
Abaixo, uma abstração da memória contendo os valores 1234h e 123456h armazenados no formato LE.
Tab. 4: valores LE.
| RAM |
00 |
01 |
02 |
03 |
04 |
05 |
06 |
07 |
(...) |
| 0000 |
34h |
12h |
- |
- |
- |
- |
- |
- |
(...) |
| 0010 |
- |
- |
- |
- |
56h |
34h |
12h |
- |
(...) |
Quando valores 16/24-bits são carregados nos registradores são armazenados no formato
Big-endian.
Semelhante aos antecessores, o 65816 não possui mapeamento de bancos de memória nativo, exceto
Stack e Direct Page que possuem bancos ou páginas predefinidas de acordo com o modo de operação
do processador.
Como um mapeamento de memória, podemos utilizar a memória para armazenar dados específicoss de
acordo com os periféticos ou outros coprocessadores.
Abaixo, é mostrada uma tabela que contém um layout da memória em que suas áreas seguem o
mapeamento definido por um hardware real.
Tab. 5: Mapeamento de memória
| Banco |
Endereço |
Tamanho |
Uso |
| 00-3F |
$0000-$1FFF |
8K |
RAM |
|
$2000-$20FF |
256B |
- |
|
$2000-$20FF |
256B |
I/O |
|
$2100–$21FF |
4K |
I/O |
|
$3000–$3FFF |
256B |
I/O |
|
$4000–$40FF |
256B |
I/O |
|
$4100–$41FF |
256B |
- |
|
$4200–$44FF |
768B |
I/O |
|
$4500–$5FFF |
4K |
Não usado |
|
$6000–$7FFF |
8K |
Reservado |
|
$8000-$FFFF |
32K |
ROM |
O hardware que utiliza o 65816 deve fornecer os chips necessários para os recursos de
gerenciamento de bancos de memória.
Registradores mapeados em memória
Uma forma de se comunicar ou trocar informações com periféricos ligados ao processador é via
registrador mapeado em memória. O 65816 não possui instruções de Input/Output como o
8086 da Intel.
Esses tipo de registrador possui um endereço fixo em memória destinado à leitura e escrita de
dados de configuração ou processamento externo, por exemplo.
Tab. 6: Registrador em memória
| Registrador |
Valor 8-bits |
| $4016 |
Joystick 1 |
| $4017 |
Joystick 1 |
| $43x0-$43xFh |
DMA |
| $2140-$2143 |
Áudio |
| $2115h-$2119 |
VRAM |
Ex:
lda $4016 ; lê joystick 1
;checagem de botões pressionados
O hardware que utiliza o 65816 deve fornecer os chips e a documentação necessária
para os recursos de registradores de I/O em memória.
O 65816 com seu barramento de memória de 24-bits e páginas de 64KB pode ter um chip
MBC(Memory Bank Controller) "ligado" a ele para gerenciar seus 16MB de memória, como virtual,
e carregar dados de outros tipos de memória em suas bancos expandindo assim sua memória.
Tab. 7: bancos de memória
| Registrador |
Banco destino |
Uso |
Configuração |
| 0 |
000000-00FFF0 |
Fixo |
|
00FFF4-00FFFF |
VDI |
Fixo |
| 1 |
010000-01FFFF |
Stack |
Fixo |
| 2 |
020000-02FFFF |
Programação |
Fixo |
| 3 |
030000-03FFFF |
Programação |
Fixo |
| 4 |
040000-04FFFF |
Programação |
Fixo |
| (...) |
(...) |
(...) |
(...) |
| A |
0A0000-0AFFFF |
Programação |
Fixo |
| B |
0B0000-0BFFFF |
Áudio |
Trocável |
| C |
0C0000-0CFFFF |
Vídeo |
Trocável |
| D |
0D0000-0DFFFF |
SRAM |
Trocável |
| E |
0E0000-0EFFFF |
SRAM |
Fixo |
Cada MBC têm seu funcionamento particular sendo o funcionamento de registradores em memória
utilizados para informar qual banco da memória física deve ser carregado e em qual banco de
memória deve ser seu destinado.
Ex:
lda #$FF
sta $200B ; Banco B
Sistemas operacionais e kernels podem utilizar bancos de memória para carregar partes de
softwares com realocação código, sendo possível que seja executado a partir de qualquer
banco.
Nenhum MBC nativo está disponível no 65816 ficando na responsabilidade do hardware que usa
esse processador como sendo principal ou secundário.
Há uma região especial na memória para armazenar os ponteiros para as rotinas de tratamento
de interrupções. Essa região contém o Interrupt Vector Table localizado no intervalo
de endereço 00FFF4-00FFFF(E=0).
Tab. 8: VDI
| Endereço |
Nome |
Tipo |
| 00FFE0 |
Reservada |
- |
| 00FFE2 |
Reservada |
- |
| 00FFE4 |
COP |
Software |
| 00FFE6 |
BRK |
Software |
| 00FFE8 |
ABORT |
Hardware |
| 00FFEA |
NMI |
Hardware |
| 00FFEC |
RESET |
Hardware |
| 00FFEE |
IRQ |
Hard/Soft |
A vetor da interrupção COP foi adicionada ao 65816 estando disponível apenas no modo
nativo. O vetor da interrupção ABORT foi adicionado ao seu antecessor 65C02.
O vetor IRQ/BRK do
65(C)02 agora foi separado em vetores distintos, evitando assim a necessidade de verificação
de flag B e byte extra de da instrução BRK.
O vetor de interrupções(IVT) do 6502 bem como seus tipos de interrupções podem ser visto em
6502: Interrupções.
O mesmo assunto, porém voltado para o 65816, pode ser visto em
65816: Interrupções.
Histórico de atualizações
- 24/02/2026 - versão inicial: Memória, Armazenamento, 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.