Index: /trunk/Tools/checksum.pl
===================================================================
--- /trunk/Tools/checksum.pl	(revision 203)
+++ /trunk/Tools/checksum.pl	(revision 203)
@@ -0,0 +1,70 @@
+@rem = '--*-Perl-*--
+@echo off
+perl -x -S %0 %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+@rem ';
+#!perl
+#
+# Add checksum byte to ROM image
+#
+# Use a size of 0 to skip this script entirely (file is not modified)
+#
+# On Windows, this file can be renamed to a batch file and invoked directly (for example, "c:\>checksum file size")
+#
+
+($ARGV[0] ne "" && $ARGV[1] ne "") || die "usage: checksum filename size\n";
+
+$desiredSize = int($ARGV[1]);
+
+if( $desiredSize == 0 )
+{
+	exit( 0 );
+}
+
+open FILE, "+<".$ARGV[0] || die "file not found\n";
+binmode FILE;
+$cs = 0;
+$last = 0;
+$bytes = 0;
+while( ($n = read( FILE, $d, 1 )) != 0 )
+{
+	$cs = $cs + ord($d);
+	$cs = $cs % 256;
+	$bytes = $bytes + 1;
+}
+$oldBytes = $bytes;
+
+if( $bytes > $desiredSize - 1 )
+{
+	die "ERROR: image is bigger than ".($desiredSize-1).": $bytes\n";
+}
+
+$fixzero = chr(0); 
+while( $bytes < $desiredSize - 1 )
+{
+	print FILE $fixzero;
+	$bytes++;
+}
+
+$fixl = ($cs == 0 ? 0 : 256 - $cs);
+$fix = chr($fixl);
+print FILE $fix;
+
+close FILE;
+
+open FILE, "<".$ARGV[0];
+binmode FILE;
+$cs = 0;
+$newBytes = 0;
+while( ($n = read( FILE, $d, 1 )) != 0 )
+{
+	$cs = $cs + ord($d);
+	$cs = $cs % 256;
+	$newBytes++;
+}
+$cs == 0 || die "Checksum verification failed\n";
+
+print "checksum: ".$ARGV[0].": $oldBytes bytes before, $newBytes bytes after\n";
+
+__DATA__
+:endofperl
Index: /trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS/Inc/RamVars.inc	(revision 203)
@@ -13,5 +13,11 @@
 	.bHDSwap		resb	1	; Hard Drive to swap to 80h and vice versa
 	.bXlatedDrv		resb	1	; Drive number after translation
-					resb	1	; For WORD alignment
+%ifdef MODULE_SERIAL
+	.bLastSerial	resb	1	; Packed Port and Baud for last serial drive detected
+								; (using space of an alignment byte, 
+								; used during and after boot (int13/25h case))
+%else
+					resb	1	; alignment
+%endif
 endstruc
 
Index: /trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS/Inc/RomVars.inc	(revision 203)
@@ -100,6 +100,7 @@
 ;   baud rate = b, where 00 = 2400, 01 = 9600, 10 = 38.4K, 11 = 115.2K
 ;
-; 240h/2400baud corresponds to 0 for a PackedPortAndBaud value, which is reserved (in case we need
-; it to know if a value has been set).  Which is why ..._MINPORT is 248h.
+; 240h/2400baud corresponds to 0 for a PackedPortAndBaud value, which triggers auto detect code.
+; Which means 240h is not usable, and is why ..._MINPORT is 248h.  A value is reserved at the upper
+; end of the spectrum in case it is needed (whcih is why it is 430h instead of 438h).
 ;
 DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK			EQU		0fch
@@ -107,6 +108,6 @@
 DEVICE_SERIAL_PACKEDPORTANDBAUD_PORT_FIELD_POSITION	EQU		2
 DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT		EQU		240h
-DEVICE_SERIAL_PACKEDPORTANDBAUD_MINPORT				EQU		248h		; minimum port value that the user can set
-DEVICE_SERIAL_PACKEDPORTANDBAUD_MAXPORT				EQU		438h		; or (..._PORTMASK << 1) + ..._STARTINGPORT
+DEVICE_SERIAL_PACKEDPORTANDBAUD_MINPORT				EQU		248h	; minimum port value that the user can set
+DEVICE_SERIAL_PACKEDPORTANDBAUD_MAXPORT				EQU		430h	; or ((..._PORTMASK-1) << 1) + ..._STARTINGPORT
 
 DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK			EQU		3h
