Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h.asm	(revision 226)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h.asm	(revision 227)
@@ -47,6 +47,4 @@
 ALIGN JUMP_ALIGN
 .JumpToEbiosFunction:
-	test	BYTE [cs:ROMVARS.wFlags], FLG_ROMVARS_FULLMODE
-	jz		SHORT Int13h_UnsupportedFunction	; No eINT 13h in lite mode
 	test	BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA
 	jz		SHORT Int13h_UnsupportedFunction	; No eINT 13h for CHS drives
Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH15h_HSize.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH15h_HSize.asm	(revision 226)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH15h_HSize.asm	(revision 227)
@@ -53,5 +53,4 @@
 	jmp		SHORT ConvertAH08hReturnValuesToSectorCount
 
-ALIGN JUMP_ALIGN
 AH15h_GetSectorCountToDXAX:
 	call	AH8h_GetDriveParameters
@@ -60,10 +59,10 @@
 ConvertAH08hReturnValuesToSectorCount:
 	call	Address_ExtractLCHSparametersFromOldInt13hAddress
-	xor		ax, ax			; Zero AX
-	inc		cx				; Max cylinder number to cylinder count
-	xchg	al, bh			; AX=Max head number, BX=Sectors per track
-	inc		ax				; AX=Head count
-	mul		bx				; AX=Head count * Sectors per track
-	mul		cx				; DX:AX = Total sector count
-	xor		bx, bx			; Zero BX for 48-bit sector count (and clear CF)
+	xchg	ax, cx
+	inc		ax				; Max cylinder number to cylinder count
+.MultiplyChsInAXBLBHtoBXDXAX:
+	xchg	bx, ax
+	mul		ah			; Multiply heads and sectors
+	mul		bx			; Multiply with cylinders
+	xor		bx, bx
 	ret
Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH8h_HParams.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH8h_HParams.asm	(revision 226)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH8h_HParams.asm	(revision 227)
@@ -22,5 +22,4 @@
 ;		CF:		0 if successfull, 1 if error
 ;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
 AH8h_HandlerForReadDiskDriveParameters:
 	call	RamVars_IsDriveHandledByThisBIOS
@@ -56,7 +55,6 @@
 ;		AX, BX
 ;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
 AH8h_GetDriveParameters:
-	call	AccessDPT_GetLCHS		; AX=sectors, BX=cylinders, DX=heads
+	call	AccessDPT_GetLCHStoAXBLBH
 	; Fall to .PackReturnValues
 
@@ -66,7 +64,7 @@
 ; .PackReturnValues
 ;	Parameters:
-;		AX:		Number of L-CHS sectors per track (1...63)
-;		BX:		Number of L-CHS cylinders available (1...1024)
-;		DX:		Number of L-CHS heads (1...256)
+;		AX:		Number of L-CHS cylinders available (1...1024)
+;		BL:		Number of L-CHS heads (1...256)
+;		BH:		Number of L-CHS sectors per track (1...63)
 ;		DS:		RAMVARS segment
 ;	Returns:
@@ -80,10 +78,10 @@
 ;--------------------------------------------------------------------
 .PackReturnValues:
-	dec		bx						; Cylinder count to last cylinder
-	dec		dx						; Head count to max head number
-	mov		dh, dl					; Max head number to DH
-	mov		ch, bl					; Cylinder bits 7...0 to CH
-	mov		cl, bh					; Cylinder bits 9...8 to CL
-	eROR_IM	cl, 2					; Cylinder bits 9...8 to CL bits 7...6
-	or		cl, al					; Sectors per track to CL bits 5...0
+	dec		ax						; AX = Number of last cylinder
+	dec		bx						; BL = Number of last head
+	xchg	cx, ax
+	xchg	cl, ch					; CH = Last cylinder bits 0...7
+	eROR_IM	cl, 2					; CL bits 6...7 = Last cylinder bits 8...9
+	or		cl, bh					; CL bits 0...5 = Sectors per track
+	mov		dh, bl					; DH = Maximum head number
 	jmp		RamVars_GetCountOfKnownDrivesToDL
Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH9h_HInit.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH9h_HInit.asm	(revision 226)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/AH9h_HInit.asm	(revision 227)
@@ -17,5 +17,4 @@
 ;		CF:		0 if succesfull, 1 if error
 ;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
 AH9h_HandlerForInitializeDriveParameters:
 %ifndef USE_186
