Catrin Labs Computers

Hace un tiempo atrás 8-bit guy presentó una idea maravillosa, y es diseñar un computador antiguo pero usando tecnología moderna. Es justamente un tema al que le había estado dando vueltas hace tiempo – desde que me puse a programar Prince of Persia para Atari probablemente – y cuando comencé a ver el video sobre este nuevo computador fue como “esto es!”. Lamentablemente mientras avanzaba el video vi que tomó rápidamente otra dirección y al revisar el grupo de Facebook en donde se discute el diseño vi que el proyecto se anduvo desvirtuando un poco. Asi que, con los recursos que contamos hoy en día me dije, entonces por qué no crear algo yo mismo?

Vamos un poco más atrás, por qué uno se interesaría en diseñar un computador antiguo? Quién lo va a usar? Para qué se usaría? Parte de las respuestas están en el mismo video, al menos para mi la gracia de un computador antiguo es que sus recursos son escasos, y esa limitación hace que uno comience a pensar en soluciones creativas, es un poco lo que se ha hecho con proyectos como PICO-8.  En la actualidad es prácticamente posible hacer lo que a uno se le ocurra en el computador, al no haber límites como que programar en ellos pierde un poquito la gracia, y si bien esto es muy conveniente para hacer software que resuelve problemas complejos y “serios”, al mismo tiempo para mi se convierte en algo bastante aburrido. Si, soy cuático, lo sé…

Otro motivo es que los computadores antiguos existentes tienen componentes propietarios que van camino a desaparecer, con el tiempo serán cada vez más escasos y costosos. Por ejemplo chips como el PLA o los VIC de Commodore ya no se fabrican, y aunque existen versiones modernas (del PLA), no se está exento de dificultades a la hora de la compatibilidad.

Ya pero quién lo va a usar?

Sobre la pregunta de quién lo va a usar, la respuesta es muy simple: Yo. Si algún otro loquito se entusiasma, pues muy bien! Pero esto es algo personal primero, si aun me quedan unos 30-40 años de vida hay tiempo suficiente para entretenerme con un proyecto como éste.

A diferencia del proyecto de 8-bit guy éste no es necesariamente un computador para vender. Incluso en sus inicios no necesita existir físicamente, con la tecnología de emulación existente (algo cacho) se pueden integrar los componentes a gusto y trabajar con eso. Si el proyecto agarra vuelo quizás alguien se interese en crear una placa y hacer que el sistema exista físicamente. Sería interesante por ejemplo poder alojar este nuevo computador en carcasas ya existentes y que tienen diseños que me encantan, como la del el C64C o la linea Atari XE, incluso hasta existen carcasas nuevas que son toda una delicia.

Criterios de diseño

Primero, este proyecto no se trataría de un solo computador, sino de una linea de computadores. Hay diferencias de hardware suficientes para distinguir al menos dos generaciones de computadores interesantes: 8 bit y 16 bit. En la generación de 8 bits pensemos en lo que ya existe: Atari 800, C64, ZX Spectrum, MSX y Amstrad básicamente. En 16 bits tenemos principalmente Atari ST y Commodore Amiga. Un nuevo computador para cada generación debería ser similar en tecnología pero con algunos pequeños cambios necesarios.  Primero, no se podrían utilizar componentes ultra propietarios como los chips de video (ULA, ANTIC, GTIA, VIC, etc). Segundo, no se podrían utilizar componentes ultra modernos porque violaría el principio inicial de este proyecto, por ejemplo un chip de video como el de la raspberry Pi estaría completamente descartado, en ese caso mejor programamos para Linux con SDL/OpenGL y ya.

Otro criterio importante es la disponibilidad de componentes. Al menos la CPU, el audio y componentes como memoria y otros de más bajo nivel pueden ser “off the shelf”. En cuanto a video el tema se vuelve un poco más complicado porque a excepción de hardware como VGA, no hay componentes off the shelf que se puedan usar directamente manteniendo los criterios del párrafo anterior.

