Atariware Wiki: 6502 Códigos opcionales no documentados

https://www.atariware.cl/wiki     Versión: 19 (25/12/2025 20:04)

6502 Códigos opcionales no documentados

Basado en el Atari 8-bit 6502C (CO14806)
Versión 3.1, 28/6/1999 Por Freddy Offenga

Esta versión es una continuación directa de la lista de códigos opcionales no documentados (opcodes ilegales) de Joakim Atterhal (WosFilm) y mía que se publicó en la revista de discos de 8 bits de Atari llamada Mega Magazine número 6. La mayoría de los opcode en esta lista se originó a partir de un desensamblador para el Atari (The Symbolic Disassembler por HiasSoft).


1. La CPU Atari de 8 bits


De hecho hay dos versiones personalizadas del 6502 para el Atari. El 6502 personalizado CO14377 es el primero que probablemente sólo se utiliza en algunos de los primeros Atari 400/800. La 6502C personalizada CO14806 se utiliza en todos los modelos Atari de 8 bits (400/800/XL/XE y XEGS).

2. Créditos


3. Referencias


  1. Illegal opcodes, WosFilm y Frankenstein, Mega Magazine nº 2, diciembre de 1991.
  2. Illegal opcodes v2, WosFilm y Frankenstein, Mega Magazine nº 6, octubre de 1993.
  3. Illegal Opcodes der 65xx-CPU, Frank Leiprecht, ABBUC Sondermagazin 10, Top-Magazin Oktober 1991.
  4. Erg "nzung zu den Illegalen OP-Codes, Peter W "tzel, Top-Magazin Januar 1992.
  5. 6502 Opcodes and Quasi-Opcodes, Craig Taylor, 1992.
  6. Extra Instructions Of The 65XX Series CPU, Adam Vardy, 27 Sept. 1996.

4. Cambios desde la versión 2.0


La versión 2.0 fue comparada con dos listas basadas en Commodore 8-bit encontradas en internet. Había algunas diferencias en los nombres de los opcodes, así que incluí los otros nombres también.

5. Códigos opcionales


En la versión 2.1 se añade una sección sobre las dos CPU's Atari personalizadas 'quizás diferentes'. Se necesita más información :

Opc : Opcode en hexadecimal.
Sz : Tamaño en bytes.
n : Número de ciclos de reloj.
* : Añade un ciclo cuando se cruza el límite de página.

5.1. AAC (ANC) [ANC]


AND byte con acumulador. Si el resultado es negativo, se establece el acarreo.
Banderas de estado: N,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Inmediato AAC #arg $0B 2 2
Inmediato AAC #arg $2B 2 2

5.2. AAX (SAX) [AXS]


Registro AND X con acumulador y almacenamiento del resultado en memoria.
Banderas de estado: N,Z

Direccionamiento Mnemónicos Opc Sz n
Página cero AAX arg $87 2 3
Página cero,Y AAX arg,Y $97 2 4
(Indirecto,X) AAX (arg,X) $83 2 6
Absoluto AAX arg $8F 3 4

5.3. ARR (ARR) [ARR]


AND byte con acumulador, luego girar un bit a la derecha en acumulador y comprobar bit 5 y 6:
Si ambos bits son 1: fija C, borra V.
Si ambos bits son 0: borra C y V.
Si sólo el bit 5 es 1: activa V, desactiva C.
Si sólo el bit 6 es 1: poner C y V.
Banderas de estado: N,V,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Inmediato ARR #arg $6B 2 2

5.4. ASR (ASR) [ALR]


AND byte con acumulador, luego desplazar un bit a la derecha en el acumulador.
Banderas de estado: N,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Inmediato ASR #arg $4B 2 2

5.5. ATX (LXA) [OAL]


AND byte con acumulador, luego transfiere el acumulador al registro X.
Banderas de estado: N,Z.

Direccionamiento Mnemónicos Opc Sz n
Inmediato ATX #arg $AB 2 2

5.6. AXA (SHA) [AXA]


AND registro X con acumulador luego AND resultado con 7 y almacenar en memoria.
Banderas de estado: -

Direccionamiento Mnemónicos Opc Sz n
Absoluto,Y AXA arg,Y $9F 3 5
(Indirecto),Y AXA arg $93 2 6

