質問板ここは自作OSが作りたいが、いったい何から始めればいいんだ!!という人の駆け込み寺のような存在です。ここの管理人本人も実はあまりわかっていないところがあるのでご了承ください。その場合は皆さんの力を分けてください、お願いします。トピックは私の許可なしで作成しておk、むしろ大歓迎いたします。フォーラム(掲示板)ルールルールとしては以下のとおりです。守らない場合厳しい罰則があるのでご注意ください。1:抽象的な質問はしないたとえば、「○○をするにはどうすればいいのですか?」という質問があったとします。これは本当に困ります、だって具体的なことが描かれていないので、どう返答すればいいのかわかりません。「ここをこうしたらこのような実行結果になったのですが、どのように実装すればもっとよくなりますか?」などの質問にしてください。するとこちらも返答しやすくなります。2:ソースコードはじかに書かないこれはどういう意味かというと、ソースコードは[code][/code]で囲んでくださいという意味です。詳しくはフォーラムルールを読むとわかりますが、これをしないとするとでは、大違いです。しないと大変読みづらくなりやる気がうせてしまいます。3:作った作品は必ず公開(リンクを貼る)することこれは、私の勉強になるだけではなくほかの方の勉強にもなるだろうなと思ってこのルールが思いつきました。要するに開発した人に「あなたの作ったソースコードをくださいと要求する」ということです、はい。そんなめんどくさいことをするのか?それはちょっとしかソースコードを変えて作品公開するというのを防ぎたいという思いからです。(当たり前ですが、たったコードを一行ぐらい変えて公開するだなんて考えられませんね)以上ですが、また追加する場合もありますのでよろしくお願いします。8年前OS作成時の質問板です。8年前>TororoShinkuさんトピックを立ててくださいまして、申し訳ないです。>TororoShinkuさんトピックを立ててくださいまして、申し訳ないです。実はこちらからトピックを立てようとすると出来ないので、他のトピックも立ててもらえませんか?よろしくおねがいします了解です。8年前TIMEコマンドを応用した時計を作ろうかと実装しているのですがこちらが問題の自作の時計のソースコードです。*/}}api_close();api_end();}これははりぼてOSにある「NOODLE」アプリをちょっとまねしてみたものですがRTCの読み込みがこれでうまくいっているはずなのに、OSで例外がおきてしまいます。これはなぜでしょうか、教えてください。*/}}api_close();api_end();}全く関係ないかもしれませんが、readrtcはアプリから呼び出すためには、hrb_api内に定義しないとダメなのかもしれません。8年前>TororoShinkuさん分かりました、やってみます。8年前ずいぶんと遅くなりましたが、まだ前に質問した問題は解決していません。それで、今度はもう一つ、ちょっとした興味で質問したいと思います。作ったisoを起動して試してます。8年前お久しぶりです。質問をさせていただきます。今度はタイトルコマンドを実装しようと思っているのですが、なかなか思うようなものができません。タイトルコマンドは左上にあるアプリ名などを、ユーザーが入力した文字列に変えてしまうというものです。cmdline」とうつと、左上にcmdlineと表示できます。*titleの中身をうまいこと変えればできることだけです。今言ったことをプログラムにするとこのような感じです。return;}私からは以上です。8年前どうしても割り込み処理がうまくいかないので質問させていただきます。OSの自作を始めてから、ブートセクタの読み込み、GDTの初期化、画面へのデバッグ表示まで行えるようになりました。次はOSには欠かせない、マルチタスクを実現しようと思ったのですが割り込み処理で躓いてしまいました。バイナリを駆使しても解決しそうになかったので皆様の知恵をお貸しいただければと思い、書き込みをしました。私が作ろうと思っているOSは、30日OS自作本のようなGUI主体ではなく、UNIXライクなCUI主体のものです。マルチタスクの実装ですが、私は以下の順番で行えば良いと思っています。マルチタスクの実装(TSS関連)最初にキーボードの割り込みハンドラの実装に取りかかりました。割り込みハンドラの作成は30日のOS自作入門を参考(ほとんど同じ)にしています。違いは、asmhead.nasのwaitkbdoutの処理を行っていないことくらいです。ブートセクタでOSのサイズ分をディスクから読み込むようになっています。qemuのモニタリング機能を使用し、GDTとIDTが適切に設定されていることは確認しました。症状としては、キーボードの割り込みの時にIDTに設定されたアドレスにジャンプせず、まったく違う部分のアドレスにジャンプしてしまうということです。割り込みが起こる度に、まったく異なるアドレスにジャンプします。割り込みが起きているのはわかるのですが。waitkbdoutがもしかしたら怪しいのかなと思っていますが、自作本見た感じだとあまり必要のない処理のような気がしますし。現在は、はじめて読む486を見ながらさらに原因究明をしている状態ですが、時間がありましたら教えてください。私も解決したらここに書き込みをします。[追記]あと1つ30日自作本と異なることがあります。);として、PICの初期化直後にキーボードの割り込みを許可しています。*/としその後↓の処理を行っています。*/もしかしたら関係あるかもしれません。返信ありがとうございます。うーん、やはりだめそうですねぇ。PITの割り込みを許可したためか、割り込みが起こる度に、IDTとGDTが奇妙な値に変化し、手がつけられない状態となってしまいました。これはPITの割り込みハンドラを作成していないのが原因と思い、PITの割り込みは今のところ止めておきました。IDTの初期化で0x21への割り込みハンドラの設定がおかしい気がしました。抽象的な話になってしまいそうなのでソースコードを用いることにします。);メモリマップは自作本と同様です。IntHook21というのが割り込みハンドラです。この設定により、IDTにはIntHook21のアドレスが設定されます。そこで、バイナリでIntHook21のアドレス値を見てみると、0x1449となっており、0x280000+0x1449となっていません。セレクタでGDTの2番目を指定しているため、0x1449->0x280000+0x1449の変換が行われているはずです。その後、色々調べてみると、0x281449には別のコードが入っていることがわかりました。これは自作本と異なり、ブートセクタ+その他諸々を0x280000にコピーしていないためです。現在まだ完全に原因がわかっていませんが、どうやら私がリンカスクリプトをきちんと理解していないことと、割り込みハンドラの設定がきちんと行えていないことが原因なのかもしれません。原因がつかめましたら再度ご報告します。自作本のソースコードを見れない環境にいるので、自作本で説明されていないソースコードが見れないのが残念なところです。TororoShinkuさん、返信ありがとうございます。