레이블이 _SLT-Turbo인 게시물을 표시합니다. 모든 게시물 표시
레이블이 _SLT-Turbo인 게시물을 표시합니다. 모든 게시물 표시

2021년 6월 17일 목요일

SLT-Turbo 제작 #9 - V2의 바뀐 모습

V2의 방향은 어디로 가는게 좋을까? 그동안 고민을 많이 했습니다요~ ㅎ.ㅎ

대충 요약을 해보면요...


1. Z280의 확장 명령어를 포기


R800은 Z80에서 추가된 명령어가 곱셈 두개뿐이지만, Z280은 많은 명령어가 추가되어있습니다.

곱셈, 나눗셈 명령어를 활용하면 각종 계산 루틴을 빠르게 구동할 수가 있어요.


R800을 보면 아시겠지만, 2개 추가된 곱셈조차 사용하는 프로그램이 거의 없습니다.

S/W 개발자 입장에서 보면 소수 터보알 유저를 위한 프로그램 보다는,

 일반 MSX2 수준에서 쓸 수 있어야 많은 유저가 활용할거라는게 명백하니까요.

참고로 기존 터보알 전용 프로그램에서도 거의 사용하지 않습니다. 상용 프로그램은 아예 없죠.


제가 만든 M 파일 매니저, ASO 리메이크 등에서는 R800 명령어를 쓰지만,

돌아오는 피드백은 보통 이렇죠.

> 일반 MSX2 용으로 만들어 주세요. MSX1에서도 되면 더 좋겠구요.

> V9938이면 충분해 보이는데 왜 터보알 전용인가요? 님은 알레스트 안해보셨나요?


뭐 그렇습니다요 -_-


근데 Z280의 경우는 상황이 더 안좋은게, 이쪽은 개발자가 저 하나뿐이라는게 문제라서ㅋ

결국 Z280 칩을 제거하고 R800 곱셈명령만 로직으로 구현해서, 터보알 호환성을 유지하도록 합니다.



2. 고속 BUS를 지원하려면?


이것 때문에 고민을 많이 했는데요.

SLT-Turbo V1은 A1GT 수준으로 업그레이드 해주는 것 뿐이라서,

외부 슬롯은 3.58MHz BUS를 그대로 유지합니다. 터보알과 똑같죠~ ㅎ.ㅎ

이 방법은 H/W 호환성을 유지하는데엔 좋지만, 빨라진 시스템을 활용하는게 쉽지 않습니다.

쉽게 말하면 내장 메모리와 내장 기기를 활용하는 경우만 고속으로 동작하니까요.


결국 외장 기기를 만들 때, 처음부터 터보알을 고려해서 설계해야하는데 그게 애매하거든요.

특히 비디오 카드처럼 외부에서 단독으로 동작하는 경우는 완전 치명적이구요.


사실 제가 아는 것 중에는... 터보알에 최적화된 기기는 MMC/SD V3와 V4밖에 없네요.

V2는 A1WX 반터보(5.37MHz)나 1chipMSX의 터보(8.06MHz)에서 더 빠르게 동작합니다만,

V3, V4는 터보알의 고속모드(외부 3.58MHz)에서 훨씬 더 빠릅니다.


그렇다면 20MHz 고속 BUS를 쓸 수 있는 슬롯을 따로 할당하면 어떨까요?

가장 쉬운 방법은 외부 기본 슬롯인 SLOT 1 또는 2 전체를 고속으로 만드는건데요.

MSX의 슬롯이 16니까 외부 기본슬롯(서브4개) 하나를 할당해도 괜찮지 않을까 생각되시죠?


근데 카트리지 호환성 때문에 SLOT 1은 기본슬롯 하나로 완전히 빼놔야 하는데요.

그럼 남는게 SLOT 2 하나뿐이에요.

SLOT 0, 3은 대부분 BIOS랑 내장 S/W가 점유하고 있으니 서브슬롯 두개정도 남으려나요?

그러면 SLOT 2를 고속으로 해버리면, 외장형 주변기기들을 꽂을 슬롯이 별로 없게됩니다.

제 경우 최소 T-Wave, FontPack, MPX, MoonSound는 항상 꽂혀있어야 해서, SLOT 2는 항상 만차에요ㅋ


고속의 외부 슬롯은 할당하는건 무리라고 판단됩니다.

결국 내부만 고속으로 돌리는걸로 합의했어요. (저 혼자  합의ㅋ)


GT를 20년 가까이 썼는데, 외부 슬롯은 기존을 유지해야된다는게 MSX의 숙명...ㅎ



3. 고속 모드를 활용하는 내장 기기들


그럼 내장 기기를 추가할 때 고속모드를 잘 활용할 수 있는건 어떤 것들이 있을까요?

가장 먼저 떠오르는게 디스크, 비디오, 오디오겠죠? ㅎ.ㅎ


3.1 디스크 드라이브


SLT-Turbo V1에서는 터보알과 비슷한 DOS2 호환 커널이 SLOT 3-2에 탑재됩니다.

대신 FDD는 호스트 본체의 디스크롬을 경유하도록 되어있어요.

잘 이해가 안되신다면, paraMSX-R의 V-Disk 기능(호스트 디스크 매핑)을 떠올려보심 되겠습니다.

그거랑 똑같아요! ㅎ.ㅎ


물론 이 상태는 고속모드랑 전혀 관계가 없습니다.

