Retrocomputación: La historia de Retroterm y otros desarrollos

Tenía pendiente desde hace un tiempo escribir un artículo sobre el desarrollo de Retroterm, nuestra terminal multimedia multiplataforma, que nació en Commodore 64 y luego se expandió para soportar también Commodore Plus/4 y MSX.

Como algunos sabrán, en el año 2006 nos reunimos Diego Chiacchio, Pablo Roldán y yo, Jorge Castillo, y decidimos crear el foro de Retrocomputacion.com. De los tres, Pablo y yo, aunque en distintas épocas y ciudades, habíamos seguido caminos similares: fuimos usuarios de Commodore 64 y después de Amiga, programamos en lenguaje ensamblador e hicimos proyectos de electrónica. Pero no fue hasta 2020 con el proyecto Retroterm que empezamos a publicar software con el nombre Retrocomputación.

Continuar leyendo “Retrocomputación: La historia de Retroterm y otros desarrollos”

El camino de la Amiga 600

Cual es el punto para desistir en la reparacion de una Commodore Amiga, habiendo ya tan pocas disponibles a la venta y cual es el punto entre costo hundido y pura nostalgia insistidora para llegar a puerto?

Amiga 600 en su estado final

Comienzo del viaje

En los hobbies no hay ningun criterio unificado, solo puntos de encuentro de algunos intereses comunes, en mi caso soy un gran aficionado de las microcomputadoras Commodore (si, el formato todo en el teclado).
En este hobbie queres ir consiguiendo esas maquinas, ya sea funcionales o por reparar, la lista se va completando y siempre queda la figurita dificil, la Amiga 600.

Un poquito de historia

Como algunos conocen, Commodore como tantas otras empresas de computadoras, tuvo su primer traspie en los 80, donde muchas otras empresas lucharon por permanecer como es el caso de Apple.
Commodore sobrevivio pero continuo con algunas malas decisiones desde el punto de vista de los negocios y algunos aciertos, como fue el caso de adquirir en 1984 a Amiga Inc.
Esto dio luz a una de las computadoras mas innovadoras en su epoca, la Amiga 1000 y al mejor exito comercial que fue la computadora hogareña Amiga 500 en 1987.
Luego de este exito salio la Amiga 500+ que poseia pocas mejoras como 1Mega de fabrica en vez de 512 y abaratamiento de costo de fabricacion y de premio algunas incompatibilidades no comunicadas en su release.

En paralelo se trabajo en lo que seria una version economica (que nunca lo fue salvo en la calidad de terminacion de su PCB) la cual contaba con PCMCIA y disco rigido, la intencion fue llamarla A300 pero por su costo final se termino llamando A600, su procesador era el mismo que el de la A500 pero en vez de formato PDIP era un PLCC, un Motorola 68000 a 7.16Mhz

Fue la mas limitada e incompatible de las AMIGAs en su epoca por los cambios en su Kickstart 2.0 y por tener un teclado reducido, pero la mas buscada en la actualidad.

El regalo

Aproximadamente en junio de 2022 un gran amigo Francisco Manera me comenta que a sabiendas de mi interes por una A600 me regala una marcada “irreparable”. Esta se habia enviado a revisar por un gran experto en Argentina (Otto) y el tiempo que habia que dedicarle y el daño que le habia hecho el que la intento “recapear” la habian dejado en condicion de muerta.
Cosas inentendibles como poner capacitores TH (thru hole) donde van SMD, pistas cortadas por doquier al querer soldar, resistencias quebradas.
Dejo unas fotos pero no son para gente sensible.

En el proceso de reparacion se retiraron todos los componentes TH que no lleva y se repararon pistas rotas, el lugar que mas desafios dio fue debajo de los PLCC y las memorias RAM.

En un punto se logro que la A600 arranque por tan solo unos minutos, primero con pantalla verde (problemas de memoria) y despues arranque completo.
Claramente algo en la placa hacia calentar a uno de los custom chip principales (Gayle / Denise / Agnus) y el sistema moria.

Se utilizo el DiagRom de John Hertell que en un punto mostraba que la memoria era leida correctamente, pero en un punto se detectaba una instruccion erronea y el sistema se detenia.

Cambio de estrategia

Luego de compartir en los grupos de Commodore muchos me comentaron que por el estado de la placa era mejor armar una de cero y migrar los componentes custom, un conocido “salto de fe” ya que los chips de la Amiga 600 donante podrian estar malos.
A esto compre el PCB Junior 600 en idoregesz.hu el PCB Junior 600, luego de esperar casi 2 meses lo tenia en mis manos, todos los componentes y conectores estandar fueron comprados en mouser, gracias a una lista de compras ya hecha.


