C64 a Fondo – 6502 vs 6510 Parte 2 – Pinout

Vamos a empezar este estudio comparativo del 6502 vs el 6510 con una descripción del para qué sirve cada patita de estos chips (que básicamente es el pin out). Nos va a servir de guía para poder hablar de las diferencias que tienen estos chips entre sí

Les dejo el link al articulo anterior en la serie, y al final como siempre los links a todos los artículos de la misma.

Parte 1 – El módulo de reloj

Cosas en Común entre el 6502 y el 6510

Ambos chips fueron creados por MOS Technologies y muy utilizados en el final de los 70 y principios de los 80. El 6510 ya no se fabrica más en la actualidad (escribiendo estas notas en Junio del 2023) sobreviviendo sólo en los corazones de millones de Commodore 64 y en los corazones de miles de Commodorianos.

El 6502 todavía sigue siendo muy utilizado teniendo versiones actuales de USM y de WDC siendo la versión actual la 65C02 que agrega algunas instrucciones extras de assembler y baja mucho el consumo eléctrico.

Arquitectura

Ambos procesadores son procesadores de 8 bits y comparten muchísimas cosas en común. La arquitectura interna de estos procesadores es idéntica y está dividida en dos partes una sección con los registros y otra con las operaciones de control, las señales que provocan transferencias de datos están en la sección de control.

Set de instrucciones

El código máquina de ambos procesadores posee las mismas instrucciones de assembler de 6500 con lo que los programas de uno funcionan perfectamente en el otro.

Agrego algunas instrucciones extras del modelo 65C02 (las marcadas con punto en la siguiente tabla) que NO recomiendo usar para poder mantener compatibilidad con el 6510 y el 6502 originales pero que ahorran algunos pasos al no tener, por ejemplo, que pasar por el acumulador para guardar el registro X en el stack con la instrucción PHX. El 65C02 es una versión más moderna del MOS 6502 siendo una ventaja el ser fully static por lo que se puede parar el clock y los registros no pierden sus valores.

Velocidad de Reloj

Los procesadores 6502 y 6510 originales soportan una velocidad de reloj de hasta 1Mhz, teniendo luego el 8502 que soporta hasta 2Mhz (usado en el modo 64 de la Commodore 128)

Registros

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 de 8 bits y el Program Counter de 16 bits.

Modos de direccionamiento

Ambos chips funcionan de idéntica forma al relacionar la memoria y sus registros presentando modos de direccionamiento diferentes ya sea si uno quiere cargar directamente de memoria, o un número literal al acumulador, en forma indexada los datos y aplicar funciones que trabajan con el acumulador sin tocar memoria.

Bus de Direccionamiento y Bus de Datos

Ambos procesadores poseen 16 líneas de direccionamiento de datos (pines) pudiendo manejar entre memoria y registros de I/O hasta 64Kb (2ˆ16 = 65536 bytes).

Pin-Out y diferencias

Aquí salta a la vista la diferencia más grande ya que el 6510 posee 6 pines adicionales que puede ser utilizados como interfaz de Input/Output para comunicarse con periféricos ya que estos son bidireccionales. 

Para manejar estos pines el 6510 utiliza las direcciones 0 y 1 donde especifica en la cero si son inputs (pone un cero) o output (pone un 1)  y en el dirección 1 los valores de los mismos, ya sea recibidos de un periférico y escritos por el procesador para consumo externo.

Pin-Out 6502

Este chip posee un formato DIP 40 con las siguientes funciones en sus pines

VPB Pin de La B significa Bar o Barra para que este pin se active el voltaje tiene que ser Low o 0v

RDY El pin ready se utiliza para decirle al microprocesador que tiene que frenar y mantener al mismo en el estado actual, para activarlo y que frene el pin espera un estado low. Por ejemplo al recibir un estado Low (o volts) en el pin todas las líneas de output van a mantener los valores de corriente que tenían mostrando qué dirección estaban buscando. 

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

IRQB 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 FFFE y FFFF donde está el vector (otra posición de memoria) que posee la primera instrucción a ejecutar para atender a esta interrupción

MLB El pin de Memory lock se usa para mantener la integridad de las instrucciones Read-Modify-Write en un sistema multiprocesador. Cuando presenta un valor Low o 0 volts indicate que algún otro circuito debe arbitrar el ciclo del bus.

NMIB 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 FFFA y FFFB 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.

SYNC Pin de sincronía El ciclo del procesador donde trae el código de operación (OpCode) se indican con el pin SYNC en high. Cuando el procesador busca un código del operación el pin queda en high y queda high por todo el resto del ciclo

VDD o VCC Pin de Energia. El procesador típicamente trabaja con +5v 

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 $1000 

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

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/WB 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.

NC  No Connect, este es un pin que no se debe conectar ya que no está conectado a nada dentro del procesador

BE Pin de Bus Enable, cuando este pin esta High los pines de address, data y RW están activos, cuando está low quedan con impedancia alta sacando al procesador del bus.

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

SOB Pin de Set Overflow. Este pin cuando recibe un cambio de high a low prende el bit de Overflow en el Status Register del procesador (bit 6). No se uso mucho en el pasado y no se recomienda su uso.

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

RESB 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 FFFC y FFFD 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.

Pin-Out 6510

Pines diferentes al 6502

PHI1 o 01 (IN) Pin de entrada de Reloj, Este pin permite conectar un reloj interno al procesador para sincronizarse con otros dispositivos. En el 6502 era el PHI0 y el 6510 sólo tiene 2 pines con respecto al reloj en lugar de los 3 que posee el 6502.

AEC Pin de Address Enable Control, se comporta de forma similar al pin de Bus Enable del 6502. Cuando este pin esta High los pines de address, data y RW están activos, cuando está low quedan con impedancia alta sacando al procesador del bus. Esto permite desarrollar sistemas con acceso directo a memoria por parte de otros chips o periféricos (DMA).

P0 a P5 Pines de I/o Port. Este procesador en su más marcada diferencia presenta en estos pines 6 conexiones bidireccionales con periféricos como si fuera un pequeño VIA o CIA. Vamos a explorar como funciona en detalle en un futuro artículo y video.

Pines idénticos al 6502

