Volver al inicio

Sintetizador Rungler en Game Boy en Ensamblador

El artículo describe la creación de un sintetizador en Game Boy inspirado en el Circuito Rungler. Canales APU, LFSR para modulación, ensamblador RGBDS fueron usados. Se discuten limitaciones en tiempo real, temporización VBlank y optimizaciones para desarrolladores intermedios/seniors.

Game Boy como sintetizador: Rungler en ensamblador
Advertisement 728x90

# Sintetizador Game Boy: Creando el Rungler en Ensamblador

Desarrollo de un sintetizador de software para Game Boy (DMG/CGB) inspirado en la síntesis modular y secuenciación. El proyecto arrancó emulando el Circuito Rungler —un diseño de Rob Hordijk con dos osciladores y un registro de desplazamiento para modulación caótica—. Implementado en ensamblador Sharp SM83, probado solo en emuladores BGB y SameBoy.

Antecedentes e Inspiración

La idea surgió tras descubrir el trabajo de Ess Mattisson: su jam de una pista en el Dirtywave M8 y el plugin Junior para síntesis de 4 bits similar a LSDJ. RetroPlug te permite conectar un emulador de Game Boy a tu DAW como VST con control MIDI. ¿El objetivo? Sacar sonidos caóticos —pitidos, bips y ruido— del APU de Game Boy (4 canales: 2x pulso, onda, ruido).

Circuito Rungler: Dos osciladores donde uno activa un registro de desplazamiento de retroalimentación lineal de 3 bits (LFSR). Su salida (0–7) modula las frecuencias de los osciladores. Teoría del caos en acción: pequeños ajustes de parámetros generan sonidos totalmente distintos.

Google AdInline article slot

Capacidades Técnicas de Game Boy

Desglosando el APU y la CPU para evaluar viabilidad:

  • Registro de Desplazamiento: Byte de 8 bits con operaciones bit a bit (desplazamiento, OR). Fácil de implementar.
  • Osciladores: Canales 1–2 (pulso con ciclo de trabajo). Frecuencia desde 64 Hz, más un contador para submuestreo. Canal 1 con barrido.
  • Modulación: Escritura en registros de audio (p. ej., $FF17 para volumen CH1). Sin multiplicación hardware: operaciones bit a bit en su lugar. Volumen: 4 bits (0–$F). Frecuencia: NR13/NR14, aplicada al final del frame sin re disparo.
  • Lectura de Osciladores: Solo en GBC (registros no documentados), soportado por BGB/SameBoy.
  • Interfaz: Sprites en VRAM, interrupción VBlank (~60 Hz, 4560 ciclos) para actualizaciones. Gráficos basados en tiles a 160x144.

Problemas en tiempo real: Re disparar canales causa clics; la modulación de frecuencia es más suave.

Desarrollo en Ensamblador

Herramientas: RGBDS + plugin de VSCode. ¿Por qué ensamblador en vez de C? Optimización en tiempo real: desarmar código C de otros reveló asm inline pesado de todos modos.

Google AdInline article slot

Desafíos clave:

  • Sincronización VBlank: Lógica en la interrupción, bajo 1500 ciclos (verificado con profiler). Desbordes causan desgarros (pantalla corrupta).
  • Matemáticas de 16 bits: Malabarismos manuales con registro A, seguimiento de acarreo manual.
  • Operaciones Bit a Bit: Sin mul/div: tablas de consulta o desplazamientos/OR/XOR.
  • Memoria: Escrituras en VRAM solo durante VBlank (líneas de escaneo 0–153).

Para empezar: Tutoriales, Pandocs, ayuda de IA para "Hola Mundo". Interfaz: Cursor, parámetros (frecuencias, modulación), actualizaciones reactivas.

Implementación y Limitaciones

  • Lógica LFSR: Activado por osc1, puerta por osc2 para entrada. 3 bits → DAC (0–7) → escalado + sesgo → registros.
  • Secuenciación: LFSR para disparos, re disparos periódicos.
  • Optimizaciones: Limpieza de pantalla, dibujo de cursor, visualización LFSR. Profiler asegura zona segura.

Resultado: No es una Blippoo Box completa (límites de 4 bits y timing), más bien como Double Knot. Sonidos: De pulsos a ruido.

Google AdInline article slot

Lecciones Clave:

  • El APU de Game Boy sirve para modulación LFSR, pero el tiempo real está limitado por re disparos y resolución de 4 bits.
  • VBlank es decisivo para la interfaz (<1500 ciclos); el ensamblador es esencial para margen.
  • Registros de lectura de osciladores en GBC son no documentados, dependen del emulador.
  • Operaciones bit a bit sustituyen multiplicaciones: suficientes para efectos caóticos.
  • Proyecto escalable: Canal onda CH3, Karplus-Strong a continuación.

Direcciones Futuras

Próximos pasos: Sintetizador de 4 bits (onda CH3), Karplus-Strong/Batería Risset, actuaciones audiovisuales (al estilo Robert Henke), depuración con profiler, empujando límites de matemáticas de 16 bits.

— Editorial Team

Advertisement 728x90

Leer después