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   0xff6e, _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  0xff6e                ; 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 0xff00, #0x00, #0x04  ; [26] -r-- section size 24 named C_CLRMEMSEC_UNKNOWN
       ||   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
       ||   ;-- 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, 0xfe92
       ||   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  0xfece, 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   0xffaa, #0x0000       ; START_V2.A66:1657
|           0x00c000b6      e60b00f8       mov   0xfe16, #0xf800       ; START_V2.A66:1660
|           0x00c000ba      e60a0cf6       mov   0xfe14, #0xf60c       ; START_V2.A66:1661
|           0x00c000be      e60900f8       mov   0xfe12, #0xf800       ; START_V2.A66:1662
|           0x00c000c2      e6860000       mov   0xff0c, #0x0000       ; START_V2.A66:1663
|           0x00c000c6      e6000400       mov   0xfe00, #0x0004       ; START_V2.A66:1672
|           0x00c000ca      e6010500       mov   0xfe02, #0x0005       ; START_V2.A66:1674
|           0x00c000ce      e6020003       mov   0xfe04, #0x0300       ; START_V2.A66:1675
|           0x00c000d2      e60820fc       mov   0xfe10, #0xfc20       ; START_V2.A66:1679
|           0x00c000d6      b54ab5b5       einit                       ; START_V2.A66:1686
|           0x00c000da      1a880203       bfldh 0xff10, #0x03, #0x02  ; START_V2.A66:1690
|           0x00c000de      e6f02002       mov   r0, #0x0220           ; START_V2.A66:1691
|           0x00c000e2      1a880303       bfldh 0xff10, #0x03, #0x03  ; START_V2.A66:1695
|           0x00c000e6      e6f04002       mov   r0, #0x0240           ; START_V2.A66:1696
|           0x00c000ea      1a880003       bfldh 0xff10, #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   0xfe06, #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   0xfe06: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
