MSXにメガドライブのコントローラを接続する

いろんなところで同じ内容の記事書かれていると思うけど、つまづいてしまった箇所あったのでまとめる。

概要

MSXメガドライブもコントローラーの端子がDsub 9pinのコネクタだけどピンアサインが違っている。
上下左右、ボタン1は使用可能だが、ボタン2は使用できない。
また、GNDの位置が違っているので本来ならつなげるのもよくないという記事も見た。
そこで配線だけ変えてMSXでボタン2含めて使用できるようにしてみる。

作るもの

こんな感じでメガドライブコントローラーとMSXコントローラー差込口の間を取り持つ変換機を作る。

メガドライブコントローラーの仕様

MSXに配線替えでつなぐ場合は↓のサイトにあるHighの部分しか取得できない模様。

applause.elfmimi.jp

発信 D0 D1 D2 D3 D4 D5
Low L L A S
High B C

つまり、上下左右BCボタンのみ利用可能。
他のボタンを使いたい場合は間にマイコン挟んで処理してあげる必要があるってことなのかな。

材料

延長コードはDsub 9pinのメス端子で代用できそうだったが、羽の部分が邪魔になりそうだったため見送り。

道具

  • ドライバー
  • ニッパー
  • はんだごて
  • はんだ

作業

  1. 延長コードを切断
  2. 延長コードの皮むき

    中の線を1つ切ってしまい、やりなおした。
  3. Dsub 9pinオスに結線

    何回もやり直したのでむき出しの線も短くなって接続部分も汚くなった。
    動画なんかを見ると熱収縮チューブで接続部分を保護していた。
  4. Dsub シェルでオス端子を保護

結線について

今回のポイントのピンアサイン。
以下のような形で結線する。

MSX側ピン メガドライブ側ピン 内容
1 1
2 2
3 3
4 4
5 5 +5v
6 6 ボタン1
7 9 ボタン2
8 結線しない
9 8 GND

ボタン1をC、ボタン2をBに割り当てる人が多いみたいだったけど、逆のほうがプレイしやすかったのでそうしている。
このあたりはゲームによって変わりそう。
グラディウスだとボタン1=ショット、ボタン2=パワーアップ。
中にはスイッチで入れ替えることができるようにしている人もいた。

最初両方のピンアサインを左上からピン1としてしまった。
このせいで、何度やってもコントローラーが効かずに悩んでしまった。

ケーブルの色とピンアサイ

今回の延長ケーブルでは、この色になっていた。
紫と白がほとんど同じ色に見える点注意。
ケーブルが違えば色も違う気がする。

1 2 3 4 5 6 7 8 9

完成

MSX(HB-F1XD)のキーボード修理

中古でHB-F1XD買ったけど半分ジャンクみたいな状態だったので対応したことを忘れないようにメモ。

状態

キーボードに関してはほとんどのキーが効かない状態と記載。
実際に起動させてみるとQWERTYの左側のキーは割と効く、右側はほとんど効かない状態。

対応1(掃除)

修理、メンテ動画見るとmsxはキーが効きづらくなることが多いらしいが、掃除してあげるだけでなおることもあるっぽい。
掃除はキーボード内のシートを軽くふいてあげるだけでいいらしい。
購入したものはキーボード自体がめちゃくちゃ汚かったのでキートップ全部外してキートップも水洗いした。
この掃除だけでほとんどのキーが効くようになった!
ダメなのがQWKL等一部キーとカーソルの上と右はまるで効かない、Returnは5回に1回くらい効く感じ。
掃除では限界っぽいので別の方法を模索する。

対応2(断線修理)

そもそも、キーがつながっているかどうかテスターで調べてみることにした。
するとQWKL各キー同士はつながっているものの、そこからmsx本体につながっている箇所がつながってないみたい。
カーソルの上、右キーも下キーの片側とつながっているはずなのにテスターで反応がない。
キー同士がつながっている箇所をよく見ると黒くなっている部分があるようで、これが断線の原因の予感。

どう対応したらいいかわからず検索してみると↓のサイトを発見。

www.okqubit.net www.okqubit.net

  • ラッピングワイヤをセロテープで固定
  • 銅箔テープでつなぐ
  • 導電性のインクでつなぐ