@@ -41,5 +40,4 @@
 ;		AL, BX, DX
 ;--------------------------------------------------------------------
-;ALIGN JUMP_ALIGN
 AH9h_InitializeDriveForUse:
 	push	cx
@@ -87,5 +85,4 @@
 ;		AL, BX, CX, DX
 ;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
 InitializeDeviceParameters:
 	; No need to initialize CHS parameters if LBA mode enabled
@@ -94,7 +91,7 @@
 
 	; Initialize Logical Sectors per Track and Max Head number
-	mov		ah, [di+DPT.bHeads]
+	mov		ah, [di+DPT.bPchsHeads]
 	dec		ah							; Max Head number
-	mov		dl, [di+DPT.bSectors]		; Sectors per Track
+	mov		dl, [di+DPT.bPchsSectors]	; Sectors per Track
 	mov		al, COMMAND_INITIALIZE_DEVICE_PARAMETERS
 	mov		bx, TIMEOUT_AND_STATUS_TO_WAIT(TIMEOUT_BSY, FLG_STATUS_BSY)
@@ -113,5 +110,4 @@
 ;		AL, BX, CX, DX
 ;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
 InitializeBlockMode:
 	test	BYTE [di+DPT.bFlagsHigh], FLGH_DPT_BLOCK_MODE_SUPPORTED	; Clear CF
Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/EBIOS/AH48h_GetExtendedDriveParameters.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/EBIOS/AH48h_GetExtendedDriveParameters.asm	(revision 226)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/EBIOS/AH48h_GetExtendedDriveParameters.asm	(revision 227)
@@ -21,58 +21,32 @@
 ;		CF:		0 if succesfull, 1 if error
 ;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
 AH48h_HandlerForGetExtendedDriveParameters:
-	; Get our buffer to ES:SI
-	push	di
-	call	FindDPT_ForNewDriveToDSDI
-	lea		si, [di+LARGEST_DPT_SIZE]	; IdeCommand.asm required fake DPT
-	pop		di
-	push	ds
-	pop		es
+	call	AccessDPT_GetLbaSectorCountToBXDXAX
 
-	; Get Drive ID and total sector count from it
-	call	AH25h_GetDriveInformationToBufferInESSI
-	jc		SHORT .ReturnWithError
-
-	; Point DS:DI to Destination buffer
-	mov		di, [bp+IDEPACK.intpack+INTPACK.si]
+	; Point DS:SI to Extended Drive Information Table to fill
 	mov		ds, [bp+IDEPACK.intpack+INTPACK.ds]
-	mov		ax, MINIMUM_EDRIVEINFO_SIZE
-	cmp		[di+EDRIVE_INFO.wSize], ax
+	mov		cx, MINIMUM_EDRIVEINFO_SIZE
+	cmp		[si+EDRIVE_INFO.wSize], cx
 	jb		SHORT Prepare_ReturnFromInt13hWithInvalidFunctionError
 	je		SHORT .SkipEddConfigurationParameters
 
 	; We do not support EDD Configuration Parameters so set to FFFF:FFFFh
-	mov		ax, -1		; AX = FFFFh
-	mov		[di+EDRIVE_INFO.fpEDDparams], ax
-	mov		[di+EDRIVE_INFO.fpEDDparams+2], ax
-	mov		ax, EDRIVE_INFO_size
+	mov		cx, -1		; FFFFh
+	mov		[si+EDRIVE_INFO.fpEDDparams], cx
+	mov		[si+EDRIVE_INFO.fpEDDparams+2], cx
+	mov		cx, EDRIVE_INFO_size
 
