Index: /trunk/Assembly_Library/Src/Menu/Dialog/Dialog.asm
===================================================================
--- /trunk/Assembly_Library/Src/Menu/Dialog/Dialog.asm	(revision 624)
+++ /trunk/Assembly_Library/Src/Menu/Dialog/Dialog.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -95,4 +95,18 @@
 
 ;--------------------------------------------------------------------
+; Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithItemZero
+;	Parameters:
+;		DS:SI:		Ptr to MENUINIT struct to initialize
+;		SS:BP:		Ptr to DIALOG
+;	Returns:
+;		DS:SI:		Ptr to initialized MENUINIT struct
+;		CF:			Set since event processed
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithItemZero:
+	xor		ax, ax
+	; Fall to Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
+
+;--------------------------------------------------------------------
 ; Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
 ;	Parameters:
@@ -104,5 +118,4 @@
 ;		CF:			Set since event processed
 ;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
 Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX:
 	les		di, [bp+DIALOG.fpDialogIO]
Index: /trunk/Assembly_Library/Src/Menu/Dialog/DialogDrive.asm
===================================================================
--- /trunk/Assembly_Library/Src/Menu/Dialog/DialogDrive.asm	(revision 624)
+++ /trunk/Assembly_Library/Src/Menu/Dialog/DialogDrive.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -56,6 +56,5 @@
 ALIGN JUMP_ALIGN
 .InitializeMenuinitFromDSSI:
-	xor		ax, ax
-	call	Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
+	call	Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithItemZero
 	call	Drive_GetFlagsForAvailableDrivesToDXAX
 	mov		[bp+MENU.dwUserData], ax
Index: /trunk/Assembly_Library/Src/Menu/Dialog/DialogFile.asm
===================================================================
--- /trunk/Assembly_Library/Src/Menu/Dialog/DialogFile.asm	(revision 624)
+++ /trunk/Assembly_Library/Src/Menu/Dialog/DialogFile.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -121,6 +121,8 @@
 .rgszInfoStringLookup:
 	dw		g_szChangeDrive
+%ifndef EXCLUDE_FROM_XTIDECFG
 	dw		g_szSelectDirectory
 	dw		g_szCreateNew
+%endif
 
 .rgfnEventHandlers:
@@ -156,8 +158,7 @@
 	call	LoadItemStringBufferToESDI
 	call	SortDirectoryContentsStringFromESDIwithCountInCX
-	call	RemoveLastLFandTerminateESDIwithNull
-
+	xor		ax, ax
+	mov		[es:di-1], al							; Terminate with NULL
 	call	Registers_CopySSBPtoDSSI
-	xor		ax, ax
 	call	Dialog_EventInitializeMenuinitFromDSSIwithHighlightedItemInAX
 	call	GetInfoLinesToCXandDialogFlagsToAX
@@ -436,21 +437,4 @@
 
 ;--------------------------------------------------------------------
-; RemoveLastLFandTerminateESDIwithNull
-;	Parameters:
-;		ES:DI:	Ptr to end of buffer to terminate
-;	Returns:
-;		Nothing
-;	Corrupts registers:
-;		AX
-;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
-RemoveLastLFandTerminateESDIwithNull:
-	dec		di
-	xor		ax, ax
-	stosb
-	ret
-
-
-;--------------------------------------------------------------------
 ; GetInfoLinesToCXandDialogFlagsToAX
 ;	Parameters:
@@ -586,8 +570,10 @@
 HandleFunctionKeyFromAH:
 	call	GetDialogFlagsToAL
+%ifndef EXCLUDE_FROM_XTIDECFG
 	cmp		ah, KEY_FILEDIALOG_NEW_FILE_OR_DIR
 	je		SHORT HandleFunctionKeyForCreatingNewFileOrDirectory
 	cmp		ah, KEY_FILEDIALOG_SELECT_DIRECTORY
 	je		SHORT HandleFunctionKeyForSelectingDirectoryInsteadOfFile
+%endif
 	cmp		ah, KEY_FILEDIALOG_CHANGE_DRIVE
 	je		SHORT HandleFunctionKeyForDriveChange
@@ -607,4 +593,5 @@
 ;		All, except BP
 ;--------------------------------------------------------------------
+%ifndef EXCLUDE_FROM_XTIDECFG
 ALIGN JUMP_ALIGN
 HandleFunctionKeyForCreatingNewFileOrDirectory:
@@ -649,4 +636,5 @@
 	jz		SHORT ReturnWithoutHandlingKeystroke
 	; Fall to CloseFileDialogAfterSuccessfulSelection
+%endif ; EXCLUDE_FROM_XTIDECFG
 
 ;--------------------------------------------------------------------
Index: /trunk/Assembly_Library/Src/Menu/Dialog/DialogProgress.asm
===================================================================
--- /trunk/Assembly_Library/Src/Menu/Dialog/DialogProgress.asm	(revision 624)
+++ /trunk/Assembly_Library/Src/Menu/Dialog/DialogProgress.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -89,19 +89,4 @@
 ProgressEventHandler:
 	jmp		[cs:bx+.rgfnEventHandlers]
-
-
-ALIGN JUMP_ALIGN
-.InitializeMenuinitFromDSSI:
-	mov		ax, NO_ITEM_HIGHLIGHTED
-	call	Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
-	lds		si, [bp+DIALOG.fpDialogIO]
-	call	TimerTicks_ReadFromBdaToAX
-	mov		[si+PROGRESS_DIALOG_IO.wStartTimeTicks], ax
-
-	; 0 = 65536 but it needs to be adjusted to 65535 to prevent division by zero
-	cmp		WORD [si+PROGRESS_DIALOG_IO.wMaxProgressValue], BYTE 0
-	jne		SHORT CalculateProgressNeededBeforeUpdatingCharacter
-	dec		WORD [si+PROGRESS_DIALOG_IO.wMaxProgressValue]
-	jmp		SHORT CalculateProgressNeededBeforeUpdatingCharacter
 
 
@@ -153,4 +138,18 @@
 
 
+ALIGN JUMP_ALIGN
+.InitializeMenuinitFromDSSI:
+	mov		ax, NO_ITEM_HIGHLIGHTED
+	call	Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
+	lds		si, [bp+DIALOG.fpDialogIO]
+	call	TimerTicks_ReadFromBdaToAX
+	mov		[si+PROGRESS_DIALOG_IO.wStartTimeTicks], ax
+
+	; 0 = 65536 but it needs to be adjusted to 65535 to prevent division by zero
+	cmp		WORD [si+PROGRESS_DIALOG_IO.wMaxProgressValue], BYTE 0
+	jne		SHORT CalculateProgressNeededBeforeUpdatingCharacter
+	dec		WORD [si+PROGRESS_DIALOG_IO.wMaxProgressValue]
+	; Fall to CalculateProgressNeededBeforeUpdatingCharacter
+
 ;--------------------------------------------------------------------
 ; CalculateProgressNeededBeforeUpdatingCharacter
@@ -163,5 +162,4 @@
 ;		AX, BX, DX, SI, DS
 ;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
 CalculateProgressNeededBeforeUpdatingCharacter:
 	call	MenuLocation_GetMaxTextLineLengthToAX
@@ -216,5 +214,4 @@
 ALIGN JUMP_ALIGN
 .RepeatProgressCharacterCXtimesFromAL:
-	jcxz	NothingToRepeat
 	JMP_DISPLAY_LIBRARY PrintRepeatedCharacterFromALwithCountInCX
 
@@ -233,5 +230,4 @@
 	mov		bx, [si+PROGRESS_DIALOG_IO.wMaxProgressValue]
 	sub		bx, [si+PROGRESS_DIALOG_IO.wMinProgressValue]
-NothingToRepeat:
 	ret
 
Index: /trunk/Assembly_Library/Src/Menu/Dialog/DialogString.asm
===================================================================
--- /trunk/Assembly_Library/Src/Menu/Dialog/DialogString.asm	(revision 624)
+++ /trunk/Assembly_Library/Src/Menu/Dialog/DialogString.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -55,10 +55,4 @@
 
 ALIGN JUMP_ALIGN
-.InitializeMenuinitFromDSSI:
-	xor		ax, ax
-	jmp		Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
-
-
-ALIGN JUMP_ALIGN
 .IdleProcessing:
 	xor		cx, cx						; Item 0 is used as input line
@@ -73,5 +67,5 @@
 .rgfnEventHandlers:
 istruc MENUEVENT
-	at	MENUEVENT.InitializeMenuinitFromDSSI,	dw	.InitializeMenuinitFromDSSI
+	at	MENUEVENT.InitializeMenuinitFromDSSI,	dw	Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithItemZero
 	at	MENUEVENT.ExitMenu,						dw	Dialog_EventExitMenu
 	at	MENUEVENT.IdleProcessing,				dw	.IdleProcessing
Index: /trunk/Assembly_Library/Src/Menu/Dialog/DialogWord.asm
===================================================================
--- /trunk/Assembly_Library/Src/Menu/Dialog/DialogWord.asm	(revision 624)
+++ /trunk/Assembly_Library/Src/Menu/Dialog/DialogWord.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -56,10 +56,4 @@
 
 ALIGN JUMP_ALIGN
-.InitializeMenuinitFromDSSI:
-	xor		ax, ax
-	jmp		Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithHighlightedItemInAX
-
-
-ALIGN JUMP_ALIGN
 .IdleProcessing:
 	xor		cx, cx						; Item 0 is used as input line
@@ -74,5 +68,5 @@
 .rgfnEventHandlers:
 istruc MENUEVENT
-	at	MENUEVENT.InitializeMenuinitFromDSSI,	dw	.InitializeMenuinitFromDSSI
+	at	MENUEVENT.InitializeMenuinitFromDSSI,	dw	Dialog_EventInitializeMenuinitFromDSSIforSingleItemWithItemZero
 	at	MENUEVENT.ExitMenu,						dw	Dialog_EventExitMenu
 	at	MENUEVENT.IdleProcessing,				dw	.IdleProcessing
Index: /trunk/Assembly_Library/Src/Menu/Dialog/ItemLineSplitter.asm
===================================================================
--- /trunk/Assembly_Library/Src/Menu/Dialog/ItemLineSplitter.asm	(revision 624)
+++ /trunk/Assembly_Library/Src/Menu/Dialog/ItemLineSplitter.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -51,5 +51,6 @@
 	call	StringProcess_DSSIwithFunctionInDX
 
-	lea		ax, [bx+1]
+	xchg	bx, ax
+	inc		ax
 	eLEAVE_STRUCT	ITEM_LINE_SPLITTER_size
 	pop		di
@@ -119,19 +120,10 @@
 ProcessCharacterFromStringToSplit:
 	cmp		al, ' '
-	ja		SHORT .CheckLineLength
-	mov		di, si				; DS:DI now points start of new word
-	je		SHORT .CheckLineLength
+	jbe		SHORT .ControlCharacterOrSpace
 
-	cmp		al, LF
-	je		SHORT .ChangeToNextLine
-	cmp		al, CR
-	jne		SHORT .IgnoreUnsupportedControlCharacter
-	xor		cx, cx				; Carriage return so reset line length so far
-
-ALIGN JUMP_ALIGN
 .CheckLineLength:
 	cmp		[bp+ITEM_LINE_SPLITTER.wMaxTextLineLength], cx
 	jb		SHORT .ChangeToNextLine
-	ret		; With CF cleared
+	ret								; With CF cleared
 
 ALIGN JUMP_ALIGN
@@ -140,12 +132,20 @@
 	je		SHORT .WantedLineFound
 
-	inc		bx					; Increment line
-	xor		cx, cx				; Zero character counter (and clear CF)
-	mov		si, di				; Start from complete word
+	inc		bx						; Increment line
+	mov		si, di					; Start from complete word
 	mov		[bp+ITEM_LINE_SPLITTER.wStartOfLine], di
+.CarriageReturn:
+	xor		cx, cx					; Zero character counter (and clear CF)
 	ret
 
 ALIGN JUMP_ALIGN
-.IgnoreUnsupportedControlCharacter:
+.ControlCharacterOrSpace:
+	mov		di, si					; DS:DI now points start of new word
+	je		SHORT .CheckLineLength	; Jump if space
+	cmp		al, LF
+	je		SHORT .ChangeToNextLine
+	cmp		al, CR
+	je		SHORT .CarriageReturn	; Reset line length
+	; Unsupported control character - ignore it
 	dec		cx
 	clc
Index: /trunk/Assembly_Library/Src/Menu/Dialog/StringsForDialogs.asm
===================================================================
--- /trunk/Assembly_Library/Src/Menu/Dialog/StringsForDialogs.asm	(revision 624)
+++ /trunk/Assembly_Library/Src/Menu/Dialog/StringsForDialogs.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -19,37 +19,32 @@
 
 ; Strings for Progress Dialog
-g_szTimeElapsed:		db	"Time elapsed  :",NULL
-g_szTimeLeft:			db	"Estimated left:",NULL
-g_szTimeFormat:			db	" %2-u min %2-u sec",LF,CR,NULL
+g_szTimeElapsed:				db	"Time elapsed  :",NULL
+g_szTimeLeft:					db	"Estimated left:",NULL
+g_szTimeFormat:					db	" %2-u min %2-u sec",LF,CR,NULL
 
 ; Strings for Drive Dialog
-g_szDriveFormat:		db	"%c:",NULL
+g_szDriveFormat:				db	"%c:",NULL
 
 ; Strings for File Dialog
-g_szChangeDrive:		db	"F2 Change Drive",LF,CR,NULL
-g_szSelectDirectory:	db	"F3 Select Current Directory",LF,CR,NULL
-g_szCreateNew:			db	"F4 Input new File or Directory",NULL
+g_szChangeDrive:				db	"F2 Change Drive",NULL
+%ifndef EXCLUDE_FROM_XTIDECFG
+g_szSelectDirectory:			db	"F3 Select Current Directory",NULL
+g_szCreateNew:					db	"F4 Input new File or Directory",NULL
+%endif
 
-g_szSelectNewDrive:
-	db		"Select new drive.",NULL
-g_szLoadingPleaseWait:
-	db		"Loading. Please wait...",NULL
+g_szSelectNewDrive:				db	"Select new drive.",NULL
+g_szLoadingPleaseWait:			db	"Loading. Please wait...",NULL
 
-g_szEnterNewFileOrDirectory:
-	db		"Enter name for new file or directory.",NULL
+%ifndef EXCLUDE_FROM_XTIDECFG
+g_szEnterNewFileOrDirectory:	db	"Enter name for new file or directory.",NULL
+%endif
 
 FILE_STRING_LENGTH		EQU		(24+1)	; +1 = LF in directory contents string
