Index: trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm	(revision 197)
+++ trunk/XTIDE_Universal_BIOS/Src/Device/Serial/SerialCommand.asm	(revision 199)
@@ -119,5 +119,5 @@
 		mov		cl, dl
 
-		and		cl, SerialCommand_PackedPortAndBaud_BaudMask
+		and		cl, DEVICE_SERIAL_PACKEDPORTANDBAUD_BAUDMASK
 		shl		cl, 1
 		mov		ch, SerialCommand_UART_divisorLow_startingBaud
@@ -125,8 +125,8 @@
 		adc		ch, 0
 
-		and		dl, SerialCommand_PackedPortAndBaud_PortMask
+		and		dl, DEVICE_SERIAL_PACKEDPORTANDBAUD_PORTMASK
 		mov		dh, 0
 		shl		dx, 1			; port offset already x4, needs one more shift to be x8
-		add		dx, SerialCommand_PackedPortAndBaud_StartingPort
+		add		dx, DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT
 
 ;
@@ -501,8 +501,11 @@
 SerialCommand_IdentifyDeviceToBufferInESSIwithDriveSelectByteInBH:
 
-		mov		dl,[cs:bp+IDEVARS.bSerialPackedPortAndBaud]
+		mov		dx,[cs:bp+IDEVARS.bSerialCOMDigit]
 		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
+		
 ; fall-through
 SerialCommand_IdentifyDeviceInDL_DriveInBH:
@@ -543,8 +546,12 @@
 ;
 
-SerialCommand_ScanPortAddresses:     db  0b8h, 0f8h, 0bch, 0bah, 0fah, 0beh, 0feh, 0
-; Corresponds to I/O port:                3f8,  2f8,  3e8,  2e8,  2f0,  3e0,  2e0,  260,  368,  268,  360,  270
-; COM Assignments:                          1,    2,    3,    4,    5,    6,    7,    8,    9,   10,   11,   12
-; Corresponds to Packed I/O port (hex):    37,   17,   35,   15,   16,   34,   14,    4,   25,    5,   24,    6		
+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
 
 ALIGN JUMP_ALIGN
@@ -581,6 +588,7 @@
 ; Pack into dl, baud rate starts at 0
 ;
-		add		dx,-(SerialCommand_PackedPortAndBaud_StartingPort)
-		shr		dx,1
+		add		dx,-(DEVICE_SERIAL_PACKEDPORTANDBAUD_STARTINGPORT)
+		shr		dx,1			; dh is zero at this point, and will be sent to the server,
+								; so we know this is an auto detect
 
 		jmp		.testFirstBaud
Index: trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm	(revision 197)
+++ trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm	(revision 199)
@@ -31,13 +31,18 @@
 	add		bp, BYTE IDEVARS_size			; Point to next IDEVARS
 	loop	.DriveDetectLoop
-
 %ifdef MODULE_SERIAL
-	test	BYTE [es:BDA.bKBFlgs1], 8       ; alt key depressed
- 	jz		.done
+	mov		al,[cs:ROMVARS.wFlags]
+	or		al,[es:BDA.bKBFlgs1]
+	and		al,8		; 8 = alt key depressed, same as FLG_ROMVARS_SERIAL_ALWAYSDETECT
+	jz		.done
 	mov		bp, ROMVARS.ideVarsSerialAuto
 	mov		si, g_szDetectCOMAuto
-;;; fall-through		
+;;; fall-through					
 %else
 	ret
+%endif
+
+%if FLG_ROMVARS_SERIAL_SCANDETECT != 8
+%error "DetectDrives is currently coded to assume that FLG_ROMVARS_SERIAL_ALWAYSDETECT is the same bit as the ALT key code in the BDA.  Changes in the code will be needed if these values are no longer the same."
 %endif
 
Index: trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectPrint.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectPrint.asm	(revision 197)
+++ trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectPrint.asm	(revision 199)
@@ -53,19 +53,13 @@
 %ifdef MODULE_SERIAL
 ;
