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