2010년 6월 1일 화요일

DOS2 Banking Library & Build tool 제작 #2

얼마전부터 만들던 HI-TECH C용 뱅킹 라이브러리가 기본 틀이 완성되었습니다.

 

Makefile에서 소스 파일들을 뱅크 별로 목록만 만들면,

뱅크간 참조되는 함수 콜을 생성해서, DOS2의 세그먼트 전환으로 실행되도록 구현했습니다.

 

빌드가 완료되면, 실행파일(*.COM)과 각 뱅크의 코드 묶음(*.OVL)이 생성됩니다.

DOS2에서 실행하면 *.OVL 파일 크기에 따라 필요한 메모리 세그먼트를 할당 하고 파일을 로딩합니다.

로딩이 완료되면 main() 함수가 실행됩니다.


뱅크 내의 각 함수(main 함수 포함)들은 크기 제한(32KB)외에는 자유롭게 뱅크를 선택해서 만들수 있습니다.

 

뱅크간 참조 함수 처리는 빌드시, 특정 프로그램으로 생성되는데요. 아래의 순서로 진행됩니다.

 

1. 각 뱅크별로 소스들을 컴파일 하고, 임시로 라이브러리와 링크를 수행합니다.

    이 때, 링크 시 없는 함수들은 따로 리스트를 만들어 놓습니다. (*.LST 파일)

 

2. 각 뱅크별로 소스들만 컴파일/링크해서, 존재하는 함수 목록을 만듭니다. (링크 시 생성된 *.MAP 사용)

 

3. 모든 소스의 함수들의 실제 엔트리 주소와 뱅크 번호를 모아서 목록을 만듭니다. (*.REF 파일)

 

4. 1번 리스트에 등록된 함수와 3번의 전체 함수 목록을 참조해서,

    뱅크 전환 후 점프되는 가짜 함수를 만듭니다. (어셈블리 *.AS 생성)

 

5. 각 뱅크별 소스와 가짜 함수 코드를 같이 컴파일해서 링크합니다.

    참고로 가짜 함수는 콜을 하는 소스와 같은 뱅크에 존재하지만,

    실제 실행되면 진짜 함수가 존재하는 뱅크로 메모리 전환 후 콜됩니다.

    함수에서 리턴시, 원래 뱅크로 복귀.

 

6. 뱅크0의 코드는 Loader프로그램과 함해져서 실행파일(*.COM)로 생성되고,

   나머지 뱅크들은 1개의 *.OVL 파일로 합쳐집니다.

 

 

아래는 MSX 에뮬레이터에서 MSX-DOS2 환경으로 실행된 모습입니다.

뱅크가 3개인 프로그램(TESTAPP)를 실행한 모습입니다.

뱅크0는 기본으로 로딩되기 때문에 2개 뱅크(4개 메모리 세그먼트)가 추가로 할당되는 모습을 볼수 있습니다.




라이브러리 및 빌드시 필요한 프로그램은 좀 더 정리되면, 자료실에 업로드하겠습니다.

 

어셈블리 코드로 만들 필요가 없으니,

앞으로 메모리 걱정없이 편하게 C로 코딩할수 있게 되었습니다. ㅎ.ㅎ

2010년 5월 16일 일요일

파라동-4SLOT #3 케이스 합체 및 테스트

꿈꾸는 소년님이 제작하신 아크릴 케이스가 도착했습니다. ㅎ.ㅎ

6각 너트 드라이버가 없어서, 소형 롱노즈-플라이어로 열심히 돌렸습니다. ㅋ

케이스가 반짝반짝 아름답군요~~~

 

일단 파나소닉 MSX 3형제에 연결해서 잠깐 테스트했습니다.

(MSX2: FS-A1, MSX2+: FS-A1WSX, MSXturboR: FS-A1GT)

 

이미 테스트 하신 분과 같이,

FS-A1에서 매퍼램을 켰을때, 제대로 부팅이 되지 않았습니다.

제가 프로토타입으로 만든 확장슬롯+1MB 보드로 돌렸을때는

서브슬롯0에 램, 서브슬롯1또는2에 MMC/SD 드라이브 상태에서 동작이 되었는데...으흑...

 

이게 뭔가 HW적인 타이밍 문제가 있는 것 같습니다.

확장슬롯 + 램 + MMC/SD 드라이브 세개를 한번에 쓸때만 나오는 문제 같네요.

혹시나해서 IQ2000에서도 해봤는데 무한 리부팅됩니다. ㅡ.ㅡ;

 

풀업저항은 제 프로토타입이랑 같고

