|
|||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||
|
Announcements
Chapters
Services
Feature Zones
|
Note: This is an unedited contribution. If this article is inappropriate,
needs attention or copies someone else's work without reference then please
Report This Article
IntroductionSimply stating, it is an Operating System that does nothing but displays a simple message "Hello World". The source code is written in assembly language (NASM), and can be booted from a Floopy disk. BackgroundThe reader must be familiar with all the OS terminology and boot loader mechanism along with a minimal knowledge of a 16 bit Assembly language and working knowledge with NASM (freely downloadable) and the MSDOS program name Debug.Exe. Using the codeWithout describing anything let me write the boot loader code. ;************************************************** ; Hello World OS Boot loader ; Designed by Arnav ; http://pendorasoft.byethost15.com/ ;************************************************** [BITS 16] [ORG 0x0000] ; code located at 0000:7C00, adjust segment registers cli mov ax, 0x07C0 mov ds, ax mov es, ax mov fs, ax mov gs, ax ; create stack mov ax, 0x0000 mov ss, ax mov sp, 0xFFFF sti ; post message mov si,msgHello call DisplayMessage mov si, msgEnd call DisplayMessage hlt ; Display Message DisplayMessage: lodsb ; load next character or al, al ; test for NUL character jz .DONE mov ah, 0x0E ; BIOS teletype mov bh, 0x00 ; display page 0 mov bl, 0x07 ; text attribute int 0x10 ; invoke BIOS jmp DisplayMessage .DONE: ret ; data section msgHello db 0x0D, 0x0A, "Hello World", 0x0D, 0x0A, 0x00 msgEnd db 0x0D, 0x0A, "That's all folks!!!", 0x0D, 0x0A, 0x00 ;ASM Signature TIMES 510-($-$$) DB 0 DW 0xAA55 Save the above code in a file say Next we have to generate a RAW Binary code file for the above code. So I used NASM. Assuming that NASM is in the system path we write the following at the COMMAND prompt: D:\>NASM boot.asm -o boot.bin -f bin
Next we need a Floppy disk from which we will boot the OS. So place a Floppy disk in the A Drive and before continuing, please backup any data that may be on the Floppy Disk, because we would require to Format the floppy in this step: D:\>format a: /q
I have quick formatted the disk to save a lot of time, but Full format will also do. Now we need to copy our OS binary to the Floppy disk. So we use the Debug.Exe program as follows: D:\>debug boot.bin -W 100 0 0 1 -Q D:\> On issueing the -W option in debug program, the binary is RAW written to the boot sector of the Floppy disk and after which we quit the debug application. So we are done with our OS, now restart the system and boot from the floopy disk. We will see the following output on the screen: Hello World That's all folks!!! And then the computer Halts as it now receives the HLT instuction. Points of InterestThe first point to note here is that this is not a real OS but a kernel boot-loader. And thus the activities I can do here is limited to 512 kb (1 sector). So my code size do not exceed 512 kb which includes the data section. ProblemsThe only problem in this OS is that after the OS is copied to the floppy disk, Windows or MSDOS starts thinking that the floppy is not formatted and then onwards, everytime I try updating the code above I have to first format the floppy everytime and then copy the boot sector binary (boot.bin). Arnav
|
||||||||||||||||||||||||||||||||||||||||||||