2017년 12월 23일 토요일

IOBox 제작 #2 - OPL3 음악도 들어보아요~ ㅎ.ㅎ

데이터 전송 부분을 조금 개선했습니다.

거의 버벅임 없이 소리가 나네요. 으흐흐...


문사운드의 OPL4 칩은 사운드블래스터의 OPL3 칩과 호환이 됩니다.

그러니까, DOSBox로부터 넘겨받은 데이터를 그대로 문사운드로 뿌리면 끝~

그냥 영상으로 바로 보시죠~





그럼, 즐거운 주말 되세요!


2017년 12월 20일 수요일

IOBox 제작 #1 - MoonSound를 DOSBox의 사운드카드로 사용하기

혹시 기억하시는 분 계시려나요?

리눅스 용 paraMSX 에뮬레이터에 실기 turboR의 PSG, 키보드를 연결했던적이 있었죠.

자세한건 아래 링크 참고요~ ㅎ.ㅎ

http://cafe.naver.com/msx/3395


이번에는 윈도 용 PC 에뮬레이터인 DOSBox와 MSX를 연결했습니다.

DOSBox에 MSX 붙여서 뭘 하느냐구요? ㅋ


DOSBox에서는 애드립 및 사운드블래스터가 에뮬레이션이 됩니다.

FM 사운드로 사용되는 칩은 OPL2/3 계열이죠.

MSX의 MoonSound가 OPL4 칩을 사용하기 때문에 H/W적으로 OPL2/3와 호환됩니다.

DOSBox에서 OPL를 액세스 하는 코드를 변경해서, MSX의 사운드를 구동하게되면...

S/W 에뮬레이션 되는 사운드가 아니라, 야마하의 진짜 OPL 사운드를 들을 수 있겠죠!


MSX와 PC는 RS-232C 인터페이스로 연결이 되어있습니다.

보레이트는 115200BPS로 세팅했구요.


DOSBox SVN 소스의 IO 에뮬레이션 코드를 수정해서,

220H, 221H, 388H, 389H 포트 액세스를 MSX로 전송합니다.


MSX에서는 받은 데이터를 이용해서 MoonSound 및 PAC-V를 구동하게 됩니다.

간단한 프로그램을 하나 만들어서 돌려봅니다.

아래는 실제로 동작되는 순간을 찍은 모습입니다.




그러니까 요약하면...

윈도의 DOSBox의 사운드카드 IO가 MSX로 전달된다고 보시면 되겠습니다.



마지막으로 영상을 감상하시지요~ ㅎ.ㅎ

참고로 PC쪽의 스피커는 꺼둔 상태이구요. MSX쪽의 스피커만 켜져있습니다.





그럼, 즐거운 저녁 되세요!


2017년 12월 16일 토요일

PAC-V Tool v1.03


Download: PAC-V_Tool_103_20171216.zip


----------------------------------------------------------------

    PAC-V Tool v1.03 (2017-12-16)

        By 서영만 <email:sharksym@hitel.net>

----------------------------------------------------------------


* UPDATE


  MSX-MUSIC이 내장되지 않은 기종에서, PAC-V 와 FM-PAC 카트리지를

  함께 사용 시 OPLL 소리가 나지않는 현상 수정



* PACV.COM


  PAC-V 카트리지의 SRAM을 관리하는 프로그램입니다.

  MSX-DOS1 및 MSX-DOS2 에서 동작합니다.

  BIOS롬, LED패턴을 카트리지에 다운로드 할 수 있으며,

  파나소닉 PAC 데이터를 SAVE/LOAD 할 수 있습니다.



* 요구 사항


  PAC-V 카트리지

  MSX-DOS1 또는 MSX-DOS2



* 파일 목록


  PACV.COM   - 카트리지 관리 프로그램

  PACV.ROM   - Dummy BIOS 롬

  PACV.INI   - LED 패턴 (기본 수직 막대)

  PACV_1.INI - LED 패턴 샘플#1

  PACV_2.INI - LED 패턴 샘플#2

  PACV_3.INI - LED 패턴 샘플#3



* 사용법


  PACV W|P|S|L Filename [Slot[SubSlot]]


    W: BIOS 롬 다운로드  (Dummy BIOS 또는 FM-PAC BIOS 롬)

    P: LED 패턴 데이터 다운로드       (슬롯번호 생략가능)

    S: PAC 데이터 덤프 및 디스크 저장 (슬롯번호 생략가능)

    L: PAC 데이터 다운로드            (슬롯번호 생략가능)


  예) PACV W FMPAC.ROM 1

      PACV P PACV.INI

      PACV S SRAM.PAC

      PACV L SRAM.PAC



* 주의 사항


  PACV.COM 프로그램은 PAC-V 카트리지 전용 툴입니다.

  파나소닉의 PAC 및 FM-PAC 카트리지에서는 동작하지 않습니다.


2017년 12월 11일 월요일

paraMSX-R 제작 #15 - 사용자 머신 로딩

기본적으로 paraMSX-R에서 사용되는 머신 데이터는 미리 플래쉬롬에 다운로드되어야합니다.

만약 플래쉬롬에 내장되지 않은 머신을 사용하고 싶으면 어떻게 해야할까요?


이걸 어떤 방식으로 만드는게 가장 효과적일지 생각해보았습니다. (6개월 전에요 ㅋ)

결론부터 얘기하면, 머신 데이터 영역을 램으로 구성하는 방식이죠.

머신 데이터는 PARAMSX.COM 실행할 때 함께 로딩을 하구요.


처음 paraMSX-R 설계할 때, 메모리 매퍼를 1024KB까지 지원하도록 했는데요.

512KB만 메모리 매퍼로 쓰고, 나머지 512KB를 머신 데이터 로딩 용으로 바꿨습니다.

매퍼램 1024KB가 있으면, 프로그램 개발/테스트 시에는 유용하게 쓰일 수 있겠지만,

아마 사용자 대부분의 경우는 별로 필요없을 것 같더라구요.


사용자 머신 파일명은 *.MCH 입니다.

도스에서 PARAMSX.COM 구동 시, 파일명을 입력해서 로딩할 수 있습니다.

머신 파일을 로딩하게 되면, 해당 머신으로만 구동이 됩니다.

카트리지에 내장된 머신을 선택하는건 불가능해집니다.


아래는 PARAMSX.COM 1_A1.MCH 실행 후, A1의 데스크팩으로 진입한 모습입니다.





사용자용 머신 파일(MCH)은 512KB 내외의 용량이니까,

2DD에서 구동하시는 분들도 활용이 가능합니다만...

로딩시간 때문에 가능하면 고속/대용량 디스크드라이브에서 활용하시는 걸 추천합니다. ㅎ.ㅎ



그럼, 실제 동작 모습을 보시지요~

처음에는 PARAMSX.COM을 그냥 실행해서 내부 머신 선택하는 모습이 보이구요.

그 후, FS-A1, FS-A1WSX, CBIOS2+ (JP) 모드를 로딩/구동하는 모습이 나옵니다.





그럼, 다음에 또 뵙겠습니다요~ ㅎ.ㅎ/


궁금한 부분 있으시면, 질문글로 올려주세요~


 

2017년 12월 3일 일요일

2017년 송년회 잘 다녀왔어요~

어제 토요일에 2017년 송년회가 있었습니다.

일년 후딱 가네요. 작년 송년회한지 얼마안된 것 같은데..ㅋ


먼저 이벤트 준비/진행해주신 유령군님, 우유속의소주님 감사드리구요~ ㅎ.ㅎb

사진 한장만 올려봅니다.

얼굴을 모자이크할까 고민하다가 걍 사진 크기만 줄였어요.





오랜만에 오신분들도 뵙고, 처음 뵌 분들도 있고해서 즐거웠습니다.

이번에도 역시나, 저는 9시 40분쯤 자리를 떴네요. 득템한 나눔품을 손에 들고서~~ 룰루~


삶의여유님의 게임디스크 3종셋과 이올로님의 송년회 기념 디스크입니다.

레이블 멋지네요! ㅎ.ㅎ/





2017 마지막까지 행복한 날 가득하세요. 건강하시구요!


2017년 11월 27일 월요일

FS-A1FX 콕핏II - 2000년을 거부하다(!)

갑자기 이게 뭔소리야? 생각하셨겠죠? ㅎ.ㅎ;


최근에 paraMSX-R을 만들어서 이것저것 테스트 하는 도중 요상한 현상이 발견됩니다.

본체의 RTC가 1988년 1월 1일로 초기화되는 현상이었는데요.

ASTERiS님도 이 문제를 얘기하신적이 있습니다.


근데, 요게 참 요상한것이 -_- 왜 1988년일까... 설마 서울 올림픽 바이러스???


으흐흐... 요거 범인을 찾았어요.

범인은 바로 FS-A1FX의 내장 프로그램인 콕핏II입니다.



그럼, 증거 사진 나갑니다.

깨끗한 사진을 위해 blueMSX를 활용했어요.


blueMSX는 기동하면 RTC를 윈도의 시간으로 초기화시켜줍니다.

그러니까 에뮬의 MSX랑 윈도 시간이 같아지는거죠.

아래는 DOS로 부팅해서 확인한 모습입니다.






근데 FS-A1FX의 콕핏으로 진입을 하게되면... 아래처럼 날짜가 바뀝니다요!

참고로 콕핏으로 진입하려면, blueMSX의 펌웨어 스위치를 켜야합니다.

DOS로 부팅해서 확인하면 실제 RTC 설정도 바껴있습니다. 1988년으로 ㄷㄷㄷ

RTC의 연도가 2000년 이후로 인식되면 배터리 오류로 생각하나봅니다.

FS-A1FX의 제품 출시가 1988년이라 이렇게 초기화하는거겠죠?






그럼, 날짜를 1988년 이전으로 설정하면 어떻게 되는지 한번 볼까요?

1984년 11월 27일로 설정 후, BASIC 모드에서 소프트 리셋을 해줍니다.

그리고 콕핏으로 진입 후, 달력을 띄워보면~~ 1984년으로 잘 나오네요. ㅎ.ㅎ





결론: FS-A1FX의 콕핏 프로그램은 2000년 이후의 날짜를 오류로 인식함


그럼, 편안한 밤 되셔요~ ㅎ.ㅎ


2017년 11월 24일 금요일

paraMSX-R 제작 #14 - BIOS/머신 롬 다운로드

paraMSX-R는 에뮬 구동을 위해, 각종 BIOS 롬과 MSX 머신 설정롬이 들어있습니다.

카트리지를 처음 구동 시, 이 롬들을 미리 다운로드한 후 사용해야합니다.


먼저 파일을 준비합니다.

PARAMSX.COM -> 메인 에뮬레이터

PARATOOL.COM -> 각종 롬 다운로더

PARAMSX.ROM -> 메인 BIOS 롬

PARAMACH.ROM -> 머신 데이터 롬

AUDIO.ROM -> MSX-Audio v1.3 롬

FMPAC.ROM -> MSX-Music BIOS 롬





메인 프로그램은 PARAMSX.COM 인데요.

머신 데이터가 없는 상태에서 실행하면 아래처럼 에러가 출력되며 구동이 되지않습니다.





아래는 롬 다운로더인 PARATOOL.COM을 실행한 모습입니다.

카트리지의 H/W 버전과 슬롯 위치가 표시됩니다.

PARATOOL은 BIOS 롬의 종류를 구별하기 때문에 다운로드 시 특별한 옵션은 쓰지않습니다.

단, 메인 플래쉬롬이 지워진 경우는 슬롯 위치를 수동으로 설정할 수 있습니다. (/Sn 옵션)






1) 메인 BIOS 롬 다운로드


DOS에서 PARATOOL PARAMSX.ROM 실행하면, 아래 사진처럼 다운로드가 완료됩니다.

PARAMSX.ROM은 512KB 크기입니다.


주의)

만약 DOS1 FDD를 사용하는 경우는 720KB 디스켓 한장에 모든 파일을 넣을 수 없으니,

MSX-DOS 시스템 파일과 PARATOOL.COM, PARAMSX.ROM 두개 파일만 넣고 부팅해서 다운로드하세요.

다운로드 후 PARAMSX.ROM 파일을 디스크에서 삭제하셔도 됩니다.





2) 머신 데이터 롬 다운로드


도스에서 PARATOOL PARAMACH.ROM 실행하면, 아래 사진처럼 다운로드가 완료됩니다.

PARAMACH.ROM은 128KB 크기입니다.

다운로드 후 PARAMACH.ROM 파일을 디스크에서 삭제하셔도 됩니다.





3) AUDIO 롬 다운로드


MSX-Audio BIOS v1.3 롬(FRS 버전, 48KB 크기)을 다운로드합니다.

파일은 아래 홈페이지에서 받을 수 있습니다.

http://frs.badcoffee.info/tools.html

자신의 환경(실제 장착된 카트리지)에 맞는 롬을 넣으면 됩니다.

예) 문사운드 계열 카트리지의 경우, msxaudio13.OPL3_mono.rom을 사용


도스에서 PARATOOL AUDIO.ROM 실행하면, 아래 사진처럼 다운로드가 완료됩니다.

MSX-DOS에서 긴파일명은 쓰기 불편하니, 적당히 8.3 파일명으로 쓰시는걸 추천합니다.






4) FMPAC 롬 다운로드


MSX-Music BIOS + PAC 커맨더로 이루어진 롬입니다.

오리지널 롬 또는 영문/한글 패치된 롬(64KB)을 사용하면 됩니다.


도스에서 PARATOOL FMPAC.ROM 실행하면, 아래 사진처럼 다운로드가 완료됩니다.

사진에서는 한글패치판 FMPAC_K.ROM을 다운로드했네요.





다운로드가 완료되었으면, 재부팅합니다.


다운로드했던 롬파일은 디스크에서 삭제해도 무방하구요.

PAC/FMPAC의 SRAM 데이터는 에뮬 내에서 플래쉬롬에 save/load 하니까,

전원을 끄더라도 사라지지 않습니다. 참고하세요.


아래는 메인 에뮬레이터 프로그램(PARAMSX.COM)을 구동한 모습입니다.






궁금한 부분 있으시면, 질문글로 올려주세요~ ㅎ.ㅎ



2017년 11월 23일 목요일

오랜만에 대우 CPC-300 (아이큐2000)을 켜보았습니다.

제가 주력으로 쓰는 모니터(32인치 LCD)는 SCART를 입력으로 받는건데요.

A1GT 출력이랑 외부 스피커 등의 잡다 선들이 얽혀있어서, 거의 GT전용으로 쓰고 있었지요.


이 모니터에 아이큐2000을 연결하려면, SCART 케이블을 바꿔야해서 상당히 귀찮습니다요~ㅋ

며칠전에 마피님이 대우 RGB 8핀DIN -> 일제 RGB 8핀DIN 변환 케이블을 만들어주신걸 써봤습니다.


국산(대우) RGB랑 일제 RGB 핀배열은 아래 그림 참고하시구요.

AVC, YS 핀에 12V,3V 이렇게 적혀있는데, 이건 전원이 아니고 신호선입니다.

소니 방모를 쓰시는 분들은 아마 연결안해보셨겠죠? ㅎ.ㅎ






GT에 꽂혀있는 케이블을 뽑아서, RGB 변환 케이블을 통해 아이큐2000에 연결합니다.

본체가 누렇게 보이나요? 사진이 이상한게 아니구요.ㅋ 햇볕에 노랗게 익어서 그렇습니다요.






부팅 로고도 큼직하게 잘 보이네요~ ㅎ.ㅎ






스페이스 맨보도 돌려봤습니다.

MMC/SD V2의 멀티롬인데... 참 오랜만에 구동해보네요. ㅎ.ㅎ





그럼, 편안한 밤 되셔요~~~


2017년 10월 21일 토요일

MS-DOS Player 맛보기

MS-DOS Player는 윈도에서 구동되는 프로그램입니다.

http://takeda-toshiya.my.coocan.jp/msdos/


이름만 봐도 기능을 추측할 수 있는 프로그램인데요.ㅋ

윈도에서 MS-DOS 용 16비트 프로그램을 실행해줍니다.

그러니까 MS-DOS 에뮬인 셈이죠. 소스를 보니 CPU쪽은 MAME의 코드가 쓰였네요.


저는 윈도10 x64 버전을 쓰고 있구요.

프로그램(msdos.exe)를 윈도 PATH가 걸린 폴더에 복사했습니다.

명령 프롬프트를 열어서 실행해보면, 아래처럼 뜨는걸 볼 수 있네요.





윈도에서 DOS 프로그램 실행은 여러가지 방법이 있는데요.

대표적으로 VMware, DOSBox 같은 프로그램이 먼저 떠오르네요.


근데 MS-DOS Player는 실행하려는 프로그램에 에뮬레이터를 삽입해서,

win32 프로그램처럼 변환해주는 좀 특이한 기능을 갖고 있습니다.

사용자 입장에서는 요게 아주 편리한 방식이죠.


그럼 어떻게 구동되는지 한번 보시죠!



테스트에 쓰인 프로그램은 DOS 용 LHA.EXE랑 UC.EXE입니다.

압축 테스트 용 LZH 파일도 하나 준비했구요.

참고로 UC는 UltraCompressor II 입니다.


윈도의 명령 프롬프트에서 실행해볼까요?

아래처럼 에러가 나오네요. 흐흐...





그럼 MS-DOS Player로 LHA를 실행해보겠습니다.

잘 돌아가네요!





근데 매번 msdos lha .... 으로 실행하려면 귀찮겠죠?

링크를 만드는 등의 다른 방법도 있겠지만...

MS-DOS Player의 실행파일 변환 기능을 한번 써보겠습니다요!


msdos -c -p437 LHA.EXE 를 실행한 모습입니다.

옵션에서 -c는 실행파일 변환을 의미하구요. -p437은 문자의 코드페이지437을 의미합니다.

new_exec_file.exe 라는 이름으로 변환된 파일이 나왔네요. (용량이 뻥튀기되었..ㅋ)





그럼, 원래의 LHA.EXE 파일을 삭제하고 새로 생성된 파일을 LHA.EXE로 바꿔서 실행해봅니다.

잘 돌아가죠? 오리지널 win32 프로그램처럼요 ㅋㅋ





LHA.EXE 파일도 만들었으니, 이걸로 파일 입출력이 제대로 되는지 봐야겠죠?

lha l 명령과 lha e 명령 둘다 잘 먹네요.





파일이 정상적으로 생성되었는지 텍스트 파일 하나만 열어봅시다~

압축이 잘 풀렸네요! 짝짝짝~ ㅎ.ㅎ






UltraCompressor도 같은 방식으로 파일변환을 해봅니다.

실행도 잘 되는군요! ㅎ.ㅎb





이런식으로 윈도에서 도스용 프로그램을 써야할 경우가 생기면,

MS-DOS Player가 유용하게 쓰일 수 있겠죠?


그럼, 즐거운 윈도 생활(?) 되세요~ ㅎ.ㅎ


.

.

.

.

.


마지막으로 몇줄 더 적습니다.


윈도10의 파워쉘에는 LHA 프로그램이 내장되어있습니다.

어, 그럼 여태 삽질한건가요?

그건 아니구요.


아래 스크린샷을 한번 보시죠!





lha l 명령을 써보면 압축파일 처리에 문제가 발생하는게 보이시죠? ㅋ

e 명령에서는 에러가 없는데... 아마 압축은 제대로 풀린 것 같네요.


결론은,

MS-DOS Player를 이용해서 DOS 실행파일을 변환하면 편하게 쓸 수 있다

입니다.


그럼, 즐거운 주말되세요!!


2017년 10월 19일 목요일

paraMSX-R 제작 #13 - MSX-Audio BIOS v1.3 테스트

간만에 paraMSX-R 영상을 찍어보았습니다. ㅎ.ㅎ


paraMSX-R에는 MSX-Audio BIOS v1.3 에뮬이 들어있습니다.

여기서 쓰이는 BIOS는 파나소닉의 오리지널 롬은 아니구요,

브라질의 sd_snatcher님이 개인적으로 개발하는 개조 BIOS입니다.


오리지널 MSX-Audio는 Y8950에서만 구동이 되지만,

개조 BIOS는 필립스 뮤직모듈, 문사운드, 달소리 등의 Y8950 및 OPL 계열칩이 있으면 쓸 수 있습니다.

참고로 BIOS 롬은 PARATOOL.COM 프로그램으로 paraMSX-R에 다운로드 가능합니다.


그럼 실제 동상 모습을 볼까요?

저의 A1GT에서 문사운드 카트리지와 함께 paraMSX-R을 구동했습니다.

전반은 CPC-400 모드에서 딜럭스박스에 제비우스를 로딩/구동하는 영상이구요.

후반은 FS-A1WX 모드에서 파이어호크 HDD 인핸스 버전을 구동하는 영상입니다.


MSX-Music (OPLL)과 차이가 좀 느껴지시나요? ㅎ.ㅎㅋ




그럼, 즐거운 밤 되세요. ㅎ.ㅎ/


2017년 10월 15일 일요일

MAD80 - 페이지3의 메모리 덤프 시 슬롯 조건??

최근에 천국동 질답 게시판에 MAD-80 글이 하나 올라왔었습니다.

http://cafe.naver.com/msx/13227


메모리 덤프 명령 쓸 때, 시작 주소를 C000H 이후(페이지3)로 설정하면 주소가 0000H으로 바뀌는 현상에 대한 것이었습니다.

일단 이경우가 발생하면 0000H ~ BFFFH 메모리 덤프를 반복하게 됩니다. (무한루프~ㅋ)


MAD80이 오래된 프로그램이긴 하지만...

80년대에 아이큐1000/2000에서 쓰셨던 분들이 많을거라 생각해서 몇가지 테스트를 해보았습니다.

사실 저는 이거 안써봤어요. ㅎ.ㅎ


아래는 MAD80 설명서에서 긁어온 내용입니다.


1) MAD80 2.0 의 상주과정.

기존의 MAD80 에서는 무조건 슬롯 2에 MAD80  을 세트시킴으로 메인램이 슬롯 0의 

확장슬롯2에 있던 MSX 2 에서는 안될수밖에 없었다.  그러나 MAD80 2.0 에서는 다

음과 같은방법으로어떤환경에서든 잘  상주시킬수 있게 되었다. MAD80 2.0  은 페

이지 1에 상주하고  페이지 0을 오브젝트 영역으로 쓰는데 찾는방법은  각 기본슬

롯 및 확장슬롯을 모두조사하여 그 페이지가 램이면  그 슬롯의 페이지 1에 MAD80 

2.0 을 상주시킨다. 예를들어 MSX  2 의 경우라면 0(기본슬롯)-0(확장슬롯),0-1로 

찾아나가다가 0-2의 페이지 1에서 램이 발견되므로 그곳의  페이지 1에 MAD80 2.0 

을 상주시키고  페이지 0을 오브젝트  영역으로 사용한다. 그러나 항상  상주하는 

위치가 같은것은 아니다.(확장램이 있을경우 그곳에 자리잡는다)


요약을 해보면,

- MAD80.BIN 파일을 로딩/실행하면 램에 상주한다.

- 페이지1 (4000H~7FFFH)에 상주하며, 슬롯 위치에 상관없이 상주 메모리를 찾는다.

- 확장램이 발견되면 확장램에 상주한다. (여기서 확장램은 재미나 램카드일 확률이 높겠죠?)



그럼, 테스트를 해봅니다.

blueMSX 에뮬에서 FS-A1WSX 머신으로 구동했습니다.

참고1) A1WSX는 슬롯0, 슬롯3 두곳이 확장되어있고, 메인메모리(64KB)는 슬롯3-0에 위치합니다.

참고2) MAD80의 슬롯지정은 일반적인 MSX BIOS의 슬롯ID와는 다릅니다. 설정값은 매뉴얼을 참고하세요.


1)

#DC00,DC01F 명령으로 메모리 32바이트를 덤프해봤습니다.

어라? 메인램이 있는 슬롯3-0은 덤프가 정상적으로 되네요.

그 외의 슬롯은 모두 오동작합니다.

아래 슬롯0-0에서 덤프한 것 처럼 무한루프로 빠지면서, 0000H ~ BFFFH 덤프가 반복됩니다.

비어있는 카트리지 슬롯이든, 64KB 롬팩을 넣은 슬롯 상관없이 오동작합니다. (페이지3은 덤프 불가!)





2)

메인메모리(BIOS가 선택하는 메인메모리) 위치와 덤프 조건과 연관이 있을까요?

슬롯2에 메모리매퍼 2048KB를 설정하고 부팅합니다. 이렇게 되면 메인메모리가 슬롯2로 선택이 되겠죠?


덤프를 해보면 아래처럼 나오네요.

메인램이 있는 슬롯2에서는 C000H 이후 메모리가 제대로 덤프가 됩니다.

근데, 본체 내장메모리인 슬롯3-0에서 덤프하면 오동작하네요. @.@

그럼, 메인메모리가 아닌 슬롯은 무조건 오동작하는걸까요?





3)

그럼, MAD80 프로그램이 어느 슬롯에 상주해있는지 확인해봅시다.

슬롯2의 페이지1을 덤프합니다. --> 아무것도 없네요. FFFF....

슬롯3-0의 페이지1을 덤프합니다. --> MAD80 프로그램이 보이네요.

어랏, 아까 슬롯3-0의 페이지3을 덤프하면 맛이 갔는데...ㅋ






현상을 정리하면...

- 메인메모리로 선택된 슬롯은 페이지3을 덤프할 수 있다.

- 메인메모리로 선택된 슬롯이 아니라면, 본체 내장/외부 상관없이 페이지3을 덤프할 수 없다.


그럼, 결론은 뭘까요?

-> MAD80으로 페이지3을 덤프하는 용도로 쓰지 못함


이상입니다~ ㅎ.ㅎ

2017년 10월 13일 금요일

세가 마스터 시스템 버전의 YS 음악 (DCSG, OPLL)

아시다시피 MSX2 버전의 YS는 PSG (AY-8910) 사운드만 사용합니다. (YS2도... YS3도... ㅎ.ㅎ)

세가 마스터 시스템 버전의 YS는 사운드가 두 종류더라구요. DCSG (SN76489)와 OPLL (YM2413)인데요.


세가쪽의 YS 음악들은 VGM 파일로 덤프가 되어있어서, MSX에서 재생을 해볼 수 있습니다.

그래서 제 GT로 돌려봤다는 얘기죠!ㅋ


M에서 두버전의 VGM 파일들을 교대로 재생시키는 영상을 찍어보았습니다.

VGMPlay는 Grauw님의 프로그램을 사용하였습니다.



.

.

.


그리고, 요건 보너스 영상~ ㅎ.ㅎ;

앞부분 30초만 들어보세요. 뭔가 익숙한 멜로디 ... 그거 맞나요? ㅋ




2017년 9월 4일 월요일

paraMSX-R - 조만간 제 손을 떠날 친구들입니다... 흙흙~

요놈들이요~ ㅎ.ㅎ;





플래쉬롬 다운로드 및 동작 테스트 중이구요. (주말을 홀라당 까먹은...)

테스트가 끝나면 몽땅 맛탱이님께 전달될 예정입니다.


paraMSX-R 케이스가 궁금하신 분은,

며칠전 ASTERiS님이 올리신 paraMSX-R 영상을 보시면 나오니까 참고하셔요~