Otro criterio es el software al que va orientado. No se necesitan computadores para correr herramientas productivas, para eso tenemos los computadores modernos, por lo tanto modos de texto de 80 columnas o modos de video de alta resolución pero de dos colores no tienen mayor sentido. Sólo se necesita lo justo para correr juegos que se vean bien en sistemas de televisión análogos usando aspecto 4:3.

Finalmente, otro criterio es el factor WOW. Pensemos en que estamos en 1988 y un nuevo computador de 8 bits es anunciado, qué anuncio nos sorprendería y nos haría ahorrar cada día para poder comprar ese computador? Un efecto similar a cuando veíamos los anuncios de revistas como MicroHobby en donde aparecían unas capturas de pantalla fabulosas, aunque al final los juegos reales no eran “tan así”. Recuerdo cuando fue anunciado el 130XE, lo primero que uno pensaba era en las capacidades de color y sonido mejoradas, pero al final solamente era más memoria, que casi ningún juego aprovechaba. También está el caso del ST que encabeza este artículo, que en capturas se veía muy bien, pero en la realidad la paleta de colores era mucho más básica de lo que se veía en las capturas, no tenía scroll por hardware y en general era bastante precario comparado con el Amiga.

Por otra parte pienso en equipos como el Amstrad, que en su tiempo no fue tan popular, pero que hoy en día se le está sacando el jugo con juegos realmente extraordinarios, similar a lo que está sucediendo con el C64, entonces por qué no contar con un computador que permita algo similar como base?

Definición de hardware

La definición que viene a continuación es sólo la idea original, pensemos en que sólo lo estoy anotando acá para que en el futuro no se me olvide, pero sirve para dar una linea a seguir o plantear alternativas sobre las cuales discutir si alguien se interesa.  Tómenlo como un brainstorming, quizás son combinaciones imposibles o que rompen los criterios ya mencionados, pero el tiempo dirá.

Hardware de 8 bits

  • Procesador: MOS 6502 y Zilog Z80,  Dual Boot como el C128
  • Audio: Stereo. En cuanto a chips hay varias opciones acá, el Pokey existe en bastante abundancia y tiene un sonido muy característico y con herramientas para crear música bastante poderosas. También tenemos los chips basados en OPL en abundancia, en donde se ha demostrado que pueden aportar incluso en el C64 donde ya contaban con el fantástico SID. Por último, el famoso PSG de Yamaha también es una excelente opción y es muy característico del audio de esa época.
  • Memoria: 128K
  • Video:
    • Salida de video compuesto
    • 256×192 pixeles
    • 16 colores de una paleta de 256 o 512 colores
    • Display lists
    • Modo bitmap y modo tiled
    • Modo texto: 40×24, 16 colores, caracteres redefinibles
    • 32 sprites de 16 colores (con 1 transparencia)
    • Video Ram: 128K
    • Interrupción por linea
    • Interrupción vertical
    • Scrolling por hardware
    • (vaya creo que se parece al chip del MSX2)
  • 2 puertos de Joystick
  • Joysticks de 2 botones
  • Controles análogos (mouse, paddle)
  • Sistema de almacenamiento via tarjetas SD
  • SDK: BASIC y Assembler

Hay que considerar que el hardware de video está limitado por la velocidad del sistema completo, un procesador como los indicados no es capaz de manejar rápidamente grandes cantidades de memoria, por lo que una alta resolución con muchos colores se topa con el problema de que el procesador necesita varios frames de la pantalla para poder manipular todos los bytes que representan un único frame, por lo que o bajas los frames por segundo o aparece el famoso tearing. Por eso se agrega el modo tiled, un buen modo de texto y display lists, ellos permiten combinar distintos modos de video en una sola pantalla y hacer que el chip de video haga lo mejor que pueda con usando menos memoria.

