「Hyfaxのこと」カテゴリーアーカイブ

Fifaxの作成で遊びます

Hyfaxのこと(2)

このテーマを進めるにあたって、どうしようかいろいろ考えたのですが、まずはディスクイメージを作るところから始めることにしました。
QEMUでの実行ではプログラムを指定というよりディスクイメージを指定しするので、これがないと何もできません。今回はFAT16の32MByteのハードディスクイメージを作成します。

作り方はこれ。

ddでファイルのガワを作って、パーティションテーブル作って、ブート可能にして、フォーマットしてます。
まんまですねw

プログラムの方なんですが、オレオレOSというかオレオレ環境なので、どんな構成でも構わないっちゃ構わないんですが、FAT16を選択してしまった以上、決まったお作法があります。

Fat構造だとまず最初にMBR(Master Boot Record)から512Byte 読み込んで実行します。そこでパーティションテーブルを確認して、最初にブート可能なパーティションのVBR(Volume Boot Record)の位置を取り出して、そこを読み込みます。
VBRでは実行するプログラムをファイルシステムから探して読み込みます。

というような、ちょっと面倒くさいお作法になります。
都合上、MBRに置くプログラムをboot0.bin、VBRに置くプログラムをboot1.bin、ファイルシステムから読み込むプログラムをmonitor.binとしています。
アイキャッチの図の通りです。

今回はboot0.binを作りたいと思います。
これは結構楽なんですよね。なにせMBRに置いておけばあとは勝手に読み込まれて実行されるので。
まずは「とにかく動けばいいや」というコードを書いてみます。実はVBRの位置は0x800セクタ、VBRの大きさはMAX4セクタとわかっているので、パラメータを揃えて実行するだけです。
こんな感じ?

確認用に読み込んだ内容の先頭16バイトを表示しています。実行結果はこんな感じ。

ディスクイメージをダンプするとこんな感じ。

セクタ0x800、バイトで0x100000の先頭はeb 3c 90。正しく実行されてますね。

さて、骨格ができたところで肉付けを。というかパーテションテーブルをきちんと見るように修正します。パーティションテーブル、4エントリをなめて当たりを探す処理を追加です。
一気に行っちゃいます。

事項結果は前と変わらないので省略。
最後にboot0.binをディスクイメージに書き込む例を挙げて終わりにします。
パーティションテーブルより前の446バイトを書き込んでいます。

お疲れさまでした。(主にわたしが疲れてるという……)

《2025/12/3 223:41:32》

Hyfaxのこと

これまでBIOSやらBootやらで遊んできたわけなんですが、何か機能とかが気になって遊ぼうとするたびに、boot、機能読み込み、実行とかすることになるわけです。
で、ブートの部分とか機能の読み込みの部分はほぼ同一だという。
同じものを使いまわしするので面倒くささはあまりないのですが、同じものを何度も使うならソースの再利用じゃなくてバイナリの再利用をしたいなぁ、とか思っちゃうんですね。ほとんど同じソースがあちこちにあると、心がゾワゾワするというかなんというか。プログラム作成者の性って奴かもしれません。
そういった流れで処理を見直すと、結局は3つのパートに集約されるなぁと。

①ブートする

②機能を読みこんで遷移する

③試したい機能

流れとしてはこんな感じ。流れ図にするならこうかな。

この形は言うまでもなくOSの基本機能なわけですが、OSというほどたいそうなものを作りたいわけじゃありません。いわばモニタプログラムといったところでしょうか。

よく使う形を一般化して何度も使いまわせるようにするわけです。OSなんておこがましいささやかなものですが、名前がないと不便なのと、名前があると愛着がわくので、仮にHyfaxと名付けました。

今回からしばらくは、このHyfax君を作っていきたいと思います。

大雑把な方針とか

まずは媒体からです。QEMUを使うのは確定です。なので一般的なものとしてFDDとHDDがあります。ですが今更FDDはないだろうというわけでHDDの一択。

ファイルフォーマットはFATなのは当然です。フロッピーでないのでFAT12は没。FAT32は64Bit 演算ができないと辛いのでこれも没。まことに中途半端ながらFAT16で実行できるようにしましょう。

モニタプログラムは0x0ffffまでを占有することにします。アプリエリアは0x10000~0xA0000までの576KByteとしましょう。

モニタプログラムからアプリはjmpで遷移することにします。アプリからはモニタの先頭にjmpすることで復帰することにします。

モニタプログラムはアプリのファイル名を使ってディスクをリードし、0x10000に展開した後で同アドレスに遷移するものとします。

完全なシングルタスク・シングルユーザですね。だってモニタですもの、高機能は望みません。

忘れてましたけど、リアルモード厳守で行きます。拡張レジスタとか使わない方向で。

今日はここまで

大雑把な方針が決まったところで今日はここまでです。やってみなくてはわかりませんが都合6回くらいになるんじゃないでしょうか。

わたしの『やる気スイッチ』と連動しているので、次回がいつになるかはわかりません。

《2025/11/28 13:54:22》