Переглянути джерело

boot sector with interrupts

Carlos Fenollosa 10 роки тому
батько
коміт
4a59641379

BIN
01-simple-boot-sector/.README.md.swp


+ 56 - 0
01-simple-boot-sector/README.md

@@ -0,0 +1,56 @@
+This is very exciting, we're going to create our own boot sector!
+
+Theory
+------
+
+When the computer boots, the BIOS doesn't know how to load the OS, so it
+delegates that task to the boot sector. Thus, the boot sector must be
+placed in a known, standard location. That location is the first sector
+of the disk (cylinder 0, head 0, sector 0) and it takes 512 bytes.
+
+To make sure that the "disk is bootable", the BIOS checks that bytes
+511 and 512 of the alleged boot sector are bytes `0xAA55`.
+
+This is the simplest boot sector ever:
+
+```
+e9 fd ff 00 00 00 00 00 00 00 00 00 00 00 00 00
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
+[ 29 more lines with sixteen zero-bytes each ]
+00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 aa
+```
+
+It is basically all zeros, ending with the 16-bit value
+`0xAA55` (beware of indianness, x86 is little-endian). 
+The first three bytes perform an infinite jump
+
+Simplest boot sector ever
+-------------------------
+
+You can either write the above 512 bytes
+with a binary editor, or just write a very
+simple assembler code:
+
+```nasm
+; Infinite loop (e9 fd ff)
+loop:
+    jmp loop 
+
+; Fill with 510 zeros minus the size of the previous code
+times 510-($-$$) db 0
+; Magic number
+dw 0xaa55 
+```
+
+To compile:
+`nasm -f bin boot_sect_simple.asm -o boot_sect_simple.bin`
+
+> OSX warning: if this drops an error, read chapter 00 again
+
+I know you're anxious to try it out (I am!), so let's do it:
+
+`qemu boot_sect_simple.bin`
+
+You will see a window open which says "Booting from Hard Disk..." and
+nothing else. When was the last time you were so excited to see an infinite
+loop? ;-)

+ 6 - 0
01-simple-boot-sector/boot_sect_simple.asm

@@ -0,0 +1,6 @@
+; A simple boot sector program that loops forever
+loop:
+    jmp loop
+
+times 510-($-$$) db 0
+dw 0xaa55