2019년 10월 6일 일요일

SLT-X 제작 #3 - Manager 롬의 필요성

[ 서론 ]


확장슬롯을 만들면, /SLTSL, SOUNDIN 핀들을 ON/OFF 하거나

확장슬롯 레지스터를 ON/OFF 하는 등의 여러가지 스위치를 넣게 됩니다.


SLTX를 처음 구상할 때도 늘 그랬듯이ㅋ

마스터 보드를 사용자 앞쪽으로 배치하고, 보드 상에 딥스위치를 주르르 놓으려고 했습니다.

근데 SLTX에서는 기존 확장슬롯 보다 더 많은 딥스위치를 넣어야하는데,

이게 보드 공간 문제도 있고, 꼭 이걸 H/W 스위치로 해야되나 생각이 들었습니다요.


...결국

딥스위치를 다 없애고 S/W로 설정하는걸로 바꾸는 쪽으로 방향을 바꿨습니다.

그렇다고 모든 설정을 S/W 설정으로 바꾸면 나름 불편한 점이 생기겠죠?


본체를 켜기전에 확인이 필요한 설정은 어쩔수 없이 딥스위치로 가야합니다.

그리고 S/W로 설정한 것들을 무력화(안전 모드 발동ㅋ) 할 수 있는 방법도 필요하구요.

사운드 ON/OFF가 좀 문제인데... 그냥 과감히 삭제! ㅎ.ㅎ

최종으로 딥스위치를 하나만 넣는 방안으로 채택되었습니다. 짝짝짝~


그리고 마스터보드에 스위치가 없어지면 보드를 손으로 만질 필요가 없을테니...

굳이 마스터보드를 확장슬롯 앞쪽에 배치할 필요가 없겠죠?


케이블도 확장슬롯 뒷쪽으로 가니까 깔끔하네요.

아래 사진은 10슬롯으로 폰트팩, MPX R2를 사용하는 장면입니다.





뭔가 서론이 결론처럼 된 느낌이네요ㅋ

그럼 본론으로 넘어갑니다.



[ 본론 ]


위의 사진처럼 구동하는 모습을 만들려면, 설정을 위한 S/W가 필요하잖아요?

근데 생각해봅시다요~

이 S/W를 일반 DOS용 프로그램으로 만들어서 사용한다면 이런 시나리오가 되겠죠?

1. 기존 설정으로 본체를 부팅한다

2. 설정 변경용 S/W를 실행한다

3. 설정을 바꾸고 본체를 리셋한다


.... H/W 스위치를 사용하는 것과 비교하면 좀(많이) 번거롭습니다 ㅎ.ㅎ;

만약 설정을 잘못했을 때 제대로 DOS 부팅을 못하게 되는 상황이 생기면, 또 난감하겠죠.


그래서 이런 설정을 해주는 S/W를 확장슬롯에 넣어보기로 합니다.

DOS 부팅까지 가지는게 아닌, 초기 부팅 타임(SLOT INIT)에서 처리를 할 수 있도록이요.


설정 S/W를 롬으로 넣어서 구동하려면 몇몇 조건이 필요한데요.

- S/W가 SLOT을 점유하고 있어야함

- 확장슬롯의 S/W 보다 먼저 실행되어야함


확장슬롯이 SLOT 1,2,3을 사용하고 있을테니,

이넘들보다 먼저 실행하려면 SLOT 0에 S/W를 넣으면 되겠죠?

SLOT 0가 확장된 기종이라면 SLOT 0의 빈 서브슬롯을 활용하면 되겠구요.

SLOT 0가 확장되지않은 기종이라면 SLOT 0의 Page2를 쓰면 되겠네요.


어.. "근데 SLOT 0를 외부 확장슬롯에서 구동할 수 있나요?" 라는 의문이 생기잖아요?

그래서 구동 조건이 하나 더 추가됩니다.

- 본체를 개조하지않고 SLOT 0를 끌어다 쓸 수 있는 기종이어야함