5.7. AXS (SBX) [SAX]


Suma el registro X con el acumulador y almacena el resultado en el registro X, luego resta el byte del registro X (sin préstamo).
Banderas de estado: N,Z,C

Direccionamiento Mnemónicos Opc Sz n
Inmediato AXS #arg $CB 2 2

5.8. DCP (DCP) [DCM]


Resta 1 de la memoria (sin préstamo).
Banderas de estado: C.

Direccionamiento Mnemónicos Opc Sz n
Página cero DCP arg $C7 2 5
Página cero,X DCP arg,X $D7 2 6
Absoluto DCP arg $CF 3 6
Absoluto,X DCP arg,X $DF 3 7
Absoluto,Y DCP arg,Y $DB 3 7
(Indirecto,X) DCP (arg,X) $C3 2 8
(Indirecto),Y DCP (arg),Y $D3 2 8

5.9. DOP (NOP) [SKB]


Ninguna operación (doble NOP). El argumento no tiene significado.
Banderas de estado: -

Direccionamiento Mnemónicos Opc Sz n
Página cero DOP arg $04 2 3
Página cero,X DOP arg,X $14 2 4
Página cero,X DOP arg,X $34 2 4
Página cero DOP arg $44 2 3
Página cero,X DOP arg,X 54$ 2 4
Página cero DOP arg $64 2 3
Página cero,X DOP arg,X $74 2 4
Inmediato DOP #arg $80 2 2
Inmediato DOP #arg $82 2 2
Inmediato DOP #arg $89 2 2
Inmediato DOP #arg $C2 2 2
Página cero,X DOP arg,X $D4 2 4
Inmediato DOP #arg $E2 2 2
Página cero,X DOP arg,X $F4 2 4

5.10. ISC (ISB) [INS]


Aumenta la memoria en uno, luego resta memoria del acumulador (con préstamo).
Banderas de estado: N,V,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Página cero ISC arg $E7 2 5
Página cero,X ISC arg,X $F7 2 6
Absoluto ISC arg $EF 3 6
Absoluto,X ISC arg,X $FF 3 7
Absoluto,Y ISC arg,Y $FB 3 7
(Indirecto,X) ISC (arg,X) $E3 2 8
(Indirecto),Y ISC (arg),Y $F3 2 8

5.11. KIL (JAM) [HLT]


Parada del contador de programa (bloqueo del procesador).
Banderas de estado: -

Direccionamiento Mnemónicos Opc Sz n
Implícito KIL $02 1 -
Implícito KIL $12 1 -
Implícito KIL $22 1 -
Implícito KIL $32 1 -
Implícito KIL $42 1 -
Implícito KIL $52 1 -
Implícito KIL $62 1 -
Implícito KIL $72 1 -
Implícito KIL $92 1 -
Implícito KIL $B2 1 -
Implícito KIL $D2 1 -
Implícito KIL $F2 1 -

5.12. LAR (LAE) [LAS]


AND memoria con puntero de pila, transfiere resultado a acumulador, registro X y puntero de pila.
Banderas de estado: N,Z.

Direccionamiento Mnemónicos Opc Sz n
Absoluto,Y LAR arg,Y $BB 3 4 *

5.13. LAX (LAX) [LAX]


Carga el acumulador y el registro X con memoria.
Banderas de estado: N,Z.

Direccionamiento Mnemónicos Opc Sz n
Página cero LAX arg $A7 2 3
Página cero,Y LAX arg,Y $B7 2 4
Absoluto LAX arg $AF 3 4
Absoluto,Y LAX arg,Y $BF 3 4 *
(Indirecto,X) LAX (arg,X) $A3 2 6
(Indirecto),Y LAX (arg),Y $B3 2 5 *

5.14. NOP (NOP) [NOP]


Sin operación
Indicadores de estado: -

Direccionamiento Mnemónicos Opc Sz n
Implícito NOP $1A 1 2
Implícito NOP $3A 1 2
Implícito NOP $5A 1 2
Implícito NOP $7A 1 2
Implícito NOP $DA 1 2
Implícito NOP $FA 1 2

5.15. RLA (RLA) [RLA]