RDY El pin ready se utiliza para decirle al microprocesador que tiene que frenar y mantener al mismo en el estado actual, para activarlo y que frene el pin espera un estado low. Por ejemplo al recibir un estado Low (o volts) en el pin todas las líneas de output van a mantener los valores de corriente que tenían mostrando qué dirección estaban buscando. 

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 FFFE y FFFF donde está el vector (otra posición de memoria) que posee la primera instrucción a ejecutar para atender a esta interrupción

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 FFFA y FFFB 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.

VDD o VCC Pin de Energía. El procesador típicamente trabaja con +5v 

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 $1000 

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

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.

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

/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 FFFC y FFFD 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

Conectando al 6502 y al 6510

Para poder ver visualmente como es el esquema de conexión de pines de ambos procesadores les dejo un video donde vamos a repasar para que sirve cada pin y como conectarlo a un breadboard para en futuros videos poder programar ambos procesadores.

6502 vs 6510 Chip pin out – Parte 2

Artículos en la serie C64 a Fondo

A continuación el link al próximos artículo en la serie

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

y aquí los links a los artículos anteriores

Introducción

Parte 1 – El módulo de reloj

Referencias

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

Video de la serie 6502 vs 6510 Parte 2 – Pin Out

6502 vs 6510 Chip pin out – Parte 2

W65C02S 8–bit Microprocessor 

6510 MICROPROCESSOR WITH I/O 

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

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

Y como siempre la serie de Ben Eater del 6502

Build a 6502 computer | Ben Eater 

C64 a Fondo – 6502 vs 6510 Parte 1 – El módulo de reloj

Vamos a empezar esta serie analizando que es un módulo de reloj o system clock, por qué se usa, como funciona el de la Commodore 64 a grandes rasgos y por qué vamos a usar otro módulo de reloj durante nuestro estudio.

Les dejo el link al articulo anterior en la serie, y al final como siempre los links a todos los artículos de la misma.

Introducción

¿Qué es un módulo de reloj?

Un módulo de reloj es un circuito electrónico que oscila generando una secuencia de pulsos repetitivos que llamaremos señal de reloj, estos pulsos son distribuidos a todos los elementos lógicos que tenemos en nuestra computadora para que se sincronicen.

¿Por qué se usa?

Porque generalmente nuestras computadoras trabajan con lógica sincrónica. Los gates o compuertas lógicas que usamos para operar sobre los datos tienen un tiempo finito de respuesta a los cambios en los inputs que reciben, esto se llama delay de propagación. 

El intervalo entre los pulsos del reloj tiene que ser suficientemente largo como para que los gates y sus salidas se establezcan en valores estables antes de que suceda el próximo pulso de reloj.

Cómo funciona el de la Commodore 64

Bienvenidos al infierno, digo a cómo funciona aproximadamente el reloj de la Commodore 64. Y digo aproximadamente por que en este post no vamos a describir el circuito en detalle pero sí algunos vericuetos interesantes.

Empecemos con un cristal llamado Y1, este nos da una resonancia mecánica desde la cuál vamos a llegar  a través de varios circuitos a los 1 Mhz a los que típicamente corre el 6510.

 

Ahora dependiendo de si la computadora es NTSC o PAL la frecuencia de la señal va a ser de aproximadamente 14,318 Mhz o 17,73 Mhz redondeando. 

A esta señal se conoce como el Color Clock por que al dividir estos números por 4 obtenemos 3.58 Mhz para NTSC y 4.43 Mhz para PAL las cuáles son las señales de carrier responsables de que cómo vemos los colores en nuestros televisores.

Un Circuito integrado conocido como el U31 Dual Voltage Controlled Oscillator nos genera otras frecuencias en 8.18 Mhz para NTSC y 7.88 Mhz para PAL, esta señal se conoce como el Dot Clock y nos dice cuántos píxeles se puede escribir por pantalla en cada refresh de la misma.

NTSC: 59.826Hz (refresh rate) * 520 Pixels * 263 lineas = 8.18MHz

PAL: 50.125Hz (refresh rate) * 504 Pixels * 312 lineas = 7.88MHz

Finalmente llegamos al System Clock que define que es un ciclo de CPU como la Commodore 64 es un máquina de 8 bits esto nos limita a mostrar hasta 8 píxeles por ciclo de CPU por lo que corresponde un ciclo de duración de un octavo de Dot Clock.

NTSC: 8.18MHz / 8 = 1.023MHz

PAL: 7.88MHz / 8 = 0.985Mhz

Llegando al máximo de velocidad de 1Mhz del 6510.

¿Por qué usamos otro reloj en nuestro estudio?

Si utilizáramos un reloj de 1 Mhz sería muy difícil ver que ocurre en la cpu por cada instrucción de nuestro programa. Los instrumentos que usamos para medir no podrían detectar fácilmente la variación de bits o impulsos eléctricos en los pines de address bus y no llegaríamos a comprender que sucede en cada paso. 

Por eso tenemos un reloj que nos permite parar la pelota e ir más lento, tan lento como queramos, inclusive pulsando un botón vamos a ir ciclo por ciclo de reloj e instrucción por instrucción.

Cómo funciona nuestro clock 

Vamos a utilizar el reloj del kit de Ben Eater. Este funciona con tres timer 555 y algunas compuertas and y or, en las referencias les dejo el detalle de como lo arma él en sus videos.

Este reloj nos permite a través de un switch decidir si queremos ir paso a paso cada ciclo de reloj pulsando un botón o usar un potenciómetro para dar la velocidad de las instrucciones.

Cómo Seguimos

Para ver visualmente como funciona el módulo de reloj y cómo corremos el osciloscopio para analizar sus variaciones les dejo el primer video de la serie

6502 vs 6510 Módulo de Reloj Manual – Parte 1

Artículos en la serie C64 a Fondo

A continuación el link al próximo artículo en la serie

Parte 1 – El módulo de reloj

y aquí los links a los artículos anteriores

Introducción

Referencias

A continuación les dejo tres excelentes artículos que hablan en profundidad del reloj de la Commodore 64.

Hardware Basics Part 1 – Tick Tock, know your Clock — Dustlayer

Hardware Basics Part 2 – A Complicated Relationship — Dustlayer

