Files
nate-os/src/main.c
2026-02-11 14:11:56 -07:00

112 lines
3.3 KiB
C

#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);
}
}