Los Chiches de la Commodore 64 – Ep Cero – Introducción

 ¡Bienvenidos! Estamos empezando una nueva serie llamada Los Chiches de la Commodore 64. Nuestra querida Commodore nos dio muchas alegrías pero ella no podría haber hecho todo sola, por eso, siempre se valió de algunos Chiches.

En esta nueva serie vamos a estudiar cuáles son esos chiches, como funcionan por dentro y como usarlos.

Qué son los Chiches

Los Chiches son todos aquellos dispositivos clásicos y modernos que nos ayudan a usar la Commodore como por ejemplo la Famosa Jabonera de Reset, el sd2iec, los joysticks, el lápiz óptico, los adaptadores para el mouse, los cartuchos, los death test, las expansiones de memoria, módems tradicionales, modem wifi. Y podría seguir mucho tiempo más.

Siempre fueron un pequeño misterio cómo funcionan por dentro, de qué circuitos de la máquina se valen y sobre todo ¡Cómo se usan! ¡Más de uno tiene alguna función oculta que todavía al día de hoy no descubrimos!.

Qué vamos a ver

En este viaje vamos a estudiar:

Nuevos dispositivos de entrada salida como ser:

  • Adaptadores VGA como el Apollo 64+.
  • Sd2iec para conectar una sd card a tu Commodore.
  • Pi1541 para tener una 1541 con sdcard que respete todos los vericuetos e idiosincrasias de nuestra querida 1541.
  • El clásico Sánguche (leer con voz de yo quiero un sangucheee) S-Video  a RGB a HDMI.

Dispositivos modernísimos como ser:

  • El cartucho Ultimate II+, una gran navaja suiza.
  • Modem wifi para acceder a una bbs a través de Internet.
  • VersaCart para poder armar tu propio cartucho.
  • La Ram Expansion Unit (REU)  a través de una raspberry pi.
  • Joysticks modernos con microswitches.
  • IRQHack.

Dispositivos Clásicos como ser:

  • La Jabonera de Reset.
  • El cartucho CPM.
  • El clásico modem de Commodore.
  • La REU de ampliación de memoria 1750.
  • Joystick Colossus.
  • Turbo Cartridge.
  • FastLoad.

No te preocupes si no entendiste ni la mitad de los acrónimos, esta serie es para vos.

Bienvenidos

En fin tenemos para divertirnos un buen rato y aprender cada día más de nuestra querida Commodore 64. Así que para todos los que siempre quisieron saber cómo funcionan esos maravillosos chiches que usa nuestra Commodore, así como para los que recién los están descubriendo ahora,  les pido que me acompañen en esta nueva aventura.

Saludos

Carlinho de OsoLabs

En Video

Aquí puede encontrar el video Introductorio para la nueva serie.

Los Chiches De la Commodore – Episodio 0 – Bienvenidos!! 

Los 6 mejores juegos retro para couch-gaming

Es miércoles por la noche y te juntaste con un par de amigos. Pidieron cervezas y un par de pizzas. Tienen una PC con varios emuladores retro o quizás una Nintendo 64 original con una buena cantidad de joysticks. ¿Planazo? ¡Planazo!


Las virtudes del couch-gaming

¡Plot-twist! A diferencia de lo que piensa tu tío Roberto (que cree que todo tiempo pasado fue mejor) ni los videojuegos generan violencia, ni se tratan únicamente de perder el tiempo. De hecho, esconden miles de ventajas disfrazadas detrás del “son sólo jueguitos”.

Pero hoy no venimos a hablar de las ventajas del gaming como propuesta lúdica e intelectual (cómo los juegos afinan las habilidades cognitivas o su comprobado poder antiestrés, por mencionar sólo dos beneficios). Sino que vamos a presentar, específicamente, las virtudes del couch-gaming.

El término “couch-gaming” hace referencia a dos cosas. Primero, al simple hecho de jugar videojuegos desde la comodidad de un sillón. Por eso, el concepto suele ser sinónimo de las consolas: uno y su joystick fundiéndose en un acolchonado sillón frente a un televisor montado en una pared.

Una típica noche de coach-gaming en la Casa Sívori

Sin embargo, también podemos categorizar a ciertos juegos como “couch-games”, siendo aquellos que funcionan mucho mejor cuando se experimentan con uno o más jugadores que se encuentran, físicamente, en un mismo lugar.

Este tipo de juegos suelen promover más la risa y la competencia enérgica. A su vez, son propuestas únicas donde el foco está puesto en la interacción social, antes que en la virtual.

