Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc	(revision 424)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc	(revision 425)
@@ -71,7 +71,8 @@
 	.wMinValue				resb	2	; Minimum allowed integer value
 	.wMaxValue:
-	.wValueBitmask			resb	2	; Bitmask for item value flag
+	.wValueBitmask			resb	2	; Bitmask for item value flag or field
 	.fnValueReader			resb	2	; Called just after ROMVARS is read, providing a hook for further action
 	.fnValueWriter			resb	2	; Called just before ROMVARS is written, providing a hook for further action
+	.bFieldPosition			resb	1	; Bit field position
 endstruc
 
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm	(revision 424)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm	(revision 425)
@@ -258,4 +258,8 @@
 	test	BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_MASKVALUE
 	jz		SHORT .StoreByteOrWord
+	push	cx
+	mov		cl, [si+MENUITEM.itemValue+ITEM_VALUE.bFieldPosition]
+	shl		ax, cl
+	pop		cx
 	or		[es:di], ax
 	jmp		SHORT .SetUnsavedChanges
@@ -344,5 +348,10 @@
 	test	BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_MASKVALUE
 	jz		SHORT .TestIfFlagValue
+
 	and		ax, [si+MENUITEM.itemValue+ITEM_VALUE.wValueBitmask]
+	push	cx
+	mov		cl, [si+MENUITEM.itemValue+ITEM_VALUE.bFieldPosition]
+	shr		ax, cl
+	pop		cx
 	ret
 
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MasterSlaveMenu.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MasterSlaveMenu.asm	(revision 424)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MasterSlaveMenu.asm	(revision 425)
@@ -26,5 +26,5 @@
 	at	MENUPAGE.fnEnter,			dw	MasterSlaveMenu_EnterMenuOrModifyItemVisibility
 	at	MENUPAGE.fnBack,			dw	IdeControllerMenu_EnterMenuOrModifyItemVisibility
-	at	MENUPAGE.wMenuitems,		dw	9
+	at	MENUPAGE.wMenuitems,		dw	10
 iend
 
@@ -55,4 +55,22 @@
 iend
 
+g_MenuitemMasterSlaveChsTranslateMode:
+istruc MENUITEM
+	at	MENUITEM.fnActivate,		dw	Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
+	at	MENUITEM.fnFormatValue,		dw	MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
+	at	MENUITEM.szName,			dw	g_szItemDrvXlateMode
+	at	MENUITEM.szQuickInfo,		dw	g_szNfoDrvXlateMode
+	at	MENUITEM.szHelp,			dw	g_szNfoDrvXlateMode
+	at	MENUITEM.bFlags,			db	FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MASKVALUE
+	at	MENUITEM.bType,				db	TYPE_MENUITEM_MULTICHOICE
+	at	MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,		dw	NULL
+	at	MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,				dw	g_szDlgDrvXlateMode
+	at	MENUITEM.itemValue + ITEM_VALUE.szMultichoice,				dw	g_szMultichoiseXlateMode
+	at	MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,		dw	g_rgwChoiceToValueLookupForXlateMode
+	at	MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup,	dw	g_rgszChoiceToStringLookupForXlateMode
+	at	MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,				dw	MASK_DRVPARAMS_TRANSLATEMODE
+	at	MENUITEM.itemValue + ITEM_VALUE.bFieldPosition,				db	TRANSLATEMODE_FIELD_POSITION
+iend
+
 g_MenuitemMasterSlaveWriteCache:
 istruc MENUITEM
@@ -70,4 +88,5 @@
 	at	MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup,	dw	g_rgszChoiceToStringLookupForWriteCache
 	at	MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,				dw	MASK_DRVPARAMS_WRITECACHE
+	at	MENUITEM.itemValue + ITEM_VALUE.bFieldPosition,				db	0
 iend
 
@@ -101,5 +120,5 @@
 	at	MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,				dw	g_szDlgDrvCyls
 	at	MENUITEM.itemValue + ITEM_VALUE.wMinValue,					dw	1
-	at	MENUITEM.itemValue + ITEM_VALUE.wMaxValue,					dw	16383
+	at	MENUITEM.itemValue + ITEM_VALUE.wMaxValue,					dw	MAX_USER_CYLINDERS
 %define					MASTERSLAVE_CYLINDERS_DEFAULT					65
 iend
@@ -117,6 +136,6 @@
 	at	MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,				dw	g_szDlgDrvHeads
 	at	MENUITEM.itemValue + ITEM_VALUE.wMinValue,					dw	1
-	at	MENUITEM.itemValue + ITEM_VALUE.wMaxValue,					dw	16
-%define					MASTERSLAVE_HEADS_DEFAULT						16		
+	at	MENUITEM.itemValue + ITEM_VALUE.wMaxValue,					dw	MAX_USER_HEADS
+%define					MASTERSLAVE_HEADS_DEFAULT						MAX_USER_HEADS		
 iend
 
@@ -133,6 +152,6 @@
 	at	MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,				dw	g_szDlgDrvSect
 	at	MENUITEM.itemValue + ITEM_VALUE.wMinValue,					dw	1
-	at	MENUITEM.itemValue + ITEM_VALUE.wMaxValue,					dw	63
-%define					MASTERSLAVE_SECTORS_DEFAULT						63
+	at	MENUITEM.itemValue + ITEM_VALUE.wMaxValue,					dw	MAX_USER_SECTORS_PER_TRACK
+%define					MASTERSLAVE_SECTORS_DEFAULT						MAX_USER_SECTORS_PER_TRACK
 iend
 