Index: /trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm	(revision 203)
@@ -39,10 +39,4 @@
 
 SerialCommand_UART_scratch						EQU		7
-
-; note that the actual StaringPoint port address is not achievable (results in 0 which triggers auto detect)
-SerialCommand_PackedPortAndBaud_StartingPort	EQU		240h
-		
-SerialCommand_PackedPortAndBaud_PortMask		EQU		0fch    ; upper 6 bits - 240h through 438h
-SerialCommand_PackedPortAndBaud_BaudMask		EQU		3       ; lower 2 bits - 4 baud rates
 
 SerialCommand_Protocol_Write					EQU		3
@@ -479,10 +473,4 @@
 
 
-; To return the port number and baud rate to the FinalizeDPT routine, we
-; stuff the value in a "vendor" specific area of the 512-byte IdentifyDevice
-; sector.
-;
-SerialCommand_IdentifyDevice_PackedPortAndBaud	equ		(157*2)
-
 ;--------------------------------------------------------------------
 ; SerialCommand_IdentifyDeviceToBufferInESSIwithDriveSelectByteInBH
@@ -494,4 +482,5 @@
 ;	Returns:
 ;		AH:		INT 13h Error Code
+;               NOTE: Not set (or checked) during drive detection 
 ;		CF:		Cleared if success, Set if error
 ;	Corrupts registers:
@@ -500,14 +489,67 @@
 ALIGN JUMP_ALIGN
 SerialCommand_IdentifyDeviceToBufferInESSIwithDriveSelectByteInBH:
-
-		mov		dx,[cs:bp+IDEVARS.bSerialCOMDigit]
+;
+; To improve boot time, we do our best to avoid looking for slave serial drives when we already know the results 
+; from the looking for a master.  This is particuarly true when doing a COM port scan, as we will end up running
+; through all the COM ports and baud rates a second time.  
+;
+; But drive detection isn't the only case - we also need to get the right drive when called on int13h/25h.  
+;
+; The decision tree:
+;
+;    Master:
+;		   bSerialPackedPortAndBaud Non-Zero:   -> Continue with bSerialPackedAndBaud (1)
+;		   bSerialPackedPortAndBaud Zero: 
+;		   			      bLastSerial Zero:     -> Scan (2)
+;					      bLastSerial Non-Zero: -> Continue with bLastSerial (3)
+;			  				        
+;    Slave:
+;		   bSerialPackedPortAndBaud Non-Zero: 
+;		   			      bLastSerial Zero:     -> Error - Not Found (4)
+;					      bLastSerial Non-Zero: -> Continue with bSerialPackedAndBaud (5)
+;          bSerialPackedPortAndBaud Zero:     
+;		   			      bLastSerial Zero:     -> Error - Not Found (4)
+;					      bLastSerial Non-Zero: -> Continue with bLastSerial (6)
+;
+; (1) This was a port/baud that was explicilty set with the configurator.  In the drive detection case, as this 
+;     is the Master, we are checking out a new controller, and so don't care about the value of bLastSerial.  
+;     And as with the int13h/25h case, we just go off and get the needed information using the user's setting.
+; (2) We are using the special .ideVarsSerialAuto strucutre.  During drive detection, we would only be here
+;     if bLastSerial is zero (since we only scan if no explicit drives are set), so we go off to scan.
+; (3) We are using the special .ideVarsSerialAuto strucutre.  We won't get here during drive detection, but
+;     we might get here on an int13h/25h call.  If we have scanned COM drives, they are the ONLY serial drives
+;     in use, and so bLastSerial will reflect the port/baud setting for the scanned COM drives.
+; (4) No master has been found yet, therefore no slave should be found.  Avoiding the slave reduces boot time, 
+;     especially in the full COM port scan case.  Note that this is different from the hardware IDE, where we
+;     will scan for a slave even if a master is not present.  Note that if ANY master had been previously found,
+;     we will do the slave scan, which isn't harmful, it just wates time.  But the most common case (by a wide
+;     margin) will be just one serial controller.
+; (5) A COM port scan for a master had been previously completed, and a drive was found.  In a multiple serial
+;     controller scenario being called with int13h/25h, we need to use the value in bSerialPackedPortAndBaud 
+;     to make sure we get the proper drive.
+; (6) A COM port scan for a master had been previously completed, and a drive was found.  We would only get here 
+;     if no serial drive was explicitly set by the user in the configurator or that drive had not been found.  
+;     Instead of performing the full COM port scan for the slave, use the port/baud value stored during the 
+;     master scan.
+;		
+		mov		dl,[cs:bp+IDEVARS.bSerialPackedPortAndBaud]		
+		mov		al,	byte [RAMVARS.xlateVars+XLATEVARS.bLastSerial]
+				
+		test	bh, FLG_DRVNHEAD_DRV
+		jz		.master
+
+		test	al,al			; Take care of the case that is different between master and slave.  
+		jz		.error			; Because we do this here, the jz after the "or" below will not be taken
+
+; fall-through
+.master:		
 		test	dl,dl