Por otra parte la similitud del hardware con el existente de esa generación permitiría hacer ports de juegos existentes pero con las mejoras que permitiría este nuevo hardware.  Imaginen por ejemplo remakes de juegos originales de 8 bit como Draconus, Montezuma pero usando más colores y mejores opciones de sonido, ya no se tendrían que hacer sacrificios del tipo “música o efectos de sonido”. O sin ir muy lejos, ver lo que ya se ha hecho con los isométricos clásicos de ZX Spectrum en MSX2.

Hardware de 16 bit

  • Procesador Motorola 68040 a 40Mhz
  • Audio: Stereo OPL3 + 2 Canales DAC por lado. Con esto se tiene lo mejor de ambos mundos, se pueden usar samples y sintetizadores sin que sea necesario emular sintes con samples y viceversa.
  • Memoria: 4MB
  • Video:
    • Salida de video compuesto y por componentes
    • 320×240 pixels
    • 256 colores de una paleta de 262.144 colores
    • Display lists
    • Modo bitmap
    • Modo texto: 40×24, 16 colores, caracteres redefinibles
    • Blitter para BitBlt y Fill (sin sprites)
    • Escalado y Rotación
    • Video Ram: 512K
    • Interrupción por linea
    • Interrupción vertical
    • Scrolling por hardware
  • 2 puertos de Joystick
  • Joysticks de 2 botones
  • Controles análogos (mouse, paddle)
  • Sistema de almacenamiento via tarjetas SD
  • SDK: C y Assembler

Por supuesto que si bien hay dos generaciones planteadas, no significa que se trabajaría en ambas al mismo tiempo, es conveniente partir de una arquitectura pequeña como la es la de 8 bit y una vez ganada la experiencia – y si quedan ganas – seguir con la generación siguiente… Total, aun quedan 30-40 años para hacerlo.

Ideas locas

Componentes como los procesadores tienen restricciones físicas, principalmente su frecuencia de reloj, aun así se ha logrado crear hardware con estos procesadores overclockeados, por lo que se puede asumir que esto siempre es una posibilidad. Por ejemplo el 6502 normalmente corre bajo 2Mhz, pero perfectamente se puede pensar en que corra a 10Mhz. Lo mismo con el Motorola 68XXX, hay tarjetas de aceleración para el Amiga en donde se obtienen frecuencias mayores que ayudan sobre todo a los juegos que requieren muchos cálculos, como los poligonales.

A continuación dejo algunos videos a modo de inspiración, en donde se puede ver lo que hoy se hace con computadores de 8 bit que ya están bastante limitados, aun así los programadores han logrado hacer cosas que sus diseñadores originales jamás pensaron.

Ver también:

Parte II: Catrin Labs Computers: Chips de Video

Parte III: CLC-88 Micro de 8 bits

 

Programando en los ’90

Programar siempre me ha sido entretenido pero difícil. No me malentiendan, puedo lograr buenos resultados pero eso no implica que sea fácil, sólo que soy lo suficientemente porfiado para seguir adelante hasta lograr lo que quiero hacer. El poder convertir en real algo que antes sólo existía en la imaginación es una de mis principales motivaciones, y si esto plantea algún desafío técnico interesante, mejor aún.

Creo que uno de los motivos por los que ya no me entusiasma por ejemplo entrar a la programación de videojuegos, es que ahora tienes libertad para hacer cualquier cosa, y básicamente lo que se trabaja es el gameplay y el contenido. A mi en realidad lo que me llamaba la atención era el desafío técnico, como por ejemplo tratar de hacer un port de un juego de arcade al Atari (800): Cómo usar adecuadamente los 4 colores por línea, o los cuatro canales de sonido, o sacar el jugo a su CPU de 1.79Mhz con apenas 3 registros.  Recuerdo que podía pasar una tarde entera trabajando en una “rutina” de assembler en un cuaderno hasta llegar a su mejor versión.  Era una época en que una simple optimización podía significar que algo fuera factible o no.

 

2017-04-20 22.06.15
Reproductor de música FSTR

 