-	; Fill Extended Drive Information Table in DS:DI
+	; Fill Extended Drive Information Table in DS:SI
 .SkipEddConfigurationParameters:
-	mov		[di+EDRIVE_INFO.wSize], ax
-	mov		WORD [di+EDRIVE_INFO.wFlags], FLG_DMA_BOUNDARY_ERRORS_HANDLED_BY_BIOS | FLG_CHS_INFORMATION_IS_VALID
+	mov		[si+EDRIVE_INFO.wSize], cx
+	mov		WORD [si+EDRIVE_INFO.wFlags], FLG_DMA_BOUNDARY_ERRORS_HANDLED_BY_BIOS
 
-	call	AtaID_GetPCHStoAXBLBHfromAtaInfoInESSI
-	xor		cx, cx
-	mov		[di+EDRIVE_INFO.dwCylinders], ax
-	mov		[di+EDRIVE_INFO.dwCylinders+2], cx
-	eMOVZX	ax, bl
-	mov		[di+EDRIVE_INFO.dwHeads], ax
-	mov		[di+EDRIVE_INFO.dwHeads+2], cx
-	mov		al, bh
-	mov		[di+EDRIVE_INFO.dwSectorsPerTrack], ax
-	mov		[di+EDRIVE_INFO.dwSectorsPerTrack+2], cx
-
-	call	AtaID_GetTotalSectorCountToBXDXAXfromAtaInfoInESSI
 	mov		[di+EDRIVE_INFO.qwTotalSectors], ax
+	xor		ax, ax									; Return with success
 	mov		[di+EDRIVE_INFO.qwTotalSectors+2], dx
 	mov		[di+EDRIVE_INFO.qwTotalSectors+4], bx
-	mov		[di+EDRIVE_INFO.qwTotalSectors+6], cx
-
+	mov		[di+EDRIVE_INFO.qwTotalSectors+6], ax
 	mov		WORD [di+EDRIVE_INFO.wSectorSize], 512
 
-	; Return with success
-	xor		ah, ah
 .ReturnWithError:
 	jmp		Int13h_ReturnFromHandlerAfterStoringErrorCodeFromAH
Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/Tools/Address.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/Tools/Address.asm	(revision 226)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int13h/Tools/Address.asm	(revision 227)
@@ -53,5 +53,5 @@
 	; LHead / PHeadCount and LHead % PHeadCount
 	eMOVZX	ax, bh					; Copy L-CHS Head number to AX
-	div		BYTE [di+DPT.bHeads]	; AL = LHead / PHeadCount, AH = LHead % PHeadCount
+	div		BYTE [di+DPT.bPchsHeads]; AL = LHead / PHeadCount, AH = LHead % PHeadCount
 	mov		bh, ah					; Copy P-CHS Head number to BH
 	xor		ah, ah					; AX = LHead / PHeadCount
@@ -129,5 +129,5 @@
 	; cylToSeek*headsPerCyl (18-bit result)
 	mov		ax, cx					; Copy Cylinder number to AX
-	eMOVZX	dx, BYTE [di+DPT.bHeads]
+	eMOVZX	dx, BYTE [di+DPT.bLbaHeads]
 	mul		dx						; DX:AX = cylToSeek*headsPerCyl
 
Index: trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/AccessDPT.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/AccessDPT.asm	(revision 226)
+++ trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/AccessDPT.asm	(revision 227)
@@ -40,68 +40,81 @@
 	ret
 
-		
+
 ;--------------------------------------------------------------------
-; AccessDPT_GetLCHS
+; AccessDPT_GetLCHStoAXBLBH
 ;	Parameters:
 ;		DS:DI:	Ptr to Disk Parameter Table
 ;	Returns:
-;		AX:		Number of L-CHS sectors per track
-;		BX:		Number of L-CHS cylinders
-;		DX:		Number of L-CHS heads
+;		AX:		Number of L-CHS cylinders
+;		BL:		Number of L-CHS heads
+;		BH:		Number of L-CHS sectors per track
 ;	Corrupts registers:
