2026년 10월 10일 토요일

21세기 DOS 프로그래밍 #2 - HI-TECH C

2003년 MSX에서 쓸 수 있는 C 컴파일러를 찾아보니 너댓개 정도 나오더라구요.

MSX-C, z88dk, HI-TECH C 등.


일단 MSX-C는 구닥다리 K&R 스타일이라서 그닥 관심이 없었는데요.

DOS2 전용 버전도 파일 입출력만 겨우 구현된 거라서 딱히 장점은 없었습니다.


이리저리 살피다가 결국 CP/M용 HI-TECH C를 선택했습니다.

89년에 나온 v3.09 버전인데, 이게 일단 ANSI C입니다.

나중에 제작사가 퍼블릭으로 풀어버렸더라구요. (이미 CP/M이 시장에서 사라졌)

사후지원을 안하는 대신 라이브러리는 소스로 포함해줬네요.

CP/M보다는 DOS/DOS2쪽으로 개발하는 게 목적이라서, 제게 딱 맞는 툴이었습니다 ㅎ.ㅎ


테스트 해보니,

스택의 로컬 변수 접근은 IX, IY 레지스터를 사용하는 방식이었구요.

라이브러리는 CP/M 스타일의 레코드 단위(128바이트) 처리라서 MSX에서는 손해를 보는 구조.

옵티마이저는 근거리 JR 선택해주는 기능 뿐이라서, 이건 버리고 따로 툴을 만들면 되겠더라구요.


컴파일러를 구동하는 환경은 처음에는 paraMSX를 이용했습니다.

에뮬의 CPU 속도를 올리면 그럭저럭 쓸만했어요.


나중에는 윈도용 에뮬레이터인 CP/M EXEcutor를 이용했습니다.

윈도의 폴더를 CP/M의 드라이브로 매핑해주는 기능이 있어서, make나 기타 툴을 사용할 때도 좋았죠.


최종 목표는

- DOS2 메모리매퍼

- R800 최적화

- 비트맵 그래픽 및 각종 사운드

등의 구현입니다.


MSX의 BDOS는

CP/M 2.2의 기본 호환에 MSX-DOS 전용 콜을 덧붙인 모습이구요.

이후 MSX-DOS2가 나오면서 전용 콜이 추가되었죠.

전체적으로 구버전의 MS-DOS랑 비슷합니다.


1차 목표는,

당시 MMC/SD 개발 관련으로 필요한 것들로 선정했습니다.

- 실행중인 DOS 버전에 따른 BDOS 콜 처리 (DOS2의 파일 핸들러가 더 좋죠)

- VDP 기본 기능 (VRAM R/W 등)

- SLOT R/W


ATLOAD -> 플래쉬롬 다운로더

DISKMAN, FLASHMAN -> MMC/SD 툴

MPXP -> MPX용 MP3 플레이어

등의 필요한 프로그램들을 하나씩 만들었네요.


당시 MMC/SD V1, V2 관련 툴은 기본 사양을 DOS용으로 만들어야해서 많이 힘들었어요.

램 64KB의 압박 ㅎ.ㅎ


2008년 MMC/SD V2.2 때, 많은 분들이 램을 늘려서 DOS2를 쓰게 됩니다.

'램은 기본 512KB로 늘리세요', 'DOS2가 좋아요', '터보알 ST는 램업 안하면 무쓸모'

등의 잡설로 제가 좀 압박을 했었지요ㅋ


2003년 ~ 2008년은 주로 MSX-DOS 프로그램을 만들게 되었네요.


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


2026년 10월 8일 목요일

21세기 DOS 프로그래밍 #1 - 재시작

MSX-DOS 얘기입니다만, MS-DOS도 잠시 나오니 당황하지 마시고~ ㅎ.ㅎ


옛날 얘기부터 나갑니다요~

국딩 때는 MSX-DOS의 명령어와 Disk BASIC의 명령어가 비슷해서 머리가 어지러웠던 기억이 나네요.


예를 들면요.

COPY 명령은 BASIC과 DOS가 똑같은 복사를 의미하지만,

BASIC에서는 VRAM 데이터를 디스크에 저장/로드가 가능합니다.

물론 DOS에서는 DEVICE로 복사도 가능하죠.

파일을 삭제하는 명령은 BASIC에서는 KILL을 쓰고, DOS에서는 DEL을 쓰죠.


근데 어린이의 머리를 가장 복잡하게 한 것은...

BASIC으로는 DOS용 프로그램(*.COM)을 만들지 못한다는 거였습니다.


그 시절엔 파스칼, C 등의 컴파일러가 존재한다는 것도 몰랐고,

그냥 파워업 테크닉, 기계어 입문 등의 책을 보면서 어셈블리를 하게 되었는데요.

Disk BASIC으로 만든 BASIC 코드에 어셈 코드를 섞어서 만드는 식으로 프로그래밍을 했었죠.

VDP 커맨드 등의 어려웠던 부분은 BASIC 명령을 쓰고, 간단한 루틴만 어셈을 쓰는 구조로...ㅋ


드디어 중딩 때 'MSX-DOS 슈퍼핸드북' 번역본을 사서 DOS 프로그래밍에 도전을 했습니다.

아래의 책입니다. 아마 갖고 계신 분이 많을 듯요.

뒷장을 열어보니 제일서적에서 구매했었네요 ㅎ.ㅎ



DOS에서는 전체 64KB 메모리(물론 WORKAREA는 제외하구요)를 쓸 수 있다는 장점이 있습니다.

근데 공부를 해보니,

일단 FCB로 파일 입출력도 어렵고, BASIC의 도움을 받던 코드를 모두 어셈으로 코딩해야하니...

결국 간단한 코드만 테스트해보고, DOS 프로그래밍은 포기했네요 ㅠ.ㅠ

BASIC + 어셈 스타일로 다시 돌아가서 고딩시절까지 쭈욱~ 지나왔습니다.


대학 입학 후에는 486 PC를 쓰면서 C를 공부하기 시작했구요.

486의 어마어마한 속도과 컴파일러의 힘으로 MSX Z80 시절의 코딩과는 멀어졌습니다.


대학 시절에는 MS-DOS용 FEEDBACK도 만들어보고, DJGPP로 fMSX를 포팅해서 놀다가 입대를 했네요.

98년에 제대하고 돌아왔더니, 이젠 윈도 PC가 대세였고 부두2의 3D 그래픽으로 난리였던 시절이 됐습니다.


그렇게 DOS 프로그래밍에서 멀어졌네요.

생각해보니 제가 DOS용 프로그래밍을 했던 기간이 3년정도 되더라구요.

.

.

.

시간은 흘러 2003년이 되었습니다.


무작정 '터보알을 써보자'라는 생각이 들어 파나소닉 A1GT를 구했는데요.

이리저리 테스트를 해보니 생각보다 성능이 꽤 좋더라구요.

게다가 DOS2 내장에 롬디스크, 램디스크를 활용하니까 너무 편하구요.


근데 터보알에서 FDD를 써야한다면 죽도 밥도 안되겠더라구요.

나중에야 알게 됐지만, 일본에서는 이미 80년대에 MSX-DOS2 카트리지와 HDD 인터페이스를 팔았더라구요.

90년대에는 MEGA-SCSI 등의 자작 인터페이스도 유행했었구요. 

물론 저는 구경도 못 해봤다는 거ㅋ


먼저 SD카드로 대용량 고속 디스크 기기를 만들어야겠다는 결론에 도달합니다.

다시 MSX-DOS 프로그래밍을 해야되니, 이제는 C를 쓰면 편하겠지? 라고 생각도 했구요.



여기까지가 서론이었네요.

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


2026년 10월 5일 월요일

21세기 MSX 활용 #12 - MSX-Audio

87년에 나온 FM 사운드 기기입니다.

외부 디자인은 86년식 파나소닉 MSX2 FS-A1에 맞춘 걸로 알고 있어요.


Y8950칩으로 구성되어, OPL(YM3536)의 FM 사운드와 4bit ADPCM 32KB(256KB 확장가능)를 가집니다.

MSX의 기본 사운드칩인 PSG에 비하면 어마어마한 사양이죠.


한가지 문제라면...

MSX2 본체 FS-A1  = 29800엔

MSX-Audio FS-CA1 = 34800엔

본체랑 사운드카드 가격이 바뀐 것 같은 느낌입니다 ㅎ.ㅎ


결국 나중에 나온 저가형 MSX-Music가 성공하면서 MSX-Audio는 이름만 남았습니다.

그래도 아스키, 컴파일에서 나온 S/W가 MSX-Audio를 지원하는 경우가 조금 있었어요.


Y8950은 필립스의 NMS-1205 (Music Module)으로 유럽에서 유행했습니다.

Audio BIOS가 빠진 기기라서, 사실 MSX-Audio라고 부를 수는 없지만요.

개조용 보드를 붙여서 Audio BIOS와 샘플램 256KB 확장해서 쓰는 것도 유행했습니다.

저는 샘플램만 256KB로 개조해서 썼던 추억이 있네요 ㅎ.ㅎ


이제 21세기가 되어서, 예전의 MSX-Audio 사운드를 쓰려는 분들이 많이 나왔습니다.

오리지널 FS-CA1은 덩치가 커서 실사용하기엔 좀 불편하구요.

호환 기기(뮤직모듈 등)를 쓰거나 제가 만든 MoonBase랑 선라이즈의 MoonSound를 조합하는 걸 추천합니다.


MoonBase와 MoonSound (또는 호환 OPL4 카트리지)를 연결하면,

본체에서는 MSX-Audio로 인식해서 사용가능합니다. 물론 샘플램은 256KB 최대치로 되어있어요.


MSX S/W는 FM 사운드 사용 시, 대부분 아래의 4가지 시나리오를 따릅니다.

MSX-Audio 전용

MSX-Music 전용

MSX-Music + MSX-Audio

OPL4 전용


MoonBase는 내부에 OPL 칩이 없지만,

MSX-Audio 포트를 OPL4의 2번 FM 사운드 포트로 연결해서 구동합니다.

참고로 OPL4의 FM 사운드는 OPL3로 되어있구요.

OPL3는 OPL2 x 2개를 합친 기능이죠.


결국 MoonBase + MoonSound (OPL4) 구조에서

MSX-Audio 전용, MSX-Music + MSX-Audio 조합, OPL4 전용

시나리오를 커버할 수 있게 됩니다.

슬롯 1개만 쓰는 환경으로 가장 편한 방법이에요 ㅎ.ㅎ


그리고,

MoonBase는 OPLL용 드럼 사운드를 PCM 사운드로 출력하는 기능도 있으니,

MSX-Music을 쓰는 경우에도 강력한 드럼 사운드를 즐길 수 있습니다.


부팅 시 M을 눌러 PCM 드럼 사운드 모드로 전환하거나,

MMCSD.COM 에서 /Mxx 옵션을 사용하면 됩니다.

예) /M04 드럼셋 1번, 볼륨 4

    /M15 드럼셋 2번, 볼륨 5



그럼, 21세기 MSX 활용편은 이번 MSX-Audio로 마무리합니다.


MSX 표준기기로 포함되지 않은 기기들도 많이 있습니다만,

해당 기기를 갖고 계신 분들은 이미 용도를 잘 아실테니 넘어갑니다요~ ㅎ.ㅎ

-> SCC, SCC-I, SFG (YM2151), MoonSound (OPL4), V9990, Sec-PSG, DCSG, T-Wave, Darky, NeoTron, MIDI-PAC 등