터보 MSX를 만들 때 가장 중요한게 뭘까요?
속도? 물론 중요합니다만... 기존 S/W의 동작 호환성이 가장 중요하겠죠?
1.
Z80 매뉴얼에는 없는 비공식(hidden) 명령어를 쓰는 프로그램(일부 게임 등)이 제대로 동작되어야겠구요.
2.
I/O의 경우에도 Z80 3.58MHz 모드에서 기존 I/O와 똑같은 성능이 나와야 의미가 있습니다.
기존 MSX에 비해 느려도 안되고, 더 빨라도 안됩니다 ㅎ.ㅎ
3.
기존 터보 기종(ST/GT)의 호환성을 생각한다면, R800 명령어들도 제대로 지원이 되어야겠구요.
그게 안되면 turboR 딱지를 붙일 수가 없겠지요.
4.
기존 터보 기종보다 빠르게 동작하는 모드에서는 속도가 더 빨라도 문제는 없겠습니다.
S/W 개발하시는 분들이 잘~~ 알아서 만들어주시겠죠? (물론 당분간은 저혼자 원맨쇼를~ ㅎ.ㅎㅋ)
기존 S/W 호환성을 유지하고 3.58MHz 클럭에서 기존 Z80와 똑같은 성능을 내려면 어떻게 해야할까요?
가장 쉬운 방법은 Z80 칩을 사다가 붙이면 되겠습니다.
Zilog Z80 칩은 현재도 여전히 생산중인걸로 알고 있구요.
최대 동작 클럭은 20MHz까지 지원됩니다.
아래는 제가 작년에 엘레X츠에서 샀던 Z84C0020AEG 칩입니다.
십여년 전에 썼던 FEG 칩은 QFP 였는데, 이번 AEG 칩은 LQFP네요. 칩 높이가 절반입니다.
2018년 생산품이에요 ㅎ.ㅎ
20MHz 클럭은 주기가 50ns가 됩니다.
속도가 빨라지면 주변 장치(롬, 램)도 빠르게 동작할 수 있어야, 함께 빨라지겠죠?
그리고 3.58MHz MSX는 opcode fetch 시의 메모리 Read(M1 사이클)에 WAIT 1클럭을 넣어서 3클럭으로 동작합니다.
일반 메모리 R/W 사이클은 원래 3클럭이라서 변함이 없구요.
만약 M1 사이클에서 WAIT를 제거할 수 있으면 좀 더 빠른 시스템을 만들 수 있겠습니다.
Z80의 Memory R/W 사이클에서 /MREQ 구간은 2클럭으로 동작하지만,
Memory Write의 경우는 Write 펄스가 1클럭입니다.
이것 때문에 램을 사용할 때는 빠른 칩을 쓰거나, Write 시에만 WAIT를 추가하는 방법을 써야합니다.
일단 터보 보드에 장착할 SRAM을 좀 찾아봅시다요~ ㅎ.ㅎ
ALLIANCE 사의 SRAM은 요즘에도 생산이 되고 있어서 많이 쓰이는데요.
이번 SLT-Turbo에서는 8MB의 램을 쓰려고 합니다.
찾아보니 칩 하나가 나오네요 ---> AS6C6416-55TIN
액세스 타임이 55ns, R/W 사이클 타임도 55ns입니다. 20MHz 시스템의 2클럭이면 100ns니까 충분하네요.
그리고 중요한 Write 펄스 타임은 최소 45ns입니다. 1클럭에 처리가능하네요. ㅎ.ㅎb
SRAM은 이걸로 ㄱㄱ합니다요~
FlashROM은 M29W640 70ns 칩으로 쓰고 있는데요.
Memory read 사이클 2클럭, I/O read 사이클 2.5클럭이라 별 문제없을거라 생각합니다.
Write 펄스가 최소 35ns라서 괜찮을꺼 같은데...
잘 안되면 CPU 클럭을 낮추면 되니 대충 ㄱㄱ합니다~ ㅎ.ㅎㅋ
그럼 실제로 얼마나 빠른지 확인해봅시다!
현재 구현된 I/O 프로세서 로직이 느린편이니까 조금 고려하시고 봐주세요.
VDP I/O랑 인터럽트 처리가 꽤 느립니다ㅋ
아래는 20MHz로 구동한 모습입니다.
일반 MSX와 동일한 M1 사이클 3클럭 read로 되어있습니다. (WAIT 1클럭이욤ㅋ)
아래는 20MHz 속도는 같지만, M1 사이클의 WAIT를 제거한 상태입니다.
훨씬 빠릅니다.
사진에서는 "with M1 1clock wait"라고 되어있는데 'without'이라고 쓴다는게 실수였슴다 ㅋㅋ
참고로 아래는 제 GT의 R800 DRAM 모드에서 테스트한 모습이구요.
디스크롬이 동작중이라 약간 느리긴합니다. 참고하세요.
영상으로도 한번 찍어보았습니다.
뒷부분에 트윈비, 캐슬EX 구동 모습도 넣었어요. (CPU가 빨라지면 속도도 빨라지는 X같은 게임들ㅋ)
그럼, 다음편에서 보아요~ ㅎ.ㅎ
궁금한 점 있으시면 댓글로 ㄱㄱㄱ
댓글 없음:
댓글 쓰기