戻る

PC-E200シリーズポケコン用 シリアルメモリドライブ
ポケメモ



はじめに
「ポケメモ」は PC-E200/G8** シリーズの11ピンインターフェースに接続するシリアルI/Oタイプの外部メモリドライブです。
工業高校ではいまだにポケコンを使っているのか良く分かりませんが、中間・期末試験でリセットを強制された苦い思い出があったので作ってみました。(今はゲームがたくさん詰まっています)
作り終わってから気づいたのですが、「チップドライブⅢ」というメモリカードのキットが出ているようです。価格も5千円と手頃なのでポケメモとの相違点を書いておきます。

比較点ポケメモチップドライブⅢ
対象ポケコンPC-E200・PC-G8**系 (つまり全機種)PC-G850系
メモリ容量256kバイト32kバイト?
書き換え回数100万回1万回
リード/ライト速度11.75k / 11.38k bps 96k / 20k bps
消費電流10mAぐらい6mA (スタンバイ時 20μA)
SHELL不要必要

74HC04を他のタイプに変えると消費電流が増えることがあるようです。空きの入力をGNDへ落としたのがまずかったのでしょうか?
ポケメモにスタンバイモードが無いのは、74HC04やI2C EEPROMのワイヤードORを構成する抵抗(5kΩ×2)の電流が大部分を占めるため、PICだけをスリープさせてもあまりご利益が無いからです。

つーか、チップドライブの読み出し96kbpsってなんですか?SHELLがあるから?

各部の名称
① メモリIC
② インジケータLED
③ プッシュスイッチ
④ ホストインターフェース
⑤ 外部電源供給コネクタ
⑥ ポケメモコントローラ

メモリICは右上から下→左上から下の順番で挿入していきます。
外部電源供給コネクタは、ホスト側にRS-232Cのレベルコンバータをつないだ時に電源が必要になるので、ここへ安定化されたDC 5Vを供給します。実際はダイオードを通過するため、5.6Vぐらいがちょうどいいと思います(携帯電話のアダプタを流用)。ホスト側への逆流防止ダイオードが無いためポケコンの時は使用できません。

使用上のお願い
ポケメモはホストインターフェースをポケコンに接続した時点で電源が入ります(電源スイッチがありません)。接続したままにしておくとポケコンの電池が消耗するので、使用しないときは取り外しておいてください。また、操作説明で電源の入れなおしがある場合、ポケコンと接続している時はホストインターフェースの抜き差しになります。

ポケメモに使用するPICは、16MHzで動作するためには4.0V以上の電圧が必要です。ポケコンに接続して使用する際は、電池の残量に気をつけてください。また、PICへの書き込み時はブラウンアウトリセットを有効にしておいてください。

ファイルシステムの設計には細心の注意を払っていますが、EEPROMに書き込む処理(ファイルの保存や削除等)をしている最中に電源を切ると、当然データ消失やファイルシステム破壊の原因になります。失われたデータを復活することはできませんのでご注意ください。

システム設定の初期化
ポケメモを初めて使用するときは、以下の要領でシステム設定のデータを初期化してから使用してください。
また、setコマンドでシステム設定のデータを間違って設定した時も、この手順で設定を初期化できます。

1プッシュスイッチを押しながら電源を接続すると、オレンジ色のLEDが点灯し、手を離すとLEDが点滅をはじめます。
2
もう一度プッシュスイッチを押すと設定が初期化(通信速度=1200bps、メモリ個数=1)され、通常の起動プロセスに進みます。
設定をクリアしたくない場合には、ポケメモの電源を入れなおしてください。

ポケメモの基本操作
ポケメモをポケコンに接続すると電源が供給され、通信スタンバイの状態になります。この状態ではコマンドを受信せず垂れ流しの状態になります。プッシュスイッチを押すとコマンド入力待ちに移行します。

ポケメモへのコマンド送信やエラーの受信などの情報は、全てテキストデータで行い、状態の確認をLEDで行います。
つまり、テキストエディタでコマンドを入力 → SIOモードでテキストを送出 → エラーがあったらエラーを読み込む という手順になります。

