Otro periférico curioso y ochentero son los paddles:
Lo primero que llama la atención es que, usando un único conector para puerto de control, hay una pareja de paddles. Por tanto, como el C64 tiene dos puertos de control, en total es posible conectar cuatro paddles (dos parejas).
Lo segundo que llama la atención es que un paddle es básicamente una rueda y un disparador. La rueda es lo que técnicamente se llama un potenciómetro, es decir, una resistencia variable. Al mover la rueda cambia la resistencia y, consecuentemente, un voltaje.
Este voltaje variable llega a través del CIA1 al SID, que dispone de un conversor analógico digital, es decir, un dispositivo electrónico capaz de convertir una señal analógica (el voltaje variable) en una señal digital (un número almacenado en un registro).
Como hay dos paddles, hacen falta dos registros en los que almacenar el resultado de la conversión analógico – digital, que son:
- POTX = $d419.
- POTY = $d41a.
Obsérvese que las direcciones de estos dos registros ($d419 y $d41a) son parte del rango de direcciones del SID ($d400 – $d41c). Por otro lado, el prefijo “POT” viene de “potenciómetro”.
Estos dos registros POTX y POTY sirven para leer tanto la pareja de paddles conectada al puerto de control #1 como la pareja de paddles conectada al puerto de control #2. Por tanto, hace falta algún mecanismo para conmutar entre una pareja y otra.
Ese mecanismo es el puerto A del CIA1, es decir, el registro CIAPRA = $dc00. Si en los bits 6 y 7 de CIAPRA escribimos %01, se leen los paddles del puerto de control #1. En cambio, si escribimos %10 en esos mismos bits, se leen los paddles del puerto de control #2.
Ahora bien, dado que el CIA1 y más en particular su registro CIAPRA = $dc00 intervienen en la lectura del teclado, cosa que el sistema operativo hace 60 veces por segundo mediante una rutina de interrupción, para que la selección de los paddles sea correcta y no interfiera con la lectura del teclado, hay que desactivar esa interrupción antes de seleccionar y leer los paddles, y volver a activarla después.
La desactivación de la interrupción se consigue escribiendo el valor %01111111 = 127 sobre el registro de control de interrupciones del CIA1 (CIAICR = $dc0d). Y la reactivación se consigue escribiendo el valor %10000001 = 129. Recordemos el uso del CIA1 como fuente de temporización.
Por último, quedan los disparadores. Para leerlos, también se usa el CIA1, concretamente:
- CIAPRA = $dc00, bit 2 = 0 => disparo del paddle 1.
- CIAPRA = $dc00, bit 3 = 0 => disparo del paddle 2.
- CIAPRB = $dc01, bit 2 = 0 => disparo del paddle 3.
- CIAPRB = $dc01, bit 3 = 0 => disparo del paddle 4.
En resumen, y como digo, otro periférico bien curioso. Sólo recuerdo haberlo utilizado para un juego de coches llamado “Lemans”. En este juego se utilizaba como volante para dirigir los coches: