2011년 11월 28일 월요일

ASO remake #10 - 동작 데모 디스크

AREA1 맵은 거의 완성이 되었습니다.

보스 처리가 완성되면, 적 유닛은 모두 구현되는 셈이네요. (스프라이트 그리기 힘듭니다요. ㅜ.ㅜ)


ASO의 가장 중요한 요소인 "아머"도 구현이 안되어 있는데,

아마도 Test 10 버전은 아머 구현으로 가게 될것 같아요~ㅋ


아래는 터보알 또는 에뮬(blueMSX 등)에서 실행가능한 데모 파일입니다.


ASO_20111127_test_9.zip

ASO_20111127_test_9_DSK.zip



ASO /M 으로 실행하면 문사운드로 소리가 나며,

ASO /A 는 필립스 뮤직모듈 등의 MSX-AUDIO로 소리를 들을 수 있습니다.


아래는 제 터보알에서 구동한 모습입니다.

이번엔 ASO /M /I 으로 실행해서, CPU idle 구간을 볼 수 있도록 캡쳐했습니다. 참고하셔요. ㅎ.ㅎ




2011년 10월 31일 월요일

ASO remake #9 - 레이저, 미사일 업그레이드

ASO에서 지상에서 움직이는 유닛이 몇종류가 있는데, 그 중 하나가 추가되었습니다.

SW 스프라이트를 이용하기 때문에, 풀컬러로 움직이는 모습을 볼수 있겠습니다.

참고로 공중 유닛은 HW 스프라이트라서 3색 정도만 표현가능합니다요...

공중유닛도 2가지가 추가되었습니다. (스프라이트 그리느라 힘들었어요. ㅎ.ㅎㅋ)



2011년 10월 24일 월요일

ASO remake #8 - SW 스프라이트

사실, ASO 리메이크를 시작하면서 SW 스프라이트를 계획했었습니다.

느리게 움직이는 지상 유닛들은 가능하면 비트맵의 깔끔한 그래픽으로 보여주고 싶었지용... ㅎ.ㅎ

 

이걸 지난 주말에서야 구현해서 테스트를 해보았는데요.

60프레임으로 진행되는 게임에서 유닛 여러개 그려넣는데 부하가 심하네요. ㅎ.ㅎ

 

근데, 원본 게임을 자세히 보니, 지상 유닛이 2프레임에 1도트 움직이고 있더군요.

홀짝 프레임에 맞춰서 유닛들은 반반 나눠 처리하면 VDP 부하를 줄일수 있었지요. ㅋ

 

움직이는 지상 유닛 없을때, CPU IDLE 구간을 보면...

 

1. 공중 유닛이 없을때: 약 40%

2. 공중 유닛이 있을때: 약 30%

정도 됩니다. 

 

이 상태에서, 지상 유닛이 5개 정도 등장하면 거의 IDLE 구간이 0%가 되네요.

겨우 ASO 가 구현될만한 수준이었습니다. 흐...

 

 

여기서 ASO에서 구현된 지상군 SW 스프라이트는 아래 처럼 처리됩니다.

 

기본적으로 배경 화면은 스크린5의 페이지 한장에 그려지고,

그려진 배경을 다시 복구(유닛으로 덧칠된 부분 복구)하기 위해 다른 페이지 하나에 깨끗한 배경 화면이 또 있습니다.

 

실제 ASO에서는 페이지1이 보여주는 화면이 되고, 페이지2가 원본 배경 화면입니다.

참고로 페이지0 에는 스프라이트 패턴이랑 STATUS 창(에너지 미터 등등)이 그려지고,

페이지3은 배경 화면용 맵 타일 그래픽이 존재합니다.

 

 

원래 SW 스프라이트는 원본 배경에 유닛 비트맵을 덮어 씌우게 되는데,

이때 원본 배경이 복구 된 후 유닛 비트맵이 그려지는 순간이 순차적으로 보이게 되면

유닛이 깜박이는 것 처럼 보이게 됩니다.

 

이걸 해결하려면,

1. 배경 전체를 더블 버퍼링.

2. 유닛이 다시 그려질 부분만 다른 페이지에 미리 그린 후, 복구될 배경과 함께 원본 배경에 덮어 그려줌.

3. VDP에서 현재 출력 스캔라인과 유닛 그려질 라인이 만나지 않도록 조절해서 처리.

하면 됩니다.

 

근데 60프레임 슈팅겜에서 전체 더블 버퍼링은 속도상 불가능하겠고요.