-		jz		SerialCommand_AutoSerial
-
-		xchg	dh,dl			; dh (the COM character to print) will be transmitted to the server,
-								; so we know this is not an auto detect
+		jnz		.identifyDeviceInDL
+
+		or		dl,al			; Move bLast into position in dl, as well as test for zero
+		jz		.scanSerial
 		
 ; fall-through
-SerialCommand_IdentifyDeviceInDL_DriveInBH:
+.identifyDeviceInDL:	
 
 		push	bp				; setup fake IDEREGS_AND_INTPACK
@@ -524,5 +566,4 @@
 
 		mov		bp,sp
-
 		call	SerialCommand_OutputWithParameters_DeviceInDL
 
@@ -533,8 +574,15 @@
 
 		pop		bp
-
-; place packed port/baud in vendor area of packet, read by FinalizeDPT
-		mov		byte [es:si+SerialCommand_IdentifyDevice_PackedPortAndBaud], dl
-
+; 
+; place packed port/baud in RAMVARS, read by FinalizeDPT and DetectDrives
+;
+; Note that this will be set during an int13h/25h call as well.  Which is OK since it is only used (at the
+; top of this routine) for drives found during a COM scan, and we only COM scan if there were no other 
+; COM drives found.  So we will only reaffirm the port/baud for the one COM port/baud that has a drive.
+; 
+		jc		.notFound											; only store bLastSerial if success
+		mov		byte [RAMVARS.xlateVars+XLATEVARS.bLastSerial], dl
+
+.notFound:		
 		ret
 
@@ -546,16 +594,16 @@
 ;
 
-SerialCommand_ScanPortAddresses:    db	DEVICE_SERIAL_COM7 >> 2
-									db	DEVICE_SERIAL_COM6 >> 2
-									db	DEVICE_SERIAL_COM5 >> 2
-									db	DEVICE_SERIAL_COM4 >> 2
-									db	DEVICE_SERIAL_COM3 >> 2
-									db	DEVICE_SERIAL_COM2 >> 2
-									db	DEVICE_SERIAL_COM1 >> 2
-									db	0
+.scanPortAddresses: db	DEVICE_SERIAL_COM7 >> 2
+					db	DEVICE_SERIAL_COM6 >> 2
+					db	DEVICE_SERIAL_COM5 >> 2
+					db	DEVICE_SERIAL_COM4 >> 2
+					db	DEVICE_SERIAL_COM3 >> 2
+					db	DEVICE_SERIAL_COM2 >> 2
+					db	DEVICE_SERIAL_COM1 >> 2
+					db	0
 
 ALIGN JUMP_ALIGN
-SerialCommand_AutoSerial:
-		mov		di,SerialCommand_ScanPortAddresses-1
+.scanSerial:
+		mov		di,.scanPortAddresses-1
 
 .nextPort:
@@ -565,5 +613,5 @@
 		mov		dh,0			; shift from one byte to two
 		eSHL_IM	dx, 2
-		jz		.exitNotFound
+		jz		.error
 
 ;
