MSX 는.. 블루투스 패드를 연결을 위한 제품이 거의 없습니다.
이제는 MSX 가 뭔지부터 설명해야 하는 시대가 되었으니까요.
그나마 소수 유저들이 그동안 만든 흔적들만 남아 있네요. 유적탐사 그 자체입니다.
첫 시작
게임 프로그래머로 20년이 지났고 올해 5월 퇴사 후 취미용으로 구입한.. 파나소닉 FS-A1WX
개발은 그만두고 편하게 어릴적 놀던 게임이나 못 해본 게임을 하려고 샀습니다만
그동안 눈과 몸이 이미 편한 기기들에 길들여진 탓에, 키보드나 조이패드와 같이 손에 닿는 인터페이스들이 하나같이 거슬리더군요.
타이핑 할 일이 그리 많지는 않아서 키보드는 미뤄두고 우선 컨트롤러 문제부터 해결했습니다.
필수 조건을 정리해보니..
1. 범용 무선 패드 (전용 패드를 지양)
2. BR/EDR (Classic Bluetooth) 와 Bluetooth LE 모두 지원
3. 패드나 본체의 개조가 아닌, '작은' 어댑터
4. 별도의 전원 사용 금지
5. 저렴한 단가
6. 보기좋은 와꾸
시나리오 1. 쉽게 쉽게 (실패)
기존 할배 유저들이 어떻게 사용하고 있는지 살펴보니 'JoyMega' 라는 변환 장치를 사용하는것이 일반적이네요.
기존 메가드라이브 6버튼 조이패드를 MSX 에서 사용하나 봅니다. (아래는 이베이에서 퍼온 사진)
하지만 와꾸도 엉망이고 무선을 위한 로직은 없으니.. joymega 의 로직을 메가드라이브용 8bitdo Retro Receiver 제품안에 넣어보기로 했습니다.
기존 제품을 열어서 인버터를 연결하고 새 핀배열에 맞춰줍니다. 그리고 뚜껑을 닫으면..
인버터를 내장시키고 핀배열 변경해서 동일하게 적용을 했습니다.
SROM.EXE 이라는.. '롬 파일 로더'가 동적으로 패치를 해주는 방식으로는 동작합니다. 다만 롬팩에서는 동작하지 않습니다.
8bitdo 제품의 최신 펌웨어에서는 관련 문제가 발생하나봅니다. 포트의 8번핀을 통해서 동시화를 위한 신호를 받아서 무선 리시버가 필요한 데이터를 본체에 넣어줘야 하지만 지금의 펌웨어는 이 신호가 메가드라이브와 다르면 초기화 상태로 빠져드는것 같더군요.
오래된 펌웨어로 되돌려보려고 업데이트 프로그램 디컴파일-소스수정-컴파일 해봤지만
최종 플래싱 부분은 DLL 이 열리지 않아서 결국 다운그레이드가 불가능 했습니다. 실패.
그리고 Bluetooth LE 를 지원하지 않아 최신 콘솔용 패드들은 연결이 안됩니다.
시나리오 2. 다른 산으로 (또 실패)
기존 시나리오가 메가드라이브용 제품에 기반을 두고 있으니, 다른 메가드라이브용 무선 리시버로 시도합니다.
RetroScaler 에서 만든 BlueRetro 시리즈에도 메가드라이브용이 있습니다. 재도전
이 제품은 나사가 아닌 본드로 제품을 닫은 상태라 깔끔하게 개봉하고 개조 후 다시 조립이 어렵네요.
어떻게든 열어서 이전과 같이 개조를 하고 새로운 케이스(휴대용 약통)에 넣어 테스트 했지만 동작하지 않습니다.
정확하게 펌웨어에서 어떻게 신호를 보내는지, 중간의 레벨 시프터가 방해가되는게 아닌가 싶기도 했구요.
그렇게 소득없이 끝나나 했는데..
내 고민을 들어주던 Grok4 가 아두이노(?)로 신호 변환을 해보는게 어떻겠냐는 조언을 하는 찰나,
이 리시버에 달려있는 ESP32 모듈이 눈에 들어오네요. 그래서 그냥 처음부터 차근차근 자작을 하기로 합니다.
다음 시나리오의 테스트를 위해 ESP32 모듈이 적출당했습니다..
시나리오 3. 자작 (성공)
ESP32의 블루투스 조이패드 연결을 위한 라이브러리는 bluepad32 를 사용
MSX 본체와의 통신은 직접 Arduino IDE 에서 C++ 코드로 구현했습니다.
KiCad 를 급히 유튭보며 배워서 설계도를 그려봅니다.
MSX 본체에서 나오는 전압이 5V 라서 레귤레이터로 3.3V로 낮추는 부분이 있고,
부트모드 때문에 연결되는 필수 빈배열,
게다가 본체의 조이스틱 포트는 기본적으로 5V 풀업 상태이고 오픈컬렉터 방식으로 활성 신호를 LOW로 .. 그보다 자세한 설명은 생략하겠습니다.
마지막으로 상태표시를 위한 LED 부분이 추가되어 있습니다.
KiCad 로 그린 도면은 유선 업데이트를 위한 버튼들도 설정했었지만 귀차니즘으로 OTA 로 변경했습니다.
아래 렌더링은 유선 업데이트 버전으로 만들었던 PCB 입니다.
PCB 제작을 업체에 맡긴다면 모든 기능과 버튼을 다 집어넣고 배송이나 기다렸겠지만..
만드는 재미(?)와 기타 등등의 이유로 대폭 부품 수를 줄여봅니다.
준비물
1. 프로토타입 보드, 피치 1.27mm
2. ESP32-WROOM-32UE 모듈
3. AMS1117
4. DE9 암 소켓
5. 저항, 124, 175, 260, 330, 680, 1K SMD
6. 캐패시터 1, 10, 22 uF SMD
기판의 크기가 좀 많이 작습니다. 쌀 한 톨과의 크기 비교..
레이아웃도 대강 자리 잡아보고..
전자 현미경을 준비하고 손 바느질을 합니다. (이 레이아웃은 몇번 반복하며 다 바뀌었습니다)
바느질 영상은 타임랩스로 빨리 넘겨보겠습니다.
그렇게 해서 최종 형태는
이렇게 대략 재료비 $5 정도로 개발새발 리시버가 완성이 되었습니다.
PCB 생산을 보내면 설계대로 다 만들텐데, 비용과 시간의 타협으로 비-필수 부품은 날렸습니다.
프로토 보드를 자르고, 쇼트 방지 차원에서 솔더마스크를 덮고 UV로 굳혀줍니다.
상태표시 LED 도 잘 켜지고 8bitdo 게임패드나 Xbox 패드등 다 잘 붙네요.
여기에 적당히 봐줄만한 와꾸가 있어야 하니까.. 3D 프린터로 슥슥 뭔가를 할 수 있었으면 좋았겠지만
저는 없네요. 그 흔한 물건이. 그래서 레고 블럭으로 마감을 합니다.
미리 측정해둔 크기라서 3x4 크기의 블록에 딱 맞습니다.
이대로 마감을 합니다. 블럭 가공은 Mobsword 님의 금손으로 잘 조각해서 넣었습니다.
그리고 FS-A1 에서도 본체의 간섭 없이 잘 맞네요.
하나를 더 만들었습니다. 또 다른 버전은..
이런 모양으로 나왔습니다. 특이한 점은.. LED가 저 어항에서 켜진다는 점 입니다.
ESP32 펌웨어 코딩 부분은 게시판에서 다루기엔 성격이 안맞는것 같아서 스킵.
궁금하신분은 글 하단 '참조' 에서 링크를 타고 가시면 됩니다.
특징
구형 블루투스 조이패드부터 최신형 까지 대다수의 조이패드를 연결할 수 있습니다.
블루투스 키보드를 게임패드처럼 에뮬레이션 해줍니다.
무선 펌웨어 업데이트(OTA) 기능이 있습니다. 스마트폰만 있어도 업데이트가 가능합니다.
우선 연결된 무선패드 버튼을 select. + START + DOWN 함께 눌러주면 업데이트모드로 전환이 되며, 이 경우..
BlueBuzz 라는 이름의 SSID 가 스마트폰에 보입니다.
연결하고 웹브라우저를 열어 192.168.1.1 주소로 접속을 하면 업데이트를 위한 화면이 나오게 되어있습니다.
저의 Github 에 새로운 펌웨어가 있거나 커스텀된 펌웨어를 강제로 넣는 경우 PC가 없어도 가능한 구조 입니다.
MSX 기본 A, B 버튼의 터보 기능을 X, Y 버튼으로 구현합니다.
그리고 연사 속도를 10단계로 트리거버튼과 숄더 버튼으로 조절 할 수 있습니다.
연결된 무선 패드의 버튼 조합으로 페어링 모드와 업데이트 모드 변경을 합니다.
위 게임패드 테스트 영상에 터보버튼 시연을 보실 수 있습니다.
참조
혹시나 설계도나 펌웨어 소스코드가 궁금하신 분은 Github 에 방문하시면 됩니다. GNU 라이센스.
MSX가 유럽 쪽 유저들이 많은 관계로 설명은 영문으로 작성해놨습니다.
마지막으로
너무 오랜만의 작성글입니다. 글 쓰는것도 세상 번거로운 일이네요.
저는 80's Apple II+ 키즈라 MSX 를 가져본건 처음입니다. 또한 인두질도 초보고 PCB 설계도 처음이라 부정확하거나 올바르지 않은 내용들이 있을 수 있습니다. 대략 그 정도로 만들면서 취미생활을 하고 있구나..로 봐주시면 되겠습니다. 지적질 하실 분은 '뒤로가기' 누르세요.
긴 글 봐주셔서 감사합니다.


























(IP보기클릭)112.167.***.***