(ASO에서 지상 유닛은 30프레임 업데이트이긴 하지만, 이것도 힘들겠지요. ㅋ)

 

VDP의 출력 스캔라인을 비켜 가려면,

 그려질 비트맵의 수직 위치랑 현재 스캔라인 간 차이가 많이 나도록 하면 됩니다.

 V-blank 구간에서 비트맵을 그리면 가장 안전하지만, 짧은 구간에 많이 그리진 못하겠지요.

 

참고로, V-blank 구간은 아래처럼 됩니다. (ASO는 60Hz 오버스캔 240라인 모드입니다. )

 

V sync 60Hz 출력일때 

 수직 192 해상도 V-blank 구간: 262 - 192 = 70 라인

 수직 212 해상도 V-blank 구간: 262 - 212 = 50 라인

 오버스캔 모드의 V-blank 구간: 262 - 240 = 22 라인

 

V sync 50Hz 출력일때 

 수직 192 해상도 V-blank 구간: 312 - 192 = 120 라인

 수직 212 해상도 V-blank 구간: 312 - 212 = 100 라인

 오버스캔 모드의 V-blank 구간: 312 - 240 = 72 라인

 

여담이지만, 25프레임 등의 애니메이션을 구현한다면 50Hz 모드가 훨씬 여유가 있다는걸 볼수 있어요.

(더블 버퍼링을 안하는 경우에 한해서...ㅎ.ㅎㅋ)

 

 

그럼, ASO에서는 어떻게 할까요?

 

처음엔 2번의 배경과 유닛 비트맵을 미리 계산(페이지 0 활용)해서 그려보았는데,

비트맵 세번 복사 하는데 시간이 꽤 걸려서 사용이 힘들더군요.

1. 별도 페이지에 원본 배경 복사 (복구될 영역과 유닛 이동 후의 영역만큼 18 x 18 사이즈)

2. VDP의 논리연산 COPY를 써서 배경에 유닛을 덮어씌움 (투명색은 배경이 그대로 보이겠죠?)

3. 완성된 비트맵을 실제 배경 페이지에 복사

 

최종으론, 3번 방법처럼 적절하게 VDP의 스캔라인과 그리는 부분이 겹치지 않게 처리하고 있습니다.

이 경우는 비트맵 두번만 복사하면 되서 1.5배 빠릅니다.

1. 원본 배경을 원본 페이지에 바로 복사(복구)

2. 새로운 위치에 유닛 비트맵 논리연산 COPY

 

지상 유닛은 한 프레임 처리에서 가장 마지막에 이루어집니다.

VDP의 라인인터럽트를 이용해서 스캔라인이 화면 아래쪽에 도달하면, 게임의 한프레임 처리가 시작되는데요.

이것 저것 다 끝내면, 스캔라인이 화면 중앙정도에 옵니다. 남은 CPU 시간이 반정도 남은거지요.

 

이때 지상 유닛을 처리하면서 화면에 다시 그리게 되면,

화면 아래쪽에 나타나는 경우가 아니라면, 눈으로 깜박임을 느낄수 없게 됩니다.

 

글로만 쓰니까, 잘 이해안되실수도 있겠습니다. ㅎ.ㅎ;;

 

암튼, 실제 구현해보니, 지상 유닛이 화면 하단 1/3 정도에선 깜빡이지만, 전체적으로 쓸만했습니다.

뻥 좀 보태면, 거의 원본 ASO의 유닛 움직임과 흡사합니다. ㅋ 

 

유닛의 수직 위치를 소팅해서 스캐라인과 잘 어긋나도록 그리면, 깜박이는 경계선을 더 낮출 수 있을 것 같네요.

이번 주중에 완료해서 동영상으로 보여드리겠습니다~

 

가능하면, 중간 보스도 등장 할 예정...


2011년 10월 17일 월요일

ASO remake #7 - 데모 디스크

이제 어느정도 ASO 스러운 화면이 나오게 되었습니다. ㅎ.ㅎ


MSXturboR GT (또는 램512확장된 ST)에서 실행 가능하며, blueMSX 등의 에뮬에서도 실행 가능합니다.

MSX-AUDIO 또는 MoonSound/DalSoRi 카드가 있으면 사운드를 들을 수 있습니다.


실행은 DOS2 상에서,

ASO /M 또는 ASO /A 등으로 실행하면 되겠습니다.

옵션의 /M은 MoonSound, /A는 MSX-AUDIO, /N은 NO-AUDIO 입니다.


아래의 파일을 받으시면 됩니다.

