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

  1. R65C02
  2. Novas instruções e modos de endereçamento
  3. Novos modos de endereçamento
  4. Instrucões com novos modos
  5. Interrupções
  6. W65C02(S)

O processador R65C02 é uma versão melhorada de seu antecessor o 6502 lançado em 1983. Os bugs do R6502 foram corrigidos, novos modos de endereçamento foram adicionados e também mais modos de endereçamento para instruções já existentes.

Abaixo podemos conferir as características básicas sobre o 65C02:

  1. Frequência: 1MHZ a 4MHZ
  2. Barramento de dados : 8-bits
  3. Barramento de memória: 16-bits
  4. Memória endereçável: 64K - 256 página de 256 bytes
  5. Número de Instruções: 68
  6. Número de registradores: 6
  7. Modos de endereçamento: 14
  8. Orientação: Memória
  9. Número de flags: 6 - Negative, Zero, Decimal, Break, Interrupt Disable e Carry

Com o 65C02 foram adicionadas as instruções : BBR, BBS, BRA, PHX, PLX, PHY, PLY, SM, RMB, STZ, TRB e TSB.

Além dos modos de endereçamento do 6502 presentes no 65C02, mais três modos de endereçamento foram adicionados: Indexed Absolute Indirect, Zero Page Indirect e Zero Page Relative.

Onze instruções já existentes no 6502 que tiveram a adição de novos modos de endereçamento são: ADC, AND, BIT, CMP, DEC, EOR, INC, JMP, LDA, ORA, SBC e STA.

Os três novos modos de endereçamento foram adicionados no 65C02 são discutidos nos próximos tópicos: Indexed Absolute Indirect, Zero Page Indirect E Zero Page Relative.

Indexed Absolute Indirect ($HHLL,X)

Nesse modo, um endereço de 16-bits imediato é somado com o conteúdo do registrador X formando um endereço de onde o endereço final de 16-bits indireto está armazenado.

PC + 1 + 2
Byte 1 Byte 2 Byte 3
opcode LL HH
Zero Page Indirect ($NN)

No modo Zero Page Indirect, um valor imediato é usado para formar o endereço na página zero onde contém o endereço final indireto utilizado para leitura ou escrita de dados.

PC + 1
Byte 1 Byte 2
opcode NN
Zero Page Relative - Zp, Rel

Nesse modo, o primeiro byte imediato é usado para formar o endereço da página onde um valor 8-bits é lido para verificação. Caso a verificação seja verdadeira, o segundo byte imediato é usado como um valor 8-bits sinalizado que é somado ao PC para realizar um desvio de fluxo.

PC + 1 + 2
Byte 1 Byte 2 Byte 3
opcode NN RR

Duas novas interrupções foram adicionadas no 65C02: COP e ABORT. Seus vetores e tipos são mostrados na tabela abaixo:

Endereço Nome Tipo
00FFF0 Reservada -
00FFE2 Reservada -
00FFE4 COP Software
00FFE6 Reservada -
00FFE8 ABORT Hardware
00FFEA NMI Hardware
00FFEA RESET Hardware
00FFEA IRQ/BRK Hard/Soft

A interrupção/Exceção ABORT ocorre quando há erro na leitura de memória ou em algum esquema de gerenciamento de memória(MMU). Uma vez que a ABORT ocorre, o fluxo de execução é transferido para o endereço 16-bits contido em seu vetor $FFF8.

Fluxo Abort:
  1. Termina a instrução atual sem alteração de registradores
  2. (SP) <- PC ;instrução atual
  3. (SP) <- PS
  4. PS[I] <- 1
  5. PS[D] <- 0
  6. PC <- ($FFE8)

Assim como a NMI, a ABORT não é afetada pela flag I.

A interrupção COP é acionada pela instrução de mesmo, COP, para troca de informações com coprocessadores. COP é uma instrução de 2 bytes semelhante a instrução BRK.

Quando a COP é executada, o fluxo de execução é transferido para endereço 16-bits contido em seu vetor $FFE4.

Fluxo Abort:
  1. Se I = 1:
  2. COP Ignorada
  3. Se I = 0:
  4. (SP) <- PC + 2; prox. instrução
  5. (SP) <- PS
  6. PS[I] <- 1
  7. PS[D] <- 0
  8. PC <- ($FFE4)

COP pode ser mascarada por IRQ e BRK.

Com o 65C02 foram adicionadas as instruções : BBR, BBS, BRA, PHX, PLX, PHY, PLY, SM, RMB, STZ, TRB e TSB.

STZ - Store Zero in Memory:

A instrução STZ armazena o valor 00h em um endereço de memória. Nenhuma flag é atualizada por essa instrução.

Operação
[M] <- 00h
Endereçamento
Absoluto STZ $NNNN
Absoluto,X STZ $NNNN,X
Página Zero STZ $NN
Página Zero,X STZ $NN,X
Flags
-
Ex:
LDA #$FF
STA $00
;$00 <- FFh
STZ	$00
;$00 <- FFh
BBR - Branch on Bit Reset

A instrução BBR verifica se um bit de um valor contido em um endereço de memória na página zero é igual a 0. Caso a verificação seja verdadeira, um branch relativo informado na instrução é realizado.