-g_szFileFormat:
-	db		"%16S%4-u %c%cB",LF,NULL
-g_szDirectoryFormat:
-	db		"%16S%s-DIR",LF,NULL
-g_szSub:
-	db		ANGLE_QUOTE_RIGHT,"SUB",NULL
-g_szUp:
-	db		ANGLE_QUOTE_LEFT," UP",NULL
+g_szFileFormat:					db	"%16S%4-u %c%cB",LF,NULL
+g_szDirectoryFormat:			db	"%16S%s-DIR",LF,NULL
+g_szSub:						db	ANGLE_QUOTE_RIGHT,"SUB",NULL
+g_szUp:							db	ANGLE_QUOTE_LEFT," UP",NULL
 
 g_szSingleItem:			; Used by Dialog.asm for single item line
-g_szUpdir:
-	db		".."
-g_szNull:
-	db		NULL
+g_szUpdir:						db	".."
+g_szNull:						db	NULL
Index: /trunk/Tools/PostCommitHook.cmd
===================================================================
--- /trunk/Tools/PostCommitHook.cmd	(revision 624)
+++ /trunk/Tools/PostCommitHook.cmd	(revision 625)
@@ -1,9 +1,20 @@
 @echo off
-if exist ..\CommitInProgress goto NoError1
+:TryAgain
+if exist CommitInProgress goto NoError
+if %6""=="" goto NotCalledFromTSVN
+if %6=="%cd%" goto FileNotFound
+cd %6
+goto TryAgain
+:NotCalledFromTSVN
+if "%PreviousCD%"=="%cd%" goto FileNotFound
+set PreviousCD=%cd%
+cd..
+goto TryAgain
+:FileNotFound
 echo PostCommitHook was called but no CommitInProgress file could be found!>con
 echo Something is very wrong as this should not happen!>con
 pause<con>con
 exit 1
-:NoError1
-del ..\CommitInProgress
+:NoError
+del CommitInProgress
 exit 0
Index: /trunk/XTIDE_Universal_BIOS/Inc/ModuleDependency.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Inc/ModuleDependency.inc	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Inc/ModuleDependency.inc	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -17,4 +17,10 @@
 ; Visit http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 ;
+
+%ifdef USE_PS2
+	%ifndef USE_AT
+		%define USE_AT
+	%endif
+%endif
 
 ; Allow RELOCATE_INT13H_STACK only for AT builds
Index: /trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -20,9 +20,4 @@
 %ifndef RAMVARS_INC
 %define RAMVARS_INC
-
-; Segment when RAMVARS is stored to top of interrupt vectors.
-%ifndef USE_AT
-	LITE_MODE_RAMVARS_SEGMENT	EQU		30h
-%endif
 
 
Index: /trunk/XTIDE_Universal_BIOS/Inc/Revision.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Inc/Revision.inc	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Inc/Revision.inc	(revision 625)
@@ -1,1 +1,1 @@
-624 
+625 
Index: /trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc	(revision 625)
@@ -5,5 +5,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -133,6 +133,9 @@
 XTCF_DEVICE_OFFSET						EQU	FIRST_XTCF_DEVICE						; Used for XT-CF device <--> mode conversion
 
+; Segment when RAMVARS is stored to top of interrupt vectors.
+LITE_MODE_RAMVARS_SEGMENT				EQU	30h
 
 ; ROM Variables. Written to the ROM image before flashing.
+; The ROMVARS version in Version.inc must be incremented whenever this struc changes.
 struc ROMVARS
 	.wRomSign			resb	2	; ROM Signature (AA55h)
@@ -141,11 +144,14 @@
 
 	.rgbSign			resb	6	; Signature for XTIDE Configurator Program (must be even length)
-	.szTitle			resb	31	; BIOS title string
-	.szVersion			resb	19	; BIOS version string (supports up to r9999)
-
+	.szTitle			resb	32	; BIOS title string
+	.szVersion			resb	18	; BIOS version string (supports up to r999)
+
+	.pColorTheme		resb	2	; Ptr to the color attribute struc used by the boot menu and hotkey bar
 	.wFlags				resb	2	; Word for ROM flags
+	; Note! Any additional ROMVARS must be added below if they are supposed to be copied
+	; over when doing "Load old settings from EEPROM" to a new BIOS loaded from file.
+	.wRamVars			resb	2	; Segment address for RamVars
 	.wDisplayMode		resb	2	; Display mode for boot menu
 	.wBootTimeout		resb	2	; Boot Menu selection timeout in system timer ticks
-	.pColorTheme		resb	2	; Ptr to the color attribute struc used by the boot menu and hotkey bar
 	.bIdeCnt			resb	1	; Number of available IDE controllers
 	.bBootDrv			resb	1	; Default drive to boot from
Index: /trunk/XTIDE_Universal_BIOS/Inc/Version.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Inc/Version.inc	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Inc/Version.inc	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -19,4 +19,7 @@
 
 ; Flash signature revisions:
+; XUB210	Moved pColorTheme so it's not copied when loading old settings from EEPROM.
+;			Added wRamVars to allow use of UMBs for storing variables in Full operating mode.
+;			Increased the length of szTitle and decreased the length of szVersion for USE_PS2
 ; XUB209	Shortened the BIOS version string (ROMVARS.szVersion) and WORD aligned the IDEVARS structures
 ; XUB208	Added option to skip slave drive detection
@@ -32,5 +35,7 @@
 
 %define TITLE_STRING_START		"-=XTIDE Universal BIOS "
-%ifdef USE_AT
+%ifdef USE_PS2
+	%define TITLE_STRING_END	"(PS/2)=-"
+%elifdef USE_AT
 	%ifdef USE_386
 		%define TITLE_STRING_END	"(386)=-"
@@ -51,5 +56,5 @@
 ; on the same line, either before or after. In fact, do not even put a preceding label on the same line!
 %define BUILD_DATE_STRING		"(",__DATE__,")"
-%define FLASH_SIGNATURE			"XUB209"	; Do not terminate with NULL
+%define FLASH_SIGNATURE			"XUB210"	; Also known as the ROMVARS version. Do not terminate with NULL.
 
 
Index: /trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeCommand.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -303,5 +303,5 @@
 ;--------------------------------------------------------------------
 ALIGN JUMP_ALIGN
-IdeCommand_ReadLBAlowRegisterToAL:
+IdeCommand_ReadLBAlowRegisterToAL:	; Unused entrypoint OK
 	; HOB bit (defined in 48-bit address feature set) should be zero by default
 	; so we get the correct value for CHS, LBA28 and LBA48 drives and commands
Index: /trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Src/Device/IDE/IdeTransfer.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -50,4 +50,12 @@
 ALIGN JUMP_ALIGN
 IdeTransfer_StartWithCommandInAL:
+%ifdef USE_PS2
+	; Turn on the software controlled HDD LED on IBM PS/2 machines
+	xchg	bx, ax	; Save AX
+	in		al, 92h	; Read System Control Port A
+	or		al, 80h	; Set bit 7 to turn on LED (bit 6 would also work)
+	out		92h, al	; Write it back
+	xchg	bx, ax	; Restore AX
+%endif
 	; Are we reading or writing?
 	test	al, 16	; Bit 4 is cleared on all the read commands but set on 3 of the 4 write commands
@@ -124,4 +132,10 @@
 	; All sectors successfully transferred
 	add		cx, [bp+PIOVARS.bSectorsDone]		; Never sets CF
+%ifdef USE_PS2
+	; Turn off the software controlled HDD LED on IBM PS/2 machines
+	in		al, 92h	; Read System Control Port A
+	and		al, 3Fh	; Clear bits 7 and 6 to turn off LED
+	out		92h, al	; Write it back
+%endif
 	ret
 
@@ -133,4 +147,11 @@
 	mov		cl, [bp+PIOVARS.bSectorsDone]
 	mov		ch, 0								; Preserve CF