디스크 이미지 파일은 DOS2 부팅 및 ASO /M 으로 시작되도록 만들어놨습니다. blueMSX 등으로 바로 실행가능.


ASO_20111017_test_7.zip

ASO_20111017_test_7_DSK.zip


아래는 blueMSX에서 구동해본 모습입니다.




아래는 제 터보알, MoonSound 로 구동되는 영상입니다.



참고로, 옵션에 /I 를 추가하면 게임 화면 좌/우 테두리에 CPU idle time 표시기가 등장합니다. ㅋ

파란/빨간 막대가 길수록 CPU 여유가 있는 상태를 나타냅니다.


아래는 제 실기에서 동작되는 모습니다.






적 유닛 및 총알이 많아질수록 CPU가 바빠지는걸 볼수가 있어요.

아머 및 보스 처리 외에는 게임 기본적인 부분이 구현된 상태라, 크게 CPU 부하가 늘어날 것 같지는 않습니다.

버벅된다면, 어셈 노가다를 해야겠지요. ㅎ.ㅎㅋ


2011년 10월 3일 월요일

ASO remake #6 - 공중 유닛 처리

잠시 작업을 놓고 있다가, 연휴를 타서 좀 달려보았습니다~ ㅋ


이전 Test 5 에서 공중 유닛을 추가해봤습니다.

ASO 에서 맨처음 등장하게 되는 동그란 모양의 비행체인데욤.

빠르게 휘리릭~ 날아다니는 특징(?)이 있습지요. ㅎ.ㅎ;


기본적인 총알 및 기체간 충돌 처리도 넣고, 폭발 스프라이트도 대강 그려넣었습니다.


실기(터보알 GT 또는 램512 확장된 ST)에서 실행해보시려면, 파라동 게시판에서 테스트 파일을 받으시면 되겠습니다.

믈론 blueMSX에서도 실행가능합니다.

사운드는 문사운드(또는 달소리)로 출력됩니다.

사용키: 커서키, Z,X,C,스페이스, ESC, 숫자패드(기체 파워업 테스트용)


아래는 제 터보알에서 구동되는 모습입니다.

참고로 공중 유닛은 초당 60프레임으로 처리됩니다.

영상 뒷부분에는 움직임 패턴 데이터를 넣어보았습니다~ ㅎ.ㅎ




움직임 패턴(route) 에디터의 동작모습도 찍어보았습니다~




2011년 9월 26일 월요일

M File Manager v1.2 for MSX-DOS2




거의 1년만의 업데이트군요. ㅎ.ㅎ

아래 파일 받으시면 되겠습니다.

Download: M_v1.2.zip


----------------------------------------------------------------

    M v1.2 (MSX-DOS2용 파일 매니져 2011.09.26)

        By 서영만 (E-mail:sharksym@hitel.net)

----------------------------------------------------------------


* 변경 내용


  M 에서 외부 프로그램 실행(_M_.BAT 사용) 후 복귀 시,

   이전 뷰어의 디렉토리로 돌아오도록 변경되었습니다.

  만약, M.INI에서 TSR 옵션이 꺼져있으면 동작하지 않습니다.


  내장 MPXP(MPX 플레이어) 구동 시,

   ID3 태그의 곡명 및 가수명을 출력합니다.

  / 또는 _ 키를 눌러 재생을 멈출 수 있도록 개선되었습니다.


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 레벨 에디터를 구동해본 모습입니다.

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

그냥 구경만 하셔요~





2011년 7월 5일 화요일

RS-232C를 이용한 파일 전송 (PC -> MSX)

MSX용 프로그램을 개발할때는 저는 주로 윈도우에서 작업을 합니다.

CP/M 에뮬을 쓰고 있습지용~

 

최종 결과물을 실제 MSX(제 터보알~)에서 테스트 하려면 아래의 시퀀스를 따르게 되는데요.

 

1. MSX에서 XCHGMMC.COM으로 SD카드 교체 상태 진입

2. MMC/SD 드라이브에서 노트북으로 해당 SD카드를 옮김

3. 원하는 파일들을 SD카드로 복사

4. SD카드를 MSX의 MMC/SD 드라이브로 옮김

 

반복 작업을 하다보면 쬐금 귀찮죠.

다행히 터보알 바로 옆에 노트북을 놓고 쓰느라, SD카드 옮길때 별로 시간이 안걸리긴 합니다...ㅎ

 

요걸 MSX와 노트북의 시리얼 포트를 이용해서, 파일을 전송하도록 해보았는데요.

 

아래 사진을 보시면 되겠습니다




