浏览代码

simple boot sector

Carlos Fenollosa 10 年之前
父节点
当前提交
0d537e1604
共有 3 个文件被更改,包括 41 次插入1 次删除
  1. 4 1
      00-environment/README.md
  2. 二进制
      01-boot-sector/.README.md.swp
  3. 37 0
      01-boot-sector/README.md

+ 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`
 
-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*`

二进制
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!
 
+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
@@ -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 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? ;-)