view benq-fw-disasm @ 392:35009c936a4a

compal/melody-extr: first attempt at actual melody extraction
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 01 Apr 2022 06:03:47 +0000
parents 42575bc59702
children
line wrap: on
line source

; The present work is a disassembly analysis of the firmware image
; read out of a BenQ M32 module.  I have only dug far enough to get
; to the Init_Target() function; my original goal was to see the MEMIF
; setup done therein, which has been successfully located (0x00A3 for
; nCS0, nCS1 and nCS2, totally vanilla), but we've also got a couple of
; surprise discoveries:
;
; 1) It appears that BenQ put their XRAM on Calypso nCS2 instead of
;    the canonical placement on nCS1.
;
; 2) Even though the D751774AZHH Calypso chip found in this module
;    is supposed to be a C035 variant, not C05, the PLL setup is done
;    the way TI did it for D-Sample C05: the PLL multiplier is set to 6
;    rather than 8, so the DSP gets 78 MHz instead of 104 MHz and the
;    ARM gets 39 MHz instead of 52 MHz.
;
; The code is very heavily modified relative to TI's original; in those
; places where some TI's original code shines through, it is closer
; to the old DSample-20020917 specimen than to Openmoko-era TCS211.

; Flash boot mode 1 reset entry
       0:	ea004015	b	0x1005c
       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

    2000:	00000001

