2015년 11월 2일 월요일

MMC/SD Drive V3 제작 #6 - 2DD DSK 모드

MMC/SD Drive에는 DSK 이미지 파일을 구동하는 기능이 있습니다.


구버전 V2에서는 SD카드를 2000개의 720KB 블럭으로 쪼개서 DSK파일을 저장하고,

게임 구동 시, 필요한 블럭(클러스터)을 리스트로 만들어서 관리하는 방법을 사용했습니다.

DISKMAN 프로그램의 메인 기능이었지요. ㅎ.ㅎㅋ

DISKMAN 사용법이 좀 번거럽긴 하지만... DSK 이미지 한번 세팅하면, 그 후론 쉽게 실행할 수 있는 장점이 있습니다.


하.지.만...

DISKMAN 사용법이 어렵다는 의견이 좀 많았습니다.

디스크 파티션이랑 UI 구상하느라, 거의 한달을 고민해서 만든거였는데... ㅜ.ㅜ


암튼 이번 V3에서는 DSK 관리를 위한 툴을 사용하지 않습니다.

그냥 디렉토리에 존재하는 DSK 파일을 드라이브 A:로 마운트해서 부팅시킵니다.


디스켓 여러장으로 된 게임인 경우는,

COPY /B DISKA.DSK + DISKB.DSK + DISKC.DSK  GAME.DSK

이런식으로 하나의 파일로 붙여서 사용하게 됩니다.


아래는 현재까지 구현된 기능들입니다.

- DSK 파일 클러스터 처리 (FAT12/FAT16 모두 지원)

- 여러장으로 묶은 DSK 처리 (숫자 키 눌러서 디스크 선택/전환)

- OneDrive 모드 (본체 내장 FDD 디스크롬 사용못하도록 설정)

- VDP 커맨드 처리 중 디스크 액세스 시, 자동으로 딜레이 타임 추가


참고로 기존 V2에 있던, 뱅킹 disable 모드가 V3에서는 항상 켜지게되구요.

게임 호환성을 위한 디스크 속도 낮추는 기능은 필요없도록 만들었습니다.

(필요한 경우 자동으로 속도가 낮춰집니다.)


아래는 MMCSD.COM 프로그램으로 Princess maker 를 구동한 모습입니다.

부팅 시 화면 한장 찍었어요.





참고로 OneDrive 모드는 부팅 시 CTRL키를 누르고 있으면, 켜지게 됩니다.

MMCSD.COM으로 DSK 구동하게 되면, 자동으로 리부팅하게 되는데, 이때 눌러주면 되겠습니다.

코에이 삼국지 등등 메모리 문제로 부팅 시 CTRL 키 눌러야하는 게임 생각하시면 되겠네요.


아래는 터보알에서 구동해본 영상입니다.

부팅 후, M에서 DSK 파일 클릭으로 원샷~에 실행되는걸 볼 수 있습니다요~

아마 보시면... 따로 매뉴얼 없어도 쉽게 사용이 가능할거라 생각됩니다. (아닐까요? ㅋ)




마지막으로... 하나 덧붙입니다.


기존 V2 기기를 OCM(또는 OCMC) 에서 사용하면, 디스크 전환이 불가능했었는데요.

이게 OCM VHDL 버그같네요. 8255 PPI쪽 문제인데... 해당 내용은 따로 글 올려보겠습니다.

암튼 OCM에서도 디스크 전환 잘 됩니다. OCM 버그를 회피하도록 코드를 수정했어요. ㅋㅋ

V2쪽 BIOS도 짬날때 업뎃해야겠습니다.


그럼, 이만 줄입니다. 즐거운 하루되셔요~ ㅎ.ㅎ

2015년 10월 22일 목요일

MMC/SD Drive V3 제작 #5 - MegaRAM 모드

MMC/SD Drive V3에는 플래쉬롬 외에 SRAM이 추가됩니다.


원래 SRAM은 MBR, FAT, 파티션 정보, 2DD에뮬 시 정보 저장을 위해 쓰이게 되는데요.

뭐 이정도라면 32KB 정도면 충분합니다만...

걍 512KB짜리 SRAM을 넣기로 결정했습니다.


왜냐구요?

MMC/SD Drive V3에서는 V2에서 쓰이던 멀티롬 기능이 제거되고,

대신 메가램 기능이 들어가게 되거든요..ㅋ


참고로 메가램은 메가롬을 흉내내는 기기입니다.

디럭스 박스, 럭셔리 박스 등의 카트리지 생각하시면 맞습니다!


이번 V3에서는 SCC 칩이 들어가지 않기 때문에, SCC 사운드는 들을 수 없지만,

HW적으로 기존 멀티롬 보다 좀 더 롬구동에 적합하도록 되었습니다.


MMC/SD에서 게임롬 구동을 짧게 비교하자면...

# V2 멀티롬

 1. 롬디스크 영역 일부에 롬 데이터 저장

 2. 롬의 뱅킹 루틴을 패치하여, 메인램으로 뱅킹 코드 이동

 3. 실제 HW에 맞도록 뱅크 변경하여 적용