Bueno, eso era en los ’80 y reservaré ese relato para un próximo articulo de Prince of Persia para Atari.  Ahora vamos a ir “no tan lejos” pero sí a una época que ya no existe y que creo que sería difícil imaginar para quien no la vivió, y para los que la vivimos se nos ha ido olvidando con el tiempo.  Ahora es tan simple aprender algo que no nos acordamos de cómo se hacían las cosas cuando no existía stackoverflow, no había a quién preguntar y peor aún, no había documentación de ningún tipo.

Internet a inicios de los ’90

La primera mitad de los ’90 es una época que recuerdo con mucho cariño, se comenzaba a hacer accesible tener computadores más potentes y comenzaba a haber algo de información disponible para aprender a programarlos, por ejemplo en la biblioteca de la UTFSM podías encontrar algunos libros de Intel sobre la programación x86 y lo más importante, algo de código fuente para mirar en algunos rincones de Internet.

 

Intel 286 programming
iAPX 286

 

A ojos de hoy eso suena muy natural, pero era muy diferente a lo que tenemos hoy en día.  De partida el acceso a Internet no existía en las casas, sólo en las  universidades,  y siendo mechón como yo… ni siquiera podías usar internet en la universidad.  Entonces, no era llegar y escribir en un buscador lo que andabas buscando, no señor! No había tal buscador, ni siquiera tenías un navegador, la información estaba principalmente en servicios de grupos de noticias (usenet / newsgroups) – imaginen algo como un foro universal de internet de sólo texto – y sitios de descarga por ftp que se usaba por linea de comandos.  Para buscar, existía una aplicación llamada Archie que buscaba archivos, entonces sólo si el sitio contaba con un índice decente, podías llegar a encontrar algo.

 

tin
Newsgroups en Usenet (via TIN)

 

Ahora, como Internet no era tan grande como en la actualidad, los sitios que tenían información sobre programación de PC eran pocos y por lo tanto muy conocidos. Había un repositorio en especial que estaba replicado en varios servidores de FTP, se llamaba Simtel y era un paraíso.  No sólo había código fuente para mirar, sino que también documentación! Todo eso disponible al alcance de un comando GET.  El problema era que no podías llegar a ese punto si el acceso a esos sitios estaba bloqueado o peor aun, eras mechón como yo.

Siendo mechón en la UTFSM a inicios de los ’90

Y es aquí donde creo que por primera vez hablaré en público de las historias no contadas de mis tiempos en la UTFSM, cuando sabías que el conocimiento estaba disponible, sólo que no lo podías alcanzar. Esto era más o menos entre 1993 y 1994, y la UTFSM pagaba por tráfico internacional por lo que éste estaba permitido sólo para alumnos que tuvieran ramos o actividades que lo justificaran. El acceso para el resto de los alumnos era sólo a las réplicas nacionales en donde estaban los newsgroups (saludos a chile.comp.pc), pero no estaba Simtel.  Entonces algo había que hacer.

Aparte de no tener acceso a Simtel por estar en redes internacionales (que divertido suena eso ahora), estaba el inconveniente de que si llegabas a conseguir algo de información, sólo te podías llevar una copia en la mente, porque no podías pasar esa información a diskettes – ni hablar de pendrives, aun faltaban varios años para que siquiera inventaran el puerto USB. El único acceso era un terminal de texto monocromo en donde al menos podías descomprimir y leer los archivos in situ. Dado el estado de la tecnología todo era archivo de texto, incluso las revistas, así que bastaba con eso.  Aún así, persistía el problema de llegar a Simtel.

 

Terminal-wyse50
Terminal de texto Wyse 50

 

Los laboratorios de “investigación”