아마 그냥 활용하는 것도 MMC/SD 같은 외부 디스크 장치에 의존하게 될거에요.

그래서 SLT-Turbo V2에서는 본체 FDD 대신, SLT-Turbo에 내장된 SD카드를 기본으로 사용합니다.

참고로, 요놈의 이름은 SLT-Drive입니다요.


3.2 비디오


요놈땜에 설계하는데 시간이 많이 걸렸어요. 이랬다가 저랬다가 왔다갔다~ㅋ

SLT-Turbo가 MSX 본체에 꽂는 주변기기처럼 생겼지만...ㅋ

사실은 이놈이 메인 기기이고, 호스트 본체를 외장 주변기기처럼 사용하는데요.

호스트에서 가장 중요한 부분은 비디오(VDP 관련)와 키보드, PSG입니다.


그럼, SLT-Turbo에서 지원하는 비디오 기능은 뭘까요?

MSX의 기본화면을 생성하는 것은 본체의 VDP(V9938/9958) 그대로입니다.

SLT-Turbo에 추가된 비디오는 기존 본체의 화면에 새로운 비디오를 오버레이 해주는 방식입니다.

그러니까 본체의 RGB 입력을 받아서 SLT-Turbo의 비디오(가칭 SLT-Video)를 위에 올려서 함께 출력하는거죠.


컬러 포맷은 RGB555이구요. 팔레트는 8BPP입니다.

팔레트 모드에서는 기존 스크린8 모드 호환도 가능하고, V9990의 15BIT 비트맵과 같은 화면도 가능하겠죠.

인터레이스 모드는 필드 메모리 분할이 아닌 선형으로 주소가 매핑되구요.

여러개의 페이지(Max. 4개)를 오버레이 하거나 스크롤, 화면 분할 등이 H/W로 지원됩니다.

팔레트 셋도 거의 무제한으로 설정가능하구요.


자세한 내용은 나중에 SLT-Video 편에서 따로 설명드리겠지만,

일단 메인램을 할당해서 사용함...정도만 기억하셔요. ioremap과 비슷합니다.


참고로, SCART 출력의 화면비율 설정도 가능합니다.

4:3, 16:9 설정을 바꿀 수 있어서 걸그룹 뮤비를 만들 때 레터박스를 쓰거나 화면을 자르는 작업을 하지않아도 됩니다.

아마 일제 모니터를 쓰시는 분은 지원안될겁니다요.


3.3 오디오


제가 지난 십여년간 준소프트님의 MPX를 워낙 잘 썼기 때문에, 그냥 VS10x3 칩을 박아버릴까 생각도 해봤는데요.

이넘은 파서, 디코더와 렌더러가 합체된 구조라서 내장기기로 쓰기는 애매한 듯 해서...

그냥 오디오 DAC만 추가하기로 합니다.

쉽게 구할 수 있는 PCM5102 모듈을 붙이는 방법을 썼어요.

혹시나 모듈이 단종되면 회로를 그려야하는 불상사가... 하지만 일단 납땜 노가다를 줄이는 방향으로~ ㅎ.ㅎ

자세한 기능은 오디오 편에서 따로 얘기하겠습니다요. (가칭: SLT-Audio)


현재까지는 8핀 DIN 단자의 RGB + 오디오는 그대로 두고

SLT-Turbo의 서브슬롯 쪽의 오디오와 SLT-Audio만 믹스해서 3.5파이 단자로 출력합니다.

이렇게 하는게 본체의 오디오와 SLT-Turbo쪽의 오디오 밸런스 맞추기가 쉬울 것 같아요.

물론 외부 믹서가 있어야겠지만요~ ㅎ.ㅎ



4. DMA 컨트롤러


MSX1,2는 워낙 싸구려 홈컴퓨터 사양이라 그런지, DMA는 사양에 없는데요.

터보알에도 없어요 ㅎ.ㅎ


SLT-Turbo V2에서는 CPU 부담을 덜어주기 위해 간단하게 DMAC가 들어갑니다.

비디오, 오디오 처리 시 유용하게 쓸 수 있겠구요.

T-Wave의 DCSG 포트나 스테레오 DAC 포트, Covox 포트도 쓸 수 있겠습니다.

(물론 저혼자 쓰게 될 확률이 높...ㅋ)



5. I/O 메모리 리맵


SLT-Turbo에 내장된 메모리는 4096KB입니다.

단일 메모리 매퍼로 지원가능한 최대사이즈입니다.

내장 기기로 추가된 비디오, 오디오 기기는 별도의 로컬 메모리가 탑재되지 않고,

메인 메모리를 할당 받아서 사용하게 됩니다.


메모리 관리자를 따로 만들면 좋겠지만, 기존 메모리매퍼 확장 BIOS도 안쓰는 개발자가 수두룩한걸 볼 때...

뭔가 더 만들게 되면 관심에서 멀어지는 효과만 늘어나겠죠?ㅋ


비디오, 오디오에서 필요한만큼 할당해서 매핑가능합니다.

예를 들어 V9938의 경우는 스크린8의 페이지가 2개(64KB x 2개)뿐이지만,

SLT-Video는 4MB 내에서 충분히(?) 많이 만들 수 있어요.



나름 요약해본건데... 글씨만 많군요 ㅎ.ㅎ

마지막으로 사진 한장 올리고 물러갑니다요~




그럼, 다음편에서 보아요~


2021년 4월 23일 금요일

SLT-Turbo 제작 #8 - 정리하고 다음 단계로...

