How To Make Your Own Computer Operating System

Tutorial Guide

This tutorial covers the whole process of creating your own tiny computer operating system. It includes booting module and kernel. 

Making your own Operating System

Required tools:

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:
#MAKE_BOOT#

; Boot record is loaded at 0000:7C00,
; so inform compiler to make required
; corrections:
ORG 7C00h

; load message address into SI register:
LEA SI, msg

; teletype function id:
MOV AH, 0Eh

print: MOV AL, [SI]
CMP AL, 0
JZ done
INT 10h ; print using teletype.
INC SI
JMP print

; wait for 'any key':
done: MOV AH, 0
INT 16h

; 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:

http://uranus.it.swin.edu.au/~jn/linux

(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:

micro-os_loader.asm

micro-os_kernel.asm

emu8086.inc

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:

write_bin.gif

You can also use this to write ".boot" files.


Sector at:


cylinder: 0

sector: 1

head: 0

is a boot sector!

A typical floppy drive structure:

floppy.gif


  • Floppy disk has 2 sides, and there are 2 heads for each side (0..1), these
    heads are moving above the disk.
  • Each side has 80 cylinders (0..79).
  • Each cylinder has 18 sectors (1..18).
  • Each sector has 512 bytes.
  • Total size of floppy disk is: 2 x 80 x 18 x 512 = 1,474,560 bytes.

Now you know about making computer operating systems.


Copyright © 2002 Alexander Popov Emulation Soft.

All rights reserved.

http://www.geocities.com/emu8086/

 

Share this article!

Follow us!

Find more helpful articles:

Comments

Feb
12

Could you please send me the link to the emu8086 - assembler,
tutorial and emulator because it is broken. Thanks
Great Tutorial by the way, the best I have seen

By Joshua Morris
Nov
27

Wow, cool, easier than pouring through the Linux source eh?

By eva milifsens
Aug
4

interesting,thanks free journal internet free satellite tv

By maria dengo
Feb
5

I haven't try it but it looks cool. However it looks like a boot loader to me not an operating system.

By Zamrony P Juhara
Sep
27

dude you have got to make more tutorials like this! This is definately the best guide to making an operating system!

By l f
Mar
16

Hello
is this article going to be developed further please?
regards
rik

By Rik Whittaker