Making your own Operating System
Usually, when a computer starts it will try to load 512 bytes
from sector 1, head 0, cylinder 0 from floppy drive A
to 0000h:7C00h and give it control.
If this fails, a hard drive is used.
This tutorial covers the booting from floppy drive, the same principle is
used to boot from hard drive. Using floppy drive has several advantages:
Example of a simple boot program:
; directive to create BOOT file:
; Boot record is loaded at 0000:7C00,
; so inform compiler to make required
; load message address into SI register:
LEA SI, msg
; teletype function id:
MOV AH, 0Eh
print: MOV AL, [SI]
CMP AL, 0
INT 10h ; print using teletype.
; wait for 'any key':
done: MOV AH, 0
; store magic value at 0040h:0072h:
; 0000h - cold boot.
; 1234h - warm boot.
MOV AX, 0040h
MOV DS, AX
MOV w.[0072h], 0000h ; cold boot.
JMP 0FFFFh:0000h ; reboot!
new_line EQU 13, 10
msg DB 'Hello This is My First Boot Program!'
DB new_line, 'Press any key to reboot', 0
Copy the above example to emu8086 source editor and
press [Compile and Emulate] button.
Emulator automatically loads ".boot" file to 0000h:7C00h.
You can run it just like a regular program, or you can use
Virtual Drive menu to Write 512 bytes at 7C00h to Boot Sector
of virtual floppy drive (FLOPPY_0 file in emulator's folder).
After writing your program to virtual floppy drive, you can select
Boot from Floppy from Virtual Drive menu.
If you are curious, you may write
the virtual floppy (FLOPPY_0) or ".boot" file to real floppy and
boot your computer from it, I recommend
using "RawWrite for Windows" from:
(note that this is not MS-DOS compatible boot sector,
so it's better to use and empty floppy, although it should be
IBM (MS-DOS) formatted).
".boot" files are limited to 512 bytes (sector size), so if your
Operation System is going to grow over this size you should use boot program
to load data from other sectors. A good example of tiny Operating System can
be downloaded here:
To create extensions for your Operating System (over 512 bytes), you can use
".bin" files (select "BIN Template" from "File" -> "New" menu).
To write ".bin" file to virtual floppy select "Write .bin file to floppy..."
from "Virtual Drive" menu of emulator:
You can also use this to write ".boot" files.
is a boot sector!