한동안 잠잠하던 SLT-Turbo 이야기가 이어집니다.


기본적인 구조는 작년말에 완성되었구요.

남은 것들은 Z280 추가 명령어 활용과 MIDI OUT 인터페이스, DMA 처리 등이 되겠습니다.

.

.

.

근데 Z280 활용과 데모용 프로그램 제작 중, 현타가 좀 오네요! ㅎ.ㅎ;


이미 알려드린 것처럼,

SLT-Turbo의 목표는 "외장 CPU와 본체의 CPU 조합으로 turboR 비슷한 환경을 구현" 입니다.


I/O 프로세서, 고속 Z80, Z280 코프로세서 모드까지 해놓고 보니... 더 이상 재미가 없네요!

아마 제가 20년 가까이 GT를 쓰는 중이라 그렇겠죠?ㅋ


그리고,

추가된 Z280 명령어로 재밌는 S/W가 나오면 좋겠지만...

저 혼자 S/W를 다 만들어야하는 상황이라서, 뭔가 많이 기대하는건 좀 힘들구요.

몇개 남지 않은 Z280 칩을 이런 용도로 써버리는게 좀 아깝기도 하고 그렇습니다.



그.래.서.


SLT-Turbo V1은 이쯤에서 정리하고, V2로 넘어갑니다~ ㅎ.ㅎ

좀 더 재밌는 환경이 되도록 설계가 조금 바뀔 예정입니다.



그럼, 다음편에서 보아요~


2020년 12월 26일 토요일

SLT-Turbo 제작 #7 - 코프로세서 모드

[서론]


처음 SLT-Turbo 설계할 때는 기존 turboR과 같은 CPU전환 방식이었습니다.

Z80 10MHz과 Z280 12.5MHz을 넣었었죠.

당연히 Z280 12.5MHz가 R800의 역할을 합니다.


turboR 고속모드에서 프로그램을 돌려보면 대략 Z80 노말모드에 비해 5배정도의 속도가 나오는데요.

만약 Z280 성능이 Z80의 1.5배 정도만 나와준다면, R800이랑 비슷한 속도가 나오지않을까...

대충 그렇게 생각했던거죠~ ㅎ.ㅎ

12.5MHz x 1.5배 성능이라면 Z80 18.75MHz 정도와 동급일테니까요.

그럼 18.75MHz / 3.58MHz = 5.24 이런 계산이면, Z80 노말모드의 5배 성능으로 추측해볼 수 있습니다.

이 때부터 희망회로가 불타기 시작ㅋㅋ


외부 OSC는 50MHz 정도를 사용합니다.

Z80은 본체의 3.58MHz와 OSC의 5분주 10MHz 사용하구요.

Z280은 OSC의 2분주 25MHz를 칩에 입력해서, CPU 코어는 절반의 12.5MHz로 돌아가게됩니다.


그리고 Z80은 3.58MHz 대신 10MHz 버전으로 넣은 이유는...

Z280을 메인으로 구동하는 동안 Z80을 서브 CPU로 활용하면 어떨까? 하는 마음이었습니다.


S/W를 만들 때, 주기적으로 동작하는 기능(예: BGM 처리)을 전담하는 서브 CPU가 있으면 좋을 듯 해서요.

메인 CPU가 바라보는 슬롯 맵과 서브 CPU가 보는 슬롯 맵을 다르게 할 수 있으면,

프로그래밍을 다양한 방법으로 할 수 있겠죠? 프로그래밍 재미도 늘어난다면 금상첨화~ㅋ

.

.

.

근데 첫 보드를 제작하고 CPU 성능 테스트를 해보니...ㅋ

Z280의 성능이 동클럭의 Z80에도 밀리는 상황이 나오더라구요. 캐시 OFF에 8비트 호환 BUS ㅠ.ㅠ

고민 끝에 Z80을 20MHz 버전으로 바꾸고, Z280을 서브 CPU로 만드는 방법을 생각하게 됩니다.

결국 turboR 스타일의 두 CPU 전환과는 다른 방식이 된거죠.



[본론]


그럼, SLT-Turbo에서는 CPU를 어떤식으로 써야할까요?


기본적으로 SLT-Turbo는 MSX turboR BIOS의 코드를 100% 그대로 사용가능합니다.

S1990의 시스템 컨트롤 레지스터(E4h ~ E7h)가 그대로 호환되기 때문에,

BIOS 루틴을 쓰지않고 레지스터를 직접 컨트롤해도 동작합니다.


성능을 보면,

일단 SLT-Turbo의 OSC는 60MHz를 사용합니다.

노말모드는 Z80 3.58MHz로 똑같이 구동이 되구요.

고속모드는 Z80 20MHz로 구동(OSC 3분주 클럭)합니다. 성능은 turboR의 R800 DRAM모드와 비슷해 보입니다.

Z280은 20MHz가 칩에 공급되고, CPU 코어는 10MHz로 동작합니다.


고속모드에서 R800의 전용 명령어의 처리만 제외하면, 기본적인 노말/고속모드는 turboR과 거의 같습니다.


R800 전용 명령을 처리하기 위해서는 기존 turboR과 다른 방식의 구현이 필요한데요.

Z280을 코프로세서 구조로 구동하는 방식을 사용합니다.


메인 CPU(Z80 20MHz)가 동작 중 해당 명령을 만나면...

1. Z80의 처리를 멈춤

2. 레지스터 데이터를 Z280으로 전달

