Если отбросить шелуху, то код, формирующий из rom-файла RKM на языке Си выглядит следующим образом:
write_byte_to_file(file_out, 0);
write_byte_to_file(file_out, 0);
write_byte_to_file(file_out, (uint8_t)(filesize >> 8 & 0x00FF));
write_byte_to_file(file_out, (uint8_t)(0x00FF & filesize));
while ( ( x = fgetc( file ) ) != EOF ) {
write_byte_to_file(file_out, (uint8_t)(0x00FF & x));
if (i++ % 2 == 0) {
csm_lo ^= (uint32_t)0x00FF & x;
} else {
csm_hi ^= (uint32_t)0x00FF & x;
}
}
write_byte_to_file(file_out, csm_hi);
write_byte_to_file(file_out, csm_lo);
Значения csm_hi и csm_lo - это и есть старший и младший байты контрольной суммы.