차이는 어드레스 라인과 MERQ등의 컨트롤 신호가 74LS244를 경유 하는 것인데요. (버퍼링과 슬롯 스위치 역할)

근데 이게 WSX랑 GT는 괜찮고 A1이랑 IQ2000만 문제가 생기니... 이유를 잘 모르겠습니다.

 

일단 FS-A1이나 IQ2000, X-II, 소니 MSX등에서 확장슬롯 연결해보신 분, 결과 좀 알려주세요.

X-II에서도 안될 확률이 높겠지만... 소니 MSX에서도 안되면... 좀 난감하네요. ㅜ.ㅜ;

 

  

아래 사진들은 WSX에서 서브슬롯0에 1024KB램, 서브슬롯1에 MMC/SD 드라이브 꽂고 테스트하는 모습입니다.

왼쪽에 세워놓은 사라만다 케이스는 지난 오프모임때 유령군님이 선물로 주신거에요. ㅎ.ㅎ

(사진 찍다보니 갑자기 생각나서 배경으로 등장했습니다. 두둥~ㅎ )





파나소닉 FS-A1 파워 개조

얼마전에 전원 어댑터가 없는 FS-A1을 샀었습니다.

뚜껑만 한번 열어보곤, 별로 만지지는 못했었지요. (어댑터가 없으니 당연한 건지도...ㅋ)

 

전원부를 어떡하나 고민하다가, 모 쇼핑몰에서 소형 ATX 파워를 하나 샀습니다.

요건 220V에 바로 연결되는게아닌, DC 12V 입력을 받아서 5V, 3.3V, +12V, -12V 를 출력해줍니다.

 

혹시 관심있으신 분은 아래 링크에서 해당 제품을 보실수 있습니다요.

http://www.eleparts.co.kr/front/productdetail.php?productcode=022005015001000004

가격이 26,400원으로 후덜덜하지만, 용도에 딱맞는 녀석이라 보자마자 바로 구매했습니다. ㅋ

 

 

아래는 제 A1 뚜껑을 벗긴 모습입니다.

좀 어둡게 찍혔군요.




원래 A1의 전원 입력은 외장 어댑터로 부터 DC 9V, AC 18V를 받도록 되어있습니다.

이걸로 MSX에서 주로 쓰이는 DC 5V, +12V, -12V로 바꾸게 됩니다요.




일단 메인보드 좌측 상단의 전원쪽 부품을 들어냅니다. (보드를 뒤집으면 우측 상단이네요.)

기존의 전원 스위치는 그대로 사용할수 있도록 주변 정리(?)를 했습니다.




아래 사진의 조그만 보드가 ATX 파워 서플라이입니다.

원래 제작사에서는 카PC에 쓰일 목적으로 만든 것 같네요.

소형 저전력 PC에 쓰면 딱맞겠습니다. (사실 MSX에는 좀 과분하죠...ㅋ)

참고로, 사진에서는 ATX 보드에 연결되는 커넥터가 제거되어 있습니다.





새로 장착된 파워 서플라이와 보드의 기존 5V, +12V, -12V 라인에 연결된 모습입니다.

78L12, 79L12의 O라고 표시된 부분에 +12V, -12V 연결하면 되고요.

5V는 본체의 커다란 방열판에 연결된 5V 레귤레이터의 2번째 핀이 있던 곳에 연결하면됩니다.



 

ATX 전원은 RGB 및 카세트 커넥터 있는 부분에 글루건으로 고정했습니다.

원래 이부분을 방열판이 덮고 있던 곳이지요.

본체 덮개랑 공간이 많이 있는 곳이라 대충 고정해도 괜찮은 것 같습니다.

 

사진에서 빨강/검정 전선이 외부 12V(5A) 어댑터에서 들어오는 전원이고요.

노랑색으로 5V 출력, 두개의 회색선은 +12V, -12V입니다.




외부 12V 어댑터 연결부를 찍어봤습니다. (촛점이 엉뚱한데에 맞춰있군요. ㅎ.ㅎ)

기존 3핀 전원 커넥터를 제거하고, 둥근 모양의 어댑터 잭을 달았습니다. 위치가 딱 맞습니다요.




키보드를 얹은 모습입니다.




원래 있던 부품들이네요.

이걸 따로 보관해야할까요... 아님 그냥 버릴까요? 흠~




부팅시 MSX 로고가 나온 모습입니다.

A1은 원가절감을 너무한건지... 리셋 버튼도 없고 CAPS/KANA LED도 없고 참 심플하네요.

대신 외부 전원 어댑터를 쓰느라 본체는 상당히 작고 가볍습니다.

간단히 롬팩 게임을 즐길때는 딱 좋을 것 같네요. ㅎ.ㅎ