3. Z280으로 명령 처리 후 결과값(레지스터)를 Z80으로 전달

4. Z80에서는 다음 명령부터 진행

이렇게 되는 것이죠.



참고로 R800은 곱셈 명령어 두개가 추가되어, 8비트 및 16비트 연산이 가능합니다.





두 명령어는 Z280에도 그대로 지원됩니다. 코드도 똑같이 할당되어있어요.

아래는 Z280에 추가된 2바이트 및 3바이트 명령어 모음입니다.




2바이트 명령어의 ED C0 ~ ED FF 영역이 많이 사용되는 곱셈, 나눗셈, 비교 명령어가 들어있어요.

참고로 이 명령어들은 Z80에서는 없는 명령어라서 그냥 00 00 으로 처리됩니다.

NOP x 2개로 시간만 때우는것이죠.


이 때 SLT-Turbo의 BUS 아비터는,

Z80에서 코드 실행 중 해당 범위의 명령어가 디텍션되면,

CPU 전환과 관련된 일련의 작업들을 처리하게 됩니다.

Z280은 멈춰서 대기하다가 요청이 들어올 때만 동작하게 되구요.


현재는 2바이트 명령어만 구현되어있습니다.

3바이트 명령어는 Z80에서 안전하게 skip 될 수 있을지 확인 후 구현예정입니다.

(귀찮으면 지원안하게 될지도요ㅋ)



아래는 8비트 곱셈, 나눗셈 명령어 두개를 테스트하는 프로그램입니다.

ST나 GT 갖고 계시면 한번 실행해보세요. ㅎ.ㅎ

Download: CPUTEST.ZIP



SLT-Turbo의 고속모드에서 실행하면 아래처럼 결과가 나옵니다.

turboR에서는 곱셈만 성공합니다만, SLT-Turbo의 Z280은 나눗셈도 처리가 됩니다요~ ㅎ.ㅎ






그럼, R800 곱셈 명령을 쓰는 실전(?) 프로그램을 돌려보아요~

제가 만든 ASO 리메이크는 turboR 전용 프로그램인데요.

처음 업로드했던 파일은 Z80 명령만 쓰는 버전입니다. 에뮬에서 쉽게 테스트하기 위함이었구요.

그 후 조이메가 지원을 넣으면서 R800 명령어를 쓰는 버전으로 교체한 파일을 업로드했습니다.


아래 영상에서는 CPUTEST.COM 프로그램을 실행 후 ASO R800 버전을 실행하는 모습이 나옵니다.

호스트 MSX는 MSX2+ 기종인 A1WSX를 사용했습니다.



00:00 Host MSX, Booting

00:32 SLT-Turbo, Booting as turboR mode

00:55 SLT-Turbo, Coprocessor mode

01:13 SLT-Turbo, Instructions executed by Z280

01:31 SLT-Turbo, ASO remake with MULT instruction



[결론]


한줄로 요약하면,

'turboR의 R800 고속모드와 유사한 성능을 제공하는 Z80 + Z280 코프로세서 모드를 구현'

으로 되겠습니다.



그럼, 다음편에서 보아요~


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의 형태로 동작하는 모습이 되었지요.


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


그럼, 이만...


2020년 11월 29일 일요일

SLT-Turbo 제작 #5 - I/O 프로세서 개선

V4 납땜하다가... 다시 SLT-Turbo로 달려봅니다요~

이번엔 데모 영상을 위해 X-II에 기기를 연결했습니다.




I/O 프로세서는 호스트의 CPU가 담당하지만, 실제 코드는 SLT-Turbo의 BUS Arbiter가 생성합니다.

예전에 이게 DMA 컨트롤러의 마이크로 코드 작업과 비슷하다...라고 설명했는데요.

코드가 동적으로 변경되는거라서 좀 차이는 있겠습니다요~ (사실 일반 DMAC는 구조가 간단합니다)


초기 버전과 현재 버전의 동작차이를 요약하면 이렇습니다.


@ 초기 버전

  모든 코드는 호스트 메모리에서 구동

  호스트 CPU가 SLT-Turbo의 BUS 상태를 체크하고 필요한 루틴을 실행


@ 현재 버전

  모든 코드는 SLT-Turbo 슬롯에서 구동

  BUS Arbiter가 필요한 코드를 생성함



호스트 CPU의 코드 공간(주소)는 Page 0 (0000H ~ 3FFFH) 입니다.

어차피 인터럽트 처리 때문에 Page 0을 쓰는게 공간을 적게 차지하겠습니요.

참고로 Page 1,2는 SLT-Turbo의 가상 슬롯 매핑에 쓰입니다. (자세한건 나중에 설명을~ㅋ)

Page 3는 호스트의 메모리 그대로 유지합니다. DATA, Stack 용으로 계속 쓰이는거죠.



이번에 데모로 찍은 영상은 X-II 순정에 V9958 교체 후 XII-V만 내장된 상태입니다.

그러니까 MSX-MUSIC이 없는걸로 보시면 맞습니다.


지난번 A1WSX로 데모했을 때에는 OPLL 칩이 본체에 내장되어있어서,

I/O 프로세서가 처리한 사운드 결과만 확인이 가능했는데요.

이번엔 XII-V(LED 비주얼라이저)가 호스트에 있고, OPLL은 SLT-Turbo에 있습니다.

그러니까, LED와 사운드가 동시에 동작하는걸 확인할 수 있다는 얘기입니다.