Clock Frequency

Y Cómo construir el módulo de Reloj por Ben Eater.

Clock module 

C64 a fondo – 6502 vs 6510

Hoy los quiero invitar a un viaje al interior de la Commodore 64 y sus chips donde vamos a ver en profundidad detalles de assembler, conexiones y funcionamiento, que me desvelaron desde chico, y creo que agregan mucho a nuestro conocimiento técnico. 

¿Por qué la Commodore? Bueno un poco por amor (un poco bastante ja) y otro por que pienso que es una de las últimas computadoras en las cuáles podemos llegar a entender en profundidad qué es lo que está pasando realmente por dentro cuando ejecutamos un programa, jugamos un juego o tocamos música con el SID. 

Todavía podemos ver los chips, medir las señales en sus patas, mirar donde hay una resistencia o un capacitor y entender por donde pasa la magia desde el programa a la acción.

Cómo conocí la Commodore 64.

Un día caminando por la calle con mi viejo a los 9 años, me recuerdo pidiéndole por enésima vez un Colecovision, el mismo que veía todas las noches en las propagandas de la trasnoche Kenya Sharp con el juego de pitufos. El se paró en el medio de la calle, me miró y me dijo:

¿Y si tuvieras una computadora mejor, que podés programar tus propios juegos?

Así llegó el 10 de Julio de 1987 mi Drean Commodore 64C, y también llegarían muchas horas de juegos de la mano de Commando, Ghost and Goblins, y  terminando en un Zack Mackraken allá por los 16 años. 

También llegaron muchas horas de programación en Basic y los libros de Data Becker (esos blancos y naranjas) con los que siempre me pasaba lo mismo. 

Comenzaba a leer ávido y en detalle esas letras apenas entendibles y pasaba la página 1, 2 (siempre introducciones), 5, 6 (ya empezaban a explicar binario y hexadecimal) e invariablemente en la página 16, ya no entendía nada. 

Que se necesitaba un monitor de código máquina, que tal cartucho, que el diskette (que no se comparaba con mi humilde datasette) y que me daban algún programa de ayuda que consistía en 20 páginas ilegibles con muchas instrucciones DATA que luego de tipearlo terminaban invariablemente en el nefasto:

"ERROR EN LOS DATA".

Luego de esta frustración me iba a Atarilin a conseguir algún juego nuevo de la mano de Carlos y Alejandro, de los que siempre venía alguna palabra de aliento,y volvía a mis 10 minutos de carga del datasette y a jugar un par de horas, la resiliencia de los 11 años.

Esa misma resiliencia me hacía al mes volver a comprar un nuevo libro de Data Becker y volver a empezar el ciclo, así pasaron “Peeks y Pokes para el Commodore 64”, “Gráficos para el Commodore 64”, “64 consejos y trucos” pero nunca llega al soñado “64 interno” considerado sólo para expertos a esa tierna edad.

El retorno del Commodoriano

El año pasado (2022) repasando el libro Make Electronics me tope con los videos de youtube de Ben Eater, un verdadero demente que hizo una computadora sólo con breadboards y utilizando el 6502 como procesador, sus videos muy bien explicados, y la posibilidad de comprar kits con todo lo necesario para armarlos y seguirlos paso a paso me llevo a tirarme de lleno a contestar las preguntas que me torturaban desde chico:

 ¿Cómo funcionaba la Commodore? ¿Cómo cargaba una instrucción desde el código máquina al procesador? ¿Cómo se ejecutaba?

Compré los kits y mientras los esperaba compre una Commodore 64 por mercado libre, la prendo con su fuente original (no lo hagan en sus casas niños si no quieren quemarla) y me daba un hermoso error con todos ceros en la pantalla y un OUT OF MEMORY ERROR.

Lo pensé, decidí quedármela y aprovecharlo como la oportunidad para arreglarla y aprender a fondo cómo funciona por dentro esta computadora.

6502 vs 6510

Y así nace esta serie, donde comparo cómo funciona el procesador 6502 (usado en Apple , Atari, etc) y el 6510 de nuestra querida Commodore 64 que en apariencia son iguales pero tienen sutiles y fundamentales diferencias.

Uso como guía los videos de Ben Eater (Build a 6502 computer | Ben Eater ) agregando estudios del 6510 y la Commodore 64.

Con esta serie de blogspot y videos que armé para acompañarlos y vamos a explorar desde el pin out hasta los registros internos del 6510, pasando por sus puertos de I/O, como cargarle una instrucción en código máquina a mano y llegando hasta conectarle una eeprom con varias instrucciones para que ejecute un programa de nuestra autoría.

Espero me acompañen en este viaje para contestar estas preguntas que me hacía desde pequeño y conocer a fondo estos procesadores.

Siganme en este apasionante viaje empezando por el próximo artículo,

Parte 1 – El módulo de reloj

Artículos en la serie C64 a Fondo

A continuación los links a todos los artículos 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 6510

pico RGB2HDMI – Una vista moderna a dispositivos del pasado

Si de chico tenias una micro computadora, seguramente utilizaste pantallas basadas en tubos de rayos catódicos para ver su imagen. Estas maravillas analógicas tuvieron su inicio con la televisión blanco y negro en la década el 30, su apogeo a todo color entre los 70 y 90 y ocaso en el siglo 21 de la mano de la llegada de los LCDs y OLEDs.

Para quienes añoran usar sus retrocomputadoras hoy día se veran limitados en opciones para contectarla a monitores ya sea porque los de epoca van fallando por paso del tiempo o porque no hay opciones modernas que usen interfaces obsoletas.
Aca mostrare una propuesta de codigo abierto simple y economica que pretende ir cubriendo diferentes retrocomputadoras con mas colores y resolución a medida que el proyecto recibe colaboracion y hay dispositivos mas potentes para mejores prestaciones asi como el porque de querer hacerlo.

Uniendo la retrocomputacion con la electronica digital

