Skip to content

MSX Targets ko

ToughkidDEV edited this page Oct 19, 2026 · 2 revisions

MSX-MUSIC·내부 PSG 호환 연주

2026-10-03 구현. YM2608용 MUC의 악보와 명령을 최대한 재사용하여 MSX-MUSIC(YM2413)과 MSX 내부 PSG로 연주하는 기능입니다. 다른 칩 사이의 파형 복제가 아니라, 음정·길이·악곡 구조를 유지하는 호환 편곡이 목적입니다.

파트 지정

MUC 파트 출력 대상
MSXA, MSXB, MSXC, MSXH, MSXI, MSXJ YM2413 FM 1–6
MSXG YM2413 리듬 5종
MSXD, MSXE, MSXF MSX 내부 PSG 1–3
접두어 없는 A–K 기존 MAKOTO/YM2608, 변경 없음

D0는 여전히 OPNA SSG의 0번 페이지입니다. 내부 PSG로 바뀌지 않습니다. MSXD0가 내부 PSG의 0번 페이지이며, 숫자 생략 시 0번입니다. 각 파트의 페이지 0–9를 지원합니다. 여러 페이지는 같은 물리 채널을 공유하므로 페이지 수가 동시 발음 채널 수를 늘려 주지는 않습니다.

한 행 전체의 선택자에 MSX 접두어가 적용됩니다. MSXABC, MSXDE, MSXA09도 가능합니다. OPNA와 MSX 파트를 함께 쓸 때는 행을 나눕니다.

#title Native PSG example
MSXD @0 v12 t180 o5 l8 cdefgab>c
MSXE @0 v10 o4 l4 c g e g
; VOICE.DAT의 @1 음색을 이용하는 혼합 예
A @1 v15 t180 o4 l8 cdef
MSXA @1 v15 o5 l8 cdef
MSXG v63,31,31,31,31,31,31 @31 l8 c r c r

SSG에는 기존과 마찬가지로 유효한 소프트웨어 엔벌로프를 지정하십시오. @0 v12는 예제의 초기 음색과 음량입니다. v를 지정하는 것만으로 초기 엔벌로프가 없는 곡에 자동으로 음색이 생기지는 않습니다. 리듬의 확장 단일 v 인자는 선택된 악기 음량입니다. 위 예제는 전체 음량과 6개의 개별 음량을 함께 초기화합니다.

적용되는 명령과 변환

음표·쉼표·옥타브·길이·게이트·타이·반복·매크로·템포·다중 페이지는 기존 컴파일러와 플레이어를 사용합니다. 소프트웨어 LFO와 포르타멘토로 계산된 주파수도 마지막 출력 단계에서 대상 칩 주파수로 변환합니다. 내부 PSG의 톤·노이즈·하드웨어 엔벌로프 주기도 클록 비율로 변환합니다. 레지스터 7의 I/O 설정 비트는 보존하고, 음악의 PSG 14/15번 쓰기는 허용하지 않습니다.

FM @ 음색은 4오퍼레이터에서 2오퍼레이터용 특징을 추린 뒤, 15개 내장 프리셋의 파라미터와 비교하여 가장 가까운 번호를 고릅니다. 이는 빠른 파라미터 거리 비교이며 스펙트럼 피팅이나 청감상 최적 음색 보장이 아닙니다. YM2413 사용자 음색 하나를 여러 파트가 덮어쓰는 충돌을 피하기 위해 이번 구현에서는 사용자 음색 0번을 자동 배정하지 않습니다.

OPNA의 BD·SD·CYM·HH·TOM은 OPLL의 해당 드럼으로 연결합니다. OPLL에 없는 RIM은 생략하고 경고합니다. 반복 드럼 트리거와 공유 음량 레지스터의 다른 악기 비트는 보존합니다.

차이와 명시적 제한

  • MSXK는 ADPCM 대상이 없어 컴파일 오류입니다. 일반 K는 계속 MAKOTO ADPCM입니다.
  • 네이티브 FM3 EX/특수 오퍼레이터 디튠은 거부합니다. 일반 C의 FM3 확장은 유지됩니다.
  • 4오퍼레이터 알고리즘, 오퍼레이터별 음량/모핑, 하드웨어 LFO, SSG-EG를 YM2413에서 똑같이 재현할 수 없습니다. 음색은 근사하며 지원되지 않는 출력은 진단합니다.
  • OPLL/내부 PSG는 모노입니다. 한쪽 팬은 모노로 출력하고 진단합니다. 무음 팬 설정과 명시적 키 오프는 유지합니다.
  • 변환 범위를 벗어난 고음은 클리핑 진단 대상입니다.
  • 기본 모드에서 y는 지정 파트의 원래 OPNA 레지스터 의미로 해석·변환됩니다. OPLL 레지스터에 직접 쓰는 문법이 아닙니다.
  • 변환 손실 경고는 종료 시 MSX mapping: omitted/approximated ...로 표시합니다. 이는 무조건 출력하는 안내가 아니라 생략·범위·팬 등 진단 플래그가 있을 때 나옵니다.
  • 현재 네이티브 재생 프로파일은 MAKOTO와 MSX-MUSIC이 있는 환경을 대상으로 합니다. PSG만 사용한 MSX 곡도 MSX-MUSIC 존재 검사를 거칩니다. PSG 단독 무카트리지 플레이어가 아닙니다.

