2010-11-01から1ヶ月間の記事一覧

もう少し、PBR

seg000:0103 loc_7D03: ; CODE XREF: seg000:00EE^Xj seg000:0103 mov cx, es:[di+1Ah] seg000:0107 mov ax, es:[di+1Ch] seg000:010B add ax, 1FFh seg000:010E shr ax, 1 seg000:0110 mov [bp+25h], ah seg000:0113 pop dx seg000:0114 pop ax seg000:0115…

まだまだ、PBR

seg000:00E0 sub di, di seg000:00E2 seg000:00E2 loc_7CE2: ; CODE XREF: seg000:00F3^Yj seg000:00E2 push cx seg000:00E3 push di seg000:00E4 lea si, [bp+46h] seg000:00E7 mov cx, 0Bh seg000:00EA repe cmpsb seg000:00EC pop di seg000:00ED pop cx …

またまた、PBR

seg000:007B xchg ax, cx seg000:007C mov ds, ax seg000:007E mov bp, sp seg000:0080 mov byte ptr [bp+4], 24h ; '$' seg000:0084 mov al, [bp+0Dh] seg000:0087 mov [bp+3Eh], ax seg000:008A mov al, [bp+10h] seg000:008D mul word ptr [bp+16h] seg00…

そしてPBR

seg000:0000 EB 56 90 4E 57 44 4F 53 37 2E 30 00 02 04 01 00 ・侵WDOS7.0.. seg000:0010 02 00 02 51 99 F8 27 00 3F 00 10 00 3F 00 00 00 .Q咥'.?..?... seg000:0020 00 00 00 00 80 00 29 2A 1D 14 16 44 52 2D 44 4F ....€.)*DR-DO seg…

とりあえず使ってみる

OpenDOS については、ソースを追い掛けるのを止めて、とりあえず、使ってみる事にした。 この場合、正確には、DR-DOSって事になるのかもしれないが、Ver 7.03 を選択。 QEMU 0.13.0 上に、20M のHDDイメージを用意して、DR-DOS をインストール。 割り当てメ…

却下!!

OpenDOSは、どうも、イマイチ、オープンではない感じなので、 とりあえず、FreeDOSに絞って、追いかけてみる事にする。 もう少しスキルが上がったら、どこかで、再挑戦するかも知れないけれど...

こっちは MASM か!!

で、今度は、OpenDOS の方を見てみる事に。 こっちの Makefile を見てみると、今度は、MASM が必要なようだ。 ちなみに FreeDOS の方は、NASM を使用している。 ROSe も現在、NASM ベースで開発を進めているので、相性的には、FreeDOS の方が良いのかも。 で…

パッツンパッツン

で、とりあえず、ブートストラップローダのアセンブルには成功!! バイナリエディタで、中身を眺めてみる。 いや〜、どれも、512Byteギリギリまで使っている感じだ。 と言うか、ソースから受けた印象だと、良く512Byteに収まっているよな〜、って感心してしま…

makeとnamkeは、似ているようで、非なる物?

とりあえず、ブートストラップローダだけでも、コンパイル... アセンブル?してみようと、 適当に ROSe の開発環境をコピーして make って叩いたら、分からない書式だよ〜、とか怒られた。 エラーになっている行を眺めてみると、!include とかある。 GNU Mak…

ブートストラップローダ

FreeDOS のブートストラップローダは、\kernel\boot 以下に格納されている模様。 DOS 互換であるから、勿論?ファイルシステムは、FAT が前提となっているようだ。 FAT12/FAT16, FAT32, FAT32LBA と3種類が用意されている。 FAT12/FAT16 と FAT32 では、ヘ…

FreeDOSとOpenDOS(DR-DOS)

OSS

フリーでオープンな DOS として、FreeDOS と OpenDOS の二つをダウンロードしてみた。 FreeDOS の方は、カーネル部分もアセンブラとCとの組み合わせで実装されているようだが、 OpenDOS の方は、カーネル部分は、オール・アセンブラっぽい感じだ。 ここまで…

NLSって何?

OSS

今度は、NSL、だ。 NSLで検索をしたら、トップに表示されたのは、 プログラミングには全く関係の無いサイトだった。(笑) こいつは、びっくりだぞ!! 気を取り直して調べてみると、どうやら、Native Language System の略っぽい。 ふむ。

拡張子 .lsm って何?

OSS

ROSe の FAT 導入に伴って、色々とお勉強が必要だと思い、 いくつかのオープンソースプロジェクトから、 参考になるソースを探してコードリーディングをする事にした。 とりあえず、DOS系のプロジェクトが、一番参考になりそうだったので、 まずは、FreeDOS…

再びFAT!!