Usando una detallada guia de John Hertell y con la ayuda de un localizador de componentes para este pcb y el esquematico pude ir armando paso a paso cada etapa.

  • Pasivos (capacitores, resistencias y ferrite beads), diodos y transistores
  • Ficha de alimentacion y ferrites de fuente (en vez de poner el toroide que es mas ruidoso)
  • Sistema de reset con el LM555 y el 74F27 (se puede testear el flanco de reset)
  • Gayle y Agnus con el clock principal (X1 y 74F258) (se puede ver hsync/vsync a la salida)
  • CPU ROM el 8520 (CIA) y los U21 y U22 (74LS245)
  • Paula y U28 (1488) para la salida de serial con el diagrom (requiere el conector de DB25 a DB9) a esta altura podemos conectar a la PC y ver las tramas de diagnostico usando 9600 8N1 en el configuracion de la terminal serie
  • RAMs y U26 (74F00) y U27 (74F139) (aca ya pasaria el testeo de memoria)
  • MPU y resonador de 3Mhz para verificar el teclado
  • Agregamos el DENISE y el chip CXA1145 y deberiamos ver video
  • Agregamos los CIAs y el U34 y tenemos mouse
  • Seguimos con los 27LS245 para el PCMCIA y completamos conectores
  • Finalmente ponemos capacitores electroliticos

Algunas fotos del proceso

Y a terminar de probar!

Pruebas y reniegues

Llegamos al menu pero se ven errores y (de nuevo) la computadora presenta fallas y al tiempo se termina apagando… tan cerca!

Luego de buscar en los grupos, algunos errores se dan por los socalos PLCC que no generan buenos contactos, asi que se reviso todo, se limpio por sobre todo para los PLCC84 se recomiendan o no usarlos o ponerle los clips sujetores, porque al calentar se saltan del socalo como un pop corn.
Eso y unos buenos disipadores.

Listo! la maquina empezo a funcionar! pero veia que el joystick hacia lo que queria, el personaje se movia solo.

Investigando y la ayuda de Otto, aprendi que con Commodore nada es facil ni bueno, logico.
El control parcial del puerto de joystick se manda al DENISE! (que es para video) y lo mas lindo es que no se mandan todos los pines sino que se multiplexan las 4 lineas de cada joystick (arriba/abajo izq y derecha) en solo 2, lo mismo en el otro puerto. Bueno el encargado de eso es un 74LS157 que puede fallar…

Luego de cambiarlos le tocaba el turno al teclado, bueno como era de esperarse la membrana estaba destruida asi que se compro una nueva en Inglaterra.
Si compramos para la Amiga600, tambien para otra A1200 que necesitaba…


Sumemos a esto el proceso de retrobright del teclado.

Tambien como no se tenia disquetera se tuvo que convertir una SONY MFP920 para que funcione en AMIGA


Ya estaba listo para jugar, poniendole algunos juegos nuevos a la gotek que tenia que indexar en el menu y me aparece esto…

Bueno al parecer la A600 no era capaz de grabar a disco, mirando donde esta esto, encontre una maravilla de las que hacia Commodore (Otra historia interesante que me conto Otto).
Para evitar algunas compuertas para invertir Write Enable y poner con bus separatorio a Write Data, lo metieron en el… Gayle!

Era conocido que estas compuertas fallaban con el tiempo y se debio poner lo mismo con logica separada (como en la A1200), si, no me gusta pero lo soluciono.
Aislamos los pines en el gayle y los controlamos por fuera.

Exito y Festejo

Ya a esta altura la gotek lee y escribe bien y podemos jugar a juegos con autoswap como el Indiana Jones and the fate of Atlantis


Adicionalmente se puso el disco rigido y se pudo validar que funciona perfectamente, al momento no es de mucho uso con 1Mega de ram, asi que esperando la expansion de 1 mega adicional por el trap door y solo Jack Tramiel y Jay Miner saben que le pondre en un futuro a esta hermosa maquina restaurada.

Desconozco la cantidad de horas dedicadas ya que fue un pasatiempo divertido y desafiante y no se lo mira desde el esfuerzo hecho, claramente esto no se hace con fines comerciales sino por la pasion al hobbie y a la tecnologia.

Marcelo Lorenzati
Ing Electronico
PS en Sistemas Embebidos

PETSCII 80 Converter

Recientemente nos donaron en el museo una maravillosa CBM PET 8032

Ya contábamos con otra PET, el modelo 4032, que son muy similares, pero la principal diferencia es el display: como sugiere el nombre, la 8032 tiene un display de 80 columnas, mientras que la 4032 solo tiene 40.

Si bien para la 4032 hay una variedad interesante de software (incluso modernos, como Attack of Petscii Robots), siendo la 8032 un modelo más “profesional” no encontré demasiado software, por lo que decidí comenzar a desarrollar algo para mostrar a los visitantes en esta máquina.

