Startup-animation

Disassemble Convers+ firmware 7M2T-14C026-AG using IDA Pro
Post Reply
Go4IT
Pro
Posts: 967
Joined: 08 Feb 2019, 12:25

Startup-animation

Post by Go4IT »

Found it for AG-Firmware (preFL):

Code: Select all

MAIN:0001FC02 ; =============== S U B R O U T I N E =======================================
MAIN:0001FC02
MAIN:0001FC02
MAIN:0001FC02 startupAnimaton
MAIN:0001FC02                 PUSH    {R4,LR}
MAIN:0001FC04                 BL      sub_23F16
MAIN:0001FC08                 MOVS    R4, R0
MAIN:0001FC0A                 MOVS    R0, #2
MAIN:0001FC0C                 BL      sub_6264
MAIN:0001FC10                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FC12                 LDR     R0, =0x3001191C ; parm_ptrImgheader
MAIN:0001FC14                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FC16                 BL      j_drawImage
MAIN:0001FC1A                 BL      sub_1F646
MAIN:0001FC1E                 BL      sub_1F378
MAIN:0001FC22                 BL      sub_1F4B0
MAIN:0001FC26                 MOVS    R0, #2
MAIN:0001FC28                 BL      sub_297B2
MAIN:0001FC2C                 LDR     R1, =0x53894    ; Base of string "Menu Control" in all localized versions
MAIN:0001FC2E                 LSLS    R0, R4, #4
MAIN:0001FC30                 ADDS    R0, R0, R4
MAIN:0001FC32                 ADDS    R0, R0, R1      ; R0 = Pointer to localized version of "Menu Control" string
MAIN:0001FC34                 MOVS    R2, #135        ; Y-Pos?
MAIN:0001FC36                 MOVS    R1, #245        ; X-Pos?
MAIN:0001FC38                 BL      drawStringLCD   ; R0 = Pointer to start of C-String to draw
MAIN:0001FC38                                         ; R1 = Y-Pos
MAIN:0001FC38                                         ; R2 = X-Pos
MAIN:0001FC3C                 MOVS    R0, #0
MAIN:0001FC3E                 BL      sub_297B2
MAIN:0001FC42                 BL      sub_2358E
MAIN:0001FC46                 LDR     R4, =50000
MAIN:0001FC48                 MOVS    R0, R4
MAIN:0001FC4A                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC4E                 MOVS    R0, R4
MAIN:0001FC50                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC54                 MOVS    R0, R4
MAIN:0001FC56                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC5A                 MOVS    R0, R4
MAIN:0001FC5C                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC60                 MOVS    R0, R4
MAIN:0001FC62                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC66                 MOVS    R0, R4
MAIN:0001FC68                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC6C                 MOVS    R0, R4
MAIN:0001FC6E                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC72                 MOVS    R0, R4
MAIN:0001FC74                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC78                 MOVS    R0, R4
MAIN:0001FC7A                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC7E                 MOVS    R0, R4
MAIN:0001FC80                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC84                 MOVS    R0, R4
MAIN:0001FC86                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC8A                 MOVS    R0, R4
MAIN:0001FC8C                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC90                 MOVS    R0, R4
MAIN:0001FC92                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC96                 MOVS    R0, R4
MAIN:0001FC98                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FC9C                 MOVS    R0, R4
MAIN:0001FC9E                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FCA2                 MOVS    R0, R4
MAIN:0001FCA4                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FCA8                 MOVS    R0, R4
MAIN:0001FCAA                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FCAE                 MOVS    R0, R4
MAIN:0001FCB0                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FCB4                 MOVS    R0, R4
MAIN:0001FCB6                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FCBA                 MOVS    R0, R4
MAIN:0001FCBC                 BL      delay           ; R0 = Number of microseconds(?) to delay
MAIN:0001FCC0                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FCC2                 LDR     R0, =0x30011EA4 ; parm_ptrImgheader
MAIN:0001FCC4                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FCC6                 BL      j_drawImage
MAIN:0001FCCA                 BL      sub_1F646
MAIN:0001FCCE                 BL      sub_1F378
MAIN:0001FCD2                 BL      sub_1F4B0
MAIN:0001FCD6                 BL      sub_2358E
MAIN:0001FCDA                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FCDC                 LDR     R0, =0x30012AF4 ; parm_ptrImgheader
MAIN:0001FCDE                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FCE0                 BL      j_drawImage
MAIN:0001FCE4                 BL      sub_1F646
MAIN:0001FCE8                 BL      sub_1F378
MAIN:0001FCEC                 BL      sub_1F4B0
MAIN:0001FCF0                 BL      sub_2358E
MAIN:0001FCF4                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FCF6                 LDR     R0, =0x30013AEC ; parm_ptrImgheader
MAIN:0001FCF8                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FCFA                 BL      j_drawImage
MAIN:0001FCFE                 BL      sub_1F646
MAIN:0001FD02                 BL      sub_1F378
MAIN:0001FD06                 BL      sub_1F4B0
MAIN:0001FD0A                 BL      sub_2358E
MAIN:0001FD0E                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FD10                 LDR     R0, =0x30014AE4 ; parm_ptrImgheader
MAIN:0001FD12                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FD14                 BL      j_drawImage
MAIN:0001FD18                 BL      sub_1F646
MAIN:0001FD1C                 BL      sub_1F378
MAIN:0001FD20                 BL      sub_1F4B0
MAIN:0001FD24                 BL      sub_2358E
MAIN:0001FD28                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FD2A                 LDR     R0, =0x30018DEC ; parm_ptrImgheader
MAIN:0001FD2C                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FD2E                 BL      j_drawImage
MAIN:0001FD32                 BL      sub_1F646
MAIN:0001FD36                 BL      sub_1F378
MAIN:0001FD3A                 BL      sub_1F4B0
MAIN:0001FD3E                 BL      sub_2358E
MAIN:0001FD42                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FD44                 LDR     R0, =0x3001BB8C ; parm_ptrImgheader
MAIN:0001FD46                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FD48                 BL      j_drawImage
MAIN:0001FD4C                 BL      sub_1F646
MAIN:0001FD50                 BL      sub_1F378
MAIN:0001FD54                 BL      sub_1F4B0
MAIN:0001FD58                 BL      sub_2358E
MAIN:0001FD5C                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FD5E                 LDR     R0, =0x3001EC84 ; parm_ptrImgheader
MAIN:0001FD60                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FD62                 BL      j_drawImage
MAIN:0001FD66                 BL      sub_1F646
MAIN:0001FD6A                 BL      sub_1F378
MAIN:0001FD6E                 BL      sub_1F4B0
MAIN:0001FD72                 BL      sub_2358E
MAIN:0001FD76                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FD78                 LDR     R0, =0x300207AC ; parm_ptrImgheader
MAIN:0001FD7A                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FD7C                 BL      j_drawImage
MAIN:0001FD80                 BL      sub_1F646
MAIN:0001FD84                 BL      sub_1F378
MAIN:0001FD88                 BL      sub_1F4B0
MAIN:0001FD8C                 BL      sub_2358E
MAIN:0001FD90                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FD92                 LDR     R0, =0x30020DF0 ; parm_ptrImgheader
MAIN:0001FD94                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FD96                 BL      j_drawImage
MAIN:0001FD9A                 BL      sub_1F646
MAIN:0001FD9E                 BL      sub_1F378
MAIN:0001FDA2                 BL      sub_1F4B0
MAIN:0001FDA6                 BL      sub_2358E
MAIN:0001FDAA                 MOVS    R2, #0          ; parm_xPos
MAIN:0001FDAC                 LDR     R0, =0x30021744 ; parm_ptrImgheader
MAIN:0001FDAE                 MOVS    R1, #0          ; parm_yPos
MAIN:0001FDB0                 BL      j_drawImage
MAIN:0001FDB4                 BL      sub_1F646
MAIN:0001FDB8                 BL      sub_1F378
MAIN:0001FDBC                 BL      sub_1F4B0
MAIN:0001FDC0                 BL      sub_2358E
MAIN:0001FDC4                 BL      sub_2358E
MAIN:0001FDC8                 B       loc_1FB70
MAIN:0001FDC8 ; End of function startupAnimaton
Go4IT
Pro
Posts: 967
Joined: 08 Feb 2019, 12:25

Re: Startup-animation code in Firmware (AG)

Post by Go4IT »

So for example, to add a gauge sweep in startup, we could hook a call into this sequence somewhere.
Go4IT
Pro
Posts: 967
Joined: 08 Feb 2019, 12:25

Re: Startup-animation code in Firmware (AG)

Post by Go4IT »

When set PC to 0x1FC02 (regardless of status of IPC, it only needs power applied ;-) the animation is played.
Post Reply