Y es aquí en donde aparecen los amigos de siempre: Luis Cueto, Max Celedón, Cesar Hernández.  Ellos por estar en cursos superiores tenían otros amigos que tenían acceso a otros laboratorios, en donde se hacía “investigación” y por lo tanto sí tenían acceso a los nodos internacionales.  Entonces, desde ahí se podía llegar a Simtel, pero tampoco había forma de llevarse archivos a la casa para estudiarlos con calma, ya que eran terminales de IBM conectados a un mainframe, al que sólo tenía acceso un grupo selecto de operadores – capa blanca incluida – a los que tenías que llamar con un timbre para que te mataran un proceso si éste se caía… cosa que ocurría habitualmente dado el número de veces que se escuchaba sonar el timbre famoso.

 

2bb5fd362fb409376af3b0108f19982f
IBM: Nunca los vi, pero es para hacerse una idea

 

Y es aquí donde entra a jugar la audacia de Max. La maquinaria de descarga de información funcionaba de la siguiente forma:  Max, Luis o César se conseguían una cuenta de IBM con algún amigo “investigador”, eso nos permitía usar ese laboratorio para llegar a Simtel siempre y cuando estuvieras dispuesto a suplantar presencialmente al verdadero dueño de esa cuenta. Yo no era de los valientes puesto que era muy joven para darme cuenta de que los usuarios de ese laboratorio no se caracterizaban por sus habilidades sociales, por lo que difícilmente te preguntarían el nombre. Esas cuentas iban muriendo pero Max siempre aparecía con una nueva, cuentas con nombres como i5elo200 o i5esp101 eran algunas de las regalones, e incluso Max tuvo una propia más tarde, i5mceled.

 

Captura de pantalla 2017-04-20 22.28.05
Inicios en la comunidad MSX con cuenta de “alguien”

 

Una vez encontrados y descargados los archivos en ese laboratorio IBM, tenías que pasarlo a tu cuenta Unix en el laboratorio que no tenía acceso a los nodos internacionales, pero sí tenían disketteras. Transferir los archivos era fácil porque esos laboratorios estaban conectados, y mientras no revisaran los logs del servidor ftp de Unix no habría problema.  Una vez con los archivos en la cuenta, venía el paso final que era pasar esos archivos a diskette.

Pidiendo favores a los verdugos

El último paso era pasar los archivos a diskette, y el más complicado porque tenías que pedírselo a una persona. Y no era a cualquier persona. En una zona especial del laboratorio Unix (labsw para los amigos), había un grupo de unas 4 personas que estaban tras un vidrio, intocables, omnipotentes, omniscientes. Esa división no era antojadiza, eran los únicos con acceso a todos los nodos de internet y a las estaciones de trabajo Unix de la época. Mientras los alumnos regulares como uno usaban un terminal de texto, ellos usaban equipos con 128MB de RAM, pantallas de 21 pulgadas, discos duros gigantes y mouse con puntero láser, cuando lo normal en las casas era tener 1MB de RAM, pantalla de 14 pulgadas y mouse con bolita.  Sí señor, ellos eran unos elegidos – literalmente porque había que postular al cargo – y tenían el poder de cerrar tu cuenta en cualquier momento (omnipotente) y saber todo lo que estabas haciendo (omnisciente).

 

Sun SPARCstation

 

Sí, a ellos tenías que pedir que te copiaran a diskette los archivos que obtuviste desde nodos prohibidos, usando cuentas que no eran tuyas, suplantando a personas que ni siquiera conocías. Y algunos de ellos eran famosos por ser de malas pulgas, con varias víctimas a quienes se les cerró la cuenta por mucho menos. Siempre recordaremos con cariño al famoso Arcadia, de quien no daremos detalles para proteger su verdadera identidad.

Pero esto no era problema para Max, a su modo de ver las cosas, bastaba con decir que necesitabas copiar una tarea de tu cuenta Unix a un diskette y listo.  Su apuesta era que el ayudante no se iba a dar el trabajo de revisar los archivos, sólo era cosa de usar los nombres adecuados, y así era como el archivo tarea.zip podía incluir los artículos de optimización y gráficos de Michael Abrash y nadie se enteraría.

Y así fue!