결국 SLOT 0를 뽑아서 쓰지 못하는 기종은 SLTX의 기능을 전부 활용하는게 불가능하다는 얘기입니다.

이런 기종에서는 SLTX를 마스터보드 + 슬레이브보드 연결해서 일반 확장슬롯(4슬롯)으로 쓰는 것밖에 못합니다.


그럼, 어떤 기종에서 쓸 수 있을까요?

MSX-ENGINE 칩을 쓰는 기종들은 슬롯 쪽에 버퍼(244/245) 칩들이 없는 경우가 많은데요.

파나소닉 MSX2/2+/turboR 등이 대표적인 경우입니다.


대우 CPC-300/400의 경우는 245 버퍼를 사용하고 있고, 버스 direction 컨트롤이 여기저기 섞여있습니다.

이런 기종에서는 SLOT 0를 쓰지 못해요. ㅎ.ㅎ


일단 제가 가진 A1, A1GT 등에서 실제 SLOT 0를 사용할 수 있는지 테스트를 해봐야겠죠?

CPU가 SLOT 0의 비어있는 주소 공간을 R/W할 수 있느냐가 관건입니다.


미리 말씀드리지만,

제가 만든 paraMSX-R, MMC/SD V4 등은 내부에 기본슬롯/확장슬롯이 따로 구현되어있습니다.

결국 MSX 본체의 슬롯 처리부분이 카트리지쪽과 클론 상태로 동작하게 됩니다.

물론 머신 에뮬모드에서는 서로 분리되서 동작하구요.

SLTX의 경우는 SLOT 0,1,2쪽으로 확장슬롯이 내장되어있습니다.

H/W적으로는 확장슬롯 3개를 연결한 것과 같습니다.


그럼 SLOT 0 테스트를 해야하는데요. 주변에 굴러다니는 V4 보드를 하나 주워서 활용합니다.

V4의 CPLD 용량이 큰 편이라 테스트용으로 쓰기에 딱 좋습니다요.

게다가 LED도 3개가 박혀있고 사운드 출력도 가능하니~ ㅎ.ㅎ



본체의 슬롯 레지스터를 클론하고 각 SLOT 0에 ROM/RAM을 매핑하면 어떻게 동작하는지 보시죠.


FS-A1에서 RAM을 매핑한 모습입니다.

SLOT 1 = 개조된 테스트 용 V4

SLOT 2 = MMC/SD V3 (슬롯 체커 롬 구동 용)


SLOT 0 Page2,3에 RAM을 설정했습니다.

정상적으로 R/W 되니까 RAM으로 인식된 것을 볼 수 있죠?





이번에는 SLOT 0를 V4에서 확장슬롯으로 구현하고, RAM을 매핑해보겠습니다.

BASIC에서 WORKAREA를 확인해보면 SLOT 0가 확장된걸로 나타납니다.

실제 FS-A1 본체의 내부 SLOT 0은 확장되어있지 않습니다.





이 상태에서 슬롯 체커 롬을 구동해보면...이렇게 나옵니다.

SLOT 0-1,0-2,0-3의 Page0,1은 "?"로 표시가 되네요.

A1 본체는 확장슬롯 처리가 없으니, 이 영역은 Main BIOS 영역과 똑같이 보여집니다.

하지만 Page2,3 쪽은 정상적으로 RAM으로 표시가 되네요.





이건 어떤 의미가 있을까요?

A1의 SLOT 0를 강제로 확장하고, Page2에서 구동되는 롬을 4개 박아넣는 것도 가능하다? 정도겠죠.

지금 제가 원하는건 Page2를 쓸 수 있느냐 없느냐...니까 이건 걍 넘어갑니다. ㅎ.ㅎ



그럼 A1GT에서 테스트를 해보아요~

GT는 SLOT 0가 이미 확장이 되어있으니, 각 서브슬롯에 비어있는 Page를 모두 RAM으로 할당합니다.

