Code: Select all
BL:00003AFC ; R0 = Start address of EEPROM to access (0x0000-0x07FF)
PBL:00003AFC ; aLen = Number of bytes to read from EEPROM/write to EEPROM
PBL:00003AFC ; a3 = ?
PBL:00003AFC ; a4 = ?
PBL:00003AFC ; Attributes:
PBL:00003AFC
PBL:00003AFC ; signed int __fastcall eeprom_3AFC(int inR0_eepromStartAddress, unsigned int inR1_len, int inR2_targetBaseAddress, int inR3)
PBL:00003AFC eeprom_3AFC ; CODE XREF: eeprom_3C10+24↓p
PBL:00003AFC ; PBL:00003C62↓p
PBL:00003AFC
PBL:00003AFC var_2C = -0x2C
PBL:00003AFC var_28 = -0x28
PBL:00003AFC R0 = -0x24
PBL:00003AFC R2 = -0x1C
PBL:00003AFC
PBL:00003AFC PUSH {R4-R7,LR}
PBL:00003AFE PUSH {R0-R3}
PBL:00003B00 MOVS R7, R3
PBL:00003B02 SUB SP, SP, #0xC
PBL:00003B04 MOVS R4, #0
PBL:00003B06 MOVS R5, R1
PBL:00003B08 MOVS R6, #0
PBL:00003B0A B loc_3BDC
PBL:00003B0C ; ---------------------------------------------------------------------------
PBL:00003B0C
PBL:00003B0C loc_3B0C ; CODE XREF: eeprom_3AFC+E6↓j
PBL:00003B0C LDR R0, [SP,#0x30+R0]
PBL:00003B0E ADDS R0, R0, R6
PBL:00003B10 STR R0, [SP,#0x30+var_28]
PBL:00003B12 LSLS R0, R0, #16
PBL:00003B14 LSRS R0, R0, #16
PBL:00003B16 STR R0, [SP,#0x30+var_2C]
PBL:00003B18 BL i2c_initRandomAccessRead ; Send memory location address to EEPROM
PBL:00003B1C LDR R0, [SP,#0x30+var_2C]
PBL:00003B1E BL i2c_sendByte ; Send byte given in R0
PBL:00003B22 BL sub_14D6
PBL:00003B26 CMP R5, #16
PBL:00003B28 BCC loc_3B74
PBL:00003B2A LDR R1, [SP,#0x30+var_28]
PBL:00003B2C MOVS R0, #0
PBL:00003B2E LSLS R2, R1, #0b11100
PBL:00003B30 LSRS R2, R2, #0b11100
PBL:00003B32 MOVS R1, #0b10000
PBL:00003B34 SUBS R1, R1, R2
PBL:00003B36 LDR R2, =I2C_IBAD ; I2C Bus Address Register
PBL:00003B38 B loc_3B6E
PBL:00003B3A ; ---------------------------------------------------------------------------
PBL:00003B3A
PBL:00003B3A loc_3B3A ; CODE XREF: eeprom_3AFC+74↓j
PBL:00003B3A CMP R7, #0
PBL:00003B3C BNE loc_3B48
PBL:00003B3E LDR R3, [SP,#0x30+R2]
PBL:00003B40 ADDS R3, R3, R6
PBL:00003B42 LDRB R3, [R3,R0]
PBL:00003B44 STRB R3, [R2,#(I2C_IBDR - 0xFC0AC000)] ; I2C Bus Data I/O Register (IBDR)
PBL:00003B46 B loc_3B4C
PBL:00003B48 ; ---------------------------------------------------------------------------
PBL:00003B48
PBL:00003B48 loc_3B48 ; CODE XREF: eeprom_3AFC+40↑j
PBL:00003B48 MOVS R3, #0xFF
PBL:00003B4A STRB R3, [R2,#(I2C_IBDR - 0xFC0AC000)] ; I2C Bus Data I/O Register (IBDR)
PBL:00003B4C
PBL:00003B4C loc_3B4C ; CODE XREF: eeprom_3AFC+4A↑j
PBL:00003B4C ; eeprom_3AFC+54↓j
PBL:00003B4C LDRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B4E LSLS R3, R3, #0x1E
PBL:00003B50 BPL loc_3B4C
PBL:00003B52 LDRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B54 MOVS R4, #2
PBL:00003B56 ORRS R3, R4
PBL:00003B58 STRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B5A LDRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B5C MOVS R4, #1
PBL:00003B5E ANDS R3, R4
PBL:00003B60 STRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B62 BEQ loc_3B66
PBL:00003B64 B loc_3BB2
PBL:00003B66 ; ---------------------------------------------------------------------------
PBL:00003B66
PBL:00003B66 loc_3B66 ; CODE XREF: eeprom_3AFC+66↑j
PBL:00003B66 MOVS R4, #0
PBL:00003B68 ADDS R0, #1
PBL:00003B6A LSLS R0, R0, #0x10
PBL:00003B6C LSRS R0, R0, #0x10
PBL:00003B6E
PBL:00003B6E loc_3B6E ; CODE XREF: eeprom_3AFC+3C↑j
PBL:00003B6E CMP R1, R0
PBL:00003B70 BHI loc_3B3A
PBL:00003B72 B loc_3BB2
PBL:00003B74 ; ---------------------------------------------------------------------------
PBL:00003B74
PBL:00003B74 loc_3B74 ; CODE XREF: eeprom_3AFC+2C↑j
PBL:00003B74 LDR R3, [SP,#0x30+R2]
PBL:00003B76 MOVS R0, #0
PBL:00003B78 LDR R2, =I2C_IBAD ; I2C Bus Address Register
PBL:00003B7A ADDS R1, R3, R6
PBL:00003B7C B loc_3BAE
PBL:00003B7E ; ---------------------------------------------------------------------------
PBL:00003B7E
PBL:00003B7E loc_3B7E ; CODE XREF: eeprom_3AFC+B4↓j
PBL:00003B7E CMP R7, #0
PBL:00003B80 BNE loc_3B88
PBL:00003B82 LDRB R3, [R1,R0]
PBL:00003B84 STRB R3, [R2,#(I2C_IBDR - 0xFC0AC000)] ; I2C Bus Data I/O Register (IBDR)
PBL:00003B86 B loc_3B8C
PBL:00003B88 ; ---------------------------------------------------------------------------
PBL:00003B88
PBL:00003B88 loc_3B88 ; CODE XREF: eeprom_3AFC+84↑j
PBL:00003B88 MOVS R3, #0xFF
PBL:00003B8A STRB R3, [R2,#(I2C_IBDR - 0xFC0AC000)] ; I2C Bus Data I/O Register (IBDR)
PBL:00003B8C
PBL:00003B8C loc_3B8C ; CODE XREF: eeprom_3AFC+8A↑j
PBL:00003B8C ; eeprom_3AFC+94↓j
PBL:00003B8C LDRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B8E LSLS R3, R3, #0x1E
PBL:00003B90 BPL loc_3B8C
PBL:00003B92 LDRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B94 MOVS R4, #2
PBL:00003B96 ORRS R3, R4
PBL:00003B98 STRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B9A LDRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003B9C MOVS R4, #1
PBL:00003B9E ANDS R3, R4
PBL:00003BA0 STRB R3, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003BA2 BEQ loc_3BA6
PBL:00003BA4 B loc_3BB2
PBL:00003BA6 ; ---------------------------------------------------------------------------
PBL:00003BA6
PBL:00003BA6 loc_3BA6 ; CODE XREF: eeprom_3AFC+A6↑j
PBL:00003BA6 MOVS R4, #0
PBL:00003BA8 ADDS R0, #1
PBL:00003BAA LSLS R0, R0, #0x10
PBL:00003BAC LSRS R0, R0, #0x10
PBL:00003BAE
PBL:00003BAE loc_3BAE ; CODE XREF: eeprom_3AFC+80↑j
PBL:00003BAE CMP R0, R5
PBL:00003BB0 BCC loc_3B7E
PBL:00003BB2
PBL:00003BB2 loc_3BB2 ; CODE XREF: eeprom_3AFC+68↑j
PBL:00003BB2 ; eeprom_3AFC+76↑j ...
PBL:00003BB2 ADDS R1, R6, R0
PBL:00003BB4 LSLS R6, R1, #0x10
PBL:00003BB6 LSRS R6, R6, #0x10
PBL:00003BB8 SUBS R0, R5, R0
PBL:00003BBA LSLS R5, R0, #0x10
PBL:00003BBC LSRS R5, R5, #0x10
PBL:00003BBE LDR R2, =I2C_IBAD ; I2C Bus Address Register
PBL:00003BC0 LDRB R0, [R2,#(I2C_IBCR - 0xFC0AC000)] ; I2C Bus Control Register (IBCR)
PBL:00003BC2 MOVS R1, #0xDF
PBL:00003BC4 ANDS R0, R1
PBL:00003BC6 STRB R0, [R2,#(I2C_IBCR - 0xFC0AC000)] ; I2C Bus Control Register (IBCR)
PBL:00003BC8
PBL:00003BC8 loc_3BC8 ; CODE XREF: eeprom_3AFC+D0↓j
PBL:00003BC8 LDRB R0, [R2,#(I2C_IBSR - 0xFC0AC000)] ; I2C Bus Status Register (IBSR)
PBL:00003BCA LSLS R0, R0, #0x1A
PBL:00003BCC BMI loc_3BC8
PBL:00003BCE B loc_3BD4
PBL:00003BD0 ; ---------------------------------------------------------------------------
PBL:00003BD0
PBL:00003BD0 loc_3BD0 ; CODE XREF: eeprom_3AFC+DE↓j
PBL:00003BD0 BL sub_14D6
PBL:00003BD4
PBL:00003BD4 loc_3BD4 ; CODE XREF: eeprom_3AFC+D2↑j
PBL:00003BD4 BL eeprom_3AD0
PBL:00003BD8 CMP R0, #0
PBL:00003BDA BNE loc_3BD0
PBL:00003BDC
PBL:00003BDC loc_3BDC ; CODE XREF: eeprom_3AFC+E↑j
PBL:00003BDC CMP R5, #0
PBL:00003BDE BEQ loc_3BE4
PBL:00003BE0 CMP R4, #0
PBL:00003BE2 BEQ loc_3B0C
PBL:00003BE4
PBL:00003BE4 loc_3BE4 ; CODE XREF: eeprom_3AFC+E2↑j
PBL:00003BE4 MOVS R0, R4
PBL:00003BE6 ADD SP, SP, #0x1C
PBL:00003BE8 POP {R4-R7}
PBL:00003BEA POP {R3}
PBL:00003BEC BX R3
PBL:00003BEC ; End of function eeprom_3AFC
PBL:00003BEC
PBL:00003BEC ; ---------------------------------------------------------------------------
PBL:00003BEE ALIGN 0x10
PBL:00003BF0 off_3BF0 DCD I2C_IBAD ; DATA XREF: i2c_enable↑r
PBL:00003BF0 ; i2c_disable↑r ...
PBL:00003BF4 off_3BF4 DCD i2c_varDeviceSelectByte
PBL:00003BF4 ; DATA XREF: i2c_initRandomAccessRead+1A↑r
PBL:00003BF4 ; i2c_eepromRead+20↑r
PBL:00003BF8 ; ---------------------------------------------------------------------------
PBL:00003BF8 PUSH {R4,LR}
PBL:00003BFA BL i2c_enable
PBL:00003BFE MOVS R0, #0
PBL:00003C00 ; START OF FUNCTION CHUNK FOR eeprom_readAll
PBL:00003C00 ; ADDITIONAL PARENT FUNCTION eeprom_3C10
PBL:00003C00
PBL:00003C00 eeprom_3C00 ; CODE XREF: PBL:00003C0E↓j
PBL:00003C00 ; eeprom_3C10:eeprom_3C38↓j ...
PBL:00003C00 POP {R4}
PBL:00003C02 POP {R3}
PBL:00003C04 BX R3
PBL:00003C04 ; END OF FUNCTION CHUNK FOR eeprom_readAll
PBL:00003C06 ; ---------------------------------------------------------------------------
PBL:00003C06 PUSH {R4,LR}
PBL:00003C08 BL i2c_disable
PBL:00003C0C MOVS R0, #0
PBL:00003C0E B eeprom_3C00