Con el tiempo, comenzamos a descargar información de hardware de PC para aprender a programar la VGA, Adlib, Soundblaster, llamadas a la BIOS, llamadas a DOS, luego comenzó a surgir información más interesante aún como partes no documentadas de la VGA, el famoso ModoX, smooth scrolling, algoritmos de sonido, hacking, se pueden imaginar el paraíso que eso significaba para alguien que antes sólo contaba con el manual de usuario del PC.

Y como sucede muchas veces – sino pregúntenle a Penta y SQM – con el tiempo agarramos confianza y comenzamos a descargar tablaturas, demos (de la demoscene), juegos shareware, música en formato MOD, MIDI… todo era tarea. Tarea, tarea, tarea.

Imagen de previsualización de YouTube

La bienvenida

Hasta que un día, Max llegó al laboratorio Unix y ahi lo estaba esperando Arcadia junto al resto del olimpo. Pero no estaban solos, ya que con ellos se encontraba el ser superior (literalmente): Horst von Brand dueño y señor del laboratorio Unix, fundador y prócer de ése y otros imperios. Si Horst quería hablar contigo era porque habías hecho algo muy bueno, o muy malo. Siendo éste último nuestro caso.

Tal honorable bienvenida tenía un propósito claro y preciso: Presentar ante Max los logs de transferencia de todas las “tareas” a la fecha, que ya sumaban megas y megas internacionales, multiplicados por su equivalente monetario.  Según cuenta la historia, gran porcentaje del millonario costo por transferencia de datos de toda la universidad se debían a nuestras “tareas”.

 

227518_1030506880700_7197_n
Con Max en el verano de 1994

 

El resto de la historia sólo la conoce Max y el comité de bienvenida.  Por supuesto, su cuenta fue cerrada y a la larga la mía también, pero por otros motivos que podré contar en un nuevo post.

i5esp101@loa, i5meceled@loa, hydefus@inf, human@inf nunca los olvidaremos.

Y qué hice con toda la información descargada? Todo lo que pude y quise! Desde algunos experimentos como rutinas de reproducción de mods que nunca fueron utilizadas, hasta una aplicación para reproducir músicas de MSX (computador de 8 bits) en nuestros PCs.  Incluso las rutinas de sonido que pude ver en esa época me ayudaron años después a hacer DeFX – que más tarde me llevó a tvnauta – y después resucitó como MusicTrans.  Las partes en C de MusicTrans y RetroX le deben mucho a lo que aprendí en esos años también.

Cuando uno recuerda lo que costaba aprender a programar en ese tiempo comparado con lo que tenemos hoy, no hay excusas si quieres hacer algo interesante, las respuestas están al alcance de un click!

PD: Muchos detalles han sido omitidos para facilitar la lectura. Algunos eventos o especificaciones pueden ser no tan precisos, lo serían si no hubiese esperado 20 años para escribir este post.

Como teaser, les dejo un demo de la aplicación de música, a la que le dedicaré un próximo artículo.

Imagen de previsualización de YouTube

Songbird Equalizer / Ecualizador para Songbird

One of the missing features of the great Songbird media player is its lack of an equalizer.  I made a basic patch to include an static equalizer, and please don’t expect too much because this is just a one hour hack with no real knowledge of gstreamer and glib.  To integrate a user interface to this equalizer is a bigger step, but at least you can improve SongBird’s sound right now if you are brave enough to build SondBird for yourself.

Una de las características que se extraña del grandioso Songbird es que no tiene ecualizador.  Hice un parche basico para incluir un ecualizador estático, y por favor no esperen mucho porque este es un hack que hice después de almuerzo como en una hora, y no tengo un conocimiento real de gstreamer ni glib.  Integrar este parche con una interfaz de usuario que lo permita modificar en tiempo real es un paso mucho más grande y complejo, pero al menos se puede mejorar el sonido de SongBird ahora mismo si eres lo suficientemente valiente como para compilar Songbird por ti mismo.

Patch in Bugzilla : http://bugzilla.songbirdnest.com/show_bug.cgi?id=4855