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 내에서 충분히(?) 많이 만들 수 있어요.
나름 요약해본건데... 글씨만 많군요 ㅎ.ㅎ
마지막으로 사진 한장 올리고 물러갑니다요~
그럼, 다음편에서 보아요~