Lamentablemente, el couch-gaming (esto es: los buenos juegos para viciar con amigos desde el sillón) son cada vez más raros hoy en día debido a la popularidad cada vez mayor y la amplia accesibilidad del juego en línea.

Una lan-party con mis hermanos viciando Doom 2, allá por principios de los 2000´s

Afortunadamente: para sacarse la picazón del vicio, todavía existen los videojuegos retro, sean emulados o en su consola original. ¿Cuáles son los mejores juegos retro para couch-gaming? ¡Veamos!


***

Snow Bros (1990)

Para aquellos que buscan un buen desafío competitivo, Snow Bros es un título ideal. Originalmente lanzado para arcades en Japón, allá por 1990, este juego rápidamente llegó a varias consolas. Encontramos su mejor versión en la Sega Genesis, donde existen 20 niveles adicionales.

Snowbros es increíblemente divertido en modo cooperativo. Dos hermanos muñecos de nieve deben eliminar a todos los enemigos de cada nivel para salvar a unas princesas. Esto se consigue arrojándoles nieve –que los transforma en bolas de nieve– y luego haciéndolos rodar por el escenario. Una falopa hermosa.

Mi hijo Benjamín jugando al Snow Bros en Espacio TEC

Es cierto que Snow Bros resulta poco original en comparación con otros títulos anteriores (recuerda al clásico Bubble Bobble y al Ice Climber) pero eso no lo hace menos adictivo. Arranca muy tranqui y pronto se vuelve durísimo… especialmente cuando nos enfrentamos a los jefes finales (que aparecen en cada piso múltiplo de diez).

Puede que hoy un favorito indie sea Cuphead, aquel run-and-gun que es tan tremendamente difícil como magnífico (con mi hermano Tomás le dedicamos 14 sufridas horas para poder darlo vuelta). Pero todavía más horas le metimos al Snow Bros durante nuestra infancia e, incluso, hace no tanto tiempo en algunos bares con fichines de la ciudad porteña.

Probablemente vas a morir mucho en el Snow Bros. Pero se puede encontrar solidaridad al superar obstáculos tan imposibles al lado de un amigo.

Super Bomberman 3 (1995)

Ahora: si lo que buscás es caos puro, también tenés varios opciones de couch-gaming. Ejemplos de títulos más modernos serían algo como Overcooked o la franquicia de Super Smash Bros. Aunque si queremos remontarnos al pasado, no hay con qué darle: es Super Bomberman.

En este caso yo me inclino por las versiones de Bomberman que llegaron a la Super Nintendo. Super Bomberman 3 es el mejor de los cinco disponibles para la SNES y el primero que permitía el juego de a cuatro (de hecho, permite hasta cinco jugadores, pero uno tiene que ser una PC necesariamente).

Super Bomberman 3 para la Super Nintendo

Era genial poder montar una mascota, cada una con una habilidad especial que la volvía única. Su modo aventura es genial, aunque donde realmente brilla es en la cantidad de horas de sillón que permite. De todas las versiones de Bomberman que existen (y sus inevitables copias) la tercera entrega es la más sólida.

Tetris de Tengen (1989)

Tetris es el videojuego más popular del mundo. Eso está claro y no se discute. Es, realmente, uno de esos pocos juegos cuasi universales que conocen hasta las Tías Martas del mundo. A finales de los ochenta y, sobre todo, durante los noventa, la creación de Alexei Pajitnov conquistó al mundo entero.

Se reconocen, oficialmente, más de 50 versiones de Tetris para diferentes consolas… y eso sin mencionar la bestial cantidad de copias y variantes del juego que se crearon (sí, te estoy hablando a vos… “9999 en 1”).

El torneo de Tetris de Tengen en Espacio TEC, 15 de julio 2023

El Tetris de Tengen es, básicamente, un rip-off de la versión original de Nintendo. Aunque, a diferencia de lo que suele ocurrir con las copias, tenía un par de puntos a su favor: gráficamente era muy superior y además tenía un modo multijugador que permitía jugar con otro amigo o enfrentarte a la computadora. Indudablemente: la versión de Tengen es mejor que la de Nintendo.

Contra (1996)

¡Claro que el ingrato Contra, de la Family Game, tenía que estar entre los mejores juegos retro para couch-gaming! Dos jugadores simultáneos en pantalla, modo cooperativo, ametralladoras, jungla, terroríficos aliens… ¿Algo más se puede pedir?

Este es otro videojuego que no precisa introducción porque es un emblema del gaming. No solo se lo recuerda por su excelente jugabilidad y modo de dos jugadores, sino también por la dificultad que presentaba. El Contra no perdonaba ningún error.