+%endif
+%ifdef USE_PS2
+	; Turn off the software controlled HDD LED on IBM PS/2 machines
+	in		al, 92h	; Read System Control Port A
+	and		al, 3Fh	; Clear bits 7 and 6 to turn off LED (Clears CF)
+	out		92h, al	; Write it back
+	stc				; Restore the CF
 %endif
 	ret
Index: /trunk/XTIDE_Universal_BIOS/Src/Initialization/AtaID.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/Initialization/AtaID.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Src/Initialization/AtaID.asm	(revision 625)
@@ -5,5 +5,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -45,5 +45,5 @@
 	pop		es
 %endif
-AtaID_FixIllegalValuesFromESSI:
+AtaID_FixIllegalValuesFromESSI:	; Unused entrypoint OK
 	jc		SHORT .Return	; Nothing to fix since failed to read ATA Info
 
Index: /trunk/XTIDE_Universal_BIOS/Src/Main.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/Main.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Src/Main.asm	(revision 625)
@@ -15,5 +15,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -64,14 +64,17 @@
 
 ; ROM variables (must start at offset 0)
-CNT_ROM_BLOCKS		EQU		BIOS_SIZE / 512		; number of 512B blocks, 16 = 8kB BIOS
+CNT_ROM_BLOCKS		EQU		BIOS_SIZE / 512					; number of 512B blocks, 16 = 8kB BIOS
 istruc ROMVARS
-	at	ROMVARS.wRomSign,	dw	0AA55h			; PC ROM signature
-	at	ROMVARS.bRomSize,	db	CNT_ROM_BLOCKS	; ROM size in 512B blocks
-	at	ROMVARS.rgbJump,	jmp	Initialize_FromMainBiosRomSearch
-	at	ROMVARS.rgbSign,	db	FLASH_SIGNATURE
-	at	ROMVARS.szTitle,	db	TITLE_STRING
-	at	ROMVARS.szVersion,	db	"r"
-							db	ROM_VERSION_STRING
-							db	BUILD_DATE_STRING,NULL
+	at	ROMVARS.wRomSign,		dw	0AA55h					; PC ROM signature
+	at	ROMVARS.bRomSize,		db	CNT_ROM_BLOCKS			; ROM size in 512B blocks
+	at	ROMVARS.rgbJump,		jmp	Initialize_FromMainBiosRomSearch
+	at	ROMVARS.rgbSign,		db	FLASH_SIGNATURE
+	at	ROMVARS.szTitle,		db	TITLE_STRING
+	at	ROMVARS.szVersion,		db	"r"
+								db	ROM_VERSION_STRING
+								db	BUILD_DATE_STRING,NULL
+%ifdef MODULE_BOOT_MENU
+	at	ROMVARS.pColorTheme,	dw	ColorTheme				; Offset to the ATTRIBUTE_CHARS struc that holds the color theme
+%endif
 
 ;---------------------------;
@@ -84,10 +87,14 @@
 	at	ROMVARS.wFlags,			dw	FLG_ROMVARS_FULLMODE | MASK_ROMVARS_INCLUDED_MODULES
 %endif
+	at	ROMVARS.wRamVars,		dw	NULL					; Use 'stolen' top of conventional memory by default in Full mode
 	at	ROMVARS.wDisplayMode,	dw	DEFAULT_TEXT_MODE
 %ifdef MODULE_BOOT_MENU
 	at	ROMVARS.wBootTimeout,	dw	BOOT_MENU_DEFAULT_TIMEOUT
-	at	ROMVARS.pColorTheme,	dw	ColorTheme				; Offset to the ATTRIBUTE_CHARS struc that holds the color theme
-%endif
+%endif
+%ifdef USE_PS2
+	at	ROMVARS.bIdeCnt,		db	4						; Number of supported controllers with two McIDE adapters
+%else
 	at	ROMVARS.bIdeCnt,		db	2						; Number of supported controllers
+%endif
 	at	ROMVARS.bBootDrv,		db	80h						; Boot Menu default drive
 	at	ROMVARS.bMinFddCnt, 	db	0						; Do not force minimum number of floppy drives
@@ -99,5 +106,9 @@
 	at	ROMVARS.ideVars0+IDEVARS.bDevice,			db	DEVICE_16BIT_ATA
 %ifdef MODULE_IRQ
+%ifdef USE_PS2
+	at	ROMVARS.ideVars0+IDEVARS.bIRQ,				db	0
+%else
 	at	ROMVARS.ideVars0+IDEVARS.bIRQ,				db	14
+%endif
 %endif
 	at	ROMVARS.ideVars0+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags,	dw	DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
@@ -108,5 +119,9 @@
 	at	ROMVARS.ideVars1+IDEVARS.bDevice,			db	DEVICE_16BIT_ATA
 %ifdef MODULE_IRQ
+%ifdef USE_PS2
+	at	ROMVARS.ideVars1+IDEVARS.bIRQ,				db	0
+%else
 	at	ROMVARS.ideVars1+IDEVARS.bIRQ,				db	15
+%endif
 %endif
 	at	ROMVARS.ideVars1+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags,	dw	DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
@@ -117,5 +132,9 @@
 	at	ROMVARS.ideVars2+IDEVARS.bDevice,			db	DEVICE_16BIT_ATA
 %ifdef MODULE_IRQ
+%ifdef USE_PS2
+	at	ROMVARS.ideVars2+IDEVARS.bIRQ,				db	0
+%else
 	at	ROMVARS.ideVars2+IDEVARS.bIRQ,				db	0	; Should be 11 on the GSI Inc. Model 2C
+%endif
 %endif
 	at	ROMVARS.ideVars2+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags,	dw	DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
@@ -126,5 +145,9 @@
 	at	ROMVARS.ideVars3+IDEVARS.bDevice,			db	DEVICE_16BIT_ATA
 %ifdef MODULE_IRQ
+%ifdef USE_PS2
+	at	ROMVARS.ideVars3+IDEVARS.bIRQ,				db	0
+%else
 	at	ROMVARS.ideVars3+IDEVARS.bIRQ,				db	0	; Should be 10 on the GSI Inc. Model 2C
+%endif
 %endif
 	at	ROMVARS.ideVars3+IDEVARS.drvParamsMaster+DRVPARAMS.wFlags,	dw	DISABLE_WRITE_CACHE | FLG_DRVPARAMS_BLOCKMODE | (TRANSLATEMODE_AUTO<<TRANSLATEMODE_FIELD_POSITION)
@@ -139,8 +162,8 @@
 ;-----------------------------------;
 	at	ROMVARS.wFlags,			dw	MASK_ROMVARS_INCLUDED_MODULES
+	at	ROMVARS.wRamVars,		dw	LITE_MODE_RAMVARS_SEGMENT
 	at	ROMVARS.wDisplayMode,	dw	DEFAULT_TEXT_MODE
 %ifdef MODULE_BOOT_MENU
 	at	ROMVARS.wBootTimeout,	dw	BOOT_MENU_DEFAULT_TIMEOUT
-	at	ROMVARS.pColorTheme,	dw	ColorTheme				; Offset to the ATTRIBUTE_CHARS struc that holds the color theme
 %endif
 	at	ROMVARS.bIdeCnt,		db	1
Index: /trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/RamVars.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/RamVars.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/RamVars.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -36,11 +36,9 @@
 	push	es
 