-;		CX
+;		CX, DX
 ;--------------------------------------------------------------------
-AccessDPT_GetLCHS:
-	; Load CHS from DPT
-	eMOVZX	ax, BYTE [di+DPT.bSectors]
-	mov		bx, [di+DPT.dwCylinders]
-	cwd
-	mov		dl, [di+DPT.bHeads]
+AccessDPT_GetLCHStoAXBLBH:
+	; Return LBA-assisted CHS if LBA addressing used
+	test	BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA
+	jz		SHORT .ConvertPchsToLchs
 
-	; Only need to limit sectors for LBA assist
-	test	BYTE [di+DPT.bFlagsLow], FLG_DRVNHEAD_LBA
-	jz		SHORT AccessDPT_ShiftPCHinBXDXtoLCH
+	call	AccessDPT_GetLbaSectorCountToBXDXAX
+	call	AtaID_GetLbaAssistedCHStoDXAXBLBH
+	test	dx, dx
+	jnz		SHORT .LimitAXtoMaxLCHScylinders
+	cmp		ax, MAX_LCHS_CYLINDERS
+	jbe		SHORT .returnLCHS
+.LimitAXtoMaxLCHScylinders:
+	mov		ax, MAX_LCHS_CYLINDERS
+.returnLCHS:
+	ret
 
-	cmp		WORD [di+DPT.dwCylinders+2], BYTE 0
-	jnz		SHORT .Return_MAX_LCHS_CYLINDERS
+.ConvertPchsToLchs:
+	mov		ax, [di+DPT.wPchsCylinders]
+	mov		bx, [di+DPT.wPchsHeadsAndSectors]
+	jmp		SHORT AccessDPT_ShiftPCHinAXBLtoLCH
 
-	; Limit cylinders to 1024
-	cmp		bx, MAX_LCHS_CYLINDERS
-	jb		SHORT .Return
-ALIGN JUMP_ALIGN
-.Return_MAX_LCHS_CYLINDERS:
-	mov		bx, MAX_LCHS_CYLINDERS
-ALIGN JUMP_ALIGN, ret
-.Return:
+
+;--------------------------------------------------------------------
+; AccessDPT_GetLbaSectorCountToBXDXAX
+;	Parameters:
+;		DS:DI:	Ptr to Disk Parameter Table
+;	Returns:
+;		BX:DX:AX:	48-bit sector count
+;	Corrupts registers:
+;		Nothing
+;--------------------------------------------------------------------
+AccessDPT_GetLbaSectorCountToBXDXAX:
+	mov		ax, [di+DPT.twLbaSectors]
+	mov		dx, [di+DPT.twLbaSectors+2]
+	mov		bx, [di+DPT.twLbaSectors+4]
 	ret
 
 
 ;--------------------------------------------------------------------
-; AccessDPT_ShiftPCHinBXDXtoLCH
+; AccessDPT_ShiftPCHinAXBLtoLCH
 ;	Parameters:
-;		BX:		P-CHS cylinders (1...16383)
-;		DX:		P-CHS heads (1...16)
+;		AX:		P-CHS cylinders (1...16383)
+;		BL:		P-CHS heads (1...16)
 ;	Returns:
-;		BX:		Number of L-CHS cylinders (1...1024)
-;		DX:		Number of L-CHS heads (1...255)
+;		AX:		Number of L-CHS cylinders (1...1024)
+;		BL:		Number of L-CHS heads (1...255)
 ;		CX:		Number of bits shifted
 ;	Corrupts registers:
 ;		Nothing
 ;--------------------------------------------------------------------
-AccessDPT_ShiftPCHinBXDXtoLCH:
+AccessDPT_ShiftPCHinAXBLtoLCH:
 	xor		cx, cx
 .ShiftLoop:
-	cmp		bx, MAX_LCHS_CYLINDERS		; Need to shift?
+	cmp		ax, MAX_LCHS_CYLINDERS		; Need to shift?
 	jbe		SHORT .LimitHeadsTo255		;  If not, return
 	inc		cx							; Increment shift count
-	shr		bx, 1						; Halve cylinders
-	shl		dx, 1						; Double heads
+	shr		ax, 1						; Halve cylinders
+	shl		bl, 1						; Double heads
 	jmp		SHORT .ShiftLoop
 .LimitHeadsTo255:						; DOS does not support drives with 256 heads
-	sub		dl, dh						; DH set only when 256 logical heads
-	xor		dh, dh
+	cmp		bl, cl						; Set CF if BL is zero
+	sbb		bl, ch						; If BL=0 then BL=255
 	ret
 
-		
+
 ;--------------------------------------------------------------------
 ; Returns pointer to DRVPARAMS for master or slave drive.
@@ -144,4 +157,2 @@
 	and		al, MASKL_DPT_ADDRESSING_MODE
 %endmacro
-
-		
Index: trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/CreateDPT.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/CreateDPT.asm	(revision 226)
+++ trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/CreateDPT.asm	(revision 227)
@@ -78,9 +78,7 @@
 ;		CS:BP:	Ptr to IDEVARS for the controller
 ;	Returns:
-;		DX:AX or AX:	Number of cylinders
-;		BH:				Number of sectors per track
-;		BL:				Number of heads
-;	Corrupts registers:
-;		CX, (DX)
+;		Nothing
+;	Corrupts registers:
+;		AX, BX, CX, DX
 ;--------------------------------------------------------------------
 .StoreAddressing:
@@ -88,10 +86,10 @@
 	call	AccessDPT_GetPointerToDRVPARAMStoCSBX
 	test	byte [cs:bx+DRVPARAMS.wFlags], FLG_DRVPARAMS_USERCHS    ; User specified CHS?
-	jnz		SHORT .StoreUserDefinedCHSaddressing
+	jnz		SHORT .StoreUserDefinedPCHS
 
 	; Check if LBA supported
 	call	AtaID_GetPCHStoAXBLBHfromAtaInfoInESSI
 	test	BYTE [es:si+ATA1.wCaps+1], A1_wCaps_LBA>>8
-	jz		SHORT .StoreCHSaddressing
+	jz		SHORT .StoreCHSfromAXBHBL		; Small old drive with CHS addressing only
 
 	; Check if 48-bit LBA supported
@@ -102,48 +100,76 @@
 	or		BYTE [di+DPT.bFlagsLow], ADDRESSING_MODE_LBA28<<ADDRESSING_MODE_FIELD_POSITION
 	call	AtaID_GetTotalSectorCountToBXDXAXfromAtaInfoInESSI
+	mov		[di+DPT.twLbaSectors], ax
+	mov		[di+DPT.twLbaSectors+2], dx
+	mov		[di+DPT.twLbaSectors+4], bx
 	call	AtaID_GetLbaAssistedCHStoDXAXBLBH
-	jmp		SHORT .StoreChsFromDXAXBX
-
-	; Check if P-CHS to L-CHS translation required
-.StoreUserDefinedCHSaddressing:
+	mov		[di+DPT.bLbaHeads], bl
+	jmp		SHORT .StoreBlockMode
+
+;--------------------------------------------------------------------
+; .StoreUserDefinedPCHS
+;	Parameters:
+;		DS:DI:	Ptr to Disk Parameter Table
+;		ES:SI:	Ptr to 512-byte ATA information read from the drive
+;		CS:BP:	Ptr to IDEVARS for the controller
+;	Returns:
+;		AX:		Number of P-CHS cylinders
+;		BH:		Number of P-CHS sectors per track
+;		BL:		Number of P-CHS heads
+;	Corrupts registers:
+;		Nothing
+;--------------------------------------------------------------------
+.StoreUserDefinedPCHS:
 	call	AccessDPT_GetPointerToDRVPARAMStoCSBX
 	mov		ax, [cs:bx+DRVPARAMS.wCylinders]
 	mov		bx, [cs:bx+DRVPARAMS.wHeadsAndSectors]
