레이블이 -GRUN인 게시물을 표시합니다. 모든 게시물 표시
레이블이 -GRUN인 게시물을 표시합니다. 모든 게시물 표시

2022년 7월 5일 화요일

GRUN v1.74 release

Download: GRUN v1.74


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

    Game Runner v1.74 (2022-07-05)

        By Yeongman Seo <sharksym@hitel.net>

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


* 업데이트


  DOS2에서 Mirrored ROM(8KB/16KB) 오류가 수정되었습니다.



* Game Runner (GRUN)


  GRUN은 16KB 또는 32KB의 MSX1 게임롬 로더입니다.

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

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



* 요구 사항


  MSX2 64KB (VRAM 128KB) 이상의 기종

  MSX-DOS1 또는 MSX-DOS2



* 사용법


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

  GRUN GAMENAME.ROM

  예) GRUN ZANAC.ROM


  상태저장 파일을 사용하려면, 아래처럼 입력합니다.

  GRUN GAMENAME.ROM GAMENAME.SAV

  예) GRUN ZANAC.ROM ZANAC.SAV


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

  상태저장 파일을 지정한 경우, GAMENAME.SAV 파일이 생성됩니다.



* 특수키 입력

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


  1   : 일시 정지

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

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

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

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

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

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

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


  F4  : 게임 상태를 저장

  F5  : 게임 상태를 복구



* 마지막으로


  메인 BIOS 롬을 램에 로딩하므로,

  정상적으로 실행안되는 게임도 있습니다.

  그리고, turboR에서는 Z80 모드로 전환 후 실행됩니다.

  

2022년 4월 24일 일요일

Flash Drive 제작 #4 - DOS1 파일 저장 (feat. GRUN)

[서론]


지난 글(제작 #3)에서 "3. 롬디스크 일부를 R/W 가능한 영역으로 사용" 부분은,

원래 DOS2에서만 사용하도록 계획했었는데요.


조금 생각을 해보니...ㅋ

넌매퍼램 64KB뿐인 싸구려 MSX2(FS-A1 등)에서 활용하는 것도 괜찮을 듯 싶더라구요.


아마 지난 글들을 읽으면서, '난 개발자가 아닌데, 이걸 어따 쓰라는거유?'

...등의 생각을 하신 분들 꽤 있을 듯 합니다 ㅎ.ㅎ



그.래.서.

DOS1 용 디스크롬에도 파일 저장 기능을 추가했구요.

기존 프로그램들 중에서 간단하게 보여드릴만한 데모가 있을까 좀 찾아봤는데...

제가 십년전에 만들었던 GRUN이 떠오르네요 ㅎ.ㅎ

안쓴지 한참 된 프로그램인데, GRUN resurrection(!)을 해보았습니다요.


일단 기존 DOS2 모드에서 돌아가던 걸, DOS1에서도 쓸 수 있도록 수정했습니다.

GRUN v1.71을 쓰시면 되겠네요.


GRUN은 16KB/32KB의 ROM을 메인램에 로딩해서 구동하는 프로그램입니다.

MSX1 BIOS를 램으로 에뮬하는 방식이라,

MSX2+ 또는 turboR에서 구동안되는 프로그램을 돌리는 데 유용하게 쓸 수 있죠.

(물론 지금은 MMC/SD V4의 GameRunner II에 밀려...ㅋ)


근데, GRUN에는 상태저장(State save)을 해주는 기능이 있습니다

세이브를 하면, Page3의 메인램(16KB)와 VRAM 16KB을 저장하구요.

로딩하면 상태를 복구해주는 것이죠.


세이브(*.SAV) 파일은 32KB입니다.

지난 글에서 롬 하나당 쓰기가능 섹터를 8KB + 8KB + 16KB으로 지원한다고 적었는데...

혹시 기억하시나요? ㅎ.ㅎ


요기 섹터 3개를 파일 하나로 묶으면 32KB가 되니까 GRUN SAV파일로 안성맞춤이네욤~!




[본론]


그럼, GRUN SAV를 할 수 있는 Flash Drive 작업을 해봅시다요~



1) DOS1 호환 용 2DD 이미지(720KB)


DOS2는 커널에서 디스크볼륨 처리를 하기 때문에, FAT12 구조라면 모두 사용가능합니다만,

DOS1은 슬레이브 디스크롬의 DPB(디스크 정보 테이블)을 가져와서(GET) 커널로 동작하는 방식입니다.

따라서 공용으로 쓸 수 있는 포맷(미디어 디스크립터 F8h, F9h)이 아니면 쓰기가 애매하죠.

