bootloader/boot/boot.c
2024-12-05 16:29:49 +09:00

75 lines
1004 B
C

#include <u.h>
#include "dat.h"
#include "fn.h"
void (*probe1[])(void) = {
a20up,
};
void (*probe2[])(void) = {
};
BootProbe probes[] = {
{"probing", probe1, elem(probe1) },
{"disk", probe2, elem(probe2) },
};
ConDev condev = {
.getc = pcgetc,
.putc = pcputc,
};
// https://wiki.osdev.org/BIOS
void
machdep(void)
{
for(int i = 0; i < elem(probes); ++i){
BootProbe bp = probes[i];
for(int j = 0; j < bp.cnt; ++j)
bp.probes[j]();
}
}
static void
rdline(char *buf, int n)
{
char *p = buf;
char *e = buf + n - 1;
while(p < e){
int c = getchar();
switch(c){
case '\177':
case '\b':
if(p > buf){
putchar('\177');
*--p = 0;
}
break;
case '\n':
case '\r':
goto done;
default:
*p++ = c;
break;
}
}
putchar('\n');
done:
*p = 0;
}
void
boot(int bootdev)
{
machdep();
print("\n\n===> Hello world <===\n\tBooted on disk 0x%x\n", bootdev);
for(;;){
char buf[8192];
print("\nboot >> ");
rdline(buf, sizeof buf);
print("%s", buf);
}
}