2020년 12월 20일 일요일

SLT-Turbo 제작 #6 - Z280의 운명은?

[서론]


MSX의 메인 CPU는 Z80 3.58MHz입니다. MSX1,2,2+,turboR 모두 기본은 똑같습니다.


마지막 기종인 turboR은 CPU가 두개가 들어있어서, 동작모드도 두가지로 분리됩니다.

외부 카트리지의 S/W를 구동하는 경우는, Z80 3.58MHz의 노말모드로 동작합니다.

MSX-DOS2 또는 DiskBASIC으로 부팅하면 R800 7.16MHz CPU를 사용하는 고속모드로 동작합니다.


물론 경우에 따라 특수한 동작모드(듀얼 CPU 및 고속 클럭)를 사용하는 기종도 있었고,

사용자가 고클럭으로 CPU를 개조하는 경우도 종종 있었습니다.

유럽에서는 7MHz 터보킷이 유행했던 것 같더군요. 아마 MSX2를 주로 쓰다보니 그런게 아닐까싶기도...


그리고, 본체와는 별개로 동작하는 외부 가속기 형태의 기기도 있었습니다.

저는 써보지 못했지만, Leonardo Padial 씨가 제작한 Z380 보드가 제일 먼저 떠오르네요.


Z80 3.58MHz 사용하는 표준 모드가 아닌 경우는 아래 두가지로 정리됩니다.


1. 메인 CPU의 클럭을 올리거나 고속 CPU로 전환 후 구동

2. 외부 CPU를 사용하여 빠른 S/W를 활용


1번은 메인 CPU의 동작모드가 바뀌는거니, 어느정도 기존 S/W의 호환성을 갖도록 설계가 가능합니다.

목적은 '기존 S/W의 고속화'과 'CPU 파워가 필요한 S/W 제작'이 되겠죠?


2번은 외부 CPU를 활용하는 전용 S/W 제작하려는 의도입니다.

단순 CPU 파워로는 어마어마한 이득을 볼 수 있겠지만...

전용 S/W가 없으면 무용지물이니, 기기가 많이 보급되기가 힘들다는 단점이 있습니다.

.

.

.

그럼, SLT-Turbo는 어느 방향을 보고 있을까요?

개발 초기 때에도 얘기했던 것 같지만... 다시 한번 적어보면요~ㅎ.ㅎ


목표는

- 일반 확장슬롯과 비슷한 형태의 기기처럼 보이도록(쓰이도록) 한다.

- 본체를 turboR과 비슷한 기기로 쓸 수 있도록 해준다.

입니다.


일단 터보 메인보드를 슬롯보드 아래에 숨겼습니다.

멀리서 보면 일반 확장슬롯과 구분이 안됩니다요~ 실제 동작도 확장슬롯과 비슷하죠.


근데 turboR 같은 고속모드를 만들기 위해서는 중요한 걸림돌(!)이 있는데요.

-> Z80/R800과 호환되는 동작 모드(H/W 타이밍 및 I/O 구조)를 갖는 CPU가 필요!!


근데 이게 해결책이 있을까요?

이제 turboR 나온지 30년이 지났는데요. 혹시 turboR 호환기종을 보신적 있으세요? (에뮬 말구요ㅋ)

사실 R800, S1990 칩을 못 구하니까 호환기종을 만들 수가 없습니다.


만약 '이런저런 칩들로 비슷하게 만들면 될 것 같은데, 왜 아무도 안만들었지?'라는 의문이 들면,

'그렇게 만들면 실패하는구나' <- 이게 떠올라야합니다.

좀 단정적으로 쓰긴 했지만, 대부분의 경우는 이게 맞아떨어집니다요~ ㅎ.ㅎ;


암튼 그렇게 30년이 흘렀습니다.

turboR 외에는 제대로 돌아가는 쓸만한 고속 기종은 나오지 못했어요.




[본론]


turboR과 똑같이 만드는건 힘드니, '비슷하게 돌아가는 쓸만한 놈을 만들어보자'에 집중합니다.


사실 오래전부터 생각했던 것은...

