2010-11-01から1ヶ月間の記事一覧
goto なんだけど、やっぱり、使うべきではない? でも、アセンブラを使っていると、普通に JMP とか書いている。 その感覚で考えちゃうと、goto も、うまく使えば、 ずっとシンプルに書ける場面も結構あるように思う。 実際、そういう主張も、いくらか見掛け…
ネットで色々な人の見解を眺めるのは、なかなか勉強になるのだが、 あまりにも色々とあり過ぎて、時々、混乱する時がある。 例えば、配列とハッシュについて、 自分は直感的にハッシュの方が早いと思っていたのだけれど、 現在のような、大容量のキャッシュ…
基本的に、C の世界というか、古い UNIX の文化というか、その辺界隈では、 多分、自分の尻は、自分で拭け的な... <表現が悪いですが... (^^;;; だから、きっと、Java とか、.NET とか、 比較的、開発者に対して手厚い?環境に慣れてしまうと、 なんだか、…
malloc は、そもそも、ヒープ領域の割り当てが仕事なのだから、 要求した分の必要領域を、妥当な方法で割り当ててくれれば十分で、 なんだか、ここで、効率がどうの管理方法がどうのってのは、 考えてみれば、ちょっと、欲張りというか、ねだり過ぎかな?と…
malloc について、Web を調べてみたら、結構、同じように考えている人がいた。 なんでもかんでも、システム任せってのも、考え物だ。 まぁ、なんでもかんでも、手作りってのも、大変だけど。 その辺の、切り分けは、大事だとは思うけれど、 少なくとも、自分…
ディスクの CHS、すなわち、シリンダ・ヘッダ・セクタの各要素は、 言葉で説明するとなると、なかなか、うまく説明出来ないが、 図を見れば、言葉通り、一目瞭然であろう。 ただ、良くある例えであるが、バームクーヘンのような形であるため、 その形に惑わ…
やっぱり、一日も欠かさず、続けるのって難しいね。苦笑 継続は力なり、と言うけれど、継続する事自体が力だよね。 まぁ、マイペースで、ぼちぼち、行きましょう。
とりあえず、FATの読み込みから入ろうと思う。 ぼちぼち、ゆっくりと進めて行こうと思っています。
最近、久々に、仕事でCを使う事になった。 趣味でも、ROSe 関連のツールは、ほとんどCで組んでいる。 で、最近、引っ掛かるのは、malloc の使い方。 まぁ、基本的には、必要な領域を、ちまちま確保しているんだけど、 良く考えると、このオーバーヘッドは…
実機で確認してみた。 うまく動いた。 BIOS のコード変換は、やっぱり、共通みたいだ。 よしよし。
昨日の方法で、ROSe に ^C の機能を実装してみた。 実際は、試行錯誤の末、なんとか動いたって感じだけれど、 とりあえず、考えた通りに動いてくれたので、嬉しいぞっと!! まず、SPレジスタの内容の保存先は、とりあえず、0x0500番地とした。 0x0400番地から…
FreeDOS の ^C 処理を追うのは引き続き、こつこつやっていくとして、 とりあえず、ROSe については、まだまだ実験体なので、 色々と試してみるのも、ありなんじゃないかな?とか思った。 現状、ROSe は、シングルタスクも良いところで、 入力待ち→コマンド入…
kernel.obj の解析を、こつこつと続けている。 分かってしまえば、大した事はない。 本当に、そう思うんだけれど、この差が、何百光年にも感じる。 ヤマトは、一年かけて地球とイスカンダルの間を往復したけれど、 こつこつと続けていれば、何百光年の道程も…
真っ当な仕事を始めて、少し忙しくなってきたので、 ライフワークの ROSe の方は、少し、進みが遅くなりそう。 まぁ、それは、仕方が無い事だけれど... 今日、仕事場で、今回、改修する事となったシステムのソースを眺めていた。 あまり詳しく書くのも、問題…
*.obj の一形式である(古めの) Object Module Format(OMF) を調査中。 とりあえず、Watcom の出力形式が、どうやらこれらしいと。 他にも、多数のフォーマットが存在するようなのだが、 まとめてこいつらの相手をするのは、さすがに、厳しい。 とりあえず、…
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 の処理を色々と調べているうちに、 FreeDOS で、ちょっと、おかしな挙動を見付けた。 具体的には、以下のような手順。 C:\>more ^C C:\>とすると、直後、一文字分の入力が無効になる。 内部コマンドや他の外部コマンドでは、今のところ、 この現象は…
ROSeは、今のところ、いくつかのコマンドしか実装されていないが、 それでもコマンドの途中でキャンセルしたい場面が多々ある。 例えば、間違って、w とか入力しちゃうと、 問答無用でセクタ書き込みを行ってしまうわけですね。 怖いですね〜。苦笑 それで、…
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 の方ですが、ざっとまとめてしまう…
アセンブラのみだと、分かり辛い、一番の要素は、変数領域の使い方かなぁ?と。 大体が、[BP+xx]って感じが多いと思うけれど、 ソースがあれば、きっと、それなりの変数名が使われていて、 そこから、どのような意図で使われているか推測出来るけれど、 [BP+…
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…