aboutsummaryrefslogtreecommitdiffstats
path: root/grub-core/tests/boot/kernel-8086.S
diff options
context:
space:
mode:
Diffstat (limited to 'grub-core/tests/boot/kernel-8086.S')
-rw-r--r--grub-core/tests/boot/kernel-8086.S69
1 files changed, 69 insertions, 0 deletions
diff --git a/grub-core/tests/boot/kernel-8086.S b/grub-core/tests/boot/kernel-8086.S
new file mode 100644
index 0000000..20040da
--- /dev/null
+++ b/grub-core/tests/boot/kernel-8086.S
@@ -0,0 +1,69 @@
+
+#define SHUTDOWN_PORT 0x8900
+
+ .text
+ .globl _start
+_start:
+base:
+ .code16
+ jmp cont
+
+portmsg:
+ xorw %ax, %ax
+1:
+ movb 0(%si), %al
+ test %ax, %ax
+ jz 1f
+ outb %al, %dx
+ incw %si
+ jmp 1b
+1:
+ ret
+
+serialmsg:
+1:
+ movb 0(%si), %bl
+ testb %bl, %bl
+ jz 1f
+ movw $0x3fd, %dx
+2:
+ inb %dx, %al
+ testb $0x20, %al
+ jz 2b
+
+ movw $0x3f8, %dx
+ movb %bl, %al
+ outb %al, %dx
+ incw %si
+ jmp 1b
+1:
+ ret
+
+cont:
+#ifdef TARGET_NTLDR
+ movw $0x2000, %ax
+#elif defined (TARGET_CHAINLOADER)
+ xorw %ax, %ax
+#else
+#error unsupported target
+#endif
+ movw %ax, %ds
+ lea message, %si
+ call serialmsg
+ lea shutdown, %si
+ movw $SHUTDOWN_PORT, %dx
+ call portmsg
+
+1:
+ hlt
+ jmp 1b
+
+shutdown:
+ .ascii "Shutdown"
+ .byte 0
+message:
+ .ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
+ .byte 0
+
+ . = base + 510
+ .short 0xaa55 \ No newline at end of file