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처리가 거의 딜레이없이 구동되도록 구현




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


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



댓글 없음:

댓글 쓰기