Cada persona tuvo su camino particular con las microcomputadoras, en mi caso la Commodore 64 abrio un mundo de posibilidades no solo en la programacion sino en la electronica digital, dado que fue de las primeras computadoras en ofrecer una arquitectura abierta y extensible a traves de sus diversos puertos y su amplia documentacion.
Esto me llevo a recorrer el camino de la electronica digital como tecnico, ingeniero y finalmente especialista en electronica y sistemas embebidos.
En este camino dejo entreveer que mas alla de que los sistemas actuales tienen bases en los sistemas de computo antiguos, muchas cosas siguen manteniendose relevantes en sistemas embebidos (o dedicados de un solo proposito). Todavia se usan microcontroladores de 8 y 16 bits, todavia se usan perifericos clasicos como en los 80 y todavia es valioso programar sabiendo que hardware tenes bajo el capot.

La retro computacion como filosofia mas que hobbie

Por definicion la retrocomputacion es una serie de actividades que involucran computadoras antiguas.

  • Preservar: Arreglando hardware de los equipos con componentes defectuosos
  • Extender: Ampliando las capacidades originales del sistema a traves de sus perifericos o puertos
  • Desarrollar: Generando nuevas aplicaciones y juegos
  • Difundir: Dando a conocer a traves de convenciones, redes sociales y foros sus hitos e historias
  • Enseñar: Como estos sistemas fueron base de sistemas actuales, todavia presentes en la arquitectura de computadores.

Para los seguidores de la retrocomputacion ademas de todo esto, al ser sido parte de esa historia, hay nostalgia y buenos recuerdos asociados.
Que mejor manera que rendir tributo a estos recuerdos que colaborando de alguna manera y dado que en estos años mi colaboracion fue mas desde la recuperacion de equipos y desarrollo de algunas interfaces que la comunidad open source comparte y queria ir un poco mas alla con algun desafio.

El primero que aparecio fue claro: “no estan quedando monitores que soporten RGB o las opciones que hay son muy costosas”, mirando el mercado actual las opciones no son prometedoras:

Open Source Scan Converter:
Este dispositivo provee las mejores prestaciones para captura y representacion de la imagen, con el inconveniente de su alto costo por estar desarrollado con FPGA (
Matriz de puertas programables)

Conversores SCART genericos:
Estos dispositivos son relativamente economicos pero no hay mucha disponibilidad y el problema fundamental es que introducen altisima latencia y destruyen la imagen original al procesar los cuadros para presentarlos en pantalla

pi Zero RGB2HDMI HAT:
Este dispositivo tiene una gran calidad de imagen con una moderada densidad de color, debido a que cuenta con una computadora raspberry pi zero y una serie de placas que se colocan en su puerto de entrada salida.
Termina siendo caro asi como complejo

AMIGA digital Video:
Este dispositivo es especifico de Amiga, se instala dentro de la maquina y lee las señales digitales de la salida antes del converso de digital a analogico.
Su calidad es excelente pero es sumamente invasivo y especifico a un equipo, asi como costoso porque utiliza una computadora y su salida HDMI solo para lograr la representacion de la imagen.

Basandome en mis conocimientos de procesamiento digital y de embebidos sabia que habia tiempos de captura de señales a muy alta velocidad asi como requerimientos de tiempo critico para que la señal no sufriera los conocidos “desgarros”, lo cual lo hacia un desafio digno.
Sumado a esto, pense en utilizar no tanta potencia y costo en una FPGA sino un microcontrolador de propositos generales, obviamente al compartir mis intenciones recibi muchas negativas de que no iba a ser posible, pero no hay nadie mas obstinado que un ingeniero que le digan que no se puede…

Intro al RGB

Para resolver el desafio primero hay que entender como funcionaban los monitores analogicos, en especial los RGB, el cual fue el estadio intermedio entre los monitores de TV clasicos (PAL / NTSC / SECAM) y el VGA.
Estos utilizaban 3 lineas analogicas para el rojo verde y azul (de ahi su acronimo) y contaban con una linea de sincronismo compuesto o dos lineas para vertical y horizontal en formato digital.
La informacion era enviada como variaciones de intencidad de luz a traves del tiempo, con un barrido de izquierda a derecha y de arriba a abajo, la cual se podria recuperar y encuadrar al usar las señales de sincronismo.

Las imagenes muestran la relacion entre el barrido y las areas de informacion de video y señales de enganche y las señales de video y sincronimo.
Cada inicio de linea era marcado por un flanco de bajada y subida abrupto de la linea de horizontal y cada cuadro completo por el el flanco de bajada y subida abrupto de la linea de vertical. La cantidad de disparos verticales en un segundo da los cuadros por segundos representados.
Los espacios entre el flanco de disparo y el inicio de video marca el porche trasero y el espacio sin señal de video hasta el nuevo dispare el porche frontal, en similar medida para con el vertical, ambas marcan espacios sin informacion de video, para permitir “retornos” de linea de video, dado que en los tubos de rayos catodicos habia un tiempo inherente de retorno de linea.

Por ende, para resumir, si quisieramos capturar el video necesitamos engancharnos a la señal de sincronismo horizontal y comenzar a adquirir pixel a pixel, pero deberiamos conocer que ancho tiene cada pixel.

Aproximaciones teoricas

De este punto en adelante se plantearan teoricamente partes necesarias de la solucion.

Flujo de temporizado de captura

Hay ciertos calculos que son faciles de sacar, como cual es la resolucion vertical, que es la cantidad lineas horizontales o disparos de horizontal que se dan antes de que se produzca un disparo vertical (en modo progresivo).
Otros que son parametros de entrada, como los pixeles por linea, que solo dependen de la capacidad del receptor para capturar cada pixel. En un monitor analogico lo da el ancho de banda de video y la definicion del pixel en el TRC. En el caso del capturador, por la cantidad de memoria que dispongamos por linea y la capacidad de captura del conversor analogico a digital. Esto se conoce como frecuencia del pixel que es resolucion total horizontal x vertical x cuadros/seg.
En 640×480 y 60 cuadros son aprox 800x525x60=25.175Mhz
Otro punto no menor es que el CAD debe ser capaz de adquirir los 3 colores al mismo tiempo, sino estariamos capturando el rojo de un pixel y potencialmente el azul del siguiente.
Este modulo tambien tiene la responsabilidad critica de responder rapido y sin variaciones al disparo de horizontal, si esto no se cumple sera visible en la pantalla las variaciones.

Transporte y conversion

