second_stage/main.c (view raw)
#include "linker.h"
uint8_t *display = (uint8_t*)0xB8000;
void simple_clear(void) {
display = (uint8_t*)0xB8000;
for (int i = 0; i < 80 * 25; i++) {
display[2 * i] = 0x00;
display[2 * i + 1] = 0x00;
}
}
void simple_print(const char* src) {
while (*src) {
*display++ = *src++;
*display++ = 0x02;
}
}
void copy_kernel(void) {
simple_clear();
simple_print("COPYING_KERNEL...");
uint8_t *kernel_dest = (uint8_t*)0x00100000;
uint8_t *kernel_src = (SS_VMA + (KERNEL_LMA - SS_LMA));
for (uint32_t i = 0; i < KERNEL_SIZE; i++) {
kernel_dest[i] = kernel_src[i];
}
simple_print("DONE.");
}