2026년 10월 17일 토요일

21세기 DOS 프로그래밍 #6 - M 파일매니저

DOS2에서는 서브디렉토리, 환경변수를 쓸 수 있어서 편리합니다.

메모리매퍼용 확장 BIOS가 포함되어서, 여러 프로그램들이 충돌없이 메모리를 활용할 수 있죠.


시스템 세그먼트에 로딩되면 램상주가 가능하니까, 용량 큰 프로그램을 제작할 때도 편리합니다.

초기 로딩 한번이면 이후는 빠르게 구동할 수 있어요.


예전 ST가 처음 나왔을 때에는 가용 메모리가 적어서 사실 DOS2가 그닥 활용되지 않았지만,

지금은 넉넉한 메모리를 쓰는 분들이 많아서 걱정없는 코딩이 가능합니다 ㅎ.ㅎ


그럼, DOS2용으로 쓸만한 파일매니저를 만들어봅니다.

90년대 MS-DOS 시절, Mdir과 NC를 써보셨으리라 생각됩니다.

Mdir은 하나의 디렉토리 내에서 필요한 여러가지 작업하거나 파일 확장자에 따른 메뉴 처리가 편하구요.

NC는 두개의 디렉토리를 비교하거나 같이 작업할 때, 또는 DOS 출력과 파일목록을 동시에 볼 때 편리하죠.


M 파일매니저의 이름에서 눈치를 채셨겠지만, 기본적으로 Mdir의 장점을 많이 가져왔습니다.

대신 NC의 듀얼 패널 형태의 디스플레이를 사용합니다.

디렉토리 복사 시, 재귀로 동작하니까 서브디렉토리를 함께 복사할 때도 편리합니다.


인터레이스 모드에서 한글폰트(16 x 16) 출력을 위해, 영문폰트도 8 x 16 사이즈를 사용했구요.

기본 영문,한글 폰트는 프로그램에 내장됩니다.

폰트팩이 존재하는 경우는 폰트팩의 데이터를 우선으로 사용하도록 되어있어요.


기본 디스플레이 영역은 512 x 424입니다만,

H/W 스크롤로 아래 영역의 VRAM도 모두(512 x 512) 사용합니다.

메모리매퍼와 VRAM을 마구마구 써버리는 프로그램이 되었죠 ㅎ.ㅎ


그 외, IMS, MP3 플레이어와 LED 비주얼라이저가 들어갑니다. 간단한 그래픽 파일 뷰어도 내장했구요.

M의 메인 화면을 유지한 상태에서 외부 프로그램을 백그라운드로 실행하는 기능도 있습니다.


초기에는 인터레이스 모드 전용이었는데, 넌인터레이스 영문 디스플레이 전용 옵션도 들어갔습니다.

고속모드가 없는 일반 MSX2에서도 그럭저럭 쓸 수 있게 되었죠.


최근에는 개선된 LFN 모드와 WAU용 MP3 스트리밍과 간이 브라우저 기능도 들어갔네요.

앞으로 새로 나오는 주변기기가 있다면, 내장기능도 계속 추가되겠습니다.


첫 버전이 2010년에 나왔으니까 참 오랫동안 개발중인 프로그램입니다요.

아마 제가 실기 사용을 멈추는 날까지 버전업이 되겠죠? ㅎ.ㅎ


아래는 LFN 모드에서 MP3 플레이어가 동작하는 모습입니다.


그럼, 다음 편에서 이어집니다요~


2026년 10월 15일 목요일

21세기 DOS 프로그래밍 #5 - HV 한글 뷰어

그래픽 라이브러리는 인터레이스 모드에서 쓸 수 있도록 만들었습니다.

참고로, 인터레이스 관련된 기능은 BASIC에 구현이 안되어 있는데요.

이게 VDP의 인터레이스 출력은 단순히 두개의 VRAM 페이지를 홀짝 필드에 맞춰 전환하는 기능뿐이거든요.

따라서 VDP 커맨드도 인터레이스 출력과는 무관하게 VRAM에서만 동작합니다.

결국 소프트로 다 처리해야한다는 얘기죠.


사실 80,90년대에는 인터레이스 모드를 쓸 생각을 전혀 안했습니다.

2000년대 들어서니, 대부분의 TV/모니터에 디인터레이서가 탑재되고, 100Hz/120Hz 같은 기능도 들어갔죠.

이제는 GT에서 CALL KANJI2 등의 인터레이스 모드를 써도 깔끔하게 볼 수 있습니다.

480i를 활용해도 좋은 시절이 되었습니다요~ ㅎ.ㅎ


인터레이스 테스트용으로 한글 문서를 볼 수 있는 프로그램을 만들게 되었구요. 이름이 HV입니다.