Esta etapa tiene varias responsabilidades, una es la de tomar lo que sale del adquisidor y transportarlo al microcontrolador por el puerto que este tenga, otra es la de convertirlo en tiempo real al formato de colores que se haya dispuesto de memoria para presentar en pantalla pero la mas importante es la de unir estos puntos con un mecanismo automatico de desligue al procesador de la tarea, en este caso el uso de DMA (Acceso Directo a Memoria).
En nuestro caso se usara un ADC de 16 bits por color y un bus de 8 bits asi que los 24 bits finales de color, como las pantallas HDMI manejan 24 bits, es logico descartar el byte mas bajo de cada color.

En el grafico de la izquierda se ven algunas compresion de color mas usadas con la cantidad de bits por color.
Para comprimir en tiempo real hay que tomar la entrada, color por color y descartar la cantidad correcta de bits de cada uno hasta completar los 3 colores.
Esto se puede ver en el siguiente grafico, donde se usa un registro de desplazamiento para ir procesando cada color, tirando los bits menos significativos y pasando lo al buffer.

Almacenamiento

Esta etapa repite la vision de los puntos anteriores pero hace un paso atras para tener una vision mas amplia, que es que parte de la informacion que capturo va a la memoria que se dispone.
El video tiene ni bien se dispara un back porch sin informacion util, pero seguido de informacion util, el desafio es esperar siempre la misma cantidad de tiempo. Para eso se utiliza el mismo mecanismo de captura, pero en vez de poner de destino un area de memoria de video, se envia a una unica posicion dummy.
Esto se logra usando encadenamiento de DMA, para que sea de manera automatica.
Una vez hecho esto la memoria se llenara de una linea a la vez, usando como infomacion de linea un conteo de cuantos disparon HSYNC se tienen, hasta el proximo disparo VSYNC que resetea la cuenta.

Renderizado HDMI

Una vez que se haya logrado guardar un cuadro completo de la imagen capturada, se puede utilizar para la entrada de una placa de video, pero que tal si lo hacemos SIN una placa de video?
Esto es posible gracias a un proyecto opensource llamado picoDVI, que permite utilizar un microcontrolador de propositos generales Raspberry pico RP2040 (no confundir con la raspberry pi), el cual utiliza 8 pines del microcontrolador para generar al vuelo las señales de DVI, precursor del HDMI.
En la pagina de Wren6991 esta bien explicado, pero en resumen, se encodean los pixeles para generar tramas TMDS, usando 8 bits por color y 2 bits de correcccion.
Esta informacion se manda para el rojo, verde, azul y reloj de manera diferencial para suprimir el ruido, de ahi las 8 lineas usadas.
DVI limita la cantidad de monitores, aunque la gran mayoria lo soporan, igualmente en mi fork de picoDVI realize el soporte de HDMI, con la inclusion de audio, el unico detalle es que DVI se puede usar sin pagar y HDMI requiere pagar licenciamiento y verificacion de complimiento de estandar. Si lo usas a nivel personal, nadie te va perseguir por usarlo en tu casa, si vendes miles de unidades seguro te tocan el timbre.

Cuando no hay perifericos, martillazos

Los microcontroladores de propositos generales (SoC) pueden tener conversores analogicos a digitales, puertos series como el USART, I2C o SPI, pines que responden a interrupciones o algunos mas especificos, pero la pregunta es como mostrar video sin un periferico de video?
Para esto primero cuento como se hace normalmente cuando se quiere “programar” un periferico, bueno se usa bit banging, que es esto?
Bit Banging es tanto leer como escribir los pines de I/O del micro para generar a fuerza de codigo un comportamiento, cual es el truco? Bueno que se requiere muchos mas ciclos de reloj de lo que necesitaria el periferico, esto es porque el programa debe leer estados para poder decidir y esto requiere al menos 2 muestras para no errarle.
Este numero suele se mucho mayor, alrededor de 10 veces, porque las instrucciones de un micro no son de un ciclo de reloj.

Esto hace que el micro se vea ocupado haciendo tareas que son realmente triviales para un periferico dedicado, lo cual es un mal uso del micro.

Procesando los numeros

Si vemos los casos de arriba, tanto para la captura como para la renderizacion requeririamos un micro de 1200Mhz para captura y de 2500 Mhz para renderizacion HDMI, los numeros no cierran. Y todavia resta espacio de micro para que se puedan hacer otras cosas, asi que hay que buscar otra manera.

Salvando el dia con el PIO (del rpi Pico)

El RPI Pico 2040 es el primero de una familia de microcontroladores de la Raspberry Pi Foundation, entre sus caracteristicas:

  • Procesador Cortex M0 de doble nucleo
  • 2 Mbytes de Flash de programa
  • 264Kbytes de RAM
  • USB 1.1
  • 26 pines de IO
  • Timers, SPI, USARTs, CAD
    y….
    2 PIO (programable IO) de 4 maquinas de estado cada uno, pero que es esto?

La PIO no es mas que un periperico programable de entrada salida que permite desarrollar perifericos no existentes en el micro.
Esta directamente conectado a los puertos de entrada salida, puede conectarse al DMA y lo mas interesante es que tiene su propio set reducido de instrucciones que corren separado del procesador principal.

El pocas palabras es como tener 8 pequeños microcontroladores que pueden correr codigo a ciclo perfecto (cada instruccion es un ciclo de reloj).
Con esto se pueden dedicar un pequeño procesador (llamado maquina de estado) a capturar la entrada, comprimirla y mandarla a memoria y otros a transportar las tramas TMDS a la pantalla HDMI, sin uso de la CPU.

Armado

Con lo expuesto antes, se arman todos los modulos y etapas aprovechando los PIOs del RP2040, los DMAs para transferencias sin uso de CPU e interrupciones por flanco de HSYNC y VSYNC y se dispone memoria (que no es mucha) para modos de 320×240 y 16 bits o 640×240 y 8 bits, asi como el uso de pines para teclado y el USB para gestion remota.

