boot sector with interrupts

pull/6/head
Carlos Fenollosa 10 years ago
parent 2811406f15
commit e220e68eb0

@ -1,56 +0,0 @@
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? ;-)

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