결과는 아래 사진처럼 나옵니다. 참고로 CPU는 Z80 노말모드입니다.





SLOT 0-0 Page2,3은 정상 동작

SLOT 0-1 Page0,1,2,3은 정상 동작

SLOT 0-2 Page0은 사용불가, Page2,3은 정상동작

SLOT 0-3 Page0,2,3은 정상 동작


SLOT 0-0,0-1,0-3은 예상했던 것처럼 잘 동작이 되는데, SLOT 0-2은 Page0을 쓰지 못하네요.

아마 FM BIOS롬을 칩셀렉트할 때, Page0,1이 함께 선택되는게 아닐까 싶습니다.

근데 실제로 SLOT을 덤프해보면 값은 FFH로 되는걸 보면 단순 어드레스 미러는 아니더라구요.


참고로 SLOT 0-3 Page1은 EMPTY로 표시되는데, 실제로는 여기에 터보알 로고 루틴이 있습니다.

슬롯체커 프로그램에서 인식이 안되어 "EMPTY"로 나타나는 것으로 보면 되겠습니다.


.

.

근데 터보알 유저라면 이쯤에서 의문이 들겠죠? ㅎ.ㅎ

당근 R800 고속모드에서는 다르게 동작합니다.


먼저 R800 ROM 모드에서 구동한 모습입니다.





다음은 R800 DRAM 모드에서 구동한 모습입니다.





DRAM 모드에서는 BIOS shadow기능 때문에 조금 차이가 나는걸로 생각되는데요.

중요한건 ROM/DRAM 모두 SLOT 0-1 외에는 외부 액세스가 안되고 있습니다.

결국 일반적인 S/W의 경우는 SLOT 0-0,0-2,0-3을 못 쓴다는 얘기인거죠.


그럼 SLTX 설정 S/W를 SLOT 0-1에 넣어야될까요?

흐... 그러면 SLOT 하나를 몽땅 점유해야되니 아까워서 안되겠구요.

그냥 Z80 모드에서만 설정 S/W를 구동하는걸로 정리하면 되겠습니다.


SLOT 0-0 Page2를 사용하게 되면,

통상적인 부팅에서는 항상 Z80 모드가 되니 별문제는 안되겠습니다요~



[ 결론 ]


- SLTX 설정 용 프로그램은 롬 S/W로 구현한다.

- 사용하는 기종에 따라 SLOT 0 또는 SLOT 0-x의 Page2에 넣는다.

- SLOT 0 확장된 기종에서는 기본적으로 SLOT 0-0 Page2를 사용.

  만약 SLOT 0-0를 못쓰는 경우라면 0-1,0-2,0-3 영역을 사용.


간단하네요! ㅎ.ㅎㅋ

.

.

.

사실 위에 쓴 내용들은 SLTX PCB를 그리기 전에 확인했던 것들입니다.

실제로 구현되는지 확인 안해보고 PCB부터 그리면 안되니까요~ ㅎ.ㅎ


그럼, 진짜로 구현해서 넣어보면 어떻게 되는지 한번 보시죠!

아참 SLTX 설정 프로그램의 이름은 "SLTX-Manager"입니다.


GT에서 7-SLOT 모드로 구동한 모습입니다.

SLTX-Manager가 SLOT 0-0에서 가장 먼저 구동되고 있습니다.

그 다음으로 SLOT 0-1의 PAC-V가 구동되는 모습이구요.


SLTX-Manager에서는 각 슬롯을 스캔해서 약간의 부가정보를 보여줍니다.

주로 INIT 루틴에서 아무런 메시지를 보여주지 않는 것들이 되겠네요.





이번엔 10-SLOT 모드로 구동한 모습입니다.

V4가 서브슬롯에서 구동되어, BASIC'n 롬이 보이지 않는 상황입니다. 참고하세요.





SLT-Manager의 세부 기능에 대한 것들은 다음편으로 넘겨야겠네요.


그럼 이만~~ ㅎ.ㅎ/


댓글 없음:

댓글 쓰기