La frecuencia de trabajo del micro esta en 250Mhz, para lograr la velocidad necesaria en el HDMI, esto significa que el limite de los 133Mhz se ha superado, pero porque anda?
El limite de los 133Mhz lo dicta la memoria flash QSPI, que encima tiene mas penalidades en tiempo porque el codigo que se cachea no necesariamente es el que se va a ejecutar (logica de prediccion de salto).
Pero, si corremos desde RAM, no tenemos esa limitacion, y para eso toda rutina critica, se marca para correr a maxima velocidad. El micro principal no se ve afectado.

Pila de Software

El software esta desarrollado de manera modular, desde las rutinas de bajo nivel para captura y renderizacion como las de menues en pantalla y sobre imposicion en pantalla.
Salvo el SDK de Rpi Foundation (que fue modificado) y la libreria de DVI (que tambien fue modificada) todas las otras librerias fueron realizadas de cero.

Videos del conversor

Aca comparto una serie de videos de youtube, no tienen una gran edicion, son caseros pero muestran la idea.

Primer video del pico RGB2HDMI
Aplicacion USB para captura de imagenes
Sistema de menues
Charla en Commodore eu
Menues integrados
Firmware unificado para ambas resoluciones y guardado de configuraciones

Mas informacion

Pagina del pico-RGB2HDMI
Pagina de pcbway shared project
Grupo de Commodore Argentina
Contacto mlorenzati@gmail.com

Bluetooth a PS/2: Necesidades modernas, sistemas de antaño

Como crear un adaptador de teclado Bluetooth a PS/2 si nadie lo ha hecho antes

Si hablara, ella te diría que me conoce desde chico, y yo te digo que la conozco muy bien. A ella le debo parte de mi interés por la ciencia, por las cosas técnicas. Fue tal el revuelo en casa cuando apareció, que algo adentro de mi muy joven yo hizo clic. Con ella podía jugar, dibujar, explorar, hacer mi propio mundo ahí adentro, pero no era simple. Había que aprender, había que probar, pero había que tenerle respeto para no romperla, que ya era una herramienta esencial de trabajo. Fuera del horario laboral éramos yo y ella. No podía molestar cada vez que quería hacer algo, tuve que aprender yo mismo como usarla, como invocar las cosas que quería,  como salir de ese menú raro que se había puesto y no había visto nunca.

Ella, es mi PC 486 de 1997. Cyrix DX2 a 66Mhz en sus orígenes, hoy un DX4 a 100Mhz después de que esa batería asesina le comiera su placa madre original. No importa, sigue siendo ella, con su hermoso gabinete y un disco duro que al día de hoy tiene los mismos dibujos y savegames que le hice cuando tenía 7 años, más o menos. Para mi siempre fue todo pc speaker; era una PC de trabajo. Ya de adolescente un amigo me regaló su vieja SoundBlaster CT2230, y descubrí todo lo que me había estado perdiendo. De vez en cuando juego algún que otro juego, como los legendarios Monkey Island que nunca jugué de chico, le vuelvo a dar una pasada a los niveles de Jill of the Jungle que tanto conozco, o instalo algún que otro software interesante que hoy en día gracias a los archivos online están al alcance de la mano.

Yo y ella, allá por los 90

En fin, ella me acompañó toda mi vida. Siempre en su propio mueble y hoy en día en escritorio compartido con mi setup moderno; comparte monitor y parlantes con mi Lenovo Yoga 720 de 2017 utilizando un conversor de VGA a HDMI. Solo tengo que estirarme, encenderla, tocar dos botones en el monitor y ¡pum!, nos fuimos a 1997. ¿Nos jugamos YA un Indianápolis 500? Dale. Acordate que la carpeta se llama INDI y está en C:\JUEGOS\. Si más vale, cómo olvidarlo, dejame que en Norton Commander uso las flechas del teclado y ya lo pong… ¡Ah!, el teclado. Beige, enorme, crujiente pero de muy buenas teclas y un enter que daba placer, engorroso y con un cable largo. Saco mi moderno y práctico teclado Bluetooth que uso con la 720 y me dispongo a cambiarlo por ese bicho, ¡si solo pudiera usar el mismo teclado para mis dos PCs!

De toda necesidad salen planes y de esos planes, soluciones. No encontré nada en internet que resuelva mi problema, parecía que nadie lo había intentado y ninguna empresa le vió potencial comercial como para ponerse a fabricar un adaptador que permita conectar un teclado Bluetooth a un sistema con puerto PS/2. Ahí nomás se me prendió la lamparita y acepté el desafío, de la misma manera que acepté el desafío de aprender computación cuando era joven. Tenía que poner a uso práctico mis modestos conocimientos de C++ y hacer un proyecto con alguna de esas placas de desarrollo que tan famosas son hoy en día. Arduino tiene una gran comunidad pero su hard está un poco anticuado ya. Así descubrí la ESP-32 de EspressIF, este pequeño gigante tiene WiFi, Bluetooth, un IO completísimo y un procesador de núcleos duales a 240Mhz, todo a un precio accesible, ¡casi está para reemplazar la PC entera!

Mi setup moderno, Yoga 720 a la izquierda, ella abajo a la derecha, teclado Bluetooth al centro

Nunca lo hubiera logrado de no ser porque encontré dos librerías para ESP-32 que la comunidad ya había pre-cocinado, o al menos hubiera tardado muchísimo más que la semana y media que me llevó. La primera es PS2dev, que maneja toda la interfaz PS/2 y emula ser un teclado. PS2dev estaba muy verde, poco desarrollada, solo encontré un usuario que la había usado exitosamente en un sistema no-PC-compatible y un montón más que se quejaban de que no servía para nada. Entonces empecé a debugearla y me encontré con que el problema estaba en el tiempo.

