Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm	(revision 596)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h.asm	(revision 597)
@@ -199,9 +199,9 @@
 	call	DriveXlate_Reset					; Clean up any drive mappings before Rom Boot
 %endif
-	clc
-	;; fall through to Int19h_JumpToBootSectorOrRomBoot
-
-;--------------------------------------------------------------------
-; Int19h_JumpToBootSectorOrRomBoot
+	stc
+	;; fall through to Int19h_JumpToBootSectorInESBXOrRomBoot
+
+;--------------------------------------------------------------------
+; Int19h_JumpToBootSectorInESBXOrRomBoot
 ;
 ; Switches back to the POST stack, clears the DS and ES registers,
@@ -211,17 +211,18 @@
 ;	Parameters:
 ;		DL:		Drive to boot from (translated, 00h or 80h)
-;		CF:		Set for Boot Sector Boot
-;				Clear for ROM Boot
-;		ES:BX:	(if CF set) Ptr to boot sector (ES = zero)
+;		CF:		Clear for Boot Sector Boot
+;				Set for ROM Boot
+;		ES:BX:	(if CF clear) Ptr to boot sector (ES = zero)
 ;
 ;	Returns:
 ;		Never returns
 ;--------------------------------------------------------------------
-Int19h_JumpToBootSectorOrRomBoot:
-	mov		ax, es		; Preserve MBR segment (can't push because of stack change)
-						; NOTE: can't use XOR (LOAD_BDA_SEGMENT_TO) as it impacts CF
+Int19h_JumpToBootSectorInESBXOrRomBoot:
+	mov		ax, es		; Clear AX. NOTE: can't use XOR (LOAD_BDA_SEGMENT_TO) as it impacts CF
 	SWITCH_BACK_TO_POST_STACK
 
 ; clear segment registers before boot sector or rom call
+Int19h_JumpToBootSectorInESBXOrRomBootWithoutStackChange:
+	mov		ax, es		; Clear AX and preserve CF
 	mov		ds, ax
 %ifdef USE_386
@@ -229,8 +230,8 @@
 	mov		gs, ax
 %endif
-	jnc		SHORT .RomBoot
+	jc		SHORT .RomBoot
 
 ; jump to boot sector
-	push	ax			; sgment address for MBR
+	push	es			; sgment address for MBR
 	push	bx			; offset address for MBR
 	retf				; NOTE:	DL is set to the drive number
Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/BootSector.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/BootSector.asm	(revision 596)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/BootSector.asm	(revision 597)
@@ -59,6 +59,6 @@
 	jne		SHORT .FirstHardDiskSectorNotBootable
 .AlwaysBootFromFloppyDriveForBooterGames:
-	stc		; Boot Sector loaded successfully
-	jmp		SHORT Int19h_JumpToBootSectorOrRomBoot
+	clc		; Boot Sector loaded successfully
+	jmp		SHORT Int19h_JumpToBootSectorInESBXOrRomBoot
 
 .FirstHardDiskSectorNotBootable:
Index: trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/Int19hReset.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/Int19hReset.asm	(revision 596)
+++ trunk/XTIDE_Universal_BIOS/Src/Handlers/Int19h/Int19hReset.asm	(revision 597)
@@ -38,16 +38,6 @@
 	call	BootSector_LoadFirstSectorFromDriveDL
 	jc		SHORT .Reboot
-
-	xor		ax, ax
-	mov		ds, ax
-%ifdef USE_386
-	mov		fs, ax
-	mov		gs, ax
-%endif
 	cmp		WORD [bx+510], 0AA55h	; Valid boot sector?
-	jne		SHORT .Reboot
-	push	es						; Zero
-	push	bx
-	retf
+	je		SHORT Int19h_JumpToBootSectorInESBXOrRomBootWithoutStackChange
 
 	; Do warm reset since boot from floppy drive failed
Index: trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm
===================================================================
--- trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm	(revision 596)
+++ trunk/XTIDE_Universal_BIOS/Src/Initialization/DetectDrives.asm	(revision 597)
@@ -118,7 +118,10 @@
 		jnz		SHORT .ClearBdaDriveCount		; Unsupported BIOS, use plan B
 
-		; Now we can alter CMOS location 12h
+		; Now we can alter CMOS location 12h. Important! We set type for drive 1
+		; (primary slave) and not for drive 0! Award BIOS locks if we set drive 0 type to Fh.
+		; We cannot set it to less either since that will fully set predefined hard drive type to the BIOS.
+		; Windows 95 only cares that the CMOS location 12h is non-zero.
 		mov		dl, HARD_DISK_TYPES
-		mov		al, 0F0h	; Drive 0 type 16...47 but Windows doesn't care as long as this is not zero
+		mov		al, 0Fh	; Drive 1 type 16...47 (defined elsewhere in the CMOS)
 		call	CMOS_WriteALtoIndexInDL
 		call	CMOS_StoreNewChecksumFor10hto2Dh
