diff --git a/src/main.c b/src/main.c index c38951c..fa6699f 100644 --- a/src/main.c +++ b/src/main.c @@ -4,11 +4,11 @@ #include "io.h" #include "renderer.h" +// Simple ~1-second delay (~80 MHz CPU) static void delay_1s(void) { - volatile unsigned long count = 80000000; // Example for ~1 sec at ~80 MHz CPU - while (count--) { + volatile unsigned long count = 80000000; + while (count--) __asm__ volatile("nop"); - } } void delay_seconds(unsigned int seconds) { @@ -17,10 +17,17 @@ void delay_seconds(unsigned int seconds) { } } +// 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) { - String str; - cs_init(&str); - cs_set(&str, "HELLO MARIO"); uart_io.puts("Initializing renderer...\n"); Renderer renderer; @@ -32,34 +39,73 @@ int kernel_main(void) { uart_io.puts("Framebuffer allocated.\n"); - RenderObject background = {0, 0, renderer.width, renderer.height, COLOR_RED}; - while (1) { - // Non-blocking UART input - char c = uart_getc_nonblocking(); + // Clear screen + renderer.clear_screen(&renderer, COLOR_BLACK); - if (c >= 32 && c <= 126) { // printable - cs_append_char(&str, c); - } else if (c == '\b' || c == 127) { // backspace - if (str.length > 0) { - str.length--; - str.buffer[str.length] = '\0'; - } - } + // ----- Left Column: Rectangles, Lines, Circles ----- + int left_x = 20; - // Create a fresh RenderText each loop + // 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 = 20, .y = 30, .color = 0xFFFFFFFF}, - .text = str.buffer, + .base = {.x = left_x, .y = text_y, .color = COLOR_CYAN}, + .text = "HELLO RENDERER!", .font = &basic_font_pack, }; - - renderer.clear_screen(&renderer, background.color); renderer.draw_text(&renderer, &text); - // uart_puts(str.buffer); + // ----- Right Column: Triangles, Diagonal Lines ----- + int right_x = 220; - // Short delay for smoother typingi - delay_seconds(1); + // 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); } }