mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
Fixed bug in LBA code.
svn path=/trunk/; revision=2705
This commit is contained in:
parent
0ae6e2be42
commit
c08d8bcfb9
5 changed files with 11 additions and 34 deletions
|
@ -159,10 +159,10 @@ _packet_reserved:
|
||||||
.byte 0
|
.byte 0
|
||||||
_packet_sector_count:
|
_packet_sector_count:
|
||||||
.word 0
|
.word 0
|
||||||
_packet_transfer_buffer_segment:
|
|
||||||
.word 0
|
|
||||||
_packet_transfer_buffer_offset:
|
_packet_transfer_buffer_offset:
|
||||||
.word 0
|
.word 0
|
||||||
|
_packet_transfer_buffer_segment:
|
||||||
|
.word 0
|
||||||
_packet_lba_sector_number:
|
_packet_lba_sector_number:
|
||||||
.quad 0
|
.quad 0
|
||||||
_packet_64bit_flat_address:
|
_packet_64bit_flat_address:
|
||||||
|
@ -208,11 +208,10 @@ EXTERN(_BiosInt13ReadExtended)
|
||||||
|
|
||||||
_int13_extended_read:
|
_int13_extended_read:
|
||||||
movb _int13_extended_drive,%dl // Get the drive
|
movb _int13_extended_drive,%dl // Get the drive
|
||||||
movb $42,%ah // BIOS int 0x13, function 42h - IBM/MS INT 13 Extensions - EXTENDED READ
|
movb $0x42,%ah // BIOS int 0x13, function 42h - IBM/MS INT 13 Extensions - EXTENDED READ
|
||||||
movw $_disk_address_packet,%si // DS:SI -> disk address packet
|
movw $_disk_address_packet,%si // DS:SI -> disk address packet
|
||||||
int $0x13 // Read sectors
|
int $0x13 // Read sectors
|
||||||
|
|
||||||
movb $1,%al // Set the return value to be one (will be set to zero later if needed)
|
|
||||||
jc _int13_extended_error // Jump if error (CF = 1 on error)
|
jc _int13_extended_error // Jump if error (CF = 1 on error)
|
||||||
|
|
||||||
movl _int13_extended_sector_count,%eax // Get the sector count in eax
|
movl _int13_extended_sector_count,%eax // Get the sector count in eax
|
||||||
|
@ -252,7 +251,6 @@ _int13_extended_done:
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
movl _int13_extended_retval,%eax // Get return value
|
movl _int13_extended_retval,%eax // Get return value
|
||||||
//movl $1,%eax
|
|
||||||
|
|
||||||
pop %edx
|
pop %edx
|
||||||
pop %ecx
|
pop %ecx
|
||||||
|
|
|
@ -24,8 +24,10 @@
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
||||||
|
//ULONG DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY | DPRINT_FILESYSTEM |
|
||||||
|
// DPRINT_UI | DPRINT_DISK | DPRINT_CACHE;
|
||||||
ULONG DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY | DPRINT_FILESYSTEM |
|
ULONG DebugPrintMask = DPRINT_WARNING | DPRINT_MEMORY | DPRINT_FILESYSTEM |
|
||||||
DPRINT_UI | DPRINT_DISK | DPRINT_CACHE;
|
DPRINT_UI | DPRINT_DISK;
|
||||||
//ULONG DebugPrintMask = DPRINT_CACHE;
|
//ULONG DebugPrintMask = DPRINT_CACHE;
|
||||||
|
|
||||||
#define SCREEN 0
|
#define SCREEN 0
|
||||||
|
@ -65,11 +67,11 @@ VOID DebugPrintChar(UCHAR Character)
|
||||||
|
|
||||||
if (DebugPort == RS232)
|
if (DebugPort == RS232)
|
||||||
{
|
{
|
||||||
Rs232PortPutByte(Character);
|
|
||||||
if (Character == '\n')
|
if (Character == '\n')
|
||||||
{
|
{
|
||||||
Rs232PortPutByte('\r');
|
Rs232PortPutByte('\r');
|
||||||
}
|
}
|
||||||
|
Rs232PortPutByte(Character);
|
||||||
}
|
}
|
||||||
else if (DebugPort == BOCHS)
|
else if (DebugPort == BOCHS)
|
||||||
{
|
{
|
||||||
|
|
|
@ -58,7 +58,7 @@ BOOL DiskReadLogicalSectors(ULONG DriveNumber, ULONG SectorNumber, ULONG SectorC
|
||||||
GEOMETRY DriveGeometry;
|
GEOMETRY DriveGeometry;
|
||||||
ULONG NumberOfSectorsToRead;
|
ULONG NumberOfSectorsToRead;
|
||||||
|
|
||||||
DbgPrint((DPRINT_DISK, "ReadLogicalSector() DriveNumber: 0x%x SectorNumber: %d Buffer: 0x%x\n", DriveNumber, SectorNumber, Buffer));
|
DbgPrint((DPRINT_DISK, "ReadLogicalSectors() DriveNumber: 0x%x SectorNumber: %d SectorCount: %d Buffer: 0x%x\n", DriveNumber, SectorNumber, SectorCount, Buffer));
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check to see if it is a fixed disk drive
|
// Check to see if it is a fixed disk drive
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <rtl.h>
|
#include <rtl.h>
|
||||||
#include <mm.h>
|
#include <mm.h>
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
#include <arch.h>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -192,10 +193,11 @@ BOOL DiskReadBootRecord(ULONG DriveNumber, ULONG LogicalSectorNumber, PMASTER_BO
|
||||||
ULONG Index;
|
ULONG Index;
|
||||||
|
|
||||||
// Read master boot record
|
// Read master boot record
|
||||||
if (!DiskReadLogicalSectors(DriveNumber, LogicalSectorNumber, 1, BootRecord))
|
if (!DiskReadLogicalSectors(DriveNumber, LogicalSectorNumber, 1, (PVOID)DISKREADBUFFER))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
RtlCopyMemory(BootRecord, (PVOID)DISKREADBUFFER, sizeof(MASTER_BOOT_RECORD));
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
@ -284,35 +284,10 @@ PVOID FatBufferDirectory(UINT32 DirectoryStartCluster, PUINT32 EntryCountPointer
|
||||||
//
|
//
|
||||||
if ((RootDirectory) && (FatType != FAT32))
|
if ((RootDirectory) && (FatType != FAT32))
|
||||||
{
|
{
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "We are here.\n"));
|
|
||||||
/*DbgPrint((DPRINT_FILESYSTEM, "sizeof(FAT_BOOTSECTOR) = 0x%x.\n", sizeof(FAT_BOOTSECTOR)));
|
|
||||||
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "JumpBoot: 0x%x 0x%x 0x%x\n", FatVolumeBootSector->JumpBoot[0], FatVolumeBootSector->JumpBoot[1], FatVolumeBootSector->JumpBoot[2]));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "OemName: %c%c%c%c%c%c%c%c\n", FatVolumeBootSector->OemName[0], FatVolumeBootSector->OemName[1], FatVolumeBootSector->OemName[2], FatVolumeBootSector->OemName[3], FatVolumeBootSector->OemName[4], FatVolumeBootSector->OemName[5], FatVolumeBootSector->OemName[6], FatVolumeBootSector->OemName[7]));*/
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "BytesPerSector: %d\n", FatVolumeBootSector->BytesPerSector));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "SectorsPerCluster: %d\n", FatVolumeBootSector->SectorsPerCluster));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "ReservedSectors: %d\n", FatVolumeBootSector->ReservedSectors));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "NumberOfFats: %d\n", FatVolumeBootSector->NumberOfFats));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "RootDirEntries: %d\n", FatVolumeBootSector->RootDirEntries));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "TotalSectors: %d\n", FatVolumeBootSector->TotalSectors));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "MediaDescriptor: 0x%x\n", FatVolumeBootSector->MediaDescriptor));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "SectorsPerFat: %d\n", FatVolumeBootSector->SectorsPerFat));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "SectorsPerTrack: %d\n", FatVolumeBootSector->SectorsPerTrack));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "NumberOfHeads: %d\n", FatVolumeBootSector->NumberOfHeads));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "HiddenSectors: %d\n", FatVolumeBootSector->HiddenSectors));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "TotalSectorsBig: %d\n", FatVolumeBootSector->TotalSectorsBig));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "DriveNumber: 0x%x\n", FatVolumeBootSector->DriveNumber));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "Reserved1: 0x%x\n", FatVolumeBootSector->Reserved1));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "BootSignature: 0x%x\n", FatVolumeBootSector->BootSignature));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "VolumeSerialNumber: 0x%x\n", FatVolumeBootSector->VolumeSerialNumber));
|
|
||||||
/*DbgPrint((DPRINT_FILESYSTEM, "VolumeLabel: %c%c%c%c%c%c%c%c%c%c%c\n", FatVolumeBootSector->VolumeLabel[0], FatVolumeBootSector->VolumeLabel[1], FatVolumeBootSector->VolumeLabel[2], FatVolumeBootSector->VolumeLabel[3], FatVolumeBootSector->VolumeLabel[4], FatVolumeBootSector->VolumeLabel[5], FatVolumeBootSector->VolumeLabel[6], FatVolumeBootSector->VolumeLabel[7], FatVolumeBootSector->VolumeLabel[8], FatVolumeBootSector->VolumeLabel[9], FatVolumeBootSector->VolumeLabel[10]));
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "FileSystemType: %c%c%c%c%c%c%c%c\n", FatVolumeBootSector->FileSystemType[0], FatVolumeBootSector->FileSystemType[1], FatVolumeBootSector->FileSystemType[2], FatVolumeBootSector->FileSystemType[3], FatVolumeBootSector->FileSystemType[4], FatVolumeBootSector->FileSystemType[5], FatVolumeBootSector->FileSystemType[6], FatVolumeBootSector->FileSystemType[7]));*/
|
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "BootSectorMagic: 0x%x\n", FatVolumeBootSector->BootSectorMagic));
|
|
||||||
DirectorySize = ROUND_UP((FatVolumeBootSector->RootDirEntries * 32), FatVolumeBootSector->BytesPerSector);
|
DirectorySize = ROUND_UP((FatVolumeBootSector->RootDirEntries * 32), FatVolumeBootSector->BytesPerSector);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DbgPrint((DPRINT_FILESYSTEM, "No we are here.\n"));
|
|
||||||
if (RootDirectory)
|
if (RootDirectory)
|
||||||
{
|
{
|
||||||
DirectorySize = (FatCountClustersInChain(Fat32VolumeBootSector->RootDirStartCluster) * Fat32VolumeBootSector->SectorsPerCluster) * Fat32VolumeBootSector->BytesPerSector;
|
DirectorySize = (FatCountClustersInChain(Fat32VolumeBootSector->RootDirStartCluster) * Fat32VolumeBootSector->SectorsPerCluster) * Fat32VolumeBootSector->BytesPerSector;
|
||||||
|
|
Loading…
Reference in a new issue