-; Baud rate is packed into one word:
-;    High order 6 bits: number to add to '0' to get postfix character ('0' or 'K')
-;    Low order 10 bits:	binary number to display (960, 240, 38, or 115)
-;          To get 9600:	'0'<<10 + 960
-;          To get 2400:	'0'<<10 + 240
-;          To get 38K:	('K'-'0')<<10 + 38
-;          To get 115K:	('K'-'0')<<10 + 115
-;
+; Print baud rate from .wSerialPackedPrintBaud, in two parts - %u and then %c
+; 
 	mov		ax,cx						; Unpack baud rate number
-	and		ax,03ffh
+	and		ax,DEVICE_SERIAL_PRINTBAUD_NUMBERMASK
 	push	ax
 
 	mov		al,ch						; Unpack baud rate postfix ('0' or 'K')
-	eSHR_IM	al,2
-	add		al,'0'
+	eSHR_IM	al,2				        ; also effectively masks off the postfix
+	add		al,DEVICE_SERIAL_PRINTBAUD_POSTCHARADD
 	push	ax
 %endif
Index: trunk/XTIDE_Universal_BIOS/Src/Main.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Main.asm	(revision 197)
+++ trunk/XTIDE_Universal_BIOS/Src/Main.asm	(revision 199)
@@ -82,6 +82,6 @@
 	at	ROMVARS.bStealSize,		db	1						; Steal 1kB from base memory
 
-	at	ROMVARS.ideVars0+IDEVARS.wPort,			dw	1F0h			; Controller Command Block base port
-	at	ROMVARS.ideVars0+IDEVARS.wPortCtrl,		dw	3F0h			; Controller Control Block base port
+	at	ROMVARS.ideVars0+IDEVARS.wPort,			dw	DEVICE_ATA_DEFAULT_PORT 		; Controller Command Block base port
+	at	ROMVARS.ideVars0+IDEVARS.wPortCtrl,		dw	DEVICE_ATA_DEFAULT_PORTCTRL 	; Controller Control Block base port
 	at	ROMVARS.ideVars0+IDEVARS.bDevice,		db	DEVICE_16BIT_ATA
 	at	ROMVARS.ideVars0+IDEVARS.bIRQ,			db	0
@@ -96,6 +96,6 @@
 	at	ROMVARS.ideVars1+IDEVARS.drvParamsSlave+DRVPARAMS.wFlags,	db	FLG_DRVPARAMS_BLOCKMODE
 
-	at	ROMVARS.ideVars2+IDEVARS.wPort,			dw	300h			; Controller Command Block base port
-	at	ROMVARS.ideVars2+IDEVARS.wPortCtrl,		dw	308h			; Controller Control Block base port
+	at	ROMVARS.ideVars2+IDEVARS.wPort,			dw	DEVICE_XTIDE_DEFAULT_PORT			; Controller Command Block base port
+	at	ROMVARS.ideVars2+IDEVARS.wPortCtrl,		dw	DEVICE_XTIDE_DEFAULT_PORTCTRL		; Controller Control Block base port
 	at	ROMVARS.ideVars2+IDEVARS.bDevice,		db	DEVICE_8BIT_DUAL_PORT_XTIDE
 	at	ROMVARS.ideVars2+IDEVARS.bIRQ,			db	0
@@ -127,6 +127,6 @@
 	at	ROMVARS.bStealSize,		db	1						; Steal 1kB from base memory in full mode
 
-	at	ROMVARS.ideVars0+IDEVARS.wPort,			dw	300h			; Controller Command Block base port
-	at	ROMVARS.ideVars0+IDEVARS.wPortCtrl,		dw	308h			; Controller Control Block base port
+	at	ROMVARS.ideVars0+IDEVARS.wPort,			dw	DEVICE_XTIDE_DEFAULT_PORT			; Controller Command Block base port
+	at	ROMVARS.ideVars0+IDEVARS.wPortCtrl,		dw	DEVICE_XTIDE_DEFAULT_PORTCTRL		; Controller Control Block base port
 	at	ROMVARS.ideVars0+IDEVARS.bDevice,		db	DEVICE_8BIT_DUAL_PORT_XTIDE
 	at	ROMVARS.ideVars0+IDEVARS.bIRQ,			db	0				; IRQ
