2011년 8월 15일 월요일

ASO remake #5 - 사운드 구현

오리지널 ASO에서 OPL로 출력되는 배경음악과 효과음 몇개를 추출(?)해봤습니다.


기존 Test 3 동영상에서 음악/효과음이 추가된걸로 보시면되겠네요.


효과음은 레이저, 미사일, 지상 폭발 3가지만 나옵니다.


OPL의 각 채널은 아래처럼 사용됩니다.


채널 1,2,3 : 레이저, 미사일 발사음

채널 4,5,6 : 폭발음

채널 7.8,9 : 배경음악



아래는 제 터보알에서 돌려본 모습입니다.

동영상 38초 쯤에 "아아~~" 하는 목소리가 들리는데요.

이거 아들넘이 옆에서 낸 소리입니다. (귀신 소리 아님 ㅡ.ㅡ)




2011년 8월 10일 수요일

ASO remake #4 - BGM 구현

이번엔 배경음악 테스트입니다~



제 실력에 원본 곡을 귀로 듣고 음악 만드는 건 불가능하니,

이번에도 MAME의 힘을 빌렸습니다. ㅋ


원본 ASO는 사운드 출력을 위해 YM3526 칩을 쓰고 있습니다.

YM3526이 뭐냐고요? 일명 OPL 이라고 불리는 FM 칩이지요.


참고로 MSX에서는

MSX-AUDIO(필립스 뮤직모듈 포함)와 MoonSound, 달소리 등의 카트리지에 OPL 호환칩이 들어있습니다.


ASO의 YM3526 은 메인 클럭이 4MHz 이고, MSX 쪽의 MoonSound 등은 3.58MHz라서

MSX에서 재생하면 소리가 좀 낮은 음이 나올걸로 예상됩니다요...


MAME의 YM3526 에뮬 소스를 약간 손봐서(!), 먼저 OPL 레지스터 write 하는 부분을 덤프해봤습니다.

사실 덤프된 데이터 만으로는 똑같이 재생할 수는 없는데요.


실제 ASO의 사운드 루틴에서는 어떻게 타이밍을 처리하고 있을까?

일단 두 가지 가정을 해봤습니다.


1. 타이밍을 맞추기 위해, 외부 타이머 또는 비디오 sync 등의 인터럽트를 썼다면,

   음악 데이터는 크기가 작기 때문에, 데이터 write 후 어느정도 대기 시간이 보여야 된다.


    MAME의 모든 사운드 에뮬에서는 최종 PCM 출력을 얻기위한 콜백 함수가 있습니다.

    이 때 얻어지는 샘플 갯수를 보면, 실제 시간을 반대로 계산 할수가 있습지요.


2. 만약 YM3526 내의 타이머를 인터럽트로 활용했다면, 이건 왕재수 상황 ㅎ.ㅎㅋ

   FLAG 레지스터 read/write 를 보면, 인터럽트 주기를 파악할수 있는 것이죠.


그럼, 결론은?

실제로는 2번이었습니다. (사실 이쪽을 기대했었어요. ㅋ)


FLAG 레지스터의 IRQ 리셋 하는 것을 체크하면, 타이밍이 눈에 보입니다.

배경음악 출력이라면, 타이머 주기를 바꿀 것 같지는 않고,

아마도 60Hz 등 일정한 속도로 처리하지 않을까 생각했던 것이지요.


아래는 제가 덤프해서 가공한 데이터입니다.


컬럼 두개가 보이는데, 왼쪽은 레지스터 번호, 오른쪽은 데이터입니다. (모두 write 하는 부분)

0x04번 레지스터에 0x80을 write하면, IRQ 리셋이지요.




요걸 기준으로 MoonSound에 데이터를 출력해서, 음악이 나오는지 확인해봤습니다.

결과는 아래 동영상으로 확인하셔요~ ㅎ.ㅎ




위의 동영상 보시면, 처음 예상과는 달리 타이머 주기가 고정된게 아닌걸 알수 있습니다.

게임 처음 시작하면, 기지에서 슈웅~ 하고 출격하는 장면이 나오는데,

이때는 타이머가 좀 빠르게 세팅된것 같더군요.


그 후, 메인 테마가 나올때는 30Hz 로 속도가 고정됩니다.

위의 ASO_BGM 프로그램에서는 그냥 처음부터 쭈욱 30Hz 로 동기 맞춰서 출력하고 있고요.


데이터를 잘 분석하면,

배경 음악과 총알, 폭파음 등의 효과음 채널도 분리할수 있을 듯 하네요. ㅎ.ㅎㅋ


2011년 8월 7일 일요일

ASO remake #3 - 지상 유닛 처리

주말 업무에도 굴하지않고 작업은 계속 됩니다~ ㅎ.ㅎ


폭발 애니메이션과 포탑의 충알 발사, 미사일 충돌 처리 등,

몇가지 추가해봤습니다.

실행해보시려면, 터보알 GT가 필요합니다.

에뮬에서도 실행 가능합니다.



키 동작

커서키 : 전투기 조종

C : 레이져 발사

X : 미사일 발사

ESC : 종료 (도스 복귀)


숫자패드 1,2,3 : 레이져 1,2,3단계 변경

숫자패드 4,5,6 : 미사일 1,2,3단계 변경

숫자패드 7,8,9 : 스피드 1,2,3단계 변경


실행은, 아래 파일의 압축 풀어서 ASO.COM을 실행하면 되겠습니다.

(파일은 파라동 게시판에서 찾으실 수 있어요~)


아래는, 제 터보알에서 구동되는 모습을 찍은 것입니다. 참고하셔요~




아래는 배경 패턴 및 스프라이트로 사용되는 그래픽입니다.

DD구락부로 만든 파일 그대로 사용되니, 심심하신 분은 로딩해보셔요~ ㅋ








2011년 8월 1일 월요일

ASO remake #2 - 플레이어 기본 구현

제작중인 ASO 리메이크 판의 테스트 용 프로그램입니다.



파일은 파라동에서 다운받으실 수 있습니다.


실기에서 실행하시려면, 터보알 GT가 필요합니다.

내장램 512KB로 확장된 터보알 ST에서도 구동됩니다.

직접 돌려보실 수 있는 분이 별로 없겠네용~ ㅎ.ㅎㅋ


조작법은 아래와 같습니다.

 전투기 이동: 커서키

 레이져: C 키

 미사일: X 키

 종료: ESC 키


에뮬레이터에서 구동하려면,

blueMSX 등에서는 시스템을 turboR 로 선택하시면 되겠고요,

paraMSX의 경우는 MSX2+ 를 선택한 후, CPU 속도를 400%에 맞추시면 됩니다.

참고로 blueMSX의 turboR 동작 타이밍이 실기와는 약간 차이가 나는데용, 신경 쓸 수준은 아닙니다요.


아래는 제 터보알에서 돌려본 모습입니다.

약간의 지상 오브젝트와 아군 전투기의 모습을 감상하실 수 있습니다. ㅋ




아래는 ASO 레벨 에디터를 구동해본 모습입니다.

아직 별다른 기능은 없습니다. ㅎ.ㅎ

그냥 구경만 하셔요~