view pirelli/fw-disasm @ 403:50c0fac9a4a8

compal/boot/c118-dfboot.disasm: new analysis
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 15 Jan 2023 00:54:33 +0000
parents db000ea183a5
children
line wrap: on
line source

.inttext exception vectors:

   40000:	ea0000d0	b	0x40348
   40004:	ea0000d2	b	0x40354
   40008:	ea0000d4	b	0x40360
   4000c:	ea0000d6	b	0x4036c
   40010:	ea0000d8	b	0x40378
   40014:	ea0000bc	b	0x4030c
   40018:	ea0000c5	b	0x40334

_c_int00:
   4001c:	02a102a1
   40020:	028302a1
   40024:	02c00e85
   40028:	002a0040
   4002c:	fffffb00
   40030:	fffef006
   40034:	00000008
   40038:	fffffd00
   4003c:	ffff9800
   40040:	fffffb10
   40044:	ffffff08
   40048:	20021081
   4004c:	f7ff0800
   40050:	00000000
   40054:	00536e48	; cinit

_INT_Initialize:
   40058:	e51f1024	ldr	r1, =0xffff9800	; via 0x4003c
   4005c:	e15f21ba	ldrh	r2, =0x2002	; via 0x4004a
   40060:	e1c120b0	strh	r2, [r1]
   40064:	e5912000	ldr	r2, [r1]
   40068:	e2022001	and	r2, r2, #1
   4006c:	e3520001	cmp	r2, #1
   40070:	0afffffb	beq	0x40064
   40074:	e51f1044	ldr	r1, =0xfffffd00	; via 0x40038
   40078:	e15f23b8	ldrh	r2, =0x1081	; via 0x40048
   4007c:	e1c120b0	strh	r2, [r1]
   40080:	e51f1048	ldr	r1, =0xfffffb10	; via 0x40040
   40084:	e15f23be	ldrh	r2, =0xf7ff	; via 0x4004e
   40088:	e1d100b0	ldrh	r0, [r1]
   4008c:	e0000002	and	r0, r0, r2
   40090:	e1c100b0	strh	r0, [r1]
   40094:	e51f1058	ldr	r1, =0xffffff08	; via 0x40044
   40098:	e15f25b0	ldrh	r2, =0x0	; via 0x40050
   4009c:	e1c120b0	strh	r2, [r1]
   400a0:	e51f107c	ldr	r1, =0xfffffb00	; via 0x4002c
   400a4:	e15f29b0	ldrh	r2, =0x2a1	; via 0x4001c
   400a8:	e1c120b0	strh	r2, [r1]
   400ac:	e15f29b6	ldrh	r2, =0x2a1	; via 0x4001e
   400b0:	e1c120b2	strh	r2, [r1, #2]
   400b4:	e15f29bc	ldrh	r2, =0x2a1	; via 0x40020
   400b8:	e1c120b4	strh	r2, [r1, #4]
   400bc:	e15f2ab2	ldrh	r2, =0x283	; via 0x40022
   400c0:	e1c120b6	strh	r2, [r1, #6]
   400c4:	e15f2ab8	ldrh	r2, =0xe85	; via 0x40024
   400c8:	e1c120ba	strh	r2, [r1, #10]	; 0xa
   400cc:	e15f2abe	ldrh	r2, =0x2c0	; via 0x40026
   400d0:	e1c120bc	strh	r2, [r1, #12]	; 0xc
   400d4:	e15f2bb4	ldrh	r2, =0x40	; via 0x40028
   400d8:	e1c120b8	strh	r2, [r1, #8]
   400dc:	e15f2bba	ldrh	r2, =0x2a	; via 0x4002a
   400e0:	e1c120be	strh	r2, [r1, #14]	; 0xe
   400e4:	e51f10bc	ldr	r1, =0xfffef006	; via 0x40030
   400e8:	e1d120b0	ldrh	r2, [r1]
   400ec:	e51f00c0	ldr	r0, =0x8	; via 0x40034
   400f0:	e1800002	orr	r0, r0, r2
   400f4:	e1c100b0	strh	r0, [r1]
   400f8:	e10f0000	mrs	r0, CPSR
   400fc:	e3c0001f	bic	r0, r0, #31	; 0x1f
   40100:	e3800013	orr	r0, r0, #19	; 0x13
   40104:	e38000c0	orr	r0, r0, #192	; 0xc0
   40108:	e129f000	msr	CPSR_fc, r0
   4010c:	e59f0340	ldr	r0, =0x10000e8	; via 0x40454
   40110:	e3a01e46	mov	r1, #1120	; 0x460
   40114:	e2411004	sub	r1, r1, #4
   40118:	e0802001	add	r2, r0, r1
   4011c:	e1a0d002	mov	sp, r2
   40120:	e92d000f	stmdb	sp!, {r0, r1, r2, r3}
   40124:	e59f0318	ldr	r0, =0x1000be8	; via 0x40444
   40128:	e59f2318	ldr	r2, =0x17751ec	; via 0x40448
   4012c:	e0422000	sub	r2, r2, r0
   40130:	e3a01000	mov	r1, #0
   40134:	eb0000e1	bl	0x404c0		; _INT_memset
   40138:	e59f030c	ldr	r0, =0x800000	; via 0x4044c
   4013c:	e59f230c	ldr	r2, =0x82d1ec	; via 0x40450
   40140:	e0422000	sub	r2, r2, r0
   40144:	e3a01000	mov	r1, #0
   40148:	eb0000dc	bl	0x404c0		; _INT_memset
   4014c:	e8bd000f	ldmia	sp!, {r0, r1, r2, r3}
   40150:	e3a00001	mov	r0, #1
   40154:	e59f12fc	ldr	r1, =0x1775074	; via 0x40458
   40158:	e5810000	str	r0, [r1]
   4015c:	e59f02f0	ldr	r0, =0x10000e8	; via 0x40454
   40160:	e3a01e46	mov	r1, #1120	; 0x460
   40164:	e2411004	sub	r1, r1, #4
   40168:	e0802001	add	r2, r0, r1
   4016c:	e1a0a000	mov	r10, r0
   40170:	e59f32e4	ldr	r3, =0x1775044	; via 0x4045c
   40174:	e583a000	str	r10, [r3]
   40178:	e1a0d002	mov	sp, r2
   4017c:	e59f32dc	ldr	r3, =0x175635c	; via 0x40460
   40180:	e583d000	str	sp, [r3]
   40184:	e3a01080	mov	r1, #128	; 0x80
   40188:	e0822001	add	r2, r2, r1
   4018c:	e10f0000	mrs	r0, CPSR
   40190:	e3c0001f	bic	r0, r0, #31	; 0x1f
   40194:	e3800012	orr	r0, r0, #18	; 0x12
   40198:	e129f000	msr	CPSR_fc, r0
   4019c:	e1a0d002	mov	sp, r2
   401a0:	e3a01c02	mov	r1, #512	; 0x200
   401a4:	e0822001	add	r2, r2, r1
   401a8:	e10f0000	mrs	r0, CPSR
   401ac:	e3c0001f	bic	r0, r0, #31	; 0x1f
   401b0:	e3800011	orr	r0, r0, #17	; 0x11
   401b4:	e129f000	msr	CPSR_fc, r0
   401b8:	e1a0d002	mov	sp, r2
   401bc:	e10f0000	mrs	r0, CPSR
   401c0:	e3c0001f	bic	r0, r0, #31	; 0x1f
   401c4:	e3800017	orr	r0, r0, #23	; 0x17
   401c8:	e129f000	msr	CPSR_fc, r0
   401cc:	e59fd29c	ldr	sp, =0x1000050	; via 0x40470
   401d0:	e10f0000	mrs	r0, CPSR
   401d4:	e3c0001f	bic	r0, r0, #31	; 0x1f
   401d8:	e380001b	orr	r0, r0, #27	; 0x1b
   401dc:	e129f000	msr	CPSR_fc, r0
   401e0:	e59fd288	ldr	sp, =0x1000050	; via 0x40470
   401e4:	e10f0000	mrs	r0, CPSR
   401e8:	e3c0001f	bic	r0, r0, #31	; 0x1f
   401ec:	e3800013	orr	r0, r0, #19	; 0x13
   401f0:	e129f000	msr	CPSR_fc, r0
   401f4:	e59f3268	ldr	r3, =0x176f458	; via 0x40464
   401f8:	e2822004	add	r2, r2, #4
   401fc:	e5832000	str	r2, [r3]
   40200:	e3a01b01	mov	r1, #1024	; 0x400
   40204:	e3c11003	bic	r1, r1, #3
   40208:	e0822001	add	r2, r2, r1
   4020c:	e59f3254	ldr	r3, =0x176f4dc	; via 0x40468
   40210:	e5831000	str	r1, [r3]
   40214:	e3a01002	mov	r1, #2
   40218:	e59f324c	ldr	r3, =0x176f4ec	; via 0x4046c
   4021c:	e5831000	str	r1, [r3]
   40220:	e1a04002	mov	r4, r2
   40224:	eb0e99e4	bl	0x3e69bc	; _f_load_int_mem
   40228:	e1a02004	mov	r2, r4
   4022c:	e59f1228	ldr	r1, =0x1775044	; via 0x4045c
   40230:	e5910000	ldr	r0, [r1]
   40234:	e3a030fe	mov	r3, #254	; 0xfe
   40238:	e5c03000	strb	r3, [r0]
   4023c:	e5c03001	strb	r3, [r0, #1]
   40240:	e5c03002	strb	r3, [r0, #2]
   40244:	e5c03003	strb	r3, [r0, #3]
   40248:	e4903004	ldr	r3, [r0], #4
   4024c:	e4803004	str	r3, [r0], #4
   40250:	e1500002	cmp	r0, r2
   40254:	bafffffc	blt	0x4024c
   40258:	e51f020c	ldr	r0, =0x536e48	; via 0x40054
   4025c:	e3700001	cmn	r0, #1
   40260:	1b000084	blne	0x40478
   40264:	e1a00002	mov	r0, r2
   40268:	ea0eda34	b	0x3f6b40	; _INC_Initialize

$INT_Vectors_Loaded:
   4026c:	4778		bx	pc
   4026e:	46c0		nop			(mov r8, r8)
   40270:	eaffffff	b	0x40274
_INT_Vectors_Loaded:
   40274:	e3a00001	mov	r0, #1
   40278:	e12fff1e	bx	lr

$INT_Setup_Vector:
   4027c:	4778		bx	pc
   4027e:	46c0		nop			(mov r8, r8)
   40280:	eaffffff	b	0x40284
_INT_Setup_Vector:
   40284:	e3a00000	mov	r0, #0
   40288:	e12fff1e	bx	lr

$INT_EnableIRQ:
   4028c:	4778		bx	pc
   4028e:	46c0		nop			(mov r8, r8)
   40290:	e10f0000	mrs	r0, CPSR
   40294:	e3c0001f	bic	r0, r0, #31	; 0x1f
   40298:	e3800012	orr	r0, r0, #18	; 0x12
   4029c:	e129f000	msr	CPSR_fc, r0
   402a0:	e10f0000	mrs	r0, CPSR
   402a4:	e3c000c0	bic	r0, r0, #192	; 0xc0
   402a8:	e129f000	msr	CPSR_fc, r0
   402ac:	e3c0001f	bic	r0, r0, #31	; 0x1f
   402b0:	e3800013	orr	r0, r0, #19	; 0x13
   402b4:	e129f000	msr	CPSR_fc, r0
   402b8:	e28f0001	add	r0, pc, #1
   402bc:	e12fff10	bx	r0
   402c0:	4770		bx	lr

$INT_DisableIRQ:
   402c2:	4778		bx	pc
   402c4:	46c0		nop			(mov r8, r8)
   402c6:	46c0		nop			(mov r8, r8)
   402c8:	e10f0000	mrs	r0, CPSR
   402cc:	e3c0001f	bic	r0, r0, #31	; 0x1f
   402d0:	e3800012	orr	r0, r0, #18	; 0x12
   402d4:	e129f000	msr	CPSR_fc, r0
   402d8:	e10f0000	mrs	r0, CPSR
   402dc:	e38000c0	orr	r0, r0, #192	; 0xc0
   402e0:	e129f000	msr	CPSR_fc, r0
   402e4:	e3c0001f	bic	r0, r0, #31	; 0x1f
   402e8:	e3800013	orr	r0, r0, #19	; 0x13
   402ec:	e129f000	msr	CPSR_fc, r0
   402f0:	e28f0001	add	r0, pc, #1
   402f4:	e12fff10	bx	r0
   402f8:	4770		bx	lr

$INT_Retrieve_Shell:
   402fa:	4778		bx	pc
   402fc:	46c0		nop			(mov r8, r8)
   402fe:	46c0		nop			(mov r8, r8)
   40300:	eaffffff	b	0x40304
_INT_Retrieve_Shell:
   40304:	e3a00000	mov	r0, #0
   40308:	e12fff1e	bx	lr

INT_IRQ:
   4030c:	e92d000f	stmdb	sp!, {r0, r1, r2, r3}
   40310:	e14f0000	mrs	r0, SPSR
   40314:	e3100080	tst	r0, #128	; 0x80
   40318:	1a000003	bne	0x4032c
   4031c:	e24e3004	sub	r3, lr, #4
   40320:	eb1ff729	bl	0x83dfcc	; _TCT_Interrupt_Context_Save
   40324:	eb0e3915	bl	0x3ce780	; _IQ_IRQ_isr
   40328:	ea1ff76e	b	0x83e0e8	; _TCT_Interrupt_Context_Restore
   4032c:	e8bd000f	ldmia	sp!, {r0, r1, r2, r3}
   40330:	e25ef004	subs	pc, lr, #4

INT_FIQ:
   40334:	e92d000f	stmdb	sp!, {r0, r1, r2, r3}
   40338:	e24e3004	sub	r3, lr, #4
   4033c:	eb1ff722	bl	0x83dfcc	; _TCT_Interrupt_Context_Save
   40340:	eb0e3919	bl	0x3ce7ac	; _IQ_FIQ_isr
   40344:	ea1ff767	b	0x83e0e8	; _TCT_Interrupt_Context_Restore

; exception handlers
   40348:	e92d1800	stmdb	sp!, {r11, r12}
   4034c:	e3a0b001	mov	r11, #1
   40350:	ea00000c	b	0x40388
   40354:	e92d1800	stmdb	sp!, {r11, r12}
   40358:	e3a0b002	mov	r11, #2
   4035c:	ea000009	b	0x40388
   40360:	e92d1800	stmdb	sp!, {r11, r12}
   40364:	e3a0b003	mov	r11, #3
   40368:	ea000006	b	0x40388
   4036c:	e92d1800	stmdb	sp!, {r11, r12}
   40370:	e3a0b004	mov	r11, #4
   40374:	ea000003	b	0x40388
   40378:	e59fd0f0	ldr	sp, =0x1000050	; via 0x40470
   4037c:	e92d1800	stmdb	sp!, {r11, r12}
   40380:	e3a0b005	mov	r11, #5
   40384:	eaffffff	b	0x40388
   40388:	e59fc0e4	ldr	r12, =0x1000050	; via 0x40474
   4038c:	e58ce03c	str	lr, [r12, #60]	; 0x3c
   40390:	e88c07ff	stmia	r12, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10}
   40394:	e8bd0003	ldmia	sp!, {r0, r1}
   40398:	e58c002c	str	r0, [r12, #44]	; 0x2c
   4039c:	e58c1030	str	r1, [r12, #48]	; 0x30
   403a0:	e14f0000	mrs	r0, SPSR
   403a4:	e58c0040	str	r0, [r12, #64]	; 0x40
   403a8:	e10f1000	mrs	r1, CPSR
   403ac:	e3c1201f	bic	r2, r1, #31	; 0x1f
   403b0:	e200001f	and	r0, r0, #31	; 0x1f
   403b4:	e0800002	add	r0, r0, r2
   403b8:	e129f000	msr	CPSR_fc, r0
   403bc:	e58cd034	str	sp, [r12, #52]	; 0x34
   403c0:	e58ce038	str	lr, [r12, #56]	; 0x38
   403c4:	e129f001	msr	CPSR_fc, r1
   403c8:	e38ba4de	orr	r10, r11, #3724541952	; 0xde000000
   403cc:	e38aa8ad	orr	r10, r10, #11337728	; 0xad0000
   403d0:	e58ca044	str	r10, [r12, #68]	; 0x44
   403d4:	e1a0000b	mov	r0, r11
   403d8:	ea0eda7a	b	0x3f6dc8	; _dar_exception

$exception:
   403dc:	a000		add	r0, pc, #0
   403de:	4700		bx	r0

_exception:
   403e0:	e59fc08c	ldr	r12, =0x1000050	; via 0x40474
   403e4:	e59cb034	ldr	r11, [r12, #52]	; 0x34
   403e8:	e28cc048	add	r12, r12, #72	; 0x48
   403ec:	e35b0502	cmp	r11, #8388608	; 0x800000
   403f0:	ba00000d	blt	0x4042c
   403f4:	e3a00722	mov	r0, #8912896	; 0x880000
   403f8:	e2400014	sub	r0, r0, #20	; 0x14
   403fc:	e15b0000	cmp	r11, r0
   40400:	ba000005	blt	0x4041c
   40404:	e35b0401	cmp	r11, #16777216	; 0x1000000
   40408:	ba000007	blt	0x4042c
   4040c:	e3a00612	mov	r0, #18874368	; 0x1200000
   40410:	e2400014	sub	r0, r0, #20	; 0x14
   40414:	e15b0000	cmp	r11, r0
   40418:	aa000003	bge	0x4042c
   4041c:	e8bb03ff	ldmia	r11!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9}
   40420:	e8ac03ff	stmia	r12!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9}
   40424:	e8bb03ff	ldmia	r11!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9}
   40428:	e8ac03ff	stmia	r12!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9}
   4042c:	e59f0020	ldr	r0, =0x10000e8	; via 0x40454
   40430:	e3a01eae	mov	r1, #2784	; 0xae0
   40434:	e2811080	add	r1, r1, #128	; 0x80
   40438:	e0802001	add	r2, r0, r1
   4043c:	e1a0d002	mov	sp, r2
   40440:	ea0eda66	b	0x3f6de0	; _dar_reset

   40444:	01000be8	.bss
   40448:	017751ec	end
   4044c:	00800000	_S_D_Mem
   40450:	0082d1ec	_E_D_Mem
   40454:	010000e8	stack_segment
   40458:	01775074	_INT_Loaded_Flag
   4045c:	01775044	_TCT_System_Limit
   40460:	0175635c	_TCD_System_Stack
   40464:	0176f458	_TMD_HISR_Stack_Ptr
   40468:	0176f4dc	_TMD_HISR_Stack_Size
   4046c:	0176f4ec	_TMD_HISR_Priority
   40470:	01000050	exception_stack
   40474:	01000050	_xdump_buffer

_auto_init:
   40478:	ea00000c	b	0x404b0
   4047c:	e4901004	ldr	r1, [r0], #4
   40480:	e3530003	cmp	r3, #3
   40484:	84904004	ldrhi	r4, [r0], #4
   40488:	84814004	strhi	r4, [r1], #4
   4048c:	82433004	subhi	r3, r3, #4
   40490:	94d04001	ldrlsb	r4, [r0], #1
   40494:	94c14001	strlsb	r4, [r1], #1
   40498:	92433001	subls	r3, r3, #1
   4049c:	e3530000	cmp	r3, #0
   404a0:	1afffff6	bne	0x40480
   404a4:	e2103003	ands	r3, r0, #3
   404a8:	12633004	rsbne	r3, r3, #4
   404ac:	10800003	addne	r0, r0, r3
   404b0:	e4903004	ldr	r3, [r0], #4
   404b4:	e3530000	cmp	r3, #0
   404b8:	1affffef	bne	0x4047c
   404bc:	e1a0f00e	mov	pc, lr

_INT_memset:
   404c0:	e92d4001	stmdb	sp!, {r0, lr}
   404c4:	e3100003	tst	r0, #3
   404c8:	0a000006	beq	0x404e8
   404cc:	e3520000	cmp	r2, #0
   404d0:	84c01001	strhib	r1, [r0], #1
   404d4:	82522001	subhis	r2, r2, #1
   404d8:	83100003	tsthi	r0, #3
   404dc:	1afffffb	bne	0x404d0
   404e0:	e3520000	cmp	r2, #0
   404e4:	08bd8001	ldmeqia	sp!, {r0, pc}
   404e8:	e20110ff	and	r1, r1, #255	; 0xff
   404ec:	e1811401	orr	r1, r1, r1, lsl #8
   404f0:	e3520004	cmp	r2, #4
   404f4:	3a000012	bcc	0x40544
   404f8:	e1811801	orr	r1, r1, r1, lsl #16
   404fc:	e3520008	cmp	r2, #8
   40500:	3a00000d	bcc	0x4053c
   40504:	e1a0e001	mov	lr, r1
   40508:	e3520010	cmp	r2, #16	; 0x10
   4050c:	3a000008	bcc	0x40534
   40510:	e92d0010	stmdb	sp!, {r4}
   40514:	e1a04001	mov	r4, r1
   40518:	e1a0c001	mov	r12, r1
   4051c:	e242300f	sub	r3, r2, #15	; 0xf
   40520:	e202200f	and	r2, r2, #15	; 0xf
   40524:	e8a05012	stmia	r0!, {r1, r4, r12, lr}
   40528:	e2533010	subs	r3, r3, #16	; 0x10
   4052c:	8afffffc	bhi	0x40524
   40530:	e8bd0010	ldmia	sp!, {r4}
   40534:	e3120008	tst	r2, #8
   40538:	18a04002	stmneia	r0!, {r1, lr}
   4053c:	e3120004	tst	r2, #4
   40540:	14801004	strne	r1, [r0], #4
   40544:	e3120002	tst	r2, #2
   40548:	10c010b2	strneh	r1, [r0], #2
   4054c:	e3120001	tst	r2, #1
   40550:	15c01000	strneb	r1, [r0]
   40554:	e8bd8001	ldmia	sp!, {r0, pc}

_INT_memcpy:
   40558:	e3520000	cmp	r2, #0
   4055c:	012fff1e	bxeq	lr
   40560:	e92d4001	stmdb	sp!, {r0, lr}
   40564:	e3110003	tst	r1, #3
   40568:	1a00002b	bne	0x4061c
   4056c:	e3100003	tst	r0, #3
   40570:	1a00002f	bne	0x40634
   40574:	e3520010	cmp	r2, #16	; 0x10
   40578:	3a000008	bcc	0x405a0
   4057c:	e92d0010	stmdb	sp!, {r4}
   40580:	e2422010	sub	r2, r2, #16	; 0x10
   40584:	e8b15018	ldmia	r1!, {r3, r4, r12, lr}
   40588:	e8a05018	stmia	r0!, {r3, r4, r12, lr}
   4058c:	e2522010	subs	r2, r2, #16	; 0x10
   40590:	2afffffb	bcs	0x40584
   40594:	e8bd0010	ldmia	sp!, {r4}
   40598:	e2922010	adds	r2, r2, #16	; 0x10
   4059c:	08bd8001	ldmeqia	sp!, {r0, pc}
   405a0:	e212300c	ands	r3, r2, #12	; 0xc
   405a4:	0a00000d	beq	0x405e0
   405a8:	e3d2200c	bics	r2, r2, #12	; 0xc
   405ac:	e24fc010	sub	r12, pc, #16	; 0x10
   405b0:	e08cf103	add	pc, r12, r3, lsl #2
   405b4:	e4913004	ldr	r3, [r1], #4
   405b8:	e4803004	str	r3, [r0], #4
   405bc:	08bd8001	ldmeqia	sp!, {r0, pc}
   405c0:	ea000006	b	0x405e0
   405c4:	e8b11008	ldmia	r1!, {r3, r12}
   405c8:	e8a01008	stmia	r0!, {r3, r12}
   405cc:	08bd8001	ldmeqia	sp!, {r0, pc}
   405d0:	ea000002	b	0x405e0
   405d4:	e8b15008	ldmia	r1!, {r3, r12, lr}
   405d8:	e8a05008	stmia	r0!, {r3, r12, lr}
   405dc:	08bd8001	ldmeqia	sp!, {r0, pc}
   405e0:	e2522001	subs	r2, r2, #1
   405e4:	124f3004	subne	r3, pc, #4
   405e8:	1083f202	addne	pc, r3, r2, lsl #4
   405ec:	e4d13001	ldrb	r3, [r1], #1
   405f0:	e4c03001	strb	r3, [r0], #1
   405f4:	e8bd8001	ldmia	sp!, {r0, pc}
   405f8:	e0d130b2	ldrh	r3, [r1], #2
   405fc:	e0c030b2	strh	r3, [r0], #2
   40600:	e8bd8001	ldmia	sp!, {r0, pc}
   40604:	e1a00000	mov	r0, r0
   40608:	e0d130b2	ldrh	r3, [r1], #2
   4060c:	e0c030b2	strh	r3, [r0], #2
   40610:	e4d13001	ldrb	r3, [r1], #1
   40614:	e4c03001	strb	r3, [r0], #1
   40618:	e8bd8001	ldmia	sp!, {r0, pc}
   4061c:	e4d13001	ldrb	r3, [r1], #1
   40620:	e4c03001	strb	r3, [r0], #1
   40624:	e2522001	subs	r2, r2, #1
   40628:	08bd8001	ldmeqia	sp!, {r0, pc}
   4062c:	e3110003	tst	r1, #3
   40630:	1afffff9	bne	0x4061c
   40634:	e3100001	tst	r0, #1
   40638:	1a000013	bne	0x4068c
   4063c:	e3100002	tst	r0, #2
   40640:	0affffcb	beq	0x40574
   40644:	e2522004	subs	r2, r2, #4
   40648:	3a000007	bcc	0x4066c
   4064c:	e4913004	ldr	r3, [r1], #4
   40650:	e0c030b4	strh	r3, [r0], #4
   40654:	e1a03823	mov	r3, r3, lsr #16
   40658:	e14030b2	strh	r3, [r0, #-2]
   4065c:	e2522004	subs	r2, r2, #4
   40660:	2afffff9	bcs	0x4064c
   40664:	e3720004	cmn	r2, #4
   40668:	08bd8001	ldmeqia	sp!, {r0, pc}
   4066c:	e2922002	adds	r2, r2, #2
   40670:	20d130b2	ldrcsh	r3, [r1], #2
   40674:	20c030b2	strcsh	r3, [r0], #2
   40678:	22422002	subcs	r2, r2, #2
   4067c:	e2922001	adds	r2, r2, #1
   40680:	24d13001	ldrcsb	r3, [r1], #1
   40684:	24c03001	strcsb	r3, [r0], #1
   40688:	e8bd8001	ldmia	sp!, {r0, pc}
   4068c:	e2522004	subs	r2, r2, #4
   40690:	3a000009	bcc	0x406bc
   40694:	e4913004	ldr	r3, [r1], #4
   40698:	e4c03004	strb	r3, [r0], #4
   4069c:	e1a03423	mov	r3, r3, lsr #8
   406a0:	e5403003	strb	r3, [r0, #-3]
   406a4:	e1a03423	mov	r3, r3, lsr #8
   406a8:	e5403002	strb	r3, [r0, #-2]
   406ac:	e1a03423	mov	r3, r3, lsr #8
   406b0:	e5403001	strb	r3, [r0, #-1]
   406b4:	e2522004	subs	r2, r2, #4
   406b8:	2afffff5	bcs	0x40694
   406bc:	e2922004	adds	r2, r2, #4
   406c0:	08bd8001	ldmeqia	sp!, {r0, pc}
   406c4:	e4d13001	ldrb	r3, [r1], #1
   406c8:	e4c03001	strb	r3, [r0], #1
   406cc:	e2522001	subs	r2, r2, #1
   406d0:	1afffffb	bne	0x406c4
   406d4:	e8bd8001	ldmia	sp!, {r0, pc}

  2e21bc:	b510		push	{r4, lr}
  2e21be:	2400		mov	r4, #0
  2e21c0:	489d		ldr	r0, =0x8036a8	; via 0x2e2438
  2e21c2:	6800		ldr	r0, [r0, #0]
  2e21c4:	2802		cmp	r0, #2
  2e21c6:	d804		bhi	0x2e21d2
  2e21c8:	f0d1 ff6d	bl	0x3b40a6
  2e21cc:	2800		cmp	r0, #0
  2e21ce:	d100		bne	0x2e21d2
  2e21d0:	2401		mov	r4, #1
  2e21d2:	1c20		add	r0, r4, #0
  2e21d4:	bd10		pop	{r4, pc}

$pwr_start_CI_charging:
  2e21d6:	b510		push	{r4, lr}
  2e21d8:	b083		sub	sp, #12	; 0xc
  2e21da:	1c04		add	r4, r0, #0
  2e21dc:	4997		ldr	r1, =0x1774b7a	; via 0x2e243c
  2e21de:	2000		mov	r0, #0
  2e21e0:	8008		strh	r0, [r1, #0]
; start of MV100-matching code
  2e21e2:	48f8		ldr	r0, =0xa0020	; via 0x2e25c4
  2e21e4:	9000		str	r0, [sp, #0]
  2e21e6:	a0f9		add	r0, pc, #996	; 0x3e4
  2e21e8:	2111		mov	r1, #17	; 0x11
  2e21ea:	2200		mov	r2, #0
  2e21ec:	43d2		mvn	r2, r2
  2e21ee:	2305		mov	r3, #5
  2e21f0:	f0f8 fd20	bl	0x3dac34
  2e21f4:	207d		mov	r0, #125	; 0x7d
  2e21f6:	00c0		lsl	r0, r0, #3
  2e21f8:	4344		mul	r4, r0
  2e21fa:	1c20		add	r0, r4, #0
  2e21fc:	4990		ldr	r1, =0x357	; via 0x2e2440
  2e21fe:	f115 f815	bl	0x3f722c	; I$DIV
  2e2202:	4668		mov	r0, sp
  2e2204:	8101		strh	r1, [r0, #8]
  2e2206:	2001		mov	r0, #1
  2e2208:	213a		mov	r1, #58	; 0x3a
  2e220a:	2202		mov	r2, #2
  2e220c:	f066 fffe	bl	0x34920c
  2e2210:	2001		mov	r0, #1
  2e2212:	2132		mov	r1, #50	; 0x32
  2e2214:	466a		mov	r2, sp
  2e2216:	8912		ldrh	r2, [r2, #8]
  2e2218:	f066 fff8	bl	0x34920c
  2e221c:	2001		mov	r0, #1
  2e221e:	213a		mov	r1, #58	; 0x3a
  2e2220:	2203		mov	r2, #3
  2e2222:	f066 fff3	bl	0x34920c
  2e2226:	48e8		ldr	r0, =0x1774e70	; via 0x2e25c8
  2e2228:	6800		ldr	r0, [r0, #0]
  2e222a:	2102		mov	r1, #2
  2e222c:	6041		str	r1, [r0, #4]
; end of MV100-matching code
  2e222e:	4985		ldr	r1, =0x17749b8	; via 0x2e2444
  2e2230:	2001		mov	r0, #1
  2e2232:	7008		strb	r0, [r1, #0]
  2e2234:	b003		add	sp, #12	; 0xc
  2e2236:	bd10		pop	{r4, pc}

$pwr_start_CV_charging:
  2e2238:	b510		push	{r4, lr}
  2e223a:	b083		sub	sp, #12	; 0xc
  2e223c:	1c04		add	r4, r0, #0
  2e223e:	497f		ldr	r1, =0x1774b7a	; via 0x2e243c
  2e2240:	2001		mov	r0, #1
  2e2242:	8008		strh	r0, [r1, #0]
  2e2244:	48df		ldr	r0, =0xa0020	; via 0x2e25c4
  2e2246:	9000		str	r0, [sp, #0]
  2e2248:	a0e5		add	r0, pc, #916	; 0x394
  2e224a:	2111		mov	r1, #17	; 0x11
  2e224c:	2200		mov	r2, #0
  2e224e:	43d2		mvn	r2, r2
  2e2250:	2305		mov	r3, #5
  2e2252:	f0f8 fcef	bl	0x3dac34
  2e2256:	3414		add	r4, #20	; 0x14
  2e2258:	0420		lsl	r0, r4, #16
  2e225a:	0c02		lsr	r2, r0, #16
  2e225c:	497a		ldr	r1, =0x801746	; via 0x2e2448
  2e225e:	2000		mov	r0, #0
  2e2260:	5e08		ldrsh	r0, [r1, r0]
  2e2262:	1a10		sub	r0, r2, r0
  2e2264:	0280		lsl	r0, r0, #10
  2e2266:	4979		ldr	r1, =0x801734	; via 0x2e244c
  2e2268:	8809		ldrh	r1, [r1, #0]
  2e226a:	f114 ffc7	bl	0x3f71fc	; U$DIV
  2e226e:	4668		mov	r0, sp
  2e2270:	8101		strh	r1, [r0, #8]
  2e2272:	8900		ldrh	r0, [r0, #8]
  2e2274:	4976		ldr	r1, =0x17749ca	; via 0x2e2450
  2e2276:	8008		strh	r0, [r1, #0]
  2e2278:	4976		ldr	r1, =0x17749c6	; via 0x2e2454
  2e227a:	8008		strh	r0, [r1, #0]
  2e227c:	2000		mov	r0, #0
  2e227e:	4976		ldr	r1, =0x17749c8	; via 0x2e2458
  2e2280:	8008		strh	r0, [r1, #0]
  2e2282:	4976		ldr	r1, =0x17749c0	; via 0x2e245c
  2e2284:	8008		strh	r0, [r1, #0]
  2e2286:	4a76		ldr	r2, =0x17749c4	; via 0x2e2460
  2e2288:	2103		mov	r1, #3
  2e228a:	8011		strh	r1, [r2, #0]
  2e228c:	4975		ldr	r1, =0x17749c2	; via 0x2e2464
  2e228e:	8008		strh	r0, [r1, #0]
  2e2290:	4668		mov	r0, sp
  2e2292:	8902		ldrh	r2, [r0, #8]
  2e2294:	48cb		ldr	r0, =0xa0020	; via 0x2e25c4
  2e2296:	9000		str	r0, [sp, #0]
  2e2298:	a0d6		add	r0, pc, #856	; 0x358
  2e229a:	2113		mov	r1, #19	; 0x13
  2e229c:	2305		mov	r3, #5
  2e229e:	f0f8 fcc9	bl	0x3dac34
  2e22a2:	2001		mov	r0, #1
  2e22a4:	213a		mov	r1, #58	; 0x3a
  2e22a6:	2200		mov	r2, #0
  2e22a8:	f066 ffb0	bl	0x34920c
  2e22ac:	2001		mov	r0, #1
  2e22ae:	2132		mov	r1, #50	; 0x32
  2e22b0:	466a		mov	r2, sp
  2e22b2:	8912		ldrh	r2, [r2, #8]
  2e22b4:	f066 ffaa	bl	0x34920c
  2e22b8:	2001		mov	r0, #1
  2e22ba:	213a		mov	r1, #58	; 0x3a
  2e22bc:	2201		mov	r2, #1
  2e22be:	f066 ffa5	bl	0x34920c
  2e22c2:	48c1		ldr	r0, =0x1774e70	; via 0x2e25c8
  2e22c4:	6801		ldr	r1, [r0, #0]
  2e22c6:	2003		mov	r0, #3
  2e22c8:	6048		str	r0, [r1, #4]
  2e22ca:	f04b ffbc	bl	0x32e246
  2e22ce:	2002		mov	r0, #2
  2e22d0:	f7cf fae5	bl	0x2b189e
  2e22d4:	2001		mov	r0, #1
  2e22d6:	2122		mov	r1, #34	; 0x22
  2e22d8:	2200		mov	r2, #0
  2e22da:	f066 ff97	bl	0x34920c
  2e22de:	2002		mov	r0, #2
  2e22e0:	f7cf fadd	bl	0x2b189e
  2e22e4:	4857		ldr	r0, =0x17749b8	; via 0x2e2444
  2e22e6:	2101		mov	r1, #1
  2e22e8:	7001		strb	r1, [r0, #0]
  2e22ea:	b003		add	sp, #12	; 0xc
  2e22ec:	bd10		pop	{r4, pc}

$pwr_stop_charging:
  2e22ee:	b500		push	{lr}
  2e22f0:	b082		sub	sp, #8
  2e22f2:	48b4		ldr	r0, =0xa0020	; via 0x2e25c4
  2e22f4:	9000		str	r0, [sp, #0]
  2e22f6:	a0eb		add	r0, pc, #940	; 0x3ac
  2e22f8:	2115		mov	r1, #21	; 0x15
  2e22fa:	2200		mov	r2, #0
  2e22fc:	43d2		mvn	r2, r2
  2e22fe:	2305		mov	r3, #5
  2e2300:	f0f8 fc98	bl	0x3dac34
  2e2304:	2001		mov	r0, #1
  2e2306:	213a		mov	r1, #58	; 0x3a
  2e2308:	2200		mov	r2, #0
  2e230a:	f066 ff7f	bl	0x34920c
  2e230e:	48ae		ldr	r0, =0x1774e70	; via 0x2e25c8
  2e2310:	6800		ldr	r0, [r0, #0]
  2e2312:	2100		mov	r1, #0
  2e2314:	6041		str	r1, [r0, #4]
; additional code beyond MV100 version
  2e2316:	48bc		ldr	r0, =0x1774b78	; via 0x2e2608
  2e2318:	80c1		strh	r1, [r0, #6]
  2e231a:	8101		strh	r1, [r0, #8]
  2e231c:	4849		ldr	r0, =0x17749b8	; via 0x2e2444
  2e231e:	7001		strb	r1, [r0, #0]
  2e2320:	b002		add	sp, #8
  2e2322:	bd00		pop	{pc}

$pwr_current_loop_cal:
  2e2324:	b500		push	{lr}
  2e2326:	b082		sub	sp, #8
; "Current loop calibration" trace
  2e2328:	48a6		ldr	r0, =0xa0020	; via 0x2e25c4
  2e232a:	9000		str	r0, [sp, #0]
  2e232c:	a0e3		add	r0, pc, #908	; 0x38c
  2e232e:	2118		mov	r1, #24	; 0x18
  2e2330:	2200		mov	r2, #0
  2e2332:	43d2		mvn	r2, r2
  2e2334:	2305		mov	r3, #5
  2e2336:	f0f8 fc7d	bl	0x3dac34
; same as MV100 version
  2e233a:	2001		mov	r0, #1
  2e233c:	213a		mov	r1, #58	; 0x3a
  2e233e:	2210		mov	r2, #16	; 0x10
  2e2340:	f066 ff64	bl	0x34920c
  2e2344:	2001		mov	r0, #1
  2e2346:	213a		mov	r1, #58	; 0x3a
  2e2348:	2219		mov	r2, #25	; 0x19
  2e234a:	f066 ff5f	bl	0x34920c
; TIMER0 run for 22 ticks (probably 100 ms intended)
  2e234e:	2000		mov	r0, #0
  2e2350:	2116		mov	r1, #22	; 0x16
  2e2352:	2200		mov	r2, #0
  2e2354:	f048 fd90	bl	0x32ae78
  2e2358:	b002		add	sp, #8
  2e235a:	bd00		pop	{pc}

$pwr_calibration_process:
  2e235c:	b500		push	{lr}
  2e235e:	2138		mov	r1, #56	; 0x38
  2e2360:	4899		ldr	r0, =0x1774e70	; via 0x2e25c8
  2e2362:	6800		ldr	r0, [r0, #0]
  2e2364:	5e08		ldrsh	r0, [r1, r0]
  2e2366:	f04b fbda	bl	0x32db1e	; $pwr_bat_temp_within_limits
  2e236a:	2800		cmp	r0, #0
  2e236c:	d111		bne	0x2e2392
; failure code path
  2e236e:	2000		mov	r0, #0
  2e2370:	f0b2 fda7	bl	0x394ec2
  2e2374:	2132		mov	r1, #50	; 0x32
  2e2376:	48ca		ldr	r0, =0x1774e38	; via 0x2e26a0
  2e2378:	6800		ldr	r0, [r0, #0]
  2e237a:	5c08		ldrb	r0, [r1, r0]
  2e237c:	2800		cmp	r0, #0
  2e237e:	d105		bne	0x2e238c
  2e2380:	2001		mov	r0, #1
  2e2382:	213c		mov	r1, #60	; 0x3c
  2e2384:	2201		mov	r2, #1
  2e2386:	f066 ff41	bl	0x34920c
  2e238a:	bd00		pop	{pc}
  2e238c:	f0d1 fc11	bl	0x3b3bb2
  2e2390:	bd00		pop	{pc}
; good path
  2e2392:	488d		ldr	r0, =0x1774e70	; via 0x2e25c8
  2e2394:	6801		ldr	r1, [r0, #0]
  2e2396:	2005		mov	r0, #5
  2e2398:	6308		str	r0, [r1, #48]	; 0x30
  2e239a:	f7ff ffc3	bl	0x2e2324	; $pwr_current_loop_cal
  2e239e:	bd00		pop	{pc}

$pwr_battery_qualification:
  2e23a0:	b500		push	{lr}
  2e23a2:	b082		sub	sp, #8
; "Battery qualification" trace
  2e23a4:	4887		ldr	r0, =0xa0020	; via 0x2e25c4
  2e23a6:	9000		str	r0, [sp, #0]
  2e23a8:	a0cb		add	r0, pc, #812	; 0x32c
  2e23aa:	2115		mov	r1, #21	; 0x15
  2e23ac:	2200		mov	r2, #0
  2e23ae:	43d2		mvn	r2, r2
  2e23b0:	2305		mov	r3, #5
  2e23b2:	f0f8 fc3f	bl	0x3dac34
; pwr_env_ctrl_blk->timer0_state = BATTERY_SHORT_TEST;
  2e23b6:	4884		ldr	r0, =0x1774e70	; via 0x2e25c8
  2e23b8:	6800		ldr	r0, [r0, #0]
  2e23ba:	2101		mov	r1, #1
  2e23bc:	6301		str	r1, [r0, #48]	; 0x30
; CONSTANT_CURRENT_VALUE = 522 mA
  2e23be:	4893		ldr	r0, =0x20a	; via 0x2e260c
  2e23c0:	f7ff ff09	bl	0x2e21d6	; $pwr_start_CI_charging
; TIMER0 to 300 ms
  2e23c4:	2000		mov	r0, #0
  2e23c6:	2141		mov	r1, #65	; 0x41
  2e23c8:	2200		mov	r2, #0
  2e23ca:	f048 fd55	bl	0x32ae78
  2e23ce:	b002		add	sp, #8
  2e23d0:	bd00		pop	{pc}

$pwr_start_fast_charge:
  2e23d2:	b500		push	{lr}
  2e23d4:	f0b2 fcca	bl	0x394d6c	; $pwr_send_CI_charge_start_event ?
  2e23d8:	2001		mov	r0, #1
  2e23da:	2138		mov	r1, #56	; 0x38
  2e23dc:	2201		mov	r2, #1
  2e23de:	f066 ff15	bl	0x34920c
  2e23e2:	4817		ldr	r0, =0x357	; via 0x2e2440
  2e23e4:	4978		ldr	r1, =0x1774e70	; via 0x2e25c8
  2e23e6:	6809		ldr	r1, [r1, #0]
  2e23e8:	8909		ldrh	r1, [r1, #8]
  2e23ea:	4348		mul	r0, r1
  2e23ec:	217d		mov	r1, #125	; 0x7d
  2e23ee:	00c9		lsl	r1, r1, #3
  2e23f0:	f114 ff1c	bl	0x3f722c	; I$DIV
; diff from MV100 version begins
  2e23f4:	0408		lsl	r0, r1, #16
  2e23f6:	0c00		lsr	r0, r0, #16
  2e23f8:	f113 ff88	bl	0x3f630c	; U$TOFD
  2e23fc:	a2bc		add	r2, pc, #752	; 0x2f0
  2e23fe:	ca0c		ldmia	r2!, {r2, r3}
  2e2400:	f101 fb1d	bl	0x3e3a3e	; FD$ADD
  2e2404:	f112 fd5a	bl	0x3f4ebc	; FD$TOU
  2e2408:	0400		lsl	r0, r0, #16
  2e240a:	0c00		lsr	r0, r0, #16
  2e240c:	f7ff fee3	bl	0x2e21d6	; $pwr_start_CI_charging
  2e2410:	f04b ff19	bl	0x32e246
  2e2414:	2002		mov	r0, #2
  2e2416:	f7cf fa42	bl	0x2b189e	; rvf_delay()
  2e241a:	2001		mov	r0, #1
  2e241c:	2122		mov	r1, #34	; 0x22
  2e241e:	2200		mov	r2, #0
  2e2420:	f066 fef4	bl	0x34920c	; $ABB_Write_Register_on_page
  2e2424:	2002		mov	r0, #2
  2e2426:	f7cf fa3a	bl	0x2b189e
; same TIMER1 setting as in MV100
  2e242a:	2001		mov	r0, #1
  2e242c:	49b2		ldr	r1, =0x363	; via 0x2e26f8
  2e242e:	2200		mov	r2, #0
  2e2430:	f048 fd22	bl	0x32ae78
  2e2434:	bd00		pop	{pc}
  2e2436:	46c0		nop			(mov r8, r8)

$pwr_short_test_timer_process:
  2e2468:	b570		push	{r4, r5, r6, lr}
; not in MV100: additional checks to see if the state is something other than
; CHARGE_STOPPED and that the charging power source is still there
  2e246a:	b082		sub	sp, #8
  2e246c:	f066 ff4e	bl	0x34930c	; $ABB_Read_Status
  2e2470:	4955		ldr	r1, =0x1774e70	; via 0x2e25c8
  2e2472:	6809		ldr	r1, [r1, #0]
  2e2474:	6849		ldr	r1, [r1, #4]
  2e2476:	2900		cmp	r1, #0
  2e2478:	d100		bne	0x2e247c
  2e247a:	e0a1		b	0x2e25c0
  2e247c:	09c0		lsr	r0, r0, #7
  2e247e:	d200		bcs	0x2e2482
  2e2480:	e09e		b	0x2e25c0
; trace
  2e2482:	4850		ldr	r0, =0xa0020	; via 0x2e25c4
  2e2484:	9000		str	r0, [sp, #0]
  2e2486:	a0c8		add	r0, pc, #800	; 0x320
  2e2488:	211f		mov	r1, #31	; 0x1f
  2e248a:	2200		mov	r2, #0
  2e248c:	43d2		mvn	r2, r2
  2e248e:	2302		mov	r3, #2
  2e2490:	f0f8 fbd0	bl	0x3dac34
  2e2494:	2002		mov	r0, #2
  2e2496:	f7cf fa02	bl	0x2b189e	; rvf_delay()
  2e249a:	2001		mov	r0, #1
  2e249c:	2122		mov	r1, #34	; 0x22
  2e249e:	2200		mov	r2, #0
  2e24a0:	f066 feb4	bl	0x34920c
  2e24a4:	2002		mov	r0, #2
  2e24a6:	f7cf f9fa	bl	0x2b189e
; read and trace-dump VBAT, VCHG and ICHG
  2e24aa:	2001		mov	r0, #1
  2e24ac:	211e		mov	r1, #30	; 0x1e
  2e24ae:	f066 fed4	bl	0x34925a
  2e24b2:	1c05		add	r5, r0, #0
  2e24b4:	4843		ldr	r0, =0xa0020	; via 0x2e25c4
  2e24b6:	9000		str	r0, [sp, #0]
  2e24b8:	a0c3		add	r0, pc, #780	; 0x30c
  2e24ba:	2111		mov	r1, #17	; 0x11
  2e24bc:	1c2a		add	r2, r5, #0
  2e24be:	2302		mov	r3, #2
  2e24c0:	f0f8 fbb8	bl	0x3dac34
  2e24c4:	2001		mov	r0, #1
  2e24c6:	2120		mov	r1, #32	; 0x20
  2e24c8:	f066 fec7	bl	0x34925a
  2e24cc:	1c06		add	r6, r0, #0
  2e24ce:	483d		ldr	r0, =0xa0020	; via 0x2e25c4
  2e24d0:	9000		str	r0, [sp, #0]
  2e24d2:	a0c2		add	r0, pc, #776	; 0x308
  2e24d4:	2111		mov	r1, #17	; 0x11
  2e24d6:	1c32		add	r2, r6, #0
  2e24d8:	2302		mov	r3, #2
  2e24da:	f0f8 fbab	bl	0x3dac34
  2e24de:	2001		mov	r0, #1
  2e24e0:	2122		mov	r1, #34	; 0x22
  2e24e2:	f066 feba	bl	0x34925a
  2e24e6:	1c04		add	r4, r0, #0
  2e24e8:	4836		ldr	r0, =0xa0020	; via 0x2e25c4
  2e24ea:	9000		str	r0, [sp, #0]
  2e24ec:	a0c0		add	r0, pc, #768	; 0x300
  2e24ee:	211b		mov	r1, #27	; 0x1b
  2e24f0:	1c22		add	r2, r4, #0
  2e24f2:	2305		mov	r3, #5
  2e24f4:	f0f8 fb9e	bl	0x3dac34
; end of the read-and-dump
  2e24f8:	f7ff fef9	bl	0x2e22ee	; $pwr_stop_charging
  2e24fc:	20ff		mov	r0, #255	; 0xff
  2e24fe:	30b7		add	r0, #183	; 0xb7
  2e2500:	4285		cmp	r5, r0
  2e2502:	dd21		ble	0x2e2548
  2e2504:	205f		mov	r0, #95	; 0x5f
  2e2506:	00c0		lsl	r0, r0, #3
  2e2508:	4286		cmp	r6, r0
  2e250a:	da1d		bge	0x2e2548
; "Battery OK" trace
  2e250c:	482d		ldr	r0, =0xa0020	; via 0x2e25c4
  2e250e:	9000		str	r0, [sp, #0]
  2e2510:	a0be		add	r0, pc, #760	; 0x2f8
  2e2512:	210a		mov	r1, #10	; 0xa
  2e2514:	2200		mov	r2, #0
  2e2516:	43d2		mvn	r2, r2
  2e2518:	2305		mov	r3, #5
  2e251a:	f0f8 fb8b	bl	0x3dac34
  2e251e:	4c2a		ldr	r4, =0x1774e70	; via 0x2e25c8
  2e2520:	6821		ldr	r1, [r4, #0]
; setting the time limit for the overall charging process: 7200 s
  2e2522:	20e1		mov	r0, #225	; 0xe1
  2e2524:	0140		lsl	r0, r0, #5
  2e2526:	8748		strh	r0, [r1, #58]	; 0x3a
; elapsed time init to 0
  2e2528:	6821		ldr	r1, [r4, #0]
  2e252a:	2000		mov	r0, #0
  2e252c:	8788		strh	r0, [r1, #60]	; 0x3c
; mystery var init
  2e252e:	48c0		ldr	r0, =0x1775040	; via 0x2e2830
  2e2530:	2165		mov	r1, #101	; 0x65
  2e2532:	7001		strb	r1, [r0, #0]
  2e2534:	f048 fc96	bl	0x32ae64	; $rvf_get_tick_count
  2e2538:	49be		ldr	r1, =0x17749bc	; via 0x2e2834
  2e253a:	6008		str	r0, [r1, #0]
; pwr_env_ctrl_blk->charging_state = TESTING_BATTERY;
  2e253c:	6821		ldr	r1, [r4, #0]
  2e253e:	2001		mov	r0, #1
  2e2540:	6048		str	r0, [r1, #4]
  2e2542:	f04b fb7d	bl	0x32dc40	; $pwr_get_battery_temperature
  2e2546:	e03b		b	0x2e25c0	; return
; failure code path
  2e2548:	481e		ldr	r0, =0xa0020	; via 0x2e25c4
  2e254a:	9000		str	r0, [sp, #0]
  2e254c:	a0b2		add	r0, pc, #712	; 0x2c8
  2e254e:	2117		mov	r1, #23	; 0x17
  2e2550:	2200		mov	r2, #0
  2e2552:	43d2		mvn	r2, r2
  2e2554:	2302		mov	r3, #2
  2e2556:	f0f8 fb6d	bl	0x3dac34
  2e255a:	20ff		mov	r0, #255	; 0xff
  2e255c:	30b7		add	r0, #183	; 0xb7
  2e255e:	4285		cmp	r5, r0
  2e2560:	dd19		ble	0x2e2596
  2e2562:	20a3		mov	r0, #163	; 0xa3
  2e2564:	0080		lsl	r0, r0, #2
  2e2566:	4285		cmp	r5, r0
  2e2568:	da13		bge	0x2e2592
  2e256a:	2c46		cmp	r4, #70	; 0x46
  2e256c:	dd0f		ble	0x2e258e
  2e256e:	205f		mov	r0, #95	; 0x5f
  2e2570:	00c0		lsl	r0, r0, #3
  2e2572:	4286		cmp	r6, r0
  2e2574:	da01		bge	0x2e257a
  2e2576:	2108		mov	r1, #8
  2e2578:	e00e		b	0x2e2598
  2e257a:	4823		ldr	r0, =0x1774b78	; via 0x2e2608
  2e257c:	210b		mov	r1, #11	; 0xb
  2e257e:	43c9		mvn	r1, r1
  2e2580:	8001		strh	r1, [r0, #0]
  2e2582:	2001		mov	r0, #1
  2e2584:	213a		mov	r1, #58	; 0x3a
  2e2586:	2280		mov	r2, #128	; 0x80
  2e2588:	f066 fe40	bl	0x34920c
  2e258c:	e007		b	0x2e259e
  2e258e:	2102		mov	r1, #2
  2e2590:	e002		b	0x2e2598
  2e2592:	2107		mov	r1, #7
  2e2594:	e000		b	0x2e2598
  2e2596:	2101		mov	r1, #1
  2e2598:	43c9		mvn	r1, r1
  2e259a:	481b		ldr	r0, =0x1774b78	; via 0x2e2608
  2e259c:	8001		strh	r1, [r0, #0]
  2e259e:	2002		mov	r0, #2
  2e25a0:	f0b2 fc8f	bl	0x394ec2
  2e25a4:	2032		mov	r0, #50	; 0x32
  2e25a6:	493e		ldr	r1, =0x1774e38	; via 0x2e26a0
  2e25a8:	6809		ldr	r1, [r1, #0]
  2e25aa:	5c40		ldrb	r0, [r0, r1]
  2e25ac:	2800		cmp	r0, #0
  2e25ae:	d105		bne	0x2e25bc
  2e25b0:	2001		mov	r0, #1
  2e25b2:	213c		mov	r1, #60	; 0x3c
  2e25b4:	2201		mov	r2, #1
  2e25b6:	f066 fe29	bl	0x34920c
  2e25ba:	e001		b	0x2e25c0
  2e25bc:	f0d1 faf9	bl	0x3b3bb2
  2e25c0:	b002		add	sp, #8
  2e25c2:	bd70		pop	{r4, r5, r6, pc}

$pwr_open_test_timer_process:
  2e2610:	b510		push	{r4, lr}
  2e2612:	b082		sub	sp, #8
  2e2614:	48e5		ldr	r0, =0xa0020	; via 0x2e29ac
  2e2616:	9000		str	r0, [sp, #0]
  2e2618:	a0e6		add	r0, pc, #920	; 0x398
  2e261a:	2119		mov	r1, #25	; 0x19
  2e261c:	2200		mov	r2, #0
  2e261e:	43d2		mvn	r2, r2
  2e2620:	2302		mov	r3, #2
  2e2622:	f0f8 fb07	bl	0x3dac34
  2e2626:	2001		mov	r0, #1
  2e2628:	2122		mov	r1, #34	; 0x22
  2e262a:	f066 fe16	bl	0x34925a
  2e262e:	1c04		add	r4, r0, #0
  2e2630:	48de		ldr	r0, =0xa0020	; via 0x2e29ac
  2e2632:	9000		str	r0, [sp, #0]
  2e2634:	a06e		add	r0, pc, #440	; 0x1b8
  2e2636:	211b		mov	r1, #27	; 0x1b
  2e2638:	1c22		add	r2, r4, #0
  2e263a:	2305		mov	r3, #5
  2e263c:	f0f8 fafa	bl	0x3dac34
  2e2640:	f7ff fe55	bl	0x2e22ee
  2e2644:	2c00		cmp	r4, #0
  2e2646:	d11a		bne	0x2e267e
  2e2648:	48d8		ldr	r0, =0xa0020	; via 0x2e29ac
  2e264a:	9000		str	r0, [sp, #0]
  2e264c:	a0e0		add	r0, pc, #896	; 0x380
  2e264e:	210c		mov	r1, #12	; 0xc
  2e2650:	2200		mov	r2, #0
  2e2652:	43d2		mvn	r2, r2
  2e2654:	2302		mov	r3, #2
  2e2656:	f0f8 faed	bl	0x3dac34
  2e265a:	2001		mov	r0, #1
  2e265c:	f0b2 fc31	bl	0x394ec2
  2e2660:	2132		mov	r1, #50	; 0x32
  2e2662:	480f		ldr	r0, =0x1774e38	; via 0x2e26a0
  2e2664:	6800		ldr	r0, [r0, #0]
  2e2666:	5c08		ldrb	r0, [r1, r0]
  2e2668:	2800		cmp	r0, #0
  2e266a:	d105		bne	0x2e2678
  2e266c:	2001		mov	r0, #1
  2e266e:	213c		mov	r1, #60	; 0x3c
  2e2670:	2201		mov	r2, #1
  2e2672:	f066 fdcb	bl	0x34920c
  2e2676:	e011		b	0x2e269c
  2e2678:	f0d1 fa9b	bl	0x3b3bb2
  2e267c:	e00e		b	0x2e269c
  2e267e:	48cb		ldr	r0, =0xa0020	; via 0x2e29ac
  2e2680:	9000		str	r0, [sp, #0]
  2e2682:	a062		add	r0, pc, #392	; 0x188
  2e2684:	210a		mov	r1, #10	; 0xa
  2e2686:	2200		mov	r2, #0
  2e2688:	43d2		mvn	r2, r2
  2e268a:	2305		mov	r3, #5
  2e268c:	f0f8 fad2	bl	0x3dac34
  2e2690:	48c7		ldr	r0, =0x1774e70	; via 0x2e29b0
  2e2692:	6800		ldr	r0, [r0, #0]
  2e2694:	2101		mov	r1, #1
  2e2696:	6041		str	r1, [r0, #4]
  2e2698:	f04b fad2	bl	0x32dc40
  2e269c:	b002		add	sp, #8
  2e269e:	bd10		pop	{r4, pc}

$pwr_cal_timer_process:
  2e26fc:	b510		push	{r4, lr}
  2e26fe:	b082		sub	sp, #8
; same check for charger presence and active state as seen before
  2e2700:	f066 fe04	bl	0x34930c	; $ABB_Read_Status
  2e2704:	49aa		ldr	r1, =0x1774e70	; via 0x2e29b0
  2e2706:	6809		ldr	r1, [r1, #0]
  2e2708:	6849		ldr	r1, [r1, #4]
  2e270a:	2900		cmp	r1, #0
  2e270c:	d001		beq	0x2e2712
  2e270e:	09c0		lsr	r0, r0, #7
  2e2710:	d205		bcs	0x2e271e
  2e2712:	2001		mov	r0, #1
  2e2714:	2138		mov	r1, #56	; 0x38
  2e2716:	2201		mov	r2, #1
  2e2718:	f066 fd78	bl	0x34920c
  2e271c:	e042		b	0x2e27a4
; checks passed
; "TIMER0: Battery calibration" trace
  2e271e:	48a3		ldr	r0, =0xa0020	; via 0x2e29ac
  2e2720:	9000		str	r0, [sp, #0]
  2e2722:	a0c7		add	r0, pc, #796	; 0x31c
  2e2724:	211b		mov	r1, #27	; 0x1b
  2e2726:	2200		mov	r2, #0
  2e2728:	43d2		mvn	r2, r2
  2e272a:	2302		mov	r3, #2
  2e272c:	f0f8 fa82	bl	0x3dac34
; write 0 into ADIN2REG
  2e2730:	2001		mov	r0, #1
  2e2732:	2128		mov	r1, #40	; 0x28
  2e2734:	2200		mov	r2, #0
  2e2736:	f066 fd69	bl	0x34920c
; delay 2 ticks
  2e273a:	2002		mov	r0, #2
  2e273c:	f7cf f8af	bl	0x2b189e
; back to expected code
  2e2740:	4c9b		ldr	r4, =0x1774e70	; via 0x2e29b0
  2e2742:	2001		mov	r0, #1
  2e2744:	2122		mov	r1, #34	; 0x22
  2e2746:	f066 fd88	bl	0x34925a
  2e274a:	6821		ldr	r1, [r4, #0]
  2e274c:	8108		strh	r0, [r1, #8]
; i2v offset (raw ADC) also stored in this other var
  2e274e:	48a4		ldr	r0, =0x1774b82	; via 0x2e29e0
  2e2750:	6821		ldr	r1, [r4, #0]
  2e2752:	8909		ldrh	r1, [r1, #8]
  2e2754:	8001		strh	r1, [r0, #0]
; back to expected code
; "i2v offset (MADC code) " trace
  2e2756:	6820		ldr	r0, [r4, #0]
  2e2758:	8902		ldrh	r2, [r0, #8]
  2e275a:	4894		ldr	r0, =0xa0020	; via 0x2e29ac
  2e275c:	9000		str	r0, [sp, #0]
  2e275e:	a0bf		add	r0, pc, #764	; 0x2fc
  2e2760:	2117		mov	r1, #23	; 0x17
  2e2762:	2305		mov	r3, #5
  2e2764:	f0f8 fa66	bl	0x3dac34
  2e2768:	f7ff fdc1	bl	0x2e22ee	; $pwr_stop_charging
  2e276c:	6820		ldr	r0, [r4, #0]
  2e276e:	3004		add	r0, #4
  2e2770:	8881		ldrh	r1, [r0, #4]
  2e2772:	2900		cmp	r1, #0
  2e2774:	d109		bne	0x2e278a
; i2v offset is zero
; pwr_env_ctrl_blk->charging_state = TESTING_BATTERY;
  2e2776:	2101		mov	r1, #1
  2e2778:	6001		str	r1, [r0, #0]
; setting BCICONF to 0x18
  2e277a:	2002		mov	r0, #2
  2e277c:	211a		mov	r1, #26	; 0x1a
  2e277e:	2218		mov	r2, #24	; 0x18
  2e2780:	f066 fd44	bl	0x34920c	; $ABB_Write_Register_on_page
  2e2784:	f7ff fdce	bl	0x2e2324	; $pwr_current_loop_cal
  2e2788:	e00c		b	0x2e27a4	; return;
; i2v offset is not zero
  2e278a:	317a		add	r1, #122	; 0x7a
  2e278c:	80c1		strh	r1, [r0, #6]
; "End of charge current (MADC code) " trace
  2e278e:	6820		ldr	r0, [r4, #0]
  2e2790:	8942		ldrh	r2, [r0, #10]	; 0xa
  2e2792:	4886		ldr	r0, =0xa0020	; via 0x2e29ac
  2e2794:	9000		str	r0, [sp, #0]
  2e2796:	a0b7		add	r0, pc, #732	; 0x2dc
  2e2798:	2122		mov	r1, #34	; 0x22
  2e279a:	2305		mov	r3, #5
  2e279c:	f0f8 fa4a	bl	0x3dac34
  2e27a0:	f7ff fe17	bl	0x2e23d2	; $pwr_start_fast_charge
  2e27a4:	b002		add	sp, #8
  2e27a6:	bd10		pop	{r4, pc}

$pwr_CI_charge_process:
  2e2838:	b570		push	{r4, r5, r6, lr}
  2e283a:	b082		sub	sp, #8
  2e283c:	2138		mov	r1, #56	; 0x38
  2e283e:	485c		ldr	r0, =0x1774e70	; via 0x2e29b0
  2e2840:	6800		ldr	r0, [r0, #0]
  2e2842:	5e08		ldrsh	r0, [r1, r0]
  2e2844:	f04b f96b	bl	0x32db1e	; $pwr_bat_temp_within_limits
  2e2848:	2800		cmp	r0, #0
  2e284a:	d11a		bne	0x2e2882
; error path
  2e284c:	f7ff fd4f	bl	0x2e22ee
  2e2850:	4856		ldr	r0, =0xa0020	; via 0x2e29ac
  2e2852:	9000		str	r0, [sp, #0]
  2e2854:	a0f0		add	r0, pc, #960	; 0x3c0
  2e2856:	2121		mov	r1, #33	; 0x21
  2e2858:	2200		mov	r2, #0
  2e285a:	43d2		mvn	r2, r2
  2e285c:	2302		mov	r3, #2
  2e285e:	f0f8 f9e9	bl	0x3dac34
  2e2862:	2000		mov	r0, #0
  2e2864:	f0b2 fb2d	bl	0x394ec2
  2e2868:	2132		mov	r1, #50	; 0x32
  2e286a:	48f4		ldr	r0, =0x1774e38	; via 0x2e2c3c
  2e286c:	6800		ldr	r0, [r0, #0]
  2e286e:	5c08		ldrb	r0, [r1, r0]
  2e2870:	2800		cmp	r0, #0
  2e2872:	d000		beq	0x2e2876
  2e2874:	e096		b	0x2e29a4
  2e2876:	2001		mov	r0, #1
  2e2878:	213c		mov	r1, #60	; 0x3c
  2e287a:	2201		mov	r2, #1
  2e287c:	f066 fcc6	bl	0x34920c
  2e2880:	e092		b	0x2e29a8
; good path
  2e2882:	2033		mov	r0, #51	; 0x33
  2e2884:	49ed		ldr	r1, =0x1774e38	; via 0x2e2c3c
  2e2886:	6809		ldr	r1, [r1, #0]
  2e2888:	5c40		ldrb	r0, [r0, r1]
  2e288a:	2800		cmp	r0, #0
  2e288c:	d10c		bne	0x2e28a8
; is_adc_on FALSE
; write 0 to VBATREG
  2e288e:	2001		mov	r0, #1
  2e2890:	211e		mov	r1, #30	; 0x1e
  2e2892:	2200		mov	r2, #0
  2e2894:	f066 fcba	bl	0x34920c
; delay one TDMA frame
  2e2898:	2001		mov	r0, #1
  2e289a:	f7cf f800	bl	0x2b189e
; read VBATREG
  2e289e:	2001		mov	r0, #1
  2e28a0:	211e		mov	r1, #30	; 0x1e
  2e28a2:	f066 fcda	bl	0x34925a
  2e28a6:	e001		b	0x2e28ac
; is_adc_on TRUE
; function gets average of the last 6
  2e28a8:	f04b fc16	bl	0x32e0d8
; is_adc_on paths join
  2e28ac:	1c04		add	r4, r0, #0
  2e28ae:	1c20		add	r0, r4, #0
; the MADC code is converted to mV, but only for storing in the 0x1774b7c var
  2e28b0:	f04b f91a	bl	0x32dae8	; $pwr_adc_to_mvolt
  2e28b4:	4993		ldr	r1, =0x1774b7c	; via 0x2e2b04
; "TIMER1" trace
  2e28b6:	8008		strh	r0, [r1, #0]
  2e28b8:	483c		ldr	r0, =0xa0020	; via 0x2e29ac
  2e28ba:	9000		str	r0, [sp, #0]
  2e28bc:	a076		add	r0, pc, #472	; 0x1d8
  2e28be:	2106		mov	r1, #6
  2e28c0:	2200		mov	r2, #0
  2e28c2:	43d2		mvn	r2, r2
  2e28c4:	2302		mov	r3, #2
  2e28c6:	f0f8 f9b5	bl	0x3dac34
; "Vbat (MADC code) " trace
  2e28ca:	4838		ldr	r0, =0xa0020	; via 0x2e29ac
  2e28cc:	9000		str	r0, [sp, #0]
  2e28ce:	a080		add	r0, pc, #512	; 0x200
  2e28d0:	2111		mov	r1, #17	; 0x11
  2e28d2:	1c22		add	r2, r4, #0
  2e28d4:	2305		mov	r3, #5
  2e28d6:	f0f8 f9ad	bl	0x3dac34
; check for the voltage threshold exactly as in MV100 version
  2e28da:	4e35		ldr	r6, =0x1774e70	; via 0x2e29b0
  2e28dc:	6830		ldr	r0, [r6, #0]
  2e28de:	8980		ldrh	r0, [r0, #12]	; 0xc
  2e28e0:	4284		cmp	r4, r0
  2e28e2:	db0c		blt	0x2e28fe
  2e28e4:	f7ff fd03	bl	0x2e22ee	; $pwr_stop_charging
  2e28e8:	f0b2 fa79	bl	0x394dde	; $pwr_send_CV_charge_start_event
; the CV setting is plain 4200
  2e28ec:	4886		ldr	r0, =0x1068	; via 0x2e2b08
  2e28ee:	f7ff fca3	bl	0x2e2238	; $pwr_start_CV_charging
; same TIMER2 as in MV100 version
  2e28f2:	2002		mov	r0, #2
  2e28f4:	4986		ldr	r1, =0x363	; via 0x2e2b10
  2e28f6:	2200		mov	r2, #0
  2e28f8:	f048 fabe	bl	0x32ae78
  2e28fc:	e054		b	0x2e29a8	; return
; threshold not reached
  2e28fe:	4df3		ldr	r5, =0x1774b78	; via 0x2e2ccc
  2e2900:	88a9		ldrh	r1, [r5, #4]
  2e2902:	4882		ldr	r0, =0xd2a	; via 0x2e2b0c
  2e2904:	4281		cmp	r1, r0
  2e2906:	dc08		bgt	0x2e291a
; emergency-low Vbat
  2e2908:	4828		ldr	r0, =0xa0020	; via 0x2e29ac
  2e290a:	9000		str	r0, [sp, #0]
  2e290c:	a064		add	r0, pc, #400	; 0x190
  2e290e:	211f		mov	r1, #31	; 0x1f
  2e2910:	2200		mov	r2, #0
  2e2912:	43d2		mvn	r2, r2
  2e2914:	2302		mov	r3, #2
  2e2916:	f0f8 f98d	bl	0x3dac34
; end of emergency-low Vbat check
; TIMER1 restarted, same interval as in MV100
  2e291a:	2001		mov	r0, #1
  2e291c:	497c		ldr	r1, =0x363	; via 0x2e2b10
  2e291e:	2200		mov	r2, #0
  2e2920:	f048 faaa	bl	0x32ae78
; Ichg check code begins
  2e2924:	48c5		ldr	r0, =0x1774e38	; via 0x2e2c3c
  2e2926:	2133		mov	r1, #51	; 0x33
  2e2928:	6802		ldr	r2, [r0, #0]
  2e292a:	5c89		ldrb	r1, [r1, r2]
  2e292c:	2900		cmp	r1, #0
  2e292e:	d10d		bne	0x2e294c
; is_adc_on FALSE
  2e2930:	2001		mov	r0, #1
  2e2932:	2122		mov	r1, #34	; 0x22
  2e2934:	2200		mov	r2, #0
  2e2936:	f066 fc69	bl	0x34920c
  2e293a:	2001		mov	r0, #1
  2e293c:	f7ce ffaf	bl	0x2b189e
  2e2940:	2001		mov	r0, #1
  2e2942:	2122		mov	r1, #34	; 0x22
  2e2944:	f066 fc89	bl	0x34925a
  2e2948:	1c04		add	r4, r0, #0
  2e294a:	e001		b	0x2e2950
; is_adc_on TRUE
; takes Ichg from SPI ADC results
  2e294c:	6800		ldr	r0, [r0, #0]
  2e294e:	8904		ldrh	r4, [r0, #8]
; is_adc_on paths join
  2e2950:	1c20		add	r0, r4, #0
  2e2952:	f04b fbfe	bl	0x32e152
  2e2956:	1c04		add	r4, r0, #0
  2e2958:	f04b f8cf	bl	0x32dafa	; $pwr_adc_to_mA
  2e295c:	80e8		strh	r0, [r5, #6]
  2e295e:	88e8		ldrh	r0, [r5, #6]
  2e2960:	f04b fbac	bl	0x32e0bc
  2e2964:	4811		ldr	r0, =0xa0020	; via 0x2e29ac
  2e2966:	9000		str	r0, [sp, #0]
  2e2968:	a0d3		add	r0, pc, #844	; 0x34c
  2e296a:	2111		mov	r1, #17	; 0x11
  2e296c:	1c22		add	r2, r4, #0
  2e296e:	2305		mov	r3, #5
  2e2970:	f0f8 f960	bl	0x3dac34
  2e2974:	2033		mov	r0, #51	; 0x33
  2e2976:	0100		lsl	r0, r0, #4
  2e2978:	6831		ldr	r1, [r6, #0]
  2e297a:	8909		ldrh	r1, [r1, #8]
  2e297c:	1840		add	r0, r0, r1
  2e297e:	4284		cmp	r4, r0
  2e2980:	dd12		ble	0x2e29a8
; current got too high
  2e2982:	f7ff fcb4	bl	0x2e22ee
  2e2986:	200a		mov	r0, #10	; 0xa
  2e2988:	43c0		mvn	r0, r0
  2e298a:	8028		strh	r0, [r5, #0]
  2e298c:	4807		ldr	r0, =0xa0020	; via 0x2e29ac
  2e298e:	9000		str	r0, [sp, #0]
  2e2990:	a04b		add	r0, pc, #300	; 0x12c
  2e2992:	210e		mov	r1, #14	; 0xe
  2e2994:	2200		mov	r2, #0
  2e2996:	43d2		mvn	r2, r2
  2e2998:	2302		mov	r3, #2
  2e299a:	f0f8 f94b	bl	0x3dac34
  2e299e:	2003		mov	r0, #3
  2e29a0:	f0b2 fa8f	bl	0x394ec2
  2e29a4:	f0d1 f905	bl	0x3b3bb2
  2e29a8:	b002		add	sp, #8
  2e29aa:	bd70		pop	{r4, r5, r6, pc}

$pwr_CI_charge_timer_process:
  2e29e4:	b510		push	{r4, lr}
  2e29e6:	b082		sub	sp, #8
  2e29e8:	f066 fc90	bl	0x34930c	; $ABB_Read_Status
  2e29ec:	09c0		lsr	r0, r0, #7
  2e29ee:	d324		bcc	0x2e2a3a	; return
; charging power still present
  2e29f0:	4cec		ldr	r4, =0x1774e70	; via 0x2e2da4
  2e29f2:	6820		ldr	r0, [r4, #0]
  2e29f4:	8f81		ldrh	r1, [r0, #60]	; 0x3c
  2e29f6:	8f40		ldrh	r0, [r0, #58]	; 0x3a
  2e29f8:	0840		lsr	r0, r0, #1
  2e29fa:	4281		cmp	r1, r0
  2e29fc:	dd08		ble	0x2e2a10
; taking too long?
  2e29fe:	f7ff fbdd	bl	0x2e21bc
  2e2a02:	2800		cmp	r0, #0
  2e2a04:	d104		bne	0x2e2a10
  2e2a06:	6820		ldr	r0, [r4, #0]
  2e2a08:	303c		add	r0, #60	; 0x3c
  2e2a0a:	8801		ldrh	r1, [r0, #0]
  2e2a0c:	3901		sub	r1, #1
  2e2a0e:	e003		b	0x2e2a18
; no time issue
  2e2a10:	6820		ldr	r0, [r4, #0]
  2e2a12:	303c		add	r0, #60	; 0x3c
  2e2a14:	8801		ldrh	r1, [r0, #0]
  2e2a16:	3101		add	r1, #1
  2e2a18:	8001		strh	r1, [r0, #0]
  2e2a1a:	6820		ldr	r0, [r4, #0]
  2e2a1c:	8f81		ldrh	r1, [r0, #60]	; 0x3c
  2e2a1e:	8f40		ldrh	r0, [r0, #58]	; 0x3a
  2e2a20:	4281		cmp	r1, r0
  2e2a22:	dd08		ble	0x2e2a36
  2e2a24:	48e9		ldr	r0, =0xa0020	; via 0x2e2dcc
  2e2a26:	9000		str	r0, [sp, #0]
  2e2a28:	a02e		add	r0, pc, #184	; 0xb8
  2e2a2a:	211d		mov	r1, #29	; 0x1d
  2e2a2c:	2200		mov	r2, #0
  2e2a2e:	43d2		mvn	r2, r2
  2e2a30:	2302		mov	r3, #2
  2e2a32:	f0f8 f8ff	bl	0x3dac34
  2e2a36:	f04b f903	bl	0x32dc40	; $pwr_get_battery_temperature
  2e2a3a:	b002		add	sp, #8
  2e2a3c:	bd10		pop	{r4, pc}
  2e2a3e:	46c0		nop			(mov r8, r8)

$pwr_CV_charge_process:
  2e2b14:	b5f0		push	{r4, r5, r6, r7, lr}
  2e2b16:	4640		mov	r0, r8
  2e2b18:	4649		mov	r1, r9
  2e2b1a:	4652		mov	r2, r10
  2e2b1c:	465b		mov	r3, r11
  2e2b1e:	b40f		push	{r0, r1, r2, r3}
  2e2b20:	b082		sub	sp, #8
  2e2b22:	2138		mov	r1, #56	; 0x38
  2e2b24:	489f		ldr	r0, =0x1774e70	; via 0x2e2da4
  2e2b26:	6800		ldr	r0, [r0, #0]
  2e2b28:	5e08		ldrsh	r0, [r1, r0]
  2e2b2a:	f04a fff8	bl	0x32db1e	; $pwr_bat_temp_within_limits
  2e2b2e:	2800		cmp	r0, #0
  2e2b30:	d115		bne	0x2e2b5e
; error path
  2e2b32:	f7ff fbdc	bl	0x2e22ee
  2e2b36:	48a5		ldr	r0, =0xa0020	; via 0x2e2dcc
  2e2b38:	9000		str	r0, [sp, #0]
  2e2b3a:	a037		add	r0, pc, #220	; 0xdc
  2e2b3c:	2121		mov	r1, #33	; 0x21
  2e2b3e:	2200		mov	r2, #0
  2e2b40:	43d2		mvn	r2, r2
  2e2b42:	2302		mov	r3, #2
  2e2b44:	f0f8 f876	bl	0x3dac34
  2e2b48:	2000		mov	r0, #0
  2e2b4a:	f0b2 f9ba	bl	0x394ec2
  2e2b4e:	2032		mov	r0, #50	; 0x32
  2e2b50:	493a		ldr	r1, =0x1774e38	; via 0x2e2c3c
  2e2b52:	6809		ldr	r1, [r1, #0]
  2e2b54:	5c40		ldrb	r0, [r0, r1]
  2e2b56:	2800		cmp	r0, #0
  2e2b58:	d100		bne	0x2e2b5c
  2e2b5a:	e11d		b	0x2e2d98
  2e2b5c:	e157		b	0x2e2e0e
; good path
  2e2b5e:	4e37		ldr	r6, =0x1774e38	; via 0x2e2c3c
  2e2b60:	2133		mov	r1, #51	; 0x33
  2e2b62:	6830		ldr	r0, [r6, #0]
  2e2b64:	5c08		ldrb	r0, [r1, r0]
  2e2b66:	2800		cmp	r0, #0
  2e2b68:	d10d		bne	0x2e2b86
; is_adc_on FALSE
  2e2b6a:	2001		mov	r0, #1
  2e2b6c:	2122		mov	r1, #34	; 0x22
  2e2b6e:	2200		mov	r2, #0
  2e2b70:	f066 fb4c	bl	0x34920c
  2e2b74:	2001		mov	r0, #1
  2e2b76:	f7ce fe92	bl	0x2b189e
  2e2b7a:	2001		mov	r0, #1
  2e2b7c:	2122		mov	r1, #34	; 0x22
  2e2b7e:	f066 fb6c	bl	0x34925a
  2e2b82:	1c04		add	r4, r0, #0
  2e2b84:	e001		b	0x2e2b8a
; is_adc_on TRUE
  2e2b86:	6830		ldr	r0, [r6, #0]
  2e2b88:	8904		ldrh	r4, [r0, #8]
; is_adc_on paths join
  2e2b8a:	1c20		add	r0, r4, #0
  2e2b8c:	f04b fae1	bl	0x32e152	; Ichg averaging
  2e2b90:	1c04		add	r4, r0, #0
  2e2b92:	4d4e		ldr	r5, =0x1774b78	; via 0x2e2ccc
  2e2b94:	f04a ffb1	bl	0x32dafa	; $pwr_adc_to_mA
  2e2b98:	80e8		strh	r0, [r5, #6]
  2e2b9a:	88e8		ldrh	r0, [r5, #6]
  2e2b9c:	f04b fa8e	bl	0x32e0bc
; "TIMER2" trace
  2e2ba0:	488a		ldr	r0, =0xa0020	; via 0x2e2dcc
  2e2ba2:	9000		str	r0, [sp, #0]
  2e2ba4:	a0cd		add	r0, pc, #820	; 0x334
  2e2ba6:	2106		mov	r1, #6
  2e2ba8:	2200		mov	r2, #0
  2e2baa:	43d2		mvn	r2, r2
  2e2bac:	2302		mov	r3, #2
  2e2bae:	f0f8 f841	bl	0x3dac34
; "Ichg (MADC code) " trace
  2e2bb2:	4886		ldr	r0, =0xa0020	; via 0x2e2dcc
  2e2bb4:	9000		str	r0, [sp, #0]
  2e2bb6:	a040		add	r0, pc, #256	; 0x100
  2e2bb8:	2111		mov	r1, #17	; 0x11
  2e2bba:	1c22		add	r2, r4, #0
  2e2bbc:	2305		mov	r3, #5
  2e2bbe:	f0f8 f839	bl	0x3dac34
  2e2bc2:	2133		mov	r1, #51	; 0x33
  2e2bc4:	6830		ldr	r0, [r6, #0]
  2e2bc6:	5c08		ldrb	r0, [r1, r0]
  2e2bc8:	2800		cmp	r0, #0
  2e2bca:	d10c		bne	0x2e2be6
; is_adc_on FALSE
  2e2bcc:	2001		mov	r0, #1
  2e2bce:	211e		mov	r1, #30	; 0x1e
  2e2bd0:	2200		mov	r2, #0
  2e2bd2:	f066 fb1b	bl	0x34920c
  2e2bd6:	2001		mov	r0, #1
  2e2bd8:	f7ce fe61	bl	0x2b189e
  2e2bdc:	2001		mov	r0, #1
  2e2bde:	211e		mov	r1, #30	; 0x1e
  2e2be0:	f066 fb3b	bl	0x34925a
  2e2be4:	e001		b	0x2e2bea
; is_adc_on TRUE
  2e2be6:	f04b fa77	bl	0x32e0d8
; is_adc_on paths join
  2e2bea:	4680		mov	r8, r0
  2e2bec:	4d37		ldr	r5, =0x1774b78	; via 0x2e2ccc
  2e2bee:	4640		mov	r0, r8
  2e2bf0:	f04a ff7a	bl	0x32dae8	; $pwr_adc_to_mvolt
  2e2bf4:	80a8		strh	r0, [r5, #4]
  2e2bf6:	486b		ldr	r0, =0x1774e70	; via 0x2e2da4
  2e2bf8:	4681		mov	r9, r0
  2e2bfa:	2138		mov	r1, #56	; 0x38
  2e2bfc:	6800		ldr	r0, [r0, #0]
  2e2bfe:	5e08		ldrsh	r0, [r1, r0]
  2e2c00:	3001		add	r0, #1
  2e2c02:	2800		cmp	r0, #0
  2e2c04:	d100		bne	0x2e2c08
  2e2c06:	e098		b	0x2e2d3a
; temperature != -1
  2e2c08:	88aa		ldrh	r2, [r5, #4]
  2e2c0a:	48d6		ldr	r0, =0x108c	; via 0x2e2f64
  2e2c0c:	4282		cmp	r2, r0
  2e2c0e:	da17		bge	0x2e2c40
; Vbat < 4236
  2e2c10:	49d6		ldr	r1, =0x17749c8	; via 0x2e2f6c
  2e2c12:	2000		mov	r0, #0
  2e2c14:	8008		strh	r0, [r1, #0]
  2e2c16:	e046		b	0x2e2ca6
; Vbat >= 4236
  2e2c40:	4bca		ldr	r3, =0x17749c8	; via 0x2e2f6c
  2e2c42:	8818		ldrh	r0, [r3, #0]
  2e2c44:	3001		add	r0, #1
  2e2c46:	0400		lsl	r0, r0, #16
  2e2c48:	0c01		lsr	r1, r0, #16
  2e2c4a:	8019		strh	r1, [r3, #0]
  2e2c4c:	48c8		ldr	r0, =0x17749c4	; via 0x2e2f70
  2e2c4e:	4682		mov	r10, r0
  2e2c50:	8800		ldrh	r0, [r0, #0]
  2e2c52:	4281		cmp	r1, r0
  2e2c54:	dd27		ble	0x2e2ca6
; Vbat has been high 4 times in a row
  2e2c56:	4fc7		ldr	r7, =0x17749ca	; via 0x2e2f74
  2e2c58:	8839		ldrh	r1, [r7, #0]
  2e2c5a:	48c7		ldr	r0, =0x17749c6	; via 0x2e2f78
  2e2c5c:	8800		ldrh	r0, [r0, #0]
  2e2c5e:	3830		sub	r0, #48	; 0x30
  2e2c60:	4288		cmp	r0, r1
  2e2c62:	dc1d		bgt	0x2e2ca0
; DAC -= 2
  2e2c64:	1e88		sub	r0, r1, #2
  2e2c66:	8038		strh	r0, [r7, #0]
  2e2c68:	2001		mov	r0, #1
  2e2c6a:	213a		mov	r1, #58	; 0x3a
  2e2c6c:	2200		mov	r2, #0
  2e2c6e:	f066 facd	bl	0x34920c
  2e2c72:	883a		ldrh	r2, [r7, #0]
  2e2c74:	2001		mov	r0, #1
  2e2c76:	2132		mov	r1, #50	; 0x32
  2e2c78:	f066 fac8	bl	0x34920c
  2e2c7c:	2001		mov	r0, #1
  2e2c7e:	213a		mov	r1, #58	; 0x3a
  2e2c80:	2201		mov	r2, #1
  2e2c82:	f066 fac3	bl	0x34920c
; set counter threshold to 10 (started out as 3)
  2e2c86:	4650		mov	r0, r10
  2e2c88:	210a		mov	r1, #10	; 0xa
  2e2c8a:	8001		strh	r1, [r0, #0]
; "Sub CV DAC" trace
  2e2c8c:	883a		ldrh	r2, [r7, #0]
  2e2c8e:	484f		ldr	r0, =0xa0020	; via 0x2e2dcc
  2e2c90:	9000		str	r0, [sp, #0]
  2e2c92:	a094		add	r0, pc, #592	; 0x250
  2e2c94:	210b		mov	r1, #11	; 0xb
  2e2c96:	2305		mov	r3, #5
  2e2c98:	f0f7 ffcc	bl	0x3dac34
  2e2c9c:	48bc		ldr	r0, =0x1774b7c	; via 0x2e2f90
  2e2c9e:	8802		ldrh	r2, [r0, #0]
; counter to 0
  2e2ca0:	48b2		ldr	r0, =0x17749c8	; via 0x2e2f6c
  2e2ca2:	2100		mov	r1, #0
  2e2ca4:	8001		strh	r1, [r0, #0]
; end of high Vbat check
; now check against low threshold of 4160
  2e2ca6:	2041		mov	r0, #65	; 0x41
  2e2ca8:	0180		lsl	r0, r0, #6
  2e2caa:	4282		cmp	r2, r0
  2e2cac:	db10		blt	0x2e2cd0
; Vbat >= 4160
  2e2cae:	49b3		ldr	r1, =0x17749c0	; via 0x2e2f7c
  2e2cb0:	2000		mov	r0, #0
  2e2cb2:	8008		strh	r0, [r1, #0]
  2e2cb4:	e041		b	0x2e2d3a
; Vbat < 4160
; increment counter
  2e2cd0:	49aa		ldr	r1, =0x17749c0	; via 0x2e2f7c
  2e2cd2:	8808		ldrh	r0, [r1, #0]
  2e2cd4:	3001		add	r0, #1
  2e2cd6:	0400		lsl	r0, r0, #16
  2e2cd8:	0c00		lsr	r0, r0, #16
  2e2cda:	8008		strh	r0, [r1, #0]
  2e2cdc:	4fa4		ldr	r7, =0x17749c4	; via 0x2e2f70
  2e2cde:	8839		ldrh	r1, [r7, #0]
  2e2ce0:	4288		cmp	r0, r1
  2e2ce2:	dd2a		ble	0x2e2d3a
; counter incremented past the limit
  2e2ce4:	2000		mov	r0, #0
  2e2ce6:	4683		mov	r11, r0
  2e2ce8:	49a2		ldr	r1, =0x17749ca	; via 0x2e2f74
  2e2cea:	880b		ldrh	r3, [r1, #0]
  2e2cec:	1c18		add	r0, r3, #0
  2e2cee:	3807		sub	r0, #7
  2e2cf0:	4aa1		ldr	r2, =0x17749c6	; via 0x2e2f78
  2e2cf2:	8812		ldrh	r2, [r2, #0]
  2e2cf4:	4290		cmp	r0, r2
  2e2cf6:	dc1d		bgt	0x2e2d34
  2e2cf8:	468a		mov	r10, r1
  2e2cfa:	1c58		add	r0, r3, #1
  2e2cfc:	8008		strh	r0, [r1, #0]
  2e2cfe:	2001		mov	r0, #1
  2e2d00:	213a		mov	r1, #58	; 0x3a
  2e2d02:	2200		mov	r2, #0
  2e2d04:	f066 fa82	bl	0x34920c
  2e2d08:	4650		mov	r0, r10
  2e2d0a:	8802		ldrh	r2, [r0, #0]
  2e2d0c:	2001		mov	r0, #1
  2e2d0e:	2132		mov	r1, #50	; 0x32
  2e2d10:	f066 fa7c	bl	0x34920c
  2e2d14:	2001		mov	r0, #1
  2e2d16:	213a		mov	r1, #58	; 0x3a
  2e2d18:	2201		mov	r2, #1
  2e2d1a:	f066 fa77	bl	0x34920c
  2e2d1e:	200a		mov	r0, #10	; 0xa
  2e2d20:	8038		strh	r0, [r7, #0]
; "Add CV DAC" trace
  2e2d22:	4650		mov	r0, r10
  2e2d24:	8802		ldrh	r2, [r0, #0]
  2e2d26:	4829		ldr	r0, =0xa0020	; via 0x2e2dcc
  2e2d28:	9000		str	r0, [sp, #0]
  2e2d2a:	a071		add	r0, pc, #452	; 0x1c4
  2e2d2c:	210b		mov	r1, #11	; 0xb
  2e2d2e:	2305		mov	r3, #5
  2e2d30:	f0f7 ff80	bl	0x3dac34
; zero the counter
  2e2d34:	4891		ldr	r0, =0x17749c0	; via 0x2e2f7c
  2e2d36:	4659		mov	r1, r11
  2e2d38:	8001		strh	r1, [r0, #0]
; end of DAC adjustment logic
; "Vbat (MADC code) " trace
  2e2d3a:	4824		ldr	r0, =0xa0020	; via 0x2e2dcc
  2e2d3c:	9000		str	r0, [sp, #0]
  2e2d3e:	a07c		add	r0, pc, #496	; 0x1f0
  2e2d40:	2111		mov	r1, #17	; 0x11
  2e2d42:	4642		mov	r2, r8
  2e2d44:	2305		mov	r3, #5
  2e2d46:	f0f7 ff75	bl	0x3dac34
; get the display backlight current draw
  2e2d4a:	f0fc faba	bl	0x3df2c2
  2e2d4e:	4649		mov	r1, r9
  2e2d50:	6809		ldr	r1, [r1, #0]
  2e2d52:	894a		ldrh	r2, [r1, #10]	; 0xa
  2e2d54:	1810		add	r0, r2, r0
  2e2d56:	0400		lsl	r0, r0, #16
  2e2d58:	0c00		lsr	r0, r0, #16
  2e2d5a:	4284		cmp	r4, r0
  2e2d5c:	dc38		bgt	0x2e2dd0
; Ichg <= end_current + display_backlight_current
  2e2d5e:	4a88		ldr	r2, =0x17749c2	; via 0x2e2f80
  2e2d60:	8810		ldrh	r0, [r2, #0]
  2e2d62:	3001		add	r0, #1
  2e2d64:	0400		lsl	r0, r0, #16
  2e2d66:	0c00		lsr	r0, r0, #16
  2e2d68:	8010		strh	r0, [r2, #0]
  2e2d6a:	281e		cmp	r0, #30	; 0x1e
  2e2d6c:	dd1c		ble	0x2e2da8
; this seems to be the end-of-charge condition
  2e2d6e:	4985		ldr	r1, =0x17749b8	; via 0x2e2f84
  2e2d70:	2000		mov	r0, #0
  2e2d72:	7008		strb	r0, [r1, #0]
  2e2d74:	f7ff fabb	bl	0x2e22ee	; $pwr_stop_charging
  2e2d78:	f0b2 f86a	bl	0x394e50	; $pwr_send_charge_stop_event ?
; "Fast charge termination criterion" trace
  2e2d7c:	4813		ldr	r0, =0xa0020	; via 0x2e2dcc
  2e2d7e:	9000		str	r0, [sp, #0]
  2e2d80:	a05e		add	r0, pc, #376	; 0x178
  2e2d82:	2121		mov	r1, #33	; 0x21
  2e2d84:	2200		mov	r2, #0
  2e2d86:	43d2		mvn	r2, r2
  2e2d88:	2305		mov	r3, #5
  2e2d8a:	f0f7 ff53	bl	0x3dac34
  2e2d8e:	2032		mov	r0, #50	; 0x32
  2e2d90:	6831		ldr	r1, [r6, #0]
  2e2d92:	5c40		ldrb	r0, [r0, r1]
  2e2d94:	2800		cmp	r0, #0
  2e2d96:	d13a		bne	0x2e2e0e
  2e2d98:	2001		mov	r0, #1
  2e2d9a:	213c		mov	r1, #60	; 0x3c
  2e2d9c:	2201		mov	r2, #1
  2e2d9e:	f066 fa35	bl	0x34920c
  2e2da2:	e045		b	0x2e2e30
  2e2da4:	4e70		ldr	r6, =0x10ae	; via 0x2e2f68
  2e2da6:	0177		lsl	r7, r6, #5
; counter <= 30
  2e2da8:	2048		mov	r0, #72	; 0x48
  2e2daa:	5c40		ldrb	r0, [r0, r1]
  2e2dac:	2801		cmp	r0, #1
  2e2dae:	d137		bne	0x2e2e20
  2e2db0:	2400		mov	r4, #0
  2e2db2:	4874		ldr	r0, =0x17749b8	; via 0x2e2f84
  2e2db4:	7801		ldrb	r1, [r0, #0]
  2e2db6:	2900		cmp	r1, #0
  2e2db8:	d005		beq	0x2e2dc6
  2e2dba:	7004		strb	r4, [r0, #0]
  2e2dbc:	f0b2 f848	bl	0x394e50
  2e2dc0:	2064		mov	r0, #100	; 0x64
  2e2dc2:	f0b2 f8ba	bl	0x394f3a
  2e2dc6:	486e		ldr	r0, =0x17749c2	; via 0x2e2f80
  2e2dc8:	8004		strh	r4, [r0, #0]
  2e2dca:	e029		b	0x2e2e20
; Ichg hasn't fallen low enough
; zero the Ichg low counter
  2e2dd0:	4a6b		ldr	r2, =0x17749c2	; via 0x2e2f80
  2e2dd2:	2000		mov	r0, #0
  2e2dd4:	8010		strh	r0, [r2, #0]
; another Vbat check
  2e2dd6:	88a8		ldrh	r0, [r5, #4]
  2e2dd8:	4a63		ldr	r2, =0x10ae	; via 0x2e2f68
  2e2dda:	4290		cmp	r0, r2
  2e2ddc:	dd1a		ble	0x2e2e14
; Vbat > 4270
  2e2dde:	4866		ldr	r0, =0x17749c6	; via 0x2e2f78
  2e2de0:	8800		ldrh	r0, [r0, #0]
  2e2de2:	4a64		ldr	r2, =0x17749ca	; via 0x2e2f74
  2e2de4:	8812		ldrh	r2, [r2, #0]
  2e2de6:	1a80		sub	r0, r0, r2
  2e2de8:	2832		cmp	r0, #50	; 0x32
  2e2dea:	dd13		ble	0x2e2e14
; overvoltage handling
  2e2dec:	f7ff fa7f	bl	0x2e22ee
  2e2df0:	2009		mov	r0, #9
  2e2df2:	43c0		mvn	r0, r0
  2e2df4:	8028		strh	r0, [r5, #0]
  2e2df6:	4865		ldr	r0, =0xa0020	; via 0x2e2f8c
  2e2df8:	9000		str	r0, [sp, #0]
  2e2dfa:	a049		add	r0, pc, #292	; 0x124
  2e2dfc:	210e		mov	r1, #14	; 0xe
  2e2dfe:	2200		mov	r2, #0
  2e2e00:	43d2		mvn	r2, r2
  2e2e02:	2302		mov	r3, #2
  2e2e04:	f0f7 ff16	bl	0x3dac34
  2e2e08:	2003		mov	r0, #3
  2e2e0a:	f0b2 f85a	bl	0x394ec2
  2e2e0e:	f0d0 fed0	bl	0x3b3bb2
  2e2e12:	e00d		b	0x2e2e30
; overcurrent check
  2e2e14:	2033		mov	r0, #51	; 0x33
  2e2e16:	0100		lsl	r0, r0, #4
  2e2e18:	8909		ldrh	r1, [r1, #8]
  2e2e1a:	1840		add	r0, r0, r1
  2e2e1c:	4284		cmp	r4, r0
  2e2e1e:	dc05		bgt	0x2e2e2c
; TIMER2 reset
  2e2e20:	2002		mov	r0, #2
  2e2e22:	4959		ldr	r1, =0x363	; via 0x2e2f88
  2e2e24:	2200		mov	r2, #0
  2e2e26:	f048 f827	bl	0x32ae78
  2e2e2a:	e001		b	0x2e2e30
  2e2e2c:	f7ff fad1	bl	0x2e23d2
  2e2e30:	b002		add	sp, #8
  2e2e32:	bc0f		pop	{r0, r1, r2, r3}
  2e2e34:	4680		mov	r8, r0
  2e2e36:	4689		mov	r9, r1
  2e2e38:	4692		mov	r10, r2
  2e2e3a:	469b		mov	r11, r3
  2e2e3c:	bdf0		pop	{r4, r5, r6, r7, pc}

$l1_abb_power_on:
  31c036:	b510		push	{r4, lr}
  31c038:	b084		sub	sp, #16	; 0x10
  31c03a:	2000		mov	r0, #0
  31c03c:	4669		mov	r1, sp
  31c03e:	8008		strh	r0, [r1, #0]
  31c040:	466a		mov	r2, sp
  31c042:	213c		mov	r1, #60	; 0x3c
  31c044:	8051		strh	r1, [r2, #2]
  31c046:	2105		mov	r1, #5
  31c048:	8091		strh	r1, [r2, #4]
  31c04a:	4669		mov	r1, sp
  31c04c:	80c8		strh	r0, [r1, #6]
  31c04e:	2201		mov	r2, #1
  31c050:	810a		strh	r2, [r1, #8]
  31c052:	8148		strh	r0, [r1, #10]	; 0xa
  31c054:	8188		strh	r0, [r1, #12]	; 0xc
  31c056:	4668		mov	r0, sp
  31c058:	f0d3 fcc5	bl	0x3ef9e6	; $SPI_InitDev
  31c05c:	f02d f924	bl	0x3492a8	; $ABB_free_13M
  31c060:	f02d f954	bl	0x34930c	; $ABB_Read_Status
  31c064:	2001		mov	r0, #1
  31c066:	2136		mov	r1, #54	; 0x36
  31c068:	f02d f8f7	bl	0x34925a	; $ABB_Read_Register_on_page
  31c06c:	4cdf		ldr	r4, =0x8029a4	; via 0x31c3ec
  31c06e:	48e0		ldr	r0, =0x15a4	; via 0x31c3f0
  31c070:	5d01		ldrb	r1, [r0, r4]
  31c072:	2005		mov	r0, #5
  31c074:	0340		lsl	r0, r0, #13
  31c076:	f02d f96b	bl	0x349350	; $ABB_on
  31c07a:	20ff		mov	r0, #255	; 0xff
  31c07c:	49ac		ldr	r1, =0x3df	; via 0x31c330
  31c07e:	f02d fa5c	bl	0x34953a	; $ABB_Conf_ADC
  31c082:	48db		ldr	r0, =0x15a4	; via 0x31c3f0
  31c084:	5d00		ldrb	r0, [r0, r4]
  31c086:	2800		cmp	r0, #0
  31c088:	d101		bne	0x31c08e
  31c08a:	f0c0 fc4d	bl	0x3dc928	; $Create_ABB_HISR
  31c08e:	4c24		ldr	r4, =0xffd001a8	; via 0x31c120
  31c090:	48a8		ldr	r0, =0x8028a5	; via 0x31c334
  31c092:	7800		ldrb	r0, [r0, #0]
  31c094:	2800		cmp	r0, #0
  31c096:	d108		bne	0x31c0aa
  31c098:	20ff		mov	r0, #255	; 0xff
  31c09a:	30dd		add	r0, #221	; 0xdd
  31c09c:	1900		add	r0, r0, r4
  31c09e:	2100		mov	r1, #0
  31c0a0:	2200		mov	r2, #0
  31c0a2:	2301		mov	r3, #1
  31c0a4:	f0de f83a	bl	0x3fa11c
  31c0a8:	e007		b	0x31c0ba
  31c0aa:	20ff		mov	r0, #255	; 0xff
  31c0ac:	30dd		add	r0, #221	; 0xdd
  31c0ae:	1900		add	r0, r0, r4
  31c0b0:	2105		mov	r1, #5
  31c0b2:	2205		mov	r2, #5
  31c0b4:	2301		mov	r3, #1
  31c0b6:	f0de f831	bl	0x3fa11c
  31c0ba:	489f		ldr	r0, =0x802868	; via 0x31c338
  31c0bc:	2196		mov	r1, #150	; 0x96
  31c0be:	5a09		ldrh	r1, [r1, r0]
  31c0c0:	8121		strh	r1, [r4, #8]
  31c0c2:	2198		mov	r1, #152	; 0x98
  31c0c4:	5a09		ldrh	r1, [r1, r0]
  31c0c6:	8661		strh	r1, [r4, #50]	; 0x32
  31c0c8:	219a		mov	r1, #154	; 0x9a
  31c0ca:	5a09		ldrh	r1, [r1, r0]
  31c0cc:	86a1		strh	r1, [r4, #52]	; 0x34
  31c0ce:	219c		mov	r1, #156	; 0x9c
  31c0d0:	5a09		ldrh	r1, [r1, r0]
  31c0d2:	86e1		strh	r1, [r4, #54]	; 0x36
  31c0d4:	4a99		ldr	r2, =0xffd001e8	; via 0x31c33c
  31c0d6:	219e		mov	r1, #158	; 0x9e
  31c0d8:	5a09		ldrh	r1, [r1, r0]
  31c0da:	80d1		strh	r1, [r2, #6]
  31c0dc:	21a0		mov	r1, #160	; 0xa0
  31c0de:	5a09		ldrh	r1, [r1, r0]
  31c0e0:	8621		strh	r1, [r4, #48]	; 0x30
  31c0e2:	21a2		mov	r1, #162	; 0xa2
  31c0e4:	5a09		ldrh	r1, [r1, r0]
  31c0e6:	8761		strh	r1, [r4, #58]	; 0x3a
  31c0e8:	21a4		mov	r1, #164	; 0xa4
  31c0ea:	5a09		ldrh	r1, [r1, r0]
  31c0ec:	87a1		strh	r1, [r4, #60]	; 0x3c
  31c0ee:	21a6		mov	r1, #166	; 0xa6
  31c0f0:	5a09		ldrh	r1, [r1, r0]
  31c0f2:	87e1		strh	r1, [r4, #62]	; 0x3e
  31c0f4:	21a8		mov	r1, #168	; 0xa8
  31c0f6:	5a09		ldrh	r1, [r1, r0]
  31c0f8:	8011		strh	r1, [r2, #0]
  31c0fa:	21aa		mov	r1, #170	; 0xaa
  31c0fc:	5a09		ldrh	r1, [r1, r0]
  31c0fe:	8051		strh	r1, [r2, #2]
  31c100:	21ac		mov	r1, #172	; 0xac
  31c102:	5a09		ldrh	r1, [r1, r0]
  31c104:	8091		strh	r1, [r2, #4]
  31c106:	21ae		mov	r1, #174	; 0xae
  31c108:	5a09		ldrh	r1, [r1, r0]
  31c10a:	85e1		strh	r1, [r4, #46]	; 0x2e
  31c10c:	21b0		mov	r1, #176	; 0xb0
  31c10e:	5a09		ldrh	r1, [r1, r0]
  31c110:	8721		strh	r1, [r4, #56]	; 0x38
  31c112:	21b2		mov	r1, #178	; 0xb2
  31c114:	5a08		ldrh	r0, [r1, r0]
  31c116:	85a0		strh	r0, [r4, #44]	; 0x2c
  31c118:	b004		add	sp, #16	; 0x10
  31c11a:	bd10		pop	{r4, pc}

$l1_initialize:
  31c6e4:	b530		push	{r4, r5, lr}
  31c6e6:	1c04		add	r4, r0, #0
  31c6e8:	483f		ldr	r0, =0x803f48	; via 0x31c7e8
  31c6ea:	7800		ldrb	r0, [r0, #0]
  31c6ec:	2800		cmp	r0, #0
  31c6ee:	d101		bne	0x31c6f4
  31c6f0:	f59f fdd1	bl	0xbc296
  31c6f4:	4968		ldr	r1, =0x8029a4	; via 0x31c898
  31c6f6:	4865		ldr	r0, =0x15a4	; via 0x31c88c
  31c6f8:	2500		mov	r5, #0
  31c6fa:	5445		strb	r5, [r0, r1]
  31c6fc:	f0c6 fbf6	bl	0x3e2eec
  31c700:	481c		ldr	r0, =0x802868	; via 0x31c774
  31c702:	7821		ldrb	r1, [r4, #0]
  31c704:	7001		strb	r1, [r0, #0]
  31c706:	213d		mov	r1, #61	; 0x3d
  31c708:	7922		ldrb	r2, [r4, #4]
  31c70a:	540a		strb	r2, [r1, r0]
  31c70c:	88e1		ldrh	r1, [r4, #6]
  31c70e:	87c1		strh	r1, [r0, #62]	; 0x3e
  31c710:	21c0		mov	r1, #192	; 0xc0
  31c712:	540d		strb	r5, [r1, r0]
  31c714:	22c1		mov	r2, #193	; 0xc1
  31c716:	2101		mov	r1, #1
  31c718:	5411		strb	r1, [r2, r0]
  31c71a:	22c2		mov	r2, #194	; 0xc2
  31c71c:	5411		strb	r1, [r2, r0]
  31c71e:	22c3		mov	r2, #195	; 0xc3
  31c720:	5411		strb	r1, [r2, r0]
  31c722:	495e		ldr	r1, =0x802228	; via 0x31c89c
  31c724:	7a22		ldrb	r2, [r4, #8]
  31c726:	700a		strb	r2, [r1, #0]
  31c728:	68e2		ldr	r2, [r4, #12]	; 0xc
  31c72a:	604a		str	r2, [r1, #4]
  31c72c:	213c		mov	r1, #60	; 0x3c
  31c72e:	78e2		ldrb	r2, [r4, #3]
  31c730:	540a		strb	r2, [r1, r0]
  31c732:	f0dd fce3	bl	0x3fa0fc	; $Cust_init_std
  31c736:	f0dd fce9	bl	0x3fa10c	; $Cust_init_params
  31c73a:	f7ff ffb2	bl	0x31c6a2	; $l1_dpll_init_var
  31c73e:	f0dc fd8d	bl	0x3f925c	; $dsp_power_on
  31c742:	f7ff fc78	bl	0x31c036	; $l1_abb_power_on
  31c746:	f7ff fc68	bl	0x31c01a	; $l1_tpu_init
  31c74a:	f7ff fb47	bl	0x31bddc	; $l1_dsp_init
  31c74e:	f7ff fdf9	bl	0x31c344	; $l1_initialize_var
  31c752:	f0dc fccb	bl	0x3f90ec	; $initialize_l1pvar
  31c756:	bd30		pop	{r4, r5, pc}

$rvf_get_tick_count:
  32ae64:	b500		push	{lr}
  32ae66:	f0ce fbb1	bl	0x3f95cc	; $TMT_Retrieve_Clock
  32ae6a:	bd00		pop	{pc}

$rvf_start_timer:
  32ae78:	b500		push	{lr}
  32ae7a:	b085		sub	sp, #20	; 0x14
  32ae7c:	466b		mov	r3, sp
  32ae7e:	741a		strb	r2, [r3, #16]	; 0x10
  32ae80:	9103		str	r1, [sp, #12]	; 0xc
  32ae82:	4669		mov	r1, sp
  32ae84:	7208		strb	r0, [r1, #8]
  32ae86:	f786 fd4c	bl	0x2b1922	; $rvf_get_taskid
  32ae8a:	4669		mov	r1, sp
  32ae8c:	7448		strb	r0, [r1, #17]	; 0x11
  32ae8e:	4668		mov	r0, sp
  32ae90:	7a00		ldrb	r0, [r0, #8]
  32ae92:	2803		cmp	r0, #3
  32ae94:	d003		beq	0x32ae9e
  32ae96:	4668		mov	r0, sp
  32ae98:	7a00		ldrb	r0, [r0, #8]
  32ae9a:	2802		cmp	r0, #2
  32ae9c:	d108		bne	0x32aeb0
  32ae9e:	2000		mov	r0, #0
  32aea0:	9000		str	r0, [sp, #0]
  32aea2:	a0b3		add	r0, pc, #716	; 0x2cc
  32aea4:	2125		mov	r1, #37	; 0x25
  32aea6:	2200		mov	r2, #0
  32aea8:	43d2		mvn	r2, r2
  32aeaa:	2305		mov	r3, #5
  32aeac:	f0af fec2	bl	0x3dac34
  32aeb0:	9803		ldr	r0, [sp, #12]	; 0xc
  32aeb2:	2800		cmp	r0, #0
  32aeb4:	d101		bne	0x32aeba
  32aeb6:	2001		mov	r0, #1
  32aeb8:	9003		str	r0, [sp, #12]	; 0xc
  32aeba:	2044		mov	r0, #68	; 0x44
  32aebc:	4669		mov	r1, sp
  32aebe:	7a09		ldrb	r1, [r1, #8]
  32aec0:	4348		mul	r0, r1
  32aec2:	21ff		mov	r1, #255	; 0xff
  32aec4:	3111		add	r1, #17	; 0x11
  32aec6:	466a		mov	r2, sp
  32aec8:	7c52		ldrb	r2, [r2, #17]	; 0x11
  32aeca:	4351		mul	r1, r2
  32aecc:	1840		add	r0, r0, r1
  32aece:	496d		ldr	r1, =0x1701dbc	; via 0x32b084
  32aed0:	1808		add	r0, r1, r0
  32aed2:	2104		mov	r1, #4
  32aed4:	f0ce fba2	bl	0x3f961c	; $TMSE_Control_Timer
  32aed8:	2244		mov	r2, #68	; 0x44
  32aeda:	4668		mov	r0, sp
  32aedc:	7a00		ldrb	r0, [r0, #8]
  32aede:	4342		mul	r2, r0
  32aee0:	20ff		mov	r0, #255	; 0xff
  32aee2:	3011		add	r0, #17	; 0x11
  32aee4:	4669		mov	r1, sp
  32aee6:	7c49		ldrb	r1, [r1, #17]	; 0x11
  32aee8:	4348		mul	r0, r1
  32aeea:	1810		add	r0, r2, r0
  32aeec:	4965		ldr	r1, =0x1701dbc	; via 0x32b084
  32aeee:	1808		add	r0, r1, r0
  32aef0:	4669		mov	r1, sp
  32aef2:	7c09		ldrb	r1, [r1, #16]	; 0x10
  32aef4:	2900		cmp	r1, #0
  32aef6:	d001		beq	0x32aefc
  32aef8:	9b03		ldr	r3, [sp, #12]	; 0xc
  32aefa:	e000		b	0x32aefe
  32aefc:	2300		mov	r3, #0
  32aefe:	4669		mov	r1, sp
  32af00:	2205		mov	r2, #5
  32af02:	700a		strb	r2, [r1, #0]
  32af04:	4960		ldr	r1, =0x32aad1	; via 0x32b088
  32af06:	9a03		ldr	r2, [sp, #12]	; 0xc
  32af08:	f0ce fb70	bl	0x3f95ec	; $TMSE_Reset_Timer
  32af0c:	b005		add	sp, #20	; 0x14
  32af0e:	bd00		pop	{pc}

$rvf_stop_timer:
  32af64:	b500		push	{lr}
  32af66:	b081		sub	sp, #4
  32af68:	4669		mov	r1, sp
  32af6a:	7008		strb	r0, [r1, #0]
  32af6c:	f786 fcd9	bl	0x2b1922	; $rvf_get_taskid
  32af70:	4669		mov	r1, sp
  32af72:	7048		strb	r0, [r1, #1]
  32af74:	2144		mov	r1, #68	; 0x44
  32af76:	4668		mov	r0, sp
  32af78:	7800		ldrb	r0, [r0, #0]
  32af7a:	4341		mul	r1, r0
  32af7c:	20ff		mov	r0, #255	; 0xff
  32af7e:	3011		add	r0, #17	; 0x11
  32af80:	466a		mov	r2, sp
  32af82:	7852		ldrb	r2, [r2, #1]
  32af84:	4350		mul	r0, r2
  32af86:	1808		add	r0, r1, r0
  32af88:	493e		ldr	r1, =0x1701dbc	; via 0x32b084
  32af8a:	1808		add	r0, r1, r0
  32af8c:	2104		mov	r1, #4
  32af8e:	f0ce fb45	bl	0x3f961c	; $TMSE_Control_Timer
  32af92:	b001		add	sp, #4
  32af94:	bd00		pop	{pc}

; pwr_cust module seems to start here

; The following function takes a raw ADC VBAT measurement
; as input (R0) and returns the mV value per the calibration.
$pwr_adc_to_mvolt:
  32dae8:	498b		ldr	r1, =0x801734	; via 0x32dd18
  32daea:	880a		ldrh	r2, [r1, #0]
  32daec:	4342		mul	r2, r0
  32daee:	0a90		lsr	r0, r2, #10
  32daf0:	8a49		ldrh	r1, [r1, #18]	; 0x12
  32daf2:	1808		add	r0, r1, r0
  32daf4:	0400		lsl	r0, r0, #16
  32daf6:	0c00		lsr	r0, r0, #16
  32daf8:	4770		bx	lr

$pwr_adc_to_mA:
; diff from MV100 version: this version subtracts i2v_madc_offset first
  32dafa:	b500		push	{lr}
  32dafc:	49c2		ldr	r1, =0x1774e70	; via 0x32de08
  32dafe:	6809		ldr	r1, [r1, #0]
  32db00:	8909		ldrh	r1, [r1, #8]
  32db02:	4288		cmp	r0, r1
  32db04:	dc01		bgt	0x32db0a
  32db06:	2000		mov	r0, #0
  32db08:	bd00		pop	{pc}
  32db0a:	1a40		sub	r0, r0, r1
  32db0c:	4983		ldr	r1, =0x357	; via 0x32dd1c
  32db0e:	4348		mul	r0, r1
  32db10:	217d		mov	r1, #125	; 0x7d
  32db12:	00c9		lsl	r1, r1, #3
  32db14:	f0c9 fb8a	bl	0x3f722c	; I$DIV
  32db18:	0408		lsl	r0, r1, #16
  32db1a:	0c00		lsr	r0, r0, #16
  32db1c:	bd00		pop	{pc}

$pwr_bat_temp_within_limits:
; the limits are the same as in MV100 version: 0 to 50 deg C
; 1st diff: if the byte var at offset 0x48 is set to 1, then
; out-of-range T is ignored with a warning trace
; 2nd diff: if T is out of range and no ignore-with-warning flag is set,
; the return code is FALSE like in TI's original, but an additional code
; indicating whether T is too high or too low is written into 16-bit var
; at 0x1774b78
  32db1e:	b510		push	{r4, lr}
  32db20:	b082		sub	sp, #8
  32db22:	1c04		add	r4, r0, #0
  32db24:	48b9		ldr	r0, =0xa0020	; via 0x32de0c
  32db26:	9000		str	r0, [sp, #0]
  32db28:	a0c8		add	r0, pc, #800	; 0x320
  32db2a:	2126		mov	r1, #38	; 0x26
  32db2c:	1c22		add	r2, r4, #0
  32db2e:	2305		mov	r3, #5
  32db30:	f0ad f880	bl	0x3dac34
  32db34:	2c32		cmp	r4, #50	; 0x32
  32db36:	da0c		bge	0x32db52
  32db38:	2c00		cmp	r4, #0
  32db3a:	dd0a		ble	0x32db52
  32db3c:	48b3		ldr	r0, =0xa0020	; via 0x32de0c
  32db3e:	9000		str	r0, [sp, #0]
  32db40:	a0cc		add	r0, pc, #816	; 0x330
  32db42:	2121		mov	r1, #33	; 0x21
  32db44:	2200		mov	r2, #0
  32db46:	43d2		mvn	r2, r2
  32db48:	2305		mov	r3, #5
  32db4a:	f0ad f873	bl	0x3dac34
  32db4e:	2001		mov	r0, #1
  32db50:	e01c		b	0x32db8c
  32db52:	2148		mov	r1, #72	; 0x48
  32db54:	48ac		ldr	r0, =0x1774e70	; via 0x32de08
  32db56:	6800		ldr	r0, [r0, #0]
  32db58:	5c08		ldrb	r0, [r1, r0]
  32db5a:	2801		cmp	r0, #1
  32db5c:	d104		bne	0x32db68
  32db5e:	48ab		ldr	r0, =0xa0020	; via 0x32de0c
  32db60:	9000		str	r0, [sp, #0]
  32db62:	a0cd		add	r0, pc, #820	; 0x334
  32db64:	2117		mov	r1, #23	; 0x17
  32db66:	e7ed		b	0x32db44
  32db68:	2c32		cmp	r4, #50	; 0x32
  32db6a:	db01		blt	0x32db70
  32db6c:	2003		mov	r0, #3
  32db6e:	e000		b	0x32db72
  32db70:	2004		mov	r0, #4
  32db72:	43c0		mvn	r0, r0
  32db74:	49b4		ldr	r1, =0x1774b78	; via 0x32de48
  32db76:	8008		strh	r0, [r1, #0]
  32db78:	48a4		ldr	r0, =0xa0020	; via 0x32de0c
  32db7a:	9000		str	r0, [sp, #0]
  32db7c:	a0cc		add	r0, pc, #816	; 0x330
  32db7e:	2122		mov	r1, #34	; 0x22
  32db80:	2200		mov	r2, #0
  32db82:	43d2		mvn	r2, r2
  32db84:	2304		mov	r3, #4
  32db86:	f0ad f855	bl	0x3dac34
  32db8a:	2000		mov	r0, #0
  32db8c:	b002		add	sp, #8
  32db8e:	bd10		pop	{r4, pc}

$pwr_madc_to_Celsius_conv:
; MV100 version uses 10 uA and 50 uA test currents,
; this version uses 30 uA and 80 uA instead
; not analysed further
  32db90:	b5f0		push	{r4, r5, r6, r7, lr}
  32db92:	b082		sub	sp, #8
  32db94:	2351		mov	r3, #81	; 0x51
  32db96:	1ac0		sub	r0, r0, r3
  32db98:	2800		cmp	r0, #0
  32db9a:	d008		beq	0x32dbae
  32db9c:	3828		sub	r0, #40	; 0x28
  32db9e:	2800		cmp	r0, #0
  32dba0:	d001		beq	0x32dba6
  32dba2:	2000		mov	r0, #0
  32dba4:	e04a		b	0x32dc3c
  32dba6:	4ed2		ldr	r6, =0x52e308	; via 0x32def0
  32dba8:	4dd2		ldr	r5, =0x52e2e4	; via 0x32def4
  32dbaa:	200a		mov	r0, #10	; 0xa
  32dbac:	e002		b	0x32dbb4
  32dbae:	4ed2		ldr	r6, =0x52e2f8	; via 0x32def8
  32dbb0:	4dd2		ldr	r5, =0x52e2d4	; via 0x32defc
  32dbb2:	2008		mov	r0, #8
  32dbb4:	8833		ldrh	r3, [r6, #0]
  32dbb6:	4299		cmp	r1, r3
  32dbb8:	dc05		bgt	0x32dbc6
  32dbba:	0043		lsl	r3, r0, #1
  32dbbc:	18f3		add	r3, r6, r3
  32dbbe:	3b02		sub	r3, #2
  32dbc0:	881b		ldrh	r3, [r3, #0]
  32dbc2:	4299		cmp	r1, r3
  32dbc4:	da08		bge	0x32dbd8
  32dbc6:	1c0a		add	r2, r1, #0
  32dbc8:	4890		ldr	r0, =0xa0020	; via 0x32de0c
  32dbca:	9000		str	r0, [sp, #0]
  32dbcc:	a0c1		add	r0, pc, #772	; 0x304
  32dbce:	211a		mov	r1, #26	; 0x1a
  32dbd0:	2305		mov	r3, #5
  32dbd2:	f0ad f82f	bl	0x3dac34
  32dbd6:	e7e4		b	0x32dba2
  32dbd8:	2800		cmp	r0, #0
  32dbda:	d00d		beq	0x32dbf8
  32dbdc:	2300		mov	r3, #0
  32dbde:	005c		lsl	r4, r3, #1
  32dbe0:	19a7		add	r7, r4, r6
  32dbe2:	1ebf		sub	r7, r7, #2
  32dbe4:	46bc		mov	r12, r7
  32dbe6:	5b37		ldrh	r7, [r6, r4]
  32dbe8:	42b9		cmp	r1, r7
  32dbea:	da0a		bge	0x32dc02
  32dbec:	1c5b		add	r3, r3, #1
  32dbee:	061b		lsl	r3, r3, #24
  32dbf0:	0e1b		lsr	r3, r3, #24
  32dbf2:	3801		sub	r0, #1
  32dbf4:	2800		cmp	r0, #0
  32dbf6:	d1f2		bne	0x32dbde
  32dbf8:	49c1		ldr	r1, =0x1774b80	; via 0x32df00
  32dbfa:	2001		mov	r0, #1
  32dbfc:	0280		lsl	r0, r0, #10
  32dbfe:	8008		strh	r0, [r1, #0]
  32dc00:	e7cf		b	0x32dba2
  32dc02:	2b00		cmp	r3, #0
  32dc04:	d014		beq	0x32dc30
  32dc06:	886b		ldrh	r3, [r5, #2]
  32dc08:	8828		ldrh	r0, [r5, #0]
  32dc0a:	1a18		sub	r0, r3, r0
  32dc0c:	0400		lsl	r0, r0, #16
  32dc0e:	0c00		lsr	r0, r0, #16
  32dc10:	1bc9		sub	r1, r1, r7
  32dc12:	0409		lsl	r1, r1, #16
  32dc14:	0c09		lsr	r1, r1, #16
  32dc16:	4348		mul	r0, r1
  32dc18:	4661		mov	r1, r12
  32dc1a:	8809		ldrh	r1, [r1, #0]
  32dc1c:	1bc9		sub	r1, r1, r7
  32dc1e:	0409		lsl	r1, r1, #16
  32dc20:	0c09		lsr	r1, r1, #16
  32dc22:	f0c9 fb03	bl	0x3f722c
  32dc26:	5b60		ldrh	r0, [r4, r5]
  32dc28:	1a40		sub	r0, r0, r1
  32dc2a:	0400		lsl	r0, r0, #16
  32dc2c:	1400		asr	r0, r0, #16
  32dc2e:	e001		b	0x32dc34
  32dc30:	2000		mov	r0, #0
  32dc32:	5e28		ldrsh	r0, [r5, r0]
  32dc34:	49b2		ldr	r1, =0x1774b80	; via 0x32df00
  32dc36:	8010		strh	r0, [r2, #0]
  32dc38:	8008		strh	r0, [r1, #0]
  32dc3a:	2001		mov	r0, #1
  32dc3c:	b002		add	sp, #8
  32dc3e:	bdf0		pop	{r4, r5, r6, r7, pc}

$pwr_get_battery_temperature:
  32dc40:	b500		push	{lr}
; setting BCICTL1 to THEN_80uA
  32dc42:	2001		mov	r0, #1
  32dc44:	2138		mov	r1, #56	; 0x38
  32dc46:	2279		mov	r2, #121	; 0x79
  32dc48:	f01b fae0	bl	0x34920c	; $ABB_Write_Register_on_page
; setting pwr_env_ctrl_blk->timer0_state, same code as in MV100 version
  32dc4c:	486e		ldr	r0, =0x1774e70	; via 0x32de08
  32dc4e:	6800		ldr	r0, [r0, #0]
  32dc50:	2103		mov	r1, #3
  32dc52:	6301		str	r1, [r0, #48]	; 0x30
; setting TIMER0 to 65 ticks (300 ms)
  32dc54:	2000		mov	r0, #0
  32dc56:	2141		mov	r1, #65	; 0x41
  32dc58:	2200		mov	r2, #0
  32dc5a:	f7fd f90d	bl	0x32ae78	; $rvf_start_timer
  32dc5e:	bd00		pop	{pc}

$pwr_bat_50uA_temp_test_timer_process:
  32dc60:	b510		push	{r4, lr}
  32dc62:	b082		sub	sp, #8
; test if we are in CHARGE_STOPPED state
  32dc64:	4868		ldr	r0, =0x1774e70	; via 0x32de08
  32dc66:	6800		ldr	r0, [r0, #0]
  32dc68:	6840		ldr	r0, [r0, #4]
  32dc6a:	2800		cmp	r0, #0
  32dc6c:	d105		bne	0x32dc7a
; CHARGE_STOPPED state: write 1 (just MESBAT) into BCICTL1
  32dc6e:	2001		mov	r0, #1
  32dc70:	2138		mov	r1, #56	; 0x38
  32dc72:	2201		mov	r2, #1
  32dc74:	f01b faca	bl	0x34920c
  32dc78:	e04b		b	0x32dd12	; return
; not in CHARGE_STOPPED state
  32dc7a:	f000 fb0b	bl	0x32e294
  32dc7e:	2800		cmp	r0, #0
  32dc80:	d147		bne	0x32dd12	; return
; mystery function above must return 0 for normal path to continue
; "TIMER0: Battery coarse temp test" trace emitted here
  32dc82:	4862		ldr	r0, =0xa0020	; via 0x32de0c
  32dc84:	9000		str	r0, [sp, #0]
  32dc86:	a0d1		add	r0, pc, #836	; 0x344
  32dc88:	2120		mov	r1, #32	; 0x20
  32dc8a:	2200		mov	r2, #0
  32dc8c:	43d2		mvn	r2, r2
  32dc8e:	2302		mov	r3, #2
  32dc90:	f0ac ffd0	bl	0x3dac34
; pwr_env_ctrl_blk->bat_celsius_temp = (INT16)(0xFFFF);
  32dc94:	4c5c		ldr	r4, =0x1774e70	; via 0x32de08
  32dc96:	6821		ldr	r1, [r4, #0]
  32dc98:	2000		mov	r0, #0
  32dc9a:	43c0		mvn	r0, r0
  32dc9c:	8708		strh	r0, [r1, #56]	; 0x38
; write 0 into ADIN2REG
  32dc9e:	2001		mov	r0, #1
  32dca0:	2128		mov	r1, #40	; 0x28
  32dca2:	2200		mov	r2, #0
  32dca4:	f01b fab2	bl	0x34920c	; $ABB_Write_Register_on_page
; delay 2 ticks
  32dca8:	2002		mov	r0, #2
  32dcaa:	f783 fdf8	bl	0x2b189e	; rvf_delay()
; now read ADIN2REG
  32dcae:	2001		mov	r0, #1
  32dcb0:	2128		mov	r1, #40	; 0x28
  32dcb2:	f01b fad2	bl	0x34925a	; $ABB_Read_Register_on_page
  32dcb6:	1c01		add	r1, r0, #0
  32dcb8:	6822		ldr	r2, [r4, #0]
  32dcba:	3238		add	r2, #56	; 0x38
  32dcbc:	2079		mov	r0, #121	; 0x79
  32dcbe:	f7ff ff67	bl	0x32db90	; $pwr_madc_to_Celsius_conv
  32dcc2:	2800		cmp	r0, #0
  32dcc4:	d10d		bne	0x32dce2
; outside of the "coarse" range
; set pwr_env_ctrl_blk->timer0_state to the "fine" code, same as in MV100
  32dcc6:	6821		ldr	r1, [r4, #0]
  32dcc8:	2004		mov	r0, #4
  32dcca:	6308		str	r0, [r1, #48]	; 0x30
; set 30 uA current
  32dccc:	2001		mov	r0, #1
  32dcce:	2138		mov	r1, #56	; 0x38
  32dcd0:	2251		mov	r2, #81	; 0x51
  32dcd2:	f01b fa9b	bl	0x34920c
; same 65 ticks (300 ms) as before
  32dcd6:	2000		mov	r0, #0
  32dcd8:	2141		mov	r1, #65	; 0x41
  32dcda:	2200		mov	r2, #0
  32dcdc:	f7fd f8cc	bl	0x32ae78
  32dce0:	e017		b	0x32dd12	; return
; T inside the "coarse" range
; write 1 (just MESBAT) into BCICTL1
  32dce2:	2001		mov	r0, #1
  32dce4:	2138		mov	r1, #56	; 0x38
  32dce6:	2201		mov	r2, #1
  32dce8:	f01b fa90	bl	0x34920c
; dispatch by state
  32dcec:	6820		ldr	r0, [r4, #0]
  32dcee:	6840		ldr	r0, [r0, #4]
  32dcf0:	2802		cmp	r0, #2
  32dcf2:	d00c		beq	0x32dd0e
  32dcf4:	2803		cmp	r0, #3
  32dcf6:	d007		beq	0x32dd08
  32dcf8:	2801		cmp	r0, #1
  32dcfa:	d002		beq	0x32dd02
  32dcfc:	f083 fce0	bl	0x3b16c0	; $pwr_get_bat_info
  32dd00:	e007		b	0x32dd12
  32dd02:	f7b4 fb2b	bl	0x2e235c	; $pwr_calibration_process
  32dd06:	e004		b	0x32dd12
  32dd08:	f7b4 ff04	bl	0x2e2b14	; $pwr_CV_charge_process
  32dd0c:	e001		b	0x32dd12
  32dd0e:	f7b4 fd93	bl	0x2e2838	; $pwr_CI_charge_process
  32dd12:	b002		add	sp, #8
  32dd14:	bd10		pop	{r4, pc}
  32dd16:	46c0		nop			(mov r8, r8)

$pwr_bat_10uA_temp_test_timer_process:
  32dd20:	b510		push	{r4, lr}
  32dd22:	b082		sub	sp, #8
  32dd24:	4838		ldr	r0, =0x1774e70	; via 0x32de08
  32dd26:	6800		ldr	r0, [r0, #0]
  32dd28:	6840		ldr	r0, [r0, #4]
  32dd2a:	2800		cmp	r0, #0
  32dd2c:	d101		bne	0x32dd32
  32dd2e:	2138		mov	r1, #56	; 0x38
  32dd30:	e048		b	0x32ddc4
  32dd32:	f000 faaf	bl	0x32e294
  32dd36:	2800		cmp	r0, #0
  32dd38:	d164		bne	0x32de04
  32dd3a:	4834		ldr	r0, =0xa0020	; via 0x32de0c
  32dd3c:	9000		str	r0, [sp, #0]
  32dd3e:	a0f2		add	r0, pc, #968	; 0x3c8
  32dd40:	211e		mov	r1, #30	; 0x1e
  32dd42:	2200		mov	r2, #0
  32dd44:	43d2		mvn	r2, r2
  32dd46:	2302		mov	r3, #2
  32dd48:	f0ac ff74	bl	0x3dac34
  32dd4c:	4c2e		ldr	r4, =0x1774e70	; via 0x32de08
  32dd4e:	6821		ldr	r1, [r4, #0]
  32dd50:	2000		mov	r0, #0
  32dd52:	43c0		mvn	r0, r0
  32dd54:	8708		strh	r0, [r1, #56]	; 0x38
  32dd56:	2001		mov	r0, #1
  32dd58:	2128		mov	r1, #40	; 0x28
  32dd5a:	2200		mov	r2, #0
  32dd5c:	f01b fa56	bl	0x34920c
  32dd60:	2002		mov	r0, #2
  32dd62:	f783 fd9c	bl	0x2b189e
  32dd66:	2001		mov	r0, #1
  32dd68:	2128		mov	r1, #40	; 0x28
  32dd6a:	f01b fa76	bl	0x34925a
  32dd6e:	1c01		add	r1, r0, #0
  32dd70:	6822		ldr	r2, [r4, #0]
  32dd72:	3238		add	r2, #56	; 0x38
  32dd74:	2051		mov	r0, #81	; 0x51
  32dd76:	f7ff ff0b	bl	0x32db90
  32dd7a:	2800		cmp	r0, #0
  32dd7c:	d12a		bne	0x32ddd4
  32dd7e:	2148		mov	r1, #72	; 0x48
  32dd80:	6820		ldr	r0, [r4, #0]
  32dd82:	5c08		ldrb	r0, [r1, r0]
  32dd84:	2800		cmp	r0, #0
  32dd86:	d125		bne	0x32ddd4
  32dd88:	4820		ldr	r0, =0xa0020	; via 0x32de0c
  32dd8a:	9000		str	r0, [sp, #0]
  32dd8c:	a0e6		add	r0, pc, #920	; 0x398
  32dd8e:	2129		mov	r1, #41	; 0x29
  32dd90:	2200		mov	r2, #0
  32dd92:	43d2		mvn	r2, r2
  32dd94:	2302		mov	r3, #2
  32dd96:	f0ac ff4d	bl	0x3dac34
  32dd9a:	2001		mov	r0, #1
  32dd9c:	2138		mov	r1, #56	; 0x38
  32dd9e:	2201		mov	r2, #1
  32dda0:	f01b fa34	bl	0x34920c
  32dda4:	f7b4 faa3	bl	0x2e22ee
  32dda8:	4927		ldr	r1, =0x1774b78	; via 0x32de48
  32ddaa:	2006		mov	r0, #6
  32ddac:	43c0		mvn	r0, r0
  32ddae:	8008		strh	r0, [r1, #0]
  32ddb0:	2000		mov	r0, #0
  32ddb2:	f067 f886	bl	0x394ec2
  32ddb6:	2132		mov	r1, #50	; 0x32
  32ddb8:	48d2		ldr	r0, =0x1774e38	; via 0x32e104
  32ddba:	6800		ldr	r0, [r0, #0]
  32ddbc:	5c08		ldrb	r0, [r1, r0]
  32ddbe:	2800		cmp	r0, #0
  32ddc0:	d105		bne	0x32ddce
  32ddc2:	213c		mov	r1, #60	; 0x3c
  32ddc4:	2001		mov	r0, #1
  32ddc6:	2201		mov	r2, #1
  32ddc8:	f01b fa20	bl	0x34920c
  32ddcc:	e01a		b	0x32de04
  32ddce:	f085 fef0	bl	0x3b3bb2
  32ddd2:	e017		b	0x32de04
  32ddd4:	2001		mov	r0, #1
  32ddd6:	2138		mov	r1, #56	; 0x38
  32ddd8:	2201		mov	r2, #1
  32ddda:	f01b fa17	bl	0x34920c
  32ddde:	6820		ldr	r0, [r4, #0]
  32dde0:	6840		ldr	r0, [r0, #4]
  32dde2:	2802		cmp	r0, #2
  32dde4:	d00c		beq	0x32de00
  32dde6:	2803		cmp	r0, #3
  32dde8:	d007		beq	0x32ddfa
  32ddea:	2801		cmp	r0, #1
  32ddec:	d002		beq	0x32ddf4
  32ddee:	f083 fc67	bl	0x3b16c0
  32ddf2:	e007		b	0x32de04
  32ddf4:	f7b4 fab2	bl	0x2e235c
  32ddf8:	e004		b	0x32de04
  32ddfa:	f7b4 fe8b	bl	0x2e2b14
  32ddfe:	e001		b	0x32de04
  32de00:	f7b4 fd1a	bl	0x2e2838
  32de04:	b002		add	sp, #8
  32de06:	bd10		pop	{r4, pc}

$pwr_get_battery_type:
  32de10:	b570		push	{r4, r5, r6, lr}
  32de12:	48f0		ldr	r0, =0x1774e70	; via 0x32e1d4
  32de14:	6801		ldr	r1, [r0, #0]
; half-word at offset 0x40 = 0
  32de16:	2340		mov	r3, #64	; 0x40
  32de18:	2200		mov	r2, #0
  32de1a:	525a		strh	r2, [r3, r1]
; word at offset 0x44 = 0
  32de1c:	2400		mov	r4, #0
  32de1e:	644c		str	r4, [r1, #68]	; 0x44
  32de20:	4d09		ldr	r5, =0x1774b78	; via 0x32de48
  32de22:	6806		ldr	r6, [r0, #0]
  32de24:	88a8		ldrh	r0, [r5, #4]
  32de26:	f000 f8e2	bl	0x32dfee
; initial % written into 16-bit var at offset 0x3e
  32de2a:	87f0		strh	r0, [r6, #62]	; 0x3e
; pwr_env_ctrl_blk->timer0_state = BATTERY_TYPE_TEST;
  32de2c:	6334		str	r4, [r6, #48]	; 0x30
; THEN_50uA written into BCICTL1
  32de2e:	2001		mov	r0, #1
  32de30:	2138		mov	r1, #56	; 0x38
  32de32:	2261		mov	r2, #97	; 0x61
  32de34:	f01b f9ea	bl	0x34920c	; $ABB_Write_Register_on_page
; TIMER0 set to 300 ms
  32de38:	2000		mov	r0, #0
  32de3a:	2141		mov	r1, #65	; 0x41
  32de3c:	2200		mov	r2, #0
  32de3e:	f7fd f81b	bl	0x32ae78	; $rvf_start_timer
; 0 into error code var
  32de42:	2000		mov	r0, #0
  32de44:	8028		strh	r0, [r5, #0]
  32de46:	bd70		pop	{r4, r5, r6, pc}

$pwr_type_test_timer_process:
  32df04:	b510		push	{r4, lr}
  32df06:	b082		sub	sp, #8
  32df08:	48e1		ldr	r0, =0xa0020	; via 0x32e290
  32df0a:	9000		str	r0, [sp, #0]
  32df0c:	a0d6		add	r0, pc, #856	; 0x358
  32df0e:	2119		mov	r1, #25	; 0x19
  32df10:	2200		mov	r2, #0
  32df12:	43d2		mvn	r2, r2
  32df14:	2302		mov	r3, #2
  32df16:	f0ac fe8d	bl	0x3dac34
; write 0 into ADIN2REG
  32df1a:	2001		mov	r0, #1
  32df1c:	2128		mov	r1, #40	; 0x28
  32df1e:	2200		mov	r2, #0
  32df20:	f01b f974	bl	0x34920c	; $ABB_Write_Register_on_page
; delay 2 ticks
  32df24:	2002		mov	r0, #2
  32df26:	f783 fcba	bl	0x2b189e	; rvf_delay()
; now read ADIN2REG
  32df2a:	2001		mov	r0, #1
  32df2c:	2128		mov	r1, #40	; 0x28
  32df2e:	f01b f994	bl	0x34925a	; $ABB_Read_Register_on_page
  32df32:	1c04		add	r4, r0, #0
; "bat type" trace
  32df34:	48d6		ldr	r0, =0xa0020	; via 0x32e290
  32df36:	9000		str	r0, [sp, #0]
  32df38:	a0d2		add	r0, pc, #840	; 0x348
  32df3a:	2108		mov	r1, #8
  32df3c:	1c22		add	r2, r4, #0
  32df3e:	2302		mov	r3, #2
  32df40:	f0ac fe78	bl	0x3dac34
; BCICTL1 write turns off current source
  32df44:	2001		mov	r0, #1
  32df46:	2138		mov	r1, #56	; 0x38
  32df48:	2201		mov	r2, #1
  32df4a:	f01b f95f	bl	0x34920c
  32df4e:	2c81		cmp	r4, #129	; 0x81
  32df50:	db03		blt	0x32df5a
  32df52:	202d		mov	r0, #45	; 0x2d
  32df54:	0100		lsl	r0, r0, #4
  32df56:	4284		cmp	r4, r0
  32df58:	dd26		ble	0x32dfa8
; bad result
  32df5a:	489e		ldr	r0, =0x1774e70	; via 0x32e1d4
  32df5c:	6800		ldr	r0, [r0, #0]
  32df5e:	2148		mov	r1, #72	; 0x48
  32df60:	5c09		ldrb	r1, [r1, r0]
  32df62:	2901		cmp	r1, #1
  32df64:	d020		beq	0x32dfa8
  32df66:	2101		mov	r1, #1
  32df68:	6341		str	r1, [r0, #52]	; 0x34
  32df6a:	48c9		ldr	r0, =0xa0020	; via 0x32e290
  32df6c:	9000		str	r0, [sp, #0]
  32df6e:	a0eb		add	r0, pc, #940	; 0x3ac
  32df70:	2110		mov	r1, #16	; 0x10
  32df72:	2200		mov	r2, #0
  32df74:	43d2		mvn	r2, r2
  32df76:	2302		mov	r3, #2
  32df78:	f0ac fe5c	bl	0x3dac34
  32df7c:	48e6		ldr	r0, =0x1774b78	; via 0x32e318
  32df7e:	2100		mov	r1, #0
  32df80:	43c9		mvn	r1, r1
  32df82:	8001		strh	r1, [r0, #0]
  32df84:	2003		mov	r0, #3
  32df86:	f066 ff9c	bl	0x394ec2
  32df8a:	2032		mov	r0, #50	; 0x32
  32df8c:	495d		ldr	r1, =0x1774e38	; via 0x32e104
  32df8e:	6809		ldr	r1, [r1, #0]
  32df90:	5c40		ldrb	r0, [r0, r1]
  32df92:	2800		cmp	r0, #0
  32df94:	d105		bne	0x32dfa2
  32df96:	2001		mov	r0, #1
  32df98:	213c		mov	r1, #60	; 0x3c
  32df9a:	2201		mov	r2, #1
  32df9c:	f01b f936	bl	0x34920c
  32dfa0:	e011		b	0x32dfc6
  32dfa2:	f085 fe06	bl	0x3b3bb2
  32dfa6:	e00e		b	0x32dfc6
; good result
  32dfa8:	488a		ldr	r0, =0x1774e70	; via 0x32e1d4
  32dfaa:	6801		ldr	r1, [r0, #0]
  32dfac:	2000		mov	r0, #0
  32dfae:	6348		str	r0, [r1, #52]	; 0x34
  32dfb0:	48b7		ldr	r0, =0xa0020	; via 0x32e290
  32dfb2:	9000		str	r0, [sp, #0]
  32dfb4:	a0de		add	r0, pc, #888	; 0x378
  32dfb6:	2106		mov	r1, #6
  32dfb8:	2200		mov	r2, #0
  32dfba:	43d2		mvn	r2, r2
  32dfbc:	2302		mov	r3, #2
  32dfbe:	f0ac fe39	bl	0x3dac34
  32dfc2:	f7b4 f9ed	bl	0x2e23a0	; $pwr_battery_qualification
  32dfc6:	b002		add	sp, #8
  32dfc8:	bd10		pop	{r4, pc}
  32dfca:	46c0		nop			(mov r8, r8)

; The following function computes the battery remaining % number
; from the battery mV passed in R0.  It first increases the mV value
; by a factor that depends on the system current draw (it appears
; that they are after the "true" battery voltage before the internal
; resistance), and then does the table look-up for the % number.
  32dfee:	b510		push	{r4, lr}
  32dff0:	b082		sub	sp, #8
  32dff2:	1c04		add	r4, r0, #0
  32dff4:	f000 f9a4	bl	0x32e340
  32dff8:	4669		mov	r1, sp
  32dffa:	8048		strh	r0, [r1, #2]
  32dffc:	48ce		ldr	r0, =0x17729d0	; via 0x32e338
  32dffe:	884a		ldrh	r2, [r1, #2]
  32e000:	8801		ldrh	r1, [r0, #0]
  32e002:	428a		cmp	r2, r1
  32e004:	db1b		blt	0x32e03e
  32e006:	2101		mov	r1, #1
  32e008:	e002		b	0x32e010
  32e00a:	4669		mov	r1, sp
  32e00c:	8809		ldrh	r1, [r1, #0]
  32e00e:	3101		add	r1, #1
  32e010:	466a		mov	r2, sp
  32e012:	8011		strh	r1, [r2, #0]
  32e014:	4669		mov	r1, sp
  32e016:	8809		ldrh	r1, [r1, #0]
  32e018:	2903		cmp	r1, #3
  32e01a:	da07		bge	0x32e02c
  32e01c:	4669		mov	r1, sp
  32e01e:	8809		ldrh	r1, [r1, #0]
  32e020:	0089		lsl	r1, r1, #2
  32e022:	5a41		ldrh	r1, [r0, r1]
  32e024:	466a		mov	r2, sp
  32e026:	8852		ldrh	r2, [r2, #2]
  32e028:	428a		cmp	r2, r1
  32e02a:	daee		bge	0x32e00a
  32e02c:	4669		mov	r1, sp
  32e02e:	8809		ldrh	r1, [r1, #0]
  32e030:	0089		lsl	r1, r1, #2
  32e032:	1840		add	r0, r0, r1
  32e034:	3802		sub	r0, #2
  32e036:	8801		ldrh	r1, [r0, #0]
  32e038:	4668		mov	r0, sp
  32e03a:	8081		strh	r1, [r0, #4]
  32e03c:	e002		b	0x32e044
  32e03e:	4669		mov	r1, sp
  32e040:	2000		mov	r0, #0
  32e042:	8088		strh	r0, [r1, #4]
  32e044:	4668		mov	r0, sp
  32e046:	8880		ldrh	r0, [r0, #4]
  32e048:	1900		add	r0, r0, r4
  32e04a:	0400		lsl	r0, r0, #16
  32e04c:	0c04		lsr	r4, r0, #16
  32e04e:	4abb		ldr	r2, =0x177297c	; via 0x32e33c
  32e050:	8810		ldrh	r0, [r2, #0]
  32e052:	4284		cmp	r4, r0
  32e054:	db01		blt	0x32e05a
  32e056:	7890		ldrb	r0, [r2, #2]
  32e058:	e022		b	0x32e0a0
  32e05a:	2001		mov	r0, #1
  32e05c:	e002		b	0x32e064
  32e05e:	4668		mov	r0, sp
  32e060:	8800		ldrh	r0, [r0, #0]
  32e062:	3001		add	r0, #1
  32e064:	4669		mov	r1, sp
  32e066:	8008		strh	r0, [r1, #0]
  32e068:	4668		mov	r0, sp
  32e06a:	8800		ldrh	r0, [r0, #0]
  32e06c:	2815		cmp	r0, #21	; 0x15
  32e06e:	db0c		blt	0x32e08a
  32e070:	4668		mov	r0, sp
  32e072:	8800		ldrh	r0, [r0, #0]
  32e074:	2815		cmp	r0, #21	; 0x15
  32e076:	d106		bne	0x32e086
  32e078:	4668		mov	r0, sp
  32e07a:	8800		ldrh	r0, [r0, #0]
  32e07c:	0080		lsl	r0, r0, #2
  32e07e:	1810		add	r0, r2, r0
  32e080:	3802		sub	r0, #2
  32e082:	7800		ldrb	r0, [r0, #0]
  32e084:	e00c		b	0x32e0a0
  32e086:	2000		mov	r0, #0
  32e088:	e00a		b	0x32e0a0
  32e08a:	4668		mov	r0, sp
  32e08c:	8800		ldrh	r0, [r0, #0]
  32e08e:	0080		lsl	r0, r0, #2
  32e090:	5a10		ldrh	r0, [r2, r0]
  32e092:	4284		cmp	r4, r0
  32e094:	dde3		ble	0x32e05e
  32e096:	4668		mov	r0, sp
  32e098:	8800		ldrh	r0, [r0, #0]
  32e09a:	0080		lsl	r0, r0, #2
  32e09c:	1810		add	r0, r2, r0
  32e09e:	7880		ldrb	r0, [r0, #2]
  32e0a0:	b002		add	sp, #8
  32e0a2:	bd10		pop	{r4, pc}

  32e0bc:	b510		push	{r4, lr}
  32e0be:	1c04		add	r4, r0, #0
  32e0c0:	f000 f93e	bl	0x32e340
  32e0c4:	4284		cmp	r4, r0
  32e0c6:	dd06		ble	0x32e0d6
  32e0c8:	4942		ldr	r1, =0x1774e70	; via 0x32e1d4
  32e0ca:	6809		ldr	r1, [r1, #0]
  32e0cc:	3144		add	r1, #68	; 0x44
  32e0ce:	680a		ldr	r2, [r1, #0]
  32e0d0:	18a2		add	r2, r4, r2
  32e0d2:	1a10		sub	r0, r2, r0
  32e0d4:	6008		str	r0, [r1, #0]
  32e0d6:	bd10		pop	{r4, pc}

; The following function computes and returns the average
; of the last 6 VBAT ADC measurements, all in raw ADC form
  32e0d8:	b500		push	{lr}
  32e0da:	480a		ldr	r0, =0x1774e38	; via 0x32e104
  32e0dc:	6803		ldr	r3, [r0, #0]
  32e0de:	2000		mov	r0, #0
  32e0e0:	2100		mov	r1, #0
  32e0e2:	004a		lsl	r2, r1, #1
  32e0e4:	189a		add	r2, r3, r2
  32e0e6:	8a92		ldrh	r2, [r2, #20]	; 0x14
  32e0e8:	1810		add	r0, r2, r0
  32e0ea:	0400		lsl	r0, r0, #16
  32e0ec:	0c00		lsr	r0, r0, #16
  32e0ee:	1c49		add	r1, r1, #1
  32e0f0:	0409		lsl	r1, r1, #16
  32e0f2:	0c09		lsr	r1, r1, #16
  32e0f4:	2906		cmp	r1, #6
  32e0f6:	dbf4		blt	0x32e0e2
  32e0f8:	2106		mov	r1, #6
  32e0fa:	f0c9 f897	bl	0x3f722c	; I$DIV
  32e0fe:	0408		lsl	r0, r1, #16
  32e100:	0c00		lsr	r0, r0, #16
  32e102:	bd00		pop	{pc}

; The function dealing with the "ichg new" and "ichg clip" mystery
; the argument is Ichg as read from MADC (raw, no mA conversion)
  32e152:	b5f0		push	{r4, r5, r6, r7, lr}
  32e154:	b082		sub	sp, #8
  32e156:	1c05		add	r5, r0, #0
; "ichg new" trace: just the raw reading
  32e158:	484d		ldr	r0, =0xa0020	; via 0x32e290
  32e15a:	9000		str	r0, [sp, #0]
  32e15c:	a0ae		add	r0, pc, #696	; 0x2b8
  32e15e:	2108		mov	r1, #8
  32e160:	1c2a		add	r2, r5, #0
  32e162:	2302		mov	r3, #2
  32e164:	f0ac fd66	bl	0x3dac34
; comparing this raw reading against i2v_offset+23
  32e168:	481a		ldr	r0, =0x1774e70	; via 0x32e1d4
  32e16a:	6800		ldr	r0, [r0, #0]
  32e16c:	8900		ldrh	r0, [r0, #8]
  32e16e:	3017		add	r0, #23	; 0x17
  32e170:	4285		cmp	r5, r0
  32e172:	da02		bge	0x32e17a
; less than this sane minimum!
  32e174:	48b8		ldr	r0, =0x1774e38	; via 0x32e458
  32e176:	6800		ldr	r0, [r0, #0]
  32e178:	e062		b	0x32e240
; above that minimum
; get the display backlight current draw
  32e17a:	f0b1 f8a2	bl	0x3df2c2
  32e17e:	49b4		ldr	r1, =0x17729dc	; via 0x32e450
  32e180:	880a		ldrh	r2, [r1, #0]
  32e182:	4282		cmp	r2, r0
  32e184:	d00a		beq	0x32e19c
; display backlight current draw changed
  32e186:	8008		strh	r0, [r1, #0]
  32e188:	48b3		ldr	r0, =0x1774e38	; via 0x32e458
  32e18a:	6801		ldr	r1, [r0, #0]
  32e18c:	2200		mov	r2, #0
  32e18e:	860a		strh	r2, [r1, #48]	; 0x30
  32e190:	6800		ldr	r0, [r0, #0]
  32e192:	3020		add	r0, #32	; 0x20
  32e194:	2100		mov	r1, #0
  32e196:	220c		mov	r2, #12	; 0xc
  32e198:	f0c9 ffe0	bl	0x3f815c	; $memset
; end of check for display backlight current draw change
  32e19c:	4cae		ldr	r4, =0x1774e38	; via 0x32e458
  32e19e:	6821		ldr	r1, [r4, #0]
  32e1a0:	6822		ldr	r2, [r4, #0]
  32e1a2:	8e10		ldrh	r0, [r2, #48]	; 0x30
  32e1a4:	0040		lsl	r0, r0, #1
  32e1a6:	1843		add	r3, r0, r1
  32e1a8:	1840		add	r0, r0, r1
  32e1aa:	8c06		ldrh	r6, [r0, #32]	; 0x20
  32e1ac:	2e00		cmp	r6, #0
  32e1ae:	d113		bne	0x32e1d8
; filling new entry?
  32e1b0:	4908		ldr	r1, =0x1774e70	; via 0x32e1d4
  32e1b2:	2633		mov	r6, #51	; 0x33
  32e1b4:	0136		lsl	r6, r6, #4
  32e1b6:	6809		ldr	r1, [r1, #0]
  32e1b8:	8909		ldrh	r1, [r1, #8]
  32e1ba:	1871		add	r1, r6, r1
  32e1bc:	428d		cmp	r5, r1
  32e1be:	dc01		bgt	0x32e1c4
  32e1c0:	8405		strh	r5, [r0, #32]	; 0x20
  32e1c2:	e001		b	0x32e1c8
  32e1c4:	48a3		ldr	r0, =0x263	; via 0x32e454
  32e1c6:	8418		strh	r0, [r3, #32]	; 0x20
  32e1c8:	8e10		ldrh	r0, [r2, #48]	; 0x30
  32e1ca:	3001		add	r0, #1
  32e1cc:	0400		lsl	r0, r0, #16
  32e1ce:	0c01		lsr	r1, r0, #16
  32e1d0:	e016		b	0x32e200
  32e1d2:	46c0		nop			(mov r8, r8)
  32e1d4:	01774e70
; entry already filled?
  32e1d8:	8d90		ldrh	r0, [r2, #44]	; 0x2c
  32e1da:	3023		add	r0, #35	; 0x23
  32e1dc:	42a8		cmp	r0, r5
  32e1de:	da0d		bge	0x32e1fc
  32e1e0:	8418		strh	r0, [r3, #32]	; 0x20
; "ichg clip" trace
  32e1e2:	8e10		ldrh	r0, [r2, #48]	; 0x30
  32e1e4:	0040		lsl	r0, r0, #1
  32e1e6:	1808		add	r0, r1, r0
  32e1e8:	8c02		ldrh	r2, [r0, #32]	; 0x20
  32e1ea:	4829		ldr	r0, =0xa0020	; via 0x32e290
  32e1ec:	9000		str	r0, [sp, #0]
  32e1ee:	a08d		add	r0, pc, #564	; 0x234
  32e1f0:	2109		mov	r1, #9
  32e1f2:	2302		mov	r3, #2
  32e1f4:	f0ac fd1e	bl	0x3dac34
  32e1f8:	6822		ldr	r2, [r4, #0]
  32e1fa:	e000		b	0x32e1fe
; not clipping?
  32e1fc:	841d		strh	r5, [r3, #32]	; 0x20
  32e1fe:	2106		mov	r1, #6
; fill paths join
  32e200:	8e10		ldrh	r0, [r2, #48]	; 0x30
  32e202:	3001		add	r0, #1
  32e204:	8610		strh	r0, [r2, #48]	; 0x30
  32e206:	6823		ldr	r3, [r4, #0]
  32e208:	8e18		ldrh	r0, [r3, #48]	; 0x30
  32e20a:	2806		cmp	r0, #6
  32e20c:	db02		blt	0x32e214
  32e20e:	2000		mov	r0, #0
  32e210:	8618		strh	r0, [r3, #48]	; 0x30
  32e212:	6823		ldr	r3, [r4, #0]
; array wraparound done
  32e214:	2000		mov	r0, #0
  32e216:	2900		cmp	r1, #0
  32e218:	d00e		beq	0x32e238
  32e21a:	6827		ldr	r7, [r4, #0]
  32e21c:	1c0d		add	r5, r1, #0
  32e21e:	2200		mov	r2, #0
  32e220:	0056		lsl	r6, r2, #1
  32e222:	19be		add	r6, r7, r6
  32e224:	8c36		ldrh	r6, [r6, #32]	; 0x20
  32e226:	1830		add	r0, r6, r0
  32e228:	0400		lsl	r0, r0, #16
  32e22a:	0c00		lsr	r0, r0, #16
  32e22c:	1c52		add	r2, r2, #1
  32e22e:	0412		lsl	r2, r2, #16
  32e230:	0c12		lsr	r2, r2, #16
  32e232:	3d01		sub	r5, #1
  32e234:	2d00		cmp	r5, #0
  32e236:	d1f3		bne	0x32e220
  32e238:	f0c8 fff8	bl	0x3f722c	; I$DIV
  32e23c:	8599		strh	r1, [r3, #44]	; 0x2c
  32e23e:	6820		ldr	r0, [r4, #0]
  32e240:	8d80		ldrh	r0, [r0, #44]	; 0x2c
  32e242:	b002		add	sp, #8
  32e244:	bdf0		pop	{r4, r5, r6, r7, pc}

; This function gets called at the beginning of CI and CV charging phases
; it clears the Ichg averaging structure
  32e246:	4a84		ldr	r2, =0x1774e38	; via 0x32e458
  32e248:	6810		ldr	r0, [r2, #0]
  32e24a:	2100		mov	r1, #0
  32e24c:	8601		strh	r1, [r0, #48]	; 0x30
  32e24e:	8581		strh	r1, [r0, #44]	; 0x2c
  32e250:	6812		ldr	r2, [r2, #0]
  32e252:	2000		mov	r0, #0
  32e254:	0043		lsl	r3, r0, #1
  32e256:	18d3		add	r3, r2, r3
  32e258:	8419		strh	r1, [r3, #32]	; 0x20
  32e25a:	1c40		add	r0, r0, #1
  32e25c:	0400		lsl	r0, r0, #16
  32e25e:	0c00		lsr	r0, r0, #16
  32e260:	2806		cmp	r0, #6
  32e262:	dbf7		blt	0x32e254
  32e264:	4770		bx	lr
  32e266:	46c0		nop			(mov r8, r8)

; This function seems to be in charge of enforcing some kind of time limit
; on the charging process, with non-understood handling when this limit
; is exceeded and the "Charge Process exceeds .!!" trace is emitted.
  32e294:	b510		push	{r4, lr}
  32e296:	b082		sub	sp, #8
  32e298:	4871		ldr	r0, =0x1774e70	; via 0x32e460
  32e29a:	6800		ldr	r0, [r0, #0]
  32e29c:	2148		mov	r1, #72	; 0x48
  32e29e:	5c09		ldrb	r1, [r1, r0]
  32e2a0:	2901		cmp	r1, #1
  32e2a2:	d101		bne	0x32e2a8
  32e2a4:	2400		mov	r4, #0
  32e2a6:	e034		b	0x32e312
  32e2a8:	8f81		ldrh	r1, [r0, #60]	; 0x3c
  32e2aa:	8f40		ldrh	r0, [r0, #58]	; 0x3a
  32e2ac:	4281		cmp	r1, r0
  32e2ae:	ddf9		ble	0x32e2a4
  32e2b0:	486c		ldr	r0, =0xa0020	; via 0x32e464
  32e2b2:	9000		str	r0, [sp, #0]
  32e2b4:	a05e		add	r0, pc, #376	; 0x178
  32e2b6:	211a		mov	r1, #26	; 0x1a
  32e2b8:	2200		mov	r2, #0
  32e2ba:	43d2		mvn	r2, r2
  32e2bc:	2302		mov	r3, #2
  32e2be:	f0ac fcb9	bl	0x3dac34
  32e2c2:	2001		mov	r0, #1
  32e2c4:	2138		mov	r1, #56	; 0x38
  32e2c6:	2201		mov	r2, #1
  32e2c8:	f01a ffa0	bl	0x34920c
  32e2cc:	4812		ldr	r0, =0x1774b78	; via 0x32e318
  32e2ce:	2105		mov	r1, #5
  32e2d0:	43c9		mvn	r1, r1
  32e2d2:	8001		strh	r1, [r0, #0]
  32e2d4:	8880		ldrh	r0, [r0, #4]
  32e2d6:	4961		ldr	r1, =0xf3c	; via 0x32e45c
  32e2d8:	4288		cmp	r0, r1
  32e2da:	dc07		bgt	0x32e2ec
  32e2dc:	4860		ldr	r0, =0x1774e70	; via 0x32e460
  32e2de:	6800		ldr	r0, [r0, #0]
  32e2e0:	2101		mov	r1, #1
  32e2e2:	6341		str	r1, [r0, #52]	; 0x34
  32e2e4:	2003		mov	r0, #3
  32e2e6:	f066 fdec	bl	0x394ec2
  32e2ea:	e001		b	0x32e2f0
  32e2ec:	f066 fdb0	bl	0x394e50
  32e2f0:	f7b3 fffd	bl	0x2e22ee
  32e2f4:	2401		mov	r4, #1
  32e2f6:	2132		mov	r1, #50	; 0x32
  32e2f8:	4857		ldr	r0, =0x1774e38	; via 0x32e458
  32e2fa:	6800		ldr	r0, [r0, #0]
  32e2fc:	5c08		ldrb	r0, [r1, r0]
  32e2fe:	2800		cmp	r0, #0
  32e300:	d105		bne	0x32e30e
  32e302:	2001		mov	r0, #1
  32e304:	213c		mov	r1, #60	; 0x3c
  32e306:	2201		mov	r2, #1
  32e308:	f01a ff80	bl	0x34920c
  32e30c:	e001		b	0x32e312
  32e30e:	f085 fc50	bl	0x3b3bb2
  32e312:	1c20		add	r0, r4, #0
  32e314:	b002		add	sp, #8
  32e316:	bd10		pop	{r4, pc}

; The following function seems to compute the system's current draw.
; It starts with the display backlight's current draw from 0x1775138,
; converts it from ADC units to mA per the fixed *855/1000 formula,
; and then throws in a ton of other factors which are impractical
; to follow in this totally unknown fw.
  32e340:	b510		push	{r4, lr}
  32e342:	b08c		sub	sp, #48	; 0x30
; function returns the value of 16-bit var in 0x1775138
  32e344:	f0b0 ffbd	bl	0x3df2c2
  32e348:	1c04		add	r4, r0, #0
  32e34a:	484a		ldr	r0, =0x357	; via 0x32e474
  32e34c:	4360		mul	r0, r4
  32e34e:	217d		mov	r1, #125	; 0x7d
  32e350:	00c9		lsl	r1, r1, #3
  32e352:	f0c8 ff6b	bl	0x3f722c	; I$DIV
  32e356:	0408		lsl	r0, r1, #16
  32e358:	1404		asr	r4, r0, #16
  32e35a:	f085 fea4	bl	0x3b40a6
  32e35e:	2800		cmp	r0, #0
  32e360:	d002		beq	0x32e368
  32e362:	34e6		add	r4, #230	; 0xe6
  32e364:	0420		lsl	r0, r4, #16
  32e366:	1404		asr	r4, r0, #16
  32e368:	483f		ldr	r0, =0x8036a8	; via 0x32e468
  32e36a:	6800		ldr	r0, [r0, #0]
  32e36c:	2802		cmp	r0, #2
  32e36e:	d805		bhi	0x32e37c
  32e370:	f085 fe99	bl	0x3b40a6
  32e374:	2800		cmp	r0, #0
  32e376:	d14a		bne	0x32e40e
  32e378:	3432		add	r4, #50	; 0x32
  32e37a:	e046		b	0x32e40a
  32e37c:	4668		mov	r0, sp
  32e37e:	f0c9 fe35	bl	0x3f7fec
  32e382:	4668		mov	r0, sp
  32e384:	7800		ldrb	r0, [r0, #0]
  32e386:	2800		cmp	r0, #0
  32e388:	d137		bne	0x32e3fa
  32e38a:	4668		mov	r0, sp
  32e38c:	7880		ldrb	r0, [r0, #2]
  32e38e:	1ec0		sub	r0, r0, #3
  32e390:	2800		cmp	r0, #0
  32e392:	d00b		beq	0x32e3ac
  32e394:	3801		sub	r0, #1
  32e396:	2800		cmp	r0, #0
  32e398:	d015		beq	0x32e3c6
  32e39a:	3801		sub	r0, #1
  32e39c:	2800		cmp	r0, #0
  32e39e:	d00c		beq	0x32e3ba
  32e3a0:	3801		sub	r0, #1
  32e3a2:	2800		cmp	r0, #0
  32e3a4:	d004		beq	0x32e3b0
  32e3a6:	3802		sub	r0, #2
  32e3a8:	2800		cmp	r0, #0
  32e3aa:	d10a		bne	0x32e3c2
  32e3ac:	2202		mov	r2, #2
  32e3ae:	e00b		b	0x32e3c8
  32e3b0:	4668		mov	r0, sp
  32e3b2:	8980		ldrh	r0, [r0, #12]	; 0xc
  32e3b4:	28af		cmp	r0, #175	; 0xaf
  32e3b6:	db04		blt	0x32e3c2
  32e3b8:	e005		b	0x32e3c6
  32e3ba:	4668		mov	r0, sp
  32e3bc:	8980		ldrh	r0, [r0, #12]	; 0xc
  32e3be:	287d		cmp	r0, #125	; 0x7d
  32e3c0:	da01		bge	0x32e3c6
  32e3c2:	2200		mov	r2, #0
  32e3c4:	e000		b	0x32e3c8
  32e3c6:	2201		mov	r2, #1
  32e3c8:	4668		mov	r0, sp
  32e3ca:	7d00		ldrb	r0, [r0, #20]	; 0x14
  32e3cc:	2814		cmp	r0, #20	; 0x14
  32e3ce:	db02		blt	0x32e3d6
  32e3d0:	2013		mov	r0, #19	; 0x13
  32e3d2:	4669		mov	r1, sp
  32e3d4:	7508		strb	r0, [r1, #20]	; 0x14
  32e3d6:	4669		mov	r1, sp
  32e3d8:	7c89		ldrb	r1, [r1, #18]	; 0x12
  32e3da:	2900		cmp	r1, #0
  32e3dc:	d004		beq	0x32e3e8
  32e3de:	2114		mov	r1, #20	; 0x14
  32e3e0:	4351		mul	r1, r2
  32e3e2:	1840		add	r0, r0, r1
  32e3e4:	4921		ldr	r1, =0x52e31c	; via 0x32e46c
  32e3e6:	e003		b	0x32e3f0
  32e3e8:	2114		mov	r1, #20	; 0x14
  32e3ea:	4351		mul	r1, r2
  32e3ec:	1840		add	r0, r0, r1
  32e3ee:	4920		ldr	r1, =0x52e394	; via 0x32e470
  32e3f0:	0040		lsl	r0, r0, #1
  32e3f2:	5a08		ldrh	r0, [r1, r0]
  32e3f4:	1900		add	r0, r0, r4
  32e3f6:	0400		lsl	r0, r0, #16
  32e3f8:	e001		b	0x32e3fe
  32e3fa:	3496		add	r4, #150	; 0x96
  32e3fc:	0420		lsl	r0, r4, #16
  32e3fe:	1404		asr	r4, r0, #16
  32e400:	f085 fe51	bl	0x3b40a6
  32e404:	2800		cmp	r0, #0
  32e406:	d002		beq	0x32e40e
  32e408:	3c32		sub	r4, #50	; 0x32
  32e40a:	0420		lsl	r0, r4, #16
  32e40c:	1404		asr	r4, r0, #16
  32e40e:	0420		lsl	r0, r4, #16
  32e410:	0c00		lsr	r0, r0, #16
  32e412:	b00c		add	sp, #48	; 0x30
  32e414:	bd10		pop	{r4, pc}
  32e416:	46c0		nop			(mov r8, r8)

$ABB_Sem_Create:
  3491ee:	b500		push	{lr}
  3491f0:	48f2		ldr	r0, =0x17741e0	; via 0x3495bc
  3491f2:	a1f0		add	r1, pc, #960	; 0x3c0
  3491f4:	2201		mov	r2, #1
  3491f6:	2306		mov	r3, #6
  3491f8:	f0b0 fb88	bl	0x3f990c	; $SMCE_Create_Semaphore
  3491fc:	bd00		pop	{pc}

$ABB_Wait_IBIC_Access:
  3491fe:	b500		push	{lr}
  349200:	48ef		ldr	r0, =0x33450	; via 0x3495c0
  349202:	f099 fe6c	bl	0x3e2ede	; $convert_nanosec_to_cycles
  349206:	f099 fee4	bl	0x3e2fd2	; $wait_ARM_cycles
  34920a:	bd00		pop	{pc}

$ABB_Write_Register_on_page:
  34920c:	b500		push	{lr}
  34920e:	b082		sub	sp, #8
  349210:	466b		mov	r3, sp
  349212:	809a		strh	r2, [r3, #4]
  349214:	466a		mov	r2, sp
  349216:	8051		strh	r1, [r2, #2]
  349218:	4669		mov	r1, sp
  34921a:	8008		strh	r0, [r1, #0]
  34921c:	48e7		ldr	r0, =0x17741e0	; via 0x3495bc
  34921e:	2100		mov	r1, #0
  349220:	43c9		mvn	r1, r1
  349222:	f0b0 fb63	bl	0x3f98ec	; $SMCE_Obtain_Semaphore
  349226:	49f9		ldr	r1, =0xfffe3000	; via 0x34960c
  349228:	2011		mov	r0, #17	; 0x11
  34922a:	880a		ldrh	r2, [r1, #0]
  34922c:	4310		orr	r0, r2
  34922e:	8008		strh	r0, [r1, #0]
  349230:	4668		mov	r0, sp
  349232:	4995		ldr	r1, =0xfffe3006	; via 0x349488
  349234:	8809		ldrh	r1, [r1, #0]
  349236:	80c1		strh	r1, [r0, #6]
  349238:	8800		ldrh	r0, [r0, #0]
  34923a:	f7ff ff4c	bl	0x3490d6
  34923e:	4668		mov	r0, sp
  349240:	8840		ldrh	r0, [r0, #2]
  349242:	4669		mov	r1, sp
  349244:	8889		ldrh	r1, [r1, #4]
  349246:	f7ff ff6a	bl	0x34911e
  34924a:	2001		mov	r0, #1
  34924c:	f7ff ff43	bl	0x3490d6
  349250:	48da		ldr	r0, =0x17741e0	; via 0x3495bc
  349252:	f0b0 fb43	bl	0x3f98dc	; $SMCE_Release_Semaphore
  349256:	b002		add	sp, #8
  349258:	bd00		pop	{pc}

$ABB_Read_Register_on_page:
  34925a:	b500		push	{lr}
  34925c:	b082		sub	sp, #8
  34925e:	466a		mov	r2, sp
  349260:	8051		strh	r1, [r2, #2]
  349262:	4669		mov	r1, sp
  349264:	8008		strh	r0, [r1, #0]
  349266:	48d5		ldr	r0, =0x17741e0	; via 0x3495bc
  349268:	2100		mov	r1, #0
  34926a:	43c9		mvn	r1, r1
  34926c:	f0b0 fb3e	bl	0x3f98ec
  349270:	49e6		ldr	r1, =0xfffe3000	; via 0x34960c
  349272:	2031		mov	r0, #49	; 0x31
  349274:	880a		ldrh	r2, [r1, #0]
  349276:	4310		orr	r0, r2
  349278:	8008		strh	r0, [r1, #0]
  34927a:	4668		mov	r0, sp
  34927c:	4982		ldr	r1, =0xfffe3006	; via 0x349488
  34927e:	8809		ldrh	r1, [r1, #0]
  349280:	8081		strh	r1, [r0, #4]
  349282:	8800		ldrh	r0, [r0, #0]
  349284:	f7ff ff27	bl	0x3490d6
  349288:	4668		mov	r0, sp
  34928a:	8840		ldrh	r0, [r0, #2]
  34928c:	f7ff ff6d	bl	0x34916a
  349290:	4669		mov	r1, sp
  349292:	80c8		strh	r0, [r1, #6]
  349294:	2001		mov	r0, #1
  349296:	f7ff ff1e	bl	0x3490d6
  34929a:	48c8		ldr	r0, =0x17741e0	; via 0x3495bc
  34929c:	f0b0 fb1e	bl	0x3f98dc
  3492a0:	4668		mov	r0, sp
  3492a2:	88c0		ldrh	r0, [r0, #6]
  3492a4:	b002		add	sp, #8
  3492a6:	bd00		pop	{pc}

$ABB_free_13M:
  3492a8:	b500		push	{lr}
  3492aa:	b081		sub	sp, #4
  3492ac:	49d7		ldr	r1, =0xfffe3000	; via 0x34960c
  3492ae:	2011		mov	r0, #17	; 0x11
  3492b0:	880a		ldrh	r2, [r1, #0]
  3492b2:	4310		orr	r0, r2
  3492b4:	8008		strh	r0, [r1, #0]
  3492b6:	4669		mov	r1, sp
  3492b8:	4873		ldr	r0, =0xfffe3006	; via 0x349488
  3492ba:	8800		ldrh	r0, [r0, #0]
  3492bc:	8008		strh	r0, [r1, #0]
  3492be:	2001		mov	r0, #1
  3492c0:	f7ff ff09	bl	0x3490d6
  3492c4:	200a		mov	r0, #10	; 0xa
  3492c6:	2108		mov	r1, #8
  3492c8:	f7ff ff29	bl	0x34911e
  3492cc:	f7ff ff97	bl	0x3491fe
  3492d0:	200a		mov	r0, #10	; 0xa
  3492d2:	2108		mov	r1, #8
  3492d4:	f7ff ff23	bl	0x34911e
  3492d8:	f7ff ff91	bl	0x3491fe
  3492dc:	b001		add	sp, #4
  3492de:	bd00		pop	{pc}

$ABB_stop_13M:
  3492e0:	b500		push	{lr}
  3492e2:	b081		sub	sp, #4
  3492e4:	49c9		ldr	r1, =0xfffe3000	; via 0x34960c
  3492e6:	2011		mov	r0, #17	; 0x11
  3492e8:	880a		ldrh	r2, [r1, #0]
  3492ea:	4310		orr	r0, r2
  3492ec:	8008		strh	r0, [r1, #0]
  3492ee:	4669		mov	r1, sp
  3492f0:	4865		ldr	r0, =0xfffe3006	; via 0x349488
  3492f2:	8800		ldrh	r0, [r0, #0]
  3492f4:	8008		strh	r0, [r1, #0]
  3492f6:	2001		mov	r0, #1
  3492f8:	f7ff feed	bl	0x3490d6
  3492fc:	200a		mov	r0, #10	; 0xa
  3492fe:	2104		mov	r1, #4
  349300:	f7ff ff0d	bl	0x34911e
  349304:	f7ff ff7b	bl	0x3491fe
  349308:	b001		add	sp, #4
  34930a:	bd00		pop	{pc}

$ABB_Read_Status:
  34930c:	b500		push	{lr}
  34930e:	b081		sub	sp, #4
  349310:	48aa		ldr	r0, =0x17741e0	; via 0x3495bc
  349312:	2100		mov	r1, #0
  349314:	43c9		mvn	r1, r1
  349316:	f0b0 fae9	bl	0x3f98ec	; $SMCE_Obtain_Semaphore
  34931a:	49bc		ldr	r1, =0xfffe3000	; via 0x34960c
  34931c:	2011		mov	r0, #17	; 0x11
  34931e:	880a		ldrh	r2, [r1, #0]
  349320:	4310		orr	r0, r2
  349322:	8008		strh	r0, [r1, #0]
  349324:	4669		mov	r1, sp
  349326:	4858		ldr	r0, =0xfffe3006	; via 0x349488
  349328:	8800		ldrh	r0, [r0, #0]
  34932a:	8008		strh	r0, [r1, #0]
  34932c:	2001		mov	r0, #1
  34932e:	f7ff fed2	bl	0x3490d6
  349332:	2001		mov	r0, #1
  349334:	f7ff fecf	bl	0x3490d6
  349338:	203e		mov	r0, #62	; 0x3e
  34933a:	f7ff ff16	bl	0x34916a
  34933e:	4669		mov	r1, sp
  349340:	8048		strh	r0, [r1, #2]
  349342:	489e		ldr	r0, =0x17741e0	; via 0x3495bc
  349344:	f0b0 faca	bl	0x3f98dc	; $SMCE_Release_Semaphore
  349348:	4668		mov	r0, sp
  34934a:	8840		ldrh	r0, [r0, #2]
  34934c:	b001		add	sp, #4
  34934e:	bd00		pop	{pc}

$ABB_on:
  349350:	b500		push	{lr}
  349352:	b083		sub	sp, #12	; 0xc
  349354:	466a		mov	r2, sp
  349356:	7091		strb	r1, [r2, #2]
  349358:	4669		mov	r1, sp
  34935a:	8008		strh	r0, [r1, #0]
  34935c:	4897		ldr	r0, =0x17741e0	; via 0x3495bc
  34935e:	2100		mov	r1, #0
  349360:	43c9		mvn	r1, r1
  349362:	f0b0 fac3	bl	0x3f98ec
  349366:	4668		mov	r0, sp
  349368:	7880		ldrb	r0, [r0, #2]
  34936a:	2800		cmp	r0, #0
  34936c:	d003		beq	0x349376
  34936e:	f7ff ff9b	bl	0x3492a8
  349372:	f7ff ff99	bl	0x3492a8
  349376:	49a5		ldr	r1, =0xfffe3000	; via 0x34960c
  349378:	2031		mov	r0, #49	; 0x31
  34937a:	880a		ldrh	r2, [r1, #0]
  34937c:	4310		orr	r0, r2
  34937e:	8008		strh	r0, [r1, #0]
  349380:	4669		mov	r1, sp
  349382:	4841		ldr	r0, =0xfffe3006	; via 0x349488
  349384:	8800		ldrh	r0, [r0, #0]
  349386:	8088		strh	r0, [r1, #4]
  349388:	2001		mov	r0, #1
  34938a:	f7ff fea4	bl	0x3490d6
  34938e:	2008		mov	r0, #8
  349390:	21ff		mov	r1, #255	; 0xff
  349392:	3156		add	r1, #86	; 0x56
  349394:	f7ff fec3	bl	0x34911e
  349398:	2002		mov	r0, #2
  34939a:	f7ff fe9c	bl	0x3490d6
  34939e:	202a		mov	r0, #42	; 0x2a
  3493a0:	2101		mov	r1, #1
  3493a2:	f7ff febc	bl	0x34911e
  3493a6:	2026		mov	r0, #38	; 0x26
  3493a8:	2101		mov	r1, #1
  3493aa:	f7ff feb8	bl	0x34911e
  3493ae:	2028		mov	r0, #40	; 0x28
  3493b0:	211b		mov	r1, #27	; 0x1b
  3493b2:	f7ff feb4	bl	0x34911e
  3493b6:	2010		mov	r0, #16	; 0x10
  3493b8:	f7ff fe8d	bl	0x3490d6
  3493bc:	203c		mov	r0, #60	; 0x3c
  3493be:	2107		mov	r1, #7
  3493c0:	f7ff fead	bl	0x34911e
  3493c4:	2002		mov	r0, #2
  3493c6:	f7ff fe86	bl	0x3490d6
  3493ca:	2028		mov	r0, #40	; 0x28
  3493cc:	2101		mov	r1, #1
  3493ce:	f7ff fea6	bl	0x34911e
  3493d2:	2026		mov	r0, #38	; 0x26
  3493d4:	2100		mov	r1, #0
  3493d6:	f7ff fea2	bl	0x34911e
  3493da:	201a		mov	r0, #26	; 0x1a
  3493dc:	2160		mov	r1, #96	; 0x60
  3493de:	f7ff fe9e	bl	0x34911e
  3493e2:	2026		mov	r0, #38	; 0x26
  3493e4:	2101		mov	r1, #1
  3493e6:	f7ff fe9a	bl	0x34911e
  3493ea:	2028		mov	r0, #40	; 0x28
  3493ec:	211a		mov	r1, #26	; 0x1a
  3493ee:	f7ff fe96	bl	0x34911e
  3493f2:	2001		mov	r0, #1
  3493f4:	f7ff fe6f	bl	0x3490d6
  3493f8:	4668		mov	r0, sp
  3493fa:	8800		ldrh	r0, [r0, #0]
  3493fc:	0980		lsr	r0, r0, #6
  3493fe:	0400		lsl	r0, r0, #16
  349400:	0c01		lsr	r1, r0, #16
  349402:	2008		mov	r0, #8
  349404:	f7ff fe8b	bl	0x34911e
  349408:	4668		mov	r0, sp
  34940a:	8800		ldrh	r0, [r0, #0]
  34940c:	0c00		lsr	r0, r0, #16
  34940e:	d303		bcc	0x349418
  349410:	2038		mov	r0, #56	; 0x38
  349412:	2101		mov	r1, #1
  349414:	f7ff fe83	bl	0x34911e
  349418:	2002		mov	r0, #2
  34941a:	f7ff fe5c	bl	0x3490d6
  34941e:	203c		mov	r0, #60	; 0x3c
  349420:	f7ff fea3	bl	0x34916a
  349424:	05c0		lsl	r0, r0, #23
  349426:	0f00		lsr	r0, r0, #28
  349428:	0140		lsl	r0, r0, #5
  34942a:	9002		str	r0, [sp, #8]
  34942c:	201f		mov	r0, #31	; 0x1f
  34942e:	9902		ldr	r1, [sp, #8]
  349430:	4308		orr	r0, r1
  349432:	0400		lsl	r0, r0, #16
  349434:	0c01		lsr	r1, r0, #16
  349436:	203c		mov	r0, #60	; 0x3c
  349438:	f7ff fe71	bl	0x34911e
  34943c:	203e		mov	r0, #62	; 0x3e
  34943e:	f7ff fe94	bl	0x34916a
  349442:	05c0		lsl	r0, r0, #23
  349444:	0f00		lsr	r0, r0, #28
  349446:	0140		lsl	r0, r0, #5
  349448:	9002		str	r0, [sp, #8]
  34944a:	4668		mov	r0, sp
  34944c:	8901		ldrh	r1, [r0, #8]
  34944e:	203e		mov	r0, #62	; 0x3e
  349450:	f7ff fe65	bl	0x34911e
  349454:	2001		mov	r0, #1
  349456:	f7ff fe3e	bl	0x3490d6
  34945a:	2008		mov	r0, #8
  34945c:	210a		mov	r1, #10	; 0xa
  34945e:	f7ff fe5e	bl	0x34911e
  349462:	48e5		ldr	r0, =0xf4240	; via 0x3497f8
  349464:	f099 fd3b	bl	0x3e2ede
  349468:	f099 fdb3	bl	0x3e2fd2
  34946c:	2008		mov	r0, #8
  34946e:	2105		mov	r1, #5
  349470:	f7ff fe55	bl	0x34911e
  349474:	4851		ldr	r0, =0x17741e0	; via 0x3495bc
  349476:	f0b0 fa31	bl	0x3f98dc
  34947a:	b003		add	sp, #12	; 0xc
  34947c:	bd00		pop	{pc}
  34947e:	46c0		nop			(mov r8, r8)

  349480:	fffe300c
  349484:	fffe300e
  349488:	fffe3006
  34948c:	fffe3004
  349490:	fffe300a
  349494:	0000021b

$ABB_Read_ADC:
  349498:	b500		push	{lr}
  34949a:	b082		sub	sp, #8
  34949c:	9000		str	r0, [sp, #0]
  34949e:	4847		ldr	r0, =0x17741e0	; via 0x3495bc
  3494a0:	2100		mov	r1, #0
  3494a2:	43c9		mvn	r1, r1
  3494a4:	f0b0 fa22	bl	0x3f98ec
  3494a8:	4958		ldr	r1, =0xfffe3000	; via 0x34960c
  3494aa:	2031		mov	r0, #49	; 0x31
  3494ac:	880a		ldrh	r2, [r1, #0]
  3494ae:	4310		orr	r0, r2
  3494b0:	8008		strh	r0, [r1, #0]
  3494b2:	4669		mov	r1, sp
  3494b4:	48ef		ldr	r0, =0xfffe3006	; via 0x349874
  3494b6:	8800		ldrh	r0, [r0, #0]
  3494b8:	8088		strh	r0, [r1, #4]
  3494ba:	2001		mov	r0, #1
  3494bc:	f7ff fe0b	bl	0x3490d6
  3494c0:	201e		mov	r0, #30	; 0x1e
  3494c2:	f7ff fe52	bl	0x34916a
  3494c6:	9900		ldr	r1, [sp, #0]
  3494c8:	1c8a		add	r2, r1, #2
  3494ca:	9200		str	r2, [sp, #0]
  3494cc:	8008		strh	r0, [r1, #0]
  3494ce:	2020		mov	r0, #32	; 0x20
  3494d0:	f7ff fe4b	bl	0x34916a
  3494d4:	9900		ldr	r1, [sp, #0]
  3494d6:	1c8a		add	r2, r1, #2
  3494d8:	9200		str	r2, [sp, #0]
  3494da:	8008		strh	r0, [r1, #0]
  3494dc:	2022		mov	r0, #34	; 0x22
  3494de:	f7ff fe44	bl	0x34916a
  3494e2:	9900		ldr	r1, [sp, #0]
  3494e4:	1c8a		add	r2, r1, #2
  3494e6:	9200		str	r2, [sp, #0]
  3494e8:	8008		strh	r0, [r1, #0]
  3494ea:	2024		mov	r0, #36	; 0x24
  3494ec:	f7ff fe3d	bl	0x34916a
  3494f0:	9900		ldr	r1, [sp, #0]
  3494f2:	1c8a		add	r2, r1, #2
  3494f4:	9200		str	r2, [sp, #0]
  3494f6:	8008		strh	r0, [r1, #0]
  3494f8:	2026		mov	r0, #38	; 0x26
  3494fa:	f7ff fe36	bl	0x34916a
  3494fe:	9900		ldr	r1, [sp, #0]
  349500:	1c8a		add	r2, r1, #2
  349502:	9200		str	r2, [sp, #0]
  349504:	8008		strh	r0, [r1, #0]
  349506:	2028		mov	r0, #40	; 0x28
  349508:	f7ff fe2f	bl	0x34916a
  34950c:	9900		ldr	r1, [sp, #0]
  34950e:	1c8a		add	r2, r1, #2
  349510:	9200		str	r2, [sp, #0]
  349512:	8008		strh	r0, [r1, #0]
  349514:	202a		mov	r0, #42	; 0x2a
  349516:	f7ff fe28	bl	0x34916a
  34951a:	9900		ldr	r1, [sp, #0]
  34951c:	1c8a		add	r2, r1, #2
  34951e:	9200		str	r2, [sp, #0]
  349520:	8008		strh	r0, [r1, #0]
  349522:	202c		mov	r0, #44	; 0x2c
  349524:	f7ff fe21	bl	0x34916a
  349528:	9900		ldr	r1, [sp, #0]
  34952a:	1c8a		add	r2, r1, #2
  34952c:	9200		str	r2, [sp, #0]
  34952e:	8008		strh	r0, [r1, #0]
  349530:	4822		ldr	r0, =0x17741e0	; via 0x3495bc
  349532:	f0b0 f9d3	bl	0x3f98dc
  349536:	b002		add	sp, #8
  349538:	bd00		pop	{pc}

$ABB_Conf_ADC:
  34953a:	b500		push	{lr}
  34953c:	b082		sub	sp, #8
  34953e:	466a		mov	r2, sp
  349540:	8051		strh	r1, [r2, #2]
  349542:	4669		mov	r1, sp
  349544:	8008		strh	r0, [r1, #0]
  349546:	481d		ldr	r0, =0x17741e0	; via 0x3495bc
  349548:	2100		mov	r1, #0
  34954a:	43c9		mvn	r1, r1
  34954c:	f0b0 f9ce	bl	0x3f98ec
  349550:	492e		ldr	r1, =0xfffe3000	; via 0x34960c
  349552:	2031		mov	r0, #49	; 0x31
  349554:	880a		ldrh	r2, [r1, #0]
  349556:	4310		orr	r0, r2
  349558:	8008		strh	r0, [r1, #0]
  34955a:	4669		mov	r1, sp
  34955c:	48c5		ldr	r0, =0xfffe3006	; via 0x349874
  34955e:	8800		ldrh	r0, [r0, #0]
  349560:	8088		strh	r0, [r1, #4]
  349562:	2001		mov	r0, #1
  349564:	f7ff fdb7	bl	0x3490d6
  349568:	201a		mov	r0, #26	; 0x1a
  34956a:	4669		mov	r1, sp
  34956c:	8809		ldrh	r1, [r1, #0]
  34956e:	f7ff fdd6	bl	0x34911e
  349572:	2034		mov	r0, #52	; 0x34
  349574:	f7ff fdf9	bl	0x34916a
  349578:	4669		mov	r1, sp
  34957a:	80c8		strh	r0, [r1, #6]
  34957c:	4668		mov	r0, sp
  34957e:	8840		ldrh	r0, [r0, #2]
  349580:	49cb		ldr	r1, =0x3df	; via 0x3498b0
  349582:	4288		cmp	r0, r1
  349584:	d104		bne	0x349590
  349586:	48ca		ldr	r0, =0x3df	; via 0x3498b0
  349588:	4669		mov	r1, sp
  34958a:	88c9		ldrh	r1, [r1, #6]
  34958c:	4008		and	r0, r1
  34958e:	e007		b	0x3495a0
  349590:	4668		mov	r0, sp
  349592:	8840		ldrh	r0, [r0, #2]
  349594:	2820		cmp	r0, #32	; 0x20
  349596:	d108		bne	0x3495aa
  349598:	2020		mov	r0, #32	; 0x20
  34959a:	4669		mov	r1, sp
  34959c:	88c9		ldrh	r1, [r1, #6]
  34959e:	4308		orr	r0, r1
  3495a0:	0400		lsl	r0, r0, #16
  3495a2:	0c01		lsr	r1, r0, #16
  3495a4:	2034		mov	r0, #52	; 0x34
  3495a6:	f7ff fdba	bl	0x34911e
  3495aa:	4804		ldr	r0, =0x17741e0	; via 0x3495bc
  3495ac:	f0b0 f996	bl	0x3f98dc
  3495b0:	b002		add	sp, #8
  3495b2:	bd00		pop	{pc}

$spi_abb_read_int_reg_callback:
  39efc4:	b510		push	{r4, lr}
  39efc6:	b089		sub	sp, #36	; 0x24
  39efc8:	9002		str	r0, [sp, #8]
  39efca:	9802		ldr	r0, [sp, #8]
  39efcc:	8800		ldrh	r0, [r0, #0]
  39efce:	08c0		lsr	r0, r0, #3
  39efd0:	d344		bcc	0x39f05c
  39efd2:	2014		mov	r0, #20	; 0x14
  39efd4:	f05a fbba	bl	0x3f974c
  39efd8:	f7aa f998	bl	0x34930c
  39efdc:	2110		mov	r1, #16	; 0x10
  39efde:	4001		and	r1, r0
  39efe0:	4668		mov	r0, sp
  39efe2:	81c1		strh	r1, [r0, #14]	; 0xe
  39efe4:	89c0		ldrh	r0, [r0, #14]	; 0xe
  39efe6:	2800		cmp	r0, #0
  39efe8:	d000		beq	0x39efec
  39efea:	e15d		b	0x39f2a8
  39efec:	f04b fa6a	bl	0x3ea4c4
  39eff0:	4669		mov	r1, sp
  39eff2:	2000		mov	r0, #0
  39eff4:	8188		strh	r0, [r1, #12]	; 0xc
  39eff6:	4668		mov	r0, sp
  39eff8:	8980		ldrh	r0, [r0, #12]	; 0xc
  39effa:	2808		cmp	r0, #8
  39effc:	da18		bge	0x39f030
  39effe:	4668		mov	r0, sp
  39f000:	89c0		ldrh	r0, [r0, #14]	; 0xe
  39f002:	2800		cmp	r0, #0
  39f004:	d114		bne	0x39f030
  39f006:	2036		mov	r0, #54	; 0x36
  39f008:	f05a fba0	bl	0x3f974c
  39f00c:	f7aa f97e	bl	0x34930c
  39f010:	2110		mov	r1, #16	; 0x10
  39f012:	4001		and	r1, r0
  39f014:	4668		mov	r0, sp
  39f016:	81c1		strh	r1, [r0, #14]	; 0xe
  39f018:	4669		mov	r1, sp
  39f01a:	8980		ldrh	r0, [r0, #12]	; 0xc
  39f01c:	3001		add	r0, #1
  39f01e:	8188		strh	r0, [r1, #12]	; 0xc
  39f020:	4668		mov	r0, sp
  39f022:	8980		ldrh	r0, [r0, #12]	; 0xc
  39f024:	2808		cmp	r0, #8
  39f026:	da03		bge	0x39f030
  39f028:	4668		mov	r0, sp
  39f02a:	89c0		ldrh	r0, [r0, #14]	; 0xe
  39f02c:	2800		cmp	r0, #0
  39f02e:	d0ea		beq	0x39f006
  39f030:	4668		mov	r0, sp
  39f032:	89c0		ldrh	r0, [r0, #14]	; 0xe
  39f034:	2800		cmp	r0, #0
  39f036:	d000		beq	0x39f03a
  39f038:	e136		b	0x39f2a8
  39f03a:	48d9		ldr	r0, =0x1774ccf	; via 0x39f3a0
  39f03c:	7800		ldrb	r0, [r0, #0]
  39f03e:	2800		cmp	r0, #0
  39f040:	d100		bne	0x39f044
  39f042:	e131		b	0x39f2a8
  39f044:	48d7		ldr	r0, =0xa0010	; via 0x39f3a4
  39f046:	9000		str	r0, [sp, #0]
  39f048:	a09a		add	r0, pc, #616	; 0x268
  39f04a:	2119		mov	r1, #25	; 0x19
  39f04c:	2200		mov	r2, #0
  39f04e:	43d2		mvn	r2, r2
  39f050:	2305		mov	r3, #5
  39f052:	f03b fdef	bl	0x3dac34
  39f056:	f002 f9f1	bl	0x3a143c	; $Power_OFF_Button
  39f05a:	e125		b	0x39f2a8
; end of PUSHOFF_IT_STS handling
  39f05c:	9802		ldr	r0, [sp, #8]
  39f05e:	8800		ldrh	r0, [r0, #0]
  39f060:	0880		lsr	r0, r0, #2
  39f062:	d30b		bcc	0x39f07c
  39f064:	48cf		ldr	r0, =0xa0010	; via 0x39f3a4
  39f066:	9000		str	r0, [sp, #0]
  39f068:	a099		add	r0, pc, #612	; 0x264
  39f06a:	2120		mov	r1, #32	; 0x20
  39f06c:	2200		mov	r2, #0
  39f06e:	43d2		mvn	r2, r2
  39f070:	2305		mov	r3, #5
  39f072:	f03b fddf	bl	0x3dac34
  39f076:	f002 fa9c	bl	0x3a15b2	; $Power_OFF_Remote
  39f07a:	e115		b	0x39f2a8
; end of REMOT_IT_STS handling
  39f07c:	9802		ldr	r0, [sp, #8]
  39f07e:	8800		ldrh	r0, [r0, #0]
  39f080:	0980		lsr	r0, r0, #6
  39f082:	d200		bcs	0x39f086
  39f084:	e0ed		b	0x39f262
; The following write of 0 into byte var at 0x1775041
; is a Foxconn/Pirelli addition.
  39f086:	49c8		ldr	r1, =0x1775041	; via 0x39f3a8
  39f088:	2000		mov	r0, #0
  39f08a:	7008		strb	r0, [r1, #0]
  39f08c:	48c5		ldr	r0, =0xa0010	; via 0x39f3a4
  39f08e:	9000		str	r0, [sp, #0]
  39f090:	a098		add	r0, pc, #608	; 0x260
  39f092:	210f		mov	r1, #15	; 0xf
  39f094:	2200		mov	r2, #0
  39f096:	43d2		mvn	r2, r2
  39f098:	2305		mov	r3, #5
  39f09a:	f03b fdcb	bl	0x3dac34	; rvf_send_trace()
  39f09e:	48c3		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f0a0:	6800		ldr	r0, [r0, #0]
  39f0a2:	3004		add	r0, #4
  39f0a4:	f7aa f9f8	bl	0x349498	; $ABB_Read_ADC
  39f0a8:	48c0		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f0aa:	6800		ldr	r0, [r0, #0]
  39f0ac:	8dc0		ldrh	r0, [r0, #46]	; 0x2e
  39f0ae:	2806		cmp	r0, #6
  39f0b0:	db03		blt	0x39f0ba
  39f0b2:	48be		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f0b4:	6801		ldr	r1, [r0, #0]
  39f0b6:	2000		mov	r0, #0
  39f0b8:	85c8		strh	r0, [r1, #46]	; 0x2e
  39f0ba:	48bc		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f0bc:	6800		ldr	r0, [r0, #0]
  39f0be:	8dc0		ldrh	r0, [r0, #46]	; 0x2e
  39f0c0:	0040		lsl	r0, r0, #1
  39f0c2:	49ba		ldr	r1, =0x1774e38	; via 0x39f3ac
  39f0c4:	6809		ldr	r1, [r1, #0]
  39f0c6:	1840		add	r0, r0, r1
  39f0c8:	49b8		ldr	r1, =0x1774e38	; via 0x39f3ac
  39f0ca:	6809		ldr	r1, [r1, #0]
  39f0cc:	8889		ldrh	r1, [r1, #4]
  39f0ce:	8281		strh	r1, [r0, #20]	; 0x14
  39f0d0:	48b6		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f0d2:	6800		ldr	r0, [r0, #0]
  39f0d4:	302e		add	r0, #46	; 0x2e
  39f0d6:	8801		ldrh	r1, [r0, #0]
  39f0d8:	3101		add	r1, #1
  39f0da:	8001		strh	r1, [r0, #0]
  39f0dc:	2133		mov	r1, #51	; 0x33
  39f0de:	48b3		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f0e0:	6800		ldr	r0, [r0, #0]
  39f0e2:	5c08		ldrb	r0, [r1, r0]
  39f0e4:	2801		cmp	r0, #1
  39f0e6:	d000		beq	0x39f0ea
  39f0e8:	e0de		b	0x39f2a8
  39f0ea:	2010		mov	r0, #16	; 0x10
  39f0ec:	f7f8 ff53	bl	0x397f96	; $osx_alloc_prim
  39f0f0:	9004		str	r0, [sp, #16]	; 0x10
  39f0f2:	9804		ldr	r0, [sp, #16]	; 0x10
  39f0f4:	2800		cmp	r0, #0
  39f0f6:	d022		beq	0x39f13e
  39f0f8:	9904		ldr	r1, [sp, #16]	; 0x10
  39f0fa:	2069		mov	r0, #105	; 0x69
  39f0fc:	6008		str	r0, [r1, #0]
  39f0fe:	4669		mov	r1, sp
  39f100:	2000		mov	r0, #0
  39f102:	7508		strb	r0, [r1, #20]	; 0x14
  39f104:	4668		mov	r0, sp
  39f106:	7d00		ldrb	r0, [r0, #20]	; 0x14
  39f108:	2808		cmp	r0, #8
  39f10a:	da14		bge	0x39f136
  39f10c:	4668		mov	r0, sp
  39f10e:	7d00		ldrb	r0, [r0, #20]	; 0x14
  39f110:	0042		lsl	r2, r0, #1
  39f112:	9804		ldr	r0, [sp, #16]	; 0x10
  39f114:	6901		ldr	r1, [r0, #16]	; 0x10
  39f116:	4668		mov	r0, sp
  39f118:	7d00		ldrb	r0, [r0, #20]	; 0x14
  39f11a:	0043		lsl	r3, r0, #1
  39f11c:	48a3		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f11e:	6800		ldr	r0, [r0, #0]
  39f120:	1818		add	r0, r3, r0
  39f122:	8880		ldrh	r0, [r0, #4]
  39f124:	5250		strh	r0, [r2, r1]
  39f126:	4668		mov	r0, sp
  39f128:	4669		mov	r1, sp
  39f12a:	7d09		ldrb	r1, [r1, #20]	; 0x14
  39f12c:	3101		add	r1, #1
  39f12e:	7501		strb	r1, [r0, #20]	; 0x14
  39f130:	7d00		ldrb	r0, [r0, #20]	; 0x14
  39f132:	2808		cmp	r0, #8
  39f134:	dbea		blt	0x39f10c
  39f136:	9804		ldr	r0, [sp, #16]	; 0x10
  39f138:	2102		mov	r1, #2
  39f13a:	f7f8 fe9a	bl	0x397e72	; $osx_send_prim
; checking GPIO 6 input
  39f13e:	2400		mov	r4, #0
  39f140:	2005		mov	r0, #5
  39f142:	f030 fed8	bl	0x3cfef6
  39f146:	2800		cmp	r0, #0
  39f148:	d100		bne	0x39f14c
  39f14a:	2401		mov	r4, #1
  39f14c:	a808		add	r0, sp, #32	; 0x20
  39f14e:	7004		strb	r4, [r0, #0]
  39f150:	4897		ldr	r0, =0x17750fc	; via 0x39f3b0
  39f152:	7800		ldrb	r0, [r0, #0]
  39f154:	a908		add	r1, sp, #32	; 0x20
  39f156:	7809		ldrb	r1, [r1, #0]
  39f158:	4288		cmp	r0, r1
  39f15a:	d017		beq	0x39f18c
  39f15c:	f7b0 ffc4	bl	0x3500e8
  39f160:	2801		cmp	r0, #1
  39f162:	d10a		bne	0x39f17a
  39f164:	4893		ldr	r0, =0x17750fe	; via 0x39f3b4
  39f166:	2101		mov	r1, #1
  39f168:	7001		strb	r1, [r0, #0]
  39f16a:	4991		ldr	r1, =0x17750fc	; via 0x39f3b0
  39f16c:	a808		add	r0, sp, #32	; 0x20
  39f16e:	7800		ldrb	r0, [r0, #0]
  39f170:	7008		strb	r0, [r1, #0]
  39f172:	488c		ldr	r0, =0xa0010	; via 0x39f3a4
  39f174:	9000		str	r0, [sp, #0]
  39f176:	a063		add	r0, pc, #396	; 0x18c
  39f178:	e002		b	0x39f180
  39f17a:	488a		ldr	r0, =0xa0010	; via 0x39f3a4
  39f17c:	9000		str	r0, [sp, #0]
  39f17e:	a063		add	r0, pc, #396	; 0x18c
  39f180:	2107		mov	r1, #7
  39f182:	2200		mov	r2, #0
  39f184:	43d2		mvn	r2, r2
  39f186:	2305		mov	r3, #5
  39f188:	f03b fd54	bl	0x3dac34
; end of GPIO 6 check code
  39f18c:	488a		ldr	r0, =0x17751e8	; via 0x39f3b8
  39f18e:	7800		ldrb	r0, [r0, #0]
  39f190:	2800		cmp	r0, #0
  39f192:	d019		beq	0x39f1c8
  39f194:	f69e f9ce	bl	0x23d534
  39f198:	2802		cmp	r0, #2
  39f19a:	dd15		ble	0x39f1c8
  39f19c:	4883		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f19e:	6800		ldr	r0, [r0, #0]
  39f1a0:	8a41		ldrh	r1, [r0, #18]	; 0x12
  39f1a2:	2049		mov	r0, #73	; 0x49
  39f1a4:	00c0		lsl	r0, r0, #3
  39f1a6:	4281		cmp	r1, r0
  39f1a8:	dd0e		ble	0x39f1c8
  39f1aa:	4983		ldr	r1, =0x17751e8	; via 0x39f3b8
  39f1ac:	2000		mov	r0, #0
  39f1ae:	7008		strb	r0, [r1, #0]
  39f1b0:	4882		ldr	r0, =0x17751e9	; via 0x39f3bc
  39f1b2:	2101		mov	r1, #1
  39f1b4:	7001		strb	r1, [r0, #0]
  39f1b6:	487b		ldr	r0, =0xa0010	; via 0x39f3a4
  39f1b8:	9000		str	r0, [sp, #0]
  39f1ba:	a060		add	r0, pc, #384	; 0x180
  39f1bc:	2103		mov	r1, #3
  39f1be:	2200		mov	r2, #0
  39f1c0:	43d2		mvn	r2, r2
  39f1c2:	2305		mov	r3, #5
  39f1c4:	f03b fd36	bl	0x3dac34
  39f1c8:	4879		ldr	r0, =0x17750fc	; via 0x39f3b0
  39f1ca:	7800		ldrb	r0, [r0, #0]
  39f1cc:	2800		cmp	r0, #0
  39f1ce:	d110		bne	0x39f1f2
  39f1d0:	487b		ldr	r0, =0x1774db8	; via 0x39f3c0
  39f1d2:	6800		ldr	r0, [r0, #0]
  39f1d4:	2801		cmp	r0, #1
  39f1d6:	d003		beq	0x39f1e0
  39f1d8:	4879		ldr	r0, =0x1774db8	; via 0x39f3c0
  39f1da:	6800		ldr	r0, [r0, #0]
  39f1dc:	2802		cmp	r0, #2
  39f1de:	d108		bne	0x39f1f2
  39f1e0:	4872		ldr	r0, =0x1774e38	; via 0x39f3ac
  39f1e2:	6800		ldr	r0, [r0, #0]
  39f1e4:	8a41		ldrh	r1, [r0, #18]	; 0x12
  39f1e6:	2049		mov	r0, #73	; 0x49
  39f1e8:	00c0		lsl	r0, r0, #3
  39f1ea:	4281		cmp	r1, r0
  39f1ec:	dc04		bgt	0x39f1f8
  39f1ee:	2101		mov	r1, #1
  39f1f0:	e000		b	0x39f1f4
  39f1f2:	2100		mov	r1, #0
  39f1f4:	4870		ldr	r0, =0x17751e8	; via 0x39f3b8
  39f1f6:	7001		strb	r1, [r0, #0]
  39f1f8:	486e		ldr	r0, =0x17750fe	; via 0x39f3b4
  39f1fa:	7800		ldrb	r0, [r0, #0]
  39f1fc:	2800		cmp	r0, #0
  39f1fe:	d103		bne	0x39f208
  39f200:	486e		ldr	r0, =0x17751e9	; via 0x39f3bc
  39f202:	7800		ldrb	r0, [r0, #0]
  39f204:	2800		cmp	r0, #0
  39f206:	d04f		beq	0x39f2a8
  39f208:	486e		ldr	r0, =0x1775098	; via 0x39f3c4
  39f20a:	6800		ldr	r0, [r0, #0]
  39f20c:	8800		ldrh	r0, [r0, #0]
  39f20e:	2110		mov	r1, #16	; 0x10
  39f210:	aa07		add	r2, sp, #28	; 0x1c
  39f212:	f625 fbd9	bl	0x1c49c8
  39f216:	9006		str	r0, [sp, #24]	; 0x18
  39f218:	9806		ldr	r0, [sp, #24]	; 0x18
  39f21a:	2802		cmp	r0, #2
  39f21c:	d015		beq	0x39f24a
  39f21e:	9907		ldr	r1, [sp, #28]	; 0x1c
  39f220:	4869		ldr	r0, =0xd809	; via 0x39f3c8
  39f222:	6008		str	r0, [r1, #0]
  39f224:	9907		ldr	r1, [sp, #28]	; 0x1c
  39f226:	2000		mov	r0, #0
  39f228:	43c0		mvn	r0, r0
  39f22a:	7308		strb	r0, [r1, #12]	; 0xc
  39f22c:	9806		ldr	r0, [sp, #24]	; 0x18
  39f22e:	2800		cmp	r0, #0
  39f230:	d101		bne	0x39f236
  39f232:	2101		mov	r1, #1
  39f234:	e000		b	0x39f238
  39f236:	2100		mov	r1, #0
  39f238:	9807		ldr	r0, [sp, #28]	; 0x1c
  39f23a:	7341		strb	r1, [r0, #13]	; 0xd
  39f23c:	4861		ldr	r0, =0x1775098	; via 0x39f3c4
  39f23e:	6800		ldr	r0, [r0, #0]
  39f240:	7880		ldrb	r0, [r0, #2]
  39f242:	9907		ldr	r1, [sp, #28]	; 0x1c
  39f244:	f019 feac	bl	0x3b8fa0
  39f248:	e02e		b	0x39f2a8
  39f24a:	4860		ldr	r0, =0xa0008	; via 0x39f3cc
  39f24c:	9000		str	r0, [sp, #0]
  39f24e:	a03c		add	r0, pc, #240	; 0xf0
  39f250:	212e		mov	r1, #46	; 0x2e
  39f252:	2200		mov	r2, #0
  39f254:	43d2		mvn	r2, r2
  39f256:	2301		mov	r3, #1
  39f258:	f03b fcec	bl	0x3dac34
  39f25c:	f00f fe8b	bl	0x3aef76
  39f260:	e022		b	0x39f2a8
  39f262:	9802		ldr	r0, [sp, #8]
  39f264:	8800		ldrh	r0, [r0, #0]
  39f266:	0900		lsr	r0, r0, #4
  39f268:	d31e		bcc	0x39f2a8
  39f26a:	f7aa f84f	bl	0x34930c
  39f26e:	4669		mov	r1, sp
  39f270:	81c8		strh	r0, [r1, #14]	; 0xe
  39f272:	4668		mov	r0, sp
  39f274:	89c0		ldrh	r0, [r0, #14]	; 0xe
  39f276:	09c0		lsr	r0, r0, #7
  39f278:	d30b		bcc	0x39f292
  39f27a:	484a		ldr	r0, =0xa0010	; via 0x39f3a4
  39f27c:	9000		str	r0, [sp, #0]
  39f27e:	a03c		add	r0, pc, #240	; 0xf0
  39f280:	2114		mov	r1, #20	; 0x14
  39f282:	2200		mov	r2, #0
  39f284:	43d2		mvn	r2, r2
  39f286:	2305		mov	r3, #5
  39f288:	f03b fcd4	bl	0x3dac34
  39f28c:	f002 f993	bl	0x3a15b6
  39f290:	e00a		b	0x39f2a8
  39f292:	4844		ldr	r0, =0xa0010	; via 0x39f3a4
  39f294:	9000		str	r0, [sp, #0]
  39f296:	a03c		add	r0, pc, #240	; 0xf0
  39f298:	2116		mov	r1, #22	; 0x16
  39f29a:	2200		mov	r2, #0
  39f29c:	43d2		mvn	r2, r2
  39f29e:	2305		mov	r3, #5
  39f2a0:	f03b fcc8	bl	0x3dac34
  39f2a4:	f002 f99a	bl	0x3a15dc
  39f2a8:	200c		mov	r0, #12	; 0xc
  39f2aa:	f040 fd00	bl	0x3dfcae
  39f2ae:	b009		add	sp, #36	; 0x24
  39f2b0:	bd10		pop	{r4, pc}
  39f2b2:	46c0		nop			(mov r8, r8)

$Power_ON_Button:
  3a13dc:	b570		push	{r4, r5, r6, lr}
  3a13de:	1c05		add	r5, r0, #0
; set is_gsm_on
  3a13e0:	2232		mov	r2, #50	; 0x32
  3a13e2:	48ee		ldr	r0, =0x1774e38	; via 0x3a179c
  3a13e4:	6801		ldr	r1, [r0, #0]
  3a13e6:	2001		mov	r0, #1
  3a13e8:	5450		strb	r0, [r2, r1]
; Kp pointers: are they set?
  3a13ea:	4eed		ldr	r6, =0x1774e98	; via 0x3a17a0
  3a13ec:	6834		ldr	r4, [r6, #0]
  3a13ee:	6830		ldr	r0, [r6, #0]
  3a13f0:	2800		cmp	r0, #0
  3a13f2:	d002		beq	0x3a13fa
  3a13f4:	6870		ldr	r0, [r6, #4]
  3a13f6:	2800		cmp	r0, #0
  3a13f8:	d106		bne	0x3a1408
  3a13fa:	2001		mov	r0, #1
  3a13fc:	f710 fa4f	bl	0x2b189e	; rvf_delay()
  3a1400:	6834		ldr	r4, [r6, #0]
  3a1402:	2c00		cmp	r4, #0
  3a1404:	d1f6		bne	0x3a13f4
  3a1406:	e7f8		b	0x3a13fa
; end of the wait for Kp pointers to be initialized
; different boot causes result in different key codes being sent
  3a1408:	2d01		cmp	r5, #1
  3a140a:	d00d		beq	0x3a1428
  3a140c:	2d04		cmp	r5, #4
  3a140e:	d009		beq	0x3a1424
  3a1410:	2d08		cmp	r5, #8
  3a1412:	d005		beq	0x3a1420
  3a1414:	2d02		cmp	r5, #2
  3a1416:	d001		beq	0x3a141c
  3a1418:	2036		mov	r0, #54	; 0x36
  3a141a:	e006		b	0x3a142a
  3a141c:	2035		mov	r0, #53	; 0x35
  3a141e:	e004		b	0x3a142a
  3a1420:	2034		mov	r0, #52	; 0x34
  3a1422:	e002		b	0x3a142a
  3a1424:	2033		mov	r0, #51	; 0x33
  3a1426:	e000		b	0x3a142a
  3a1428:	2019		mov	r0, #25	; 0x19
  3a142a:	f055 feef	bl	0x3f720c	; $IND_CALL
  3a142e:	2005		mov	r0, #5
  3a1430:	f710 fa35	bl	0x2b189e	; rvf_delay()
  3a1434:	6874		ldr	r4, [r6, #4]
  3a1436:	f055 fee9	bl	0x3f720c	; $IND_CALL
  3a143a:	bd70		pop	{r4, r5, r6, pc}

$Power_OFF_Button:
  3a143c:	b530		push	{r4, r5, lr}
  3a143e:	b082		sub	sp, #8
  3a1440:	f707 f84e	bl	0x2a84e0
  3a1444:	48d7		ldr	r0, =0xa0020	; via 0x3a17a4
  3a1446:	9000		str	r0, [sp, #0]
  3a1448:	a0b9		add	r0, pc, #740	; 0x2e4
  3a144a:	2110		mov	r1, #16	; 0x10
  3a144c:	2200		mov	r2, #0
  3a144e:	43d2		mvn	r2, r2
  3a1450:	2302		mov	r3, #2
  3a1452:	f039 fbef	bl	0x3dac34
  3a1456:	4dd2		ldr	r5, =0x1774e98	; via 0x3a17a0
  3a1458:	2019		mov	r0, #25	; 0x19
  3a145a:	682c		ldr	r4, [r5, #0]
  3a145c:	f055 fed6	bl	0x3f720c	; $IND_CALL
  3a1460:	2005		mov	r0, #5
  3a1462:	f710 fa1c	bl	0x2b189e	; rvf_delay()
  3a1466:	686c		ldr	r4, [r5, #4]
  3a1468:	f055 fed0	bl	0x3f720c	; $IND_CALL
  3a146c:	b002		add	sp, #8
  3a146e:	bd30		pop	{r4, r5, pc}

$Set_Switch_ON_Cause:
  3a1470:	b500		push	{lr}
  3a1472:	f7a7 ff4b	bl	0x34930c
  3a1476:	49cc		ldr	r1, =0x1774cd0	; via 0x3a17a8
  3a1478:	8008		strh	r0, [r1, #0]
  3a147a:	bd00		pop	{pc}

$Switch_ON:
  3a147c:	b5f0		push	{r4, r5, r6, r7, lr}
  3a147e:	b082		sub	sp, #8
  3a1480:	f7a7 ff44	bl	0x34930c	; $ABB_Read_Status
  3a1484:	49c8		ldr	r1, =0x1774cd0	; via 0x3a17a8
  3a1486:	8008		strh	r0, [r1, #0]
  3a1488:	2101		mov	r1, #1
  3a148a:	0902		lsr	r2, r0, #4
  3a148c:	4391		bic	r1, r2
  3a148e:	0609		lsl	r1, r1, #24
  3a1490:	0e0d		lsr	r5, r1, #24
  3a1492:	09c1		lsr	r1, r0, #7
  3a1494:	d309		bcc	0x3a14aa
  3a1496:	2104		mov	r1, #4
  3a1498:	4329		orr	r1, r5
  3a149a:	0609		lsl	r1, r1, #24
  3a149c:	0e0d		lsr	r5, r1, #24
  3a149e:	0840		lsr	r0, r0, #1
  3a14a0:	d303		bcc	0x3a14aa
  3a14a2:	2001		mov	r0, #1
  3a14a4:	4328		orr	r0, r5
  3a14a6:	0600		lsl	r0, r0, #24
  3a14a8:	0e05		lsr	r5, r0, #24
; R5: bit 0 is set if the power button is held down or if
; the ONBSTS bit is set with charging power connected
; bit 2 is set if the charging power is connected
  3a14aa:	4ec0		ldr	r6, =0xfffe1811	; via 0x3a17ac
  3a14ac:	2000		mov	r0, #0
  3a14ae:	5630		ldrsb	r0, [r6, r0]
  3a14b0:	09c0		lsr	r0, r0, #7
  3a14b2:	d308		bcc	0x3a14c6
  3a14b4:	2040		mov	r0, #64	; 0x40
  3a14b6:	2100		mov	r1, #0
  3a14b8:	5671		ldrsb	r1, [r6, r1]
  3a14ba:	4308		orr	r0, r1
  3a14bc:	7030		strb	r0, [r6, #0]
  3a14be:	2008		mov	r0, #8
  3a14c0:	4328		orr	r0, r5
  3a14c2:	0600		lsl	r0, r0, #24
  3a14c4:	0e05		lsr	r5, r0, #24
; bit 3 is set in R5 if an RTC alarm has occurred
; write 0 into ABB VBATREG
  3a14c6:	2001		mov	r0, #1
  3a14c8:	211e		mov	r1, #30	; 0x1e
  3a14ca:	2200		mov	r2, #0
  3a14cc:	f7a7 fe9e	bl	0x34920c	; $ABB_Write_Register_on_page
  3a14d0:	2001		mov	r0, #1
  3a14d2:	f710 f9e4	bl	0x2b189e	; rvf_delay()
  3a14d6:	4fb1		ldr	r7, =0x1774e38	; via 0x3a179c
  3a14d8:	2001		mov	r0, #1
  3a14da:	211e		mov	r1, #30	; 0x1e
  3a14dc:	f7a7 febd	bl	0x34925a	; $ABB_Read_Register_on_page
  3a14e0:	6839		ldr	r1, [r7, #0]
  3a14e2:	8088		strh	r0, [r1, #4]
  3a14e4:	f78c fb00	bl	0x32dae8
  3a14e8:	1c04		add	r4, r0, #0
  3a14ea:	6838		ldr	r0, [r7, #0]
  3a14ec:	1c02		add	r2, r0, #0
  3a14ee:	2106		mov	r1, #6
  3a14f0:	8893		ldrh	r3, [r2, #4]
  3a14f2:	8283		strh	r3, [r0, #20]	; 0x14
  3a14f4:	3002		add	r0, #2
  3a14f6:	3901		sub	r1, #1
  3a14f8:	2900		cmp	r1, #0
  3a14fa:	d1f9		bne	0x3a14f0
; "First bat.voltage (mv):" trace
  3a14fc:	48a9		ldr	r0, =0xa0020	; via 0x3a17a4
  3a14fe:	9000		str	r0, [sp, #0]
  3a1500:	a090		add	r0, pc, #576	; 0x240
  3a1502:	2118		mov	r1, #24	; 0x18
  3a1504:	1c22		add	r2, r4, #0
  3a1506:	2305		mov	r3, #5
  3a1508:	f039 fb94	bl	0x3dac34
; "BatOperationMode =" trace
  3a150c:	48a8		ldr	r0, =0x1774cd4	; via 0x3a17b0
  3a150e:	6802		ldr	r2, [r0, #0]
  3a1510:	48a4		ldr	r0, =0xa0020	; via 0x3a17a4
  3a1512:	9000		str	r0, [sp, #0]
  3a1514:	a092		add	r0, pc, #584	; 0x248
  3a1516:	2113		mov	r1, #19	; 0x13
  3a1518:	2305		mov	r3, #5
  3a151a:	f039 fb8b	bl	0x3dac34
  3a151e:	48a5		ldr	r0, =0x1774b7c	; via 0x3a17b4
  3a1520:	8004		strh	r4, [r0, #0]
  3a1522:	1c20		add	r0, r4, #0
  3a1524:	f78c fd63	bl	0x32dfee
  3a1528:	1c02		add	r2, r0, #0
  3a152a:	48a3		ldr	r0, =0x1774ccc	; via 0x3a17b8
  3a152c:	8002		strh	r2, [r0, #0]
; "First capacity (%):" trace
  3a152e:	489d		ldr	r0, =0xa0020	; via 0x3a17a4
  3a1530:	9000		str	r0, [sp, #0]
  3a1532:	a090		add	r0, pc, #576	; 0x240
  3a1534:	2114		mov	r1, #20	; 0x14
  3a1536:	2305		mov	r3, #5
  3a1538:	f039 fb7c	bl	0x3dac34
  3a153c:	489f		ldr	r0, =0xd2a	; via 0x3a17bc
  3a153e:	4284		cmp	r4, r0
  3a1540:	da03		bge	0x3a154a
  3a1542:	2002		mov	r0, #2
  3a1544:	4328		orr	r0, r5
  3a1546:	0600		lsl	r0, r0, #24
  3a1548:	0e05		lsr	r5, r0, #24
; bit 1 is set in R5 if the battery is critically low
  3a154a:	0928		lsr	r0, r5, #4
  3a154c:	d309		bcc	0x3a1562
  3a154e:	489b		ldr	r0, =0xd2a	; via 0x3a17bc
  3a1550:	4284		cmp	r4, r0
  3a1552:	da06		bge	0x3a1562
  3a1554:	20f7		mov	r0, #247	; 0xf7
  3a1556:	7871		ldrb	r1, [r6, #1]
  3a1558:	4008		and	r0, r1
  3a155a:	7070		strb	r0, [r6, #1]
  3a155c:	f7a8 f98c	bl	0x349878	; $ABB_Power_Off
  3a1560:	e024		b	0x3a15ac
; end of RTC alarm low battery check
; set display backlight to max
  3a1562:	2040		mov	r0, #64	; 0x40
  3a1564:	f03d fe5f	bl	0x3df226
; find the highest set bit in R5
  3a1568:	2107		mov	r1, #7
  3a156a:	2001		mov	r0, #1
  3a156c:	4088		lsl	r0, r1
  3a156e:	4028		and	r0, r5
  3a1570:	0600		lsl	r0, r0, #24
  3a1572:	0e00		lsr	r0, r0, #24
  3a1574:	2800		cmp	r0, #0
  3a1576:	d104		bne	0x3a1582
  3a1578:	1e49		sub	r1, r1, #1
  3a157a:	0409		lsl	r1, r1, #16
  3a157c:	1409		asr	r1, r1, #16
  3a157e:	2900		cmp	r1, #0
  3a1580:	d5f3		bpl	0x3a156a
; end of the find-highest-bit loop
  3a1582:	2200		mov	r2, #0
  3a1584:	2802		cmp	r0, #2
  3a1586:	d000		beq	0x3a158a
  3a1588:	2201		mov	r2, #1
  3a158a:	07e9		lsl	r1, r5, #31
  3a158c:	0fc9		lsr	r1, r1, #31
  3a158e:	4311		orr	r1, r2
  3a1590:	2900		cmp	r1, #0
  3a1592:	d100		bne	0x3a1596
  3a1594:	2000		mov	r0, #0
  3a1596:	08e9		lsr	r1, r5, #3
  3a1598:	d204		bcs	0x3a15a4
; boot path w/o charging power
  3a159a:	f7ff ff1f	bl	0x3a13dc	; $Power_ON_Button
  3a159e:	f012 fa73	bl	0x3b3a88	; $pwr_handle_discharge
  3a15a2:	e003		b	0x3a15ac
; boot path with charging power
  3a15a4:	f7ff ff1a	bl	0x3a13dc	; $Power_ON_Button
  3a15a8:	f000 f805	bl	0x3a15b6	; $PWR_Charger_Plug
  3a15ac:	b002		add	sp, #8
  3a15ae:	bdf0		pop	{r4, r5, r6, r7, pc}

$Power_ON_Remote:
  3a15b0:	4770		bx	lr

$Power_OFF_Remote:
  3a15b2:	4770		bx	lr

$Power_IT_WakeUp:
  3a15b4:	4770		bx	lr

$PWR_Charger_Plug:
  3a15b6:	b500		push	{lr}
  3a15b8:	2132		mov	r1, #50	; 0x32
  3a15ba:	4878		ldr	r0, =0x1774e38	; via 0x3a179c
  3a15bc:	6800		ldr	r0, [r0, #0]
  3a15be:	5c08		ldrb	r0, [r1, r0]
  3a15c0:	2800		cmp	r0, #0
  3a15c2:	d103		bne	0x3a15cc
  3a15c4:	20ff		mov	r0, #255	; 0xff
  3a15c6:	30b2		add	r0, #178	; 0xb2
  3a15c8:	f710 f969	bl	0x2b189e	; rvf_delay()
  3a15cc:	2003		mov	r0, #3
  3a15ce:	f789 fcc9	bl	0x32af64	; $rvf_stop_timer
  3a15d2:	f7f3 fb5d	bl	0x394c90	; $pwr_send_charger_plug_event ?
  3a15d6:	f78c fc1b	bl	0x32de10	; $pwr_get_battery_type
  3a15da:	bd00		pop	{pc}

$PWR_Charger_Unplug:
  3a15dc:	b500		push	{lr}
  3a15de:	b082		sub	sp, #8
  3a15e0:	f7f3 fb8f	bl	0x394d02	; $pwr_send_charger_unplug_event ?
  3a15e4:	486f		ldr	r0, =0xa0020	; via 0x3a17a4
  3a15e6:	9000		str	r0, [sp, #0]
  3a15e8:	a068		add	r0, pc, #416	; 0x1a0
  3a15ea:	210e		mov	r1, #14	; 0xe
  3a15ec:	2200		mov	r2, #0
  3a15ee:	43d2		mvn	r2, r2
  3a15f0:	2305		mov	r3, #5
  3a15f2:	f039 fb1f	bl	0x3dac34
  3a15f6:	4872		ldr	r0, =0x1774cce	; via 0x3a17c0
  3a15f8:	2100		mov	r1, #0
  3a15fa:	7001		strb	r1, [r0, #0]
  3a15fc:	f740 fe77	bl	0x2e22ee
  3a1600:	2032		mov	r0, #50	; 0x32
  3a1602:	4966		ldr	r1, =0x1774e38	; via 0x3a179c
  3a1604:	6809		ldr	r1, [r1, #0]
  3a1606:	5c40		ldrb	r0, [r0, r1]
  3a1608:	2800		cmp	r0, #0
  3a160a:	d00a		beq	0x3a1622
  3a160c:	486d		ldr	r0, =0x1774ccf	; via 0x3a17c4
  3a160e:	7800		ldrb	r0, [r0, #0]
  3a1610:	2800		cmp	r0, #0
  3a1612:	d103		bne	0x3a161c
  3a1614:	486c		ldr	r0, =0x1774cd2	; via 0x3a17c8
  3a1616:	7800		ldrb	r0, [r0, #0]
  3a1618:	2800		cmp	r0, #0
  3a161a:	d102		bne	0x3a1622
  3a161c:	f012 fa34	bl	0x3b3a88	; $pwr_handle_discharge
  3a1620:	e004		b	0x3a162c
  3a1622:	2001		mov	r0, #1
  3a1624:	213c		mov	r1, #60	; 0x3c
  3a1626:	2201		mov	r2, #1
  3a1628:	f7a7 fdf0	bl	0x34920c	; $ABB_Write_Register_on_page
  3a162c:	b002		add	sp, #8
  3a162e:	bd00		pop	{pc}

  3a1630:	4965		ldr	r1, =0x1774cd2	; via 0x3a17c8
  3a1632:	2001		mov	r0, #1
  3a1634:	7008		strb	r0, [r1, #0]
  3a1636:	4770		bx	lr

  3a1638:	4963		ldr	r1, =0x1774cd2	; via 0x3a17c8
  3a163a:	2000		mov	r0, #0
  3a163c:	7008		strb	r0, [r1, #0]
  3a163e:	4770		bx	lr

  3a1640:	b500		push	{lr}
  3a1642:	f7a7 fe63	bl	0x34930c
  3a1646:	0980		lsr	r0, r0, #6
  3a1648:	07c0		lsl	r0, r0, #31
  3a164a:	0fc0		lsr	r0, r0, #31
  3a164c:	0600		lsl	r0, r0, #24
  3a164e:	0e00		lsr	r0, r0, #24
  3a1650:	bd00		pop	{pc}

  3a1652:	b530		push	{r4, r5, lr}
  3a1654:	2800		cmp	r0, #0
  3a1656:	d101		bne	0x3a165c
  3a1658:	203d		mov	r0, #61	; 0x3d
  3a165a:	e000		b	0x3a165e
  3a165c:	203c		mov	r0, #60	; 0x3c
  3a165e:	4d50		ldr	r5, =0x1774e98	; via 0x3a17a0
  3a1660:	682c		ldr	r4, [r5, #0]
  3a1662:	f055 fdd3	bl	0x3f720c	; $IND_CALL
  3a1666:	2005		mov	r0, #5
  3a1668:	f710 f919	bl	0x2b189e	; rvf_delay()
  3a166c:	686c		ldr	r4, [r5, #4]
  3a166e:	f055 fdcd	bl	0x3f720c	; $IND_CALL
  3a1672:	bd30		pop	{r4, r5, pc}

  3a1674:	b500		push	{lr}
  3a1676:	f7a7 fe49	bl	0x34930c
  3a167a:	4a4c		ldr	r2, =0xfffe1811	; via 0x3a17ac
  3a167c:	2100		mov	r1, #0
  3a167e:	5651		ldrsb	r1, [r2, r1]
  3a1680:	4308		orr	r0, r1
  3a1682:	09c0		lsr	r0, r0, #7
  3a1684:	d208		bcs	0x3a1698
  3a1686:	f7a7 fe41	bl	0x34930c
  3a168a:	0940		lsr	r0, r0, #5
  3a168c:	d304		bcc	0x3a1698
  3a168e:	2001		mov	r0, #1
  3a1690:	213c		mov	r1, #60	; 0x3c
  3a1692:	2201		mov	r2, #1
  3a1694:	f7a7 fdba	bl	0x34920c
  3a1698:	bd00		pop	{pc}

  3a169a:	b530		push	{r4, r5, lr}
  3a169c:	b081		sub	sp, #4
  3a169e:	2503		mov	r5, #3
  3a16a0:	4c4a		ldr	r4, =0x536718	; via 0x3a17cc
  3a16a2:	7820		ldrb	r0, [r4, #0]
  3a16a4:	280a		cmp	r0, #10	; 0xa
  3a16a6:	d005		beq	0x3a16b4
  3a16a8:	2850		cmp	r0, #80	; 0x50
  3a16aa:	d134		bne	0x3a1716
  3a16ac:	4669		mov	r1, sp
  3a16ae:	2079		mov	r0, #121	; 0x79
  3a16b0:	8048		strh	r0, [r1, #2]
  3a16b2:	e002		b	0x3a16ba
  3a16b4:	4668		mov	r0, sp
  3a16b6:	2141		mov	r1, #65	; 0x41
  3a16b8:	8041		strh	r1, [r0, #2]
  3a16ba:	2001		mov	r0, #1
  3a16bc:	2138		mov	r1, #56	; 0x38
  3a16be:	466a		mov	r2, sp
  3a16c0:	8852		ldrh	r2, [r2, #2]
  3a16c2:	f7a7 fda3	bl	0x34920c
  3a16c6:	4842		ldr	r0, =0x4c4b40	; via 0x3a17d0
  3a16c8:	f041 fc09	bl	0x3e2ede
  3a16cc:	f041 fc81	bl	0x3e2fd2
  3a16d0:	2001		mov	r0, #1
  3a16d2:	2128		mov	r1, #40	; 0x28
  3a16d4:	2200		mov	r2, #0
  3a16d6:	f7a7 fd99	bl	0x34920c
  3a16da:	483d		ldr	r0, =0x4c4b40	; via 0x3a17d0
  3a16dc:	f041 fbff	bl	0x3e2ede
  3a16e0:	f041 fc77	bl	0x3e2fd2
  3a16e4:	2001		mov	r0, #1
  3a16e6:	2138		mov	r1, #56	; 0x38
  3a16e8:	2201		mov	r2, #1
  3a16ea:	f7a7 fd8f	bl	0x34920c
  3a16ee:	2001		mov	r0, #1
  3a16f0:	2128		mov	r1, #40	; 0x28
  3a16f2:	f7a7 fdb2	bl	0x34925a
  3a16f6:	4669		mov	r1, sp
  3a16f8:	8008		strh	r0, [r1, #0]
  3a16fa:	4668		mov	r0, sp
  3a16fc:	8800		ldrh	r0, [r0, #0]
  3a16fe:	8861		ldrh	r1, [r4, #2]
  3a1700:	4288		cmp	r0, r1
  3a1702:	db08		blt	0x3a1716
  3a1704:	4668		mov	r0, sp
  3a1706:	8801		ldrh	r1, [r0, #0]
  3a1708:	88a0		ldrh	r0, [r4, #4]
  3a170a:	4281		cmp	r1, r0
  3a170c:	dc03		bgt	0x3a1716
  3a170e:	4828		ldr	r0, =0x1774cd4	; via 0x3a17b0
  3a1710:	68a1		ldr	r1, [r4, #8]
  3a1712:	6001		str	r1, [r0, #0]
  3a1714:	e006		b	0x3a1724
  3a1716:	340c		add	r4, #12	; 0xc
  3a1718:	3d01		sub	r5, #1
  3a171a:	2d00		cmp	r5, #0
  3a171c:	d1c1		bne	0x3a16a2
  3a171e:	4924		ldr	r1, =0x1774cd4	; via 0x3a17b0
  3a1720:	2001		mov	r0, #1
  3a1722:	6008		str	r0, [r1, #0]
  3a1724:	b001		add	sp, #4
  3a1726:	bd30		pop	{r4, r5, pc}

  3a1728:	4821		ldr	r0, =0x1774cd4	; via 0x3a17b0
  3a172a:	6800		ldr	r0, [r0, #0]
  3a172c:	4770		bx	lr
  3a172e:	46c0		nop			(mov r8, r8)

  3b40a6:	488c		ldr	r0, =0x1774db0	; via 0x3b42d8
  3b40a8:	6800		ldr	r0, [r0, #0]
  3b40aa:	4770		bx	lr

$Init_Target:
  3bb7d4:	b570		push	{r4, r5, r6, lr}
  3bb7d6:	b081		sub	sp, #4
  3bb7d8:	4c96		ldr	r4, =0xfffef008	; via 0x3bba34
  3bb7da:	4897		ldr	r0, =0x6050	; via 0x3bba38
  3bb7dc:	8020		strh	r0, [r4, #0]
  3bb7de:	f025 ffed	bl	0x3e17bc	; $TM_DisableWatchdog
  3bb7e2:	4896		ldr	r0, =0xfffffd02	; via 0x3bba3c
  3bb7e4:	2105		mov	r1, #5
  3bb7e6:	8802		ldrh	r2, [r0, #0]
  3bb7e8:	4311		orr	r1, r2
  3bb7ea:	8001		strh	r1, [r0, #0]
  3bb7ec:	4994		ldr	r1, =0xff3f	; via 0x3bba40
  3bb7ee:	8802		ldrh	r2, [r0, #0]
  3bb7f0:	4011		and	r1, r2
  3bb7f2:	8001		strh	r1, [r0, #0]
  3bb7f4:	2180		mov	r1, #128	; 0x80
  3bb7f6:	8802		ldrh	r2, [r0, #0]
  3bb7f8:	4311		orr	r1, r2
  3bb7fa:	8001		strh	r1, [r0, #0]
  3bb7fc:	4991		ldr	r1, =0xffdf	; via 0x3bba44
  3bb7fe:	8802		ldrh	r2, [r0, #0]
  3bb800:	4011		and	r1, r2
  3bb802:	8001		strh	r1, [r0, #0]
  3bb804:	4e90		ldr	r6, =0xfffff900	; via 0x3bba48
  3bb806:	20ff		mov	r0, #255	; 0xff
  3bb808:	0200		lsl	r0, r0, #8
  3bb80a:	8030		strh	r0, [r6, #0]
  3bb80c:	4d8f		ldr	r5, =0xffff9800	; via 0x3bba4c
  3bb80e:	4890		ldr	r0, =0xfff3	; via 0x3bba50
  3bb810:	8829		ldrh	r1, [r5, #0]
  3bb812:	4008		and	r0, r1
  3bb814:	8028		strh	r0, [r5, #0]
  3bb816:	8828		ldrh	r0, [r5, #0]
  3bb818:	8028		strh	r0, [r5, #0]
  3bb81a:	488e		ldr	r0, =0xf01f	; via 0x3bba54
  3bb81c:	8829		ldrh	r1, [r5, #0]
  3bb81e:	4008		and	r0, r1
  3bb820:	8028		strh	r0, [r5, #0]
  3bb822:	2001		mov	r0, #1
  3bb824:	0280		lsl	r0, r0, #10
  3bb826:	8829		ldrh	r1, [r5, #0]
  3bb828:	4308		orr	r0, r1
  3bb82a:	8028		strh	r0, [r5, #0]
  3bb82c:	2000		mov	r0, #0
  3bb82e:	2102		mov	r1, #2
  3bb830:	2200		mov	r2, #0
  3bb832:	f027 fb45	bl	0x3e2ec0	; $CLKM_InitARMClock
  3bb836:	4988		ldr	r1, =0xfffffb00	; via 0x3bba58
  3bb838:	20a4		mov	r0, #164	; 0xa4
  3bb83a:	8008		strh	r0, [r1, #0]
  3bb83c:	8048		strh	r0, [r1, #2]
  3bb83e:	22a5		mov	r2, #165	; 0xa5
  3bb840:	808a		strh	r2, [r1, #4]
  3bb842:	80c8		strh	r0, [r1, #6]
  3bb844:	20a7		mov	r0, #167	; 0xa7
  3bb846:	8148		strh	r0, [r1, #10]	; 0xa
  3bb848:	20c0		mov	r0, #192	; 0xc0
  3bb84a:	8188		strh	r0, [r1, #12]	; 0xc
  3bb84c:	2040		mov	r0, #64	; 0x40
  3bb84e:	8108		strh	r0, [r1, #8]
  3bb850:	2020		mov	r0, #32	; 0x20
  3bb852:	8070		strh	r0, [r6, #2]
  3bb854:	2000		mov	r0, #0
  3bb856:	80b0		strh	r0, [r6, #4]
  3bb858:	2010		mov	r0, #16	; 0x10
  3bb85a:	8829		ldrh	r1, [r5, #0]
  3bb85c:	4308		orr	r0, r1
  3bb85e:	8028		strh	r0, [r5, #0]
  3bb860:	487e		ldr	r0, =0xfffffa08	; via 0x3bba5c
  3bb862:	497f		ldr	r1, =0xffff	; via 0x3bba60
  3bb864:	8001		strh	r1, [r0, #0]
  3bb866:	8041		strh	r1, [r0, #2]
  3bb868:	2103		mov	r1, #3
  3bb86a:	8181		strh	r1, [r0, #12]	; 0xc
  3bb86c:	f024 f9be	bl	0x3dfbec	; $IQ_SetupInterrupts
  3bb870:	487c		ldr	r0, =0xfffffc00	; via 0x3bba64
  3bb872:	2124		mov	r1, #36	; 0x24
  3bb874:	8001		strh	r1, [r0, #0]
  3bb876:	210d		mov	r1, #13	; 0xd
  3bb878:	8041		strh	r1, [r0, #2]
  3bb87a:	2500		mov	r5, #0
  3bb87c:	487a		ldr	r0, =0xfffe2016	; via 0x3bba68
  3bb87e:	8005		strh	r5, [r0, #0]
  3bb880:	497a		ldr	r1, =0xfffe2014	; via 0x3bba6c
  3bb882:	2002		mov	r0, #2
  3bb884:	8008		strh	r0, [r1, #0]
  3bb886:	497a		ldr	r1, =0xfffe2002	; via 0x3bba70
  3bb888:	2084		mov	r0, #132	; 0x84
  3bb88a:	8008		strh	r0, [r1, #0]
  3bb88c:	4979		ldr	r1, =0xfffe2000	; via 0x3bba74
  3bb88e:	487a		ldr	r0, =0x3de0	; via 0x3bba78
  3bb890:	8008		strh	r0, [r1, #0]
  3bb892:	4a7a		ldr	r2, =0xfffe2022	; via 0x3bba7c
  3bb894:	200a		mov	r0, #10	; 0xa
  3bb896:	8010		strh	r0, [r2, #0]	; DIFF!
  3bb898:	4879		ldr	r0, =0xfffe2020	; via 0x3bba80
  3bb89a:	4a7a		ldr	r2, =0x45a	; via 0x3bba84
  3bb89c:	8002		strh	r2, [r0, #0]
  3bb89e:	4a7a		ldr	r2, =0xfffe201e	; via 0x3bba88
  3bb8a0:	20ff		mov	r0, #255	; 0xff
  3bb8a2:	304b		add	r0, #75	; 0x4b
  3bb8a4:	8010		strh	r0, [r2, #0]	; DIFF!
  3bb8a6:	4879		ldr	r0, =0xfffe201c	; via 0x3bba8c
  3bb8a8:	221f		mov	r2, #31	; 0x1f
  3bb8aa:	8002		strh	r2, [r0, #0]
  3bb8ac:	4878		ldr	r0, =0xfffe2024	; via 0x3bba90
  3bb8ae:	8005		strh	r5, [r0, #0]
  3bb8b0:	4a78		ldr	r2, =0xfffe2010	; via 0x3bba94
  3bb8b2:	2002		mov	r0, #2
  3bb8b4:	8813		ldrh	r3, [r2, #0]
  3bb8b6:	4318		orr	r0, r3
  3bb8b8:	8010		strh	r0, [r2, #0]
  3bb8ba:	2004		mov	r0, #4
  3bb8bc:	8813		ldrh	r3, [r2, #0]
  3bb8be:	4318		orr	r0, r3
  3bb8c0:	8010		strh	r0, [r2, #0]
  3bb8c2:	2027		mov	r0, #39	; 0x27
  3bb8c4:	80a0		strh	r0, [r4, #4]
  3bb8c6:	8a08		ldrh	r0, [r1, #16]	; 0x10
  3bb8c8:	0840		lsr	r0, r0, #1
  3bb8ca:	d30f		bcc	0x3bb8ec
  3bb8cc:	8a08		ldrh	r0, [r1, #16]	; 0x10
  3bb8ce:	0400		lsl	r0, r0, #16
  3bb8d0:	0c40		lsr	r0, r0, #17
  3bb8d2:	0040		lsl	r0, r0, #1
  3bb8d4:	8208		strh	r0, [r1, #16]	; 0x10
  3bb8d6:	2001		mov	r0, #1
  3bb8d8:	e001		b	0x3bb8de
  3bb8da:	9800		ldr	r0, [sp, #0]
  3bb8dc:	3001		add	r0, #1
  3bb8de:	9000		str	r0, [sp, #0]
  3bb8e0:	9800		ldr	r0, [sp, #0]
  3bb8e2:	2832		cmp	r0, #50	; 0x32
  3bb8e4:	d3f9		bcc	0x3bb8da
  3bb8e6:	8a48		ldrh	r0, [r1, #18]	; 0x12
  3bb8e8:	2800		cmp	r0, #0
  3bb8ea:	d0fc		beq	0x3bb8e6
  3bb8ec:	f027 fbcd	bl	0x3e308a	; $AI_ClockEnable
  3bb8f0:	f027 fbd1	bl	0x3e3096	; $AI_InitIOConfig
  3bb8f4:	2027		mov	r0, #39	; 0x27
  3bb8f6:	0500		lsl	r0, r0, #20
  3bb8f8:	8005		strh	r5, [r0, #0]
  3bb8fa:	2001		mov	r0, #1
  3bb8fc:	f025 ff6c	bl	0x3e17d8	; $TM_EnableTimer
  3bb900:	2002		mov	r0, #2
  3bb902:	f025 ff69	bl	0x3e17d8	; $TM_EnableTimer
  3bb906:	b001		add	sp, #4
  3bb908:	bd70		pop	{r4, r5, r6, pc}

; The following code is a different version of Init_Target(),
; but does not seem to be used, probably defunct but still-compiled
; code in init.c in between the functional Init_Target() and the
; normally-following Init_Drivers().

  3bb90a:	b570		push	{r4, r5, r6, lr}
  3bb90c:	4d49		ldr	r5, =0xfffef008	; via 0x3bba34
  3bb90e:	4862		ldr	r0, =0x6040	; via 0x3bba98
  3bb910:	8028		strh	r0, [r5, #0]
  3bb912:	f025 ff53	bl	0x3e17bc	; $TM_DisableWatchdog
  3bb916:	4849		ldr	r0, =0xfffffd02	; via 0x3bba3c
  3bb918:	2105		mov	r1, #5
  3bb91a:	8802		ldrh	r2, [r0, #0]
  3bb91c:	4311		orr	r1, r2
  3bb91e:	8001		strh	r1, [r0, #0]
  3bb920:	4947		ldr	r1, =0xff3f	; via 0x3bba40
  3bb922:	8802		ldrh	r2, [r0, #0]
  3bb924:	4011		and	r1, r2
  3bb926:	8001		strh	r1, [r0, #0]
  3bb928:	2180		mov	r1, #128	; 0x80
  3bb92a:	8802		ldrh	r2, [r0, #0]
  3bb92c:	4311		orr	r1, r2
  3bb92e:	8001		strh	r1, [r0, #0]
  3bb930:	4e45		ldr	r6, =0xfffff900	; via 0x3bba48
  3bb932:	20ff		mov	r0, #255	; 0xff
  3bb934:	0200		lsl	r0, r0, #8
  3bb936:	8030		strh	r0, [r6, #0]
  3bb938:	4c44		ldr	r4, =0xffff9800	; via 0x3bba4c
  3bb93a:	4845		ldr	r0, =0xfff3	; via 0x3bba50
  3bb93c:	8821		ldrh	r1, [r4, #0]
  3bb93e:	4008		and	r0, r1
  3bb940:	8020		strh	r0, [r4, #0]
  3bb942:	8820		ldrh	r0, [r4, #0]
  3bb944:	8020		strh	r0, [r4, #0]
  3bb946:	4843		ldr	r0, =0xf01f	; via 0x3bba54
  3bb948:	8821		ldrh	r1, [r4, #0]
  3bb94a:	4008		and	r0, r1
  3bb94c:	8020		strh	r0, [r4, #0]
  3bb94e:	2001		mov	r0, #1
  3bb950:	0280		lsl	r0, r0, #10
  3bb952:	8821		ldrh	r1, [r4, #0]
  3bb954:	4308		orr	r0, r1
  3bb956:	8020		strh	r0, [r4, #0]
  3bb958:	2000		mov	r0, #0
  3bb95a:	2102		mov	r1, #2
  3bb95c:	2200		mov	r2, #0
  3bb95e:	f027 faaf	bl	0x3e2ec0	; $CLKM_InitARMClock
  3bb962:	4a3d		ldr	r2, =0xfffffb00	; via 0x3bba58
  3bb964:	20a4		mov	r0, #164	; 0xa4
  3bb966:	8010		strh	r0, [r2, #0]
  3bb968:	8050		strh	r0, [r2, #2]
  3bb96a:	2185		mov	r1, #133	; 0x85
  3bb96c:	8091		strh	r1, [r2, #4]
  3bb96e:	80d0		strh	r0, [r2, #6]
  3bb970:	20a7		mov	r0, #167	; 0xa7
  3bb972:	8150		strh	r0, [r2, #10]	; 0xa
  3bb974:	20c0		mov	r0, #192	; 0xc0
  3bb976:	8190		strh	r0, [r2, #12]	; 0xc
  3bb978:	2040		mov	r0, #64	; 0x40
  3bb97a:	8110		strh	r0, [r2, #8]
  3bb97c:	2020		mov	r0, #32	; 0x20
  3bb97e:	8070		strh	r0, [r6, #2]
  3bb980:	2000		mov	r0, #0
  3bb982:	80b0		strh	r0, [r6, #4]
  3bb984:	2010		mov	r0, #16	; 0x10
  3bb986:	8821		ldrh	r1, [r4, #0]
  3bb988:	4308		orr	r0, r1
  3bb98a:	8020		strh	r0, [r4, #0]
  3bb98c:	f027 fb76	bl	0x3e307c
  3bb990:	2001		mov	r0, #1
  3bb992:	f027 fb50	bl	0x3e3036
  3bb996:	4841		ldr	r0, =0xfffd	; via 0x3bba9c
  3bb998:	8829		ldrh	r1, [r5, #0]
  3bb99a:	4008		and	r0, r1
  3bb99c:	8028		strh	r0, [r5, #0]
  3bb99e:	2001		mov	r0, #1
  3bb9a0:	f027 fb50	bl	0x3e3044
  3bb9a4:	2004		mov	r0, #4
  3bb9a6:	f027 fb46	bl	0x3e3036
  3bb9aa:	2000		mov	r0, #0
  3bb9ac:	f027 fb2e	bl	0x3e300c
  3bb9b0:	2004		mov	r0, #4
  3bb9b2:	f027 fb47	bl	0x3e3044
  3bb9b6:	2007		mov	r0, #7
  3bb9b8:	f027 fb36	bl	0x3e3028
  3bb9bc:	2003		mov	r0, #3
  3bb9be:	f027 fb25	bl	0x3e300c
  3bb9c2:	2007		mov	r0, #7
  3bb9c4:	f027 fb3e	bl	0x3e3044
  3bb9c8:	bd70		pop	{r4, r5, r6, pc}

$Init_Drivers:
  3bb9ca:	b500		push	{lr}
  3bb9cc:	f78d fc0f	bl	0x3491ee	; $ABB_Sem_Create
  3bb9d0:	f5a6 fa25	bl	0x161e1e
  3bb9d4:	f7ad fda3	bl	0x36951e
  3bb9d8:	f039 fb95	bl	0x3f5106
  3bb9dc:	f6f5 f927	bl	0x2b0c2e
  3bb9e0:	f720 fb16	bl	0x2dc010
  3bb9e4:	f7bc fa46	bl	0x377e74
  3bb9e8:	f6ca fcfa	bl	0x2863e0
  3bb9ec:	f001 fd3b	bl	0x3bd466
  3bb9f0:	bd00		pop	{pc}

$Init_Serial_Flows:
  3bb9f2:	b500		push	{lr}
  3bb9f4:	482a		ldr	r0, =0x1773764	; via 0x3bbaa0
  3bb9f6:	f793 fb8f	bl	0x34f118	; $SER_InitSerialConfig
  3bb9fa:	2000		mov	r0, #0
  3bb9fc:	2103		mov	r1, #3
  3bb9fe:	2200		mov	r2, #0
  3bba00:	f793 fc2b	bl	0x34f25a	; $SER_tr_Init
  3bba04:	f793 fc85	bl	0x34f312	; $SER_fd_Initialize
  3bba08:	bd00		pop	{pc}

$Init_Unmask_IT:
  3bba0a:	b500		push	{lr}
  3bba0c:	f484 fc59	bl	0x402c2		; $INT_DisableIRQ
  3bba10:	2004		mov	r0, #4
  3bba12:	f024 f94c	bl	0x3dfcae	; $IQ_Unmask
  3bba16:	2012		mov	r0, #18	; 0x12
  3bba18:	f024 f949	bl	0x3dfcae	; $IQ_Unmask
  3bba1c:	2007		mov	r0, #7
  3bba1e:	f024 f946	bl	0x3dfcae	; $IQ_Unmask
  3bba22:	2008		mov	r0, #8
  3bba24:	f024 f943	bl	0x3dfcae	; $IQ_Unmask
  3bba28:	200f		mov	r0, #15	; 0xf
  3bba2a:	f024 f940	bl	0x3dfcae	; $IQ_Unmask
  3bba2e:	f484 fc2d	bl	0x4028c		; $INT_EnableIRQ
  3bba32:	bd00		pop	{pc}

$spi_get_info:
; perfect match to TCS211 version
  3cd72c:	b500		push	{lr}
  3cd72e:	b081		sub	sp, #4
  3cd730:	9000		str	r0, [sp, #0]
  3cd732:	9900		ldr	r1, [sp, #0]
  3cd734:	2003		mov	r0, #3
  3cd736:	6008		str	r0, [r1, #0]
  3cd738:	9800		ldr	r0, [sp, #0]
  3cd73a:	497e		ldr	r1, =0xa0010	; via 0x3cd934
  3cd73c:	6101		str	r1, [r0, #16]	; 0x10
  3cd73e:	9800		ldr	r0, [sp, #0]
  3cd740:	3004		add	r0, #4
  3cd742:	a153		add	r1, pc, #332	; 0x14c
  3cd744:	2204		mov	r2, #4
  3cd746:	f029 fd79	bl	0x3f723c	; memcpy()
  3cd74a:	9900		ldr	r1, [sp, #0]
  3cd74c:	207d		mov	r0, #125	; 0x7d
  3cd74e:	00c0		lsl	r0, r0, #3
  3cd750:	8288		strh	r0, [r1, #20]	; 0x14
  3cd752:	9900		ldr	r1, [sp, #0]
  3cd754:	2027		mov	r0, #39	; 0x27
  3cd756:	7588		strb	r0, [r1, #22]	; 0x16
  3cd758:	9900		ldr	r1, [sp, #0]
  3cd75a:	2001		mov	r0, #1
  3cd75c:	7708		strb	r0, [r1, #28]	; 0x1c
  3cd75e:	9800		ldr	r0, [sp, #0]
  3cd760:	3020		add	r0, #32	; 0x20
  3cd762:	a14c		add	r1, pc, #304	; 0x130
  3cd764:	2209		mov	r2, #9
  3cd766:	f029 fd69	bl	0x3f723c	; memcpy()
  3cd76a:	9900		ldr	r1, [sp, #0]
  3cd76c:	20ff		mov	r0, #255	; 0xff
  3cd76e:	3001		add	r0, #1
  3cd770:	62c8		str	r0, [r1, #44]	; 0x2c
  3cd772:	9900		ldr	r1, [sp, #0]
  3cd774:	20c8		mov	r0, #200	; 0xc8
  3cd776:	6308		str	r0, [r1, #48]	; 0x30
  3cd778:	205c		mov	r0, #92	; 0x5c
  3cd77a:	9900		ldr	r1, [sp, #0]
  3cd77c:	2200		mov	r2, #0
  3cd77e:	5442		strb	r2, [r0, r1]
; spi_set_info
  3cd780:	2090		mov	r0, #144	; 0x90
  3cd782:	9900		ldr	r1, [sp, #0]
  3cd784:	4a6c		ldr	r2, =0x3cd7bd	; via 0x3cd938
  3cd786:	5042		str	r2, [r0, r1]
; spi_init
  3cd788:	2094		mov	r0, #148	; 0x94
  3cd78a:	9900		ldr	r1, [sp, #0]
  3cd78c:	4a6b		ldr	r2, =0x3cd883	; via 0x3cd93c
  3cd78e:	5042		str	r2, [r0, r1]
; spi_core
  3cd790:	2098		mov	r0, #152	; 0x98
  3cd792:	9900		ldr	r1, [sp, #0]
  3cd794:	4a6a		ldr	r2, =0x3e8ca1	; via 0x3cd940
  3cd796:	5042		str	r2, [r0, r1]
; spi_stop
  3cd798:	209c		mov	r0, #156	; 0x9c
  3cd79a:	9900		ldr	r1, [sp, #0]
  3cd79c:	4a69		ldr	r2, =0x3cd887	; via 0x3cd944
  3cd79e:	5042		str	r2, [r0, r1]
; spi_kill
  3cd7a0:	20a0		mov	r0, #160	; 0xa0
  3cd7a2:	9900		ldr	r1, [sp, #0]
  3cd7a4:	4a68		ldr	r2, =0x3cd88b	; via 0x3cd948
  3cd7a6:	5042		str	r2, [r0, r1]
  3cd7a8:	208c		mov	r0, #140	; 0x8c
  3cd7aa:	9900		ldr	r1, [sp, #0]
  3cd7ac:	2200		mov	r2, #0
  3cd7ae:	5042		str	r2, [r0, r1]
  3cd7b0:	2188		mov	r1, #136	; 0x88
  3cd7b2:	9a00		ldr	r2, [sp, #0]
  3cd7b4:	2000		mov	r0, #0
  3cd7b6:	5488		strb	r0, [r1, r2]
  3cd7b8:	b001		add	sp, #4
  3cd7ba:	bd00		pop	{pc}

T_SPI_GBL_INFO structure:

0x00:	prim_id like in TCS211
0x02:	addr_id (ditto)
0x04:	adc_result[8] array (ditto)
0x14:	array of 6 16-bit words storing consecutive VBAT ADC readings
0x2E:	16-bit var write pointer for the array at offset 0x14
0x32:	assumed is_gsm_on
0x33:	assumed is_adc_on
0x34:	assumed SpiTaskReady

$spi_set_info:
  3cd7bc:	b500		push	{lr}
  3cd7be:	b088		sub	sp, #32	; 0x20
  3cd7c0:	9305		str	r3, [sp, #20]	; 0x14
  3cd7c2:	9204		str	r2, [sp, #16]	; 0x10
  3cd7c4:	9103		str	r1, [sp, #12]	; 0xc
  3cd7c6:	4669		mov	r1, sp
  3cd7c8:	7208		strb	r0, [r1, #8]
  3cd7ca:	485a		ldr	r0, =0xa0010	; via 0x3cd934
  3cd7cc:	9000		str	r0, [sp, #0]
  3cd7ce:	a034		add	r0, pc, #208	; 0xd0
  3cd7d0:	213e		mov	r1, #62	; 0x3e
  3cd7d2:	2200		mov	r2, #0
  3cd7d4:	43d2		mvn	r2, r2
  3cd7d6:	2305		mov	r3, #5
  3cd7d8:	f00d fa2c	bl	0x3dac34	; rvf_send_trace()
  3cd7dc:	9804		ldr	r0, [sp, #16]	; 0x10
  3cd7de:	8800		ldrh	r0, [r0, #0]
; struct allocation size differs from TCS211
  3cd7e0:	2138		mov	r1, #56	; 0x38
  3cd7e2:	4a5a		ldr	r2, =0x1774e38	; via 0x3cd94c
  3cd7e4:	f5f7 f8f0	bl	0x1c49c8	; rvf_get_buf()
  3cd7e8:	9006		str	r0, [sp, #24]	; 0x18
  3cd7ea:	9806		ldr	r0, [sp, #24]	; 0x18
  3cd7ec:	2802		cmp	r0, #2
  3cd7ee:	d10b		bne	0x3cd808
  3cd7f0:	4850		ldr	r0, =0xa0010	; via 0x3cd934
  3cd7f2:	9000		str	r0, [sp, #0]
  3cd7f4:	a03a		add	r0, pc, #232	; 0xe8
  3cd7f6:	2150		mov	r1, #80	; 0x50
  3cd7f8:	2200		mov	r2, #0
  3cd7fa:	43d2		mvn	r2, r2
  3cd7fc:	2301		mov	r3, #1
  3cd7fe:	f00d fa19	bl	0x3dac34	; rvf_send_trace()
  3cd802:	2004		mov	r0, #4
  3cd804:	43c0		mvn	r0, r0
  3cd806:	e03a		b	0x3cd87e
  3cd808:	4951		ldr	r1, =0x1774e3c	; via 0x3cd950
  3cd80a:	9805		ldr	r0, [sp, #20]	; 0x14
  3cd80c:	6008		str	r0, [r1, #0]
  3cd80e:	484f		ldr	r0, =0x1774e38	; via 0x3cd94c
  3cd810:	6801		ldr	r1, [r0, #0]
  3cd812:	9804		ldr	r0, [sp, #16]	; 0x10
  3cd814:	8800		ldrh	r0, [r0, #0]
  3cd816:	8008		strh	r0, [r1, #0]
  3cd818:	484c		ldr	r0, =0x1774e38	; via 0x3cd94c
  3cd81a:	6801		ldr	r1, [r0, #0]
  3cd81c:	4668		mov	r0, sp
  3cd81e:	7a00		ldrb	r0, [r0, #8]
  3cd820:	7088		strb	r0, [r1, #2]
  3cd822:	4669		mov	r1, sp
  3cd824:	2000		mov	r0, #0
  3cd826:	8388		strh	r0, [r1, #28]	; 0x1c
  3cd828:	4668		mov	r0, sp
  3cd82a:	8b80		ldrh	r0, [r0, #28]	; 0x1c
  3cd82c:	2808		cmp	r0, #8
  3cd82e:	da10		bge	0x3cd852
  3cd830:	4668		mov	r0, sp
  3cd832:	8b80		ldrh	r0, [r0, #28]	; 0x1c
  3cd834:	0040		lsl	r0, r0, #1
  3cd836:	4945		ldr	r1, =0x1774e38	; via 0x3cd94c
  3cd838:	6809		ldr	r1, [r1, #0]
  3cd83a:	1840		add	r0, r0, r1
  3cd83c:	2100		mov	r1, #0
  3cd83e:	8081		strh	r1, [r0, #4]
  3cd840:	4669		mov	r1, sp
  3cd842:	4668		mov	r0, sp
  3cd844:	8b80		ldrh	r0, [r0, #28]	; 0x1c
  3cd846:	3001		add	r0, #1
  3cd848:	8388		strh	r0, [r1, #28]	; 0x1c
  3cd84a:	4668		mov	r0, sp
  3cd84c:	8b80		ldrh	r0, [r0, #28]	; 0x1c
  3cd84e:	2808		cmp	r0, #8
  3cd850:	dbee		blt	0x3cd830
; the following 3 half-word writes do not correspond to TI's original version
; they must be Pirelli/Foxconn's additions
  3cd852:	483e		ldr	r0, =0x1774e38	; via 0x3cd94c
  3cd854:	6800		ldr	r0, [r0, #0]
  3cd856:	2100		mov	r1, #0
  3cd858:	85c1		strh	r1, [r0, #46]	; 0x2e
  3cd85a:	483c		ldr	r0, =0x1774e38	; via 0x3cd94c
  3cd85c:	6801		ldr	r1, [r0, #0]
  3cd85e:	2000		mov	r0, #0
  3cd860:	8608		strh	r0, [r1, #48]	; 0x30
  3cd862:	483a		ldr	r0, =0x1774e38	; via 0x3cd94c
  3cd864:	6801		ldr	r1, [r0, #0]
  3cd866:	2000		mov	r0, #0
  3cd868:	8588		strh	r0, [r1, #44]	; 0x2c
; the following two byte writes probably correspond to the clearing
; of is_gsm_on and SpiTaskReady members in TI's original version
  3cd86a:	2232		mov	r2, #50	; 0x32
  3cd86c:	4837		ldr	r0, =0x1774e38	; via 0x3cd94c
  3cd86e:	6800		ldr	r0, [r0, #0]
  3cd870:	2100		mov	r1, #0
  3cd872:	5411		strb	r1, [r2, r0]
  3cd874:	2134		mov	r1, #52	; 0x34
  3cd876:	4835		ldr	r0, =0x1774e38	; via 0x3cd94c
  3cd878:	6802		ldr	r2, [r0, #0]
  3cd87a:	2000		mov	r0, #0
  3cd87c:	5488		strb	r0, [r1, r2]
  3cd87e:	b008		add	sp, #32	; 0x20
  3cd880:	bd00		pop	{pc}

$spi_init:
  3cd882:	2000		mov	r0, #0
  3cd884:	4770		bx	lr

$spi_stop:
  3cd886:	2000		mov	r0, #0
  3cd888:	4770		bx	lr

$spi_kill:
  3cd88a:	2000		mov	r0, #0
  3cd88c:	4770		bx	lr
  3cd88e:	46c0		nop			(mov r8, r8)

$pwr_get_info:
; perfect match to TI's original
  3cd954:	b530		push	{r4, r5, lr}
  3cd956:	1c04		add	r4, r0, #0
  3cd958:	2000		mov	r0, #0
  3cd95a:	6020		str	r0, [r4, #0]
  3cd95c:	487a		ldr	r0, =0xa0020	; via 0x3cdb48
  3cd95e:	6120		str	r0, [r4, #16]	; 0x10
  3cd960:	2004		mov	r0, #4
  3cd962:	1900		add	r0, r0, r4
  3cd964:	a14f		add	r1, pc, #316	; 0x13c
  3cd966:	2204		mov	r2, #4
  3cd968:	f029 fc68	bl	0x3f723c	; memcpy()
  3cd96c:	2188		mov	r1, #136	; 0x88
  3cd96e:	2000		mov	r0, #0
  3cd970:	5108		str	r0, [r1, r4]
  3cd972:	2084		mov	r0, #132	; 0x84
  3cd974:	2100		mov	r1, #0
  3cd976:	5501		strb	r1, [r0, r4]
  3cd978:	2501		mov	r5, #1
  3cd97a:	7625		strb	r5, [r4, #24]	; 0x18
  3cd97c:	201c		mov	r0, #28	; 0x1c
  3cd97e:	1900		add	r0, r0, r4
  3cd980:	a149		add	r1, pc, #292	; 0x124
  3cd982:	2209		mov	r2, #9
  3cd984:	f029 fc5a	bl	0x3f723c	; memcpy()
  3cd988:	207d		mov	r0, #125	; 0x7d
  3cd98a:	00c0		lsl	r0, r0, #3
  3cd98c:	62a0		str	r0, [r4, #40]	; 0x28
  3cd98e:	2019		mov	r0, #25	; 0x19
  3cd990:	0140		lsl	r0, r0, #5
  3cd992:	62e0		str	r0, [r4, #44]	; 0x2c
  3cd994:	2058		mov	r0, #88	; 0x58
  3cd996:	5505		strb	r5, [r0, r4]
  3cd998:	486c		ldr	r0, =0xa0010	; via 0x3cdb4c
  3cd99a:	65e0		str	r0, [r4, #92]	; 0x5c
  3cd99c:	208c		mov	r0, #140	; 0x8c
  3cd99e:	496c		ldr	r1, =0x3cd9bf	; via 0x3cdb50
  3cd9a0:	5101		str	r1, [r0, r4]
  3cd9a2:	2090		mov	r0, #144	; 0x90
  3cd9a4:	496b		ldr	r1, =0x3cda8b	; via 0x3cdb54
  3cd9a6:	5101		str	r1, [r0, r4]
  3cd9a8:	2094		mov	r0, #148	; 0x94
  3cd9aa:	496b		ldr	r1, =0x3cda8f	; via 0x3cdb58
  3cd9ac:	5101		str	r1, [r0, r4]
  3cd9ae:	2098		mov	r0, #152	; 0x98
  3cd9b0:	496a		ldr	r1, =0x3cda93	; via 0x3cdb5c
  3cd9b2:	5101		str	r1, [r0, r4]
  3cd9b4:	219c		mov	r1, #156	; 0x9c
  3cd9b6:	486a		ldr	r0, =0x3cda97	; via 0x3cdb60
  3cd9b8:	5108		str	r0, [r1, r4]
  3cd9ba:	2000		mov	r0, #0
  3cd9bc:	bd30		pop	{r4, r5, pc}

$pwr_set_info:
  3cd9be:	b570		push	{r4, r5, r6, lr}
  3cd9c0:	b082		sub	sp, #8
  3cd9c2:	1c1d		add	r5, r3, #0
  3cd9c4:	1c14		add	r4, r2, #0
  3cd9c6:	4860		ldr	r0, =0xa0020	; via 0x3cdb48
  3cd9c8:	9000		str	r0, [sp, #0]
  3cd9ca:	a03a		add	r0, pc, #232	; 0xe8
  3cd9cc:	213c		mov	r1, #60	; 0x3c
  3cd9ce:	2200		mov	r2, #0
  3cd9d0:	43d2		mvn	r2, r2
  3cd9d2:	2303		mov	r3, #3
  3cd9d4:	f00d f92e	bl	0x3dac34
  3cd9d8:	8820		ldrh	r0, [r4, #0]
; struct allocation size differs from original
  3cd9da:	214c		mov	r1, #76	; 0x4c
  3cd9dc:	4a61		ldr	r2, =0x1774e70	; via 0x3cdb64
  3cd9de:	f5f6 fff3	bl	0x1c49c8
  3cd9e2:	2802		cmp	r0, #2
  3cd9e4:	d10b		bne	0x3cd9fe
  3cd9e6:	4858		ldr	r0, =0xa0020	; via 0x3cdb48
  3cd9e8:	9000		str	r0, [sp, #0]
  3cd9ea:	a042		add	r0, pc, #264	; 0x108
  3cd9ec:	2156		mov	r1, #86	; 0x56
  3cd9ee:	2200		mov	r2, #0
  3cd9f0:	43d2		mvn	r2, r2
  3cd9f2:	2301		mov	r3, #1
  3cd9f4:	f00d f91e	bl	0x3dac34
  3cd9f8:	2004		mov	r0, #4
  3cd9fa:	43c0		mvn	r0, r0
  3cd9fc:	e043		b	0x3cda86
  3cd9fe:	485a		ldr	r0, =0x1774e74	; via 0x3cdb68
  3cda00:	6005		str	r5, [r0, #0]
  3cda02:	4b58		ldr	r3, =0x1774e70	; via 0x3cdb64
  3cda04:	6819		ldr	r1, [r3, #0]
  3cda06:	4859		ldr	r0, =0x1774e38	; via 0x3cdb6c
  3cda08:	6800		ldr	r0, [r0, #0]
  3cda0a:	7880		ldrb	r0, [r0, #2]
  3cda0c:	7088		strb	r0, [r1, #2]
  3cda0e:	6818		ldr	r0, [r3, #0]
  3cda10:	8821		ldrh	r1, [r4, #0]
  3cda12:	8001		strh	r1, [r0, #0]
  3cda14:	2200		mov	r2, #0
  3cda16:	6818		ldr	r0, [r3, #0]
  3cda18:	6042		str	r2, [r0, #4]
  3cda1a:	6819		ldr	r1, [r3, #0]
; end of charge current
  3cda1c:	207a		mov	r0, #122	; 0x7a
  3cda1e:	8148		strh	r0, [r1, #10]	; 0xa
; pwr_env_ctrl_blk->max_voltage_code is set to:
; (0x426800 - adccal_b*1024) / adccal_a
;  0x426800 >> 10 = 0x109A = 4250
  3cda20:	4c53		ldr	r4, =0x426800	; via 0x3cdb70
  3cda22:	4954		ldr	r1, =0x801746	; via 0x3cdb74
  3cda24:	2000		mov	r0, #0
  3cda26:	5e08		ldrsh	r0, [r1, r0]
  3cda28:	0280		lsl	r0, r0, #10
  3cda2a:	1a20		sub	r0, r4, r0
  3cda2c:	4952		ldr	r1, =0x801734	; via 0x3cdb78
  3cda2e:	8809		ldrh	r1, [r1, #0]
  3cda30:	f029 fbe4	bl	0x3f71fc	; U$DIV
; MV100-matching logic continues
  3cda34:	6818		ldr	r0, [r3, #0]
  3cda36:	8181		strh	r1, [r0, #12]	; 0xc
  3cda38:	0610		lsl	r0, r2, #24
  3cda3a:	0e01		lsr	r1, r0, #24
  3cda3c:	6818		ldr	r0, [r3, #0]
  3cda3e:	7401		strb	r1, [r0, #16]	; 0x10
  3cda40:	24ff		mov	r4, #255	; 0xff
  3cda42:	6818		ldr	r0, [r3, #0]
  3cda44:	7504		strb	r4, [r0, #20]	; 0x14
  3cda46:	2000		mov	r0, #0
  3cda48:	681d		ldr	r5, [r3, #0]
  3cda4a:	61a8		str	r0, [r5, #24]	; 0x18
  3cda4c:	681e		ldr	r6, [r3, #0]
  3cda4e:	2505		mov	r5, #5
  3cda50:	7735		strb	r5, [r6, #28]	; 0x1c
  3cda52:	2620		mov	r6, #32	; 0x20
  3cda54:	681d		ldr	r5, [r3, #0]
  3cda56:	5574		strb	r4, [r6, r5]
  3cda58:	681d		ldr	r5, [r3, #0]
  3cda5a:	6268		str	r0, [r5, #36]	; 0x24
  3cda5c:	2628		mov	r6, #40	; 0x28
  3cda5e:	681d		ldr	r5, [r3, #0]
  3cda60:	5574		strb	r4, [r6, r5]
  3cda62:	681c		ldr	r4, [r3, #0]
  3cda64:	62e0		str	r0, [r4, #44]	; 0x2c
  3cda66:	6818		ldr	r0, [r3, #0]
  3cda68:	8702		strh	r2, [r0, #56]	; 0x38
  3cda6a:	2001		mov	r0, #1
  3cda6c:	681c		ldr	r4, [r3, #0]
  3cda6e:	6320		str	r0, [r4, #48]	; 0x30
; new since original: pwr_env_ctrl_blk->i2v_madc_offset = 0
  3cda70:	681c		ldr	r4, [r3, #0]
  3cda72:	8122		strh	r2, [r4, #8]
; new stuff:
; halfword at 0x40 = 1
; word     at 0x44 = 0
; byte     at 0x48 = 0
  3cda74:	2540		mov	r5, #64	; 0x40
  3cda76:	681c		ldr	r4, [r3, #0]
  3cda78:	5328		strh	r0, [r5, r4]
  3cda7a:	6818		ldr	r0, [r3, #0]
  3cda7c:	6442		str	r2, [r0, #68]	; 0x44
  3cda7e:	2248		mov	r2, #72	; 0x48
  3cda80:	6818		ldr	r0, [r3, #0]
  3cda82:	5411		strb	r1, [r2, r0]
  3cda84:	2000		mov	r0, #0
  3cda86:	b002		add	sp, #8
  3cda88:	bd70		pop	{r4, r5, r6, pc}

$pwr_init:
  3cda8a:	2000		mov	r0, #0
  3cda8c:	4770		bx	lr

$pwr_start:
  3cda8e:	2000		mov	r0, #0
  3cda90:	4770		bx	lr

$pwr_stop:
  3cda92:	2000		mov	r0, #0
  3cda94:	4770		bx	lr

$pwr_kill:
  3cda96:	b500		push	{lr}
  3cda98:	4832		ldr	r0, =0x1774e70	; via 0x3cdb64
  3cda9a:	6800		ldr	r0, [r0, #0]
  3cda9c:	f5f7 f92c	bl	0x1c4cf8
  3cdaa0:	2000		mov	r0, #0
  3cdaa2:	bd00		pop	{pc}

; function called from the ADC end handler
  3cfef6:	b510		push	{r4, lr}
  3cfef8:	2400		mov	r4, #0
  3cfefa:	2105		mov	r1, #5
  3cfefc:	1a40		sub	r0, r0, r1
  3cfefe:	2800		cmp	r0, #0
  3cff00:	d008		beq	0x3cff14
  3cff02:	3803		sub	r0, #3
  3cff04:	2800		cmp	r0, #0
  3cff06:	d10b		bne	0x3cff20
  3cff08:	200d		mov	r0, #13	; 0xd
  3cff0a:	f013 f8a9	bl	0x3e3060	; $AI_ReadBit
  3cff0e:	2801		cmp	r0, #1
  3cff10:	d005		beq	0x3cff1e
  3cff12:	e005		b	0x3cff20
  3cff14:	2006		mov	r0, #6
  3cff16:	f013 f8a3	bl	0x3e3060	; $AI_ReadBit
  3cff1a:	2801		cmp	r0, #1
  3cff1c:	d100		bne	0x3cff20
  3cff1e:	2401		mov	r4, #1
  3cff20:	1c20		add	r0, r4, #0
  3cff22:	bd10		pop	{r4, pc}

$Create_ABB_HISR:
  3dc928:	b500		push	{lr}
  3dc92a:	b083		sub	sp, #12	; 0xc
  3dc92c:	485d		ldr	r0, =0x1764a10	; via 0x3dcaa4
  3dc92e:	21fe		mov	r1, #254	; 0xfe
  3dc930:	2201		mov	r2, #1
  3dc932:	0252		lsl	r2, r2, #9
  3dc934:	f01b fc12	bl	0x3f815c	; memset()
  3dc938:	485a		ldr	r0, =0x1764a10	; via 0x3dcaa4
  3dc93a:	9000		str	r0, [sp, #0]
  3dc93c:	2001		mov	r0, #1
  3dc93e:	0240		lsl	r0, r0, #9
  3dc940:	9001		str	r0, [sp, #4]
  3dc942:	4859		ldr	r0, =0x17649b8	; via 0x3dcaa8
  3dc944:	a127		add	r1, pc, #156	; 0x9c
  3dc946:	4a59		ldr	r2, =0x3dc967	; via 0x3dcaac
  3dc948:	2302		mov	r3, #2
  3dc94a:	f01c ff3f	bl	0x3f97cc	; $TCCE_Create_HISR
  3dc94e:	b003		add	sp, #12	; 0xc
  3dc950:	bd00		pop	{pc}

$Activate_ABB_HISR:
  3dc952:	b500		push	{lr}
  3dc954:	4854		ldr	r0, =0x17649b8	; via 0x3dcaa8
  3dc956:	f01c ff41	bl	0x3f97dc	; $TCCE_Activate_HISR
  3dc95a:	2800		cmp	r0, #0
  3dc95c:	d001		beq	0x3dc962
  3dc95e:	2001		mov	r0, #1
  3dc960:	bd00		pop	{pc}
  3dc962:	2000		mov	r0, #0
  3dc964:	bd00		pop	{pc}

$EXT_HisrEntry:
  3dc966:	b500		push	{lr}
  3dc968:	b083		sub	sp, #12	; 0xc
  3dc96a:	4851		ldr	r0, =0x1774e38	; via 0x3dcab0
  3dc96c:	6800		ldr	r0, [r0, #0]
  3dc96e:	2800		cmp	r0, #0
  3dc970:	d02a		beq	0x3dc9c8
  3dc972:	2134		mov	r1, #52	; 0x34
  3dc974:	484e		ldr	r0, =0x1774e38	; via 0x3dcab0
  3dc976:	6800		ldr	r0, [r0, #0]
  3dc978:	5c08		ldrb	r0, [r1, r0]
  3dc97a:	2800		cmp	r0, #0
  3dc97c:	d01f		beq	0x3dc9be
  3dc97e:	484c		ldr	r0, =0x1774e38	; via 0x3dcab0
  3dc980:	6800		ldr	r0, [r0, #0]
  3dc982:	8800		ldrh	r0, [r0, #0]
  3dc984:	210c		mov	r1, #12	; 0xc
  3dc986:	aa02		add	r2, sp, #8
  3dc988:	f5e8 f81e	bl	0x1c49c8	; rvf_get_buf()
  3dc98c:	2802		cmp	r0, #2
  3dc98e:	d104		bne	0x3dc99a
  3dc990:	4848		ldr	r0, =0xa0010	; via 0x3dcab4
  3dc992:	9000		str	r0, [sp, #0]
  3dc994:	a016		add	r0, pc, #88	; 0x58
  3dc996:	2142		mov	r1, #66	; 0x42
  3dc998:	e01a		b	0x3dc9d0
  3dc99a:	9902		ldr	r1, [sp, #8]
  3dc99c:	2005		mov	r0, #5
  3dc99e:	6008		str	r0, [r1, #0]
  3dc9a0:	9902		ldr	r1, [sp, #8]
  3dc9a2:	4843		ldr	r0, =0x1774e38	; via 0x3dcab0
  3dc9a4:	6800		ldr	r0, [r0, #0]
  3dc9a6:	7880		ldrb	r0, [r0, #2]
  3dc9a8:	7248		strb	r0, [r1, #9]
  3dc9aa:	9802		ldr	r0, [sp, #8]
; $spi_abb_read_int_reg_callback = 0x39efc4
  3dc9ac:	4942		ldr	r1, =0x39efc5	; via 0x3dcab8
  3dc9ae:	6041		str	r1, [r0, #4]
  3dc9b0:	483f		ldr	r0, =0x1774e38	; via 0x3dcab0
  3dc9b2:	6800		ldr	r0, [r0, #0]
  3dc9b4:	7880		ldrb	r0, [r0, #2]
  3dc9b6:	9902		ldr	r1, [sp, #8]
  3dc9b8:	f7dc faf2	bl	0x3b8fa0	; $rvf_send_msg
  3dc9bc:	e010		b	0x3dc9e0
  3dc9be:	483d		ldr	r0, =0xa0010	; via 0x3dcab4
  3dc9c0:	9000		str	r0, [sp, #0]
  3dc9c2:	a01c		add	r0, pc, #112	; 0x70
  3dc9c4:	2138		mov	r1, #56	; 0x38
  3dc9c6:	e003		b	0x3dc9d0
  3dc9c8:	483a		ldr	r0, =0xa0010	; via 0x3dcab4
  3dc9ca:	9000		str	r0, [sp, #0]
  3dc9cc:	a028		add	r0, pc, #160	; 0xa0
  3dc9ce:	2133		mov	r1, #51	; 0x33
  3dc9d0:	2200		mov	r2, #0
  3dc9d2:	43d2		mvn	r2, r2
  3dc9d4:	2301		mov	r3, #1
  3dc9d6:	f7fe f92d	bl	0x3dac34
  3dc9da:	200c		mov	r0, #12	; 0xc
  3dc9dc:	f003 f967	bl	0x3dfcae
  3dc9e0:	b003		add	sp, #12	; 0xc
  3dc9e2:	bd00		pop	{pc}

; A higher-level display backlight control function: takes a backlight
; level index as input (0 means off, 1-4 are defined levels, anything >=5
; means maximum), calls the lower-level function with the corresponding
; PWL value, and sets the 0x1775138 var to a number that seems to be
; the backlight's expected current draw.
  3df226:	b500		push	{lr}
  3df228:	2800		cmp	r0, #0
  3df22a:	d105		bne	0x3df238
  3df22c:	f000 f827	bl	0x3df27e
  3df230:	492a		ldr	r1, =0x1775138	; via 0x3df2dc
  3df232:	2000		mov	r0, #0
  3df234:	8008		strh	r0, [r1, #0]
  3df236:	bd00		pop	{pc}
  3df238:	2801		cmp	r0, #1
  3df23a:	d019		beq	0x3df270
  3df23c:	2802		cmp	r0, #2
  3df23e:	d012		beq	0x3df266
  3df240:	2803		cmp	r0, #3
  3df242:	d00b		beq	0x3df25c
  3df244:	2804		cmp	r0, #4
  3df246:	d004		beq	0x3df252
  3df248:	20ff		mov	r0, #255	; 0xff
  3df24a:	f000 f818	bl	0x3df27e
  3df24e:	2162		mov	r1, #98	; 0x62
  3df250:	e012		b	0x3df278
  3df252:	20c0		mov	r0, #192	; 0xc0
  3df254:	f000 f813	bl	0x3df27e
  3df258:	2157		mov	r1, #87	; 0x57
  3df25a:	e00d		b	0x3df278
  3df25c:	2080		mov	r0, #128	; 0x80
  3df25e:	f000 f80e	bl	0x3df27e
  3df262:	214c		mov	r1, #76	; 0x4c
  3df264:	e008		b	0x3df278
  3df266:	2040		mov	r0, #64	; 0x40
  3df268:	f000 f809	bl	0x3df27e
  3df26c:	2141		mov	r1, #65	; 0x41
  3df26e:	e003		b	0x3df278
  3df270:	2001		mov	r0, #1
  3df272:	f000 f804	bl	0x3df27e
  3df276:	2108		mov	r1, #8
  3df278:	4818		ldr	r0, =0x1775138	; via 0x3df2dc
  3df27a:	8001		strh	r1, [r0, #0]
  3df27c:	bd00		pop	{pc}

; The following 0x3df27e function controls the display backlight.
; 0 argument means fully off, otherwise the master on/off control is on
; and the argument is the value for PWL control before the inversion.
  3df27e:	b530		push	{r4, r5, lr}
  3df280:	2800		cmp	r0, #0
  3df282:	d10d		bne	0x3df2a0
  3df284:	4c16		ldr	r4, =0x177513a	; via 0x3df2e0
  3df286:	7820		ldrb	r0, [r4, #0]
  3df288:	2800		cmp	r0, #0
  3df28a:	d016		beq	0x3df2ba
; 0x2785d0 must be the display backlight master on/off control function
  3df28c:	2000		mov	r0, #0
  3df28e:	f699 f99f	bl	0x2785d0
  3df292:	2000		mov	r0, #0
  3df294:	4913		ldr	r1, =0xfffe8000	; via 0x3df2e4
  3df296:	7008		strb	r0, [r1, #0]
  3df298:	4913		ldr	r1, =0xfffe8001	; via 0x3df2e8
  3df29a:	7008		strb	r0, [r1, #0]
  3df29c:	7020		strb	r0, [r4, #0]
  3df29e:	bd30		pop	{r4, r5, pc}
  3df2a0:	4910		ldr	r1, =0xfffe8000	; via 0x3df2e4
  3df2a2:	4240		neg	r0, r0
  3df2a4:	7008		strb	r0, [r1, #0]
  3df2a6:	4c0e		ldr	r4, =0x177513a	; via 0x3df2e0
  3df2a8:	7820		ldrb	r0, [r4, #0]
  3df2aa:	2800		cmp	r0, #0
  3df2ac:	d105		bne	0x3df2ba
  3df2ae:	2501		mov	r5, #1
  3df2b0:	704d		strb	r5, [r1, #1]
  3df2b2:	2001		mov	r0, #1
  3df2b4:	f699 f98c	bl	0x2785d0
  3df2b8:	7025		strb	r5, [r4, #0]
  3df2ba:	bd30		pop	{r4, r5, pc}

  3df2bc:	4808		ldr	r0, =0x177513a	; via 0x3df2e0
  3df2be:	7800		ldrb	r0, [r0, #0]
  3df2c0:	4770		bx	lr

  3df2c2:	4806		ldr	r0, =0x1775138	; via 0x3df2dc
  3df2c4:	8800		ldrh	r0, [r0, #0]
  3df2c6:	4770		bx	lr

$AI_EnableBit:
  3e300c:	4a44		ldr	r2, =0xfffef00a	; via 0x3e3120
  3e300e:	2101		mov	r1, #1
  3e3010:	4081		lsl	r1, r0
  3e3012:	8810		ldrh	r0, [r2, #0]
  3e3014:	4301		orr	r1, r0
  3e3016:	8011		strh	r1, [r2, #0]
  3e3018:	4770		bx	lr

$AI_DisableBit:
  3e301a:	4a41		ldr	r2, =0xfffef00a	; via 0x3e3120
  3e301c:	2101		mov	r1, #1
  3e301e:	4081		lsl	r1, r0
  3e3020:	8810		ldrh	r0, [r2, #0]
  3e3022:	4388		bic	r0, r1
  3e3024:	8010		strh	r0, [r2, #0]
  3e3026:	4770		bx	lr

$AI_SetBit:
  3e3028:	4a3e		ldr	r2, =0xfffe4802	; via 0x3e3124
  3e302a:	2101		mov	r1, #1
  3e302c:	4081		lsl	r1, r0
  3e302e:	8810		ldrh	r0, [r2, #0]
  3e3030:	4301		orr	r1, r0
  3e3032:	8011		strh	r1, [r2, #0]
  3e3034:	4770		bx	lr

$AI_ResetBit:
  3e3036:	4a3b		ldr	r2, =0xfffe4802	; via 0x3e3124
  3e3038:	2101		mov	r1, #1
  3e303a:	4081		lsl	r1, r0
  3e303c:	8810		ldrh	r0, [r2, #0]
  3e303e:	4388		bic	r0, r1
  3e3040:	8010		strh	r0, [r2, #0]
  3e3042:	4770		bx	lr

$AI_ConfigBitAsOutput:
  3e3044:	4a38		ldr	r2, =0xfffe4804	; via 0x3e3128
  3e3046:	2101		mov	r1, #1
  3e3048:	4081		lsl	r1, r0
  3e304a:	8810		ldrh	r0, [r2, #0]
  3e304c:	4388		bic	r0, r1
  3e304e:	8010		strh	r0, [r2, #0]
  3e3050:	4770		bx	lr

$AI_ConfigBitAsInput:
  3e3052:	4a35		ldr	r2, =0xfffe4804	; via 0x3e3128
  3e3054:	2101		mov	r1, #1
  3e3056:	4081		lsl	r1, r0
  3e3058:	8810		ldrh	r0, [r2, #0]
  3e305a:	4301		orr	r1, r0
  3e305c:	8011		strh	r1, [r2, #0]
  3e305e:	4770		bx	lr

$AI_ReadBit:
  3e3060:	4932		ldr	r1, =0xfffe4800	; via 0x3e312c
  3e3062:	8809		ldrh	r1, [r1, #0]
  3e3064:	4101		asr	r1, r0
  3e3066:	07c8		lsl	r0, r1, #31
  3e3068:	0fc0		lsr	r0, r0, #31
  3e306a:	0600		lsl	r0, r0, #24
  3e306c:	0e00		lsr	r0, r0, #24
  3e306e:	4770		bx	lr

$AI_Power:
  3e3070:	b500		push	{lr}
  3e3072:	2800		cmp	r0, #0
  3e3074:	d101		bne	0x3e307a
  3e3076:	f766 fbff	bl	0x349878	; $ABB_Power_Off
  3e307a:	bd00		pop	{pc}

$AI_ResetIoConfig:
  3e307c:	492a		ldr	r1, =0xfffe4804	; via 0x3e3128
  3e307e:	482c		ldr	r0, =0xffff	; via 0x3e3130
  3e3080:	8008		strh	r0, [r1, #0]
  3e3082:	4827		ldr	r0, =0xfffef00a	; via 0x3e3120
  3e3084:	2100		mov	r1, #0
  3e3086:	8001		strh	r1, [r0, #0]
  3e3088:	4770		bx	lr

$AI_ClockEnable:
  3e308a:	492a		ldr	r1, =0xfffe4806	; via 0x3e3134
  3e308c:	2020		mov	r0, #32	; 0x20
  3e308e:	880a		ldrh	r2, [r1, #0]
  3e3090:	4310		orr	r0, r2
  3e3092:	8008		strh	r0, [r1, #0]
  3e3094:	4770		bx	lr

$AI_InitIOConfig:
  3e3096:	b500		push	{lr}
  3e3098:	f7ec fe54	bl	0x3cfd44
  3e309c:	2000		mov	r0, #0
  3e309e:	4926		ldr	r1, =0x1773f8a	; via 0x3e3138
  3e30a0:	7008		strb	r0, [r1, #0]
  3e30a2:	4926		ldr	r1, =0x17750fd	; via 0x3e313c
  3e30a4:	7008		strb	r0, [r1, #0]
  3e30a6:	4926		ldr	r1, =0x17750ff	; via 0x3e3140
  3e30a8:	2201		mov	r2, #1
  3e30aa:	700a		strb	r2, [r1, #0]
  3e30ac:	4925		ldr	r1, =0x17750fe	; via 0x3e3144
  3e30ae:	7008		strb	r0, [r1, #0]
  3e30b0:	4825		ldr	r0, =0x17750fc	; via 0x3e3148
  3e30b2:	21ff		mov	r1, #255	; 0xff
  3e30b4:	7001		strb	r1, [r0, #0]
  3e30b6:	bd00		pop	{pc}

$AI_SelectIOForIT:
  3e30b8:	0109		lsl	r1, r1, #4
  3e30ba:	1840		add	r0, r0, r1
  3e30bc:	0040		lsl	r0, r0, #1
  3e30be:	3001		add	r0, #1
  3e30c0:	4922		ldr	r1, =0xfffe4814	; via 0x3e314c
  3e30c2:	8008		strh	r0, [r1, #0]
  3e30c4:	4770		bx	lr

$AI_CheckITSource:
  3e30c6:	2100		mov	r1, #0
  3e30c8:	4a21		ldr	r2, =0xfffe4816	; via 0x3e3150
  3e30ca:	8812		ldrh	r2, [r2, #0]
  3e30cc:	4210		tst	r0, r2
  3e30ce:	d000		beq	0x3e30d2
  3e30d0:	2101		mov	r1, #1
  3e30d2:	1c08		add	r0, r1, #0
  3e30d4:	4770		bx	lr

$AI_UnmaskIT:
  3e30d6:	4a1f		ldr	r2, =0xfffe4818	; via 0x3e3154
  3e30d8:	8811		ldrh	r1, [r2, #0]
  3e30da:	4381		bic	r1, r0
  3e30dc:	8011		strh	r1, [r2, #0]
  3e30de:	4770		bx	lr

$AI_MaskIT:
  3e30e0:	4a1c		ldr	r2, =0xfffe4818	; via 0x3e3154
  3e30e2:	8811		ldrh	r1, [r2, #0]
  3e30e4:	4301		orr	r1, r0
  3e30e6:	8011		strh	r1, [r2, #0]
  3e30e8:	4770		bx	lr

  3e30ea:	2130		mov	r1, #48	; 0x30
  3e30ec:	7001		strb	r1, [r0, #0]
  3e30ee:	3001		add	r0, #1
  3e30f0:	2231		mov	r2, #49	; 0x31
  3e30f2:	7002		strb	r2, [r0, #0]
  3e30f4:	3001		add	r0, #1
  3e30f6:	222e		mov	r2, #46	; 0x2e
  3e30f8:	7002		strb	r2, [r0, #0]
  3e30fa:	3001		add	r0, #1
  3e30fc:	7001		strb	r1, [r0, #0]
  3e30fe:	3001		add	r0, #1
  3e3100:	7001		strb	r1, [r0, #0]
  3e3102:	3001		add	r0, #1
  3e3104:	2100		mov	r1, #0
  3e3106:	7001		strb	r1, [r0, #0]
  3e3108:	4770		bx	lr

  3e310a:	b500		push	{lr}
  3e310c:	2801		cmp	r0, #1
  3e310e:	d103		bne	0x3e3118
  3e3110:	2001		mov	r0, #1
  3e3112:	f7ff ff90	bl	0x3e3036	; $AI_ResetBit
  3e3116:	bd00		pop	{pc}
  3e3118:	2001		mov	r0, #1
  3e311a:	f7ff ff85	bl	0x3e3028	; $AI_SetBit
  3e311e:	bd00		pop	{pc}

_f_checksum:
  3e6990:	e1a0c000	mov	r12, r0
  3e6994:	e3a00000	mov	r0, #0
  3e6998:	e3510000	cmp	r1, #0
  3e699c:	012fff1e	bxeq	lr
  3e69a0:	e4dc2001	ldrb	r2, [r12], #1
  3e69a4:	e0820000	add	r0, r2, r0
  3e69a8:	e1a00800	mov	r0, r0, lsl #16
  3e69ac:	e1a00820	mov	r0, r0, lsr #16
  3e69b0:	e2511001	subs	r1, r1, #1
  3e69b4:	1afffff9	bne	0x3e69a0
  3e69b8:	e12fff1e	bx	lr

_f_load_int_mem:
  3e69bc:	e92d4ff0	stmdb	sp!, {r4, r5, r6, r7, r8, r9, r10, r11, lr}
  3e69c0:	e59f90c8	ldr	r9, =0x1775070	; via 0x3e6a90
  3e69c4:	e3a0c000	mov	r12, #0
  3e69c8:	e1c9c0b0	strh	r12, [r9]
  3e69cc:	e59fa0c0	ldr	r10, =0x1775072	; via 0x3e6a94
  3e69d0:	e1cac0b0	strh	r12, [r10]
  3e69d4:	e59fc0bc	ldr	r12, =0x82d1f0	; via 0x3e6a98
  3e69d8:	e59f00bc	ldr	r0, =0x848788	; via 0x3e6a9c
  3e69dc:	e040000c	sub	r0, r0, r12
  3e69e0:	e2408004	sub	r8, r0, #4
  3e69e4:	e28c7004	add	r7, r12, #4
  3e69e8:	e1a00007	mov	r0, r7
  3e69ec:	e3a01000	mov	r1, #0
  3e69f0:	e1a02008	mov	r2, r8
  3e69f4:	ebf166b1	bl	0x404c0		; _INT_memset
  3e69f8:	e59f40a0	ldr	r4, =0x84878c	; via 0x3e6aa0
  3e69fc:	e59fc0a0	ldr	r12, =0x848d1c	; via 0x3e6aa4
  3e6a00:	e04c6004	sub	r6, r12, r4
  3e6a04:	e1a00004	mov	r0, r4
  3e6a08:	e3a01000	mov	r1, #0
  3e6a0c:	e1a02006	mov	r2, r6
  3e6a10:	ebf166aa	bl	0x404c0		; _INT_memset
  3e6a14:	e59fb08c	ldr	r11, =0x40708	; via 0x3e6aa8
  3e6a18:	e1a0000b	mov	r0, r11
  3e6a1c:	e1a01008	mov	r1, r8
  3e6a20:	ebffffda	bl	0x3e6990	; _f_checksum
  3e6a24:	e1a03000	mov	r3, r0
  3e6a28:	e1c930b0	strh	r3, [r9]
  3e6a2c:	e59f5078	ldr	r5, =0x5bca0	; via 0x3e6aac
  3e6a30:	e1a00005	mov	r0, r5
  3e6a34:	e1a01006	mov	r1, r6
  3e6a38:	ebffffd4	bl	0x3e6990	; _f_checksum
  3e6a3c:	e083c000	add	r12, r3, r0
  3e6a40:	e1c9c0b0	strh	r12, [r9]
  3e6a44:	e1a00007	mov	r0, r7
  3e6a48:	e1a0100b	mov	r1, r11
  3e6a4c:	e1a02008	mov	r2, r8
  3e6a50:	ebf166c0	bl	0x40558		; _INT_memcpy
  3e6a54:	e1a00004	mov	r0, r4
  3e6a58:	e1a01005	mov	r1, r5
  3e6a5c:	e1a02006	mov	r2, r6
  3e6a60:	ebf166bc	bl	0x40558		; _INT_memcpy
  3e6a64:	e1a00007	mov	r0, r7
  3e6a68:	e1a01008	mov	r1, r8
  3e6a6c:	ebffffc7	bl	0x3e6990	; _f_checksum
  3e6a70:	e1a03000	mov	r3, r0
  3e6a74:	e1ca30b0	strh	r3, [r10]
  3e6a78:	e1a00004	mov	r0, r4
  3e6a7c:	e1a01006	mov	r1, r6
  3e6a80:	ebffffc2	bl	0x3e6990	; _f_checksum
  3e6a84:	e083c000	add	r12, r3, r0
  3e6a88:	e1cac0b0	strh	r12, [r10]
  3e6a8c:	e8bd8ff0	ldmia	sp!, {r4, r5, r6, r7, r8, r9, r10, r11, pc}

  3e6a90:	01775070	_d_checksum1
  3e6a94:	01775072	_d_checksum2
  3e6a98:	0082d1f0	_d_application_run_start
  3e6a9c:	00848788	_d_application_run_end
  3e6aa0:	0084878c	__470_S_MEM_out_call_run_start
  3e6aa4:	00848d1c	__470_S_MEM_out_call_run_end
  3e6aa8:	00040708	.ldfl+8
  3e6aac:	0005bca0	__470_S_MEM_out_call_load_start

Run address = load address + 0x7ECAEC
for both the actual code and the trampolines

$spi_core:
  3e8ca0:	b500		push	{lr}
  3e8ca2:	b085		sub	sp, #20	; 0x14
  3e8ca4:	4669		mov	r1, sp
  3e8ca6:	2000		mov	r0, #0
  3e8ca8:	7208		strb	r0, [r1, #8]
  3e8caa:	483a		ldr	r0, =0xa0010	; via 0x3e8d94
  3e8cac:	9000		str	r0, [sp, #0]
  3e8cae:	a02e		add	r0, pc, #184	; 0xb8
  3e8cb0:	2118		mov	r1, #24	; 0x18
  3e8cb2:	2200		mov	r2, #0
  3e8cb4:	43d2		mvn	r2, r2
  3e8cb6:	2305		mov	r3, #5
  3e8cb8:	f7f1 ffbc	bl	0x3dac34
  3e8cbc:	2034		mov	r0, #52	; 0x34
  3e8cbe:	4936		ldr	r1, =0x1774e38	; via 0x3e8d98
  3e8cc0:	680a		ldr	r2, [r1, #0]
  3e8cc2:	2101		mov	r1, #1
  3e8cc4:	5481		strb	r1, [r0, r2]
  3e8cc6:	200c		mov	r0, #12	; 0xc
  3e8cc8:	f7f6 fff1	bl	0x3dfcae	; $IQ_Unmask
  3e8ccc:	f7b8 fbd6	bl	0x3a147c	; $Switch_ON
  3e8cd0:	4668		mov	r0, sp
  3e8cd2:	7a00		ldrb	r0, [r0, #8]
  3e8cd4:	2800		cmp	r0, #0
  3e8cd6:	d131		bne	0x3e8d3c
  3e8cd8:	4830		ldr	r0, =0xffff	; via 0x3e8d9c
  3e8cda:	2100		mov	r1, #0
  3e8cdc:	f6c8 fc18	bl	0x2b1510	; $rvf_wait
  3e8ce0:	4669		mov	r1, sp
  3e8ce2:	8208		strh	r0, [r1, #16]	; 0x10
  3e8ce4:	4668		mov	r0, sp
  3e8ce6:	8a00		ldrh	r0, [r0, #16]	; 0x10
  3e8ce8:	0840		lsr	r0, r0, #1
  3e8cea:	d30b		bcc	0x3e8d04
  3e8cec:	2000		mov	r0, #0
  3e8cee:	f5da fc81	bl	0x1c35f4	; $rvf_read_mbox
  3e8cf2:	9003		str	r0, [sp, #12]	; 0xc
  3e8cf4:	9803		ldr	r0, [sp, #12]	; 0xc
  3e8cf6:	f7ec ff33	bl	0x3d5b60	; $spi_process
  3e8cfa:	2800		cmp	r0, #0
  3e8cfc:	d002		beq	0x3e8d04
  3e8cfe:	9803		ldr	r0, [sp, #12]	; 0xc
  3e8d00:	f008 fd1e	bl	0x3f1740	; $pwr_process
  3e8d04:	4668		mov	r0, sp
  3e8d06:	8a00		ldrh	r0, [r0, #16]	; 0x10
  3e8d08:	0940		lsr	r0, r0, #5
  3e8d0a:	d301		bcc	0x3e8d10
  3e8d0c:	f6fa f8c4	bl	0x2e2e98	; $pwr_bat_test_timer_process
  3e8d10:	4668		mov	r0, sp
  3e8d12:	8a00		ldrh	r0, [r0, #16]	; 0x10
  3e8d14:	0980		lsr	r0, r0, #6
  3e8d16:	d301		bcc	0x3e8d1c
  3e8d18:	f6f9 fe64	bl	0x2e29e4	; $pwr_CI_charge_timer_process
  3e8d1c:	4668		mov	r0, sp
  3e8d1e:	8a00		ldrh	r0, [r0, #16]	; 0x10
  3e8d20:	09c0		lsr	r0, r0, #7
  3e8d22:	d301		bcc	0x3e8d28
  3e8d24:	f6fa f88b	bl	0x2e2e3e	; $pwr_CV_charge_timer_process
  3e8d28:	4668		mov	r0, sp
  3e8d2a:	8a00		ldrh	r0, [r0, #16]	; 0x10
  3e8d2c:	0a00		lsr	r0, r0, #8
  3e8d2e:	d301		bcc	0x3e8d34
  3e8d30:	f7ca fe95	bl	0x3b3a5e	; $pwr_discharge_timer_process
  3e8d34:	4668		mov	r0, sp
  3e8d36:	7a00		ldrb	r0, [r0, #8]
  3e8d38:	2800		cmp	r0, #0
  3e8d3a:	d0cd		beq	0x3e8cd8
  3e8d3c:	2000		mov	r0, #0
  3e8d3e:	b005		add	sp, #20	; 0x14
  3e8d40:	bd00		pop	{pc}

$spi_adc_on:
  3e8d42:	b500		push	{lr}
  3e8d44:	b082		sub	sp, #8
  3e8d46:	2233		mov	r2, #51	; 0x33
  3e8d48:	4813		ldr	r0, =0x1774e38	; via 0x3e8d98
  3e8d4a:	6800		ldr	r0, [r0, #0]
  3e8d4c:	2101		mov	r1, #1
  3e8d4e:	5411		strb	r1, [r2, r0]
  3e8d50:	4810		ldr	r0, =0xa0010	; via 0x3e8d94
  3e8d52:	9000		str	r0, [sp, #0]
  3e8d54:	a00b		add	r0, pc, #44	; 0x2c
  3e8d56:	210f		mov	r1, #15	; 0xf
  3e8d58:	2200		mov	r2, #0
  3e8d5a:	43d2		mvn	r2, r2
  3e8d5c:	2305		mov	r3, #5
  3e8d5e:	f7f1 ff69	bl	0x3dac34
  3e8d62:	b002		add	sp, #8
  3e8d64:	bd00		pop	{pc}
  3e8d66:	46c0		nop			(mov r8, r8)

$Application_Initialize:
  3f11f8:	b500		push	{lr}
  3f11fa:	f7ca faeb	bl	0x3bb7d4	; $Init_Target
  3f11fe:	f7ca fbe4	bl	0x3bb9ca	; $Init_Drivers
  3f1202:	f686 f8eb	bl	0x2773dc
  3f1206:	f686 f985	bl	0x277514
  3f120a:	f008 ffa7	bl	0x3fa15c	; $Cust_Init_Layer1
  3f120e:	f7ff ffcd	bl	0x3f11ac
  3f1212:	2801		cmp	r0, #1
  3f1214:	d001		beq	0x3f121a
  3f1216:	f7b0 fa2d	bl	0x3a1674
  3f121a:	f7b0 fa3e	bl	0x3a169a
  3f121e:	f75e fb4d	bl	0x34f8bc
  3f1222:	f7ca fbe6	bl	0x3bb9f2	; $Init_Serial_Flows
  3f1226:	f709 fe44	bl	0x2faeb2
  3f122a:	f7ca fbee	bl	0x3bba0a	; $Init_Unmask_IT
  3f122e:	bd00		pop	{pc}

$INC_Initialize:
  3f3e74:	b530		push	{r4, r5, lr}
  3f3e76:	1c05		add	r5, r0, #0
  3f3e78:	4c13		ldr	r4, =0x1775048	; via 0x3f3ec8
  3f3e7a:	2001		mov	r0, #1
  3f3e7c:	6020		str	r0, [r4, #0]
  3f3e7e:	f003 f99d	bl	0x3f71bc
  3f3e82:	f003 f99f	bl	0x3f71c4
  3f3e86:	f003 f947	bl	0x3f7118
  3f3e8a:	f001 fe75	bl	0x3f5b78
  3f3e8e:	f7f5 ffcd	bl	0x3e9e2c
  3f3e92:	f002 fb55	bl	0x3f6540
  3f3e96:	f002 fb23	bl	0x3f64e0
  3f3e9a:	f002 fb41	bl	0x3f6520
  3f3e9e:	f002 fb0f	bl	0x3f64c0
  3f3ea2:	f002 fb6d	bl	0x3f6580
  3f3ea6:	f002 fb2b	bl	0x3f6500
  3f3eaa:	f002 fb79	bl	0x3f65a0
  3f3eae:	f7fa fc8b	bl	0x3ee7c8
  3f3eb2:	f002 fb55	bl	0x3f6560
  3f3eb6:	1c28		add	r0, r5, #0
  3f3eb8:	f7fd f99e	bl	0x3f11f8	; $Application_Initialize
  3f3ebc:	2002		mov	r0, #2
  3f3ebe:	6020		str	r0, [r4, #0]
  3f3ec0:	f005 fbdc	bl	0x3f967c
  3f3ec4:	bd30		pop	{r4, r5, pc}

_INC_Initialize:
  3f6b40:	e92d4000	stmdb	sp!, {lr}
  3f6b44:	e28fe001	add	lr, pc, #1
  3f6b48:	e12fff1e	bx	lr
  3f6b4c:	f7fd f992	bl	0x3f3e74	; $INC_Initialize
  3f6b50:	4778		bx	pc
  3f6b52:	46c0		nop			(mov r8, r8)
  3f6b54:	e8bd8000	ldmia	sp!, {pc}

$madc_hex_2_physical call trampoline
  3f81ac:	b082		sub	sp, #8
  3f81ae:	9400		str	r4, [sp, #0]
  3f81b0:	4c01		ldr	r4, =0x83cab0	; via 0x3f81b8
  3f81b2:	9401		str	r4, [sp, #4]
  3f81b4:	bd10		pop	{r4, pc}
  3f81b6:	0000
  3f81b8:	0083cab0

$Cust_Init_Layer1 call trampoline
  3fa15c:	b082		sub	sp, #8
  3fa15e:	9400		str	r4, [sp, #0]
  3fa160:	4c01		ldr	r4, =0x83ca64	; via 0x3fa168
  3fa162:	9401		str	r4, [sp, #4]
  3fa164:	bd10		pop	{r4, pc}
  3fa166:	0000
  3fa168:	0083ca64

_RVM_SWE_GET_INFO_ARRAY:
  52fb70:	00010002	RVT_USE_ID
  52fb74:	003c6f95	rvt_get_info
  52fb78:	000a0001	R2D_USE_ID
  52fb7c:	003ea875	r2d_get_info
  52fb80:	000a0002	RTC_USE_ID
  52fb84:	003d4a7d	rtc_get_info
  52fb88:	000a0004	FFS_USE_ID
  52fb8c:	003e6bd1	ffs_get_info
  52fb90:	000a0008	KPD_USE_ID
  52fb94:	003e2d75	kpd_get_info
  52fb98:	000a0010	SPI_USE_ID
  52fb9c:	003cd72d	spi_get_info
  52fba0:	000a0020	PWR_USE_ID
  52fba4:	003cd955	pwr_get_info
  52fba8:	001e0002	AUDIO_USE_ID
  52fbac:	003aac95	audio_get_info
  52fbb0:	001e0004	ETM_USE_ID
  52fbb4:	003e528d	etm_get_info
  52fbb8:	001e0008	DAR_USE_ID
  52fbbc:	003c4039	dar_get_info
  52fbc0:	001e0010	MKS_USE_ID
  52fbc4:	003e5615	mks_get_info
  52fbc8:	001e0040	LLS_USE_ID
  52fbcc:	003e4679	lls_get_info
  52fbd0:	001e0080	ATP_USE_ID
  52fbd4:	003bdeb9	atp_get_info
; the rest are Foxconn/Pirelli's additions
  52fbd8:	00780001
  52fbdc:	003d21c1
  52fbe0:	00640001
  52fbe4:	003c8c49
  52fbe8:	00640002
  52fbec:	003b8359
  52fbf0:	00640004
  52fbf4:	003b9b2d
  52fbf8:	00640008
  52fbfc:	003b743d
  52fc00:	00820001
  52fc04:	003cba91
  52fc08:	000a0080
  52fc0c:	003bf1b5
  52fc10:	006e0002
  52fc14:	003bcb79
  52fc18:	006e0004
  52fc1c:	003d25b5
  52fc20:	006e0008
  52fc24:	003613ef
  52fc28:	006e0020
  52fc2c:	00381e3d
  52fc30:	006e0040
  52fc34:	003cf4f9
  52fc38:	006e0080
  52fc3c:	003cacf9
  52fc40:	006e0100
  52fc44:	00367a9d
  52fc48:	008c0001
  52fc4c:	003d1fc1
  52fc50:	00000000
  52fc54:	00000000

IRAM data:

0x801550: beginning of the .bss section from the l1_cust module

0x801550:	rf
0x801734:	adc_cal		(offset matches TCS211)
0x801758:	temperature	(ditto)
0x801964:	ser_cfg_info	(moved here, not in TCS211)
0x801ac8:	adc

IRAM code:

; default adc_cal table loaded by Pirelli's get_cal_from_nvmem()

  83c1d0:	1ac2
  83c1d2:	222e
  83c1d4:	1b58
  83c1d6:	1b58
  83c1d8:	1b58
  83c1da:	1b58
  83c1dc:	1b58
  83c1de:	0100
  83c1e0:	1b58
  83c1e2:	0000
  83c1e4:	0000
  83c1e6:	0000
  83c1e8:	0000
  83c1ea:	0000
  83c1ec:	0000
  83c1ee:	0000
  83c1f0:	0000
  83c1f2:	0000

$Cust_Init_Layer1:
  83ca64:	b500		push	{lr}
  83ca66:	b084		sub	sp, #16	; 0x10
  83ca68:	4669		mov	r1, sp
  83ca6a:	2006		mov	r0, #6
  83ca6c:	7008		strb	r0, [r1, #0]
  83ca6e:	4668		mov	r0, sp
  83ca70:	2101		mov	r1, #1
  83ca72:	7101		strb	r1, [r0, #4]
  83ca74:	2000		mov	r0, #0
  83ca76:	4669		mov	r1, sp
  83ca78:	70c8		strb	r0, [r1, #3]
  83ca7a:	7208		strb	r0, [r1, #8]
  83ca7c:	487d		ldr	r0, =0x5ff	; via 0x83cc74
  83ca7e:	9003		str	r0, [sp, #12]	; 0xc
  83ca80:	2001		mov	r0, #1
  83ca82:	80c8		strh	r0, [r1, #6]
  83ca84:	4668		mov	r0, sp
  83ca86:	f00b fff9	bl	0x848a7c	; $l1_initialize
  83ca8a:	487c		ldr	r0, =0x801550	; via 0x83cc7c
  83ca8c:	21ff		mov	r1, #255	; 0xff
  83ca8e:	319d		add	r1, #157	; 0x9d
  83ca90:	2200		mov	r2, #0
  83ca92:	f000 f85d	bl	0x83cb50	; $get_cal_from_nvmem
  83ca96:	4878		ldr	r0, =0x801964	; via 0x83cc78
  83ca98:	2102		mov	r1, #2
  83ca9a:	2202		mov	r2, #2
  83ca9c:	f000 f858	bl	0x83cb50	; $get_cal_from_nvmem
  83caa0:	b004		add	sp, #16	; 0x10
  83caa2:	bd00		pop	{pc}

  83caa4:	00000f22
  83caa8:	00000e8b
  83caac:	00001d12

$madc_hex_2_physical:
  83cab0:	b5f0		push	{r4, r5, r6, r7, lr}
  83cab2:	4642		mov	r2, r8
  83cab4:	b404		push	{r2}
  83cab6:	4688		mov	r8, r1
  83cab8:	1c01		add	r1, r0, #0
  83caba:	4c71		ldr	r4, =0x801ac8	; via 0x83cc80
  83cabc:	2012		mov	r0, #18	; 0x12
  83cabe:	1900		add	r0, r0, r4
  83cac0:	2212		mov	r2, #18	; 0x12
  83cac2:	f002 feeb	bl	0x83f89c	; C$MEMCPY
  83cac6:	496f		ldr	r1, =0x801734	; via 0x83cc84
  83cac8:	2012		mov	r0, #18	; 0x12
  83caca:	1842		add	r2, r0, r1
  83cacc:	2307		mov	r3, #7
  83cace:	8a60		ldrh	r0, [r4, #18]	; 0x12
  83cad0:	880d		ldrh	r5, [r1, #0]
  83cad2:	4368		mul	r0, r5
  83cad4:	0a80		lsr	r0, r0, #10
  83cad6:	2500		mov	r5, #0
  83cad8:	5f55		ldrsh	r5, [r2, r5]
  83cada:	1828		add	r0, r5, r0
  83cadc:	8020		strh	r0, [r4, #0]
  83cade:	3102		add	r1, #2
  83cae0:	3402		add	r4, #2
  83cae2:	3202		add	r2, #2
  83cae4:	3b01		sub	r3, #1
  83cae6:	2b00		cmp	r3, #0
  83cae8:	d1f1		bne	0x83cace
  83caea:	4f66		ldr	r7, =0x801734	; via 0x83cc84
  83caec:	4964		ldr	r1, =0x801ac8	; via 0x83cc80
  83caee:	8c08		ldrh	r0, [r1, #32]	; 0x20
  83caf0:	89fa		ldrh	r2, [r7, #14]	; 0xe
  83caf2:	4350		mul	r0, r2
  83caf4:	0a00		lsr	r0, r0, #8
  83caf6:	0400		lsl	r0, r0, #16
  83caf8:	0c06		lsr	r6, r0, #16
  83cafa:	2200		mov	r2, #0
  83cafc:	2382		mov	r3, #130	; 0x82
  83cafe:	2041		mov	r0, #65	; 0x41
  83cb00:	4c61		ldr	r4, =0x801758	; via 0x83cc88
  83cb02:	0085		lsl	r5, r0, #2
  83cb04:	5b64		ldrh	r4, [r4, r5]
  83cb06:	42a6		cmp	r6, r4
  83cb08:	db01		blt	0x83cb0e
  83cb0a:	1c02		add	r2, r0, #0
  83cb0c:	e000		b	0x83cb10
  83cb0e:	1c03		add	r3, r0, #0
  83cb10:	18d0		add	r0, r2, r3
  83cb12:	0fc4		lsr	r4, r0, #31
  83cb14:	1820		add	r0, r4, r0
  83cb16:	1040		asr	r0, r0, #1
  83cb18:	0400		lsl	r0, r0, #16
  83cb1a:	1400		asr	r0, r0, #16
  83cb1c:	1a9c		sub	r4, r3, r2
  83cb1e:	2c02		cmp	r4, #2
  83cb20:	daee		bge	0x83cb00
  83cb22:	4add		ldr	r2, =0x80175a	; via 0x83ce98
  83cb24:	0080		lsl	r0, r0, #2
  83cb26:	5e10		ldrsh	r0, [r2, r0]
  83cb28:	81c8		strh	r0, [r1, #14]	; 0xe
  83cb2a:	2022		mov	r0, #34	; 0x22
  83cb2c:	5fc2		ldrsh	r2, [r0, r7]
  83cb2e:	48db		ldr	r0, =0x801aea	; via 0x83ce9c
  83cb30:	8800		ldrh	r0, [r0, #0]
  83cb32:	8a3b		ldrh	r3, [r7, #16]	; 0x10
  83cb34:	4358		mul	r0, r3
  83cb36:	0a80		lsr	r0, r0, #10
  83cb38:	1810		add	r0, r2, r0
  83cb3a:	8208		strh	r0, [r1, #16]	; 0x10
  83cb3c:	4640		mov	r0, r8
  83cb3e:	2212		mov	r2, #18	; 0x12
  83cb40:	f002 feac	bl	0x83f89c	; C$MEMCPY
  83cb44:	bc04		pop	{r2}
  83cb46:	4690		mov	r8, r2
  83cb48:	bdf0		pop	{r4, r5, r6, r7, pc}
  83cb4a:	46c0		nop			(mov r8, r8)

  83cb4c:	008016ec

$get_cal_from_nvmem:
  83cb50:	b530		push	{r4, r5, lr}
  83cb52:	1c0c		add	r4, r1, #0
  83cb54:	1c05		add	r5, r0, #0
  83cb56:	2a01		cmp	r2, #1
  83cb58:	d00e		beq	0x83cb78
  83cb5a:	2a02		cmp	r2, #2
  83cb5c:	d118		bne	0x83cb90
  83cb5e:	a0c7		add	r0, pc, #796	; 0x31c
  83cb60:	1c29		add	r1, r5, #0
  83cb62:	1c22		add	r2, r4, #0
  83cb64:	f707 fd98	bl	0x744698
  83cb68:	2800		cmp	r0, #0
  83cb6a:	d511		bpl	0x83cb90
  83cb6c:	4842		ldr	r0, =0x801964	; via 0x83cc78
  83cb6e:	2152		mov	r1, #82	; 0x52
  83cb70:	7001		strb	r1, [r0, #0]
  83cb72:	2144		mov	r1, #68	; 0x44
  83cb74:	7041		strb	r1, [r0, #1]
  83cb76:	bd30		pop	{r4, r5, pc}
  83cb78:	a0c4		add	r0, pc, #784	; 0x310
  83cb7a:	1c29		add	r1, r5, #0
  83cb7c:	1c22		add	r2, r4, #0
  83cb7e:	f707 fd8b	bl	0x744698
  83cb82:	2800		cmp	r0, #0
  83cb84:	d504		bpl	0x83cb90
  83cb86:	1c28		add	r0, r5, #0
  83cb88:	49c5		ldr	r1, =0x83c1d0	; via 0x83cea0
  83cb8a:	1c22		add	r2, r4, #0
  83cb8c:	f002 fe86	bl	0x83f89c	; C$MEMCPY
  83cb90:	bd30		pop	{r4, r5, pc}
  83cb92:	2000		mov	r0, #0
  83cb94:	4770		bx	lr
  83cb96:	46c0		nop			(mov r8, r8)

$l1_initialize call trampoline
  848a7c:	b082		sub	sp, #8
  848a7e:	9400		str	r4, [sp, #0]
  848a80:	4c01		ldr	r4, =0x31c6e4	; via 0x848a88
  848a82:	9401		str	r4, [sp, #4]
  848a84:	bd10		pop	{r4, pc}
  848a86:	0000
  848a88:	0031c6e4

XRAM data:

0x17649b8:	ABB_Hisr
0x1764a10:	ABB_HisrStack

0x17729d0:	init data array that should have been const instead,
		mapping from system current draw to voltage drop
		that can be modeled as the battery's internal resistance:
		005A ( 90) 0017 (23)
		00AA (170) 002D (45)
		00FA (250) 0050 (80)
0x17729dc:	16-bit var stored the last display backlight current draw value
		for the Ichg munching logic

0x17741e0:	abb_sem

0x17749b8:	8-bit var zeroed in pwr_stop_charging(), set to 1 in
		pwr_start_CI_charging() and pwr_start_CV_charging()

0x17749c0:	16-bit var, init to 0 in pwr_start_CV_charging()
0x17749c2:	16-bit var, init to 0 in pwr_start_CV_charging()
0x17749c4:	16-bit var, init to 3 in pwr_start_CV_charging()
0x17749c6:	16-bit var, initial CV DAC value gets written here
		this var seems to hold the initial value
0x17749c8:	16-bit var, init to 0 in pwr_start_CV_charging()
0x17749ca:	16-bit var, initial CV DAC value gets written here
		this var gets decremented as the DAC is adjusted down

0x1774b78:	16-bit var, gets -4 written into it if the battery T
		is too high, or -5 if it is too low
0x1774b7a:	16-bit var set to 0 when starting CI charging,
		set to 1 when starting CV charging
0x1774b7c:	16-bit var battery voltage in mV
0x1774b7e:	16-bit var zeroed in pwr_stop_charging()
		Ichg in mA gets written here in CI and CV processes
0x1774b80:	16-bit var zeroed in pwr_stop_charging()
0x1774b82:	16-bit var gets i2v offset (raw ADC) written into it

0x1774ccc:	16-bit var initial battery % is stored here

0x1774cd0:	16-bit var, ABB_Read_Status() return value at the beginning
		of Switch_ON() is stored here

0x1774cd4:	32-bit var BatOperationMode

0x1774e38:	SPI_GBL_INFO_PTR
0x1774e3c:	spi_error_ft

0x1774e70:	pwr_env_ctrl_blk
0x1774e74:	pwr_error_ft

0x1775041:	byte var set to 0 in spi_abb_read_int_reg_callback()
		in ADC end processing

0x1775138:	16-bit var, stores a number that goes up as the display
		backlight intensity increases, probably the backlight's
		expected current draw

0x177513a:	8-bit var, flag indicating if the display backlight is on