-.StoreCHSaddressing:
-	cmp		ax, MAX_LCHS_CYLINDERS
-	jbe		SHORT .StoreChsFromAXBX		; No translation required
-
-	; We need to get number of bits to shift for translation
+	; Fall to .StoreCHSfromAXBHBL
+
+;--------------------------------------------------------------------
+; .StoreCHSfromAXBHBL
+;	Parameters:
+;		AX:		Number of P-CHS cylinders
+;		BH:		Number of P-CHS sectors per track
+;		BL:		Number of P-CHS heads
+;		DS:DI:	Ptr to Disk Parameter Table
+;		ES:SI:	Ptr to 512-byte ATA information read from the drive
+;		CS:BP:	Ptr to IDEVARS for the controller
+;	Returns:
+;		AX:		Number of P-CHS cylinders
+;		BH:		Number of P-CHS sectors per track
+;		BL:		Number of P-CHS heads
+;	Corrupts registers:
+;		CX
+;--------------------------------------------------------------------
+.StoreCHSfromAXBHBL:
 	push	ax
-	eMOVZX	dx, bl						; Heads now in DX
-	xchg	bx, ax						; Cylinders now in BX
-	call	AccessDPT_ShiftPCHinBXDXtoLCH	; Leaves AX untouched
-	xchg	bx, ax						; Restore HeadsAndSectors to BX
+	push	bx
+	call	AccessDPT_ShiftPCHinAXBLtoLCH	; Get number of bits to shift
+	pop		bx
+	pop		ax
+	jcxz	.StorePCHSfromAXDX				; Small drive so use L-CHS addressing
+
+	; Store P-CHS addressing mode and number of bits to shift in L-CHS to P-CHS translation
 	or		cl, ADDRESSING_MODE_PCHS<<ADDRESSING_MODE_FIELD_POSITION
-	or		[di+DPT.bFlagsLow], cl		; Store bits to shift
-	pop		ax
-	; Fall to .StoreChsFromAXBX
-
-;--------------------------------------------------------------------
-; .StoreChsFromAXBX
-; .StoreChsFromDXAXBX
-;	Parameters:
-;		DX:AX or AX:	Number of cylinders
-;		BH:		Number of sectors per track
-;		BL:		Number of heads
-;		DS:DI:	Ptr to Disk Parameter Table
-;		ES:SI:	Ptr to 512-byte ATA information read from the drive
-;		CS:BP:	Ptr to IDEVARS for the controller
-;	Returns:
-;		Nothing
-;	Corrupts registers:
-;		DX
-;--------------------------------------------------------------------
-.StoreChsFromAXBX:
-	xor		dx, dx
-.StoreChsFromDXAXBX:
-	mov		[di+DPT.dwCylinders], ax
-	mov		[di+DPT.dwCylinders+2], dx
-	mov		[di+DPT.wHeadsAndSectors], bx
+	or		[di+DPT.bFlagsLow], cl
+	; Fall to .StoreChsFromAXBLBH
+
+;--------------------------------------------------------------------
+; .StoreChsFromAXBLBH
+;	Parameters:
+;		AX:		Number of P-CHS cylinders
+;		BH:		Number of P-CHS sectors per track
+;		BL:		Number of P-CHS heads
+;		DS:DI:	Ptr to Disk Parameter Table
+;		ES:SI:	Ptr to 512-byte ATA information read from the drive
+;		CS:BP:	Ptr to IDEVARS for the controller
+;	Returns:
+;		Nothing
+;	Corrupts registers:
+;		Nothing
+;--------------------------------------------------------------------
+.StorePCHSfromAXDX:
+	mov		[di+DPT.wPchsCylinders], ax
+	mov		[di+DPT.wPchsHeadsAndSectors], bx
 	; Fall to .StoreBlockMode
 