LEDの点灯パターン
ホストとの通信スタンバイ中のため、スイッチ入力要求。
受信データは破棄されます。
コマンドの入力待ち。
コマンドの入力中。
処理継続のスイッチ入力待ち。
情報の受信を要求、または情報の送信中。
EEPROMアクセス中。
エラー情報送信の待機中のためスイッチ入力要求。
受信データは破棄されます。
エラー情報送信中。
シリアル通信異常発生のため、エラーから復帰処理中。

ポケメモへコマンドを送信する時…
コマンドの書式は、「コマンド (スペース) 引数1 (スペース) 引数2」となっています。
コマンドや引数の間には必ずスペース1文字を入れてください。スペースを2文字以上入れると誤動作します。
引数を3個以上付けた場合は無視されます。
コマンドは大文字小文字どちらでも認識されます。
コマンド入力時の先頭に数字がついていた場合は、その文字を行番号とみなして数字以外の文字が来るまで無視します。
引数がファイル名の場合、名前は最大16文字で大文字と小文字が認識されます。たとえば、「a.dat」と「A.DAT」というファイルは別になります。

ポケメモが情報を送信しようとしている時…
ポケメモからの情報はテキストデータで送信されるので、SIOモードを使って読み込んでください。

ポケメモがエラーを送信しようとしている時…
エラー情報はスイッチを押した後にテキストデータで送信されます。

シリアル通信異常が発生した場合
通信速度やデータビットなどの設定が正しくない場合がほとんどです。また、ポケコンでRUNやGOTO等のプログラム開始命令を実行するとブレーク信号のようなものが送出されるため、必ずこの状態に陥ります。
RS-232Cのレベルコンバータと接続している場合は、ホストインターフェースを活線挿抜するとこの状態に陥ります。
ほとんどの場合エラーからは復帰しますが、無限ループに陥ってしまう場合もあります。その場合電源を入れなおしてください。

コマンドリファレンス
ホスト側から文字列が送られてくると、コマンドと引数の分割やエラーチェックを行います。
コマンド解析中にエラーが検出された場合、次のようなメッセージが送信されます。
CMD or ARG is too long.(入力中) 入力中の文字数が想定される最大文字数(37文字)を超えている。
(解析中) 入力されたコマンド名が長すぎる(5文字以上)か、引数が長すぎる(17文字以上)。
Invalid command.(解析中) 入力されたコマンドは存在しない。

これらのエラーが検出された場合は無効なデータが続く可能性があるため、プッシュスイッチを押すまでホスト側のデータを垂れ流しします。その後、通信スタンバイ中のキー入力状態に戻ります。

RS-232Cのレベルコンバータを使ってハイパーターミナル等でコマンドを入力している場合、コマンド入力エラーが発生するまでに Ctrl+X (CANコード) を入力すると、コマンドの入力を中断して入力待ちに戻ることができます。

エラーチェックに引っかからなかった場合は、各コマンドの動作を開始します。
コマンドは作者の好みでFTPで使うコマンド名に酷似させています。
ファイル操作のコマンド
putファイルの新規保存
getファイルの呼び出し
delファイルの削除
renファイル名の変更
overファイルの上書き
sizeファイルの保存に必要な空き容量の計算
ディスク操作のコマンド
lsファイルリストの取得
dfメモリチップの空き容量の取得
cdメモリチップの切り替え
mkfsファイルシステムの初期化
システムコマンド
setシステム設定の変更
num行番号送出の設定
termホストとの通信設定
statシステムの設定状態を表示
helpコマンドヘルプの取得


