Nice work. May I ask from which part of the object code you got this info from?
I'm not sure the page info table is constant across car models & ecm versions.
You need to locate e.g. the following function in your image, then you know the address of
the eeprom_info_table and can check wether there exist different versions:
; INPUT:
; R12 = ptrBuffer
; R13 = pageNumber (0..31)
; OUTPUT:
; R4 = 0 (checksum is OK), != 0 (checksum is wrong)
verify_eeprom_checksum_from_buffer:
MOV [-R0], R9
MOV R4, R13 ; Get pageNumber
SHL R4, #1
MOV R5, [R4+#eeprom_info_table] ; val = eeprom_info_table[pageNumber]
AND R5, #0040h
SHR R5, #6 ; cksumBit = (val & 40) >> 6
MOV R15, R13 ; Get pageNumber
SUB R15, R5 ; baseCksum = pageNumber - cksumBit
MOV R4, #14
MOV R14, R4 ; len = 14
MOV R5, R12 ; Get ptrBuffer
ADD R5, R4 ; ptrLast = ptrBuffer + len
MOV R9, [R5] ; checksum = *ptrLast (old checksum)
JMPR cc_UC, L_enter_loop
L_loop:
SUB R14, #1 ; len--
MOV R4, R14 ; Get len
MOV R2, R12 ; Get ptrBuffer
ADD R2, R4
MOVB RL4, [R2] ; data = *ptrBuffer + len
MOVBZ R4, RL4
ADD R9, R4 ; checksum += data
L_enter_loop:
CMP R14, #0
JMPR cc_SGT, L_loop ; (len > 0) ?
MOV R4, R9
ADD R4, R15 ; Return checksum + baseCksum
MOV R9, [R0+]
RETS