ハードウェア自作愛好者の方々のために、ハード製作・デバッグ用ソフトの詳細をまとめてみました。
ただし、ある程度腕に自信のある方だけ、お願いします。ハード・ソフトがからみ、エミュレータも使えないので、問題が発生したときのデバッグは簡単なものではありません。
市販のPCMCIA-CFアダプタを分解して取り出した内部の基板をベースにしています。アダプタはどこのメーカーでも大丈夫だと思います。私はI/Oデータのものとアドテックのものを使いました。
Springboard用のケースはATL Technologyという会社から購入しました。
中身の写真は以下の通りです。 74HC00,74HC04を使ったデコーダ、データバス上位・下位入れ替えやアドレスバスを1ビットシフトしている、などの改造です。
新バージョンでは基板を切ってちょっと小さくしてみました。こっちはLVC04とLVC32x2を使っています。
回路の論理式は以下の通りです。回路図の方がよい方はこれ。
(CF <= Visor)
[A10:A0] <= [A11:A1]
[D7:0] <= [D15:8]
[D15:8] <= [D7:0]
-CE1 <= (CS1* | A21)
-CE2 <= (CS1* | A20)
-OE <= OE* | A23
-WE <= WE* | A23
-IORD <= OE* | ~A23
-IOWR <= WE* | ~A23
-REG <= ~(A23 | ~A22)
RESET <= ~RESET*
-CD1 <= CD1*
-CD2 <= CD2*
BVD1, BVD2 を10k-100kでプルアップ
この改造により、モジュールのCS1空間内で、以下のようなメモリマップになります。
address offset (Byte) |
ブロック内容 | |
00000000h | アトリビュートメモリ | 16bitアクセス(-CE1=L, -CE2=L) |
00100000h | 8bitアクセス(-CE1=L, -CE2=H) | |
00200000h | 無効(-CE1=H, -CE2=L) | |
00300000h | 無効(-CE1=H, -CE2=H) | |
00400000h | コモンメモリ | 16bitアクセス(-CE1=L, -CE2=L) |
00500000h | 8bitアクセス(-CE1=L, -CE2=H) | |
00600000h | 8bithアクセス(-CE1=H, -CE2=L) | |
00700000h | 無効(-CE1=H, -CE2=H) | |
00800000h | I/O | 16bitアクセス(-CE1=L, -CE2=L) |
00900000h | 8bitアクセス(-CE1=L, -CE2=H) | |
00A00000h | 8bithアクセス(-CE1=H, -CE2=L) | |
00B00000h | 無効(-CE1=H, -CE2=H) | |
00C00000h | I/O(ゴースト) |
「8bitアクセス(-CE1=L, -CE2=H)」空間のデータ
address (Word) |
D15-D8 | D7-D0 |
xxxxxxx0h | 偶数アドレスのデータ | High-Z/Don't Care |
xxxxxxx1h | 奇数アドレスのデータ | High-Z/Don't Care |
「8bitアクセス(-CE1=H, -CE2=L)」空間のデータ
address (Word) |
D15-D8 | D7-D0 |
xxxxxxx0h | High-Z/Don't Care | 奇数アドレスのデータ |
xxxxxxx1h | High-Z/Don't Care | 奇数アドレスのデータ |
「16bitアクセス(-CE1=L, -CE2=L)」空間のデータ
address (Word) |
D15-D8 | D7-D0 |
xxxxxxx0h | 偶数アドレスのデータ | 奇数アドレスのデータ |
xxxxxxx1h | 偶数アドレスのデータ (ゴースト) |
奇数アドレスのデータ (ゴースト) |
上位・下位バイトが入れ替わっているので注意して下さい。
Visorでは、8ビットアクセスをするとD15-D8を使ってバイトデータにアクセスします。そのため、VisorとCFでデータバスの上位・下位が入れ替えてあります。
コマンドはグラフティから入力します。
コマンド体系は以下の通りです。
読み出し
r<a|m|w> <start addr> <num>
a:アトリビュート
m:コモンメモリ
i:I/O
書き込み
w<a|m|w> <addr> <value>
a:アトリビュート
m:コモンメモリ
i:I/O
以下では、P-in Comp@ctを差した場合の例を示します。
まずアトリビュートを読み出してみます。
ra 0 4<return>
と入力すると左のようにアトリビュートメモリが読み出されるはずです。
次にI/Oを読み出してみます。
ri 3f8<return>
と入力します。
コンフィギュレーションが完了していないので、すべてゼロになっています。
次にコンフィグレーションメモリに値を書き込みます。
wa 200 20<return>と入力します。
そして再度
ri 3f8<return>
と入力すると今度はI/Oレジスタの値が読み出せます。
参考にした情報 | ||
---|---|---|
Handspring Developers | 当然、Handspring社のDeveloperのページ。SDKやサンプルなど、必携。 | |
EXAR社のST16C650A | HandspringのDiagnostic ModuleではここのUARTを使っているので、ちょっとだけ参考にしました。 | |
トラ技スペシャルNo.63,67 パソコン周辺インターフェースのすべてI,II |
PCMCIA, CFに関する情報。 | |
CompactFlash Association Homepage | CFの仕様書がダウンロードできます。ただし根底の部分はPCMCIAの仕様書を入手しないとだめです。 | |
PCカードテクニカルガイド( 翔泳社 ) | 3000円。PCカードのソフトウェア開発に関する情報を中心に書かれている。Windows用ドライバのサンプルもある。 | |
http://www.efig.com/ | Extender Card, Diagnostic Cardを製造・販売している。モジュールの受託設計もしてくれる。 | |
Linuxカーネルのソース PCMCIAモジュールのソース |
LinuxのPCMCIA,シリアルドライバのソースコード | |
Shared libraries on the Palm Pilot | バークレー大のISAACによるPalmOS Shared Libraryの解析結果、サンプルコードなど。 | |
Developer Knowledge Base | Knowledge Baseは大変役に立ちます。「Serial」「Driver」などのキーワードで検索すると有用な情報がヒットします。 | |
PCMCIA仕様書 | 持ってないです。4万円もします。欲しいです。 |