2026년 9월 22일 화요일

21세기 MSX 활용 #5 - FAT16

turboR의 빠른 CPU와 MMC/SD 같은 고속 디스크, 이것만으로는 MSX를 갖고 놀기엔 충분할까요?

물론 메가램, 2DD 에뮬 등의 게임 실행의 편의성은 탑이라고 봅니다만, 그 외는 어떤가요?


MSX가 지금도 사용하기 편한 8비트 컴퓨터가 된 가장 큰 이유는 아래 2가지라고 생각합니다.

-> MSX-DOS2, FAT16 지원 패치


만약 MSX가 다른 평범한 Z80 컴퓨터처럼 CP/M만 쓸 수 있었다면, 실기를 켜는 것도 귀찮아했을 듯요ㅋ


CP/M은 레코드 단위의 처리라서, 레코드 크기 128바이트 x 16비트 레코드 번호로 최대 8MB까지 쓸 수 있는데요.

(CP/M 3.0에서는 18비트로 늘어서 32MB까지 되는 걸로 알고 있습니다)

MSX-DOS는 CP/M 2.2의 BDOS API에 추가로 MSX-DOS 전용의 논리섹터 R/W가 들어 있습니다.

처음부터 512바이트 x 16비트 섹터 번호 조합이라, 최대 32MB로 출발합니다. 좋아요~


게다가 MSX가 출시된 시기가 늦은 탓에 표준 FDD도 3.5인치 2DD를 쓰게 되었죠.

MS-DOS의 FAT12 디스크를 MSX에서 그대로 쓸 수 있는 '무적의 카드'를 하나 들고 나온 셈입니다.


이 후 MSX-DOS2에서는 서브디렉토리와 파일 핸들이 추가되었고, 메모리매퍼용 확장 BIOS도 들어갔죠.

1988년에 나온 MSX2+, MSX-DOS2, 메모리매퍼 조합으로, MSX에 필요한 기능은 다 있었다고 보면 됩니다.

당시 국내에서는 교육용 컴퓨터가 16비트 XT로 정해지면서 접하기 힘든 조합이라서...

이건 저도 90년 중반에 에뮬로 겨우 경험을 해봤네요 ㅎ.ㅎ


MSX에서 드라이브 8개를 쓸 수 있으니까, 32MB x 8개 = 총 256MB의 디스크를 쓸 수 있는데요.

드라이브를 이리저리 옮겨다니는 소소한 불편을 제외하면 8비트 컴퓨터로는 충분한 용량을 봐도 됩니다.

물론 크면 더 편하겠죠? ㅎ.ㅎ


2000년 초에 DOS2용 FAT16 패치에 관한 소식이 들렸지만,

당시에는 제게 GT도 없었고 대용량 디스크도 없던 때라서 딱히 관심이 없었는데요.

그냥 메가램(디럭스박스)에 FDD로 롬만 로딩하면 OK였던 시절...ㅋ


2006년에 1chipMSX가 출시 되었을 때,

디스크롬에 FAT16 패치가 적용되어 2GB SD카드를 단일 드라이브로 쓰도록 되어있더라구요.


지난 히스토리를 찾아보니, FAT16 패치 v0.12에서는 버그들이 다 수정되어 안정버전이 된 듯 했습니다.

FAT16 패치는 커널에서 디스크 R/W 호출 시, 논리섹터 번호를 16비트에서 23비트로 확장하는 겁니다.

그러니까 섹터 512바이트 x 23비트 = 4GB, FAT16 최대사이즈를 처리할 수 있도록 된 거죠.

물론 확장된 섹터 번호를 처리할 수 있도록 디스크롬도 개선이 되어야합니다.


paraMSX의 디스크 에뮬에 대충 구현해서 돌려보니, 문제없이 파일을 R/W 할 수 있었습니다.

조금 문제라면 기존 FAT12 디스크에 비해, 동작 속도가 눈에 띄게 느려졌다는 것 정도?

FAT의 클러스터, 섹터 계산량이 늘어나니 Z80 3.58MHz로는 힘겨운 느낌입니다요.


2007년말에 MMC/SD Drive V2.2를 설계하면서,

SD카드 슬롯을 2개를 넣고 두번째 SD카드는 FAT16 단일 파티션으로 쓰도록 했습니다.

SD카드 #1은 FAT12용 32MB 드라이브 3개를 마운트 -> A: B: C: 

SD카드 #2는 FAT16용 2GB 드라이브 D:


turboR에서 테스트해보니, FAT16쪽 드라이브가 조금 느릿한 느낌은 있지만 쓸만한 수준이더라구요.

속도가 필요한 프로그램들은 A: B: C: 드라이브에 몰아넣고,

FAT16 D: 드라이브에는 롬, 디스크 이미지, 각종 음악파일(MID, MP3 등)로 가득 넣으니 좋더라구요.


이제야 MSX를 자주 만질 수 있는 환경이 된 듯 했습니다.

디스크 속도,용량이 turboR의 발목을 잡지 않으니, 제대로 풀 파워~~를 느낄 수 있게 되었습니다요!


2008년에는 MMC/SD V2가 대량으로 제작이 되어서, 많은 분들이 2대 이상을 쓰는 분위기였는데요.

이 때쯤 두번째 MMC/SD의 SD카드 2개를 모두 FAT16으로 쓸 수 있는 기능을 추가하게 됩니다.

