MS‑DOS マ クロアセ ンブ ラを利用 して
一 初 期 化 時 に フ ァイ ル を転 送 す る ラム デ ィス ク ー
行 方 常 幸
目 次
1. はじめ に
2 . マ クロアセ ンブ ラ とデバ イス ・ドライバ 3. ラムデ ィス クの構 造及 び機 能
4 .機 能実現 の方法
5. その 他 6. 利用例 7. おわ りに
1 .は じ め に
パ ー ソナルコンピュー ターが普及 して多 くの人々の手元 に機器がおかれるよ うになった 。 また, その機器 を利用す るための ソフ トウエ アの価格 は年 々安 く な っている
。しか し, 限 られた予算 の中で どれ を購 入す るか はわれ われユー ザー に とっては頭 のいたい問題 である
.そ こで 自分で作 れるプログラムはなる べ く自分 で作 る とい うことが考 え られる
。便利 な こ とに, MS‑DOS の システ ムデ ィスクにはアセ ンブラとデバ ッガが最初 か らついていて, さらに豊富 な例 題 のついた アセ ンブラの入 門書 が市販 されている。 「 習 うよ り慣 れ ろ」。 の諺 ど お り NECP C‑9 8 0 0 シ リーズ用 の 「 初期化 時 にフ ァイル を転送 す るラムデ ィス ク」 を文献 を参考 に してアセ ンブ リ言語 で作成 してみた。素人が作 ったプログ ラムなので無駄があ り,見通 しが悪 く,市販 されている ラムデ ィス クよ りも機 能 は落 ちるか もしれないが,初期化時 に転送する フ ァイル を指定で きる ところ が このプログラムの特徴 である 。 いつ もこの ラムデ ィスクを利用 しているが 目 立 った トラブル もな く重宝 している
。以下 にこの ラムデ ィス クのプログラムの
〔75 〕
7 6 商 学 討 究 第 3 7 巻 第 4 号 概略 とそのために必要 と思 われる事項 を記述する
。も しこの ラムデ ィス クを御利用 して下 さる方がお られ ま した ら私 までお知 ら せ下 さい。
2. マクロセンブラとデバイス ・ドライバ
ソースプログラムをどんな言語で書 いて も最終的 には実行型 の フ ァイル ( 拡 張子 COM また は EXEのつ いた フ ァイル) に変換 されるが,一般 的 には実行 型 のフ ァイルをデバ i yガで逆 アセ ンブル した もの と元 の ソースプログラム との 対応 はつかめがたい。 しか しなが ら, アセ ンブ リ言語 はソースプログラムの イ メージがその まま実行型 のフ ァイルに反映 される。 このため実行型 の フ ァイル の大 きさは小 さ く,かつ実行時間が短 くなる傾 向がある 。 しか しまさにこのた めにアセ ンブ リ言語で は何 か ら何 まで プログラム しなければな らない とい う欠 点 が生 じて くる
。しか しなが ら,MS‑DOSで は豊富 な システ ムコー ル [ 文献 1,2 参照] が用意 されているため に必要 に応 じて これ らを利用 で き, またマ クロアセ ンブ ラにはデー タ構造 を指定 で きる疑似命令 sTRUC ( パ スカル言語 でい うレコー ド型 に対応) があ りこれによ りデー タの参照が非常 に楽 になる 。 その他豊富 な機 能 をそ なえたマ クロアセ ンブ ラはその基礎 的 なわず か な事項
[ 文献 3,4 参照] を覚 えて しまえばあ とはフ ォー トランで プログラムす る感 じで少 しの忍耐があれば実用上十分 なプログラムが作成 で きる と思 われる。
通常入 出力装置 としてキーボー ド, デ ィス プ レイ画面 ( 装置名 CON) , プ リ ン ター ( 装 置 名 pRN) , デ ィス ク ドライブな どが あ るが, MS‑DOSで はユー ザーが容易 に これ らの機能 を修正 した り, さらに周辺装置 を追加 した りで きる 。
例 えば,ATOK や VJ E等 の漢字 フロ ン トプロセ ッサ は CON を修正 した もので
あ り,マ ウスは新 たに追加 した ものである
。これ らの方法 は, その周辺装置 を
制御 す る プロ グ ラム ( デバ イス ・ドライバ と呼 ばれ る [ 文献 1,2,3,5 参
照]) を作成 しその フ ァイル名 を CONFI G.SYSの 「 de vi c e =」 の次 に書 いて シ
ステムを起動 させ ればその周辺装置 は利用で きるよ うになっている
。ここで作
一成 す る ラムデ ィス ク とはメイ ンメモ リまたはバ ンク切 り替 え用 の増設 された
MS‑DOS マクロアセンブラを利用 して 7 7
RAM の一部 また は全 部 をデ ィス ク と して利 用 す る もの' を言 う 。 正確 に言 えば これ を周辺装 置 と して追加 す るため にデバ イス ・ドライバ を作 成 す るわ けで あ る 。
デバ イス ・ドライバ とはデバ イス ( 周辺装 置) を制御 す るプ ログ ラムで ある が; デバ イス ・ドライバ と して持 つべ き形式 となすべ き仕事 が ある 。 形式 とは プログ ラムの先頭 に 1 8 バ イ トのデバ イスヘ ッダ と言 われ る情 報 を置 いて お くこ と, お よ び MS DOS . S YS か ら FARCALL され る 2 つ の ルー チ ンに分 けて お く こ と等 で あ る
。なすべ き仕事 は,詳 し くは文献 [1,2,3,5] 等 を参 考 に し て も ら う と して,初 期化 ( デバ イス を利 用 す る まえに一度 だ けお こな う), デ バ イス とのデー タのや りと り ( 読 み込 み,書 き込 み)等 で ある 。
ここで作 成 す る ラムデ ィス クのデバ イス ・ドライバ は文献 [3] 第 6 章 の プロ グ ラム を基 に フ ァイル転送 の機 能 を付 け加 えた もので ある。
3 .ラムディスクの構造及び機能
ラムデ ィス ク用 の領域 を どこに取 るか を図示 した ものが 図 1 で ある 。 ここで ( 領域 1) はメイ ンメモ リにあ りこれ をあ ま り大 き く取 りす ぎる と残 りの メモ リに余裕 が な くな り大 きな プ ログ ラムが実行 で きな くなる恐 れ が あ る。 ( 領域 2) は グ ラフ ィ ック画面 で グラフ ィ ック機 能 を利 用せ ず, かつ他 の プログ ラム で もグ ラフ ィ ック画面 を利用 しない な らば ラムデ ィス ク と して利用 で きる 。 ま た, グ ラフ ィ ック機 能 を利 用 す る場 合 で も, 2 面 ある グ ラフ ィ ック画面 の うち 1 面 の み を利 用 す る な ら残 りの 1 面 を ラムデ ィス ク と して利 用 で きる
。この ( 領域 2) の利用 可能 な大 きさは 9 6K バ イ トまた は 1 9 2K バ イ トで ある。 ( 領域
3) はバ ンク切 り替 え用 の増設 RAM を設置 した場合 に ラムデ ィス ク と して利 用 可 能 に なる部 分 で あ る。 こ この プ ロ グ ラムで は ,Ⅰ・0 デー タ機 器社 の製 品 を利 用 した場合 を想定 しているので,他社 の製 品 の場合 はバ ンク切 り替 えの方 法及 び共有 す る ア ドレス を調 べ て ソース プログ ラム を修正 す る必要 が あ る
。ラ
ムデ ィス ク と して利用可 能 な大 きさは増設 す るボー ドの個 数 による。 これ らの
領域 の うち どれ を ラムデ ィス ク と Lq で利 用 す るか は適宜指 定 で きる。 ( 領域 1)
7 8
下位 ア ドレス
I
0 00 0:0 0 0 0 0 0 4 0:0 0 0 0
AO O O:0 0 0 0
I
上位 ア ドレス
商 学 討 究 第 37 巻 第 4 号
割込 みベ ク トルテーブル
Ⅰ 0. SYS 一 MSDOS.SYS
■ MSTDOS 作業用領域 ラムデ ィス ク
( デバ イス .ドライバ) うムデ ィス ク用 の領域 ( 領域 1) ( 注 1)
CO叩MAND.COM 常駐部 プログラム実行用領域
( 含 cOMMAND. COM 非常駐部) ( 注 2)
A8 0 0:0 0 00 か ら 9 6 K バ イ ト の グラフィ ック画面 を
( 注 1) この領域 の大 きさをKバ イ ト単位 で指定 で きる。
( 注 2) 、 メモ リの増設状況 によ りこの部分 の大 きさは異 なる。 ここで述べ られているバ ンク切 り替 え用増設 RAM の ア ドレスは 8 00 0:0 0 0 0 か ら 1 2 8 K バ イ トでバ ンク切 り替 えは Ⅰ / 0 ポー トア ドレス EC にバ ンク番号 を出力す る こ とで行 う。 このバ ンク切 り替 え用増設 RAM ( 領域 3 とす る) をラムデ ィス ク と して利用 す るか しないか は指定で きる。
( 注 3) グラフ ィ ック画面 は 2 つあ りバ ンク切 り替 えは Ⅰ / 0ポー トア ドレス A6 にバ ン ク番号 (0または 1) を出力す る こ とで行 う。 この グラフ ィ ック画面 ( 領域 2
とす る) をラムデ ィス クとして使用すか しないかは指定で きる。
図 1 ラムディスク利用時のメモリの利用状況
( 領域 2) ( 領域 3) が この順 序 で ラムデ ィス クの領域 にな りこれ らの大 きさ
の合計 が ラムデ ィス クの大 きさになる 。 これが6 4Kバ イ トよ りも小 さい場合 ,
す なわち, ( 領域 1) のみ をラムデ ィス クの領域 としその大 きさを6 4Kバ イ ト
MS ‑DOS マ クロアセ ンブ ラを利 用 して 7 9
以下 に指定 したばあいには自動 的 に 6 4K バ イ トをラムデ ィス クの容量 とす る 。 い ま述べ た ラムデ ィス クの領域 がいか に利用 されているか,及 び ラムデ ィス ク初期化 時 に フ ァイル をいか に転送 す るか, の説 明の ため に, ここで フロ ッ ピーデ ィスクの構造 とフ ァイルの記憶方法 を簡単 に説 明す る
。MS ‑DOS の フ ォーマ ッ ト済 みの フロ ッピーデ ィス クは論理 的 には図 2 の よ
デ ィス ク
(注 1 ) ラ ム デ ィ ス クには この予約 領 域 を 設 け な い 。 (注 2 ) ラ ム デ ィ ス ク に は F A T を 1 つ し か 設 け な い 。
図 2 デ ィ ス ク 上 の 領 域 ・
ト ラ ッ ク 数 8 0 8 0 ‑7 7
セ ク タ/ トラ ック 8 9 8
サ イ ド. 数 2 2 2
セ ク タ ■ サ イ ズ 51 2 5 . 1 2 1 02 4
デ
ィ
スク 総 ■ 容
‑ 1B: (K
でヾ ィ . ト ) 6 40 72 0 1 2 30
デ ィ レ ク ト リ数 11 2 1 1 2 192
セ ク タ/ クラス タ 2 2 1̲
予 約 .セ ク タ 1 1 1
F A T 数 2 2 2
セ ク タ / FL A T 2 . 3 2
表 1 MS‑DOS 標準ディスク ・フォーマット
80 商 学 討 究 第 37巻 第 4号
うな構造 を している
。デ ィス クは読 み書 きの最小単位 で あるセ ク タ と呼 ばれ る 部分 が た くさん集 まった もので ある
。図 2 の各領域 が何 セ ク タなのか, また こ のセ クタが何 バ イ トなのか はデ ィス クによって異 なるが, デ ィス ク毎 に規格 が 定 め られ て お り, デ ィス クの互 換 性 が保 た れ て い る ( 表 1参照)
。予 約 領 域 ( I PL) は電源 を入 れ た と き, また は リセ ッ トボ タ ンを押 した ときにメ イ ンメモ リ に 読 み 込 ま れ る 部 分 ( ブー ト プ ロ グ ダ ム) で あ る 。 次 の FAT ( Fi l e Al l oca t i onTabl e ) とは この デ ィス クに入 ってい る フ ァイルの内容 が実 際 にデ ィ
ス クの どの部分 に記憶 され て い るか を示 す表 で, 12 ビ ッ トの FAT エ ン トリを 単位 と して これが集 まってで きてい る O これ は重要 な もの なので同 じものが 2 個 用意 されてい る。次 の ルー トデ ィレク トリ記憶 領域 には この デ ィス クに入 っ ている フ ァイル毎 に( 1) 名前 ,( 2) 属性 ,( 3) 最後 に変更 された 日時,( 4) フ ァイルの 大 きさ,( 5) フ ァイルの最初 の部分 が記憶 されてい るデ ィス クの位置 (ク ラス タ 番号) ,等 が記憶 され てい る 。 次 の デー タ領域 に フ ァイルの実 際 の内容 が記憶
ディレク トリ領域 FAT 領域 データ領域
上記 において, " f i l e " という名前のファイルはデータ領域の f i l e ‑ 1 ,f i l e ‑ 2 ,f i l e ‑3 , f i l e ‑4,f i l e ‑5 にこの順序で記憶 されている。
図 3 ファイルの記憶方法の例
MS‑DOS マ クロアセ ンブ ラを利用 して βノ さ, れ てい る
。この デー タ領域 は ク ラス タ と呼 ばれ る単位 に分割 され てい る。
( クラス タが何 セ ク タで あるか はデ ィス ク毎 に決 め られて いる。) この クラス タには最初 か ら萄号 がついてお り ( 最初 の番号 は 2 で ある), この番号 は FAT エ ン トリの値 と 1 対 1 に対応 してお り,以下 に述べ る よ うにフ ァイルの内容 を
記憶 している。 I
先 ほ ども述 べ た よ うに FAT は FAT エ ン トリと呼 ばれ る 1 2 ビ ッ トの単位 が 集 まってで きていて, この FAT L. ン トリの最初 か ら 0 番 目の FAT エ ン トリ,
1 番 目の FAT エ ン トリ‑, と順 番 に番号付 け られて い る 。 0 番 目の ・ FAT エ ン トリは このデ ィス クの タイ7t o を表す識別子 ( 下位 1 バ イ ト) として用 い られ てい る 。 1 番 目の FAT エ ン トリは未使 用 で ある
。この FAT とデ ィレク トリ を用 いて以下 の よ うに フ ァイル を記憶 している ( 図 3 参照)。 フ ァイルのデ ィ レク トリの,上 で述 べ た ( 5) の内容 (この値 を
nlとす る) を調 べ る
。 nl番 目の FAT エ ン トリの値 (この値 を
n2とす る) を調べ る
。次 に
, n2 番 目の FAT エ ン トリの値 ( この値 を
n3とす る) を調べ る
。以下 同 じよ うに値 Of f f h ( 16 進) が 現 れる まで行 う 。 い まこれ らの値 が nl
, n2 ,・ ‑
‑nm,Of f f h で あ った とす る な らば, デー タ領域 の
n1 番 目の ク ラス タ
, n2 番 目の クラス タ,‑‑
, nm番 目の クラス タに この順序 で フ ァイルの内容 が記憶 されている
。こ こで作 成 す る ラムデ ィス クは,表 1 にあ る よ うな MS‑DOS 標 準 デ ィス ク ・フ ォーマ ッ トに したが う必要 はないので,以下 の よ うに している。
( 1 ) 不用 な予約領域 はない。
( 2) FAT の数 は 1 個 である
。( 3) 1 セ クタは 51 2 バ イ トである
。( 4 ) 1 クラス タは 2 セ クタで ある。
( 5 ) ルー トデ ィレク トリの総数 は 6 4 ( バ ンク切 り替 えの増設 RAM を利用 し た場合 は 25 6 ) である。
( 6) FAT の ため のセ ク タ数 は ラムデ ィス ク となる領域 が なるべ く有効 に使 われる L . よ うに 自動 的 に計算 される
。以上が ラムデ ィス クの領域 の利用状態 の概 略 である 。 この ラムデ ィス クの領
8 2 商 学 討 究 第 37 巻 第 4 号
域 をラムデ ィス クと して利用す るよ うに制御 す るデバ イス ・ドライバの主 な処 理 は( 1) 初期化 , ( 2) 読 み込 み , ( 3) 書 き込 み,で ある。 この うち , ( 2)( ( 3) ) の読 み込 み ( 書 き込 み) は MSDOS. SYSの指定 す る転送 ア ドレス, 開始 セ クタ番号, セ クタ ・カウ ン トを参照 して転送 ア ドレスか ら( に), ラムデ ィス クの指定 された 開始 セ クタ番号 のセ クタ以降 に ̀ ( か ら) セ クタ ・カウ ン ト分 のデー タを転送 す るよ うにす る 。( 1 ) の初期化 は最低 限次 の よ うな処理 を行 えばよい,す なわち, MSDOS. SYSに ラムデ ィス クの規格 な どの情報 を与 え,FAT とルー トデ ィレク
トリの領域 を 0で埋 め,FAT の先頭 の 3バ イ トを FATI D とダ ミー の 2バ イ トの Of f hで埋 め る, とい う処理 で ある
。ここで作成 す る ラムデ ィス クで は さ らに以下 の機能 をもたせ ている 。
( 機能 1) ラムデ ィスク と して利用す る メモ リの大 きさを随時変更 で きる
。( 機 能 2) ラムデ ィス ク初期化時 に,指定 されたい くつかの フ ァイル を転送 す る, この フ ァイル名 は随時変更で きる。
( 機能 3) シフ トキー を押 しなが らリセ ッ トボ タンを押 して再起動 させ る と ラムデ ィスクの初期化 を行 わない。
( 機能 1) の意味 は ラムデ ィス ク として メイ ンメモ リを何 Kバ イ ト利用す る か, グ ラフ ィ ック画面 0 又 は 1を利 用す るか,バ ンク切 り替 え用増設 RAM を 利 用 す る か, を変 更 で きる と言 う こ とで あ る。増 設 RA巌 は こ こで は Ⅰ ・0
デー タ機器社 の製 品 を利用 しているが,他 の もので もバ ンク切 り替 えの方法 と
その ア ドレスが わかれ ばプログラムの修正 は可能で ある。 ( 機能 2,3 ) は次 の
よ うな必要性 か ら出て きた ものである 。 フ ァイルの読 み書 きが高速 で ある点 が
ラムデ ィス クの魅力 なので あるが,最初 にはデ ィス クか らラムデ ィス クへ必要
なフ ァイル を転送 しなければな らない。 それ をなるべ く高速 に行 うべ く必要 な
フ ァイル を DI SKCOPY の要 領 で あ らか じめ転 送 して お くこ とが望 まれる
。ま
た転送す る フ ァイルは指定可能 にす る必要が ある
。さらに,何 かの理 由 によ り
暴走 して リセ ッ トボ タンを押 さな くて はな らな くな った時, この ままで はメイ
ンメモ リの内容 は失 われて しまう
。しか し, ラムデ ィスク と してバ ンク切 り替
え用増設 メモ リのみ を利用 していてかつその増設 メモ リが リセ ッ トボ タンを押
MS‑DOS マ クロアセ ンブ ラを利 用 して 83.
す ことによ り何 の影響 も受 けなければ, ラムデ ィス クの初期化 を行 わない こと によ り以前 の ラムデ ィスクの内容 は原則 として失 われない
。これが ( 機能 3) の意味である。 ( 機能 1,3 ) は市販 されている ラムデ ィス クで も, もちろんサ ボニ トされている。 ( 機能 2,3) は使 ってみる と大変有用である ことがわかる 。
( 機能 2 ) はラムデ ィスク‑転送 してお くフ ァイルの数が多 くなればなるほ ど, 例 えば,AUTOEXEC.BAT フ ァイルで COP Y コマ ン ドを用 いるよ りもはるか
に高速 なよ うである
。( 機能 3 ) は ラムデ ィス ク上 で作成 中の フ ァイルの大事 な内容 をプログラムの暴走 な どの不慮 の事故 か ら守 るため に大変役 に立 ってい る。次 の章で, これ らの処理 のよ り具体 的 な実現方法 を述べ る
。4. 機能実現の方法
前章 において, ラムデ ィスクのデバ イス ・ドライバ として最小 限 しなければ ならない処理及 び これ らに付 け加 える機能 を簡単 に説明 した。最小 限の処理 の よ り具体 的方法 については文献 [3 ]を参考 に していただ き, ここで は付加 した 機 能 の 実 現 方 法 を 簡 単 に 述 べ る
。こ れ ら の 実 現 に 3 つ の フ ァ イ ル myr a mds k. s ys ,f i l e c opy. e xe ,s e t myr a m. e xe が必要 で ある。myr amds k. s ys は ラム デ ィス クのデバ イス ・ドライバで,f i l e c opy. e xe は このデバ イス ・ドライバで で きなか った初期化 の部分 を行 うプ ログラム,s e t myr a m. e xe は ラムデ ィス ク の変更可能 なオプシ ョンをデ ィスプ レイ画面上で対話形式 で設定するプログラ ムである
。この s e t myr am. e xe で,myr a mds k. s ys 内 にある次 のデー タ項 目を設 定,変更する 。
○前章 の図 1 の ( 領域 1 ) をラムデ ィス クとして利用するか しないか,利用 す るな ら何 K バ イ ト利用す るか。 ( 領域 2 ) をラムデ ィス ク と して利用す るか しないか,利用す るな らどの画面 を利用 するか。 ( 領域 3 ) を利用 す るか しないか,利用す るな ら,バ ンク切 り替 え用 の増設 された RAM のバ
ンク番号 は何番 か。 ( 前章 の機能 1)
○ ラムデ ィスク初期化時 に転送す る フ ァイル名 ( 最大64 個 を限度 として,逮
り手 としてはカ レン トドライブ, A: か ら D: ドライブを選べ る,固定 デ
8 4 商 学 討 究 第 37 巻 第 4 号 イスク は識 別 で きな い た め不 可 )0 ( 前 章 の機 能 2)
これらを 設 定 , 変 更 して リセ ッ トボ タ ンを押 す と 指 定 され た領 域 が ラムデ ィ スク として 利 用 さ れ る 。 ( 領 域 1) に 関 して は m y ramdsk. s ysで確 保 す る が , 他の領域 に 関 して は利 用 可 能 か ど うか の チ ェ ック は して い ない の で注 意 が必 要 である。
さて,上 で 設 定 , 変 更 さ れ た転 送 候 補 フ ァイ ル を 初 期 化 時 に転 送 す. る ( 機 能 2) 方法 は デ ィ ス ク か ら の セ ク タ単 位 の 読 み 込 み を行 う内 部 割 り込 み 25h ( Abs o l ut eDi skRead)を用 い て , フ ァ イ ル が デ ィ ス ク に記 憶 され て い る そ の ま
まのイメー ジ を平 行 移 動 して転 送 す る や り方 で , 以 下 の よ うに して行 わ れ る。
[ myr a mds k . sysで処 理 す る 内 容 ]
○ カレン ト ドラ イ ブ が どの ドラ イ ブ か , ラ ム デ ィス クが どの ドライ ブか を求 め,転送 候 補 の フ ァイ ル を転 送 元 ドライ ブ毎 に整 理 す る。
○ 転 送 元 ドラ イ ブ毎 に以 下 の 事 を行 う。
◎ サ ポ ー トされ て い る デ ィス ク か ど うか チ ェ ック しサ ポ ー トさ れ て い な け れ ば次 の 転 送 元 ドラ イ ブ に移 る 1 ) 0
◎ サ ポ ー トさ れ て い る デ ィス ク の場 合 に は この デ ィス クの、 デ ィ レ ク トリか ら転 送 候 補 フ ァイ ル の デ ィ レ ク トリ を全 て , 仮 に ラ ム デ ィー ス ク の デ ィ レ ク トリの 未 使 用 の 領 域 に転 送 す る 。
◎ 転 送 候 補 フ ァイ ル か ら転 送 可 能 フ ァイ ル を以 下 の よ う に選 び 出 す 。 全 て の 転 送 候 補 フ ァ イ ル の FAT エ ン トリ (この ブ ァイル の 内 容 が 実 際 に入 っ て い る デ ー タ領 域 の ク ラ ス タ番 号 ) を全 て 調 べ る ? これ らの 最 小 値 を 与 え る転 送 候 補 フ ァイ ル の ク ラ ス タ番 号 の最 小 値 最 大 値 か ら デ ィス クに 記 憶 され て い る こ の フ ァイ ル の イ メ ー ジが そ の ま まで ラ ム デ ィ ス ク に転 送 可 能 か ラ ム デ ィス ク の残 りの 容 量 か ら判 断 し, 転 送 不 可 能 な ら ラ ム デ 1) デ ィス クか らの読 み込 み は内部 割 り込 み25h( Abs ol ut eDi s kRe ad) を用 い る た め
FAT やデ ィ レク トリが何 セ ク タ目か ら何 セ ク タを占めてい るか を知 って い る必要 が ある . . ここで は 1 クラス タが 1 02 4 バ イ トとなる表 1 の 5 イ ンチ 2 DD (8 セ クタ/
トラ ック, 9 セ クタ/トラ ック), 5 イ ンチ 2HD のデ ィス クだ けにサポー トを限定
している。
MS ‑DOS マ クロアセ ンブラを利用 して J 8 5
ィス クの デ ィ レク トリか ら この フ ァイ ル を削 除 す る2 ) 。 転 送 不 可 能 な ら 残 りの まだ削 除 され て い な い フ ァイ ル に 同 じ こ と を行 い, 転 送 可 能 な フ
a: ドライブのデ ィスク ラムデ ィスクの
のデー タ領域 デー タ領域
上図において四角 はクラス タに対応する。
転送候補 ファイル名
a:f al ( f a1‑ 1 ,f a1‑2 の 2 つの クラス タからなる) b:f bl ( f bl‑ 1 ,f bl‑2,f bト 3 か らなる)
b:f b2 ( f b2‑ 1 ,f b2‑2,f b2‑ 3 ‑ か らなる)
この うち a:f al と b:f b Zは転送可能であるが,b:f b lは転送不可能である。
図 4 ラムデ ィスク初期化時のデ ィスクからのデータ領域の転送方法の例
2) 具体的 には,デ ィレク トリ ・エ ン トリの 1 バ イ ト目に Oe 5 h ( 削除 された フ ァイル
である事 を示す 目 印) を書 き込 む。
8 6 商 学 討 究 第 3 7 巻 第 4 号
ァイルを 1 個見つ ける 。 この フ ァイルの最小 の クラス タ番号 を基 に して
〜 まだ削除 されていない フ ァイル毎 に,その最大 の クラス タ番号 までの全 部 のセクタが残 りの ラムデ ィスクに転送不可能 な らこの フ ァイルをラム デ ィスクのデ ィレク トリか ら削除す る。 ( 図 4 参照)
◎上 の操作 で転送可 能 とな った フ ァイルの FAT をラムデ ィス クの FAT へ ラムデ ィス クが有効 に使 われるよ うにシフ トして転送する
3)。以上が myramds k. s ys で行 う部分 である
。この時点 で転送可能 なフ ァイルのデ ィレク トリと FATの内容 はすで に ラムデ ィス クに転送 されている 。 あ とはフ ァイルの内容 をラムデ ィス クに転送すれば前章 の ( 機能 2 ) の処理 は終 る
。こ の最後 の実際の フ ァイルの内容が入 っている領域 ( ≠一 夕領域) をラムデ ィス クのデー タ領域 に転送す る処理 も myramdsk. sys の初期化 の部分 でやればよい のであるが,実際 にやろ うとしてみる とうま く作動 しない。確 かな原 因は解 ら ないが,多分 バ ンク切 り替 え用 の増設 RAM にフ ァイルの内容 を直接転送 しよ うと してバ ンク切 り替 えをす るのが, myramds k. sys の初期化 時 には うま く作 動 し な い の か も し れ な いO そ こ で こ の 処 理 を コ マ ン ド ・プ ロ セ ッサ COMMAND. COM を ロー ド, 実 行 す る前 に f i l e c opy. e xe で行 う こ とにす る 。
f i l e c opy. e xe の説 明 の ため に MD‑DOS の起動 の メ カニ ズ ム を簡単 に説 明す る [ 文献 2 参照]
。( 1 ) リセ ッ トされ た時点 で CPU は FFFF : 0 000 ‑ ジ ャ ンプす る
。この ROM の プログ ラムで は使用 開始準備 やハー ドウェアのチ ェ ックな どが 行 われ,次 に,デ ィスクか ら予約領域 にあるブー トプログラムが メモ リ 上へ ロー ドされる。
( 2) これが正常 に行 われる と制御 が このブー トプログラムに移 る 。 このブー トプ ロ グ ラ ム は MS‑DOS の シ ス テ ム フ ァ イ ル の う ち I O. SYS と MSDOS. SYSをメモ リ上へ ロー ドす る
。( 3) I O. SYSフ ァイルの 中の I O. SYSルー チ ンで シス テ ム に接 続 されてい る
3 )未使 用 の FAT エ ン トリは 00 h なけれ ばな らか 、 が,未使 用 のデー タ領域 は どんな
内容でも良い,ことに注意。
MS‑DOS マクロアセンブラを利用 して 87
ハ ー ドウ ェ ア の初 期 化 を行 う。 次 に, I O. SYS フ ァイ ル 内 の SYSI NT ルーチ ンに制御 が移 る。SYSI NT ルーチ ンは 自分 自身 をメモ リの最 上位
‑ ロー ドし直 しそ の分 だ け MSDOS. SYSを移動 させ る
。( 4) 制 御 は MSDOS. SYS に移 り MSDOS. SYSの初 期 化 を行 う
。この 時 点 で MS‑DOSの機 能 の うち シス テ ム コー ル ( メモ リ管 理 用 コ‑ ) レ以外 ) は すべ て使 用可能 とな って いる
。( 5) 制 御 は また SYSI NT ルー チ ン‑ 移 り, フ ァイ ル CONFI G. SYSを読 み込 も う とす る
。つ ま り, メ モ リの 最 上 位 に あ る SYSI NT ル⊥ チ ンが CONFI G. SYSフ ァイル を読 んで解釈 ,実行 す る。CONFI G. SYSフ ァイル で は, システ ム作 業用 の フ ァイル数 ,バ ッフ ァ数 , デバ イス ・ドライバ の設 定 , コマ ン ド ・プロセ ッサ の指定 な どが 自由 にで きる 。 この時点 で ラムデ ィス クの デバ イス ・ドライバ myr amds k. s ys の初 期 化 が行 われ る ので あ る 。 最 後 に SYSI NT ルーチ ンは コマ ン ド ・プロセ ッサ をメモ リ上 へ ロー ドして制御 を移 す。
以上 が MD‑DOSの起 動 の メ カニ ズ ムの簡単 な説 明 で あ る。 そ こで われ われの 目的 は上 記 の ( 5) を参 考 に して以 下 の よ うにす れ ば達 成 され る
。す な わ ち, CONFI G. SYSフ ァイルで コマ ン ド ・プ ロセ ッサ と して f i l e c opy. e xeを指 定 し, f i l e c opy. e xe の中で ラムデ ィス ク初 期 化 時 に転 送 す る フ ァイルの デー タ部分 を ラムデ ィス クに転 送 し, そ の後 coMMAND. COM を / pス イ ッチ を付 けて ロー
ド実行 す る。 す なわ ち
[ f i l ec opy. e xe で処 理 す る内容]
○転 送可能 フ ァイルが ある転 送元 ドライブ毎 に以下 の事 を行 う 。
◎全転 送可能 フ ァイルの ク ラス タ番号 の最小値 か ら最 大値 まで の全 ての内 容
3)を内部割 り込 み 2 5 h を用 いて ラムデ ィス クに転送 す る 。 ( 図 4 参照)
○ コマ ン ド ・プ ロセ ッサ をロー ドして実行 す る 。
だいぶ長 くな ったが以上 が ラムデ ィス ク初期化 時 に フ ァイル を転送 す る ( 機 3 ) 未使 用 の FAT エ ン トリは 0 0 h なけれ ばな らないが,未使 用 のデー タ領域 は どん な
内容でも良い,ことに注意。
8 8 商 学 討 究 第 37 巻 第 4 号
能 2) 方法である 。
( 機 能 3) ( シフ トキー を押 しなが ら リセ ッ トボ タンを押 して再起動 させ れ ばラムデ ィス クの初期化 を しない) は, シフ トキーが押 されていたか どうか を myr amds k. s ys の初期化部分 の最初 で内部割 り込み1 8h ( シフ トキー状態 のセ ン ス) [ 文献 7,8 参照] を利用 して調べ,押 されていた らラムデ ィス クの FAT , デ ィレク トリ,デー タの各領域 をその ままに しておけば実現 される 。 もちろん この機 能 はラムデ ィス ク としてバ ンク切 り替 え用増設 RAM (リセ ッ トボ タン を押 して も影響 を受 けない もの) のみ を利 用 していた場合 で, この場合 で も デー タ化 け等 の アクシデ ン トは避 け られない。
5. そ の 他
前章でわれわれの ラムデ ィス クの主 な説明 を行 ったが, ここでは利用 した内 部割 り込 みで処理 した事項及 びその他 の事項 を説 明す る。 ( 内部割 り込 みの利 用 法 等 は 文 献 [1 ,2 ,6] 等 を 参 照) myr a mds k. s ys ,s e t myr a m. e xe , f i l e c op y . e xe の各 フ ァイルで利 用 した内部割 り込 みの一覧 は ( 表 2 ) で与 え ら れている
。( 表 2 )での※印 をもうす こ し説明する
。( ※ 1) デー タ受渡 し用 ア ドレスの設定,取得
ラムデ ィス ク初期化時 の フ ァイルの転送 は myr a mds k. s ys で転送可能 フ ァイルの決定, デ ィレク トリと FAT の転 送,及 び f i l e c opy. e xe で フ ァイルのデー タ領域 の転 送 と,二段構 えで行 うが,myr amds k. s ys で得 た情 報 を f i l c opy. e xe に伝 える必要 が ある
。この ため に,情 報 の 先頭 ア ドレス を,ユーザーが 自由 に利用可能 な割 り込 みベ ク トル40h
に書 き込 み f i l e c opy. e xe で利用可能す る
。( ※ 2) フ ァイルの オープ ン, クローズ
myr amds k. s ysと f i l e c opy. e xe で はラムデ ィス ク初期化 時の フ ァイルの 転 送 にデ ィス クか らのセ ク タ毎 の読 み込 みの内部 割 り込 み ( i nt 25h)
を利 用 して い るが,NECPC‑9801VM シ リー ズの よ うに 2DD と 2
MS‑DOS マクロアセンブラを利用 して 8 9
HD の両方 を利用 で きる機器 で は i nt25h をその まま利用す る と読 み 込 みで きない場合 がある 。 これ は i nt25hが MSDOS. SYSを通 さず に 直接 I O. SYSを利用するために, 2DD であるか 写HDであるか を識別 で きないため と思 われる 。 そ こで通常 のシスデムコールで適当な名前 (ここで は dummydum. dum としている) の フ ァイル をオー プ ン, ク ローズ してデ ィスクの タイプの識別 を可能 にする 。
( ※ 3) メモ リブロ ックのサイズの変更, プログラムのロー ドと実行
s e t myr am. e xe で は子 プロセス として c ommand. c om を実行 で き, また f i l e c opy. e xeは同 じ く子 プロセス として,任意 の コマ ン ド ・プロセ ;.
サ を実行する 。 この子 プロセスの実行 に必要 な手続 きが, まず子 プロ セスのために自分 に必要 なメモ リ以外 は子 プロセスのため解放する ( 4a h) ,その後 に子 プロセスをロー ド実行する ( 4bh) ,である。
s e t myr am. e xe の処理 はフ ァイル myr a mds k. s ysを読 み込 んで,デ ィスプ レイ
画面上で対話式 に, ラムデ ィスクとして利用する領域,及 び初期化時 に転送す
る フ ァイル名 を設定 し,myr a mds k. s ys にこの結果 を書 き込 む ことである
。転
送候補 のフ ァイル名 を入力する時 にシステムコール O a h ( バ ッフ ァー ド・キー
ボー ド入力) を利用 し,その他 のキー入力 にシステムコール 07 h ( エ コーな し
の コンソールか らの直接入力) を利用 している。次 にデ ィスプ レイ画面 の制御
について簡単 に説明する
。デ ィスプ レイ画面 の制御 は MS‑DOSで はかな りサ
ポー トされていて,エスケープシーケ ンス と呼 ばれるコー ド列 を出力すること
によって行 われている
。これによって文字 の色 を変 えた り,反転 させた り,デ
ィスプレイ画面上の任意の位置か ら文字 を書 き始 めた り,等 いろいろの ことが
可能である
。ここでは, これ らのエスケープシーケ ンスもかな り利用 したが フ
ァイル名 を指示 している反転 カー ソルの移動 は直接 にチモ 1 )上 のテキス ト用
vRAM を操作 したのでその概略 を述べ る。 テキス ト用 vRAM は表示 エ リアで
ある AO O O:0 00 0 か らの 4K バ イ ト ( 同 じものが AI OO:00 0 0 か らもう 1 画面分
として存在する) と, ア トリビュー トエ リアである A2 0 0:0 00 0 か らの偶数番
地 だけを利用 した 2K バイ ト ( 同 じものが A30 0:0 00 か らもう 1 画面分 として
9 0 商 学 討 究 第 37 巻 第 4 号
内部割 り̲ 込み 利 用 事 項
i nt1 8h( m) シフトキーの状態取得
i nt25h( m,∫ ) ディスクからのセクタ毎の読み込み
int