ブログパーツ Twitter

« Let's 4 購入10周年 | トップページ | プリモプエル、10歳になる »

2015.02.14

新HariTiger OS、フロッピーを読むのに成功

2月14日、今日は何の日でしょうか?
そう「煮干しの日」です!
数字の1を「棒」とみなして「に(2)ぼ(1=棒)し(4)」なんだとか。
しかし我が家の今晩のメニューは酢豚でした(なんのこっちゃ)。


----------

昨年の2月から再起動を始めた私の自作 OS プロジェクト、HariTiger OS
 
昨年5月の記事を実質最後に、以後は記事をアップしていないので「どうなっているのか」と気になっている方もおられるでしょう(いないか)。

新 HariTiger OS についての過去記事は以下の通り。
2014.12.31 さよなら2014
2014.05.07 新HariTiger OS、3ヶ月
2014.04.06 新HariTiger OS、2ヶ月
2014.03.06 新HariTiger OS、1ヶ月
2014.02.20 Project HariTiger OS、再起動
「旧」HariTiger OS についてのリンクは昨年2月20日の記事内にあります。

 
昨年末の記事に書いたように「一時中断」だったのですが、この2月に入ってから開発をようやく再開しています。
(本当は1月中に再開したかったんだけど、なかなか時間が取れなくて。)



再開後に取り組んだテーマは フロッピーディスク(FD)を読む

FD を知らない方のために。
現代の PC ではプログラムやデータを保存するのにハードディスクドライブ(Hard Disk Drive: HDD)や半導体メモリを利用した SSD なんかを搭載していますが、HDD が普及する以前に広く使われていたのが、「ハード」でない「ペラペラな(floppy)」磁気ディスクを利用したフロッピーディスクドライブ(Floppy Disk Drive: FDD)でした。
これは SD カードのように使用するディスクメディアを交換することができ、そのディスクメディアのことを「フロッピーディスク(Floppy Disk: FD)」と呼びます。
「3.5インチ」のサイズのディスクのデザインは、データ保存用のアイコンに使用されていることがよくあります(下の画像の赤丸で囲ったアイコン)。
3.5インチフロッピーディスクが使用されているアイコンの例

 
新旧 HariTiger OS が制作の参考にしている「30日でできる! OS自作入門」(※以下「30日OS」)だと次は「コンソールでコマンドを実行できるようにする」段階なのですが、そこで作っている「dir」とか「type」コマンドでは起動ディスクの内容が読めることが必須になります。
(「30日OS」で最初に作っているコマンドは「mem」なんですが、それはまあそれとして...)
 
「30日OS」で作成している「はりぼてOS」では、「ブートローダー段階で BIOS の機能を使って FD の内容を必要なだけメモリに転送しておくことで OS 本体で FD を読む必要がない」というワザを使っています。
 
しかしこのワザはブートローダーとして汎用の GRUB2 を採用した HariTiger OS では使えません。
つまり何としても、BIOS の機能を使わずに FD を読む機能を先に作っておく必要があるのです。



早速その成果の方から。
 
FD アクセスコマンド実行の様子
(OS の Terminal で FD を読むテストコマンドを実行したところ。)
※画像をクリックすると大きな画像(800x600)を表示します。
 
私は残念ながら FDD を内蔵した PC を持っていませんので、実行環境は今回も Virtualbox 上の仮想 PC です。
(USB 接続の FDD では今回の方法はつかえないらしいです。)
 
OS 上で Terminal を実行し、そこでテスト用コマンド「testfd」を実行した場面のスクリーンショットです。
 
testfd コマンドは、接続されている FDD において、「ドライブ:0、ヘッダー:0、トラック(シリンダ):0、セクター:1」のセクターを読み込んで、最初の 8byte を表示するという機能があります。
 
「OK.」の直上の行に表示されている16進表記
 
EB 3C 90 48 54 4F 53 20
 
が読んだ結果で、その前の色々な表示表示はデバッグ用です。
 
しかし問題は「これが正しい値なのか?」
 
そこで上記で読んだ仮想 FD に Ubuntu 上からアクセスして内容を表示させてみました。
 
od コマンドの結果
(赤枠で囲った部分が testfd コマンドで表示させた範囲。)
 
3c eb 48 90 4f 54 20 53
 
大文字と小文字の違いは単なる表記方法の違いですし、2byte 単位で順番が反対になっているのはデータの格納ルール(リトルエンディアン)によるものと思われるので、これで正しくアクセスできていることがわかりました(たぶん)。



OS から FD を読むために参考にしたのが、こちらも毎度おなじみの「0から作るOS開発」(※以下「0からOS」)のサイトです。
 
以下の2ページに解説されています。
フロッピーディスクドライバその1
フロッピーディスクドライバその2
 
またこの機能の実装のためには DMA(Direct Memory Access)の実装が必要で、それに関しては以下のページに解説されています。
DMAドライバ
 
「30日OS」の wiki ページ内の「読破した人向けのページ」に、ディスクアクセスについて記述されたページがあり、もちろんそこも参考にしています。
advance/FDC BIOSを使わないでディスクアクセスするぞ! - hrb-wiki
 
また、Mona OS の作者であるひげぽんさんが FD の読み込みルーチンについて「30日OS」の著者である川島秀美(K)さんに質問した内容をまとめたページも大いに参考にさせて頂きました。
議論/FDC(Kさんからのアドバイス) - MONA
 
その結果、関数や定数の名前は「0からOS」のもので、FD へのアクセスの手順は「30日OS」、設定している値は OSASK のものに準拠という、なんとも奇妙な構成になりました。



「じゃあ次は FD 上のファイルにアクセスするコマンドを」といきたいところですが、実は読めただけで結構満足してしまっているのでコマンド実装はいつになるかよくわかりません。

内実を明かすと、実は割り込み関係でミスを重ねていたのに気が付かず、成功するまで結構日数がかかっているのです。
苦労に苦労を重ねた結果ようやく成功したので、今は「満ち足りた」気持ちなのです。

 
それに FD 上のファイルへのアクセス手順については自作ブートローダの時に1度やっているので(※BIOS の機能を使ってですが)、あれをもう一度なぞるのもなんだかなーという気分でもあります。
 
また、もうそろそろ作業に取れる時間がなくなりそうなので、そういう点からも次がいつになるのかわかりません。
 
というわけで次はいつになるかわかりませんが、仕事と違って〆切があるわけじゃないので、のんびりやっていきます。


結論: 1年超え確定だな


・3月24日 追記
新 HariTiger OS についての新たな記事を公開しています。
(リンク貼るのを忘れてました。ごめんさい。)
2015.03.22 新HariTiger OS、コマンドいろいろ

« Let's 4 購入10周年 | トップページ | プリモプエル、10歳になる »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« Let's 4 購入10周年 | トップページ | プリモプエル、10歳になる »

2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

お気に入り

無料ブログはココログ