그럼 영상으로 확인해보시죠~ ㅎ.ㅎ

X-II의 전면 슬롯에는 MMC/SD V4가 있고,

후면 슬롯에는 50핀 케이블로 SLT-Turbo가 직결되어있습니다. (케이블은 27cm 정도 되네요)



아래는 영상 설명입니다.


00:00 Host MSX, Booting

-> 호스트 본체가 부팅됩니다.


00:35 SLT-Turbo, Illusion City

-> GT 모드로 구동 후 환영도시를 실행합니다.


03:30 SLT-Turbo, Fray

-> GT 모드로 구동 후 프레이(터보알 버전)을 실행합니다.


05:55 SLT-Turbo, Video Play

-> GT 모드로 구동 후 MV 영상 재생합니다.

원본 영상 속도와 거의 동일한걸 볼 수 있어요.



MV 재생 시, 음성이 약간 빨라졌다 느려지는 현상이 나오는데요.

이건 기기특성은 아니고, MMC/SD의 MV 플레이루틴이 기기를 진짜 A1GT로 착각해서 발생하는 현상입니다.

WSX, GT에서 쓰인 T9769는 VDP IO처리시 1클럭 wait가 더 추가됩니다.

이 때문에 일반 MSX2보다 조금 느리게 동작합니다.


MV 재생처럼 VDP를 과도하게 쓰는 경우는 이 차이를 사람이 느낄 수 있는 정도가 되거든요.

MMC/SD의 MV 플레이어는 1클럭 wait가 없는 기종에서는 속도 보상을 하도록 구현되어있습니다.

그래서 MSX2, MSX2+, turboR 모두 영상재생 속도가 동일하도록 처리됩니다.

.

.

.

사실 모든 기종을 다 커버하지는 못합니다 ㅎ.ㅎㅋ

MSX-ENGINE이 좀 다른 MSX2/2+ 기종이 있는걸로 알고 있어요.

지금 영상의 MSX2 본체에서 VDP를 V9958로 개조하고 SLT-Turbo를 구동하면,

현재의 MMC/SD의 MV 플레이어는 본체를 GT로 인식하게 됩니다. 이 경우도 커버가 안되는거죠.

이건 나중에 MMC/SD BIOS 업뎃할 때 지원하도록 하겠습니다.



그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ


2020년 11월 1일 일요일

SLT-Turbo 제작 #4 - turboR 흉내내기

지난 글에서는 그냥 빠른 Z80에 대한 내용이었습니다.

그럼, 이번에는 터보알과 비슷하게 동작하도록 해봅시다요.

일단 사진 한장 올려놓고 시작을~ㅋ





[서론]

 

터보알은 동작 모드가 두개입니다. 다 아시는 그... Z80 일반 모드와 R800 고속모드욤 ㅎ.ㅎ


일반 모드에서는 MSX-ENGINE(T9769C)을 메인 칩으로 구동합니다.

기존 A1WSX 등의 MSX2+ 기종과 H/W적으로 똑같이 동작하니까, S/W 또는 H/W 호환이 100% 되는거겠죠?

R800 고속모드는 외부 슬롯은 3.58MHz의 기존 BUS를 유지한 상태로, 본체 내부만 고속으로 동작합니다.

외부 BUS가 고속으로 동작하면, 기존 H/W(외부 주변기기)들의 동작 보증이 안되니 어쩔 수 없는 선택이었겠죠.


그럼 외부 슬롯만 고려하면 될까요?

아니겠죠? 기존 3.58MHz 속도에 맞춘 S/W를 그냥 빠르게 돌리면 내장기기들도 엉망이 됩니다.


근데 SLT-Turbo를 만드는데 터보알 얘기를 자꾸 하는지 궁금하실 분들도 있겠네요.

만약 그냥 제 마음대로 만들게 되면, SLT-Turbo가 기존 ST/GT보다 활용도가 낮을 확률이 높습니다.

최소한 기존 터보알의 고속모드와 호환되는 동작모드가 있어야, 기존 고속모드 만큼의 효용은 생길 것 같아요.

물론 GT 클론을 만들겠다는 의미 보다는 S/W, H/W 호환기기에 의미를 두시면 되겠구요.


SLT-Turbo에 SLT-X를 합체(?)시킨 결과물도 결국 이 활용도 때문에... 이렇게 되었습니다요.

두 기기를 분리해서 만들면, 함께 사용하실 분들이 별로 없을 것 같아서요ㅋ



[본론]


제가 GT를 18년쯤 썼으니, 뭐 이정도면 대충 느낌 아니까...

적당히(?) 이것저것 넣으면 되지않을까 싶으네요 ㅎ.ㅎㅋ


지원되어야 할 필수 기능들을 적어봅시다~

- CPU 동작 모드 전환 (Z80 3.58MHz 일반모드, Z80 20MHz 고속모드)

- R800 명령어 지원 (8BIT/16BIT 곱셈)

- 고속모드에서 외부 슬롯 액세스 타이밍

- 고속모드에서 내장 기기 액세스 타이밍 (VDP, PSG, 키보드 등)

- 16BIT H/W Timer

- 8BIT PCM 출력, PCM Timer (15.7KHz)

- 메모리 매퍼 (512KB GT 모드, 4096KB Full 모드)


참고로, SLT-Turbo가 구동가능한 최소 사양은 MSX2 램64KB입니다.

만약 MSX2+ 기종을 쓰거나, MSX2의 VDP를 V9958로 개조하셨다면...