그럼, 즐거운(!) 월요일 되셔요~ ㅎ.ㅎ


2017년 8월 25일 금요일

MMC/SD Drive는 어떻게 SCC 사운드와 공존할까?

"MMC/SD Drive는 어떻게 SCC 사운드와 공존할까?"

혹시 이런 의문 가져보신 분 있으세요?


"보드에 SCC 칩이 들어있으니, SCC 사운드가 나오는게 당연한게 아니었나?"

아마 깊게 생각안해보신 분들도 계실 듯 해서 짧게 설명드려봅니다~ ㅎ.ㅎ


MSX의 슬롯에서 동작하는 SW는 16KB 페이지 단위로 관리됩니다.

Z80 CPU 주소가 64KB니까 4개 페이지로 나뉘는거죠.

페이지0 = 0000H ~ 3FFFH

페이지1 = 4000H ~ 7FFFH

페이지2 = 8000H ~ BFFFH

페이지3 = C000H ~ FFFFH


그럼, MMC/SD Drive는 어떤 페이지를 사용할까요?


2004년에 처음 제작했을 시, MMC/SD BIOS는 페이지1,2를 사용했었습니다.

그러니까 4000H ~ BFFFH 영역을 사용하는거죠.


근데, SCC 사운드는 페이지2를 사용합니다.

오리지널 SCC = 9800H ~ 98FFH

SCC-I 모드   = B800H ~ B8FFH


어라? 페이지2가 겹치네요. ㅎ.ㅎ;

MMC/SD BIOS를 페이지1만 사용하도록 잘 구겨넣으면, SCC 사운드를 함께 쓸 수 있겠더라구요.


그래서 최종적으로 MMC/SD BIOS는 페이지1에서 구동되도록 제작이 되었구요.

따라서, 페이지2에 SCC 레지스터가 매핑되더라도 디스크 동작에 영향이 없게 되었습니다.


MMC/SD Drive V2하나만 꽂아도...

외장 SCC 지원하는 게임(메탈기어 디스크판, 스내쳐 등)의 사운드를 즐길 수 있게 된 이유입니다.

쉽죠? ㅎ.ㅎ


그럼, 이만~ 슈슝~~


2017년 8월 13일 일요일

MCDRV로 마이크로캐빈 BGM을 들어보아요~




MCDRV은 Manuel Pazos 아저씨가 만든 프로그램입니다.

마이크로캐빈에서 제작된 게임에서 추출된 음악 데이터를 플레이하는 기능을 갖고 있어요.


아래 github에 관련 파일들이 업로드되어있으니, 참고하시구요.

https://github.com/k0gaMSX/legacy/tree/master/MUSIC/MCDRV


도스 용 프로그램이라 편하게 음악을 들을 수 있어서 좋네요~ ㅎ.ㅎ


동작 모습을 10분짜리 영상으로 찍었습니다. 궁금하신 분은 재생 버튼을 눌러주세요.

(볼륨이 좀 작게 녹음되었네요.ㅋ)




2017년 7월 20일 목요일

ARKANOID PAD (DIY Kit)

자낙님께서 제작하신 알카노이드 패드 DIY 킷을 받았습니다.

상세한 제작설명서 덕분에 금방 만들었어요. ㅎ.ㅎb





사진 몇장 올려봅니다.


홀 위치 맞추고 요리조리 재단하느라 고생하신 흔적이 보입니다요~





저는 운좋게도 MD 패드 선색깔이 설명서랑 동일하네요.

다다닥 납땜~ ㅎ.ㅎ





패드 뚜껑 덮기전에 마지막으로 한장~

케이블 고정은 이올로님 하신것과 동일한 방법으로 했습니다.

기존 케이블 고정부분은 니퍼로 자르니까 잘 떨어지더라구요.





알카노이드 I/II 둘 다 구동해봤습니다.

잘 되네요. 잘 쓸께요~ 자낙님!! 올 추석에도 복많이 받으세요.ㅋㅋ




마지막으로 영상도 하나 올려봅니다.





그럼, 즐거운 밤 되세요! ㅎ.ㅎ/


2017년 7월 17일 월요일

paraMSX-R 제작 #12 - 내장된 기기 리스트

이제 H/W, S/W 거의 다 완성된 단계에 접어들었네요.

paraMSX-R 카트리지 내부에 구현된 기기들의 목록을 정리해봤습니다.



# SLOT


  기본 슬롯 4개, 모두 확장슬롯으로 설정가능

  각슬롯 개별 설정가능하며, 일부 MSX1처럼 슬롯1개에 롬+램 조합 가능