Operação
Se M[Bit #x] = 0
 PC <- PC + (+/-)RR
Se não
 PC <- PC + 2
Endereçamento
Página Zero Relativa BBR $NN, $RR
Onde
x: Bit 0 a 7
NN: página zero
RR: byte sinalizado 
Flags
-
Ex:
LDA #$7F
STA $00
BBR7 $00, local
;omitido
;
local:
BRK
BBS - Branch on Bit Set

A instrução BBS verifica se um bit de um valor contido em um endereço de memória na página zero é igual a 1. Caso a verificação seja verdadeira, um branch relativo informado na instrução é realizado.

Operação
Se M[Bit #x] = 1
 PC <- PC + (+/-)RR
Se não
 PC <- PC + 2
Endereçamento
Página Zero Relativa BBS $NN, $RR
Onde
x: Bit 0 a 7
NN: página zero
RR: byte sinalizado 
Flags
-
Ex:
LDA #$80
STA $00
BBS7 $00, local
;omitido
;
local:
BRK
PHX - Push X on Stack

A instrução PHX salva o conteúdo do registrador X na pilha do 65C02.

Operação
(SP) <- X
SP <- SP - 2
Endereçamento
Implicito PHX
Onde
-
Flags
-
Ex:
LDX #$FF
PHX
;usar X
;restaurar X
PHY - Push Y on Stack

A instrução PHX armazena o valor contido no registrador X na stack.

Operação
(SP) <- Y
SP <- SP - 2
Endereçamento
Implicito PHY
Onde
-
Flags
-
Ex:
LDY #$FF
PHY
;usar Y
;restaurar Y
PLX - Pull X from Stack

A instrução PLX recupera o conteúdo armazenado no topo da pilha e armazena no registrador X.

Operação
SP <- SP + 2
X <- (SP)
Endereçamento
Implicito PLX
Onde
-
Flags
N : 1 se X[bit7] = 1. Caso contrário, 0
Z : 1 se X = 0. Caso contrário, 0 
Ex:
LDX #$FF
PHX
;uso de X
PLX
PLY - Pull Y from Stack

A instrução PLY recupera o conteúdo armazenado no topo da pilha e armazena no registrador Y.

Operação
SP <- SP + 2
Y <- (SP)
Endereçamento
Implicito PLY
Onde
-
Flags
N : 1 se Y[bit7] = 1. Caso contrário, 0
Z : 1 se Y = 0. Caso contrário, 0 
Ex:
LDY #$FF
PHY
;uso de Y
PLY
RMB - Reset Memory Bit x

A instrução RMB atribuí o valor 0 a um bit de um valor contido em um endereço de memória na página zero.

Operação
M[Bit #0-7] = 0
Endereçamento
Página Zero RMBx $NN
Onde
x: Bit 0-7
Flags
-
Ex:
LDA 	#$FF
STA 	$00
RMB7	$00
;($00) = 7Fh
SMB - Set Memory Bit x

A instrução SMB atribuí o valor 1 a um bit de um valor contido em um endereço de memória na página zero.

Operação
M[Bit #0-7] = 1
Endereçamento
Página Zero SMBx $NN
Onde
x: Bit 0-7
Flags
-
Ex:
LDA 	#$7F
STA 	$00
SMB7	$00
;($00) = FFh
TRB - Test And Reset Memory Bits With Accumulator

A instrução TRB testa e reseta os bits de um valor em um endereço de memória usando o registrador A como “máscara” para resetar os bits desejados.

Operação
resultado <- [M] & NOT(A)
[M] <- resultado
Endereçamento
Absoluto TRBx $NN
Página Zero TRBx $NN
Onde
x: 0-7
[M]: contéudo em memória
NOT: operação lógica NOT
Flags
Z: 1 se [M]= 00h. 0, caso contrário
Ex:
LDX #$FF
STX $00
LDA #$F0
TRB $00
TSB - Test And Set Memory Bits Accumulator

A instrução TRB testa e seta bits de um valor em um endereço de memória usando o registrador A como "máscara" para setar os bits desejados.

Operação
resultado <- [M] | A
[M] <- resultado
Endereçamento
Absoluto TRBx $NN
Página Zero TRBx $NN
Onde
x: 0-7
[M]: contéudo em memória
Flags
Z: 1 se [M]= 00h. 0, caso contrário
Ex:
LDX #$0F
STX $00
LDA #$F0
TSB $NN

Algumas instruções legadas mostradas abaixo tiveram a adição um ou mais novos modos de endereçamento:

Instrução Novo Modo
ADC ($NN)
AND ($NN)
BIT $NNNN,X
BIT #$NN
CMP ($NN)
DEC Acc
EOR ($NN)
INC Acc
JMP ($NNNN,X)
LDA ($NN)
ORA ($NN)
SBC ($NN)
STA ($NN)
BIT ($NN)

Essas instruções podem ser vistas em 6502: Instruções.

A empresa Western Design Center(WDC) também possui sua versão 65C02 conhecida como W65C02. Essa versão possui as melhorias do R65C02, porém tendo as instruções SMB, RMB, BBR e BBS removidas.

A versão W65C02S possui as mesmas melhorias da versão R65C02 da Rockwell adicionando as instruções de controle STP(Stop) e WAI(Wait for Interrupt)

STP - Stop the processor

A instrução STP coloca o processador em “modo suspenso” sem possibilidade de "acordar" por alguma interrupção. Apenas um hard reset pode ser utilizado para sair de “modo”.

Operação
-
Endereçamento
Implícito STP
Onde
-
Flags
-
Ex:
-
WAI - Wait For Interrupt

A instrução STP coloca o processador em “modo suspenso” sem possibilidade de "acordar" por alguma interrupção. Apenas um hard reset pode ser utilizado para sair de “modo”.

Operação
-
Endereçamento
Implícito WAI
Onde
-
Flags
-
Ex:
-
  1. 03/02/2026 - versão inicial: R65C02, novas instruções, modos de endereçamento, instruções legadas e W65C02(S)