SLT-Turbo만 장착하면 본체를 터보알 수준으로 쓸 수 있게됩니다.


현재까지, R800 명령어를 제외하고 나머지는 모두 구현이 되었습니다.

최적화 이슈는 좀 남아있지만요 ㅎ.ㅎ


사실은 지난번 글 이후에 Z280 글을 올릴려고 계획했는데, 이게 성능 문제가 있어서 ㅎ.ㅎ;

R800 고속모드를 전체에 적용하기는 무리더라구요.

이것 저것 테스트를 많이 해봤는데 결국 내린 결론은...

'Z80 20MHz를 고속모드 기본으로 사용하고 Z280은 코프로세서로 사용'입니다.

이쪽은 다른 글로 올릴테니, R800 명령은 일단 스킵합니다요~



Z80 20MHz로 구현해서 테스트를 해보니, 요게 터보알 고속모드와 성능이 비슷하더라구요.

실기의 느낌적인 느낌으로는, 터보알이 기존 MSX에 비해 4~5배 정도의 체감성능이 나오는데요.

SLT-Turbo의 고속모드가 딱 비슷한 느낌입니다. ㅎ.ㅎ


말로 설명하는 것보다는 영상을 보시는게 빠르겠죠?

오랜만에 A1WSX를 꺼냈습니다. 참고로 요놈은 MSX2+ 기종입니다.

내장 메모리는 512KB로 증설되어있습니다.

이 정도로도 충분히 쓸만한 기종이지만, 터보알에 한번 맛들이면... 그냥 창고행~ ㅎ.ㅎ


SLOT 1에는 SLT-Turbo가, SLOT 2에는 MMC/SD V4가 장착되어있습니다.


SLT-Turbo는 A1ST의 수준의 BIOS 롬으로 구동이 됩니다.

내부 SLOT 3-0에는 메모리매퍼가 4096KB 풀로 채워져있구요.

외부 SLOT 1은 MMC/SD V4

외부 SLOT 2-1은 폰트팩, SLOT 2-3은 문사운드가 있습니다.


영상에서는 아래 순서로 나옵니다.

내부외부의 각종 기기들의 동작 모습을 볼 수 있습니다.

영상의 ASO 리메이크는 처음 릴리스했던 파일을 사용했습니다. (R800 곱셈 명령을 쓰지않는 버전)

이후 업뎃된 버전은 R800 명령을 쓰고 있어서, 현재의 SLT-Turbo에서는 실행되지 않습니다.


00:00 본체 부팅

00:37 SLT-Turbo turbo R mode @ 20MHz으로 기동

01:24 SLT-Turbo 일반모드의 속도측정

02:08 SLT-Turbo 고속모드의 속도측정

02:31 SLT-Turbo 칸지 스크린 테스트

02:47 SLT-Turbo 한글 폰트팩 테스트

03:25 SLT-Turbo 메가리포트

04:09 SLT-Turbo IMS 플레이

05:22 SLT-Turbo 프레이 터보알 버전

07:02 본체 리부팅

08:04 SLT-Turbo ASO 리메이크


아래는 유투브에 올린 영상입니다.

위의 설명과 함께 보시면 되겠습니다요~ ㅎ.ㅎ





그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ


2020년 10월 16일 금요일

SLT-Turbo 제작 #3 - Z80 20MHz

터보 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같은 게임들ㅋ)





그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ


2020년 10월 12일 월요일

SLT-Turbo 제작 #2 - I/O 프로세서

설명에 앞서 일단 SLT-Turbo 겉모습부터 보시죠~ ㅎ.ㅎ


아래는 터보 보드입니다. 두장이 아니라 앞뒷면 사진이니 착오없으시기를...ㅋ

서브슬롯 보드와 합체 할 때 부품의 간섭이 생기지 않도록 머리를 많이 굴렸습니다.

보드 그리는데 한참 걸린 것 같아요 ㅠ.ㅠ





서브슬롯 보드를 합체한 모습입니다.

/SLTSL, /IORQ를 ON/OFF 할 수 있는 스위치가 있구요.

슬롯 SOUND 출력을 헤드폰 Left/Right로 나누어 출력할 수 있습니다.

본체의 SOUND IN으로 입력하거나 헤드폰 출력으로 따로 출력가능합니다. 물론 강제 모노도 가능하구요.

사용하려면 외부 DC 5V 어댑터가 필수입니다. 3A 정도면 힘이 남아돌겠죠?




처음부터 위아래 보드를 딱 붙이면 디버깅이 힘드니까, 분리할 수 있도록 핀헤더 소켓을 사용했습니다.






[본론]


대충 구경하셨나요? 그럼 I/O 프로세서 설명으로 넘어갑니다 ㅎ.ㅎ


SLT-Turbo는 MSX 본체가 아닌, 본체의 CPU를 고속으로 바꾸는 효과를 내는 'CPU 가속기'의 형태입니다.

메인 BIOS, 메모리 등의 고속으로 구동하는데 필요한 주변기기들은 모두 SLT-Turbo 보드에 내장됩니다.

근데 외부 기기는 본체 내부의 주변장치를 접근 할 수가 없죠.,

그래서, 본체에 내장된 CPU를 SLT-Turbo의 버스 아비터(Arbiter)와 결합해서 I/O 프로세서를 만듭니다.


"본체에 SLT-Turbo를 꽂고 동작하는 것" VS "본체를 고속 CPU로 개조 후 확장슬롯을 연결한 것"