윈도에서 MSX_FX를 실행시키면, MSX가 RS-232C로 연결되는 걸 기다리게 되는데요.

MSX에서는 아래처럼 FXR 프로그램을 실행하면,

파일들을 전송받아 현재 디렉토리에 생성해줍니다.



 

이제 SD카드 바꿔끼는 불편함을 좀 줄일 수 있겠습니다요..ㅋ

 

물론 115200BPS로 전송하면 거의 FDD 속도가 나오지만,

배치 파일로 한방에 전송이 되니, 실행해놓고 딴짓하고 있으면 되겠습니다. ㅎ.ㅎ

2011년 6월 23일 목요일

RS-232C 카트리지 - 오실레이터 업데이트

작년에 CPLD인 EPM3064로 만들었던 232C 카트리지가 있었는데요,

만들다 보니, 로직셀의 부족으로 원래 계획했던 사양은 되지 못했었지용...


클럭 소스를 MSX의 3.58MHz 출력을 사용하느라,

31 분주해서 state machine 만드는데 로직의 낭비가 좀 있었습니다.

계산해보면 3579545 / 31 = 115469Hz 가 나옵니다. 115200에서 약간의 오차도 있었고요.


좀 늦었지만 ㅡ.ㅡ 마무리를 해야될 것 같아서,

쇼핑몰에서 1.8432MHz 오실레이터를 질렀습니다.

1450원짜리 가격이 ㄷㄷㄷ

EPM3064가 4200원인데, 걍 CPLD 하나 더 쓰고 기능을 늘리는게 좋았으려나요~ ㅋ


이거 하나만 택배로 받으려면 민망하니깐 하나를 더 질렀습니다.


ALTERA JTAG 다운로더인 USB-BLASTER입니다.

29,000원의 위용~ 두둥~~




그 동안, 노트북 윈7에서 LPT포트용 BYTE-BLASTER 쓰느라 무지 귀찮았었는데, USB로 바꾸니 좋군요.


참고로 LPT 포트없는 윈7깔린 노트북에서 BYTE-BLASTER 쓰려면,

PCMCIA용 LPT 어댑터랑 VMware에 윈2000에 Quartus 깔아서 쓰는 방법뿐이었습니다.


이제 VMware 없어도 되니 너무 좋네요. ㅋ


음... 이야기가 옆으로 좀 샜습니다만,

클럭을 외부 오실레이터로 바꾸니, CPLD에서 사용되는 로직이 좀 줄어드네요.

16분주 하면 딱 115200Hz가 나옵니다.


사실 내부적으로는 UART의 4배수 클럭을 쓰고 있어서, 실제로는 4분주만 해서 사용합니다.

57600bps용으로는 8분주하고요.


어쨋거나 로직 여유 생긴 걸로,

UART TX, RX LED 두개 컨트롤과 RX FULL 됐을 때 INT(인터럽트) 넣도록 추가했습니다.

이제 CPLD의 남은 I/O 핀이 0개가 됐습니다. ㅎ.ㅎ


아래 사진에서 추가된 오실레이터를 볼수 있습니다.

LED랑 인터럽트 라인도 연결했고요.





아래는 최종 HW 스펙입니다.


- RS-232C TX, RX, GND 3핀 사용

- TX, RX 동작 표시 LED

- Start 1BIT, Data 8BIT, No Parity, Stop 1BIT 전용

- 115200 및 57600 BPS 지원

- RX Full 시 interrupt 지원


아래는 사용된 I/O 포트입니다.


- 30H (Control 레지스터)

  BIT7 = RX Full (Read only)

  BIT6 = TX Full (Read only)

  BIT5,4,3,2 = 사용 안함

  BIT1 = RX Full 인터럽트 1: ON, 0: OFF (R/W)

  BIT0 = Baud rate 1: 57600, 0: 115200 (R/W)


- 31H (8BIT TX, RX 버퍼 레지스터)

  BIT7~0 = TX data (Write시), RX data (Read 시)



일단 RX 시 인터럽트가 되니까, 터미널 프로그램 코딩에 여유가 생겨서 좋네요.

코드 정리해서 돌려보니 안정적이네요.

기존엔 status 폴링하느라 코드가 좀 난잡하기도 하고,

 가끔 화면 스크롤 하다 보면 1바이트 깨지는 경우도 나왔었지요.


내친김에 기능하나 더 넣어봤습니다.


MSX-DOS에서는 AUX 디바이스를 지원하는데요.

예전엔 이걸 어떻게 구현하는지 몰라서 보류 중이었는데...

