mirror of
https://github.com/cfenollosa/os-tutorial.git
synced 2024-10-27 20:34:19 +00:00
boot sector with interrupts
This commit is contained in:
parent
e220e68eb0
commit
4a59641379
BIN
01-simple-boot-sector/.README.md.swp
Normal file
BIN
01-simple-boot-sector/.README.md.swp
Normal file
Binary file not shown.
56
01-simple-boot-sector/README.md
Normal file
56
01-simple-boot-sector/README.md
Normal file
@ -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
01-simple-boot-sector/boot_sect_simple.asm
Normal file
6
01-simple-boot-sector/boot_sect_simple.asm
Normal file
@ -0,0 +1,6 @@
|
||||
; A simple boot sector program that loops forever
|
||||
loop:
|
||||
jmp loop
|
||||
|
||||
times 510-($-$$) db 0
|
||||
dw 0xaa55
|
Loading…
Reference in New Issue
Block a user