// FROM SPEC... Uint64 a0_long_checksum =0; Uint64 a0_long_checksum01 =0; Uint64 a0_long_checksum23 =0; void calculate_checksum(register Uint32 *start_address, register Uint32 *end_address) { Uint64 lcs = a0_long_checksum; //use local register variable for speed?? TAW not sur that works while(start_address < end_address) { lcs = lcs + *start_address ; lcs = lcs + (Uint32)*(start_address + 1) ; start_address = start_address + 2; } a0_long_checksum = lcs; } void Pflash_GetChecksum01(void) { a0_long_checksum = 0; Uint32* start_address = (Uint32*) PGM_BLOCK0_ADDRESS; // 0x00000000 Uint32* end_address = (Uint32*) (PGM_BLOCK2_ADDRESS -8);// 0x00010000 - 8 calculate_checksum(start_address,end_address ); // result is in a0_long_checksum a0_long_checksum01 =a0_long_checksum; }