그냥 AUX IN/OUT 훅에 UART 1바이트 전송 루틴 추가하면 일단 동작이 되더군요. *_*


아래는 간단하게 DOS2에서 AUX로 출력 및 콘솔 리다이렉션을 해본 모습입니다.




아래는 윈도 쪽의 터미널에 출력된 모습입니다.




완전한건 아니지만, 이정도만으로도 꽤 쓸만한거 같네용.

그럼, 또 여유가 생기면 노닥거리는 걸로 하고, 여기서 마무리~ 합니다. ㅎ.ㅎ;


2011년 6월 5일 일요일

간이 터미널 프로그램으로 리눅스 우분투 로그인

작년에 간단한 RS232C 카트리지를 만들었는데... 아마 기억하시는 분 있으시죠? ㅎ.ㅎ;

그 때, 제 노트북(OS는 윈도) VMware에 깔린 리눅스에, 시리얼포트로 로그인 해보려다 실패했었지요.

VMware에서 시리얼 포트 I/O가 충돌하면서 포트가 끊어지는 현상이었는데요.


오늘 다시 테스트를 해봤습니다.

제 노트북엔 시리얼 포트가 없어서 USB to 232C 어댑터를 쓰고 있습니다.

VMware에서는 이 포트의 리소스를 공유해서 시리얼 포트로 에뮬레이션이 가능한데요.

이러면, VMware 내의 리눅스에서는 제대로 동작이 안되었습니다.

참고로 VMware player 3.1.4 버전을 쓰고 있는데요, 암튼 정확한 원인은 모르겠지만... 아무리해도 안되더군요. ㅋ


근데 시리얼 포트 에뮬을 끄고, 대신 USB 에뮬쪽을 켜면 이게 리눅스 쪽에서 정상적으로 쓸수가 있었습니다. ㅎ.ㅎ;

해당 어댑터는 우분투 11.04에서 ttyUSB0 로 자동 인식 되네요.


암튼 문제없이 연결이 되서, 제 터보알로 로그인을 해봤습니다.

아래 인증샷 나갑니다.




ls 실행했을때, 디렉토리 앞에 이상한 글자가 마구 찍히는데요.

이건 MSX쪽 터미널 프로그램이 ANSI 컬러코드를 처리 못해서 그런거니 이해해주세요. ㅎ.ㅎㅋ

원래는 아래 터미널처럼 나와야하는 것이죵~ ㅋ




PS. 2011.06.05

눈에 거슬리는 터미널 컬러코드를 무시하도록 해봤습니다. 아래처럼 나오는군요.

나중에 시간나면 컬러 처리 가능한 터미널을 하나 만들어봐야겠군요. 스크린7을 써야겠죠. 아마도...



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 타일 정리하고, 팔레트 만들고 있습니다요.


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


2011년 4월 23일 토요일

IMS Player for MoonSound/Dal-So-Ri

OPL2 용 음악파일인 IMS 연주기입니다.

Download: IMSP4_v0.3.zip


OPL4 칩을 사용하는 문사운드 또는 달소리 카드에서 구동됩니다.

프로그램은 DOS2 환경에서만 동작되며, IMS 파일 크기 만큼 메모리를 더 사용하게 됩니다.

 

예: 100KB IMS 파일 재생시 메인 메모리 256KB 이상 필요.

 

메인 메모리 여유가 된다면, IMS 파일 크기에는 제한이 없지만,

악기 데이터는 최대 128개 까지만 로딩이 가능합니다.

 

실행은 아래 처럼 하면 되겠습니다.

IMSP4 ims-filename [리턴]

 

IMS 파일이름과 같은 BNK 파일이 발견되면, 해당 BNK파일을 로딩하게 되며,

BNK파일이 없는 경우는, IMSP4.COM 파일이 있는 디렉토리의 STANDARD.BNK 파일을 로딩하게 됩니다.

 

참고로, 압축파일에는 제가 쓰던 STANDARD.BNK 파일이 포함되어있습니다.

 

그리고, 소스 대부분이 C로 코딩된 탓인지, 터보알 외의 일반 MSX2 기종에서는 제 속도로 연주가 불가능합니다.

참고하세요. ㅎ.ㅎ;

아마 문사운드 갖고 계신분은 터보알도 있으시겠지용? ㅎ.ㅎ;;;

 

준성님은 OCM 터보 모드에서 구동하시면 될 것 같습니다. ㅎ.ㅎㅋ

 

아래는 제 터보알 + 문사운드로 실행되는 모습입니다.



2011년 4월 20일 수요일

