Author: tkreuzer
Date: Sat Jul 2 15:08:54 2011
New Revision: 52500
URL: http://svn.reactos.org/svn/reactos?rev=52500&view=rev
Log:
[FAT32]
- Really fix loading the MSVC built kernel, by moving the FAT sector buffer beyond the area for freeldr.sys
- Load segment only in one place
Modified:
trunk/reactos/boot/freeldr/bootsect/fat32.S
Modified: trunk/reactos/boot/freeldr/bootsect/fat32.S
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/boot/freeldr/bootsect/fat3…
==============================================================================
--- trunk/reactos/boot/freeldr/bootsect/fat32.S [iso-8859-1] (original)
+++ trunk/reactos/boot/freeldr/bootsect/fat32.S [iso-8859-1] Sat Jul 2 15:08:54 2011
@@ -153,6 +153,7 @@
// EAX has logical sector number to read
// CX has number of sectors to read
ReadSectors:
+ push es
cmp eax, dword ptr ds:[BiosCHSDriveSize] // Check if they are reading a sector outside CHS range
jae ReadSectorsLBA // Yes - go to the LBA routine
// If at all possible we want to use LBA routines because
@@ -194,13 +195,6 @@
mov dl, byte ptr BP_REL(BootDrive) // Drive number
mov ah, HEX(42) // Int 13h, AH = 42h - Extended Read
int HEX(13) // Call BIOS
-
- /* This code "fixes" loading the MSVC built kernel */
- pushad
- mov si, offset msgNull
- call PutChars
- popad
-
jc PrintDiskError // If the read failed then abort
add sp, 16 // Remove disk address packet from stack
@@ -219,6 +213,7 @@
sub cx, word ptr ds:[LBASectorsRead]
jnz ReadSectorsLBA // Read next sector
+ pop es
ret
LBASectorsRead:
@@ -309,8 +304,6 @@
.ascii "File system error", CR, LF, NUL
msgAnyKey:
.ascii "Press any key to restart", CR, LF, NUL
-msgNull:
- .ascii NUL
.org 509 // Pad to 509 bytes
@@ -473,21 +466,21 @@
LoadFatSector:
push ecx
+
+ mov bx, HEX(9000) // We will load it to [9000:0000h]
+ mov es, bx
+
// EAX holds logical FAT sector number
// Check if we have already loaded it
cmp eax, dword ptr ds:[FatSectorInCache]
je LoadFatSectorAlreadyLoaded
mov dword ptr ds:[FatSectorInCache], eax
- mov bx, HEX(7000)
- mov es, bx
- xor bx, bx // We will load it to [7000:0000h]
+ xor bx, bx
mov cx, 1
call ReadSectors
LoadFatSectorAlreadyLoaded:
- mov bx, HEX(7000)
- mov es, bx
pop ecx
mov eax, dword ptr es:[ecx] // Get FAT entry
and eax, HEX(0fffffff) // Mask off reserved bits