Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/Drive_UserLBA.txt
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/Drive_UserLBA.txt	(revision 286)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/Drive_UserLBA.txt	(revision 286)
@@ -0,0 +1,1 @@
+Limit drive size to X million sectors for EBIOS functions. This option is useful to prevent large drive compatibility problems with MS-DOS 7.x (Windows 95 and 98).
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/Drive_WriteCache.txt
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/Drive_WriteCache.txt	(revision 286)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/Drive_WriteCache.txt	(revision 286)
@@ -0,0 +1,1 @@
+Modern Hard Drives have large internal write cache. The cache will speed up writes since the drive can free the bus right after data has been written in cache. The drive then starts to write the data from cache by itself. That can be dangerous since all unwritten data in cache is lost if power is turned off or the system is reset. Modern operating systems will flush the cache when user shuts down the system. DOS does not have that sort of protection so it is up to the user to make sure cache is flushed. WARNING!!! Write cache should be left disabled.
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc	(revision 285)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/MenuStructs.inc	(revision 286)
@@ -32,4 +32,6 @@
 FLG_MENUITEM_CHOICESTRINGS  EQU (1<<5)  ; ChoiceToStringLookup table is 1-1 with ChoiceToValueLookup table,
 										; ChoiceToStringLookup table must also be NULL terminated
+FLG_MENUITEM_MASKVALUE		EQU	(1<<6)	; Item value is more than one bit among other bits
+
 
 ; Values for MENUITEM.bType
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm	(revision 285)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm	(revision 286)
@@ -76,5 +76,6 @@
 ;		DS:SI:	Ptr to MENUITEM
 ;	Returns:
-;		Nothing
+;		CF:		Cleared if value inputted
+;				Set if user cancellation
 ;	Corrupts registers:
 ;		AX, BX, CX, SI, DI, ES
@@ -97,5 +98,6 @@
 	pop		di
 
-	cmp		BYTE [si+WORD_DIALOG_IO.bUserCancellation], TRUE
+	mov		cl, [si+WORD_DIALOG_IO.bUserCancellation]
+	cmp		cl, TRUE
 	je		SHORT .NothingToChange
 	mov		ax, [si+WORD_DIALOG_IO.wReturnWord]
@@ -104,4 +106,5 @@
 .NothingToChange:
 	add		sp, BYTE WORD_DIALOG_IO_size
+	shr		cl, 1
 	ret
 
