diff --git a/src/fsparser.cpp b/src/fsparser.cpp index 092a9ad..90a7f2d 100644 --- a/src/fsparser.cpp +++ b/src/fsparser.cpp @@ -76,13 +76,22 @@ int FsParser::parseHeader() case 0x0B: /* only present when bit_security is set */ _hdr["SecurityBit"] = "ON"; break; - case 0x10: - /* unknown conversion */ - _hdr["loading_rate"] = to_string(0xff & (val >> 16)); - _compressed = 0x01 & (val >> 13); + case 0x10: { + unsigned rate = (val >> 16) & 0xff; + if (rate) { + rate &= 0x7f; + rate ^= 0x44; + rate = (rate >> 2) + 1; + rate = 125000000/rate; + } else { + rate = 2500000; // default + } + _hdr["LoadingRate"] = to_string(rate); + _compressed = (val >> 13) & 1; _hdr["Compress"] = (_compressed) ? "ON" : "OFF"; - _hdr["ProgramDoneBypass"] = (0x01 & (val >> 12))?"ON":"OFF"; + _hdr["ProgramDoneBypass"] = ((val >> 12) & 1) ? "ON" : "OFF"; break; + } case 0x12: /* unknown */ break; case 0x51: