2016년 5월 1일 일요일

2016년 파라동 정모 후기

제 이름표입니다~ ㅎ.ㅎ



6년전 정모때에는 아이큐2000 + 터보알, LCD 모니터 2개, 확장슬롯 2개, 잡다 기기 왕창 들고갔었는데요.


이번 정모에서는 기기 수를 좀 줄였습니다. ㅋ

대신 32인치 LCD 모니터를 챙겼습니다.

아무래도 폰트팩, M 등등 480i 디스플레이를 제대로 보여드리는게 impact가 있지 않을까 생각했지요.

보통 레트로 디스플레이하면, "CRT 방모"를 떠올리게 되는데요. LCD도 좋다는걸 보여드리려구요.ㅋ

MMC/SD V3의 스캔라인 효과를 보여주기에도 딱 맞는 LCD 모니터입니다.


그외 기기들은 제가 메인으로 쓰는 카트리지들만 챙겼습니다.

예전엔 Franky, Music Module도 가져갔지만, 시연할 여유가 많지않다는걸 알기에~ 이것들은 스킵!

뒷풀이 때 paraMSX-R 카트리지를 기대하신 분도 계셨지만, 이번엔 스킵했습니다.

다음을 기대해주세요~


이름표도 프린트해서 미리 준비했구요.

유령군님 제작의 PARADISE 로고가 박혀있어서, 기념품으로 남기셔도 괜찮을 듯 합니다.

오전 파나소닉 정모 장소에 도착하니 먼저 오신 분들이 준비하고 계셨어요.

첫 발표를 제가 진행했는데, 생각보다 오신분들이 많아서 분위기가 한층 업(!) 되었습니다.

전날 둘째 초등학교 운동회 다녀오느라, 얼굴이 좀 벌겋게 탄 상태라...

낮술 한거 아니냐? 이런 의문을 가지신 분들도 계셨을꺼에요.ㅋ


오후로 넘어가면서 각종 기기들, 자작 물품들 보면서 재밌는 시간 보냈습니다.

점심엔 김밥 그리고 각종 음료수, 과자 등등 맛나게 냠냠하면서 빠르게 시간이 흘러갔네요.


개인적으로 이번 모임에서 사에바료님, 고명호님 등등 첨 뵙는 분들 많아서 좋았구요.

아마 그분들은 반대로 생각하실지도 모르겠습니다. 제가 모임을 나간적이 몇번 없으니...ㅋㅋ


셀카 샷~ ㅎ




처음 보는 기기, 자작 물품도 많아서 좋았습니다.

개인적으로는 준소프트님의 MPX 뉴 버전이 가장 기대가 되었어요. ㅎ.ㅎ

사운드 카트리지 여러개 쓰다보면, 스테레오 오디오 믹서가 참 아쉽거든요.

(본체 오디오 출력이 모노 채널이다보니...)




참, 제 터보알에서 MMC/SD Drive V3의 GameRunner 자동 데모를 돌렸었는데요.

옆에 놔둔 노트북은 시리얼(232C) 통신으로 몇가지 커맨드를 터보알쪽으로 넘겨주는 역할을 했었어요.

(M에서 파일 선택, 실행 같은 것들)




그외 SDT, VGM, MP3 플레이도 보여드렸는데, 이런걸 처음 보신 분들도 있으셨을꺼에요.

SDT 제대로 재생하려면, SCC-I 카트리지 두개가 필요합니다. ㅎ.ㅎㅋ (만들어주실꺼죠? 준성님?)


역시나 이번 모임도 시간이 정신없이 지나가려버서, 끝나고 나면 항상 아쉽습니다...

이번 모임이 즐거운 시간이 될 수 있도록, 준비해주신 모든 회원님들께 감사드립니다~

장소 예약하고 진행 맡으신 유령군님께 특히 더 감사드리구요. ㅎ.ㅎ


마지막으로,

ASTERiS님이 소니 디지타이저로 만들어주신 사진 투척하고 갑니다.

즐거운 저녁되세요~




오른쪽 두분은 모자이크 처리했어요~




PS. 득템 사진을 깜박했네요. 게임대회는 초반탈락이었지만, 가위바위보 두번 이겼어요. ㅋㅋ



2016년 4월 8일 금요일

paraMSX-R 제작 #3 - IQ-2000 구동 성공 그리고...

VHDL 코드를 수정하니 MSX2 설정이 제대로 동작합니다~ ㅎ.ㅎㅋ


아래는 IQ-2000, X-II, FS-A1F 순으로 부팅하는 모습입니다.

아이큐 교실도 잘 나오구요.




아래는 X-II 모드에서 스크린9 및 WIDTH 64 설정한 모습입니다.

실제 X-II 에서는 명조체 한글/한자가 나오겠지만, 아직은 출력이 안됩니다.

EPM3128으로 테스트는 여기까지가 한계네요. ㅎ.ㅎ

EPM570 넣어서 새로 보드를 만들어야 되겠습니다.




끝으로 현재까지 생각한 요구사항을 정리해봤습니다.


- DISK 없는 환경에서도 사용가능

- 기본 모드(MSX1,2,2+ 몇개)의 데이터는 플래쉬롬에 미리 다운로드

- 사용자 설정 모드 지원 -> DOS2 상에서 SRAM에 로딩 후 구동

- 외부 연결 용 슬롯 1개 지원 -> bypass 모드에서는 본체 슬롯으로 동작

- 메인램 매퍼 64KB, 128KB, 256KB, 512KB 설정 가능

- FM-PAC BIOS, DOS2 + KANJI-DRV 등의 매퍼 지원



보드에는 EPM570, 플래쉬롬 1MB, SRAM 2MB 정도가 들어갈 예정입니다.

CPLD 용량이 부족하면 추가 매퍼롬은 삭제될 수 있습니다.

물론 여유가 된다면 메가램(ASCII 8K/16K)이 추가되면 좋겠구요. (가능하면 재미나 디럭스박스?ㅋ)


외부 연결 슬롯은 아래 사진처럼 카트리지 위로 커넥터가 장착됩니다.

본체 MSX를 처음 켜면, 카트리지 없이 외부 슬롯의 기기만 동작하게 되구요.

paraMSX-R S/W로 구동이 되면, 연결된 슬롯은 에뮬모드의 슬롯으로 동작이 바뀌게됩니다.

아마 저처럼 확장 슬롯에 기기들 몽땅 꽂아서 쓰는 경우라면, 가장 편리한 방법일 듯 하네요.




그럼 즐거운 밤 되셔요~ ㅎ.ㅎ


2016년 4월 4일 월요일

paraMSX-R 제작 #2 - 일단 달려보자!

머리속으로 끼워맞춘 것들을 실제로 구현해보았습니다.

아주 일부분이지만요. ㅎ.ㅎㅋ

문득 아이언맨 1편의 대사가 떠오르네요.

"걸음마 떼려면, 뜀박질부터 해야할 수도 있어!!"


일단 테스트 용으로 쓸만한 보드가 있어야 하는데...음~

작년에 폰트팩 개발할 때 썼던걸로 재활용합니다.

램이 32KB 밖에 없지만 아이큐1000 정도는 괜찮겠죠? ㅋ

CPLD는 EPM3128 박혀있어요~


그럼, 재료(?)는 준비됐고 설명 들어갑니다!!


지난번 paraMSX-R 구상에 관한 글에서는, 실제 동작이 어떻게 이루어지는지 자세한 내용은 없었어요.

이부분을 조금 더 설명드립니다.


일반적으로 MSX 같은 구시대 8BIT PC는 CPU, 메모리 등 각종 로직들이 대게 보드 한장에 들어있습니다.

만약 현재 구성된 본체 상태가 아닌 다른 모양(?)으로 쓰고 싶다면 어떻게 하는게 좋을까요?

완전히 다른 모양 말구요. 동일한 MSX 머신 테두리 안에서요~ ㅋ

예를 들어 "turboR을 대우 IQ-1000 처럼 쓰고 싶다" 정도가 되겠네요.


물론 조건이 있습니다.

기존 보드에 박힌 CPU는 그대로 써야합니다.

PC에서 가장 중요한 부분이 CPU인데, 다른 CPU를 외부에 달면 기존 본체는 노예(Slave)가 되겠죠?

이런식의 구동은 제외합니다.


현재 CPU를 그대로 써서 내 맘대로 MSX를 조작하려면 어떻게 해야할까요?

가장 쉬운 방법은 CPU와 CPU주변의 BUS를 끊고 내가 만든 보드를 끼워넣는겁니다.

모든 신호를 중간에서 잘라먹고 맘대로 변형을 하는거죠.


근데, 이 방법은 후기형 MSX2,2+,turboR의 경우는 사용이 불가능합니다.

왜냐면요...

MSX-ENGINE이라는 큼지막한 원칩안에 CPU, PPI, PSG, 등등 왠만한 칩/로직들이 다 숨어있어요.

중간에 끼어들 공간이 없습니다.


그럼, 차선책이 필요하겠군요.

방법은 하나 S/W에 변형을 가하는 것입니다.

음... 뭔가 이상한가요?

네, 이상하죠? ㅋ

MSX 슬롯에 존재하는 모든 S/W를 변형(패치)를 하는 것은 사실 불가능합니다.

롬 뽑고 교체하는 것도 생각해볼 수 있겠지만, 범용적으로 적용하기는 힘든 방법이겠죠.


그럼, 내가 외부 슬롯에 존재하는 S/W만으로 뭔가 구현을 해야하는데 어떻게 하면 될까요?

paraMSX-R에서 사용한 방법은 본체 내장된 슬롯의 S/W를 몽땅 외부로 옮기는 것입니다.

"어... 외부로 옮겨도 슬롯 구조가 바뀌는건 아니잖아요?"