MMC/SD #1: SD #1 -> A: B: C:

MMC/SD #1: SD #2 -> D: FAT16

MMC/SD #2: SD #1 -> E: FAT16

MMC/SD #2: SD #2 -> F: FAT16


MMC/SD V2 두대로 32MB x 3 + 2GB x 3 이렇게 쓸 수 있죠.

제가 2015년 중반까지 9년을 이렇게 쓰면서, 딱히 부족함을 못 느낄 정도였느니...

MSX에서 이 정도면 충분한 환경이라고 생각했었습니다.


근데, 아무리 편한 것도 계속 쓰다보면 불편한 게 생기잖아요?

그렇게 격변의 2015년을 맞게 됩니다.


그럼, 다음 편에서...


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의 고속모드 디스크 속도 최적화는 이렇게 끝났습니다.

해피 엔딩~ ㅎ.ㅎ/


2026년 9월 20일 일요일

21세기 MSX 활용 #3 - MMC/SD Drive

2004년, 새로운 고속의 디스크 인터페이스를 만들어보자!


당시 기준으로 MSX 에뮬을 이미 10년간 사용했구요.

paraMSX를 만들면서 디스크롬 구조도 많이 보고, DOS2도 써봤구요.

MSX-DOS가 MS-DOS 기반이라서 대용량(FAT12) 디스크 처리도 가능하다는 걸 이미 알고 있습니다.


그럼 남은 문제는... H/W를 뭘로 만들까? 였는데요.

아무래도 플래쉬롬을 사용하는 방법이 제일 간단하겠죠?


2000년 이전에는 CompactFlash, SmartMedia 같은 것들이 쓰였는데,

이젠 MMC(MultiMediaCard), SD(Secure Digital)가 유행하고 있습니다. (2004년 기준)


I/O는 대충 TTL 칩을 조합해서 설계하고, MMC를 인터페이스하는 걸로 결정합니다.

MMC 256MB 메모리를 하나를 구매하구요. (5만원쯤 했던가요... 기억이 가물가물)

같은 용량에서는 MMC가 SD보다 조금 저렴했는데, 개발하다 망가지면 눈물나는 건 마찬가지겠지만요 ㅎ.ㅎ

카드 슬롯은 부품 납땜이 힘드니까, 메모리카드 USB 어댑터를 하나 뽀개서 보드째 사용합니다.


재료는 준비가 되었구요. 실제 개발은 아래처럼 진행되었어요.


1) 코나미 SCC롬팩을 개조해서 롬디스크 카트리지 제작

2) MMC I/O를 SPI 모드로 구동하는 회로 설계

3) 디스크 마운트는 드라이브 A:MMC, B:롬디스크

4) MMC를 초기화(파티션, 포맷) 프로그램을 구현 후 롬디스크에 포함

5) 드라이브 A:는 여러개의 파티션 중 1개를 마운트 (사용자 선택 저장)

6) 2DD 에뮬을 위한 런타임 파티션 교체 구현


아래는 완성된 모습입니다.



케이스를 씌우면 이런 모습이죠. 고파의 야망을 프랑켄슈타인으로~ㅋ



처음 만들었을 때에는 MMC Disk Drive, MMC Disk Interface 등의 이름으로 쓰였어요.

회로도를 공개해서, 외국에서도 제작한 분들이 있었습니다.


수년 후 다른 회원님이 PCB를 제작해서, 파라동 회원님도 쓰시게 되었는데요.

그 때쯤은 MMC가 단종이 되고 SD가 저렴하게 팔리던 시절이라,

이름을 MMC/SD Drive로 바꿨습니다 ㅎ.ㅎ


MMC 전송 속도는 40KB/s 였으니, FDD 11KB/s의 3배 이상 빠르다고 보면 되겠습니다.

이 속도가 빠르다고 보긴 힘들었지만,

MIDRY로 미디음악을 듣거나 2DD 게임을 실행하는 데엔 GOOD 이었습니다! ㅎ.ㅎ


2007년에 FAT16 등의 고용량 디스크 처리를 추가하면서 H/W도 개선이 되었는데요.

MMC/SD Drive V2에서는 속도가 130KB/s로 빨라져서, MP3 재생 등의 과도한(?) 작업도 OK가 되었습니다.


역시 디스크는 빠른 게 좋네요.

빠른 속도에 익숙해지면 느렸던 시절로는 다시 갈 수가 없죠. 역체감이 엄청납니다요ㅋ

이제서야 GT가 환영도시 게임기가 아닌 그냥 컴퓨터처럼 느껴집니다.

286에 HDD를 달아놓는 거랑 비슷하려나요? ㅎ.ㅎ


MMC/SD V2를 2015년까지 썼으니 꽤 오랫동안 썼었죠.

확장슬롯에 V2 카트리지 2개를 항상 꽂아둔 상태였습니다.

SLOT 2-0 MMCSD -> A: 부팅 및 2DD 에뮬, B: FAT16 2GB

SLOT 2-1 MMCSD -> C: FAT16 2GB, D: FAT16 2GB


.

.

.


하지만 turboR 새내기였던 저는 중요한 사실 한가지를 알지 못했는데...

이건 다음 편에서 이어집니다.


그럼, 이만...


PS. 확장슬롯 + MMCSD + 메모리매퍼 + Covox를 CPLD로 묶어서 아이큐2000 테스트용으로 썼던 물건