Z80 3.58MHz + eZ80 50MHz 듀얼 CPU를 사용하는 보드였습니다.

물론 본체의 CPU는 I/O 프로세서로 사용되구요.


천국동 오프모임에서는 단골메뉴로 나오는게 고속 MSX 제작인데요.

그럼, 기존 R800 S/W 호환이 필요할까?

CPU 성능이 높아지면, 활용하는 S/W가 많이 나올까? 이런 의문이 따라오게 마련입니다.

과연 내가 이걸 만들면 써보고싶은 사람이 과연 있을까? 흐... 애매합니다.


생각에 생각에... 결국 마음속으로만 남겨두다, 작년에 페북에서 Z280에 대한 글을 보게 되었습니다.

이 Z280을 넣은 CPU280이라는 이름의 보드 제작된 내용도 있었구요. (90년초 쯤인 듯 합니다.)


'어.. Z80, Z180, Z380 이렇게 나가는거 아니었던가? Z280은 처음 듣는데?'

이게 오래전 1987년 쯤에 나왔다가 90년대에 단종된 CPU인데요.

ebay에 가보니 중고품이 팔리고 있고~ PDF로 스캔된 매뉴얼도 구할 수 있었습니다요. 이게 뭐야?ㅋ


Z280 매뉴얼을 찾아보니 충격적인 내용이 나오네요.

- Z80 호환 16BIT CPU, 최고 12.5MHz 클럭

- 다수의 추가 명령어 내장 (R800 곱셈 명령도 포함됨)

- DATA BUS는 16BIT 또는 모드 8BIT 모드로 선택가능

- 256바이트의 캐시(I/D) 내장

- 24BIT memory 및 I/O address 사용 (헉!!)

- MMU, Refresh, DMA, CTC, UART 등을 내장


여기 가장 중요한 부분은

8BIT BUS모드로 설정하면 기존 Z80과 유사한 BUS 동작모드가 가능함

주변 회로를 복잡하게 만들지 않아도 기존 MSX의 Z80 버스에 물릴 수 있다는 얘깁니다.


물론 메모리 R/W가 opcode fetch와 별개로 동작하기 때문에 M1 사이클 신호는 없어요.

근데 이건 모든 Z80 후속 CPU의 숙명이니 어쩔 수 없겠습니다요~

(Z180는 M1 호환 모드가 있지만 I/O 문제로 예선 탈락 ㅎ.ㅎ;)


I/O 주소는 메모리와 동일한 24BIT인데, 상위 8BIT BANK + 하위 16BIT 주소로 구성됩니다.

여태 봐왔던 Z80 후속 CPU들은 내장 I/O들이 하위 8BIT 주소를 쓰고 있어서,

MSX I/O 주소와 정면으로 충돌했거든요.

Z280의 내장 주변기기는 FEh, FFh BANK에 할당되어 있습니다.

하위 BANK로 설정하면 내장 I/O와 겹치지않으니, 결국 메인 CPU로 쓸 수 있다는 얘기죠!

(오우~~ 왜 이 CPU를 이제서야 알았을까?)


R800의 곱셈명령(몇개 안되지만ㅋ)과 똑같은 명령이 포함된것도 아주~ 매력적입니다.

아마 R800과 Z280 사이에는 어떤 히스토리가 숨어있겠죠?

자일로그 CPU 중에서 R800 명령이 그대로 호환되는건 Z280뿐입니다.


캐시의 경우는 어차피 MSX의 슬롯, 메모리매퍼 때문에 못 쓰겠네요.

약간의 성능 하락이 예상됩니다.


DRAM Refresh 사이클은 Z80과 다르지만, R800 때에도 비호환이라서 별문제는 없겠습니다.

리프레쉬 얘기가 나왔으니 Z80, R800의 리프레쉬가 어떻게 다른지 한번 보실까요?


예전 paraMSX-R 개발 때, /RFSH 타이밍이 안맞아서 고속모드 지원은 포기했었는데요.

MMC/SD V4 보드로 로직 애널라이저 같은걸 만들어서, 신호를 캡쳐한적이 있습니다.


