2023년 2월 5일 일요일

SLT-X V2 제작 #5 - Boot-ROM 구동

구버전 V1에서는 SLT-X 설정을 위한 프로그램이 내장되어있었습니다.

Manager ROM이라 불렀죠 (추억의 관리자 ㅎ.ㅎ)


SLT-X V2(이하 SLT-X)에서는 Manager가 삭제되고,

최소한의 기능이 들어간 프로그램으로 대체됩니다.


이름이 Boot-ROM입니다. 왜 이름이 바꼈냐구요?

.

.

.

이 프로그램이 실행되지 않으면 SLT-X가 확장슬롯으로 동작하지 않습니다ㅋ

그냥 I/O SLOT이 잔뜩 달린 물건(?)으로 동작합니다요~

일단 설정이 안되면 정상적으로 사용이 불가능해요. 그래서 걍 Boot-ROM으로 이름을 바꿨습니다.


그럼, 긴 설명 나갑니다~~

이하 내용은 MSX를 잘 모르시면 읽기 힘들 수 있으니까,

내려가다가 분위기 다운되면 대충 Skip하면서 가셔요~ ㅎ.ㅎ/



1) Boot-ROM의 실행


Boot-ROM은 MSX BUS의 SLOT 0의 page 2가 액세스 될 때, 강제로 실행됩니다.

그러니까 본체 내부에서 생성되는 SLOT 0 용 /SLTSL 신호를 따로 연결하지 않습니다.

이것 때무에 본체를 개조하는 것도 이상하지만, 단순 개조로는 안되는 거라서 힘들어요.


SLT-X는 내부적으로 PPI A8H 포트의 PSLOT 레지스터를 갖고 있습니다.

따라서 MSX 슬롯의 BUS가 동작할 때 슬롯 영역에서 chip enable되는 메모리가 없다면,

SLT-X가 본체 외부에서 BUS에 DATA를 강제로 올려버립니다.

그러니까 /SLTSL 신호와 서브슬롯 레지스터의 존재를 모른 상태로 동작합니다. 좀 무섭죠?ㅋ


암튼 이건 모든 MSX에서 가능한 건 아니구요.

본체의 SLOT 0의 page 2 영역이 비어있어야 가능합니다.

MSX1처럼 SLOT 0의 page 2,3에 램이 들어간 기종(싸구려 기종)은 사용불가입니다.

근데 page 3에 16KB 램만 박혀있는 울트라 싸구려 기종에서는 동작합니다ㅋㅋ


만약 SLOT 0가 확장되어 있다면, SLOT 0-0의 page 2 영역에서 실행되겠네요.

SLT-X H/W 입장에서는 본체쪽 SLOT 0가 확장되어있는지, 아닌지 알 방법이 없습니다. 참고하시구요.


Main BIOS가 각 슬롯의 Extension 프로그램을 검색/실행하는 타이밍에 Boot-ROM을 강제로 켜줍니다.

세가지 케이스가 있는데요.


- 본체의 SLOT 0가 확장이 안된 경우


Page 2의 Extension 프로그램을 검색하는 순간이 딱 한번이니까 그냥 이때 Boot-ROM을 실행하면 됩니다.

단지 주소값만으로 조건이 충족되니까요.


- 본체의 SLOT 0가 확장된 경우

본체 외부(SLT-X)에서는 SLOT 0의 확장슬롯 레지스터를 H/W가 접근할 수 없기 때문에,

현재 동작하는 서브슬롯이 누군지 확인할 방법이 없습니다.

대신 코드가 실행되는 주소는 알 수 있습니다. (MSX를 많이 만지다보면 꼼수만 늘게 되는데...ㅋ)


타이밍을 잘 잡으면, 첫 Extension 프로그램인 SLOT 0-0의 page 2에서 Boot-ROM을 켤 수 있습니다.

재빨리 구동 후 Boot-ROM을 끄고 원래 기능인 확장슬롯 모드로 돌아갑니다.


- 본체에 SLOT BUS에 DATA 버퍼칩이 존재하는 경우


이 버퍼칩은 대게 74LS245 류의 IC를 사용합니다.

DATA BUS의 방향을 정해줄 수 있구요. enable 신호를 끊어서, BUS의 신호를 분리 할 수도 있습니다.


문제는 여기서 발생하는데요.

대우의 CPC-300(아이큐2000), CPC-400(X-II)은 모두 74LS245칩이 들어있습니다.

BUS의 ADDRESS는 단방향 출력이라서, 어떤 상황이 되든 본체의 ADDRESS(주로 Z80이 생성)를 알 수 있습니다.

