aboutsummaryrefslogtreecommitdiffstats
path: root/boot/print.asm
diff options
context:
space:
mode:
Diffstat (limited to 'boot/print.asm')
-rw-r--r--boot/print.asm44
1 files changed, 44 insertions, 0 deletions
diff --git a/boot/print.asm b/boot/print.asm
new file mode 100644
index 0000000..97acd8b
--- /dev/null
+++ b/boot/print.asm
@@ -0,0 +1,44 @@
+org 7C00h
+
+jmp _start
+
+hello: db 'Hello from the first stage!', 0x0A, 0x0D, 0x0
+
+_start:
+
+; print hello message
+
+mov ah, 0x0E
+xor esi, esi
+xor edi, edi
+mov si, hello
+cld
+
+.loop:
+lodsb
+cmp al, 0x00
+je .out
+int 0x10
+jmp .loop
+.out:
+
+; load sectors from disk and jump there
+
+mov ah, 0x02 ; load sectory from disk
+mov al, 0x01 ; load one sector
+xor ch, ch ; cylinder number
+mov cl, 0x02 ; start from sector 2
+xor dh, dh ; head number
+xor dl, dl ; drive number
+
+mov bx, 0x0500 ; start address (see jmp)
+ ; 0x00000500 to 0x00007BFF, from Overview at http://wiki.osdev.org/Memory_Map_%28x86%29
+int 0x13
+
+jmp 0x0500
+
+jmp $
+
+; stolen from: https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders
+times 0200h - 2 - ($ - $$) db 0 ;Zerofill up to 510 bytes
+dw 0AA55h ;Boot Sector signature