FAT対応

とりあえず、FATの読み込みから入ろうと思う。 ぼちぼち、ゆっくりと進めて行こうと思っています。

効率的な領域確保の方法とは?

C

最近、久々に、仕事でCを使う事になった。 趣味でも、ROSe 関連のツールは、ほとんどCで組んでいる。 で、最近、引っ掛かるのは、malloc の使い方。 まぁ、基本的には、必要な領域を、ちまちま確保しているんだけど、 良く考えると、このオーバーヘッドは…

実機でも動いた!!

実機で確認してみた。 うまく動いた。 BIOS のコード変換は、やっぱり、共通みたいだ。 よしよし。

その1で動いた!!

昨日の方法で、ROSe に ^C の機能を実装してみた。 実際は、試行錯誤の末、なんとか動いたって感じだけれど、 とりあえず、考えた通りに動いてくれたので、嬉しいぞっと!! まず、SPレジスタの内容の保存先は、とりあえず、0x0500番地とした。 0x0400番地から…

^Cの実装について(方法その1)

FreeDOS の ^C 処理を追うのは引き続き、こつこつやっていくとして、 とりあえず、ROSe については、まだまだ実験体なので、 色々と試してみるのも、ありなんじゃないかな?とか思った。 現状、ROSe は、シングルタスクも良いところで、 入力待ち→コマンド入…

こつこつと解析を続ける

kernel.obj の解析を、こつこつと続けている。 分かってしまえば、大した事はない。 本当に、そう思うんだけれど、この差が、何百光年にも感じる。 ヤマトは、一年かけて地球とイスカンダルの間を往復したけれど、 こつこつと続けていれば、何百光年の道程も…

仕事場で...

C

真っ当な仕事を始めて、少し忙しくなってきたので、 ライフワークの ROSe の方は、少し、進みが遅くなりそう。 まぁ、それは、仕方が無い事だけれど... 今日、仕事場で、今回、改修する事となったシステムのソースを眺めていた。 あまり詳しく書くのも、問題…

Object Module Format

*.obj の一形式である(古めの) Object Module Format(OMF) を調査中。 とりあえず、Watcom の出力形式が、どうやらこれらしいと。 他にも、多数のフォーマットが存在するようなのだが、 まとめてこいつらの相手をするのは、さすがに、厳しい。 とりあえず、…

*.objの中身は?

kernel.asm を追い始めて、直ぐに、あれ?っと思った。 マップファイルに含まれるシンボルは、基本的に、global な物だけのようだ。 まぁ、考えてみれば、local で閉じている物については、 その他のファイルとの関連性とか気にする必要は無いもんな。 当た…

マップファイルを眺める

さて、ようやくビルド出来たので、マップファイルを眺めてみる。 * = 参照されないシンボル + = シンボルはローカルでの参照のみです s = シンボルはスタティックです アドレス シンボル ======== ======== モジュール: kernel.obj(kernel.asm) 0000:0002 _L…

とりあえずビルド出来たぞ!!

ようやく、ビルドが通るようになった。 とは言っても、最も安易な解決方法による。 つまり、古いバージョンのコンパイラを探してきて、 ソースが前提とする処理系のバージョンに合わせただけ。 しかし、これが、ある意味、正攻法とも言えそうな?(笑) 参考ま…

オプション多過ぎ...

IDE に慣れ過ぎてしまった自分にとって、 最近?のコンパイラやリンカのオプション、 ちょっと、多過ぎです。 何故に、たかが、ローレベルの出力をしたいだけなのに、 これほど、悩まないといかんのかと。 Windows アプリだとか、COM DLL だとか、 そういう…

ビルド通らねぇ

半ば、消去法で、OpenWatcom を用意して、 とりあえず、何も考えずに、ビルド実行。 当然の事だが、ビルド通らず。 こりゃ、しんどい。

道具の選び方って難しいかも

コンパイラやリンカの動作を理解するには、 実際にやってみるのが早かろうと思ったのだが、 FreeDOS が前提とする環境が、これまた、色々と問題ありというか... 恐らくは、当時 FREE であった処理系で構成したかったのだろうが、 Turbo C や Borland C は、…

愕然!!

FreeDOS で、Ctrl+C が、どのように処理されるのか、 それを追う為に FreeDOS の中身を追い掛けようと、 ソースファイルを展開したまでは良かったが、 さて、こいつら、どこから始まっているんだろう? もしかして、僕は、基本的な事すら、理解していないの…

こ、これは!!

OpenDOSを、QEMU上で使用すると、瞬く間に、CPU使用率が上がります。 こ、これは!! INT 16h AX = 00h or 10h で CPU がブン回る件 - Slow Life & Slow Programming うちのマシンは、Core2 なので、2CPUに見えますが、 使用率が100%になるのは、片方だけ…

Ctrl^C の挙動が怪しい?

Ctrl^C の処理を色々と調べているうちに、 FreeDOS で、ちょっと、おかしな挙動を見付けた。 具体的には、以下のような手順。 C:\>more ^C C:\>とすると、直後、一文字分の入力が無効になる。 内部コマンドや他の外部コマンドでは、今のところ、 この現象は…

Ctrl^C を実装するには

ROSeは、今のところ、いくつかのコマンドしか実装されていないが、 それでもコマンドの途中でキャンセルしたい場面が多々ある。 例えば、間違って、w とか入力しちゃうと、 問答無用でセクタ書き込みを行ってしまうわけですね。 怖いですね〜。苦笑 それで、…

OSって、やっぱり、難しい

OSを作りたい!!って意気込んで、何度も壁に跳ね返され、 性懲りも無く同じような事を繰り返して来たわけだけれど、 何が難しいのか、そこが、なかなか見えてこない。 何が分からないかが分からない、という状況は、 迷路に嵌る可能性が非常に高いように思う…

あいや〜、やられた感じ?

MS-DOS の場合、IO.SYS → MSDOS.SYS → COMMAND.COM の順。 DR-DOS の場合、IBMBIO.SYS → IBMDOS.SYS → COMMAND.COM の順。 なので、FreeDOSの場合も、KERNEL.SYS → ???.SYS → COMMAND.COM かと思いきや、 KERNEL.SYS = IO.SYS + MSDOS.SYS みたいな存在だと!!…

PBR まとめ

結局、逆アセンブルしたリストを印刷して、紙の上で整理する事にした。 やっぱり、紙の方が便利な場面って、結構、あるよね。 ペーパレスが叫ばれるようになってから随分経つけど、紙媒体は無くならないと思う。 さて、PBR の方ですが、ざっとまとめてしまう…

難儀やなぁ...

アセンブラのみだと、分かり辛い、一番の要素は、変数領域の使い方かなぁ?と。 大体が、[BP+xx]って感じが多いと思うけれど、 ソースがあれば、きっと、それなりの変数名が使われていて、 そこから、どのような意図で使われているか推測出来るけれど、 [BP+…

めげずに、PBR

seg000:015B mov es, di seg000:015D seg000:015D loc_7D5D: ; CODE XREF: seg000:0159^Xj seg000:015D cmp word ptr [bp+44h], 0FFFh seg000:0162 jnz short loc_7D76 seg000:0164 add bx, ax seg000:0166 shr bx, 1 seg000:0168 mov bx, es:[bx] seg000:01…

もう少し、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 の方が良いのかも。 で…