Monday, September 6, 2004


egilh project #3: MS DOS device driver for mounting remote disks

When: early 90s

What: MS DOS disk device driver
I had loads of fun with this project and learned even more. I sometimes used LapLink bit to move files between different machines but I never liked that I had to use a separate software for working on my local PC and a remote machine. I liked my file manager just fine thank you and I wanted to use it for managing files on the "remote" computer as well. LapLink worked via a serial cable so it was painfully slow as well. So in the end I manage to find someone who could sponsor my new project; a MS DOS device driver in assembler that mounted the HD on a remote machine in such a way that it looked like a local HD.

A serial cable would have been too slow for what I wanted to do, so I started testing (pin by pin) the different pins I could use for reading/writing via the parallel port on a standard PC. I ended up with a cabling system that allowed me to transfer 4 useful bits of information in parallel per transmission. A lot faster than the standard serial cable.

It was a -great- feeling when I mounted the disk of another PC via the parallel cable and launched Norton disk utilities which scanned the remote disk as if it was a local disk and did not report a single error.

Lessons learned:

  • Don't trust documentation blindly. The book I had documented the interrupt as accepting a pointer to a disk structure. I was saved by a (competing) book in another bookshop which correctly documented the pointer, to pointer to disk structure.

  • Don't trust other people blindly either. The idea was the I should develop the system with another guy. We met every few days and I always got the answer "great, almost there" when I asked about the progress. I got  pissed off when I found out a couple of days before our release that the guy hadn't written a single line of code on the host side but was still trying to figure out the requirements. I went in a weekend coding frenzy, delivered the project on Monday morning and slept all of Monday afternoon + Tuesday. (I ended up coding the “host“ side as a C program instead of a host side device driver which would have been a lot neater)

  • I hate hardware. I initially got my system up and running using 4 bit info per transmit between the client/server but I had to lower it to 3 bits as my Olivetti laptop didn't like my original cabling design :-(

  • Debugging a device driver written in assembler is “different“ from working with the Turbo Pascal debugger. I ended up with sending status codes to video RAM so I could see the different states of my device driver in the upper right hand corner of the screen

No comments:

Post a Comment