put ファイル名
指定したファイル名でデータを新規書き込みします。
コマンドを送信した後にオレンジLEDが点滅するので、ポケコン側で送信操作をしてからプッシュスイッチを押すとデータの書き込みが行われます。データの書き込み前にキャンセルする場合は、電源を入れなおししてください。
putコマンドにはファイルの上書き機能はありませんので、既にファイルがあった場合はエラーになります。overコマンドを使ってください。
書き込み中に空き容量が無くなったら、それまでに書き込まれたデータは自動的に消去され、エラーになります。
書き込み時に改行コードの変換や行番号の付け直しは行われませんが、EOFコードはメモリに書き込まれません。
get ファイル名
指定したファイルのデータを読み出します。
コマンドを送信した後にオレンジLEDが点滅するので、ポケコン側で受信操作をしてからスイッチを押すとデータの読み出しが行われます。データの読み込み前にキャンセルする場合は、電源を入れなおししてください。
マシン語モニタ画面でファイルの受信を行う場合、PC-G850ではファイルの終了コードを受信する前に通信が終わってしまいます。ポケメモは最後の1バイト(多分EOF)を送信しようとして止まっているので、ポケコン側でもう一度「R」コマンドを実行してください。そうすると終了コードのみが受信され、両方の通信が正常に終わります。
ファイルが見つからなかった場合はエラーになります。
読み出し時に改行コードの変換や行番号の付け直しは行われません。保存したときと改行コードが違う場合でも、読み込みは正常に行われているようです(PC-G850)。
EOFコードはtermコマンドで指定された設定で付加が制御されます。
del ファイル名
指定したファイルを削除します。
ファイルが見つからなかった場合はエラーになります。
ren 変更前ファイル名 変更後ファイル名
指定したファイルの名前を変更します。
ファイルが見つからなかった場合や、変更後のファイル名が既に存在する場合はエラーになります。
over ファイル名
指定したファイル名でデータを書き込みます。
putコマンドと違い、すでにファイルが存在する場合は既存のファイルを自動的に消去した後に書き込みます。書き込み中に空き容量が無くなったら、元のデータも無くなってしまうので気をつけてください。
書き込みをキャンセルする場合、スイッチを押すまで元のファイルは消去されませんので、オレンジLEDが点滅している状態で電源の入れなおしを行ってください。
size
メモリに保存されるデータのサイズを求めます。
主にoverコマンドを使う時、メモリチップの容量不足で誤ってファイルを消してしまわないようにする目的で使います。
コマンドを送信した後にオレンジLEDが点滅するので、ポケコン側で送信操作をしてからスイッチを押すとデータ量のカウントが行われLEDが点滅します。ファイルの最後に到達するとオレンジのLEDが点灯するので、ポケコン側でデータを受信すると保存するデータのサイズが取得できます。
ls
lsコマンドはカレントメモリのファイルリストを取得する時に使います。
コマンドを送信すると、ファイル名とファイルのサイズを見つかった順に送信していきます。もしファイルが見つからなかった場合は、ファイルが見つからないというメッセージが送信されます。
df [チップ番号]
このコマンドは、メモリチップの使用量と空き容量を確認するために使います。
引数を付けなければ、システムに装着されている全てのメモリの使用量と空き容量を送信します。
引数にチップの番号を付けると、特定のチップのみをチェックします。
メモリの使用量は書き込まれているデータサイズの合計ではなく、「使用」とマークされているセクタの合計をセクタサイズのバイト数で掛けたものになっています。したがって、ほとんどの場合は実データのサイズよりも若干大きくなります。
一方、空き容量は「未使用」とマークされたセクタの合計から、ファイルを保存したときの管理領域を引いたサイズになっているので、取得された空き領域サイズいっぱいまでデータが書き込めます。
cd チップ番号
操作対象となるメモリチップの番号を指定します。
ファイルの保存や読み込み等はチップ単位で行われるので、ファイル操作のコマンドを送る前に切り替えておきます。
チップ番号は1~8までを指定できますが、setコマンドで指定されたメモリICの数よりも多い数値を指定するとエラーになります。
mkfs
cdコマンドでカレントメモリに指定されているメモリICのファイルシステムを初期化します。
コマンドを送信後、オレンジのLEDが点滅します。もし初期化を続行するならばプッシュスイッチを押してください。キャンセルの場合は、電源を入れなおします。初期化を実行した場合は、メモリの中がすべてクリアされてしまうので、cdコマンドでカレントメモリを明示的に変更してから操作することをお勧めします。
処理の実行中は連続してメモリの書き込みが行われるため、オレンジのLEDが点灯しているように見えます。通常は3秒程度で処理が終わります。エラーは発生しません。
set 通信速度 メモリICの装着数
ポケメモとホストとの通信速度や、装着しているメモリICの数を指定します。
この設定値はPIC内のEEPROMに保存され、電源を切っても保持されます。
通信速度の指定は、1200,2400,4800,9600,19200で指定します。ポケコンの場合は19200bpsでは通信できないので、間違って設定した場合はシステム設定の初期化 (スイッチを押しながら電源ON) を実施してください。
メモリICの装着数は、cdコマンドやdfコマンドを使うときに最終チップを判別するものです。間違って指定した場合はメモリICを認識しなくなるか、ファイル操作でフリーズします。
コマンドを実行した後、ホスト側で通信速度を変更するために「通信スタンバイ中」の緑LED点滅になるので、ホスト側の設定を変更してからプッシュスイッチを押してください。この時、ホスト側の通信速度の変更を忘れると、シリアル通信異常が発生します。
どちらの引数も、範囲外の数値を指定するとエラーが発生します。
num 行番号の有無
ポケメモからホストにメッセージを送信する時に行番号をつけるかどうかをON,OFFで指定します。
この設定は、電源を切ると初期値の「ON」に戻ります。行番号は1,2,3…と順番に加算されます。実際は00001,00002,00003…と送信されているのですが。
ホストからポケメモに送信されるコマンドの場合、先頭の数字は無条件に無視するので問題は出ませんが、情報やエラーを返す時に行番号が無いとポケコン側が正しく受信してくれませんので、状況に応じて設定を変更します。
行番号を付ける処理を行うコマンドは、size、ls、df、stat、helpです。
ポケコンでLineNumber=noに設定した場合は、num offを必ず実行してください。ポケコン側で行番号が2重処理されて、最悪テキストエディタが暴走します。
なお、ポケメモのメモリ上に書き込んだデータ内容の読み出しには一切関知しません。
term 改行コード EOFの有無
ポケメモとホストが通信をするときの改行コードと、コマンド末尾のEOFを使用するかどうかを指定します。
この設定は、電源を切ると初期値の「CRLF,EOF ON」に戻ります。ホスト側がポケコンの場合は使用しません。
改行コードは、コマンドを送信した後の改行文字をスキップするときに必要になります。また、エラーが発生したときなどのメッセージの改行コードにも影響します。指定は、CRLF、CR、LFのどれかを指定します。大文字小文字どちらでも認識します。
EOFの有無は、コマンドを送信した後の無効な文字のスキップ、ホスト側に送信するメッセージ末尾のEOFコード、getコマンドで取得するファイル末尾のEOFコードの有無を制御します。EOFをOFFに設定した場合でも、putやoverコマンドのファイルの末尾にはEOFが必須です。指定は、ON,OFFのどれかを指定します。大文字小文字どちらでも認識します。
どちらの引数も、範囲外の数値を指定するとエラーが発生します。