"그게 어떻게 구동이 되나요?" 라는 생각이 바로 떠올랐다면, 당신은 이미 MSX 전문가~ ㅎ.ㅎㅋ


만약 CPU가 보는 슬롯을 속이면 가능할까요?

예를 들어 CPU(S/W)는 슬롯0-2의 FM BIOS를 구동(read)하고 있지만,

실제로는 FM BIOS가 카트리지 슬롯1에 들어있고, S/W 혼자 슬롯0-2라고 속고 있다면??

이런 상황이 가능할까요?


일단 이걸 구현하려면, MSX가 구동하고 있는 모든 S/W를 실기간으로 간섭할 수 있어야합니다.

결국 MSX의 슬롯 전체를 외부 카트리지로 구현을 해야한다는 얘기겠죠?

예를 들어 본체의 슬롯1에 카트리지가 장착되겠지만,

카트리지 내부는 슬롯0,1,2,3 모두 구현하고 필요한 부분은 서브슬롯 확장이 되어야겠지요.


MSX의 슬롯처리는 PPI의 GPIO를 사용하는데, PPI 슬롯 I/O 주소(port)는 A8H 입니다.

주로 Z80 명령 LD A,N 및 OUT (0A8H),A을 사용합니다.

카트리지에 구현된 슬롯은 기존 PPI와 주소가 겹치면 안되겠죠?

일단 22H 포트를 사용해서 구현해봅니다.


음... 왜 계속 슬롯얘기만 하나요?

그러게요...ㅋ


그럼, CPU(S/W)를 속이는 방법을 생각해보죠.

카트리지에 MSX 슬롯 전체를 구현해서 S/W가 동작할 공간은 만들었지만...

어떻게 내부 슬롯을 액세스 못하게 만들수 있을까요?

예를 들어 LD A, 0 및 OUT (0A8H), A 명령이 실행되면 슬롯0으로 제어가 넘어가겠지요.

이걸 막기 위해, 약간(?)의 H/W 를 추가합니다.


CPU가 명령어 fetch를 하게 되면, 메모리에서 바이트 단위로 BUS를 접근하게 되는데요.

이걸 단계를 나눠서 머신 사이클이라고 표현합니다.

각 사이클을 M1, M2, M3 이런식으로 이름 붙여서 부르고 있어요.

각각의 M 사이클은 CPU clock 카운트에 따라 T1, T2,... 이렇게 T state로 쪼개집니다.


암튼! ㅋ 이렇게 명령어를 메모리에서 읽어갈 때,

paraMSX-R 카트리지는 누가 슬롯을 전환하는지 매번 체크합니다.

M1, M2 사이클의 DATA BUS를 훔쳐보다가...

"어라~ 이거 슬롯 전환하려는건가?" 싶으면 DATA를 변경합니다.

예를 들어 OUT (0A8H),A 명령이 OUT (022H),A 명령으로 바뀌는것이죠.

이때 DATA는 BUS 상에서만 변경되니까, 실제 메모리의 S/W 코드는 그대로 유지됩니다.

결국 이렇게 명령어가 바뀌면(해킹 ㅋ), 본체 내의 슬롯의 여전히 카트리지 슬롯1 설정이 유지되구요.

paraMSX-R 카트리지 내의 슬롯 설정만 바뀌게 됩니다.


여기까지가 슬롯 처리에 관한 내용이었습니다.

그림을 그리면 설명이 더 쉽겠지만, 밤이 늦었으니 이해해주셔요. ㅎ.ㅎㅋ

머리속에서 그림을 그리시면 아마 쉽게 이해되실겁니다.


그럼, 슬롯처리만 구현해서 한번 테스트해볼까요?


폰트팩 보드를 이용해서 VHDL 삽질을 해봅니다~ㅋ

CPLD 용량이 크지 않으니, 

슬롯0-0, 슬롯0-1, 슬롯0-2, 슬롯0-3, 슬롯2를 우선 구현하구요.

플래쉬롬에 IQ-1000, IQ-2000 등의 BIOS롬을 정리해서 올렸습니다.


그럼 동작 테스트~ ㅎ.ㅎ

SRAM이 32KB뿐이라 일단 이상태로 구동해봅니다.


1차 IQ-2000 고고고~

결과는 실패ㅋ 부팅로고까지 진입을 못하고, 뺑뺑이 돌고 있네요.

화면에 요상한 글자를 찍으면서..ㄷㄷㄷ


2차 IQ-1000 고고고~

결과는? 오홍~ 뭔가 나오는구나! 제대로 부팅이 되네요.

큐닉스 한글 메시지가 저를 반겨주는군요~ ㅎ.ㅎ




실제로 구동하는 모습을 동영상으로 찍었습니다.

제 turboR에서 실행한 모습입니다요~




음... 겨우 이정도 구현하는데 CPLD(EPM3128) 용량이 FULL입니다. ㅎ.ㅎ;;

X-II 한글롬 테스트 하려면 보드 한장을 더 꽂아야되겠네요.ㅋ


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