@@ -165,9 +184,9 @@
 	at	MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,		dw	NULL
 	at	MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,				dw	g_szDlgDrvLbaSectors
-	at	MENUITEM.itemValue + ITEM_VALUE.wMinValue,					dw	1							; 512 MiB
+	at	MENUITEM.itemValue + ITEM_VALUE.wMinValue,					dw	16							; 8 GiB
 	at	MENUITEM.itemValue + ITEM_VALUE.wMaxValue,					dw	10000000h / (1024 * 1024)	; Limit to 28-bit LBA
 	at	MENUITEM.itemValue + ITEM_VALUE.fnValueReader,				dw	ValueReaderForUserLbaValue
 	at	MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,				dw	ValueWriterForUserLbaValue
-%define				MASTERSLAVE_USERLBA_DEFAULT						1
+%define				MASTERSLAVE_USERLBA_DEFAULT						64
 iend
 
@@ -183,4 +202,16 @@
 	dw	g_szValueDrvWrCaEn
 
+g_rgwChoiceToValueLookupForXlateMode:
+	dw	TRANSLATEMODE_NORMAL
+	dw	TRANSLATEMODE_LARGE
+	dw	TRANSLATEMODE_ASSISTED_LBA
+	dw	TRANSLATEMODE_AUTO
+
+g_rgszChoiceToStringLookupForXlateMode:
+	dw	g_szValueDrvXlateNormal
+	dw	g_szValueDrvXlateLarge
+	dw	g_szValueDrvXlateLBA
+	dw	g_szValueDrvXlateAuto
+
 
 ; Section containing code
@@ -200,4 +231,5 @@
 	lea		ax, [bx+DRVPARAMS.wFlags]
 	mov		[cs:g_MenuitemMasterSlaveBlockModeTransfers+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
+	mov		[cs:g_MenuitemMasterSlaveChsTranslateMode+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
 	mov		[cs:g_MenuitemMasterSlaveWriteCache+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
 	mov		[cs:g_MenuitemMasterSlaveUserCHS+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm	(revision 424)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm	(revision 425)
@@ -24,5 +24,5 @@
 g_szProgramTitle:
 	db	"Configuration and Flashing program for XTIDE Universal BIOS v2.0.0.",LF,CR,NULL
-g_szXtideUniversalBiosSignature:	db	"XTIDE200",NULL
+g_szXtideUniversalBiosSignature:	db	"XTIDE201",NULL
 g_szBiosIsNotLoaded:				db	"BIOS is not loaded!",NULL
 g_szEEPROM:							db	"EEPROM",NULL
@@ -309,4 +309,5 @@
 g_szItemDrvBackToIde:	db	"Back to IDE Controller Menu",NULL
 g_szItemDrvBlockMode:	db	"Block Mode Transfers",NULL
+g_szItemDrvXlateMode:	db	"CHS translation method",NULL
 g_szItemDrvWriteCache:	db	"Internal Write Cache",NULL
 g_szItemDrvUserCHS:		db	"User specified CHS",NULL
@@ -318,4 +319,5 @@
 
 g_szDlgDrvBlockMode:	db	"Enable Block Mode Transfers?",NULL
+g_szDlgDrvXlateMode:	db	"Select P-CHS to L-CHS translation method.",NULL
 g_szDlgDrvWriteCache:	db	"Select hard drive internal write cache settings.",NULL
 g_szDlgDrvUserCHS:		db	"Specify (P-)CHS parameters manually?",NULL
@@ -324,7 +326,8 @@
 g_szDlgDrvSect:			db	"Enter number of sectors per track (1...63).",NULL
 g_szDlgDrvUserLBA:		db	"Limit drive capacity?",NULL
-g_szDlgDrvLbaSectors:	db	"Enter maximum capacity in millions of sectors (1...256).",NULL
+g_szDlgDrvLbaSectors:	db	"Enter maximum capacity in millions of sectors (16...256).",NULL
 
 g_szNfoDrvBlockMode:	db	"Transfer multiple sectors per data request.",NULL
+g_szNfoDrvXlateMode:	db	"P-CHS to L-CHS translation method.",NULL
 g_szNfoDrvWriteCache:	db	"Hard Drive Internal Write Cache settings (WARNING!).",NULL
 g_szNfoDrvUserCHS:		db	"Specify (P-)CHS parameters manually instead of autodetecting them.",NULL
@@ -343,4 +346,15 @@
 g_szHelpDrvUserLBA:		incbin	"Drive_UserLBA.txt"
 						db	NULL
+
+g_szMultichoiseXlateMode:
+						db	"NORMAL",LF
+						db	"LARGE",LF
+						db	"Assisted LBA",LF
+						db	"Autodetect",NULL
+
+g_szValueDrvXlateNormal:db	"NORMAL",NULL
+g_szValueDrvXlateLarge:	db	"LARGE",NULL
+g_szValueDrvXlateLBA:	db	"LBA",NULL
+g_szValueDrvXlateAuto:	db	"Auto",NULL
 
 g_szMultichoiseWrCache:	db	"Drive Default",LF
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/makefile
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/makefile	(revision 424)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/makefile	(revision 425)
@@ -108,5 +108,5 @@
 .PHONY: all at xtplus xt clean release
 
-all: clean xt
+all: clean release
 	@echo All done!
 
