sharksym's MSX World

sharksym.egloos.com

포토로그 마이가든



메가롬 게임도 세이브/로드가 가능할까요? ㅎ.ㅎ by sharksym

어제 GRUN v1.1 동작영상 찍으면서 생각해본 것인데요.
메가롬팩 게임도 잘 굴려보면, 상태저장/복구가 가능할 것 같다는 생각이 들었습니다.ㅋ

몇가지 추가로 구현이 필요하지만 MSX1 용 메가롬팩은 가능할 것 같네요.

참고로 MSX2 용 게임은 VRAM 128KB 전체 백업해야되는 문제랑,
VDP 레지스터 몽땅 백업해야 되는 문제가 있어서 불가능 확률 99%입니다.ㅋ

VDP 레지스터의 경우 분명히 게임 내에서는 shadow 레지스터 처럼 램에 백업을 해놓겠지만,
해당 위치를 알수가 없으니 다시 복구가 불가능합니다.
그리고 팔레트 레지스터는 램에 저장안할 확률이 높고요. 

암튼, MSX1용 메가롬팩으로 제한을 합니다.
메가롬은 메모리에서 실행하는게 불가능하니, MMC/SD의 멀티롬 또는 SCC메가플래쉬롬 등이 있어야겠군요.

문제는 메가롬 매퍼 레지스터를 백업하는 방법인데,
이것도 게임롬의 매퍼 처리하는 루틴을 패치하면 가능합니다.
FLASHMAN의 경우 매퍼 패치를 필수로 해야되기 때문에 별로 어려운건 아닙니다.
그러니까 멀티롬으로 실행되는 게임은 일단 다 된다고 보시면 되겠네요.
매퍼 레지스터는 GRUN 처럼 BIOS를 램에 올린후 후반 영역(3F00H ~ 3FFFH 등)을 활용합니다.

이렇게 되면 GRUN같은 DOS용 프로그램으로 겜이 시작되는게 아닌...
MMC/SD의 멀티롬에서 게임 시작하는 방식으로 밖에 구현이 안되겠지요.

결국 MMC/SD BIOS내에 GRUN 의 기능이 기본으로 포함되어야겠구요.
FLASHMAN에서 롬 다운로드할때는,
 GRUN 루틴으로 실행할지, 기존의 롬 BIOS 에서 실행할지 선택해서,
 각각 패치를 적용하면 되겠습니다.

쓰고보니 SCC 메가플래쉬 용으로는 안되겠군요. 흐...
불가능한건 아니지만, 다운로더를 따로 만들어야되겠지요.

근데 MSX1용 메가롬 게임이 꽤되나요? 그라디우스 시리즈 정도밖에 생각나는게 없네요. 으흠... 몽대륙이랑~

Game Runner v1.1 release by sharksym


아래 파일 다운로드 하시면 됩니다.


설명서 꼭 확인하세요~ㅋ


----------------------------------------------------------------
    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으로 변경하세요.

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

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





PAGE0 램에 메인 BIOS를 복사해놓고 겜을 돌려보면...? by sharksym

메인 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 레지스터가 제대로 복구안될테니, 실제 가능한 게임은 몇개 안될지도요...ㅋ)

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

유툽에서 발견한 니앙클 소개영상입니다. (한글 자막 GOOD이네요. ㅎㅎ) by sharksym

심심해서 동영상 검색하다가 잼난걸 하나 찾았습니다.

니앙클! 

그래픽이 아름다운 게임이었지요.
아이템 활용법을 잘 몰라서, 맨날 구름 스테이지만 하다가 포기했던 기억이 납니다. ㅎ.ㅎ

심심할때 구경하세요



File Manager M v1.5 release by sharksym


아래 파일 받으세요.



----------------------------------------------------------------
    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 적게 사용함) 


* M

  M은 MS-DOS에서 널리 쓰이던 Mdir과 비슷한 프로그램입니다.
  파일 관리 및 실행을 도와줍니다.
  인터레이스 고해상도 모드를 사용하며 완성형 한글도 지원합니다.
  넌인터레이스 모드 사용 시에는 8x8 폰트로 표시됩니다.
  (내장 폰트 대신, 외부 파일 로딩 가능. 2048바이트 폰트)