# System Flag


  MSX2+의 I/O 포트(#F4) 구현. 소프트 리셋 체크 용입니다.

  Inverted, Non-inverted type 가능



# Kanji / 한글


  Kanji JIS1/JIS2 폰트 구현 (파나소닉, 소니, 산요, 아스키 폰트, 총 4개 1024KB 폰트)

  대우 X-II 방식 한글/한자 폰트 구현 (대우 및 둥근모꼴, 총 2개 512KB 폰트)



# 일반 램


  넌매퍼 타입의 일반 메모리 구성

  각 페이지별로 16KB 조합가능 (총 64KB)



# 메모리 매퍼 램


  본체 내장형 표준 메모리 매퍼 구성 (레지스터 readback 가능)

  4가지 용량 설정 가능 (64KB, 128KB, 256KB, 512KB)



# 가상 디스크롬


  DOS1, DOS2 커널 동시 탑재 (MMC/SD V2와 동일한 구조)

  호스트(본체)의 디스크롬 호출로 실제 H/W 디스크와 연동

  디스크 드라이버 루틴을 직접 호출하므로, 섹터 Read 방식 S/W 구동가능 (각종 2DD 게임)



# PAC 및 FMPAC


  PAC SRAM 8KB 세이브/로드 구현

  SRAM 데이터는 에뮬 실행/종료 시, 플래쉬롬으로 백업/복원함 (별도의 배터리 필요없음)

  호스트(본체 내장 또는 외부 슬롯)의 OPLL 칩 유무에 따라 PAC/FMPAC 모드로 자동설정

  사용자가 FMPAC BIOS 업데이트 가능 (한글판, 영문판 패치롬 등)



# MSX-Audio BIOS


  롬 64KB + 램 8KB 타입의 Audio BIOS 설정가능

  호스트(본체)에 MSX-Audio 호환 카트리지 존재 시, BIOS 동작함 (필립스 뮤직모듈 등)

  문사운드의 경우, MSX-Audio BIOS v1.3 사용 시 OPL3 모드(ADPCM 제외)로 구동가능



# 재미나 딜럭스박스


  딜럭스박스 4메가비트 버전 구현

  국산 MSX 머신설정과 조합하면, 오래된 국산 메가램 로더 실행가능 (슬롯 문제 안생김ㅋ)



# 한글 FontPack


  호스트(본체)에 FontPack 카트리지가 있으면 지원가능

  BIOS 설정은 paraMSX-R 내부 슬롯으로 구성되므로, 호스트의 카트리지와 충돌하지 않음



# 기타 카트리지


  BASIC'n Plus, MSX-AID, 야마하 Painter 내장



# 내장 DOS1 롬디스크


  FDD등의 디스크드라이브가 없는 본체에서 간편하게 구동하기 위한 기능

  256KB 용량의 롬디스크에 DOS1 부트파일 및 PARAMSX.COM 프로그램 내장

  BASIC에서 CALL PARAMSX 명령으로 롬디스크로 설정, 재부팅 후 PARAMSX.COM 자동실행됨



마지막으로,

참고로 paraMSX-R 카트리지에는 플래쉬롬 8MB, SRAM 2MB가 들어있습니다.

현재 플래쉬롬쪽에 2MB 여유가 있는데, 이건 사용자 용으로 남겨둘까합니다.

ASCII 8KB, 16KB 메가롬 타입으로 구현될 예정이니,

 멀티롬, 메가롬 게임 또는 롬디스크 형태로 변환된 디스크게임 구동용으로 활용가능합니다.



그리고, 메인 프로그램인 PARAMSX.COM은 DOS1에서도 실행이 가능합니다.

본체 램이 64KB 뿐인 기종에서도 활용가능하도록 만들기위함이었는데요.

물론 키보드 없는 재믹스 등에서는 BIOS나 롬 업데이트(다운로드)를 할 수는 없으니까...

일단 정상적인 MSX랑 FDD 정도는 있어야합니다.

FDD만으로도 플래쉬롬 업뎃가능하도록 BIOS 팩은 512KB 정도로 쪼개서 넣을 생각입니다. ㅎ.ㅎ


그럼 진짜 마지막으로 영상 하나만 올리고 갈께요 ㅋㅋ

앞서 얘기했던 롬디스크로 PARAMSX.COM 자동실행하는 모습입니다.

저가형 MSX2인 파나소닉 FS-A1에 paraMSX-R 카트리지 하나만 꽂아서 구동합니다.

IQ-2000 및 소니 HB-F1의 내장 프로그램 구동하는걸 볼수 있어요.





그럼, 즐거운 밤 되세요. ㅎ.ㅎ/


2017년 7월 16일 일요일

paraMSX-R 제작 #11 - 가상디스크 구현

paraMSX-R 에뮬모드 동작 중, 본체(호스트)에 장착된 디스크를 사용하려면 어떻게 해야할까요?



[ 1차: 외부 기기 그대로 구동 ]


이건 paraMSX-R을 처음 구상하던 때에 생각했던 방법입니다. (벌써 1년반이 흘렀네요.ㅋ)

각 연결은 하드웨어적(슬롯 커넥터)으로 연결된 상태입니다.


@ paraMSX-R이 없을 때

본체 -> 확장슬롯 -> 디스크 드라이브


@ paraMSX-R을 연결 후

본체 -> paraMSX-R (bypass 모드) -> 확장슬롯 -> 디스크 드라이브


@ paraMSX-R을 연결 후, 에뮬모드로 동작 시

본체 -> paraMSX-R (기본슬롯 에뮬 모드) -> 확장슬롯 -> 디스크 드라이브


이렇게 됩니다.



에뮬모드에서 CPU 재기동 시, paraMSX-R의 슬롯에서는 /RESET 신호가 재생성됩니다.

결국 확장슬롯에 장착된 기기들은 본체가 리셋되는 것 처럼 인식되는거죠.


H/W로 연결이 되는 방식이라, 어떻게 보면 가장 간단한(?) 구조인데요. ㅎ.ㅎ

제 경우는 MMC/SD V3, FontPack, MPX, 232-C, 문사운드 등등 죄다 확장슬롯에 연결되어있습니다.

에뮬모드에서도 이런 기기들을 그대로 구동할 수 있으니, 아주 편할거라는 생각이었죠.



근데 실제로 만들어서 테스트해보니, 몇가지 문제에 직면하게 되었는데요.


- Z80 명령어 remap 기능 동작 시, 타이밍이 너무 빡빡해서 에러가 자주 발생.

  확장슬롯 기기 종류(자작판, 파라동 20주년판, 8421님 제작 등)에 따라 불안정한 경우가 제각각


- 확장슬롯에 연결되지 못한 기기들은 구동할 수 있는 방법 없음 (본체 내장된 FDD 등)


이리저리 고민하다가 다른 방법을 생각하게 됩니다.



[ 2차: 외부기기 간접 구동 방식 ]


원래 생각했던 에뮬모드 구동 방식은,

본체 동작 상태에서 에뮬모드로 전환되면 MSX 환경이 완전히 바뀌게 되고 그상태로 유지되는 것이었습니다.


그러니까, 제 GT에서 X-II 에뮬모드로 구동이 되면, 전원 끄기전까지는 그냥 계속 X-II인거죠.

한번 구동하면 -끝- ㅎ


이걸 본체/에뮬을 멀티태스킹처럼 구현하면 호스트 자원을 활용할 수 있으니 뭔가 해답이 나오겠다싶었죠.

물론 CPU 하나뿐이라, 유니코어 멀티태스킹이랑 비슷하게 볼 수도 있겠습니다.


MSX는 Z80 주소를 모두 다 사용하기 때문에, 코드가 바뀌려면 결국 슬롯전체를 전환하는 방식으로 구현이 필요합니다.

Z80 RST 명령어도 상당히 유용하게 쓸 수 있습니다.

명령어 자체가 1바이트로 점프하는거라,

OP code fetch 시 DATA BUS를 한번만 속이면(data remap) 현재 CPU 주소와 상관없이, 원하는 곳으로 갈(?) 수 있습니다.

음... 그러니까 소프트 인터럽트와 슬롯전환이 동시에 일어나는 현상으로 생각하면 되려나요? ㅎ.ㅎ


에뮬모드 종료하는 것도 같은 방식으로 구현됩니다.

어차피 에뮬/호스트 전환되는 건 똑같으니까요...



암튼 구현 완료되어 이런식으로 동작합니다.


1. 본체 부팅

2. DOS에서 PARAMSX.COM 프로그램 구동

3. 특정 머신으로 에뮬 구동

4. 호스트 자원(디스크 등)이 필요할 때, 모드 전환

5. PARAMSX.COM 프로그램으로 복귀

6. 필요한 동작 후 에뮬 모드로 복귀



만약 에뮬 모드에서 디스크 액세스가 호출되면 아래처럼 동작하겠네요.

1. 디스크 읽기 호출 (DiskROM DISKIO 등)

2. 에뮬의 가상 디스크롬은 에뮬->호스트 모드 전환 후 DISKIO 커맨드 전달

3. 호스트(본체)에서 실제 연결된 DiskROM을 호출하여 DATA를 받음

4. paraMSX-R 디스크 버퍼로 전송 후 호스트->에뮬 모드로 전환

5. 에뮬의 가상 디스크롬은 paraMSX-R 디스크 버퍼에서 DATA를 읽어서 처리


아래 사진은 PARAMSX.COM의 디스크롬 설정부분입니다.

호스트(본체)의 디스크롬이 존재하는 슬롯과 에뮬의 가상 디스크롬을 연결해주는 모습입니다.

이때 드라이브 갯수는 동일하게 설정되니까, 에뮬모드에서도 실기를 쓰는 느낌과 똑같습니다.





긴 설명읽느라 수고많으셨습니다. 흐... 

그럼, 실제 동작 영상을 보시지요~

아래 순서로 나옵니다.

1. 대우 CPC-400, 가상디스크(MMC/SD V3) 연결

   X-II 컴퓨터 교실 실행 (X-II 명조체 한글)

2. 필립스 MSX2, 폰트팩 연결, 가상디스크(MMC/SD V3) 연결

   X-II 컴퓨터 교실 실행 (폰트팩 한글)

3. 대우 DPC-200, 가상디스크(FDD) 연결

   딜럭스박스 에뮬로 몽대륙 로딩/실행

4. 아라빅 MSX2, 가상디스크(OFF) 설정

   아라빅 워드프로세서 실행





그럼, 다음 편에서 다시 뵙겠습니다~ ㅎ.ㅎ


2017년 6월 25일 일요일

paraMSX-R 제작 #10 - 텍스트 모드 용 UI 구현

사용자와 뭔가 주고받는(?) 프로그램을 만든다는게 상당히 귀찮은 작업이죠~ㅋ

처음에는 그냥 예전 MS-DOS 커맨드로 실행하던 fMSX 스타일로 만들까했는데요,

예전 윈도 용 paraMSX 에뮬과 비슷하게 만들면 괜찮지않을까...싶은 생각이 들었습니다.


알록달록 그래픽은 패쓰하고~ 텍스트 모드로 최대한 단순하게 만들어봤습니다.

무려~~~ 40컬럼 MSX1 기본 텍스트 모드입니다요~ ㅎ.ㅎ


paraMSX-R의 최소 구동환경이 MSX2 RAM 64KB라서, DOS1에서 실행가능한 프로그램으로 만들었습니다.

"그럼 디스크드라이브가 없는 본체에서는 못쓰나요?" 그러면 재미없겠죠? ㅎ.ㅎ

롬디스크 드라이브가 내장되어서, 외부 디스크가 없어도 구동할 수 있도록 제작되겠습니다요~

요건 다음 편에 소개해드리겠습니다.


일단 PARAMSX.COM을 띄워본 모습을 한번 보시죠!





으흠... 뭔가 MMC/SD Drive V2의 DISKMAN.COM이랑 비슷한 모양이죠? ㅎ.ㅎㅋ

펑션키를 눌러서 탭 전환을 하구요.

커서키 상/하 눌러서 항목 이동, 커서키 좌/우 눌러서 옵션을 바꿀 수 있습니다.

펑션키 F5를 누르면 바로 에뮬이 구동됩니다.

에뮬 동작 중에는 카트리지 상단의 버튼을 눌러주면, PARAMSX.COM 프로그램으로 복귀가능합니다.


그럼, 영상을 감상하시지요~~ ㅎ.ㅎ

여러가지 머신 선택, 슬롯 정보, 부팅 모습, MSXMEM.BAS 데모 등의 동작 모습을 볼 수 있겠습니다.





이제 S/W, H/W 기본틀은 완성이네요! ㅎ.ㅎ/

참, 보드는 모양이 조금 바꼈습니다. 아래처럼 나왔어요~ (v1.0 보드는 휴지통으로~ㅋ)




그럼, 다음 편에서 뵙겠습니다~


2017년 6월 4일 일요일

[WIN] IMS Player v0.5 - WinAMP plugin

하이텔 시절(2002년)에 만든 프로그램인데, 혹시나 필요할까봐 올려놓습니다.

윈앰프 v2.x 시절 용 플러그인입니다. ㅎ.ㅎ


소리가 궁금해서 윈앰프 v2.95 버전을 깔아서 한번 들어봤어요.

지금 윈10 쓰는데 잘 돌아가는군요.


재생 중 파일정보를 띄우면(단축키 ALT+F3) 사용된 악기 리스트를 보여줍니다.

지금보니 진짜 대충만들었군요.ㅋ 누락된 악기 확인할 때 쓰면 되겠죠.




혹시나해서 윈앰프 v2.95 파일도 올려놓아요.

Download: winamp295_full_noaod.zip


아래 IMS 플러그인 받으시면 되겠습니다.

Download: ims_player_05.zip


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


IMS Player Version 0.5 By 서영만  2002.01.06

                       (E-Mail : sharksym@hitel.net)


이 프로그램은 *.IMS 연주를 위한 Winamp용 플러그인입니다.

사운드 출력은 YM3812 에뮬레이션입니다.


설치는, in_ims.dll, Standard.bnk 두 파일을

윈앰프의 Plugins 폴더에 복사하면 OK.


Bank 파일은 기본적으로 Standard.bnk를 사용하며,

IMS 파일과 같은 이름의 BNK 파일이 발견되면 자동으로 읽어들입니다.

아직 ISS 파일은 지원하지 않습니다.


주의!! 특정 IMS 로딩시 윈앰프가 강제 종료되는 버그가 있습니다.

(원인은 찾았는데 해결이 잘 안되는군요... T^T )


그럼, 이만~


2017년 5월 10일 수요일

Dual DCSG 사운드를 들어보아요~ (feat. ALTERA CPLD)

DCSG는 SN76489 사운드 칩을 말하는데, 혹시 소리 한번 들어보셨나요?

MSX에는 PSG가 기본 사운드라서 DCSG 쪽엔 별 관심이 없는게 맞을텐데요.

오락실 게임이나 SEGA 게임기에서 좀 쓰였더라구요.

저는 오락실에서는 많이 들어봤는데, 물론 국딩 때엔 그게 무슨 칩으로 소리를 낸건지 궁금하지도 않았어요.ㅋㅋ


음... SMS 게임을 실행해주는 Franky 카트리지는 들어보셨나요?

이건 2009년쯤엔가 Super Soniqs 에서 만든 카트리지인데요.

SEGA VDP(315-5124)가 들어있어서, DCSG 사운드를 들을 수 있습니다.

참고로 DCSG가 315-5124 칩에 통합되어있어요.

그 외, Musical Memory Mapper (MMM) 카트리지나 PlaySoniq 카트리지에서 DCSG 사운드가 지원됩니다.


VGMPLAY 프로그램으로 덤프된 사운드파일을 재생할 수가 있으니,

음악 들으려고 일부러 게임 구동할 필요도 없어서 좋죠. ㅎ.ㅎ


근데...


VGMPLAY에서 Dual PSG, Dual DCSG가 지원된다는 얘기가 있어서, 이걸 한번 들어봐야하지 않을까? 생각이 들었습니다.

말그대로 사운드 칩 여러개 재생이 된다는 얘기죠.


저는 DCSG 사운드가 하나(Franky 카트리지) 뿐이라, 다른 카트리지가 있어야하는데...

paraMSX-R 보드에 CPLD가 있으니, 이걸로 MMM이랑 Franky의 사운드를 구현해서 재생해보았습니다.


아래는 VGMPLAY를 실행해본 모습입니다.

EXED EXES 게임에서 PSG 1개, DCSG 2개를 사용하고 있군요.

EXED EXES는 국딩 때 2인용으로 많이 했던 기억이 나네요. ㅎ.ㅎ




낭랑한 소리~~ 스피커 볼륨을 올리니 완전 오락실 삘이네요. ㅎ.ㅎㅋ


그럼, 영상으로 한번 감상하시지요~

영상 초반엔 Franky 카트리지를 꽂아서 DCSG 한개가 동작하는 모습이 나오구요.

그 뒤엔 Dual DCSG 카트리지로 구동하는 영상입니다.




그럼 이만~~ ㅎ.ㅎ


2017년 4월 29일 토요일

MMC/SD Drive V3 제작 #14 - BIOS 폰트 교체 테스트

일단 서론부터...


MSX의 비디오는 VDP 칩에서 출력된다는건 다 아시죠?

VDP 칩 내부에는 문자용 패턴 데이터가 없으니, VRAM에 폰트 데이터를 로딩해서 사용합니다.

VDP를 텍스트 모드로 쓰던 그래픽 모드로 쓰던 어쨌거나 문자를 표시하려면, 폰트가 필요합니다.


8 x 8 도트의 1BPP 데이터로 만들면, 256문자를 위해 2048바이트 데이터가 필요한데요.

메인 BIOS롬에 국가 규격에 맞는 폰트가 들어있어서, 기본적으로 이걸 활용하게 됩니다.


근데 갑자기 이 얘기를 왜 하냐구요? ㅎ.ㅎㅋ


지난 3월에 봄정모가 있었죠? 그 때 키티야님이 하신 말씀이...

"BIOS의 폰트를 쓰는 게임은 한글화가 불가능한데, 이걸 해결할 수 있는 방법이 있을까요?

에를 들어 FontPack을 활용한다거나..."


그.래.서.

약간의 테스트를 해보게 되었습니다. ㅎ.ㅎ



지금부터 본론입니다...


시스템의 폰트 데이터를 읽으려면 두가지 방법이 있는데요.


1. BIOS 롬의 문자 패턴을 그대로 읽어서 활용

   BIOS의 0004H 번지에 16BIT 주소값이 들어있는데, 그게 폰트 데이터의 테이블 주소값입니다.

   슬롯0(또는 슬롯0-0)에서 해당 번지를 확인 후 읽어서 쓰면 되겠죠.


2. MSX는 부팅 후, 폰트 데이터를 변경할 수 있습니다.

   특정 슬롯에 폰트롬을 장착 후, WORKAREA의 아래 2개의 시스템 변수를 세팅하면 됩니다.

   이 변수는 메인 BIOS에서 텍스트 모드 전환할 때, 해당 테이블을 자동으로 VRAM에 로딩하기 때문에 편리합니다.


   아래는 일제 MSX1 ROM의 기본값입니다.

   F91FH CGPNT:  DEFB 00H     ; Slot ID

   F920H         DEFW 1BBFH   ; Address


   여기에 설정된 슬롯에서 데이터를 읽어서 쓰면 됩니다.


근데 실제 게임에서 BIOS의 폰트를 가져오는 경우가 많을까요?

그건 저도 몰라요. ㅎ.ㅎ


게임에서 쓰는 문자가 아스키코드 128개 정도라면, 1024바이트 용량으로 충분하니까...

왠만한 게임은 자기만의 폰트 데이터를 갖고 있다고 봐야겠죠.

특히 메가롬 게임처럼 용량이 크다면 BIOS 폰트를 쓸 필요가 거의 없겠죠? ㅋ


일단 BIOS 폰트를 쓰는 게임 몇개를 찾아봤습니다.

도마에 오른건 블랙 오닉스, 람보, 던전 마스터 3개입니다.


하나씩 테스트해봅니다. 두가지 방법을 썼습니다.

1. GameRunner 모드 전용 BIOS의 폰트를 바꾸는 방법

   BIOS 롬 자체를 해킹하는 방법입니다.


2. FontPack의 메모리에 로딩하는 방법

   WORKAREA의 CGPNT를 재설정하는 방식이죠. 저기 위에 2번에서 설명했던 방법이요.



사용자의 편의를 위해,

롬 파일과 이름이 같은 폰트 파일(확장자 FNT)이 있으면, MMCSD.COM에서 자동으로 로딩하도록 만들었습니다.


아래는 블랙 오닉스를 실행하는 모습이네요.




테스트로 쓰인 폰트는 아래처럼 생겼어요.



  


* 블랙 오닉스의 테스트 결과입니다.


아래는 폰트를 바꾸지 않고 그냥 실행한 모습입니다.

BIOS 폰트의 점 하나도 바꾸지 않고 그냥 쓰고 있네요! ㅎ.ㅎ





아래는 GameRunner의 폰트 로딩으로 실행한 모습입니다.

글자가 바뀐게 보이시죠?





이번에는 FontPack에 로딩한 모습입니다.

글자가 엉망이 됐군요. 버그겠죠. ㅎ.ㅎ;

폰트 로딩 시 슬롯0로 고정해놨거나 뭐 그런 이유가 아닐까 싶은데... 게임 디버깅은 PASS~






* 람보의 테스트 결과입니다.


아래는 폰트를 바꾸지 않고 실행한 모습인데요.

FontPack에 로딩을 해도 폰트가 바뀌지 않네요.

WORKAREA의 설정값을 무시하고, BIOS 롬 내부의 폰트 데이터를 쓰는걸로 생각됩니다.





아래는 GameRunner의 폰트 로딩으로 실행한 모습입니다.

제대로 폰트 변경이 되어있네요.






* 던전 마스터의 테스트 결과입니다.


아래는 폰트를 바꾸지 않고 실행한 모습입니다.

BIOS의 폰트를 두껍게 만들어서 쓰고 있네요. 예전 BASIC 게임들이 이런식으로 많이 썼었던 기억이납니다.

코드 서너줄로 글자를 이쁘게 만들 수 있으니까요~ ㅎ.ㅎ





아래는 GameRunner 및 FontPack의 폰트 로딩으로 실행한 모습입니다.

두 경우 모두 아래처럼 폰트가 제대로 변경이 되었어요.

WORKAREA의 테이블값을 제대로 활용하는 게임이 되겠습니다! 와우~ ㅎ.ㅎb






결론입니다...


시스템(WORKAREA)에 설정된 최종 폰트 데이터를 사용하는 게임도 있고, 아닌 경우도 있네요.

실제로 적용해본다면, FontPack으로 로딩하는건 포기하는게 맞을 것 같구요.

GameRunner 쪽만 적용하는걸로 진행해야될 듯 합니다.


그럼, 즐거운 주말되셔요!!