こんな感じで対処しているようだったので真似して 導電性インク使ってみることにした。
使ったのは秋月に売っているこの商品。

akizukidenshi.com

まず、黒くなっている周りの導通部を露出させる必要があるっぽい。
ブログによると「フイルムをピンセットで軽く擦って導通部を露出させ」とあるけど、どの程度やればいいかわからなかった。
テスター使ってちょっとずつやってみたところ、銀色の部分が見えてくるぐらいでOKみたい。

露出させた部分と最寄りのキーが触れる個所との導通をチェック。
さらに、黒い箇所を挟んで露出させた部分の導通もチェックするとやっぱりつながってないようで、この黒い部分で断線していたようだ。
この状態からむき出しになった導通部を導電性インクで覆う。
厚みをどれくらい持たせればいいかわからなかったのでチューブから出たサイズそのままで使う。
だめなら削ってみて調整しようと思う。
導電性インクは乾かないとつながらないっぽい感じだったので一晩寝かせた。

この状態でキーボード接続してみたところ、反応しないキーはなくなった!
Returnはあいかわらず反応しづらい。

対応3(Returnキー復旧)

Returnキーに関してはまったく効かないわけではなかったのでキーが触れる部分を見てみた。
するとReturnキーに使われていたものは摩耗して表面がツルツルになっているように見えた。

テスターで抵抗値はかってみたところ、ほかのキーは100Ωなのに対し、Returnは300Ωになっていた。
抵抗値が高いから通電しにくくなってキー押した判定にならないってことでいいのかな?
アルミホイルつけてみるとか考えてみたが、使ってない10キーのキーと入れ替えでいいやと思ったので入れ替え。
これでReturnもよく効くようになってコマンド周りの入力で困ることはなくなったように思う。
掃除だけで終わると思ってたけど思ったより苦戦してしまった。

備考

修理した後、↓のサイトも発見。

www.amy.hi-ho.ne.jp

こちらは、コンダクティブペンというもので同様に断線に対応していた。
粘性が低くて使いやすそうなので、こっちで対処したほうがやりやすかったかもしれない。
ただし、値段は高いみたいだ。

zlib1.2.11をZaurus向けにビルド

ダウンロード

$ mkdir -p src/zlib
$ cd src/zlib
$ wget https://zlib.net/zlib-1.2.11.tar.gz
$ tar zxf zlib-1.2.11.tar.gz

ipk向けディレクトリ作成

$ mkdir -p ipk/opt/QtPalmtop
$ mkdir ipk/CONTROL

ビルド

$ cd zlib-1.2.11
$ ./configure --prefix=/home/zaurus/src/zlib/ipk/opt/QtPalmtop
$ make
$ make install

ipk作成

$ cd ../
$ vi ipk/CONTROL/control
Package: zlib
Priority: optional
Section: libs
Version: 1.2.11
Architecture: arm
Maintainer: kkimi
Depends:
Description: zlib is compression library.
$ ipkg-build ipk

www.dropbox.com

tree1.7.0をZaurus向けにビルド

前回作成したDocker上のZaurus開発環境を使用する kkimi.hatenablog.com

ダウンロード

$ mkdir -p src/tree
$ cd src/tree
$ wget http://mama.indstate.edu/users/ice/tree/src/tree-1.7.0.tgz
$ tar zxf tree-1.7.0.tgz

ipk向けのディレクトリ作成

Zaurusは/opt/QtPamtop以下へのインストールが推奨とどっかで見た気がする

$ mkdir -p ipk/opt/QtPalmtop
$ mkdir ipk/CONTROL

ビルド

configureがないのでMakefileを直接編集する

  1. インストール場所を変更する
  2. CCがgccに固定されているのでarm-linux-gccに変更する
$ cd tree-1.7.0
$ vi Makefile
-prefix = /usr
+prefix = /home/zaurus/src/tree/ipk/opt/QtPalmtop

-CC=gcc
+CC=arm-linux-gcc

VERSION=1.7.0
TREE_DEST=tree
$ make
$ make install

ipkパッケージ作成

