[서론]
제목이 살짝 낚시(ㅋ) 같습니다만... 으흠, 암튼 그렇습니다요 ㅎ.ㅎ
본체에 SLT-Turbo를 꽂으면, 본체의 Z80은 기본적으로 I/O 프로세서로 동작합니다.
실제로는 Z80 2개가 병렬로 동작하고 있지만, 사용자 입장에서는 CPU가 하나처럼 느껴지게 됩니다.
만약, 아예 작업을 나눠서 두개의 CPU로 구동할 수 있다면 어떨까요? 작업시간을 절반으로 낮출 수 있겠죠!
예를 들어 곱셈 구구단 표를 만들 때,
Z80 1번: 1단 ~ 5단 계산
Z80 2번: 6단 ~ 9단 계산
-> 이렇게 동시에 동작하는 걸 의미합니다.
물론 단순 계산작업이 아닌 주변기기 I/O가 포함된 작업이라면, I/O를 기준으로 CPU 코드를 나눠야겠지만요.
[본론]
그럼, 실전으로 넘어갑시다!
듀얼 CPU를 활용하는 동영상 플레이어를 만들어보아요~
이름은 MV2 player입니다!
기존 MV player의 경우,
초당 12프레임의 비디오 데이터를 SD카드에서 VRAM으로 전송하고,
VRAM 전송 중 틈틈이 오디오 데이터를 PCM으로 출력합니다.
SD카드는 커맨드를 보내고 응답받는데 걸리는 시간이 제각각이라서, 동작 시간도 계산해서 구현해야하죠.
코딩할 때 명령어 하나씩 사이클 계산해서 맞추느라 무쟈게 귀찮...ㅋ
MV2에서는 아래처럼 작업을 나눕니다.
SLT-Turbo:
SD카드에서 데이터 읽기
비디오 데이터를 공유버퍼로 전송
MP3 데이터 출력(WAU 카트리지)
본체:
공유버퍼의 비디오 데이터를 VRAM으로 전송
키입력(ESC 키) 상태를 SLT-Turbo로 전달
본체의 Z80은 동작시간 대부분을 VRAM 전송하며 보내게 됩니다.
페이지 플리핑이나 팔레트 변경도 들어가겠지만, VRAM 데이터량에 비하면 '새발의 피'입니다요.
CPU가 단순 VRAM 전송만 해도 된다면, 최대 전송량은 얼마가 될지 계산해봐야겠죠?
OUTI 풀어쓰기로 VRAM 전송과 팔레트 설정을 할테니,
-> 1바이트 전송에 Z80 19클럭이 필요합니다. (MSX2+, turboR 기준)
SCREEN 2 풀스크린 256 x 192 화면에서 전송량
패턴테이블 = 6144 bytes
컬러테이블 = 6144 bytes
팔레트 = 30 bytes
-> 총 12318 bytes
초당 처리가능한 bytes 수를 계산해보면....
3579545clk / 19clk / 12318 = 15.29 frame/s
-> 초당 15프레임이 가능하다는 결론이 나옵니다.
15프레임은 디스플레이 60프레임 / 4로 나눠지니까, 페이지 플립을 해도 문제없으니 딱 좋네요 ㅎ.ㅎ
본체의 Z80에서 비디오 1프레임을 VRAM에 전송 후 CPU IDLE 타임을 표시해보면 아래처럼 나타납니다.
화면 아래쪽에서 스캔라인 테두리(BD) 영역이 녹색으로 보이는 부분이 CPU IDLE입니다.
SLT-Turbo쪽에서는 MMC/SD V4에서 MV2 데이터를 읽은 후 공유 버퍼에 저장합니다.
오디오는 직접 출력을 하는데요. 기존 MV 11kHz PCM에서 MV2 128kbps MP3로 바뀌었습니다.
I/O는 WAU 전용이니까, WAU가 없으면 무음으로 출력됩니다 ㅎ.ㅎ
설명이 길었네요. 그럼, 실제 동작 모습을 보시죠!
[결론]
예전 SLT-Turbo V1을 만들고 나서, 활용할 방법을 생각하느라 시간이 좀 걸렸습니다.
사실 SLT-Turbo V2도 애매한 포지션이라서 접었었구요.
결국 이 듀얼 CPU 활용 때문에 SLT-Turbo V2.1으로 진행이 되었습니다~ ㅎ.ㅎ/
그럼, 다음편에서 보아요~
댓글 없음:
댓글 쓰기