2012년 4월 22일 일요일

GRUN v1.1 release



Download: GRUN_v1.1.zip


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

    Game Runner v1.1 (MSX-DOS2용 게임 로더 2012.04.22)

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

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


* Game Runner (GRUN)


  GRUN은 MSX1용 16KB 또는 32KB의 MSX1 용 롬이미지 로더입니다.

  게임 실행 중 DOS로 복귀가 가능하며,

  게임 속도 조절 및 상태 저장/복구 기능을 지원합니다.



* 요구 사항


  MSX-DOS2가 구동되는 MSX2(VRAM 128KB) 이상의 기종.

  메모리 매퍼 사용하지 않음.



* 사용법


  DOS2 프롬프트에서 아래처럼 입력하면 롬파일이 실행됩니다.

  GRUN filename.rom


  특수키 입력

  ESC : 게임을 강제 종료하고 DOS2로 복귀

  1   : 일시 정지

  0   : 게임 속도를 원래의 60프레임으로 복귀

  2   : 게임 속도를 30프레임으로 낮춤

  3   : 게임 속도를 40프레임으로 낮춤

  4   : 게임 속도를 45프레임으로 낮춤

  5   : 게임 속도를 48프레임으로 낮춤

  6   : 게임 속도를 50프레임으로 낮춤

  7   : 게임 속도를 52프레임으로 낮춤

  F4  : 게임 상태를 저장

  F5  : 게임 상태를 복구



* 마지막으로


  MSX 메인 BIOS를 패치 후 램에서 구동하므로,

  제대로 실행안되는 게임도 있습니다.

  코나미, 남코 등의 게임은 대부분 동작합니다.

 

  GRUN 에서는 turboR의 CPU 모드를 변경하지 않습니다.

  속도가 빨라지는 현상이 생기는 게임은,

   로딩 전에 미리 CPU모드를 Z80으로 변경하세요.


  

2012년 4월 16일 월요일

GRUN - 게임 상태를 세이브/로드 할 수 있다면?

메인 BIOS/BASIC 롬을 램에 복사해서 놀던 시절이 있었습니다.

기억하시나요? ㅎ.ㅎ


MSX 파워업 테크닉 책에서도 내용이 소개됐던걸로 기억합니다.


보통 롬팩 게임을 꽂고 켜게 되면,

메인 BIOS는 각 슬롯을 체크해서 롬SW 존재하는지 확인합니다.

4000H, 4001H 번지에 AB 문자가 들어있는걸로 체크하는데요.

여기서 SW가 발견되면, 해당 슬롯의 INIT 루틴을 실행하도록 되어있어요.


보통 BASIC을 확장하는 롬팩이라면 INIT 루틴 처리 후 BIOS로 다시 복귀되는데,

대부분의 게임은 INIT에서 곧장 메인 게임 루틴으로 가버립니다.


참고로, FDD등이 장착된 경우 대게 슬롯2,3 등에 DISKROM이 존재하는데,

만약 슬롯1에 게임팩이 있으면, DISKROM이 실행안되는 것도 이런 이유때문입니다.


암튼 본론은~ ㅎ.ㅎ

MSX-DOS 상에서 16KB 게임 롬 이미지를 로딩해서 실행하는 경우,

PAGE0을 메인 BIOS 슬롯(SLOT0)으로 전환하는 대신,

BIOS 를 PAGE0 램에 복사해놓으면, 어떻게 될까? 입니다.


결국 메모리는 아래처럼 되겠죠?

PAGE0: 램 (슬롯0의 BIOS 16KB 복제함)

PAGE1: 램 (게임 롬 이미지 16KB 로딩)

PAGE2: 램 (사용 안함)

PAGE3: 램 (Workarea 및 게임에서 사용될 메모리)


만약 게임에서 PAGE0을 슬롯 전환하거나 그러지않는다면, 겜 실행은 평소처럼 잘 되겠죠? ㅋ

실제로 간단한 프로그램을 만들어서 실행해보니, 코나미의 16KB 게임 몇개는 잘 돌아가는군요.