$ cd ../
$ vi ipk/CONTROL/control

アプリの詳細を記述する
DescriptionはWikipediaとかからコピーでOK

Package: tree
Priority: optional
Section: base
Version: 1.7.0
Architecture: arm
Maintainer: kkimi
Depends:
Description: Tree is a recursive directory listing command that produces a depth
  indented listing of files, which is colorized ala dircolors if the LS_COLORS
  environment variable is set and output is to tty.
$ ipkg-build ipk

tree_1.7.0_arm.ipkができているのでZaurusにコピーしてインストールする

www.dropbox.com

Zaurusの開発環境をDockerで作成

かなり昔にVirtualbox上に作成していたZaurusのクロスコンパイル環境をDocker上に作成してみる
今でもSharpのサイトからパッケージをダウンロードできたのは驚き
github上にDockerfileを作成して管理する

準備

今回はWindows上で作成

Dockerfile作成

Dockerfile自体はgithubで作成して管理
CentOS上に必要なパッケージをインストールしているだけ github.com

Dockerfileからイメージを作成

-tでイメージ名を指定

$ git clone https://github.com/kkimigawa/zaurus-cross-compile-on-docker.git
$ cd zaurus-cross-compile-on-docker
$ docker build ./ -t zaurus-dev

コンテナ作成

ホストとファイルのやり取りをするために-vオプションでDockerからc:/Usersにアクセスできるようにする
runしたらそのままzaurusユーザとしてログインするはず

$ docker run -it -v c:/Users:/data zaurus-dev /bin/bash

コンパイルテスト

$ vi test.c
/* テストプログラム */
#include <stdio.h>

int main(void) {
  printf("test\n");

  return 0;
}
$ arm-linux-gcc -o test test.c
$ file test 
test: ELF 32-bit LSB executable, ARM, version 1, dynamically linked (uses shared libs), for GNU/Linux 2.0.0, not stripped

arm向けにビルドできているっぽい
testをZaurusに持っていって実行したところ問題なく動作した
Virtualbox上の開発環境ではOpenSSLやnethackとかビルドしていたみたいなので今後はそれらをビルドしてみたい

ZaurusでArch Linux【失敗】

以前にZuaurus3x00向けにArch Linuxにインストールしている人がいたが、1000と860しか持ってないので試せなかった。
最近見たら1000向けのファイルもアップロードされいるっぽい。
開発者が答えているスレッドでも1000持ってないが動くはずのようなことが書かれていたため試してみた。

kexecbootのインストー

  1. ここからlinux-2.6.26-c1000-frankenstein.tar.gzをダウンロード
  2. FATにフォーマットしたSDカードに↑のファイルを書き込み
  3. Zaurusの電源をOFF
  4. 電源プラグを挿してOKボタンを押しながら電源ON
  5. アップデート→SDで更新

linux-3.10.y-c1000-f2fs-kexec-test-r0.tar.gzのほうは試してみたところ起動できなかった。

Arch Linuxのインストー

LinuxマシンがなかったのでRaspberry PiにRaspbianをインストールして実行。

  1. ここからalarm-zaurus-c3x00-minimal-rootfs-may2017.tar.xzをダウンロード
  2. 1GB以上のSDカードかCFを用意
$ sudo parted -s -a optimal /dev/sda mklabel msdos -- mkpart primary ext4 1 -1
$ sudo mkfs.ext4 /dev/sda1
$ sudo mount /dev/sda1 /mnt/
$ sudo bsdtar xvf alarm-zaurus-c3x00-minimal-rootfs-may2017.tar.xz -C /mnt/
$ sudo cp alarm-zaurus-c3x00-minimal-rootfs-may2017.tar.xz /mnt/root/
$ sudo umount /mnt/; sync

※CFの場合は/mnt/boot/boot.cfgの APPEND=root=/dev/mmcblk0p1 を APPEND=root=/dev/sdb1に変える

起動と失敗

あとはSDかCFを挿して電源ONするだけだがkexecboot起動後にインストールしたデータが認識されない。 ext4ext3ext2に変えても変化なし。
やり方をミスしてるっぽい気がする。
更新されたらまた試してみたい。