Rob...

Here's some of the info...

the disk drivers look like this... directly at $9000 is a jump table:

	.word c_InitForIO,	c_DoneWithIO
	.word c_ExitTurbo,	c_PurgeTurbo
	.word c_EnterTurbo,	c_ChangeDskDev
	.word c_NewDisk,	c_ReadBlock
	.word c_WriteBlock,	c_VerWriteBlock
	.word c_OpenDisk,	c_GetBlock
	.word c_PutBlock,	c_GetDirHead
	.word c_PutDirHead,	c_GetFreeDirBlock
	.word c_CalcBlksFree,	c_FreeBlock
	.word c_SetNextFree,	c_FindBAMBit
	.word c_NxtBlkAlloc,	c_BlkAlloc
	.word c_ChkDkGEOS,	c_SetGEOSDisk

Get1stDirEntry:	jmp c_Get1stDirEntry		; $9030
GetNxtDirEntry:	jmp c_GetNxtDirEntry		; $9033

GetOffPgTS: 	jmp c_GetOffPgTS	; $9036
AddDirBlock: 	jmp c_AddDirBlock	; $9039
GetBufBlock: 	jmp c_GetBufBlock	; $903C
PutBufBlock: 	jmp c_PutBufBlock	; $903F

	jmp SendBufCmnd		; $9042
	jmp ReadStatus		; $9045
	jmp c_AllocateBlock	; $9048
	jmp c_ReadLink		; $904B

driverType:	.byte $xx	; $904E   - driver type (i.e. CBM_1571, etc.)
driverVersion:	.byte $xx	; $904F   - FOR CMD DRIVERS ONLY

The six routines at $9030 are directly callable and most are documented
in the Hitchhiker's Guide. GetBufBlock and PutBufBlock are the same as
GetBlock and PutBlock except they automatically LoadW r4,diskBlkBuf within
themselves.

SendBufCmnd and ReadStatus are internals and I don't believe there is any
standard for them (probably shouldn't call them). AllocateBlock is, I think,
documented in Hitchhiker's too, and ReadLink is just like ReadBlock except
it will only read the sector links IF QUICKER... don't count on them ONLY
reading the link, since in some cases it will fall through to an actual
ReadBlock and get the whole sector.

driverVersion is a new thing for CMD drivers. Currently, it's $25, for
v2.5.

Now, here are new routines that are specific only to native mode partitions.

	;these routines are new - they will allow even under DeskTop
	;2.0 partion support. Later, they will be briefly expanded to include
	;new devices. Also included are new global variables.

GoRootDir:	jmp c_GoRootDir		;$9050
GoSubDirectory:	jmp c_GoSubDirectory	;$9053
GetBAMBlk:	jmp c_GetBAMBlk		;$9056
PutBAMBlk:	jmp c_PutBAMBlk		;$9059

curTrHeader:	.byte 1			;$905c	
curScHeader:	.byte 1			;$905d
curBAMBlk:	.byte 0			;$905e
sizeOfBAM:	.word 0			;$905f
cacheChanged:	.byte 0			;$9061
endTrack:	.byte 0			;$9062

GoRootDir takes no parameters. GoSubDirectory takes a track/sector in r1
for the start of the subdirectory... i.e., find a subdir entry in the
directory, grab the starting t/s in r1, and call GoSubDirectory.
GetBAMBlk and PutBAMBlk are used internally for dealing with the multiple
BAM sectors. They take a BAM block number in .A... it's used as a raw
sector value on the root track (1). These defines are also at the start
of the HD native driver:

ROOT_TRACK_DIR	= 1
ROOT_SECTOR_DIR	= 1
FIRST_BAM_BLK	= 2
OFF_HD_BAM	= $32

The variables from curTrHeader to endTrack should PROBABLY be considered
local to the disk drivers. However, curTrHeader/curScHeader may be useful
for determining where the current directory is - they will be 1,1 for the
root directory. (GoSubDir stuffs r1 into cur{Tr,Sc}Header.)

Hope this is a start... if you see anything here you'd like more detailed
info on, let me know.

   Jim   :)
