summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--01_exercise/bootloader.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/01_exercise/bootloader.c b/01_exercise/bootloader.c
index bc7d807..afd4d96 100644
--- a/01_exercise/bootloader.c
+++ b/01_exercise/bootloader.c
@@ -60,9 +60,42 @@ void sleep(short ms) {
}
void main(void) {
- print("Hello!");
- print("\n\r > ");
+ print("Hello!\n\r");
while (1) {
- putc(getc());
+ char buf[9];
+ for (unsigned char i = 0; i < 8; i++) {
+ char c = getc();
+ if (c == '\r') {
+ if (i == 0) { // empty entry
+ print("Reboot!");
+ /*asm volatile(
+ "mov $0x5307, %%ax;" // TURN OFF SYSTEM:
+ // http://www.ctyme.com/intr/rb-1356.htm
+ "mov $0x0001, %%bx;"
+ "mov $0x0003, %%cx;"
+ "int $0x15" ::
+ : "ax", "bx", "cx");*/
+ asm volatile("xor %%eax, %%eax\n"
+ "push %%eax\n"
+ "push %%ax\n"
+ "lidt (%%esp)\n"
+ "mov %%ss, %%eax" ::
+ : "eax");
+ return;
+ } else {
+ break;
+ }
+ }
+ buf[i] = c;
+ putc('*');
+ }
+ buf[8] = '\0';
+ while (1) {
+ if (getc() == '\r')
+ break;
+ }
+ print("\n\r");
+ print(buf);
+ print("\n\r");
}
} \ No newline at end of file