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 그대로 입니다ㅋ


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



2022년 4월 18일 월요일

Flash Drive 제작 #3 - 동작 모드 정리

Flash Drive는 디스크 커널과 디스크이미지가 롬 하나로 묶인 카트리지입니다.

이런걸 보통 롬디스크 드라이브라고 얘기합니다요.


일반적인 롬디스크와의 차이라면 요렇게 정리할 수 있겠네요.


1. DOS1과 DOS2 커널 모두 사용가능

2. 16K 매퍼 사용으로 PAC 류의 주변기기 디텍션과 충돌하지 않음

3. 롬디스크 일부를 R/W 가능한 영역으로 사용

4. DSK 이미지파일은 1488KB까지 사용가능



그럼 자세한 설명이 나갑니다요~


1. DOS1과 DOS2 커널 모두 사용가능


DOS1 커널 사용 시,

기본으로 ONE-Drive ON 상태가 됩니다.

DSK 파일을 다운로드 할 때 /DO 옵션으로 OFF 가능하구요.


DOS2 커널 사용 시,

항상 ONE-Drive OFF 됩니다.

DSK 파일을 다운로드 할 때 /D2 옵션을 넣으면 DOS2 커널이 적용됩니다.

더미 DSK 파일(FFH로 채운 파일)을 다운로드 해두면,

DOS2 커널만 구동하고 부팅은 다른 드라이브로 할 수 있습니다.

(예: WSX, X-II 등에서 슬롯1에 Flash Drive를 꽂고 본체의 FDD로 DOS2 디스크 부팅)


부팅 중 INS 키를 누르고 있으면, 디스크롬 인스톨을 건너뜁니다. (DOS1, DOS2 공통)

이 기능은, 다른 DSK 이미지를 다운로드 할 때 필요합니다.



2. 16K 매퍼 사용으로 PAC 류의 주변기기 디텍션과 충돌하지 않음


범용의 플래쉬롬팩(SCC 8K 등)으로 롬디스크를 만들면,

PAC 류의 SRAM 디텍션(주소 5xxxH) 중 매퍼 뱅킹이 되기 때문에 오동작 하는 경우가 생깁니다.

Flash Drive는 16K 매퍼라서 안전(?)하게 사용가능합니다.

(참고로 FDD의 디스크롬은 뱅킹없는 16KB롬이라서, 이런 문제가 생길 여지가 없어요.)



3. 롬디스크 일부를 R/W 가능한 영역으로 사용


보통의 롬디스크는 읽기전용(readonly) 디스크로 동작이 됩니다.

Flash Drive는 플래쉬롬의 작은 섹터(8KB, 16KB)를 R/W 파일로 활용할 수 있습니다.

작은 용량의 플래쉬롬이 여러개(6개)가 들어있는 이유가...

이 섹터를 많이 얻기 위함이죠. 롬 하나에 3개밖에 없어요 ㅎ.ㅎ


이 영역은 DOS2 모드일 때만 쓰기(write)가 가능합니다.

DOS1 모드일 때는 모두 readonly이니, 다운로드할 때 DOS2 모드로 해주세요.


그리고, 플래쉬롬의 앞부분은 DOS2 커널 48KB가 점유하고 있으니,

실제 디스크 섹터와 플래시롬의 섹터 위치를 잘 계산해서 사용해야합니다.

예를 들어 첫번째 플래시롬의 8KB 섹터의 주소는 아래처럼 주소를 계산할 수 있습니다.

38000H - 0C000H(DOS2 롬옵셋) = 2C000H


물론 이부분은 BDOS의 논리섹터 R/W 대신 파일 R/W을 하려면,

미리 파일을 생성하고 FAT의 체인을 설정하는 작업이 필요합니다.


무슨 얘기인지 이해가 어려우면, 그냥 제가 만든 템플릿 DSK를 사용하시면 되겠습니다.

R/W 가능한 섹터에 미리 세이브 용 파일을 만들어두었습니다.

Download: Flash_Drive_DOS2_1488KB.zip


아래처럼 SAVE 디렉토리의 SAVEx_xx 파일에 저장을 하면 됩니다.

파일 이름을 바꾸는 것은 괜찮지만 다른 디렉토리에 복사하면 안됩니다.