El Contra de Family Game / NES

Por otro lado, la introducción de lo que luego se conocería como el “Código Konami” es una estampa de los videojuegos. Aunque el Contra no fue el primero en utilizar las famosas combinaciones de teclas para sacar algún truco (el primero, en realidad, fue el “Gradius”), éste fue el que lo popularizó.

¡Tirabas arriba, arriba, abajo, abajo, izquierda, derecha, izquierda, derecha, B, A y tenías 30 vidas!

Este videojuego es muy frustrante aunque también increíblemente gratificante cuando comenzás a sentir que estás jugando mejor. Las balas de los enemigos son blancas y difíciles de ver. Hay enemigos montados en metralletas que te disparan apenas te ven, los power-ups se te van si morís, hay saltos que requieren de mucha habilidad y hasta aparecen enemigos por detrás. Y, sin embargo, yo no me cansaba de jugarlo con amigos.

Battletoads and Double-Dragon (1993)

Los beat ´em ups son ideales para el couch-gaming. Streets of Rage, Golden Axe o las Tortugas Ninja son todos excelentes candidatos. Yo, sin embargo, me quedo con el Battletoads and Double-Dragon de 1993.

Si bien es originalmente de la NES (o Family Game), su mejor versión es la que encontramos en la morocha de Sega. Se trata de un tremendo videojuego beat ‘em up que presentaba un crossover entre la saga de Battletoads (el juego históricamente más jodido de la historia) y la de Double Dragon.

Battletoads and Double-Dragon para Sega Genesis

Battletoads and Double-Dragon todavía se sostiene hoy en día. Su excelente jugabilidad –que  respeta las características de ambas franquicias– lo convierten en uno de los mejores títulos para jugar con un amigo tirados en el sillón.

Me gustan mucho los diseños de los niveles, que eran todos diferentes. Por ejemplo, el cuarto nivel es una batalla aérea. Algunos son de vista lateral, mientras que otros son de vista isométrica. Infaltable el escenario de las motos, que –por suerte– no es tan imposible como el de Battletoads original.

Mario Bros (1983)

Me dejé para el final el que, para mí, es una bandera del couch-gaming.  Mario Bros es un videojuego de arcade desarrollado y publicado por Nintendo en 1983. Tuvo su versión casera para la NES que es la que más jugué de chico.

La premisa gira en torno a los fontaneros gemelos, Mario y Luigi, que se encuentran en el sistema de alcantarillado de Nueva York. Las alcantarillas son invadidas por oleadas de enemigos, a los que hay que derrotar para conseguir monedas.

Fue la tercera aparición de Mario (antes era “Jumpman” en los primeros Donkey Kong) y también se considera el primer juego en hacer debutar al personaje de Luigi.

Benja jugando Mario Bros en Espacio TEC

Los elementos introducidos en este mítico Mario Bros., como las tuberías, monedas giratorias, tortugas que se pueden voltear sobre sus espaldas y su hermano Luigi, se trasladaron luego al Super Mario Bros. (de 1985) y se terminaron convirtiendo en elementos fundamentales de la franquicia.

En Mario Bros la jugabilidad es tan fluida como cabría esperar de un título de Nintendo, pero la acción puede volverse bastante agitada a medida que avanzás. Acá el modo cooperativo es la experiencia completa y una herramienta clave para ayudarse mutuamente a sobrevivir.

No es ningún secreto que el juego original de Mario está empezando a parecer un poco anticuado. Sin embargo, es difícil ignorar su factor de diversión. Si lográs sumar a un segundo jugador, es probable que estés ante la mejor experiencia couch-gaming que existe.

***

Por supuesto, TODO este vicio hermoso (y mucho más) está disponible en ESPACIO TEC, Thompson 665, Bahía Blanca.

Estos son sólo algunos de los mejores juegos retro para jugar desde el sillón. ¿Cuál otro agregarías a la lista? ¡Contanos!

C64 a Fondo – 6502 vs 6510 Parte 5 – I/O Pins del procesador

Continuamos este estudio comparativo del 6502 vs el 6510 en este caso descubriendo la principal diferencia entre el 6510 y el 6502 los pines de Input/Output que posee el 6510 y no posee el 6502.

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 4 – Primer Programa desde EEPROM

Qué son los I/O Ports

La I/O ports son 6 puertos/pines/registros que pueden funcionar como Input o como Output en el procesador 6510. 

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 6522 VIA o un 6526 CIA. 

Cómo se utilizan

