======================================================================== SmartMedia Interface & Device Driver 1.20 Copyright (C) K.Takamatsu 1997,1999 ========================================================================  E500シリーズにデジタルカメラなどに使われているSmartMedia(旧名称SSFDC)を 内蔵してRAMディスクとして使えるようにするための回路図とデバイスドライバです。 ●動作環境  E500シリーズのすべての機種(U6000,E650を含む)で動作します。  きゃぱ氏のDELTA Ver3.5とは共存できません。Ver3.4、2.x、4.xとは共存できま す。  S1の256KB化、クロックアップ、RTC内蔵などの改造は問題ありません。  ROMカード、RAMカードの使用も問題ありません。 ●SmartMediaの種類について  SmartMediaには現在(1999年4月)2MB、4MB、8MB、16MB、32MBの5種類があり、電源 電圧には5Vと3.3Vの2種類があります。  容量と電源電圧の組み合わせは下記の6種類があります。  ・2MB-5V  ・4MB-5V  ・4MB-3.3V  ・8MB-3.3V  ・16MB-3.3V  ・32MB-3.3V  デバイスドライバは現在16MBまで対応していますが、改造が簡単なのは2MB-5V、 4MB-5Vの2種類です。  ただ、残念なことに5Vメディアは3.3Vメディアよりも高価で入手困難になってき ています。  32MBのメディアも認識しますが、正常に動作しないようです。原因は調査中です。 ●作り方  5Vのメディアと3.3Vのメディアでは接続するための回路が違います。容量による 回路の違いはありません。  5Vのメディアの場合は下の回路図を見て作って下さい。3.3Vメディア用の回路図 は画像ファイルとして同梱されています。  5Vのメディアを使う場合に必要な部品は下記の通りです。   SmartMedia 1   74HC139(SOP) 1   0.1μFセラミックコンデンサ 1   470KΩチップ抵抗 2   配線材 少々  3.3Vのメディアを使う場合は他に下記の部品も必要です。   74HC244(SOP) 2   1KΩチップ抵抗 2   10KΩチップ抵抗 11   ダイオード 1S1588 2  5Vメディアの内蔵は半田付けに慣れている人ならそれほど難しくはありませんが、 3.3Vメディアの内蔵はかなり大変な作業になります。  IC3個と抵抗15個の空中配線はあまりやりたくないので私は専用の基板を焼きま した。ユニバーサル基板でもできると思います。  3.3V用の回路を作るときは、ICの電源に注意して下さい。74HC139にはRAMかROM から引いた5Vの電源を直接接続し、74HC244とSmartMediaには3.3Vに落とした電源 を接続します。  3.3Vのレギュレーターが入手できれば良いのですが、入手できなければダイオー ドを2本通して3.8Vくらいに落としただけの電源でも動きます。 ●回路図(5Vメディア用) +5v +5v 1 +---v---+16 | | +----------------+ #CE4-----|1G Vcc|---+ +------|Vcc(12,22) | A12-----|1A 2G|----+ +------|#WP(5) | A13-----|1B 2A|----|---#RD | | | (*1)--|1Y0 2B|----|---#WR A2----|------|CLE(2) | --|1Y1 2Y0|-- | | | | +------|1Y2 2Y1|----|--------------|------|#WE(4) | |(*2)--|1Y3 2Y2|----|--------------|------|#RE(20) | | +---|GND 2Y3|-- | | | | | | 8 +-------+ 9 | D0-D7====|======|I/O0-1/O7 | | GND 74HC139 | | | (6-9,13-16) | +-------------------+ 0.1μF === | | | | | +------|Vss(1,10,11) | +------|GND(18) | | | | GND | | | | +5V | | | | | 470K | | | | | E3----+------|#CE(21) | | | E5----+------|ALE(3) | | +----------------+ 470K   SmartMedia | 2MB-5V(4MB-5V) GND  信号名の前の#は負論理の意味です。  *1:CE4とKO1を使用するRTCを内蔵している場合は74HC139の1Y0をRTCのCSに接続 してください。  *2:Ultra-DELTAを内蔵している場合は74HC139の1Y3を74HC174のCLOCKに接続して ください。  0.1μFのコンデンサとSmartMediaとの配線はできるだけ短くしてください。  D0〜D7,A2,A12,A13,#CE4,#RD,#WR,E3,E5はCPUから出ている信号です。そのうち D0〜D7,A2,A12,A13,WRは近くのRAMまたはROMから引くことができますが、#CE4,#RD, E3,E5は直接CPUから引いてください。  SmartMediaのNC(17)とR/#B(19)はどこにも接続しません。  この回路図通りに作ると SmartMediaは 0E000h〜0EFFFh に割り付けられます。 ●CPUのピン配置 #RD #CE4 KO15 | | | |||||||||||||||||||||||||||||| +--------------------------------+ --| |-- --| |-- E5--| |-- --| SC62015B01 |-- E3--| |-- --| |-- --| |-- --| |-- `-------------------------------+ |||||||||||||||||||||||||||||| ●SmartMediaのピン配置 1 Vss Ground 2 CLE Command Latch Enable ------------+ 3 ALE Address Latch Enable /12 22| 4 #WE Write Enable | UUUUUUUUUUU | 5 #WP Write Protect | UUUUUUUUUUU | 6 I/O0 Data Input/Output |11 1 | 7 I/O1 Data Input/Output | | 8 I/O2 Data Input/Output | 2(4)MB-5V | 9 I/O3 Data Input/Output | +---------+ | 10 Vss Ground | |SSFDC | | 11 Vss Ground +-------------+ 12 Vcc +5V 13 I/O4 Data Input/Output 14 I/O5 Data Input/Output 15 I/O6 Data Input/Output 16 I/O7 Data Input/Output 17 NC No Connection 18 GND Ground Input 19 R/#B Read/Busy Output 20 #RE Read Enable 21 #CE Chip Enable 22 Vcc +5V 17番ピンと18番ピンは、電圧、容量によって違う名称になっている場合があります。 ●SmartMediaのハードウェア  SmartMediaを接続するための回路は通常のメモリICなどと異なり、8255などのI/O を接続するような回路と似ていますが、それとも少し違います。  信号名だけを見ると、デコードしたチップイネーブル信号を#CEに接続し、#RDを #REに#WRを#WEに接続すればいいように見えます。しかし、SmartMediaでは#CEを Lowに落としたまま#RDにパルスを加えるというような操作が必要なのでチップがセ レクトされたときだけ#RE(#WE)がアクティブになるような回路が必要になります。 #CEは使わないときに消費電力を小さくするためにあると考えておけばいいようです。  コマンドを書き込むときにHighにするCLEと、アドレスを書き込むときにHighに するALEはA0とA1を接続すればうまくいきそうですが、3バイトのアドレスを書き 込むときはALEをHighにしたまま#WEにパルスを3回加えなければいけないのでA1を 直接接続することはできません。  コマンドは1バイトなのでアドレス信号を直接接続する事ができます。  このような制約があるため、自由に操作できるI/OポートE5とKO15をALEと#CEに 割り当てました。#REと#WEは74HC139で作ります。  上記の回路はICの数と配線をできるだけ少なくすることを目標に作りました。 ●デバイスドライバのインストール  デバイスドライバはNmasu氏の DEVICE を使ってインストールします。  容量によって使用するデバイスドライバが違うので注意して下さい。   容量 使用するドライバ キャッシュサイズ(セクタサイズ)    2MB SSFDC2.DVF 4KB    4MB SSFDC4.DVF 8KB    8MB SSFDC4.DVF 8KB   16MB SSFDC16.DVF 16KB   (32MB SSFDC16.DVF) 16KB  インストール後のドライバのサイズはキャッシュサイズと、本体のサイズ (約1.4KB〜1.7KB)を足したサイズになります。  キャッシュサイズの大きいドライバでキャッシュサイズ(セクタサイズ)の小さ いメディアを扱うことはできますが、その場合余分なキャッシュは無駄になります。  まず、対応するドライバ"SSFDC?.DVF"と別途入手した"DEVICE"をPLINKなどを使っ てE500シリーズに転送します。  BASICからは   LOAD M "DEVICE"   CALL &BF000"SSFDC2.DVF  HMFなどのシェルからは   DEVICE SSFDC2.DVF  としてインストールします。上記は2MBの場合です。 ●使い方  インストールに成功するとS:ドライブが使えるようになります。  初めて使うときは、次に説明するユーティリティーでSmartMediaをフォーマット して下さい。  これで、E:などと同じように使うことができるようになります。   DISKF"S:"  とやってもディスクの空き容量は正しく表示されませんが、ちゃんと全部の容量 を使えます。表示される数字は実際の空き容量を1,048,576で割った余りになって います。  HMFではコピーしようとするファイルより見かけの容量が小さい場合にはコピー できません。この場合はBASICでコピーしてください。  S:ドライブの他にSA:SB:SC:SD:SE:SF:SG:も使えるようになります。これは、き ゃぱ氏のDSで作ったディレクトリ間でのファイルのコピーなどをできるようにする ための仮想ドライブです。  たとえば、S:とSA:を違うディレクトリにした状態でS:からSA:にコピーするとデ ィレクトリ間でコピーすることができます。 ●SmartMediaユーティリティー  SSFDCUTL.BASはSmartMediaの状態の確認、容量の設定、フォーマットをするため のユーティリティーです。  実行すると次のような画面が表示されます。  カーソルキーでカーソルを移動してリターンキーで項目を選択します。[BASIC] 又は[C・CE]キーがキャンセルです。 +------------------ |>READ STATUS ;デバイスの状態を表示する。 | SET MEDIA TYPE ;SmartMediaの容量を設定する。 | FORMAT ;SmartMediaをフォーマットする。 | EXIT ;終了 +------------------  "READ STATUS"ではSmartMediaのデバイスID、ステータス、SmartMediaの容量、 リード/ライトを行った回数、キャッシュがヒットした回数を表示します。  デバイスIDは、1バイト目がメーカーコード、2バイト目がデバイスコードらし いです。3,4バイト目は不明です。  デバイスドライバがインストールされていればデバイスドライバから情報を取得 し、インストールされていなければSmartMediaから直接取得します。デバイスドラ イバがインストールされていないときはREAD、PROGRAM、CACHE HITはすべて0にな ります。 +----------------------------------------+ |DEVICE ID: EC E5 42 9A STATUS: C0 | |READ : 0 TYPE : 4MB | |PROGRAM : 0 | |CACHE HIT: 0 | +----------------------------------------+  ステータスの意味は次の通りです。   bit0 0:前回の書き込み又は消去が正常終了 1:前回の書き込み又は消去が異常終了   bit1〜4 将来の拡張のために予約(0)   bit5 0:消去中又は消去完了 1:消去サスペンド中   bit6 0:Busy 1:Ready   bit7 0:書き込み不可 1:書き込み可  通常は C0 と表示されるはずです。  TYPEには容量がMB単位で表示されます。  SmartMediaの容量はデバイスIDで判別されますが、未知のデバイスIDが返され ると容量の判別ができません。そのときTYPEには ??MBと表示されます。  容量の判別に失敗したときは、"SET MEDIA TYPE"を選択して、内蔵したメディア の容量を選択して下さい。  容量の判別に失敗したときは、カードの容量とデバイスIDの1バイト目と2バイ ト目を報告していただければ次回のバージョンアップで対応します。  READ、PROGRAM、CACHE HIT はデバイスドライバをインストールしてから、リー ド/ライトを行った回数(セクタ数)、キャッシュがヒットした回数を示していま す。  キャッシュが有効に働いているか、無駄な書き込みを行っていないかなどを調べ るために付けたデバッグ用の機能ですが、書き込みを行った回数が気になる人がい るかもしれないので残しておきました。  最初に使うときは"FORMAT"を選択してSmartMediaをフォーマットしてください。  暴走などで本体のRAMが初期化されてしまった場合などもSmartMediaに保存され ているデータは残っている可能性が高いのでフォーマットする前に確認してみて ください。  "FORMAT"を選択して"Format O.K.?(Y/N)"の問いに"Y"を押すとフォーマットを 開始します。"Y"以外のキーを押すとキャンセルします。  フォーマットに成功すると"Complete"と表示されます。 ●デバイスの仕様  ・ハードウェア仕様(5V) 平均 最大 実測  待機時消費電流(#CE=H) 10 100 25 μA  待機時消費電流(#CE=L) - - 1 mA  読み出し時消費電流 15 30 - mA  書き込み時消費電流 15 30 - mA  消去時消費電流 25 40 - mA  書き込み寿命 100万 - - 回  未使用時に#CEをLにしておいたときの消費電流がデータシートに載っていなかっ たので、#CE=Hの場合とどの程度違うのかを実測してみたところ40倍も違いました。 この差が小さければ#CE=Lに固定しておいても良かったのですが、やはり未使用時 は#CE=Hにしないとだめなようです。  ・ソフトウェア仕様  [2MB]  セクタサイズ 4,096 bytes  FATセクタ 1 sector ( 4,096 bytes)  DIRセクタ 2 sectors ( 8,192 bytes)  DATAセクタ 509 sectors ( 2,084,864 bytes)  ROOT DIRのファイル数 256 個  [4MB]  セクタサイズ 8,192 bytes  FATセクタ 1 sector ( 8,192 bytes)  DIRセクタ 2 sectors ( 16,384 bytes)  DATAセクタ 509 sectors ( 4,169,728 bytes)  ROOT DIRのファイル数 256 個  [8MB]  セクタサイズ 8,192 bytes  FATセクタ 1 sector ( 8,192 bytes)  DIRセクタ 2 sectors ( 16,384 bytes)  DATAセクタ 1,021 sectors ( 8,364,032 bytes)  ROOT DIRのファイル数 256 個  [16MB]  セクタサイズ 16,384 bytes  FATセクタ 1 sector ( 16,384 bytes)  DIRセクタ 2 sectors ( 32,768 bytes)  DATAセクタ 1,021 sectors (16,728,064 bytes)  ROOT DIRのファイル数 256 個  セクタサイズがポケコンにしてはかなり大きいので小さいファイルをたくさん置 くと無駄な領域がたくさんできます。小さいファイルのコピーなどでは、セクタサ イズの小さいE:などより低速ですが、大きいファイルではE:と同等かそれより高速 です。 ●デバイスドライバについて  ・キャッシュ  デバイスドライバはFAT,DIR,DATと共用のキャッシュを1セクタ持っています。  FAT,DIR用のキャッシュを別に用意した方が高速化できますが、セクタサイズが 大きいので共用としました。  ・DS対応  きゃぱ氏のDSに対応しています。  1つのディレクトリに置けるファイルの個数はデフォルトで128個です。  ・DELTA-Aliase 対応  Aesop・M68氏の考案されたDELTA-Aliaseと同様にDSで作ったディレクトリを8個 まで参照することができます。  ドライブ名は S:SA:SB:SC:SD:SE:SF:SG: の8個です。  ・ライトプロテクト対応  SmartMediaの#WP端子をLにすることでハードウェア的にライトプロテクトにする ことができます。  キャッシュを吐き出していない状態でライトプロテクトにすると最後に書き込ん だデータを損失する可能性がありますので、必ず一度電源を入れ直す(レジューム は不可)か INIT"S:" と操作してキャッシュを吐き出してからライトプロテクトに して下さい。  ・2バイトアクセス  E500シリーズでメモリ<->I/O(SmartMedia)間でデータを転送する場合は通常は 1バイトづつ転送しますが、SmartMediaのデータレジスタを連続したアドレスに割 り当てることで2バイト単位での転送を可能にし、2倍弱の高速化を実現しました。  2バイトアクセスに対応しているかは自動判別します。  ・拡張コマンド  IOCS標準のコマンド以外に勝手に拡張したコマンドが2つあります。   41h I/Oアドレスの変更 Ver1.20から廃止しました。   42h ステータス読み込み Ver1.20で少し変更しました。 entry a:0:ステータス読み込み 1:容量をBレジスタの値に設定 2:容量を自動設定する b:容量(1:2MB,2:4MB...) return x:リード回数 y:ライト回数 (si):キャッシュヒット回数 a:ステータス b:容量(1:2MB,2:4MB...) (bl):メーカーコード (bh):デバイスコード (dl):? (dh):?  ・ソースファイル  ソースファイルはA62でアセンブルできます。  機械語領域は約40KB必要です。   SSFDC2.DVF 2MB版アセンブル用ソースファイル   SSFDC4.DVF 4MB,8MB版アセンブル用ソースファイル   SSFDC16.DVF 16MB版アセンブル用ソースファイル   SSFDC.ASM 本体  例)2MBのアセンブル   A62 SSFDC2.ASM SSFDC2.DVF  SmartMediaを0E000h以外のアドレスに配置したときはソースファイルのio_base: の値を書き換えて再アセンブルして下さい。  E5とKO15が逆の旧バージョンのドライバを作るときはexchange:の値を0にしてく ださい。 ●著作権について  この回路図、ソフトウェアに関する一切の権利は高松賢司が保有しています。  配布は自由に行ってかまいませんが、ご一報いただけると嬉しいです。 ●参考資料  (1) PC-E550*1490UII活用研究, 工学社  (2) http://www.sec.samsung.com/  (3) http://doc.semicon.toshiba.co.jp/ ●謝辞  デバイスドライバの開発にはNmasu氏のA62とDEVICEを使わせていただきま した。  標準ブロックデバイスの作成法については、近成人氏のPLINK、きゃぱ氏のDELTA シリーズを参考にさせていただきました。  8MB,16MB対応版の動作確認にはまつも氏のE500 emulatorを使わせていただきま した。  また、ganze氏、Great氏をはじめとして、ポケット通信の方々からは多く のアドバイスをいただきました。  便利なソフトを発表してくださった方々、アドバイスをくださった方々に感謝し ます。 ●今後の予定  ・セクタサイズの変更  セクタサイズが大きいのはプログラムを簡単にするためにSmartMediaのブロック サイズに合わせたのですが、大きすぎるのでもう少し小さいセクタサイズでも使え るようにしたいなと思っています。  ・MS-DOS互換フォーマット  現在のフォーマットはMS-DOS互換ではないのでSmartMediaを取り外し可能にし てもパソコンとデータを交換することはできませんが、MS-DOS互換フォーマット にすればフロッピーのようにパソコンとデータをやり取りできて便利かなぁと思 っています。 ●履歴  1997/07/27 Ver 1.00  1997/08/13 Ver 1.00a ・リードセクタで正しくデータを読み込んでいなかったバグを修正 ・コマンド41h、42hの追加  1997/08/14 Ver 1.01 ・任意のアドレスに対応 ・ソースファイルを添付  1997/09/01 Ver 1.02(非公開) ・ハードウェアの変更   E5とKO15を交換   A0をA2に変更  1997/09/28 Ver 1.03 ・DSが正しく動作していなかったバグを修正 ・DELTA-Aliase 対応 ・2倍弱の高速化 ・ライトプロテクト対応  1998/03/01 Ver 1.10 ・4MB-5VのSmartMediaにとりあえず対応  1998/03/21 Ver 1.10a ・インストール直後のコマンドを実行していなかったバグを修正 ・変なアドレスに書き込みを行っていたのを修正  1998/04/18 Ver 1.11 ・8MBのSmartMediaにとりあえず対応 ・MPBの一部に誤りがあったのを修正  1998/09/13 Ver 1.11a ・フォーマットに失敗してもエラーを返していなかったバグを修正 ・デバイスIDを追加  1998/10/23 Ver 1.12 ・参照できるドライブ数を8個に変更  1999/03/10 Ver 1.13 ・3.3V用の回路図を追加 ・デバイスIDを追加  1999/04/05 Ver 1.14 ・HMFでディレクトリの書き込みに失敗するバグを修正 ・リセット時にS:のみをルートディレクトリに戻すように変更  1999/04/19 Ver 1.20 ・16MBに対応 ・Ver1.01以前のハードウェアとの互換性を廃止 ・コマンド40hの廃止、コマンド41hの変更 ・SmartMediaユーティリティーの変更 ●連絡先  Email kenji@spa.att.ne.jp   tkenji@geocities.co.jp (予備)  Homepage http://kenji.pos.to/  高松賢司