디스크 섹터위치가 바뀌면 플래시 섹터 위치도 바뀌니까요~




18개 파일이 192KB 용량 차지하고 있으니,

사용하지 않는 파일은 삭제하고 일반 readonly 용도로 바꿔쓰셔도 됩니다.

용량부족에 허덕이지 않는다면, 그냥 놔두시는 걸 추천합니다 ㅎ.ㅎ



4. DSK 이미지파일은 1488KB까지 사용가능


지난 글(#2)에서 Standard 버전은,

A: 드라이브 2HD 1440KB + B: 드라이브 48KB

으로 구성된다고 했었는데요.


사용의 복잡성을 줄이기 위해ㅋ

그냥 두 영역을 모두 합쳐서 A: 드라이브를 1488KB으로 쓰는 것으로 바꿨습니다.

B: 드라이브는 따로 활용하지 않습니다.

사실 초기 셋업 용 48KB 이미지를 따로 관리하는게 좀 불편한 것 같아서요...흐흠


그리고, Flash Drive의 플래시롬 용량은 1536KB으로 통일하기로 했습니다.

2DD 용량의 Lite 버전은 출시(?) 안하는 방향으로 갑니다요.

(보드 두 종류 관리도 귀찮...ㅋ)



마지막으로 Flash Drive 툴의 옵션들을 정리해보았습니다.


- FLASHDRV.COM의 옵션 설정입니다.


/DO -> ONE-Drive를 OFF합니다. (DOS1 모드에서만 사용가능)

/D2 -> 디스크 커널을 DOS2 모드로 설정합니다.

/T  -> 파나소닉 WX/WSX의 반터모 및 turboR의 고속모드를 강제로 ON합니다.



- 디스크롬 부팅 시 사용되는 키입니다.


CTRL -> B: 드라이브를 제거하고 A: 드라이브 한개만 등록합니다.

INS  -> 디스크롬 인스톨을 하지않습니다. (Flash Drive 부팅을 건너뜁니다)

T    -> WX/WSX/turboR의 고속모드를 강제로 ON합니다.



생각나는 것들은 대충 정리가 된 것 같으네요 ㅎ.ㅎ


그럼, 궁금한 점 있으시면 댓글로 ㄱㄱㄱ


2022년 4월 17일 일요일

Flash Drive 제작 #2 - 2HD 디스크 활용 (feat. Ys II)

Flash Drive는 플래시롬 용량이 다른 두가지 버전이 있습니다.

1536KB의 Standard 버전과 768KB의 Lite 버전이욤~


Lite 버전은 1DD 또는 2DD 한장을 담는 정도로 활용이 가능합니다.

지난 영상에서 보여드렸던 동작 모습을 참고하시면 되겠습니다요.

보드에는 256KB 플래쉬롬 3개가 들어있습니다.


Standard 버전은,

1440KB 용량의 2HD Main Disk 및 48KB의 Sub Disk로 구성됩니다.

보드에는 256KB 플래쉬롬 6개가 들어있습니다.



지금부터는 Standard 버전에 대한 얘기입니다~ ㅎ.ㅎ


- Main Disk (1440KB)


부트 드라이브 A:로 동작합니다.

2DD 두장 분량이니 왠만한 자작프로그램으로 충분하다고 생각이 드네요.

아마 더 큰 프로그램을 만든다면, 대용량 디스크에 인스톨하는 방식이 더 편하겠구요 ㅎ.ㅎ


플래시롬 한개에는 작은 플래시 섹터가 3개 (8KB x 2개, 16KB x 1개) 들어있습니다.

총 6개의 롬 중에서 5개의 롬의 작은 섹터를 데이터 저장용으로 활용가능합니다.


각 섹터 주소가 고정되어 있으니, 저장된 파일 위치를 잘 고려해서 만들어야겠지요~

29F002-T 계열의 플래시롬이니, 각 롬의 작은 섹터는 아래 영역이 됩니다.


4번 섹터 38000h - 39FFFh ( 8KB)

5번 섹터 3A000h - 3BFFFh ( 8KB)

6번 섹터 3C000h - 3FFFFh (16KB)


물론 64KB의 일반 섹터(64KB)를 저장 용으로 쓸 수 있겠습니다.

큰 파일의 저장이 필요하다면요~ ㅎ.ㅎ



- Sub Disk (48KB)


드라이브 B:로 동작하게 됩니다.

데이터 저장 용으로 큰 파일이 필요하지 않다면,

Main Disk는 그냥 readonly로 구성하고, Sub Disk를 데이터 저장 전용으로 활용하면 편리합니다.


6개의 플래시롬에서 마지막 롬의 플래시 섹터 3개를 활용합니다.

8KB 파일 두개 + 16KB 파일 한개로 구성됩니다.

제 경우는 저장용으로 Sub Disk를 주로 쓸 듯 하네요.

(사실 이렇게 쓰려고 만든거니까, 당연한 소리같네요ㅋ)



빠른 이해를 위해 영상을 하나 찍었습니다.


Main Disk를 파일 세이브가 되도록 활용하면, 요렇게 동작이 가능합니다.

테스트에는 이스2 HDD 버전이 사용되었습니다.

언어파일은 키티야님의 한글파일을 사용했습니다. (한글 짱! ㅎ.ㅎb)


세이브 파일 8개를 8KB/16KB 플래시 섹터에 분산해서 저장합니다.

그러면 일반 파일은 Readonly로 동작하고, 세이브 파일만 R/W로 쓸 수 있어요.

그럼, 동작 모습을 보시죠~




그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ


2022년 4월 16일 토요일

Flash Drive 제작 #1 - 구상 및 테스트

예전에 유령군님께서 요청하셨던 것(!)이 있는데욤.

DOS2 용 프로그램이 들어있는 DSK 이미지를 넣어서 카트리지를 만드는 것이었지요.

폰트팩 보드로 하나 만들어드렸던 기억이 납니다. (스윗~ 펀치~)


결론부터 얘기하면,

DOS2 용 자작 게임을 카트리지로 릴리스할 때 필요한 '간단한 보드'를 만들어보자.

...입니다.



대충 필요한 것들을 나열하면...

- DOS1 및 DOS2 커널 내장

- 2HD 1.44MB 정도의 메인 디스크

- 데이터 세이브 용도의 유저 디스크

이렇습니다.


DOS1 용 디스크를 구동하려면 MMC/SD의 ONE-Drive 기능도 있어야겠네요.

부팅할 때 특정 키를 눌러서 고속모드로 전환하거나 그런 것도 있으면 좋겠구요.



그럼, 보드를 하나 만들어서 돌려봅니다.

요즘은 저용량 CPLD를 구하는데 무리가 있어서, 그냥 TTL 조합으로 해봅니다.

(이게 얼마만인지ㅋ)






구동하려면, DOS1/2 커널과 전용의 디스크루틴이 필요합니다.

DSK 이미지도 함께 다운로드 할 수 있도록 간단한 프로그램도 필요하겠네요.


다운로드 시, FLASHDRV.COM 프로그램을 사용합니다.

선택한 옵션은 플래쉬롬에 설정이 저장되니,

실제 사용할 때는 그냥 카트리지를 꽂으면 그대로 실행됩니다.





뭐, 백문이불여일견...이겠죠? ㅎ.ㅎ

테스트 영상으로 보시죠~

아래의 3가지 테스트가 나옵니다.

- DOS2 + 2DD 이미지

- DOS2 + 1DD 이미지

- DOS1 + 2DD 이미지




그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ


2022년 4월 10일 일요일

PAC-V FIVE!

오랜만에 가족 사진을 찍어보았어요. PAC-V 가족이요~ㅋ




1. 빨간색 기본 버전


2. GT의 SLOT 0-1 출력 개조에 맞춘 버전


3. 빨간색 버전에서 LED만 파란색으로 넣은 버전


4. 파란색 SRAM + 충전지 버전


5. 파란색 FRAM 버전


모두 다섯 가족이네요.

제가 만든 것 중에서는 MMC/SD 다음으로 아끼는 애들입니다요~

2016년에 처음 나왔으니 벌써 6년이 흘렀네요. 우후후...


이제 4시간 남은 일요일~ 즐겁게 보내세요~ ㅎ.ㅎ