홈으로 돌아가기

Game Boy Assembler Rungler 신디사이저

이 기사는 Rungler Circuit에서 영감을 받은 Game Boy 신디사이저 제작을 설명합니다. APU 채널, LFSR 변조, RGBDS 어셈블러가 사용되었습니다. 실시간 제한사항, VBlank 타이밍 및 중/시니어 개발자를 위한 최적화가 논의됩니다.

Game Boy를 신디사이저로: 어셈블러 Rungler
Advertisement 728x90

# 게임보이 신시사이저: 어셈블리로 룽글러 구현하기

게임보이(DMG/CGB)용 소프트웨어 신시사이저 개발. 모듈러 신스와 시퀀싱에서 영감을 받아 시작. 프로젝트는 Rob Hordijk의 룽글러(Rungler) 회로 에뮬레이션으로 출발—두 개의 오실레이터와 시프트 레지스터로 혼돈스러운 변조를 만드는 디자인. Sharp SM83 어셈블리로 구현, BGB와 SameBoy 에뮬레이터에서만 테스트.

배경과 영감

아이디어는 Ess Mattisson의 작업을 발견한 후 불꽃이 튀었다: Dirtywave M8에서의 싱글 트랙 잼과 LSDJ 같은 4비트 신스인 Junior 플러그인. RetroPlug은 게임보이 에뮬레이터를 DAW에 VST로 연결해 MIDI 제어 가능. 목표는 게임보이 APU(4채널: 펄스 2개, 웨이브, 노이즈)에서 혼돈스러운 사운드—삐, 블룹, 노이즈—를 끌어내는 것.

룽글러 회로: 한 오실레이터가 3비트 선형 피드백 시프트 레지스터(LFSR)를 트리거. 출력(0~7)이 오실레이터 주파수를 변조. 카오스 이론의 실전—작은 파라미터 조정으로 완전히 다른 사운드 탄생.

Google AdInline article slot

게임보이 기술 사양

APU와 CPU를 분해해 실현 가능성 확인:

  • 시프트 레지스터: 8비트 바이트에 비트 연산(시프트, OR). 구현 간단.
  • 오실레이터: 채널 1~2(듀티 사이클 있는 펄스). 주파수 최소 64Hz, 다운샘플링 카운터 추가. 채널 1에 스윕 기능.
  • 변조: 오디오 레지스터 쓰기(예: CH1 볼륨 $FF17). 하드웨어 곱셈 없음—비트 연산 대체. 볼륨: 4비트(0~$F). 주파수: NR13/NR14, 프레임 끝에 적용(리트리거 없음).
  • 오실레이터 읽기: GBC 한정(비공식 레지스터), BGB/SameBoy 지원.
  • UI: VRAM 스프라이트, VBlank 인터럽트(~60Hz, 4560사이클)로 업데이트. 160x144 타일 그래픽.

실시간 함정: 채널 리트리거로 클릭 발생; 주파수 변조가 더 부드러움.

어셈블리 개발

도구: RGBDS + VSCode 플러그인. C 대신 asm 이유? 실시간 최적화—C 코드 분석 결과 인라인 asm이 대부분.

Google AdInline article slot

주요 도전 과제:

  • VBlank 타이밍: 인터럽트 내 로직, 1500사이클 이내(프로파일러 확인). 초과 시 화면 찢어짐(쓰레기 출력).
  • 16비트 연산: A 레지스터 수동 조작, 캐리 추적.
  • 비트 연산: 곱/나눗셈 없음—룩업 테이블이나 시프트/OR/XOR.
  • 메모리: VBlank 중에만 VRAM 쓰기(스캔라인 0~153).

시작하기: 튜토리얼, Pandocs, AI로 "Hello World". UI: 커서, 파라미터(주파수, 변조), 반응형 업데이트.

구현과 한계

  • LFSR 로직: osc1 트리거, osc2 게이트로 입력. 3비트 → DAC(0~7) → 스케일 + 바이어스 → 레지스터.
  • 시퀀싱: LFSR로 트리거, 주기적 리트리거.
  • 최적화: 화면 지우기, 커서 그리기, LFSR 시각화. 프로파일러로 안전 영역 확보.

결과: 완전한 Blippoo Box는 아님(4비트와 타이밍 제한), Double Knot에 가까움. 사운드: 펄스에서 노이즈까지.

Google AdInline article slot

주요 교훈:

  • 게임보이 APU는 LFSR 변조에 적합하나, 실시간은 리트리거와 4비트 해상도로 제한.
  • VBlank이 UI의 성패 가름(<1500사이클); asm으로 여유 확보 필수.
  • GBC 오실레이터 읽기 레지스터는 비공식, 에뮬레이터 의존.
  • 비트 연산으로 곱셈 대체: 카오스 효과 충분.
  • 확장 가능: 웨이브 CH3, Karplus-Strong 다음.

미래 방향

다음: 4비트 신스(CH3 웨이브), Karplus-Strong/Risset Drum, 오디오비주얼 공연(Robert Henke 스타일), 프로파일러 디버깅, 16비트 연산 한계 도전.

— Editorial Team

Advertisement 728x90

다음 읽기