2011년 5월 16일 월요일

ASO remake #1 - 스크롤 테스트

주말에 여유 시간을 몽땅 불태웠습니다~~ 워~~


ASO area 1의 배경을 반정도 옮겨서 스크롤을 해보았는데,

그럭저럭 볼만하게 나오는군요. ㅎ.ㅎ;


area1의 주요 배경 타일을 16x16 크기로 128개 정도 그려보았습니다.

원본 ASO의 팔레트가 256개에 RGB 단계가 세밀하다 보니,

MSX의 512컬러로는 옅은 녹색계열 팔레트를 만드는게 불가능하네요. ㅜ.ㅜㅋ


일단 회색톤으로 만들었습니다. (원판이랑 느낌이 많이 다르네용.. ㅎ.ㅎ;;;)

아래 스크린샷 나갑니다~ㅎ




이걸로 배경맵을 구현해야되니,

"수퍼 울트라 초간단 맵 에디터"부터 만들어야되더군요. ㅋ


아래는 에디터를 실행해본 모습입니다.


원하는 위치에서 스페이스바를 누르면 타일을 삽입할수 있도록 만들어져있습니다.

상하 스크롤도 가능하고요. (요걸 활용해서 파라의 탑 맵 에디트 할때도 쓰일 것 같습니다. ㅋ)



며칠전 "VDP 오버스캔 트릭"에 대한 소개를 했었는데요.

실제로 구현해본 모습입니다.


총 240 라인 중, 216 라인은 스크롤 되는 배경이고요.

하단의 24라인은 아이템 및 점수판으로 쓰이게 됩니다.


원래 ASO에서는 맨위 상단에 점수가 표시되는데요,

MSX 판에서는 수직 해상도가 낮아서, 걍 짧게 하단에 표시하기로 했습니다.



아래는 실행되는 모습을 동영상으로 찍은 것입니다.

토욜날 버전이라 하단부가 쬐금 다릅니다. 참고하셔요.

(아래 동영상에서는 화면 분할 처리에 약간 문제가 있어서, 깜박이는 구간이 있어요. ㅋ)




2011년 5월 13일 금요일

[강좌] 06. VDP의 수직 오버스캔 트릭

아시는 분도 있겠지만, 모르시는 분이 많을거라 생각되서...

점심 시간 여유를 타서 잠깐 소개를 해볼까 합니다. ㅎ.ㅎ

 

제목엔 트릭(Trick)이라고 썼지만, 사실 오버스캔은 일종의 VDP 버그입니다.

 

VDP는 최종 아날로그 RGB 화면을 출력할때,

그래픽이 표시되는 영역과 바깥쪽의 단색 테두리 영역이 있습니다.

 

여기서 테두리는 메인 화면의 상하좌우 바깥쪽에 표시되는데,

VDP 버그(!?)를 이용하면, 상하 영역의 테두리를 없애버릴수 있습니다.

 

스크린5 모드(그래픽 4 모드)의 경우, VRAM의 비트맵 영역은 256 x 256 픽셀인데요.

최종 출력시는 수직 192 또는 212 라인만 표시하고 나머지는 테두리 색이 출력됩니다.

이 상하의 테두리가 없어지고 원래의 수직 픽셀이 표시됩니다.

 

일반적인 NTSC 모드에서 한필드의 총 스캔라인은 약 262개인데요.

대개 가시 영역을 240개로 간주합니다.

인터레이스일때는 480i, 프로그레시브일때는 240p 라고 보통 표현합니다.

 

제가 RGB 모니터로 확인은 못했지만,

LCD TV에서 240라인까지 제대로 출력되는건 확인이 되었습니다.

RGB 모니터의 경우 수직 size를 조정하면 아마 256픽셀 근처까지 출력이 될 것 같네요.

 

이 오버스캔 트릭을 쓰는 프로그램으로는,

Unkown Reality의 일부 화면에서 볼수가 있습니다. (이건 유명하죠 ㅎ.ㅎ)

그외 Ark-A-Noah 랑 Sex Bomb Bunny 에서도 사용되었다고는 하는데 제가 확인은 못해봤어요.ㅋ

 

아래는 Unkown Reality에서 오버스캔을 쓴 모습입니다.

TV가 검정색이라 잘 안보이지만, 수직화면이 LCD 전체로 다 출력되는걸 볼수가 있습니다.

인터레이스 스크린7 모드라서 실제 수평라인이 480개가 출력되고 있어요. 한번 세어보세요. ㄷㄷㄷ



 


참고로 V9938의 데이터쉬트에는,

 212 라인모드와 192라인 모드의 스캔라인 위치가 정해져있습니다.

(참고로 출력 위치는 ADJUST 레지스터를 설정하면 상하(또는 좌우) 8픽셀 조정이 가능합니다.)

 

위치는 못 바꾸지만 첫 시작라인을 설정하는 레지스터를 사용하면,

수직으로 스크롤되는 효과를 얻을 수 있는데요.

오버스캔 모드에서는 수직 테두리가 없기 때문에 꼭 수직 위치를 바꾸는것 처럼 효과를 줄수 있습니다.

 

 

그럼, 이 오버스캔 트릭을 어떻게 구현하는지가 궁금하시겠죠? ㅎ.ㅎ

 

V9938에는 특정 수평 blanking 카운트에 인터럽트를 넣을 수 있습니다.

대개 스캔라인 인터럽트라고 얘기합니다.

 

이걸 이용하면, 특정 스캔 라인에 도달했을때 VDP 레지스터 설정을 하므로써

여러가지 특수(!!) 효과를 만들수 있는데요.

 

몇가지 예를 들어보면,

 

알레스터, 제비우스, 싸이코 월드, 스페이스맨보 등의 배경 스크롤:

-> 특정 부분은 스크롤 위치를 고정해서 안움직이는 것 처럼 만듭니다. 점수 표시판 등등.

 

싸이코 월드, 스페이스 맨보 그래픽 모드 2개 동시 출력:

-> 화면을 반으로 나눠서 스크린4 + 5, 또는 스크린 5 + 6 을 함께 표시.

 

싸이코 월드, 프린세스 메이커의 32개 팔레트:

-> 게임 배경과 하단의 아이템 화면의 서로 다른 16개 팔레트를 사용.

   (원래 MSX에서는 팔레트가 16개 밖에 없죠.)

 

정도가 되겠습니다. 실제 MSX2용 많은 게임들이 스캔라인 인터럽트를 쓰고 있죠.

 

그럼 오버스캔 모드를 만드는 방법은,

1. 스캔라인이 처음 시작할때는 192라인 출력 모드로 세팅합니다.

2. 스캔라인이 192라인에 도달하기 전에 (예: 100라인, 150라인 등)

   212라인 출력 모드로 바꿉니다.

   그러면, 스캔라인이 192를 넘어가더라도 화면이 계속 출력됩니다.

3. 스캔라인이 192를 지난 후 212 라인이 되기 전에, 다시 192라인 출력 모드로 세팅합니다.

   이러면 VDP의 라인 카운터가 오동작을 하게 되어,

   212라인이 넘어가더라도 수직 테두리가 표시되지 않고 계속 VRAM의 픽셀이 출력됩니다. ㅎ.ㅎㅋ

4. 3번에서 이미 192라인 모드로 설정했기 때문에, 다음 프레임 부터는 2~3번을 반복.

 

이러면, 상하 테두리 없는 넓은(?) 화면을 계속 볼수가 있습니다.

 

물론 장점이 있으면, 단점도 있겠지요? ㅋ

 

상하 테두리가 출력이 안되면서, VDP 내부의 수직 Blanking 인터럽트(보통 V-sync 인터럽트로 표현)

가 발생하지 않습니다.

MSX에서는 V-blank 인터럽트가 아주(!!) 중요한데요.

BIOS의 메인 타이밍 루틴이 모두 이 VDP의 인터럽트에 의존해서 구동됩니다.

 

따라서 오버스캔 모드가 동작중이면,

BIOS의 키 스캔 루틴이 동작안하게 되고, 타이머 관련 Jiffy 값이 안바뀌며,

PLAY 명령등의 사운드도 동작이 불가능해집니다.

타이밍에 따라 처리되는 디스크롬의 일부 루틴도 멎게 됩니다. ㅎ.ㅎ

하지만... 이 모든걸 게임중에는 안써도 되니까 별 상관은 없게 되겠지요. ㅋ

(FDD 액세스는 좀 주의를 해야겠네요.)

 

 

참고로, 현재 진행중인 "파라의 탑" 과 "ASO 리메이크 버전"에서

 오버스캔 모드를 사용하려고 계획 중입니다. ㅎ.ㅎ


2011년 5월 9일 월요일

SNK의 슈팅게임 ASO

ASO를 아시나요?

 

제가 국딩 시절 정말 재밌게 했던 게임인데용.

가장 문화적(?) 충격이 컷던 슈팅 게임을 꼽으라면, 전 ASO가 1등입니다.

 

아침 일찍 오락실에 가서, 혼자 신나게 즐겼던 추억이 있습니다요.

오락실 독차지하면, 배경음악도 또렷하게 들을수 있는 장점(?)이 있었지요. ㅎ.ㅎ

 

참고로 ASO는 수직 스크롤 형태의 비행 슈팅입니다.

3단으로 조각난 ARMOR(특수 무기)를 모아서 기체를 강화하는 방식을 쓰고 있습니다.

 

당시에 정말 참신한 시스템이었다고 생각이 듭니다.

레이져와 로켓, 스피드 업그레이드도 각각 가능했었고,

아이템 잘못 먹으면 다운그레이드 되는 처절함...

 

특이하게도, 수직 스크롤을 빨리감기/되감기도 가능했었지요.

 

보스에 따라 특정 ARMOR가 없으면 깨는게 불가능했던 것도 있어서,

아이템 운이 안따라주면 포기해야했던 스테이지도 있었지요.

 

간만에 생각이 나서 MAME로 몇판 해봤습니다.

국딩 때의 기억이라 그런지, 아이템 위치나 클리어 노하우는 머리속에 그대로 남아있군요. 핫핫...ㅎ

어릴때는 기억력이 좋았던건지... 나이들어 술먹기 시작하면서 머리가 나빠진건지...암튼 그렇습니다. ㅋ

 

 

ASO를 한번도 못해보신 분이라면,

MAME 에뮬로 한번 즐겨보시는걸 추천드리고요...

 

혹시나해서 유튜브 검색하니, 동영상 하나 나오는군요.



그리고, 아래 PS 나갑니다. ㅡ.ㅡㅋ

 

PS. 갑자기 ASO 얘기를 꺼내게 된건,

    MSX로 한번 리메이크를 하고싶은 생각이 들었기 때문이에요. ㅎ.ㅎ

    수직 스크롤이니, MSX로도 어느정도 가능할 것 같은 느낌도 들고...

    게다가 지금은 터보알이 있으니, 코딩 노가다 좀만 하면 실현이 될 것 같다는 생각이 들었습니다.


    일단 스테이지1의 배경 그래픽을 몽땅 캡쳐해서(MAME 만세!!)

    16x16 타일 정리하고, 팔레트 만들고 있습니다요.


    언제 완성될지는 모르겠지만, 제작 상황은 게시판에 가끔 알려드리겠습니다요~ ㅎ