Files
Espresso/kernel/intro.c

75 lines
1.2 KiB
C
Raw Normal View History

2025-05-28 14:41:02 -05:00
#include <string.h>
#include <tty.h>
#include <stdio.h>
#include <port_io.h>
2025-06-13 18:03:39 -05:00
#include <kernel/intro.h>
2025-05-28 14:41:02 -05:00
2025-06-13 19:53:54 -05:00
void delay_us(uint32_t microseconds, uint32_t cpu_mhz)
{
uint32_t count = cpu_mhz * microseconds;
while (count--)
{
asm volatile ("nop" ::: "memory");
}
2025-05-28 14:41:02 -05:00
}
int16_t begin_anim(const char* version)
{
if (strlen(version) < 5)
{
return -1;
}
const char* e = "Espresso";
const char* v = version;
const char* n = "Press any key to continue";
int32_t pos = 0;
int32_t v_pos = 0;
int16_t b = 0;
int32_t sh_pos = VGA_WIDTH / 2;
int32_t sv_pos = VGA_HEIGHT / 2;
while (true)
{
terminal_clear();
for (int32_t i = 0; n[i]; ++i)
{
terminal_putentryat(n[i], terminal_getcolor(), sh_pos, sv_pos);
sh_pos++;
}
for (int32_t i = 0; e[i]; ++i)
{
terminal_putentryat(e[i], terminal_getcolor(), pos + i, v_pos);
}
if ((v_pos + 1) == VGA_HEIGHT)
{
v_pos = 0;
b = 1;
}
for (int32_t i = 0; v[i]; ++i)
{
terminal_putentryat(v[i], terminal_getcolor(), pos + i + 3, (b == 0 ? (v_pos + 1) : v_pos));
}
pos += 2;
v_pos++;
sh_pos = VGA_WIDTH / 2;
b = 0;
delay_us(50000, 5000);
}
terminal_clear();
return 0;
}