BARATUNES

14 object(s)
 

¿Qué significa 8-bits?

8-bits aquí… 8-bits allá…

por zeropage

En el mundo del chiptune es muy común la expresión “8-bits”, a veces incluso -con bastante libertad- como sinónimo de chiptune. ¿Pero qué significa puntualmente? Tomando algo de la C64 y la Gameboy como ejemplos, caminemos desde algunos aspectos técnicos hasta los más filosóficos.

Un bit es un binary digit, un dígito binario. En un sistema decimal, como el que usamos comunmente, cada dígito tiene diez valores posibles: 0 1 2 3 4 5 6 7 8 9. En un sistema binario, cada dígito, cada bit, tiene solamente dos valores posibles: 0 1. Es muy usual también referirse a un bit como encendido (1) o apagado (0) y esto nos acerca al aspecto físico de la memoria. Es decir, un bit de memoria es un espacio “real” donde se almacena un dato.

Los procesadores operan con cadenas de bits, secuencias de cierta longitud llamada palabra. Tenemos así una primera respuesta: 8-bits designa la longitud de palabra de ciertos sistemas. Las consolas o computadoras de 8-bits son sistemas cuyo procesador realiza operaciones de 8-bits de longitud1. Muy bien, ¿y eso qué?

La arquitectura de un procesador es determinante ya que todo dato debe finalmente adecuarse a una longitud de palabra con la que pueda operar.2 Esto significa que en un sistema vamos a encontrar implicancias de esta longitud por todas partes. Veamos algunos ejemplos concretos.

bender

El SID, chip de sonido de la C64, contiene 29 registros de 8-bits cada uno, 29 direcciones3 de memoria que almacenan datos específicos en sus 8 bits de longitud. Los primeros siete registros corresponden a la “voz 1”, de los cuales el quinto se llama “registro de control” y controla -entre otras cosas- la forma de onda.

bit 7 6 5 4 3 2 1 0
NOISE SQUARE SAW TRI TEST RING SYNC GATE

Si queremos generar una forma de onda cuadrada, tenemos que “encender”4 el bit correspondiente en este registro:

bit 7 6 5 4 3 2 1 0
NOISE SQUARE SAW TRI TEST RING SYNC GATE
0 1 0 0 0 0 0 0

8 bits pueden almacenar en su conjunto 1 de 256 valores posibles (2^8), como en el registro de sonido 12 de la Gameboy, correspondiente a una parte5 de la frecuencia de la “square 1”:

bit 7 6 5 4 3 2 1 0
0 1 1 1 1 0 1 1

En este caso, la frecuencia asignada es 123 (decimal), cuya representación binaria es 0111 1011.

Los 8 bits se pueden segmentar para almacenar valores más pequeños o complementar con cadenas consecutivas para almacenar secuencias o números más grandes. Sigamos con los ejemplos.

Una característica muy explotada del SID es su versátil modulación de ancho de pulso (PWM), cada voz tiene 12 bits para controlar el duty cicle6, los mismos se ubican en el tercer registro y la primera mitad del cuarto registro de cada voz:

registro H registro L
nnnn-0000 0000-0000

nnnn indica que esa parte del registro no tiene utilidad (sí, incluso en 8-bits puede sobrar espacio). En estos casos, se llama High o Low a cada registro, en relación a su valor posicional, o sea, el dato 0000 0001 en el registro L tiene un valor de 1 decimal pero en el H equivaldría a 256 decimal.

Veamos dos ejemplos más de la Gameboy.

Dos bits del registro 32 de sonido son segmentados para asignar el volumen del canal “wave”, lo que nos da un total de 4 volúmenes posibles (2^2) pero su interpretación es un poco engañosa: 00=0%, 01=100%, 10=50%, 11=25%.

Por otra parte, un elemento característico también muy explotado de este dispositivo es su wavetable de 4 bits de resolución que comienza en la dirección 0xFF30. 8 bits son, por un lado, segmentados en pares de 4 bits que contienen así muestras7 de 16 amplitudes posibles (2^4). Esta segmentación se repite a lo largo de 16 registros consecutivos (FF30-FF3F, 128 bits) que almacenan una tabla de, entonces, 32 muestras de longitud.

Ahora bien, si los 8 bits pueden segmentarse o complementarse de distintas maneras y -además- esto varía de sistema en sistema, ¿no estamos igual que antes de leer todo este choclo? ¿Qué se puede decir en un sentido general y que sea un poco más descriptivo?

