87 lines
3.2 KiB
Plaintext
87 lines
3.2 KiB
Plaintext
===========================================================================
|
|
From: BRIAN FRASER Refer#: NONE
|
|
To: MATHIEU BOUCHARD Recvd: NO
|
|
Subj: .SYS format. Conf: (99) 80xxxProgr
|
|
---------------------------------------------------------------------------
|
|
|
|
Main Header:
|
|
|
|
00h word - Link to next driver, offset
|
|
02h word - Link to next driver, segment
|
|
04h word - Device Attribute
|
|
06h word - Strategy entry point, offset
|
|
0ah word - interrupt entry point, offset
|
|
-- Character device --
|
|
0ch 8 bytes - Logical Name
|
|
-- Block device --
|
|
0ch byte - Number of units
|
|
|
|
|
|
Header Attribute word:
|
|
bit 15 - 1= Character device; 0= Block device
|
|
bit 14 - 1= IOCTL read and write supported
|
|
-- Character device --
|
|
bit 13 - 1= Output until busy supported
|
|
-- Block device --
|
|
bit 13 - 1= Check BIOS to determine media characteristics; 0= Media ID
|
|
should be used instead
|
|
bit 12 - should be 0
|
|
bit 11 - 1= if open/close/removable media supported
|
|
bit 7-10 - 0
|
|
bit 6 - 1= if generic IOCTL and get/set logical drive supported
|
|
bit 5 - 0
|
|
bit 4 - 1= if CON driver and int 29h fast-output supported
|
|
bit 3 - 1= if current CLOCK$ device
|
|
bit 2 - 1= if current NULL device
|
|
-- Character device --
|
|
bit 1 - 1= if standard output device (stdout)
|
|
-- Block device --
|
|
bit 1 - 1= if 32bit sector addressing supported
|
|
bit 0 - 1= if current standard input device (stdin)
|
|
|
|
|
|
Strategy Request Header:
|
|
00h byte - length of request header
|
|
01h byte - unit number for this request
|
|
02h byte - request headers command code
|
|
03h word - drivers return status
|
|
05h 8 bytes - ? (reserved)
|
|
|
|
The rest of the header varies depending on what function is being called.
|
|
|
|
I would think it's best to find a book, as I don't really want to type out all
|
|
the different headers for each function. :)
|
|
|
|
This book I am using is Advanced MS-DOS, Second Ed. Provided, it's a little out
|
|
of date, but alot of the information is still the same. Plus, I got it for 8
|
|
bucks.. Can't complain for that price! :) Check out the book list.
|
|
|
|
|
|
Heres just a little info on what the above headers are for...
|
|
|
|
There are two different kinds of device drivers. Character, and Block.
|
|
Character devices handle 1 character at a time, while Block devices deal with
|
|
Blocks of data. Character devices can have a logical name like "MYSYS", which
|
|
can be used like "CON" or "PRN" etc.. Block devices use units (drives), which
|
|
are assigned upon install.
|
|
|
|
The Main Header is the first few bytes of the SYS file, The link to next driver
|
|
is to be -1:-1 (or FFFF:FFFF) unless there is more then one driver in this SYS
|
|
file, then you set this to the next driver in the chain. BUT, the last driver
|
|
must have FFFF:FFFF as the next driver, or you have big problems! :)
|
|
|
|
The Device attribute is fairly strate forward.
|
|
|
|
The strategy routine is a routine that is called my DOS with the address of the
|
|
Request Header. All this routine has to do is save the address in a local
|
|
memory location.
|
|
|
|
The interrupt routine is then called after the strategy routine. The interrupt
|
|
routine process the request header, and performs the requested function, and
|
|
returns.
|
|
|
|
If you can't find a book.. Maybe I'll type out the return attributes, and the
|
|
info for each function.
|
|
|
|
Brian
|