view compal/boot/c118-dfboot.disasm @ 403:50c0fac9a4a8

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

; In 2023-01 Mother Mychaela received a rare C118 phone with North American
; frequency bands; this phone features a 2 MiB flash chip, but the flash-
; resident bootloader version is one which we haven't seen before.  The present
; work is a disassembly analysis of this new-to-us Compal bootloader version
; from fw version 2.2.84.N.
;
; Analysis result: this bootloader version is fatally hobbled: it NEVER offers
; a serial download opportunity at all (the code is still there, but can never
; be called), only the ftmtool flag mechanism.

RESET entry and exception vectors:
       0:	ea000225	b	0x89c
       4:	ea000825	b	0x20a0
       8:	ea000825	b	0x20a4
       c:	ea000825	b	0x20a8
      10:	ea000825	b	0x20ac
      14:	ea000825	b	0x20b0
      18:	ea000825	b	0x20b4
      1c:	ea000825	b	0x20b8

; magic words?
      20:	47033dc9
      24:	47033dca
      28:	47033df9
      2c:	47033dfa

<30-7FF: all FFs>

00000800:  42 4F 4F 54 2E 39 30 2E  30 34 00 00 00 00 00 00  BOOT.90.04......
00000810:  31 30 30 33 01 03 00 00  FF FF FF FF FF FF FF FF  1003............
00000820:  FF FF FF FF FF FF FF FF  FF FF FF FF FF FF FF FF  ................

; serial.obj .const section, matches familiar versions
     830:	00000006
     834:	00000000
     838:	00000000
     83c:	00000048
     840:	00000044
     844:	00000052
     848:	0000001b
     84c:	00000005
     850:	00000000
     854:	00000000
     858:	00000000
     85c:	00000000
     860:	000000fa
     864:	ffff5800
     868:	ffff5000

; bootloader.obj .text section, matches familiar versions

     86c:	fffffb00
     870:	02a102a1
     874:	028302a1
     878:	00c00281
     87c:	002a0040
     880:	00000040
     884:	fffffd00
     888:	ffff9800
     88c:	fffffb10
     890:	ffffff08
     894:	20061081
     898:	00000800