근데 DATA는 이 버퍼칩이 disable되면 본체 외부와 연결이 끊어지기 때문에 R/W가 모두 불가능해요.


SLT-X V1 때에는 이 구조를 해결할 방법을 못 찾아서 대우 기종에서는 Manager ROM을 구동할 수 없었어요.

그냥 이걸 끄고 그냥 값비싼(?) 확장슬롯으로 썼습니다.

참고로 V1은 모듈식으로 합체하는 방식이라서, 보드 두개를 합체하면 4-SLOT으로 쓸 수 있어요.

궁금하시면 옛날 글을 찾아보시고~ㅎ


어느날 아이디어가 하나 떠올랐습니다.

Boot-ROM을 X-II의 메인램(SLOT 0-2)에 로딩하면 다른 외부슬롯(SLT-X)의 Extension 프로그램보다 먼저 실행할 수 있겠더라구요.

근데, 본체 내부의 램에 Boot-ROM을 로딩해주는 놈(!)은 어디서 구해야할까요? ㅎ.ㅎ


긴 설명 나갑니다 ㄷㄷㄷ

MSX1은 Main BIOS에서 램 슬롯 검색, WORKAREA 초기화 등 기본 설정이 완료되면,

각 슬롯의 Extention 프로그램을 찾아다니게 됩니다.

이 프로그램들은 INIT만으로 끝나는 경우도 있고, CALL 명령 확장으로 등록되거나, BASIC 프로그램으로 등록되거나 그렇죠.


근데 MSX2로 넘어오면서 한가지 문제가 발생합니다.

Main BIOS 용량이 32KB(page 0,1)에 가득차있으니, 늘어난 BIOS 코드를 어딘가에 넣어야하는데요.

이걸 Sub BIOS (SUB-ROM, EXT-ROM 등으로 불립니다) 16KB(page 1)으로 만들어서 어딘가 다른 슬롯에 넣기로 한거죠.

그러니까 SLOT 0 (또는 SLOT 0-0)가 아닌 다른 슬롯에 넣고, Main BIOS에서는 이걸 찾아서 시스템에 등록/실행하기로 한거죠.

검색할 때는 프로그램의 ID를 체크합니다. 일반 프로그램은 ID가 "AB"이지만, Sub BIOS는 ID가 "CD"로 되어있어요.


여기서 한가지 재밌는 부분이 있는데요.

Sub BIOS를 하나만 찾는게 아니라, 모든 슬롯을 다 찾아서 등록합니다.

그러니까 MSX2를 설계할 때 굉장히 멀리 내다본거죠.

코드 사이즈가 늘어나서 BIOS를 넣을 공간이 부족하면 여러개의 슬롯으로 나눠서 쓴다거나,

외부 슬롯에 Sub BIOS를 추가한다거나 이런 것들이 가능해집니다.


결국 Boot-ROM을 Sub BIOS처럼 구동하도록 만들면

부팅 초기에 외부 슬롯(SLOT 1,2,3)에서 Boot-ROM을 실행하도록 만들 수 있겠죠?

SLT-X를 어떤 슬롯에 꽂아놓든 Boot-ROM은 그 슬롯의 서브슬롯 0에서 구동된다는 얘기입니다.

X-II의 후면 슬롯에 꽂았다면, SLOT 3-0에서 Boot-ROM이 실행되는 것이죠.

물론 이 Boot-ROM이 진짜 Sub BIOS처럼 시스템에 뭔가 등록하진 않습니다 ㅎ.ㅎ


요약하면,

대우 MSX2 기종에서는 Boot-ROM이 Sub BIOS처럼 실행이 됨.

Boot-ROM의 메인 코드는 메인램(SLOT 0-2 page 2)로 복사되어, 추후 Extension 프로그램으로 검색되어 실행됨.



2) Boot-ROM의 역할


구버전 V1에서는 SLT-X의 각 서브슬롯의 슬롯 번호 매핑, 예약핀(RSV_5/15)의 라우팅(본체쪽으로 신호를 역출력 가능)

등의 많은 기능이 들어있습니다.

그 때문에 가장 먼저(SLOT 0-0 page 2) 구동이 되어야하는 프로그램이었죠.

Boot-ROM도 비슷한 이유로 먼저 실행되서 설정을 해주는 기능을 갖고 있습니다.


하는 일은 대충 이렇습니다.

- 각 서브슬롯의 모드 설정 

  처음 전원이 켜지면 SLT-X는 본체에서 확장슬롯으로 인식이 되지않지만,

  Boot-ROM에서 설정이 완료되어야만, 확장슬롯으로 동작가능한 상태가 됩니다.