아래는 JP nn 명령과 OUT (n),A 명령 두개를 쓰는 경우의 신호를 잡은 모습이에요.


먼저 Z80입니다.

매뉴얼에 나오는 파형과 거의 똑같죠? M1 사이클에 RFSH가 연속해서 나오는 모습입니다.




R800입니다. /RFSH가 전혀 안움직이네요ㅋ

JP, OUT 명령만 있어서 Z80보다 적은 클럭으로 동작하는걸 볼 수 있습니다.




그렇다고 DRAM이 깨지는건 아니구요. 실제로는 리프레쉬 사이클이 랜덤한 위치에 나타납니다.

아래는 JP 명령 직전에 /RFSH가 움직인 모습을 잡은거에요.




이렇게 보면 R800에서 클럭을 더 많이 먹는 것처럼 보이지만,

일정한 주기로 리프레쉬 하니까 Z80보다는 R800으로 구동하는게 평균적으로 더 빠릅니다.


참고로, 캡쳐한 신호는 모두 A1GT의 슬롯1의 출력신호입니다. 모두 3.58MHz 타이밍이죠.

turboR에서 호환성을 위해 속도를 희생한 설계때문입니다.

.

.

.

Z280을 MSX 메인 CPU로 쓸 수 있다는 엄청난 희망을 안고 ebay로 달려갑니다!


일단 몇 개를 구해서 살아있는지 확인해보아요~

딱봐도 리마킹이라 좀 불안하네요. (2003년 생산이라니... 말도 안되는ㅋ)





어헛... 동작하는거 같아요! ㅎ.ㅎ





그럼 turboR의 Z80 3.58MHz + R800 7.16MHz와 유사한 Z80 3.58MHz + Z280 12.5MHz으로 구성해봅니다.

그렇게 만들어진 보드가 지난 10월초에 보여드린 사진이었지요.





흐흠.. 과연 ebay에서 온 Z280이 제대로 동작이 될까요?

Z280은 외부 BUS의 타이밍을 CPU와 1:1, 2:1, 4:1로 동작하도록 설정가능합니다.

CPU 클럭이 12.5MHz면 BUS 1:1로 하더라도, SRAM 55ns와 FlashROM 70ns를 돌리는데는 문제가 없어요.

물론 캐시는 모두(I/D) 끈 상태입니다.


12.5MHz로 돌아가는 Z280은 얼마나 빠를까요?

FOR 루프를 돌려봅시다!




어? 8BIT 모드에서는 메모리 R/W 속도가 절반으로 깎이니까, 성능하락은 어쩔 수 없지만...

이거 생각보다 많이 느리네요! @.@


참고로 아래는 Z80 12.5MHz로 구동한 모습입니다.

동클럭의 Z80이 훨씬 빠르네요ㅋㅋ




참고로 A1GT에서는 동일한 FOR 루프로 테스트하면 170정도가 나오구요.

Z80 20MHz로 돌리면 150정도가 됩니다. (자세한 내용은 지난 글을 보시면 되겠습니다요)



[결론]


'Z280을 8BIT BUS 모드로 구동하면 많이 느려짐'

'Z280의 캐시를 활용할 방법이 필요'


Z280을 고속모드로 사용하는건 성능이 아쉬우니 포기하고, Z80 20MHz를 고속모드를 쓰기로 합니다.

이전에 썼던 글들이 모두 Z80 20MHz 얘기만 나왔던게 이런 결과때문이었습니다. ㅎ.ㅎ


'어? SLT-Turbo는 turboR 호환이라고 하지않았나요? 그럼 R800 명령은 어떻게 되나요?'

네, 맞습니다. Z80으로는 turboR 전용 S/W를 구동하는게 불가능하죠.

.

.

그.래.서.

R800 전용 명령을 포함한 곱셈, 나눗셈 명령만 Z280으로 실행하는 방법으로 갔습니다.

Z280을 coprocessor의 형태로 동작하는 모습이 되었지요.


이 내용은 다음 글에서 이어집니다~ ㅎ.ㅎ/


그럼, 이만...


댓글 없음:

댓글 쓰기