벌써 내일이 토요일이군요. 정모날이죠~ ㅎ.ㅎ
정모 나눔용으로 카트리지 하나를 준비했습니다.
레이블은 이올로님께서 올려주신 이번 가을대문 이미지를 사용했어요~
롬파일도 다운로드를 하구요.
카트리지를 구동하면 "정모 기념 메시지"가 출력됩니다. 으흐흐~~
그럼, 내일 뵈어요~ ㅎ.ㅎ
벌써 내일이 토요일이군요. 정모날이죠~ ㅎ.ㅎ
정모 나눔용으로 카트리지 하나를 준비했습니다.
레이블은 이올로님께서 올려주신 이번 가을대문 이미지를 사용했어요~
롬파일도 다운로드를 하구요.
카트리지를 구동하면 "정모 기념 메시지"가 출력됩니다. 으흐흐~~
그럼, 내일 뵈어요~ ㅎ.ㅎ
[ 서론 ]
확장슬롯을 만들면, /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의 세부 기능에 대한 것들은 다음편으로 넘겨야겠네요.
그럼 이만~~ ㅎ.ㅎ/
SLT-X는 사용자 입맛에 맞춰 여러가지 조합(?)으로 구동할 수 있습니다.
기본적인 동작 모드는 현재 결합된 슬레이브 보드의 개수에 따라 자동으로 정해집니다.
부팅 중 SLTX 매니저 롬으로 모드를 변경하거나,
부팅 후 특정 슬롯의 모드를 바꾸는 등의 재설정을 할 수 있습니다.
매니저 롬은 마스터 보드에 내장되어있습니다.
256KB 플래쉬롬으로 들어있구요.
관리를 위한 프로그램과 SLTX의 초기설정을 저장하는 목적으로 사용됩니다.
매니저 롬에 관한 자세한 내용은 다음편(3편?ㅋ)에서 말씀드릴테니, 일단 넘어가셔요~ ㅎ.ㅎ
그럼, 각 동작 모드에 관한 설명이 나갑니다~
1. 1-SLOT 모드
마스터 보드 하나만 연결된 상태의 모드입니다.
보드에 장착된 플래쉬롬이 SLOT으로 연결되고, 슬롯 커넥터는 I/O SLOT으로만 동작됩니다.
결국, 일반적인 용도의 모드가 아니라는 얘기입니다.
이 모드에서 부팅하면, SLTX의 내부 설정을 위한 매니저 롬이 자동으로 실행됩니다.
만약 SLTX를 실기의 SLOT 2에 꽂았다면, 매니저 롬이 SLOT 2(기본슬롯 상태)에서 구동됩니다.
마스터 보드의 EX-SLOT 딥스위치는 원래 목적(EX-SLOT 신호설정)으로 사용되지 않고,
"안전모드"를 강제로 설정하는 용도로 사용됩니다.
EX-SLOT 딥스위치를 ON:ON 상태로 놓으면, "안전모드"로 설정됩니다.
이 상태에서는 각종 설정값이 디폴트로 구동됩니다.
참고로 디폴트 설정은 아래와 같습니다.
MANAGER ROM = OFF
ALL SUB SLOT = ON
ALL EX-SUB SLOT = ON
ALT-SLOT = I/O SLOT mode
SLOT-OUT = OFF
각각의 SLOT 명칭은 매니저롬을 설명 할 때, 알려드리겠습니다. (그냥 넘어가세요~ㅋ)
만약 매니저롬을 업데이트(플래쉬롬 다운로드) 도중 전원이 꺼지는 등의 사고(재난?) 발생 시,
안전모드로 부팅 후 다시 롬을 다운로드 할 수 있습니다.
2. 4-SLOT 모드
마스터 보드에 슬레이브 보드 1개를 연결한 상태의 모드입니다.
기본 기능은 통상의 확장슬롯과 같습니다.
슬롯 커넥터 4는 SUB SLOT으로 구동이 됩니다.
SLTX를 본체의 SLOT 2에 연결했다면, SUB SLOT은 SLOT 2-0,2-1,2-2,2-3으로 동작합니다.
부가기능으로는 SLOT-OUT을 쓸 수 있습니다.
특정 슬롯의 /SLTSL 신호를 /RSV1(5번핀) 또는 /RSV2(16번핀)으로 출력가능합니다.
SLOT-OUT에 관한 자세한 내용은 다음번에 알려드릴께요.
한줄 요약하면,
SLOT 0-x, SLOT 1-x, SLOT 2-x의 12개 슬롯 신호 중 2개를 선택/출력하는 기능입니다.
EX-SLOT 딥스위치는 1-SLOT 모드와 유사한 "안전모드"를 선택하는 용도로 사용됩니다.
딥스위치를 ON:ON 상태로 놓으면, 진짜 기본적인 확장슬롯(4슬롯)으로 동작하게 됩니다.
MANAGER ROM, ALT-SLOT, SLOT-OUT 모두 OFF됩니다.
3. 7-SLOT 모드
마스터 보드에 슬레이브 보드 2개를 연결한 상태의 모드입니다.
여기서부터가 진짜 SLTX의 제작목적과 연관된 부분입니다요~ ㅎ.ㅎ
슬롯 개수부터가 조금 요상하죠?
통상적인 6슬롯에 슬롯 한개가 더 붙은 형태입니다.
ALT 1, ALT 0 슬롯은 사용자가 /SLTSL 신호를 선택해서 구동합니다.
기본적으로는 /SLTSL OFF 상태라서, I/O SLOT으로 동작합니다.
SLOT 0,1,2 슬롯의 모든 서브슬롯 12개 중에서 선택가능합니다.
실제로는 11개가 되겠네요. SLOT 0-0은 못쓰니까요~ㅎ
파나소닉의 MSX2+, turboR 계열은 SLOT 0가 모두 확장되어있고,
사용하지 않는 슬롯이 한두개 정도가 있으니, 요걸 할당해서 사용하면 좋습니다.
보통 6슬롯을 만들 때에는, 본체를 개조해서 SLOT 0-1, 0-3의 /SLTSL 신호를 뽑아서 쓰는데요.
SLTX를 쓰면 본체를 개조할 필요가 없습니다. /SLTSL 신호를 직접 생성해서 사용합니다.
SUB 3,2,1,0 슬롯은 4-SLOT 모드와 동일한 일반 확장슬롯입니다.
EX-SLOT은 4가지 /SLTSL 신호 중에서 선택구동하는 슬롯입니다.
마스터 보드의 딥스위치를 통해 신호를 선택할 수 있습니다.
ON :ON = RSV 2 (슬롯 핀16번 입력신호)
ON :OFF = RSV 1 (슬롯 핀5번 입력신호)
OFF:ON = SLOT 2 (SLTX 내부생성 신호)
OFF:OFF = SLOT 1 (SLTX 내부생성 신호)
보통 확장슬롯 기기를 본체의 후면 슬롯에 연결하는 경우가 많은데요.
예를 들어,
SLTX를 GT 후면 슬롯(SLOT 2)에 연결하고, EX-SLOT을 SLOT 1으로 사용가능합니다.
이 때, GT의 상단 슬롯(SLOT 1)은 EX-SLOT과 같은 슬롯번호가 되니까, GT의 슬롯은 비워둬야합니다.
다른 예로,
SLTX를 X-II의 후편 슬롯(SLOT 3)에 연결하고 EX-SLOT을 SLOT 1으로 선택하면,
본체의 전면 슬롯을 비워두고 사용가능합니다.
만약 본체를 개조해서 RSV1, RSV2 핀을 /SLTSL로 출력하고 있다면,
EX-SLOT을 RSV1, RSV2 신호로 선택해서 쓸 수 있습니다.
또 다른 예로 ㅎ.ㅎ;
본체의 SLOT 0가 확장되어 있고 SLOT 0-2가 비어있는 상태인데, 이걸 EX-SLOT으로 뽑아내려면?
SLOT-OUT 출력으로 SLOT 0-2를 설정하고, 해당 SLOT-OUT 신호를 EX-SLOT의 RSV핀으로 선택하면 됩니다.
참고로 SLOT-OUT0는 RSV1으로 출력되고, SLOT-OUT1은 RSV2로 출력됩니다.
글로 적으니 좀 복잡한데, 머리속으로 그림을 한번 그려보셔요~ ㅎ.ㅎ
4. 10-SLOT 모드
마스터 보드에 슬레이브 보드 3개를 연결한 형태의 모드입니다.
사실 슬레이브 보드를 4개,5개,,, 계속 연결해도 10-SLOT 모드가 됩니다.
실제로 이렇게 쓰일 경우는 없겠지만...
4번째 슬레이브 보드부터는 해당 보드의 슬롯 커넥터는 전부 I/O SLOT으로만 동작합니다.
참고만 하세요~
7-SLOT 모드와 비슷하게 동작이 됩니다.
EX-SLOT에서 선택한 슬롯이 확장이 된다는 것이 차이입니다.
그러니까, SLTX를 GT의 후면 슬롯에 꽂고 EX-SLOT을 SLOT 1으로 선택하면,
통상의 확장슬롯 두개를 SLOT 1,2에 각각 꽂은 것과 비슷한 환경이 되는거지요.
만약 EX-SLOT을 RSV1, RSV2로 선택했을 때는
해당 신호가 기본 슬롯의 /SLTSL 신호가 아니라면, EX-SLOT가 확장슬롯이 되진않습니다.
EX-SUB 0 외의 1,2,3 슬롯은 그냥 I/O SLOT으로 동작하겠죠.
여기까지 각 동작 모드를 간단히 적어보았습니다.
대충 감이 오시죠? ㅎ.ㅎ
근데, 동작 모드를 부팅 중에 바꿀 수 있다고 했는데 기억하시나요? (글 앞부분에 있어요)
예를 들어 평소에는 슬레이브 보드 3개를 연결해서 10-SLOT 모드로 쓰다가,
뭔가가(?) 필요할 때, 7-SLOT 모드로 변경해서 EX-SLOT을 확장슬롯에서 기본슬롯으로 바꾼다거나..
그런걸 할 수 있어요.
그러면, 아래 사진처럼 슬롯 설정이 되겠네요.
7-SLOT에서 쓰는 슬롯 커넥터 외에는 모두 I/O SLOT으로 변경됩니다.
10-SLOT의 EX-SUB 3 자리가 EX-SLOT 기본슬롯으로 바뀌는데요.
기본슬롯과 확장슬롯에서 동작이 바뀌는 카트리지를 활용할 때 유용합니다.
paraMSX-R이 대표적인 예가 되겠네요.
요놈은 원래의 머신에뮬 기능을 쓰려면 기본슬롯에 꽂아야합니다.
만약 확장슬롯에 꽂으면 머신에뮬을 쓰지 못하기 때문에,
기동롬(STARTUP ROM)에서 paraMSX-R을 메모리매퍼 2048KB로 동작 모드를 바꿔줍니다.
그러니까 그냥 2MB 매퍼램팩이 되는거죠.
근데 이 때는 카트리지 구조가 바뀌니까 소프트 리셋도 함께 해줍니다.
결국 EX-SUB 3 자리에 꽂아두면, 부팅할 때마다 소프트 리셋을 한번씩 하게되겠죠.
설명이 길었지만...
진짜 메모리가 필요한 경우(대용량 VGM 재생 등)가 아니라면 잘 안썼다는 얘기입니다.
근데 이걸 SLTX가 미리 관리(?)를 해주면 편하게 쓸 수 있지않을까요?
평상시에는 paraMSX-R을 메모리매퍼 2048KB로 쓰고 소프트 리셋은 안해도 되도록~
paraMSX-R의 에뮬모드를 쓸때는 10-SLOT에서 7-SLOT모드로 바꾸고 EX-SLOT을 기본슬롯으로 구동~
사실 이 시나리오 때문에, SLTX의 요상한 구조가 만들어졌다고 보시면 맞습니다ㅋㅋ
실제로 동작 모습은 이렇습니다.
> 10-SLOT 모드에서 paraMSX-R가 메모리매퍼로 구동
> 7-SLOT 모드에서 paraMSX-R가 기본 모드로 구동
그럼, 다음편에서 뵙겠습니다요~ ㅎ.ㅎ/