PS/2 (o PC-AT si nos remontamos a sus orígenes), es un protocolo serial bidireccional, donde la PC (el host) y el teclado periférico se turnan para comunicarse por un único cable de datos, regidos por una señal de reloj. El teclado envía las teclas presionadas y las ya no presionadas como códigos de uno o dos bytes de largo llamados make codes y break codes, correspondientes a una tabla que los asignaba a cada símbolo y letra a la que IBM llamó Scan Codes. Normalmente el teclado envía estos códigos y no pasa más nada, la computadora recibe el mensaje y actúa como esperamos. Pero hay ciertas ocasiones donde la comunicación hace uso de su carácter bidireccional, es decir que el host se comunica con el teclado, por ejemplo para solicitarle información, apagar o prender sus LEDs, etc. Para esto la computadora envía mensajes, llamados Mensajes de Comandos PS/2, y espera para cada uno al menos una respuesta de confirmación proveniente del teclado, llamada ACK (por acknowledge o “confirmación” en inglés). Entonces si queremos emular un teclado real tenemos que responder en tiempo y forma a estos mensajes de comandos. PS2dev lo hacía, pero resulta que las BIOS (sistema básico que controla el arranque e IO de una PC compatible) suelen ser muy exquisitas con sus tiempos y encontré varios sistemas donde la actuación de PS2dev no podía superar el encendido de la máquina, haciendo que la BIOS ignorara totalmente a nuestro “teclado”. En una Toshiba 205CDS respondía muy rápido a la pregunta “¿sos un mouse o un teclado?” ocasionando que la BIOS no recibiera el mensaje y configurara el periférico por defecto a un mouse, porque su puerto PS/2 es combinado. En mi 486 respondía muy rápido al mensaje “¡prendé tu LED de Num Lock!”, la BIOS no lo recibía y terminaba ignorando el teclado, asumiendo que estaba funcionando mal. Solo solucioné todos estos errores agregando los delays específicos en el preciso momento que eran necesarios, antes y después de cada ACK. ¡Y estoy hablando de microsegundos!

Con PS2dev finalmente funcionando nos quedaba la otra mitad; la comunicación Bluetooth. Mi teclado es BLE o Bluetooth Low Energy, un nuevo protocolo mucho más eficiente que hoy en día coexiste con el ultra-archi-conocido Bluetooth Classic. Otra librería me dió el dominio para esta interfaz, bt_keyboard, hecha por un usuario de la comunidad que usó el ejemplo publicado por el  mismísima fabricande del ESP32, EspressIF, usando su API para Bluetooth HID recién salida del horno.

Bt_keyboard funcionaba, reconocía mi teclado, se conectaba, ¡recibía los códigos! No podía ser mejor, pero pasaba algo. Al igual que PS2dev, estaba muy verde y EspressIF no se había molestado en incluir entre sus rutinas todas las que se encargaban de reconectar el teclado una vez que había sido emparejado, entonces había que reiniciar y emparejar el teclado con cada encendido. Fue así como investigué sobre BLE y como el ESP32 guarda en su memoria flash las claves permanentes que nos permiten reconectar a un dispositivo previamente emparejado, hice las rutinas que escanean y detectan la presencia del teclado y nos salvan de tener que emparejarlo de nuevo. Ahora sí, ¡practicidad al fin!

Mi 486 luciendo el prototipo del adaptador

Solo un pasito más. Los teclados Bluetooth transmiten códigos para cada tecla, como los que creó IBM para su PC en los 80. Decime que son los mismos. No, ¡claro que no!, no puede ser tan fácil. Los códigos que transmiten los teclados modernos, sea por Bluetooth o algo más conocido como USB, son precisamente códigos HID creados por el consorcio USB. Y no son uno para presionadas (make) y otro para liberadas (break), sino sólo uno que está presente (o no) dependiendo si la tecla está apretada (o no), que se comunica en un paquete de datos cada vez que hay algún cambio en las teclas. Así que el reto estuvo en hacer rutinas que detecten la presencia o no de la tecla en base a los códigos HID, traduzcan esto al respectivo código make o break, y finalmente lo envíen mediante PS2dev al la computadora host.

El último detalle lo tuvo una característica que quizás es la más interesante en lo que refiere a la interfaz PS/2; el llamado comportamiento Typematic o “tipomático”. Si lo traducimos literalmente, una combinación de la palabra “tipo” y “automático”. Por si no te diste cuenta, te lo explico, “tipo”es el nombre que se le da a una letra o símbolo, así que estamos haciendo referencia a: aaaaaaaaaaaaaaaa. Si, a cuando se repiten las letras automáticamente si mantenés apretada una tecla, a eso. Acordate cada vez que lo uses, “miren, ¡estoy tipomatiqueandooooooo!”. USB HID no provee un mecanismo explícito para detectar si una tecla está mantenida apretada y actuar al respecto, hoy en día es la computadora quien lleva el registro de que la última tecla no se soltó y empieza a repetirla internamente para lo que sea que estemos haciendo. En los viejos teclados PS/2 era el mismo teclado el que entraba en modo Typematic después de cierto tiempo de mantener apretada la tecla, usualmente unos 500 milisegundos, para luego enviar una y otra vez el mismo código make de la última tecla presionada, usualmente unas 20 veces por segundo. Esa fue la última cosa que le faltaba a mi proyecto.

Una vez emulado PS/2, solucionados los problemas de conexión de Bluetooh, traducidos los mensajes USB HID a los Scan Codes de IBM, y emulado el comportamiento Typematic, mi proyecto estaba terminado al fin. Un simple cable a ficha DIN-5 o Mini DIN-6 permite conectarlo al sistema, y le pedí a un amigo que me haga una cajita en 3D para protegerlo.

Primera unidad para betatesters, en este caso con conector Mini-DIN

¿Funciona? Si, y muy bien. Pueden encontrar el código fuente en mi sitio de GitHub. De hecho todo este post lo escribí con ella, mi 486, pero no le digas que con un teclado Bluetooth, ¡porque no se dio cuenta y piensa que es PS/2! Ahora si, disfrutar del Indi 500 a simplemente dos botones, y un switch de distancia.

Intel 4004

Conoce la historia del intel 4004, el primer microprocesador de la historia.

Intel 4004

Unos meses antes de que Federico Faggin comenzara a trabajar en Intel, la compañía de calculadoras japonesa Busicom le había encargado a la empresa el desarrollo de unos cuantos chips. El ingeniero Ted Hoff, uno de los primeros empleados de Intel, creyó que los circuitos integrados propuestos por Busicom eran demasiado complejos, ya que requerían miles de transistores, e ideó un chip de 4 bits que ejecutara las funciones de la calculadora. El por entonces CEO de Intel, Robert Noyce, le dio permiso para continuar trabajando en el proyecto. Junto a otro ingeniero, Stanley Mazor, crearon la arquitectura básica, el diagrama de bloques, el set de instrucciones del microprocesador.

