sharksym's MSX World

sharksym.egloos.com

포토로그


구글 애드센스 (블로그 기본)


DOS2용 SW개발시 메모리 활용방안 #2 by sharksym

제가 최근 파라동에 썼던 글을 옮겼습니다.

===============================================================================================

얼마전부터 만들던 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로 코딩할수 있게 되었습니다. ㅎ.ㅎ





Title MSXrating email rss

CCL

크리에이티브 커먼즈 라이선스
Yeongman Seo에 의해 작성된 저작물은, 별도의 라이선스 조건이 없는 경우 크리에이티브 커먼즈 저작자표시-동일조건변경허락 4.0 국제 라이선스에 따라 이용할 수 있습니다.

ClusterMaps

구글 애드센스 (세로 큰직사각형)

통계 위젯 (화이트)

118
212
165613

이 이글루를 링크한 사람 (화이트)

28