このコマンドの真の目的は、ホスト側にRS-232Cレベルコンバータを接続して、パソコンからファイルを書き込んだり、デバッグを行うために付けました。ハイパーターミナルの送受信ではEOF OFFを指定するといいでしょう。EOFコードを送信するためには、「コントロール+Z」をタイプします。
stat
システムの状態を送信します。送信される内容は、以下のものです。
ファームウエアのバージョン
通信速度
カレントディスクの番号とメモリICの装着数
行番号の有無
改行コード
EOFの有無
help [コマンド名]
ヘルプメッセージを送信します。
引数にコマンド名をつけた場合はそのコマンドの使い方、引数をつけなかった場合はコマンドの一覧を送信します。

仕様
メモリコントローラPIC 16F873,16F873A,16F876,16F876Aのいずれかを使用
メモリICMicrochip 24AA256,24LC256,24FC256
またはページアクセスが64バイト単位の互換品を最大8個まで使用
A2端子がデコードされないタイプは使用不可
メモリIC 1個に記憶できる最大データサイズ31,984バイト
ホストとの通信パラメータ速度=1200,2400,4800,9600,19200bps
パリティ無し、データビット=8bit、ストップビット=1bit、RS/CSハンドシェイク
標準基板サイズ75×60×13mm (部品実装時、インターフェースコネクタを除く)

