KeyBoardマニアII

2009-05ARM?

目次




昔のAppleADBキーボードをPS/2に変換するアダプタ

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/PIC/kbsmall.jpg

DOWNLOAD(ADB)

ソース,HEXファイル一式: https://raw.github.com/iruka-/ATMEL_AVR/master/web/upload/adb-ps2-adapter.zip

  • 仕様:
  • ATtiny2313 内蔵RC発振モード(8MHz) を使用します。
  • 外付け部品は電源のパスコン(0.1uF)1個のみです。
  • PS/2側2線とADB側1線はAVRチップ直結と、最小限の配線量で完成します。
  • プルアップ抵抗は省略しています。(AVRの内部プルアップで代用)
  • 記述はAVR-gccです。





キーボ−ドマニア・リベンジ

https://raw.github.com/iruka-/ATMEL_AVR/master/web/jpg/PIC/pc88-1.jpg

元ねた:

DOWNLOAD(PC8801)

ソース,HEXファイル一式: https://raw.github.com/iruka-/ATMEL_AVR/master/web/upload/pc8801.zip

  • 仕様:
  • ATtiny2313 内蔵RC発振モード(8MHz)です。
  • 別途TTL ICを使用しています。 74LS158(8 to 4 inverted selector)
  • 記述はAVR-gccです。






以下は制作記です。


ADB to PS/2変換器制作の軌跡

  • 昔のAppleADBキーボードをPS/2に変換するアダプタ をAVRで作ってみようと思う。
  • 昔PIC 16F84Aで作った奴は、互換機のBIOSモードとか生DOSではちゃんと動いた。
  • WindowsやLinuxでは動かない。
  • プロトコルに問題があるようだが理由がまだわからない。

調査

  • Windowsが起動している状態でPS2キーボード端子を差し替えてAppleADBに差し替えるとちゃんとキー入力できる。
  • Windows起動前に差し替えるとキー入力出来ない。
    • これは、リセットシーケンスのようなものが来て、うまく反応出来ずに未接続にされてしまうような感じ。


  • AVRで仮組みした奴だと、ここは乗り越えるのだが、
  • 可能性としては、リセット後の待ち時間問題。


  • AVRで仮組みした奴でも、少し改造するとうまく行かない。
  • これは原因不明
  • 別のマシンでは動いた。
  • 結論的には、RESETコマンド後のリプライを600mS後に遅らせることで、
  • キーボード未接続になる問題が回避される公算大。(要確認)

実験結果

  • PICで書いたものは、RESETコマンド後の待ち時間をどのように変えても認識しない。
  • AVRで書いたほうは、一応大丈夫っぽい気がする。
  • 双方にはプロトコル解釈上の見解が大きく異なる。

今のところ決め手無し。





PICで書かれたADBtoPS2変換機のソースの大部分を移植してみた。

  • けれど、まだ動かない。
  • PS/2インターフェースは生きている。
  • ADB側が死んでいる模様。---調査中
  • 最初ADB側のGND配線が微妙に抜けていて給電されていなかった。---修正した。





一応、全機能を実装。

  • してみたが、BIOSリセット後にキーボードが認識されなくなる問題が残った。
  • 回避策としては、1秒に1回ダミーキーを送るとか、手動でキーを打てば回避できる。
  • たまたま、電源投入直後はADB側の問題でダミーキーが押されっぱなしになる(?)ので回避できている。
  • Windowsの起動時のキーボード切り離し問題は結局起きなかった。





まとめ:とりあえず、ADB to PS/2 変換器は完成した。

  • PIC 16F84A に実装していたもの相当の機能に関しては実装済み。
  • 一応動作する。
  • 少し古めのマザー(i815E)では「BIOSリセット後にキーボードが認識されなくなる問題」は起きない。
  • Windowsの起動時のキーボード切り離し問題はマザーの種類に関係なく、起きなかった。
    • PIC版では常に起きていて、結局原因は不明のままだ。




現状の問題点

  • 新し目のマザーでは「BIOSリセット後にキーボードが認識されなくなる問題」が起きる。
  • このため、対策として
    • RESETコマンドを受け取るまでは、1秒に一回程度の頻度でPC側にACK(0xfa)を送り続けるようにして回避した。
    • 但し、Windows再起動や手動リセットでの起動ではACKを送るモードに戻せないので、
    • BIOS起動後2秒くらいは適当にキーを押していないと「BIOSリセット後にキーボードが認識されなくなる問題」 が起きてしまう。
  • とりあえず、古いマザーで使うので、いいんだけど・・・。


つまり

  • 新し目のマザー(foxconn製G31マザー)では、RESETコマンドが来る以前にキーボード未接続 と見なされるような挙動(?)があって、
  • 純正(?)のPS/2キーボードでは、回避されている(???)

という謎が浮かび上がっている。