길게 적었는데요ㅋ

간단히 말하면 DOS1 모드로 쓸 때는 Flash Drive 용량 1.5MB에 2DD(720KB)만 지원하겠음.

입니다.


물론, 예전 MMC/SD V2처럼 1.44MB, 2.88MB... 이런식으로,

DPB를 모두 구현하는 방식도 있는데요.

멀쩡한 DOS2를 놔두고 DOS1 때문에 또 이런 짓(?)을 하려니 귀찮아서요...ㅋㅋ


암튼 흔히 쓰이는 포맷된 2DD 이미지에 DOS1 용 부트파일(MSXDOS.SYS, COMMAND.COM)을 준비합니다.



2) 쓰기가능 영역을 확보


Flash Drive의 롬 드라이브는 DOS 커널 영역 이후에 배치됩니다.

지난 글에도 언급이 되어있지만, 48KB 이후 부터 롬디스크 이미지가 시작됩니다요.


2DD 720KB 이미지는 플래쉬롬 첫 3개에 연속으로 저장이 되니,

결국 쓰기가능 섹터(영역)은 9섹터가 되겠습니다.

롬#0 = 8KB + 8KB + 16KB

롬#1 = 8KB + 8KB + 16KB

롬#2 = 8KB + 8KB + 16KB


이걸 DSK 이미지에 파일을 생성해주면 이렇게 되겠네요.




템플릿으로 쓰시려면 아래 파일을 다운받으세요~

Download: Flash_Drive_DOS1_720KB_1.zip


GRUN에서는 32KB 파일로 저장하니까, 8KB + 8KB + 16KB 파일 3개를 묶어 하나로 만들어줍시다.

그럼 이렇게 되겠죠?




템플릿으로 쓰시려면 아래 파일을 다운받으세요~

Download: Flash_Drive_DOS1_720KB_2.zip


'지난번 글에는 SAVE 폴더에 파일을 만들더니 이번엔 왜 루트에 만드나요?'

라고 생각하실 분이 계실까봐 미리 적어드리면...

"DOS1에서는 서브디렉토리를 지원하지 않습니다" ㅎ.ㅎ



3) GRUN과 롬을 넣어보자


롬 후보는 구니스, 덱스더, 자낙 3개입니다.

일단 GRUN.COM 프로그램과 롬 3개를 DSK 이미지에 넣습니다.

SAVEn_32 파일은 그대로 두면 이름이 헷갈리니까, 롬파일과 같도록 변경해줍니다.

예) 구니스 롬파일 -> GOONIES.ROM, 세이브파일 -> GOONIES.SAV


DOS 프롬프트에서 타이핑하려면 귀찮으니까, 배치파일을 넣어서 간단하게 해줍니다요.


아래처럼 DSK 이미지가 완성되었네요! ㅎ.ㅎ


Download: Flash_Drive_DOS1_GRUN.zip



4) 실기 동작 테스트


일단 GT에서 DSK 이미지를 다운로드 후 FS-A1에서 구동해봅니다.

참고로, 제 A1은 개조안된 순정 64KB 멍텅구리 MSX2 그대로 입니다ㅋ


그럼, 상태 저장/복구가 잘 되는지는 아래 영상으로 확인하시죠~ ㅎ.ㅎ/~



2015년 11월 14일 토요일

GRUN v1.6 release

Download: GRUN_v1.6_20151113.zip


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

    Game Runner v1.6 (MSX-DOS2용 게임 로더 2015.11.13)

        By 서영만 <E-mail:sharksym@hitel.net>

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


* Game Runner (GRUN)


  GRUN은 16KB 또는 32KB의 MSX1 게임롬 로더입니다.

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

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



* 요구 사항


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

  메모리 매퍼 추가사용 없음.



* 사용법


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

  GRUN gamename.rom


  디스크 세이브를 하려면, 아래처럼 입력하면 됩니다.

  GRUN gamename.rom gamename.sav


  특수키 입력

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

  1   : 일시 정지

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

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

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

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

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

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

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

  F4  : 게임 상태를 저장

  F5  : 게임 상태를 복구



* 마지막으로


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

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

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

 

  turboR에서 실행하는 경우, Z80 모드로 전환됩니다.


  

2012년 4월 23일 월요일

GRUN으로 메가롬 게임도 세이브/로드가 가능할까요?

어제 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용 메가롬 게임이 꽤되나요? 그라디우스 시리즈 정도밖에 생각나는게 없네요. 으흠... 몽대륙이랑~


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


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