🦁
ゼロからのOS自作入門 4章 osbook_day04d
4章ではピクセルを描くんだけど、せっかくだからカラーバーを描いてみた。
カラーバーとは
SMPTEカラーバーは代表的なカラーバーのひとつである。
上側の2/3を占める領域には、左から75%の白、黄、シアン、緑、マゼンタ、赤、青の7本の帯が等幅で並んでいる。
手抜きして
- 上側の2/3の
- 100%
という色。
変更点
$ git diff
diff --git a/kernel/main.cpp b/kernel/main.cpp
index eea95a2..ea08fcd 100644
--- a/kernel/main.cpp
+++ b/kernel/main.cpp
@@ -81,15 +81,22 @@ extern "C" void KernelMain(const FrameBufferConfig& frame_buffer_config) {
BGRResv8BitPerColorPixelWriter{frame_buffer_config};
break;
}
+ PixelColor color_pattern[] = {
+ {0xff, 0xff, 0xff}, // 白
+ {0xff, 0xff, 0x00}, // 黄
+ {0x00, 0xff, 0xff}, // シアン
+ {0x00, 0x80, 0x00}, // 緑
+ {0xff, 0x00, 0xff}, // マゼンタ
+ {0xff, 0x00, 0x00}, // 赤
+ {0x00, 0x00, 0xff}, // 青
+ };
+
+ int width = frame_buffer_config.horizontal_resolution / 7;
for (int x = 0; x < frame_buffer_config.horizontal_resolution; ++x) {
for (int y = 0; y < frame_buffer_config.vertical_resolution; ++y) {
- pixel_writer->Write(x, y, {255, 255, 255});
- }
- }
- for (int x = 0; x < 200; ++x) {
- for (int y = 0; y < 100; ++y) {
- pixel_writer->Write(x, y, {0, 255, 0});
+ PixelColor c = color_pattern[x / width];
+ pixel_writer->Write(x, y, c);
}
}
while (1) __asm__("hlt");
こんな感じで。
Discussion