件sort評価が高い順sort新着順sort古い順linkcheckベストアンサー+2こんにちは。CPUに含まれるレジスタがどのように働いて文字や色を画面に表示ているのかについて。CPUに含まれているレジスタは画面表示と直接的には全く無関係です。グラフィックカード上のVRAM(ビデオRAM)の内容をグラフィックカード上のLSIが液晶ディスプレイが受け取ることができる信号形式で出力し、それを液晶ディスプレイが表示します。(以下は仮想の話です。具体的な部分は現実とは一致していません。考え方を説明するための1例として捉えて下さい。)VRAMはグラフィック・ドライバが動作しているメモリ空間上の例えば0x8000番地からに配置されます。0)座標のピクセルの色が書かれます。RGBの順序でそれぞれ0~255の値でしめされます。0)座標のピクセルが表示されます。0)座標のピクセルの色が同様な方法で記録されます。グラフィック・カード上のLSIはこのVRAMをスキャンし、表示先がアナログディスプレイなら、D/AコンバータにてRGBの3色のデジタル値を電圧へ変換して液晶ディスプレイへ送るわけです。NVIDIAコントロールなどにリフレッシュ・レートとして60Hzなどと設定できますが、これは1画面を1/60秒(=約16.6mSec)でスキャンして表示しています。グラフィック・カード上のLSIはVRAMの1画面分のエリアを1/60秒毎に読み出して液晶ディスプレイへ送っています。そのスキャンの合間を縫って(もしくは2ポートVRAMならば同時に)CPU側からVRAMへ書き込むことができます。それにより画面に表示する内容を更新します。現代のディスプレイは大抵ビットマップ・ディスプレイですから、Windowsはがある文字を表示する場合、その文字コードに対応する文字のビットマップ形式のパターンをフォントを使って生成し、それを表示したい座標に対応するVRAM上へ書き込みます。これらの処理自体はCPUが行いますが、CPUにとっては単にRAMへデータを書き込んでいるのと同じです。CPU自体はそのRAMがVRAMなのか通常のメイン・メモリなのか区別しないで処理します。それを区別するのはWindowsシステムや表示を行うアプリです。以上の基本的な仕組みについては、例えばTFT液晶LCD+AVRマイコンで自作フォントを表示等の記事を参考に自作すると非常によく理解できると思います。最終的にPCでやることを目指す場合は、それでは全く不足ですので、そのあたりに詳しい方のところに「弟子入り」して教えて頂くようなことが必要になるかも知れません。「弟子入り」は、そのような開発を行っている会社でそのような部署でそのような仕事の担当として配属されれば、教育を受けることができるだろうとの意味です。そのためには、最低でも基本的な仕組みくらいは自力で身につけておかないと厳しいだろうと思います。「TFT液晶LCD+AVRマイコンで自作フォントを表示」では、LCDへ送るためのポートとしてPORTBやPORTCをハードコーディングしています。Playの超複雑な仕組みを使ってディスプレイ・ドライバのインストール時に自動的に決定し、その値をレジストリへ記録しています。ディスプレイ・ドライバはレジストリを読み出して、画面表示に必要なアドレス等を入手します。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。12:43画面表示に必要なアドレス等を入手しますに関して、cpuとディスプレイにも同じように言えるとしたら、ディスプレイで文字を表すためのアドレスと文字データを送れば文字が表示されるというわけですね。関して、cpuとディスプレイにも同じように言えるとしたら、ディスプレイで文字を表すためのアドレスと文字データを送れば文字が表示されるというわけですね。13:41貼っていただいたurlを読ませて頂きました。あの、個人的に思ったのですが、文字や色を表示するのに大事なのはレジスタとかではなく、ディスプレイへのポートを流れるアドレスが重要なのでは無いかと思いました。アドレスとレジスタにあるデータによってディスプレイに文字や色を表示しているのではないかと思いました。貼っていただいたurlを読ませて頂きました。あの、個人的に思ったのですが、文字や色を表示するのに大事なのはレジスタとかではなく、ディスプレイへのポートを流れるアドレスが重要なのでは無いかと思いました。アドレスとレジスタにあるデータによってディスプレイに文字や色を表示しているのではないかと思いました。14:14「アドレスとレジスタ」の意味がよく分かりませんが、ディスプレイに文字や色を表示するには、表示したい位置に対応するVRAMに表示したい色を表す値を書き込みます。それを文字の形に並べることで文字を表示します。Ramと表記しています。RAMと表現するのは適切ではないからでしょう。RAMはAVRのメモリバス上に配置されるのではなく、I/Oポートを介して書き込むようです。理想はメモリバス上にVRAMがあるようなビデオカードを簡単に取り扱えるコンピュータを入手できるとベストですが、現代では学習向きのそのようなコンピュータとディスプレイは少ないようです。探してみたらないわけではなさそうです。http://www.nds-jpn.com/mono-lcd/graphic-mcu.htmlhttp://shop.cqpub.co.jp/hanbai/books/31/31401.html(他にもありますので「lcd内蔵マイコン」でググって見て下さい。)「アドレスとレジスタ」の意味がよく分かりませんが、ディスプレイに文字や色を表示するには、表示したい位置に対応するVRAMに表示したい色を表す値を書き込みます。それを文字の形に並べることで文字を表示します。Ramと表記しています。RAMと表現するのは適切ではないからでしょう。RAMはAVRのメモリバス上に配置されるのではなく、I/Oポートを介して書き込むようです。理想はメモリバス上にVRAMがあるようなビデオカードを簡単に取り扱えるコンピュータを入手できるとベストですが、現代では学習向きのそのようなコンピュータとディスプレイは少ないようです。探してみたらないわけではなさそうです。(他にもありますので「lcd内蔵マイコン」でググって見て下さい。worldなど表現できるのかもしれません。printf関数を自作はしませんが、自作osの本で文字をアドレスとrgbデータから作る項目があったので読んでみます。worldなど表現できるのかもしれません。printf関数を自作はしませんが、自作osの本で文字をアドレスとrgbデータから作る項目があったので読んでみます。編集おはようございます。ディスプレイに文字や色を表示するには、表示したい位置に対応するVRAMに表示したい色を表す値を書き込みます。それを文字の形に並べることで文字を表示します。説明でやっと理解できました。以上を考えるとレジスタうんぬんではなく、VRAMにデータが送れればどのレジスタを指定しても良いと考えています。(ハードの構造にもよりますが。)まあ、PCに関してのVRAMのメモリにどのようにアクセスするかは調べていないのでわかりません。したらI/Oポートに繋がったレジスタなどにデータを入れることで、VARMにデータを送ってくれるのかもしれませんが。Chironianさんに以前教えていただいたAVRマイコンとカラーLCDを使って何か作ってみたいと思います。そのあとにアセンブリ言語を使ってOPENCVなどと組み合わせて円検出をさせようと考えています。ディスプレイに文字や色を表示するには、表示したい位置に対応するVRAMに表示したい色を表す値を書き込みます。それを文字の形に並べることで文字を表示します。説明でやっと理解できました。以上を考えるとレジスタうんぬんではなく、VRAMにデータが送れればどのレジスタを指定しても良いと考えています。(ハードの構造にもよりますが。PCに関してのVRAMのメモリにどのようにアクセスするかは調べていないのでわかりません。したらI/Oポートに繋がったレジスタなどにデータを入れることで、VARMにデータを送ってくれるのかもしれませんが。Chironianさんに以前教えていただいたAVRマイコンとカラーLCDを使って何か作ってみたいと思います。そのあとにアセンブリ言語を使ってOPENCVなどと組み合わせて円検出をさせようと考えています。編集おはようございます。ベストアンサー後に申し訳ありません。nuoなどでしょうか?基礎勉強を兼ねてスタック、レジスタ、アセンブリ言語を学びたいと思います。arduinoでopencvであったり機械学習を行っている記事もあるので試してみたいと思います。arduinoなどのマイコンからいずれはPCのCPUやGPUの学習に移りたいと思います。アセンブリ言語に関してはarduinoはGCCとも対応していると聞きましたし、PCのCPUやGPUのアセンブリの言語の学習にarduinoでのアセンブリ学習も役に立つと思います。ベストアンサー後に申し訳ありません。基礎勉強を兼ねてスタック、レジスタ、アセンブリ言語を学びたいと思います。arduinoでopencvであったり機械学習を行っている記事もあるので試してみたいと思います。arduinoなどのマイコンからいずれはPCのCPUやGPUの学習に移りたいと思います。アセンブリ言語に関してはarduinoはGCCとも対応していると聞きましたし、PCのCPUやGPUのアセンブリの言語の学習にarduinoでのアセンブリ学習も役に立つと思います。10:06私はarduinoが製品化される前にATMEGAを使っていたのでarduinoを使ったことはありません。情報がかなり多いですし、C/C++をベースとしたコンパイラが使えるようですから、コンピュータの基本的な仕組みを学ぶには向いていると思いますよ。私はarduinoが製品化される前にATMEGAを使っていたのでarduinoを使ったことはありません。情報がかなり多いですし、C/C++をベースとしたコンパイラが使えるようですから、コンピュータの基本的な仕組みを学ぶには向いていると思いますよ。10:52そうだったのですか。はい、頑張ります!ありがとうございます。ありがとうございます。12:24いえ、ラズパイもないです。ラズパイが流行りだすより前にArmadillo(https://armadillo.atmark-techno.com/)を使ったことがあります。Android用の入力デバイスの開発でした。その時、linuxのカーネルとデバドラを少し読みました。若干のハードウェア制御も行いましたが、アセンブラを読む必要は事実上ありませんでした。いえ、ラズパイもないです。ラズパイが流行りだすより前にArmadillo(https://armadillo.atmark-techno.com/)を使ったことがあります。Android用の入力デバイスの開発でした。その時、linuxのカーネルとデバドラを少し読みました。若干のハードウェア制御も行いましたが、アセンブラを読む必要は事実上ありませんでした。14:00そうなのですか。アルマジロ、初めて聞きました。アルマジロ、初めて聞きました。キャンセル完了するlink+26502asm.comを開きます。cornerと打ち込んで、Compile→Runすると、右の黒い画面に白と緑のドットが表示されます。楽しいねwハードを直接触りたいなら、こういうシンプルなエミュレータとか、昔のPC(8bit機)のエミュレータなんかで遊ぶのがいいですよ。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。12:09解答ありがとうございます。corのstaやldaはアセンブリ命令なのですか?あまりみた事がないですが。解答ありがとうございます。13:10いちいちコードを全文引用する必要がありますか?(最後の二行だけで十分でしょう)いちいちコードを全文引用する必要がありますか?(最後の二行だけで十分でしょう)キャンセル完了するlink0グラフィックボードなどに実装されているビデオメモリ(VRAM)に表示する内容(座標や色)に応じてビットを立ててるだけだと思います。表示において文字だとか数字だとか区別はありません。VRAMに表示データを転送するにはDMAが使われていると思われます。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。01:22どうもありがとうございます。表示において文字だとか数字だとか区別がないとのことですが、それはbitデータとしては区別されているのでしょうか?例えば000000001は文字のAを表すとして11110001は色の赤を表すようにできているのでしょうか?bitを駆使してCPUが物理的に区別できるようにしているのでしょうか?どうかよろしくお願いいたします。ありがとうございます。02:01CPU内部では別にbitデータで文字や色を区別しているというわけではありません。ものすごく簡単に言うと、画面表示に関してはCPUの仕事はデータポートのデータを指定されたアドレスに書き出すのみで、そのアドレスに接続されているグラフィックボードなどが、受け取ったデータを基に、文字を表示したり、色を付けたりします(実際にはTaroToyotomiさんが書かれているように、いちいちCPUが表示データをひとつひとつグラフィックボードに転送するような効率悪いことはせずに、DMAコントローラにデータをVRAMに転送するように指示を出すだけでしょうが)。CPU内部では別にbitデータで文字や色を区別しているというわけではありません。ものすごく簡単に言うと、画面表示に関してはCPUの仕事はデータポートのデータを指定されたアドレスに書き出すのみで、そのアドレスに接続されているグラフィックボードなどが、受け取ったデータを基に、文字を表示したり、色を付けたりします(実際にはTaroToyotomiさんが書かれているように、いちいちCPUが表示データをひとつひとつグラフィックボードに転送するような効率悪いことはせずに、DMAコントローラにデータをVRAMに転送するように指示を出すだけでしょうが)。07:35例えば画像ファイル(*.bmp)とかの中身はRGB値の羅列で文字とか数字を意識してないでしょ?CPUの仕事はこのようなビットストリームをVRAMに転送することです。ディスプレイの表示に関してはグラフィックボードの仕事です。CPUの仕事はこのようなビットストリームをVRAMに転送することです。ディスプレイの表示に関してはグラフィックボードの仕事です。編集グラフィックボード専用のレジスタなんてありません。周辺機器を制御するのに、それぞれ専用のレジスタが必要だとしたら、マウス、キーボード、将来出現するかもしれない未知のデバイス、など全ての周辺機器に応じて専用レジスタを準備するという到底不可能なことが必要になってしまいます。I/Oを使っています。グラフィックボード専用のレジスタなんてありません。マウス、キーボード、将来出現するかもしれない未知のデバイス、など全ての周辺機器に応じて専用レジスタを準備するという到底不可能なことが必要になってしまいます。I/Oを使っています。Mappedにアドレスなどを収納して。Mappedにアドレスなどを収納して。23:34ラズベリーパイ(Linux)だとフレームバッファを経由して直接ディスプレイに描画することができるようです。デバイスドライバを書かなくてもできるようなので簡単に試せると思います。https://qiita.com/take-iwiw/items/0a7a2fefec9d93cdf6dbラズベリーパイ(Linux)だとフレームバッファを経由して直接ディスプレイに描画することができるようです。デバイスドライバを書かなくてもできるようなので簡単に試せると思います。https://qiita.com/take-iwiw/items/0a7a2fefec9d93cdf6dbキャンセル完了するlink0よのなかそんなに難しいもんじゃありませんw#しょせんは人間が作ってるもんですしとある領域のメモリのナカミがそのまま画面に出る、と考えればいいです32ビットカラーなら1ワード(32bit)が1ドット、16ビットカラーなら1ワードが2ドット、というふーにメモリを書き換えればそれがそのまま画面に出る、と。むかし、CPUの処理能力が低い頃は、文字のドットパターンを格納しているROMを介することで、メモリに文字コードを書くとその文字が画面に出る、というようなことをやってた時代もありましたが、#漢字ROM搭載!スクロールが早い!!というCMを覚えてる人は、、いませんかw今はもう廃れた技術になってしまいました。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。