_INT_Bootloader_Start:
     89c:	e51f1020	ldr	r1, =0xfffffd00	; via 0x884
     8a0:	e1d120b2	ldrh	r2, [r1, #2]
     8a4:	e51f002c	ldr	r0, =0x40	; via 0x880
     8a8:	e1800002	orr	r0, r0, r2
     8ac:	e1c100b2	strh	r0, [r1, #2]
     8b0:	e51f1030	ldr	r1, =0xffff9800	; via 0x888
     8b4:	e15f22b6	ldrh	r2, =0x2006	; via 0x896
     8b8:	e1c120b0	strh	r2, [r1]
     8bc:	e5912000	ldr	r2, [r1]
     8c0:	e2022001	and	r2, r2, #1
     8c4:	e3520001	cmp	r2, #1
     8c8:	0afffffb	beq	0x8bc
     8cc:	e51f1050	ldr	r1, =0xfffffd00	; via 0x884
     8d0:	e15f24b4	ldrh	r2, =0x1081	; via 0x894
     8d4:	e1c120b0	strh	r2, [r1]
     8d8:	e51f1054	ldr	r1, =0xfffffb10	; via 0x88c
     8dc:	e15f24bc	ldrh	r2, =0x800	; via 0x898
     8e0:	e1d100b0	ldrh	r0, [r1]
     8e4:	e1800002	orr	r0, r0, r2
     8e8:	e1c100b0	strh	r0, [r1]
     8ec:	e51f1064	ldr	r1, =0xffffff08	; via 0x890
     8f0:	e15f25be	ldrh	r2, =0x0	; via 0x89a
     8f4:	e1c120b0	strh	r2, [r1]
     8f8:	e51f1094	ldr	r1, =0xfffffb00	; via 0x86c
     8fc:	e15f29b4	ldrh	r2, =0x2a1	; via 0x870
     900:	e1c120b0	strh	r2, [r1]
     904:	e15f29ba	ldrh	r2, =0x2a1	; via 0x872
     908:	e1c120b2	strh	r2, [r1, #2]
     90c:	e15f2ab0	ldrh	r2, =0x2a1	; via 0x874
     910:	e1c120b4	strh	r2, [r1, #4]
     914:	e15f2ab6	ldrh	r2, =0x283	; via 0x876
     918:	e1c120b6	strh	r2, [r1, #6]
     91c:	e15f2abc	ldrh	r2, =0x281	; via 0x878
     920:	e1c120ba	strh	r2, [r1, #10]	; 0xa
     924:	e15f2bb2	ldrh	r2, =0xc0	; via 0x87a
     928:	e1c120bc	strh	r2, [r1, #12]	; 0xc
     92c:	e15f2bb8	ldrh	r2, =0x40	; via 0x87c
     930:	e1c120b8	strh	r2, [r1, #8]
     934:	e15f2bbe	ldrh	r2, =0x2a	; via 0x87e
     938:	e1c120be	strh	r2, [r1, #14]	; 0xe
     93c:	e59f0020	ldr	r0, =0x83e68c	; via 0x964
     940:	e3a01b01	mov	r1, #1024	; 0x400
     944:	e2411004	sub	r1, r1, #4
     948:	e0802001	add	r2, r0, r1
     94c:	e3c22003	bic	r2, r2, #3
     950:	e1a0d002	mov	sp, r2
     954:	e92d100f	stmdb	sp!, {r0, r1, r2, r3, r12}
     958:	eb00050c	bl	0x1d90	; _sta_select_application
     95c:	e8bd100f	ldmia	sp!, {r0, r1, r2, r3, r12}
     960:	ea0005e4	b	0x20f8	; _INT_Initialize
     964:	0083e68c

; start.obj .text section, matches familiar versions

     968:	4961		ldr	r1, =0xfffffa08	; via 0xaf0
     96a:	4862		ldr	r0, =0xffff	; via 0xaf4
     96c:	8008		strh	r0, [r1, #0]
     96e:	4862		ldr	r0, =0xfffffa0a	; via 0xaf8
     970:	211f		mov	r1, #31	; 0x1f
     972:	8001		strh	r1, [r0, #0]
     974:	4861		ldr	r0, =0xfffff804	; via 0xafc
     976:	21f5		mov	r1, #245	; 0xf5
     978:	8001		strh	r1, [r0, #0]
     97a:	21a0		mov	r1, #160	; 0xa0
     97c:	8001		strh	r1, [r0, #0]
     97e:	4860		ldr	r0, =0xffff9800	; via 0xb00
     980:	4960		ldr	r1, =0x2002	; via 0xb04
     982:	8001		strh	r1, [r0, #0]
     984:	485e		ldr	r0, =0xffff9800	; via 0xb00
     986:	8800		ldrh	r0, [r0, #0]
     988:	0840		lsr	r0, r0, #1
     98a:	d2fb		bcs	0x984
     98c:	495e		ldr	r1, =0xfffffd00	; via 0xb08
     98e:	485f		ldr	r0, =0x1001	; via 0xb0c
     990:	8008		strh	r0, [r1, #0]
     992:	46f7		mov	pc, lr

     994:	b500		push	{lr}
     996:	b0ff		sub	sp, #508	; 0x1fc
     998:	b0ca		sub	sp, #296	; 0x128
     99a:	2000		mov	r0, #0
     99c:	9001		str	r0, [sp, #4]
     99e:	9801		ldr	r0, [sp, #4]
     9a0:	2800		cmp	r0, #0
     9a2:	d14e		bne	0xa42
     9a4:	a846		add	r0, sp, #280	; 0x118
     9a6:	2100		mov	r1, #0
     9a8:	f001 f81e	bl	0x19e8
     9ac:	a9c8		add	r1, sp, #800	; 0x320
     9ae:	7008		strb	r0, [r1, #0]
     9b0:	a846		add	r0, sp, #280	; 0x118
     9b2:	a902		add	r1, sp, #8
     9b4:	f000 fadc	bl	0xf70
     9b8:	9000		str	r0, [sp, #0]
     9ba:	9800		ldr	r0, [sp, #0]
     9bc:	2800		cmp	r0, #0
     9be:	d01b		beq	0x9f8
     9c0:	a924		add	r1, sp, #144	; 0x90
     9c2:	4668		mov	r0, sp
     9c4:	7a00		ldrb	r0, [r0, #8]
     9c6:	7008		strb	r0, [r1, #0]
     9c8:	2191		mov	r1, #145	; 0x91
     9ca:	466a		mov	r2, sp
     9cc:	4668		mov	r0, sp
     9ce:	7800		ldrb	r0, [r0, #0]
     9d0:	5488		strb	r0, [r1, r2]
     9d2:	e01b		b	0xa0c
     9d4:	a802		add	r0, sp, #8
     9d6:	a924		add	r1, sp, #144	; 0x90
     9d8:	f000 fdb8	bl	0x154c
     9dc:	e016		b	0xa0c
     9de:	a802		add	r0, sp, #8
     9e0:	a924		add	r1, sp, #144	; 0x90
     9e2:	aac8		add	r2, sp, #800	; 0x320
     9e4:	7812		ldrb	r2, [r2, #0]
     9e6:	f000 fdc5	bl	0x1574
     9ea:	e00f		b	0xa0c
     9ec:	a802		add	r0, sp, #8
     9ee:	a924		add	r1, sp, #144	; 0x90
     9f0:	f000 fdf7	bl	0x15e2
     9f4:	90c7		str	r0, [sp, #796]	; 0x31c
     9f6:	e009		b	0xa0c
     9f8:	4668		mov	r0, sp
     9fa:	7a00		ldrb	r0, [r0, #8]
     9fc:	2800		cmp	r0, #0
     9fe:	d0e9		beq	0x9d4
     a00:	3809		sub	r0, #9
     a02:	2800		cmp	r0, #0
     a04:	d0eb		beq	0x9de
     a06:	3801		sub	r0, #1
     a08:	2800		cmp	r0, #0
     a0a:	d0ef		beq	0x9ec
     a0c:	a824		add	r0, sp, #144	; 0x90
     a0e:	a986		add	r1, sp, #536	; 0x218
     a10:	f000 fb91	bl	0x1136
     a14:	2800		cmp	r0, #0
     a16:	d111		bne	0xa3c
     a18:	a886		add	r0, sp, #536	; 0x218
     a1a:	a9c8		add	r1, sp, #800	; 0x320
     a1c:	7809		ldrb	r1, [r1, #0]
     a1e:	f000 ffb8	bl	0x1992
     a22:	2800		cmp	r0, #0
     a24:	d00a		beq	0xa3c
     a26:	4668		mov	r0, sp
     a28:	7a00		ldrb	r0, [r0, #8]
     a2a:	280a		cmp	r0, #10	; 0xa
     a2c:	d106		bne	0xa3c
     a2e:	a8c8		add	r0, sp, #800	; 0x320
     a30:	7800		ldrb	r0, [r0, #0]
     a32:	f001 f909	bl	0x1c48
     a36:	98c7		ldr	r0, [sp, #796]	; 0x31c
     a38:	f000 fa98	bl	0xf6c
     a3c:	9801		ldr	r0, [sp, #4]
     a3e:	2800		cmp	r0, #0
     a40:	d0b0		beq	0x9a4
     a42:	b07f		add	sp, #508	; 0x1fc
     a44:	b04a		add	sp, #296	; 0x128
     a46:	bd00		pop	{pc}

     a48:	b500		push	{lr}
     a4a:	b0ff		sub	sp, #508	; 0x1fc
     a4c:	b0c8		sub	sp, #288	; 0x120
     a4e:	2000		mov	r0, #0
     a50:	9000		str	r0, [sp, #0]
     a52:	a846		add	r0, sp, #280	; 0x118
     a54:	2101		mov	r1, #1
     a56:	f000 ffc7	bl	0x19e8
     a5a:	a9c6		add	r1, sp, #792	; 0x318
     a5c:	7008		strb	r0, [r1, #0]
     a5e:	a8c6		add	r0, sp, #792	; 0x318
     a60:	7800		ldrb	r0, [r0, #0]
     a62:	28ff		cmp	r0, #255	; 0xff
     a64:	d031		beq	0xaca
     a66:	a846		add	r0, sp, #280	; 0x118
     a68:	a902		add	r1, sp, #8
     a6a:	f000 fa81	bl	0xf70
     a6e:	9001		str	r0, [sp, #4]
     a70:	9801		ldr	r0, [sp, #4]
     a72:	2800		cmp	r0, #0
     a74:	d014		beq	0xaa0
     a76:	a924		add	r1, sp, #144	; 0x90
     a78:	4668		mov	r0, sp
     a7a:	7a00		ldrb	r0, [r0, #8]
     a7c:	7008		strb	r0, [r1, #0]
     a7e:	2291		mov	r2, #145	; 0x91
     a80:	4668		mov	r0, sp
     a82:	4669		mov	r1, sp
     a84:	7909		ldrb	r1, [r1, #4]
     a86:	5411		strb	r1, [r2, r0]
     a88:	a824		add	r0, sp, #144	; 0x90
     a8a:	a986		add	r1, sp, #536	; 0x218
     a8c:	f000 fb53	bl	0x1136
     a90:	2800		cmp	r0, #0
     a92:	d11a		bne	0xaca
     a94:	a886		add	r0, sp, #536	; 0x218
     a96:	a9c6		add	r1, sp, #792	; 0x318
     a98:	7809		ldrb	r1, [r1, #0]
     a9a:	f000 ff7a	bl	0x1992
     a9e:	e014		b	0xaca
     aa0:	4668		mov	r0, sp
     aa2:	7a00		ldrb	r0, [r0, #8]
     aa4:	2800		cmp	r0, #0
     aa6:	d110		bne	0xaca
     aa8:	a802		add	r0, sp, #8
     aaa:	a924		add	r1, sp, #144	; 0x90
     aac:	f000 fd4e	bl	0x154c
     ab0:	a824		add	r0, sp, #144	; 0x90
     ab2:	a986		add	r1, sp, #536	; 0x218
     ab4:	f000 fb3f	bl	0x1136
     ab8:	2800		cmp	r0, #0
     aba:	d104		bne	0xac6
     abc:	a886		add	r0, sp, #536	; 0x218
     abe:	a9c6		add	r1, sp, #792	; 0x318
     ac0:	7809		ldrb	r1, [r1, #0]
     ac2:	f000 ff66	bl	0x1992
     ac6:	2001		mov	r0, #1
     ac8:	9000		str	r0, [sp, #0]
     aca:	9800		ldr	r0, [sp, #0]
     acc:	b07f		add	sp, #508	; 0x1fc
     ace:	b048		add	sp, #288	; 0x120
     ad0:	bd00		pop	{pc}

$sta_select_application:
     ad2:	b500		push	{lr}
     ad4:	b082		sub	sp, #8
     ad6:	f7ff ff47	bl	0x968
     ada:	f001 f85d	bl	0x1b98	; $ser_initialize_serial_link
     ade:	f000 fd23	bl	0x1528	; $con_initialize_conversion
     ae2:	f000 f81f	bl	0xb24	; $fluid_bootloader
     ae6:	f000 f91a	bl	0xd1e	; $FTM_Tool_check
     aea:	b002		add	sp, #8
     aec:	bd00		pop	{pc}
     aee:	46c0		nop			(mov r8, r8)

     af0:	fffffa08
     af4:	0000ffff
     af8:	fffffa0a
     afc:	fffff804
     b00:	ffff9800
     b04:	00002002
     b08:	fffffd00
     b0c:	00001001

; boot.obj .text section

     b10:	e3a0d502	mov	sp, #8388608	; 0x800000
     b14:	e28dd802	add	sp, sp, #131072	; 0x20000
     b18:	e28fe005	add	lr, pc, #5
     b1c:	e12fff1e	bx	lr
     b20:	e1a00000	mov	r0, r0

; The fluid_bootloader() function is fatally hobbled: it initializes the UART
; at 115200 baud, but then does a delay and returns - NO call to SeekMsg()!

$fluid_bootloader:
     b24:	b500		push	{lr}
     b26:	b082		sub	sp, #8
     b28:	49f0		ldr	r1, =0x83ff00	; via 0xeec
     b2a:	48d5		ldr	r0, =0xffff5800	; via 0xe80
     b2c:	6008		str	r0, [r1, #0]
     b2e:	2000		mov	r0, #0
     b30:	2107		mov	r1, #7
     b32:	f000 f9a7	bl	0xe84	; $uart_init
     b36:	2000		mov	r0, #0
     b38:	9001		str	r0, [sp, #4]
     b3a:	9000		str	r0, [sp, #0]
     b3c:	9900		ldr	r1, [sp, #0]
     b3e:	2005		mov	r0, #5
     b40:	0400		lsl	r0, r0, #16
     b42:	4281		cmp	r1, r0
     b44:	d20a		bcs	0xb5c
     b46:	9801		ldr	r0, [sp, #4]
     b48:	3001		add	r0, #1
     b4a:	9001		str	r0, [sp, #4]
     b4c:	9800		ldr	r0, [sp, #0]
     b4e:	3001		add	r0, #1
     b50:	9000		str	r0, [sp, #0]
     b52:	9900		ldr	r1, [sp, #0]
     b54:	2005		mov	r0, #5
     b56:	0400		lsl	r0, r0, #16
     b58:	4281		cmp	r1, r0
     b5a:	d3f4		bcc	0xb46
     b5c:	b002		add	sp, #8
     b5e:	bd00		pop	{pc}

$SeekMsg:
     b60:	b500		push	{lr}
     b62:	b086		sub	sp, #24	; 0x18
     b64:	48f4		ldr	r0, =0x800100	; via 0xf38
     b66:	9005		str	r0, [sp, #20]	; 0x14
     b68:	201b		mov	r0, #27	; 0x1b
     b6a:	f000 f935	bl	0xdd8
     b6e:	20f6		mov	r0, #246	; 0xf6
     b70:	f000 f932	bl	0xdd8
     b74:	2002		mov	r0, #2
     b76:	f000 f92f	bl	0xdd8
     b7a:	2000		mov	r0, #0
     b7c:	f000 f92c	bl	0xdd8
     b80:	2041		mov	r0, #65	; 0x41
     b82:	f000 f929	bl	0xdd8
     b86:	2001		mov	r0, #1
     b88:	f000 f926	bl	0xdd8
     b8c:	2040		mov	r0, #64	; 0x40
     b8e:	f000 f923	bl	0xdd8
     b92:	2001		mov	r0, #1
     b94:	0300		lsl	r0, r0, #12
     b96:	f000 f937	bl	0xe08
     b9a:	281b		cmp	r0, #27	; 0x1b
     b9c:	d000		beq	0xba0
     b9e:	e0bc		b	0xd1a
     ba0:	2001		mov	r0, #1
     ba2:	0300		lsl	r0, r0, #12
     ba4:	f000 f930	bl	0xe08
     ba8:	28f6		cmp	r0, #246	; 0xf6
     baa:	d000		beq	0xbae
     bac:	e0b5		b	0xd1a
     bae:	2001		mov	r0, #1
     bb0:	0300		lsl	r0, r0, #12
     bb2:	f000 f929	bl	0xe08
     bb6:	2802		cmp	r0, #2
     bb8:	d000		beq	0xbbc
     bba:	e0ae		b	0xd1a
     bbc:	2001		mov	r0, #1
     bbe:	0300		lsl	r0, r0, #12
     bc0:	f000 f922	bl	0xe08
     bc4:	2800		cmp	r0, #0
     bc6:	d000		beq	0xbca
     bc8:	e0a7		b	0xd1a
     bca:	2001		mov	r0, #1
     bcc:	0300		lsl	r0, r0, #12
     bce:	f000 f91b	bl	0xe08
     bd2:	2852		cmp	r0, #82	; 0x52
     bd4:	d000		beq	0xbd8
     bd6:	e0a0		b	0xd1a
     bd8:	2001		mov	r0, #1
     bda:	0300		lsl	r0, r0, #12
     bdc:	f000 f914	bl	0xe08
     be0:	2801		cmp	r0, #1
     be2:	d000		beq	0xbe6
     be4:	e099		b	0xd1a
     be6:	2001		mov	r0, #1
     be8:	0300		lsl	r0, r0, #12
     bea:	f000 f90d	bl	0xe08
     bee:	2853		cmp	r0, #83	; 0x53
     bf0:	d000		beq	0xbf4
     bf2:	e092		b	0xd1a
     bf4:	201b		mov	r0, #27	; 0x1b
     bf6:	f000 f8ef	bl	0xdd8
     bfa:	20f6		mov	r0, #246	; 0xf6
     bfc:	f000 f8ec	bl	0xdd8
     c00:	2002		mov	r0, #2
     c02:	f000 f8e9	bl	0xdd8
     c06:	2000		mov	r0, #0
     c08:	f000 f8e6	bl	0xdd8
     c0c:	2041		mov	r0, #65	; 0x41
     c0e:	f000 f8e3	bl	0xdd8
     c12:	2002		mov	r0, #2
     c14:	f000 f8e0	bl	0xdd8
     c18:	2043		mov	r0, #67	; 0x43
     c1a:	f000 f8dd	bl	0xdd8
     c1e:	2001		mov	r0, #1
     c20:	0300		lsl	r0, r0, #12
     c22:	f000 f8f1	bl	0xe08
     c26:	4669		mov	r1, sp
     c28:	7208		strb	r0, [r1, #8]
     c2a:	4668		mov	r0, sp
     c2c:	2102		mov	r1, #2
     c2e:	7441		strb	r1, [r0, #17]	; 0x11
     c30:	2000		mov	r0, #0
     c32:	9000		str	r0, [sp, #0]
     c34:	9800		ldr	r0, [sp, #0]
     c36:	2802		cmp	r0, #2
     c38:	d216		bcs	0xc68
     c3a:	2001		mov	r0, #1
     c3c:	0300		lsl	r0, r0, #12
     c3e:	f000 f8e3	bl	0xe08
     c42:	466a		mov	r2, sp
     c44:	9900		ldr	r1, [sp, #0]
     c46:	1a51		sub	r1, r2, r1
     c48:	7348		strb	r0, [r1, #13]	; 0xd
     c4a:	4668		mov	r0, sp
     c4c:	9900		ldr	r1, [sp, #0]
     c4e:	1a40		sub	r0, r0, r1
     c50:	7b40		ldrb	r0, [r0, #13]	; 0xd
     c52:	4669		mov	r1, sp
     c54:	7c49		ldrb	r1, [r1, #17]	; 0x11
     c56:	4048		eor	r0, r1
     c58:	4669		mov	r1, sp
     c5a:	7448		strb	r0, [r1, #17]	; 0x11
     c5c:	9800		ldr	r0, [sp, #0]
     c5e:	3001		add	r0, #1
     c60:	9000		str	r0, [sp, #0]
     c62:	9800		ldr	r0, [sp, #0]
     c64:	2802		cmp	r0, #2
     c66:	d3e8		bcc	0xc3a
     c68:	4668		mov	r0, sp
     c6a:	8980		ldrh	r0, [r0, #12]	; 0xc
     c6c:	466a		mov	r2, sp
     c6e:	1e41		sub	r1, r0, #1
     c70:	8191		strh	r1, [r2, #12]	; 0xc
     c72:	2800		cmp	r0, #0
     c74:	d016		beq	0xca4
     c76:	2001		mov	r0, #1
     c78:	0300		lsl	r0, r0, #12
     c7a:	f000 f8c5	bl	0xe08
     c7e:	9905		ldr	r1, [sp, #20]	; 0x14
     c80:	7008		strb	r0, [r1, #0]
     c82:	9805		ldr	r0, [sp, #20]	; 0x14
     c84:	7801		ldrb	r1, [r0, #0]
     c86:	4668		mov	r0, sp
     c88:	7c40		ldrb	r0, [r0, #17]	; 0x11
     c8a:	4041		eor	r1, r0
     c8c:	4668		mov	r0, sp
     c8e:	7441		strb	r1, [r0, #17]	; 0x11
     c90:	9805		ldr	r0, [sp, #20]	; 0x14
     c92:	3001		add	r0, #1
     c94:	9005		str	r0, [sp, #20]	; 0x14
     c96:	4668		mov	r0, sp
     c98:	8982		ldrh	r2, [r0, #12]	; 0xc
     c9a:	4669		mov	r1, sp
     c9c:	1e50		sub	r0, r2, #1
     c9e:	8188		strh	r0, [r1, #12]	; 0xc
     ca0:	2a00		cmp	r2, #0
     ca2:	d1e8		bne	0xc76
     ca4:	2001		mov	r0, #1
     ca6:	0300		lsl	r0, r0, #12
     ca8:	f000 f8ae	bl	0xe08
     cac:	4669		mov	r1, sp
     cae:	7408		strb	r0, [r1, #16]	; 0x10
     cb0:	4668		mov	r0, sp
     cb2:	7c01		ldrb	r1, [r0, #16]	; 0x10
     cb4:	7c40		ldrb	r0, [r0, #17]	; 0x11
     cb6:	4281		cmp	r1, r0
     cb8:	d015		beq	0xce6
     cba:	201b		mov	r0, #27	; 0x1b
     cbc:	f000 f88c	bl	0xdd8
     cc0:	20f6		mov	r0, #246	; 0xf6
     cc2:	f000 f889	bl	0xdd8
     cc6:	2002		mov	r0, #2
     cc8:	f000 f886	bl	0xdd8
     ccc:	2000		mov	r0, #0
     cce:	f000 f883	bl	0xdd8
     cd2:	2045		mov	r0, #69	; 0x45
     cd4:	f000 f880	bl	0xdd8
     cd8:	2053		mov	r0, #83	; 0x53
     cda:	f000 f87d	bl	0xdd8
     cde:	2016		mov	r0, #22	; 0x16
     ce0:	f000 f87a	bl	0xdd8
     ce4:	e019		b	0xd1a
     ce6:	201b		mov	r0, #27	; 0x1b
     ce8:	f000 f876	bl	0xdd8
     cec:	20f6		mov	r0, #246	; 0xf6
     cee:	f000 f873	bl	0xdd8
     cf2:	2002		mov	r0, #2
     cf4:	f000 f870	bl	0xdd8
     cf8:	2000		mov	r0, #0
     cfa:	f000 f86d	bl	0xdd8
     cfe:	2041		mov	r0, #65	; 0x41
     d00:	f000 f86a	bl	0xdd8
     d04:	2003		mov	r0, #3
     d06:	f000 f867	bl	0xdd8
     d0a:	2042		mov	r0, #66	; 0x42
     d0c:	f000 f864	bl	0xdd8
     d10:	4876		ldr	r0, =0x83ff00	; via 0xeec
     d12:	6800		ldr	r0, [r0, #0]
     d14:	4990		ldr	r1, =0x800100	; via 0xf58
     d16:	f000 f85e	bl	0xdd6
     d1a:	b006		add	sp, #24	; 0x18
     d1c:	bd00		pop	{pc}

$FTM_Tool_check:
     d1e:	b500		push	{lr}
     d20:	b081		sub	sp, #4
     d22:	2066		mov	r0, #102	; 0x66
     d24:	f000 f858	bl	0xdd8
     d28:	2074		mov	r0, #116	; 0x74
     d2a:	f000 f855	bl	0xdd8
     d2e:	206d		mov	r0, #109	; 0x6d
     d30:	f000 f852	bl	0xdd8
     d34:	2074		mov	r0, #116	; 0x74
     d36:	f000 f84f	bl	0xdd8
     d3a:	206f		mov	r0, #111	; 0x6f
     d3c:	f000 f84c	bl	0xdd8
     d40:	206f		mov	r0, #111	; 0x6f
     d42:	f000 f849	bl	0xdd8
     d46:	206c		mov	r0, #108	; 0x6c
     d48:	f000 f846	bl	0xdd8
     d4c:	4983		ldr	r1, =0x83ff80	; via 0xf5c
     d4e:	2000		mov	r0, #0
     d50:	7008		strb	r0, [r1, #0]
     d52:	9000		str	r0, [sp, #0]
     d54:	9800		ldr	r0, [sp, #0]
     d56:	0c00		lsr	r0, r0, #16
     d58:	d105		bne	0xd66
     d5a:	9800		ldr	r0, [sp, #0]
     d5c:	3001		add	r0, #1
     d5e:	9000		str	r0, [sp, #0]
     d60:	9800		ldr	r0, [sp, #0]
     d62:	0c00		lsr	r0, r0, #16
     d64:	d0f9		beq	0xd5a
     d66:	2007		mov	r0, #7
     d68:	0400		lsl	r0, r0, #16
     d6a:	f000 f84d	bl	0xe08
     d6e:	2879		cmp	r0, #121	; 0x79
     d70:	d10e		bne	0xd90
     d72:	2001		mov	r0, #1
     d74:	0300		lsl	r0, r0, #12
     d76:	f000 f847	bl	0xe08
     d7a:	2865		cmp	r0, #101	; 0x65
     d7c:	d108		bne	0xd90
     d7e:	2001		mov	r0, #1
     d80:	0300		lsl	r0, r0, #12
     d82:	f000 f841	bl	0xe08
     d86:	2873		cmp	r0, #115	; 0x73
     d88:	d102		bne	0xd90
     d8a:	4874		ldr	r0, =0x83ff80	; via 0xf5c
     d8c:	2101		mov	r1, #1
     d8e:	7001		strb	r1, [r0, #0]
     d90:	f000 f8ce	bl	0xf30
     d94:	2800		cmp	r0, #0
     d96:	d00d		beq	0xdb4
     d98:	206d		mov	r0, #109	; 0x6d
     d9a:	f000 f81d	bl	0xdd8
     d9e:	206f		mov	r0, #111	; 0x6f
     da0:	f000 f81a	bl	0xdd8
     da4:	2064		mov	r0, #100	; 0x64
     da6:	f000 f817	bl	0xdd8
     daa:	2065		mov	r0, #101	; 0x65
     dac:	f000 f814	bl	0xdd8
     db0:	206d		mov	r0, #109	; 0x6d
     db2:	e00c		b	0xdce
     db4:	2065		mov	r0, #101	; 0x65
     db6:	f000 f80f	bl	0xdd8
     dba:	2072		mov	r0, #114	; 0x72
     dbc:	f000 f80c	bl	0xdd8
     dc0:	2072		mov	r0, #114	; 0x72
     dc2:	f000 f809	bl	0xdd8
     dc6:	206f		mov	r0, #111	; 0x6f
     dc8:	f000 f806	bl	0xdd8
     dcc:	2072		mov	r0, #114	; 0x72
     dce:	f000 f803	bl	0xdd8
     dd2:	b001		add	sp, #4
     dd4:	bd00		pop	{pc}

$jump:
     dd6:	4708		bx	r1

$putchar:	; static
     dd8:	b081		sub	sp, #4
     dda:	4669		mov	r1, sp
     ddc:	7008		strb	r0, [r1, #0]
     dde:	4843		ldr	r0, =0x83ff00	; via 0xeec
     de0:	6800		ldr	r0, [r0, #0]
     de2:	7940		ldrb	r0, [r0, #5]
     de4:	0980		lsr	r0, r0, #6
     de6:	d3fa		bcc	0xdde
     de8:	4840		ldr	r0, =0x83ff00	; via 0xeec
     dea:	6800		ldr	r0, [r0, #0]
     dec:	4669		mov	r1, sp
     dee:	7809		ldrb	r1, [r1, #0]
     df0:	7001		strb	r1, [r0, #0]
     df2:	b001		add	sp, #4
     df4:	46f7		mov	pc, lr

$getchar:
     df6:	483d		ldr	r0, =0x83ff00	; via 0xeec
     df8:	6800		ldr	r0, [r0, #0]
     dfa:	7940		ldrb	r0, [r0, #5]
     dfc:	0840		lsr	r0, r0, #1
     dfe:	d3fa		bcc	0xdf6
     e00:	483a		ldr	r0, =0x83ff00	; via 0xeec
     e02:	6800		ldr	r0, [r0, #0]
     e04:	7800		ldrb	r0, [r0, #0]
     e06:	4770		bx	lr

$getchar_timeout:
     e08:	b083		sub	sp, #12	; 0xc
     e0a:	9000		str	r0, [sp, #0]
     e0c:	9800		ldr	r0, [sp, #0]
     e0e:	9002		str	r0, [sp, #8]
     e10:	4836		ldr	r0, =0x83ff00	; via 0xeec
     e12:	6800		ldr	r0, [r0, #0]
     e14:	7940		ldrb	r0, [r0, #5]
     e16:	0840		lsr	r0, r0, #1
     e18:	d20c		bcs	0xe34
     e1a:	9802		ldr	r0, [sp, #8]
     e1c:	3801		sub	r0, #1
     e1e:	9002		str	r0, [sp, #8]
     e20:	9802		ldr	r0, [sp, #8]
     e22:	2800		cmp	r0, #0
     e24:	d101		bne	0xe2a
     e26:	20ff		mov	r0, #255	; 0xff
     e28:	e007		b	0xe3a
     e2a:	4830		ldr	r0, =0x83ff00	; via 0xeec
     e2c:	6800		ldr	r0, [r0, #0]
     e2e:	7940		ldrb	r0, [r0, #5]
     e30:	0840		lsr	r0, r0, #1
     e32:	d3f2		bcc	0xe1a
     e34:	482d		ldr	r0, =0x83ff00	; via 0xeec
     e36:	6800		ldr	r0, [r0, #0]
     e38:	7800		ldrb	r0, [r0, #0]
     e3a:	b003		add	sp, #12	; 0xc
     e3c:	4770		bx	lr

$UartTimeout:
     e3e:	b081		sub	sp, #4
     e40:	e001		b	0xe46
     e42:	9800		ldr	r0, [sp, #0]
     e44:	3801		sub	r0, #1
     e46:	9000		str	r0, [sp, #0]
     e48:	4828		ldr	r0, =0x83ff00	; via 0xeec
     e4a:	6800		ldr	r0, [r0, #0]
     e4c:	7940		ldrb	r0, [r0, #5]
     e4e:	0840		lsr	r0, r0, #1
     e50:	d202		bcs	0xe58
     e52:	9800		ldr	r0, [sp, #0]
     e54:	2800		cmp	r0, #0
     e56:	dcf4		bgt	0xe42
     e58:	9800		ldr	r0, [sp, #0]
     e5a:	2800		cmp	r0, #0
     e5c:	dd01		ble	0xe62
     e5e:	2000		mov	r0, #0
     e60:	e000		b	0xe64
     e62:	2001		mov	r0, #1
     e64:	b001		add	sp, #4
     e66:	4770		bx	lr

$hardware_init:
     e68:	b082		sub	sp, #8
     e6a:	9000		str	r0, [sp, #0]
     e6c:	4669		mov	r1, sp
     e6e:	2000		mov	r0, #0
     e70:	7188		strb	r0, [r1, #6]
     e72:	9900		ldr	r1, [sp, #0]
     e74:	483a		ldr	r0, =0xfffef000	; via 0xf60
     e76:	8800		ldrh	r0, [r0, #0]
     e78:	8008		strh	r0, [r1, #0]
     e7a:	b002		add	sp, #8
     e7c:	4770		bx	lr
     e7e:	46c0		nop			(mov r8, r8)

<portion not analyzed yet>

; start.obj .text:v$3 section, matches familiar versions

_sta_select_application:
    1d90:	e92d4000	stmdb	sp!, {lr}
    1d94:	e28fe001	add	lr, pc, #1
    1d98:	e12fff1e	bx	lr
    1d9c:	f7fe fe99	bl	0xad2	; $sta_select_application
    1da0:	4778		bx	pc
    1da2:	46c0		nop			(mov r8, r8)
    1da4:	e8bd8000	ldmia	sp!, {pc}

<1DA8-1EFF: all FFs>

    1f00:	00000001

<1F04-end: all FFs>