@@ -603,12 +651,14 @@
 
 .testFirstBaud:
-		call	SerialCommand_IdentifyDeviceInDL_DriveInBH
+		call	.identifyDeviceInDL
 		jc		.nextBaud
 
 		ret
 
-.exitNotFound:
+.error:	
 		stc
-		mov		ah,1
-
+		; mov		ah,1		; setting the error code is unnecessary as this path can only be taken during
+								; drive detection, and drive detection works off CF and does not check AH
 		ret
+
+
Index: /trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialDPT.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialDPT.asm	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialDPT.asm	(revision 203)
@@ -17,5 +17,5 @@
 SerialDPT_Finalize:
 		or		byte [di+DPT.bFlagsHigh], FLGH_DPT_SERIAL_DEVICE
-		mov		al, byte [es:si+SerialCommand_IdentifyDevice_PackedPortAndBaud]
+		mov		al, [RAMVARS.xlateVars+XLATEVARS.bLastSerial]
 		mov		byte [di+DPT.bSerialPortAndBaud], al
 		ret
Index: /trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm	(revision 203)
@@ -23,5 +23,5 @@
 .DriveDetectLoop:							; Loop through IDEVARS
 	mov		si, g_szDetect					; Setup standard print string
-%ifdef MODULE_SERIAL
+%ifdef MODULE_SERIAL		
 	cmp		byte [cs:bp+IDEVARS.bDevice], DEVICE_SERIAL_PORT
 	jnz		.DriveNotSerial					; Special print string for serial drives
@@ -29,15 +29,24 @@
 .DriveNotSerial:
 %endif
+
 	call	.DetectDrives_WithIDEVARS		; Detect Master and Slave
 	add		bp, BYTE IDEVARS_size			; Point to next IDEVARS
 	loop	.DriveDetectLoop