@@ -150,4 +153,6 @@
 	add		di, [si+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
 	jmp		[cs:bx+.rgfnJumpToStoreValueBasedOnItemType]
+.InvalidItemType:
+	ret
 
 ALIGN WORD_ALIGN
@@ -174,4 +179,6 @@
 ALIGN JUMP_ALIGN
 .StoreMultichoiceValueFromAXtoESDIwithItemInDSSI:
+	test	BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_MASKVALUE
+	jnz		SHORT .ClearBitsUsingMask
 	test	BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_FLAGVALUE
 	jz		SHORT .TranslateChoiceToValueUsingLookupTable
@@ -187,4 +194,12 @@
 	or		[es:di], ax
 	jmp		SHORT .SetUnsavedChanges
+
+ALIGN JUMP_ALIGN
+.ClearBitsUsingMask:
+	mov		bx, [si+MENUITEM.itemValue+ITEM_VALUE.wValueBitmask]
+	not		bx
+	and		[es:di], bx
+	; Fall to .TranslateChoiceToValueUsingLookupTable
+
 
 ALIGN JUMP_ALIGN
@@ -225,7 +240,13 @@
 .NoWriter:
 	pop		bx
+	test	BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_MASKVALUE
+	jz		SHORT .StoreByteOrWord
+	or		[es:di], ax
+	jmp		SHORT .SetUnsavedChanges
+
+.StoreByteOrWord:
 	test	BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_BYTEVALUE
 	jnz		SHORT .StoreByteFromAL
-		
+
 	mov		[es:di+1], ah
 ALIGN JUMP_ALIGN
@@ -255,5 +276,4 @@
 	CALL_MENU_LIBRARY GetHighlightedItemToAX
 	CALL_MENU_LIBRARY RefreshItemFromAX
-.InvalidItemType:
 	ret
 
@@ -306,4 +326,10 @@
 	pop		es
 
+	test	BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_MASKVALUE
+	jz		SHORT .TestIfFlagValue
+	and		ax, [si+MENUITEM.itemValue+ITEM_VALUE.wValueBitmask]
+	ret
+
+.TestIfFlagValue:
 	test	BYTE [si+MENUITEM.bFlags], FLG_MENUITEM_FLAGVALUE
 	jz		SHORT .Return
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuitemPrint.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuitemPrint.asm	(revision 285)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuitemPrint.asm	(revision 286)
@@ -233,5 +233,5 @@
 	mov		bx, 10
 	CALL_DISPLAY_LIBRARY PrintWordFromAXwithBaseInBX
-	jmp		SHORT FinishPrintingUnsignedOrHexValue
+	jmp		SHORT MenuitemPrint_FinishPrintingUnsignedOrHexValue
 
 ;--------------------------------------------------------------------
@@ -258,5 +258,5 @@
 	CALL_DISPLAY_LIBRARY PrintCharacterFromAL
 ALIGN JUMP_ALIGN
-FinishPrintingUnsignedOrHexValue:
+MenuitemPrint_FinishPrintingUnsignedOrHexValue:
 	CALL_DISPLAY_LIBRARY GetCharacterPointerToBXAX
 	xchg	bx, ax
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm	(revision 285)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm	(revision 286)
@@ -178,4 +178,5 @@
 	dw	DEVICE_32BIT_ATA
 	dw	DEVICE_SERIAL_PORT
+	dw	DEVICE_JRIDE_ISA
 g_rgszValueToStringLookupForDevice:
 	dw	g_szValueCfgDeviceDual8b
@@ -185,4 +186,5 @@
 	dw	g_szValueCfgDevice32b
 	dw	g_szValueCfgDeviceSerial
+	dw	g_szValueCfgDeviceJrIdeIsa
 
 g_rgbChoiceToValueLookupForCOM:
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MasterSlaveMenu.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MasterSlaveMenu.asm	(revision 285)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MasterSlaveMenu.asm	(revision 286)
@@ -10,5 +10,5 @@
 	at	MENUPAGE.fnEnter,			dw	MasterSlaveMenu_EnterMenuOrModifyItemVisibility
 	at	MENUPAGE.fnBack,			dw	IdeControllerMenu_EnterMenuOrModifyItemVisibility
-	at	MENUPAGE.wMenuitems,		dw	6
+	at	MENUPAGE.wMenuitems,		dw	9
 iend
 
@@ -39,4 +39,21 @@
 iend
 
+g_MenuitemMasterSlaveWriteCache:
+istruc MENUITEM
+	at	MENUITEM.fnActivate,		dw	Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
+	at	MENUITEM.fnFormatValue,		dw	MenuitemPrint_WriteLookupValueStringToBufferInESDIfromUnshiftedItemInDSSI
+	at	MENUITEM.szName,			dw	g_szItemDrvWriteCache
+	at	MENUITEM.szQuickInfo,		dw	g_szNfoDrvWriteCache
+	at	MENUITEM.szHelp,			dw	g_szHelpDrvWriteCache
+	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_szDlgDrvWriteCache
+	at	MENUITEM.itemValue + ITEM_VALUE.szMultichoice,				dw	g_szMultichoiseWrCache
+	at	MENUITEM.itemValue + ITEM_VALUE.rgwChoiceToValueLookup,		dw	g_rgwChoiceToValueLookupForWriteCache
+	at	MENUITEM.itemValue + ITEM_VALUE.rgszChoiceToStringLookup,	dw	g_rgszChoiceToStringLookupForWriteCache
+	at	MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,				dw	MASK_DRVPARAMS_WRITECACHE
+iend
+
 g_MenuitemMasterSlaveUserCHS:
 istruc MENUITEM
@@ -100,4 +117,48 @@
 iend
 
+g_MenuitemMasterSlaveUserLBA:
+istruc MENUITEM
+	at	MENUITEM.fnActivate,		dw	Menuitem_ActivateMultichoiceSelectionForMenuitemInDSSI
+	at	MENUITEM.fnFormatValue,		dw	MenuitemPrint_WriteLookupValueStringToBufferInESDIfromShiftedItemInDSSI
+	at	MENUITEM.szName,			dw	g_szItemDrvUserLBA
+	at	MENUITEM.szQuickInfo,		dw	g_szNfoDrvUserLBA
+	at	MENUITEM.szHelp,			dw	g_szHelpDrvUserLBA
+	at	MENUITEM.bFlags,			db	FLG_MENUITEM_VISIBLE | FLG_MENUITEM_MODIFY_MENU | FLG_MENUITEM_FLAGVALUE
+	at	MENUITEM.bType,				db	TYPE_MENUITEM_MULTICHOICE
+	at	MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,		dw	NULL
+	at	MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,				dw	g_szDlgDrvUserLBA
+	at	MENUITEM.itemValue + ITEM_VALUE.szMultichoice,				dw	g_szMultichoiceBooleanFlag
+	at	MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,	dw	g_rgszValueToStringLookupForFlagBooleans
+	at	MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,				dw	FLG_DRVPARAMS_USERLBA
+iend
+
+g_MenuitemMasterSlaveUserLbaValue:
+istruc MENUITEM
+	at	MENUITEM.fnActivate,		dw	Menuitem_ActivateUnsignedInputForMenuitemInDSSI
+	at	MENUITEM.fnFormatValue,		dw	MenuitemPrint_WriteUnsignedValueStringToBufferInESDIfromItemInDSSI
+	at	MENUITEM.szName,			dw	g_szItemDrvLbaSectors
+	at	MENUITEM.szQuickInfo,		dw	g_szNfoDrvLbaSectors
+	at	MENUITEM.szHelp,			dw	g_szNfoDrvLbaSectors
+	at	MENUITEM.bFlags,			db	NULL
+	at	MENUITEM.bType,				db	TYPE_MENUITEM_UNSIGNED
+	at	MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,		dw	NULL
+	at	MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,				dw	g_szDlgDrvLbaSectors
+	at	MENUITEM.itemValue + ITEM_VALUE.wMinValue,					dw	((16383*16*63) / (1024 * 1024)) + 1	; One sector over 8.4 GB
+	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
+iend
+
+
+g_rgwChoiceToValueLookupForWriteCache:
+	dw	DEFAULT_WRITE_CACHE
+	dw	DISABLE_WRITE_CACHE
+	dw	ENABLE_WRITE_CACHE
+
+g_rgszChoiceToStringLookupForWriteCache:
+	dw	g_szValueBootDispModeDefault
+	dw	g_szValueDrvWrCaDis
+	dw	g_szValueDrvWrCaEn
+
 
 ; Section containing code
@@ -117,5 +178,7 @@
 	lea		ax, [bx+DRVPARAMS.wFlags]
 	mov		[cs:g_MenuitemMasterSlaveBlockModeTransfers+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
+	mov		[cs:g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
 
 	lea		ax, [bx+DRVPARAMS.wCylinders]
@@ -127,4 +190,7 @@
 	lea		ax, [bx+DRVPARAMS.bSect]
 	mov		[cs:g_MenuitemMasterSlaveSectors+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
+
+	lea		ax, [bx+DRVPARAMS.dwMaximumLBA]
+	mov		[cs:g_MenuitemMasterSlaveUserLbaValue+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset], ax
 	ret
 
@@ -143,7 +209,49 @@
 	push	cs
 	pop		ds
+	call	.EnableOrDisableUserCHSandLBA
 	call	.EnableOrDisableCHandS
+	call	.EnableOrDisableUserLbaValue
 	mov		si, g_MenupageForMasterSlaveMenu
 	jmp		Menupage_ChangeToNewMenupageInDSSI
+
+
+;--------------------------------------------------------------------
+; .EnableOrDisableUserCHSandLBA
+;	Parameters:
+;		SS:BP:	Menu handle
+;	Returns:
+;		Nothing
+;	Corrupts registers:
+;		AX, BX
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+.EnableOrDisableUserCHSandLBA:
+	mov		bx, [g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
+	call	Buffers_GetRomvarsValueToAXfromOffsetInBX
+	test	ax, FLG_DRVPARAMS_USERLBA
+	jnz		SHORT .DisableCHSandEnableLBA
+	test	ax, FLG_DRVPARAMS_USERCHS
+	jnz		SHORT .EnableCHSandDisableLBA
+
+	; Enable both
+	mov		bx, g_MenuitemMasterSlaveUserCHS
+	call	.EnableMenuitemFromCSBX
+	mov		bx, g_MenuitemMasterSlaveUserLBA
+	jmp		.EnableMenuitemFromCSBX	
+
+ALIGN JUMP_ALIGN
+.EnableCHSandDisableLBA:
+	mov		bx, g_MenuitemMasterSlaveUserCHS
+	call	.EnableMenuitemFromCSBX
+	mov		bx, g_MenuitemMasterSlaveUserLBA
+	jmp		.DisableMenuitemFromCSBX	
+
+ALIGN JUMP_ALIGN
+.DisableCHSandEnableLBA:
+	mov		bx, g_MenuitemMasterSlaveUserLBA
+	call	.EnableMenuitemFromCSBX
+	mov		bx, g_MenuitemMasterSlaveUserCHS
+	jmp		.DisableMenuitemFromCSBX	
+
 
 ;--------------------------------------------------------------------
@@ -162,4 +270,6 @@
 	test	ax, FLG_DRVPARAMS_USERCHS
 	jz		SHORT .DisableCHandS
+	test	ax, FLG_DRVPARAMS_USERLBA
+	jnz		SHORT .DisableCHandS
 
 	mov		bx, g_MenuitemMasterSlaveCylinders
@@ -168,6 +278,5 @@
 	call	.EnableMenuitemFromCSBX
 	mov		bx, g_MenuitemMasterSlaveSectors
-	call	.EnableMenuitemFromCSBX
-	ret
+	jmp		SHORT .EnableMenuitemFromCSBX
 
 ALIGN JUMP_ALIGN
@@ -178,6 +287,27 @@
 	call	.DisableMenuitemFromCSBX
 	mov		bx, g_MenuitemMasterSlaveSectors
-	call	.DisableMenuitemFromCSBX
-	ret
+	jmp		SHORT .DisableMenuitemFromCSBX
+
+
+;--------------------------------------------------------------------
+; .EnableOrDisableUserLbaValue
+;	Parameters:
+;		SS:BP:	Menu handle
+;	Returns:
+;		Nothing
+;	Corrupts registers:
+;		AX, BX
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+.EnableOrDisableUserLbaValue:
+	mov		bx, [cs:g_MenuitemMasterSlaveUserLBA+MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset]
+	call	Buffers_GetRomvarsValueToAXfromOffsetInBX
+	mov		bx, g_MenuitemMasterSlaveUserLbaValue
+	test	ax, FLG_DRVPARAMS_USERCHS
+	jnz		SHORT .DisableMenuitemFromCSBX
+	test	ax, FLG_DRVPARAMS_USERLBA
+	jz		SHORT .DisableMenuitemFromCSBX
+	jmp		SHORT .EnableMenuitemFromCSBX
+
 
 ;--------------------------------------------------------------------
@@ -200,2 +330,39 @@
 	and		BYTE [cs:bx+MENUITEM.bFlags], ~FLG_MENUITEM_VISIBLE
 	ret
+
+
+;--------------------------------------------------------------------
+; MENUITEM value reader functions
+;	Parameters:
+;		AX:		Value from MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset
+;		DS:SI:	Ptr to MENUITEM
+;		ES:DI:	Ptr to value variable
+;	Returns:
+;		AX:		Value with possible modifications
+;	Corrupts registers:
+;		Nothing
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+ValueReaderForUserLbaValue:
+	mov		ax, [es:di+2]		; SHR 16
+	eSHIFT_IM ax, 4, shr		; SHR 16 + 4 = 20
+	ret
+
+
+;--------------------------------------------------------------------
+; MENUITEM value writer functions
+;	Parameters:
+;		AX:		Value to be written to MENUITEM.itemValue+ITEM_VALUE.wRomvarsValueOffset
+;		DS:SI:	Ptr to MENUITEM
+;		ES:DI:	Ptr to value variable
+;	Returns:
+;		AX:		Value to be stored
+;	Corrupts registers:
+;		Nothing
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+ValueWriterForUserLbaValue:
+	eSHIFT_IM ax, 4, shl
+	mov		[es:di+2], ax
+	xor		ax, ax		; Store zero to [es:di]
+	ret
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm	(revision 285)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm	(revision 286)
@@ -155,9 +155,10 @@
 g_szMultichoiceCfgDevice:
 						db	"8-bit dual port (XTIDE)",LF
-						db	"XTIDE mod by Chuck(G)",LF
+						db	"XTIDE mod (A0<->A3)",LF
 						db	"8-bit single port",LF
 						db	"16-bit standard IDE",LF
 						db	"32-bit generic IDE",LF
-						db	"Serial port virtual device",NULL
+						db	"Serial port virtual device",LF
+						db	"JR-IDE/ISA",NULL
 
 g_szSerialCOMChoice:
@@ -211,9 +212,10 @@
 
 g_szValueCfgDeviceDual8b:	db	"XTIDE",NULL
-g_szValueCfgDeviceMod:		db	"Chuck(G)",NULL
+g_szValueCfgDeviceMod:		db	"XTIDEmod",NULL
 g_szValueCfgDeviceSingle8b:	db	"8-bit",NULL
 g_szValueCfgDevice16b:		db	"16-bit",NULL
 g_szValueCfgDevice32b:		db	"32-bit",NULL
 g_szValueCfgDeviceSerial:	db	"Serial",NULL
+g_szValueCfgDeviceJrIdeIsa:	db	"JR-ISA",NULL
 
 
@@ -221,25 +223,45 @@
 g_szItemDrvBackToIde:	db	"Back to IDE Controller Menu",NULL
 g_szItemDrvBlockMode:	db	"Block Mode Transfers",NULL
+g_szItemDrvWriteCache:	db	"Internal Write Cache",NULL
 g_szItemDrvUserCHS:		db	"User specified CHS",NULL
 g_szItemDrvCyls:		db	"Cylinders",NULL
 g_szItemDrvHeads:		db	"Heads",NULL
 g_szItemDrvSect:		db	"Sectors per track",NULL
+g_szItemDrvUserLBA:		db	"User specified LBA",NULL
+g_szItemDrvLbaSectors:	db	"Millions of sectors",NULL
 
 g_szDlgDrvBlockMode:	db	"Enable Block Mode Transfers?",NULL
+g_szDlgDrvWriteCache:	db	"Select hard drive internal write cache settings.",NULL
 g_szDlgDrvUserCHS:		db	"Specify (P-)CHS parameters manually?",NULL
 g_szDlgDrvCyls:			db	"Enter number of P-CHS cylinders (1...16383).",NULL
 g_szDlgDrvHeads:		db	"Enter number of P-CHS heads (1...16).",NULL
 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 (16...256).",NULL
 
 g_szNfoDrvBlockMode:	db	"Transfer multiple sectors per data request.",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
 g_szNfoDrvCyls:			db	"Number of user specified P-CHS cylinders.",NULL
 g_szNfoDrvHeads:		db	"Number of user specified P-CHS heads.",NULL
 g_szNfoDrvSect:			db	"Number of user specified P-CHS sectors per track.",NULL
+g_szNfoDrvUserLBA:		db	"Limit drive capacity to X million sectors.",NULL
+g_szNfoDrvLbaSectors:	db	"Millions of sectors (1024*1024). 1M sectors = 512 MiB.",NULL
 
 g_szHelpDrvBlockMode:	incbin	"Drive_BlockMode.txt"
 						db	NULL
+g_szHelpDrvWriteCache:	incbin	"Drive_WriteCache.txt"
+						db	NULL
 g_szHelpDrvUserCHS:		incbin	"Drive_UserCHS.txt"
 						db	NULL
+g_szHelpDrvUserLBA:		incbin	"Drive_UserLBA.txt"
+						db	NULL
+						
+g_szMultichoiseWrCache:	db	"Drive Default",LF
+						db	"Disable Write Cache",LF
+						db	"Enable Write Cache",NULL
+
+g_szValueDrvWrCaDis:	db	"Disabled",NULL
+g_szValueDrvWrCaEn:		db	"Enabled",NULL
 
 
