本の内容に関する質問

  • (by K, 2006.02.18)

  • 過去のQ&Aのまとめがありますので、まずはそこでチェックしましょう! →faq
  • 書き込むに当たっては、このwikiサイトのルールもよく確認してください。 → TOP/ルール
  • 質問するときは、 第1版の第1刷のp.123の○×についてです みたいに、できるだけ質問個所をはっきりさせてください(ページが特定できないような質問であればそのときはページを書かなくてもいいです)。
  • その上で何がわからなくて、何がわかるのかも書いてください。
  • 回答はK以外でもOKです。というかKは忙しくて回答が遅れたりするので、誰か読者の中で分かった人がいれば、その人が代わりに答えてくれたほうが助かります。
  • 「プログラムのこの部分はこうしたほうがいい気がする」、「なぜこうしないのですか?」みたいな質問はできるだけしないようにしましょう。そう思ったのなら、こんなところで質問なんかしてないで、そのように改造して make run して、どうなるか観察してみるべきです(そういう余地をあえて残し、説明を簡単にした個所がいくつかあったはずです)。そのほうが格段に力がつきますよ。そしてもしうまくいったらあなたの考えは正しいのです。
  • うまく動かない!助けて!系の質問をする前に、一度自分の入力したファイルをどこか別のところに保存しておいて、全部をCD-ROMの中のファイルに入れ替えてみてください。それで動くようなら、それはどこかで入力ミスがあったということです。ファイルを比較したり、一部だけ自分の入力したファイルと入れ替えてみたりして、自力でミスを探しましょう。そのためにCD-ROMにプログラムが入っているのですから。そしてCD-ROMのものをそのまま使ってもうまくいかない場合だけ質問するようにしてください(あなたの入力ミスについては著者も他の皆さんも答えようがありません)。・・・でも、自分で入力してみようというその心がけはとてもいいです。ミスが発見できたら、ぜひそこを手直しして、今後もできる限り自分で入力してがんばってください。きっと理解が深まります。
    • そういう人を支援するためのページもあります。→guide (入力ミスの発見には役立ちませんが)
  • 本の内容の質問ではない場合は、impressionsを使ってください。


  • CD-ROMのOSが動かないってか画面が真っ黒になってとまってしまいます。IPLは機能しているようですがねぇ。スクリーンのリフレッシュレートはよこ56.6kHz/縦70.0Hzです。これだけでは情報不足かな...。 -- Triangle_Ld. 2009-06-10 (水) 16:45:49
  • 30日目の状態でのCD起動に失敗することは上記の書き込みでわかったのですが、では動かなくなるのは何日目からなのかが知りたいです。 -- K 2009-06-11 (木) 18:19:39
  • 何日目からかはわかりませんが(CDのharib27の最後をそのままFDへやった)、おそらくIRQ-07をやめたころからだと思います。 -- Triangle_Ld. 2009-06-18 (木) 15:43:57
  • 10日目P.205のharib07bについて質問させて下さい。putfonts8_asc(buf_back, binfo->scrnx, 0, 0, COL8_FFFFFF, s)について、第一引数がbinfo->vramでなくbuf_backになっているのはなぜですか?vramはメモリの0xa0000番地からだと思っていたのですが、buf_backだと0x4000の値になっていますが、それでもちゃんと描画出来ているのがなぜか分かりません。どうぞご教授よろしくお願い致します。 -- kenken 2009-07-12 (日) 04:11:43
  • buf_backはsht_backの描画用変数です。て言ってもわかりづらいですよね。何行か前でsheet_setbuf関数を使ってsht_backとbuf_backを関連付けたのですが、buf_backは番地変数で、buf_backを指定すると0x4000番地、つまりsht_back->bufの番地と同じで、そこに書き込まれ、sheet_refreshの時にvramへ反映されるのです。 -- Triangle_Ld. 2009-07-13 (月) 13:43:55
  • 簡単に言うと、buf_backはsht_back->bufと完全に同じ意味で、sheet_refreshではそれをbinfo->vram(0x000a0000番地)に反映させている(描画している)ということです。 -- Triangle_Ld. 2009-07-13 (月) 13:46:04
  • なるほど、sheet_refreshの中でvramに反映しているのが分かりました!Triangle_Ld.様どうもありがとうございました。 -- kenken 2009-07-13 (月) 22:43:56
  • 初です。画面モードについての質問なんですが、http://community.osdev.info/?VESAの0x118を使いたいなと思って一度asmhead.nasの画面モードのとこだけを変更したらうまくいかず悩んでいます(QEMUで)。なにか、別のところに変更が必要なのでしょうか?ご返答お願いします。 -- Cats 2009-07-19 (日) 09:02:23
  • 上に追加です。おもな改造としては、グラフィック(マウスカーソル、ウィンドウの色の変更)と、フルカラー化、ファイルシステムの変更、アプリの削減ぐらいです。 -- Cats 2009-07-19 (日) 09:10:50
  • Catsさんへ。それは本の内容を超える質問(自分の改造による問題)ですので、上記に明記されている通りimpressionsで質問してください。 -- K 2009-07-19 (日) 19:24:51
  • 初心者です。二日目のhelloos.nasが開けないのですがどうやったら開けますか? -- ぽち 2009-08-02 (日) 01:59:21
  • Windowsをお使いでしたらメモ帳を開いてその中にファイルのアイコンをドラッグしてみてください。 -- 名無しさん 2009-08-02 (日) 09:32:41
  • ありがとうございます。困ったことがあったらまたお願いします。 -- ぽち 2009-08-02 (日) 23:59:44
  • OS本体を書き始めてみるでharibote.nasはどうアセンブルするんですか -- ぽち 2009-08-25 (火) 20:15:31
  • nasならNASKで、cならcc1で、askならcpp0でアセンブル出来ます。c,askの場合はこれに加えて少し作業が必要(askは本の範囲を超えています)。 -- Triangle_Ld. 2009-09-02 (水) 18:57:25
  • 追記&訂正:c,askはアセンブルじゃなくてコンパイルです。実行ファイルになるまでのツールの数はNASKが圧倒的に少ないです(nasはNASK,obj2bim,bim2hrbだけ。cはこのほかにgas2naskがはいる。askは範囲を超えているので省略)。 -- Triangle Ld. 2009-09-04 (金) 17:00:33
  • できたOSをPCの内臓HDにインストールするにはどうすればよいのでしょうか。よろしくお願いします。 -- アクエリアス 2009-11-06 (金) 14:33:18
  • すいません。過去のログにHD起動のことが書いてありましたのでそちらを参考にします。 -- アクエリアス 2009-11-06 (金) 14:39:16
  • たびたびすいません。過去のログはUSBメモリについての内容で、内臓のHDに、インストールする場合ではありませんでした。どなたか、HDに、インストールがうまくいった方がおられましたら、ご教授願います。よろしくお願いいたします。 -- アクエリアス 2009-11-06 (金) 17:41:58
  • アクエリアスさんへ。HDDへのインストールは、本の内容を超えた質問なので、上記の説明をよく読んでimpressionsでお願いいたします。 -- K 2009-11-06 (金) 22:12:15
  • 「Linuxでのやり方はサポートページにまとめておきます。」って本誌注釈にあったのですが...Linux用のバイナリエディタとかって本HPのどこかからDLできますか? -- みやぽん 2009-11-13 (金) 18:39:40
  • ええと・・・すみません、「わこうメモ」(Linux/wako_memo)には書いていないようです。どなたかLinuxに詳しい方がおられましたら、ぜひ教えてください。 -- K 2009-11-13 (金) 22:52:55
  • Linuxにはあまり詳しくないのですが、hiというものが見つかりました→http://www.tatsuyoshi.net/toyota/hi/ vi系の操作が苦手ならばEmacsでもHexlモードというもので編集できるようです→http://emacs-21.ki.nu/application/hexl.html -- かの 2009-11-15 (日) 19:05:04
  • かのさん、どうもありがとうございます。 -- K 2009-11-18 (水) 08:12:28
  • ありがとうございます。hiでやってみます。(また、いろいろお聞きするかもしれませんので、よろしくお願いいたします) -- みやぽん 2009-11-21 (土) 00:19:46
  • Kさんへ質問なのですが、初版の第9刷のP.139〜P.142の「割り込み処理は手早く」という内容で出てくるbootpack.cのプログラムの処理手順を見る限りでは2バイトのキーコードが送られても、取りこぼしがおきるようには思えないのですが,どうしてでしょうか? -- hanamizu 2009-11-24 (火) 00:52:20
  • ご質問はありがたいですが、それは本の内容を理解していれば僕でなくても答えられる質問のように思います。ですから、答えられる方は是非お返事してあげてください。そしていたずらに僕を指名しないでください(詳しくは、トップページの「2006年10月からの方針」を見てください)。 -- K 2009-11-24 (火) 02:41:53
  • hanamizuさんの質問に分かる範囲で答えてみます。厳密に言えば、うまく行く時もあるかもしれないし、取りこぼす時もあるかもしれない、といったところでしょうか。キーボード回路からの2バイト目の送信が、十分遅ければ、うまく行くかもしれません。(続く...) -- らすかる 2009-11-24 (火) 03:55:28
  • 2バイト目の送信による割り込みが発生する前に、bootback.cのループ内にある割り込み禁止に辿り着けば、うまく行くと思います。ところが、ほとんど連続的に2バイト目の割り込みが発生した場合は、バッファの内容が取り出されていない(つまり、keybuf.flag==1)ので、2バイト目が捨てられる事になります。(続く...) -- 名無しさん 2009-11-24 (火) 04:07:42
  • キーボード回路が、どのくらいの速さで2バイト目を送信してくるかは分かりませんが、結果を踏まえて考えると、ほぼ連続的であると言えそうです。(もう少し続く..) -- らすかる 2009-11-24 (火) 04:30:32
  • 連続的であると考えて、FIFOバッファを導入したところ、うまく動いたようなので、めでたしめでたし、となるわけですね。 -- らすかる 2009-11-24 (火) 04:36:09
  • kさん、らすかるさん回答ありがとうございます。またq&aのログの0006に同じ内容のログがありましたので、参考にさせていただきました。それらを見て「1バイト目の割り込み受け付けは、HariMainの一部(p.141)の4行目にあるio_stihlt();からio_cli();へ戻る間で起こる。即座に2バイト目の割り込みがHariMainの中でio_cli();に戻る前に起こり、フラグが0に戻っていないので2バイト目が取りこぼされる。」と考えました。どうでしょうか? -- hanamizu 2009-11-25 (水) 11:20:38
  • hanamizuさんの考えで、ほぼ正解だと思います。少しだけ細かい補足を致しますと、io_stihlt関数の中身は、割り込みを禁止してHLTするといった、複数の命令から構成されています。また、関数呼び出しの前後でも、いくつかの命令を実行しています。何が言いたいかというと、Cの関数単位で動作を説明すれば、hanamizuさんの説明のようになるかと思いますが、厳密に言うと、各関数も複数の命令から構成されており、io_stihlt関数の中でも、io_cli関数の中でも、割り込みが発生する可能性はあるという事です。(続く... ) -- らすかる 2009-11-25 (水) 19:17:46
  • ですから「io_stihlt();からio_cli();へ戻る間で起こる」の点については、むしろ、この間で割り込みが発生する可能性は低く(勿論、JMP命令の前後で発生する場合もあると思いますが)、恐らくはHLT中に発生する可能性が一番高いように思います。つまり、io_stihlt関数の中という事になります。(続く... ) -- らすかる 2009-11-25 (水) 19:18:22
  • 割り込みは、CLI命令の直後から禁止され、STI命令の直後から有効になります。CLI命令やSTI命令は、結局のところ、フラグレジスタの割り込みフラグを設定しているだけですので、同等の処理を行えば、同等の効果が得られます。INT命令の処理の中には、CLI同等の処理が含まれ、IRET命令の処理の中には、STI同等の処理が含まれます。(続く... ) -- らすかる 2009-11-25 (水) 19:18:54
  • 割り込み禁止と言っても、割り込みコントローラが停止しているわけではありませんので、次の割り込み要因があれば、割り込み可能になるのを、虎視眈々と待ち構えているわけです。(続く... ) -- らすかる 2009-11-25 (水) 19:19:49
  • inthandler21関数内において、受付完了(io_out8(PIC0_OCW2, 0x61))を発行した時点で、割り込みコントローラの方は、次の割り込みに備える事が可能になり、恐らく、入力データ取得(io_in8(PORT_KEYDAT))の際に、2バイト目の入力がある事を、キーボードコントローラが割り込みコントローラへ通知するでしょう。(続く... ) -- らすかる 2009-11-25 (水) 19:20:15
  • そういうわけで、既に割り込みコントローラの方は、てぐすねひいて待ち構えている状態ですので、IRET命令により割り込み可能になった直後に、即座に2バイト目の割り込みが発生する事になります。(続く... ) -- らすかる 2009-11-25 (水) 19:21:01
  • ですから「io_cli();に戻る前」については、たて続けに割り込みが発生している場合もあるので、必ずしもHariMainに戻ってくるとは限らず、よって、HariMain側の処理が一歩も前に進めない事も有り得ます。(続く... ) -- らすかる 2009-11-25 (水) 19:21:26
  • このように、割り込み処理は、場合によっては通常処理を中断し続けてしまう事もあるので、「なるべく早く」が大事になりますし、また、どこで中断されても良いような考慮が必要になるというわけです。(どうしても中断されたくない箇所では、割り込みを禁止する事になります) -- らすかる 2009-11-25 (水) 19:21:49
  • らすかるさん、とてもよい説明をどうもありがとうございます。 -- K 2009-11-25 (水) 20:37:59
  • 少しでもお役に立てたのなら幸いです。(^^v 比べ物にならない位の物を、私は、Kさんから頂きましたので... -- らすかる 2009-11-25 (水) 20:51:54
  • 1日目のasm.batが"有効なWin32アプリケーションではありません"と出てアセンブラ体験ができないです。32bit Vistaです -- HillBard 2009-11-27 (金) 17:52:37
  • 口うるさいようですが、まず、一度、ご自身で、どのような聞き方をされたら答え易いと思うか、考えてみて下さい。ご自身で、ご自身の質問に答えるつもりで考えて頂ければ、もう少し、工夫の余地があるように思います。(続く... ) -- らすかる 2009-11-27 (金) 23:52:12
  • OSASKコミュニティが意地悪をしようとしているわけではなく、基本的には、出来る限り、皆さんの質問にお答えしようと考えていると思います。(続く... ) -- らすかる 2009-11-27 (金) 23:52:32
  • 今回の質問に関して、なるべく答えようと思い、まず、僕が調べた事は、一日目のどこにasm.batがあるかです。一日目の章は、手元の版ですと、P.14〜P28の14ページあります。当たりをつけて探してみましたが、ソースと共に掲載されているバッチファイルは、run.batとinstall.batのみでした。(続く... ) -- らすかる 2009-11-27 (金) 23:52:47
  • 一瞬、asm.batと書いてあるけど、間違いなんじゃないかな?とも思いましたが、もう一度、本文を良く読んでみると、P.25の5行目から説明がありました。あぁ、これの事か、と思いましたが、この時点で、気持ちが折れかけました。(続く... ) -- らすかる 2009-11-27 (金) 23:53:00
  • この部分の説明によれば、「!consで開いたプロンプトで「asm」と入れるだけで、helloos.imgが生成されます。」とあります。Vistaと言えども、問題なく動いていたコマンドをバッチファイルにしただけで、動かなくなる事はないんじゃないかなぁ... と。(続く... ) -- らすかる 2009-11-27 (金) 23:53:15
  • asm.batは、CDの内容をコピーした物を使ったのかな?コピーの際に、ファイルが壊れたのかな?それとも、Vista固有の問題なのかな?色々と可能性は考えられるわけですけれど、あくまで、僕の推測に過ぎません。(続く... ) -- らすかる 2009-11-27 (金) 23:53:27
  • この辺で、僕は、気持ちが折れてしまい、それ以上、再現の努力をする気力がなくなってしまいました。そもそも、手元の環境はXPだし、Vista固有の問題であれば、誰かが答えてくれるのを期待するしかないかなぁ... と。(続く... ) -- らすかる 2009-11-27 (金) 23:53:51
  • このように、答えようと思っても、逆に、不確かな返答しか出来なさそうなので、結局、答えるのをやめてしまう場合もあると思います。(続く... ) -- らすかる 2009-11-27 (金) 23:54:25
  • そこで、Kさんが、答えを得易い質問の仕方を、ページの冒頭に用意したのだと思います。つまり、これらのポイントは、回答者の為と言うよりは、むしろ、質問者が答えを得られるますようにと、まとめられた物だと思うのです。(続く... ) -- らすかる 2009-11-27 (金) 23:54:39
  • そういうわけで、もう一度、冒頭の内容をよく読んで頂いて、質問をし直して頂けますでしょうか?(続く... ) -- らすかる 2009-11-27 (金) 23:55:03
  • HillBardさんの問題が解決出来るよう、僕もお手伝いしたいと思いますので、もう少し詳細な情報を教えて頂けますと幸いに思います。 -- らすかる 2009-11-27 (金) 23:55:17
  • うーん、もしかしたら、エクスプローラの設定が「拡張子を表示しない」になっていて、それで「asm.bat.txt」が「asm.bat」と表示されている・・・なんてことかな?違ったらごめんなさい。・・・とりあえず、CD-ROMの中にもasm.batは用意しておいたと思うので、それをコピーして使ってもうまく行かないのかどうかを確認するところから始めてみるといいかもしれません。 -- K 2009-11-28 (土) 00:48:31
  • らすかるさんKさんありがとうございます。簡潔にまとめたつもりだったのですが思っていたよりも言葉足らずだったようで申し訳ありませんでした。質問をしなおさせていただきますm(_ _)m P.24の5行目"プロンプト>..\z_tools\nask.exe helloos.nas helloos.img"をコンソールに直接打ちましたが"有効なWin32アプリケーションではありません"と出ました。もちろんテキスト通り"プロンプト>"の部分は除いた部分を入力しました。そこで自分は各ファイルの中身を確認し、こう解釈しました。(続く...) -- HillBard 2009-11-28 (土) 10:35:48
  • バッチファイルはそれ自体を開くとコンソールを呼び出してファイルの中身のテキストデータ(ソース)を自動で流し込むことができる。またコンソールでバッチファイル名を入力(拡張子は省略可能)すると同じレベルのディレクトリにあるバッチファイルを開いてソースを流し込むことができるものである。つまりp.25の第2段落は、命令入力の代行者=バッチファイル。"asm.bat"をコンソール上に流し込むことでアセンブラを呼び出し、".img"ファイルを作らせている。その後はrun.batを動かす作業になる(p.18〜p.19と同じ作業)ということになりますよね。Vistaだからといってコンソールへの入力を行うだけなのに動作しないとかおかしい!と思ったので自分なりにこのコードを解読してみました。(続く...) -- HillBard 2009-11-28 (土) 10:43:13
  • 本文:"..\z_tools\nask.exe helloos.nas helloos.img" 解釈:ひとつ上のディレクトリの"z_tools"ディレクトリにある"nask.exe"という実行ファイルを起動。引数[helloos.nas][helloos.img]を渡す(おそらく"nask.exe"は第1引数の".nas"ファイルを第2引数の名前である".img"ファイルに変換するプログラムである)続く... -- HillBard 2009-11-28 (土) 10:46:59
  • だから"z_tools"ディレクトリにある"nask.exe"をダブルクリックしてみました。そこでも"有効なWin32アプリケーションではありません"と出てきたので「これは詰んだな」と思ったのです。よろしくお願いします... -- HillBard 2009-11-28 (土) 10:53:42
  • あ、すいません忘れてました。全部手で書いたものを使っていたのですが、詰んだと思ったのでCDに入っていたファイルを試させていただきました。でも結果は同じでした。拡張子の件も問題なしです。よろしくお願いしますm(_ _)m -- HillBard 2009-11-28 (土) 11:13:39
  • どうもありがとうございます。状況はよく分かりました。バッチファイルというよりも、naskがうまく行かないようなのですね。こちらでは検証できないので分かりませんが、もしかしたらVistaでは動かないのかもしれません。Vistaでもうまくいったよ!という報告が出るまで、とりあえず諦めるしかなさそうです。どうもすみません。もし機会があれば、WindowsXP以前で試すとか、もしくはLinuxなどでやるしかなそうです。あまり力になれず、どうもすみません。 -- K 2009-11-28 (土) 13:07:03
  • なるほど...やっぱりそうだったんですね。 ありがとうございます。あと、僕の解釈(イメージ)はあっていたでしょうか。動かないだけにそこが不安です。お手間を取らせてしまってすいません -- HillBard 2009-11-28 (土) 16:21:42
  • 今とってもびっくりしてるんですが…友人の家で32bit XPのPCを借りることに成功したので動かしてみたんですが、やはり同じ結果になりました。どういうことなんでしょうか……頭がこんがらがってきました -- HillBard 2009-11-28 (土) 17:21:04
  • HillBardさん。詳細な説明で随分と状況が掴めてきました。 -- 名無しさん 2009-11-28 (土) 20:08:41
  • ごめんなさい。↑は、誤って、改行キーを叩いてしまった、誤投稿です... 本当にすいません。 -- らすかる 2009-11-28 (土) 20:10:19
  • HillBardさん。詳細な説明で随分と状況が掴めてきました。良い感じです。解釈については、間違っていないと思います。(続く... ) -- らすかる 2009-11-28 (土) 20:18:55
  • 解釈について、もっと詳しく話をしたいと考えているようでしたら、掲示板などに書いて頂けたら嬉しいと思います。僭越ながら、僕で良ければ、分かる範囲で、ご説明します。(続く... ) -- らすかる 2009-11-28 (土) 20:19:14
  • さて、本題の方ですが、XPでも同じ現象となると、確かに、頭がこんがらがってきます。当方、XP環境で、問題なく動作しております。(続く... ) -- らすかる 2009-11-28 (土) 20:19:31
  • こうなると、疑うわけではありませんが、一連の手順のどこかに問題があるような気がしてきます。(続く... ) -- らすかる 2009-11-28 (土) 20:19:49
  • お友達のXP環境上で試した手順を、なるべく詳しく、順番に教えて頂けますでしょうか? -- らすかる 2009-11-28 (土) 20:20:04
  • らすかるさん了解しました! "tolset"ディレクトリ(CDから正しいデータをコピー済み)をUSBにコピーしてそれを友人のPCに移した USBからデスクトップに"tolset"ディレクトリをコピー "helloos2"ディレクトリにある"!cons_nt"を開きコンソールを立ち上げる "asm"と入力した "有効なWin32アプリケーションではありません"と出た η阿里燭甅い涼奮で"..\z_tools\nask.exe helloos.nas helloos.img"("asm.bat"の中身)を入力 Лイ汎韻厳覯未砲覆辰拭´"z_tools"ディレクトリにある"nask.exe"をダブルクリックした イ汎韻厳覯未砲覆辰 -- HillBard 2009-11-28 (土) 20:58:06
  • となりました。いかがなものでしょうか・・・ -- HillBard 2009-11-28 (土) 21:10:45
  • およそありえないことなんですが、CD-ROMに傷が付いていて、nask.exeが壊れているのかなあ(普通はそういうことがあればCD-ROMを読むときにエラーになるのですが、非常に低い確率で壊れ方によっては見逃してしまいます)。もしそうだとすれば、 http://hrb.osask.jp/ のダウンロードコーナーのWindows版開発セットのtolsetをダウンロードして解凍して、代わりに使ってみてください。もちろん、Vista上で試していただいてかまいません。 -- K 2009-11-28 (土) 21:11:20
  • ちなみに、(8)の実験がとても参考になっています。 -- K 2009-11-28 (土) 21:13:27
  • 動きました!Vistaで問題なく動かすことができました^^ ありがとうございます! ┐亮存海任垢、とにかく原因が知りたくて「実行ファイルなんだからダブルクリックで動くよね!?」っていう単純な考えでやってました。解決してとにかくうれしいです。感謝です! -- HillBard 2009-11-28 (土) 21:21:46
  • ↑ ダウンロードコーナーから頂いたデータを使用しました。ちなみに"z_tools"ディレクトリのみをコピーしました。 -- HillBard 2009-11-28 (土) 21:24:37
  • うまく行ってくれてほっとしています。おめでとうございます。ところで、参考までに聞きたいので、もしよかったら教えてください。本の一番最後(CD-ROMのあるページ)に、「初版第○刷発行」と書いてある部分があると思うのですが、それを調べていただけないでしょうか。もしかしたら出版社の手抜かりで、その刷ではCD-ROMの不良率が高いのかもしれません。その確認のためです。 -- K 2009-11-28 (土) 21:25:59
  • HillBardさん。解決おめでとう!!頑張って先に進んで下さいね!! Kさん、ご協力、ありがとうございました。お手間を取らせて申し訳ないです。 -- らすかる 2009-11-28 (土) 21:32:41
  • 今実験したところ、p.17の第4段落で行う"tolset"ディレクトリのコピーの時点でデータが壊れたみたいです。というのも、CDから再度"Z_tools"ディレクトリだけを持ってきたところ、これも問題なく動いたからです。コピーで問題が起こったのは初めての体験なので本当にびっくりしました。XP環境に持っていったのも壊れたデータが入ったままのフォルダを持っていったからだったんですね。まだまだ謎だらけですが原因が分かって嬉しいです^^ -- HillBard 2009-11-28 (土) 21:33:18
  • つまりCD-ROMには異常がなかったのですね。それはよかったです。らすかるさん、今回も適切なアドバイスをありがとうございました。 -- K 2009-11-28 (土) 21:35:35
  • らすかるさんKさんありがとうございます。とても感謝しています。 Kさん一応ですが、13版とありました。 -- HillBard 2009-11-28 (土) 21:35:16
  • すいません また問題発生ですorz p.44の「Makefile導入」でつまずきました。 -- HillBard 2009-11-28 (土) 23:32:16
  • ヽ板セ劼里覆"Makefile"ファイルを作成 ∨椶猟未"Makefile"の中身を入力 "make.bat"をコピーしてもってきた ぅ灰鵐宗璽襪魍き"make -r ipl.bin"を入力した イΔ泙いって"ipl.bin"と"ipl.ist"ができた β海い謄灰鵐宗璽襪"make -r helloos.img"を入力 "process_begin: CreateProcess((null), ../z_tools/eding.exe imgin:../z_tools/fdimg0at.tek, ...) failed.<改行があり>make (e=2): 指定されたファイルが見つかりません。<改行があり>..\z_tools\make.exe: *** [helloos.img] Error 2"と出てきた -- HillBard 2009-11-28 (土) 23:41:49
  • "Makefile"では"helloos.img"を作りたい時は"ipl.bin"と"Makefile"が必要であると書いてあるんですが、↑からエラーの原因は「"helloos.img"が見つからないから」と読んんでしまいます。ここで頭がこんがらがります。とりあえず先の教訓から"make.exe"を直接ダブルクリックしてちゃんと動くことは実験済みです。既存のQ&Aも拝見いたしましたが、"Cygwin"が分からなくて……それにエラー内容も"CreateProcess(null):copy"ではないことからまた質問させていただいた次第です。よろしくお願いしますm(_ _)m -- HillBard 2009-11-28 (土) 23:50:08
  • らすかるです。△納蠧力したMakefileとCDに用意されているMakefileとを入れ替えてみて、もし、正しく動くようであれば、完璧だと思った入力に、ちょっとしたミスがある可能性が高いです。どうでしょうか? -- らすかる 2009-11-28 (土) 23:53:20
  • CDの中に"Makefile"は"tolset"ディレクトリの"z_new_w"ディレクトリに入っていたのを見つけたのですが、これの内容が本に書いてあるデータと全く異質のものだったので困惑しています。他に本に書いてあるような"Makefile"をCDから探しているのですが、見当たりません。どうすればいいでしょうか... -- HillBard 2009-11-28 (土) 23:59:55
  • "z_new_o"ディレクトリの中にも発見しましたが"z_new_w"ディレクトリの"Makefile"と似ているもののためこれも本に書いてある内容とは異質です。早急なアドバイス感謝です -- HillBard 2009-11-29 (日) 00:02:47
  • "z_new_o"や"z_new_w"で発見した"Makefile"で"ipl.bin"の作成からやってみましたが、やはりこれではないようです。あと試したのは、"Makefile"の後半("helloos.img"の部分から)の空白に見える部分を"Tab"にしてみました。これもだめみたいでした。(行の最初の空白はもとから"Tab"にしてました。) -- HillBard 2009-11-29 (日) 00:14:07
  • ああ……大変申し訳ないです! 写し間違いをしていたようで……orz "m"と書くところを"n"と見間違えてました ほんとにお手数をおかけしました 自己解決になってしまって申し訳ありません ご迷惑をおかけしました -- HillBard 2009-11-29 (日) 00:20:34
  • 解決して良かったですね!! これからも、その繰り返しだと思いますが、挫けずに頑張って下さいね!! -- らすかる 2009-11-29 (日) 01:31:34
  • 現在p.45の一番下まで全部消化しました。本の通り動くには動くのですが、「しこり」というかすごく引っかかる部分がいくつかあります。(続く...) -- HillBard 2009-11-29 (日) 03:13:19
  • "make.bat"で書いてある"../z_tools/make.exe"をなぜ"Makefile"のコマンド以下(例えば"asm : "の下の行)でも書かなくてはいけないのでしょうか 重複してると思うんです。頭の中では"make asm"="../z_tools/make.exe ../z_tools/make.exe -r ipl.bin"になってます。でも実際にはどっちを欠いてもちゃんと動いてくれませんし、どっちかがずれてても動かないです。いろいろと実験してコンソール画面とずいぶんにらめっこしていたので「しこり」がひとつになりましたが、これだけがどうしても無くなりません。よろしくお願いしますm(_ _)m -- HillBard 2009-11-29 (日) 04:03:33
  • HillBardさんへ。質問することはとてもいいことですが、そう早まらずに、まずはよく分からないところをメモしておいて、3章くらいは先を読んでみてはいかがでしょうか。3章読みすすめても分からないときは是非聞いてください。きっとそのほうが力が付くと思うのです。この本は、少し後で説明したほうが分かりやすいときは、初出時に十分な説明がない場合もあるのです(ページ数節約のため)。もちろん先のnask.exeの件のように「これができないと全く前進できない」ような場合は、遠慮なくすぐに質問してくださいね。・・・ちなみに分からないことを分かるためにいろいろと実験するのは非常によいことです。自己解決も最高にいいことです。それについては是非今後も実践してください。 -- K 2009-11-29 (日) 04:29:35
  • ありがとうございます。是非そうしたいと思います^^ 頑張ってOSをマスターしたいのでこれからもよろしくお願いいたしますm(_ _)m -- HillBard 2009-11-29 (日) 04:47:40
  • もし3日目までそのやる気が続いていたら、 http://hrb.osask.jp/wiki/?guide も読んでみるといいかもしれません。 -- K 2009-11-29 (日) 05:04:35
  • あー;; とってもありがたいですぅ! p.59に入ったとこなので大助かりです! -- HillBard 2009-11-29 (日) 06:39:26
  • http://oshiete1.goo.ne.jp/qa5507200.htmlの人は、こちらに誘導してもよいものでしょうか? -- 名無しさん 2009-12-09 (水) 10:45:16
  • その質問は、q_and_a向きなのでしょうか?impressions向きではありませんか?(内容が見えないのでよく分かりません)。誘導してもいいですが、誘導した場合は、その方がここで質問してよかったと思えるように、名無しさんが応対してくださいね。・・・そもそも、名無しさんが誘導していいかどうかを聞くことも、ここではなくimpressionsでやるべきですね。 -- K 2009-12-09 (水) 12:15:24
  • らすかるです。今日は、質問する側として書き込み致します。内容は、最終章で改良された、ipl09.nasのreadfastについてです。(続く...) -- らすかる 2009-12-13 (日) 00:44:39
  • この中で、ESレジスタに指定されたアドレスから直後の64K境界までの間に読み込める最大セクタ数を求める処理がありますが、ここで64K境界を基準にする理由が分かりません。(続く...) -- らすかる 2009-12-13 (日) 00:44:57
  • 試しに、ES=07FFh等と指定して(オフセットBXは、0指定)、INT 13h を試してみたところ、こちらの環境では、問題なく動いているように見えます。(続く...) -- らすかる 2009-12-13 (日) 00:45:18
  • Bochs BIOS のソース等を眺めてみたりもしたのですが、どうしても、64K境界を基準にする根拠が見付かりませんでした。(続く...) -- らすかる 2009-12-13 (日) 00:45:38
  • こちらの知識不足で、大事な何かを見落としているかもしれませんので、お分かりの方が居りましたら、ご教示の程、よろしくお願い致します。 -- らすかる 2009-12-13 (日) 00:45:58
  • お答えします。BIOSは内部では、FDC(フロッピーディスクコントローラ)と呼ばれるハードウェアと、DMA(ダイレクトメモリアクセス)というハードウェアの両方を制御して、FDにアクセスしています。そしてこのDMAのほうに、64KB境界を超えられない場合があるという問題があるのです。らすかるさんのケースでうまくいったのは、実機ではない(=エミュレータの再現度が甘い)か、USB接続のFDDか、そのへんが理由ではないかと想像します。ちなみに、USB接続であれば、FDCもDMAも使わないので(DMAの代わりにPCIバスマスターDMAを使う)、この問題はエラー原因にはならないと思います。ちなみに実機でしかもUSBではないFDDでも、BIOSがエラーを返さない場合がありえますが、その場合、なんとデータが途中で切れて、残りのデータがメモリの全然違う場所に現れていたりします。これは大問題ですね。もちろん、64KB境界に差し掛かってもエラーを返さない上に、正しく処理をしてくれる優秀なBIOSも存在はするようです。 -- K 2009-12-13 (日) 03:05:20
  • Kさん、ご回答の程、ありがとうございました。これで、すっきりしました。こちらの実機環境は、CD-ROMのFDエミュレーションモードになります。さすがにレガシーDMAの制約まではエミュレーションしていないといったところでしょうか。勉強になりました。 -- らすかる 2009-12-13 (日) 06:37:01
  • j突然すいません。はりぼてOSは、何Gbyt -- 名無しさん 2009-12-27 (日) 03:05:09
  • すいません。勝手に編集中のものがのってしまいました。はりぼてOSは何Gまで認識できるのでしょうか、どこかに書いてあったような気もするのですがどなたか教えてくださいお願いします。 -- アクエリアス 2009-12-27 (日) 03:08:57
  • P.180に書いてあります。「このプログラムだと最大で3GBまで認識できます。」(質問の「何G」というのを、勝手に「メモリは何ギガバイト」と解釈して回答しました。) -- uchan 2009-12-27 (日) 08:14:01
  • uchanさんへ書き方が悪くてすいませんでした。HDDで何Gという意味でした。よろしくお願いいたします。 -- アクエリアス 2009-12-27 (日) 18:57:54
  • らすかるです。アクエリアスさんへ。納得いく答えかどうか心配ですが、はりぼてOSに関して言えば、そもそもHDDは使えません。 -- らすかる 2009-12-29 (火) 05:25:43
  • らすかるさんへ、TorilOS(http://www5a.biglobe.ne.jp/~torilon/torilos/)ではHDD使えるらしいですよ。 -- ケーボ 2009-12-29 (火) 11:04:37
  • らすかるさんへ回答ありがとうございます。またへんな質問をすることがあるかもしれませんがよろしくお願いします。 -- アクエリアス 2009-12-29 (火) 16:33:40
  • 出版社経由の質問です。わかる人がいたらここで教えてください。 「私のパソコンは64ビットパソコンなので、コンソールでインストールなどをしようとすると32ビットじゃないですよー。みたいなエラーが出て何もできない状態なのです。 どうにかしてインストールすることは出来ないでしょうか?」 -- K 2010-01-16 (土) 13:00:00
  • imgtolが16bitプログラムなので64bitのWindowsでは実効できません。自分もそうでした。 -- ケーボ 2010-01-16 (土) 13:25:36
  • imgtol→imgtol.comの間違いです。すみません。 -- ケーボ 2010-01-16 (土) 13:26:15
  • とりあえずFD書込だけだと思いますが、「Read/Write FD」<検索↓>で可。 -- ytakano 2010-01-16 (土) 15:44:11
  • みなさんありがとうござます。 -- K 2010-01-22 (金) 11:40:08
  • はじめまして。使用環境は、WINXP SP3/メモリ512MBです。3日目のharib00iにてmake runしたところ、bootpack.bimを生成する部分で"Rule file error : can't open file : ../z_tools/haribote/harilibc.lib”というエラーになり、bootpack.bimが生成できません。以前も似たような質問があり、メモリ不足を疑いましたが、全く改善されませんでした。尚、次のharib00jとharib01aでも同じエラーが発生しました。初歩的な質問で申し訳ありませんが、考えられる対処方法をご教示願います。 -- TAK 2010-03-01 (月) 00:59:32
  • TAKさん、私が思うには、z_tools \ hariboteにそのファイルが存在しないか、破損しているように見えます。 CD - ROMから再度コピーしていただき、それでも問題がある場合は、もう一度投稿してください。 -- Kor_Lee_Hee_Rak 2010-03-01 (月) 12:33:47
  • Kor_Lee_Hee_Rakさんへ。早速、教えて頂いた方法を試してみましたが、改善されませんでした。ちなみに、上記質問に記載したエラーの続きですが、”make.exe[2]: *** [bootpack.bim] Error 6”、"make.exe[2]: Leaving directory 'D:/re_OSASK/tolset/3day/harib00i' "(以下imgファイルがありませんというエラーとなり、コンパイル終了)、となっています。また、「haribote.rul」内のlibファイルのディレクトリ指定を直接してして、make runすると、”Can't open rule file:”となり、先ほどの「Error6」が「Error2」となります。質問が長くなり大変申し訳ありません。 -- TAK 2010-03-01 (月) 19:10:36
  • 上記の問題が解決致しました。原因は、libファイルを呼び出すディレクトリの指定が違っていた為でした。実は、昨日質問する前にもそのことを疑い、「haribote.rul」内の記述をいじっていたのですが、昨日は上書き後「haribote.rul」を開いたままコンパイルしていたのですが、先ほど上書き後閉じてコンパイルした結果、無事真っ黒な画面が出ました^o^大変お騒がせ致しました。また、質問させて頂いた際は、何卒宜しくお願い致します。 -- TAK 2010-03-01 (月) 22:37:43
  • 大丈夫です。私のような場合は、VBを使用してWindowsアプリケーションを作成していますが時々、無限ループのために困難な仕事を一度か二度ではありません。だから、その仕事が初期化され...そのようなことが多いということは、すでに、すべての開発者たちが経験したことですからね。 本の内容のように無理せず、ゆっくり、ゆっくりと(もしかしたら1月1日分の方のはないシゲトジョ?)と、かなり良いOSになるだろう。 -- Kor_Lee_Hee_Rak 2010-03-07 (日) 15:45:15
  • はじめまして。初版第13刷P189にある、サイズの小さなあきメモリを忘れた場合、そのメモリは2度と使われないとありますが、これは再起動か何かしても復活しないのでしょうか?OS作成過程で何かやらかしてこんな状態になったら使えるメモリがどんどん減るんじゃないかと心配になってしまいました。変な質問ですみません。 -- zakuro 2010-03-22 (月) 23:57:32
  • はじめまして。メモリを忘れた場合は、1回終了したり再起動すればもとに戻りますよ。 -- ケーボ 2010-03-23 (火) 08:56:02
  • ↑に追記します。再起動するのはWindowsじゃなくてはりぼてOSです。 -- ケーボ 2010-03-23 (火) 09:16:01
  • ケーボさんありがとうございます。これで安心して弄れます(^^ -- zakuro 2010-03-23 (火) 22:09:01
  • すみません、p169の真ん中よりやや下にある「サイズはダブルワード単位なので、バイト数を4で割って指定」とあるのですがなぜサイズはダブルワードなんでしょうか。どなたか教えていただけるとありがたいです。 -- siro 2010-09-03 (金) 17:14:01
  • memcpyという関数は、ある番地から、EAXレジスタにデータを読み込んで、それを他のある番地に移す、という作業をやっています(MOV命令は、メモリ同士を指定できないから)。で、この一時的にデータを保存しておくEAXは、ダブルワード(4バイト)の大きさなので、サイズから1ずつ引いていけば、0になったときに転送し終わります。たとえば、1024バイトを転送したいとき、4で割ってダブルワード単位で256回EAXレジスタで転送すれば、EAXレジスタは4バイトなので、結果的に256*4=1024バイト転送できることになります。まあ、ALなどの1バイトの大きさのレジスタを使えば、バイト単位でもできますが、それだと約四倍の回数分やらなければならないので、EAXレジスタが使われているのです。 -- hikarupsp 2010-09-04 (土) 05:19:58
  • hikarupspさん、ありがとうございました!! 解らなかった所が解ってスッキリしました!! -- siro 2010-09-06 (月) 17:46:41
  • 2010/9/2810:40にtolset_h.zip内にある nask.exeがマルウェアとAvast5.0無料版が警告を出しまします -- 名無しさん 2010-09-28 (火) 10:42:17
  • ↑すいません、間違えてここに投稿してしまいました -- 名無しさん 2010-09-28 (火) 10:43:00
  • 申し訳ございません、advance/hddbootの内容をここで質問してしまっていました。 -- siro 2010-09-28 (火) 19:36:07
  • 第3章についての質問です。わかりきったことなので本には直接書かれていないのかもしれませんが、hariboteos00bでretryをループさせるのはなぜですか?エラーが起きたときのためですか? -- confinevent 2011-03-08 (火) 12:15:48
  • 第3章についての質問です。わかりきったことなので本には直接書かれていないのかもしれませんが、hariboteos00bでretryをループさせるのはなぜですか?エラーが起きたときのためですか? -- confinevent 2011-03-08 (火) 12:48:38
  • 何度もすみません。p58で「ディスクイメージに保存」についての説明が書かれていますが、イマイチわかりません。予め作っておいた空のディスクイメージ(img)に対象ファイル(sys)をブチ込むということでしょうか? -- confinevent 2011-03-08 (火) 14:29:54
  • >一つ目の質問
    まあ簡単にいえば何度もやり直す…というか、これの一つ前に書かれていたと思います(エラーになったらやり直そう)。
    >二つ目の質問
    そういうことですね。自分的にはedimgが自分でイメージファイルの原型を作ってくれるとありがたいとか思うわけですが(自作EasyFat.exe(未公開)にはその機能が含まれているし、わざわざ外部に空のディスクイメージを用意する必要がなくなるから)。 -- Percentage 2011-03-09 (水) 15:01:02
  • 間違いを発見しました。harib02dのputfont8関数です。引数にbinfo->scrnyが抜けています。(本文ソースプログラムともに)そのままだとtoo few argumentsde -- 名無しさん 2011-03-10 (木) 13:14:14
  • (修正)間違いを発見しました。harib02dのHarimainにおけるputfont8関数の呼び出しです。引数にbinfo->scrnyが抜けています。(本文ソースプログラムともに)そのままだとtoo few argumentsで怒られます。 -- 名無しさん 2011-03-10 (木) 13:15:41
  • ↑のコメントはmistakesga -- 名無しさん 2011-03-26 (土) 14:30:18
  • (訂正)上のコメントはmistakesに入れるべきだと思うのですが。 -- Percentage 2011-03-26 (土) 14:31:16
  • 現在3日目をやっていますが、make runを実行するとharibote.imgがないというエラーになります。haribote.imgが作られないのです。どなたかharibote.imgを作る方法を教えてください。ちなみに、edimgコマンドを使って実行してもコマンドは正常に終了しますが、やはりharibote.imgが作られません。 -- saken 2011-06-28 (火) 12:28:29
  • sakenです。自己解決しました。NOD32というウイルス検索ソフトが悪さをしていました。 -- saken 2011-06-28 (火) 15:19:39
  • 131ページの_asm_inthandlerですが、色々なレジスタをPUSHしていますが、フラグレジスタは保存しなくてもよいのでしょうか。例えば、本来の処理でcmp〜jneとかしていたとして、その間に割り込みが入ってフラグを書き換えられてしまうと誤動作してしまうのでは?と思ったのですが… -- yossie 2011-11-02 (水) 12:43:52
  • IRETD命令がフラグレジスタのPOPを行ってくれるようです。という事は、割り込みルーチンが呼ばれる際に自動でPUSHされていた、ということでしょうか… -- yossie 2011-11-02 (水) 19:18:55
  • yossieさんへ。advance/CPUに、Kさんがその説明を書かれています。また、Intelの資料にも載っているので、参照してみてください。 -- hikarupsp 2011-11-03 (木) 17:16:06
  • フロッピーディスクではなくCD-RWとかにOSを作成することはできないのでしょうか? -- ミシュラン 2011-12-29 (木) 20:07:28
  • ↑の者です。すみません、P678に書いてありました。申し訳ありません。 -- ミシュラン 2011-12-29 (木) 20:12:44
  • たびたびすみません。BD-RWやDVD-RWからOS起動させるようにすることは可能でしょうか? -- ミシュラン 2011-12-29 (木) 20:16:15
  • >>ミシュランさん ブート可能なDVDについては、CDと同じ容量で作成できるらしいので多分出来ます。BDについてはそう言った情報がないのでなんとも言えませんが... -- S.Percentage 2011-12-30 (金) 14:52:31
  • p438にあるように、OSがアプリをfar-CALL/JMPできないのなら、タスクスイッチはなぜできているのでしょうか? -- wisteria 2011-12-31 (土) 13:29:18
  • 正誤表(http://hrb.osask.jp/bugfix.html)の誤植を見つけました。一番上の「p.401(リスト内)」で、「fifo」となっていますが、「finfo」の間違いかと思います。 -- yossie 2012-01-03 (火) 17:15:45
  • 初投稿です。一日目のinstall.batを実行すると、「NTVDM.exeは動作を停止しました」と出ます。付属CDからコピーしても同じ動作です。run.batの方はちゃんと本の通りにウィンドウが出ます。 -- 名無しさん 2012-08-20 (月) 18:53:35
  • すみません、上の「名無しさん」です。(続き) OSはWindows Vistaです。どなたか教えてください。 -- Kazu 2012-08-20 (月) 18:56:27
  • 【宛Kazu氏】install.batの中身を調べて、この頁を検索すると幸せになれます。 -- ytakano 2012-08-22 (水) 10:17:21
  • imgtolが16bitプログラムなので64bitのWindowsでは実効できません。自分もそうでした。これどのように解決ですか?助けてください。 -- osd 2013-02-20 (水) 00:44:16
  • imgtolが16bitプログラムなので64bitのWindowsでは実効できません。自分もそうでした。これどのように解決ですか?助けてください。 -- osd 2013-02-20 (水) 19:42:21
  • p285のキー入力プログラムなんですがkeytable[]の値をs[0]に入れてる部分で、s[1]=0にしているのはなぜなんでしょうか? -- カンナビス 2013-02-22 (金) 11:16:09
  • >osdさん 「MS-DOS Player for Win32-x64」という代物があるそうです。 -- 聖人 2013-02-23 (土) 16:43:23
  • helloos.nasファイルが開けません。読み返してみたのですが・・・ヒントだけでも教えてください。 -- tobe 2013-03-01 (金) 07:13:59
  • 初めての質問です。p438にある_start_appですがアプリのセグメント番号(CS、SS)に3をORしていますがDSには必要ないのですか? -- octopus 2013-03-12 (火) 09:08:21
  • 割り込みとタスクスケジュールに関する質問です. まず割り込みに関してですが,p131にあるように割り込みハンドラをIDTに登録し(_asm_inthandlerXX),そこから本当の割り込みハンドラが呼ばれる仕組みになっています.この時,PUSH ES, PUSH DSのようにレジスタの値をスタックに積み,ハンドラをCALLした後,PUSHした時とは逆順でPOPするので,割り込み前の処理が継続できるのだと理解しています.質問ですが,本当の割り込みハンドラ(_inthandlerXX)でも当然スタックを使うと思っているのですが,割り込みハンドラ(_inthandlerXX)内でPOPやPUSHが同数だけ行われないと,_asm_handlerXXに戻ってきた時に間違った値がPOPされてしまうと思うのですが,こういうことはないのでしょうか?例えば,PUSH A, PUSH B, PUSH C, 割り込みハンドラ実行,の場合,スタックのトップにCの値が積まれていないと正しく実行前の状態が保存できないと思うのです.これはどのように保証されるものなのでしょうか?コンパイラがうまくやってくれるのでしょうか? 次に, harib12gで,本当の割り込み処理を行うということでmt_taskswitchを割り込みハンドラであるinthandler20で呼び出しています.プログラムで明示的にタスク切り替えを行なっている場合は,タイマー割り込み->_asm_inthandler20によるレジスタの保存->inthandler20の実行(タイムアウト処理)->_asm_inthandler20によるレジスタの復帰->タスクの実行->FIFOの状態を見てタスクスイッチ,となっていると理解しています.これをharib12gでは,タスクの変更を割り込みハンドラ内(inthandler20)で行うように変更しています.この場合 ,タイマー割り込み->_asm_inthandler20によるレジスタの保存->inthandler20の実行(タイマー処理とタスクスイッチ)->変更後タスクの実行->タイマー割り込み->...と続き,_asm_inthandler20(レジスタの保存)->inthandler20->タスク実行->タイマー割り込み->_asm_inthandler20(レジスタの保存)->inthandler20の実行...となってしまい,inthandler20から復旧したあとの_asm_handler20によるレジスタの復元が行われないような気がするのですが,ここはどのように理解すればよろしいのでしょうか?p.295に,タスクスイッチのアセンブラで,JMP命令の後のRETについての説明がありますが,これが関係しているのでしょうか? 長文で恐縮ですが,よろしくお願いいたします. -- hiro 2013-03-30 (土) 10:39:19
  • 上記1番目の質問ですが,自己解決しました.X86のCALL命令に関する知識不足でした.EBPによる復旧ということで理解できました.2番め本当の割り込み処理に関するアドバイスをお願い致します -- hiro 2013-03-31 (日) 11:59:39
  • 【宛hiro氏 】harib12g/bootpack.cの113行目「tss_b.esp = task_b_esp;」です。task_aが使用するスタックとtask_bのスタックは、領域が異なっているのです。マルチタスクの要ですね、297頁あたり1に書かれています。あの書籍の場合、疑問点は少し先に進むと解決するようになっていますので、読み飛ばすのも一つの手です。 -- Y.Takano 2013-03-31 (日) 20:44:41
  • あ゛・・NameLinkを間違えました。「297頁あたり1」は、「297頁あたり」の誤りです。 -- ytakano 2013-03-31 (日) 20:50:15
  • Y.Takano様.お返事ありがとうございます.ご指摘いただいた箇所ですが,タスクAとタスクBでスタックポインタの領域が全く異なっているということは理解しています.ご指摘いただいた意図を理解していない可能性があるのですが,私の疑問は,タイマー割り込みの割り込みハンドラでタスクスイッチをしてしまった場合,_asm_inthandler20から呼び出されるinthandler20内でタスクが切り替わってしまい(if(ts != 0) { mt_taskswitch();}の呼び出し),その後に書いてあるreturnには到達しないことになりますよね?returnしないということは,asm_inthandler20のCALL inthandler20の後に書いてあるPOP EAX...以下の命令を実行しないことになりませんか?例えばタスクAからタスクBへの切り替えの場合,タイマー割り込みによるasm_inthandler20中のCALL inthandler20で,POP EAXのアドレスがタスクAのスタックに戻りアドレスとして積まれ,EBPが積まれてinthenaler20が実行されていくと思います.そして,mt_taskswitchが呼び出されると,タスクAのTSSにレジスタの値が保存され,タスクBのTSSに保存されている値がロードされてタスクBの実行が始まると思います.問題はその次にタイマー割り込みが入った時,タスクBからタスクAへの切り替えが行われるわけですが,その時はタスクBの切り替え前にタスクAで実行していた続き,つまりinthandler20のreturnから実行されると考えてよろしいのでしょうか?であれば合点がいきますし,p295の説明(_taskswitchedのJMPの後にRETがある理由)とも合う気がしています.いかがでしょうか?仮にこの過程が正しいとしてですが,タスクスイッチのためのJMP命令がこのような仕様になっている,というのはfarモードでのJMP命令がそういう仕様になっているという理解でよろしいのでしょうか? -- hiro 2013-03-31 (日) 23:29:51
  • 上記質問ですが,自己解決いたしました.はじめて読む486によると,セグメントをまたぐJMP命令を発行し,それがタスク切り替えだった場合,次に切り替わったときにはJMPの次の命令から実行されるということです.ということで,タスクA->タスクB->タスクAと戻ってきた時,2回目のタスクAが再開されるときには_farjmpのJMP命令の次,すなわちRETから実行されることになり,その時点でTSSはタスクAのものに切り替わっているので,タスクBへの切り替え前に保存しておいたスタックポインタを含むレジスタの値が復旧され,asm_inthandler20のCALL inthandler20の次の命令に戻り,割り込みハンドラの後処理が実行され,最後にINTRDが実行されて割込みを抜ける,ということだと思います.もしかしたら同じところで困っている人がいるかも知れないので,追記しておきます. -- hiro 2013-04-02 (火) 13:39:42
  • 21日目のOSを守ろう(1),(2)に関する質問です(p.428~).私の理解では,プログラム中でメモリのアドレスを指定した時,その値にDSの値が加えられて実際にアクセスされると考えています.例えばharib18aでは,読み込んだファイル保持するメモリの先頭を記録しておき,hrb_apiのほうでアプリから渡されたEBXに加えることによって実際のアドレスにアクセスできているのだと思っています.ここで疑問なのですが,p428のcrack1.cでは,直接0x00102600のアドレスを指定してメモリを破壊していますが,これはGDTが1で,開始アドレスが0x00なので0x00 + 0x001202600となり,ファイル情報が潰されるので納得がいきます.しかしharib18dではセグメントレジスタをGDT1004に変更しており,GDT1004の開始アドレスはmemman_alloc_4kで確保したアドレスなので,少なくとも0x1000以上ですが,その状態でプログラムで0x001202600にアクセスした時にはどういうことが起こってOSが保護されているのでしょうか?私の考えでは,DSの値が加えられるのはプログラム中でラベルを指定するなど,相対アドレスが指定されている場合であり,0xXXXXのように直接アドレスが書いてあったらアクセスできてしまう気がしています.それでも保護されているということは,X86ではプログラムでは指定されたセグメントレジスタを横断してアクセスすることを禁止しているからなのでしょうか?でもそうなると,memman_alloc_4kでメモリを確保するときなどは適当なアドレスから確保されるわけなので,何故アクセスできるのだろう...などと悩んでおります.どうぞよろしくお願いいたします. -- hiro 2013-04-13 (土) 06:12:57
  • GDT1004番のセグメントはLimit値が64*1024-1(0xffff)なので、その中の0x01202600にアクセスするとリミットチェックに引っかかってエラーになります。 -- S.Percentage 2013-04-13 (土) 16:57:15
  • S.Percentage様.ご回答ありがとうございます.ということは,直接メモリ番地を指定しても,自動的にDSの値が加えられてアクセスされるということですね.その結果リミットチェックでエラーになるということで納得いたしました.ありがとうございました. -- hiro 2013-04-14 (日) 09:17:06
  • ( It's to say that, the effect of harib13d of my done is much diffenet from your saying in the book.) And thank you for this book. Learn a lot from it. Thank you -- (I dont know if it's the right way to ask a question...Sorry) --Waldronluo
  • (Waldronluoさんの質問を通常の質問に混ぜました) -- K 2013-06-04 (火) 12:55:31
  • helloos3のhelloos.nasには、ORGコマンドがあります。しかし、helloos2のhelloos.nasにはORG命令がないですね。それにもかかわらず、run.batを実行したときに両方動作します。ひょっとしてhelloos3のhelloos.nasのORG命令をコメントアウトして実行してみると、エラーが発生しますね。helloos2のORGがなくても、どのようにうまく動作するのでしょうか? -- osd 2013-06-06 (木) 12:55:05
  • helloos3のhelloos.nasには、ORGコマンドがあります。しかし、helloos2のhelloos.nasにはORG命令がないですね。それにもかかわらず、run.batを実行したときに両方動作します。ひょっとしてhelloos3のhelloos.nasのORG命令をコメントアウトして実行してみると、エラーが発生しますね。helloos2のORGがなくても、どのようにうまく動作するのでしょうか? -- osd 2013-06-06 (木) 13:30:19
  • harib01fのbootpack.cのset_palette()関数を見ると、"rgb[0]/4"という表現がありますが、ここでは"/4"の意味は何なのかよくわかりません。回答お願いします。 -- osd 2013-06-09 (日) 23:16:08
  • 初心者です。質問なのですが、harib01hを作り、そろそろ実機で起動させてみようと思い、本で紹介されていたfdtoiso.exeを使ってISOファイルを作り、CD-RWに焼いたのですが、起動しても真っ暗な画面が表示されるだけです。どうしてでしょうか?使っているPCは、HPのPavilion HPEです。CPUは、Intel i7-2600です。どうぞ回答お願いします -- ビカビカ 2013-06-26 (水) 19:07:17
  • P.284の『「A」が出ました』という写真なんですけど、背景画面に何故、Aの文字コード「0Xle」が表示されていないのでしょうか?P.283のソースを見る限り、表示されるはずだと思うのですが・・・ -- jun 2013-07-21 (日) 14:02:35
  • すみません。「0Xle」ではなく「le」でした。 -- jun 2013-07-21 (日) 14:08:15
  • 2DDのFDで作るのはどうしたらいいですか? -- あゆみ 2014-08-31 (日) 06:45:24
  • え!?これまで誰もこの質問してないってことは、もしかして本に書いてありますか? -- あゆみ 2014-08-31 (日) 07:05:51
  • NEC98に移植するにはどうするんですか? -- あゆみ 2014-08-31 (日) 07:44:51
  • 2HDのFDで作るにはCHSを調べた後にIPLを編集するそれだけです。 -- skyblue 2014-09-01 (月) 14:16:03
  • 他に移植する場合は仕様を調べなければいけません。それと上記質問はこのページにはふさわしくないため今後は書き込まないで下さい>あゆみ -- skyblue 2014-09-01 (月) 14:18:32
  • p.170のasmhead.nasからbootpack.cの呼び出しに関する質問です。asmhead.nasがboo -- 名無しさん 2016-11-06 (日) 01:14:03
  • p.170のasmhead.nasからbootpack.cの呼び出しに関する質問です。 asmhead.nasがbootpack.cを呼び出す際に、DSは0x0008つまりベースポインタが 0x00000000に設定されています。 ここで08_daysフォルダ/harib05dフォルダのbootpack.cのコンパイル結果bootpack.lst中の データセクションに以下の記述があります。 LC0: (ロケーション 0x00000000) DB "(%3d, %3d)",0x00 LC2: (ロケーション 0x0000000B) DB "[lcr %4d %4d]",0x00 LC1: (ロケーション 0x00000019) DB "%02X",0x00 つまりLC0,LC2,LC1の領域の物理アドレスはDSで設定したベースアドレス(0x00000000)と ロケーションとの足し算の結果それぞれ0x00000000,0x0000000B,0x00000019であるという ことでしょうか。 p.171に0x00000000-0x000fffffは起動中にいろいろ使うけど、その後はあき(1MB)と書かれており、 データセクションとして使用されるという私の解釈が間違っているような気がします。 -- ピロ 2016-11-06 (日) 01:40:34
  • >ピロ bootpack.cを実行する時はプロテクトモードなのでアドレスは1MB以上の領域にあります。(GDT1番のベースアドレス) -- skyblue 2016-11-17 (木) 17:36:34
  • > skyblue様 お返事頂きありがとうございます。 bootpack.cを実行時、JMP命令で「CS」に2*8を代入してプロテクモードに移行しており、 テキストセクション内に配置されるプログラムにアクセスする際はベース番地が0x280000になっていることは理解しております (p171 第4段落参照)。 ただ、「DS」はbootpack.c実行時も1*8が設定されており、bootpack.c実行時にデータセクション領域に 置かれた変数(例えば"[lcr %4d %4d]"を参照する際)に、ベース番地は0x000000に設定されていると考えていますが、 この理解は正しいでしょうか。 -- 名無しさん 2016-11-19 (土) 12:19:04
  • > skyblue様 お返事頂きありがとうございます。 bootpack.cを実行時、JMP命令で「CS」に2*8を代入してプロテクモードに移行しており、 テキストセクション内に配置されるプログラムにアクセスする際はベース番地が0x280000になっていることは理解しております (p171 第4段落参照)。 ただ、「DS」はbootpack.c実行時も1*8が設定されており、bootpack.c実行時にデータセクション領域に 置かれた変数(例えば"[lcr %4d %4d]"を参照する際)に、ベース番地は0x000000に設定されていると考えていますが、 この理解は正しいでしょうか。 -- ピロ 2016-11-19 (土) 12:19:27
  • > skyblue様 お返事頂きありがとうございます。 失礼しました。誤字脱字があるため、再投稿します。 bootpack.cを実行時、JMP命令で「CS」に2*8を代入してプロテクトモードに移行しており、 テキストセクション内に配置されるプログラムにアクセスする際はベース番地が0x280000になっていることは理解しております (p171 第4段落参照)。 ただ、「DS」はbootpack.c実行時も1*8が設定されており、bootpack.c実行時にデータセクション領域に 置かれた変数(例えば"[lcr %4d %4d]")にアクセスする際、ベース番地は0x000000に設定されていると考えていますが、 この理解は正しいでしょうか。 -- ピロ 2016-11-19 (土) 12:21:16
  • 正しいです。しかしデータセクションの先頭はコードの後に設定されるようになっています。 -- skyblue 2016-11-29 (火) 20:07:54
  • p.67のnaskfunk.nasについて。GLOBAL _io_hlt というもはC言語で言う「宣言」のようなものですか? -- Sky 2018-02-09 (金) 23:03:54
  • p.67のnaskfunk.nasについて。GLOBAL _io_hlt というもはC言語で言う「宣言」のようなものですか? -- Sky 2018-02-09 (金) 23:07:20
  • p.68no(上の質問で、二回投稿することになってしまい、すみません。) -- 名無しさん 2018-02-09 (金) 23:11:47
  • GLOBALとは、_io_hltを他のオブジェクトファイルからリンクできるようにしろというアセンブリの疑似命令です。C言語のソースコードとnaskfunk.nasは別々に処理されてobjファイルとなり、最後にリンクという処理をして同一のbimファイルにします。この工程の大まかな説明はおそらくp60~70の間に有ったと思います。その際、C言語側から参照されているio_hltがこのobjファイルに存在するよという「のりしろ」をつけるのがglobal _io_hltです。おそらくたいていのC言語では、すべての関数はGLOBALになってるので、GLOBAL=C言語の宣言ではないと思います。C言語の「宣言」に当たるのは、本の中で出てくる「EXTERN」が近いのではないかと思います。 -- PG_MANA 2018-02-10 (土) 16:22:38
  • 返信ありがとうございます。とても参考になりました。追加で質問なんですが、p.32のAX,CX,DX,BX,SP,SI,DIの説明を読んだんですが、イメージが掴みづらいです。SPとかなんとなくポインタなんだなーと思ったんですが、ベースポインタやスタックポインタの違いなどがわかりません。それぞれの変数(?)をC言語とかで置き換えることはできますか? -- Sky 2018-02-11 (日) 13:59:54
  • p67のfor (;;) {io_hlt();}でなぜ「CPUの停止命令」のHLTを無限ループにするのですか? -- 名無しさん 2018-02-11 (日) 15:31:20
  • レジスタについては http://www.wiki.os-project.jp/?x86%2FRegister#offa7fbb らへんを読むと解ると思います。と言うよりもとりあえずSPなどはどっかを指し示してるあたりの認識で良いのでしょうか。スッキリしないのはわかりますが、後に必要となれば出てきますので。C言語の変数はメモリ上に配置されてることが多いと思いますが、メモリというのはCPUからすると幾分遅い機器なので、CPUについていけるレジスタというものがあり、CPUの状態を保持してたりするので、変数とは少し分けるのが適切かと思いますが、要はどちらもデータを保存してます。 -- PG_MANA 2018-02-12 (月) 11:07:11
  • >p67のfor (;;) {io_hlt();}でなぜ「CPUの停止命令」のHLTを無限ループにするのですか? 本を開いてみましたが、P.40に十分な説明があるのでそこを読んでみてください。 -- PG_MANA 2018-02-12 (月) 12:28:09
  • p67のfor (;;) {io_hlt();}でなぜ「CPUの停止命令」のHLTを無限ループにするのですか? -- 名無しさん 2018-02-14 (水) 00:49:35
  • 間違えて再投稿してしまいました、すみません -- 名無しさん 2018-02-14 (水) 00:50:21
  • p.93の0xa0000 + x + y*320 という式が成り立つのはなぜですか?最初に0xa0000という値を足して、その後にxとyに320をかけた式が導けるのですか?なんでyに320をかけるのですか? -- mai 2018-02-14 (水) 00:55:13
  • 0xa0000という値はVRAM(video RAM)の開始番地です. -- 名無しさん 2018-02-15 (木) 19:40:06
  • しまった,ここEnterすると入力されるのか -- sksat 2018-02-15 (木) 19:40:50
  • 0xa0000というのはVRAMの開始番地です.本にも書いてありますが,このVRAMはメモリと> 同じように扱えますが,ディスプレイと繋がっていて,ここに値を書き込むとそれに対応 した色が表示されるようになっています.今回は画面に描画したいので,まずはこのVRAM の番地である0xa0000を足します.で,問題のx+y*320なのですが,これは画面のX方向の> 解像度が320なのでこのようになっています,どういうことかというと,VRAMのそれぞれ> の番地が画面上の画素に対応しているので,0xa0000+pという番地に書き込むとp番目の画 素を変更することになります. -- sksat 2018-02-15 (木) 19:49:05
  • あーなんか分かりにくくなってしまった.ようは座標を(x,y)としたときに,VRAMの番地はそれぞれ(0,0),(0,1),(0,2)...(0,319),(1,0),(1,1)...の画素に対応しているってことです.なので,(x,y)に書き込もうと思ったら0xa0000+x+y*320に書き込めばいいわけです. -- sksat 2018-02-15 (木) 19:53:56
  • sksatさん、ありがとございます。 -- 名無しさん 2018-02-20 (火) 00:01:33
  • sksatさん、ありがとございます。 -- 名無しさん 2018-02-20 (火) 07:10:13
  • (7日目)マウスif ((mf->buf[0] & 0x10) != 0) {mf->x |= 0xffffff00; }やmf->y |= 0xffffff00; キーボードio_in8(PORT_KEYSTA)&KEYSTA_SEND_NOTREADY) == 0 など、アドレスに演算子(&や|など)をつけて条件分岐する式の内容がイマイチ実感わきません。どのように解釈すればいいですか(抽象的な質問ですみません) -- Sky 2018-02-23 (金) 17:11:50
  • 質問された内容は、アドレスではなく変数の内容に対して演算子がついてると思います(間違ってたらすみません)。&というのは特定のbit以外全て0にするという使い方が有りまして、デバイスとの通信の際、デバイスの状態などを特定のbitを立てて知らせる方法が多用されます。調べたいbit以外を0にして、それを0と比較することで、そのbitが立ってるかどうかを調べることができます。0であればそのbitは0で、0でなければそのbitは1です。逆にor演算子は特定のbitを強制的に1にできます。or演算子は主に代入などで使用されています。こんな感じでどうでしょう。 -- PG_MANA 2018-02-24 (土) 21:27:18
  • わからない部分があるのですが、読み飛ばしてもいいですか? -- 名無しさん 2018-03-10 (土) 21:28:32
  • PG_MANAさん、わかりやすい説明ありがとうございます。 -- Sky 2018-03-14 (水) 16:54:54
  • >わからない部分があるのですが、読み飛ばしてもいいですか? 本の冒頭に書いてあるとおり、わからないところは読み飛ばして、適宜戻ってきて読むべきでしょう。 -- PG_MANA 2018-03-15 (木) 21:01:03
  • 本に書いてあるとおりのURL(community.osdev.info)が使えません。代わりになるサイトとかはありませんか? -- 名無しさん 2018-04-06 (金) 21:25:26
  • http://oswiki.osask.jp/ Kさんが作成した避難場所です。おそらく代わりになると思われます。 -- PG_MANA 2018-04-07 (土) 02:04:38
  • ありがとうございます -- 名無しさん 2018-04-07 (土) 10:39:17
  • アセンブラの書き方について。本に書いてあるとおりにアセンブラを書き、実行したところ、エラーが出ました。見た感じ文字の打ち間違えはないので、ここでアセンブラの書き方が悪いと判断し、質問。 1、アセンブラ(x86)は大文字ではなく小文字で記述しても問題はないか。 2、アセンブラの命令(?)(例えばmov)と、実行するレジスタの間に開けるスペースの文字数は決まっているのか。   例えば、(mov ax, 1)と(mov ax, 1)は同じなのか。 3、ラベル(?)(entry: )の有効範囲について。ラベルは次のラベルが現れるまで無効にならないのか?それか、一行開けたら無効になる、というように、厳密な文法が存在するのか? 以上が疑問に思った点です。急いで書いたため、口調がエラソウになってしまいましたが、少しでも僕の疑問を解消するために付き合ってくれたら嬉しいです感謝します。 -- 名無しさん 2018-04-07 (土) 12:38:21
  • スペースが省略されてしまっていますね。。。(mov_ax,1)と(mov_______ax,__________1) -- 名無しさん 2018-04-07 (土) 12:40:28
  • 環境はNASKかNASMと仮定します。1:問題ないと思います、自分は小文字で記述しています。 2:これも問題ないと思います。 3:ラベルの定義は関数のように考えるよりも付箋と考えるべきです。ラベルとは該当箇所のアドレスを指すと考えると良いです。例えばentryラベルがあったとして、「mov eax,entry」とするとentryラベルの場所のアドレスがeaxが代入されます。よって「jmp entry」はentryラベルのあるアドレスへ飛ぶという命令になります。よって質問の答えとは、「ラベルの有効範囲は1行」となりますが、おそらく動作不良とは関係がない気がします。もう一度コードをよく見直し、それでもうまく行かないようでしたら、コードを貼るかURLを添付するなどするとより的確な回答が得られるのではないでしょうか。 -- PG_MANA 2018-04-07 (土) 18:27:33
  • windows10pro(64bit)にて3日目(harib00g)をやろうとしているのですが、make run が正常に終了しません。 -- maru 2018-09-25 (火) 09:31:08
  • ↑途中で投稿してしまいました。edimg.exeでcopy command error.となるので、copyをcmd.exe /C copy としたのですが何も変わりません。何か見落としなどあるでしょうか。 -- maru 2018-09-25 (火) 09:32:40
  • オペミスでした。申し訳ございません。 -- maru 2018-09-25 (火) 10:14:00
  • ネット通販で本を購入したのですが、付属のCD-ROMが入っておらず1日目から詰んだしまいました -- 名無しさん 2018-10-03 (水) 20:37:28
  • ↑途中で投稿してしまいました…!この場合、どうしたらよいでしょうか…? -- 名無しさん 2018-10-03 (水) 20:40:35
  • 初版第16刷発行 OS自作入門の第1章のp 25 のDB命令に1バイト直接書くとかかれていますが、具体的には、何を書いているんでしょうか? -- 名無しさん 2018-10-09 (火) 13:36:17
  • 初版第16刷発行 OS自作入門の第1章のp 25 のDB命令に1バイト直接書くとかかれていますが、具体的には、何を書いているんでしょうか? -- 名無しさん 2018-10-09 (火) 13:36:18
  • 初版第16刷発行 OS自作入門の第1章のp 25 のDB命令に1バイト直接書くとかかれていますが、具体的には、何を書いているんでしょうか? -- 名無しさん 2018-10-09 (火) 13:36:18
  • 初版第16刷発行 OS自作入門の第1章のp 25 のDB命令に1バイト直接書くとかかれていますが、具体的には、何を書いているんでしょうか? -- 名無しさん 2018-10-09 (火) 13:36:18
  • DB命令の名無しですが、0xがつくものは、16進数ということは、理解しています。 -- 名無しさん 2018-10-09 (火) 13:40:34
  • 上記のCDの付いていない本を買った者です。他のブログにて解決方法を知ることができました。 -- 名無しさん 2018-12-12 (水) 08:46:19

コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2018-12-12 (水) 08:46:20 (162d)