rizin/test/db/analysis/c166
SSharshunov 5e0afe5402
[c166] Fix CIDs (overflows) (#6599)
CID 911455

CID 911454

CID 909873
2026-08-12 12:04:56 +00:00

727 lines
35 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NAME=c166: checking bitness writing (asm.bits) and instruction length
FILE=malloc://32
CMDS=<<EOF
e asm.arch=c166
e asm.bits
wx 0012 @ 0
wx 3B @ 2
wx 6034 @ 3
ao 3~size
wx 0012 @ 0
wx 3B00 @ 2
wx 6034 @ 4
ao 3~size
wx 6035 @ 0
wx 0012 @ 2
wx 0012 @ 4
ao 3~size
wx 2056 @ 0
wx 0012 @ 2
wx 3B @ 4
ao 3~size
wx 0156 @ 0
wx 0012 @ 2
wx 0012 @ 4
ao 3~size
wx 645d203d @ 0
pD 4
e asm.bytes=true
wx 0012603488560D080B7820560F2440122DFA081208340856 @ 0
pdq 12
ao 12~size
EOF
EXPECT=<<EOF
16
size: 2
size: 2
size: 4
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
0x00000000 and 0xfe00:0x3d20, 0xfeba
0x00000000 0012 add r1, r2
0x00000002 6034 and r3, r4
0x00000004 8856 mov [-r6], r5
0x00000006 0d08 jmpr cc_UC, 0x000018
0x00000008 0b78 mul r7, r8
0x0000000a 2056 sub r5, r6
0x0000000c 0f24 bset 0xfd48.0
0x0000000e 4012 cmp r1, r2
0x00000010 2dfa jmpr cc_Z/EQ, 0x000006
0x00000012 0812 add r1, #2
0x00000014 0834 add r3, #4
0x00000016 0856 add r5, #6
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
size: 2
EOF
RUN
NAME=c166: checking analysis information for coverage
FILE=malloc://32
CMDS=<<EOF
e asm.arch=c166
wx AB01 @ 0
ao ~mnemonic,opcode,type,fail,size,reg,description
echo
wx EB20 @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx 5911 @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx 0C01 @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx 2C01 @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx A402102c @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx 8402102c @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx A202102c @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx B202102c @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx 8202102c @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx 9202102c @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx 9B02102c @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
wx E202102c @ 0
ao ~mnemonic,opcode,type,fail,size,description,stackop,stackptr,refptr
echo
EOF
EXPECT=<<EOF
opcode: calli cc_UC, [r1]
mnemonic: calli
description: Call indirect subroutine if condition is met
size: 2
type: ircall
reg: r1
fail: 0x00000002
opcode: retp 0xfe40
mnemonic: retp
description: Return from intra-segment subroutine and pop direct word register from system stack
refptr: 0
size: 2
type: ret
stackop: get
stackptr: 4
opcode: xorb rh0, #0x0001
mnemonic: xorb
refptr: 0
size: 2
type: xor
opcode: rol r0, r1
mnemonic: rol
refptr: 0
size: 2
type: rol
opcode: ror r0, r1
mnemonic: ror
refptr: 0
size: 2
type: ror
opcode: movb [r2], 0xfe00:0x2c10
mnemonic: movb
refptr: 0
size: 4
type: mov
opcode: mov [r2], 0xfe00:0x2c10
mnemonic: mov
refptr: 0
size: 4
type: mov
opcode: cmpd1 r2, 0xfe00:0x2c10
mnemonic: cmpd1
refptr: 0
size: 4
type: cmp
opcode: cmpd2 r2, 0xfe00:0x2c10
mnemonic: cmpd2
refptr: 0
size: 4
type: cmp
opcode: cmpi1 r2, 0xfe00:0x2c10
mnemonic: cmpi1
refptr: 0
size: 4
type: cmp
opcode: cmpi2 r2, 0xfe00:0x2c10
mnemonic: cmpi2
refptr: 0
size: 4
type: cmp
opcode: trap #0x0008
mnemonic: trap
description: Call interrupt service routine via immediate trap number
refptr: 0
size: 2
type: trap
fail: 0x00000002
stackop: inc
stackptr: 6
opcode: pcall 0xfe04, 0x2c10
mnemonic: pcall
description: Push direct word register onto system stack and call absolute subroutine
refptr: 0
size: 4
type: ucall
fail: 0x00000004
stackop: inc
stackptr: 4
EOF
RUN
NAME=C166 check error coverage
FILE=bins/omf/omf166/measure
CMDS=<<EOF
e asm.arch=c166
e asm.bytes=true
e cfg.bigendian=true
wx E202102c @ 0
EOF
EXPECT=
REGEXP_FILTER_ERR=<<EOF
ERROR:.+
EOF
EXPECT_ERR=<<EOF
ERROR: core: cannot change to big endian (arch 'c166' supports only little endian)
ERROR: Could not write hexpair 'E202102c' at 0
EOF
RUN
NAME=C166 measure binary file iA
FILE=bins/omf/omf166/measure
CMDS=<<EOF
e asm.arch=c166
e asm.bytes=true
iA
echo
iS
echo
aaa
pd 150
echo
pd 21 @ 0x00c001e6
echo
pd @ 0x00c018da
echo
pdf @ 0x00c013b0
echo
pdf @ 0x00c0168a
EOF
EXPECT=<<EOF
offset size arch bits machine big_endian
------------------------------------------------------------------------------------
0x00000000 123551 c166 16 Siemens/Infineon C166 family microcontroller false
paddr size vaddr vsize align perm name type flags
-------------------------------------------------------------------------------
0x00000000 0x250 0x00c0168a 0x250 0x0 -rw- PR_MCOMMAND_FCODE
0x00000000 0x6f 0x00c01e4c 0x6f 0x0 -r-- HC_MCOMMAND_HCONST
0x00000000 0x45a 0x00c01230 0x45a 0x0 -rw- PR_MEASURE_FCODE
0x00000000 0x426 0x00c01a26 0x426 0x0 -r-- HC_MEASURE_HCONST
0x00000000 0x1b 0x00010240 0x1b 0x0 -rw- ND0_MEASURE_NDATA0
0x00000000 0x2010 0x0001025c 0x2010 0x0 -rw- HD0_MEASURE_HDATA0
0x00000000 0x3 0x0000fd00 0x3 0x0 -rw- BI0_MEASURE_BIT0
0x00000000 0x92 0x00c018da 0x92 0x0 -rw- PR_GETLINE_FCODE
0x00000000 0x52 0x00c0196c 0x52 0x0 -rw- PR_PUTCHAR_FCODE
0x00000000 0xc 0x00c0001c 0xc 0x0 -rw- PR_GETKEY_FCODE
0x00000000 0x8 0x00c00074 0x8 0x0 -rw- PR_TRAPS_FCODE
0x00000000 0x200 0x00010000 0x200 0x0 -rw- C_USERSTACK_NDATA
0x00000000 0x20 0x00010200 0x20 0x0 -rw- C_USERSTACK1_NDATA
0x00000000 0x20 0x00010220 0x20 0x0 -rw- C_USERSTACK2_NDATA
0x00000000 0x200 0x0000f600 0x200 0x0 -rw- C_SYSSTACK_IDATA
0x00000000 0x15e 0x00c00084 0x15e 0x0 -rw- C_STARTUP_CODE_ICODE
0x00000000 0xb7c 0x00c001e2 0xb7c 0x0 -rw- C_LIB_CODE_FCODE
0x00000000 0x4d2 0x00c00d5e 0x4d2 0x0 -rw- PR_SCANF_FCODE
0x00000000 0x5a 0x00c01ebc 0x5a 0x0 -r-- HC__PRNFMT_HCONST
0x00000000 0x30 0x00c00044 0x30 0x0 -r-- C_LIB_NCONST_NCONST
0x00000000 0x1a 0x00c019ec 0x1a 0x0 -rw- PR_ISSPACE_FCODE
0x00000000 0x18 0x00c01a06 0x18 0x0 -rw- PR_TOUPPER_FCODE
0x00000000 0x2e 0x00c019be 0x2e 0x0 -rw- PR_GETCHAR_FCODE
0x00000000 0x1 0x0001025b 0x1 0x0 -rw- ND0_GETCHAR_NDATA0
0x00000000 0x8 0x00c01a1e 0x8 0x0 -rw- PR_UNGET_FCODE
0x00000000 0x2 0x00c00004 0x2 0x0 -r-- C_INITSEC_UNKNOWN
0x00000000 0x18 0x00c0002c 0x18 0x0 -r-- C_CLRMEMSEC_UNKNOWN
;-- int.RESET:
/ entry0();
\ ,=< 0x00c00000 fac08400 jmps ?C_RESET ; sym.a166_FAR._C_STARTUP
\ | ; 0xc00084
| ;-- section.C_INITSEC_UNKNOWN:
| 0x00c00004 0000 add r0, r0 ; [25] -r-- section size 2 named C_INITSEC_UNKNOWN
| 0x00c00006 ffff bset r15.15
/ sym.isr_vec_0x8();
\ | 0x00c00008 fac07400 jmps NMI_trap ; 0xc00074 ; "\r\xff\r\xff\r\xff\r\xff\xff\xff\xff\xff\xfa\xc0\x80\U00000012\xa5Z\xa5\xa5р\xe6\xea"
| 0x00c0000c ffff bset r15.15
| 0x00c0000e ffff bset r15.15
/ sym.isr_vec_0x10();
\ | 0x00c00010 fac07600 jmps STKOF_trap ; 0xc00076 ; "\r\xff\r\xff\r\xff\xff\xff\xff\xff\xfa\xc0\x80\U00000012\xa5Z\xa5\xa5р\xe6\xea"
| 0x00c00014 ffff bset r15.15
| 0x00c00016 ffff bset r15.15
/ sym.isr_vec_0x18();
\ | 0x00c00018 fac07800 jmps STKUF_trap ; 0xc00078 ; "\r\xff\r\xff\xff\xff\xff\xff\xfa\xc0\x80\U00000012\xa5Z\xa5\xa5р\xe6\xea"
@| ; CALL XREFS from main @ 0xc01550, 0xc01614
@| ; CALL XREF from getline @ 0xc018ea
@| ; CALL XREF from sym.getchar @ 0xc019d2
@| ;-- getkey:
@| ;-- section.PR_GETKEY_FCODE:
@| ;-- _getkey:
/ _getkey();
| @=-> 0x00c0001c 9ab7fe70 jnb S0RIC.7, _getkey ; Getkey.c:22 ; 0xc0001c ; [09] -rw- section size 12 named PR_GETKEY_FCODE
| | 0x00c00020 f2f4b2fe mov r4, 0xfe06:0x3eb2 ; Getkey.c:26
| | 0x00c00024 7eb7 bclr S0RIC.7 ; Getkey.c:27
\ | 0x00c00026 db00 rets ; Getkey.c:28
/ sym.isr_vec_0x28();
\ ,==< 0x00c00028 fac07a00 jmps Class_B_trap ; 0xc0007a ; "\r\xff\xff\xff\xff\xff\xfa\xc0\x80\U00000012\xa5Z\xa5\xa5р\xe6\xea"
|| ;-- section.C_CLRMEMSEC_UNKNOWN:
|| 0x00c0002c 1a800400 bfldh P0L, #0x00, #0x04 ; [26] -r-- section size 24 named C_CLRMEMSEC_UNKNOWN
|| 0x00c00030 40c2 cmp r12, r2
|| 0x00c00032 0fa0 bset T2CON.0
|| 0x00c00034 04005cc2 add 0xfe06:0x025c, DPP0
|| 0x00c00038 03000000 addb DPP0, 0xfe00:0x0000
|| 0x00c0003c 0080 add r8, r0
|| 0x00c0003e 04005bc2 add 0xfe06:0x025b, DPP0
|| 0x00c00042 0000 add r0, r0
|| ;-- section.C_LIB_NCONST_NCONST:
|| 0x00c00044 0000 add r0, r0 ; [19] -r-- section size 48 named C_LIB_NCONST_NCONST
|| 0x00c00046 803f cmpi1 r15, #0x03
|| 0x00c00048 0000 add r0, r0
|| 0x00c0004a 2041 sub r4, r1
|| 0x00c0004c 0000 add r0, r0
|| 0x00c0004e c842 mov [r4], [r2]
|| 0x00c00050 0000 add r0, r0
|| 0x00c00052 7a440040 bxor 0xfd88.4, section.BI0_MEASURE_BIT0
|| 0x00c00056 1c46 rol r6, #0x04
|| 0x00c00058 0050 add r5, r0
|| 0x00c0005a c3470024 CoSTORE r4, 0xffde
|| 0x00c0005e 74498096 or 0xfe04:0x1680, CC9
|| 0x00c00062 184b addc r4, [r3]
|| 0x00c00064 20bc sub r11, r12
|| 0x00c00066 be4c bclr 0xfd98.11
|| 0x00c00068 ca1b0e5a calla- cc_NUSR1, 0xc05a0e ; 0x5a0e
|| 0x00c0006c 1cc2 rol r2, #0x0c
|| 0x00c0006e 5367aec5 xorb PECC7, 0xfe06:0x05ae
|| 0x00c00072 9d74 jmpr cc_NC/UGE, 0xc0015c ; sym.a166_NEAR.RepeatInit+0x2
@|| ; CODE XREF from sym.isr_vec_0x8 @ 0xc00008
@|| ;-- section.PR_TRAPS_FCODE:
/ NMI_trap();
\ @==-> 0x00c00074 0dff jmpr cc_UC, NMI_trap ; Traps.c:24 ; [10] -rw- section size 8 named PR_TRAPS_FCODE
@|| ; CODE XREF from sym.isr_vec_0x10 @ 0xc00010
/ STKOF_trap();
\ @==-> 0x00c00076 0dff jmpr cc_UC, STKOF_trap ; Traps.c:33
@|| ; CODE XREF from sym.isr_vec_0x18 @ 0xc00018
/ STKUF_trap();
\ @==-> 0x00c00078 0dff jmpr cc_UC, STKUF_trap ; Traps.c:42
@|| ; CODE XREF from sym.isr_vec_0x28 @ 0xc00028
/ Class_B_trap();
\ @`--> 0x00c0007a 0dff jmpr cc_UC, Class_B_trap ; Traps.c:56
| 0x00c0007c ffff bset r15.15
| 0x00c0007e ffff bset r15.15
/ sym.isr_vec_0x80();
\ | 0x00c00080 fac08012 jmps timer0 ; 0xc01280
| ; CODE XREF from entry0 @ 0xc00000
| ;-- C_RESET:
| ;-- section.C_STARTUP_CODE_ICODE:
| ;-- a166_FAR.?C_STARTUP:
/ ?C_RESET();
| `-> 0x00c00084 a55aa5a5 diswdt ; START_V2.A66:1453 ; [15] -rw- section size 350 named C_STARTUP_CODE_ICODE
| 0x00c00088 d180 extr #1 ; START_V2.A66:1492
| 0x00c0008a e6ea0000 mov 0xf1d4, #0x0000 ; START_V2.A66:1493
| 0x00c0008e e6f08400 mov r0, #0x0084 ; START_V2.A66:1500
| 0x00c00092 f6f000ee mov 0xfe06:0x2e00, r0 ; START_V2.A66:1501
| 0x00c00096 e000 mov r0, #0x00 ; START_V2.A66:1506
| 0x00c00098 f6f002ee mov 0xfe06:0x2e02, r0 ; START_V2.A66:1507
| 0x00c0009c e6f06450 mov r0, #0x5064 ; START_V2.A66:1514
| 0x00c000a0 f6f010ee mov 0xfe06:0x2e10, r0 ; START_V2.A66:1515
| 0x00c000a4 e6f02100 mov r0, #0x0021 ; START_V2.A66:1518
| 0x00c000a8 f6f012ee mov 0xfe06:0x2e12, r0 ; START_V2.A66:1519
| 0x00c000ac d180 extr #1 ; START_V2.A66:1651
| 0x00c000ae e6e88978 mov 0xf1d0, #0x7889 ; START_V2.A66:1652
| 0x00c000b2 e6d50000 mov FOCON, #0x0000 ; START_V2.A66:1657
| 0x00c000b6 e60b00f8 mov STKUN, #0xf800 ; START_V2.A66:1660
| 0x00c000ba e60a0cf6 mov STKOV, #0xf60c ; START_V2.A66:1661
| 0x00c000be e60900f8 mov SP, #0xf800 ; START_V2.A66:1662
| 0x00c000c2 e6860000 mov BUSCON0, #0x0000 ; START_V2.A66:1663
| 0x00c000c6 e6000400 mov DPP0, #0x0004 ; START_V2.A66:1672
| 0x00c000ca e6010500 mov DPP1, #0x0005 ; START_V2.A66:1674
| 0x00c000ce e6020003 mov DPP2, #0x0300 ; START_V2.A66:1675
| 0x00c000d2 e60820fc mov CP, #0xfc20 ; START_V2.A66:1679
| 0x00c000d6 b54ab5b5 einit ; START_V2.A66:1686
| 0x00c000da 1a880203 bfldh PSW, #0x03, #0x02 ; START_V2.A66:1690
| 0x00c000de e6f02002 mov r0, #0x0220 ; START_V2.A66:1691
| 0x00c000e2 1a880303 bfldh PSW, #0x03, #0x03 ; START_V2.A66:1695
| 0x00c000e6 e6f04002 mov r0, #0x0240 ; START_V2.A66:1696
| 0x00c000ea 1a880003 bfldh PSW, #0x03, #0x00 ; START_V2.A66:1700
\ 0x00c000ee e6f00002 mov r0, #0x0200 ; START_V2.A66:1703
/ sym.a166_NEAR.Clr_Memory();
| 0x00c000f2 e6f9c000 mov r9, #0x00c0 ; START_V2.A66:1755
| 0x00c000f6 e6f82c00 mov r8, #0x002c ; START_V2.A66:1756
| 0x00c000fa f018 mov r1, r8 ; START_V2.A66:1757
| 0x00c000fc 7019 or r1, r9 ; START_V2.A66:1758
\ ,=< 0x00c000fe 2d29 jmpr cc_Z/EQ, sym.a166_NEAR.EndClear ; START_V2.A66:1759
/ sym.a166_NEAR.RepeatClear();
| | 0x00c00100 e005 mov r5, #0x00 ; START_V2.A66:1765
| | 0x00c00102 dc09 exts r9, #1 ; START_V2.A66:1766
| | 0x00c00104 9828 mov r2, [r8+] ; START_V2.A66:1767
| | 0x00c00106 2d25 jmpr cc_Z/EQ, sym.a166_NEAR.EndClear ; START_V2.A66:1768
| | 0x00c00108 f032 mov r3, r2 ; START_V2.A66:1769
| | 0x00c0010a dc09 exts r9, #1 ; START_V2.A66:1770
| | 0x00c0010c 9848 mov r4, [r8+] ; START_V2.A66:1771
| | 0x00c0010e aaf21be0 jbc r2.14, sym.a166_NEAR.ClearNear ; START_V2.A66:1772 ; 0xc00148
\ | 0x00c00112 aaf20ef0 jbc r2.15, sym.a166_NEAR.ClearFar ; START_V2.A66:1773 ; 0xc00132
/ sym.a166_NEAR.ClearBit();
| | 0x00c00116 f034 mov r3, r4 ; START_V2.A66:1775
| | 0x00c00118 7c33 shr r3, #0x03 ; START_V2.A66:1776
| | 0x00c0011a 0ef3 bclr r3.0 ; START_V2.A66:1777
| | 0x00c0011c 06f300fd add r3, #section.BI0_MEASURE_BIT0 ; START_V2.A66:1778
| | 0x00c00120 e015 mov r5, #0x01 ; START_V2.A66:1779
| | 0x00c00122 4c54 shl r5, r4 ; START_V2.A66:1780
| | 0x00c00124 9150 cpl r5 ; START_V2.A66:1781
| | 0x00c00126 685b and r5, [r3] ; START_V2.A66:1782
| | 0x00c00128 b853 mov [r3], r5 ; START_V2.A66:1783
| | 0x00c0012a 0841 add r4, #1 ; START_V2.A66:1784
| | 0x00c0012c 2821 sub r2, #1 ; START_V2.A66:1785
| | 0x00c0012e 3df3 jmpr cc_NZ/NE, sym.a166_NEAR.ClearBit ; START_V2.A66:1786
\ | 0x00c00130 0de7 jmpr cc_UC, sym.a166_NEAR.RepeatClear ; START_V2.A66:1787
| ; DATA XREF from sym.a166_NEAR.RepeatClear @ 0xc00112
/ sym.a166_NEAR.ClearFar();
| | 0x00c00132 dc09 exts r9, #1 ; START_V2.A66:1789
\ | 0x00c00134 9838 mov r3, [r8+] ; START_V2.A66:1790
/ sym.a166_NEAR.RepClearFar();
| | 0x00c00136 dc44 extp r4, #1 ; START_V2.A66:1795
| | 0x00c00138 b9a3 movb [r3], rl5 ; START_V2.A66:1796
| | 0x00c0013a 0831 add r3, #1 ; START_V2.A66:1797
| | 0x00c0013c 1840 addc r4, #0 ; START_V2.A66:1798
| | 0x00c0013e 76f300c0 or r3, #0xc000 ; START_V2.A66:1799
| | 0x00c00142 2821 sub r2, #1 ; START_V2.A66:1800
| | 0x00c00144 7df8 jmpr cc_NN, sym.a166_NEAR.RepClearFar ; START_V2.A66:1801
\ | 0x00c00146 0ddc jmpr cc_UC, sym.a166_NEAR.RepeatClear ; START_V2.A66:1802
| ; DATA XREF from sym.a166_NEAR.RepeatClear @ 0xc0010e
/ sym.a166_NEAR.ClearNear();
| | 0x00c00148 b9a4 movb [r4], rl5 ; START_V2.A66:1808
| | 0x00c0014a 0841 add r4, #1 ; START_V2.A66:1809
| | 0x00c0014c 2821 sub r2, #1 ; START_V2.A66:1810
| | 0x00c0014e 7dfc jmpr cc_NN, sym.a166_NEAR.ClearNear ; START_V2.A66:1811
\ | 0x00c00150 0dd7 jmpr cc_UC, sym.a166_NEAR.RepeatClear ; START_V2.A66:1812
| ;-- a166_NEAR.Init_Vars:
/ sym.a166_NEAR.EndClear();
| `-> 0x00c00152 e6f9c000 mov r9, #0x00c0 ; START_V2.A66:1873
\ 0x00c00156 e6f80400 mov r8, #0x0004 ; START_V2.A66:1874
; DATA XREF from sym.a166_NEAR.NoDPP3Adj @ 0xc001b6
/ sym.a166_NEAR.RepeatInit();
| 0x00c0015a e6030300 mov DPP3, #0x0003 ; START_V2.A66:1880
| 0x00c0015e dc09 exts r9, #1 ; START_V2.A66:1881
| 0x00c00160 a828 mov r2, [r8] ; START_V2.A66:1882
| 0x00c00162 2d3d jmpr cc_Z/EQ, sym.a166_NEAR.EndInit ; START_V2.A66:1883
| 0x00c00164 0882 add r8, #2 ; START_V2.A66:1884
| 0x00c00166 1890 addc r9, #0 ; START_V2.A66:1885
| 0x00c00168 aaf22af0 jbc r2.15, sym.a166_NEAR.InitBit ; START_V2.A66:1886 ; 0xc001c0
| 0x00c0016c f042 mov r4, r2 ; START_V2.A66:1887
| 0x00c0016e 66f2ff3f and r2, #0x3fff ; START_V2.A66:1888
| 0x00c00172 3d05 jmpr cc_NZ/NE, sym.a166_NEAR.LenLoad ; START_V2.A66:1889
| 0x00c00174 e004 mov r4, #0x00 ; START_V2.A66:1890
| 0x00c00176 dc09 exts r9, #1 ; START_V2.A66:1891
| 0x00c00178 a828 mov r2, [r8] ; START_V2.A66:1892
| 0x00c0017a 0882 add r8, #2 ; START_V2.A66:1893
\ 0x00c0017c 1890 addc r9, #0 ; START_V2.A66:1894
/ sym.a166_NEAR.LenLoad();
| 0x00c0017e dc09 exts r9, #1 ; START_V2.A66:1895
| 0x00c00180 a838 mov r3, [r8] ; START_V2.A66:1896
| 0x00c00182 0882 add r8, #2 ; START_V2.A66:1897
| 0x00c00184 1890 addc r9, #0 ; START_V2.A66:1898
| 0x00c00186 8af406e0 jb r4.14, sym.a166_NEAR.CopyInitVal ; START_V2.A66:1899 ; 0xc00196
| 0x00c0018a f6f306fe mov DPP3:0x3e06, r3 ; START_V2.A66:1900
| 0x00c0018e dc09 exts r9, #1 ; START_V2.A66:1901
| 0x00c00190 a838 mov r3, [r8] ; START_V2.A66:1902
| 0x00c00192 0882 add r8, #2 ; START_V2.A66:1903
\ 0x00c00194 1890 addc r9, #0 ; START_V2.A66:1904
; DATA XREF from sym.a166_NEAR.LenLoad @ 0xc00186
/ sym.a166_NEAR.CopyInitVal();
| 0x00c00196 dc09 exts r9, #1 ; START_V2.A66:1905
| 0x00c00198 a9a8 movb rl5, [r8] ; START_V2.A66:1906
| 0x00c0019a 0881 add r8, #1 ; START_V2.A66:1907
; CALL XREF from sym.a166_FAR._C_FPATOF @ 0xc00660
/ sym.a166_FAR._C_FPADD();
| 0x00c001e6 ca008c05 calla+ cc_UC, ?C_FPGETOPN ; 0x58c ; 1420
| 0x00c001ea 46faff00 cmp r10, #0x00ff
| ,=< 0x00c001ee 3d10 jmpr cc_NZ/NE, 0xc00210
| | 0x00c001f0 46f78000 cmp r7, #0x0080
| ,==< 0x00c001f4 3d13 jmpr cc_NZ/NE, 0xc0021c
| || 0x00c001f6 46f9ff00 cmp r9, #0x00ff
| ,===< 0x00c001fa 3d07 jmpr cc_NZ/NE, 0xc0020a
| ||| 0x00c001fc 46f58000 cmp r5, #0x0080
| ,====< 0x00c00200 3d0d jmpr cc_NZ/NE, 0xc0021c
| |||| 0x00c00202 2af2f280 bcmp r2.8, r2.0
| ,=====< 0x00c00206 6d0a jmpr cc_N, 0xc0021c
| ,======< 0x00c00208 0d0b jmpr cc_UC, 0xc00220
| |||`---> 0x00c0020a 4af2f280 bmov r2.8, r2.0
| |||,===< 0x00c0020e 0d08 jmpr cc_UC, 0xc00220
| |||||`-> 0x00c00210 46f9ff00 cmp r9, #0x00ff
| |||||,=< 0x00c00214 3d07 jmpr cc_NZ/NE, sym.a166_FAR._C_FPXSUB
| |||||| 0x00c00216 46f58000 cmp r5, #0x0080
| ,=======< 0x00c0021a 2d02 jmpr cc_Z/EQ, 0xc00220
| ==``-`--> 0x00c0021c ea00b205 jmpa+ cc_UC, ?C_FPNANRSL ; sym.a166_NEAR._C_FPNANRSL
| || | | ; 0xc005b2
\ ``--`,==< 0x00c00220 ea00ba05 jmpa+ cc_UC, ?C_FPINFRSL ; sym.a166_NEAR._C_FPINFRSL
\ || ; 0xc005ba
|| ; CALL XREF from ?C_FPCMP @ 0xc00530
/ sym.a166_FAR._C_FPXSUB();
| |`-> 0x00c00224 48a0 cmp r10, #0
; CALL XREF from main @ 0xc014c4
;-- section.PR_GETLINE_FCODE:
/ getline();
| 0x00c018da ecfd push r13 ; Getline.c:20 ; [07] -rw- section size 146 named PR_GETLINE_FCODE
| 0x00c018dc ecfe push r14
| 0x00c018de ecff push r15
| 0x00c018e0 f0e9 mov r14, r9
| 0x00c018e2 f0d8 mov r13, r8
| 0x00c018e4 2802 sub r0, #2
| 0x00c018e6 e108 movb rl4, #0x0000 ; Getline.c:21
| 0x00c018e8 b980 movb [r0], rl4
| 0x00c018ea dac01c00 calls _getkey ; Getline.c:24 ; 0xc0001c
| 0x00c018ee f0f4 mov r15, r4
| 0x00c018f0 47f80d00 cmpb rl4, #0x000d
| ,=< 0x00c018f4 3d01 jmpr cc_NZ/NE, 0xc018f8
| | 0x00c018f6 e0af mov r15, #0x0a
| `-> 0x00c018f8 f04f mov r4, r15 ; Getline.c:26
| 0x00c018fa 47f80800 cmpb rl4, #0x0008
| ,=< 0x00c018fe 2d03 jmpr cc_Z/EQ, 0xc01906
| | 0x00c01900 47f87f00 cmpb rl4, #0x007f
| ,==< 0x00c01904 3d11 jmpr cc_NZ/NE, 0xc01928
| |`-> 0x00c01906 a980 movb rl4, [r0] ; Getline.c:27
| |,=< 0x00c01908 2d1f jmpr cc_Z/EQ, 0xc01948
| || 0x00c0190a a980 movb rl4, [r0] ; Getline.c:28
| || 0x00c0190c 2981 subb rl4, #0x0001
| || 0x00c0190e b980 movb [r0], rl4
; CALL XREF from main @ 0xc0153e
/ read_index();
| 0x00c013b0 ecfe push r14 ; Measure.c:129
| 0x00c013b2 ecff push r15
| 0x00c013b4 f0e8 mov r14, r8
| 0x00c013b6 f0f9 mov r15, r9
| 0x00c013b8 2802 sub r0, #2
| 0x00c013ba e004 mov r4, #0x00 ; Measure.c:130
| 0x00c013bc b840 mov [r0], r4
| 0x00c013be f3f84602 movb rl4, 0xfe00:0x0246 ; Measure.c:133
| ,=< 0x00c013c2 3d17 jmpr cc_NZ/NE, data.00c013f2
| | 0x00c013c4 f3f84702 movb rl4, 0xfe00:0x0247
| ,==< 0x00c013c8 3d14 jmpr cc_NZ/NE, data.00c013f2
| || 0x00c013ca f2f44802 mov r4, 0xfe00:0x0248
| || 0x00c013ce 46f4e703 cmp r4, #0x03e7
| ,===< 0x00c013d2 9d0f jmpr cc_NC/UGE, data.00c013f2
| ,====< 0x00c013d4 9a000d20 jnb section.BI0_MEASURE_BIT0, data.00c013f2 ; 0xc013f2
| |||| 0x00c013d8 e6fa821a mov r10, #0x1a82 ; Measure.c:137
| |||| 0x00c013dc e6fbc000 mov r11, #0x00c0
| |||| 0x00c013e0 e6f8261a mov r8, #0x1a26
| |||| 0x00c013e4 e6f9c000 mov r9, #0x00c0
| |||| 0x00c013e8 dac04a05 calls printf ; sym.a166_FAR.printf
| |||| ; 0xc0054a ; int printf(const char *format)
| |||| 0x00c013ec e6f4ffff mov r4, #0xffff ; Measure.c:138
| ,=====< 0x00c013f0 0d28 jmpr cc_UC, 0xc01442
| ||||| ; DATA XREF from read_index @ 0xc013d4
| ||||| ;-- data.00c013f2:
| |````-> 0x00c013f2 f040 mov r4, r0 ; Measure.c:139
| | 0x00c013f4 e005 mov r5, #0x00
| | 0x00c013f6 06f40000 add r4, #0x0000
| | 0x00c013fa 16f50100 addc r5, #0x0001
| | 0x00c013fe 8850 mov [-r0], r5
| | 0x00c01400 f0c4 mov r12, r4
| | 0x00c01402 e6fa491e mov r10, #0x1e49
| | 0x00c01406 e6fbc000 mov r11, #0x00c0
| | 0x00c0140a f09f mov r9, r15
| | 0x00c0140c f08e mov r8, r14
| | 0x00c0140e dac0fc0d calls sscanf ; sym.a166_FAR.sscanf
| | ; 0xc00dfc ; int sscanf(const char *s, const char *format, va_list args)
| | 0x00c01412 0802 add r0, #2
| | 0x00c01414 f054 mov r5, r4
| | 0x00c01416 4850 cmp r5, #0 ; Measure.c:141
| | ,=< 0x00c01418 2d05 jmpr cc_Z/EQ, 0xc01424
| | | 0x00c0141a a840 mov r4, [r0]
| | ,==< 0x00c0141c 2d03 jmpr cc_Z/EQ, 0xc01424
| | || 0x00c0141e 46f5ffff cmp r5, #0xffff
| | ,===< 0x00c01422 3d03 jmpr cc_NZ/NE, 0xc0142a
| | |``-> 0x00c01424 e6f4ff01 mov r4, #0x01ff
| | | 0x00c01428 b840 mov [r0], r4
| | `---> 0x00c0142a a850 mov r5, [r0] ; Measure.c:142
| | 0x00c0142c f2f44a02 mov r4, 0xfe00:0x024a
| | 0x00c01430 2045 sub r4, r5
| | 0x00c01432 b840 mov [r0], r4
| | 0x00c01434 4840 cmp r4, #0 ; Measure.c:143
| | ,=< 0x00c01436 dd04 jmpr cc_SGE, 0xc01440
| | | 0x00c01438 a840 mov r4, [r0]
| | | 0x00c0143a 06f40002 add r4, #0x0200
| | | 0x00c0143e b840 mov [r0], r4
| | `-> 0x00c01440 a840 mov r4, [r0] ; Measure.c:144
| `-----> 0x00c01442 0802 add r0, #2 ; Measure.c:145
| 0x00c01444 fcff pop r15
| 0x00c01446 fcfe pop r14
\ 0x00c01448 db00 rets
; CALL XREFS from main @ 0xc01586, 0xc01608
;-- section.PR_MCOMMAND_FCODE:
/ measure_display();
| 0x00c0168a ecfd push r13 ; Mcommand.c:16 ; [00] -rw- section size 592 named PR_MCOMMAND_FCODE
| 0x00c0168c d4400600 mov r4, [r0+#0x0006] ; Mcommand.c:24
| 0x00c01690 8840 mov [-r0], r4
| 0x00c01692 d4400600 mov r4, [r0+#0x0006]
| 0x00c01696 8840 mov [-r0], r4
| 0x00c01698 f4800600 movb rl4, [r0+#0x0006]
| 0x00c0169c c08c movbz r12, rl4
| 0x00c0169e f4800500 movb rl4, [r0+#0x0005]
| 0x00c016a2 c08b movbz r11, rl4
| 0x00c016a4 f4800400 movb rl4, [r0+#0x0004]
| 0x00c016a8 c08a movbz r10, rl4
| 0x00c016aa e6f8981e mov r8, #0x1e98
| 0x00c016ae e6f9c000 mov r9, #0x00c0
| 0x00c016b2 dac04a05 calls printf ; sym.a166_FAR.printf
| ; 0xc0054a ; int printf(const char *format)
| 0x00c016b6 0804 add r0, #4
| 0x00c016b8 e00d mov r13, #0x00 ; Mcommand.c:26
| ,=< 0x00c016ba 0d20 jmpr cc_UC, 0xc016fc
| .--> 0x00c016bc f04d mov r4, r13 ; Mcommand.c:27
| :| 0x00c016be c084 movbz r4, rl4
| :| 0x00c016c0 5c14 shl r4, #0x01
| :| 0x00c016c2 e081 mov r1, #0x08
| :| 0x00c016c4 0010 add r1, r0
| :| 0x00c016c6 0014 add r1, r4
| :| 0x00c016c8 a841 mov r4, [r1]
| :| 0x00c016ca e005 mov r5, #0x00
| :| 0x00c016cc e006 mov r6, #0x00
| :| 0x00c016ce dac08204 calls ?C_FCAST ; sym.a166_FAR._C_FCAST
| :| ; 0xc00482
| :| 0x00c016d2 e006 mov r6, #0x00
| :| 0x00c016d4 e6f7a040 mov r7, #0x40a0
| :| 0x00c016d8 dac0ca02 calls ?C_FPMUL ; sym.a166_FAR._C_FPMUL
| :| ; 0xc002ca
| :| 0x00c016dc e006 mov r6, #0x00
| :| 0x00c016de e6f78044 mov r7, #0x4480
| :| 0x00c016e2 dac05e03 calls ?C_FPDIV ; sym.a166_FAR._C_FPDIV
| :| ; 0xc0035e
| :| 0x00c016e6 f0b4 mov r11, r4
| :| 0x00c016e8 f0c5 mov r12, r5
| :| 0x00c016ea f04d mov r4, r13
| :| 0x00c016ec c08a movbz r10, rl4
| :| 0x00c016ee e6f88b1e mov r8, #0x1e8b
| :| 0x00c016f2 e6f9c000 mov r9, #0x00c0
| :| 0x00c016f6 dac04a05 calls printf ; sym.a166_FAR.printf
| :| ; 0xc0054a ; int printf(const char *format)
| :| 0x00c016fa 08d1 add r13, #1 ; Mcommand.c:28
| :`-> 0x00c016fc f04d mov r4, r13
| : 0x00c016fe 4984 cmpb rl4, #0x0004
| `==< 0x00c01700 3ddd jmpr cc_NZ/NE, 0xc016bc
| 0x00c01702 fcfd pop r13 ; Mcommand.c:29
\ 0x00c01704 db00 rets
EOF
RUN
NAME=C166 measure raw dump file iA
FILE=bins/c166/measure_raw.bin
CMDS=<<EOF
e asm.arch=c166
e asm.bytes=true
iA
echo
iS
echo
pd 25
echo
EOF
EXPECT=<<EOF
offset size arch bits machine big_endian
----------------------------------------------------------------------------------
0x00000000 7958 c166 16 Siemens/Infineon C166 family microcontroller false
paddr size vaddr vsize align perm name type flags
--------------------------------------------------
;-- entry0:
,=< 0x00c00000 fac08400 jmps 0xc00084
| 0x00c00004 0000 add r0, r0
| 0x00c00006 ffff bset r15.15
,==< 0x00c00008 fac07400 jmps 0xc00074
|| 0x00c0000c ffff bset r15.15
|| 0x00c0000e ffff bset r15.15
,===< 0x00c00010 fac07600 jmps 0xc00076
||| 0x00c00014 ffff bset r15.15
||| 0x00c00016 ffff bset r15.15
,====< 0x00c00018 fac07800 jmps 0xc00078
@====-> 0x00c0001c 9ab7fe70 jnb 0xff6e.7, 0xc0001c
|||| 0x00c00020 f2f4b2fe mov r4, 0xfe06:0x3eb2
|||| 0x00c00024 7eb7 bclr 0xff6e.7
|||| 0x00c00026 db00 rets
,=====< 0x00c00028 fac07a00 jmps 0xc0007a
||||| 0x00c0002c 1a800400 bfldh 0xff00, #0x00, #0x04
||||| 0x00c00030 40c2 cmp r12, r2
||||| 0x00c00032 0fa0 bset 0xff40.0
||||| 0x00c00034 04005cc2 add 0xfe06:0x025c, 0xfe00
||||| 0x00c00038 03000000 addb 0xfe00, 0xfe00:0x0000
||||| 0x00c0003c 0080 add r8, r0
||||| 0x00c0003e 04005bc2 add 0xfe06:0x025b, 0xfe00
||||| 0x00c00042 0000 add r0, r0
||||| 0x00c00044 0000 add r0, r0
||||| 0x00c00046 803f cmpi1 r15, #0x03
EOF
RUN
#NAME=C166 Hello world binary file
#FILE=bins/c166/hello_world_hex167.bin
#CMDS=<<EOF
#e asm.arch=c166
#pD 4
#ia
#flt
#pd 1221 @ 0
#EOF
#EXPECT=<<EOF
# ,=< 0x00000000 jmps 0x00, 0x0004
#EOF
#RUN