■OSなしで実行できるプログラム


PCの起動時にはBIOSの働きにより、起動ディスクの先頭512byte分がメモリに転送されて 実行されます。
すなわち、自作プログラムをアセンブラで書いて、フロッピーディスクの先頭に書き込み、そのディスクから 起動させればプログラムが実行されます。

アセンブラにはnasmを使用し、ディスクの先頭に書き込むにはddコマンドを使用します。
nasmもddもLinuxやCygwinに入っていると思われます。

▼nasmを使ってコンパイルするコマンド
loader.asmをコンパイルしてloader.exeを作成します

nasm -o loader.exe loader.asm

▼ddコマンドでディスクの先頭512byteにデータ(loader.exe)を書き込む

dd if=loader.exe of=/dev/fd0 bs=512 count=1 seek=0 conv=sync

(注)ddコマンドで先頭セクタにデータを書き込むと、 ファイルシステムが破壊されますので不要なディスクを使用してください
また、失敗すると、最悪の場合PCが破壊されますので、自己責任で行ってください


●ブートして文字の表示と文字入力を受け付けるプログラム

test.asm

●FAT12 FDDディスクからブートしてのinit.comという名前のファイルを実行するプログラム
一度、FAT12でフォーマットしたディスクのブートセクタにプログラムを書き込んでください

loader.asm

●FAT12 FDDディスクからブートしてルートディレクトリのファイル名を全て表示するプログラム

FATFileList.asm

●ファンクションコールを作成し、実行するプログラム
文字を表示するだけの割り込みハンドラを作成し、int 40h として割り込みベクタに登録します
その後、int 40h が連続してコールされ文字が画面上に連続して表示されます

funccall.asm



nasm メモ

nasm でコンパイルしてFDのブートセクターに書き込むためのコマンド

x86 32bit CPUのレジスタ



■フロッピーディスクではなくUSBメモリに書き込む


しかししかし、最初にフロッピーで遊んでいた頃から何年もの時が経ち・・・・・・
フロッピーディスク自体が最近は無いということでUSBメモリなどでプログラムを書けるようにしたいと思います
そういえばここ何年?10年以上?FDって使ってないよな。

まずは壊しても惜しくないUSBメモリを用意します。
それを必ずWindowsでFATフォーマット(FAT16かFAT32)します。
必ずWindowsです、他の機器(音楽プレイヤーやスマートフォンやデジカメなどなど)ではフォーマットしないでください。
なぜかというと、ちょっとおかしなフォーマットされる可能性が高いからです。

次にプログラムを使ってFATフォーマットされたUSBメモリのMBRからブートパラメーターブロックを抜き出し対応するアセンブラの雛形を作り出します。
もちろんそのアセンブラの雛形は、そのUSBメモリ以外は使えません。
MBRのブートパラメータブロックにはフォーマットの情報が書き込まれていますので、こいつさえ変更しなければ、MBRを好きなだけ変更して書き換えてもフォーマットは壊れません。(たぶん)
逆に、上のほうで作ったFAT12 FDD用のMBRを書き込むとUSBメモリがフロッピーディスクみたいになってしまいます。

ブートパラメータブロックからアセンブラの雛形を作るプログラム
もちろんソースコードつき。

プログラム+ソース VisualC++6.0

実行するときは管理者として実行してください。でないとまともに動きません

実行すると、ドライブが列挙されますので文字から予想して選択します。
0番は大抵内蔵HDDですので、この場合は1です。




うまくいくと生成されたアセンブラの雛形が画面に表示されます。
それを編集→コピーして使用します。



そのままnasmでコンパイルしてUSBメモリのMBRに書き込んでから、USBメモリを抜き差ししてフォーマットが生きてるか確かめてみてもいいですね。
うまくいくかな?うまくいかなかったらごめんね。

MBRにはddコマンドで書き込んでもいいですし、もしくは、

ハードディスクのMBR読み書き

の方法でもUSBメモリに書き込めます。




●USBメモリから起動するとパスワード入力してくださいみたいな画面になって 永久にパスワード違うよって言われ続けるプログラム
ESCキーを押すと抜けて(BIOSによっては次のデバイス)再起動します。
このUSBメモリを挿しておけば初心者からパソコン触られないかな?程度の物です。
もちろんセキュリティは無いです(笑
usb1.asm




▼自作プログラムを書き込んだ時に、PCを再起動させて書き込んだプログラムをテストするのが面倒という時には、 仮想マシンのqemuを使ってusbメモリから起動させられます、
qemu.exe -L . -m 128 -hda //./PhysicalDrive1
のような事をすれば起動します。
ちなみにFDやCDから起動するには、
qemu.exe -L . -fda //./a:
qemu.exe -L . -cdrom //./E:

OSをCDからインストールしたり、HDDイメージから起動するには、
qemu.exe -L . -boot d -hda ***.img -cdrom //./H: -enable-audio -localtime -user-net
qemu.exe -L . -boot c -hda ../***.img -enable-audio -localtime -user-net
のようにします。




▲トップページ > プログラミングの実験