Para poder utilizarlos se debe especificar si los vamos a usar como Input o Output. Esto se hace de una forma muy particular. El procesador 6510 a diferencia de todo el resto de la línea 6500 utiliza para sí dos direcciones de memoria que nunca pueden ser parte de la RAM o ROM y son las primeras dos direcciones la $0000 y la $0001.

La dirección $0000 es llamado DATA DIRECTION Register. En este vamos a especificar para cada uno de los seis pines si lo queremos utilizar como Input o como Output. Si el valor es 0 queda como Input y si es 1 queda como output. Si lo vamos utilizar como Input conectarlo con una resistencia a 0 Volts o +5 Volts mientras no se utilice para no tener inputs flotando. Esta especificación se realiza escribiendo un byte a la dirección $0000.

BitPinInput/Output
000/1
110/1
220/1
330/1
440/1
550/1
6No UtilizadoNo Utilizado
7No UtilizadoNo Utilizado

Por ejemplo si quisiéramos habilitar el pin 2 y el 4 como Output y el resto como Inputs deberíamos escribir el número binario %00010100 correspondiente al hexadecimal $18. Podríamos configurar al 6510 con la siguiente instrucción en assembler

lda #%00010100 ; cargamos al acumulador  el número en binario

  ; antecedido por % para indicar que está em binário

; y # para indicar que es un número y no una posición

; de memoria

sta $00 ;guardamos el contenido del acumulador en el 

;registro interno de memoria DATA DIRECTION REGISTER

Si ahora queremos leer la información de los I/O registers necesitamos utilizar otra dirección de memoria la $0001 también llamado de I/O port register.

BitPinInput/Output
000/1
110/1
220/1
330/1
440/1
550/1
6No UtilizadoNo Utilizado
7No UtilizadoNo Utilizado

Podemos cargar los valores de este registro al acumulador con el siguiente comando para leer por ejemplo:

Lda $01 ; lee el I/O port register

Sta $0400 ; escribe el contenido del acumulador en la posición

; de memoria $0400

Para poder escribir en este registro y por consecuencia cambiar el valor de los pines con valor 1 a +5 Volts o High usamos el siguiente programa assembler.

lda #%00111111 ;va a escribir todos los bits del I/O port para que 

;sus pines sean +5 Volts

sta $01 ;escribir el registro

Cómo funciona en la Commodore 64

La Commodore 64 y su procesador 6510 pueden direccionar hasta 65536 direcciones de memoria, los famosos 64KB, pero ¿cuántos kb tenemos en la Commodore?

KbytesFunción
64RAM
8BASIC ROM
8KERNAL ROM
4Character Generator
4I/O (Vic II, SID, CIA 1 y 2, Puerto de Cartucho)

Esto nos da 64+8+8+4+4 = 88Kb para direccionar, lo cual es un problema ya que tendríamos 24Kb que no podrían ser direccionados, ahí entran los I/O Ports para ayudarnos.

Estos cumplen dos funciones: manejar parte del datasette y direccionar esta memoria extra para que puedan caber las 65536 direcciones.

Los puertos en cuanto a su configuración de Input o Output así se encuentran configurados en la Commodore.

BitPinInput/OutputNombre en C64
001 outputLORAM
111 outputHIRAM
221 outputCHAREN
331 outputCassette Write
440 inputCassette Sense
551 outputCassette Motor
6No UtilizadoNo UtilizadoNo Utilizado
7No UtilizadoNo UtilizadoNo Utilizado

Manejo de Memoria

Memorias que se superponen, como vimos anteriormente veamos cómo es que estas memorias se están superponiendo y en qué direcciones.

NombreDireccionesKbytesFunción 1Función 2Función 3
Low Memory$0000-$9FFF40kbRAM
BASIC$A000-$BFFF8kbRAMBASIC ROM
High Memory$C000-$CFFF4kbRAM
I/O$D000-$DFFF4kbRAMI/OCHAR ROM
KERNAL$E000-$FFFF8kbRAMKERNAL ROM

Como se superponen estas memorias se controla principalmente con los I/O ports de P0 a P2.

P0 – Bit 0 del registro $0001, LOW RAM. Si este bit es 0 tenemos acceso a la RAM si es 1 a la BASIC ROM. ¿Cuándo lo apago? ,cuando creo un programa en código máquina con lo que aprovecho 8kb extras de ram.

P1 – Bit 1 del registro $0001, HIGH RAM. Si este bit es 0 tenemos acceso a la RAM si es 1 al KERNAL ROM. ¿Cuándo lo apago? ,cuando creo un programa en código máquina y no necesito ninguna rutina del KERNAL con lo que aprovecho 8kb extras de ram

