🦁

ゼロからのOS自作入門 4章 osbook_day04d

2021/05/05に公開

4章ではピクセルを描くんだけど、せっかくだからカラーバーを描いてみた。

カラーバーとは

カラーバー - Wikipedia

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");

こんな感じで。

https://www.amazon.co.jp/dp/4839975868

Discussion