개발도구 뉴스
ZX 스펙트럼의 1비트 사운드 구현과 다채널 음악 재생 시도
ZX Spectrum: Experimenting with 1-Bit Sound
Hacker NewsZX Spectrum의 1비트 스피커를 활용하여 다성 음악(화음) 재생을 구현했습니다. PCM 및 PWM 같은 고급 오디오 신호 처리 기법을 적용해 여러 음을 동시에 출력하는 방법을 시도했습니다.
세 줄 요약
- 다채널 사운드를 위해 소프트웨어 믹싱과 아르페지오 기법을 사용했으며, 이를 위해 Z80 프로세서의 정밀한 사이클 카운팅 기술을 활용하여 복잡한 타이밍 제어 루틴을 개발했습니다.
- 특히 명령어별 정확한 사이클 수를 계산하고 지연 시간을 확보하는 공학적 접근 방식이 핵심입니다. 이는 극도로 제한된 레트로 하드웨어 자원을 소프트웨어로 확장하는 깊은 이해를 보여줍니다.
- 기술적인 구현 자체는 성공했으나, 스피커가 1비트 출력을 지원하기 때문에 아무리 정교한 회로를 설계해도 소리 품질에는 왜곡이 불가피하다는 한계점을 지닙니다.
이번 작업은 ZX Spectrum의 1비트 비퍼를 활용하여 다성음(chords)을 재생하는 데 중점을 두었으며, 이를 위해 1비트 PCM 복원 및 PWM 기법 실험이 이루어졌습니다. 이론적으로는 샘플링된 값을 전압으로 변환하는 PCM 방식이나, Spectrum의 스피커가 오직 On/Off만 지원하기 때문에 결과물은 본질적으로 1-bit PCM 형태를 띠게 되며, 이로 인해 왜곡되는 소리가 예상됩니다.
정확한 타이밍 제어를 위해 Z80 프로세서의 사이클 카운팅 기술이 활용되었습니다. 예를 들어, 16비트 샘플을 출력하기 위해서는 각 출력 사이에 219 사이클의 지연 시간이 필요하며, 이 루틴은 바이트를 로드하고 비트를 회전(rrca)시킨 후, 특정 명령어들로 구성된 복잡한 지연 루프를 통해 정확히 필요한 시간을 확보합니다.
다채널 음악 구현을 위해 아르페지오와 소프트웨어 믹싱 두 가지 접근법이 고려되었습니다. 아르페지오는 단일 출력 채널에 코드를 할당하고 프레임마다 주파수를 변경하여 화음 효과를 내는 방식이며, 이는 이미 작성된 사운드 루틴을 반복적으로 호출하는 방식으로 구현될 수 있습니다.