2026년 11월 15일 일요일

SLT-Turbo 제작 #22 - 고속 I/O 지원

[서론]


Z80 매뉴얼을 한번이라도 보셨다면 아마 기억하실텐데요.

Z80은 메모리 액세스는 3클럭, I/O 액세스는 4클럭을 사용합니다.


그래서, 빠른 데이터 처리가 필요한 기기들은 Memory Mapped I/O로 제작됩니다.

가장 흔한 예가 되겠지만, 디스크 기기들이 여기에 해당됩니다.


SLT-Turbo V1을 만들 때에도 turboR 같은 3.58MHz I/O 호환성만 유지한다면?

기존 ST/GT 사용자에게는 옆그레이드일 뿐이니, 무쓸모 기기가 될 운명이었지요.

결국 V1은 제작안하기로 결정~ 땅!땅!땅!


2021년에 V2로 설계 변경!

당시에는 내장 슬롯 일부라도 WAIT 없이 동작하면 좋겠다는 생각뿐이었습니다.

고속 슬롯에는 Video, Audio, SD drive 모두 내장하는 식으로요.

문제는 이렇게 정해놓고 기능을 어느선까지 그어야 할까? 고민에서 진전이 안되더라는 거였어요.

시간이 지나면 또 아이디어가 바뀌는 경우도 많고, 내장된 기능은 추후 업뎃도 힘들 수 있고...

.

.

.

2022년 어느날, 발상을 뒤집기로 합니다. V2는 완전히 포기!

외부 슬롯의 메모리 액세스는 turboR처럼 기존 3.58MHz 호환으로 놔두고,

대신 I/O 포트를 3.58MHz 호환 영역과 고속(No WAIT) 영역으로 나누는 방식으로 갑니다.

V2.1 ㄱㄱ


이렇게 구현하면, 굳이 고속 전송이 필요한 기기들을 본체에 내장해서 구현할 필요가 없어집니다.

외부 I/O 포트로도 충분히 설계가 가능하니까요.

보드에 내장된 메모리(SRAM, FlashROM)만 고속 액세스의 효과를 얻겠습니다.

램은 4096KB 풀로 땡겨서 박아넣으면 끝!


일단 내장 기기들은 우선순위에 따라 구현하거나 로드맵 뒤로 미뤄둡니다.

- 외부 슬롯: SLT-X V2로 구현 완료

- 오디오: Wi-Fi, USB-UART를 통합한 WAU로 구현 완료 (고속 CPU를 위해 Auto WAIT 처리)

- 비디오: VDP-OverDrive로 계획 변경 (호스트 내장 방식으로 진행 중)

- DMA: 애드온 보드(SLT-DMA), 오디오 외엔 활용도가 낮으니 로드맵 제일 뒤로 보냅니다.


대충 이렇게 흘러가고 있습니다 ㅎ.ㅎ



[본론]


I/O를 저속, 고속 포트의 범위부터 정해야겠죠?


- 00H ~ 7FH (저속)

외부 기기들이 사용합니다. 거의 표준이라고 봐도 무방합니다요.

제가 만든 기기들도 대부분 이쪽 포트를 사용하고 있습니다.

Switched I/O 40H ~ 4FH도 많이 쓰이고 있구요.

암튼 호환성을 위해 3.58MHz 타이밍으로 처리합니다.


- C0H ~ CFH (저속)

앞쪽 포트는 MSX-AUDIO 및 MoonSound가 사용하고 있습니다.

남은 영역에 새로운 오디오 기기도 할당될 수 있도록, 3.58MHz 타이밍을 유지합니다.


- 호스트 경유 포트 (저속)

80H ~ EFH 사이의 VDP, PSG, PPI, RTC 등 많은 범위들이 3.58MHz 타이밍으로 처리됩니다.


- SLT-Turbo 내장 및 메모리매퍼 (고속)

S1990, Kanji, MSX-MIDI 등 시스템 포트들은 모두 고속으로 처리합니다.

S/W 속도 저하를 방지용으로 메모리매퍼 포트(FCH ~ FFH)도 고속으로 처리합니다.


- 80H ~ FFH 사이에 남은 영역 (고속)

이 영역은 호환성을 포기합니다.

turboR 단종된지 30년 지났는데, 여기만이라도 제가 독점해야겠어요! ㅎ.ㅎ

88H ~ 8BH의 Sec-VDP도 포함이 되겠구요.

제가 앞으로 만들 기기들도 모두 포함이 될 예정입니다.



[결론]


때는 2025년...

SLT-Turbo V2.1을 제작하면서 Z80 28.6MHz 부터 테스트를 해보니,

외부 I/O 고속으로 쓰면서 기존 기기들(제가 주로 쓰는 것들)을 구동하는 게 어렵네요.

외부 슬롯에 단독으로 물리면 MMC/SD V4가 20MHz에서도 잘 돌아갑니다만...

SLT-X를 꽂고 주변 기기가 늘어나니 클럭을 18.33MHz까지는 내려야 되더라구요.


결국 마진을 고려해서 Z80 16.5MHz로 최종 결정이 되었습니다.

M1 WAIT가 없기 때문에 M1 WAIT를 적용한 Z80 19MHz랑 비슷한 성능이 나옵니다.

그 외, Z80 /RFSH 구간은 2클럭을 4클럭으로 stretch 할 수 있는 옵션도 넣었어요. (특수 상황 대비용ㅋ)


외부 슬롯에서 메모리 액세스와 고속 I/O 액세스를 비교하면,

3.58MHz 클럭에서 메모리 액세스(3클럭) 타임은 838ns

16.5MHz 클럭에서    I/O 액세스(4클럭) 타임은 242ns

이렇게 3배 이상 빠르게 됩니다요.


참고로, 3.58MHz에서 I/O 액세스(4클럭) 타임은 1117ns입니다.

SLT-Turbo의 고속 I/O 포트(242ns)가 5배 가까이 빠르다는 소리죠.



그럼, 다음편에서 이어집니다...