# V3 메가램

 1. SRAM 영역에 롬 데이터 저장

 2. 롬의 뱅킹 루틴의 주소 변경(패치 )

 3. MMC/SD Drive를 메가램모드로 부팅


V2의 뱅킹 루틴은 메인램 상에 존재해야되서, 수행되는 코드 양이 늘어나게 됩니다.

대부분의 경우는 문제 없지만, 타이밍에 민감한 부분에서는 손해가 될 수 있어요.


V3의 메가램은 IO 주소만 변경되는거라서, 수행되는 코드 양이 동일하거나 약간만 증가합니다.

ASCII 8K, KONAMI 8K, KONAMI SCC 매퍼는 원본과 코드 사이즈 같구요,

ASCII 16K 매퍼는 V2 패치 코드의 절반 사이즈로 구동됩니다.


참고로, V2 멀티롬은 플래쉬롬에 이미 롬데이터가 들어있기 때문에,

DOS 구동이 불가능한 본체(32KB램 달린 MSX1 등)에서도 게임이 실행되는 장점이 있어요. ㅎ.ㅎ

주로 즐기는 게임 한두개 정도라면, 한번 로딩으로 언제든 실행이 가능하니 꽤 편하지요.


글이 자꾸 길어지네요. 별 내용이 아닌데..ㅋ

암튼 실제 구동 화면을 보시겠습니다요~


아래는 악마성 드라큐라 롬을 실행하는 모습입니다.

매퍼가 KONAMI 8K로 인식되구요. 패치되어 로딩됩니다.




아래는 4가지 매퍼타입의 메가롬들을 하나씩 실행해보는 영상입니다.

실제 동작이 어떻게 되는지 참고하시면 되겠습니다.




2015년 10월 12일 월요일

MMC/SD Drive V3 제작 #4 - SDHC 8GB 테스트

이번에는 SDHC 카드 테스트를 해보았습니다.


참고로, SDSC 카드는 32bit byte address로 메모리 액세스를 하기 때문에, 4GB 용량 제한이 있는데요.

SDHC 카드는 32bit block address 방식으로 바뀌면서 더 큰 메모리를 쓸 수 있습니다.

이번 테스트에서는 SanDisk 8GB SDHC 카드를 썼습니다.


구버전 MMC/SD BIOS를 수정해서, SDSC/SDHC 모두 사용할 수 있도록 만들었구요.

MBR/EBR 영역의 파티션 테이블을 이용하여, 여러개의 디스크 영역을 액세스 할 수 있도록 했습니다.


이렇게 SD카드를 HDD처럼 쓰는게 보편적인 방법인데,

기존 MMC/SD BIOS에서는 많은 수의 2DD 디스크를 쓰기위해 자체방식의 파티션을 구현해서 썼었지요.


암튼 8GB 카드를 6개의 파티션으로 나눴습니다. ㅎ.ㅎ

Partition Wizard라는 윈도용 프로그램을 사용했습니다.

MSX용 파티션 툴도 언젠가 만들어야겠지요? ㅋ




Primary 파티션 3개, Logical 파티션 3개 총 6개로 나누었구요.

앞쪽 두개 파티션은 32MB 용량으로 FAT12 디스크가 됩니다. MSX-DOS2 부팅하려면 FAT12가 필수겠죠?

그리고, 나머지 네개 파티션은 FAT16 디스크가 되겠습니다요.


아래는 제 turboR에서 부팅 시 모습입니다.

간략한 카드 정보와 전체 드라이브(파티션) 갯수가 표시됩니다.




MSX DOS1/2에서 최대 8개의 드라이브만 쓸 수 있으니,

이번 테스트 처럼 8GB 카드로 드라이브 6개 붙이고, 나머지 두개는 본체 내장 FDD, 램디스크 이렇게 하면...

아마 왠만한 환경에서는 충분히 활용이 될 것 같습니다.


만약 16GB 카드에서 8개 넘는 파티션을 쓴다면,

런타임으로 파티션 교체하는 기능 등... 뭔가 부가적인 방법이 있어야겠네요.


아래는 M 구동한 모습입니다.

슬롯2-1에 드라이브 6개가 연결된게 보이시죠?




아래는 DOSSCAN을 돌려본 결과입니다.

turboR 고속모드를 활용을 높이기위해, IO 코드 일부를 내부 메모리로 옮겨서 동작하게 됩니다.

스택을 약간 소모하는 정도라, 실사용에서 별 무리가 없을 걸로 생각합니다요~

속도는 544KBytes/sec 가 나오네요.




마지막으로 동영상 하나 붙입니다.

기존 MMC/SD보다 R/W 속도가 조금 빠르다는 것 외엔 특이한건 없어요. ㅎ.ㅎㅋ

영상 끝부분에는 SofaRunit 프로그램으로 DSK 이미지를 구동한 모습도 있습니다. 참고하시구요.

(근데 배경음악 볼륨이 넘 크네요. 소리 좀 줄이고 보셔요~ ㅋ)