mirror of
https://github.com/cfenollosa/os-tutorial.git
synced 2024-10-27 20:34:19 +00:00
simple boot sector
This commit is contained in:
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`
|
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!
|
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? ;-)
|
||||||
|
Loading…
Reference in New Issue
Block a user