simple boot sector

pull/6/head
Carlos Fenollosa 10 years ago
parent 24f1ef2286
commit 0d537e1604

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

Binary file not shown.

@ -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? ;-)

Loading…
Cancel
Save