qa_log/0005
の編集
http://hrb.osask.jp/wiki/?qa_log/0005
[
リロード
|
差分
|
単語検索
|
一覧
] [
編集
|
バックアップ
|
添付
]
-- 雛形とするページ --
A
Akkie
Athlon64X2
Clover
DAsoran
Falcon
FormatRule
FrontPage
Genesis
Help
I
InterWikiName
InterWikiSandBox
InterWikiテクニカル
Jormungand
K
Kebo
Kor_Lee_Hee_Rak
Leaf
Linux
Linux/wako_memo
MOIZ99
MW
MenuBar
OSC
PG_MANA
ReadersOS
RecentDeleted
SKYDASH
SandBox
Sero
Sigle
Source
Triangle_Ld.
Zxcvbnm
advance
advance/CPU
advance/FDC
advance/FPU
advance/NotHariMain
advance/QEMUVGA
advance/RTC
advance/blike
advance/cpu_reset
advance/driver
advance/driver/01
advance/driver/02
advance/families
advance/filesystem
advance/fwrite
advance/hddboot
advance/he86
advance/hints
advance/ipl
advance/kernel
advance/keycode
advance/osselect
advance/smaller1
advance/startup
advnace/smaller2
anzy
aotatsu
banbi-
bluedwarf
bo
bugs
challengers
cybozulabsyouth11
deskmanta
esb02b
faq
faq/advance
faq/asm
faq/c00-03
faq/c04-07
faq/c08-15
faq/c16-23
faq/c24-31
faq/make
faq/others
faq/qemu
guide
guide03
guide05
guide07
hikarupsp
imp_log/0000
imp_log/0001
imp_log/0002
imp_log/0003
impressions
index
k
killer_elf
kota
lea
lea/10_memory
lea/4_color
lea/idea
lea/terms
links
logs
logs/osa_hrb/comments0000
logs/osa_hrb/rumors0000
masa
members
message
mistakes
moge32
moppoi5168
notice
osdevjp
populars
prog_index
projects
q_and_a
q_and_a_2
qa_log/0000
qa_log/0001
qa_log/0002
qa_log/0003
qa_log/0004
qa_log/0005
qa_log/0006
qa_log/0007
qa_log/0008
qa_log/0009
quark
rankings
rule
sakamoto
sasaki
spc09
spcc_30min_os
tatsu
tools
tools/bim2hrb
tools/bin2obj
tools/cc1
tools/edimg
tools/gas2nask
tools/makefont
tools/nask
tools/obj2bim
tools/sjisconv
uchan
uho
updates
violations
wako
white
win64-bit
x
ytakano
ヘルプ
リックス
質問します
整形ルール
本は買ったぞ!持ってるぞ!
練習用ページ
* q_and_aの過去ログ(0005) -(by [[K]], 2006.09.08) -リンク: --[[q_and_a]]へ *** ログ -初版P59の6節ブートセクタからOS本体を実行してみるから質問です。「ブートセクタの先頭がメモリの0x8000番地にくるような感じディスクをメモリに読み込み終わっていますので」とありますが、P42を見ますと、ブートセクタは7c00から読み込まれると書いてあります。この0x8000が読み込みスタートというのはどうやって決まったのですか? -- ''ichi_fuji'' SIZE(10){2006-07-01 (土) 15:04:54} -実は、0x8000番地に"くるような感じで"と有りますように、0x8000にはp59ページの段階ではデータは読み込まれていない(はず)です。FDの2セクタ目からのデータが0x8200番地から配置されてる状況です。「どうして0x8200からなのか?」という疑問は、p53を読んだら解決するかもしれません。 -- ''uchan'' SIZE(10){2006-07-01 (土) 16:47:46} -ありがとうございます。なるほど・・・。p53を見ると「0x8000〜にはあとでブートセクタの内容を入れようかな〜」と書いてありますが、「あとで」と書いてあるように、もうちょっと先を読んだら、そこの説明が書いてあるのでしょうか・・・。すいません。もうちょっと読んでみます。 -- ''ichi_fuji'' SIZE(10){2006-07-02 (日) 00:59:10} -やっぱりわかりませーん。上記の続き(p59)ですが、0x8000には何のデータも読み込まれていないんですよね?でもharibote.sysの中身を読み込みにいくとき、ブートセクタの先頭が0x8000に読み込まれるということを前提で、0x8000+0x4200と、haribote.sysのアドレスを計算してるじゃないですか・・・。ブートセクタが0x8000に読み込まれないと、この計算はおかしいと思うのですが・・・・。申し訳ありませんが、どなたかご回答よろしくお願いします。 -- ''ichi_fuji'' SIZE(10){2006-07-02 (日) 12:26:03} -ディスク内容を0x8000から収納しています。ipl.binは、その先頭から512Byteの0x8000~0x81ffに入ります。ということは、haribote.imgの0x0000~0x05ffにあたると思います。ということで、ずーーとみていくと、0x4200にharibote.sysの内容がありますよね。それは、0xc200に書き込まれているのです。なぜなら、0x8000から書き込み始めているからです。長くなりましたが、わかりましたでしょうか?間違えていたらごめんなさい。図を置いておきます。 |メモリー上の番地|IMG上の番地|詳細| |0x8000〜0x81ff|0x0000〜0x01ff|IPL(512Byte分)| |...|...|...| |0xc200〜0xc203|0x4200〜0x4203|Haribote.sys(3Byte分)| わかりましたか? -- ''Clover'' SIZE(10){2006-07-02 (日) 12:59:55} -上の図が間違えていたら修正してもいいです。 -- ''Clover'' SIZE(10){2006-07-02 (日) 13:03:57} -PCを起動するとシステムによりブートセクタの内容がメモリの0x7c00〜0x7dff番地に読み込まれます。そして、読み込んだブートセクタが実行されます。このブートセクタは48ページ〜57ページにかけて説明してあるとおり、ブートセクタの次のセクタである(C0-H0-S2)から10シリンダほど先のセクタ(C9-H1-S18)までを0x8200〜0x34fff番地に読み込むようにプログラムしたのです。ですから、ブートセクタ(C0-H0-S1)の内容を再び0x8000〜0x81ff番地に読み込む必要はないのです。 -- 名無しさん SIZE(10){2006-07-02 (日) 16:27:03} -みなさん、本当にありがとうございます!計算の仕方はよくわかりました!ただ、ブートセクタはメモリ上のどこに読み込まれるのかわかりません。私は、Cloverさんの言われる「ipl.bin」 = ブートセクタの内容と理解しています。そうすると、ブートセクタは0x7c00と0x8000どちらに読み込まれるのですか?何度もすいませんがよろしくお願いしますm(_ _)m -- ''ichi_fuji'' SIZE(10){2006-07-03 (月) 09:43:21} -ブートセクタは、PCの電源を入れると自動で「0x7c00」に読み込まれます。そして、なぜ「ブートセクタ=0x8000」という話が出てくるか。ブートセクタの中の何らかのプログラム(またはデータ)を、OSを作っていくうちに使いたくなるかもしれません。だから、512バイト分を0x7c00から0x8000に丸ごとコピーするのです。(0x7c00にずっと置いておいても良いではないかと言うと、それは確かにそうですが、0x8000からの方が計算が楽と言うことで。) -- ''uchan'' SIZE(10){2006-07-03 (月) 13:03:13} -なるほどー!コピーしてたんですか!それなら、計算も納得です。・・・ということは、0x7c00から0x8000にコピーするような記述がソース(ipl.nas)に書いてあるのですか?ソースを確認する前に質問してすいません・・・m(_ _)m(今、ソース(ipl.nas)が手元にないので・・・) -- ''ichi_fuji'' SIZE(10){2006-07-03 (月) 14:29:25} -ipl.nasを確認しました・・・・。すいません。私のスキルではコピーするような内容を見つけることはできませんでした。BIOSの方にコピーするような内容が書かれているのでしょうか? -- ''ichi_fuji'' SIZE(10){2006-07-04 (火) 18:28:32} -僕からのアドバイスとしては、まずは8日目まで読みきることをおすすめします(わからなくてもとりあえず先に進むというのがこの本のおすすめの読み方でもあります)。それで分からなければまた聞けばいいのではないかと思います。 -- [[K]] SIZE(10){2006-07-04 (火) 19:31:51} -ありがとうございます。ちょっと先走りすぎてたかもしれませんね。ご回答とおり、もう少し読んでみます。 -- ''ichi_fuji'' SIZE(10){2006-07-05 (水) 08:46:10} -tokiwa 2006-05-01 (月) 08:48:40 さんと同じ現象が発生します。その後、何かわかりましたでしょうか? -- ''kumi'' SIZE(10){2006-07-17 (月) 01:55:22} -(ここでいいのかな?)はじめまして。ブートセクターに付いての質問です。make installして本体(画面真っ黒にするプログラム)を入れたものを実機(IBM Thinkpad560E)でブートしてもエラーだけが起こって読み込むことができません。文字は出力できます。どうしたらいいでしょうか。(MS-DOSは起動できる)私は中3ですが中3にもなって文章がまとまってなくてすいません。 -- ''Erail'' SIZE(10){2006-07-18 (火) 16:22:35} -Erailさんへ。質問はわかりましたが、どこの章のサンプルでエラーが起こったのですか?文章がまとまんなくても、どこのサンプルなのかがわかれば、答えられます。また、改造しているのであれば、そのサンプルをCDからコピーしてでやってみては?たまにFDから読み取れない場合はありますよ。 -- ''I'' SIZE(10){2006-07-18 (火) 17:01:38} -あ、ちゃんと動きました。すいませんでした。 ただ、ドライブが回りっぱなしでした。(笑) -- ''Erail'' SIZE(10){2006-07-18 (火) 19:07:55} -どうやらCLが0になって読めないところをさしていたからのようでした。ここのミスに気が付きませんでした。 -- ''Erail'' SIZE(10){2006-07-18 (火) 19:15:13} -初版の第6刷のp.95周辺の、GUI画面(タスクバー??、デスクトップ??)などについて質問です。スタートメニューの場所、時計の場所の上に、画像とか文字を載せたいのですが、どのファイルのどの部分をいじれば良いでしょうか? -- ''Masanori'' SIZE(10){2006-08-02 (水) 09:00:13} -初版第六版の678Pで、CDRecordフロントエンドのページのアドレスが載っているのですが、アドレスバーに入力しても、ページがありません。Yahooで検索したところ、アドレスは「http://mouneru.web.fc2.com/cdrecord_fe/cdr_fe.htm」が正しいと思います。どうなんでしょうか? -- ''Mac'' SIZE(10){2006-08-02 (水) 11:54:31} -Masanoriさんへ。文字は、とりあえず100P周辺の「とにかく文字を出したい(harib02d)」まで読み進めたらどうですか? -- ''Mac'' SIZE(10){2006-08-02 (水) 14:47:42} -CDRecordフロントエンドのページの更新履歴に"バージョン情報で表示されるWEBサイトのリンク先変更"とあるので、移転したのだと思います。 -- ''M59'' SIZE(10){2006-08-02 (水) 16:05:11} -Macさん、M59さん、ありがとうございます。次の増刷時には修正します。それと、これからその手の情報を扱うページを準備します。 -- [[K]] SIZE(10){2006-08-02 (水) 19:23:09} -初版第六版で、149Pに載っている「fifo.cのfifo8_put」の13行目くらいに"if (fifo->p == fifo->size) {"と書いてあります。しかし、CD-ROM内のharib04eのfifo.cを見ると、"if (fifo->p == size) {"と書いてあります。本の通りにすると動くのですが、CD-ROMのサンプルだとMakeでエラーが出ます。これは、CD-ROMのHarib04eの作成ミスなのですか? -- ''mac'' SIZE(10){2006-08-07 (月) 12:44:20} -僕が持ってるのは初版第1刷なのですが、CD-ROM内の該当箇所(fifo.cの29行目)を見てみると"if (fifo->p == fifo->size) {"となっています。ということは、(推測ですが)第1刷から第6刷にかけて、CD-ROMが変更されちゃったのかな? -- [[uchan]] SIZE(10){2006-08-07 (月) 17:21:38} -ちなみにharib04eをCDからコピーしてそのままmake runで正常に起動します(QEMU上)。 -- [[uchan]] SIZE(10){2006-08-07 (月) 17:23:41} -macさんへ。出版社に提出した初版第6刷のデータを確認しましたが、CD-ROM内のharib04eのfifo.cの29行目は、正しく "if (fifo->p == fifo->size) {" になっていました。macさんの誤解か、もしくは違うページの問題なのではないでしょうか?・・・それとも何か事故があってCD-ROMがおかしいものがあるのかもしれません。もし他にも同じ症状のかたがおられましたらご報告ください。 -- [[K]] SIZE(10){2006-08-07 (月) 20:11:00} -すいません。自分のミスでした。自分は、CD-ROMからコピーして使っていて、自分で本を見ながら作っているOSの間違いを探しているときに、修正するファイルを間違えてしまいました。お騒がせしてすいません。 -- ''Mac'' SIZE(10){2006-08-07 (月) 21:57:55} -Macさんへ、アドバイスありがとうございました。じっくりと読んでみます。 -- ''Masanori'' SIZE(10){2006-08-11 (金) 16:26:57} -初版第6版を読んでいます。まだ半分くらいしか読んでいないのですが、OSの終了の仕方がどこに書いてあるのかがわかりません。どなたか教えていただけませんか?電源ボタンを押して終了しなければならないのでしょうか? -- ''Kino'' SIZE(10){2006-08-15 (火) 20:10:20} -すみません。上記質問の者です。他のスレッドに書いてあったのを発見いたしました。ご迷惑をおかけいたしました。 -- ''Kino'' SIZE(10){2006-08-15 (火) 22:03:12} -P186のnaskfunc.nasのmemtest_subでstartとendの値を受け取るときに[ESP+12+4]と[ESP+12+8]となっていますが、P70をみると、startを受け取るときは[ESP+4]でendを受け取るときは[ESP+8]なんではないんでしょうか?[ESP+12+4]の+12は何なんでしょうか? -- ''Mogu'' SIZE(10){2006-08-20 (日) 19:52:51} -Moguさんへ。簡単に言うと「startとendを受け取る前にPUSHを3回実行しているから」です。たとえば「PUSH EDI」とすると、ESPから4が引かれます。それが3回なので、3×4で合計「マイナス12」となります。これを相殺するため「+12」としています。 -- [[uchan]] SIZE(10){2006-08-20 (日) 19:59:51} -お返事ありがとうございます。なるほど、そーゆーわけだったんですか、分かりやすい説明のおかげで理解することができました!ありがとうございます! それとは別にもう一つ質問があるのですが、IDTの設定で(int)asm_inthandler21とやっている場所がありますが、これはどうゆう意味なんでしょう?関数が置いてある番地をint型で返すってことなんでしょうか? -- ''Mogu'' SIZE(10){2006-08-24 (木) 22:43:23} -二版P18の!cons_nt.batを実行してみるところから質問です。 実行すると、{'cmd.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。}とでて、コンソールが起動しません。何故でしょうか? OSはwindowsXP です。-- ''SYATIHOKO'' SIZE(10){2006-08-26 (土) 18:20:54} -Moguさんへ。「関数が置いてある番地をint型で返すってことなんでしょうか?」はいそのとおりです。 -- [[K]] SIZE(10){2006-08-26 (土) 22:59:17} -SYATIHOKOさんへ。それはおそらくWindowsXPを独自にカスタマイズしたせいではないかと思われます。残念ながらどうしたらよいかは分かりません。 -- ''K'' SIZE(10){2006-08-26 (土) 23:01:32} -Kさん返答ありがとうございました!! -- ''Mogu'' SIZE(10){2006-08-27 (日) 14:16:06} -PUSHをしてからCALLで関数を呼び出すプログラムで、PUSHでスタックに入れたものが引数になる仕組みが良くわかりません。PUSHをすると(ESP-4)にデータが入るわけですが、そこから((ESP-4)+4)つまり(ESP)の場所が引数ですよね?それならばスタックで入れた(ESP-4)は引数として扱われないのではないのでしょうか?度重なる質問ですいません。 -- ''Mogu'' SIZE(10){2006-08-30 (水) 06:53:05} -Moguさんへ。質問そのものがよく分からないのですが、「CALL命令もEIPのPUSHを伴います」とアドバイスしたら何かヒントになりますでしょうか? -- [[K]] SIZE(10){2006-08-30 (水) 21:57:11} -返答ありがとうございます。そのアドバイスですべて解決することができました。度重なる質問に答えてもらいありがとうございました。 -- ''Mogu'' SIZE(10){2006-08-30 (水) 22:49:49} -P439(第5版)のasm_hrb_apiで処理が終わりのときは、RETをしてcmd_appへ戻るって書いてありますが、どうしてRETをするだけでcmd_appへ戻るんでしょうか? -- ''Shiro'' SIZE(10){2006-08-30 (水) 23:32:51} -Shiroさんへ。本文およびソースリストにあるように、ESPの値をcmd_app呼び出し時の値に修正してからRETしているので、RET命令でcmd_appへ戻ることになります。 -- [[K]] SIZE(10){2006-09-01 (金) 20:12:14} -つまりこれは、cmd_appを呼び出したときに、CALLと同じでESPに元に戻る場所を記憶していて、RETでその値を参照して移動しているってことですか。わかりましたありがとうございます。 -- ''Shiro'' SIZE(10){2006-09-02 (土) 02:39:34} -もう一つ質問があるのですが、P430(第5版)に、「めんどうなスタックの切り替えを、CPUが自動的にやってくれるおかげです。」って書いてあるのですが、これは具体的にどの時に、どのようなことをしているのでしょうか? -- ''Shiro'' SIZE(10){2006-09-02 (土) 03:28:21} -Shiroさんへ。[[advance/CPU]]に書きましたので参考にしてください。 -- [[K]] SIZE(10){2006-09-02 (土) 12:06:49} -[[advance/CPU]]の内容を元にソースを眺めていたところ、OSモード中のスタックは全アプリで共用している気がするのですが…。 -- ''killer_elf'' SIZE(10){2006-09-02 (土) 16:07:50} -↑こちらの勘違いでした。コンソールとOS用のスタックが同じでも、アプリごとに別々のコンソールを生成しているので、重複しないようになっているようです。 -- ''killer_elf'' SIZE(10){2006-09-02 (土) 16:35:39} -P544(第5版)で、mmx2をsheet_slideのときに使用していますが、sht->vx0を使用しないのは、なぜなんでしょうか? -- ''Mogu'' SIZE(10){2006-09-02 (土) 21:15:04} -Moguさんへ。それはあまりよい質問とは思えません。mmx2の代わりにsht->vx0を使えばうまくいくのでは?と思うのでしたら、こんなところで質問などせずに、実際に書き換えて make run してみたらいいと思います。もしそれでうまくいけば、mmx2を使う理由なんてなかったということです。テスト改造で学べることは多く、それは質問して答えをもらったときの何倍もためになります。僕としてはそういう機会を読者の皆さんから奪いたくはないので、この質問にはお答えしませんし、Moguさんも自分の研究の結果として答えが分かっても、明確な回答を書かないでいてくれれば幸いです。 -- [[K]] SIZE(10){2006-09-03 (日) 00:44:28} -人に頼るような質問をして、すいませんでした。質問をするまえに、実際にプログラムを書き換えて、試してみてはいたんですが、その差がいまいち分からず、容易に質問してしまい、大変ご迷惑をおかけしました。 これからもそういう問題にぶつかると思いますが、自分で出来る限りの努力はしたいと思います。ご迷惑をおかけしてすいませんでした。-- ''Mogu'' SIZE(10){2006-09-03 (日) 01:47:22} -Moguさんへ。そうですか、違いに気づけませんでしたか・・・。では少しヒントを。マウスを非常にゆっくりと横に動かしていくと(たとえば1ドットずつの移動で、ウィンドウを画面の端から端まで移動させてみるとか)違いが体験できると思います。QEMU上よりも実機でやったほうが違いが分かりやすいかもしれません。 -- [[K]] SIZE(10){2006-09-03 (日) 10:14:23} -初めまして、私はハードを直接いじるようなプログラミングは、picやH8以外ではやったことなかったのですが、x86系の勉強になりました。質問なのですが、P.179のmemtest_subについてです。これって、pをvolatileで宣言するとうまく行くような気がするのですがダメなのでしょうか?自分でも試してみようかと思っているのですが、ちょっとトラブルがあって・・・・(^^; -- ''nye'' SIZE(10){2006-09-04 (月) 07:59:08} -nyeさんへ。その質問は既出でしたが今まで[[faq]]に反映できていなかったので見つけられなかったのだと思います。どうもすみません。先ほど更新しましたので、[[faq/c08-15]]をごらんください。 -- [[K]] SIZE(10){2006-09-04 (月) 14:02:33} -返信送れてすいません。わざわざ詳細な説明をありがとうございます。まだ完全には仕組みを理解することができませんでしたが、徐々に理解していきたいと思います。 -- ''Shiro'' SIZE(10){2006-09-05 (火) 00:41:41} -初版第四刷のp.69から70についての質問です。write_mem8という関数をアセンブラで作っていますが、MOV ECX,[ESP+4] MOV AL,[ESP+8]というところが分かりません。なぜ[ESP+4]にアドレスが入っていることが分かったのでしょうか?そしてなぜ、[ESP+8]にデータが入っていることが分かったのでしょうか?また、p.70に「C言語でwrite_mem8が使われると・・・そして、その時に指定された数字はメモリにメモしてありまして、それぞれ1番目のもの:[ESP+4] 2番目のもの:[ESP+8] 3番目のもの:[ESP+12] 4番目のもの:[ESP+16]とありますが、コレは1番目にVRAMのアドレス、2番目に15、3番目にまたVRAMのアドレス、4番目に15ということでしょうか?そして値が4増えていっているのは32ビットモードだからでしょうか? -- ''hatena'' SIZE(10){2006-09-05 (火) 03:12:24} -hatenaさんへ。どう答えたらいいのか悩ましい質問なのですが、簡潔に言えば、なぜ分かったのかというと、tolset内のコンパイラは自分で(=著者自身が)作ったコンパイラだからです。自分で作った以上、メモリのどこに格納されるような機械語になるかは当然分かっていたわけです(まあ他の人が作ったコンパイラもたいていは同じですが)。そして[ESP+4]と[ESP+8]についてはそのとおりですが、今回のwrite_mem8には3番目や4番目の数値はないので、[ESP+12]や[ESP+16]に書かれている値がどんなものかはわかりません。値が4ずつ増えるのは、そうなるようにコンパイラを作ってしまったからというだけの理由で、32bitモードかどうかは直接は関係ありません。 -- [[K]] SIZE(10){2006-09-05 (火) 19:35:53} -筆者の方から返答いただけるとは、感激です。なるほど、そういうものと理解して先に進めます。VRAMに値を書き込むという処理自体は理解できますので。 -- 名無しさん SIZE(10){2006-09-05 (火) 21:27:53} -このたびは特別のご支援にあずかり厚くお礼申し上げます。時節がら、ますますご自愛のほどお祈り申し上げます。 -- ''hatena'' SIZE(10){2006-09-05 (火) 21:33:01}
タイムスタンプを変更しない
* q_and_aの過去ログ(0005) -(by [[K]], 2006.09.08) -リンク: --[[q_and_a]]へ *** ログ -初版P59の6節ブートセクタからOS本体を実行してみるから質問です。「ブートセクタの先頭がメモリの0x8000番地にくるような感じディスクをメモリに読み込み終わっていますので」とありますが、P42を見ますと、ブートセクタは7c00から読み込まれると書いてあります。この0x8000が読み込みスタートというのはどうやって決まったのですか? -- ''ichi_fuji'' SIZE(10){2006-07-01 (土) 15:04:54} -実は、0x8000番地に"くるような感じで"と有りますように、0x8000にはp59ページの段階ではデータは読み込まれていない(はず)です。FDの2セクタ目からのデータが0x8200番地から配置されてる状況です。「どうして0x8200からなのか?」という疑問は、p53を読んだら解決するかもしれません。 -- ''uchan'' SIZE(10){2006-07-01 (土) 16:47:46} -ありがとうございます。なるほど・・・。p53を見ると「0x8000〜にはあとでブートセクタの内容を入れようかな〜」と書いてありますが、「あとで」と書いてあるように、もうちょっと先を読んだら、そこの説明が書いてあるのでしょうか・・・。すいません。もうちょっと読んでみます。 -- ''ichi_fuji'' SIZE(10){2006-07-02 (日) 00:59:10} -やっぱりわかりませーん。上記の続き(p59)ですが、0x8000には何のデータも読み込まれていないんですよね?でもharibote.sysの中身を読み込みにいくとき、ブートセクタの先頭が0x8000に読み込まれるということを前提で、0x8000+0x4200と、haribote.sysのアドレスを計算してるじゃないですか・・・。ブートセクタが0x8000に読み込まれないと、この計算はおかしいと思うのですが・・・・。申し訳ありませんが、どなたかご回答よろしくお願いします。 -- ''ichi_fuji'' SIZE(10){2006-07-02 (日) 12:26:03} -ディスク内容を0x8000から収納しています。ipl.binは、その先頭から512Byteの0x8000~0x81ffに入ります。ということは、haribote.imgの0x0000~0x05ffにあたると思います。ということで、ずーーとみていくと、0x4200にharibote.sysの内容がありますよね。それは、0xc200に書き込まれているのです。なぜなら、0x8000から書き込み始めているからです。長くなりましたが、わかりましたでしょうか?間違えていたらごめんなさい。図を置いておきます。 |メモリー上の番地|IMG上の番地|詳細| |0x8000〜0x81ff|0x0000〜0x01ff|IPL(512Byte分)| |...|...|...| |0xc200〜0xc203|0x4200〜0x4203|Haribote.sys(3Byte分)| わかりましたか? -- ''Clover'' SIZE(10){2006-07-02 (日) 12:59:55} -上の図が間違えていたら修正してもいいです。 -- ''Clover'' SIZE(10){2006-07-02 (日) 13:03:57} -PCを起動するとシステムによりブートセクタの内容がメモリの0x7c00〜0x7dff番地に読み込まれます。そして、読み込んだブートセクタが実行されます。このブートセクタは48ページ〜57ページにかけて説明してあるとおり、ブートセクタの次のセクタである(C0-H0-S2)から10シリンダほど先のセクタ(C9-H1-S18)までを0x8200〜0x34fff番地に読み込むようにプログラムしたのです。ですから、ブートセクタ(C0-H0-S1)の内容を再び0x8000〜0x81ff番地に読み込む必要はないのです。 -- 名無しさん SIZE(10){2006-07-02 (日) 16:27:03} -みなさん、本当にありがとうございます!計算の仕方はよくわかりました!ただ、ブートセクタはメモリ上のどこに読み込まれるのかわかりません。私は、Cloverさんの言われる「ipl.bin」 = ブートセクタの内容と理解しています。そうすると、ブートセクタは0x7c00と0x8000どちらに読み込まれるのですか?何度もすいませんがよろしくお願いしますm(_ _)m -- ''ichi_fuji'' SIZE(10){2006-07-03 (月) 09:43:21} -ブートセクタは、PCの電源を入れると自動で「0x7c00」に読み込まれます。そして、なぜ「ブートセクタ=0x8000」という話が出てくるか。ブートセクタの中の何らかのプログラム(またはデータ)を、OSを作っていくうちに使いたくなるかもしれません。だから、512バイト分を0x7c00から0x8000に丸ごとコピーするのです。(0x7c00にずっと置いておいても良いではないかと言うと、それは確かにそうですが、0x8000からの方が計算が楽と言うことで。) -- ''uchan'' SIZE(10){2006-07-03 (月) 13:03:13} -なるほどー!コピーしてたんですか!それなら、計算も納得です。・・・ということは、0x7c00から0x8000にコピーするような記述がソース(ipl.nas)に書いてあるのですか?ソースを確認する前に質問してすいません・・・m(_ _)m(今、ソース(ipl.nas)が手元にないので・・・) -- ''ichi_fuji'' SIZE(10){2006-07-03 (月) 14:29:25} -ipl.nasを確認しました・・・・。すいません。私のスキルではコピーするような内容を見つけることはできませんでした。BIOSの方にコピーするような内容が書かれているのでしょうか? -- ''ichi_fuji'' SIZE(10){2006-07-04 (火) 18:28:32} -僕からのアドバイスとしては、まずは8日目まで読みきることをおすすめします(わからなくてもとりあえず先に進むというのがこの本のおすすめの読み方でもあります)。それで分からなければまた聞けばいいのではないかと思います。 -- [[K]] SIZE(10){2006-07-04 (火) 19:31:51} -ありがとうございます。ちょっと先走りすぎてたかもしれませんね。ご回答とおり、もう少し読んでみます。 -- ''ichi_fuji'' SIZE(10){2006-07-05 (水) 08:46:10} -tokiwa 2006-05-01 (月) 08:48:40 さんと同じ現象が発生します。その後、何かわかりましたでしょうか? -- ''kumi'' SIZE(10){2006-07-17 (月) 01:55:22} -(ここでいいのかな?)はじめまして。ブートセクターに付いての質問です。make installして本体(画面真っ黒にするプログラム)を入れたものを実機(IBM Thinkpad560E)でブートしてもエラーだけが起こって読み込むことができません。文字は出力できます。どうしたらいいでしょうか。(MS-DOSは起動できる)私は中3ですが中3にもなって文章がまとまってなくてすいません。 -- ''Erail'' SIZE(10){2006-07-18 (火) 16:22:35} -Erailさんへ。質問はわかりましたが、どこの章のサンプルでエラーが起こったのですか?文章がまとまんなくても、どこのサンプルなのかがわかれば、答えられます。また、改造しているのであれば、そのサンプルをCDからコピーしてでやってみては?たまにFDから読み取れない場合はありますよ。 -- ''I'' SIZE(10){2006-07-18 (火) 17:01:38} -あ、ちゃんと動きました。すいませんでした。 ただ、ドライブが回りっぱなしでした。(笑) -- ''Erail'' SIZE(10){2006-07-18 (火) 19:07:55} -どうやらCLが0になって読めないところをさしていたからのようでした。ここのミスに気が付きませんでした。 -- ''Erail'' SIZE(10){2006-07-18 (火) 19:15:13} -初版の第6刷のp.95周辺の、GUI画面(タスクバー??、デスクトップ??)などについて質問です。スタートメニューの場所、時計の場所の上に、画像とか文字を載せたいのですが、どのファイルのどの部分をいじれば良いでしょうか? -- ''Masanori'' SIZE(10){2006-08-02 (水) 09:00:13} -初版第六版の678Pで、CDRecordフロントエンドのページのアドレスが載っているのですが、アドレスバーに入力しても、ページがありません。Yahooで検索したところ、アドレスは「http://mouneru.web.fc2.com/cdrecord_fe/cdr_fe.htm」が正しいと思います。どうなんでしょうか? -- ''Mac'' SIZE(10){2006-08-02 (水) 11:54:31} -Masanoriさんへ。文字は、とりあえず100P周辺の「とにかく文字を出したい(harib02d)」まで読み進めたらどうですか? -- ''Mac'' SIZE(10){2006-08-02 (水) 14:47:42} -CDRecordフロントエンドのページの更新履歴に"バージョン情報で表示されるWEBサイトのリンク先変更"とあるので、移転したのだと思います。 -- ''M59'' SIZE(10){2006-08-02 (水) 16:05:11} -Macさん、M59さん、ありがとうございます。次の増刷時には修正します。それと、これからその手の情報を扱うページを準備します。 -- [[K]] SIZE(10){2006-08-02 (水) 19:23:09} -初版第六版で、149Pに載っている「fifo.cのfifo8_put」の13行目くらいに"if (fifo->p == fifo->size) {"と書いてあります。しかし、CD-ROM内のharib04eのfifo.cを見ると、"if (fifo->p == size) {"と書いてあります。本の通りにすると動くのですが、CD-ROMのサンプルだとMakeでエラーが出ます。これは、CD-ROMのHarib04eの作成ミスなのですか? -- ''mac'' SIZE(10){2006-08-07 (月) 12:44:20} -僕が持ってるのは初版第1刷なのですが、CD-ROM内の該当箇所(fifo.cの29行目)を見てみると"if (fifo->p == fifo->size) {"となっています。ということは、(推測ですが)第1刷から第6刷にかけて、CD-ROMが変更されちゃったのかな? -- [[uchan]] SIZE(10){2006-08-07 (月) 17:21:38} -ちなみにharib04eをCDからコピーしてそのままmake runで正常に起動します(QEMU上)。 -- [[uchan]] SIZE(10){2006-08-07 (月) 17:23:41} -macさんへ。出版社に提出した初版第6刷のデータを確認しましたが、CD-ROM内のharib04eのfifo.cの29行目は、正しく "if (fifo->p == fifo->size) {" になっていました。macさんの誤解か、もしくは違うページの問題なのではないでしょうか?・・・それとも何か事故があってCD-ROMがおかしいものがあるのかもしれません。もし他にも同じ症状のかたがおられましたらご報告ください。 -- [[K]] SIZE(10){2006-08-07 (月) 20:11:00} -すいません。自分のミスでした。自分は、CD-ROMからコピーして使っていて、自分で本を見ながら作っているOSの間違いを探しているときに、修正するファイルを間違えてしまいました。お騒がせしてすいません。 -- ''Mac'' SIZE(10){2006-08-07 (月) 21:57:55} -Macさんへ、アドバイスありがとうございました。じっくりと読んでみます。 -- ''Masanori'' SIZE(10){2006-08-11 (金) 16:26:57} -初版第6版を読んでいます。まだ半分くらいしか読んでいないのですが、OSの終了の仕方がどこに書いてあるのかがわかりません。どなたか教えていただけませんか?電源ボタンを押して終了しなければならないのでしょうか? -- ''Kino'' SIZE(10){2006-08-15 (火) 20:10:20} -すみません。上記質問の者です。他のスレッドに書いてあったのを発見いたしました。ご迷惑をおかけいたしました。 -- ''Kino'' SIZE(10){2006-08-15 (火) 22:03:12} -P186のnaskfunc.nasのmemtest_subでstartとendの値を受け取るときに[ESP+12+4]と[ESP+12+8]となっていますが、P70をみると、startを受け取るときは[ESP+4]でendを受け取るときは[ESP+8]なんではないんでしょうか?[ESP+12+4]の+12は何なんでしょうか? -- ''Mogu'' SIZE(10){2006-08-20 (日) 19:52:51} -Moguさんへ。簡単に言うと「startとendを受け取る前にPUSHを3回実行しているから」です。たとえば「PUSH EDI」とすると、ESPから4が引かれます。それが3回なので、3×4で合計「マイナス12」となります。これを相殺するため「+12」としています。 -- [[uchan]] SIZE(10){2006-08-20 (日) 19:59:51} -お返事ありがとうございます。なるほど、そーゆーわけだったんですか、分かりやすい説明のおかげで理解することができました!ありがとうございます! それとは別にもう一つ質問があるのですが、IDTの設定で(int)asm_inthandler21とやっている場所がありますが、これはどうゆう意味なんでしょう?関数が置いてある番地をint型で返すってことなんでしょうか? -- ''Mogu'' SIZE(10){2006-08-24 (木) 22:43:23} -二版P18の!cons_nt.batを実行してみるところから質問です。 実行すると、{'cmd.exe' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。}とでて、コンソールが起動しません。何故でしょうか? OSはwindowsXP です。-- ''SYATIHOKO'' SIZE(10){2006-08-26 (土) 18:20:54} -Moguさんへ。「関数が置いてある番地をint型で返すってことなんでしょうか?」はいそのとおりです。 -- [[K]] SIZE(10){2006-08-26 (土) 22:59:17} -SYATIHOKOさんへ。それはおそらくWindowsXPを独自にカスタマイズしたせいではないかと思われます。残念ながらどうしたらよいかは分かりません。 -- ''K'' SIZE(10){2006-08-26 (土) 23:01:32} -Kさん返答ありがとうございました!! -- ''Mogu'' SIZE(10){2006-08-27 (日) 14:16:06} -PUSHをしてからCALLで関数を呼び出すプログラムで、PUSHでスタックに入れたものが引数になる仕組みが良くわかりません。PUSHをすると(ESP-4)にデータが入るわけですが、そこから((ESP-4)+4)つまり(ESP)の場所が引数ですよね?それならばスタックで入れた(ESP-4)は引数として扱われないのではないのでしょうか?度重なる質問ですいません。 -- ''Mogu'' SIZE(10){2006-08-30 (水) 06:53:05} -Moguさんへ。質問そのものがよく分からないのですが、「CALL命令もEIPのPUSHを伴います」とアドバイスしたら何かヒントになりますでしょうか? -- [[K]] SIZE(10){2006-08-30 (水) 21:57:11} -返答ありがとうございます。そのアドバイスですべて解決することができました。度重なる質問に答えてもらいありがとうございました。 -- ''Mogu'' SIZE(10){2006-08-30 (水) 22:49:49} -P439(第5版)のasm_hrb_apiで処理が終わりのときは、RETをしてcmd_appへ戻るって書いてありますが、どうしてRETをするだけでcmd_appへ戻るんでしょうか? -- ''Shiro'' SIZE(10){2006-08-30 (水) 23:32:51} -Shiroさんへ。本文およびソースリストにあるように、ESPの値をcmd_app呼び出し時の値に修正してからRETしているので、RET命令でcmd_appへ戻ることになります。 -- [[K]] SIZE(10){2006-09-01 (金) 20:12:14} -つまりこれは、cmd_appを呼び出したときに、CALLと同じでESPに元に戻る場所を記憶していて、RETでその値を参照して移動しているってことですか。わかりましたありがとうございます。 -- ''Shiro'' SIZE(10){2006-09-02 (土) 02:39:34} -もう一つ質問があるのですが、P430(第5版)に、「めんどうなスタックの切り替えを、CPUが自動的にやってくれるおかげです。」って書いてあるのですが、これは具体的にどの時に、どのようなことをしているのでしょうか? -- ''Shiro'' SIZE(10){2006-09-02 (土) 03:28:21} -Shiroさんへ。[[advance/CPU]]に書きましたので参考にしてください。 -- [[K]] SIZE(10){2006-09-02 (土) 12:06:49} -[[advance/CPU]]の内容を元にソースを眺めていたところ、OSモード中のスタックは全アプリで共用している気がするのですが…。 -- ''killer_elf'' SIZE(10){2006-09-02 (土) 16:07:50} -↑こちらの勘違いでした。コンソールとOS用のスタックが同じでも、アプリごとに別々のコンソールを生成しているので、重複しないようになっているようです。 -- ''killer_elf'' SIZE(10){2006-09-02 (土) 16:35:39} -P544(第5版)で、mmx2をsheet_slideのときに使用していますが、sht->vx0を使用しないのは、なぜなんでしょうか? -- ''Mogu'' SIZE(10){2006-09-02 (土) 21:15:04} -Moguさんへ。それはあまりよい質問とは思えません。mmx2の代わりにsht->vx0を使えばうまくいくのでは?と思うのでしたら、こんなところで質問などせずに、実際に書き換えて make run してみたらいいと思います。もしそれでうまくいけば、mmx2を使う理由なんてなかったということです。テスト改造で学べることは多く、それは質問して答えをもらったときの何倍もためになります。僕としてはそういう機会を読者の皆さんから奪いたくはないので、この質問にはお答えしませんし、Moguさんも自分の研究の結果として答えが分かっても、明確な回答を書かないでいてくれれば幸いです。 -- [[K]] SIZE(10){2006-09-03 (日) 00:44:28} -人に頼るような質問をして、すいませんでした。質問をするまえに、実際にプログラムを書き換えて、試してみてはいたんですが、その差がいまいち分からず、容易に質問してしまい、大変ご迷惑をおかけしました。 これからもそういう問題にぶつかると思いますが、自分で出来る限りの努力はしたいと思います。ご迷惑をおかけしてすいませんでした。-- ''Mogu'' SIZE(10){2006-09-03 (日) 01:47:22} -Moguさんへ。そうですか、違いに気づけませんでしたか・・・。では少しヒントを。マウスを非常にゆっくりと横に動かしていくと(たとえば1ドットずつの移動で、ウィンドウを画面の端から端まで移動させてみるとか)違いが体験できると思います。QEMU上よりも実機でやったほうが違いが分かりやすいかもしれません。 -- [[K]] SIZE(10){2006-09-03 (日) 10:14:23} -初めまして、私はハードを直接いじるようなプログラミングは、picやH8以外ではやったことなかったのですが、x86系の勉強になりました。質問なのですが、P.179のmemtest_subについてです。これって、pをvolatileで宣言するとうまく行くような気がするのですがダメなのでしょうか?自分でも試してみようかと思っているのですが、ちょっとトラブルがあって・・・・(^^; -- ''nye'' SIZE(10){2006-09-04 (月) 07:59:08} -nyeさんへ。その質問は既出でしたが今まで[[faq]]に反映できていなかったので見つけられなかったのだと思います。どうもすみません。先ほど更新しましたので、[[faq/c08-15]]をごらんください。 -- [[K]] SIZE(10){2006-09-04 (月) 14:02:33} -返信送れてすいません。わざわざ詳細な説明をありがとうございます。まだ完全には仕組みを理解することができませんでしたが、徐々に理解していきたいと思います。 -- ''Shiro'' SIZE(10){2006-09-05 (火) 00:41:41} -初版第四刷のp.69から70についての質問です。write_mem8という関数をアセンブラで作っていますが、MOV ECX,[ESP+4] MOV AL,[ESP+8]というところが分かりません。なぜ[ESP+4]にアドレスが入っていることが分かったのでしょうか?そしてなぜ、[ESP+8]にデータが入っていることが分かったのでしょうか?また、p.70に「C言語でwrite_mem8が使われると・・・そして、その時に指定された数字はメモリにメモしてありまして、それぞれ1番目のもの:[ESP+4] 2番目のもの:[ESP+8] 3番目のもの:[ESP+12] 4番目のもの:[ESP+16]とありますが、コレは1番目にVRAMのアドレス、2番目に15、3番目にまたVRAMのアドレス、4番目に15ということでしょうか?そして値が4増えていっているのは32ビットモードだからでしょうか? -- ''hatena'' SIZE(10){2006-09-05 (火) 03:12:24} -hatenaさんへ。どう答えたらいいのか悩ましい質問なのですが、簡潔に言えば、なぜ分かったのかというと、tolset内のコンパイラは自分で(=著者自身が)作ったコンパイラだからです。自分で作った以上、メモリのどこに格納されるような機械語になるかは当然分かっていたわけです(まあ他の人が作ったコンパイラもたいていは同じですが)。そして[ESP+4]と[ESP+8]についてはそのとおりですが、今回のwrite_mem8には3番目や4番目の数値はないので、[ESP+12]や[ESP+16]に書かれている値がどんなものかはわかりません。値が4ずつ増えるのは、そうなるようにコンパイラを作ってしまったからというだけの理由で、32bitモードかどうかは直接は関係ありません。 -- [[K]] SIZE(10){2006-09-05 (火) 19:35:53} -筆者の方から返答いただけるとは、感激です。なるほど、そういうものと理解して先に進めます。VRAMに値を書き込むという処理自体は理解できますので。 -- 名無しさん SIZE(10){2006-09-05 (火) 21:27:53} -このたびは特別のご支援にあずかり厚くお礼申し上げます。時節がら、ますますご自愛のほどお祈り申し上げます。 -- ''hatena'' SIZE(10){2006-09-05 (火) 21:33:01}
テキスト整形のルールを表示する