Gira un bit a la izquierda en memoria, luego AND acumulador con memoria.
Banderas de estado: N,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Página cero RLA arg $27 2 5
Página cero,X RLA arg,X $37 2 6
Absoluto RLA arg $2F 3 6
Absoluto,X RLA arg,X $3F 3 7
Absoluto,Y RLA arg,Y $3B 3 7
(Indirecto,X) RLA (arg,X) $23 2 8
(Indirecto),Y RLA (arg),Y $33 2 8

5.16. RRA (RRA) [RRA]


Gira un bit a la derecha en la memoria, luego suma la memoria al acumulador (con acarreo).
Banderas de estado: N,V,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Página cero RRA arg $67 2 5
Página cero,X RRA arg,X $77 2 6
Absoluto RRA arg $6F 3 6
Absoluto,X RRA arg,X $7F 3 7
Absoluto,Y RRA arg,Y $7B 3 7
(Indirecto,X) RRA (arg,X) $63 2 8
(Indirecto),Y RRA (arg),Y $73 2 8

5.17. SBC (SBC) [SBC]


Igual que el opcode legal $E9 (SBC #byte)
Banderas de estado: N,V,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Inmediato SBC #byte $EB 2 2

5.18. SLO (SLO) [ASO]


Desplazar un bit a la izquierda en memoria, luego OR acumulador con memoria.
Banderas de estado: N,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Página cero SLO arg $07 2 5
Página cero,X SLO arg,X $17 2 6
Absoluto SLO arg $0F 3 6
Absoluto,X SLO arg,X $1F 3 7
Absoluto,Y SLO arg,Y $1B 3 7
(Indirecto,X) SLO (arg,X) $03 2 8
(Indirecto),Y SLO (arg),Y $13 2 8

5.19. SRE (SRE) [LSE]


Desplazar un bit a la derecha en memoria, luego EOR acumulador con memoria.
Banderas de estado: N,Z,C.

Direccionamiento Mnemónicos Opc Sz n
Página cero SRE arg $47 2 5
Página cero,X SRE arg,X $57 2 6
Absoluto SRE arg $4F 3 6
Absoluto,X SRE arg,X $5F 3 7
Absoluto,Y SRE arg,Y $5B 3 7
(Indirecto,X) SRE (arg,X) $43 2 8
(Indirecto),Y SRE (arg),Y $53 2 8

5.20. SXA (SHX) [XAS]


AND el registro X con el byte alto de la dirección destino del argumento +1. Almacenar el resultado en memoria.
M = X AND ALTO(arg) +1
Banderas de estado: -

Direccionamiento Mnemónicos Opc Sz n
Absoluto,Y SXA arg,Y $9E 3 5

5.21. SYA (SHY) [SAY]


AND el registro Y con el byte alto de la dirección de destino del argumento +1. Almacenar el resultado en memoria.
M = Y AND ALTO(arg) + 1
Banderas de estado: -

Direccionamiento Mnemónicos Opc Sz n
Absoluto,X SYA arg,X $9C 3 5

5.22. TOP (NOP) [SKW]


Ninguna operación (triple NOP). El argumento no tiene significado.
Banderas de estado: -

Direccionamiento Mnemónicos Opc Sz n
Absoluto TOP arg $0C 3 4
Absoluto,X TOP arg,X $1C 3 4 *
Absoluto,X TOP arg,X $3C 3 4 *
Absoluto,X TOP arg,X $5C 3 4 *
Absoluto,X TOP arg,X $7C 3 4 *
Absoluto,X TOP arg,X $DC 3 4 *
Absoluto,X TOP arg,X $FC 3 4 *

5.23. XAA (ANE) [XAA]


Operación exacta desconocida. Lea los documentos referenciados para más información y observaciones.

Direccionamiento Mnemónicos Opc Sz n
Inmediato XAA #arg $8B 2 2

5.24. XAS (SHS) [TAS]


AND el registro X con el acumulador y almacena el resultado en el puntero de pila, luego AND el puntero de pila con el byte alto de la dirección de destino del argumento + 1. Almacena el resultado en memoria. Almacenar el resultado en memoria.
S = X AND A, M = S AND HIGH(arg) + 1
Banderas de estado: -

Direccionamiento Mnemónicos Opc Sz n
Absoluto,Y XAS arg,Y $9B 3 5