구상한 것들을 대강(?) 테스트 할 수 있도록, 보드를 하나 준비했습니다.
아래처럼 생겼습니다요.
어라... 어디서 본 것 같다구요? 에이... 설마요 ㅎ.ㅎㅋ
SD 카드 소켓 근처의 넙쩍한 부품은 OSC(오실레이터)입니다.
책상에 굴러다니는 48MHz 짜리 하나 붙였어요. FULL size type이라 꽤 큽니다. ㄷㄷ
최종 보드에는 작은 걸(SMD type)로 달아줄 생각입니다.
기존 v2 기기에서는 OSC가 따로 없고, MSX 슬롯의 CPU CLOCK을 사용하였지요.
일반 MSX2 및 터보알에서는 3.58MHz 고정이구요.
OCM 고속모드 또는 WSX의 5.37MHz 터보 모드에서는 좀 더 빠르게 동작했습니다.
이번 v3에서는 그냥 외부 OSC 48MHz 고정된 동작 클럭을 사용하게 됩니다.
SD 카드 인터페이스는 SPI를 사용합니다. 기존 v2랑 동일합니다.
4BIT SD 모드를 쓸까 잠시 고민했었는데요.
CRC 로직도 넣어야하고, CMD용 1BIT, DATA용 4BIT 모두 만들려면 귀찮겠더라구요. 깨끗하게 포기 ㅋ
대신 SPI SCLK 클럭을 올리면, 쉽게 고속 전송을 구현할 수 있습니다.
SD카드 스펙 상으로는 25MHz 까지는 기본 지원이라 MSX에서는 충분하다고 생각되네요.
48MHz OSC를 2분주한 24MHz가 실제 v3 SPI SCLK 속도가 되겠습니다.
제대로 만드는 것 보다, 일단 동작 테스트부터 해보는게 재밌겠죠? ㅎ.ㅎㅋ
이번에는 MBR 파티션 테이블을 지원합니다.
간단하게 2GB SD카드에 32MB 파티션 하나 넣고 돌려보았습니다.
아래는 DOSSCAN 프로그램으로 전송속도 측정한 모습입니다.
Z80 모드에서 151KB/sec가 나오네요.
기존 v2가 132KB/sec 정도니까 약 15% 정도는 빠른 셈이군요.
아래는 R800 DRAM 터보모드에서 테스트한 것입니다.
참고로 디스크 액세스 시, Z80 모드로 전환되지 않도록 미리 패치한 상태입니다. (R800-DR 툴 사용)
307KB/sec 나오네요. 기존 v2는 238KB/sec 였습니다.
디스크 루틴이 외부 슬롯에서 구동되는 상황인데도, 의외로 꽤 빨라지네요.
사실 이건 예상 못했습니다.
아래 사진이 중요합니다. ㅎ.ㅎ
v3에서 빨라진 SPI 인터페이스를 제대로 활용하기 위해서는, 디스크 액세스 루틴을 더 빠르게 돌릴 방법이 필요한데요.
터보알에서는 이게 가능합니다.
외부 슬롯은 3.58MHz로 느리게 동작하지만(호환성 목적), 내장 메모리에서는 7.16MHz로 두배 빠르게 동작합니다.
R800의 빠른 머신 싸이클을 그대로 쓸 수 있습니다.
(외부 슬롯에서는 3.58MHz에 동기하느라 불필요한 wait가 들어가게됩니다.)
무려 518KB/sec가 나오네요. 기존 v2의 238KB/sec 비하면 두배 이상 빠른 속도네요.
op code fetch만 내부램으로 바뀐 것 뿐인데... 흐..ㅋ
참고로, 실제 코드 상으로는 디스크 루틴 LDIR 명령 하나만 램으로 옮겨져있습니다.
나중에 전체적인 최적화를 하게되면 얼마나 빨라질지 상당히 기대됩니다요~
오늘은 여기까지입니다.
다음편을 기대해주셔요~ ㅎ.ㅎ