-%ifndef USE_AT
-	mov		ax, LITE_MODE_RAMVARS_SEGMENT
-	test	BYTE [cs:ROMVARS.wFlags], FLG_ROMVARS_FULLMODE
-	jz		SHORT .InitializeRamvars	; No need to steal RAM
-%endif
+	mov		ax, [cs:ROMVARS.wRamVars]
+	test	ax, ax						; UMB segment or LITE_MODE_RAMVARS_SEGMENT?
+	jnz		SHORT .InitializeRamvars	; No need to steal RAM
 
-	LOAD_BDA_SEGMENT_TO	ds, ax, !		; Zero AX
+	mov		ds, ax
 	mov		al, [cs:ROMVARS.bStealSize]
 	sub		[BDA.wBaseMem], ax
@@ -67,8 +65,9 @@
 	ret
 
+
 ;--------------------------------------------------------------------
 ; Returns segment to RAMVARS.
-; RAMVARS might be located at the top of interrupt vectors (0030:0000h)
-; or at the top of system base RAM.
+; RAMVARS might be located at the top of interrupt vectors (0030:0000h),
+; at the top of system base RAM or in a user configured UMB.
 ;
 ; RamVars_GetSegmentToDS
@@ -82,21 +81,9 @@
 ALIGN JUMP_ALIGN
 RamVars_GetSegmentToDS:
+	mov		ds, [cs:ROMVARS.wRamVars]
+	mov		di, ds
+	test	di, di					; UMB segment or LITE_MODE_RAMVARS_SEGMENT?
+	jnz		SHORT .Return
 
-%ifndef USE_AT	; Always in Full Mode for AT builds
-	test	BYTE [cs:ROMVARS.wFlags], FLG_ROMVARS_FULLMODE
-	jnz		SHORT .GetStolenSegmentToDS
-	%ifndef USE_186
-		mov		di, LITE_MODE_RAMVARS_SEGMENT
-		mov		ds, di
-	%else
-		push	LITE_MODE_RAMVARS_SEGMENT
-		pop		ds
-	%endif
-	ret
-%endif
-
-ALIGN JUMP_ALIGN
-.GetStolenSegmentToDS:
-	LOAD_BDA_SEGMENT_TO	ds, di
 ;%ifdef USE_186
 ;	imul	di, [BDA.wBaseMem], 64	; 2 bytes less but slower, especially on 386/486 processors
@@ -111,4 +98,5 @@
 	cmp		WORD [RAMVARS.wSignature], RAMVARS_RAM_SIGNATURE
 	jne		SHORT .LoopStolenKBs	; Loop until sign found (always found eventually)
+.Return:
 	ret
 
Index: /trunk/XTIDE_Universal_BIOS/makefile
===================================================================
--- /trunk/XTIDE_Universal_BIOS/makefile	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS/makefile	(revision 625)
@@ -44,4 +44,5 @@
 # USE_386                     Use instructions supported by 386 and later (defines USE_286)        #
 # USE_AT                      Use features supported on AT and later systems (not available on XT) #
+# USE_PS2                     For use with IBM PS/2 machines only (defines USE_AT)                 #
 # USE_UNDOC_INTEL             Optimizations for Intel CPUs - do NOT use on NEC V20/V30/Sony CPUs   #
 # USE_NEC_V                   Optimizations for use with NEC V20/V30 CPUs only                     #
@@ -118,4 +119,5 @@
 DEFINES_AT = $(DEFINES_COMMON) USE_AT USE_286 MODULE_IRQ MODULE_COMPATIBLE_TABLES
 DEFINES_386 = $(DEFINES_AT) USE_386 MODULE_ADVANCED_ATA MODULE_WIN9X_CMOS_HACK
+DEFINES_PS2 = USE_PS2 USE_286 MODULE_STRINGS_COMPRESSED MODULE_HOTKEYS MODULE_BOOT_MENU MODULE_EBIOS MODULE_SERIAL MODULE_SERIAL_FLOPPY MODULE_IRQ MODULE_POWER_MANAGEMENT NO_ATAID_VALIDATION CLD_NEEDED
 
 DEFINES_XT_LARGE = $(DEFINES_XT) $(DEFINES_COMMON_LARGE)
@@ -123,4 +125,5 @@
 DEFINES_AT_LARGE = $(DEFINES_AT) $(DEFINES_COMMON_LARGE)
 DEFINES_386_LARGE = $(DEFINES_386) $(DEFINES_COMMON_LARGE)
+DEFINES_PS2_LARGE = $(DEFINES_PS2) MODULE_COMPATIBLE_TABLES
 
 DEFINES_XT_TINY = MODULE_STRINGS_COMPRESSED MODULE_8BIT_IDE NO_ATAID_VALIDATION NO_ATAID_CORRECTION CLD_NEEDED
@@ -144,10 +147,12 @@
 DEFS_XTPLUS = $(DEFINES_XTPLUS:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
 DEFS_AT = $(DEFINES_AT:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
+DEFS_386 = $(DEFINES_386:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
+DEFS_PS2 = $(DEFINES_PS2:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
 DEFS_XT_LARGE = $(DEFINES_XT_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
 DEFS_XTPLUS_LARGE = $(DEFINES_XTPLUS_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
 DEFS_AT_LARGE = $(DEFINES_AT_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
+DEFS_386_LARGE = $(DEFINES_386_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
+DEFS_PS2_LARGE = $(DEFINES_PS2_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
 DEFS_XT_TINY = $(DEFINES_XT_TINY:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_TINY)
-DEFS_386 = $(DEFINES_386:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_SMALL)
-DEFS_386_LARGE = $(DEFINES_386_LARGE:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_LARGE)
 DEFS_CUSTOM = $(DEFINES_CUSTOM:%=-D%) -DBIOS_SIZE=$(BIOS_SIZE_CUSTOM)
 
@@ -191,9 +196,25 @@
 	@echo All done!
 
-small: xt_tiny xt xtplus at 386
+small: xt_tiny xt xtplus at 386 ps2
 	@echo All small binaries built!
 
-large: xt_large xtplus_large at_large 386_large
+large: xt_large xtplus_large at_large 386_large ps2_large
 	@echo All large binaries built!
+
+ps2:
+	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_PS2) -l"$(TARGET)_ps2.lst" -o"$(TARGET)_ps2.bin"
+	@echo * Small PS/2 version "$(TARGET)_ps2.bin" built.
+
+ps2_large:
+	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_PS2_LARGE) -l"$(TARGET)_ps2l.lst" -o"$(TARGET)_ps2l.bin"
+	@echo * Large PS/2 version "$(TARGET)_ps2l.bin" built.
+
+386:
+	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386) -l"$(TARGET)_386.lst" -o"$(TARGET)_386.bin"
+	@echo * Small 386 version "$(TARGET)_386.bin" built.
+
+386_large:
+	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -l"$(TARGET)_386l.lst" -o"$(TARGET)_386l.bin"
+	@echo * Large 386 version "$(TARGET)_386l.bin" built.
 
 at:
@@ -224,12 +245,4 @@
 	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_XT_TINY) -l"$(TARGET)_tiny.lst" -o"$(TARGET)_tiny.bin"
 	@echo * Tiny XT version "$(TARGET)_tiny.bin" built.
-
-386:
-	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386) -l"$(TARGET)_386.lst" -o"$(TARGET)_386.bin"
-	@echo * Small 386 version "$(TARGET)_386.bin" built.
-
-386_large:
-	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -l"$(TARGET)_386l.lst" -o"$(TARGET)_386l.bin"
-	@echo * Large 386 version "$(TARGET)_386l.bin" built.
 
 custom:
@@ -251,9 +264,11 @@
 	@perl ..\Tools\checksum.pl $(TARGET)_xtp.bin $(BIOS_SIZE_SMALL)
 	@perl ..\Tools\checksum.pl $(TARGET)_at.bin $(BIOS_SIZE_SMALL)
+	@perl ..\Tools\checksum.pl $(TARGET)_386.bin $(BIOS_SIZE_SMALL)
+	@perl ..\Tools\checksum.pl $(TARGET)_ps2.bin $(BIOS_SIZE_SMALL)
 	@perl ..\Tools\checksum.pl $(TARGET)_xtl.bin $(BIOS_SIZE_LARGE)
 	@perl ..\Tools\checksum.pl $(TARGET)_xtpl.bin $(BIOS_SIZE_LARGE)
 	@perl ..\Tools\checksum.pl $(TARGET)_atl.bin $(BIOS_SIZE_LARGE)
-	@perl ..\Tools\checksum.pl $(TARGET)_386.bin $(BIOS_SIZE_SMALL)
 	@perl ..\Tools\checksum.pl $(TARGET)_386l.bin $(BIOS_SIZE_LARGE)
+	@perl ..\Tools\checksum.pl $(TARGET)_ps2l.bin $(BIOS_SIZE_LARGE)
 
 unused:
@@ -294,3 +309,11 @@
 	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_386_LARGE) -o"$(TARGET)_unused_386l.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
 	@perl ..\Tools\unused.pl $(TARGET)_unused_386l.lst $(TARGET)_unused_386l.asm
-
+	@echo "PS/2 Small"
+	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_PS2) -o"$(TARGET)_unused_ps2.asm" -l"$(TARGET)_unused_ps2.lst"
+	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_PS2) -o"$(TARGET)_unused_ps2.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
+	@perl ..\Tools\unused.pl $(TARGET)_unused_ps2.lst $(TARGET)_unused_ps2.asm
+	@echo "PS/2 Large"
+	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_PS2_LARGE) -o"$(TARGET)_unused_ps2l.asm" -l"$(TARGET)_unused_ps2l.lst"
+	@$(AS) "$(SRC_ASM)" $(ASFLAGS) $(DEFS_PS2_LARGE) -o"$(TARGET)_unused_ps2l.asm" -E -DCHECK_FOR_UNUSED_ENTRYPOINTS
+	@perl ..\Tools\unused.pl $(TARGET)_unused_ps2l.lst $(TARGET)_unused_ps2l.asm
+
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menuitem.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -312,4 +312,6 @@
 ALIGN JUMP_ALIGN
 Menuitem_GetValueToAXfromMenuitemInDSSI:
+; Note! Changes to this procedure might require changes to
+; ReadRamVars in ConfigurationMenu.asm as well!
 	push	es
 	push	di
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuitemPrint.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuitemPrint.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/MenuitemPrint.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -264,4 +264,6 @@
 ALIGN JUMP_ALIGN
 MenuitemPrint_WriteHexValueStringToBufferInESDIfromItemInDSSI:
+; Note! Changes to this procedure might require changes to
+; ReadRamVars in ConfigurationMenu.asm as well!
 	mov		bx, di
 	mov		cx, MAX_VALUE_STRING_LENGTH
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/BootMenuSettingsMenu.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/BootMenuSettingsMenu.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/BootMenuSettingsMenu.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -185,6 +185,5 @@
 
 ColorThemeTable:
-; Note! If there's ever a need to remove a theme or change a theme or reorder the themes then the ROMVARS version must be incremented.
-; This is for backwards compatibility. Adding new themes (at the bottom) however should work with no change to the ROMVARS version.
+; Note! If there's ever a need to add, remove or change a theme or reorder the themes then the ROMVARS version must be incremented.
 	; Classic (default)
 	db	COLOR_ATTRIBUTE(COLOR_YELLOW, COLOR_BLUE)							; .cBordersAndBackground
@@ -396,5 +395,5 @@
 	loopne	.NextTheme
 	cld
-	mov		ax, cx
+	mov		ax, cx						; Return the color theme index in AX; zero (default theme) if a theme was not found
 	jne		SHORT .SkipCopy
 
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/ConfigurationMenu.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/ConfigurationMenu.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/ConfigurationMenu.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -26,5 +26,5 @@
 	at	MENUPAGE.fnEnter,			dw	ConfigurationMenu_EnterMenuOrModifyItemVisibility
 	at	MENUPAGE.fnBack,			dw	MainMenu_EnterMenuOrModifyItemVisibility
-	at	MENUPAGE.wMenuitems,		dw	11
+	at	MENUPAGE.wMenuitems,		dw	12
 iend
 
@@ -113,4 +113,22 @@
 	at	MENUITEM.itemValue + ITEM_VALUE.rgszValueToStringLookup,	dw	g_rgszValueToStringLookupForFlagBooleans
 	at	MENUITEM.itemValue + ITEM_VALUE.wValueBitmask,				dw	FLG_ROMVARS_FULLMODE
+	at	MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,				dw	WriteFullOperatingMode
+iend
+
+g_MenuitemConfigurationRamVars:
+istruc MENUITEM
+	at	MENUITEM.fnActivate,		dw	Menuitem_ActivateHexInputForMenuitemInDSSI
+	at	MENUITEM.fnFormatValue,		dw	MenuitemPrint_WriteHexValueStringToBufferInESDIfromItemInDSSI
+	at	MENUITEM.szName,			dw	g_szItemCfgRamVars
+	at	MENUITEM.szQuickInfo,		dw	g_szNfoCfgRamVars
+	at	MENUITEM.szHelp,			dw	g_szHelpCfgRamVars
+	at	MENUITEM.bFlags,			db	FLG_MENUITEM_MODIFY_MENU
+	at	MENUITEM.bType,				db	TYPE_MENUITEM_HEX
+	at	MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,		dw	ROMVARS.wRamVars
+	at	MENUITEM.itemValue + ITEM_VALUE.szDialogTitle,				dw	g_szDlgCfgRamVars
+	at	MENUITEM.itemValue + ITEM_VALUE.wMinValue,					dw	0A000h
+	at	MENUITEM.itemValue + ITEM_VALUE.wMaxValue,					dw	0FFFFh	; Disables use of UMB
+	at	MENUITEM.itemValue + ITEM_VALUE.fnValueReader,				dw	ReadRamVars
+	at	MENUITEM.itemValue + ITEM_VALUE.fnValueWriter,				dw	WriteRamVars
 iend
 
@@ -122,5 +140,5 @@
 	at	MENUITEM.szQuickInfo,		dw	g_szNfoCfgStealSize
 	at	MENUITEM.szHelp,			dw	g_szHelpCfgStealSize
-	at	MENUITEM.bFlags,			db	FLG_MENUITEM_VISIBLE | FLG_MENUITEM_BYTEVALUE
+	at	MENUITEM.bFlags,			db	FLG_MENUITEM_BYTEVALUE
 	at	MENUITEM.bType,				db	TYPE_MENUITEM_UNSIGNED
 	at	MENUITEM.itemValue + ITEM_VALUE.wRomvarsValueOffset,		dw	ROMVARS.bStealSize
@@ -199,4 +217,6 @@
 	call	.EnableIdeControllerMenuitemsBasedOnConfiguration
 	call	.EnableOrDisableOperatingModeSelection
+	call	Buffers_GetRomvarsFlagsToAX
+	call	.EnableOrDisableRamVarsSegmentSelection
 	call	.EnableOrDisableKiBtoStealFromRAM
 	call	.EnableOrDisableIdleTimeout
@@ -251,21 +271,21 @@
 	mov		bx, g_MenuitemConfigurationFullOperatingMode
 	call	Buffers_IsXTbuildLoaded
