質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

1836閲覧

DirectX等,既存ツールに頼らない画面への描画方法

Kelvin

総合スコア34

アセンブリ言語

アセンブリ言語とは、機械語を人間にわかりやすい形で記述した低水準言語です。

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2017/01/22 09:54

こんにちは
調べてみても同じようなことを考えている人が少ないようで情報が得られなかったので、質問させていただきます。
###質問本文
タイトルの通りです。
画面に文字などが描かれているということは内部では
"左から1px,上から1pxの所には黒を表示しよう"(これは想像ですが)
といったような命令がなされていると考えたのですが、

だとするとC言語やアセンブラにそのような命令が用意されているのでしょうか?

それとも、GPU等に命令を出す方法があるのでしょうか?

支離滅裂で申し訳ありませんが要約すると、
**OS等に頼らずに画面に描画できないか?**ということです。
###最後に
勉強目的の質問ですのでDirectXやOpenGLなどを使えばもう少し簡単にできることは重々承知しているのですが、あえて全て自分でやる方法を質問させていただきます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

OS等に頼らずに画面に描画できないか?

やろうと思えばできなくもないです。
一般に出回っているパソコンのグラフィック機能は、おそらくすべてSVGA互換モードに対応しているので、VBE(VESA BIOS Extensions)と呼ばれるBIOSコールで画面に絵や文字を表示させることができます。VBEはOSとは別の規格でBIOS ROMはグラフィックカード側に搭載されているのでOS非依存です。そのため、WindowsでもLinuxでも、対応するグラフィックドライバーが存在しない場合はSVGA互換モードで表示されることになります。また、OS起動前の画面もSVGA互換モードだと思います。

ただし、試したことはないのですが、おそらくWindowsやLinuxでは直接使うことはできないと思います(グラフィックドライバーと競合しますし)。試すならMS-DOSなどリアルモードで動くOSが必要かと思われます。

投稿2017/01/22 11:44

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

strike1217

2017/01/22 11:47

SVGA互換モード そのようなものがあるのですか!! お詳しいですね。
catsforepaw

2017/01/22 12:37

私が就職した頃はMS-DOS全盛期で、MS-DOSにはグラフィック制御のシステムコールは存在しないので、ちょっと凝った画面制御をやろうとするとBIOSコールやVRAM直書きが一般的でしたから。
maisumakun

2017/01/22 22:33

今は幸い、実用的な性能の出る仮想マシンを簡単に立ち上げられるので、仮想マシンにDOSを入れて試してみる、というのが手っ取り早いと思います。
guest

0

こんにちは。

OS等に頼らずに画面に描画できないか?ということです。

画面はOSが管理しています。そのOSの管理に従わないで画面に描画すると不具合が起きますので、それは禁じ手です。ですので、通常はOSが提供するAPIを用いて描画します。(WindowsならWindows APIですね。)

もちろん、OSを起動せずに直接描画することも可能です。
しかし、PCは複雑ですのでPCで行うのはかなり厳しいと思います。

何かそのような学習に向いたコンピュータを入手してトライした方が現実的だろうと思います。ラズベリーパイでやっいる人がいました。

投稿2017/01/22 10:29

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kelvin

2017/01/22 10:41

禁じ手ですか・・・。 確かにバグがあると身動きが取れなくなってしまいますね。 Windowsの入った普通のPCでやるのは当分あきらめることにします。 ありがとうございます。
guest

0

多分現在の大抵の汎用OSの元ではできないのではないかと思います。もしこれが簡単にできてしまうとプログラムにバグがあってたまたまVRAMへデータを書き込んでしまうとディスプレーの表示が乱れてしまい、そのプログラムのバグのおかげでOS全体が操作不能になりかねなくなるのではないでしょうか。

ずーっと昔のシングルタスクの素朴なOSであれば自由にVRAMだのHDDだののハードウェアに直接アクセスできたと思いますが現在のOSでは「アプリケーションプログラムが暴走してもそれによってOSがダウンしない」ように「しかるべきコンピューター資源(VRAMとかのハードウェア)はアプリケーションプログラムが直接触れないように保護されている」と思います。

ただ組み込み機器用のOSだとこうしたこともできたりするのじゃないでしょうか。

投稿2017/01/22 10:21

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kelvin

2017/01/22 10:43

なるほど もう少し自由のきくOSを使えばということですか。 普通のPCでは無理そうですね。 ありがとうございます。
guest

0

ほおお!
自分も以前そんなことを夢見ていました!

OSの稼働上では無理ではないでしょうかね・・・・
起動時のブートストラップデータ領域にアセンブリ言語やC言語で画面を描画することはできますが・・・
リンク内容

カーネルモードで動作させるプログラムを作れば、できるんではないかと思うんですが・・・
OSは壊れる可能性がありますね・・・
VRAMに直接アクセスできるデバイスドライバを作成して、それにユーザー空間のアプリからアクセスする・・・とかかなぁ??・・・・

投稿2017/01/22 11:27

編集2017/01/22 11:29
strike1217

総合スコア651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問