OPL4의 OPL2 호환성과 IMS 플레이어

어제 퇴근 후,

 OPL4과 OPL2 매뉴얼을 놓고 서로 비교를 해봤습니다.

 

OPL4가 구버전 OPL2,3와 호환되는 것으로 알려져있는데,

 실제 SW 적용 시는 어떤지가 관건이었지요.

 

근데 OPL4 매뉴얼을 봤더니,

 FM 신스 쪽은 첨부터 SW적으로도 하위 호환이 되도록 구성이 되어있더군요.

참고로 OPLL은 OPL2의 간단 버전으로 동작은 비슷해도 레지스터 구성이 조금씩 차이가 있었지요.

 

부랴부랴, IMSP4 (IMS player for Moonsound) 프로젝트를 하나 만들고 테스트를 해봤습니다.

역시나 거의 코드 수정없이 출력이 잘나오는군요. *_*

십여전 기억에 남아있던 오리지날 OPL2 (옥소리3.8 ㅎ.ㅎ)와 비슷하게 나오네요. 아하핫...

 

음, 결론은... "문사운드용 IMS 연주기도 쉽게 만들어짐" 입니다.

 

여기서 문득 든 생각이, 게임용으로 문사운드를 활용한다면...

OPL2(또는 OPL3)의 FM 사운드를 배경음악으로 넣고,

PCM 출력으로 효과음 넣으면, 상당히 낮은 CPU 점유만으로 활용이 가능하겠더군요. ㅎ.ㅎ;

 

여기까지 왔더니... 하나 더 드는 생각 !

준성님은 10년전에 다 해보셨을거 같은 느낌이 !!! ㅎ.ㅎㅋ

 

준성님~~,

 만들어 놓으신거 자료 좀 풀어보셔요~ !! ㅋ

 

 

 

음... 혹시 알고 계신 분도 있겠지만~ㅋ

제가 지금 쓰는 IMS 플레이 관련 코드(애드립 라이브러리 포함)는

10년전에 윈앰프용으로 만든 IMS 플러그인 코드를 그대로 쓰고 있습니다.

 

근데, 이게 MSX로 구현하다보니, 클럭 스피드를 정확하게 처리하는데 고민을 좀 해야겠더군요.

현재 코드는 VDP V-blank 인터럽트 주기를 사용하기 때문에 속도를 정확하게 맞추기가 힘드네요.

 

터보알의 내장 타이머를 쓰거나, 아니면 VDP H-blank 인터럽트를 함께 써야될 거 같은데...

암튼 좀 문제가 있어요~ ㅎ

 


 

어쨋든, IMSP 문사운드 버전은 요번주 중으로 정리해서 올려놓겠습니다.

 

현재 코드는 BNK파일 사이즈 제한(약 10KB)이 있어서,

 옛날처럼 100KB넘는 STANDARD.BNK 등을 처리할수 있도록 개선이 좀 필요하고요.

현재 16KB 제한인 IMS 파일 사이즈도 숙제로 남아있고요.

 

결국 대용량의 연속 메모리를 처리할수 있는 방법이 있어야 이런 것들이 개선가능하겠습니다요~~ ㅎ.ㅎ


2011년 4월 18일 월요일

IMS Player v0.3 for OPLL(YM2413)

OPLL의 고정음색으로 연주하는 IMS 플레이어입니다.


플레이루틴의 메모리 문제로 IMS 데이터는 초반 16KB까지만 연주가 가능합니다.

궁금하시면 한번 들어보세요.

도스2 전용이고 추가메모리 32KB사용합니다.

Download: IMSP_v0.3.zip


따로 최적화한 코드가 아니라서, 일반 MSX2에서는 플레이 속도가 조금 느려질수 있어요. ㅎ.ㅎ

2011년 4월 16일 토요일

OPLL 용 IMS 플레이어를 만들어보면

IMS 파일 모르시는 분 있으세요?

 

MS-DOS 시절 OPL2(YM3812) 사운드 카드를 쓸때, 많이 듣던 FM 음악 포맷이었죠.

IMPLAY, OCPLAY 등으로 연주가 가능했습니다.

 

이걸 MSX-MUSIC 으로 재생이 가능하도록 만들어봤습니다.

OPLL 칩 특성상 OPL2와 같은 소리를 내는건 불가능하지만,

내장 악기 15개를 이용해서, 어느정도 흉내를 내봤습니다.

 

타악기인 드럼 소리는 제대로 출력이 되지않지만,

피아노, 플룻 등의 OPLL 내장 악기는 비슷하게 연주가 가능합니다.

 

 

