| 57 | } |
| 58 | |
| 59 | void decodeDataRecord() override |
| 60 | { |
| 61 | if (readRaw64() != DATA_BITS) |
| 62 | return; |
| 63 | |
| 64 | const auto& bits = readRawBits(129 * 16); |
| 65 | const auto& bytes = decodeFmMfm(bits).slice(0, 129); |
| 66 | _sector->data = bytes.slice(0, 128); |
| 67 | |
| 68 | uint8_t wantChecksum = bytes.reader().seek(128).read_8(); |
| 69 | uint8_t gotChecksum = ~sumBytes(_sector->data); |
| 70 | _sector->status = |
| 71 | (wantChecksum == gotChecksum) ? Sector::OK : Sector::BAD_CHECKSUM; |
| 72 | } |
| 73 | |
| 74 | private: |
| 75 | const TartuDecoderProto& _config; |