| 105 | } |
| 106 | |
| 107 | static void write_sector(std::vector<bool>& bits, |
| 108 | unsigned& cursor, |
| 109 | const Victor9kEncoderProto::TrackdataProto& trackdata, |
| 110 | const Sector& sector) |
| 111 | { |
| 112 | write_one_bits(bits, cursor, trackdata.pre_header_sync_bits()); |
| 113 | write_bits(bits, cursor, VICTOR9K_SECTOR_RECORD, 10); |
| 114 | |
| 115 | uint8_t encodedTrack = sector.logicalCylinder | (sector.logicalHead << 7); |
| 116 | uint8_t encodedSector = sector.logicalSector; |
| 117 | write_bytes(bits, |
| 118 | cursor, |
| 119 | Bytes{ |
| 120 | encodedTrack, |
| 121 | encodedSector, |
| 122 | (uint8_t)(encodedTrack + encodedSector), |
| 123 | }); |
| 124 | |
| 125 | write_gap(bits, cursor, trackdata.post_header_gap_bits()); |
| 126 | |
| 127 | write_one_bits(bits, cursor, trackdata.pre_data_sync_bits()); |
| 128 | write_bits(bits, cursor, VICTOR9K_DATA_RECORD, 10); |
| 129 | |
| 130 | write_bytes(bits, cursor, sector.data); |
| 131 | |
| 132 | Bytes checksum(2); |
| 133 | checksum.writer().write_le16(sumBytes(sector.data)); |
| 134 | write_bytes(bits, cursor, checksum); |
| 135 | write_gap(bits, cursor, trackdata.post_data_gap_bits()); |
| 136 | } |
| 137 | |
| 138 | class Victor9kEncoder : public Encoder |
| 139 | { |
no test coverage detected