diff --git a/src/kernel_main.c b/src/kernel_main.c index fd5cae8..4637631 100644 --- a/src/kernel_main.c +++ b/src/kernel_main.c @@ -4,10 +4,23 @@ void kernel_main(uint32_t mbinfo) { volatile uint32_t * mbi = (volatile uint32_t *)mbinfo; volatile uint32_t * fb = (volatile uint32_t *)mbi[88 / 4]; - uint32_t c = 0u; - for (uint32_t i = 0u; i < 800u * 600u; i++) + uint32_t pitch = mbi[96 / 4]; + uint32_t width = mbi[100 / 4]; + uint32_t height = mbi[104 / 4]; + for (uint32_t row = 0u; row < height; row++) { - c++; - fb[i] = (c << 28u) | 0x00669900u | ((c << 4u) & 0xFFu); + for (uint32_t col = 0u; col < width; col++) + { + uint32_t er = (col * height) / width; + int32_t dr = (int32_t)row - (int32_t)er; + if (dr < 0) + { + dr = -dr; + } + uint8_t r = 255u - ((uint32_t)dr * 256u / height); + uint8_t g = col * 256u / width; + uint8_t b = row * 256u / height; + fb[pitch * row / 4u + col] = (r << 16u) | (g << 8u) | b; + } } }