countersince January 6, 2001X68000 LIBRARYEnglish
更新日: 2011 年 11 月 15 日
X68000 LIBRARY > ソフトウェアライブラリ > ディスク / ファイルシステム > RAM ディスク > KRAMD.SYS > KRAMD.SYS の説明

KRAMD.SYS の説明

説明

KRAMD.SYS の添付ドキュメントです。

KRAMD.DOC
────────────────────────────────────

        KRAMD version 1.01         1996,2006 by M.Kamada

────────────────────────────────────


 単なる RAM ディスクドライバです。



□特徴

        ・RAM ディスク領域のスーパーバイザ保護機能

        ・アクセスランプ(TIMER-LED)

        ・高速?



□使い方

 CONFIG.SYS で組み込みます。


        DEVICE = KRAMD.SYS #[I][S][A]Mn

        I       SHIFT を押していないとき初期化する
        S       RAM ディスク領域をスーパーバイザ保護する
        A       TIMER-LED をアクセスランプにする
        Mn      容量(KB単位, S 指定時は 256 の倍数にすること)


 I

         通常は RAMDISK.SYS と同様に起動時に SHIFT を押していると初期化

        しますが、I を指定しておくと SHIFT を押していないとき初期化しま

        す。


 S

         S を指定すると、RAM ディスク領域がスーパーバイザ保護されます。

         あまり知られていませんが、X68030 には標準でメインメモリのスー

        パーバイザ保護機能が存在します。また、X68000 の場合でも拡張スロ

        ット用のメモリボード(シャープ純正、I/O データ機器製)に同じ機能

        があります。この機能を使うと、アドレスが $00200000 以上の部分に

        ついて 256KB 毎にスーパーバイザ保護するかどうかを指定できます。

         S を指定する場合は、容量は 256 の倍数にして下さい。割り当てら

        れるアドレスは自動的に 256 の倍数になります。

         S を指定した KRAMD.SYS を2個以上組み込むと、先に組み込んだ方

        のスーパーバイザ保護が無効になる場合があります。


 A

         A を指定すると、TIMER-LED が RAM ディスクのアクセスランプにな

        ります。


 Mn

         Mn で容量を指定します。n の単位は KB です。例えば、RAM ディス

        クを 2MB 確保するときは M2048 とします。

         S を指定しているときは容量を 256 の倍数にして下さい。


 例

        DEVICE = \SYS\KRAMD.SYS #SAM3072

         RAM ディスクを 3072KB 確保してスーパーバイザ保護します。

         TIMER-LED がアクセスランプになります。

         起動時に RAM ディスク領域が壊れているか、SHIFT キーが押されて

        いたら初期化します。



□スーパーバイザ保護の恩恵

 スーパーバイザ保護されていない RAM ディスク領域は、ちょっとしたミスで

簡単に壊れてしまいます。

 簡単な例を示しましょう。次のプログラムはコマンドラインで指定した数だけ

* を出力するという簡単なものですが、あるチェックを怠っているためにスーパ

ーバイザ保護されていない RAM ディスクを破壊する可能性があります。理由は

各自で考えてみて下さい。

#include <stdio.h>
#define MAX_COUNT 1024
char work[MAX_COUNT];
void main(int argc, char *argv[])
{
        int n, i;
        char *p = work;
        if (argc < 2 || sscanf(argv[1], "%d", &n) != 1 || n > MAX_COUNT) {
                fprintf(stderr, "ERROR\n");
                return;
        }
        i = n;
        do {
                *p++ = '*';
        } while (--i);
        fwrite(work, sizeof(char), n, stdout);
}



□更新履歴

version 1.00 → version 1.01
        (2006-05-04)
        容量に4095KBを指定すると1KB無駄になる不具合を修正しました。
        ルートディレクトリに92個以上のファイルやディレクトリを作るとルー
        トディレクトリの末尾に異常なエントリが出現する可能性がある不具合
        を修正しました。



□お約束

 無保証です。

 転載はご自由に。



□連絡先

 m_kamada@nifty.com



(EOF)