10 | `ADDR11 x -> hex_string_of_vect x
11 | `ADDR16 x -> hex_string_of_vect x
12 | `DATA x -> "#0" ^ hex_string_of_vect x ^ "h"
13 | `DATA16 x -> "#0" ^ hex_string_of_vect x ^ "h"
14 | `BIT x -> "bit " ^ hex_string_of_vect (x: byte)
15 | `NBIT x -> "nbit " ^ hex_string_of_vect (x: byte)
16 | `REG (r1, r2, r3) -> "R" ^ string_of_int (int_of_vect (mk_nibble false r1 r2 r3))
17 | `REL x -> hex_string_of_vect x
20 | `DIRECT x -> "0" ^ (hex_string_of_vect (x: byte)) ^ "h"
21 | `EXT_INDIRECT x -> "ext_indirect " ^ string_of_bool x
22 | `EXT_IND_DPTR -> "@DPTR"
23 (* DPM: weird: this seems to be reversed in mcu8051ide: change made. *)
24 | `INDIRECT x -> if not x then "@R0" else "@R1"
25 | `IND_DPTR -> "@DPTR"
31 `CJNE (`U1 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ ", " ^ pp_arg a2 ^ ", " ^ pp_arg a3
32 | `CJNE (`U2 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ ", " ^ pp_arg a2 ^ ", " ^ pp_arg a3
33 | `DJNZ (a1,a2) -> "djnz " ^ pp_arg a1 ^ ", " ^ pp_arg a2
34 | `JB (a1,a2) -> "jb " ^ pp_arg a1 ^ ", " ^ pp_arg a2
35 | `JBC (a1,a2) -> "jbc " ^ pp_arg a1 ^ ", " ^ pp_arg a2
36 | `JC a1 -> "jc " ^ pp_arg a1
37 | `JNB (a1,a2) -> "jnb " ^ pp_arg a1 ^ ", " ^ pp_arg a2
38 | `JNC a1 -> "jnc " ^ pp_arg a1
39 | `JNZ a1 -> "jnz " ^ pp_arg a1
40 | `JZ a1 -> "jz " ^ pp_arg a1
46 | `Jmp j -> "ljmp " ^ j
47 | `Call j -> "lcall " ^ j
48 | `WithLabel i -> pp_jump i
49 | (#jump as i) -> pp_jump i
50 | `Mov (a1,a2) -> "mov " ^ pp_arg a1 ^ ", " ^ a2
51 | `ACALL a1 -> "acall " ^ pp_arg a1
52 | `ADD (a1,a2) -> "add " ^ pp_arg a1 ^ ", " ^ pp_arg a2
53 | `ADDC (a1,a2) -> "addc " ^ pp_arg a1 ^ ", " ^ pp_arg a2
54 | `AJMP a1 -> "ajmp " ^ pp_arg a1
55 | `ANL (`U1 (a1,a2)) -> "anl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
56 | `ANL (`U2 (a1,a2)) -> "anl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
57 | `ANL (`U3 (a1,a2)) -> "anl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
58 | `CLR a1 -> "clr " ^ pp_arg a1
59 | `CPL a1 -> "cpl " ^ pp_arg a1
60 | `DA a1 -> "da " ^ pp_arg a1
61 | `DEC a1 -> "dec " ^ pp_arg a1
62 | `DIV (a1,a2) -> "div AB"
63 | `INC a1 -> "inc " ^ pp_arg a1
64 | `JMP a1 -> "jmp " ^ pp_arg a1
65 | `LCALL a1 -> "lcall " ^ pp_arg a1
66 | `LJMP a1 -> "ljmp " ^ pp_arg a1
67 | `MOV (`U1 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
68 | `MOV (`U2 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
69 | `MOV (`U3 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
70 | `MOV (`U4 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
71 | `MOV (`U5 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
72 | `MOV (`U6 (a1,a2)) -> "mov " ^ pp_arg a1 ^ ", " ^ pp_arg a2
73 | `MOVC (a1,a2) -> "movc " ^ pp_arg a1 ^ ", " ^ pp_arg a2
74 | `MOVX (`U1 (a1,a2)) -> "movx " ^ pp_arg a1 ^ ", " ^ pp_arg a2
75 | `MOVX (`U2 (a1,a2)) -> "movx " ^ pp_arg a1 ^ ", " ^ pp_arg a2
76 | `MUL(a1, a2) -> "mul AB"
78 | `ORL (`U1(a1,a2)) -> "orl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
79 | `ORL (`U2(a1,a2)) -> "orl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
80 | `ORL (`U3(a1,a2)) -> "orl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
81 | `POP a1 -> "pop " ^ pp_arg a1
82 | `PUSH a1 -> "push " ^ pp_arg a1
85 | `RL a1 -> "rl " ^ pp_arg a1
86 | `RLC a1 -> "rlc " ^ pp_arg a1
87 | `RR a1 -> "rr " ^ pp_arg a1
88 | `RRC a1 -> "rrc " ^ pp_arg a1
89 | `SETB a1 -> "setb " ^ pp_arg a1
90 | `SJMP a1 -> "sjmp " ^ pp_arg a1
91 | `SUBB (a1,a2) -> "subb " ^ pp_arg a1 ^ ", " ^ pp_arg a2
92 | `SWAP a1 -> "swap " ^ pp_arg a1
93 | `XCH (a1,a2) -> "xch " ^ pp_arg a1 ^ ", " ^ pp_arg a2
94 | `XCHD(a1,a2) -> "xchd " ^ pp_arg a1 ^ ", " ^ pp_arg a2
95 | `XRL(`U1(a1,a2)) -> "xrl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
96 | `XRL(`U2(a1,a2)) -> "xrl " ^ pp_arg a1 ^ ", " ^ pp_arg a2
99 let eformat = Eformat.create () in
100 let printf = Eformat.printf eformat in
101 let mem = ASMInterpret.load_code_memory p.ASM.code in
103 let (inst, new_pc, cost) = ASMInterpret.fetch mem pc in
104 printf "% 6X: %- 18s ;; %d %s\n"
105 (BitVectors.int_of_vect pc)
106 (pp_instruction inst)
108 (if BitVectors.WordMap.mem pc p.ASM.cost_labels then
109 (BitVectors.WordMap.find pc p.ASM.cost_labels)
112 let _ = List.fold_left f (BitVectors.zero `Sixteen) p.ASM.code in