Browse Source

simple boot sector

Carlos Fenollosa 10 năm trước cách đây
mục cha
commit
0d537e1604

+ 4 - 1
00-environment/README.md

@@ -3,4 +3,7 @@ available for you.
 
 
 On a mac, [install Homebrew](http://brew.sh) and then `brew install qemu nasm`
 On a mac, [install Homebrew](http://brew.sh) and then `brew install qemu nasm`
 
 
-Don't use the Xcode developer tools `nasm` if you have them installed, they won't work for the most cases.
+Don't use the Xcode developer tools `nasm` if you have them installed, they won't work for the most cases. Always use `/usr/local/bin/nasm`
+
+Furthermore, on a mac, qemu is split into multiple binaries. You will want
+to call `qemu-system-x86_84 *binfile*`

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


+ 37 - 0
01-boot-sector/README.md

@@ -1,5 +1,8 @@
 This is very exciting, we're going to create our own boot sector!
 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
 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
 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
 placed in a known, standard location. That location is the first sector
@@ -15,3 +18,37 @@ 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
 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 00 55 aa
 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 this with a binary editor, or just write a very
+simple assembler code:
+
+```
+; 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? ;-)