(king's valley랑 road fighter 로 테스트해봤습니다.)



그럼 이제 본론2 입니다. ㅋ

이렇게 해서 게임을 실행하면 뭐가 달라질까요? (물론 겜 실행시, 호환성 낮아지는건 열외로 놓구요..ㅋ)


PAGE0 코드가 BIOS이긴 하지만, 램 상태라서 변경(패치)이 가능합니다.

대부분 게임들은 타이머에 동기해서 움직이도록 구현되어 있기 때문에 H.KEYI 훅이 필수적으로 사용됩니다.

참고로, 게임 실행중에는 VDP의 V-blank 인터럽트만 주로 쓰입니다.


H.KEYI 훅 자체는 게임 실행중에 설정이 되니까, 게임 로더에서 미리 변경하는건 불가능합니다.

근데 훅을 실행하는 메인 BIOS 코드는 변경이 가능합니다. PAGE0이 램이니까요...ㅋ


또 간단한 코드(ㅡ.ㅡ)를 만들어서 테스트해봤습니다.


H.KEYI 훅 실행하기 전에 키보드 입력을 체크해서,

훅 실행을 주기적으로 막도록 해봤습니다.


근데, 훅 실행을 막으면 어떻게 될까요?

게임에서는 60Hz V-blank 인터럽트 때에 매번 호출 되는 줄 알고 있으니...

훅 실행을 안해주면 그대로 게임이 멎게 됩니다. 시간이 안가는거죠.ㅋ


실제 코드는,

0~7  사이 숫자 키 입력을 받아서, 훅을 주기적으로 skip 하도록 했습니다.

예를 들어 2를 눌러주면, 인터럽트 2번 뜰때마다 skip 됩니다.

그러면, H.KEYI 실행 빈도가 1초에 60번이 아닌 30번이 되겠죠?

겜 속도가 절반으로 떨어지게됩니다.


암튼 요렇게 해보니 나름 재미가 있네요. ㅎ.ㅎ



그럼, 좀더 BIOS 확장을 한다면 게임 실행중에 여러가지 기능을 넣을수가 있겠죠?

게임 실행 중 특정 키를 누르면, 메모리 복구하고 다시 DOS로 복귀 한다거나,

스크린 샷을 찍어서 RAM에 담아놓거나 등등 재밌는 걸 할수 있을 것 같네요.


PAGE3의 메모리랑 PC 만 잘 복구할수 있다면,

에뮬레이터 처럼 게임을 순간 저장했다가 복구할수도 있을겁니다.

멀티 태스킹으로 게임을 여러개 돌린다거나 그럴수도 있겠고요.

(물론 VDP랑 PSG 레지스터가 제대로 복구안될테니, 실제 가능한 게임은 몇개 안될지도요...ㅋ)


암튼, 이런 저런 삽질을 해봤습니다. ㅎ.ㅎ


2012년 4월 7일 토요일

M File Manager v1.5 for MSX-DOS2

Download: M_v1.5.zip


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

    M v1.5 (MSX-DOS2용 파일 매니져 2012.04.07)

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

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


* 변경 내용


  파일/디렉토리 이동 기능 추가. (디렉토리 recursive 동작가능)

  파일/디렉토리 속성 설정 가능.

  Shift+DEL 사용 시 ReadOnly 파일도 삭제 가능.

  LZH 압축 파일 지원. (Ctrl+A 압축, Ctrl+E 압축해제)

  복사/이동 시 속성 유지함.

  한 디렉토리의 항목 최대 512개까지 표시 가능. (기존 250개)

  드라이브 이동 항목 추가. (볼륨명 표시됨)

  문자열 입력 개선. (커서, BS, DEL 키 사용가능)

  배경 팔레트(0번 색) 설정 추가. (기본값 RGB = 215)

  전체적인 속도 최적화.

  path가 32글자를 넘을 때 표시 개선.

  DOS 커맨드 창 입력 overflow 수정.

  상위 디렉토리 이동 시, 현재 디렉토리 항목에 Focus 되도록 개선.

  #MPXP(내장 MPX Player)에서 MP3/WMA 재생시 정보 표시.

  문사운드 용 IMS Player 내장. (#IMSP)

  도움말 내장. (#HELP)

  Ctrl+I 키로 인터레이스(512x424)/넌인터레이스(512x212) 전환.

  메모리 해제 옵션 추가. (외부 프로그램 실행 시, 등)

  M Lite 버전 추가. (매퍼램 64KB 적게 사용함)