changeset 310:ae39d76d5b7a

moko1-fw-disasm: simple analysis of init module
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 31 Jan 2020 22:45:18 +0000
parents 493f73198267
children 9cecc930d78f
files moko1-fw-disasm
diffstat 1 files changed, 546 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/moko1-fw-disasm	Fri Jan 31 22:45:18 2020 +0000
@@ -0,0 +1,546 @@
+; The earliest surviving version of Openmoko fw is moko1, although it is only
+; a binary without symbols.  The present disassembly is a quick look at this
+; binary, dug only far enough to get to the init module.  The objective was to
+; see how the init module of moko1 (presumably coming from TI's 20070419 fw
+; delivery) compares to our familiar 20070608 version, used in moko3 through
+; moko11.  Result: the init module is confirmed to be identical between the two
+; versions, meaning that:
+;
+; 1) Small Samsung flash must have already been adopted by the time of moko1.
+;    If someone were to populate an S71PL129J chip on a GTA01 board and flash
+;    moko1 (or any later version up to moko11) into its first bank, the 2nd
+;    bank on nCS4 won't work because nCS4 is not set up correctly by the MEMIF
+;    setup code in Init_Target().
+;
+; 2) The GPIO bogon functions inserted into the init module were already
+;    present in this 20070419 version.
+
+       0:	ea0004b3	b	0x12d4
+       4:	ea003ffd	b	0x10000
+       8:	ea003ffd	b	0x10004
+       c:	ea003ffd	b	0x10008
+      10:	ea003ffd	b	0x1000c
+      14:	ea003ffd	b	0x10010
+      18:	ea003ffd	b	0x10014
+      1c:	ea003ffd	b	0x10018
+
+_INT_Bootloader_Start:
+    12d4:	e51f101c	ldr	r1, =0xffff9800	; via 0x12c0
+    12d8:	e15f21b2	ldrh	r2, =0x2006	; via 0x12ce
+    12dc:	e1c120b0	strh	r2, [r1]
+    12e0:	e5912000	ldr	r2, [r1]
+    12e4:	e2022001	and	r2, r2, #1
+    12e8:	e3520001	cmp	r2, #1
+    12ec:	0afffffb	beq	0x12e0
+    12f0:	e51f103c	ldr	r1, =0xfffffd00	; via 0x12bc
+    12f4:	e15f23b0	ldrh	r2, =0x1081	; via 0x12cc
+    12f8:	e1c120b0	strh	r2, [r1]
+    12fc:	e51f1040	ldr	r1, =0xfffffb10	; via 0x12c4
+    1300:	e15f23b8	ldrh	r2, =0x800	; via 0x12d0
+    1304:	e1d100b0	ldrh	r0, [r1]
+    1308:	e1800002	orr	r0, r0, r2
+    130c:	e1c100b0	strh	r0, [r1]
+    1310:	e51f1050	ldr	r1, =0xffffff08	; via 0x12c8
+    1314:	e15f24ba	ldrh	r2, =0x0	; via 0x12d2
+    1318:	e1c120b0	strh	r2, [r1]
+    131c:	e51f107c	ldr	r1, =0xfffffb00	; via 0x12a8
+    1320:	e15f27bc	ldrh	r2, =0x2a1	; via 0x12ac
+    1324:	e1c120b0	strh	r2, [r1]
+    1328:	e15f28b2	ldrh	r2, =0x2a1	; via 0x12ae
+    132c:	e1c120b2	strh	r2, [r1, #2]
+    1330:	e15f28b8	ldrh	r2, =0x2a1	; via 0x12b0
+    1334:	e1c120b4	strh	r2, [r1, #4]
+    1338:	e15f28be	ldrh	r2, =0x283	; via 0x12b2
+    133c:	e1c120b6	strh	r2, [r1, #6]
+    1340:	e15f29b4	ldrh	r2, =0x281	; via 0x12b4
+    1344:	e1c120ba	strh	r2, [r1, #10]	; 0xa
+    1348:	e15f29ba	ldrh	r2, =0xc0	; via 0x12b6
+    134c:	e1c120bc	strh	r2, [r1, #12]	; 0xc
+    1350:	e15f2ab0	ldrh	r2, =0x40	; via 0x12b8
+    1354:	e1c120b8	strh	r2, [r1, #8]
+    1358:	e15f2ab6	ldrh	r2, =0x2a	; via 0x12ba
+    135c:	e1c120be	strh	r2, [r1, #14]	; 0xe
+    1360:	e59f0020	ldr	r0, =0x107e32c	; via 0x1388
+    1364:	e3a01b01	mov	r1, #1024	; 0x400
+    1368:	e2411004	sub	r1, r1, #4
+    136c:	e0802001	add	r2, r0, r1
+    1370:	e3c22003	bic	r2, r2, #3
+    1374:	e1a0d002	mov	sp, r2
+    1378:	e92d100f	stmdb	sp!, {r0, r1, r2, r3, r12}
+    137c:	eb000043	bl	0x1490	; _sta_select_application
+    1380:	e8bd100f	ldmia	sp!, {r0, r1, r2, r3, r12}
+    1384:	ea003b33	b	0x10058		; _INT_Initialize
+
+_sta_select_application:
+    1490:	e92d4000	stmdb	sp!, {lr}
+    1494:	e28fe001	add	lr, pc, #1
+    1498:	e12fff1e	bx	lr
+    149c:	f7ff fd71	bl	0xf82	; $sta_select_application
+    14a0:	4778		bx	pc
+    14a2:	46c0		nop			(mov r8, r8)
+    14a4:	e8bd8000	ldmia	sp!, {pc}
+
+    2000:	00000001
+
+.inttext:
+   10000:	ea0000d0	b	0x10348
+   10004:	ea0000d2	b	0x10354
+   10008:	ea0000d4	b	0x10360
+   1000c:	ea0000d6	b	0x1036c
+   10010:	ea0000d8	b	0x10378
+   10014:	ea0000bc	b	0x1030c
+   10018:	ea0000c5	b	0x10334
+
+_c_int00:
+   1001c:	02a102a1
+   10020:	028302a1
+   10024:	02c00e85
+   10028:	002a0040
+   1002c:	fffffb00
+   10030:	fffef006
+   10034:	00000008
+   10038:	fffffd00
+   1003c:	ffff9800
+   10040:	fffffb10
+   10044:	ffffff08
+   10048:	20021081
+   1004c:	f7ff0800
+   10050:	00000000
+   10054:	001f0e34	; cinit
+
+_INT_Initialize:
+   10058:	e51f1024	ldr	r1, =0xffff9800	; via 0x1003c
+   1005c:	e15f21ba	ldrh	r2, =0x2002	; via 0x1004a
+   10060:	e1c120b0	strh	r2, [r1]
+   10064:	e5912000	ldr	r2, [r1]
+   10068:	e2022001	and	r2, r2, #1
+   1006c:	e3520001	cmp	r2, #1
+   10070:	0afffffb	beq	0x10064
+   10074:	e51f1044	ldr	r1, =0xfffffd00	; via 0x10038
+   10078:	e15f23b8	ldrh	r2, =0x1081	; via 0x10048
+   1007c:	e1c120b0	strh	r2, [r1]
+   10080:	e51f1048	ldr	r1, =0xfffffb10	; via 0x10040
+   10084:	e15f23be	ldrh	r2, =0xf7ff	; via 0x1004e
+   10088:	e1d100b0	ldrh	r0, [r1]
+   1008c:	e0000002	and	r0, r0, r2
+   10090:	e1c100b0	strh	r0, [r1]
+   10094:	e51f1058	ldr	r1, =0xffffff08	; via 0x10044
+   10098:	e15f25b0	ldrh	r2, =0x0	; via 0x10050
+   1009c:	e1c120b0	strh	r2, [r1]
+   100a0:	e51f107c	ldr	r1, =0xfffffb00	; via 0x1002c
+   100a4:	e15f29b0	ldrh	r2, =0x2a1	; via 0x1001c
+   100a8:	e1c120b0	strh	r2, [r1]
+   100ac:	e15f29b6	ldrh	r2, =0x2a1	; via 0x1001e
+   100b0:	e1c120b2	strh	r2, [r1, #2]
+   100b4:	e15f29bc	ldrh	r2, =0x2a1	; via 0x10020
+   100b8:	e1c120b4	strh	r2, [r1, #4]
+   100bc:	e15f2ab2	ldrh	r2, =0x283	; via 0x10022
+   100c0:	e1c120b6	strh	r2, [r1, #6]
+   100c4:	e15f2ab8	ldrh	r2, =0xe85	; via 0x10024
+   100c8:	e1c120ba	strh	r2, [r1, #10]	; 0xa
+   100cc:	e15f2abe	ldrh	r2, =0x2c0	; via 0x10026
+   100d0:	e1c120bc	strh	r2, [r1, #12]	; 0xc
+   100d4:	e15f2bb4	ldrh	r2, =0x40	; via 0x10028
+   100d8:	e1c120b8	strh	r2, [r1, #8]
+   100dc:	e15f2bba	ldrh	r2, =0x2a	; via 0x1002a
+   100e0:	e1c120be	strh	r2, [r1, #14]	; 0xe
+   100e4:	e51f10bc	ldr	r1, =0xfffef006	; via 0x10030
+   100e8:	e1d120b0	ldrh	r2, [r1]
+   100ec:	e51f00c0	ldr	r0, =0x8	; via 0x10034
+   100f0:	e1800002	orr	r0, r0, r2
+   100f4:	e1c100b0	strh	r0, [r1]
+   100f8:	e10f0000	mrs	r0, CPSR
+   100fc:	e3c0001f	bic	r0, r0, #31	; 0x1f
+   10100:	e3800013	orr	r0, r0, #19	; 0x13
+   10104:	e38000c0	orr	r0, r0, #192	; 0xc0
+   10108:	e129f000	msr	CPSR_fc, r0
+   1010c:	e59f0340	ldr	r0, =0x107e418	; via 0x10454
+   10110:	e3a01b01	mov	r1, #1024	; 0x400
+   10114:	e2411004	sub	r1, r1, #4
+   10118:	e0802001	add	r2, r0, r1
+   1011c:	e1a0d002	mov	sp, r2
+   10120:	e92d000f	stmdb	sp!, {r0, r1, r2, r3}
+   10124:	e59f0318	ldr	r0, =0x1000cf4	; via 0x10444
+   10128:	e59f2318	ldr	r2, =0x107e32c	; via 0x10448
+   1012c:	e0422000	sub	r2, r2, r0
+   10130:	e3a01000	mov	r1, #0
+   10134:	eb0000e1	bl	0x104c0
+   10138:	e59f030c	ldr	r0, =0x800000	; via 0x1044c
+   1013c:	e59f230c	ldr	r2, =0x81d448	; via 0x10450
+   10140:	e0422000	sub	r2, r2, r0
+   10144:	e3a01000	mov	r1, #0
+   10148:	eb0000dc	bl	0x104c0
+   1014c:	e8bd000f	ldmia	sp!, {r0, r1, r2, r3}
+   10150:	e3a00001	mov	r0, #1
+   10154:	e59f12fc	ldr	r1, =0x107e254	; via 0x10458
+   10158:	e5810000	str	r0, [r1]
+   1015c:	e59f02f0	ldr	r0, =0x107e418	; via 0x10454
+   10160:	e3a01b01	mov	r1, #1024	; 0x400
+   10164:	e2411004	sub	r1, r1, #4
+   10168:	e0802001	add	r2, r0, r1
+   1016c:	e1a0a000	mov	r10, r0
+   10170:	e59f32e4	ldr	r3, =0x804978	; via 0x1045c
+   10174:	e583a000	str	r10, [r3]
+   10178:	e1a0d002	mov	sp, r2
+   1017c:	e59f32dc	ldr	r3, =0x804a9c	; via 0x10460
+   10180:	e583d000	str	sp, [r3]
+   10184:	e3a01080	mov	r1, #128	; 0x80
+   10188:	e0822001	add	r2, r2, r1
+   1018c:	e10f0000	mrs	r0, CPSR
+   10190:	e3c0001f	bic	r0, r0, #31	; 0x1f
+   10194:	e3800012	orr	r0, r0, #18	; 0x12
+   10198:	e129f000	msr	CPSR_fc, r0
+   1019c:	e1a0d002	mov	sp, r2
+   101a0:	e3a01c02	mov	r1, #512	; 0x200
+   101a4:	e0822001	add	r2, r2, r1
+   101a8:	e10f0000	mrs	r0, CPSR
+   101ac:	e3c0001f	bic	r0, r0, #31	; 0x1f
+   101b0:	e3800011	orr	r0, r0, #17	; 0x11
+   101b4:	e129f000	msr	CPSR_fc, r0
+   101b8:	e1a0d002	mov	sp, r2
+   101bc:	e10f0000	mrs	r0, CPSR
+   101c0:	e3c0001f	bic	r0, r0, #31	; 0x1f
+   101c4:	e3800017	orr	r0, r0, #23	; 0x17
+   101c8:	e129f000	msr	CPSR_fc, r0
+   101cc:	e59fd29c	ldr	sp, =0x107e380	; via 0x10470
+   101d0:	e10f0000	mrs	r0, CPSR
+   101d4:	e3c0001f	bic	r0, r0, #31	; 0x1f
+   101d8:	e380001b	orr	r0, r0, #27	; 0x1b
+   101dc:	e129f000	msr	CPSR_fc, r0
+   101e0:	e59fd288	ldr	sp, =0x107e380	; via 0x10470
+   101e4:	e10f0000	mrs	r0, CPSR
+   101e8:	e3c0001f	bic	r0, r0, #31	; 0x1f
+   101ec:	e3800013	orr	r0, r0, #19	; 0x13
+   101f0:	e129f000	msr	CPSR_fc, r0
+   101f4:	e59f3268	ldr	r3, =0x8048e0	; via 0x10464
+   101f8:	e2822004	add	r2, r2, #4
+   101fc:	e5832000	str	r2, [r3]
+   10200:	e3a01b01	mov	r1, #1024	; 0x400
+   10204:	e3c11003	bic	r1, r1, #3
+   10208:	e0822001	add	r2, r2, r1
+   1020c:	e59f3254	ldr	r3, =0x804964	; via 0x10468
+   10210:	e5831000	str	r1, [r3]
+   10214:	e3a01002	mov	r1, #2
+   10218:	e59f324c	ldr	r3, =0x804974	; via 0x1046c
+   1021c:	e5831000	str	r1, [r3]
+   10220:	e1a04002	mov	r4, r2
+   10224:	eb076638	bl	0x1e9b0c	; _f_load_int_mem
+   10228:	e1a02004	mov	r2, r4
+   1022c:	e59f1228	ldr	r1, =0x804978	; via 0x1045c
+   10230:	e5910000	ldr	r0, [r1]
+   10234:	e3a030fe	mov	r3, #254	; 0xfe
+   10238:	e5c03000	strb	r3, [r0]
+   1023c:	e5c03001	strb	r3, [r0, #1]
+   10240:	e5c03002	strb	r3, [r0, #2]
+   10244:	e5c03003	strb	r3, [r0, #3]
+   10248:	e4903004	ldr	r3, [r0], #4
+   1024c:	e4803004	str	r3, [r0], #4
+   10250:	e1500002	cmp	r0, r2
+   10254:	bafffffc	blt	0x1024c
+   10258:	e51f020c	ldr	r0, =0x1f0e34	; via 0x10054
+   1025c:	e3700001	cmn	r0, #1
+   10260:	1b000084	blne	0x10478
+   10264:	e1a00002	mov	r0, r2
+   10268:	ea07814e	b	0x1f07a8	; _INC_Initialize
+
+$Init_Target:
+  1d98d4:	b570		push	{r4, r5, r6, lr}
+  1d98d6:	b081		sub	sp, #4
+  1d98d8:	4d84		ldr	r5, =0xfffef008	; via 0x1d9aec
+  1d98da:	2003		mov	r0, #3
+  1d98dc:	0340		lsl	r0, r0, #13
+  1d98de:	8028		strh	r0, [r5, #0]
+  1d98e0:	f00d fe2a	bl	0x1e7538
+  1d98e4:	4882		ldr	r0, =0xfffffd02	; via 0x1d9af0
+  1d98e6:	2105		mov	r1, #5
+  1d98e8:	8802		ldrh	r2, [r0, #0]
+  1d98ea:	4311		orr	r1, r2
+  1d98ec:	8001		strh	r1, [r0, #0]
+  1d98ee:	4981		ldr	r1, =0xff3f	; via 0x1d9af4
+  1d98f0:	8802		ldrh	r2, [r0, #0]
+  1d98f2:	4011		and	r1, r2
+  1d98f4:	8001		strh	r1, [r0, #0]
+  1d98f6:	2180		mov	r1, #128	; 0x80
+  1d98f8:	8802		ldrh	r2, [r0, #0]
+  1d98fa:	4311		orr	r1, r2
+  1d98fc:	8001		strh	r1, [r0, #0]
+  1d98fe:	497e		ldr	r1, =0xffdf	; via 0x1d9af8
+  1d9900:	8802		ldrh	r2, [r0, #0]
+  1d9902:	4011		and	r1, r2
+  1d9904:	8001		strh	r1, [r0, #0]
+  1d9906:	4e7d		ldr	r6, =0xfffff900	; via 0x1d9afc
+  1d9908:	20ff		mov	r0, #255	; 0xff
+  1d990a:	0200		lsl	r0, r0, #8
+  1d990c:	8030		strh	r0, [r6, #0]
+  1d990e:	4c7c		ldr	r4, =0xffff9800	; via 0x1d9b00
+  1d9910:	487c		ldr	r0, =0xfff3	; via 0x1d9b04
+  1d9912:	8821		ldrh	r1, [r4, #0]
+  1d9914:	4008		and	r0, r1
+  1d9916:	8020		strh	r0, [r4, #0]
+  1d9918:	8820		ldrh	r0, [r4, #0]
+  1d991a:	8020		strh	r0, [r4, #0]
+  1d991c:	487a		ldr	r0, =0xf01f	; via 0x1d9b08
+  1d991e:	8821		ldrh	r1, [r4, #0]
+  1d9920:	4008		and	r0, r1
+  1d9922:	8020		strh	r0, [r4, #0]
+  1d9924:	2001		mov	r0, #1
+  1d9926:	0280		lsl	r0, r0, #10
+  1d9928:	8821		ldrh	r1, [r4, #0]
+  1d992a:	4308		orr	r0, r1
+  1d992c:	8020		strh	r0, [r4, #0]
+  1d992e:	2000		mov	r0, #0
+  1d9930:	2102		mov	r1, #2
+  1d9932:	2200		mov	r2, #0
+  1d9934:	f00e fa3c	bl	0x1e7db0
+  1d9938:	4974		ldr	r1, =0xfffffb00	; via 0x1d9b0c
+  1d993a:	20a3		mov	r0, #163	; 0xa3
+  1d993c:	8008		strh	r0, [r1, #0]
+  1d993e:	8048		strh	r0, [r1, #2]
+  1d9940:	22a5		mov	r2, #165	; 0xa5
+  1d9942:	808a		strh	r2, [r1, #4]
+  1d9944:	80c8		strh	r0, [r1, #6]
+  1d9946:	2080		mov	r0, #128	; 0x80
+  1d9948:	8148		strh	r0, [r1, #10]	; 0xa
+  1d994a:	20c0		mov	r0, #192	; 0xc0
+  1d994c:	8188		strh	r0, [r1, #12]	; 0xc
+  1d994e:	2040		mov	r0, #64	; 0x40
+  1d9950:	8108		strh	r0, [r1, #8]
+  1d9952:	2020		mov	r0, #32	; 0x20
+  1d9954:	8070		strh	r0, [r6, #2]
+  1d9956:	2000		mov	r0, #0
+  1d9958:	80b0		strh	r0, [r6, #4]
+  1d995a:	2010		mov	r0, #16	; 0x10
+  1d995c:	8821		ldrh	r1, [r4, #0]
+  1d995e:	4308		orr	r0, r1
+  1d9960:	8020		strh	r0, [r4, #0]
+  1d9962:	486b		ldr	r0, =0xfffffa08	; via 0x1d9b10
+  1d9964:	496b		ldr	r1, =0xffff	; via 0x1d9b14
+  1d9966:	8001		strh	r1, [r0, #0]
+  1d9968:	8041		strh	r1, [r0, #2]
+  1d996a:	2103		mov	r1, #3
+  1d996c:	8181		strh	r1, [r0, #12]	; 0xc
+  1d996e:	f00c fce7	bl	0x1e6340
+  1d9972:	4869		ldr	r0, =0xfffffc00	; via 0x1d9b18
+  1d9974:	2124		mov	r1, #36	; 0x24
+  1d9976:	8001		strh	r1, [r0, #0]
+  1d9978:	210d		mov	r1, #13	; 0xd
+  1d997a:	8041		strh	r1, [r0, #2]
+  1d997c:	2400		mov	r4, #0
+  1d997e:	4867		ldr	r0, =0xfffe2016	; via 0x1d9b1c
+  1d9980:	8004		strh	r4, [r0, #0]
+  1d9982:	4967		ldr	r1, =0xfffe2014	; via 0x1d9b20
+  1d9984:	2002		mov	r0, #2
+  1d9986:	8008		strh	r0, [r1, #0]
+  1d9988:	4966		ldr	r1, =0xfffe2002	; via 0x1d9b24
+  1d998a:	2084		mov	r0, #132	; 0x84
+  1d998c:	8008		strh	r0, [r1, #0]
+  1d998e:	4866		ldr	r0, =0xfffe2000	; via 0x1d9b28
+  1d9990:	4966		ldr	r1, =0x3de0	; via 0x1d9b2c
+  1d9992:	8001		strh	r1, [r0, #0]
+  1d9994:	4a66		ldr	r2, =0xfffe2022	; via 0x1d9b30
+  1d9996:	210c		mov	r1, #12	; 0xc
+  1d9998:	8011		strh	r1, [r2, #0]
+  1d999a:	4a66		ldr	r2, =0xfffe2020	; via 0x1d9b34
+  1d999c:	4966		ldr	r1, =0x45a	; via 0x1d9b38
+  1d999e:	8011		strh	r1, [r2, #0]
+  1d99a0:	4a66		ldr	r2, =0xfffe201e	; via 0x1d9b3c
+  1d99a2:	21a5		mov	r1, #165	; 0xa5
+  1d99a4:	0089		lsl	r1, r1, #2
+  1d99a6:	8011		strh	r1, [r2, #0]
+  1d99a8:	4a65		ldr	r2, =0xfffe201c	; via 0x1d9b40
+  1d99aa:	211f		mov	r1, #31	; 0x1f
+  1d99ac:	8011		strh	r1, [r2, #0]
+  1d99ae:	4965		ldr	r1, =0xfffe2024	; via 0x1d9b44
+  1d99b0:	800c		strh	r4, [r1, #0]
+  1d99b2:	4b65		ldr	r3, =0xfffe2010	; via 0x1d9b48
+  1d99b4:	2202		mov	r2, #2
+  1d99b6:	8819		ldrh	r1, [r3, #0]
+  1d99b8:	430a		orr	r2, r1
+  1d99ba:	801a		strh	r2, [r3, #0]
+  1d99bc:	4a62		ldr	r2, =0xfffe2010	; via 0x1d9b48
+  1d99be:	2104		mov	r1, #4
+  1d99c0:	8813		ldrh	r3, [r2, #0]
+  1d99c2:	4319		orr	r1, r3
+  1d99c4:	8011		strh	r1, [r2, #0]
+  1d99c6:	2127		mov	r1, #39	; 0x27
+  1d99c8:	80a9		strh	r1, [r5, #4]
+  1d99ca:	8a01		ldrh	r1, [r0, #16]	; 0x10
+  1d99cc:	0849		lsr	r1, r1, #1
+  1d99ce:	d30f		bcc	0x1d99f0
+  1d99d0:	8a01		ldrh	r1, [r0, #16]	; 0x10
+  1d99d2:	0409		lsl	r1, r1, #16
+  1d99d4:	0c49		lsr	r1, r1, #17
+  1d99d6:	0049		lsl	r1, r1, #1
+  1d99d8:	8201		strh	r1, [r0, #16]	; 0x10
+  1d99da:	2101		mov	r1, #1
+  1d99dc:	e001		b	0x1d99e2
+  1d99de:	9900		ldr	r1, [sp, #0]
+  1d99e0:	3101		add	r1, #1
+  1d99e2:	9100		str	r1, [sp, #0]
+  1d99e4:	9900		ldr	r1, [sp, #0]
+  1d99e6:	2932		cmp	r1, #50	; 0x32
+  1d99e8:	d3f9		bcc	0x1d99de
+  1d99ea:	8a41		ldrh	r1, [r0, #18]	; 0x12
+  1d99ec:	2900		cmp	r1, #0
+  1d99ee:	d0fc		beq	0x1d99ea
+  1d99f0:	f00e fb69	bl	0x1e80c6
+  1d99f4:	f00e fb6d	bl	0x1e80d2
+  1d99f8:	2027		mov	r0, #39	; 0x27
+  1d99fa:	0500		lsl	r0, r0, #20
+  1d99fc:	8004		strh	r4, [r0, #0]
+  1d99fe:	2001		mov	r0, #1
+  1d9a00:	f00d fda8	bl	0x1e7554
+  1d9a04:	2002		mov	r0, #2
+  1d9a06:	f00d fda5	bl	0x1e7554
+  1d9a0a:	b001		add	sp, #4
+  1d9a0c:	bd70		pop	{r4, r5, r6, pc}
+
+$HighGPIO:
+  1d9a0e:	4a4f		ldr	r2, =0xfffe4802	; via 0x1d9b4c
+  1d9a10:	2101		mov	r1, #1
+  1d9a12:	4081		lsl	r1, r0
+  1d9a14:	8810		ldrh	r0, [r2, #0]
+  1d9a16:	4301		orr	r1, r0
+  1d9a18:	8011		strh	r1, [r2, #0]
+  1d9a1a:	4770		bx	lr
+
+$LowGPIO:
+  1d9a1c:	4a4b		ldr	r2, =0xfffe4802	; via 0x1d9b4c
+  1d9a1e:	2101		mov	r1, #1
+  1d9a20:	4081		lsl	r1, r0
+  1d9a22:	8810		ldrh	r0, [r2, #0]
+  1d9a24:	4388		bic	r0, r1
+  1d9a26:	8010		strh	r0, [r2, #0]
+  1d9a28:	4770		bx	lr
+
+$CongiureGPIO_Internal:
+  1d9a2a:	b510		push	{r4, lr}
+  1d9a2c:	1c04		add	r4, r0, #0
+  1d9a2e:	4948		ldr	r1, =0xfffe481a	; via 0x1d9b50
+  1d9a30:	200f		mov	r0, #15	; 0xf
+  1d9a32:	8008		strh	r0, [r1, #0]
+  1d9a34:	1c20		add	r0, r4, #0
+  1d9a36:	f00e fb23	bl	0x1e8080
+  1d9a3a:	1c20		add	r0, r4, #0
+  1d9a3c:	f00e fb2e	bl	0x1e809c
+  1d9a40:	2800		cmp	r0, #0
+  1d9a42:	d101		bne	0x1d9a48
+  1d9a44:	2101		mov	r1, #1
+  1d9a46:	e000		b	0x1d9a4a
+  1d9a48:	2100		mov	r1, #0
+  1d9a4a:	0420		lsl	r0, r4, #16
+  1d9a4c:	0c00		lsr	r0, r0, #16
+  1d9a4e:	f00e fb71	bl	0x1e8134
+  1d9a52:	2002		mov	r0, #2
+  1d9a54:	f00e fb7d	bl	0x1e8152
+  1d9a58:	bd10		pop	{r4, pc}
+
+$CongiureGPIO_External:
+  1d9a5a:	b510		push	{r4, lr}
+  1d9a5c:	1c04		add	r4, r0, #0
+  1d9a5e:	493c		ldr	r1, =0xfffe481a	; via 0x1d9b50
+  1d9a60:	200f		mov	r0, #15	; 0xf
+  1d9a62:	8008		strh	r0, [r1, #0]
+  1d9a64:	1c20		add	r0, r4, #0
+  1d9a66:	f00e fb12	bl	0x1e808e
+  1d9a6a:	1c20		add	r0, r4, #0
+  1d9a6c:	f00e fb16	bl	0x1e809c
+  1d9a70:	2800		cmp	r0, #0
+  1d9a72:	d101		bne	0x1d9a78
+  1d9a74:	2101		mov	r1, #1
+  1d9a76:	e000		b	0x1d9a7a
+  1d9a78:	2100		mov	r1, #0
+  1d9a7a:	0420		lsl	r0, r4, #16
+  1d9a7c:	0c00		lsr	r0, r0, #16
+  1d9a7e:	f00e fb59	bl	0x1e8134
+  1d9a82:	2002		mov	r0, #2
+  1d9a84:	f00e fb65	bl	0x1e8152
+  1d9a88:	bd10		pop	{r4, pc}
+
+$Init_Drivers:
+  1d9a8a:	b500		push	{lr}
+  1d9a8c:	f7c0 fd0c	bl	0x19a4a8
+  1d9a90:	f7d3 fe6d	bl	0x1ad76e
+  1d9a94:	f760 fd49	bl	0x13a52a
+  1d9a98:	f77b fd7c	bl	0x155594
+  1d9a9c:	f7e0 f8a0	bl	0x1b9be0
+  1d9aa0:	f74a ff4a	bl	0x124938
+  1d9aa4:	bd00		pop	{pc}
+
+$Init_Serial_Flows:
+  1d9aa6:	b500		push	{lr}
+  1d9aa8:	482a		ldr	r0, =0x107d828	; via 0x1d9b54
+  1d9aaa:	f7be fded	bl	0x198688
+  1d9aae:	2000		mov	r0, #0
+  1d9ab0:	2103		mov	r1, #3
+  1d9ab2:	2200		mov	r2, #0
+  1d9ab4:	f7be fe89	bl	0x1987ca
+  1d9ab8:	f7be fee3	bl	0x198882
+  1d9abc:	4926		ldr	r1, =0xfffe4804	; via 0x1d9b58
+  1d9abe:	2004		mov	r0, #4
+  1d9ac0:	880a		ldrh	r2, [r1, #0]
+  1d9ac2:	4310		orr	r0, r2
+  1d9ac4:	8008		strh	r0, [r1, #0]
+  1d9ac6:	bd00		pop	{pc}
+
+$Init_Unmask_IT:
+  1d9ac8:	b500		push	{lr}
+  1d9aca:	2004		mov	r0, #4
+  1d9acc:	f00c fc99	bl	0x1e6402
+  1d9ad0:	2012		mov	r0, #18	; 0x12
+  1d9ad2:	f00c fc96	bl	0x1e6402
+  1d9ad6:	2007		mov	r0, #7
+  1d9ad8:	f00c fc93	bl	0x1e6402
+  1d9adc:	2008		mov	r0, #8
+  1d9ade:	f00c fc90	bl	0x1e6402
+  1d9ae2:	200f		mov	r0, #15	; 0xf
+  1d9ae4:	f00c fc8d	bl	0x1e6402
+  1d9ae8:	bd00		pop	{pc}
+  1d9aea:	46c0		nop			(mov r8, r8)
+
+$INC_Initialize:
+  1ef68c:	b530		push	{r4, r5, lr}
+  1ef68e:	1c05		add	r5, r0, #0
+  1ef690:	4c13		ldr	r4, =0x107e23c	; via 0x1ef6e0
+  1ef692:	2001		mov	r0, #1
+  1ef694:	6020		str	r0, [r4, #0]
+  1ef696:	f001 fbc5	bl	0x1f0e24
+  1ef69a:	f001 fbc7	bl	0x1f0e2c
+  1ef69e:	f001 fb89	bl	0x1f0db4
+  1ef6a2:	f000 fc87	bl	0x1effb4
+  1ef6a6:	f7fb ffc5	bl	0x1eb634
+  1ef6aa:	f000 ff0d	bl	0x1f04c8
+  1ef6ae:	f000 fedb	bl	0x1f0468
+  1ef6b2:	f000 fef9	bl	0x1f04a8
+  1ef6b6:	f000 fec7	bl	0x1f0448
+  1ef6ba:	f000 ff25	bl	0x1f0508
+  1ef6be:	f000 fee3	bl	0x1f0488
+  1ef6c2:	f000 ff31	bl	0x1f0528
+  1ef6c6:	f7fe f921	bl	0x1ed90c
+  1ef6ca:	f000 ff0d	bl	0x1f04e8
+  1ef6ce:	1c28		add	r0, r5, #0
+  1ef6d0:	f000 ff86	bl	0x1f05e0	; $Application_Initialize
+  1ef6d4:	2002		mov	r0, #2
+  1ef6d6:	6020		str	r0, [r4, #0]
+  1ef6d8:	f076 f872	bl	0x2657c0
+  1ef6dc:	bd30		pop	{r4, r5, pc}
+  1ef6de:	46c0		nop			(mov r8, r8)
+
+$Application_Initialize:
+  1f05e0:	b500		push	{lr}
+  1f05e2:	f7e9 f977	bl	0x1d98d4	; $Init_Target
+  1f05e6:	f7e9 fa50	bl	0x1d9a8a	; $Init_Drivers
+  1f05ea:	f075 fa29	bl	0x265a40	; $Cust_Init_Layer1
+  1f05ee:	f7e9 fa5a	bl	0x1d9aa6	; $Init_Serial_Flows
+  1f05f2:	f773 ff32	bl	0x16445a	; $StartFrame
+  1f05f6:	f7e9 fa67	bl	0x1d9ac8	; $Init_Unmask_IT
+  1f05fa:	bd00		pop	{pc}
+
+_INC_Initialize:
+  1f07a8:	e92d4000	stmdb	sp!, {lr}
+  1f07ac:	e28fe001	add	lr, pc, #1
+  1f07b0:	e12fff1e	bx	lr
+  1f07b4:	f7fe ff6a	bl	0x1ef68c	; $INC_Initialize
+  1f07b8:	4778		bx	pc
+  1f07ba:	46c0		nop			(mov r8, r8)
+  1f07bc:	e8bd8000	ldmia	sp!, {pc}