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 이미지를 구동한 모습도 있습니다. 참고하시구요.

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




2015년 10월 3일 토요일

프리뷰가 나오는 멀티롬팩을 만들어보아요~

이제 저희 애들이 많이 커서, 지들끼리 MSX 겜도 잘 합니다. ㅎ.ㅎㅋ

MSX 게임팩은 70개쯤 있지만... 좀 더 편하게 쓸 수 있도록 멀티롬팩을 하나 만들었습니다.

애들 수준에 맞는 겜으로 24개를 모아보았어요.


팩에 사진도 한장 프린트해서 붙이고~ 으흐흐..ㅋ

이런 모습입니다! ㅎ.ㅎ




일반 멀티롬팩(합팩)과 차이라면....

게임 선택 메뉴에서 실제 게임샷을 볼 수 있다는 점인데요.

실제 실행하면, 아래처럼 나옵니다.

화면 2/3는 게임 모습이구요. 아래쪽 1/3 화면에 게임 목록이 표시되겠습니다요.




멀티롬팩이야..뭐, 플래쉬롬만 큰거 달면 쉽게 만들수 있겠죠?

지난번 폰트팩 만들다가 남은 보드 재활용해서 쓰도록합니다. 1MB 플래쉬롬 사용할꺼에요.


음... 그럼, 다음 문제는 각 게임의 화면을 캡쳐하는 일인데... 어떻게 하면 쉽게 가능할까요?

80년대에는 좀 힘들었겠지만, 지금은 21세기가 아닙니까요? 걍 에뮬레이터로 갑니다~ ㅋ


paraMSX를 이용하면 VDP 레지스터와 VRAM 내용을 그대로 덤프할 수 있습니다.

아래 스크린샷 참고하셔요.




VDP 레지스터 설정만 알면, 필요한 데이터들을 추출할 수 있겠지요?

걍 윈도용 프로그램하나 만들어서 돌립니다~




패턴 네임, 패턴 제너레이터, 컬러 테이블의 메모리 영역을 확인해서,

스크린2 화면의 상단 2/3 영역을 파일로 뽑습니다.


아래 스크린 샷 참고하셔요.

VRAM0.BIN -> 패턴 네임 데이터

VRAM1.BIN -> 패턴 제너레이터 데이터

VRAM2.BIN -> 컬러 테이블 데이터




전체 24개의 게임들의 스크린샷을 추출하면, OK!!

이제 남은 건, 실제 MSX에서 구동될 런처 프로그램이네요.


화면 출력용 ASCII 폰트 하나 집어넣고, (왠지 BIOS 내장 폰트 쓰면 좀 누추해 보일까봐서요..ㅎ.ㅎ;;)

키 또는 조이스틱 입력받아서 선택/실행할 수 있도록 간단하게 만들었습니다.


실제 구동한 모습은 동영상으로 보여드립니다.

국딩 때, 학교 PC실에서 친구랑 트윈비 많이 했었는데... 이제 저희 애들이 겜하는 모습을 보니 감회가 새롭네요~




그럼, 즐거운 주말 되셔요~ ㅎ.ㅎ


2015년 9월 21일 월요일

MMC/SD Drive V3 제작 #3 - 최대 전송 속도??

속도 관련, 숫자 계산을 한번 해봤습니다.

LDI 명령 하나만 수행 했을 때의 시간으로 계산했습니다.


참고로 LDI는 Z80 2바이트로 된 명령인데요.

  HL 주소의 1바이트를 읽어서 DE 주소에 저장 및

  HL, DE 주소값은 1씩 증가,

  BC 카운터는 1 감소

하는 명령어입니다.


실제 프로그램에서 디스크 1섹터(512바이트)를 전송하려면, LDI 명령을 512번 실행하면 되겠지요?


표에서 DOSSCAN 결과는 실제 디스크롬으로 사용 시 값입니다.

Z80 모드일때는 3.58MHz, R800 모드일때는 7.16MHz 클럭입니다. 참고하셔요.




괄호 안의 I-E-I 등의 표시는 메모리 위치가 본체 내부(I) DRAM인지 외부(E) 슬롯인지 나타냅니다.

Op code, Source, Destination 순의 메모리위치입니다.

wait clock 값은 아래 링크 참고하시면 되겠습니다.

http://map.grauw.nl/resources/z80instr.php


#1 값은 외부슬롯 접근시 wait 4클럭 일때구요.

#2 값은 wait 5클럭일 때의 결과잆니다.

delay + BUS 클럭 align 으로 인한 wait값이라 실제 동작 시 어떤 클럭이 맞을지는 알수 없어요. ㅎ.ㅎㅋ


모든 메모리가 내부 DRAM인 경우, 계산치로는 998KB/sec인데,

실제 DOS2 램디스크 테스트 시, 520KB/sec 정도밖에 속도가 안나오네요.

메모리 매퍼 설정(IO port)하느라 느려진게 아닐까 의심됩니다.


그럼, 이만~ ㅎ.ㅎ