실행파일은 DOS2 전용이고, 여유 메모리 32KB가 더 필요합니다.

물론 OPLL이 필요합니다. IQ2000 에서는 FM-PAC이 있어야겠군요.

IMS 파일은 16KB 이하 크기만 로딩이 가능합니다.

BNK는 처리하지 않고, 대신 OPLL 내장 악기로 바꿔서 쓰게 됩니다.

플레이 중 종료하려면 ESC 키를 누르면됩니다.

Download: IMSP_v0.1.zip



아래는 그럭저럭 들을만한 IMS 파일입니다.

심심할때 한번 플레이해보세요.

SNOWMAN.IMS

YS1-END.IMS



아래는 터보알에서 실행해본 모습입니다.






2011년 4월 9일 토요일

HI-TECH C - 그래픽 데모 및 테트리스 추가

작업 중이던 그래픽 라이브러리가 툴에 추가되었습니다.

 

아직 텍스트 모드와 패턴맵 모드는 지원이 안되지만,

비트맵 모드(스크린 5,6,7,8)은 어느정도 활용이 가능합니다. ㅎ.ㅎ

 

데모 프로그램에 DEMO_GRP 및 TETRIS 소스가 추가되었습니다.

 

쓰다가 궁금한 부분이 있으시면, 댓글 주셔요~~


https://github.com/sharksym/CPMEMU_HI-TECH_C


2011년 4월 4일 월요일

HI-TECH C - 그래픽 라이브러리 데모 용 테트리스

테.트.리.스

 

설명이 필요없는 게임이겠군요. ㅎ.ㅎ

참고로, 그래픽 라이브러리 데모용 프로그램입니다.


DOS2 에서 실행가능하며, 추가 메모리 64KB 필요합니다.

메인램 256KB 이상인 시스템이면 충분하겠습니다.


심심하신 분들은 한번 실행해보세요. ㅎ.ㅎㅋ

Download: TETRIS_20110404.zip



아래는 에뮬에서 실행해본 모습입니다.

ESC 키를 누르면 도스로 복귀합니다.




작대기가 연속으로 세개가 등장하는군요 !!

음... 라인 10개 없앨때 레벨 하나씩 올라갑니다. 그냥 블럭 떨어지는 속도만 빨라져요.




바닥에 떨어질 위치에 점선으로 표시해줍니다~ ㅎ




아래는 터보알에서 세운 기록~~ 짜잔~~ 레벨10에서 95점 !!



2011년 3월 21일 월요일

HI-TECH C 용 GRP 라이브러리 만들기 #3 - 라인, 박스, 폰트

이제 뭔가 좀 갖추어진 듯 한데용...

 

Line, Box, Boxfill 및 폰트 그리는 기능이 추가되었습니다.

Line은 VDP 커맨드를 그대로 사용하고,

Box, Boxfill은 Line을 여러개 그리는 식으로 구현되어있습니다.

 

폰트는 일단 MSX BIOS에 내장된 8x8 데이터를 내장했습니다.

출력은 8x8 또는 6x8 등으로 가능합니다.

 

RAM과 VRAM간 많은 양의 데이터 전송이 가능하고,

팔레트 함수들을 추가했습니다. 


 

 

아래는 라이브러리 테스트용 프로그램이 동작하는 모습인데요, 잠시 구경해보세요~ ㅎ

간단한 비트맵 모드 그래픽은 어느정도 완성됐으니,

다음은 패턴맵 모드 쪽으로 구현하려고 합니다.




2011년 3월 7일 월요일

HI-TECH C 용 GRP 라이브러리 만들기 #2 - 스프라이트, VRAM 카피

주말을 맞아 작업이 좀더 진행이 됐습니다.

스프라이트 기본기능과 VDP 커맨드를 이용한 메모리 copy 정도를 넣어봤습니다.

 

 

아래는 라이브러리 테스트용 프로그램이 동작하는 모습인데요, 잠시 구경해보세요~ ㅎ




2011년 3월 2일 수요일

HI-TECH C 용 GRP 라이브러리 만들기 #1 - 구상

요즘 틈틈히 DOS2뱅킹 라이브러리와 함께 쓸수 있는, 그래픽 라이브러리를 만들고 있습니다.

시작이 반이니까... 50% 완성이라고 보시면 되겠네요. ㅎ.ㅎㅋ

 

라이브러리 구동 환경은,

제가 만든 DOS2 뱅킹 라이브러리가 필수이고 가능하면 2뱅크(32KB x 2)이내로 만들 생각입니다.

