DEV9: Cleanup ATA.

This commit is contained in:
lightningterror 2023-06-16 20:36:38 +02:00
parent 7b428bb6b0
commit c77d8b3709
5 changed files with 65 additions and 82 deletions

View File

@ -1,5 +1,5 @@
/* PCSX2 - PS2 Emulator for PCs /* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2020 PCSX2 Dev Team * Copyright (C) 2002-2023 PCSX2 Dev Team
* *
* PCSX2 is free software: you can redistribute it and/or modify it under the terms * PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found- * of the GNU Lesser General Public License as published by the Free Software Found-
@ -46,15 +46,15 @@ void ATA::WritePaddedString(u8* data, int* index, std::string value, u32 len)
void ATA::CreateHDDinfo(u64 sizeSectors) void ATA::CreateHDDinfo(u64 sizeSectors)
{ {
const u16 sectorSize = 512; constexpr u16 sectorSize = 512;
DevCon.WriteLn("DEV9: HddSize : %i", sizeSectors * sectorSize / (1024 * 1024)); DevCon.WriteLn("DEV9: HddSize : %i", sizeSectors * sectorSize / (1024 * 1024));
const u64 nbSectors = sizeSectors; const u64 nbSectors = sizeSectors;
DevCon.WriteLn("DEV9: nbSectors : %i", nbSectors); DevCon.WriteLn("DEV9: nbSectors : %i", nbSectors);
memset(&identifyData, 0, sizeof(identifyData)); memset(&identifyData, 0, sizeof(identifyData));
//Defualt CHS translation //Defualt CHS translation
const u16 defHeads = 16; constexpr u16 defHeads = 16;
const u16 defSectors = 63; constexpr u16 defSectors = 63;
u64 cylinderslong = std::min<u64>(nbSectors, 16514064) / defHeads / defSectors; u64 cylinderslong = std::min<u64>(nbSectors, 16514064) / defHeads / defSectors;
const u16 defCylinders = (u16)std::min<u64>(cylinderslong, UINT16_MAX); const u16 defCylinders = (u16)std::min<u64>(cylinderslong, UINT16_MAX);
@ -94,7 +94,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
//Default Num of heads (Retired) //Default Num of heads (Retired)
WriteUInt16(identifyData, &index, defHeads); //word 3 WriteUInt16(identifyData, &index, defHeads); //word 3
//Number of unformatted bytes per track (Retired) //Number of unformatted bytes per track (Retired)
WriteUInt16(identifyData, &index, (u16)(sectorSize * defSectors)); //word 4 WriteUInt16(identifyData, &index, static_cast<u16>(sectorSize * defSectors)); //word 4
//Number of unformatted bytes per sector (Retired) //Number of unformatted bytes per sector (Retired)
WriteUInt16(identifyData, &index, sectorSize); //word 5 WriteUInt16(identifyData, &index, sectorSize); //word 5
//Default Number of sectors per track (Retired) //Default Number of sectors per track (Retired)
@ -133,7 +133,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
//Capabilities (0-Shall be set to one to indicate a device specific Standby timer value minimum) //Capabilities (0-Shall be set to one to indicate a device specific Standby timer value minimum)
index += 1 * 2; //word 50 index += 1 * 2; //word 50
//PIO data transfer cycle timing mode (Obsolete) //PIO data transfer cycle timing mode (Obsolete)
WriteUInt16(identifyData, &index, (u8)((pioMode > 2 ? pioMode : 2) << 8)); //word 51 WriteUInt16(identifyData, &index, static_cast<u8>((pioMode > 2 ? pioMode : 2) << 8)); //word 51
//DMA data transfer cycle timing mode (Obsolete) //DMA data transfer cycle timing mode (Obsolete)
WriteUInt16(identifyData, &index, 0); //word 52 WriteUInt16(identifyData, &index, 0); //word 52
// //
@ -150,23 +150,23 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
//Number of current sectors per track //Number of current sectors per track
WriteUInt16(identifyData, &index, curSectors); //word 56 WriteUInt16(identifyData, &index, curSectors); //word 56
//Current capacity in sectors //Current capacity in sectors
WriteUInt32(identifyData, &index, (u32)curOldsize); //word 57-58 WriteUInt32(identifyData, &index, static_cast<u32>(curOldsize)); //word 57-58
//PIO READ/WRITE Multiple setting //PIO READ/WRITE Multiple setting
/* /*
* bit 7-0: Current setting for number of logical sectors that shall be transferred per DRQ * bit 7-0: Current setting for number of logical sectors that shall be transferred per DRQ
* data block on READ/WRITE Multiple commands * data block on READ/WRITE Multiple commands
* bit 8: Multiple sector setting is valid * bit 8: Multiple sector setting is valid
*/ */
WriteUInt16(identifyData, &index, (u16)(curMultipleSectorsSetting | (1 << 8))); //word 59 WriteUInt16(identifyData, &index, static_cast<u16>(curMultipleSectorsSetting | (1 << 8))); //word 59
//Total number of user addressable logical sectors //Total number of user addressable logical sectors
WriteUInt32(identifyData, &index, (u32)(nbSectors < 268435456 ? nbSectors : 268435456)); //word 60-61 WriteUInt32(identifyData, &index, static_cast<u32>(nbSectors < 268435456 ? nbSectors : 268435456)); //word 60-61
//DMA modes //DMA modes
/* /*
* bits 0-7: Singleword modes supported (0,1,2) * bits 0-7: Singleword modes supported (0,1,2)
* bits 8-15: Transfer mode active * bits 8-15: Transfer mode active
*/ */
if (sdmaMode > 0) if (sdmaMode > 0)
WriteUInt16(identifyData, &index, (u16)(0x07 | (1 << (sdmaMode + 8)))); //word 62 WriteUInt16(identifyData, &index, static_cast<u16>(0x07 | (1 << (sdmaMode + 8)))); //word 62
else else
WriteUInt16(identifyData, &index, 0x07); //word 62 WriteUInt16(identifyData, &index, 0x07); //word 62
//DMA Modes //DMA Modes
@ -175,7 +175,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
* bits 8-15: Transfer mode active * bits 8-15: Transfer mode active
*/ */
if (mdmaMode > 0) if (mdmaMode > 0)
WriteUInt16(identifyData, &index, (u16)(0x07 | (1 << (mdmaMode + 8)))); //word 63 WriteUInt16(identifyData, &index, static_cast<u16>(0x07 | (1 << (mdmaMode + 8)))); //word 63
else else
WriteUInt16(identifyData, &index, 0x07); //word 63 WriteUInt16(identifyData, &index, 0x07); //word 63
//Bit 0-7-PIO modes supported (0,1,2,3,4) //Bit 0-7-PIO modes supported (0,1,2,3,4)
@ -220,7 +220,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
* bit 14: NOP * bit 14: NOP
* bit 15: (Obsolete) * bit 15: (Obsolete)
*/ */
WriteUInt16(identifyData, &index, (u16)((1 << 14) | (1 << 5) | /*(1 << 1) | (1 << 10) |*/ 1)); //word 82 WriteUInt16(identifyData, &index, static_cast<u16>((1 << 14) | (1 << 5) | /*(1 << 1) | (1 << 10) |*/ 1)); //word 82
//Supported Feature Sets (83) //Supported Feature Sets (83)
/* /*
* bit 0: DOWNLOAD MICROCODE * bit 0: DOWNLOAD MICROCODE
@ -239,7 +239,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
* bit 13: FLUSH CACHE EXT * bit 13: FLUSH CACHE EXT
* bit 14: 1 * bit 14: 1
*/ */
WriteUInt16(identifyData, &index, (u16)((1 << 14) | (1 << 13) | (1 << 12) /*| (1 << 8)*/ | ((lba48Supported ? 1 : 0) << 10))); //word 83 WriteUInt16(identifyData, &index, static_cast<u16>((1 << 14) | (1 << 13) | (1 << 12) /*| (1 << 8)*/ | ((lba48Supported ? 1 : 0) << 10))); //word 83
//Supported Feature Sets (84) //Supported Feature Sets (84)
/* /*
* bit 0: Smart error logging * bit 0: Smart error logging
@ -256,19 +256,19 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
* bit 13: IDLE IMMEDIATE with UNLOAD FEATURE * bit 13: IDLE IMMEDIATE with UNLOAD FEATURE
* bit 14: 1 * bit 14: 1
*/ */
WriteUInt16(identifyData, &index, (u16)((1 << 14) | (1 << 1) | 1)); //word 84 WriteUInt16(identifyData, &index, static_cast<u16>((1 << 14) | (1 << 1) | 1)); //word 84
//Command set/feature enabled/supported (See word 82) //Command set/feature enabled/supported (See word 82)
WriteUInt16(identifyData, &index, (u16)((fetSmartEnabled << 0) | (fetSecurityEnabled << 1) | (fetWriteCacheEnabled << 5) | (fetHostProtectedAreaEnabled << 10) | (1 << 14))); //Fixed //word 85 WriteUInt16(identifyData, &index, static_cast<u16>((fetSmartEnabled << 0) | (fetSecurityEnabled << 1) | (fetWriteCacheEnabled << 5) | (fetHostProtectedAreaEnabled << 10) | (1 << 14))); //Fixed //word 85
//Command set/feature enabled/supported (See word 83) //Command set/feature enabled/supported (See word 83)
// clang-format off // clang-format off
WriteUInt16(identifyData, &index, (u16)( WriteUInt16(identifyData, &index, static_cast<u16>(
/*(1 << 8) | //SET MAX */ /*(1 << 8) | //SET MAX */
((lba48Supported ? 1 : 0) << 10) | //Fixed ((lba48Supported ? 1 : 0) << 10) | //Fixed
(1 << 12) | //Fixed (1 << 12) | //Fixed
(1 << 13))); //Fixed //word 86 (1 << 13))); //Fixed //word 86
//Command set/feature enabled/supported (See word 84) //Command set/feature enabled/supported (See word 84)
WriteUInt16(identifyData, &index, (u16)((1 << 14) | (1 << 1) | 1)); WriteUInt16(identifyData, &index, static_cast<u16>((1 << 14) | (1 << 1) | 1));
WriteUInt16(identifyData, &index, (u16)( WriteUInt16(identifyData, &index, static_cast<u16>(
(1) | //Fixed (1) | //Fixed
((1) << 1))); //Fixed //word 87 ((1) << 1))); //Fixed //word 87
// clang-format on // clang-format on
@ -278,7 +278,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
* bits 8-15: Transfer mode active * bits 8-15: Transfer mode active
*/ */
if (udmaMode > 0) if (udmaMode > 0)
WriteUInt16(identifyData, &index, (u16)(0x7f | (1 << (udmaMode + 8)))); //word 88 WriteUInt16(identifyData, &index, static_cast<u16>(0x7f | (1 << (udmaMode + 8)))); //word 88
else else
WriteUInt16(identifyData, &index, 0x7f); //word 88 WriteUInt16(identifyData, &index, 0x7f); //word 88
//Time required for security erase unit completion //Time required for security erase unit completion
@ -306,7 +306,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
* bit 14: 1 * bit 14: 1
*/ */
index = 93 * 2; index = 93 * 2;
WriteUInt16(identifyData, &index, (u16)(1 | (1 << 14) | 0x2000)); //word 93 WriteUInt16(identifyData, &index, static_cast<u16>(1 | (1 << 14) | 0x2000)); //word 93
//Vendors recommended acoustic management value. //Vendors recommended acoustic management value.
//94 //94
//Stream Minimum Request Size //Stream Minimum Request Size
@ -319,7 +319,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
//98-99 //98-99
//Total Number of User Addressable Sectors for the 48-bit Address feature set. //Total Number of User Addressable Sectors for the 48-bit Address feature set.
index = 100 * 2; index = 100 * 2;
WriteUInt64(identifyData, &index, (u16)nbSectors); WriteUInt64(identifyData, &index, static_cast<u16>(nbSectors));
index -= 2; index -= 2;
WriteUInt16(identifyData, &index, 0); //truncate to 48bits WriteUInt16(identifyData, &index, 0); //truncate to 48bits
//Streaming Transfer Time - PIO //Streaming Transfer Time - PIO
@ -334,7 +334,7 @@ void ATA::CreateHDDinfo(u64 sizeSectors)
* bit 14: 1 * bit 14: 1
*/ */
index = 106 * 2; index = 106 * 2;
WriteUInt16(identifyData, &index, (u16)((1 << 14) | 0)); WriteUInt16(identifyData, &index, static_cast<u16>((1 << 14) | 0));
//Inter-seek delay for ISO-7779acoustic testing in microseconds //Inter-seek delay for ISO-7779acoustic testing in microseconds
//107 //107
//WNN //WNN
@ -384,7 +384,7 @@ void ATA::CreateHDDinfoCsum() //Is this correct?
counter += 0xA5; counter += 0xA5;
identifyData[510] = 0xA5; identifyData[510] = 0xA5;
identifyData[511] = (u8)(255 - counter + 1); identifyData[511] = static_cast<u8>(255 - counter + 1);
counter = 0; counter = 0;
for (int i = 0; i < (512); i++) for (int i = 0; i < (512); i++)

View File

@ -1,5 +1,5 @@
/* PCSX2 - PS2 Emulator for PCs /* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2020 PCSX2 Dev Team * Copyright (C) 2002-2023 PCSX2 Dev Team
* *
* PCSX2 is free software: you can redistribute it and/or modify it under the terms * PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found- * of the GNU Lesser General Public License as published by the Free Software Found-
@ -381,35 +381,35 @@ void ATA::Write16(u32 addr, u16 value)
//DevCon.WriteLn("DEV9: *ATA_R_FEATURE 16bit write at address %x, value %x", addr, value); //DevCon.WriteLn("DEV9: *ATA_R_FEATURE 16bit write at address %x, value %x", addr, value);
ClearHOB(); ClearHOB();
regFeatureHOB = regFeature; regFeatureHOB = regFeature;
regFeature = (u8)value; regFeature = static_cast<u8>(value);
break; break;
case ATA_R_NSECTOR: case ATA_R_NSECTOR:
//DevCon.WriteLn("DEV9: *ATA_R_NSECTOR 16bit write at address %x, value %x", addr, value); //DevCon.WriteLn("DEV9: *ATA_R_NSECTOR 16bit write at address %x, value %x", addr, value);
ClearHOB(); ClearHOB();
regNsectorHOB = regNsector; regNsectorHOB = regNsector;
regNsector = (u8)value; regNsector = static_cast<u8>(value);
break; break;
case ATA_R_SECTOR: case ATA_R_SECTOR:
//DevCon.WriteLn("DEV9: *ATA_R_SECTOR 16bit write at address %x, value %x", addr, value); //DevCon.WriteLn("DEV9: *ATA_R_SECTOR 16bit write at address %x, value %x", addr, value);
ClearHOB(); ClearHOB();
regSectorHOB = regSector; regSectorHOB = regSector;
regSector = (u8)value; regSector = static_cast<u8>(value);
break; break;
case ATA_R_LCYL: case ATA_R_LCYL:
//DevCon.WriteLn("DEV9: *ATA_R_LCYL 16bit write at address %x, value %x", addr, value); //DevCon.WriteLn("DEV9: *ATA_R_LCYL 16bit write at address %x, value %x", addr, value);
ClearHOB(); ClearHOB();
regLcylHOB = regLcyl; regLcylHOB = regLcyl;
regLcyl = (u8)value; regLcyl = static_cast<u8>(value);
break; break;
case ATA_R_HCYL: case ATA_R_HCYL:
//DevCon.WriteLn("DEV9: *ATA_R_HCYL 16bit write at address %x, value %x", addr, value); //DevCon.WriteLn("DEV9: *ATA_R_HCYL 16bit write at address %x, value %x", addr, value);
ClearHOB(); ClearHOB();
regHcylHOB = regHcyl; regHcylHOB = regHcyl;
regHcyl = (u8)value; regHcyl = static_cast<u8>(value);
break; break;
case ATA_R_SELECT: case ATA_R_SELECT:
//DevCon.WriteLn("DEV9: *ATA_R_SELECT 16bit write at address %x, value %x", addr, value); //DevCon.WriteLn("DEV9: *ATA_R_SELECT 16bit write at address %x, value %x", addr, value);
regSelect = (u8)value; regSelect = static_cast<u8>(value);
//bus->ifs[0].select = (val & ~0x10) | 0xa0; //bus->ifs[0].select = (val & ~0x10) | 0xa0;
//bus->ifs[1].select = (val | 0x10) | 0xa0; //bus->ifs[1].select = (val | 0x10) | 0xa0;
break; break;
@ -502,18 +502,18 @@ s64 ATA::HDD_GetLBA()
} }
else else
{ {
return ((s64)regHcylHOB << 40) | return (static_cast<s64>(regHcylHOB) << 40) |
((s64)regLcylHOB << 32) | (static_cast<s64>(regLcylHOB) << 32) |
((s64)regSectorHOB << 24) | (static_cast<s64>(regSectorHOB) << 24) |
((s64)regHcyl << 16) | (static_cast<s64>(regHcyl) << 16) |
((s64)regLcyl << 8) | (static_cast<s64>(regLcyl) << 8) |
regSector; regSector;
} }
} }
else else
{ {
regStatus |= (u8)ATA_STAT_ERR; regStatus |= static_cast<u8>(ATA_STAT_ERR);
regError |= (u8)ATA_ERR_ABORT; regError |= static_cast<u8>(ATA_ERR_ABORT);
Console.Error("DEV9: ATA: Tried to get LBA address while LBA mode disabled"); Console.Error("DEV9: ATA: Tried to get LBA address while LBA mode disabled");
//(c.Nh + h).Ns+(s-1) //(c.Nh + h).Ns+(s-1)
@ -528,19 +528,19 @@ void ATA::HDD_SetLBA(s64 sectorNum)
{ {
if (!lba48) if (!lba48)
{ {
regSelect = (u8)((regSelect & 0xf0) | (int)((sectorNum >> 24) & 0x0f)); regSelect = static_cast<u8>((regSelect & 0xf0) | static_cast<int>((sectorNum >> 24) & 0x0f));
regHcyl = (u8)(sectorNum >> 16); regHcyl = static_cast<u8>(sectorNum >> 16);
regLcyl = (u8)(sectorNum >> 8); regLcyl = static_cast<u8>(sectorNum >> 8);
regSector = (u8)(sectorNum); regSector = static_cast<u8>(sectorNum);
} }
else else
{ {
regSector = (u8)sectorNum; regSector = static_cast<u8>(sectorNum);
regLcyl = (u8)(sectorNum >> 8); regLcyl = static_cast<u8>(sectorNum >> 8);
regHcyl = (u8)(sectorNum >> 16); regHcyl = static_cast<u8>(sectorNum >> 16);
regSectorHOB = (u8)(sectorNum >> 24); regSectorHOB = static_cast<u8>(sectorNum >> 24);
regLcylHOB = (u8)(sectorNum >> 32); regLcylHOB = static_cast<u8>(sectorNum >> 32);
regHcylHOB = (u8)(sectorNum >> 40); regHcylHOB = static_cast<u8>(sectorNum >> 40);
} }
} }
else else
@ -560,35 +560,27 @@ bool ATA::HDD_CanSeek()
bool ATA::HDD_CanAccess(int* sectors) bool ATA::HDD_CanAccess(int* sectors)
{ {
s64 lba; s64 maxLBA = std::min<s64>(EmuConfig.DEV9.HddSizeSectors, hddImageSize / 512) - 1;
s64 posStart;
s64 posEnd;
s64 maxLBA;
maxLBA = std::min<s64>(EmuConfig.DEV9.HddSizeSectors, hddImageSize / 512) - 1;
if ((regSelect & 0x40) == 0) //CHS mode if ((regSelect & 0x40) == 0) //CHS mode
maxLBA = std::min<s64>(maxLBA, curCylinders * curHeads * curSectors); maxLBA = std::min<s64>(maxLBA, curCylinders * curHeads * curSectors);
lba = HDD_GetLBA(); const s64 posStart = HDD_GetLBA();
if (lba == -1) if (posStart == -1)
return false; return false;
//DevCon.WriteLn("DEV9: LBA :%i", lba); //DevCon.WriteLn("DEV9: LBA :%i", lba);
posStart = lba;
if (posStart > maxLBA) if (posStart > maxLBA)
{ {
*sectors = -1; *sectors = -1;
return false; return false;
} }
posEnd = posStart + *sectors; const s64 posEnd = posStart + *sectors;
if (posEnd > maxLBA) if (posEnd > maxLBA)
{ {
const s64 overshoot = posEnd - maxLBA; const s64 overshoot = posEnd - maxLBA;
s64 space = *sectors - overshoot; s64 space = *sectors - overshoot;
*sectors = (int)space; *sectors = static_cast<int>(space);
return false; return false;
} }

View File

@ -1,5 +1,5 @@
/* PCSX2 - PS2 Emulator for PCs /* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2020 PCSX2 Dev Team * Copyright (C) 2002-2023 PCSX2 Dev Team
* *
* PCSX2 is free software: you can redistribute it and/or modify it under the terms * PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found- * of the GNU Lesser General Public License as published by the Free Software Found-
@ -105,7 +105,7 @@ bool ATA::IO_Write()
return false; return false;
} }
u64 imagePos = entry.sector * 512; const u64 imagePos = entry.sector * 512;
if (FileSystem::FSeek64(hddImage, imagePos, SEEK_SET) != 0) if (FileSystem::FSeek64(hddImage, imagePos, SEEK_SET) != 0)
{ {
Console.Error("DEV9: ATA: File seek error"); Console.Error("DEV9: ATA: File seek error");
@ -209,12 +209,13 @@ void ATA::IO_SparseCacheLoad()
memset(&hddSparseBlock[readSize], 0, hddSparseBlockSize - readSize); memset(&hddSparseBlock[readSize], 0, hddSparseBlockSize - readSize);
} }
// Store file pointer.
const s64 orgPos = FileSystem::FTell64(hddImage);
// Flush so that we know what is allocated. // Flush so that we know what is allocated.
std::fflush(hddImage); std::fflush(hddImage);
// Store file pointer.
const s64 orgPos = FileSystem::FTell64(hddImage);
pxAssert(orgPos != -1);
#ifdef _WIN32 #ifdef _WIN32
// FlushFileBuffers is required, hddSparseBlock differs from actual file without it. // FlushFileBuffers is required, hddSparseBlock differs from actual file without it.
FlushFileBuffers(hddNativeHandle); FlushFileBuffers(hddNativeHandle);
@ -234,11 +235,6 @@ void ATA::IO_SparseCacheLoad()
memset(hddSparseBlock.get(), 0, hddSparseBlockSize); memset(hddSparseBlock.get(), 0, hddSparseBlockSize);
hddSparseBlockValid = true; hddSparseBlockValid = true;
#if defined(PCSX2_DEBUG) || defined(PCSX2_DEVBUILD) #if defined(PCSX2_DEBUG) || defined(PCSX2_DEVBUILD)
// Store file pointer.
const s64 orgPos = FileSystem::FTell64(hddImage);
pxAssert(orgPos != -1);
//Load into check buffer. //Load into check buffer.
FileSystem::FSeek64(hddImage, HddSparseStart, SEEK_SET); FileSystem::FSeek64(hddImage, HddSparseStart, SEEK_SET);
@ -281,11 +277,6 @@ void ATA::IO_SparseCacheLoad()
memset(hddSparseBlock.get(), 0, hddSparseBlockSize); memset(hddSparseBlock.get(), 0, hddSparseBlockSize);
hddSparseBlockValid = true; hddSparseBlockValid = true;
#if defined(PCSX2_DEBUG) || defined(PCSX2_DEVBUILD) #if defined(PCSX2_DEBUG) || defined(PCSX2_DEVBUILD)
// Store file pointer.
const s64 orgPos = FileSystem::FTell64(hddImage);
pxAssert(orgPos != -1);
// Load into check buffer. // Load into check buffer.
FileSystem::FSeek64(hddImage, HddSparseStart, SEEK_SET); FileSystem::FSeek64(hddImage, HddSparseStart, SEEK_SET);
@ -512,8 +503,8 @@ bool ATA::HDD_CanAssessOrSetError()
if (!HDD_CanAccess(&nsector)) if (!HDD_CanAccess(&nsector))
{ {
//Read what we can //Read what we can
regStatus |= (u8)ATA_STAT_ERR; regStatus |= static_cast<u8>(ATA_STAT_ERR);
regError |= (u8)ATA_ERR_ID; regError |= static_cast<u8>(ATA_ERR_ID);
if (nsector == -1) if (nsector == -1)
{ {
PostCmdNoData(); PostCmdNoData();

View File

@ -1,5 +1,5 @@
/* PCSX2 - PS2 Emulator for PCs /* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2020 PCSX2 Dev Team * Copyright (C) 2002-2023 PCSX2 Dev Team
* *
* PCSX2 is free software: you can redistribute it and/or modify it under the terms * PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found- * of the GNU Lesser General Public License as published by the Free Software Found-
@ -53,7 +53,7 @@ void ATA::HDD_InitDevParameters()
DevCon.WriteLn("DEV9: HDD_InitDevParameters"); DevCon.WriteLn("DEV9: HDD_InitDevParameters");
curSectors = regNsector; curSectors = regNsector;
curHeads = (u8)((regSelect & 0x7) + 1); curHeads = static_cast<u8>((regSelect & 0x7) + 1);
PostCmdNoData(); PostCmdNoData();
} }
@ -106,7 +106,7 @@ void ATA::HDD_SetFeatures()
return; return;
case 0x03: //Set transfer mode case 0x03: //Set transfer mode
{ {
const u16 xferMode = (u16)regNsector; //Set Transfer mode const u16 xferMode = static_cast<u16>(regNsector); //Set Transfer mode
const int mode = xferMode & 0x07; const int mode = xferMode & 0x07;
switch ((xferMode) >> 3) switch ((xferMode) >> 3)

View File

@ -1,5 +1,5 @@
/* PCSX2 - PS2 Emulator for PCs /* PCSX2 - PS2 Emulator for PCs
* Copyright (C) 2002-2020 PCSX2 Dev Team * Copyright (C) 2002-2023 PCSX2 Dev Team
* *
* PCSX2 is free software: you can redistribute it and/or modify it under the terms * PCSX2 is free software: you can redistribute it and/or modify it under the terms
* of the GNU Lesser General Public License as published by the Free Software Found- * of the GNU Lesser General Public License as published by the Free Software Found-
@ -42,7 +42,7 @@ void HddCreate::Start()
void HddCreate::WriteImage(std::string hddPath, u64 fileBytes, u64 zeroSizeBytes) void HddCreate::WriteImage(std::string hddPath, u64 fileBytes, u64 zeroSizeBytes)
{ {
constexpr int buffsize = 4 * 1024; constexpr int buffsize = 4 * 1024;
u8 buff[buffsize] = {0}; // 4kb. const u8 buff[buffsize] = {0}; // 4kb.
if (FileSystem::FileExists(hddPath.c_str())) if (FileSystem::FileExists(hddPath.c_str()))
{ {