通信速度
条件:ハイパーターミナル上で、31,984バイト(1チップのメモリのフルサイズ)を読み書きする速度の”おおよそ”の実測値
ポートの速度設定書き込み読み出し
1200bps266秒 (120cps)267秒 (120cps)
2400bps138秒 (230cps)135秒 (230cps)
4800bps68秒 (470cps)67秒 (470cps)
9600bps35秒 (910cps)34秒 (940cps)
19200bps19秒 (1680cps)18秒 (1770cps)

オプション
オプションでRS-232Cコンバータと接続するためのクロスコネクタです。RS-232Cコンバータとポケメモは内部でクロス接続されているので、元に戻ってしまわないようにもう1段クロス接続をさせます。
これを使えばパソコンとポケメモ間でもファイル管理やデータのやり取りが行えるようになります。このコネクタを使う場合はホストから電源の供給が行われないため、外部電源コネクタを使わないといけませんので注意してください。

ファイルシステムの構造
1セクタのサイズ=128バイト
最大ファイル数=256個

セクタ内の構造
アドレスデータ
0セクタ属性インデックス
0x00 : 未使用セクタ
0x10 : スタートセクタ
0x20 : フラグメントセクタ
1セクタ内の有効データサイズ(0~125)と、フラグメントセクタの有無フラグ。
最上位ビットが1の場合、フラグメントセクタが存在する。
2次のフラグメントセクタのセクタ番号。
フラグメントセクタが無い場合は現在のセクタ番号が入る。
3~18スタートセクタの場合はファイル名16文字。
16文字に満たない場合は、空いた文字にnullが代入される。
19~127
または
3~127
ファイルの実データ。
スタートセクタの場合は、ファイル名の16バイト分サイズが小さくなる。
フラグメントセクタはファイル名が含まれないため、125バイトの容量を持つ。

セクタの使用効率
条件効率
1つのファイルで全てのセクタが埋め尽くされた場合
(31,984バイトのファイル)
97.6%
784バイトが管理領域
全てのセクタがスタートセクタだった場合
(109バイトのファイル×256個)
85.2%
4,864バイトが管理領域

ポケメモの製作
回路図 (BSch版)

部品面からのパターン図 (BSch版) (感光基板15K用 6枚付き)

ファームウエア Ver.1.11 (2007/9/2)
PICに書き込むときは、下の設定で書き込んでください。

パーツリスト
種類部品名型番単価備考
抵抗R1,21kΩ25小型カーボン抵抗 1/4W
R3,45kΩ25
R510kΩ15
コンデンサC110μF130電解コンデンサ 16V
C20.1μF110積層セラミック
ICU1PIC16F873,873A,876,876A1600どのタイプでも使えます
U274HC04180LS等でもOK
U3~1024LC2568400最低1個は必要
セラロックX16MHz140 
LEDLED2色LED カソードコモン130クリア球は色が見分けにくい
ダイオードD1S1588120ポケコン専用ならば不要、1S2076/1SS133など互換品でも可
スイッチSW小型タクトスイッチ110押す回数が多いので、できるだけ耐久性の高いものが良い
電源コネクタ-φ2.1mm1100ポケコン専用ならば不要
ヘッダピン-11ピン150050ピン単位でしか売っていないので結構高額
感光基板-サンハヤト10K1350 

Update 2007/8/29