* 요구 사항

  MSX-DOS2가 구동되는 MSX2(VRAM 128KB) 이상의 기종.
  메모리 매퍼 192KB 사용.
  M Lite 버전은 매퍼 128KB만 사용하지만,
    #MPXP, #IMSP 및 인터레이스 모드 출력이 불가능함.


* 설치
  PATH가 걸린 디렉토리에 압축파일을 모두 풀어넣습니다.
  만약 M Lite 버전을 쓰려면 M_Lite.zip 파일내의
   M.COM, M.OVL을 풀어서 쓰면 됩니다.


* 사용법

  PATH 걸린 디렉토리에 설치가 되었으므로,
  DOS2 프롬프트에서 M [리턴] 하면 실행됩니다.

  파일 뷰어 상에서의 동작키에 대한 설명은,
   M 실행 후 F1을 눌러 #HELP를 실행하면 볼 수 있습니다.


* 환경 설정

  사용자 환경 설정은 M.INI 파일로 저장됩니다.
  펑션키 또는 파일 확장자별 실행 프로그램을 선택할 수 있습니다.
  사용법은 M.INI 파일을 참고하세요.

  확장자에 따른 글자색(16진수 사용)을 지정할 수 있으며,
   배경색도 바꿀 수 있습니다.
  파일의 기본색은 회색(E)이며, 배경색은 파란색(BG:4)입니다.

  실행 프로그램 설정시 %s 부분은 현재 선택된 파일/디렉토리로
  바뀐 후 실행됩니다.

  확장자별 실행 프로그램은 세미콜론을 사용하여,
    여러개(최대 8개)의 프로그램을 등록할 수 있습니다.
  예) TXT:5:HV %s;APED %s
      MP3:9:#MPXP %s;MPXP %s

  기본적으로 TSR(램상주) 옵션이 켜져 있습니다.
  TSR 옵션을 해제하려면, <OPT> 그룹에서 TSR:0으로 설정하세요.
  이미 램상주 후에는, DOS상에서 M /r 를 입력하면 해제됩니다.

  M에서 외부 프로그램을 실행 할때는
  _M_.BAT 파일을 이용하도록 되어있습니다.
  프로그램 실행 후의 PAUSE를 원치 않는 경우는,
  _M_.BAT 파일의 PAUSE 명령을 삭제하세요.

  _M_.BAT를 통한 외부 프로그램 실행 후 M으로 복귀 시,
  이전 파일뷰어의 디렉토리가 다시 표시됩니다. (TSR 옵션 필수)
  만약 M 실행 시, 파일뷰어를 항상 현재 디렉토리로 초기화하려면,
  _M_.BAT의 마지막 "M last"를 "M" 으로 수정하면 됩니다.

  LZH 압축 파일 처리시 _M$.BAT 파일이 임시로 생성됩니다.
  정상적인 동작 후 삭제되니 참고하세요.

  외부 프로그램 실행시 파일명 앞에 *를 붙이면,
   M이 점유중인 메모리가 해제된 후 프로그램 실행됩니다.
  (메모리 부족한 환경 시 유용함.)
  

* 내장 프로그램

  #MPXP: 김준성님의 MPX를 직접 구동하는 플레이어입니다.
         CPU 모드는 Z80 3.58MHz 및 R800 터보 지원합니다.
         프로그램 설정시 #MPXP를 쓰면 실행가능합니다.
         화면 하단에 MP3/WMA 진행바가 표시되며,
         MP3 ID3 태그 및 WMA info 태그를 지원합니다.
         ESC 또는 / 키를 눌러 MP3 중지를 할수 있습니다.

  #IMSP: MoonSound 를 이용한 IMS 음악 플레이어입니다.
         Z80 3.58MHz 모드에서는 느려질수 있습니다.


* 마지막으로

  이 프로그램 사용시 발생하는 문제점에 대해,
   제작자는 책임지지 않습니다만...
  해당 문제점을 리포팅해주시면, 개선하도록 노력하겠습니다.
  
  

File Manager M v1.5 test by sharksym

현재까지 작업된 M v1.5 가 곧 릴리즈 될 예정입니다.

좀더 내부 테스트 후 릴리즈됩니다. ㅎ.ㅎㅋ

아래 스크린 샷 및 동작 영상 참고하셔요~



아래는 YouTube에 올린 영상입니다~
찍을땐 몰랐는데, 화질이 엉망이군요. ㅋ







1 2 3 4 5 6 7 8 9 10 다음