Otros ingenieros también trataban de desentrañar por entonces cómo crear un microprocesador. El mismo Federico Faggin opina que “no fue un paso tan extraordinario, era simplemente tomar lo que el cliente quería hacer y hacerlo mejor en ese momento, sencillamente porque la tecnología de puerta de silicio de Intel permitía colocar el doble de transistores en el mismo chip y usando una RAM dinámica podías reducir aún más el número de transistores”. Pero hasta que él llegó a Intel, el proyecto para Busicom estuvo parado durante meses. Faggin estaba feliz porque pensaba que era el momento correcto para construir una CPU en un chip, pero al mismo tiempo estaba preocupado porque Intel había prometido un tiempo de entrega muy corto.

Intel lo había contratado demasiado tarde para cumplir lo pactado, y tampoco había valorado la dificultad del proyecto. De hecho, al día siguiente a su incorporación, él, Hoff y Mazor recibieron la visita de Masatoshi Shima, un ingeniero de Busicom, que se encontró con la noticia del escaso tiempo con el que disponían. Faggin se puso manos a la obra, y durante meses trabajó a conciencia, quedándose en Intel hasta altas horas de la noche para lograr su meta. No solo tenía que dar vida a ese chip, sino que el pack incluía el desarrollo del 4001 (una memoria ROM), el 4002 (una RAM) y el 4003 (un dispositivo de entrada/salida). Shima, el ingeniero de Busicom, durante seis meses estuvo en Intel ayudándole y comprobando sus avances.

Para 1971, Faggin había desarrollado toda la familia de chips e Intel los presentaba anunciando una nueva era de la electrónica integrada. Aunque es difícil determinar la contribución que hizo cada uno, lo cierto es que no solo Federico Faggin, sino también Ted Hoff y Stan Manzor, han pasado a la historia, conjuntamente, como los padres del microprocesador.

El Intel 4004 fue lanzado en un paquete de 16 pines CERDIP el 15 de noviembre de 1971. El 4004 fue el primer procesador de computadora diseñado y fabricado por Intel, que previamente se dedicaba a hacer semiconductores de chips de memoria. En su anterior empleo, en Fairchild, Faggin había desarrollado una tecnología pionera llamada Silicon Gate Technology (SGT) y también había diseñado el primer circuito integrado MOS usando la tecnología SGT (el Fairchild 3708), demostrando la viabilidad de la nueva tecnología. Tan pronto como empezó a trabajar para Intel, Faggin creó una nueva metodología de «Random Logic Design» con silicon gate, que no existía previamente, y la utilizó para encajar el microprocesador en un único chip. Su metodología fue usada en todos los primeros diseños de microprocesadores de Intel (8008, 4040, 8080).

Masatoshi Shima, que asistió a Faggin durante el desarrollo de la familia 4004, más tarde escribió el software para la calculadora Busicom y se unió a la compañía Zilog, fundada por Federico Faggin a finales de 1974 y la primera compañía dedicada exclusivamente a microprocesadores, para el desarrollo y diseño del microprocesador Z80, uno de los tres chips que provocaron la revolución de las home computers en los años 80’s.

Apple Macintosh

Te contamos un poco sobre esta fabulosa máquina, que causó tanto revuelo en 1984

La McIntosh roja es una variedad de manzana de piel roja y verde. Tal es el origen del nombre del primer modelo de computadora personal con entorno gráfico lanzada a principios de 1984 por Apple, destinada al consumidor promedio y con un costo de U$S 2495 en los Estados Unidos.

Si bien no fue la primera computadora personal que incluyó una interfaz gráfica de usuario (la primera fue la Xerox Star 8010 de 1981), sí fue la primera con la que dicha interfaz alcanzó el éxito comercial. El sistema operativo Lisa (rebautizado Macintosh System 1.0) y el sistema de oficina Lisa, ambos heredados de la computadora Apple Lisa (lanzada en enero de 1983) introdujeron aspectos que perdurarían en los futuros sistemas de la compañía: barra de menú por sobre la pantalla (aunque sin el menú Apple), comandos de menú con el símbolo de Apple (reemplazado luego por el símbolo del trébol), doble clic sobre un ícono para abrir la ventana de forma animada, arrastrar los ítems a la papelera para eliminarlos, etc.

En cuanto al hardware, tenía un procesador Motorola 68000 de 16 bits corriendo a 8 Mhz. (Lisa, con el mismo procesador, trabajaba a 5 Mhz.) y 128 KB de memoria RAM soldadas a la placa lógica (equivalente al motherboard). Los precios de las memorias eran un factor limitante por entonces; de haber salido de fábrica con 256 KB habría costado entre 200 y 400 dólares más. Por otro lado, no poseía un procesador gráfico o de sonido dedicados, sino que utilizaba el mismo procesador Motorola, que posteriormente sería utilizado en las consolas Sega Génesis, Sega Mega CD y Neo Geo como procesador principal, y en la Sega Saturn como procesador de sonido.

También incluía una unidad de disquetes de 3,5″ con capacidad para 400 KB (contra 320 KB de los disquetes de 5,25″ de la competencia), un monitor CRT blanco y negro de 9″, un mouse (algo prácticamente inédito en aquellos tiempos) con un solo botón, y un teclado, aunque sin las teclas de dirección (flechas) ni pad numérico.

Las posibilidades de expansión eran bastante limitadas: la memoria RAM podía llevarse a 512 KB pero reemplazando los 16 chips de 64 KB soldados por otros de 256 KB; las unidades externas de disquetes, necesarias para poder operar eficazmente el equipo, valían U$S 495; y los discos rígidos fabricados por terceros, que se conectaban al puerto serial, estaban al alcance de unos pocos.

Es por esto que, en septiembre de 1984, aparece la Apple Macintosh 512K (a un precio de U$S 2795), con 512 KB de memoria RAM, una capacidad de disquetes de 800 KB y la posibilidad de conectar un disco rígido propietario, entre otras mejoras.

Volvé a ver ésta y otras computadoras históricas en Espacio TEC. No te pierdas la reapertura el próximo domingo 19 de septiembre de 9 a 12 hs y de 14 a 18 hs con entrada libre y gratuita.