In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Changes

Jump to navigation Jump to search
1,558 bytes added ,  02:14, 6 December 2019
→‎Version history: Document partition changes for group D
Line 482: Line 482:  
Adds [[#0x96 DVDLowGetControlRegister|0x96 DVDLowGetControlRegister]].  Note that although these versions are earlier than group C, they have more features.
 
Adds [[#0x96 DVDLowGetControlRegister|0x96 DVDLowGetControlRegister]].  Note that although these versions are earlier than group C, they have more features.
   −
diFatalError attempts to write 0xdeadbeef to 0xffff0000 before it calls CancelThread and enters an infinite loop.  The message was also changed from "(diFatalError) Fatal error in DI driver: %s\nExiting\n" to "(diFatalError) *** DI FATAL ERROR: %s\nExiting\n".  Something about this changed compiler or decompiler behavior, changing the way uses of that function affect code flow which makes some changes harder to spot.
+
diFatalError attempts to write 0xdeadbeef to 0xffff0000 before it calls CancelThread and enters an infinite loop.  The message was also changed from "(diFatalError) Fatal error in DI driver: %s\nExiting\n" to "(diFatalError) *** DI FATAL ERROR: %s\nExiting\n".  Something about this changed compiler or decompiler behavior, changing the way uses of that function affect code flow which makes some changes harder to spot and creates a lot of changes that aren't actually changes.
   −
clearDriveErrorInterupt and doWaitForCoverClose were moved to be before HandleDICommand instead of after (group C has them at 2020146c/2020149c, and now they are at 20200b80/20200b98).  Furthermore, clearDriveErrorInterupt no longer issues a 0xE0 command to the drive, and always returns success (however, the rest of the code still assumes it can fail, printing a warning in that case).
+
clearDriveErrorInterupt and doWaitForCoverClose were moved to be before handleDiCommand instead of after (group C has them at 2020146c/2020149c, and now they are at 20200b80/20200b98).  Furthermore, clearDriveErrorInterupt no longer issues a 0xE0 command to the drive, and always returns success (however, the rest of the code still assumes it can fail, printing a warning in that case).
   −
There appear to be several changes to disc reading and hashing{{check}}, but they are hard to follow due to the diFatalError change.
+
Improved error messages in doBlockRead.  The debug messages for when a hash failed now also print the first parameter as a pointer (e.g. "(doBlockRead) Data subblock %d failed to verify against H0 Hash (%08x)").  The fatal error message for the first case was changed from "Data failed to verify against H0 Hash" to "Data subblock failed to verify against H0 Hash" (the other messages of the form "H0 Hashes failed to verify" were not changed).  Additionally, if the call to doRawDiskRead fails, the message "(doBlockRead) doRawDiskRead failed, rc=%d\n" is printed (previously nothing was printed); the return value is still that of doRawDiskRead in that case.  Lastly, when a hash fails, the parameter is memset with value 0xA5 prior to calling diFatalError.
 +
 
 +
The implementation of DVDLowRead no longer calls doReadHashEncryptedState if it hasn't been called before (before it checks if the disc is a secure disc).  It never needed to anyways, as it is called after DVDLowReadDiskID, which *must* be called first.  It was also moved to be before doNonConfirmingDiscRead and doReadHashEncryptedState (at 202029e8) instead of after them (at 20202950).
 +
 
 +
doReadHashEncryptedState only considers a disc as secure (and only enables hashing) if both disable hashing (byte 0x60 of the [[Wii Disc]]) and disable encryption (byte 0x61) are false (and also acts as if hashing were disabled if encryption is disabled).  Previously, only the hashing byte controlled whether the disc was secure and hashing was enabled. <!-- This function is a bit of a mess to read due to compiler/decompiler behavior, but this *looks* like an actual change -->
    
The 0x18000-byte H3 hashes buffer is cleared by commonOpenPartition with value 0xA5 if a non-encrypted disc is used (disc encryption at byte 0x61 on the [[Wii Disc]] is 0 and the partition's H3 offset is also 0; disabling encryption but having an H3 offset set will result in a fatal error in both this version and earlier versions).
 
The 0x18000-byte H3 hashes buffer is cleared by commonOpenPartition with value 0xA5 if a non-encrypted disc is used (disc encryption at byte 0x61 on the [[Wii Disc]] is 0 and the partition's H3 offset is also 0; disabling encryption but having an H3 offset set will result in a fatal error in both this version and earlier versions).
303

edits

Navigation menu