Support Forums

Full Version: Linux Boot Disk with A Twist
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I created a small program that will create a boot disk(Intel/AMD) and a very simple text
editor and by simple I mean simple.

The enclosed programs are:

1. The assembly code for the hex array included in the C code...What does it do? Well the code, when
written directly to the floppy device will create a boot disk that has a stack and code space
and the routines that will ennable a very simple text editor...i.e what you type in will be displayed.
.Its very simple program just some 16 bit programming I play with when I'm bored

2. The C code just grabs the hex array(the assembler from above) and writes directly to the floppy device,
hence creating a bootable floppy

A few things to note - This is not a virus or anything like that. If you don't trust me then get an
Intel/AMD manual and check the opcodes, the manuals with bear out that it is what it is.

This will only work on a Linux box because of this line

floppy_desc=open("/dev/fd0",O_RDWR);

But you can port it to Windows if you like

So how do I create a boot disk?

Copy the C code and compile, Insert a floppy into the the drive and execute. Now just boot off the
floppy and start typing when the blue screen appears..

If you don't have a floppy then you could download QEMU and boot it there. Just comment out this line

//floppy_desc=open("/dev/fd0",O_RDWR);

and uncomment this line

floppy_desc=open("dosimage",O_RDWR|O_CREAT, 0666);

Then compile and execute the dosimage file with QEMU like

qemu dosimage

assembly code
Code:
.code16

.section .data

.section .text
    .global _start
_start:
            movw    $0xb800, %ax
            movw    %ax, %es
            movw    $0x8000, %ax
            movw    %ax, %ss
            movw    $0x0, %sp
            movw    $0x7000, %ax
            movw    %ax, %ds

            xorw    %bx, %bx

            call    clearit

            movb    $0, %dh
            movb    $0, %dl
            movb    $0, %bh
            movb    $2, %ah
            int    $0x10

loop1:
            movb    $0, %ah
            int    $0x16
    
            movb    $0x0e, %ah
            int    $0x10

            cmpb    $0xd, %al
            jne    bytenotequal

            movb    $0x3, %ah
            movb    $0, %bh
            int    $0x10

            incb    %dh
            movb    $0, %bh
            movb    $2, %ah
            int    $0x10

bytenotequal:
    
            movb    $0x0e, %ah

            jmp    loop1

clearit:
            movb    $0x20, %es:(%bx)
            incw    %bx
            movb    $0x1f, %es:(%bx)
            incw    %bx
            
            cmpw    $4000, %bx
            jle    clearit
            ret

The C code
Code:
#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>

char boot_buf[512] =    {
0xB8,0x00,0xB8,0x8E,0xC0,0xB8,0x00,0x80,0x8E,0xD0,0xBC,0x00,0x00,0xB8,0x00,0x70,0x8E,0xD8,0x31,0xDB,
0xE8,0x28,0x00,0xB6,0x00,0xB2,0x00,0xB7,0x00,0xB4,0x02,0xCD,0x10,0xB4,0x00,0xCD,0x16,0xB4,0x0E,0xCD,
0x10,0x3C,0x0D,0x75,0x0E,0xB4,0x03,0xB7,0x00,0xCD,0x10,0xFE,0xC6,0xB7,0x00,0xB4,0x02,0xCD,0x10,0xB4,
0x0E,0xEB,0xE2,0x26,0xC6,0x07,0x20,0x43,0x26,0xC6,0x07,0x1F,0x43,0x81,0xFB,0xA0,0x0F,0x7E,0xF0,0xC3
            };

int main(int argc, char**argv)
{
    int floppy_desc;

boot_buf[510]=0x55;//to make the floppy/image bootable
boot_buf[511]=0xaa;//to make the floppy/image bootable

//floppy_desc=open("/dev/fd0",O_RDWR);
floppy_desc=open("dosimage",O_RDWR|O_CREAT, 0666);

lseek(floppy_desc,0,SEEK_CUR);
write(floppy_desc,boot_buf,512);
close(floppy_desc);
}

Have fun with it
Very cool man, on the weekend im defiently compiling this. Great Job.
(10-08-2009, 12:13 PM)Code King Wrote: [ -> ]Very cool man, on the weekend im defiently compiling this. Great Job.

You should try 16 bit programming its very cool...G4143
Got any good resources?
(10-08-2009, 01:27 PM)Code King Wrote: [ -> ]Got any good resources?

No I don't have any fix resources...its just kind of picked up here and there...G4143

You could try this link:

http://www.freebyte.com/programming/asse...yresources
Thanks bro.
nice job man
(10-10-2009, 09:29 AM)Malevolent Wrote: [ -> ]nice job man

Thanks I'm just in the process of updating this simple editor...The code is now cleaner and the editor behaves a little more like an editor now