2026년 9월 21일 월요일

21세기 MSX 활용 #4 - turboR 고속모드 디스크 최적화

다들 아시다시피 turboR DOS2는 디스크 액세스 시, CPU 모드를 Z80 노말모드로 잠깐 변경합니다. 

디스크 액세스가 끝나면 원래의 CPU 모드로 돌아오죠.

이 때 본체에 달린 고속모드 LED가 변하지 않기 때문에 사용자를 살짝 속인다고 보셔도 무방합니다ㅋ


만약 Z80 노말모드로 디스크롬이 호출되더라도, MMC/SD 내에서 강제로 고속모드로 바꾸면 어떻게 될까요?

당연히 디스크 속도가 빨라지겠죠?


MMC/SD Drive V2의 경우 디스크 속도는

노말모드 -> 130KB/s

고속모드(내부 노말모드) -> 148KB/s

고속모드(CPU모드 고정) -> 247KB/s

... 이렇게 됩니다.


CPU모드를 고속모드로 고정할 수 있다면, 속도가 기존의 1.67배가 됩니다. 실제 체감될 정도죠.

근데 MMCSD 디스크롬 내에서 CPU 모드를 강제로 바꾸면 문제가 되니까,

2DD 에뮬모드에서 고속모드로 강제하는 경우만 이런 방식을 사용합니다.

MMCSD V2~V4 모두 이 기능이 있어요. 이스1을 고속모드로 구동하는 식으로 활용이 가능합니다.

일반 DOS2 부팅된 환경일 때는 유저가 원하지 않는 고속모드를 강제할 수 없으니, 그냥 썼는데요.


.

.

.


2015년 어느날 우연히 프로그램 하나를 발견합니다 -> R800-DR

BASIC 로더와 바이너리 코드로 된 프로그램인데요.

실제 하는 역할은 DOS2 커널의 하위 디스크롬 호출 루틴(RAM에 있어요)을 패치해서,

Z80 노말모드로 변경되는 걸 막아버립니다.


결국 고속모드 상태에서 디스크 액세스가 발생하더라도, DOS2가 CPU 모드를 유지하게 된다는 얘기죠.

테스트 해보니 실제로 동작이 잘 되더라구요.

ST, GT의 디스크롬 루틴이 조금 다른데, 두 코드에 맞게 각각 패치하도록 되어있습니다.

BASIC에서 실행 후, 다시 DOS2 쉘로 복귀해야하는 약간의 번거로움이 있습니다.


좀 더 정보를 찾아보니, 코드를 도스 상태에서도 패치하도록 만들 수 있더라구요.

자세한 내용은 아래 링크에서 보실 수 있습니다.

https://sharksym.blogspot.com/2015/08/r800-dr-turbor-cpu.html


암튼... 결론은 'MMC/SD Drive V3를 만들자!'


turboR 고속모드의 슬롯 타이밍에 최적화해서 디스크 기기를 만들면 훨씬 빠르겠구나!

고속모드의 LDI 명령 타이밍에 맞춰, SD카드에서 램으로 1바이트 전송이 완료되도록 H/W를 설계했습니다.


결과는? 대박이었죠 ㅎ.ㅎ

전송 속도가 582KB/s가 되었습니다. 기존 V2 보다 2배 이상 빨라지네요.

2DD 한장이 720KB인데, 이걸 1.2초만에 읽어낸다고 생각하심 되겠습니다요~


실제 GT에서 DOS2로 부팅 시, R800-DR 및 FAT16 패치를 설치 후 M 로딩까지 순식간에 끝나네요.

무궁화에서 KTX로 바꿔타는 느낌?ㅋ


참고로, SLT-Turbo의 고속모드에서는 슬롯 타이밍이 약간 달라서, 전송 속도가 615KB/s로 나옵니다.

MV2 동영상 플레이어에서도 이걸 잘 활용하고 있죠.

VRAM 데이터와 MP3 데이터를 마구마구 읽어서 15fps으로 처리 ㅎ.ㅎ


참고로, 현재는 MMC/SD V3,V4를 쓸 때 R800-DR 프로그램이 필요하지 않습니다.

이 기능 자체가 MMCSD BIOS에 포함되어 있어요. 부팅할 때 자동으로 DOS2 커널 패치가 됩니다.


혹시 SD카드의 AUTOEXEC.BAT에 R800-DR 실행부분이 들어 있다면, 지워주세요~

사실 그냥 둬도 문제가 되진 않습니다.

커널 루틴이 달라서 '인스톨 실패'라고 나오면서 그냥 넘어갑니다.


turboR의 고속모드 디스크 속도 최적화는 이렇게 끝났습니다.

해피 엔딩~ ㅎ.ㅎ/