P2 – Bit 2 del registro $0001, LOW RAM. Si este bit es 0 tenemos acceso a los I/O devices (VIC II, SID, CIA, etc)  si es 1 a la ROM de character generation donde se almacenan los 2 juegos de caracteres de la commodore. Generalmente nunca debemos acceder a la ROM del CHAR GEN ya que el VIC II puede acceder a esta directamente para dibujar los caracteres en pantalla. Un motivo válido para acceder es leerla para copiarla en memoria y modificar el juego de caracteres.

Aquí tenemos otro gráfico que muestra mejor la configuración de los 3 registros y que efectos tendrían en memoria.

A continuación les incluyo un programa en BASIC que les va a permitir apagar momentáneamente el basic y el kernel escribir y leer en la RAM oculta y volver a activar el basic y el kernel sacado del libro PEEKS & POKES para Commodore 64.

Para leer la RAM escondida usar:

PRINT USR(ADDRESS).

Para escribir haciendo un POKE usar:

SYS 715,ADDRESS,BYTE

Y este es el programa en código máquina con su loader en basic:

10 DATA 165,20,72,165,21,72,32,247,183,120,165,141,252,133

20 DATA 1,160,0,177,20,168,165,1,9,3,133,1,88,104,133,21

30 DATA 104,133,20,76,162,179,32,253,174,32,138,173,32,247

40 DATA 183,32,253,174,32,158,183,165,1,41,252,133,1,138

50 DATA 160,0,145,20,165,1,9,3,133,1,96

60 FOR 1=678 TO 747: READ A: POKE I, A: NEXT I

70 POKE 785,166:POKE 786,2

Manejo de Datasette

El datasette es manejado por 3 puertos del 6510 y la CIA. Los I/O Ports P3 a P5 están conectados a las funciones de CASSETTE Write, CASSETTE Sense, y CASSETTE Motor.

P3 – Bit 3 del registro $0001, Cassette Write. Este puerto es el que se utiliza cuando vamos a grabar información al cassette enviando pulsos con la información a grabar a través de este pin.

P4 – Bit 4 del registro $0001, Cassette Sense. Este puerto mide si alguna tecla fue presionada en el datasette. Cuando vemos el famoso mensaje “PRESS PLAY ON TAPE” el procesador está esperando que presionemos la tecla play en el datasette. Al presionar esta tecla y como el puerto es un input se lee un 0 Volts y el datasette sabe que una tecla fue presionada. Como podemos presionar 3 teclas en el datasette (play, rewind, forward) y sólo tenemos una línea de Casette Sense se produce el efecto curioso de que si presionamos rewind o forward la Commodore piensa que presionamos play y trata de cargar el programa de casette.

P5 – Bit 5 del registro $0001, Cassette Motor. Este puerto activa el motor del datasette cuando se presiona una tecla en el datasette, si alguna vez hicieron la prueba de presionar el botón de play y nada funciona si no está conectado a la Commodore no es sólo por una falta de power sino por que la tecla play no hace nada sólo el pin P5 activa el motor del datasette. 

Si estudiamos el circuito exacto conectado a este puerto vemos que en realidad el procesador no prende el motor si no que activa un transistor que switchea 9 Volts para que estos sí vayan al conector del datasette y alimenten el motor

Para completar la discusión del datasette nos falta sólo el puerto de cassette read pero este está conectado al puerto /flag de la CIA1 y está fuera del contexto de los puerto I/O del 6510 y será analizado en un próximo artículo.

Estudiando los I/O Ports visualmente

Para poder estudiar visualmente cómo se conectan y funcionan los I/O ports del 6510 les dejo este video que complementa al artículo.

6502 vs 6510 IO Ports / Processor Ports – Parte 5

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

Referencias

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

VIDEOS

Video de la serie 6502 vs 6510 Parte 5 – IO Ports / Processor Ports

6502 vs 6510 IO Ports / Processor Ports – Parte 5

Aquí tiene acceso a toda la serie:

6502 vs 6510 estudio detallado y comparación 

PAPERS

The 6510 Processor Port | C64 OS 

6510 MICROPROCESSOR WITH I/O 

Mapping the Commodore 64 & 64C : Leemon, Sheldon : Free Download, Borrow, and Streaming : Internet Archive 

Peeks & pokes for the Commodore-64 : Liesert, H. J. (Hans Joachim), 1961- : Free Download, Borrow, and Streaming : Internet Archive 

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