OSDev.org
https://forum.osdev.org/

Floppy driver
https://forum.osdev.org/viewtopic.php?f=1&t=310
Page 1 of 1

Author:  stafe [ Sat Jul 09, 2005 11:00 pm ]
Post subject:  Floppy driver

Hello,

i tried to write my own Floppy Driver for my own Operating System, but so far no floppy driver work ... I need a function in C those loads a File from the Floppy driver in the memory ...

For example:

fileopen( "A:\\File.txt", 0x10000 );
FILENAME , MEMORY

If it is in C not feasible can anyone told me how I can make this in NASM ?? I have tryed to make a Fileloader in NASM ( liks a bootloader but with other adresses ) ... but this program doesn't work ...

Author:  earlz [ Sat Jul 09, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

umm well i havent quite made a read_fat_file function but i have made this

Code:
unsigned char* read_disk(drive_params t) /*reads a single sector and returns it */
{

   byte ret[512];
   byte temp;
   word tmp2;
   word tmp3;
   byte tmp;
      asm mov tmp3,cs
      asm mov es,tmp3
      tmp2=&ret;
      asm mov bx,tmp2
      asm mov ah,0x02
      asm mov al,1
      asm mov ch,t.cylinder
      asm mov cl,t.sector
      asm mov dh,t.head
      asm mov dl,t.drive
      asm mov ah,0x02
      asm int 0x13
asm mov temp,ah
      if (temp>0x00) {
      ret[0]=temp;
      }

      return ret;

}

byte write_disk(drive_params t,byte data[512]) /*writes a single sector*/
{
   byte ret2;
   byte temp;
   word tmp2;
   dword tmp3;
      asm mov tmp3,cs
      asm mov es,tmp3
      tmp2=&*data;
      asm mov bx,tmp2
      asm mov ah,0x03
      asm mov al,1
      asm mov ch,t.cylinder
      asm mov cl,t.sector
      asm mov dh,t.head
      asm mov dl,t.drive
      asm mov ah,0x03
      asm int 0x13
asm mov ret2,ah
      temp=ret2;
      return ret2;

}

void testing(void) /*just a reserved function for testing junk*/
{


   byte tmp2;
drive_params t;
   t.cylinder=0;
   t.head=0;
   t.sector=1;
   t.drive=0x00;
   reset_disks(0x00);
   *tmp5="hi";
   tmp2=write_disk(t,*tmp5);
   *tmp5=read_disk(t);
printf(*tmp5);
if (streq(*tmp5,"hi")==1) { printf("yay!");}
/*try using get the address rather than return the var
/*asm mov WORD [es:20*4+2], CS omg that actually works*/
   /*U IDIOT u never did write hi to disk*/
}


it reads/writes a single sector into/from a C 512 byte character array

Author:  yetAnotherOS [ Sat Jul 09, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

You've met the same problem as I am currently working on. Just there is one thing you need to clarify. Have you already switched into 32 bit protected mode or are you still in real mode? If you're in real mode you can use the 0x13 BIOS interrupt, but if you're in protected mode, like I am, then you must program the i/o ports of the floppy controller, and the dma controller. If you find any resources about the floppy controller, I'd appreciate you pointing them out for me. So far I have:
http://www.nondot.org/sabre/os/articles/DiskandDiscDrives/
Examine the links about floppy drives. I wish though that there were examples of code somewhere.

Author:  stafe [ Sat Jul 09, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

@hckr83:

Thank You ... but I can't use your code because I my OS workt in Protected Mode ...

@yetAnotherOS:

Ok ... I have already pointed out documents about programming the FDC and DMA ... I have created a Floppy Driver out of the documents but this driver doesn't work well ... If you give me your Mail addy I can send you the documents ... maby you can create a fine floppy driver ...

Author:  yetAnotherOS [ Sat Jul 09, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

I've sent you an email and look forward to your info.

Author:  earlz [ Sat Jul 09, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

oh sorry i was just assuming u were in real mode

i got nothing for protected mode

Author:  matthias [ Tue Jul 12, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

stafe wrote:
Hello,

i tried to write my own Floppy Driver for my own Operating System, but so far no floppy driver work ... I need a function in C those loads a File from the Floppy driver in the memory ...

For example:

fileopen( "A:\\File.txt", 0x10000 );
FILENAME , MEMORY

If it is in C not feasible can anyone told me how I can make this in NASM ?? I have tryed to make a Fileloader in NASM ( liks a bootloader but with other adresses ) ... but this program doesn't work ...


To use such a function you'll first have to write a driver to read sectors from disk. Then you'll have to write a filesystem driver (in this case a floppy, this will be a FAT driver.) In this driver you'll have to implent some fucntions to write and read files. I knew a good site where I learned this from, but I've forgotten the link. Send me an email and I'll send you some source.. You'll have to tweak it to fit into your own os ;)

Author:  Hery [ Tue Jul 12, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

I have the same problem, and i found something interesting:
http://bos.asmhackers.net/docs/floppy/d ... torial.txt
http://www.mega-tokyo.com/forum/index.p ... eadid=7843

Author:  yetAnotherOS [ Wed Jul 13, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

the first link is excellent. Thanks!!!

Author:  wrigley [ Thu Jul 14, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

would there be any chance you people emailing around, could post some of that stuff here, I would like to see it too, please. Besides, other people visiting might find it useful as well :)

Author:  bubach [ Sat Jul 16, 2005 11:00 pm ]
Post subject:  Re: Floppy driver

Maybe this helps?
http://bos.asmhackers.net/docs/floppy/

Page 1 of 1 All times are UTC - 6 hours
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/