+
+%ifdef MODULE_SERIAL		
+;
+; if serial drive detected, do not scan (avoids duplicate drives and isn't needed - we have a connection)
+; Note that XLATEVARS.bLastSerial is zero'd in RamVars_Initialize, called in Initialize_AutoDetectDrives;
+; bLastSerial it set in the detection code of SerialCommand.asm
+;
+	cmp		byte [RAMVARS.xlateVars+XLATEVARS.bLastSerial],cl 	; cx = zero after the loop above
+																; less instruction bytes than using immediate
+	jnz		.done												  
 		
-%ifdef MODULE_SERIAL
-	call	FindDPT_ToDSDIforSerialDevice	; Did we already find any serial drives? 
-	jc		.done							; Yes, do not scan
 	mov		al,[cs:ROMVARS.wFlags]			; Configurator set to always scan?
 	or		al,[es:BDA.bKBFlgs1]			; Or, did the user hold down the ALT key?
 	and		al,8							; 8 = alt key depressed, same as FLG_ROMVARS_SERIAL_ALWAYSDETECT
 	jz		.done							
+
 	mov		bp, ROMVARS.ideVarsSerialAuto	; Point to our special IDEVARS sructure, just for serial scans
 	mov		si, g_szDetectCOMAuto			; Special, special print string for serial drives during a scan
@@ -74,18 +83,4 @@
 	pop		si
 
-%ifdef MODULE_SERIAL
-;
-; This block of code checks to see if we found a master during a serial drives scan.  If no master
-; was found, there is no point in scanning for a slave as the server will not return a slave without a master,
-; as there is very little point given the drives are emulated.  Performing the slave scan will take 
-; time to rescan all the COM port and baud rate combinations.
-;
-	jnc		.masterFound
-	pop		cx
-	jcxz	.done		; note that CX will only be zero after the .DriveDetectLoop, indicating a serial scan
-	push	cx
-.masterFound:
-%endif
-		
 	mov		ax, g_szSlave
 	mov		bh, MASK_DRVNHEAD_SET | FLG_DRVNHEAD_DRV
@@ -106,7 +101,5 @@
 ;		ES:		Zero (BDA segment)
 ;	Returns:
-;		CF:		Set on failure, Clear on success
-;               Note that this is set in the last thing both cases
-;               do: printing the drive name, or printing "Not Found"
+;       None
 ;	Corrupts registers:
 ;		AX, BX, CX, DX, SI, DI
@@ -144,5 +137,19 @@
 	;call	ReadAtapiInfoFromDrive		; Assume CD-ROM
 	;jnc	SHORT _CreateBiosTablesForCDROM
-	jmp		short DetectDrives_DriveNotFound
+	
+	;jmp	short DetectDrives_DriveNotFound
+;;; fall-through instead of previous jmp instruction
+;--------------------------------------------------------------------
+; DetectDrives_DriveNotFound
+;	Parameters:
+;		Nothing
+;	Returns:
+;		CF:     Set (from BootMenuPrint_NullTerminatedStringFromCSSIandSetCF)
+;	Corrupts registers:
+;		AX, SI
+;--------------------------------------------------------------------
+DetectDrives_DriveNotFound:		
+	mov		si, g_szNotFound
+	jmp		BootMenuPrint_NullTerminatedStringFromCSSIandSetCF		
 
 
@@ -166,15 +173,3 @@
 	jmp		short DetectPrint_DriveNameFromBootnfoInESBX
 
-;--------------------------------------------------------------------
-; DetectDrives_DriveNotFound
-;	Parameters:
-;		Nothing
-;	Returns:
-;		CF:     Set (from BootMenuPrint_NullTerminatedStringFromCSSIandSetCF)
-;	Corrupts registers:
-;		AX, SI
-;--------------------------------------------------------------------
-DetectDrives_DriveNotFound:		
-	mov		si, g_szNotFound
-	jmp		BootMenuPrint_NullTerminatedStringFromCSSIandSetCF		
 
Index: /trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectPrint.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectPrint.asm	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectPrint.asm	(revision 203)
@@ -88,5 +88,4 @@
 	pop		bx
 	pop		di
-	clc							; return success up through DetectDrives
 	ret
 
Index: /trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/FindDPT.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/FindDPT.asm	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS/Src/VariablesAndDPTs/FindDPT.asm	(revision 203)
@@ -124,8 +124,7 @@
 
 ;--------------------------------------------------------------------
-; IterateToDptWithFlagsHighSet:
+; IterateToDptWithInterruptInServiceFlagSet
 ;	Parameters:
 ;		DS:DI:	Ptr to DPT to examine
-;       AL:     Bit in bFlagsHigh to test
 ;	Returns:
 ;		CF:		Set if wanted DPT found
@@ -135,6 +134,7 @@
 ;--------------------------------------------------------------------
 ALIGN JUMP_ALIGN
-IterateToDptWithFlagsHighSet:
-	test	BYTE [di+DPT.bFlagsHigh], al	; Clears CF (but we need the clc below anyway callers above)
+IterateToDptWithInterruptInServiceFlagSet:
+	test	BYTE [di+DPT.bFlagsHigh], FLGH_DPT_INTERRUPT_IN_SERVICE		; Clears CF (but we need the clc
+																		; below anyway for callers above)
 	jnz		SHORT ReturnRightDPT
 
@@ -145,5 +145,4 @@
 ;--------------------------------------------------------------------
 ; FindDPT_ToDSDIforInterruptInService
-; FindDPT_ToDSDIforSerialDevice
 ;	Parameters:
 ;		DS:		RAMVARS segment
@@ -153,20 +152,9 @@
 ;				Cleared if DPT not found
 ;	Corrupts registers:
-;		SI, AX, BX (for SerialDevice only)
+;		SI
 ;--------------------------------------------------------------------
 ALIGN JUMP_ALIGN
-		
-%ifdef MODULE_SERIAL
-FindDPT_ToDSDIforSerialDevice:	
-	mov		al, FLGH_DPT_SERIAL_DEVICE
-
-	SKIP2B	bx
-%endif
-		
-; do not align due to SKIP2B above
 FindDPT_ToDSDIforInterruptInService:
-	mov		al, FLGH_DPT_INTERRUPT_IN_SERVICE
-
-	mov		si, IterateToDptWithFlagsHighSet
+	mov		si, IterateToDptWithInterruptInServiceFlagSet
 	; Fall to IterateAllDPTs
 
Index: /trunk/XTIDE_Universal_BIOS/makefile
===================================================================
--- /trunk/XTIDE_Universal_BIOS/makefile	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS/makefile	(revision 203)
@@ -87,4 +87,6 @@
 TARGET = $(BUILD_DIR)/$(PROG)
 
+# Target size of the ROM, used by checksum Perl script  
+ROMSIZE = 8192
 
 #########################
@@ -140,7 +142,13 @@
 	@echo Deleted "(*.*)" from "$(BUILD_DIR)/"
 
+checksum:  all
+	@perl ..\tools\checksum.pl $(TARGET)_at.bin $(ROMSIZE)
+	@perl ..\tools\checksum.pl $(TARGET)_xtp.bin $(ROMSIZE)
+	@perl ..\tools\checksum.pl $(TARGET)_xt.bin $(ROMSIZE)
+
 src\StringsCompressed.asm:	src\Strings.asm
-	$(AS) src\Strings.asm $(ASFLAGS) $(DEFS_XT) -DMODULE_STRINGS_COMPRESSED_PRECOMPRESS -o build\Strings.bin -l build\StringsPrecompress.lst
-	perl ..\tools\StringsCompress.pl < build\StringsPrecompress.lst > src\StringsCompressed.asm
+	@$(AS) src\Strings.asm $(ASFLAGS) $(DEFS_XT) -DMODULE_STRINGS_COMPRESSED_PRECOMPRESS -o build\Strings.bin -l build\StringsPrecompress.lst
+	@perl ..\tools\StringsCompress.pl < build\StringsPrecompress.lst > src\StringsCompressed.asm
+	@echo StringsCompressed.asm updated!
 
 $(SRC_ASM):		src\StringsCompressed.asm
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/IDE_SerialPort.txt
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/IDE_SerialPort.txt	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Inc/Help/IDE_SerialPort.txt	(revision 203)
@@ -1,1 +1,1 @@
-Select a serial port by I/O address. Supported values are between 240h and 438h, and must be on an 8-byte boundary. If the entered value corresponds to one of the established COM port numbers, then the selection of serial port will use COM numbers instead.
+Select a serial port by I/O address. Supported values are between 240h and 430h, and must be on an 8-byte boundary. If the entered value corresponds to one of the established COM port numbers, then the selection of serial port will use COM numbers instead.
Index: /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm
===================================================================
--- /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm	(revision 202)
+++ /trunk/XTIDE_Universal_BIOS_Configurator_v2/Src/Strings.asm	(revision 203)
@@ -134,6 +134,6 @@
 g_szNfoIdeIRQ:			db	"IRQ channel to use.",NULL
 g_szNfoIdeSerialCOM:	db	"Select a COM port by number.",NULL
-g_szNfoIdeSerialBaud:	db	"Select the COM port's Baud Rate. The server must match this speed. Note UART clock multipliers may impact the actual speed.",NULL
-g_szNfoIdeSerialPort:	db	"Select a COM port by custom I/O port address. Address must be in the range 248h to 438h and be on an 8-byte boundary.", NULL
+g_szNfoIdeSerialBaud:	db	"Select the COM port's Baud Rate. The server must match this speed. Note that UART clock multipliers may impact the actual speed.",NULL
+g_szNfoIdeSerialPort:	db	"Select a COM port by custom I/O port address. Address must be in the range 248h to 430h and be on an 8-byte boundary.", NULL
 
 g_szHelpIdeCmdPort:		incbin	"IDE_CommandPort.txt"
@@ -254,5 +254,5 @@
 g_szNfoBootFloppyDrvs:	db	"Number of Floppy Drives to display on boot menu.",NULL
 g_szNfoBootSwap:		db	"Drive Number Translation (swap first drive with selected).",NULL
-g_szNfoSerialDetect:	db	"Will scan COM ports for a serial drive. Can also be invoked by holding down ALT at the end of standard drive detection.",NULL
+g_szNfoSerialDetect:	db	"Scans all standard COM ports for serial drives. This can also be invoked by holding down ALT at the end of normal drive detection.",NULL
 
 g_szHelpBootTimeout:	incbin	"Bootmenu_Timeout.txt"
