各種PC-8001対応のエミュレータが登場して以来、過去に持っていたI/OやASCII等の雑誌掲載プログラムの再打ち込みなどをしつつ懐かしいゲームを遊んでいたのですが、やはり当時の雰囲気で遊ぼうと思うとキーボードが問題になる場合が多かったりします・・。(私だけ?)
○クレイジークライマーにはNECテンキーが必要です!
特に私はテンキー操作が重要なゲームを好きなこともあり、以前から色々な種類のNEC配列の自作テンキーもどきを作っては楽しんでいました。
○初代(画像クリックで製作記事へ)
○2代目(画像クリックで製作記事へ)
○Pasocommini PC-8001発売記念モデル(記事無し。画像のみ。スミマセン・・)
PC-8001mini用キーボードです。[Fn]+[Home]で各種ゲーム用に配列を入れ替えできます。実機と同じテンキー配列じゃないと操作感が・・と言うことでArduino ProMicroで作ったものです。NEC配列のテンキーに思い入れのある人って私だけかもしれませんが・・。 pic.twitter.com/YDmrX3Vuwa
— あお (@hd61yukimizake) September 4, 2021
これはこれで便利かつ楽しく使っているのですが、細かい点で問題があり、発展型(最終形態?)として、USB接続できるNEC PC-8001配列のフルキーボードがあれば・・と常々思っていました。 しかし「実際に作るとなると結構大変だ」との考えもあり、ここ3年くらいモヤモヤ妄想しつつ、結局は制作に取り掛かることもなく過ごしていたのですが・・!
事のきっかけは以下のツイートツリー。
さっき秋月で無意識でカートに入れてしまいました・・。😱
— あお (@hd61yukimizake) September 6, 2021
ごめん・・おれまたプチコン買えなかったよ・・
はっ。私、いったい誰に謝って・・!?
リンク先のツイートを読んでいただくと分かる通り、PocketGriffonさんがM5Stack上でPC-8801のアルフォスを動かした事で興味を惹かれ結局M5Stackを買うことになってしまいました。(うまく誘導されたような気がしないでもないです・・)
買うからには色々調べたというか、さらに誘導されたというか、M5Stack専用のキーボードが販売されていることを知り、リンク先にあるドキュメント(ソースコード、サンプルコード)を読んでみたところ「意外と簡単に作れそう」という事が判明。
ちょうど購入元からM5stackの発送が遅くなりそうだとの連絡があったこともあり、届くまでの暇つぶしにダメもとで作ってみようとばかりに着手した。(してしまった・・)
○スイッチサイエンス販売サイト
M5Stack用カード型キーボードユニット
元々NEC配列のテンキーを色々作ってきたこともあり、自作キーボードについては色々調べたことがあった。特に2代目の制作時にArduino Pro Micro対応をする際に参考させていただいた
Arduino Micro を使って、USB 小型 キーボードを自作という、かとうさんのBlog記事があり、この記事を参考にフルキーボード試作用に部品が購入してあった。
まあ、実のところ3年近く放置していたんですけれど。・・ダメ人間ですみません
○購入してあったもの(在庫切れだらけで申し訳ないです・・)
・Arduino Pro Micro互換モジュール 1個
・ユニバーサル基板 90x150(たぶんこれ) 1個
・タクトスイッチ 4.1x4.1(商品ページが存在しないみたい・・) 100個
代わりにこういうのを使うと良いと思う
・シフトレジスタ(74HC164) 2個
・フルカラーLED(WS2812B) 1個
・セラミックコンデンサ0.1μF 1個
・抵抗 10kΩ 8個
実装にあたり当時の資料を調べたところJW CAD でこんな図を描いていた。
ボタンは載りそう・・
Arduino Pro Microをキーボード用に使う際に問題となるI/O Pinの少なさに関しては、かとうさんのBlog記事にあるシフトレジスタを使う方法で解決できる。
PC-8001は80個のキーがあるのと、M5Stack接続用にI2C通信用のポートも必要だし、LEDでモード表示も行いたい事を考えると、このシフトレジスタを使った方法は非常に優れていると思う。感謝!感謝!
とは言いつつ、今ならSTM32とかRaspberry pi picoなどのGPIOポートが多数実装されているマイコンを使った方がシンプルに解決できるのでそちらの利用を推奨したいところ・・。
という事で実態配線図を書いてみた。(PDF形式ファイル)
○回路図/キーマトリクス図
あとは何も考えずひたすら実装しました!
M5stack発送が週明けになるとの事で、キーボード作ってます・・。I2C+USB接続もつけてPC-8001mini用フルキーボードにもなる予定。#M5Stack#PC8001 pic.twitter.com/iYErEHBktW
— あお (@hd61yukimizake) September 12, 2021
このツイート時は、実装がほぼメドがついて放心状態でした・・(T_T)
実はキーマトリクス図だけ先に書いて回路組みつつ追加で回路図を書いていて、このため一部配線をミスしていた・・(T_T)
さっそく、HIDデバイスとして動作するようスケッチを組んでみた。もともと2代目と3代目の制作時に作ったスケッチがあるのでそれを拡張・改造して動作検証してみたら、どうもキーマップ通りの動作ができないことに気が付いた。
キーマップの8列目が認識しない・・。テスターで確認したところ、キーマトリクスはOK。74HC164側のPin13がマトリクスと接続されておらず、しかも以降1つづつ結線がズレてしまっていた。
原因はわかったのでスケッチ側で対応して、無事動作。
デバッグと並行してM5Stackが到着したのでNochiさんが公開しているN80 for M5Stackを入れてみた。
めっちゃ感動した!
M5Stackようやく来た~!
— あお (@hd61yukimizake) September 14, 2021
取り急ぎ、 @shikarunochi さんが公開しているPC-8001エミュレータを動作させてみました。迷路もばっちり!このサイズの機器でPC-8001のプログラムが動くとは感動です。😃#PC8001 #MAZE pic.twitter.com/l1ff38jtqc
さっそくI2C動作を組み込んでM5Stackと接続してみました。
N80 for M5Stackで自作キーボードが動いた!😃
— あお (@hd61yukimizake) September 18, 2021
適当なケーブルがなかったのでI2C接続は裏のコネクタに差すようにしてみました。とりあえずゲームと言うことでバリアーアタックやってみたけど、1byte毎の読出しなので同時押しが厳しめ。交互に送るようにしてみるとか・・。#PC8001 pic.twitter.com/Led4o3BqZk
M5Stack専用キーボードのファームウェア仕様により1文字づつの転送しか対応しておらず、キー同時押しができない制限がありつつも概ね動作。
まあ、Shiftが効かない場合があったりと少々キーボード側の動作が怪しい所もありつつ、ひとまずスケッチ実装としてはひと段落付いたことにしました。(後で改良できますので・・)
○USB HIDおよび、M5Stack対応スケッチ(暫定版)
○スケッチの書き込み/動作確認
Arduino IDEで「ファイル」→「新規ファイル」で新規スケッチを開いて、上記のスケッチを全て貼り付けます。
マイコンが認識していることを確認したら、「マイコンボードに書き込む」をクリックしてコンパイル・書き込みを実行します。
スケッチの動作については特別なことはしていないのでコードを見てもらえばわかるとは思います。
シフトレジスタ(74HC164)のレジスタ値がHiの場合に該当列のスイッチがONだとPro Micro側の該当ポートがON(Hi)になるので、キー押下を検知できます。
キースイッチのチャタリング対策として10msec毎にキースキャンして合致した場合にカレントのキー状態として取り込んでいます。
なお、結線誤りの修正はコンパイルスイッチ(__BugFix)を付けて記載してます・・(T_T)
ここまででハードウェア的にはキーボードとして動作するようになったのですが、いかんせん基板むき出しの状態では非常に操作がやりづらい・・。
各キーが判別できて操作できれば良いので、↓のような感じで、OHPフィルムにPC-8001相当のレイアウトを印刷して、お茶を濁そうと思っていました。
と言うか今でもそれが正解だったと思っているのですが・・。
Nochiさんが公開されているBlogを読んでしまった!(T_T)これは燃える!
完全に火がついてしまい、CADで3面図もどきを描いてミニチュアのPC-8001っぽくできないか妄想を開始してしまった!
次回(その2)に続きます。