네 도구의 사용

추가 실행 옵션은 없습니다. MUC 행의 접두어로 자동 구분합니다.

MUC2MUB SONG.MUC SONG.MUB
MUCPLAY SONG.MUC
MUBPLAY SONG.MUB

MUCEDIT에서는 기존처럼 열기 → 컴파일 → 연주 → MUB/VGM 내보내기를 사용합니다. MUCEDIT 자체 바이너리는 변경할 필요 없이 E2 연계 규약으로 새 MUCPLAY를 사용합니다. 혼용을 피하려면 동일 패키지의 네 COM을 함께 설치하십시오.

Panasonic 지원 기종은 연주 시 고속 Z80, turbo R은 R800으로 자동 가속하며 종료 시 원래 상태로 돌립니다. /N은 호출자가 선택한 CPU를 유지합니다. 컴파일 및 오프라인 VGM 출력은 자동 CPU 전환 대상이 아닙니다.

파일 형식과 크기

일반 곡의 MUB8/muPb 형식은 유지합니다. MSX 파트가 있으면 확장 컨테이너의 매직을 msPb0100으로 기록합니다. 일반 mucomDotNET muPb0100의 두 번째 OPNA를 임의로 OPLL로 바꾸지 않습니다. 파일 확장자는 계속 .MUB입니다. 이 프로파일은 MUCOMSX 전용이므로 기존 MUCOM88·mucomDotNET·MDPlayer에서 그대로 재생할 수 있다고 가정하지 마십시오.

입력 MUC 최대 65,536바이트, MUCEDIT 편집 최대 60,000바이트, 음악 DATA 합계 최대 122,880바이트(120KiB)를 유지합니다. 헤더·태그·PCM 때문에 최종 MUB 파일 크기는 음악 DATA보다 클 수 있습니다. 개별 페이지에는 별도 가상 주소 한계가 있으며 네이티브 형식의 접두어를 포함해 60,000바이트 이내입니다. 총량 이내라도 하나의 페이지에 몰아 넣으면 한도를 넘을 수 있습니다.

VGM은 YM2413 0x51, AY 계열 PSG 0xA0 쓰기와 각 칩 클록을 기록합니다. 기존 YM2608 쓰기와 함께 하나의 파일에 들어갑니다. 출력은 대상 칩을 지원하는 VGM 플레이어에서 재생하십시오.

메모리와 처리량

최저 매퍼는 512KiB입니다. 네이티브 출력 코드는 매퍼 1뱅크, 두 번째 그룹의 페이지 상태는 최대 2뱅크를 추가 사용합니다. 실제 여유는 DOS·상주 프로그램·페이지/반복 구성에 따라 달라집니다. 큰 세션이 새 문서 적재를 방해하면 작업을 저장하고 세션을 해제하세요. 고부하 다중 페이지 곡의 순간 처리량 한계는 남아 있습니다.

컨테이너 형식

msPb0100은 기존 muPb의 디렉터리 틀을 쓰되 원래 11파트와 네이티브 11파트를 분리합니다. 작성기는 22×10=220 레코드를 출력하며 전체 헤더는 1,986바이트입니다. 네이티브 K의 10페이지는 길이 1·종료 바이트 0·루프 없음이어야 합니다. 로더는 이를 검증하고 K를 스케줄하지 않습니다. 다른 칩 영역도 비어 있어야 합니다. 각 페이지의 길이·루프는 32비트 필드, 루프 없음은 FFFFFFFFh입니다. 내부 컴파일 DATA 표시는 F1/F5, 접두어는 894바이트, 음색 위치 LE32는 +886, 총 길이 LE32는 +890입니다. 이 내부 DATA 표현과 디스크 MUB 컨테이너를 혼동하지 마십시오.

음색 비교 표는 ymfm의 BSD-3-Clause 데이터와 그 출처 표기를 사용합니다. 출처·라이선스 전문은 배포본의 NOTICE 및 LICENSES에 동봉합니다.

Clone this wiki locally