fc2ブログ


   Creator's Land
   みんなを驚かせるような物を作りたいです。 作っていく道程を記します。
  >> ホーム
  >> RSS1.0
アクセス数

プロフィール

taichino

Author:taichino
プログラマ。
仕事で組むプログラムは
好き勝手できないので、
好き勝手したいです!

カテゴリー

最近の記事

ブロとも申請フォーム

この人とブロともになる

最近のコメント

最近のトラックバック

 ブログ移転しました
半年前から検討していたブログ移転をしました。
次の記事からは移転先で更新していきます。

移転先は以下となります。
http://blog.c-land.org/
スポンサーサイト



PCライフのらりくらり | 固定リンク | トラックバック:0 | レス:2
(2007/08/05(日) 02:24)

 ブログ移転しました
半年前から検討していたブログ移転をしました。
次の記事からは移転先で更新していきます。

移転先は以下となります。
http://blog.c-land.org/
PCライフのらりくらり | 固定リンク | トラックバック:0 | レス:0
(2007/08/05(日) 02:24)

 OSを自作する(11) -- 矩形の描画 --
間隔があいてしまいました。
まだまだ4日目です。

前回、いろいろ疑問が出てきたのですが、
まだ疑問を解消するレベルまで僕が達していないと思うので
とりあえずもう少し進めることにしました。

さて前回までは描画を行うために、いちいちVRAMとして使われているメモリにアクセスしていました。
しかしこれではただ点を打つだけでも、大変でした。

そこで今回はVRAMへのアクセス処理を隠蔽した、
DrawRectという関数を作成しました。(本文中でやっていることとほぼ同じです。)

int DrawRect(int x, int y, int width, int height, int colorNum, int isFill) {
int result = TRUE;
char* display = (char*)0;
char* startAddr = (char*)(VRAM_ADDR_START + x + y * SCREEN_WIDTH);
int i = 0;
int j = 0;

// 領域チェック
if (x < 0 || y < 0 ||
x > SCREEN_WIDTH || y > SCREEN_HEIGHT ||
width < 0 || height < 0) {
result = FALSE;
}
else if (x + width > SCREEN_WIDTH ||
y + height > SCREEN_HEIGHT) {
result = FALSE;
}

if (result != FALSE) {
// 描画処理
// 一行ずつ描画していく
for (i = 0; i < height; i++) {
display = startAddr + i * SCREEN_WIDTH;

for (j = 0; j < width; j++) {
// 枠
if (j == 0 || j == width - 1 ||
i == 0 || i == height - 1) {
display[j] = colorNum;
}
// 塗りつぶし
else if (isFill != FALSE) {
display[j] = colorNum;
}
}
}
}

return result;
}


この関数を利用していくつか四角を描画してみました。

矩形の描画



さらにこの関数を使用して以下のようにWindowsのような画面?を書いて見ました。
本文とは少し違っているのですが、なるほど「ハリボテOS」はナイスネーミングですね(笑)

うぃんどうず?


今回進んだ部分は以上なのですが、若干つまずいたことがあるので残しておきます。
それは現在使用しているコンパイラ(cc1.exe)の検出してくれるエラーが想定よりも少ないと言うことです。
例えば、定義されていない関数を呼び出そうとしてもエラーが出ず、
コンパイルが通ってしまいます。そして実行時に予期しないメモリ領域にアクセス
してしまい、固まってしまうと言うことが起こりました。
つまり関数のタイプミスにかなり気づきにくいと言うことです。
僕は1時間ほどハマってしまいました。

少しコンパイラのオプションについて調べてみようと思います。


次回はついに5日目です。
文字の描画などを解説しているようです。張り切って進みます!




テーマ:プログラミング - ジャンル:コンピュータ

コンピュータを作る!OS編 | 固定リンク | トラックバック:0 | レス:0
(2007/01/31(水) 15:21)

次のページ
copyright © 2005 Creator's Land all rights reserved.
Powered by FC2ブログ. / PHPウェブログシステム3 / ネットマニア