사용자가 이 두가지 환경의 차이를 느끼지 못하도록 만드는 것이 I/O 프로세서의 역할인거죠.



구현방식은 여러가지가 있겠지만... 1차구현은 간단한 방식으로 시작해봅니다~


I/O가 처리되는 과정을 순서대로 적어보면 이렇게 됩니다.

1. 터보 보드의 CPU가 I/O 명령이 수행되면, 아비터가 CPU /WAIT를 유지하고 I/O 요청을 걸어놓습니다.

2. 본체의 CPU는 아비터에 걸린 I/O 요청이 있는지 폴링(Polling)하면서 대기합니다.

3. 본체의 CPU는 I/O 요청을 처리 하고 결과를 아비터로 돌려줍니다.

4. I/O가 완료되면 아비터는 BUS에 전달받은 데이터를 로딩하고 터보 보드의 CPU /WAIT를 해제합니다.


I/O 명령 시작부터 처리완료까지 시간이 꽤 걸릴거라고 예상가능하죠?

지금은 절뚝거리더라도 일단 달려야 되는 상황이니 이해해주세요.

뭔가 동작하는 상태를 만들어야 보드를 동작을 테스트할 수 있으니까요~ 흐흐...



그럼, 한번 달려봅시다~

터보 보드의 Z80 CPU에 3.58MHz 클럭을 연결하고 구동합니다.

SLT-Turbo쪽 슬롯 설정은 아래처럼 초간단 MSX2+ 모드로 해줍니다.

슬롯0 = MSX2+ BIOS

슬롯1 = SLT 서브슬롯

슬롯3 = RAM 64KB


그리고, I/O 프로세서는 아래의 장치들을 본체에서 대신 구동합니다.

PPI (A8H SLOT 제외), VDP, PSG, RTC



아래 영상을 보시면 어떻게 동작하는지 볼 수 있습니다.





영상에 대한 설명 나갑니다~


00:00 Host MSX, Booting

-> 기기를 연결하고 본체를 부팅합니다.


00:23 SLT-Turbo, Booting

-> 임시로 제작된 툴을 이용, SLT-Turbo를 MSX2+모드로 부팅합니다.


01:22 SLT-Turbo, PCM Play with Host Keyboard

-> SLT-Turbo쪽의 V4를 이용하여 44.1Hz PCM을 재생합니다.

PCM Player는 512bytes 재생할 때 마다 ESC 키를 체크합니다.

초당 86번의 PPI를 액세스합니다만, 부하가 작아서 귀로 느끼기는 힘드네요. 


03:07 SLT-Turbo, Video Play with Host VDP & Keyboard

-> SLT-Turbo쪽의 V4로 비디오를 재생합니다.

Video Player는 대부분의 시간을 VDP의 VRAM, 팔레트를 처리하는데 소진합니다.

I/O 프로세서의 처리시간이 얼마나 부담이 되는지 처절하게 느낄 수 있어요.

(사실 생각보다 빠른 듯해서 좀 놀랐습니다ㅋㅋ)


04:18 Host MSX, Re-booting

-> 본체를 재부팅합니다.


04:45 Host MSX, Video Play

-> 본체로 비디오를 재생해봅니다. 정상속도의 영상과 비교하기 위함입니다~



마지막으로 CPU 속도 테스트를 해봅니다.

FOR 루프를 구동하는 것이라 I/O 딜레이가 크게 부담되지않습니다.







[결론]


SLT-Turbo의 제작목표

-> 사용자가 외부에 CPU가 있다는걸 눈치채지 못하도록 자연스러운 고속 CPU 환경을 만드는 것


I/O 프로세서의 목표

-> 터보 보드의 I/O처리가 거의 딜레이없이 구동되도록 구현




그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ



2020년 10월 10일 토요일

SLT-Turbo 제작 #1 - 슬롯터보

[서론]


터보알이 등장한지 이제 30년이 된 것 같네요.

혹시 '이게 진짜 빠른 MSX가 맞나!?' 의심이 들었던 분 있으세요?

MSX를 주로 게이밍 용도로 쓰신다면, 터보알의 용도는 '환영도시 게임기'에 그치는게 맞겠죠? ㅎ.ㅎ


터보알은 고속의 R800 CPU와 내장기기, 그리고 3.58MHz 버스 타이밍이 공존하는 오묘한 MSX입니다.

제가 터보알을 처음 접한 건, ST/GT 실기가 아니라 NLMSX 에뮬레이터였는데요.

그 때는 빠른 MSX의 느낌보다는 '환영도시 게임기'에 가까웠습니다.

딱히 활용할 곳이 없었으니까요ㅋ


그렇게 몇해가 지나고 실제 GT를 구하게 되었습니다.

BASIC과 DOS2을 구동해보니...어? 이게 예상과는 좀 다르네요.

생각보다 너무 빠르더라구요.

이 때부터 MSX 실기를 계속(?) 써야겠다는 생각이 들었고, 이걸 어떻게 해야 쓸모있는 환경이 될까?

고민을 해봤습니다. 사실 정답은 정해져있습니다ㅋ


터보알의 외부 슬롯은 3.58MHz 타이밍이라서, 내장 메모리에서 프로그램이 동작해야만 고속으로 돌아갑니다.

제 개발 환경을 DOS2 기반으로 만들고, 메모리매퍼를 적극적으로 쓸 수 있는 툴을 만들기 시작했습니다.

