Tecnología, Internet y juegos
14 meneos
84 clics
La ingeniería inversa del 6502 y su programación con máximo detalle

La ingeniería inversa del 6502 y su programación con máximo detalle  

Esta vieja charla de Michael Steil en el 27º encuentro del Chaos Communication del CCC es una de esas joyas que no se pueden dejar de ver: 50 minutos de detalladas explicaciones sobre cómo funcionaba el chip MOS 6502. Esta era la CPU del Commodore 64 y el Apple II, pero también estaba en algunas variantes dentro de los chips de la videoconsola NES de Nintendo o la Atari 2600.

| etiquetas: ingeniería , 6502 , procesador
11 3 0 K 174
11 3 0 K 174
Un detalle curioso (al menos, a mí me lo parece) Yo empecé a hacer el indio con el ensamblador del Z80 (el del Spectrum) y disponía de una serie de registros para manipular información (pongo una comparativa abajo sacada de chatGPT) que eran 6 (agrupables 2 a 2 para formar registros de 16 bits) más acumulador y flags. También tenía un conjunto de alternativos que se usaban creo cuando se producían interrupciones (como el hiperthreading, pero en cutre ... interrumpes el proceso 50 veces por…   » ver todo el comentario
#1 Vas bien, pero el 6502 tenia 6 registros: (wiki)

Dentro del 6502 había un registro acumulador «A» de 8 bits, dos registros índice «X» e «Y» de 8 bits, un registro de estado «SR» de 8 bits, un puntero de pila «SP» de 8 bits, y un contador de programa «PC» de 16 bits.

Aparte lo que dices de la memoria era un rápido modo de «página directa» o «página cero», pero estaba limitado a 256 bytes.

Z80 arquitectura CISC de 6500 transistores (Complejo)
6502 arquitectura RISC 3510 transistores (Reducido)
#2

De esos 6, puedes usar para programar solo 3. El puntero de pila es para eso ... para apuntar al final de la pila, el contador de programa sigue por donde vas ejecutando y el de estado almacena valores binarios.

A cambio el Z80 tiene dos punteros de 16 bits (IX, IY) 6 de propósito general y el acumulador. También tiene SP, PC y estado, como el 6502.
#3 ¿No permitía hacer la suma con los registros indice? El Z80 si.

El Z80 permitía sumar el valor de un registro a un registro indice. También usar el registro puntero de pila para usar su valor al registro HL.
#4

Es más simplón, el Z80 era más sofisticado. En el 6502 había que usar el acumulador:

www.masswerk.at/6502/6502_instruction_set.html#ADC

Un ejemplo segun la IA

; Sumar dos números de 16 bits (Baja en A, Alta en X)
LDA NUM1_L
CLC ; Clear Carry antes de empezar
ADC NUM2_L
STA RESULT_L

LDA NUM1_H
ADC NUM2_H
STA RESULT_H


El Z80 podía sumar en el acumulador, registros e incluso desde la memoria (siempre a un registro)
#1 El C64 llevaba el 6510 pero creo que a nivel de ensamblador eran iguales, la verdad es que como siempre programé este último no se me ocurrió ver las diferencias.
Ahora lo busco que me ha picado la curiosidad.
#6

Al parecer el 6510 es un 6502 mejorado. A nivel de programación, deben ser practicamente iguales.

es.wikipedia.org/wiki/MOS_6510
#7 Si, ya lo vi, es una optimizacion para Commodore a nivel de puertos que ahorraría algunos chips adicionales.

menéame