; mysterious routine called from the assembly boot path,
; implements some kind of interrupt-boot mechanism via the MODEM UART
    7890:	e59f2438	ldr	r2, =0xfffff804	; via 0x7cd0
    7894:	e3a010f5	mov	r1, #245	; 0xf5
    7898:	e1c210b0	strh	r1, [r2]
    789c:	e3a010a0	mov	r1, #160	; 0xa0
    78a0:	e1c210b0	strh	r1, [r2]
    78a4:	e59f03fc	ldr	r0, =0xffff5800	; via 0x7ca8
    78a8:	e59f13fc	ldr	r1, =0xbf	; via 0x7cac
    78ac:	e5c01003	strb	r1, [r0, #3]
    78b0:	e59f13f4	ldr	r1, =0xbf	; via 0x7cac
    78b4:	e5c01003	strb	r1, [r0, #3]
    78b8:	e3a01018	mov	r1, #24	; 0x18
    78bc:	e5c01002	strb	r1, [r0, #2]
    78c0:	e3a01011	mov	r1, #17	; 0x11
    78c4:	e5c01004	strb	r1, [r0, #4]
    78c8:	e3a01013	mov	r1, #19	; 0x13
    78cc:	e5c01006	strb	r1, [r0, #6]
    78d0:	e59f13e4	ldr	r1, =0x0	; via 0x7cbc
    78d4:	e5c01003	strb	r1, [r0, #3]
    78d8:	e3a01000	mov	r1, #0
    78dc:	e5c01001	strb	r1, [r0, #1]
    78e0:	e59f13c4	ldr	r1, =0xbf	; via 0x7cac
    78e4:	e5c01003	strb	r1, [r0, #3]
    78e8:	e3a01007	mov	r1, #7
    78ec:	e5c01000	strb	r1, [r0]
    78f0:	e3a01000	mov	r1, #0
    78f4:	e5c01001	strb	r1, [r0, #1]
    78f8:	e59f13b0	ldr	r1, =0x13	; via 0x7cb0
    78fc:	e5c01003	strb	r1, [r0, #3]
    7900:	e3a01040	mov	r1, #64	; 0x40
    7904:	e5c01004	strb	r1, [r0, #4]
    7908:	e3a0100f	mov	r1, #15	; 0xf
    790c:	e5c01006	strb	r1, [r0, #6]
    7910:	e59f1394	ldr	r1, =0xbf	; via 0x7cac
    7914:	e5c01003	strb	r1, [r0, #3]
    7918:	e59f1390	ldr	r1, =0x13	; via 0x7cb0
    791c:	e5c01003	strb	r1, [r0, #3]
    7920:	e3a01000	mov	r1, #0
    7924:	e5c01010	strb	r1, [r0, #16]	; 0x10
    7928:	e59f1384	ldr	r1, =0x6	; via 0x7cb4
    792c:	e5c01002	strb	r1, [r0, #2]
    7930:	e3a0100f	mov	r1, #15	; 0xf
    7934:	e5c01004	strb	r1, [r0, #4]
    7938:	e3a010f1	mov	r1, #241	; 0xf1
    793c:	e5c01002	strb	r1, [r0, #2]
    7940:	e59f1370	ldr	r1, =0x7	; via 0x7cb8
    7944:	e5c01008	strb	r1, [r0, #8]
    7948:	e3a01ffa	mov	r1, #1000	; 0x3e8
    794c:	e2411001	sub	r1, r1, #1
    7950:	e3510000	cmp	r1, #0
    7954:	1afffffc	bne	0x794c
    7958:	e59f135c	ldr	r1, =0x0	; via 0x7cbc
    795c:	e5c01008	strb	r1, [r0, #8]
    7960:	e3a030ff	mov	r3, #255	; 0xff
    7964:	e59f2368	ldr	r2, =0x1870bf0	; via 0x7cd4
    7968:	e5c23000	strb	r3, [r2]
    796c:	e3a0200a	mov	r2, #10	; 0xa
    7970:	e3a08801	mov	r8, #65536	; 0x10000
    7974:	e2488001	sub	r8, r8, #1
    7978:	e3580000	cmp	r8, #0
    797c:	0a00000b	beq	0x79b0
    7980:	e5d01005	ldrb	r1, [r0, #5]
    7984:	e3110001	tst	r1, #1
    7988:	0afffff9	beq	0x7974
    798c:	e5d01000	ldrb	r1, [r0]
    7990:	e3510000	cmp	r1, #0
    7994:	1a000003	bne	0x79a8
    7998:	e2422001	sub	r2, r2, #1
    799c:	e3520000	cmp	r2, #0
    79a0:	0a000042	beq	0x7ab0
    79a4:	eafffff2	b	0x7974
    79a8:	e3a0200a	mov	r2, #10	; 0xa
    79ac:	eafffff0	b	0x7974
    79b0:	e59f02f0	ldr	r0, =0xffff5800	; via 0x7ca8
    79b4:	e59f12f0	ldr	r1, =0xbf	; via 0x7cac
    79b8:	e5c01003	strb	r1, [r0, #3]
    79bc:	e59f12e8	ldr	r1, =0xbf	; via 0x7cac
    79c0:	e5c01003	strb	r1, [r0, #3]
    79c4:	e3a01018	mov	r1, #24	; 0x18
    79c8:	e5c01002	strb	r1, [r0, #2]
    79cc:	e3a01011	mov	r1, #17	; 0x11
    79d0:	e5c01004	strb	r1, [r0, #4]
    79d4:	e3a01013	mov	r1, #19	; 0x13
    79d8:	e5c01006	strb	r1, [r0, #6]
    79dc:	e59f12d8	ldr	r1, =0x0	; via 0x7cbc
    79e0:	e5c01003	strb	r1, [r0, #3]
    79e4:	e3a01000	mov	r1, #0
    79e8:	e5c01001	strb	r1, [r0, #1]
    79ec:	e59f12b8	ldr	r1, =0xbf	; via 0x7cac
    79f0:	e5c01003	strb	r1, [r0, #3]
    79f4:	e3a01002	mov	r1, #2
    79f8:	e5c01000	strb	r1, [r0]
    79fc:	e3a01000	mov	r1, #0
    7a00:	e5c01001	strb	r1, [r0, #1]
    7a04:	e59f12a4	ldr	r1, =0x13	; via 0x7cb0
    7a08:	e5c01003	strb	r1, [r0, #3]
    7a0c:	e3a01040	mov	r1, #64	; 0x40
    7a10:	e5c01004	strb	r1, [r0, #4]
    7a14:	e3a0100f	mov	r1, #15	; 0xf
    7a18:	e5c01006	strb	r1, [r0, #6]
    7a1c:	e59f1288	ldr	r1, =0xbf	; via 0x7cac
    7a20:	e5c01003	strb	r1, [r0, #3]
    7a24:	e59f1284	ldr	r1, =0x13	; via 0x7cb0
    7a28:	e5c01003	strb	r1, [r0, #3]
    7a2c:	e3a01000	mov	r1, #0
    7a30:	e5c01010	strb	r1, [r0, #16]	; 0x10
    7a34:	e59f1278	ldr	r1, =0x6	; via 0x7cb4
    7a38:	e5c01002	strb	r1, [r0, #2]
    7a3c:	e3a0100f	mov	r1, #15	; 0xf
    7a40:	e5c01004	strb	r1, [r0, #4]
    7a44:	e3a010f1	mov	r1, #241	; 0xf1
    7a48:	e5c01002	strb	r1, [r0, #2]
    7a4c:	e59f1264	ldr	r1, =0x7	; via 0x7cb8
    7a50:	e5c01008	strb	r1, [r0, #8]
    7a54:	e3a01ffa	mov	r1, #1000	; 0x3e8
    7a58:	e2411001	sub	r1, r1, #1
    7a5c:	e3510000	cmp	r1, #0
    7a60:	1afffffc	bne	0x7a58
    7a64:	e59f1250	ldr	r1, =0x0	; via 0x7cbc
    7a68:	e5c01008	strb	r1, [r0, #8]
    7a6c:	e3a0200a	mov	r2, #10	; 0xa
    7a70:	e3a08801	mov	r8, #65536	; 0x10000
    7a74:	e2488001	sub	r8, r8, #1
    7a78:	e3580000	cmp	r8, #0
    7a7c:	0a0021d9	beq	0x101e8
    7a80:	e5d01005	ldrb	r1, [r0, #5]
    7a84:	e3110001	tst	r1, #1
    7a88:	0afffff9	beq	0x7a74
    7a8c:	e5d01000	ldrb	r1, [r0]
    7a90:	e3510000	cmp	r1, #0
    7a94:	1a000003	bne	0x7aa8
    7a98:	e2422001	sub	r2, r2, #1
    7a9c:	e3520000	cmp	r2, #0
    7aa0:	0a000002	beq	0x7ab0
    7aa4:	eafffff2	b	0x7a74
    7aa8:	e3a0200a	mov	r2, #10	; 0xa
    7aac:	eafffff0	b	0x7a74
    7ab0:	e3a0200a	mov	r2, #10	; 0xa
    7ab4:	e3a08801	mov	r8, #65536	; 0x10000
    7ab8:	e2488001	sub	r8, r8, #1
    7abc:	e3580000	cmp	r8, #0
    7ac0:	0a0021c8	beq	0x101e8
    7ac4:	e5d01005	ldrb	r1, [r0, #5]
    7ac8:	e3110001	tst	r1, #1
    7acc:	0afffff9	beq	0x7ab8
    7ad0:	e5d01000	ldrb	r1, [r0]
    7ad4:	e3510000	cmp	r1, #0
    7ad8:	1a000003	bne	0x7aec
    7adc:	e2422001	sub	r2, r2, #1
    7ae0:	e3520000	cmp	r2, #0
    7ae4:	0a000002	beq	0x7af4
    7ae8:	eafffff2	b	0x7ab8
    7aec:	e3a0200a	mov	r2, #10	; 0xa
    7af0:	eafffff0	b	0x7ab8
    7af4:	e3a010ee	mov	r1, #238	; 0xee
    7af8:	e5c01000	strb	r1, [r0]
    7afc:	e3a01066	mov	r1, #102	; 0x66
    7b00:	e5c01000	strb	r1, [r0]
    7b04:	e3a02012	mov	r2, #18	; 0x12
    7b08:	e3a08801	mov	r8, #65536	; 0x10000
    7b0c:	e2488001	sub	r8, r8, #1
    7b10:	e3580000	cmp	r8, #0
    7b14:	0a0021b3	beq	0x101e8
    7b18:	e5d01005	ldrb	r1, [r0, #5]
    7b1c:	e3110001	tst	r1, #1
    7b20:	0afffff9	beq	0x7b0c
    7b24:	e5d01000	ldrb	r1, [r0]
    7b28:	e3510000	cmp	r1, #0
    7b2c:	1a000003	bne	0x7b40
    7b30:	e2422001	sub	r2, r2, #1
    7b34:	e3520000	cmp	r2, #0
    7b38:	0a0021aa	beq	0x101e8
    7b3c:	eafffff2	b	0x7b0c
    7b40:	e3510011	cmp	r1, #17	; 0x11
    7b44:	1a0021a7	bne	0x101e8
    7b48:	e3a08801	mov	r8, #65536	; 0x10000
    7b4c:	e2488001	sub	r8, r8, #1
    7b50:	e3580000	cmp	r8, #0
    7b54:	0a0021a3	beq	0x101e8
    7b58:	e5d01005	ldrb	r1, [r0, #5]
    7b5c:	e3110001	tst	r1, #1
    7b60:	0afffff9	beq	0x7b4c
    7b64:	e5d01000	ldrb	r1, [r0]
    7b68:	e3510022	cmp	r1, #34	; 0x22
    7b6c:	1a00219d	bne	0x101e8
    7b70:	e3a08801	mov	r8, #65536	; 0x10000
    7b74:	e2488001	sub	r8, r8, #1
    7b78:	e3580000	cmp	r8, #0
    7b7c:	0a002199	beq	0x101e8
    7b80:	e5d01005	ldrb	r1, [r0, #5]
    7b84:	e3110001	tst	r1, #1
    7b88:	0afffff9	beq	0x7b74
    7b8c:	e5d01000	ldrb	r1, [r0]
    7b90:	e3a020ee	mov	r2, #238	; 0xee
    7b94:	e5c02000	strb	r2, [r0]
    7b98:	e1a02001	mov	r2, r1
    7b9c:	e5c02000	strb	r2, [r0]
    7ba0:	e3510000	cmp	r1, #0
    7ba4:	0a000004	beq	0x7bbc
    7ba8:	e35100f0	cmp	r1, #240	; 0xf0
    7bac:	0a000002	beq	0x7bbc
    7bb0:	e59f211c	ldr	r2, =0x1870bf0	; via 0x7cd4
    7bb4:	e5c21000	strb	r1, [r2]
    7bb8:	ea00218a	b	0x101e8
    7bbc:	e59f2114	ldr	r2, =0x140000	; via 0x7cd8
    7bc0:	e5922000	ldr	r2, [r2]
    7bc4:	e5c02000	strb	r2, [r0]
    7bc8:	e1a02422	mov	r2, r2, lsr #8
    7bcc:	e5c02000	strb	r2, [r0]
    7bd0:	e1a02422	mov	r2, r2, lsr #8
    7bd4:	e5c02000	strb	r2, [r0]
    7bd8:	e1a02422	mov	r2, r2, lsr #8
    7bdc:	e5c02000	strb	r2, [r0]
    7be0:	e3a08000	mov	r8, #0
    7be4:	e35100f0	cmp	r1, #240	; 0xf0
    7be8:	0a000001	beq	0x7bf4
    7bec:	e59f40e4	ldr	r4, =0x140000	; via 0x7cd8
    7bf0:	ea000002	b	0x7c00
    7bf4:	e59f10dc	ldr	r1, =0x140000	; via 0x7cd8
    7bf8:	e5911000	ldr	r1, [r1]
    7bfc:	e59f40d8	ldr	r4, =0x100	; via 0x7cdc
    7c00:	e7d42008	ldrb	r2, [r4, r8]
    7c04:	e5c02000	strb	r2, [r0]
    7c08:	e2888001	add	r8, r8, #1
    7c0c:	e3580010	cmp	r8, #16	; 0x10
    7c10:	1afffffa	bne	0x7c00
    7c14:	e5d02005	ldrb	r2, [r0, #5]
    7c18:	e3120001	tst	r2, #1
    7c1c:	0afffffc	beq	0x7c14
    7c20:	e5d02000	ldrb	r2, [r0]
    7c24:	e3520033	cmp	r2, #51	; 0x33
    7c28:	1a00216e	bne	0x101e8
    7c2c:	e5d02005	ldrb	r2, [r0, #5]
    7c30:	e3120001	tst	r2, #1
    7c34:	0afffffc	beq	0x7c2c
    7c38:	e5d02000	ldrb	r2, [r0]
    7c3c:	e3520044	cmp	r2, #68	; 0x44
    7c40:	1a002168	bne	0x101e8
    7c44:	e59f2078	ldr	r2, =0x3490	; via 0x7cc4
    7c48:	e59f3078	ldr	r3, =0x820100	; via 0x7cc8
    7c4c:	e59f406c	ldr	r4, =0x7000	; via 0x7cc0
    7c50:	e5d26000	ldrb	r6, [r2]
    7c54:	e5c36000	strb	r6, [r3]
    7c58:	e2822001	add	r2, r2, #1
    7c5c:	e2833001	add	r3, r3, #1
    7c60:	e2444001	sub	r4, r4, #1
    7c64:	e3540000	cmp	r4, #0
    7c68:	1afffff8	bne	0x7c50
    7c6c:	e3a020ee	mov	r2, #238	; 0xee
    7c70:	e5c02000	strb	r2, [r0]
    7c74:	e3a02066	mov	r2, #102	; 0x66
    7c78:	e5c02000	strb	r2, [r0]
    7c7c:	e59f0048	ldr	r0, =0x81fffc	; via 0x7ccc
    7c80:	e1a0d000	mov	sp, r0
    7c84:	e59f003c	ldr	r0, =0x820100	; via 0x7cc8
    7c88:	e280e001	add	lr, r0, #1
    7c8c:	e1a00001	mov	r0, r1
    7c90:	e12fff1e	bx	lr

; TI-style exception and interrupt vectors
   10000:	ea0000ed	b	0x103bc
   10004:	ea0000f4	b	0x103dc
   10008:	ea0000fb	b	0x103fc
   1000c:	ea0000fe	b	0x1040c
   10010:	ea000102	b	0x10420
   10014:	ea0000e2	b	0x103a4
   10018:	ea0000e6	b	0x103b8

; _c_int00 pool of constants, differs from both TCS211 and DSample-20020917
; versions:

   1001c:	02a302a3
   10020:	029202a3
   10024:	02c00201
   10028:	002a0040
   1002c:	fffffb00
   10030:	fffffd00
   10034:	ffff9800
   10038:	fffffb10
   1003c:	ffffff08
   10040:	fffef006
   10044:	20021081
   10048:	f7ff0800
   1004c:	00080000
   10050:	fffe1800
   10054:	fffe1811
   10058:	0001063c

; Reset entry branches here
   1005c:	e59fb550	ldr	r11, =0x874118	; via 0x105b4
   10060:	e92b1007	stmdb	r11!, {r0, r1, r2, r12}
   10064:	ea00011b	b	0x104d8

; return from the 0x104d8 "routine"
   10068:	e8bb1007	ldmia	r11!, {r0, r1, r2, r12}
; code matches both TCS211 and DSample-20020917
   1006c:	e51f1040	ldr	r1, =0xffff9800	; via 0x10034
   10070:	e15f23b2	ldrh	r2, =0x2002	; via 0x10046
   10074:	e1c120b0	strh	r2, [r1]
   10078:	e5912000	ldr	r2, [r1]
   1007c:	e2022001	and	r2, r2, #1
   10080:	e3520001	cmp	r2, #1
   10084:	0afffffb	beq	0x10078
   10088:	e51f1060	ldr	r1, =0xfffffd00	; via 0x10030
   1008c:	e15f25b0	ldrh	r2, =0x1081	; via 0x10044
   10090:	e1c120b0	strh	r2, [r1]
   10094:	e51f1064	ldr	r1, =0xfffffb10	; via 0x10038
   10098:	e15f25b6	ldrh	r2, =0xf7ff	; via 0x1004a
   1009c:	e1d100b0	ldrh	r0, [r1]
   100a0:	e0000002	and	r0, r0, r2
   100a4:	e1c100b0	strh	r0, [r1]
   100a8:	e51f1074	ldr	r1, =0xffffff08	; via 0x1003c
   100ac:	e15f26b8	ldrh	r2, =0x0	; via 0x1004c
   100b0:	e1c120b0	strh	r2, [r1]
   100b4:	e51f1090	ldr	r1, =0xfffffb00	; via 0x1002c
   100b8:	e15f2ab4	ldrh	r2, =0x2a3	; via 0x1001c
   100bc:	e1c120b0	strh	r2, [r1]
   100c0:	e15f2aba	ldrh	r2, =0x2a3	; via 0x1001e
   100c4:	e1c120b2	strh	r2, [r1, #2]
   100c8:	e15f2bb0	ldrh	r2, =0x2a3	; via 0x10020
   100cc:	e1c120b4	strh	r2, [r1, #4]
   100d0:	e15f2bb6	ldrh	r2, =0x292	; via 0x10022
   100d4:	e1c120b6	strh	r2, [r1, #6]
   100d8:	e15f2bbc	ldrh	r2, =0x201	; via 0x10024
   100dc:	e1c120ba	strh	r2, [r1, #10]	; 0xa
   100e0:	e15f2cb2	ldrh	r2, =0x2c0	; via 0x10026
   100e4:	e1c120bc	strh	r2, [r1, #12]	; 0xc
   100e8:	e15f2cb8	ldrh	r2, =0x40	; via 0x10028
   100ec:	e1c120b8	strh	r2, [r1, #8]
   100f0:	e15f2cbe	ldrh	r2, =0x2a	; via 0x1002a
   100f4:	e1c120be	strh	r2, [r1, #14]	; 0xe
; RTC muck original to BenQ
   100f8:	e51f10ac	ldr	r1, =0xfffe1811	; via 0x10054
   100fc:	e5d12000	ldrb	r2, [r1]
   10100:	e2022001	and	r2, r2, #1
   10104:	e3520001	cmp	r2, #1
   10108:	0a000003	beq	0x1011c
   1010c:	e51f10c4	ldr	r1, =0xfffe1800	; via 0x10050
   10110:	e5912000	ldr	r2, [r1]
   10114:	e59f14a8	ldr	r1, =0x874cd8	; via 0x105c4
   10118:	e5812000	str	r2, [r1]
; back to original TI code
   1011c:	e10f0000	mrs	r0, CPSR
   10120:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10124:	e3800013	orr	r0, r0, #19	; 0x13
   10128:	e3800080	orr	r0, r0, #128	; 0x80
   1012c:	e129f000	msr	CPSR_fc, r0
; inline bss clearing, similar but not identical to DSample-20020917 version
   10130:	e59f044c	ldr	r0, =0x1803784	; via 0x10584
   10134:	e3a02000	mov	r2, #0
   10138:	e59f1448	ldr	r1, =0x1871ad8	; via 0x10588
   1013c:	e4802004	str	r2, [r0], #4
   10140:	e4802004	str	r2, [r0], #4
   10144:	e4802004	str	r2, [r0], #4
   10148:	e4802004	str	r2, [r0], #4
   1014c:	e4802004	str	r2, [r0], #4
   10150:	e4802004	str	r2, [r0], #4
   10154:	e4802004	str	r2, [r0], #4
   10158:	e4802004	str	r2, [r0], #4
   1015c:	e4802004	str	r2, [r0], #4
   10160:	e4802004	str	r2, [r0], #4
   10164:	e4802004	str	r2, [r0], #4
   10168:	e4802004	str	r2, [r0], #4
   1016c:	e4802004	str	r2, [r0], #4
   10170:	e4802004	str	r2, [r0], #4
   10174:	e4802004	str	r2, [r0], #4
   10178:	e4802004	str	r2, [r0], #4
   1017c:	e1500001	cmp	r0, r1
   10180:	4affffed	bmi	0x1013c
   10184:	e59f0400	ldr	r0, =0x8296fc	; via 0x1058c
   10188:	e3a02000	mov	r2, #0
   1018c:	e59f13fc	ldr	r1, =0x873d10	; via 0x10590
   10190:	e4802004	str	r2, [r0], #4
   10194:	e4802004	str	r2, [r0], #4
   10198:	e4802004	str	r2, [r0], #4
   1019c:	e4802004	str	r2, [r0], #4
   101a0:	e4802004	str	r2, [r0], #4
   101a4:	e4802004	str	r2, [r0], #4
   101a8:	e4802004	str	r2, [r0], #4
   101ac:	e4802004	str	r2, [r0], #4
   101b0:	e4802004	str	r2, [r0], #4
   101b4:	e4802004	str	r2, [r0], #4
   101b8:	e4802004	str	r2, [r0], #4
   101bc:	e4802004	str	r2, [r0], #4
   101c0:	e4802004	str	r2, [r0], #4
   101c4:	e4802004	str	r2, [r0], #4
   101c8:	e4802004	str	r2, [r0], #4
   101cc:	e4802004	str	r2, [r0], #4
   101d0:	e1500001	cmp	r0, r1
   101d4:	4affffed	bmi	0x10190
; 8 MiB memory interface setup, slightly different code than TI's
   101d8:	e51f11a0	ldr	r1, =0xfffef006	; via 0x10040
   101dc:	e3a02008	mov	r2, #8
   101e0:	e1c120b0	strh	r2, [r1]
; BenQ's serial interrupt-boot routine
   101e4:	ebffdda9	bl	0x7890
; return by branch from the above routine
; setting _INT_Loaded_Flag?
   101e8:	e3a00001	mov	r0, #1
   101ec:	e59f13a4	ldr	r1, =0x1871a34	; via 0x10598
   101f0:	e5810000	str	r0, [r1]
; stack setup? - code matches DSample-20020917 version from here
   101f4:	e59f0398	ldr	r0, =0x8741d4	; via 0x10594
   101f8:	e3a01b01	mov	r1, #1024	; 0x400
   101fc:	e2411004	sub	r1, r1, #4
   10200:	e0802001	add	r2, r0, r1
   10204:	e1a0a000	mov	r10, r0
   10208:	e59f338c	ldr	r3, =0x82b8a0	; via 0x1059c
   1020c:	e583a000	str	r10, [r3]
   10210:	e1a0d002	mov	sp, r2
   10214:	e59f3384	ldr	r3, =0x82b9cc	; via 0x105a0
   10218:	e583d000	str	sp, [r3]
   1021c:	e3a01080	mov	r1, #128	; 0x80
   10220:	e0822001	add	r2, r2, r1
   10224:	e10f0000	mrs	r0, CPSR
   10228:	e3c0001f	bic	r0, r0, #31	; 0x1f
   1022c:	e3800012	orr	r0, r0, #18	; 0x12
   10230:	e129f000	msr	CPSR_fc, r0
   10234:	e1a0d002	mov	sp, r2
   10238:	e3a01c02	mov	r1, #512	; 0x200
   1023c:	e0822001	add	r2, r2, r1
   10240:	e10f0000	mrs	r0, CPSR
   10244:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10248:	e3800011	orr	r0, r0, #17	; 0x11
   1024c:	e129f000	msr	CPSR_fc, r0
   10250:	e1a0d002	mov	sp, r2
   10254:	e10f0000	mrs	r0, CPSR
   10258:	e3c0001f	bic	r0, r0, #31	; 0x1f
   1025c:	e3800017	orr	r0, r0, #23	; 0x17
   10260:	e129f000	msr	CPSR_fc, r0
   10264:	e59fd348	ldr	sp, =0x874118	; via 0x105b4
   10268:	e10f0000	mrs	r0, CPSR
   1026c:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10270:	e380001b	orr	r0, r0, #27	; 0x1b
   10274:	e129f000	msr	CPSR_fc, r0
   10278:	e59fd334	ldr	sp, =0x874118	; via 0x105b4
   1027c:	e10f0000	mrs	r0, CPSR
   10280:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10284:	e3800013	orr	r0, r0, #19	; 0x13
   10288:	e129f000	msr	CPSR_fc, r0
   1028c:	e59f3310	ldr	r3, =0x82b804	; via 0x105a4
   10290:	e2822004	add	r2, r2, #4
   10294:	e5832000	str	r2, [r3]
   10298:	e3a01b01	mov	r1, #1024	; 0x400
   1029c:	e3c11003	bic	r1, r1, #3
   102a0:	e0822001	add	r2, r2, r1
   102a4:	e59f32fc	ldr	r3, =0x82b88c	; via 0x105a8
   102a8:	e5831000	str	r1, [r3]
   102ac:	e3a01002	mov	r1, #2
   102b0:	e59f32f4	ldr	r3, =0x82b89c	; via 0x105ac
   102b4:	e5831000	str	r1, [r3]
   102b8:	e1a04002	mov	r4, r2
   102bc:	eb08c4c2	bl	0x2415cc	; _f_load_int_mem ?
   102c0:	e1a02004	mov	r2, r4
   102c4:	e59f12d0	ldr	r1, =0x82b8a0	; via 0x1059c
   102c8:	e5910000	ldr	r0, [r1]
   102cc:	e3a030fe	mov	r3, #254	; 0xfe
   102d0:	e5c03000	strb	r3, [r0]
   102d4:	e5c03001	strb	r3, [r0, #1]
   102d8:	e5c03002	strb	r3, [r0, #2]
   102dc:	e5c03003	strb	r3, [r0, #3]
   102e0:	e4903004	ldr	r3, [r0], #4
   102e4:	e4803004	str	r3, [r0], #4
   102e8:	e1500002	cmp	r0, r2
   102ec:	bafffffc	blt	0x102e4
   102f0:	e51f02a0	ldr	r0, =0x1063c	; via 0x10058
   102f4:	e3700001	cmn	r0, #1
   102f8:	1b0000bd	blne	0x105f4		; _auto_init ?
   102fc:	e59f02ac	ldr	r0, =0x1870bf4	; via 0x105b0
   10300:	ea08c4ab	b	0x2415b4	; _INC_Initialize ?

   10304:	46c04778	<invalid ldr/str: offset reg shift by reg>
   10308:	eaffffff	b	0x1030c
   1030c:	e3a00001	mov	r0, #1
   10310:	e12fff1e	bx	lr
   10314:	46c04778	<invalid ldr/str: offset reg shift by reg>
   10318:	eaffffff	b	0x1031c
   1031c:	e3a00000	mov	r0, #0
   10320:	e12fff1e	bx	lr
   10324:	46c04778	<invalid ldr/str: offset reg shift by reg>
   10328:	e10f0000	mrs	r0, CPSR
   1032c:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10330:	e3800012	orr	r0, r0, #18	; 0x12
   10334:	e129f000	msr	CPSR_fc, r0
   10338:	e10f0000	mrs	r0, CPSR
   1033c:	e3c00080	bic	r0, r0, #128	; 0x80
   10340:	e129f000	msr	CPSR_fc, r0
   10344:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10348:	e3800013	orr	r0, r0, #19	; 0x13
   1034c:	e129f000	msr	CPSR_fc, r0
   10350:	e28f0001	add	r0, pc, #1
   10354:	e12fff10	bx	r0
   10358:	47784770	<invalid ldr/str: offset reg shift by reg>
   1035c:	46c046c0	strmib	r4, [r0], r0, asr #13
   10360:	e10f0000	mrs	r0, CPSR
   10364:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10368:	e3800012	orr	r0, r0, #18	; 0x12
   1036c:	e129f000	msr	CPSR_fc, r0
   10370:	e10f0000	mrs	r0, CPSR
   10374:	e3800080	orr	r0, r0, #128	; 0x80
   10378:	e129f000	msr	CPSR_fc, r0
   1037c:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10380:	e3800013	orr	r0, r0, #19	; 0x13
   10384:	e129f000	msr	CPSR_fc, r0
   10388:	e28f0001	add	r0, pc, #1
   1038c:	e12fff10	bx	r0
   10390:	47784770	<invalid ldr/str: offset reg shift by reg>
   10394:	46c046c0	strmib	r4, [r0], r0, asr #13
   10398:	eaffffff	b	0x1039c
   1039c:	e3a00000	mov	r0, #0
   103a0:	e12fff1e	bx	lr
   103a4:	e92d000f	stmdb	sp!, {r0, r1, r2, r3}
   103a8:	e24e3004	sub	r3, lr, #4
   103ac:	eb205c69	bl	0x827558
   103b0:	eb0877b5	bl	0x22e28c
   103b4:	ea205cb0	b	0x82767c
   103b8:	eb0877c1	bl	0x22e2c4
   103bc:	e59fd1f0	ldr	sp, =0x874118	; via 0x105b4
   103c0:	e92d1001	stmdb	sp!, {r0, r12}
   103c4:	e51f0394	ldr	r0, =0xfffffb10	; via 0x10038
   103c8:	e1d0c0b0	ldrh	r12, [r0]
   103cc:	e38ccb02	orr	r12, r12, #2048	; 0x800
   103d0:	e1c0c0b0	strh	r12, [r0]
   103d4:	e3a00001	mov	r0, #1
   103d8:	ea00004d	b	0x10514
   103dc:	e59fd1d0	ldr	sp, =0x874118	; via 0x105b4
   103e0:	e92d1001	stmdb	sp!, {r0, r12}
   103e4:	e51f03b4	ldr	r0, =0xfffffb10	; via 0x10038
   103e8:	e1d0c0b0	ldrh	r12, [r0]
   103ec:	e38ccb02	orr	r12, r12, #2048	; 0x800
   103f0:	e1c0c0b0	strh	r12, [r0]
   103f4:	e3a00002	mov	r0, #2
   103f8:	ea000045	b	0x10514
   103fc:	e59fd1b0	ldr	sp, =0x874118	; via 0x105b4
   10400:	e92d1001	stmdb	sp!, {r0, r12}
   10404:	e3a00003	mov	r0, #3
   10408:	ea000041	b	0x10514
   1040c:	e59fd1a0	ldr	sp, =0x874118	; via 0x105b4
   10410:	e92d1001	stmdb	sp!, {r0, r12}
   10414:	e24ee008	sub	lr, lr, #8
   10418:	e3a00004	mov	r0, #4
   1041c:	ea00003c	b	0x10514
   10420:	e59fd18c	ldr	sp, =0x874118	; via 0x105b4
   10424:	e92d1001	stmdb	sp!, {r0, r12}
   10428:	e51f03f8	ldr	r0, =0xfffffb10	; via 0x10038
   1042c:	e1d0c0b0	ldrh	r12, [r0]
   10430:	e38ccb02	orr	r12, r12, #2048	; 0x800
   10434:	e1c0c0b0	strh	r12, [r0]
   10438:	e3a00005	mov	r0, #5
   1043c:	ea000034	b	0x10514

; BenQ's 0xDEAD reboot handling path, not studied further
   10440:	e10f0000	mrs	r0, CPSR
   10444:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10448:	e3800017	orr	r0, r0, #23	; 0x17
   1044c:	e3800080	orr	r0, r0, #128	; 0x80
   10450:	e129f000	msr	CPSR_fc, r0
   10454:	e92d1001	stmdb	sp!, {r0, r12}
   10458:	e3a00006	mov	r0, #6
   1045c:	ea00002c	b	0x10514
   10460:	4700a000	strmi	r10, [r0, -r0]
   10464:	eb000040	bl	0x1056c
   10468:	e1a0100e	mov	r1, lr
   1046c:	e10f0000	mrs	r0, CPSR
   10470:	e3c0001f	bic	r0, r0, #31	; 0x1f
   10474:	e3800017	orr	r0, r0, #23	; 0x17
   10478:	e3800080	orr	r0, r0, #128	; 0x80
   1047c:	e129f000	msr	CPSR_fc, r0
   10480:	e3a00080	mov	r0, #128	; 0x80
   10484:	eb205a61	bl	0x826e10
   10488:	e1a0e001	mov	lr, r1
   1048c:	e59fd120	ldr	sp, =0x874118	; via 0x105b4
   10490:	e59f1130	ldr	r1, =0x82ba50	; via 0x105c8
   10494:	e5910000	ldr	r0, [r1]
   10498:	e590102c	ldr	r1, [r0, #44]	; 0x2c
   1049c:	e59f2114	ldr	r2, =0x18522c4	; via 0x105b8
   104a0:	e5910004	ldr	r0, [r1, #4]
   104a4:	e5820040	str	r0, [r2, #64]	; 0x40
   104a8:	e3a00009	mov	r0, #9
   104ac:	e38004de	orr	r0, r0, #3724541952	; 0xde000000
   104b0:	e38008ad	orr	r0, r0, #11337728	; 0xad0000
   104b4:	e5820044	str	r0, [r2, #68]	; 0x44
   104b8:	e3a03010	mov	r3, #16	; 0x10
   104bc:	e2811008	add	r1, r1, #8
   104c0:	e8b10001	ldmia	r1!, {r0}
   104c4:	e8a20001	stmia	r2!, {r0}
   104c8:	e2433001	sub	r3, r3, #1
   104cc:	e3530000	cmp	r3, #0
   104d0:	1afffffa	bne	0x104c0
   104d4:	e12fff1e	bx	lr

; This code executes almost immediately out of reset, before TI's
; _INT_Initialize assembly init code, and it implements some kind of
; reboot check: if the upper 16 bits of the 32-bit word at IRAM address
; 0x874ce0 (Calypso IRAM content should be garbage on a cold-powerup)
; equal 0xDEAD, the code branches to 0x10440 (must be some kind of
; error reboot handling path), otherwise (normal cold power-up path)
; the code branches to 0x10068, where we see TI's _INT_Initialize code.

   104d8:	e59fc0dc	ldr	r12, =0x874ce0	; via 0x105bc
   104dc:	e59c0000	ldr	r0, [r12]
   104e0:	e2802000	add	r2, r0, #0
   104e4:	e3a01000	mov	r1, #0
   104e8:	e38114ff	orr	r1, r1, #4278190080	; 0xff000000
   104ec:	e38118ff	orr	r1, r1, #16711680	; 0xff0000
   104f0:	e0022001	and	r2, r2, r1
   104f4:	e3a01000	mov	r1, #0
   104f8:	e38114de	orr	r1, r1, #3724541952	; 0xde000000
   104fc:	e38118ad	orr	r1, r1, #11337728	; 0xad0000
   10500:	e1520001	cmp	r2, r1
   10504:	1afffed7	bne	0x10068
   10508:	e8bb1007	ldmia	r11!, {r0, r1, r2, r12}
   1050c:	eaffffcb	b	0x10440

$Init_Target:
; code mostly matches DSample-20020917 version, diffs noted
  2303dc:	b570		push	{r4, r5, r6, lr}
  2303de:	b081		sub	sp, #4
  2303e0:	4d61		ldr	r5, =0xfffef006	; via 0x230568
  2303e2:	2003		mov	r0, #3
  2303e4:	0340		lsl	r0, r0, #13
  2303e6:	8068		strh	r0, [r5, #2]
  2303e8:	f006 fe71	bl	0x2370ce
  2303ec:	2008		mov	r0, #8
  2303ee:	8829		ldrh	r1, [r5, #0]
  2303f0:	4308		orr	r0, r1
  2303f2:	8028		strh	r0, [r5, #0]
  2303f4:	485d		ldr	r0, =0xfffffd02	; via 0x23056c
  2303f6:	2105		mov	r1, #5
  2303f8:	8001		strh	r1, [r0, #0]
  2303fa:	495d		ldr	r1, =0xff3f	; via 0x230570
  2303fc:	8802		ldrh	r2, [r0, #0]
  2303fe:	4011		and	r1, r2
  230400:	8001		strh	r1, [r0, #0]
  230402:	495c		ldr	r1, =0xffdf	; via 0x230574
  230404:	8802		ldrh	r2, [r0, #0]
  230406:	4011		and	r1, r2
  230408:	8001		strh	r1, [r0, #0]
; RHEA_CNTL_REG setup: this version writes 0x7F01,
; DSample-20020917 writes 0x7F00, TCS211 writes 0xFF00
  23040a:	4e5b		ldr	r6, =0xfffff900	; via 0x230578
  23040c:	485b		ldr	r0, =0x7f01	; via 0x23057c
  23040e:	8030		strh	r0, [r6, #0]
; The PLL setup is the same as in the D-Sample C05 version:
; the PLL multiplier is set to 6, the DSP runs at 78 MHz
; and the ARM runs at 39 MHz.
  230410:	4c5b		ldr	r4, =0xffff9800	; via 0x230580
  230412:	485c		ldr	r0, =0xfff3	; via 0x230584
  230414:	8821		ldrh	r1, [r4, #0]
  230416:	4008		and	r0, r1
  230418:	8020		strh	r0, [r4, #0]
  23041a:	8820		ldrh	r0, [r4, #0]
  23041c:	8020		strh	r0, [r4, #0]
  23041e:	485a		ldr	r0, =0xf01f	; via 0x230588
  230420:	8821		ldrh	r1, [r4, #0]
  230422:	4008		and	r0, r1
  230424:	8020		strh	r0, [r4, #0]
  230426:	2003		mov	r0, #3
  230428:	0200		lsl	r0, r0, #8
  23042a:	8821		ldrh	r1, [r4, #0]
  23042c:	4308		orr	r0, r1
  23042e:	8020		strh	r0, [r4, #0]
; ARM clock setup: divide by 2 like in TCS211
  230430:	2000		mov	r0, #0
  230432:	2102		mov	r1, #2
  230434:	2200		mov	r2, #0
  230436:	f008 fc4f	bl	0x238cd8
; Memory timings (MEMIF setup)
  23043a:	4954		ldr	r1, =0xfffffb00	; via 0x23058c
  23043c:	20a3		mov	r0, #163	; 0xa3
  23043e:	8008		strh	r0, [r1, #0]
  230440:	8048		strh	r0, [r1, #2]
  230442:	8088		strh	r0, [r1, #4]
  230444:	2092		mov	r0, #146	; 0x92
  230446:	80c8		strh	r0, [r1, #6]
  230448:	2085		mov	r0, #133	; 0x85
  23044a:	8148		strh	r0, [r1, #10]	; 0xa
  23044c:	200b		mov	r0, #11	; 0xb
  23044e:	0180		lsl	r0, r0, #6
  230450:	8188		strh	r0, [r1, #12]	; 0xc
  230452:	2040		mov	r0, #64	; 0x40
  230454:	8108		strh	r0, [r1, #8]
  230456:	2020		mov	r0, #32	; 0x20
  230458:	8070		strh	r0, [r6, #2]
  23045a:	2000		mov	r0, #0
  23045c:	80b0		strh	r0, [r6, #4]
  23045e:	2010		mov	r0, #16	; 0x10
  230460:	8821		ldrh	r1, [r4, #0]
  230462:	4308		orr	r0, r1
  230464:	8020		strh	r0, [r4, #0]
  230466:	484a		ldr	r0, =0xfffffa08	; via 0x230590
  230468:	494a		ldr	r1, =0xffff	; via 0x230594
  23046a:	8001		strh	r1, [r0, #0]
  23046c:	261f		mov	r6, #31	; 0x1f
  23046e:	8046		strh	r6, [r0, #2]
  230470:	2103		mov	r1, #3
  230472:	8181		strh	r1, [r0, #12]	; 0xc
  230474:	f005 fa9e	bl	0x2359b4
  230478:	4847		ldr	r0, =0xfffffc00	; via 0x230598
  23047a:	2124		mov	r1, #36	; 0x24
  23047c:	8001		strh	r1, [r0, #0]
  23047e:	210d		mov	r1, #13	; 0xd
  230480:	8041		strh	r1, [r0, #2]
  230482:	2400		mov	r4, #0
  230484:	4845		ldr	r0, =0xfffe2016	; via 0x23059c
  230486:	8004		strh	r4, [r0, #0]
  230488:	4945		ldr	r1, =0xfffe2014	; via 0x2305a0
  23048a:	2002		mov	r0, #2
  23048c:	8008		strh	r0, [r1, #0]
  23048e:	4945		ldr	r1, =0xfffe2002	; via 0x2305a4
  230490:	2084		mov	r0, #132	; 0x84
  230492:	8008		strh	r0, [r1, #0]
  230494:	4944		ldr	r1, =0xfffe2000	; via 0x2305a8
  230496:	4845		ldr	r0, =0x3de0	; via 0x2305ac
  230498:	8008		strh	r0, [r1, #0]
  23049a:	4a45		ldr	r2, =0xfffe2022	; via 0x2305b0
  23049c:	2009		mov	r0, #9
  23049e:	8010		strh	r0, [r2, #0]
  2304a0:	4a44		ldr	r2, =0xfffe2020	; via 0x2305b4
  2304a2:	4845		ldr	r0, =0x45a	; via 0x2305b8
  2304a4:	8010		strh	r0, [r2, #0]
  2304a6:	4a45		ldr	r2, =0xfffe201e	; via 0x2305bc
  2304a8:	20b4		mov	r0, #180	; 0xb4
  2304aa:	8010		strh	r0, [r2, #0]
  2304ac:	4844		ldr	r0, =0xfffe201c	; via 0x2305c0
  2304ae:	8006		strh	r6, [r0, #0]
  2304b0:	4844		ldr	r0, =0xfffe2024	; via 0x2305c4
  2304b2:	8004		strh	r4, [r0, #0]
  2304b4:	4b44		ldr	r3, =0xfffe2010	; via 0x2305c8
  2304b6:	2002		mov	r0, #2
  2304b8:	881a		ldrh	r2, [r3, #0]
  2304ba:	4310		orr	r0, r2
  2304bc:	8018		strh	r0, [r3, #0]
  2304be:	4a42		ldr	r2, =0xfffe2010	; via 0x2305c8
  2304c0:	2004		mov	r0, #4
  2304c2:	8813		ldrh	r3, [r2, #0]
  2304c4:	4318		orr	r0, r3
  2304c6:	8010		strh	r0, [r2, #0]
  2304c8:	2027		mov	r0, #39	; 0x27
  2304ca:	80e8		strh	r0, [r5, #6]
  2304cc:	8a08		ldrh	r0, [r1, #16]	; 0x10
  2304ce:	0840		lsr	r0, r0, #1
  2304d0:	d310		bcc	0x2304f4
  2304d2:	8a08		ldrh	r0, [r1, #16]	; 0x10
  2304d4:	0400		lsl	r0, r0, #16
  2304d6:	0c40		lsr	r0, r0, #17
  2304d8:	0040		lsl	r0, r0, #1
  2304da:	8208		strh	r0, [r1, #16]	; 0x10
  2304dc:	2001		mov	r0, #1
  2304de:	9000		str	r0, [sp, #0]
  2304e0:	e002		b	0x2304e8
  2304e2:	9800		ldr	r0, [sp, #0]
  2304e4:	3001		add	r0, #1
  2304e6:	9000		str	r0, [sp, #0]
  2304e8:	9800		ldr	r0, [sp, #0]
  2304ea:	2832		cmp	r0, #50	; 0x32
  2304ec:	d3f9		bcc	0x2304e2
  2304ee:	8a48		ldrh	r0, [r1, #18]	; 0x12
  2304f0:	2800		cmp	r0, #0
  2304f2:	d0fc		beq	0x2304ee
  2304f4:	f00a fd61	bl	0x23afba
  2304f8:	f00a fd65	bl	0x23afc6
  2304fc:	2005		mov	r0, #5
  2304fe:	05c0		lsl	r0, r0, #23
  230500:	7004		strb	r4, [r0, #0]
  230502:	2001		mov	r0, #1
  230504:	f006 fdf1	bl	0x2370ea
  230508:	2002		mov	r0, #2
  23050a:	f006 fdee	bl	0x2370ea
  23050e:	b001		add	sp, #4
  230510:	bd70		pop	{r4, r5, r6, pc}

$Init_Drivers:
  230512:	b500		push	{lr}
  230514:	f7ce febd	bl	0x1ff292
  230518:	f795 fd44	bl	0x1c5fa4
  23051c:	f7e0 f928	bl	0x210770
  230520:	f735 fb88	bl	0x165c34
  230524:	bd00		pop	{pc}

$Init_Serial_Flows:
  230526:	b500		push	{lr}
  230528:	4828		ldr	r0, =0x1870ba8	; via 0x2305cc
  23052a:	f75a f817	bl	0x18a55c
  23052e:	2000		mov	r0, #0
  230530:	2102		mov	r1, #2
  230532:	2200		mov	r2, #0
  230534:	f75a fd1a	bl	0x18af6c
  230538:	f75a fd77	bl	0x18b02a
  23053c:	bd00		pop	{pc}

$Init_Unmask_IT:
  23053e:	b500		push	{lr}
  230540:	2004		mov	r0, #4
  230542:	f005 fa98	bl	0x235a76
  230546:	2012		mov	r0, #18	; 0x12
  230548:	f005 fa95	bl	0x235a76
  23054c:	2007		mov	r0, #7
  23054e:	f005 fa92	bl	0x235a76
  230552:	2011		mov	r0, #17	; 0x11
  230554:	f005 fa8f	bl	0x235a76
  230558:	bd00		pop	{pc}

; same 6 empty functions as in the DSample-20020917 version
  23055a:	4770		bx	lr
  23055c:	4770		bx	lr
  23055e:	4770		bx	lr
  230560:	4770		bx	lr
  230562:	4770		bx	lr
  230564:	4770		bx	lr

$Application_Initialize:
  23a19e:	b5f0		push	{r4, r5, r6, r7, lr}
  23a1a0:	b084		sub	sp, #16	; 0x10
  23a1a2:	4c3f		ldr	r4, =0x800000	; via 0x23a2a0
  23a1a4:	483f		ldr	r0, =0x8296f8	; via 0x23a2a4
  23a1a6:	1b00		sub	r0, r0, r4
  23a1a8:	1c46		add	r6, r0, #1
  23a1aa:	2500		mov	r5, #0
  23a1ac:	2001		mov	r0, #1
  23a1ae:	0440		lsl	r0, r0, #17
  23a1b0:	4286		cmp	r6, r0
  23a1b2:	d920		bls	0x23a1f6
  23a1b4:	2701		mov	r7, #1
  23a1b6:	9400		str	r4, [sp, #0]
  23a1b8:	2001		mov	r0, #1
  23a1ba:	0440		lsl	r0, r0, #17
  23a1bc:	9001		str	r0, [sp, #4]
  23a1be:	1c28		add	r0, r5, #0
  23a1c0:	2103		mov	r1, #3
  23a1c2:	2200		mov	r2, #0
  23a1c4:	2301		mov	r3, #1
  23a1c6:	f004 faab	bl	0x23e720
  23a1ca:	1c68		add	r0, r5, #1
  23a1cc:	0600		lsl	r0, r0, #24
  23a1ce:	0e05		lsr	r5, r0, #24
  23a1d0:	2d02		cmp	r5, #2
  23a1d2:	d100		bne	0x23a1d6
  23a1d4:	2700		mov	r7, #0
  23a1d6:	2001		mov	r0, #1
  23a1d8:	0440		lsl	r0, r0, #17
  23a1da:	1904		add	r4, r0, r4
  23a1dc:	2001		mov	r0, #1
  23a1de:	0440		lsl	r0, r0, #17
  23a1e0:	1a36		sub	r6, r6, r0
  23a1e2:	2001		mov	r0, #1
  23a1e4:	0440		lsl	r0, r0, #17
  23a1e6:	4286		cmp	r6, r0
  23a1e8:	d901		bls	0x23a1ee
  23a1ea:	2f01		cmp	r7, #1
  23a1ec:	d0e3		beq	0x23a1b6
  23a1ee:	2e00		cmp	r6, #0
  23a1f0:	d009		beq	0x23a206
  23a1f2:	2f01		cmp	r7, #1
  23a1f4:	d107		bne	0x23a206
  23a1f6:	9400		str	r4, [sp, #0]
  23a1f8:	9601		str	r6, [sp, #4]
  23a1fa:	1c28		add	r0, r5, #0
  23a1fc:	2103		mov	r1, #3
  23a1fe:	2200		mov	r2, #0
  23a200:	2301		mov	r3, #1
  23a202:	f004 fa8d	bl	0x23e720
  23a206:	f7f6 f8e9	bl	0x2303dc	; $Init_Target
  23a20a:	4827		ldr	r0, =0x1870bf0	; via 0x23a2a8
  23a20c:	7800		ldrb	r0, [r0, #0]
  23a20e:	2820		cmp	r0, #32	; 0x20
  23a210:	d122		bne	0x23a258
  23a212:	2001		mov	r0, #1
  23a214:	2100		mov	r1, #0
  23a216:	2200		mov	r2, #0
  23a218:	f7bc fdca	bl	0x1f6db0
  23a21c:	f6d2 fb45	bl	0x10c8aa
  23a220:	f6d2 fb4a	bl	0x10c8b8
  23a224:	2800		cmp	r0, #0
  23a226:	d106		bne	0x23a236
  23a228:	4669		mov	r1, sp
  23a22a:	20ee		mov	r0, #238	; 0xee
  23a22c:	7308		strb	r0, [r1, #12]	; 0xc
  23a22e:	4668		mov	r0, sp
  23a230:	21aa		mov	r1, #170	; 0xaa
  23a232:	7341		strb	r1, [r0, #13]	; 0xd
  23a234:	e004		b	0x23a240
  23a236:	4668		mov	r0, sp
  23a238:	21ee		mov	r1, #238	; 0xee
  23a23a:	7301		strb	r1, [r0, #12]	; 0xc
  23a23c:	21ff		mov	r1, #255	; 0xff
  23a23e:	7341		strb	r1, [r0, #13]	; 0xd
  23a240:	2001		mov	r0, #1
  23a242:	a903		add	r1, sp, #12	; 0xc
  23a244:	2202		mov	r2, #2
  23a246:	f7bc ff28	bl	0x1f709a
  23a24a:	2802		cmp	r0, #2
  23a24c:	d1f8		bne	0x23a240
  23a24e:	2001		mov	r0, #1
  23a250:	213c		mov	r1, #60	; 0x3c
  23a252:	2201		mov	r2, #1
  23a254:	f771 fbb8	bl	0x1ab9c8
  23a258:	f7f6 f95b	bl	0x230512	; $Init_Drivers
  23a25c:	f008 f99c	bl	0x242598
  23a260:	f7f6 f961	bl	0x230526	; $Init_Serial_Flows
  23a264:	f796 f878	bl	0x1d0358
  23a268:	f004 ffc5	bl	0x23f1f6
  23a26c:	2000		mov	r0, #0
  23a26e:	f002 fcdf	bl	0x23cc30
  23a272:	480e		ldr	r0, =0xffff	; via 0x23a2ac
  23a274:	2100		mov	r1, #0
  23a276:	2200		mov	r2, #0
  23a278:	2301		mov	r3, #1
  23a27a:	f002 fc94	bl	0x23cba6
  23a27e:	2001		mov	r0, #1
  23a280:	f002 fcd6	bl	0x23cc30
  23a284:	f7f6 f95b	bl	0x23053e	; $Init_Unmask_IT
  23a288:	2002		mov	r0, #2
  23a28a:	2103		mov	r1, #3
  23a28c:	f008 f884	bl	0x242398
  23a290:	4807		ldr	r0, =0x187036c	; via 0x23a2b0
  23a292:	6800		ldr	r0, [r0, #0]
  23a294:	4907		ldr	r1, =0x187037c	; via 0x23a2b4
  23a296:	6809		ldr	r1, [r1, #0]
  23a298:	f008 f876	bl	0x242388
  23a29c:	b004		add	sp, #16	; 0x10
  23a29e:	bdf0		pop	{r4, r5, r6, r7, pc}

$INC_Initialize:
  2405c8:	b530		push	{r4, r5, lr}
  2405ca:	1c05		add	r5, r0, #0
  2405cc:	4c13		ldr	r4, =0x1871a1c	; via 0x24061c
  2405ce:	2001		mov	r0, #1
  2405d0:	6020		str	r0, [r4, #0]
  2405d2:	f001 f929	bl	0x241828
  2405d6:	f001 f92b	bl	0x241830
  2405da:	f001 f8e7	bl	0x2417ac
  2405de:	f000 fcf1	bl	0x240fc4
  2405e2:	f7fc f8f9	bl	0x23c7d8
  2405e6:	f000 fed1	bl	0x24138c
  2405ea:	f000 fe9f	bl	0x24132c
  2405ee:	f000 febd	bl	0x24136c
  2405f2:	f000 fe8b	bl	0x24130c
  2405f6:	f000 fee9	bl	0x2413cc
  2405fa:	f000 fea7	bl	0x24134c
  2405fe:	f000 fef5	bl	0x2413ec
  240602:	f7fe f947	bl	0x23e894
  240606:	f000 fed1	bl	0x2413ac
  24060a:	1c28		add	r0, r5, #0
  24060c:	f7f9 fdc7	bl	0x23a19e	; app init
  240610:	2002		mov	r0, #2
  240612:	6020		str	r0, [r4, #0]
  240614:	f001 fe70	bl	0x2422f8	; $TCT_Schedule veneer
  240618:	bd30		pop	{r4, r5, pc}

; _INC_Initialize call veneer
  2415b4:	e92d4000	stmdb	sp!, {lr}
  2415b8:	e28fe001	add	lr, pc, #1
  2415bc:	e12fff1e	bx	lr
  2415c0:	f7ff f802	bl	0x2405c8
  2415c4:	4778		bx	pc
  2415c6:	46c0		nop			(mov r8, r8)
  2415c8:	e8bd8000	ldmia	sp!, {pc}