スーパーファミコンをプレイしていると、時々連射機能が欲しくなります。
当時は連射機能付きのホリコマンダー(ストⅡボタン配置)を持っていたのですが、今はもう行方不明となり、ハードオフで買おうと思ったら「ふざけるなっ!」と言いたくなるような値段だったので、余ったジョイスティックを使って自作することにしました。
とか言いながら、ボタンの色を合わせるために緑、青、白のボタンを追加購入してるし...。
今回使うマイコンは28ピンのATMEGA8です。
ネオジオ ミニでスーファミのコントローラー使った方法とは逆に、P/S、CLK信号を受けてDATAを送ればいいはずです。
理論的には...。
連射機能はいつも通りの連射道さんのインバーターによる連射です。
もちろん、ソフトウェアで実現してもいいのですが、微妙な可変調整をするためにアナログで行います。
筐体はいつものキッチンボックスです。
何だかもう、ストⅡやる気満々ですね。
穴はいつもより綺麗に開けられました。
その秘密は...。
こんなん使いました。
もちろん、旋盤機やグラインダー使ったほうが綺麗に穴を開けられるのですが、これだけのために購入するのもアフォオなので、100円で済ませました。
ただ、マイクロプラスチックを出しまくったので、環境にも健康にもメチャメチャ悪いのですが。
ケーブルはジャンクのスーファミコントローラーから流用します。
実は、X68000用リブルラブルのコントローラーをスーファミのコントローラーで作ろうとして失敗し、その残骸がコレなのは秘密です。
こんなん、なりました。
パッと見、うまくいっているように見えますが...。
ボタンをはめ込んだ時にバッキリ割れてしまい、裏から接着剤とグルーで補修してあります。
配線は相変わらず、人喰い怪人イソギンチャックです。
よくこんなんで動くもんだと、自分でも関心します。
連射のLEDはわざわざボタンの色に合わせています。
雑な性格の割に、こんなくだらない所にはこだわってしまいます。
ただ、派手なのでLEDの点滅で”てんかん”を起こしてしまうかも。
「部屋を明るくして、コントローラーから離れてプレイしてね」
いや、ムリムリ。
完成~!
と思いきや、全然動かない。
オシロスコープで信号を見ながら、試行錯誤するも上下で左右が動いてしまうなど、どうやってもボタンが2STAGE分遅れてしまいます。
1サイクル前の信号を送ってしまっているのかと、悩んで悩んだ挙句、仕事の打ち合わせ中に閃いてしまいました。
「マイコンだから遅いんじゃね?」
そう、ロジックICと比べるとマイコンなので、処理がかなり遅れてしまうんです。
P/Sのタイミングでジョイスティックとボタンの状態を取得しているのですが、私の書いたコードがどん臭い糞馬鹿コードだったために、
処理している間に2回分のCLKが通り過ぎていたのでした。
ということで、
・関数コールは使わない
・配列や変数は使わずにビット操作で状態を保持する
などの高速化を行い、ようやく動作するようになりました。
コードだけ見ると単純なのですが、わずかな遅延で誤反応したり、ボタンが入れ替わるので注意が必要です。
ということで、無事完成しました。