terminator

Lo más fácil sería decir que un sistema de 8-bits es, en el presente, un sistema de baja resolución o bajo rendimiento. Esto por un lado es cierto, operaciones de 8-bits son obviamente operaciones con valores más pequeños, que contienen menos datos que 16, 32 o 64-bits y generalmente son sistemas con procesadores miles de veces más lentos. Por otro lado es falso, ya que todavía se siguen ingeniando maneras de obtener resoluciones y rendimientos, si bien lejos de los “actuales”, sin duda extraordinarios8. Además, cada sistema tiene una “baja” calidad muy distinta. Tomemos únicamente los dos sistemas que se mencionaron: el SID de la C64 reserva 12 bits para controlar el ancho de pulso mientras que la Gameboy sólo tiene 2 bits para esto9 y, a la vez, la Gameboy tiene un original sistema de wavetable mientras que el SID ni siquiera contemplaba esta utilización10. Hasta sería incorrecto decir que los sistemas de 8 bits son “viejos”, IBNIZ -por ejemplo- es un sistema audiovisual “nuevo” concebido en 8-bits.

Hay sistemas donde las limitaciones facilitan una comprensión y manipulación holística, donde la variación de unos pocos elementos se vuelve una fuente inagotable de gozo e inspiración. Los sistemas de 8 bits son eso, no solamente por su arquitectura sino por las formas que albergan y siguen produciendo. Los 8 bits son un clásico en el sentido más literal: paradigmas, baluartes, universos investidos de valor trascendental.

Fuentes técnicas:

  1. De hecho, 8 bits equivalen a 1 byte

  2. Hoy existen procesadores con instrucciones vectoriales que realizan operaciones en más de una palabra, lo cual relativiza esta afirmación. Le debo esta sutileza a alguien que también me ilustró sobre la diferencia entre “dato” e “información”, conceptos a menudo confundidos. Un bit almacena, en principio, un dato mientras que información denota ya una interpretación de ese dato. 

  3. Para abreviar, los valores y direcciones suelen expresarse en hexadecimal, una notación donde cada dígito representa 1 de 16 valores posibles: 0 1 2 3 4 5 6 7 8 9 A B C D E F. Los trackers suelen conservar esta notación. La numeración de los registros que aparecen a continuación es relativa a las direcciones correspondientes en el mapa de memoria de cada sistema: 0xD400 para la C64, 0xFF10 para la Gameboy. 0x (al igual que $) es un prefijo para valores en hexadecimal. 

  4. Para no extenderme mucho puse 0100 0000 pero esto es en parte incorrecto. Escribiendo ese valor en el registro activaría la forma de onda cuadrada pero reemplazaría los datos existentes en los otros bits por 0. Para no “pisar” los otros datos debería realizar una operación OR. Reservamos la cuestión de las operaciones para otro post, seguramente en relación al bytebeat

  5. 8 bits resultan insuficientes para cubrir un rango común de frecuencias audibles, por eso tanto la C64 como la Gameboy utilizan más de un registro para ello. Si se tratara de notas temperadas, 8 bits serían más que suficiente (como en MIDI). 

  6. Duty cycle es la fracción de un ciclo en la que una señal permanece activa, en este caso, el ancho de pulso. 12 bits nos dan una precisión de 1/4096 pero tengamos en cuenta que, auditivamente, después del 50% los resultados se espejan, o sea, 25% y 75% “suenan igual”. Bueno… 1/2048 no está nada mal ¿no? 

  7. Una muestra es un sample, un valor de amplitud en un momento específico. Este segundo término da pie a confusiones porque también suele llamarse “sample” a una secuencia de muestras (samples) determinada. Eso es la tabla, una secuencia de muestras (como un .WAV). Dicho sea de paso, quizás noten la ausencia de toda mención a 8 bits en términos de bit depth pero también habrán notado que los 8 bits de procesamiento implican mucho más que eso y ni siquiera se corresponden necesariamente. 

  8. Paso por paso, una C64 reproduciendo audio a 48khz o procesando en tiempo real un vocoder, autotune, time streaching y muchas cosas más ¡para flipar!

  9. Los dos últimos bits de 0xFF11 y 0xFF16. 

  10. Hay un bug conocido en el chip 6481 que lo permite, cambiando primeros 4 bits del registro 0xD418. El bug fue, lamentablemente, “solucionado” en el siguiente chip 8580. 




わたしの生きるための喜びであれ糧です。 Yoko Shimomura