電子工作」カテゴリーアーカイブ

サイバースティック コンバーター

といいつつ画像はカブトガニ (XE-1AP) ですが。

ハード的にはメガドラパッドコンバーターのコネクタ出力を2本入れ替えただけです (DB9 の8p ⇔ 9p を基板上で入れ替え)

使ってるマイコンのI/Oピンを全部使い切ってるため、アダプタ外部から何らかの設定を投入することが出来ません。なので完全にサイバースティック専用です。例によってUSB経由でファームを更新出来るようにしてあります。

DB9の8pと9pを入れ替えるようなチェンジャを噛ませた上でメガドラコンバーターのファームに入れ替えればメガドラパッドが繋がりますが、それやるなら最初からメガドラパッドコンバーター買って下さいよろしくお願いします(宣伝

メガドラパッド コンバーター

ちょっと乗り遅れた感はありますが、メガドラ実機用コントローラの変換アダプタを作ってみました。

こんな感じでDB9のシェルの中に基板を収めた小型アダプタに仕上げました。外部から設定変更できる訳でもなく、挿して繋いで使うだけです。USB経由でファームの更新が出来る様にしています。

今回初めてBOOTHに出品しています。値段が高めなのはご勘弁を。1個作るのに予想以上に手間隙がかかるので。 出品は終了しました。再生産の予定はありません。

使っているのはPIC16F1455です。UART、I2C、SPIの各信号はコネクタに引き出してあるのでファームを差し替えればUSB-MIDIとかも出来そうな気がします(DB9-DIN5変換ケーブルを作る必要がありますが)「PIC16F1455 MIDI」で検索すると(以下略

PS/2キーボードをPC-8801 FH以降に繋ぐ (2)

不足していた機能の追加や不具合の修正を行いました。PIC12F1822 or PIC12F1840用です。

PC-8801FH用 PS/2キーボード変換アダプタ ファーム

 

2019.11.14追記
日本語106 Keyboardでも使えるように、PCキーをRight ALTに割り当てたバージョンを作成しました(APPはGRPHを割り当てています)キー配置以外の変更はありません

PC-8801FH用 PS/2キーボード変換アダプタ ファーム+

 

変更点

1. CAPSキー、かなキーのロック処理を追加しました

一度押すとONのままロックされ、もう一度押すとロックが解除されてOFFになります。キーの状態はキーボードのLEDで確認出来ます。なお、かなキーのロックはScroll Lock LEDに割り当てています。

処理の都合上、キーを「離した(Break)」時に判定を行っています(CAPSキーを押して、離した時にONでロック。もう一度押して、離した時にロック解除)

 

2. キーレイアウトを見直して変更しました

現在のレイアウトは以下のとおりです。なおPCキーはApp (Menu) にアサインしているので日本語109キーボード必須となります。

未アサインキーがあっても意味が無い気がしたので重複してでも全キーに何らかのアサインを行いました1106キーボードでも全キー叩けるようにしようかと思ったけど、スペースの右側の並びがどうもしっくり来なかったので結局AppにPCをアサインしています。テンキー=とテンキーカンマは、これはさすがにどうしようもないのでF11とF12にアサインしました。

STOPはScroll LockとPauseの両方にアサインしていますが、押しっ放し動作が必要な場合はScroll Lockを使って下さい。PS/2の仕様上、Pauseキーは押しっ放しが出来ません(押した瞬間に「押した」「離した」が出力されるので)

前述のとおり「CAPS」と「かな」はロックキーです。一度ON-OFFすると「押した」だけが通知されて、もう一度ON-OFFすると「離した」が通知されます。現在どちらの状態にあるかはLEDで判別可能です。なお「かな」はScroll Lock LEDを割り当てています

※左CTRLとCAPSの配置は逆の方がいい、と言う方がいましたらコメントで教えて下さい。

PageUpに「ROLL DOWN」をアサイン、PageDownに「ROLL UP」をアサインしています。(NEC系の伝統?)これも「逆の方がいい」と言う方はコメント下さい。

 

回路図再掲。点線部分はオプションで実装しなくても動きます。LEDはPS/2キーボードの操作にあわせて点滅します。POLYSWは自己復旧型のヒューズです。万一の場合の気休めに。

 

PC-8801 キーボード端子 (ミニDIN 5ピン)

 

PC-8801 FH以降 キーボードのマトリクス

自分用メモ

※1 Row=0x0Eの7bit目は常に0が返る

Row=0x0C以降はPC-8801 mkII のキーボードには無い、追加されたキー。便宜上「拡張キー」と呼ぶことにするが、拡張キーを打鍵した場合はmkII/SRとの互換性維持のため従来キー(mkII/SRに存在するキー)のキーコードも同時に出力される(2行表記のキーの下段)

例えばF9を打鍵した場合は「F9(Make), SHIFT(Make), F4(Make)」が出力される

F9押下→F4押下と打鍵した場合は「F9(Make), SHIFT(Make), F4(Make), F4(Make)」と、F4のMakeが連続で発生する

拡張キーを離した場合はやや複雑となる。単独Breakの場合は簡単で、例えばF9以外のキーが押されていない状態でF9を開放した場合は「F9(Break), F4(Break), SHIFT(Break)」が出力される。

F4を押したままF9を開放した場合はF4のBreakコードは出力されない1。よって「F9(Break), SHIFT(Break)」のみが出力される。

SHIFT左かSHIFT右を押したままF9を開放した場合は「F9(Break), F4(Break), SHIFT(Make)」と、最後にSHIFTのMakeコードが出力される。普通に考えたらSHIFTについてはMakeもBreakも出力しなくて良いようにも思われるが。なおこの「良く分からないMakeの出力」はBSとDEL2、ENTERとテンキーENTER3 でも同様に発生する。逆に、SHIFT左とSHIFT右の場合はSHIFTのMakeは発生しない。

INSを押下した場合はINSのMakeに続けて「SHIFT, INSDEL」のMakeも出力されるが、これは個別に出るのではなくまとめて出力される。同一Rowのキーは最大7キーまでMake/Breakを一度に表現できるので、SHIFTとINSDELのMakeは

Row = 0x08、Col = 0b10110111

となる(Col の bitが 0のキーが押下中のキー。4bit目の0はINSDELの押下を示し、7bit目の0はSHIFTの押下を示している)

 

上記の動作は Type Aキーボードで確認。Type B以降のキーボードでも同じ挙動を示すのかは不明。

 

PS/2キーボードをPC-8801 FH以降に繋ぐ

こちらは実に敷居が高いモノとなっています

まず、このファームは 実機で動作確認していません 私自身では実機での動作確認を行っていません1 。作っても動かないとか、正常に動かない可能性があります。ですので

  • 電子工作に多少の経験がある
  • PC-8801 FH以降の機種を持っている
  • PIC12F1822を書き込めるwriterを既に所持している2
  • PS/2 Keyboardも持っている
  • 出来ればブレッドボードを持っている
  • 動かなくても泣かない

という条件に当てはまる方のみお試し下さい。なお、正常に動かなかった場合は教えて頂ければ可能な限り対応します(が、実機持ってないのでお約束は出来ません)

一応、88の実機は持ってないものの88用のType Aキーボードの実物は持っているのでロジアナで出力信号を比較チェックしています。また、先にType Aキーボードの信号を解釈するテストボードを作ったうえで、作ったファームをそのテストボードで検証しています3

PICはPIC12F1822を使います4。RA0が88への出力信号で、RA4がPS/2 CLK、RA5がPS/2 DATAです。PS/2の2本の信号線には必ず330Ωの抵抗を入れて下さい。パスコンとかは適当に。図中のポリスイッチ(自己復旧型ヒューズ)とLEDは省略可能です

<回路図>

PC-8801FH用 PS/2キーボード変換アダプタ ファーム
機能追加&不具合修正を行った更新版があります

 

ファームの制限事項です

PC-8801 FH以降の機種に付いてくるキーボードは88SR用キーボードからキーが増えています(F6~F10とか)。とりあえずここでは 88SRと共通のキーを「従来キー」、追加されたキーを「拡張キー」と呼ぶことにします。

拡張キーを押したとき、88SR用プログラムとの互換性を取るために、従来キーのキーコードも一緒に送信されます。例えば拡張キーの「F9」を押したときは「F9, SHIFT, F4」というキーコードが出力されます。拡張キーの「INS」を押したときは「INS, INSDEL」というキーコードが出力されます。

面倒なのはキーを離したときで、前述の例だとF9を離したときは「F9開放、F4開放、SHIFT開放」のコードが出力されますが、「F4を押したままF9を開放した」とか「SHIFTを押したままF9を開放した」場合は少し挙動が変わります。「F4を押したままF9を開放した」場合は「F9開放、SHIFT開放」だけ出力され、「SHIFTを押したままF9を開放した」場合は「F9開放、F4開放、SHIFT押下」が出力されます。そういうもののようです。

これらの挙動を厳密に網羅するのが面倒だったので、本ファームでは拡張キー開放時の同時押しに付いては特に考慮していません。SHIFTを押したままF9を開放した場合でも「F9開放、F4開放、SHIFT開放」が出力されて、SHIFTキーはリリースされた状態になります5  6

CAPSキーとかなキーのロックは実装していません。ロック機構が無いと問題が出るアプリがあるようなら実装を検討します。

PS/2 & USB コンパチ型のキーボードだとうまく動かないかもしれません(特に、「デフォルトがUSBで、ケーブルの先端にアダプタを挿すとPS/2でも使える」タイプのキーボード)

  1. 現在 FAでの動作実績1件 []
  2. コメント参照 []
  3. これを検証と呼んでいいのか些か疑問ですが []
  4. PIC12F1840でもOK []
  5. 押してもいないのに「押されている」と処理されるのは問題がありそうでも、押しているのに「押していない」と処理されるのはまあ許されるかな、と []
  6. 追加された拡張キーはF6-F10, BS, DEL といった、そんなに他キーとの同時押しを行わないようなキーばかりなのでそう問題は起きないかな、と []

SS2USB 補足

サポートページの更新が全く出来ていないので、取り急ぎこちらで補足します

ファームウェアの更新について

Rev2からジャンパスイッチは7連になっています。
「7連ジャンパ-USBコネクタ-LED-プッシュスイッチ」と並んでいますが、プッシュスイッチを押したままアダプタをPCに接続するとメンテナンスモードで立ち上がります。メンテナンスモードで立ち上がるとLEDは高速に点滅します

ファームウェアを更新する際はメンテナンスモードにしてから行って下さい

ファームウェアは現在

  1. マルチターミナル6が使えるFULL版(コントロールパネルの「インストール済みゲームコントローラ」にコントローラが5つ出現します)
  2. マルチターミナル対応を削除したMINI版(「インストール済みゲームコントローラ」にはコントローラが1つだけ出現します)
  3. FULL版とMINI版を1つにして切り替え可能にした実験版1
  4. DirectInputとXInputを切り替えることが出来る実験版2

の4種類が存在します。発送時は1のFULL版か2のMINI版のどちらかを書き込んでいます  実験版1を書き込んで発送しています。ファームを入れ替えたい場合はメンテナンスモードにしてからファーム更新ツールで書き換えて下さい。

ファームウェアおよび更新ツール、更新手順はサポートページ内のリンクからダウンロード可能です。ダウンロードパスワード、解凍パスワードはメールでお知らせします。アダプタ自体は、2016年以降の発送分はすべてRev2版となります。

 

7連ジャンパスイッチの設定について

以下はサポートページからダウンロードできるファームウェア(前述で言うところの、1のFILL版および2のMINI版)についての設定の説明です。(実験版1はスイッチの機能が変更となっています)

USBコネクタから一番遠いスイッチがSW1、一番USBコネクタに近いスイッチがSW7です(基板上のシルク印刷がこれと逆になっている場合がありますが、常に「USBコネクタにもっとも近いジャンパがSW7」です)

縦2ピンをショートさせるとON、ジャンパを挿さずにオープンとするとOFFです

SW1: コントローラの読み取り周期設定

OPEN デフォルト
CLOSE 強制的に1/60秒
※基本的にはOPENで問題ありません

SW2: マルコン(ANALOG)のL/Rアナログトリガ設定①

OPEN 0~255の範囲の値をとる。押さない状態で0、押し切った状態で255
CLOSE 128~255の範囲をとる。押さない状態で128、押し切った状態で255
アプリによっては0~255の範囲をとると問題になる場合があります
(DirectInputの厳密な定義が「アナログ入力はニュートラル状態で中間値」
と定められているため)
その場合にCLOSEして128~255の範囲で動くように設定します

SW3, SW6: 十字ボタンのマッピング設定

標準パッドおよびマルコン(DIGITAL)の十字ボタンの割り当てを変えます

SW3 SW6 十字ボタンの割り当て
OPEN OPEN X軸、Y軸
CLOSE OPEN POV (ハットスイッチ)
CLOSE CLOSE ボタン13~16

※マルコン(ANALOG)の十字ボタンはこの設定に関係なく常にPOVです

SW4, SW5: マルコン(ANALOG)のL/Rトリガ設定②

SW4=OPEN, SW5=OPEN L/Rトリガを操作するとアナログ入力(Z軸, Z回転)と
ボタン入力(B7, B8)の両方が発生する
SW4=CLOSE, SW5=OPEN L/Rトリガを操作するとボタン入力(B7, B8)だけが
発生する
SW4=CLOSE, SW5=CLOSE L/Rトリガを操作するとアナログ入力(Z軸, Z回転)
だけが発生する

SW7: 未使用につき、常にOPEN

 

基板上のジャンパピンについて

基板上には5ピンのジャンパ(何も刺さっていません)と3ピンのジャンパ(発送時はGND側にジャンパブロックを挿しています)がありますが、ここの設定は変えないでください。

なお3ピンジャンパは2020年からの発送分については、そもそもジャンパではなくパターンショートの半田付けとなっている場合があります。

elecrow

頼んでいた基板が到着しました

左が新版のX68キーボードUSB変換アダプタ、右がPS/2キーボードのUSB変換アダプタです。注文から受け取りまでのスケジュールはこんな感じ。まずはelecrowのOrder Status

10/26/2014 Confirmed
10/26/2014 PCB Processing
10/27/2014 In production
10/31/2014 Traceable

JP (ChinaPostr)の追跡はこんな感じ

計18日。ChinaPost引き受けまでに4日かかってるのと、北京で1回飛行機に乗せ損ねて(?) 再処理に3日かかってるのが無ければ1週間早く着いてたのに。やっぱり追加で1000円必要なDHLは伊達じゃなかった。

 

今回追加したI2C EEPROMのパターン周り

0.65mmピッチの足は問題ないんだけど、貫通VIAのドリル中心位置がややずれてますね。

 

 

 

FM TOWNSキーボードのUSB変換(続2

大型の台風接近で折角の祝日に外出もままならないので、FM TOWNS用USBキーボードアダプタのキーマップカスタマイズ対応を行いました。

実際手を動かしてコードを書くまでは「USB HIDプログラミングって何か難しそう」という印象だったのですが、ネットで公開されているサンプルを参考に試行錯誤するうちにあっさり対応出来ました。なんだ、HIDクラス使うのって結構簡単じゃん(笑

見た目がダサいですがWIndows側のアプリです(汗。さすがにキー1つずつ変換定義を入力するのは面倒と思いましたので、全キーの変換定義を記したファイルを一気に流し込めるようにしています。キー変換定義はPIC内蔵のEEPROM に記録しています。

今回、Windows側アプリはVB.NETで作成しました。こうした小物を作成するならVB.NET(や、今回は使ってないけどC#)は優秀だと感じました。VisualStudioのExpress版を無償で公開しているMicrosoftに感謝です。

 

FM TOWNSキーボードのUSB変換(続

ついかっとなって買ってしまった。少し後悔している

FMT-KB205、いわゆる親指シフトキーボードです。もともとアダプタはJISキーボードと親指シフトキーボードを自動で判別してキー配置を個別に対応していたんですが、実機確認のために買ってしまいました。 案の定、キーコード変換のバグが見つかったのでやはり実記動作確認は大切です。

FM TOWNS用のキーボードはALTキーが存在するもの(FMT-KB107、FMT-KB207など)と、ALTキーが存在しないものがあります。今回購入したFMT-KB205はALTキーが存在しないキーボードです。今時のWindowsで使うのにALTキーが無いのはさすがに辛すぎます。JISキーボードは最下段のキーに余裕があるので振り替え可能なんですが、今回のFMT-KB205は最下段に最低限のキーしかないのでALTに振り返られそうなキーがありません。

また、左側の「英字、カタカナ/英小文字」キーや、親指シフトキーボードを最も特徴付けている「親指左、親指右」をUSBキーボードのどのキーにマップするかも悩ましいところです。この辺り、多分使う人によって好みが大いに分かれそうです。

やっぱりキーマップのカスタマイズ機能は必須かなぁ。JISキーボードだとあんまり必要性感じないんですが、親指シフトキーボードだとカスタマイズ機能が無いと辛そう

 

追記
結局キーマップのカスタマイズ機能もつけました