view pirelli/fw-disasm @ 242:5eca9fccd706

pirelli/fw-disasm: pwr_env code located
author Mychaela Falconia <falcon@freecalypso.org>
date Sat, 23 Dec 2017 03:56:02 +0000
parents cead37b6ff74
children 83715e0c65de
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}

$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
  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:	Foxconn/Pirelli's unknown insertions
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}

_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	; $Set_Switch_ON_Cause
  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)

XRAM data:

0x1774e38:	SPI_GBL_INFO_PTR
0x1774e3c:	spi_error_ft

0x1774e70:	pwr_env_ctrl_blk
0x1774e74:	pwr_error_ft