BIOS 내의 스크린 모드 전환 및 VDP 관련 루틴 없이 동작하도록 되어있습니다.

최소 사양은 V9938 + VRAM 128KB 이고, V9958 기능들도 지원합니다.

 

구현은 아래 처럼 진행중입니다. 순서는 좀 바뀔수 있어요 ㅎ.ㅎ

 

1. VDP I/O

   - VDP control 레지스터 쓰기, status 레지스터 읽기

   - VRAM 읽기/쓰기

   - VRAM 페이지(16KB 단위) clear

   - 디스크, VRAM 간의 Load/Save

 

2. 비트맵 모드 (스크린 5,6,7,8)

   - 페이징

   - VRAM R/W 이용한 픽셀 그리기

   - HW 수직 스크롤(V9938)

   - HW 수평 스크롤(V9958, 1페이지, 2페이지 모드)

   - VDP 커맨드

   - 폰트

   - Circle

   - 인터레이스 모드 DRAW: Line, Box

 

3. 스프라이트

   - 스프라이트 모드2

   - 스프라이트 모드1

   - 패턴 애니메이션

 

4. 패턴맵 모드 (스크린 2,4)

   - 페이징

   - 패턴 애니메이션

   - Line, Box, Circle

   - SW 스크롤

 

5. 팔레트

   - 팔레트 애니메이션

 

6. 텍스트 패턴맵 모드 (스크린 0,1)

   - 페이징

   - 폰트

   - Line, Box (특수 문자)

 

7. 비트맵 모드 (스크린 10,11,12)

   - 2번에서 중복 기능 외...

 

 

에... 사실 처음에는 VDP 기본 라이브러리랑 게임용 라이브러리를 따로 만들까 생각도 했었는데요.

일단은 짬뽕해서 진행하고, 상황봐서 게임용은 따로 나누던지 할 생각입니다.

 

조금씩 만드는거라, 언제 완성될지는 모르겠지만, 라이브러리는 진행중 가끔 릴리즈 될 예정입니다.

 

PS. 혹시 요청사항 있으시면 댓글 달아주셔요. ㅎ.ㅎ


2011년 2월 20일 일요일

Scanline eraser

아래는 지난주 파라동에서 painkilla님이 소개해주신 물건(SLG 3000)입니다.


http://wp1114205.wp150.webpack.hosteurope.de/wordpress/?page_id=745


VGA 모드 출력시, 홀수 또는 짝수 라인을 지워서, 꼭 CRT 모니터의 스캔라인 효과를 내주는 기기입니다.

아래 사진을 보시면 어떤 효과인지 이해가 가시죠?






고전 게임 처럼 해상도가 낮은 게임들(수직 해상도 240 이하)의 경우,

640 x 480 모드에서 홀수 수평라인을 지우면 위의 R-type 사진 처럼,

꼭 CRT 모니터에서 보는 듯한 모습을 볼수 있지요.


이걸... 가만히 생각해보니, 업스케일러도 아닌 원본 해상도에서, 라인을 지우는 것이라면 쉽게 만들수 있을 것 같았습니다.

그래서... 음... 만들어봤다는것이죠. ㅋ



15핀 RGB D-SUB 커넥터 두개랑 74LS74A, 74LS125A, 세라믹 콘덴서 2개, 3극 스위치로

SLG 3000 비슷한 걸 만들었습니다.


아래 사진 나갑니다요.

스위치는 검정으로 지울 라인(홀수 또는 짝수)을 선택할때 쓰입니다.





MAME에서 중화대선을 실행해본 모습입니다.

1024 x 768 LCD 모니터에 출력한 것이니, 640 x 480 화면이 좀 뿌옇게 업스케일되어있네요.


아래는 라인 지우기를 안했을때의 원본 화면입니다.




아래는 홀수 또는 짝수 라인을 지웠을때의 모습입니다.

MAME 타이틀의 글자에서 차이가 보이시죠?





회로 추가합니다.

그래픽 카드와 모니터 케이블 사이에 어댑터가 들어가야되니,

기본적으로 2개의 DSUB 커넥터의 15핀은 서로 다 연결하셔야됩니다.

아래 74LS74랑 74LS125에는 DSUB 커넥터에서 필요한 핀(R,G,B,H,V, 5V, GND 등등)에 연결하시면됩니다.

참고로 5V 전원은 DSUB 9번핀에서 끌어다 쓰면 됩니다.



아래는 wiki 에서 퍼온 VGA 15핀 DSUB 핀아웃입니다. 참고하셔요.