#include "String.h" #include "color.h" #include "font_pack.h" #include "io.h" #include "renderer.h" // Simple ~1-second delay (~80 MHz CPU) static void delay_1s(void) { volatile unsigned long count = 80000000; while (count--) __asm__ volatile("nop"); } void delay_seconds(unsigned int seconds) { for (unsigned int i = 0; i < seconds; i++) { delay_1s(); } } // Draw label text at (x, y) static void draw_label(Renderer *renderer, const char *label, int x, int y) { RenderText text = { .base = {.x = x, .y = y, .color = COLOR_WHITE}, .text = label, .font = &basic_font_pack, }; renderer->draw_text(renderer, &text); } int kernel_main(void) { uart_io.puts("Initializing renderer...\n"); Renderer renderer; if (!renderer_init(&renderer)) { uart_io.puts("Failed to allocate framebuffer.\n"); while (1) ; } uart_io.puts("Framebuffer allocated.\n"); while (1) { // Clear screen renderer.clear_screen(&renderer, COLOR_BLACK); // ----- Left Column: Rectangles, Lines, Circles ----- int left_x = 20; // Rectangles int rect_y = 20; draw_label(&renderer, "Rectangles", left_x, rect_y); rect_y += 20; // padding RenderObject rect1 = {left_x, rect_y, 100, 50, COLOR_GREEN}; RenderObject rect2 = {left_x + 120, rect_y, 50, 100, COLOR_BLUE}; renderer.draw_rect(&renderer, &rect1); renderer.draw_rect(&renderer, &rect2); // Lines int lines_y = rect_y + 120; // spacing after rectangles draw_label(&renderer, "Lines", left_x, lines_y); lines_y += 20; renderer.draw_line(&renderer, left_x, lines_y, left_x + 100, lines_y + 40, COLOR_WHITE); renderer.draw_line(&renderer, left_x + 100, lines_y, left_x, lines_y + 40, COLOR_YELLOW); // Circles int circle_y = lines_y + 60; draw_label(&renderer, "Circles", left_x, circle_y); circle_y += 20; renderer.draw_circle(&renderer, left_x + 50, circle_y + 20, 30, COLOR_WHITE); renderer.fill_circle(&renderer, left_x + 130, circle_y + 20, 20, COLOR_BLUE); // Text int text_y = circle_y + 60; draw_label(&renderer, "Text Test", left_x, text_y); text_y += 20; RenderText text = { .base = {.x = left_x, .y = text_y, .color = COLOR_CYAN}, .text = "HELLO RENDERER!", .font = &basic_font_pack, }; renderer.draw_text(&renderer, &text); // ----- Right Column: Triangles, Diagonal Lines ----- int right_x = 220; // Triangles int tri_y = 20; draw_label(&renderer, "Triangles", right_x, tri_y); tri_y += 20; renderer.draw_triangle(&renderer, right_x, tri_y + 20, right_x + 50, tri_y + 70, right_x - 50, tri_y + 70, COLOR_WHITE); renderer.fill_triangle(&renderer, right_x + 80, tri_y + 20, right_x + 130, tri_y + 70, right_x + 30, tri_y + 70, COLOR_GREEN); // Diagonal Lines int diag_y = tri_y + 100; draw_label(&renderer, "Diagonal Lines", right_x, diag_y); diag_y += 20; renderer.draw_line(&renderer, right_x, diag_y, right_x + 160, diag_y + 120, COLOR_RED); renderer.draw_line(&renderer, right_x + 160, diag_y, right_x, diag_y + 120, COLOR_YELLOW); // Pause 5 seconds to view delay_seconds(5); } }