- 서브슬롯에 장착된 주변기기 목록 표시

  주변기기 중에서 부팅 시, 아무 정보를 표시하지않는 경우에 유용하게 쓸 수 있습니다.

  메인램의 슬롯도 확인가능합니다.


- 서브슬롯의 주변기기 중 초기 설정이 필요한 경우, 대신 설정함

  현재까지는 paraMSX-R의 메모리 전용모드(2048KB RAM mode)만 들어있습니다.

  커스텀 MusicROM과 FMPAC의 OPLL I/O를 조합하는 경우도 생각해봤는데, 실제 활용성이 없어서 이건 안넣었네요.

  XII-V(X-II 전용 LED 비주얼라이저)의 패턴 설정을 넣을까 고민중입니다. 아마 이건 들어갈 것 같아요 ㅎ.ㅎ


- CPC-400에서 MSX 부트로고 표시

  VDP 버전에 따른 MSX 로고를 표시합니다.

  순정본체의 V9938에서는 스크롤업 로고, 개조된 본체의 V9958에서는 좌우 스크롤합체 로고가 표시됩니다.



3) Boot-ROM의 종료


Boot-ROM의 실행도 복잡했지만, 종료도 만만하지 않습니다요.

Boot-ROM이 실행된 후 SLT-X를 바로 확장슬롯 모드로 전환하게 되면,

Main BIOS에서는 존재하지 않는 Boot-ROM의 CALL 엔트리, BASIC 엔트리를 읽어서 등록합니다 ㄷㄷㄷ

이 때문에 ADDRESS가 FFFFH로 등록되어서 부팅할 때 에러가 나면서 뻗습니다요 ㅎ.ㅎ


결국 Main BIOS에서 Page 2 프로그램의 BASIC 엔트리 8008H, 8009H를 읽을 때까지는,

Boot-ROM이 정상적으로 액세스 가능해야합니다.

해당 엔트리는 Boot-ROM에서 0000H으로 지정되어있습니다. 참고로 주소가 0이면 시스템에 등록안됩니다요.


암튼 Main BIOS의 이 지점을 통과하는 순간 재빨리 Boot-ROM을 끕니다.

그 후, Main BIOS는 다음 슬롯(예 SLOT 0-1 page1,2)를 검색하는데, 이 때 Boot-ROM으로 인한 BUS충돌을 막을 수 있어요.



.

.

.


Boot-ROM의 설명은 여기까지입니다.

아마 제대로 읽으셨다면 의문이 드실겁니다요 ㅎ.ㅎ


만약 내가 쓰는 본체는 SLOT 0가 DATA BUS 버퍼칩으로 분리되어있는데,

대우기종이 아니라서 SLOT 0-2에 램에 없다면 어떻게 되나요?

-> Boot-ROM 구동이 불가능합니다.

   어떻게든 SLOT 0-x에서 먼저 실행이 되어야 SLT-X 설정을 할 수 있는데, 이게 불가능 하니까 사용불가에요.


사용불가라면 SLT-X를 못 쓰는건가요?

-> Boot-ROM을 해제하는 기능이 있습니다.

   SLT-X 보드 아랫쪽에 Boot-ROM ON/OFF 스위치를 OFF에 놓으면 일반 확장 8-SLOT으로 동작합니다.

   이 때는 SLTX.COM 프로그램의 기본슬롯 전환 기능만 쓸 수 있어요. (사실, 이것만 써도 충분히 훌륭합니다. 응?ㅋ)


Boot-ROM 해제 스위치는 아래 사진을 참고하세요.





아래는 저의 X-II에서 부팅중인 모습입니다.

위에서 설명드린 것처럼 Boot-ROM이 SLOT 0-2에서 실행되는 것을 볼 수 있죠?





MSX 로고가 나오는 모습은 짧게 영상으로 찍었습니다.

순정 X-II에서 구동 시, MSX2 로고~





V9958로 개조된 X-II에서 구동 시, MSX2+ 로고~

PDP를 폰으로 찍은거라서 좀 이상하게 보이는데, 실제로는 화면 잘 나와욤.





근데, 로고가 없는걸 선호하시는 분도 계시겠죠?

SLTX.COM 프로그램으로 로고를 끌 수 있습니다. 참고하세요!



그럼 다음편에서 뵙겠습니다요~ ㅎ.ㅎ/


PS. 글자가 많아서 오타도 꽤 있을 것 같은데 대충 보셔욤


댓글 없음:

댓글 쓰기