-------------------------------------------------------------------------- MAPPE - Release 5 - -------------------------------------------------------------------------- # のうがき # PC-9801 シリーズ(以下 98 )の 2HD に、ダイレクトアクセスしてしまうプログ ラムです。 いったいどんなメリットがあるのか、わからないけど、98 (MS-DOS) の豊富・高性能なユーティリティ・ソフトなどで、ポケコンのファイルを管理で きるのだから、きっと便利なハズです。(たぶん(^^;) また、ポケコンのディレクトリアクセスを支援する "DS" に対応させました。 # ファイル # MAPPE_R5.LZH の内容は以下の通り。 Name Size Date Time CRC --------- ----- -------- -------- ---- MAPPE 1220 93-02-01 02:30:00 41D2 MAPPE.EXE 11700 93-02-01 02:20:00 1F30 MAPPE.DOC 12000 93-02-01 02:30:00 ---- # 動作確認 # PC-E500 rom_ver 7 + CE-140T + .. PC-9801RA2 (20MHz 化 + Cx486 搭載) + MS-DOS 3.3D PC-9801F2 (2HD 改造機) + MS-DOS 3.3D PC-98LT model 1 + MS-DOS 3.1 98 で 2HD が使える機種で動くはず。 EPSON 機未確認。 HMF Ver0.92 (C)HiM での DIR アクセスは動作確認出来ました。 DS Ver1.1 対応です. RDD,SD,UD は対応していません。(FAT が少し違う) # 使用法 # セットアップから、アクセス・終了までの一連の操作法・注意などを、記述して あります。 よ〜く読んで『MAPPE(まっぺ)』に慣れて下さい。 ◇ ポケコン側 ◇ "S1:" に 3KB 以上の空きがあり、機械語領域も十分に取ってあるとして、 LOAD M "MAPPE" CALL &BE000 これで、インストール完了です。("S1:" に MAPPE.SYS があるはず) ドライブ名は "M:" です。 次にボーレートの設定を行います。 デフォルトは 9600bps になっています。 INIT "M:Sx x = 0 : 0bps 1 : 300bps 2 : 600bps 3 : 1200bps 4 : 2400bps 5 : 4800bps 6 : 9600bps (default) 7 : 19200bps INIT "M:S7" という感じで設定します。 1度設定すれば OK です。 当然の事ながら、ボーレートは 98 と一緒の値にします。 ◇ 98側 ◇ MAPPE.EXE を実行します。 A:\>MAPPE <2HD ドライブ名> [/options..] 起動時に 2HD かの判定を行い、2HD でなければエラ−を吐いて終了します。 RS-232C ドライバは組み込んでおく必要はありません。 /S -- ボーレートを設定します。 デフォルトは 9600 bps です。 システムクロックが 5MHz 系の場合は、19200bps に設定可能 です。 (E500 も 19200bps にすること) 19200bps にすれば、高速で、快適な連絡が行えます. なお、システムクロックが 8MHz 系の場合は、9600bps が上限 となります。 システムクロックは、MAPPE.EXE をオプション無しで起動すれ ば、(system clock is ?MHz) と出てきて分かります。 (例) /s9600 /s19600 /s38400 etc .. /W --------- 書き込みを許可します. デフォルトではディスクに書き込めません。 ポケコンから書き込み要求がきても無視します。 書き込みを許可するなら、このオプションを付けて下さい。 書き込みを許可すると、プログラム終了時に、ポケコンによっ て書かれた FAT を DOS 形式に変換する作業が行われます。 (起動例) A:\>MAPPE D: /S19200 /W ドライブ D: ・ 19200bps ・ 書き込み許可 A:\>MAPPE C: ドライブ C: ・ 9600bps ・ 書き込み禁止 ◇ アクセスしてみる ◇ インストールが終了したら、FILES "M:" などとやって、2HD disk を読みに行け ば、成功です。 あとは、普通の Ramfile の様に扱えます。 もし、"M:" にアクセスしようとした時に "M:" の準備が出来ていなかった場合 (応答が無い場合)約 2.5 秒後にエラーを吐いて終了します。 アクセス中は、98 のディスプレーに写ってる『信号機』みたいなのが、青にな ったり、黄色になったりしているはずです。 それぞれの意味は.. 【●●●】:????−−−−−−−−−−−−−−−−−−イ ||| | ||カ−−−赤信号 :セクタ書き込み中:セクタ表示:受信セクタ数 |カ−−−−黄色信号:セクタ読み出し中:セクタ表示:送信セクタ数 カ−−−−−青信号 : 待機状態 : 今の時間 全消灯 : 正常終了 : 終了時間 ※ 重要 ※ アクセス中の注意 ・ディレクトリの扱い   ディレクトリを削除するのは絶対に止めましょう。 →『# ディレクトリ・アクセス #』を参照。 ・タイムスタンプ ポケコンは時計を内蔵していない事から、タイムスタンプの部分は常に "0" で埋められています。 これを DOS 上から見ると "80/00/00 00:00:00" という 感じで見えてしまいます。 これはどうしようも無いのですが、取りあえずは 『ポケコンで書き込んだファイル』という印になるかな… ・空き容量 DSKF "M:" をやったときに出てくる数字は 2HD の空き容量が 1047552 バイト 以下の時は正確ですが、それ以上の時は 1048576 バイトを引いた値が出てきて しまいます。 これは、空きの計算を、2.5 バイト系レジスタで計算しているら しいので、$FFFFF (1048575) バイトまでしか計算出来ないのが原因です。 ・ディスク交換 ディスクを変更する場合は、必ず一度終了して下さい。 →『◇ 終了 ◇』を参照。 ・ブレーク アクセス中に(長めに)ブレークキーを押す事によって、いつでもブレークす る事が出来ます。 もし、書き込み中であれば、書き込みも中断されます。 その場合、書き込んでいたファイルの情報を消すためのアクセスが数回ありま す。(by IOCS) なお、アスキーセーブ(1文字出力を使うもの)時にブレークしたファイルは FATは正常なのですが、なぜかファイルサイズが変なままで中断されてしま い、CHKDSK などでエラーが出ます。 この場合は削除すれば OK です。 中断したときは、必ず CHKDSK 等でチェックを行うようにして下さい。 ◇ 終了 ◇ 98 側では [ESC] による終了が出来ますが、なるべくポケコン側から INIT "M:D と操作して終了して下さい。 98 側でも自動的に終了します。 なお、書き込み許可時は [ESC] は無効となります。 INIT "M:D" は単に終了するだけでなく、バッファにたまったデータをディスク に書き戻して、クリアし、コンバートする働きがあります。 この操作を怠ると、最悪の場合ディスク破壊につながります。 書き込み許可に した場合は、絶対に忘れないで下さい。 +--------------------+-----------------+ | ESC キーによる終了 | INIT "M:Dの必要 | +--------------+--------------------+-----------------+ |読み専用モード| 可能 | なるべくやって | +--------------+--------------------+-----------------+ |読み書きモード| 無効 | 絶対必要! | +--------------+--------------------+-----------------+ 正常終了したあとは、念のため "CHKDSK" などで、ディスク検査をしておいて下 さい。 また、バックアップも、こまめにやっておきましょう! ※ 重要 ※ 98 側で、CTRL-C や、STOP キーを押下すると、プログラムが終了してしう様です が、これは絶対にやらないでください。 RS-232C の割り込みプログラムを、メモ  リに残したまま終了してしまうため、なにかのプログラムを実行した途端に、ハン  グアップしてしまいます。もしやってしまったらリセットする事をお勧めします。 # ディレクトリ・アクセス # "DS" と呼ばれるディレクトリサーバーを使うと、MS-DOS のディレクトリにアク セスする事が出来ます。 MS-DOS のディレクトリ構造と同等(下位互換)のディ  レクトリを E500 に作成する事も出来ます。 お試し下さい。 → "DS Ver1.1" # コンバートについて # ポケコンの FAT は、DOS の FAT と少し違います。 終端記号が 0x0ff0 なのに対 して、DOS は 0x0FFF になります。そのままにして置くと、CHKDSK 等で引っかか ってしまうので、終了時にディスクを読み込んで、ポケコンによって書かれた FAT の書き換えを行い、DOS からでも扱えるようにします。 プログラムが正常終了する際に「 FAT fixing ..」等と出て作業を始め、うまく 行くと「done. (?)」と出てきて終わります。 「(?)」は修復した FAT の数を表 表します。 修正とは言っても、ディスクに異常が有った訳ではないので、そん なに気にすることはないです。 # プログラムについて # ポケコン側の "MAPPE" は "DELTA21" と "HYLINK" を足して 2 で割ったような 構成になっています。 ちなみに規格は、 1 クラスタ : 1 セクタ 1 セクタ : 1024 バイト 最大収容ファイル数 : 196 個 データエリア数 : 1221 セクタ (1250304 バイト) ドライブ名 : M: デバイス番号 : 11(不定) ドライブ番号 : 0 デバイス属性 : $83 (標準ブロックデバイス) サポートコマンド : $10 - $18 ・ $3F ・$40 デバイス番号は使われていないのが自動的に設定されます。 E500 側プログラム "MAPPE.SYS" は XASM v1.26 (c)N.Kon 氏 で、 98 側プログラム "MAPPE.EXE" は Turbo-C v2 + MASM v6.0 で作成されました。 # データフォーマット # RS-232C でやり取りされるデータのフォーマットは以下の通り。 ◇ コマンドヘッダ ◇ $4D・コマンド・セクタ番号・(連続している)セクタ数 ◇ 応答コード ◇ $2B ・・・ OK ! $2D ・・・ NG ! $2E ・・・ 中断! ◇ DATA 構成 ◇ セクタのデータ (1024 bytes) ・ 次のセクタのデータ (2bytes) 該当セクタが FAT セクタであれば、次のセクタのデータも参照される。 その他の場合は参照しない。 ◇ 各コマンド ◇ $57 : セクタに書き込む (1)ポケコン>コマンドヘッダ 98 >書き込み可能なら $2B 書き込み禁止なら $2D > I/O ERROR 発行 (2)ポケコン> DATA 送信 98 >異常がなければ $2B 異常あり $2D > I/O ERROR 発行 中断する $2E > BREAK 発行 あとは、ヘッダで送ったセクタ数だけ(2)の繰り返し。 $52 : セクタを読み込む (1)ポケコン>コマンドヘッダ 98 >応答待ち (2)ポケコン>そのセクタロードするなら $2B そのセクタはキャンセル $2D 中断する $2E > BREAK 発行 98 > DATA 送信 あとは、ヘッダで送ったセクタ数だけ(2)の繰り返し。 $44 : ディスコネクト (1)ポケコン>コマンドヘッダ 98 >なし 最初に送・受信するセクタ数を 98 に知らせて、やり取りするデータを 20KByte のバッファにためてもらい、ディスクアクセスを、極力少なくするようにしてい ます。これで大量の連続したセクタを読み書きする場合は、かなり速くなってい ます。 またディスクキャッシュを使っていなくても、あんまりうるさくないと おもいますが、細かいファイルの時はどうしようもなくうるさいです(^^;; # 履歴 # >> MAPPE.SYS (E500) Ver 1.0 1992/12/01 初版. Ver 2.0 1992/12/06 データ転送フォーマットを改良 書き込み出来るようになった Ver 2.1 1992/12/14 $17 発行時の処理の高速化 break key 押下時の処理を強化 インストーラ改良 init のバグ取り Ver 2.2 1992/12/25 mcd に対応($18 サポート) Ver 2.3 1993/02/01 baud rate を任意の値に設定出来るようにした. >> MAPPE.EXE (98) Ver 1.0 1992/12/01 初版. Ver 2.0 1992/12/06 データ転送フォーマットを改良. 書き込み出来るようになった. fat コンバート機能追加. Ver 2.1 1992/12/14 セクタ表示を改良. ポケコンからのキャンセル受け入れ. Ver 2.2 1992/12/25 サイズをコンパクトに. fat の修正を高速化. Ver 2.3 1993/02/01 サイズをますますコンパクトに(^^; rs-232c ドライバの改良. baud rate を 38400bps まで自由に設定可. option の判定を厳密にした. # 作者 # ※ 無断転載禁止!! ※ きゃぱ @ 2575 JK1CFC @ JI1XBV.12.JNET1.JPN.AS op T.Kamio