El principal problema que tengo es mi total incapacidad artística (y menos con caracteres PETSCII), por lo que se me ocurrió que podria armar un slideshow/animacion con PETSCII art, para lo cual tendria que utilizar algunos de los tantos utilitarios que convierten imagenes en petscii.

El problema que encontré fue que todos estos utilitarios generan PETSCII para la C64 y en 40 columnas (por lo que no me servían para generar pantallas para la 8032) tras lo cual decidí implementar yo mismo un conversor de imagen B&W a PETSCII.

El conversor toma una imagen en PNG, en 1 bit de profundidad de color, a una resolución de 640×200, y genera un archivo con los códigos que se pueden importar en cualquier compilador de assembler (aca voy a poner un ejemplo en kickassembler, el que utilizo yo).

Para utilizar el conversor lo mejor es utilizar algun software de edición de imágenes (ejempo: GIMP), ajustarla en tamaño a 640×400, luego la pasamos a B&W con 1 bit de profundidad de color (para eso mejor aplicar un filtro threshold, para evitar tramas). Finalmente reescalamos todo a 640×200 (la mitad de altura) sin aplicar ningun tipo de suavizado (nada de bilinear ni esas cosas, smoothing none), y lo guardamos como PNG.
Esta imagen “preprocesada” es la que vamos a usar como entrada en nuestro programa. 

El programa está escrito en Python 3, por lo que es requisito que esté instalado en nuestro sistema. Para utilizarlo simplemente escribimos “python convert.py <imagen_de_entrada.png> <output.raw>”, lo que nos generará un archivo de 2000 bytes, que es lo que ocupa una pantalla en la PET 8032.

Ejemplo de uso:

Supongamos que tenemos una imagen como esta:

entonces la llevamos a 640x400px. 

La razón de utilizar primero una resolucion de 640×400 y luego escalar verticalmente a la mitad es porque la “resolución” de pantalla de la pet es en realidad 640×200, pero los pixeles son el doble de altos que ancho, y para trabajar la imagen en el GIMP de manera que se visualice correctamente es mejor hacer todo en 640×400, y al final escalar a 640×200.

Una vez que acomodamos en tamaño, el siguiente paso es convertir esta imagen en B&W con 1 bit de profundidad de color. Para ello lo mejor es utilizar primero el filtro Threshold (disponible en todos los programas de edición de imágenes), ajustamos el slider hasta lograr el mejor resultado, y luego convertimos esta imagen a monocromo 1 bit. Esto es necesario porque simplemente en la PET no tenemos ningun color, ni escala de grises.


Queda un último paso, que es reescalar a la mitad, para que el software pueda realizar la conversión correctamente.

Para ello vamos a las opciones de Image Resizing de nuestro software, y reescalamos a 640×200 (quitamos el bloqueo de aspect ratio), y desactivamos todo tipo de suavización (nada de bilinear, trilinear ni esas cosas).

Exportamos esta imagen como PNG, y este lo utilizaremos como archivo de entrada con el conversor.


¿Por qué no hago todos estos ajustes automaticamente? Al fin y al cabo, la libreria PIL (tratamiento de imágenes en Python) permite hacer todo esto.

La razón es muy simple: Si automatizo estos pasos no tengo control sobre tamaños, ni ajustes de threshold, ni sobre qué efectos aplicar (a veces conviene por ejemplo aplicar un posterizado a 3 colores, y sobre eso realizar la conversion con un tramado por position), por lo que decidí que el programa SOLO realice la conversion del bitmap a characters, y el procesado que lo realice el usuario de la forma y con las herramientas que le parezcan.

Y como lo importamos en nuestro .asm?

Como mencionamos anteriormente, con “python convert.py image.png petscii.raw” convertimos la imagen a petscii. Luego podemos importarla y utilizarla como nos parezca. A continuación un ejemplo ultra sencillo:

 * = $0400 "Basic Upstart"
 // Esto basicamente escribe en BASIC lo siguiente: SYS 1050
.byte $00, $0c, $04, $0a, $00, $9e, $20, $31, $30, $35, $30, $00, $00, $00

* = 1050
main:
	// SETEAMOS EL SET DE CARACTERES MAYÚSCULAS
    ldx #12
    stx 59468 

    rts

* = 32768 "SCREEN"
.import binary "petscii.raw"

lo compilamos con kickassembler, cargamos el PRG en el vice (con el ejecutable xpet.exe), y obtenemos nuestra pantalla en PETSCII


y eso es todo…
el código del conversor lo pueden obtener de github: https://github.com/moonorongo/petsciiator80

Hasta el próximo post!