-	je		SHORT .EnableMenuitemFromCSBX
+	jz		SHORT .EnableMenuitemFromCSBX
 	jmp		SHORT .DisableMenuitemFromCSBX
 
 
 ;--------------------------------------------------------------------
-; .EnableOrDisableKiBtoStealFromRAM
-;	Parameters:
-;		SS:BP:	Menu handle
-;	Returns:
-;		Nothing
-;	Corrupts registers:
-;		AX, BX
-;--------------------------------------------------------------------
-ALIGN JUMP_ALIGN
-.EnableOrDisableKiBtoStealFromRAM:
-	call	Buffers_GetRomvarsFlagsToAX
-	mov		bx, g_MenuitemConfigurationKiBtoStealFromRAM
+; .EnableOrDisableRamVarsSegmentSelection
+;	Parameters:
+;		AX:		ROMVARS.wFlags
+;		SS:BP:	Menu handle
+;	Returns:
+;		Nothing
+;	Corrupts registers:
+;		BX
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+.EnableOrDisableRamVarsSegmentSelection:
+	mov		bx, g_MenuitemConfigurationRamVars
 	test	al, FLG_ROMVARS_FULLMODE
 	jz		SHORT .DisableMenuitemFromCSBX
@@ -274,15 +294,32 @@
 
 ;--------------------------------------------------------------------
+; .EnableOrDisableKiBtoStealFromRAM
+;	Parameters:
+;		SS:BP:	Menu handle
+;	Returns:
+;		Nothing
+;	Corrupts registers:
+;		BX
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+.EnableOrDisableKiBtoStealFromRAM:
+	mov		bx, g_MenuitemConfigurationKiBtoStealFromRAM
+	cmp		WORD [es:ROMVARS.wRamVars], 0
+	jne		SHORT .DisableMenuitemFromCSBX
+	jmp		SHORT .EnableMenuitemFromCSBX
+
+
+;--------------------------------------------------------------------
 ; .EnableOrDisableIdleTimeout
 ;	Parameters:
-;		SS:BP:	Menu handle
-;	Returns:
-;		Nothing
-;	Corrupts registers:
-;		AX, BX
+;		AX:		ROMVARS.wFlags
+;		SS:BP:	Menu handle
+;	Returns:
+;		Nothing
+;	Corrupts registers:
+;		BX
 ;--------------------------------------------------------------------
 ALIGN JUMP_ALIGN
 .EnableOrDisableIdleTimeout:
-	call	Buffers_GetRomvarsFlagsToAX
 	mov		bx, g_MenuitemConfigurationIdleTimeout
 	test	al, FLG_ROMVARS_MODULE_POWER_MANAGEMENT
@@ -308,4 +345,78 @@
 .DisableMenuitemFromCSBX:
 	jmp		DisableMenuitemFromCSBX
+
+
+;--------------------------------------------------------------------
+; WriteFullOperatingMode
+;	Parameters:
+;		AX:		Value that the MENUITEM system was interacting with
+;		ES:DI:	ROMVARS location where the value is to be stored
+;		DS:SI:	MENUITEM pointer
+;	Returns:
+;		AX:		Value to actually write to ROMVARS
+;	Corrupts registers:
+;		BX
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+WriteFullOperatingMode:
+	test	ax, ax								; FOM disabled?
+	mov		bx, LITE_MODE_RAMVARS_SEGMENT
+	jz		SHORT .WriteDefaultValueToRamVars	; Yes, Lite mode it is
+	xor		bx, bx								; No, use Conventional memory
+.WriteDefaultValueToRamVars:
+	mov		[es:ROMVARS.wRamVars], bx
+	ret
+
+
+;--------------------------------------------------------------------
+; ReadRamVars
+;	Parameters:
+;		AX:		Value read from the ROMVARS location
+;		ES:DI:	ROMVARS location where the value was just read from
+;		DS:SI:	MENUITEM pointer
+;	Returns:
+;		AX:		Value that the MENUITEM system will interact with and display
+;	Corrupts registers:
+;		Nothing
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+ReadRamVars:
+	test	ax, ax
+	jz		SHORT .PrintNoInsteadOfValue
+	cmp		ax, LITE_MODE_RAMVARS_SEGMENT
+	jne		SHORT WriteRamVars.Return
+
+.PrintNoInsteadOfValue:
+	push	si
+	mov		si, g_szNo
+	CALL_DISPLAY_LIBRARY PrintNullTerminatedStringFromCSSI
+	pop		si
+; This is a humongous hack. The menu system should not be (ab)used like this.
+	pop		ax		; Return from ReadRamVars to Menuitem_GetValueToAXfromMenuitemInDSSI
+	pop		bx		; Restore registers
+	pop		di
+	pop		es
+	pop		ax		; Return from Menuitem_GetValueToAXfromMenuitemInDSSI to MenuitemPrint_WriteHexValueStringToBufferInESDIfromItemInDSSI
+	jmp		MenuitemPrint_FinishPrintingUnsignedOrHexValue
+
+
+;--------------------------------------------------------------------
+; WriteRamVars
+;	Parameters:
+;		AX:		Value that the MENUITEM system was interacting with
+;		ES:DI:	ROMVARS location where the value is to be stored
+;		DS:SI:	MENUITEM pointer
+;	Returns:
+;		AX:		Value to actually write to ROMVARS
+;	Corrupts registers:
+;		Nothing
+;--------------------------------------------------------------------
+ALIGN JUMP_ALIGN
+WriteRamVars:
+	inc		ax		; FFFF -> 0000 = Disable UMB usage
+	jz		SHORT .Return
+	dec		ax
+.Return:
+	ret
 
 
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/IdeControllerMenu.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -229,5 +229,5 @@
 	dw	'B'
 	dw	'C'
-	dw	'x'				; must be last entry (see reader/write routines)
+	dw	'x'				; must be last entry (see reader/writer routines)
 g_rgszChoiceToStringLookupForCOM:
 	dw	g_szValueCfgCOM1
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MainMenu.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MainMenu.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Menupages/MainMenu.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -292,4 +292,26 @@
 	add		di, ROMVARS.pColorTheme
 	call	WriteColorTheme
+	; We did not copy over wFlags but we did copy over wRamVars so we
+	; must ensure that the Full Operating Mode setting matches wRamVars.
+	cmp		WORD [es:ROMVARS.wRamVars], LITE_MODE_RAMVARS_SEGMENT
+	jne		SHORT .SetFullOperatingMode		; All builds supports FOM
+	call	Buffers_IsXTbuildLoaded
+	jz		SHORT .ClearFullOperatingMode
+	; The loaded file is an AT build and we just copied the settings from
+	; an XT build in ROM configured for Lite mode. Resolve the conflict
+	; by clearing wRamVars thereby setting it to the default for FOM.
+	mov		WORD [es:ROMVARS.wRamVars], 0
+	; Tell the user there was a change in the configuration
+	mov		dx, g_szDlgFomEnabled
+	call	Dialogs_DisplayNotificationFromCSDX
+	; We don't need to set the FOM flag but fall through anyway
+.SetFullOperatingMode:
+	or		BYTE [es:ROMVARS.wFlags], FLG_ROMVARS_FULLMODE
+	jmp		SHORT .Done
+
+.ClearFullOperatingMode:
+	and		BYTE [es:ROMVARS.wFlags], ~FLG_ROMVARS_FULLMODE
+
+.Done:
 .FileNotLoaded:
 	jmp		MainMenu_EnterMenuOrModifyItemVisibility
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm	(revision 624)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm	(revision 625)
@@ -4,5 +4,5 @@
 ;
 ; XTIDE Universal BIOS and Associated Tools
-; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2013 by XTIDE Universal BIOS Team.
+; Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team.
 ;
 ; This program is free software; you can redistribute it and/or modify
@@ -98,10 +98,10 @@
 g_szNfoMainFlash:		db	"Flash loaded BIOS image to EEPROM.",NULL
 g_szNfoMainSave:		db	"Save BIOS changes back to original file from which it was loaded.",NULL
-g_szNfoMainLicense:		db	"XTIDE Universal BIOS and XTIDECFG Copyright (C) 2009-2010 by Tomi Tilli, 2011-2022 by XTIDE Universal BIOS Team."
+g_szNfoMainLicense:		db	"XTIDE Universal BIOS and XTIDECFG Copyright (C) 2009-2010 by Tomi Tilli, 2011-2023 by XTIDE Universal BIOS Team."
 						db	" Released under GNU GPL v2, with ABSOLUTELY NO WARRANTY. Press ENTER for more details...",NULL
 g_szNfoMainHomePage:	db	"Visit http://xtideuniversalbios.org (home page) and http://forum.vcfed.org (support)",NULL
 
 g_szHelpMainLicense:	db	"XTIDE Universal BIOS and XTIDECFG Configuration program are Copyright 2009-2010 by Tomi Tilli,"
-						db	" 2011-2022 by XTIDE Universal BIOS Team. Released under GNU GPL v2. This software comes with ABSOLUTELY NO WARRANTY."
+						db	" 2011-2023 by XTIDE Universal BIOS Team. Released under GNU GPL v2. This software comes with ABSOLUTELY NO WARRANTY."
 						db	" This is free software, and you are welcome to redistribute it under certain conditions."
 						db	" See the LICENSE.TXT file that was included with this distribution,"
@@ -117,4 +117,5 @@
 g_szItemAutoConfigure:	db	"Auto Configure",NULL
 g_szItemCfgFullMode:	db	"Full operating mode",NULL
+g_szItemCfgRamVars:		db	"Use UMB for variables",NULL
 g_szItemCfgStealSize:	db	"kiB to steal from RAM",NULL
 g_szItemCfgIdeCnt:		db	"IDE controllers",NULL
@@ -128,5 +129,7 @@
 						db	"Zenith Data Systems Z-161",LF,LF
 						db	"The Boot settings menu option 'Remove other hard drives' has been set to YES for this reason.",NULL
+g_szDlgFomEnabled		db	"The loaded file does not support Lite mode - Full operating mode has been enabled.",NULL
 g_szDlgCfgFullMode:		db	"Enable full operating mode?",NULL
+g_szDlgCfgRamVars:		db	"Store variables in UMB?",NULL
 g_szDlgCfgStealSize:	db	"How many kiB of base memory to steal for XTIDE Universal BIOS variables (1...255)?",NULL
 g_szDlgCfgIdeCnt:		db	"How many IDE controllers to manage (1...4)?",NULL
@@ -136,5 +139,6 @@
 g_szNfoCfgBootMenu:		db	"Boot configuration.",NULL
 g_szNfoAutoConfigure:	db	"Automatically Configure XTIDE Universal BIOS for this system.",NULL
-g_szNfoCfgFullMode:		db	"Full mode supports multiple controllers and has more features.",NULL
+g_szNfoCfgFullMode:		db	"Full mode supports up to four controllers and has more features.",NULL
+g_szNfoCfgRamVars:		db	"Enter UMB segment address (FFFF=Disable UMB usage and use the top of Conventional memory instead).",NULL
 g_szNfoCfgStealSize:	db	"How many kiB's to steal from Conventional memory for XTIDE Universal BIOS variables.",NULL
 g_szNfoCfgIdeCnt:		db	"Number of IDE controllers to manage.",NULL
@@ -144,17 +148,29 @@
 						db	" No further action is required. Serial Controllers must be placed at the end of the list.",NULL
 
-g_szHelpCfgFullMode:	db	"Full mode supports up to 4 IDE controllers (8 drives). Full mode reserves a bit of RAM from the top of"
-						db	" Conventional memory. This makes it possible to use ROM BASIC and other software that requires"
-						db	" the interrupt vectors where XTIDE Universal BIOS parameters would be stored in Lite mode.",LF,LF
+g_szHelpCfgFullMode:	db	"Full mode supports up to 4 IDE controllers (8 drives) and requires 1 kiB of RAM to store hard disk parameters and"
+						db	" other variables. This bit of RAM can be reserved from the top of Conventional memory, or, if RAM is available in"
+						db	" the Upper Memory Area (UMA), by configuring the BIOS to use an Upper Memory Block (UMB). Full mode makes it"
+						db	" possible to use ROM BASIC and other software that requires the memory range where"
+						db	" XTIDE Universal BIOS parameters would be stored in Lite mode.",LF,LF
 						db	"Lite mode supports only 2 IDE controllers (4 drives) and stores parameters to the top of the interrupt vectors"
-						db	" (30:0h) so no Conventional memory needs to be reserved. Lite mode cannot be used if some software requires"
-						db	" the top of interrupt vectors. Usually this is not a problem since only IBM ROM BASIC uses them.",LF,LF
+						db	" (30:0h) so no Conventional memory needs to be reserved. Lite mode cannot be used if you intend to use"
+						db	" IBM ROM BASIC or software such as Turbo BASIC or BASICA.",LF,LF
 						db	"Tandy 1000 models with 640 kiB or less memory need to use Lite mode since the top of Conventional memory gets"
 						db	" dynamically reserved by video hardware. This happens only with Tandy integrated video controller and not when"
-						db	" using expansion graphics cards. It is possible to use Full mode if reserving RAM for video memory + what is"
-						db	" required for XTIDE Universal BIOS. This would mean 65 kiB but most software should work with 33 kiB reserved.",NULL
-
-g_szHelpCfgStealSize:	db	"Parameters for detected hard disks must be stored somewhere. In Full mode they are stored at the top of Conventional"
-						db	" memory. 1 kiB is usually enough but you may have to reserve more if you want to use Full mode on a Tandy 1000.",NULL
+						db	" using expansion graphics cards. It is possible to use Full mode if configuring the BIOS to use an UMB or by"
+						db	" reserving RAM for video memory in addition to what is required for XTIDE Universal BIOS. Most software should"
+						db	" work with 33 kiB reserved but some will require 65 kiB. Theoretically speaking, a lot more could be required"
+						db	" - it is just that we are not aware of any software with higher video memory requirements.",NULL
+
+g_szHelpCfgRamVars:		db	"The UMB segment address entered here will be used to store hard disk parameters and other variables leaving all"
+						db	" of the Conventional memory free for other uses.",LF,LF
+						db	"Do not use this option unless you know for certain that memory actually exists at this address and that it is"
+						db	" writable without any prerequisite chipset programming. If you are using any sort of DOS memory manager or UMB"
+						db	" provider then it is probably a good idea to use whatever memory range exclusion option it provides to prevent it"
+						db	" from trying to use this memory range. Note that only 1 kiB of the UMB will be used.",NULL
+
+g_szHelpCfgStealSize:	db	"Parameters for detected hard disks and other variables must be stored somewhere. If in Full mode, and the BIOS has"
+						db	" not been configured to use an UMB, then they are stored at the top of Conventional memory."
+						db	" 1 kiB is usually enough but you may have to reserve more if you want to use Full mode on a Tandy 1000.",NULL
 
 g_szHelpCfgIdleTimeout:	db	"This option enables the standby timer for all harddrives handled by XTIDE Universal BIOS,"