한글 폰트는 844 조합형을 내장했습니다. 용량이 작으니까 부담이 없죠.

문제는 KS C 5601 전체를 지원하려면, 특수문자 37KB, 한자 153KB를 로딩하는 부담이 있었네요.


결국, HV는 아스키, 한글폰트만 내장하도록 했습니다.

대신 특수 문자와 한자 폰트가 메모리로 로딩되어 있으면 활용 할 수 있도록 구성했죠.

폰트는 메모리매퍼의 시스템 세그먼트로 로딩해서 계속 램상주가 되니,

다른 프로그램에서도 활용할 수 있는데요. M 파일매니저에서도 이용하고 있습니다 ㅎ.ㅎ


예전에 이걸 공개했을 때에도 관심을 보인 분이 1명도 없어서, 폰트 인터페이스는 따로 오픈안했어요ㅋ

지금은 폰트팩이 있으니 따로 로딩할 필요도 없어졌구요. SLT-Turbo는 폰트팩 V2가 내장이라~ ㅎ.ㅎ


암튼, 램상주 폰트는 아래 링크를 참고하세요.

순정 GT에 로딩하면 메인램 절반이 날아가는 마법! ㅎ.ㅎ


특수문자 폰트는 메모리매퍼 64KB를 점유합니다.

https://sharksym.blogspot.com/2014/10/ksspe-v10-ks5601.html


한자 폰트는 메모리매퍼 160KB를 점유합니다.

https://sharksym.blogspot.com/2014/10/kshanja-v10-ks5601.html


현재 HV는 폰트팩이 있으면, 해당 폰트를 우선으로 사용하구요.

폰트팩이 없으면 프로그램 내장 한글과 램상주 폰트(특수문자, 한자)를 사용합니다.

UTF-16 유니코드도 지원하니까, 예전 윈도에서 쓰이던 유니코드 문서를 활용할 때도 좋습니다.


아래는 최신 버전의 HV입니다.

https://sharksym.blogspot.com/2022/01/hv-v16-hangul-viewer-for-msx-dos2.html


그럼, 다음 편에서 이어집니다요~


2026년 10월 14일 수요일

21세기 DOS 프로그래밍 #4 - IMS 플레이어

이번 글 부터는 제가 만들었던 프로그램들과 그에 관련된 툴, 라이브러리 설명을 붙여보겠습니다.

대략 시간순으로 등장한다고 보시면 맞습니다~ ㅎ.ㅎ


그럼, 'IMS 플레이어'부터 시작합니다.


IMS 파일 아시죠? PC의 애드립, 사운드블라스터에서 OPL2를 이용한 음악파일인데요.

이걸 MSX-DOS2에서 연주해주는 프로그램을 만들어봤습니다.


기본적으로 MoonSound를 위해 만든 플레이어지만, OPLL만으로도 플레이 가능합니다.

BNK로 쓰이는 악기 이름과 비슷한 OPLL 내장 악기를 선택해주는 방식입니다.


이 프로그램은 메모리매퍼를 활용하는 가장 기본적인 프로그램입니다.

OPL4, OPLL을 위한 플레이어 루틴이 서로 다른 뱅크에 배치되어있습니다.

플레이 시, 어차피 하나의 칩만 사용할테니까 모든 코드를 하나의 뱅크에 넣으면 뱅크 용량만 커지겠죠?


일반적인 IMS 파일은 32KB ~ 128KB 정도입니다.

이 IMS 파일을 한번에 로딩하기 위해 메모리매퍼 세그먼트를 동적으로 할당하여 사용합니다.


만약 제가 90년대에 아이큐2000용으로 플레이어를 만들었다면?

아마 IMS 데이터를 VRAM에 로딩하는 방식을 썼을 것 같네요.

이제는 넉넉한 메모리로 편하게 프로그래밍을 할 수 있습니다. 역시 목마른 사람이 우물을 파는 게 좋아요.

그리고, turboR의 고속모드를 활용하려면 적극적으로 내장 메모리을 이용해야합니다!


아래는 IMSP 초기버전의 동작영상이니 구경하셔요~ ㅎ.ㅎ



아시다시피, M 파일매니저에 OPL4 전용의 IMSP 기능이 내장되어 있어서, 이젠 저도 안쓰는 프로그램이 됐지만...

만약 OPL4 사운드 카드가 없으시면 OPLL도 지원되니, 한번 트라이해보세요 ㅎ.ㅎ

아래 페이지에서 다운받을 수 있습니다.

https://sharksym.blogspot.com/2019/04/imsp-v06-ims-player-for-msx-dos2-2019.html




그럼, 다음 편에서 이어집니다요~