C64 a Fondo – 6502 vs 6510 Parte 6 – MOS 6503 Una Rareza 

Hola, en esta entrega vamos a estudiar al Procesador MOS 6503 una verdadera rareza. Se trata de un procesador de la familia del 6502 y del 6510 pero con muchos menos pines (28 en lugar de 40) y la capacidad de direccionar solo 4kb de memoria ram.

Cosas en común con la familia 6500

Este 6503 tiene algunas cosas fundamentales en común con la familia del 6500 sin las cuales cualquier desarrollo en esta plataforma sería muy pero muy difícil.

La primera es el código máquina, este posee las mismas instrucciones a las que ya estamos acostumbrados en nuestros 6502 y 6510, poseyendo también los mismos modos de direccionamiento de memoria.

El timing del mismo está dentro de lo esperado para la familia pudiéndose comunicar con los VIA y CIA si se sincronizan los relojes de estos chips entre sí.

La cantidad de registros y la forma de accederlos se mantienen para toda la familia estos son los familiares A, X e Y, el Status Register y el Stack Pointer, los 5 registros, de 8 bits y el Program Counter de 16 bits.

Tomando en cuenta el análisis de Jim Butterfield – Wikipedia un prócer del lenguaje en código máquina para Commodore el 6503 es sólo un 6502 con menos pines e idéntico funcionamiento.

También posee 8 bits bidireccionales de datos. Todavía podemos encontrar procesadores compatibles como el Synertek 6503

Pin-Out y diferencias

Aquí salta a la vista la diferencia más grande ya que ¡A este chip le han robado unas patitas! Sí, su formato es DIP28 en lugar de los ya tradicionales DIP40 que nos acostumbraron el 6502 y el 6510. ¿Y dónde es que nos faltan esas patitas? Ni más ni menos que en el address bus.

Este posee solo 12 pines (pin AB0 a AB11) en lugar de los tradicionales 16 direccionando solo 2ˆ12 bytes, o sea 4096 bytes o 4 kb para direcciones de memoria.

Aquí hay que tener especial cuidado al armar alguna placa que tenga chips que esperen 15 o 16 bits en su direccionamiento, en las mismas tenemos que asegurarnos que esos pines no queden flotando (no conectados ni a ground ni a 5v). Típicamente en una maqueta de breadboards pueden conectar los pines sobrantes a ground o 5v dependiendo si queremos 0 o 1 para ese bit en particular.

/RES Pin de reset, este pin sirve para realizar un reset del procesador cuando se conecte a 0v. El reset tomará 7 ciclos de reloj y buscará en las posiciones de memoria $0FFC y $0FFD donde está el vector (otra posición de memoria) que posee la primera instrucción a ejecutar. El reset debe ser mantenido en 0v por lo menos durante dos ciclos de reloj para que sea reconocido. Nótese que no usamos las tradicionales $FFFC y $FFFD.

VSS Pin de Ground, este pin se conecta al common ground del diseño.

PHI1 o 01 (OUT) Pin de Salida de Reloj, el mismo es una salida de reloj para conectar a otros dispositivos. El PHI1 es típicamente la señal del PHI2 pero invertida.

/IRQ Pin de interrupción. Al conectar este pin a 0V, si las interrupciones están habilitadas, el procesador guardará el contenido de los registros actuales y buscará en las posiciones de memoria 0FFE y 0FFF donde está el vector (otra posición de memoria) que posee la primera instrucción a ejecutar para atender a esta interrupción. Nótese que no usamos las tradicionales $FFFE y $FFFF.

/NMI Pin de interrupción no enmascarable. Al conectar este pin a 0V el procesador guardará el contenido de los registros actuales y buscará en las posiciones de memoria 0FFA y 0FFB donde está el vector (otra posición de memoria) que posee la primera instrucción a ejecutar para atender a esta interrupción. Este tipo de interrupción es incondicional y siempre será honrada. Nótese que no usamos las tradicionales $FFFA y $FFFB.

VCC Pin de Energía. El procesador típicamente trabaja con +5v ± 5% de sobre o sub fluctuación en el voltaje.

AB0 a AB11 Pines del Bus de Direccionamiento. Son pines bidireccionales que permiten recibir las direcciones de los dispositivos a los cuales comunicarse (memorias, otros chip en la placa, registros de I/O, etc). Al ser un bus de 12 bits direcciona hasta 4096 bytes o desde $0000 hasta $0FFF.

DB0 a DB7 Pines del Bus de datos, Este es un bus bidireccional que permite recibir y escribir datos junto con el bit de R/W a memorias y registros de I/O.

R/W Pin de Lectura/Escritura. Este pin indica si el procesador está realizando una lectura o una escritura. Cuando se encuentra en 1 o en estado High el procesador está realizando una lectura cuando está en 0 o estado Low una escritura.

PHI0 o 00 (IN) Pin de entrada de Reloj, Este pin permite conectar un reloj interno al procesador para sincronizarse con otros dispositivos.

PHI2 o 02 (OUT) Pin de Salida de Reloj, el mismo es una salida de reloj para conectar a otros dispositivos.

Cómo funciona en la Commodore 64

El 6503 no se utilizó en la Commodore 64, ni en ninguna computadora Commodore conocida, fue hecho por MOS Technologies para dar un 6502 con un paquete de 28 pines, lo cual era más barato tanto en espacio de pcb utilizado como en costo del chip.

El 6503 en acción

Bueno aca les dejo un video del 6503 en acción donde vamos a explicar como funciona cada uno de sus pines, programarlo a mano utilizando resistencias con la instrucción de código máquina EA (correspondiente a NOP o no operación) y estudiar que pasa por sus pines y qué direcciones usa al bootear,

6503 una rareza, 6502 vs 6510 Parte 6

Artículos en la serie C64 a Fondo

A continuación les dejo los links a los artículos anteriores de la serie

Introducción

Parte 1 – El módulo de reloj

Parte 2 – Pinout 6510 y 6502

Parte 3 – Codeando a Mano la Primera Instrucción de Código Máquina

Parte 4 – Primer Programa desde EEPROM

Parte 5 – I/O Pins del Procesador

Referencias

A continuación les dejo algunos links donde profundizar el tema:

Video de la serie 6502 vs 6510 Parte 6 – 6503 una rareza:

6503 una rareza, 6502 vs 6510 Parte 6

6503 Datasheet 

W65C02S 8–bit Microprocessor 

MOS Technology MPS6503A

commodore.ca | The New 6500 Processors (CPU) by Jim Butterfield  

Synertek 6503

Y como siempre la serie de Ben Eater del 6502

Build a 6502 computer | Ben Eater 

Todos los ejemplos de código de los videos los pueden encontrar en:

https://github.com/carlinhocr/6502_vs_6510

Autor: OsoLabs

Empecé con la Commodore de chico, sigo con la Commodore de grande. Programo para 6502, Arduino, Raspberry y algunos algoritmos de Bioinfomática, algo en C++, algo en Python, algo en Assembler. Fanático de la electrónica home brew desde breadboard a diseñar PCBs propios. Armé la 20c y OsoLabs https://www.osolabs.tech Mi GitHub para quien quiera sumarse a los proyectos y chusmear código: https://github.com/carlinhocr/ Desde Argentina al Mundo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *