레이블이 __TechNote인 게시물을 표시합니다. 모든 게시물 표시
레이블이 __TechNote인 게시물을 표시합니다. 모든 게시물 표시

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 등


2026년 10월 3일 토요일

21세기 MSX 활용 #11 - 확장슬롯

[서론]


이름은 익숙하지만 의외로 기능을 잘못 알고 계시는 분들이 있으세요.

제대로 알고 계신다면 [본론]으로 건너뛰세요! ㅎ.ㅎ/


슬롯 한개를 여러개로 나눠주는 것으로 이해하시는 분들이 많더라구요.

'본체의 기본슬롯에 확장슬롯을 꽂으면 4개의 서브슬롯으로 나눠집니다'

이 설명을 오해하면 다음에 이런 질문도 하게 됩니다요.

'그럼, 확장슬롯에 확장슬롯을 꽂으면 슬롯이 팍팍 늘어나겠네요! 맞죠?' ㅎ.ㅎ


일단 잊으시고, 이렇게 생각해보세요.

MSX의 슬롯은 16개의 서브슬롯(SUB0,1,2,3)으로 구성되고, 4개씩 묶어서 기본슬롯 번호가 붙어있습니다.

이름은 SLOT 기본슬롯번호-서브슬롯번호 순으로 붙입니다.

SLOT 0-0, 0-1, ... 3-3 까지 16개가 존재하게 됩니다요.


만약 서브슬롯이 존재하지 않는다면, 기본슬롯 1개로 동작이 됩니다.

예를들어 기본슬롯인 SLOT 0가 있다면, 서브슬롯인 SLOT 0-0,0-1,0-2,0-3은 없다는 얘기입니다.


대부분의 본체에서 상단/전면에 노출된 슬롯 커넥터는 SLOT 1입니다.

두번째 노출된 슬롯은 보통 SLOT 2 또는 3이 됩니다.

SLOT 0는 BIOS 롬이 탑재되니까 본체에 내장됩니다.


원래 슬롯 배치는 본체 제작사가 맘대로 결정할 수 있지만, MSX2+부터는 비슷하게 정해져있습니다.

SLOT 0-0,0-1,0-2,0-3 -> 본체 내장

SLOT 1 -> 외부 노출 슬롯

SLOT 2 -> 외부 노출 슬롯

SLOT 3-0,3-1,3-2,3-3 -> 본체 내장


슬롯을 설명할 때 기본슬롯, 서브슬롯 순으로 설명하는 것이 정석이지만,

이번에는 반대로 설명을 해봤습니다. 


[본론]


확장슬롯 기기는 본체에 노출된 기본슬롯에 꽂아서, 기본슬롯을 서브슬롯 4개로 바꾸는 역할을 합니다.

서브슬롯이 생성되면 당연히 기본슬롯은 사라지게 됩니다.

SLOT 1에 확장슬롯을 꽂으면 SLOT 1은 없어지고, SLOT 1-0,1-1,1-2,1-3 이렇게 생성되겠죠?


서브슬롯 2개 또는 3개만 들어있는 제품도 있으니 참고하시구요.

A1GT처럼 전원부가 빵빵한 기종은 괜찮을 수 있지만,

대부분의 기종에서는 확장슬롯을 고를 때 외부 전원을 입력받는 제품을 추천합니다 ㅎ.ㅎ


확장슬롯 중에는 서브슬롯 4개 외 I/O 슬롯이 추가된 경우도 있는데요.

원래 MSX에서는 이런 I/O 슬롯은 표준이 아닙니다만...

I/O 포트만으로 동작되는 기기를 쓰거나, 카트리지 내의 S/W를 강제로 OFF하고 I/O 기능만 쓸 때도 사용할 수 있죠.

이런 확장슬롯을 쓰려면, 내가 어떤 의도로 사용하는지를 명확히 알고 있어야하겠습니다.


만약 주변기기가 많지 않다면, 일반적인 확장슬롯(4SLOT) 하나만 있으면 충분한데요.

상단/전면의 슬롯은 게임 카트리지 등을 잠깐 꽂는 용도로 비워두고,

후면 슬롯에 확장슬롯을 장착하고 주변기기들을 주르륵 꽂아두면 대부분의 사용 시나리오를 커버할 수 있겠습니다.

제가 예전에 서브슬롯 4개 + 본체개조 SLOT 0-1 + I/O 슬롯으로 구성된 확장슬롯(슬롯 커넥터 6개)을 이렇게 썼습니다.

본체의 상단 SLOT 1에는 SCC-I 카트리지를 꽂아서 쓰다가, 가끔 게임팩을 꽂을 때 SCC-I랑 맞교대를 했었죠 ㅎ.ㅎ


만약 본체의 기본슬롯 2개에 확장슬롯 2개 꽂아서 쓰면, 공간도 많이 차지하고 케이블 관리도 귀찮게 되는데요.

제가 지난 20년간 여러 종류의 확장슬롯을 만들어서 쓰다보니, 최종으로 결정된 방식은 SLT-X V2입니다.

SLT-X가 뭔지 모르시는 분은 아래 글을 참고하시면 되겠습니다.

https://sharksym.blogspot.com/2026/07/slt-x.html


두 슬롯의 예약핀인 16번과 /SLTSL 핀 4번을 서로 교차하도록 개조를 하면,

SLT-X는 케이블 하나만으로 2개의 기본슬롯 신호를 받게 되니까, 서브슬롯 8개로 동작하게 됩니다.


확장슬롯을 쓰다보면 가끔 난감한 경우가 발생하는데요.

서브 슬롯에 장착된 기기를 인식 못하는 S/W가 가끔 있습니다.

유저가 자작한 프로그램에서 종종 발생하구요. 대충 만든 상용 프로그램들에서도 발견됩니다.

또는 카트리지 내부에 확장슬롯이 포함되어 있어서, 확장슬롯에 꽂으면 제대로 못 쓰는 경우도 있죠.


SLT-X에서는 이런 경우를 잠깐 회피하기 위해,

서브슬롯 1개를 기본슬롯으로 전환하고, 나머지 서브슬롯 3개는 I/O 슬롯으로 동작하도록 만들 수 있습니다.

본체의 리셋 버튼을 눌러도 이 설정은 유지되기 때문에, 서브슬롯 인식 문제를 피할 때 유용하게 쓸 수 있어요.

전원을 완전히 OFF 후 다시 ON 하면, 설정이 초기화되어 일반 서브슬롯로 돌아갑니다.


SLT-Turbo v2.1을 쓸 때에도 SLT-X V2를 연결하면 같은 방식으로 사용가능합니다.

사실 SLT-X 만들 때, SLT-Turbo를 고려해서 단순한 구조를 맞추려다 보니 그렇게 되긴 했네요. 흐...


암튼, 확장슬롯은 본인의 사용 환경에 맞춰 구성하시면 되겠습니다.



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


21세기 MSX 활용 #10 - 한글

40년전 MSX1,2에 내장된 한글은 N바이트, 2바이트 조합형 한글이었습니다.


80년대 후반부터 PC에서는 완성형 한글인 KS C 5601 (KS X 1001)가 쓰였고,

윈도95에서는 기존 완성형에서 빠진 한글을 채워넣은 CP949가 쓰였지요.

지금은 대부분 유니코드가 쓰이고 있습니다.

결국 이제 MSX에서 한글을 제대로 쓰려면 CP949, 유니코드를 지원하는 기기가 필요하다는 얘기겠죠?


MSX의 디스크의 최대 강점이라면, DOS의 FAT12, FAT16을 그대로 쓸 수 있다는 점인데요.

주변 기기의 도움을 받으면 LFN (Long Filename)에 쓰이는 UCS-2 (유니코드 BMP)도 쓸 수 있습니다.

윈도 SD카드의 폴더, 파일명을 한글로 길게 만들더라도, MSX에서도 똑같이 표시 가능합니다.


약간의 문제라면,

일본 내수 모델인 MSX2+, turboR에는 일어, 한자 입력기가 내장되어 있고,

DOS2에서 파일/폴더명의 마지막 문자가 ASCII 코드가 아니면 액세스 에러가 되는 경우가 생길 수 있습니다.

LFN을 쓰는 경우는 8.3 파일명의 끝이 ~1, ~2 등의 숫자로 끝나도록 바뀌므로, DOS2에서 문제가 생기지 않습니다.



한글을 활용할 때 필요한 주변기기로는 FontPack과 WAU 카트리지가 있습니다.


@ FontPack


FontPack의 ANSI 스크린은 64컬럼, 85컬럼을 지원합니다.

한글 폰트 사이즈는 16 x 16 및 12 x 12입니다.

한글/한자 입력기는 조합형, 완성형 모드를 지원합니다.

그 외 문자 코드 변환과 스크린 5,6,7용 컬러 데이터 출력 기능이 있어서, 빠른 처리가 가능합니다.

BASIC에서는 한글 출력 전용의 FNP: 디바이스가 추가되어있어서,

프로그램에서 일제 본체에서 기본 일어 출력(GRP:)과 한글 출력(FNP:)을 병행할 수 있습니다.

MSX2+,turboR 등에서 대우의 아이큐교실, X-II 튜터, 과일 데모 등의 예전 프로그램을 활용 가능합니다.


FontPack V2의 유니코드 폰트롬이 필요한 경우는,

M 파일매니저에서 LFN을 쓰거나, MP3의 ID3v2 tag를 사용할 때

HV (한글 뷰어)에서 유니코드 텍스트(UTF-16)를 처리할 때


SLT-Turbo v2.1에는 고속처리를 위해 FontPack V2가 내장되어 있으니,

외장형 FontPack 카트리지를 함께 사용하면 안됩니다!


@ WAU


80 x 25 터미널 모드 전용의 CP437, CP949 폰트롬이 들어있습니다.

한글 폰트 사이즈는 12 x 16이며, 스크린 5,7용 컬러 데이터 출력 기능이 있어서, 빠른 처리가 가능합니다.

WTERM의 뷰어 모드를 사용하면 텍스트문서를 보는 용도로 쓸 수 있습니다.



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


2026년 10월 1일 목요일

21세기 MSX 활용 #9 - DSK 에뮬

DSK 에뮬은 디스크 이미지 파일(*.DSK)을 일반 디스크(2DD, HDD)처럼 구동하는 것을 의미합니다.


상용 디스크 게임들은 대부분 1DD, 2DD 등의 3.5인치 디스켓으로 출시가 되었죠.

이런 게임 S/W들의 특징이 하나 있는데요.

파일 단위의 데이터 액세스를 하는 것이 아니라 절대 섹터 단위로 테이터 액세스를 하는 경우가 많습니다요.

결국 대용량의 디스크가 있더라도, 이런 S/W를 복사해서 실행하는 것 자체가 불가능하다는 얘기입니다.


게임을 만드는 입장에서 FCB 등의 파일핸들을 쓰지 않고 섹터를 직접 R/W하면, 속도는 빠르겠죠.

데이터를 연속으로 저장해놓으면 당연히 액세스 효율도 좋겠죠.


결국, 대용량 디스크를 쓰면서 2DD 게임을 실행하려면, 디스크 이미지 파일을 이용하는 방법뿐입니다.

실제로 구현하는 방법은 여러가지가 있겠지만,

저는 멀티 파티션 방식과 DSK 파일 방식을 썼습니다.



@ 멀티 파티션 방식


주 작업 환경이 MSX-DOS인 경우 쓰기 쉽도록 만들어졌는데요.

대용량 디스크에 수천개의 2DD 파티션을 만들고, 각 게임 DSK 파일을 복사해서 리스트를 만들어둡니다.

이걸 드라이브 A:의 파티션을 교체하는 식으로 게임을 실행하도록 했었죠.

파티션 관리를 위한 DISKMAN 이라는 전용 프로그램을 사용합니다.


일반 작업용 부팅 파티션에서는 일반 프로그램으로는 2DD 저장용 파티션에 접근할 수가 없어요.

드라이브 리스트에는 보이지 않습니다.

파티션의 섹터들을 순서대로 나눈 거라서, 에뮬하는 S/W쪽에서는 굉장히 안전하게 쓸 수 있는 장점이 있죠.


이 방식은 MMC/SD V1, V2 시절에 쓰였습니다.

당시에는 램 64KB뿐인 기본 MSX2를 쓰는 분이 많아서, MSX-DOS를 기준으로 기기를 만들어야하는 숙제(!)가 있었지요.



@ DSK 파일 방식


여러분들이 MMC/SD V2를 수년간 쓰면서, MSX-DOS2의 편리함과 FAT16 대용량에 익숙해졌습니다.

그러면서 본체램 512KB 증설 개조도 유행했지요.

M 파일 매니저 같은 MSX-DOS2 전용 프로그램도 많이 쓰이게 되었구요.


DOS2의 서브디렉토리, FAT16의 대용량 드라이브가 있다면...?

DISKMAN으로 파티션 교체하는 방식 보다는, *.DSK 파일들을 디스크롬에서 직접 에뮬을 해주는 것이 편하겠더라구요.

사용자 입장에서는 SD카드를 윈도에 연결해서 파일,폴더를 관리하는 것도 훨씬 편하게 느껴지겠죠.

DSK 파일이 크니까 실기에서 직접 복사하는 것도 꽤 인내가 필요합니다ㅋ


DSK 파일 에뮬의 가장 큰 걸림돌은,

S/W에서 물리 섹터 R/W 요청이 왔을 때, 흩어진 클러스터에서 파일 연결을 찾고, 실제 섹터로 R/W 해주는 부분이 되겠습니다.

원래는 DOS에서 처리하는 작업이겠지만, 에뮬이니까 MMC/SD 디스크롬 내에서 처리를 해야겠죠.

암튼 그렇게 구현이 되어서 지금까지 십여년간 잘 쓰이고 있습니다요 ㅎ.ㅎ



@ 현재 MMC/SD V3, V4의 DSK 에뮬은 이렇게 지원되니 참고하세요.


- 1DD/2DD 디스크 이미지 최대 10장 (멀티디스크 전환 가능)

- HDD 이미지 최대 32MB (FAT12 기준)

- ONE-Drive 기능 지원 (본체에 내장된 FDD를 무력화)

- 디스크롬 전환 (DOS1 또는 DOS2)



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


2026년 9월 27일 일요일

21세기 MSX 활용 #8 - ROM 카트리지 에뮬 (2)

이번에는 MMC/SD Drive V4의 메가램 및 GameRunner II에 관한 내용입니다.


2015년 MMC/SD V3를 만들기 전까지는 메가롬 게임을 실행할 때, 아래 기기를 조합해서 썼습니다.

MMC/SD V2 멀티롬, 코나미 SCC-I 128KB, 디럭스박스


근데 대부분은 MMC/SD V2 멀티롬을 쓰게 되더라구요.

아무래도 메가램 기기들은 게임을 로딩 후 일반 DOS2로 재부팅 시 번거롭기 때문이었는데요.

메가램 내의 램 내용이 지워지도록 전원 OFF 상태로 10초 이상 기다려야했죠.

특히 롬 테스트 용도로 사용하기엔 너무 귀찮아서...ㅎ


MMC/SD V2는 기본 부팅이 디스크롬이라서, 멀티롬 상태에서 리셋되면 바로 디스크로 돌아갑니다.

그래서 MMC/SD V3,V4의 메가램을 넣을 때에도 V2의 멀티롬처럼, 기본 부팅은 디스크롬으로 되도록 했죠.


디스크롬으로 부팅된다는 것을 바꿔말하면,

시스템에서는 메가램이 보이지 않게 된다는 의미입니다.

MMCSD.COM 프로그램에서만 롬파일 로딩 시, 내부 모드를 바꿔서 메가램쪽으로 로딩할 수 있습니다.


V4에서는 디스크롬에서 SD카드의 파일을 바로 메가램의 SRAM으로 바로 전송합니다.

DOS2의 DISK I/O 루틴을 쓰지 않기 때문에 로딩이 꽤 빠릅니다.


MSX-DOS와 MSX-DOS2는 디스크 액세스 시 큰 차이가 하나 존재하는데요.

MSX-DOS는 디스크와 다른 슬롯의 메모리로 직접 R/W가 가능합니다만,

MSX-DOS2는 무조건 메모리매퍼(데이터 세그먼트)를 쓰도록 되어있습니다요.

기기(슬롯)간의 다이렉트 전송이 불가능한 대신 일정한 전송속도을 얻게 되었죠. 빠릅니다!

참고로, MSX-DOS는 메모리 영역(주소)에 따라 전송 속도가 제각각입니다.


아마 turboR을 주로 쓰시는 분들은 아시겠지만,

MSX1에서만 동작하는 게임도 있고, 확장슬롯에서는 오동작하는 게임도 있고 그렇죠.

국산 아이큐1000,2000 전용 프로그램도 있구요.


그래서, paraMSX-R에서 구현했던 머신 에뮬의 기본 슬롯 처리만 V4에 살짝 넣었습니다.

본체를 MSX1, MSX2, MSX2+ 하위 기종처럼 보이도록 해주는 것이죠.

여기에 MSX1,2 모드에서는 JP,KR,EU BIOS도 선택가능합니다.


여기에 BIOS, 메가램과 디스크롬, 메인램이 모두 기본슬롯에 배치됩니다.

슬롯 구조에 따른 호환성에 문제가 있는 프로그램을 커버하기 위함이죠.

이 기능이 GameRunner II입니다.


수년을 거쳐 MMC/SD V4까지 오게 되니, turboR에서 불편했던 것들이 한방에 해결되었습니다요.


MMC/SD의 메가램, 멀티롬(FlashROM) 기능을 요약하면,

V1,V2 = 멀티롬 384KB (2메가롬 가능)

V2 Multi-ROM II = 멀티롬 512KB x 15개 (7.5MB)

V3 = 메가램 1MB + 서브롬 1MB

V4 = 메가램 2MB + 서브롬 4MB


마지막으로 하나 더 적어봅니다.

코나미 SCC, SCC-I 칩의 롬매퍼 기능인데요.

SCC 매퍼 -> 최대 512KB 롬

SCC-I 매퍼 -> 최대 128KB 램

으로 구성됩니다.


에뮬레이터(S/W 에뮬 및 CPLD,FPGA 구현)에서는

8K 매퍼의 최대용량인 2048KB 메모리를 SCC, SCC-I 매처로 설정하는 경우가 있습니다.

2000년 이후에 만들어진 게임 중에 이런 에뮬을 활용하는 경우가 있으니 참고하세요.


반대로, SCC-I의 경우는 128KB를 넘는 메모리를 쓰면 오동작하는 프로그램(예: SCMD)도 있습니다.

MMC/SD V4와 T-Wave의 SCC-I 매퍼에는 128KB, 512KB 등으로 제한하는 기능이 들어간 것도 이 때문입니다.


다음 편은 DSK 에뮬 이야기로 이어집니다...

2026년 9월 26일 토요일

21세기 MSX 활용 #7 - ROM 카트리지 에뮬 (1)

카트리지 중 주변기기로 제작된 것들을 제외하면, 순수 S/W로 된 ROM 카트리지가 남습니다.

이런 카트리지의 롬을 덤프하면 대략 아래의 4가지 종류가 나옵니다.


- 유틸리티 16KB, 32KB

- BASIC 게임 16KB

- 게임 16KB, 32KB, 48KB, 64KB

- 게임 메가롬 (128KB ~ )


MSX1 용 프로그램(유틸, 게임 등)은 램 요구사항이 8KB 또는 16KB입니다.

BASIC 게임은 코드가 Page 2로 매핑되도록 정해져 있어요.


용량이 16KB, 32KB, 48KB인 롬들은 램 64KB 기종에서 쉽게 에뮬을 할 수 있습니다.

주의 할 부분은, 여기서 램 64KB는 단일 슬롯에 장착된 램을 의미한다는 건데요.

만약 램 32KB 달린 MSX1의 외부 슬롯에 32KB 확장램을 장착하면?

MSX-DOS를 쓸 수는 있지만 게임롬 에뮬은 불가능합니다.


보통 게임 코드는 자신의 코드가 같은 슬롯에 있기 때문에 기동 시, Page 1,2의 슬롯을 맞춰주게 되는데요.

슬롯이 서로 다른 경우는 엉망이 되면서 실행이 불가능하게 됩니다.

물론 게임별로 하나하나 패치롬을 따로 만들면 되긴 하겠지만, 시간낭비겠죠?ㅋ


만약, 램 64KB인 기종의 Page 0,1,2 (0000H ~ BFFFH) 램에 롬을 로딩 후 재부팅하면 어떻게 될까요?

그 컴퓨터는 램 16KB 기종에 롬 카트리지를 꽂은 것처럼 동작하게 됩니다. 

이런 이유로, 램 64KB 또는 128KB 기종이 주류였던 국내는 복돌이 천국이 될 수 밖에 없었죠.

물론 게임 제작사가 이걸 막으려고 카피프로텍션 코드를 넣었지만, 크랙은 뭐 금방이죠 ㅎ.ㅎ;


그럼, 남은 건 64KB 용량의 롬과 메가롬인데요.

16K 롬매퍼를 쓰는 64KB 롬 -> 메모리 매퍼로 에뮬가능

롬매퍼가 없는 64KB 롬 -> Page 3의 데이터 접근 코드를 별도로 구현하거나 

 8K 롬매퍼의 메가롬 -> 메모리 매퍼로 분할 로딩 시 속도저하 발생 (실사용 불가능)

16K 롬매퍼의 메가롬 -> 메모리 매퍼로 에뮬가능


메모리 매퍼로 에뮬을 하려면, 본체의 메모리 용량이 롬 사이즈 보다는 커야합니다.

자낙EX처럼 롬 사이즈가 112KB인 경우는 아이큐2000의 램 128KB에서도 에뮬이 가능합니다.

수퍼람보 스페셜은 타이틀 그래픽을 제거해서 용량을 줄여놓은 버전도 나오고 그랬네요.


문제는 MSX2 본체만으로 에뮬이 불가능한, 8KB 매퍼를 쓰는 메가롬인데요.

ASCII 8K, KONAMI 8K, KONAMI SCC 류의 매퍼를 쓰는 롬이 되겠습니다요.

이건 딱히 방법이 없죠.

롬 대신 램 카트리지에 매퍼를 넣어서 에뮬을 하는 방식을 사용했습니다.

80년대에 나왔던 블랙박스, 디럭스박스 류의 기기입니다요.


TTL 로직칩으로 범용 매퍼를 간단하게 구현해서 넣고,

게임롬에서 해당 매퍼를 쓰도록 패치해서 램 카트리지에 로딩하면 끝!

언제부터인지 이런 기기를 MegaRAM이라고 부르고 있는데, 저도 걍 그렇게 부르고 있네요.


코나미의 스내처, SD스내처에 들어있는 SCC-I 사운드 카트리지는 램이 64KB가 들어있는데요.

보드의 램을 128KB로 증설하면 1메가전용 메가램 카트리지로 쓸 수 있습니다.

SCC-I가 SCC 사운드 하위호환이 되기 때문에 사라만다, 파로디우스 같은 게임을 구동하는 용도죠.


그 외, SCC롬팩을 개조해서 512KB FlashROM을 넣으면, 현존하는 코나미의 게임은 다 실행가능한데요.

2000년대에는 이런 SCC플래쉬롬팩을 만드는 게 유행이었네요.


써놓고 보니 서론이 좀 길군요 ㅎ.ㅎ


롬 에뮬을 요약하면,

- 메인램 64KB 또는 메모리 매퍼 사용

- 메가램 카트리지 사용

- 플래쉬롬 카트리지 사용


나머지 롬 에뮬 얘기는 다음 편에서 이어집니다...


2026년 9월 23일 수요일

21세기 MSX 활용 #6 - SDHC 32GB

SDHC는 'SD High Capacity'를 의미합니다.

기존 SD 메모리의 용량 한계를 늘리기 위해, 메모리 주소를 컨트롤하는 방식을 확장한 것인데요.

기존의 SD는 SDSC (Standard Capacity)로 부르기도 합니다.


SDHC의 용량은 4GB ~ 32GB입니다.

MSX-DOS2에서 드라이브 8개를 모두 FAT16 4GB 파티션으로 채우면 -> 4GB x 8 = 32GB

SDHC 한개로 MSX 최대 용량을 커버할 수 있게 됩니다. 기가막힌 사이즈! ㅎ.ㅎ


이 많은 용량을 어디에 쓰나요? 라고 하실 분도 계시겠네요.

저는 MP3랑 대용량 MV로 팍팍 채워놨습니다요.

제가 486 때 쓰던 HDD가 270MB였는데, MSX에서 180MB짜리 MV파일을 쓰게 될 줄은 몰랐네요ㅋ


MMC Disk를 처음 만들었을 때에는 MMC 256MB 메모리도 '넉넉해서 좋구나'의 느낌이었죠.

MMC/SD V2때는 MMC는 이미 단종되고 SD 2GB 메모리가 대세였구요.

MMC/SD V3, V4를 만들 때는 번들 메모리가 SDHC 8GB -> 16GB -> 32GB로 바뀌었던 기억도 납니다.


아마 V4를 구매하신 분이라면 32GB 메모리에 파티션 7개만 설정되어 있는데요.

이게 본체의 FDD를 활용하려면 마지막 드라이브 문자(H:) 1개를 남겨야 해서 7개만 세팅되어있어요.

V4랑 FDD를 함께 쓰는 경우가 별로 없다면, 그냥 4GB 파티션을 추가해서 쓰셔도 좋겠습니다.

저는 그렇게 쓰고 있어요. FDD는 단독으로 쓸 때만 사용하구요.


그나저나 MMC/SD V3 때 SDHC로 갈아탄지 12년째인데...

언젠가는 SDHC도 단종되겠죠? 미리 쟁여놔야하나 그런 생각도 해봅니다ㅋ


디스크에 관한 얘기만 연속으로 5편을 썼네요. 이번 글로 디스크 얘기는 END입니다! ㅎ.ㅎ


그럼, 다음 편에서...


2026년 9월 22일 화요일

21세기 MSX 활용 #5 - FAT16

turboR의 빠른 CPU와 MMC/SD 같은 고속 디스크, 이것만으로는 MSX를 갖고 놀기엔 충분할까요?

물론 메가램, 2DD 에뮬 등의 게임 실행의 편의성은 탑이라고 봅니다만, 그 외는 어떤가요?


MSX가 지금도 사용하기 편한 8비트 컴퓨터가 된 가장 큰 이유는 아래 2가지라고 생각합니다.

-> MSX-DOS2, FAT16 지원 패치


만약 MSX가 다른 평범한 Z80 컴퓨터처럼 CP/M만 쓸 수 있었다면, 실기를 켜는 것도 귀찮아했을 듯요ㅋ


CP/M은 레코드 단위의 처리라서, 레코드 크기 128바이트 x 16비트 레코드 번호로 최대 8MB까지 쓸 수 있는데요.

(CP/M 3.0에서는 18비트로 늘어서 32MB까지 되는 걸로 알고 있습니다)

MSX-DOS는 CP/M 2.2의 BDOS API에 추가로 MSX-DOS 전용의 논리섹터 R/W가 들어 있습니다.

처음부터 512바이트 x 16비트 섹터 번호 조합이라, 최대 32MB로 출발합니다. 좋아요~


게다가 MSX가 출시된 시기가 늦은 탓에 표준 FDD도 3.5인치 2DD를 쓰게 되었죠.

MS-DOS의 FAT12 디스크를 MSX에서 그대로 쓸 수 있는 '무적의 카드'를 하나 들고 나온 셈입니다.


이 후 MSX-DOS2에서는 서브디렉토리와 파일 핸들이 추가되었고, 메모리매퍼용 확장 BIOS도 들어갔죠.

1988년에 나온 MSX2+, MSX-DOS2, 메모리매퍼 조합으로, MSX에 필요한 기능은 다 있었다고 보면 됩니다.

당시 국내에서는 교육용 컴퓨터가 16비트 XT로 정해지면서 접하기 힘든 조합이라서...

이건 저도 90년 중반에 에뮬로 겨우 경험을 해봤네요 ㅎ.ㅎ


MSX에서 드라이브 8개를 쓸 수 있으니까, 32MB x 8개 = 총 256MB의 디스크를 쓸 수 있는데요.

드라이브를 이리저리 옮겨다니는 소소한 불편을 제외하면 8비트 컴퓨터로는 충분한 용량을 봐도 됩니다.

물론 크면 더 편하겠죠? ㅎ.ㅎ


2000년 초에 DOS2용 FAT16 패치에 관한 소식이 들렸지만,

당시에는 제게 GT도 없었고 대용량 디스크도 없던 때라서 딱히 관심이 없었는데요.

그냥 메가램(디럭스박스)에 FDD로 롬만 로딩하면 OK였던 시절...ㅋ


2006년에 1chipMSX가 출시 되었을 때,

디스크롬에 FAT16 패치가 적용되어 2GB SD카드를 단일 드라이브로 쓰도록 되어있더라구요.


지난 히스토리를 찾아보니, FAT16 패치 v0.12에서는 버그들이 다 수정되어 안정버전이 된 듯 했습니다.

FAT16 패치는 커널에서 디스크 R/W 호출 시, 논리섹터 번호를 16비트에서 23비트로 확장하는 겁니다.

그러니까 섹터 512바이트 x 23비트 = 4GB, FAT16 최대사이즈를 처리할 수 있도록 된 거죠.

물론 확장된 섹터 번호를 처리할 수 있도록 디스크롬도 개선이 되어야합니다.


paraMSX의 디스크 에뮬에 대충 구현해서 돌려보니, 문제없이 파일을 R/W 할 수 있었습니다.

조금 문제라면 기존 FAT12 디스크에 비해, 동작 속도가 눈에 띄게 느려졌다는 것 정도?

FAT의 클러스터, 섹터 계산량이 늘어나니 Z80 3.58MHz로는 힘겨운 느낌입니다요.


2007년말에 MMC/SD Drive V2.2를 설계하면서,

SD카드 슬롯을 2개를 넣고 두번째 SD카드는 FAT16 단일 파티션으로 쓰도록 했습니다.

SD카드 #1은 FAT12용 32MB 드라이브 3개를 마운트 -> A: B: C: 

SD카드 #2는 FAT16용 2GB 드라이브 D:


turboR에서 테스트해보니, FAT16쪽 드라이브가 조금 느릿한 느낌은 있지만 쓸만한 수준이더라구요.

속도가 필요한 프로그램들은 A: B: C: 드라이브에 몰아넣고,

FAT16 D: 드라이브에는 롬, 디스크 이미지, 각종 음악파일(MID, MP3 등)로 가득 넣으니 좋더라구요.


이제야 MSX를 자주 만질 수 있는 환경이 된 듯 했습니다.

디스크 속도,용량이 turboR의 발목을 잡지 않으니, 제대로 풀 파워~~를 느낄 수 있게 되었습니다요!


2008년에는 MMC/SD V2가 대량으로 제작이 되어서, 많은 분들이 2대 이상을 쓰는 분위기였는데요.

이 때쯤 두번째 MMC/SD의 SD카드 2개를 모두 FAT16으로 쓸 수 있는 기능을 추가하게 됩니다.

MMC/SD #1: SD #1 -> A: B: C:

MMC/SD #1: SD #2 -> D: FAT16

MMC/SD #2: SD #1 -> E: FAT16

MMC/SD #2: SD #2 -> F: FAT16


MMC/SD V2 두대로 32MB x 3 + 2GB x 3 이렇게 쓸 수 있죠.

제가 2015년 중반까지 9년을 이렇게 쓰면서, 딱히 부족함을 못 느낄 정도였느니...

MSX에서 이 정도면 충분한 환경이라고 생각했었습니다.


근데, 아무리 편한 것도 계속 쓰다보면 불편한 게 생기잖아요?

그렇게 격변의 2015년을 맞게 됩니다.


그럼, 다음 편에서...


2026년 9월 21일 월요일

21세기 MSX 활용 #4 - turboR 고속모드 디스크 최적화

다들 아시다시피 turboR DOS2는 디스크 액세스 시, CPU 모드를 Z80 노말모드로 잠깐 변경합니다. 

디스크 액세스가 끝나면 원래의 CPU 모드로 돌아오죠.

이 때 본체에 달린 고속모드 LED가 변하지 않기 때문에 사용자를 살짝 속인다고 보셔도 무방합니다ㅋ


만약 Z80 노말모드로 디스크롬이 호출되더라도, MMC/SD 내에서 강제로 고속모드로 바꾸면 어떻게 될까요?

당연히 디스크 속도가 빨라지겠죠?


MMC/SD Drive V2의 경우 디스크 속도는

노말모드 -> 130KB/s

고속모드(내부 노말모드) -> 148KB/s

고속모드(CPU모드 고정) -> 247KB/s

... 이렇게 됩니다.


CPU모드를 고속모드로 고정할 수 있다면, 속도가 기존의 1.67배가 됩니다. 실제 체감될 정도죠.

근데 MMCSD 디스크롬 내에서 CPU 모드를 강제로 바꾸면 문제가 되니까,

2DD 에뮬모드에서 고속모드로 강제하는 경우만 이런 방식을 사용합니다.

MMCSD V2~V4 모두 이 기능이 있어요. 이스1을 고속모드로 구동하는 식으로 활용이 가능합니다.

일반 DOS2 부팅된 환경일 때는 유저가 원하지 않는 고속모드를 강제할 수 없으니, 그냥 썼는데요.


.

.

.


2015년 어느날 우연히 프로그램 하나를 발견합니다 -> R800-DR

BASIC 로더와 바이너리 코드로 된 프로그램인데요.

실제 하는 역할은 DOS2 커널의 하위 디스크롬 호출 루틴(RAM에 있어요)을 패치해서,

Z80 노말모드로 변경되는 걸 막아버립니다.


결국 고속모드 상태에서 디스크 액세스가 발생하더라도, DOS2가 CPU 모드를 유지하게 된다는 얘기죠.

테스트 해보니 실제로 동작이 잘 되더라구요.

ST, GT의 디스크롬 루틴이 조금 다른데, 두 코드에 맞게 각각 패치하도록 되어있습니다.

BASIC에서 실행 후, 다시 DOS2 쉘로 복귀해야하는 약간의 번거로움이 있습니다.


좀 더 정보를 찾아보니, 코드를 도스 상태에서도 패치하도록 만들 수 있더라구요.

자세한 내용은 아래 링크에서 보실 수 있습니다.

https://sharksym.blogspot.com/2015/08/r800-dr-turbor-cpu.html


암튼... 결론은 'MMC/SD Drive V3를 만들자!'


turboR 고속모드의 슬롯 타이밍에 최적화해서 디스크 기기를 만들면 훨씬 빠르겠구나!

고속모드의 LDI 명령 타이밍에 맞춰, SD카드에서 램으로 1바이트 전송이 완료되도록 H/W를 설계했습니다.


결과는? 대박이었죠 ㅎ.ㅎ

전송 속도가 582KB/s가 되었습니다. 기존 V2 보다 2배 이상 빨라지네요.

2DD 한장이 720KB인데, 이걸 1.2초만에 읽어낸다고 생각하심 되겠습니다요~


실제 GT에서 DOS2로 부팅 시, R800-DR 및 FAT16 패치를 설치 후 M 로딩까지 순식간에 끝나네요.

무궁화에서 KTX로 바꿔타는 느낌?ㅋ


참고로, SLT-Turbo의 고속모드에서는 슬롯 타이밍이 약간 달라서, 전송 속도가 615KB/s로 나옵니다.

MV2 동영상 플레이어에서도 이걸 잘 활용하고 있죠.

VRAM 데이터와 MP3 데이터를 마구마구 읽어서 15fps으로 처리 ㅎ.ㅎ


참고로, 현재는 MMC/SD V3,V4를 쓸 때 R800-DR 프로그램이 필요하지 않습니다.

이 기능 자체가 MMCSD BIOS에 포함되어 있어요. 부팅할 때 자동으로 DOS2 커널 패치가 됩니다.


혹시 SD카드의 AUTOEXEC.BAT에 R800-DR 실행부분이 들어 있다면, 지워주세요~

사실 그냥 둬도 문제가 되진 않습니다.

커널 루틴이 달라서 '인스톨 실패'라고 나오면서 그냥 넘어갑니다.


turboR의 고속모드 디스크 속도 최적화는 이렇게 끝났습니다.

해피 엔딩~ ㅎ.ㅎ/


2026년 9월 20일 일요일

21세기 MSX 활용 #3 - MMC/SD Drive

2004년, 새로운 고속의 디스크 인터페이스를 만들어보자!


당시 기준으로 MSX 에뮬을 이미 10년간 사용했구요.

paraMSX를 만들면서 디스크롬 구조도 많이 보고, DOS2도 써봤구요.

MSX-DOS가 MS-DOS 기반이라서 대용량(FAT12) 디스크 처리도 가능하다는 걸 이미 알고 있습니다.


그럼 남은 문제는... H/W를 뭘로 만들까? 였는데요.

아무래도 플래쉬롬을 사용하는 방법이 제일 간단하겠죠?


2000년 이전에는 CompactFlash, SmartMedia 같은 것들이 쓰였는데,

이젠 MMC(MultiMediaCard), SD(Secure Digital)가 유행하고 있습니다. (2004년 기준)


I/O는 대충 TTL 칩을 조합해서 설계하고, MMC를 인터페이스하는 걸로 결정합니다.

MMC 256MB 메모리를 하나를 구매하구요. (5만원쯤 했던가요... 기억이 가물가물)

같은 용량에서는 MMC가 SD보다 조금 저렴했는데, 개발하다 망가지면 눈물나는 건 마찬가지겠지만요 ㅎ.ㅎ

카드 슬롯은 부품 납땜이 힘드니까, 메모리카드 USB 어댑터를 하나 뽀개서 보드째 사용합니다.


재료는 준비가 되었구요. 실제 개발은 아래처럼 진행되었어요.


1) 코나미 SCC롬팩을 개조해서 롬디스크 카트리지 제작

2) MMC I/O를 SPI 모드로 구동하는 회로 설계

3) 디스크 마운트는 드라이브 A:MMC, B:롬디스크

4) MMC를 초기화(파티션, 포맷) 프로그램을 구현 후 롬디스크에 포함

5) 드라이브 A:는 여러개의 파티션 중 1개를 마운트 (사용자 선택 저장)

6) 2DD 에뮬을 위한 런타임 파티션 교체 구현


아래는 완성된 모습입니다.



케이스를 씌우면 이런 모습이죠. 고파의 야망을 프랑켄슈타인으로~ㅋ



처음 만들었을 때에는 MMC Disk Drive, MMC Disk Interface 등의 이름으로 쓰였어요.

회로도를 공개해서, 외국에서도 제작한 분들이 있었습니다.


수년 후 다른 회원님이 PCB를 제작해서, 파라동 회원님도 쓰시게 되었는데요.

그 때쯤은 MMC가 단종이 되고 SD가 저렴하게 팔리던 시절이라,

이름을 MMC/SD Drive로 바꿨습니다 ㅎ.ㅎ


MMC 전송 속도는 40KB/s 였으니, FDD 11KB/s의 3배 이상 빠르다고 보면 되겠습니다.

이 속도가 빠르다고 보긴 힘들었지만,

MIDRY로 미디음악을 듣거나 2DD 게임을 실행하는 데엔 GOOD 이었습니다! ㅎ.ㅎ


2007년에 FAT16 등의 고용량 디스크 처리를 추가하면서 H/W도 개선이 되었는데요.

MMC/SD Drive V2에서는 속도가 130KB/s로 빨라져서, MP3 재생 등의 과도한(?) 작업도 OK가 되었습니다.


역시 디스크는 빠른 게 좋네요.

빠른 속도에 익숙해지면 느렸던 시절로는 다시 갈 수가 없죠. 역체감이 엄청납니다요ㅋ

이제서야 GT가 환영도시 게임기가 아닌 그냥 컴퓨터처럼 느껴집니다.

286에 HDD를 달아놓는 거랑 비슷하려나요? ㅎ.ㅎ


MMC/SD V2를 2015년까지 썼으니 꽤 오랫동안 썼었죠.

확장슬롯에 V2 카트리지 2개를 항상 꽂아둔 상태였습니다.

SLOT 2-0 MMCSD -> A: 부팅 및 2DD 에뮬, B: FAT16 2GB

SLOT 2-1 MMCSD -> C: FAT16 2GB, D: FAT16 2GB


.

.

.


하지만 turboR 새내기였던 저는 중요한 사실 한가지를 알지 못했는데...

이건 다음 편에서 이어집니다.


그럼, 이만...


PS. 확장슬롯 + MMCSD + 메모리매퍼 + Covox를 CPLD로 묶어서 아이큐2000 테스트용으로 썼던 물건



2026년 9월 17일 목요일

21세기 MSX 활용 #2 - DOS2

MSX-DOS2는 1988년에 출시되었지만, 중고딩 시절에는 구경도 못해봤어요.

90년대 중반에 에뮬레이터를 통해 겨우 간접적인 경험을 하게 되었죠.


나중에 WSX를 구해서 램을 512KB로 증설하고, DOS2 카트리지를 자작해서 써봤는데요.



이미 에뮬에서 처참한 성능을 겪어봐서, 딱 예상했던 느낌이더라구요.

여기에 HDD를 연결해도 답답하겠구나...의 느낌 ㅎ


그럼 GT는 어떨까요? 에뮬의 turboR처럼 속도가 빠를까요?


turboR은 BASIC으로 부팅하면 기본적으로 고속모드가 됩니다.

BIOS shadow로 동작하는 방식이라서 그런지 실기도 아주 빠르더라구요.

뭐, 이제와서 BASIC으로 코딩하려는 건 아니니까 대충 넘어갔습니다.


이제 DOS2 환경을 테스트해봐야 하는데요.

DOS2 프롬프트에서 화면에 문자가 출력되고 스크롤 되는 속도만 보더라도,

와우~ 고속모드에서는 진짜 빠르구나 라는 느낌이 옵니다!

물론 DOS1에서도 고속모드로 전환하면 똑같이 빠르게 동작하지만요ㅋ


처음엔 테스트를 2DD 디스켓으로 하다가, 내장 롬디스크를 써보게 되었습니다.

롬디스크 부팅은 GT의 내장 소프트 스위치를 켜서 MSX-View로 진입 후 Exit를 해도 되구요.

내장 SRAM 디스크에 AUTOEXEC.BAT를 넣어서 MSX-View를 스킵하고 부팅하는 방법도 있습니다.

테스트용 프로그램을 SRAM 디스크에 함께 넣어두면, turboR DOS2의 미친 성능을 느낄 수 있죠.


참고로, ST는 이런 기능이 없습니다. (환영도시 겜기?)


다시 GT로 돌아와서요...

문제는 롬디스크가 GT의 시스템 롬과 다 합쳐진 상태로 되어 있어서 개조가 힘듭니다.

커스텀 롬디스크를 쓸 수 있으면 진짜 좋을텐데 말이죠.

그리고 SRAM 디스크의 경우는 용량이 작아서 프로그램을 다 넣을 수 없다는 문제가 있구요.


결국 방법은 하나뿐입니다.

1. GT의 내장 소프트를 스위치를 켜고 SRAM 디스크로 부팅

2. 램디스크 설정 후, 2DD에 넣어둔 프로그램들을 램디스크로 복사

3. 쾌적하게 사용~


당연한 소리겠지만, 위의 2번 파일 복사에서 시간 다 잡아먹습니다요.

하지만 MGSEL 등의 음악 감상 등의 작업이라면 쾌적하게 갈 수 있죠! ㅎ.ㅎ


.

.

.


결국 누구나 예상한 결론에 도달하게 됩니다.

-> 고속의 대용량 디스크가 없으면, turboR은 '이빨 빠진 호랑이'


HDD 없는 386을 쓰라고 하면 비슷한 느낌일까? 싶습니다.


그럼, 이만...


2026년 9월 16일 수요일

21세기 MSX 활용 #1 - turboR 구입

20세기말...

불타던 에뮬의 열기도 사그러들고, MSX 유저들은 하나둘 파라동을 떠났습니다.

이젠 저에게 MSX라고 하면, 책상 옆에 놓인 WSX를 한번 둘러보는 정도였네요.


2003년 어느날...

갑자기 turboR을 기념품으로 하나 놓아야겠다는 생각이 들었습니다.

딱히 turboR을 써보고 싶다는 생각은 아니었는데, 시간이 더 지나면 구하기 힘들 것 같더라구요.


당시에 이베이를 쓰고 있었지만, 해외 배송은 좀 걱정이 앞섰고...

일단 옥션에 키워드를 등록했습니다. A1GT


그렇게 두어달 지났을까요. 갑자기 옥션 알림이 뜨네요.

판매글 제목과 내용을 확인 후 [즉시구매]를 눌렀습니다!


결과는? 두둥~~~



카드 결제일을 보니 2003년 9월 8일로 되어있네요.

지금으로부터 23년전입니다요~


회사로 택배 배송을 회사로 받았는데, 바로 사무실로 가져가서 언박싱을 했지요.

개발실에 SCART 기기는 널렸는데, 생각해보니 GT용 SCART 케이블이 없네요ㅋ

일단 S-Video로 연결해서 화면이 잘 나오는지 확인만 했네요 ㅎ.ㅎ


퇴근 후 GT를 가져와서 돌려보니, 소리도 잘 나오네요.

환영도시랑 프레이도 돌려보고 그랬죠.

.

.

.

그 후, WSX 옆자리를 차지하게 되었습니다요.

기념품 1호 -> A1WSX

기념품 2호 -> A1GT


2003년 저의 New MSX 시대(ㅋ)가 열렸습니다~ ㅎ.ㅎ/


2026년 3월 26일 목요일

[모니터] LCD 화면에 스캔라인 넣기

[서론]


아마 제목 때문에 Scanline Eraser를 떠올리신 분이 계실지도 모르겠네요.

2011년에 만든 물건이라 잊으신 분들이 더 많겠습니다 ㅎ.ㅎ

https://sharksym.blogspot.com/2011/02/scanline-eraser.html


이번에는 LCD 모니터(TV SCART)에 CRT 스캔라인과 비슷한 기능을 넣어보았습니다.


제가 메인으로 쓰고 있는 17인치 LCD가 있습니다. GT에 항상 연결된 상태입니다!

2005년부터 쓰던 물건이라 해상도가 1280 x 768로 좀 떨어지긴합니다요.


보통 외장 업스케일러를 쓰시는 분들을 보면,

주로 레트로 게임기의 240p, 480p 화면을 정수배 스케일링 + 스캔라인 필터를 사용하는데요.

1440p인 QHD 또는 2160p의 UHD 모니터가 주로 쓰이더라구요.


TMS9918은 상하 테두리(BD)를 제외하면 메인 화면은 192라인입니다.

V9938/9958은 테두리를 제외한 기본 화면은 212라인 + 16라인(수직 쉬프트) = 228라인이구요.

오버스캔 트릭을 쓰면 240라인을 모두 쓸 수 있죠.


MSX2 이상의 기종에서 정수배 스케일링을 쓰려면 QHD 이상으로 가야하는데...

제가 쓰는 구닥다리 768p 모니터에서는 192라인 x 4 = 768라인이 됩니다.

MSX1 화면을 정수배로 업스케일 후 스캔라인 효과를 먹이는 건 가능하다는 얘기죠.

초기 MSX1용 게임들을 즐기는 경우에 유용하게 쓸 수 있겠습니다 ㅎ.ㅎ



[본론]


제가 쓰는 LCD는 2005년에 직접 개발했던 펌웨어가 적용되어있습니다.

지금도 코드 빌드하고 다운로드 하는 건 별 문제없이 할 수 있어요.

먼저 코드를 수정해서, 192라인을 4배 스케일링을 해서 픽셀을 딱 맞춰 놓습니다.


그럼 이제 스캔라인 효과를 만들어야하는데요.

단순히 검정 라인으로 표시한다면, 프레임 버퍼의 각 라인 사이에 빈 라인을 두면 쉽게 구현됩니다.

1번 라인 캡쳐 + 라인 메모리 스킵(검정라인) +

2번 라인 캡쳐 + 라인 메모리 스킵(검정라인) +

...

192번 라인 캡쳐 + 라인 메모리 스킵(검정라인)


이렇게 되겠죠? 192라인을 캡쳐하면 실제 데이터는 384라인이 되겠구요.

이걸 그대로 2배 스케일링해서 출력하면 됩니다. 간단하죠?

근데 이렇게 하면 조금 재미없으니, 다른 방법으로 해보아요~


이번에는 입력된 라인을 연속으로 캡쳐 후 4배 스케일링 하도록 둡니다.

이 상태에서 업스케일된 각 4개 라인의 마지막 라인과, 인접한 다음 4개 라인의 첫 라인을 지워줍니다.

보통 업스케일을 하면 각 픽셀이 보간(인터폴레이션) 되기 때문에 경계면 양쪽을 함께 지워야 이쁘게 나와욤.

참고로, 비디오 칩에 따라서는 보간을 끄고 픽셀을 정수배로 늘리는 방식도 있습니다. 보통 라인 더블러가 이런식이죠.


별 내용 아닌데, 글로 적으려니 힘드네요. 아래 스샷을 보시죠!

각 블럭이 실제 화면의 1픽셀입니다.



이해되시죠? ㅎ.ㅎ

사실 위에 설명했던 내용은 20세기 에뮬인 paraMSX에 그대로 적용되어 있습니다.


.

.

.

그럼 이걸 LCD 펌웨어에 어떻게 적용하느냐가 문제인데요.

보드에 들어있는 칩은 업스케일 후 별도의 버퍼없이 출력단(LVDS)으로 넘어가기 때문에,

밝기 낮춘 픽셀을 추가로 그려넣을 수는 없습니다.

대신 이런 비디오 칩은 오버레이 기능이 들어있는데요.

비디오 채널 외에 배경 또는 그래픽 데이터를 오버레이 할 수 있습니다.

특히 그래픽 레이어는 알파블렌딩이 가능합니다.

대게 OSD를 표시할 때 쓰입니다. 메뉴, 채널 정보 등등...


그럼, 그래픽 레이어에 투명색 2라인 + 검정색 2라인 + ... 반복해서 768라인을 채워놓고요.

이걸 비디오 위에 오버레이하면 되겠죠?


아래 스샷들은 GT의 출력입니다. 참고하세요.


MSX 부팅로고와 알레스트2 타이틀 화면은 이렇게 나옵니다.




텍스트도 보시죠. 잘 보이도록 확대했어요.



아래는 화면의 절반(윗부분)만 스캔라인 효과를 적용한 모습입니다.

두 부분의 차이가 잘 보이네요.



그리고, 알파블렌딩 값은 리모컨으로 변경(10단계)할 수 있도록 해놨습니다.

50% 정도 먹인 상태가 적당하네요.


그럼, 즐 MSX 하셔요~ ㅎ.ㅎ/


2024년 6월 7일 금요일

긴파일명(LFN) 사용 시 주의 사항

오리지널 MSX 유저라면 아마 나이가 40대 후반에서 50대,60대 정도일겁니다.


최근에 MSX를 접하신 30대 분들이라면, 아마 태어나셨을 때 MSX가 단종되었을거에요.

아마 처음 접하신 PC도 윈95가 설치된 PC가 아닐까 싶으네요.


이제 MSX-DOS, MS-DOS에서 사용되는 디렉토리, 파일명에 대한 얘기를 한번 꺼낼 시기가 된 것 같습니다.


.

.

.


MSX-DOS, MS-DOS를 쓰다가 윈95를 처음 쓸 때 기억하시나요? ㅎ.ㅎ

기존 FAT에 긴파일명(LFN)을 쓸 수 있게 되었는데, VFAT이라고 불렀습니다.


디렉토리 엔트리는 32바이트의 파일 또는 서브 디렉토리로 구성됩니다.

기존 FAT에서는 파일/서브 디렉토리는 하나의 엔트리였지만,

VFAT에서는 긴파일명(LFN) 표시를 위해 여러개의 엔트리를 사용하여 표시합니다.

파일명이 길수록 더 많은 엔트리를 소모하는 식이죠.


VFAT을 지원 못하는 OS에서는 LFN 엔트리가 보이지않고 기존 8.3 짧은 파일명으로 인식됩니다.

따라서 8.3 파일명으로 데이터를 읽는데에는 아무런 문제가 없습니다.

그냥 볼륨+시스템+히든 속성의 이상한(?) 파일들이 잔뜩 있는 것으로 인식되는 것 뿐이욤 ㅎ.ㅎ


근데, 여기서 주의해야될 부분이 한가지 있는데요.

VFAT을 지원하는 OS에서는 LFN으로 저장된 파일을 삭제, 이동 등의 작업 시 연결된 엔트리들이 함께 처리됩니다.

만약 VFAT을 지원하지 않는 프로그램 또는 OS에서 디스크작업을 하게 되면. 연결된 LFN 엔트리가 손상되어 쓰레기로 남습니다.

결국, MSX-DOS/DOS2 및 구버전 MS-DOS에서 쓰이던 디스크관련 프로그램을 쓰면 안된다는 얘기죠.



음...

LFN 얘기를 처음 들으셨으면, '그럼 파일명을 8.3 포맷으로 짧게 해주면 되겠네'라고 생각하실 수도 있는데요.

원래 FAT에서는 파일명이 항상 대문자로 저장됩니다. 따라서 파일명에 소문자가 섞여있으면 무조건 LFN으로 바뀌게 됩니다요.



그럼, MSX용 디스크에 LFN 파일을 넣고 MSX-DOS2에서 파일 삭제를 하면 어떤 결과가 나오는지 한번 테스트해보겠습니다~


아래처럼 문자수는 8.3 포맷으로 짧게 보이지만, 소문자가 섞여있는 LFN 파일 2개를 MSX 디스크에 복사합니다.




M 파일매니저에서는 아래처럼 긴파일명으로 인식이 되는 것을 볼 수 있어요.




그럼, 파티션을 덤프해서 실제 디렉토리 엔트리가 어떻게 저장이 되는지 봅시다.

일반 파일들은 32바이트 엔트리로 저장되는데, 해당 LFN 파일은 각각 64바이트로 저장된 것을 확인할 수 있어요.

LFN은 빨간색으로 표시했습니다.




그럼, Ys3(k).DSK 및 Ys3(k).USR 두개 파일을 삭제해봅시다. 물론 MSX에서 삭제해야겠죠?

파일이 삭제되면 각 엔트리의 첫 바이트가 E5H로 변경이 됩니다.

근데 아래 스샷에서 여전히 원래값 41H로 시작하는 엔트리가 보이시죠?

MSX-DOS2는 저 엔트리가 연결된 하나의 파일이라고 인식을 못하기 때문에 그냥 둔거에요.




이 손상된 드라이브는 윈도에서 CHKDSK /F 명령으로 쉽게 수정을 할 수 있습니다.




수정 후 덤프해보면 아래처럼 모두 삭제된 엔트리를 볼 수 있어요.




.

.

.


그리고, 보너스입니다.


윈도10 이후에서는 모든 드라이브에 'System Volume Information'이라는 긴이름의 폴더가 생성됩니다.

이동식 드라이브도 마찬가지구요.


만약 MSX에서 쓰이는 디스크를 윈도에 연결(마운트)하게 되면, 해당 LFN 폴더가 생성이 됩니다.

이 폴더를 지우지않고 MSX에서 그대로 사용하면, 이 폴더가 MSX-DOS2에서는 볼륨명으로 인식이 됩니다요~ ㅎ.ㅎ


원래 LFN 엔트리는 속성(Attribute) 값이 0FH가 되는데, 기존 FAT에서는 이런 파일이 없습니다.

그래서 Volume label + System + Hidden + Read-only 모든 속성을 켜서 LFN 인식으로 쓰는 꼼수를 쓴거죠.

그리고 LFN 엔트리들은 별도의 연결 리스트를 사용하지 않습니다. 단지 여러개 엔트리가 연속으로 설정되도록 되어있어요.


암튼 MSX-DOS2에서 이 엔트리를 볼륨명으로 인식하게 되면서, "B "로 볼륨명이 표시되는 현상이 있습니다.

아래 덤프된 엔트리를 보시면 왜 그런지 이해되시죠?

96바이트의 LFN 엔트리의 첫 부분이  42H, 20H, 00H 값으로 시작됩니다. Volume label 속성이니 이걸 걍 볼륨명으로 인식한거죠.




제가 만든 M 파일매니저에서는 볼륨명을 읽을 때 LFN은 무시하도록 되어있어서 이런 현상은 나오지않습니다. 참고하셔요.


그럼, 이만...


2024년 1월 14일 일요일

[강좌] 09. 같은 종류의 사운드 카드를 여러개 사용

확장슬롯에 사운드 카드를 주렁주렁 달아서 쓰는 분들이 꽤 있으실텐데요 ㅎ.ㅎ

이 때 기억해야 할 내용들을 조금 정리해보았습니다.


주변기기의 I/O는 메모리맵 I/O (Memory Mapped I/O) 또는 포트 I/O (Port Mapped I/O)를 사용합니다.

물론 둘을 함께 쓰는 경우도 있구요.



사운드를 I/O 종류로 나누어 보면 이렇습니다.


1. 메모리맵 I/O 전용


SCC/SCC-I

OPM (YM2151)

OPNB (YM2610)

MP3/WMA (MPX)


하나의 슬롯에 두개의 기기를 꽂을 수는 없으니, 기기간의 메모리 영역이 충돌하지 않습니다.

예를 들어 SCC-I 카트리지 4개를 확장슬롯에 몽땅 꽂아놓아도 각각 동작합니다.

이 기기들은 아무 생각없이 꽂아주시면 됩니다 ㅎ.ㅎ



2. 포트 I/O 전용


PSG (AY-3-8910, YM2149)

Secondary PSG

MSX-AUDIO (Y8950)

MSX-MUSIC (YM2413)

MIDI Saurus

MSX-MIDI (A1GT, µ-pack)

u8 PCM (turboR, Covox, MusicModule)

s16 PCM (MoonBase)

DCSG (SN76489AN)

WSG (T-Wave)

OPL4 (YMF278B)

OPNA (YM2608)


포트 주소가 충돌하면 기기에 문제가 생길 수 있으니, 기본적으로 한개만 쓰셔야합니다.

근데 여러개를 지원하는 기기들이 있으니 이건 따로 숙지해주세요!

이 기기들은 부팅 시, BIOS INIT 루틴에서 시스템에 존재하는 I/O포트를 검사 후 포트 주소를 바꿉니다.


2.1 MSX-AUDIO 카트리지를 2개 사용


파나소닉의 오리지널 MSX-AUDIO (FS-CA1) 카트리지에 한합니다.

첫번째 Y8950은 C0H,C1H 포트로 설정되고,

두번째 Y8950은 C2H,C3H 포트로 설정됩니다.


주의)

필립스, 도시바의 저가형 Y8950 카트리지는 포트 ON/OFF가 불가능하며 C0H, C1H 포트로 고정됩니다.

중복으로 사용하시면 안됩니다. '필립스랑 도시바랑 함께 쓰면 되나요?' 등의 질문은 하지마시구요ㅋ

물론 파나소닉의 MSX-AUDIO와 함께 쓰는 것은 가능합니다.

MoonBase + OPL4를 연결해서 MSX-AUDIO 모드를 쓰는 것도 가능하구요.

참고로, MoonBase도 FS-CA1와 동일한 방식으로 포트를 선택합니다.


2.3 MMC/SD Drive V4를 2개 사용


첫번째 V4의 DCSG는 49H, PCM은 91H 포트로 설정되고,

두번째 V4의 DCSG는 3FH, PCM은 0AH 포트로 설정됩니다.



3. 메모리맵 I/O와 포트 I/O 모두 사용


FMPAC만 이 구조를 사용하는 것으로 알고있는데요. 혹시 더 있는지 모르겠네요 ㅎ.ㅎ


FMPAC은 PAC(SRAM 카트리지)에 FM 사운드(OPLL)가 추가된 기기인데요.

이 카트리지는 기본적으로 메모리맵 I/O로 OPLL 칩이 동작합니다.

만약 포트 I/O로 사용하고 싶다면, 스위치(메모리맵 I/O의 7FF6H에 있습니다)를 따로 켜야합니다.

본체 내장된 MSX-MUSIC은 메모리맵 I/O 없이, 항상 포트 I/O 모드로 동작합니다.

당연히 S/W를 만드는 입장에서는 FMPAC을 포트 I/O 모드로 쓰는게 편하겠죠?


그럼 여기서 의문이 하나 떠오를겁니다...

본체에 FMPAC을 여러개 꽂거나, MSX-MUSIC이 내장된 본체에 FMPAC을 추가하면 어떻게 될까요?


3.1 FMPAC을 여러개 꽂는 경우


각 슬롯의 메모리맵 I/O를 통해 각 OPLL을 따로 구동가능합니다.

일부 데모 프로그램에서 이렇게 사용하는 것으로 알려져있어요.

그 외 일반 프로그램에서는,

우선순위가 높은 슬롯의 FMPAC 한개에서만 사운드가 출력되고, 두번째 FMPAC은 PAC처럼 동작하게 됩니다.


3.2 MSX-MUSIC이 내장된 본체에 FMPAC을 꽂는 경우


FM 사운드는 본체의 OPLL에서 소리가 출력되며, FMPAC은 PAC처럼 동작하게 됩니다.


만약 본체의 MSX-MUSIC 슬롯보다 FMPAC 슬롯의 우선순위가 높다면, FMPAC의 포트 I/O 모드가 켜질 수 있습니다.

그러면 FMPAC의 OPLL과 본체의 OPLL이 동시에 동작하는 현상이 발생합니다.

두 칩에서 소리가 중복으로 출력되면, PSG와 FM밸런스가 무너지니까 이렇게 쓰시면 안됩니다요.

그리고 두 칩의 출력이 완벽하게 같지않을테니, FM 소리도 좀 이상할거에요.


참고로, 산요 MSX2+ 기종을 보면 SLOT 3쪽에 내장 MSX-MUSIC이 배치되어있는데, 그닥 좋은 설계는 아니라고 봅니다.


주의)

본체 내장형 MSX-MUSIC을 카트리지로 만든 기기를 쓰시는 분들이 많은데요. 알고계시면 좋습니다.

오래전 유럽에서 만들어진 FM-PAK이라는게 있습니다. 국산으로는 재미나 뮤직박스도 있었구요.

MSX-MUSIC이 없는 본체에 꽂아서, MSX-MUSIC 내장형 본체처럼 만들어주는 기기인데요.

2000년 이후 지금까지도 클론 카트리지가 꽤 제작이 된 걸로 알고 있습니다.

이 카트리지는 본체에 한개만 꽂으셔야 합니다!


그리고, FM-PAK과 FMPAC을 함께 쓰는 경우는 FMPAC을 우선순위가 낮은 슬롯에 꽂으면 됩니다.

뭐, 애초에 FM-PAK을 꽂지 않으면 문제가 생길 여지도 없겠지만요 ㅎ.ㅎ

만약 본체를 개조해서 FM-PAK (또는 클론)을 내장하는 경우는, 가능한 우선순위가 높은 슬롯에 장착해야합니다.

그냥 SLOT 0-X에 넣는다고 생각하심 되겠습니다요~



쓰다보니 FMPAC 얘기가 길어졌는데, 하나만 더 추가해봅니다 ㅎ.ㅎ

앞의 3.1, 3.2에서 OPLL 칩이 중복으로 장착되더라도 소리는 하나만 출력되니 괜찮다고 설명드렸는데요.

이건 정상적(ㅋ)으로 만든 S/W를 사용하는 경우이고, 늘 그렇지만 예외가 있습니다.


마이크로캐빈에서 만든 게임에서는 OPLL 칩들이 동시에 출력되는 문제가 존재합니다.

XAK, XAK2, 프린세스메이커, 프레이, 환영도시 정도만 테스트해봤는데 모두 같은 문제가 있네요.

(심지어 터보알 전용 게임도 이렇게 해놨...ㅋ)

일단 '마이크로캐빈' 이름을 기억해주세요!


타사의 게임들은 별 문제없었습니다. 테스트해본 것들은 적어보면,

알레스트, 알레스트2, 레이독2, 삼국지2, 신장의야망(전국군웅전),

피드백, 팩매니아, 퀸플, 테트리스, 파이어호크, 싸이코월드, 파이널판타지

이 정도가 되겠습니다.


조금 특이한 게임은 '드래곤슬레이어6'였는데요.

요놈은 아시다시피 SRAM 세이브를 지원하지만, PAC은 인식불가이고 FMPAC만 가능한데요.

아마 FMPAC 체크 루틴과 FM 사운드(OPLL) 초기화 루틴을 섞다가 꼬인건지...

암튼 이 게임에서도 두개의 OPLL에서 동시에 소리가 출력됩니다. 참고하세요.


그럼, 즐거운 일요일 되셔요~ ㅎ.ㅎ


2022년 5월 20일 금요일

[WIN] 2HD 디스켓을 2DD로 포맷하기

4년(?)마다 돌아오는 재방송 시간입니다~ ㅎ.ㅎ/

이미 잘 알고계시는 내용이겠지만, 재방송도 가끔은 재밌으니 한번 봐주세요~


2DD 디스켓은 생산이 중단된지 오래되어서, 대신 2HD 디스켓을 많이 사용하시는데요.

저도 마찬가지입니다요~ㅎ



그럼, 본론으로 넘어갑니다.


2HD 디스켓을 준비합니다.

안쓰는 놈을 하나 골랐습니다. 오래되서 배드섹터도 몇개 있어요ㅋ





외장형 USB FDD에 디스켓을 넣고, 윈도에서 '명령 프롬프트'를 열어봅니다.

CHKDSK로 현재 디스크가 1.44MB의 정상적인 2HD 디스크임을 알 수 있습니다.

디스켓의 우측 2HD 인식 용 홀을 막으면 2DD로 포맷할 수 있는데요.

이 때 "FORMAT A: /T:80 /N:9" 명령을 사용합니다.

아래 스샷은 순서대로 진행한 모습입니다.





윈도에서는 720KB 용량의 정상적인 2DD 디스크로 표시가 되었는데,

이게 MSX에서도 인식이 잘 될까요?

GT에 한번 넣어봅니다. 잘 인식이 되네요! (당연한 얘기를...ㅋ)





그럼, 디스크가 잘 기록되는지 테스트도 해볼까요?

COPY720 프로그램으로 YS1_K.DSK 이미지를 씁니다.





MMC/SD를 뽑고 디스켓으로 부팅해봅니다.

이스가 잘 실행되네요!





보너스로 스샷 한장 더 찍어봅니다.

paraMSX 에뮬에서는 PC의 FDD를 직접 읽을 수 있습니다.

실기에서 기록했던 이스 디스켓을 아래처럼 paraMSX로 구동이 가능합니다.





그럼, 이만~~


.

.

.

FAQ 하나만 적고 갈께요 ㅎ.ㅎ


Q: 저는 윈도XXX에서 2DD를 FORMAT하면 에러가 나오는데, 왜 그럴까요?

A: 쓰시는 FDD 또는 디스켓이 불량입니다.


-끝-


2021년 11월 10일 수요일

[WIN] 여러개의 DSK 파일을 간단히 합치는 방법

여러개의 DSK 파일들을 에뮬 또는 MMC/SD 등에서 사용하기 위해,

하나의 파일로 합쳐야하는 경우가 생기는데요.


방법은 여러가지가 있겠지만,

이번에는 배치파일과 윈도의 보내기(Send To) 기능을 활용해보아요~ ㅎ.ㅎ


먼저 파일을 합치는 BAT 파일을 받으세요.

Download: File Combine.zip


배치파일 내용은 이렇습니다.

제가 대충 만든거니까 맘에 안드시면 수정해서 쓰세요ㅋ





배치파일을 윈도의 GUI와 연동해서 쓰는 가장 쉬운 방법은

보내기(Send To) 기능을 쓰는건데요.


윈도10의 경우는 아래 폴더에 배치파일을 넣으면 되겠습니다.

배치파일 원본을 넣어도 되고, 바로가기 링크를 넣어도 됩니다.

C:\Users\계정이름\AppData\Roaming\Microsoft\Windows\SendTo





DSK 파일들의 이름을 잘 정리해서, 탐색기에서도 순서가 정렬되도록 해줍니다.





여기가 가장 중요합니다! 잘 보세요ㅋ

DSK 파일들을 모두 선택 후,

첫번째 DSK파일에서 마우스 우클릭으로 팝업메뉴를 띄웁니다.

배치파일에 파일명을 전달하는 순서때문에 이렇게 해야됩니다!

뭐, 파일명을 자동으로 정렬하는 기능을 넣을 수도 있겠지만...

스크립트를 복잡하게 만드는게 귀찮으니 그냥 이렇게 합시다~





CMD 창이 열리면서 작업이 수행됩니다.

COMBINE.OUT 파일을 생성하고, DSK 파일을 하나씩 붙이는거라 금방 끝나요.





작업이 완료되면 COMBINE.OUT 파일명을 적당히 바꿔서 쓰시면 되겠습니다.





흐... 배치파일 만드는 것 보다 글 쓰는게 더 귀찮네요.


.

.

.



근데 "어? 나는 구버전 윈도 쓰는데, 가능할까요?" 물어보실까봐

VM으로 윈도2000에서도 테스트해봤습니다.


윈도2000의 보내기 폴더의 위치는 아래처럼 나와요.

여기에 배치파일을 넣으면 됩니다.

C:\Documents and Settings\계정이름\SendTo


실행방법은 똑같습니다. 스샷 구경하셔요~







그럼, 즐거운 윈도 + MSX 생활하셔요~ ㅎ.ㅎ/~


2021년 8월 10일 화요일

[강좌] 08. 디스크 게임의 실행환경 만들기

디스크 전용 게임(2DD/1DD)들은 FDD에 디스켓을 넣고 전원을 켜면 게임이 실행됩니다.

뭔가 더 필요할까요?ㅋ

.

.

.

지금부터 얘기하려는 내용은...

아마 십여년 전부터 MMC/SD를 쓰신 분들이라면 잘 아시는 내용이겠지만,

읽다가 금시초문이라고 하실 분이 분명히 계실 듯 해서 적어봅니다 ㅎ.ㅎ

기억이 가물가물하셨던 분이라면, 글 마지막의 [요약]만 보고 넘어가시면 되겠습니다.



[본론]


80년대 FDD를 쓰셨던 분들의 대부분은 아마 아이큐2000 + FDD 또는 X-II 환경이겠죠?

FDD가 내장된 X-II 및 일제 MSX2/2+를 본체 그대로 쓰면 그대로 완벽한 환경이 되겠습니다.


90년대부터는 상황이 좀 바뀌기 시작했는데요.

쯔지가와씨의 MEGA-SCSI, 선라이즈 IDE 등의 외장 디스크기기가 널리 쓰였구요.

제가 만든 MMC/SD 드라이브는 2004년에 등장하면서 국내에서 많은 분들이 쓰기 시작했습니다.


이제 슬슬 문제가 발생합니다.

보통 대용량 디스크 기기에서는 기존 2DD 게임을 구동하기 위해,

DSK 파일(디스크 섹터를 덤프한 이미지)을 FDD에서 쓰는 것처럼 에뮬레이션을 하게되는데요.


FDD는 드라이브 문자가 2개(A: B:)인 장치입니다.

디스켓 구멍이 하나뿐인 싱글 드라이브를 쓰더라도 가상의 B: 드라이브가 생성이 되어서,

디스크를 사용하는 S/W입장에서는 둘을 구분하지 않습니다.


요즘 많이 쓰시는 MMC/SD V4의 경우, 번들된 SD카드는 파티션이 6개가 있으니까...

드라이브 A: ~ F:가 할당이 됩니다.

이 상태에서 DSK 파일을 구동하면?

기기가 FDD 에뮬모드로 전환되면서 DSK 이미지를 드라이브 A: B:로 매핑해줍니다.

다른기기들의 에뮬도 비슷한 방식으로 구동하고 있을거에요.


여기까지만 보면 FDD를 쓰는 경우와 별차이가 없는데요.

특히 아이큐2000처럼 본체에 FDD가 내장되지 않은 경우는,

일반 외장 FDD를 쓰는 경우와 대용량 디스크기기의 FDD에뮬 모드의 동작이 거의 같습니다.

실사용에서도 문제가 발생하지 않습니다.


하지만, FDD가 내장된 본체를 사용하게 되면 큰 문제가 발생하는데요.

S/W 구동 시, 에러를 표시하지않고 그냥 뻗어버리거나, 그래픽이 깨지는 등의 문제가 발생합니다.


이 문제는 디스크 커널의 특성과 거기 맞춰서 개발된 S/W의 문제가 모여서 발생합니다.


보통 DOS1 롬이라고 부르는 디스크 커널은 부팅할 때, WORKAREA에 필요한 메모리를 할당 후 사용합니다.

이 때 약 3KB가 사용이 되구요, FDD를 여러개 사용하면 그만큼 메모리 사용량도 늘어납니다.

본체에 FDD가 내장되어있는데, 외장 디스크를 추가연결하면 6KB가 소진되는 셈이죠.


근데 대부분의 디스크 게임들은 FDD 한개를 사용하는 환경을 기준으로 제작이 되어있습니다.

따라서, FDD를 여러개 꽂아서 WORKAREA가 많이 소진된 상태에서는?

스택(STACK) 영역이 부족하다보니, 힙(HEAP)과 스택이 충돌하는 상황이 발생하는거지요.

게임 구동 중 오동작하거나 그냥 멈추는 모습(?)으로 나타납니다.


그러면 디스크 기기가 2개 이상인 경우는 게임을 실행할 방법이 전혀 없는걸까요?

그건 아닙니다 ㅎ.ㅎ


모든 디스크롬에서는 공통으로 지원되는 기능이 하나 있는데요.

부팅 시 CTRL 키를 누르고 있으면, 드라이브 A: 한개만 할당하고 넘어갑니다.

그러니까 FDD의 드라이브 B:가 사라지게 되는거죠.

이렇게 드라이브 문자가 한개 줄어들면 WORKAREA에 할당되는 메모리도 줄어듭니다.

약 1.5KB가 되어요.


참고로, 유저의 CTRL 키 입력을 기다리는 표시가 따로 나오지 않기 때문에,

이 기능을 쓰려면 본체를 켠 후(또는 리셋 후) CTRL 키를 계속 누르고 있어야합니다.


그럼, FDD 두대를 연결했을 때 CTRL 부팅을 하게 되면?

첫 FDD가 드라이브 A:로 사용되고, 두번째 FDD가 드라이브 B:로 사용됩니다.

결국 WORKAREA 사용량이 FDD 한대일때와 똑같아지는거죠.


만얀 FDD가 세대 이상 연결되어있다면?

CTRL 부팅을 해도 드라이브 A: B: C: 3개가 할당되어서 게임이 안돌아갈겁니다요~

결국 FDD 두대 정도는 항상 연결해놓더라도 크게 문제 없다는 얘기죠.


하지만 복병이 하나 있었으니ㅋ

코에이 게임처럼 메모리를 빡빡하게 사용하는 경우는,

처음부터 CTRL 부팅을 요구합니다.

FDD가 한대뿐인데도 CTRL키를 눌러야 실행이 됩니다. (램 1.5KB만 봐주겠다! 뭐 그런거죠)

이런 경우는 디스크 기기가 두대 이상 연결되어 있으면, 딱히 방법이 없죠.


제가 만든 MMC/SD의 경우는 OneDrive라는 기능이 있는데요.

이걸 쓰면 외부 슬롯(SLOT 1 또는 2)으로 DSK 에뮬모드로 진입 시,

본체 내장된 FDD가 구동되지 않도록 게임 디스크를 바로 부팅시킵니다.

그리고 CTRL 키를 누른 것 처럼 초기화를 합니다.

FDD가 한대뿐인 환경에서 CTRL 키를 누르고 부팅하는 것과 같은 조건을 만들어주는 것이지요.


제가 예전에 올린 사진이나 영상을 보시면 항상 MMC/SD V2 두개가 꽂힌걸 볼 수 있는데요.

이 상태에서도 게임을 구동할 수 있는게 OneDrive 기능때문이었습니다요.

그럼 이대로 상황종료?

.

.

.

그럴리가 있겠습니까요? ㅋ

또다른 복병 바로 마이크로캐빈의 게임인데요.

이넘들은 FDD 한대 그대로 부팅하는 상황(드라이브 문자 A: B: 유지)에서만 실행이 됩니다.

만약 내 본체에 FDD가 내장되어 있고, MMC/SD로 DSK 파일을 구동한다면?

OneDrive를 끄고 유저가 CTRL 부팅을 해주는 방법밖에 없습니다.

물론 본체에 FDD가 내장되지 않았다면, 그냥 OneDrive만 끄면 잘 실행되겠습니다.


마지막으로 보너스 입니다.

MMC/SD Drive V4에서는 GameRunner II라는 막강(?)한 환경을 제공합니다.

가상의 슬롯, BIOS, 디스크 등으로 구동되어, 본체의 주변기기 조건과는 별개의 공통 환경을 만들 수 있습니다.

예) 아이큐2000 + FDD 한대의 환경 구동



[요약]


- 대부분의 디스크 게임은 FDD 한대만 있는 환경에서만 실행이 됨

- FDD가 두대인 경우는 CTRL 부팅으로 해결가능

- FDD가 세대 이상이면 해결책이 없음

- MMC/SD Drive의 OneDrive 기능으로 추가된 FDD를 무력화 할 수 있음

- 코에이의 게임은 OneDrive으로 간편하게 실행가능

- 마이크로캐빈의 게임은 CTRL 부팅 시 실행안됨 (OneDrive OFF 필수)

- MMC/SD V4의 GameRunner II로 FDD 한개뿐인 가상의 환경을 만들 수 있음

- MMC/SD 외의 디스크기기로 구동하는 환경은 제게 물어보지마세요 (잘 몰라요)


2021년 5월 9일 일요일

와이드(16:9) 모니터의 활용

MSX 디스플레이의 기본 출력은 240p입니다.

전체 262라인 중 240라인을 사용하게 됩니다.

물론 MSX의 문자/그림이 표시되는 영역은 스크린 모드에 따라 192라인/212라인이죠.


만약 사용하는 모니터가 16:9 비율이라면, 화면비 설정을 4:3으로 두고 사용하실텐데요.


아래는 스크린1로 부팅된 BASIC 화면입니다.

LCD 모니터에서 출력된 모습이고, 오버스캔이 없는 상태의 240p 화면입니다.

사실 오버스캔은 CRT에서 쓰이는 용어라서 100% 정확한 표현은 아닙니다만,

대충 의미만 떠올리시면 되겠습니다요~





70,80년대에 쓰였던 AV 모니터(CRT)들은 약 10% 전후의 오버스캔으로 설정되어있습니다.

PC 용으로 쓰인 모니터들은 화면의 폭과 높이를 따로 조절할 수 있는 경우가 대부분이었구요.


오버스캔 10% 일때는 아래 사진과 유사하게 나옵니다.




BIOS의 스크린1 기본 WIDTH가 29로 되어있는 이유는 위의 사진을 보시면 금방 아시겠죠?

모니터 제품에 따라 화면 위치의 편차가 있으니까,

WIDTH 32로 꽉 채우면 좌측 또는 우측의 글자가 잘리는(보이지않는) 현상이 생길 수 있습니다.


아래 사진처럼 오버스캔을 17%로 과하게 설정하면 좌우가 잘리는 모습을 볼 수 있어요.





참고로, 요즘 TV 또는 AV 모니터는 기본 오버스캔이 3% ~ 7% 정도가 됩니다.

80년대 삼성에서 오버스캔을 조금 낮춘 TV를 팔면서 선전을 크게 했던 기억도 나네요.

광고가 '숨어있는 1인치를 찾아서'이었나... 그랬죠ㅋ



그럼, 본론으로 넘어갑시다요~


수평 라인수에 맞춰서 화면을 오버스캔으로 늘리면, 화면을 크게 볼 수 있으니 좋겠죠?

마냥 오버스캔을 늘리면, 가로 사이즈가 디스플레이 크기를 넘어가니 사용이 불가능해집니다.

MSX2의 VDP ADJUST 기능으로 가로 스크롤을 구현한 게임이라면 더 많이 잘려나가겠네요.


그래서,

오버스캔 설정을 그대로 두고, 화면을 줌인 해주는 기능을 설정해보아요.


아래는 줌 17% 상태입니다.

조금 위에서 본 오버스캔 17%에서 잘렸던 좌우 영역이 아래 화면에서는 잘 보이시죠?




이 상태에서 보여지는 화면비율은 4:3 아닌 14:9 정도가 됩니다.

화면이 17% 확대가 되니까...

17인치 와이드 모니터에서 보면, 20인치 모니터에서 보는 것처럼 되는거겠죠.



그럼, 실제 세팅은 어느정도가 좋을까요?

MSX2의 비트맵 모드는 212라인을 쓰니까, 줌 10%를 적용하면 되겠구요.

V9938/V9958의 오버스캔 트릭모드를 쓸때는 240p 전체 출력이 필요하니 줌을 꺼야겠죠.


아래는 실제 화면에서 적용된 모습입니다.

스크린5의 212라인 및 스크린2의 192라인을 쓰는 게임이네요.





아래는 스크린7의 인터레이스 424라인을 쓰는 M 파일매니저의 모습입니다.

위아래 꽉찬 화면이네요.





아래는 오버스캔 트릭모드를 사용하는 ASO REMAKE입니다.

줌을 해제하고 240라인을 모두 표시하고 있어요.





결론:

사용하시는 모니터가 와이드 비율이라면,

모니터의 오버스캔 또는 줌 설정을 적당히 맞춰서 쓰시면 되겠습니다.


.

.

.

.


하... 글 쓰고 보니 또 현타가...


사실 이 글을 쓰게 된 이유가 있는데요ㅋ

십년 넘게 잘 쓰던 32인치 모니터가 맛이 가는 바람에 ㅠ.ㅠ

구닥다리 17인치 모니터를 써야 할 상황이 되었습니니다요~





예전 2009년 모임 때 이 모니터를 갖고 갔었는데, 아마 기억하시는 분도 계시겠네요.

아래는 그 모임의 사진입니다~ (모니터 뒷통수가~ ㅎ.ㅎ)





한줄 요약: 갑자기 작은 화면을 보니 답답해서, 모니터에 ZOOM 모드 두개를 사용!


그럼, 즐 MSX하셔요~ ㅎ.ㅎ


2019년 12월 3일 화요일

[강좌] 07. MSX 기본사양

오랜만에 [강좌]글을 적어봅니다.

제목은 [강좌]지만... 절반은 잡담이니 참고하셔요~ ㅎ.ㅎ





07. MSX 기본사양


[서론 aka 잡담]


요즘에도 MSX를 쓰시나요?


저는 국딩시절 학교와 학원에서 아이큐1000을 주로 만졌습니다.

디스플레이는 잔상이 멋지구리하게 남는 그린모니터가 주류였습니다.

6학년 때가 되어, 아이큐2000 + RGB모니터 + 3.5"FDD 최강(!)의 사양으로 MSX가 집에 들어왔습니다. ㅎ.ㅎ


95년부터는 fMSX 에뮬레이터가 등장하면서 MSX2+를 간접적(?)으로 쓸 수 있었습니다.

(고딩 때 친구집에서 본 A1-WSX가 아직도 기억에 생생하네요. 그 때는 MSX 오타인가...했었지만요ㅋ)

나중에 fMSX 기반으로 paraMSX 에뮬를 만들어서 입맛에 맞게 잼나게 즐겼구요.


자연스레 실기 MSX에서 한동안 멀어졌는데...

갑자기 MSX2+ 실기를 한번 써보고싶더라구요.

그 때가 첫 회사에 들어와서 기숙사에 살던 때였습니다. 2001년 경

기숙사 사진도 한장 올려봅니다. 소니 디카(FDD 내장ㅋ)로 찍었던 640 x 480 사진입니다요~





MSX2+ 기종은 종류가 몇개 없는데, 파나소닉의 FS-A1WSX 기종이 S-Video 출력이 가능해서 요걸로 골랐습니다.

램도 512KB로 늘리고 DOS2 카트리지도 만들고, 플래쉬롬팩도 만들어서 쓰다보니... 결론이 나오더군요.

--> 정답은 GT


아마 2003년으로 기억합니다. 옥션에 A1GT가 올라온걸 바로 구매했었지요.

당시에는 주로 ebay랑 옥션만 사용했습니다.

야후 재팬 옥션은 나중에서야 구매대행으로 몇번 이용했었네요.


GT의 빠른 속도를 쓸 수 있게되니, 점점 더 욕심은 커져만가고~ ㅎ.ㅎ

빠른 디스크드라이브를 위해 MMC Disk interface를 만들었구요.

나중에는 MMC/SD Drive로 개명하게 되어서, 지금은 이걸 MMC/SD Drive V1으로 부르고 있습니다.





그 후, 준성님의 MPX 카트리지, 필립스 Music Module (MSX-AUDIO), 선라이즈 MoonSound 순으로...

저의 MSX 주변기기 사양은 점점 높아져갑니다.


.

.

.


제가 이런 잡다한 얘기를 왜 꺼냈냐면요.

요즘들어 MSX를 사용하시는 분들이 모두 저와 같진 않을꺼라는 생각이 들더라구요.


파라동 게시판에 올라오는 글을 볼 때도 그렇고, 정모에서 이런저런 얘기를 나눠보면...

80년대 아이큐1000/2000 잠깐 쓴 후 한동안 MSX를 끊었다가 (혹은 MSX를 친구집에서만 접했다가)

21세기로 넘어와서 뭔가 좀 오버스러운 MSX 사양으로 다시 접하게 되는거지요.

뭔가 히스토리를 건너뛰다보니 국민학교에서 대학교로 바로 간 느낌?

아닌가요? 그냥 저의 느낌일뿐...일지도요. ㅎ.ㅎ


그래서 기본 정리를 좀 해보려고 합니다.

MSX를 처음 접하시는 분들께도 도움이 될 듯 합니다요~~



[본론]


MSX 기본 사양(specifications)을 먼저 알아보겠습니다.

기본은 말 그대로 "필수 (Mendatory)"인 사양을 의미합니다.

이 부분이 부족하면 그냥 MSX 표준은 아닌거에요.

그리고, 옵션 사양은 추가 가능한 부분을 의미합니다.


버전은 MSX1, MSX2, MSX2+, MSX turbo R 4개가 나와있습니다. 곧 turboR 30주년이 ㅠ.ㅠ

MSX turboR의 경우는 표기법이 애매해서,

MSXturboR, MSX turbo R, MSX TurboR 등으로 여러가지 모양이 있으니 참고하세요.



1. MSX1


CPU    = Z80 3.579545MHz 호환

RAM    = 8KB

ROM    = Main BIOS 32KB

VDP    = TMS9918A 60Hz 또는 TMS9929A 50Hz

VRAM   = 16KB

PSG    = AY-3-8910 호환

카세트 = 카세트 1200/2400bps

키보드 = 영문 + (옵션: 일어/한글/러시아/유럽 문자)

외부슬롯 = 1개 (옵션: 확장버스)

범용포트 = 1개 (옵션: 2개)

프린터 = (옵션)

한자롬 = (옵션)


저가형 기종을 제외하면 대부분 MSX1은 램16KB, 범용포트 2개가 들어있습니다.

그만큼 MSX에서 게임의 비중이 크다는 얘기겠죠?ㅋ

게임롬팩은 램 8KB에서도 구동가능한 것도 있고, 16KB 전용도 있으니 잘 보셔야합니다.

정품 게임은 케이스에 표기되어있어요. ㅎ.ㅎ


그리고,

재믹스 CPC-50/51은 MSX1 기반으로 만들어졌고, MSX 로고는 없습니다. 키보드도 없구요.



2. MSX2


MSX1과 다른 부분만 표기합니다.


RAM    = 64KB (옵션: 메모리매퍼)

ROM    = Main BIOS 32KB + Sub BIOS 16KB

VDP    = V9938 (60Hz/50Hz 지원가능)

VRAM   = 64KB (옵션: 128KB)

FM 음원= (옵션: MSX-AUDIO)

프린터 = 8BIT 센트로닉스 인터페이스

범용포트= 2개

한자롬 = (옵션: JIS1, JIS2)

한자DRV= (옵션)

RTC    = RP5C01 호환


일부 특수 기종외에는 모두 VRAM 128KB가 장착되어있습니다.

대부분 MSX2 게임은 VRAM 128KB가 필요하니 참고하시구요.

VRAM이 64KB인 경우는 SCREEN 7,8을 사용할 수 없습니다.

부트로고가 SCREEN 6으로 구현된 이유가 그 때문 듯 생각됩니다요.

SCREEN 5,6의 페이지 절반만 쓸 수 있어서, 대부분 MSX2 게임이 구동안될꺼에요.


원래 부팅할 때 MSX로고와 함께 VRAM 용량이 표시되지만,

아이큐2000에서는 VRAM 용량 대신 날짜/시각이 표시됩니다. (왜 그랬을까)

X-II에서는 MSX 로고는 안나오지만, VRAM 용량은 표시됩니다. (날짜/시각은 또 어디로?)


그리고,

재믹스 CPC-61는 MSX2 기반으로 만들어졌고, MSX2 로고도 부착되어있습니다.

키보드가 옵션처리 되어있고, RTC가 제거되어 관련 BIOS 루틴들도 모두 삭제되어있습니다.



3. MSX2+


MSX2와 다른 부분만 표기합니다.


ROM    = Main BIOS + Sub BIOS 16KB + 한자DRV 16KB (옵션: 32KB)

VDP    = V9958 (60Hz/50Hz 지원가능)

VRAM   = 128KB

FM 음원= (옵션: MSX-AUDIO, MSX-MUSIC)

한자롬 = JIS1 128KB (옵션: JIS2)

한자DRV= 한자 입력기



마이크로소프트가 MSX를 포기한 후, ASCII가 전담하는 시절입니다.

이젠 국제 표준이 아니라 일본 표준 컴퓨터가 되었어요.

한자롬과 한자드라이버는 기본이구요.

MSX-MUSIC은 옵션이지만, FS-A1FX 외의 기종은 모두 MSX-MUSIC 내장되어있습니다.

MSX-AUDIO는 MSX2/2+에 내장된 기종이 아마 없을꺼에요. (비싸서?)


VRAM은 128KB 기본이 되어, 부트로고 밑에 VRAM 용량 표시를 하지않습니다.

대신 Main RAM의 용량이 표시됩니다.

MSX2는 메인램 64KB가 먼저 디텍션되는 슬롯(빠른 슬롯)을 메인램으로 사용하지만,

MSX2+부터는 모슨 슬롯의 램을 검색 후, 가장 용량이 큰 슬롯을 메인램으로 사용합니다.

하지만, DOS2 카트리지가 있으면 MSX2에서도 램 용량이 큰 슬롯으로 강제 전환됩니다.

메모리 슬롯을 가변으로 사용하는 S/W를 만들 때는 주의가 필요해요.



4. MSX turbo R


MSX2+와 다른 부분만 표기합니다.


CPU    = Z80 + R800 7.15909MHz

ROM    = Main BIOS + Sub BIOS + 한자DRV 32KB + MSX-MUSIC BIOS 16KB + DOS1 16KB + DOS2 48KB

RAM    = 메모리매퍼 256KB

FM 음원= MSX-MUSIC (옵션: MSX-AUDIO)

PCM    = 8BIT DAC/ADC

MIDI   = (옵션: MSX-MIDI)

TIMER  = 255682Hz

FDD    = 3.5" 1DD, 2DD



CPU가 두개 들어갑니다. R800은 Z80에 비해 클럭사이클이 약 4배 빠릅니다.

그 때문에 Z80 28MHz로 부르기도합니다.

turboR 외부버스가 3.58MHz라서 실제로 28MHz 속도는 안나와요ㅋ


R800에는 Z80에 없는 곱셈 명령어가 추가되어있습니다.

근데 실제로 쓰는 S/W가 거의 없는걸로 알고 있어요.

(제가 제작한 터보알 전용 S/W는 쓰고 있습니다.)


H/W 타이머는 S/W에서 종종 쓰이는걸로 알고 있습니다. PCM 출력도 마찬가지이구요.

8BIT DAC 출력은 프린터 포트 용 Covox 같은 것과 유사합니다.


한자롬 JIS2는 옵션이지만, A1ST/GT 두 기종 모두 JIS2 폰트가 들어있습니다.


일반 MSX-DOS2 카트리지(v2.20)는 DOS2 48KB와 한자DRV 16KB가 들어있지만,

한자DRV가 MSX2+부터 내장되어있어서, 대신 FDD(DOS1 16KB)가 들어가있습니다.

turboR 내장된 DOS2는 v2.30 (A1ST), v2.31 (A1GT) 두 버전이 존재하구요.

모두 Z800/R800 CPU 모드 전환 및 FDD 드라이버 통합으로 동작합니다.

참고로 OCM에 들어있는 디스크롬이 v2.31 기반으로 제작되어있어요.

Okei 씨의 FAT16 드라이버 통합된 롬이죠.