以前、しばらくFATのお勉強をした事があるが、再び、FATの登場である。 セクタ単位の読み書きが、一応、動いてはいるのだけれど、 やはり、セクタ単位では、ちょっと(かなり?)不便である。 ある程度きっちりとしたファイルシステムが欲しくなる。 そこで、…

またお前か!!

far call を修正して、再度、チャレンジ!! 結果 → 動いた!! と思ったら、固まった... orz はい、トレース、トレース。<これ重要!! とりあえず、"TEST!!"は、表示されている。 その後、プロンプトが戻ってこない。 またまたソースを晒しながら、追ってみまし…

far call

x86

インテル資料は、x86を勉強する上で、とても重要な資料なのだが、 これだけでは、読みこなすのが難しい内容である。 上巻は、流し読みの後、拾い読みで、必要なところを繰り返し読み。 中巻は、最も使用頻度が高い、リファレンス。 下巻は、全く別のCPUの…

この辺で、大概、詰まる

さて、とりあえず、セクタ単位での読み書きは出来るようになった。 ROSeの先代?と言うか、プロトタイプも、一度、この辺で詰まっている。 ここが一つの壁と言うか、なかなかに目標設定が難しいところだ。 まぁ、多分、なるべく効率的にとか二度手間を避けよ…

難解過ぎるプロテクトモード

x86

これまでリアルモードで試行錯誤してきたわけど、 そろそろプロテクトモードについても勉強を始めようと、 インテルの資料を眺めているのだが... もう、泣きそうです。 色々と機能が増えたのは良いのでしょうが、全部が必要とも思えない。 まずは、必須機能…

HDDイメージ作成

HDDに対する読み書きテストの為、qemu用にHDDイメージを作成。 >qemu-img.exe create hda.img 40M Formating 'hda.img', fmt=raw, size=40960 kB 40Mでも十分過ぎる。(笑)

とりあえず読み込んでいるようだ

x86

お気楽に、とりあえず、1セクタ分の読み込み機能を実装。 エラー処理やキャンセル処理などは含めていないので、 ちょっと入力を間違えたりしたら大変な事になるような代物。(苦笑) こういう細かい部分は、自分的には苦手な分野なので、 余裕がある時に、ゆ…

あれれ?

コマンド入力部を見直していたところ、ちょっと不思議な挙動に気が付いた。 良くある、小文字が入力されたら、大文字に変換するように修正を加えて、 キーボードの端から順番にキーを押してチェックをしていたら、 半角/全角 キーで、何故だか、小文字の't'…

とりあえず、オーソドックスに

セクタ単位のディスク読み書きは、BIOSサービスの int 13h 系が使えるわけだけど、 旧来のサービスと拡張サービスとがあって、最近の大容量化を踏まえると、 拡張サービスを使っておいた方が、後々、使えるような気もするのだけれど、 現状、リアルモードで…

メモ

<sup> → superscript text (=superior《印刷》上付き数字, 肩文字) <sub> → subscript text (=inferior《印刷》下付き文字)

次の機能について

文字出力、文字入力、メモリダンプ、メモリエディット、手続き呼び出し、と来た。 手続き呼び出し(サブルーチンコール)を用意したなら、 無条件ジャンプも用意した方が良いのかなぁ?とかも思うんだけど、 現状、無条件ジャンプで制御を次のプログラムに渡す…

もしかしたら!!

x86

どうにも、こうにも、怪しいと思った箇所をいくら眺めてみても、原因が分からない。 こういう時に相談できる相手がいたら、どんなに心強い事か... そんな事を考えたりもしたけど、相談できる相手が都合良く現れる訳もなく... とにかく一人で悩み続けるしかな…

試行錯誤してみる

x86

; 手続き呼び出し CALL BX とりあえず、ここが怪しい... と思われる。 試しに、 ; 手続き呼び出し CALL puts としてみる。 これだと、相対CALLだけど、これでも動かなければ、原因は別にあるはず。 結果 → (予想通り)動いた じゃ、次に、 MOV BX, puts MOV A…

例外発生?リセットされた?

x86

なんか、とりあえず、あっさり実装出来たかな?と思ったら、 実機で動作確認してみたところ、OSが再ロードされちゃうみたい? QEMUでは、上手く動いていた気がするんだけど、何でだろ? とりあえず、手順を確認。 cmd_call: ; 変数領域確保 ; [BP-04] オフ…

CALLの種類

x86

さて、モニタ的な物を作っているところで、CALL機能を実装しようと思っている。 今のところ、リアルモードなので、セグメントとオフセットを入力し、 セグメントの値が、現在のセグメントと一致すれば、オフセットのみ、 一致しなければ、セグメント:オフセ…