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 리메이크 버전"에서

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