HI-TECH C에 전용 툴을 섞는 식으로 만들었지요.


그렇게 차근차근 진행되어 처음 나온 프로그램이 HV 한글뷰어였습니다.

메모리 사용량과 인터레이스 스크린7을 보면 딱 느낌이 들죠? "이거 터보알 아니면 못 쓰겠네!"

그리고는 M 파일 매니저가 등장합니다. (본격적으로 터보알을 갈구는 프로그램이...)

MMC/SD V3,V4처럼 터보알 구조에서 빠르게 동작할 수 있는 기기도 만들게 되었구요.

아마 벤치마킹해보셨으면, 이게 3.58MHz 버스가 맞는지 의심이 갈 정도일겁니다ㅋ

.

.

.

그렇게 10년이 흘러 여기까지 왔습니다.

한때는 MSX 본체 메모리를 512KB로 늘려야한다고 얘기하면, DOL-A-I 취급당하던 시절도 있었는데...

이제는 많이 변했죠~ㅋ


하지만 여전히 문제는 있습니다... '고속 MSX를 어디에 써야하나?' 입니다.

활용할 방법이 없으면 고속 MSX도 필요가 없고, 고속 MSX 사용자가 적으니 활용할 H/W, S/W를 만들 이유도 없죠.

근데 '닭이 먼저냐 알이 먼저냐'라는 개발자의 고통을 20년동안 "떠들기"만 해서는 바뀌는게 아무것도 없습니다.

뭔가를 직접 만들고 보편화시키는 것 말고는 방법이 없...ㅋ


그.래.서.

이제 때가 된 것 같네요.

'고속 MSX를 활용할 수 있는 환경을 만들고 같이 활용해보자'로 가는겁니다요~ ㅎ.ㅎ


서론을 좀 주절주절 썼지만...

제가 나름 생각하는 '앞으로 가는 MSX 환경'에 공감하시는데 도움이 되고자 길게 적어봤습니다ㅋㅋ



[본론]


고속 MSX를 활용하려면? 뭐, 고속의 본체가 있어야겠죠? ㅎ.ㅎ;

ST, GT가 널려있다면 고민할 필요가 없는데 말이죠.

그래서 SLT-Turbo라는게 나오게되었습니다.


이름에서 대충 짐작하셨겠지만, 요놈은 SLT-X에 CPU 가속기가 합체된 기기입니다.

일반 MSX를 빠르게 구동하기 위한 가장 간단한 방법은 본체의 CPU를 고속으로 바꾸는건데요.

빨라진 만큼 외부 I/O에 WAIT를 넣는 식으로, 유럽에서는 MSX2 용 Z80 7MHz킷으로 쓰인 것으로 알고 있습니다.

그 외 스페인의 레오나르도 아자씨가 만든 Z380 카트리지도 있는데...

이건 I/O없는 단순한 코드를 빠르게 구동하는 것만 되는 듯 합니다.

저도 실사용하는걸 본적이 없어요. (사용자가 별로 없는 듯요)


SLT-Turbo는 MSX 표준 주변기기입니다.

기본슬롯에 꽂는 확장슬롯과 유사하게 생겼구요. 3.58MHz로 동작하는 일반 버스 타이밍으로 돌아갑니다.

BIOS를 포함 모든 코드는 SLT-Turbo의 터보 보드에서 구동이 됩니다.

본체에 내장된 키보드, VDP, PSG 등은 본체의 CPU가 처리를 대신하게 됩니다.


사실 MSX는 슬롯 구조를 쓰면서 얻는 장점이 매우 큽니다만...

Z80 상위 CPU의 Cache, MMU, DMA를 쓸 수 없는 단점을 갖고 있어요. (단점이라고 하긴 좀 그렇지만요ㅋ)

슬롯 외부의 CPU가 메인으로 구동하려면, 본체 내장 I/O는 본체의 CPU로 처리할 수 밖에 없는 구조입니다.


.

.

.

아마 이쯤에서 궁금한 부분이 하나 있으실 것 같은데...

'기존 MSX의 주변기기가 아닌 본체를 만드는게 더 좋지 않나요?'

사실 파라동 오프모임에서 단골 메뉴로 등장하는 얘기죠.


MSX2+, turboR 기종들이 나온지 30년 넘었는데, 이걸 제대로 활용하는 S/W, H/W도 잘 없어요.

근데 새로운 MSX가 나온다고해서 뭔가 달라질까 싶습니다.

혹시 뭔가 새로운걸 해보고 싶다면...

openMSX 소스에 가상의 주변기기를 추가하고 프로그램도 만들어서 돌려보시면 되겠습니다.


저의 희망사항은

'여러분들의 창고에 처박아둔 실기들이 책상위로 올라와서 전기를 먹는 모습'

정도로 많이(?) 소박합니다 ㅎ.ㅎ



프로젝트 소개는 요렇게 마무리합니다.

SLT-Turbo는 SLT-X에 터보가 추가된거라고 설명드렸는데요. 아래 PCB 사진을 보시면 납득이 되실겁니다요~

보드는 2층으로 합체합니다. PAC-V 구조를 생각하시면 비슷해요.





합체해서 케이스에 넣으면 이런모양입니다. 케이스는 오버리치 카트리지 1개가 필요합니다ㅋㅋ





그럼, 다음편에서 보아요~ ㅎ.ㅎ


궁금한 점 있으시면 댓글로 ㄱㄱㄱ