q_and_aの過去ログ(0000)

  • (by K, 2006.03.28)

ログ

  • 第1版の第1刷のp.93のVRAMの番地についてです。0xa000+319+199*320=0xaf9ffと0xaffffの値の違いの意味が分かりません。よろしくお願いします。 -- 名無しさん 2006-03-04 (土) 04:24:28
  • 初ご質問ありがとうございます。メモリマップ上ではVRAMは0xa0000〜0xaffffとなっています。しかし(319,199)の座標の画素に相当するのは0xaf9ff番地です。確かにこれはちょっとヘンです。では0xafa00番地に書き込んだらどうなるでしょうか。はい、何もおきません。でも書き込んだ値はもちろん記憶されます。つまりVRAMというメモリはあるのですが、画面外になってしまうので表示されないのです。おそらくもっと画素の多い画面モードになると、0xafa00〜0xaffffの内容も表示できるようになるのでしょう。 -- K 2006-03-04 (土) 10:47:37
  • 第1版の第1刷のp.45のMakefile導入したCD-ROM内のhelloos5をコマンドプロンプト上で「make run」するとhello.img , ipl.bin , ipl.lst は作成されるのですがprocess_begin: CreateProcess((null), copy helloos.img ..\z_tools\qemu\fdimage0.bin, ...)failed.と表示されhelloos4までに見られた「hellio,world]実行画面が表示されません。ご回答よろしくお願いします -- 名無しさん 2006-03-05 (日) 17:29:32
  • ご質問ありがとうございます。もしやCygwinをお使いではありませんか?もしそうであれば、Cygwinはなぜかcopyコマンドに干渉するので、pathの設定などを見直してください。 -- K 2006-03-05 (日) 18:05:45
  • 第1版の第1刷のp.167のプロテクトモード移行についてです。2つ疑問があります。「MOV CR0,EAX」の時点ではCSの値は0x0000に設定されているようですが、これはCPUの仕様でしょうか?また、プロテクトモードでCSが0x0000の場合はGDTのヌルセレクタを用いたアドレス変換が行われる、という解釈でいいでしょうか?以上よろしくお願いします。 -- 名無しさん 2006-03-09 (木) 15:28:48
  • CR0に代入した直後も、CSの解釈はリアルモード(16ビットモード)と同じ方法になっています。これはほかのセグメントレジスタにも言えます。CSやその他のセグメントレジスタへの代入命令が実行されたときになって初めて、GDTを参照してセグメントレジスタをプロテクトモード解釈するようになります。またプロテクトモードでは、CSに0(ヌルセレクタ)を代入することはできません。無理やり代入しようとすると一般保護例外になるはずです。 -- K 2006-03-09 (木) 17:28:27
  • process_begin: CreateProcess((null)...ですが、Makefile中のすべてのcopyをcmd.exe /C copyに、delをcmd.exe /C delに書き換えると正常動作します(Win98系の場合は、cmd.exe /Cではなく command.com /C)。例外で、edimg.exeの引数に使っているcopyは書き換えてはだめです。 -- uchan 2006-03-09 (木) 18:54:07
  • p18,19のhelloosを表示させるという部分なのですが、自作したものとサンプル、共にinstallをコンソールに打ち込んでも、指定されたプログラムは実行できません、と出てしまいます。runの方はうまく起動してくれるのですが、解決方法がありましたら教えていただけませんでしょうか?初歩的な質問で恐縮です。
  • p23の「超長いソースプログラム」のhelloos.nas(184320行)でnask.exeを実行すると「NASK : too large helloos.nas」というエラーが発生しました。naskソースコードが多き過ぎるのでしょうか? -- まあ 2006-03-12 (日) 11:42:57
  • まあさんへ。はいそうです。今のnaskはそんなに長いプログラムに対応できていません。どうもすみません。 -- K 2006-03-12 (日) 12:35:52
  • installについてご質問くださった方へ:お名前が入っていないのはなぜでしょうか。消してしまわれたのでしょうか。できればそういう編集はしないでください。さてご質問の件ですが、お使いのOSやツールに理由があるように思います。まずはお使いのOSを教えてください。 -- K 2006-03-12 (日) 12:39:06
  • 編集中に同時に消してそのままにしてしまいました。申し訳ありません。installについての者ですが、使用しているOSはXPのHomeでSP2適用済みのOEM品です。よろしくお願いいたします。 -- kame 2006-03-12 (日) 13:59:28
  • お返事ありがとうございます。WinXPのSP2は手元にないので分かりませんが、読者のほかの方で使っておられる人は多いと思うので、きっとその人たちが何かいいアドバイスをくれます。少し待ってみてください。 -- K 2006-03-12 (日) 15:07:50
  • 横から失礼。「install.bat」が、「install」のままなんてことがないですか? または、印刷の関係でスペースが見にくいので打ち間違いをされているとか?? スペースを確認してみてください。わざとスペースを二つとって見やすくするとこうですね。 「 ..\z_tools\imgtol.com w a: helloos.img 」  (的外れだったらごめんなさい)     -- hideyosi 2006-03-12 (日) 15:33:51
  • kameさんへ。僕もWinXP home SP2を使っていますが、正常にrunとinstallできます。http://www.microsoft.com/resources/documentation/WindowsServ/2003/enterprise/proddocs/ja-jp/Default.asp?url=/resources/documentation/WindowsServ/2003/enterprise/proddocs/ja-jp/safer_trouble.asp(IEのみ対応?)ここにそれらしきことが書いてあるようです。イベントビューアは、コントロールパネルの「管理」の中にあります。とにかく、今僕には原因がわかりません。 -- uchan 2006-03-12 (日) 15:36:16
  • hideyosiさん、uchanさん、回答ありがとうございます。install.batはきちんとバッチファイルとプロパティで確認できるので問題ないようです。記述のミスかとも思ったのですが、CD内のサンプルを利用しても同じ結果となってしまい、やはり他に原因があるのかな?と思っています。イベントビューアでの確認でも特に異常は見当たりませんでした。プロフェッショナルの入っているノートではinstallコマンドは通るのですが、なにぶんフロッピーディスクが搭載されていないものですから。一応今からノートとの環境を比較してみたいと思います。 -- kame 2006-03-12 (日) 22:51:57
  • 自己解決しました!どうやらディレクトリの階層深く(正確には四つ下です)にtolsetを置いてしまったことが原因でした。初歩的なミスでお騒がせして申し訳ありません。皆様本当にご助言ありがとうございました。 -- kame 2006-03-13 (月) 00:50:09
  • kameさん:おめでとうございます。よかったですね。(^^) がんばって進んでくださいね。 -- hideyosi 2006-03-13 (月) 01:12:49
  • ほほうなるほど・・・。まさかそんなことで動かなくなるなんて知らなかったのでむしろ勉強になりました。多分パスが64文字を超えると起動不可能になるのだと思われます。ご報告ありがとうございました。 -- K 2006-03-13 (月) 01:50:27
  • P87のset_paletteについて質問です。io_out8(0x03c9, rgb[0] / 4); とありますが、この/4の意味はなんですか?輝度の調節のためでしょうか? -- peco 2006-03-16 (木) 00:39:12
  • とてもよいご質問をありがとうございます。その部分の説明を書いていませんでした(書いたつもりになっていました)。私たちは通常、輝度を00-ffつまり0〜255として扱っていますが、ビデオカードの標準状態では、輝度を0〜63の範囲で指定しなければいけないのです(63で255の明るさになる)。そのための割り算です。 -- K 2006-03-16 (木) 08:48:53
  • 割り込み処理に関して疑問があります。例えば、harib04gのint.cのinthandler21のio_out8(PIC0_OCW2, 0x61);の直後にマウスからの割り込み信号が来た場合、dataの値はどうなりますか。 -- 名無しさん 2006-03-16 (木) 08:51:18
  • これまたよいご質問ありがとうございます。キーボードやマウスにはCPUの応対が間に合わなかったときのための小さなFIFOバッファが付いています。したがいまして、「データを読まない限り」次のデータが先にやってくることはありません。つまりデータを取りこぼしてしまうことはないのです。この例の場合、PICは割り込み監視を再開するわけですが、キーボードはPICが監視を再開したかどうかは関係なく、とにかくデータポートからデータを取ってもらえるまで、そのときのデータを保持することになります。ということで、期待通り動きます。 -- K 2006-03-16 (木) 11:35:04
  • 各種開発ツールのマニュアルなどはないのでしょうか。私が特に気になるのは、edimage -- 名無しさん 2006-03-19 (日) 09:51:32
  • ↑すいません。ボタンを押し間違えてしまったので書き直します。  各種開発ツールのマニュアルなどはないのでしょうか。私が特に気になるのは、edimgで、edimgに与えるコマンドがどのような効果を持っているのかがよくわかりません。また、naskについてですが、ソースにエラーがある場合、naskではエラー箇所は示さずソース内にあるエラーの個数のみを出力するようですが、naskを利用してエラー箇所を探すことはできないのでしょうか。 -- 名無しさん 2006-03-19 (日) 09:56:03
  • 大変よい質問をありがとうございます。しかしただ今当方が疲れておりますので、お返事は2日間くらいお待ちください。 -- K 2006-03-19 (日) 15:56:03
  • naskのエラー個所探しについては、tools/naskにまとめたので、まずはそちらをご覧ください。それでまだ不明な点があれば、また質問してください。edimgはもうしばらくお待ちください。 -- K 2006-03-19 (日) 23:42:46
  • edimgも書きました。tools/edimgを見てください。それでまだ不明な点があれば、また質問してください。 -- K 2006-03-21 (火) 17:23:16
  • bootpack.cのHariMain関数を、自分の好きな関数名に変えたいです。如何すれば良いでしょうか。 -- M59 2006-03-24 (金) 18:34:08
  • 質問ありがとうございます。advance/NotHariMainにまとめましたのでご覧ください。 -- K 2006-03-24 (金) 20:28:15
  • 初版の第1刷のp19で!cons_nt.bat(!cons_9x.batmo)で開いたコンソールでrunをするとQEMUのウインドウは表示されるのですが、ウインドウの中が表示できず、進めなくなってしまいました。何かアドバイスいただけないでしょうか。環境はWinXP Home Sp2です。 -- 名無しさん 2006-03-28 (火) 00:44:02
  • 状況がよく分からないの教えてください。表示できなくて進めなくなったのは、QEMUのウィンドウでしょうか?それとも!cons_nt.batのウィンドウでしょうか? -- K 2006-03-28 (火) 00:51:10
  • お忙しいところ済みません。 -- 名無しさん 2006-03-28 (火) 09:58:21
  • asmhead.nas において、JMP DWORD 2*8:0x0000001b 命令で、C 言語プログラムの bootpack(HariMain) に跳べるのはなぜでしょうか? -- kero 2006-03-28 (火) 09:59:43
  • 第一版第一刷 P.171 下部に、「実際は、0x280001b 番地から実行することになります。これは、bootpack.hrb の0x1b 番地です。」となっていますが、bootpack.hrb を見ると、harib01b 等では、bootpack の先頭は、0x00000024 あたりになっていると思うのですが。 -- kero 2006-03-28 (火) 10:00:36
  • 行が分かれてしまって済みません -- kero 2006-03-28 (火) 10:03:38
  • ご質問ありがとうございます。その疑問は、p.171の段階では分からないのですがp.461まで進むと分かるようになりますので、それまで楽しみにしていてください。 -- K 2006-03-28 (火) 10:40:24
  • 初版の第1刷のp19で!cons_nt.bat(!cons_9x.batでも)で開いたコンソールでrunをするとウインドウの中が表示できない件ですが、表示できないウインドウはQEMUのウインドウです。タイトルバーなどは表示されますが、ウインドウ内が描画されず、他のウインドウを重ねると重ねたウインドウの表示がQEMUウインドウの中に残って再描画されない状態になってしまいます。 -- 名無しさん 2006-03-28 (火) 22:34:05
  • まずは名無しさんへ。それはおそらくQEMUが暴走していると思われます。とりあえず暴走の理由は次の3つが考えられます。一つ目はhelloos.imgの入力ミスです。これはとりあえずCD-ROMからhelloos.imgをコピーすれば解決できます。二つ目はrun.batの入力ミスです。これもCD-ROMからコピーすれば解決できます。最後の可能性は、お使いのWindowsのバージョンです。もし95、98、Meであれば、p.1の前に書いてある文章をよく読んで、9x用のqemuが動くようにしてください。このどれでも解決しない場合は、また質問してください。 -- K 2006-03-28 (火) 23:51:47
  • cons_nt.bat(!cons_9x.batでも)で開いたコンソールでrunをするとウインドウの中が表示できない件ですが、hellos.ing,run.batともにCDからコピーしましたが変わりませんでした。またOSはWinXP Home SP2です。 -- 名無しさん 2006-03-29 (水) 00:13:23
  • asmhead の JMP DWORD 2*8:0x0000001b に関して回答有難うございました。P.461 で hrb ファイルヘッダの e9 XX 00 00 00 で、 0xXX +0x20 の _HariStartup に JMP して C 言語プログラムが動作するのであろうことは理解できましたが、何故 0xXX +0x20 へ跳ぶのでしょうか? XX 番地へ跳ぶなら解るのですが。宜しくお願いします。 -- kero 2006-03-29 (水) 09:51:55
  • P179のmemtest_subの関数の中でポインタpをvolatileで宣言すれば、アセンブラを使わず期待した結果を得ることができるのではないですか? -- yyusuke 2006-03-29 (水) 14:27:21
  • yyusukeさん。実にその通りなのです!僕もそのことを自分で発見したときはうれしかったです。impressionsにも同様の書き込みがあります。 -- uchan 2006-03-29 (水) 17:27:12
  • 名無しさんへ。似たような事例報告を1件だけ見たことがあるので、もしかしたらその人と同じ問題かもしれません。もしそうならどうやってもダメかもしれませんが、とにかく次の対策案を書きます。(1)tolsetの入っているハードディスクの空き容量がtolsetなどを入れた状態で5MB以上なのを確認してください。(2)5MB以上でもダメなら、WinNT系用のQEMUとの相性が「なぜか」悪い可能性が考えられますので、あえてWin9X用のQEMUを使うように設定を変えてみてください。その場合でも使うのは!cons_nt.batのほうで、!cons_9x.batを使ってはいけません。 -- K 2006-03-29 (水) 23:07:58
  • keroさんへ。E9 xxxxxxxx は5バイトの相対JMP命令です。「相対」JMP命令なので、JMP先の指定は行き先を直接書くのではなく、「この命令の終わりから何バイト先か」を記述することになっています。だからそれでいいのです。 -- K 2006-03-29 (水) 23:10:59
  • cons_nt.bat(!cons_9x.batでも)で開いたコンソールでrunをするとウインドウの中が表示できない件ですが、HDDは5MB以上あります。Win9x用のQEMUの設定とはどのように行うのでしょうか。どっちにしても、run.batするのであれば同じQEMUが起動するように思うのですが違うのでしょうか。run.batでqemu.exeの起動オプションを変更するのでしょうか。たびたび申し訳ありませんがよろしくお願いします。 -- 名無しさん 2006-03-30 (木) 21:29:54
  • 名無しさんへ。〜の件と何度も書くのは明らかにムダなので、できれば適当な仮名を名乗ることにしていただきたいところです。さて本題ですが、同じrun.batであっても違うQEMUが起動するようになります。Win9X用のQEMUを使う方法については、上記の 03-28 23:51:47 でお答えしたとおり、p.1の前のページの説明を参照してください。 -- K 2006-03-30 (木) 22:51:17
  • QEMUが起動しない件ですが、理解できず申し訳ありませんでした。今理解できました。p.1の説明のようにやってみましたが、結果は変わりませんでした。 -- 2006-03-30 (木) 23:29:08
  • Jさんへ。そうでしたか、Win9X用でもダメでしたか・・・。大変申し訳ないことに、筆者としては万策尽きてしまった感があります。とりあえずQEMUがなくても開発そのものはできますし、フロッピーディスクやCD-RW等を併用すれば実機テストができます。またもしかしたら他のエミュレータならうまくいくのかもしれません。ただ、いずれにせよ「make run」のお手軽な開発ではなくなってしまうので、申し訳ないです。これからいろいろ調べてfaq/qemuにまとめますので、1週間後くらいにこのページをチェックしてみてください。まずはここまでいろいろと試してくださりありがとうございました。 -- K 2006-03-31 (金) 00:02:25
  • Jさんへ。QEMU以外のエミュレータで、VMware Playerというのが有ります。これは、VMware Workstationという有名なエミュレータの機能限定版の様な物で、無料です。エミュレートするときに必要な仮想マシンの設定ファイルは他の人に作ってもらう必要がありますが、たぶんそのときになったら僕が作るでしょう。 -- uchan 2006-03-31 (金) 14:34:00

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