source: Deliverables/D4.1/Pretty.ml @ 194

Last change on this file since 194 was 150, checked in by mulligan, 10 years ago

Manages to load and emulate a simple array program. A few obscure bugs.

File size: 3.6 KB
Line 
1open BitVectors;;
2open ASM;;
3
4let pp_arg =
5 function
6    `A -> "A"
7  | `B -> "B"
8  | `C -> "C"
9  | `DPTR -> "DPTR"
10  | `ADDR11 x -> hex_string_of_vect x
11  | `ADDR16 x -> hex_string_of_vect x
12  | `DATA x -> "#" ^ hex_string_of_vect x
13  | `DATA16 x -> "#" ^ hex_string_of_vect x
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
18  | `A_DPTR -> "@DPTR"
19  | `A_PC -> "@PC"
20  | `DIRECT x -> hex_string_of_vect (x: byte)
21  | `EXT_INDIRECT x -> "ext_indirect " ^ string_of_bool x
22  | `EXT_IND_DPTR -> "ext_indirect_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"
26;;
27
28let pp_instruction =
29 function
30    `Label l -> l ^ ":"
31  | `Cost l -> l ^ ":"
32  | `Jmp j -> "Jump: " ^ j
33  | `Call j -> "Call: " ^ j
34  | `ACALL a1 -> "acall " ^ pp_arg a1
35  | `ADD (a1,a2) -> "add " ^ pp_arg a1 ^ " " ^ pp_arg a2
36  | `ADDC (a1,a2) -> "addc " ^ pp_arg a1 ^ " " ^ pp_arg a2
37  | `AJMP a1 -> "ajmp " ^ pp_arg a1
38  | `ANL (`U1 (a1,a2)) -> "anl " ^ pp_arg a1 ^ " " ^ pp_arg a2
39  | `ANL (`U2 (a1,a2)) -> "anl " ^ pp_arg a1 ^ " " ^ pp_arg a2
40  | `ANL (`U3 (a1,a2)) -> "anl " ^ pp_arg a1 ^ " " ^ pp_arg a2
41  | `CJNE (`U1 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ " " ^ pp_arg a2 ^ " " ^ pp_arg a3
42  | `CJNE (`U2 (a1,a2),a3) -> "cjne " ^ pp_arg a1 ^ " " ^ pp_arg a2 ^ " " ^ pp_arg a3
43  | `CLR a1 -> "clr " ^ pp_arg a1
44  | `CPL a1 -> "cpl " ^ pp_arg a1
45  | `DA a1 -> "da " ^ pp_arg a1
46  | `DEC a1 -> "dec " ^ pp_arg a1
47  | `DIV (a1,a2) -> "div " ^ pp_arg a1 ^ " " ^ pp_arg a2
48  | `DJNZ (a1,a2) -> "djnz " ^ pp_arg a1 ^ " " ^ pp_arg a2
49  | `INC a1 -> "inc " ^ pp_arg a1
50  | `JB (a1,a2) -> "jb " ^ pp_arg a1 ^ " " ^ pp_arg a2
51  | `JBC (a1,a2) -> "jbc " ^ pp_arg a1 ^ " " ^ pp_arg a2
52  | `JC a1 -> "jc " ^ pp_arg a1
53  | `JMP a1 -> "jmp " ^ pp_arg a1
54  | `JNB (a1,a2) -> "jnb " ^ pp_arg a1 ^ " " ^ pp_arg a2
55  | `JNC a1 -> "jnc " ^ pp_arg a1
56  | `JNZ a1 -> "jnz " ^ pp_arg a1
57  | `JZ a1 -> "jz  " ^ pp_arg a1
58  | `LCALL a1 -> "lcall " ^ pp_arg a1
59  | `LJMP a1 -> "ljmp " ^ pp_arg a1
60  | `MOV (`U1 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
61  | `MOV (`U2 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
62  | `MOV (`U3 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
63  | `MOV (`U4 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
64  | `MOV (`U5 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
65  | `MOV (`U6 (a1,a2)) -> "mov " ^ pp_arg a1 ^ " " ^ pp_arg a2
66  | `MOVC (a1,a2) -> "movc " ^ pp_arg a1 ^ " " ^ pp_arg a2
67  | `MOVX (`U1 (a1,a2)) -> "movx " ^ pp_arg a1 ^ " " ^ pp_arg a2
68  | `MOVX (`U2 (a1,a2)) -> "movx " ^ pp_arg a1 ^ " " ^ pp_arg a2
69  | `MUL(a1, a2) -> "mul " ^ pp_arg a1 ^ " " ^ pp_arg a2
70  | `NOP -> "nop"
71  | `ORL (`U1(a1,a2)) -> "orl " ^ pp_arg a1 ^ " " ^ pp_arg a2
72  | `ORL (`U2(a1,a2)) -> "orl " ^ pp_arg a1 ^ " " ^ pp_arg a2
73  | `ORL (`U3(a1,a2)) -> "orl " ^ pp_arg a1 ^ " " ^ pp_arg a2
74  | `POP a1 -> "pop " ^ pp_arg a1
75  | `PUSH a1 -> "push " ^ pp_arg a1
76  | `RET -> "ret"
77  | `RETI -> "reti"
78  | `RL a1 -> "rl " ^ pp_arg a1
79  | `RLC a1 -> "rlc " ^ pp_arg a1
80  | `RR a1 -> "rr " ^ pp_arg a1
81  | `RRC a1 -> "rrc " ^ pp_arg a1
82  | `SETB a1 -> "setb " ^ pp_arg a1
83  | `SJMP a1 -> "sjmp " ^ pp_arg a1
84  | `SUBB (a1,a2) -> "subb " ^ pp_arg a1 ^ " " ^ pp_arg a2
85  | `SWAP a1 -> "swap " ^ pp_arg a1
86  | `XCH (a1,a2) -> "xch " ^ pp_arg a1 ^ " " ^ pp_arg a2
87  | `XCHD(a1,a2) -> "xchd " ^ pp_arg a1 ^ " " ^ pp_arg a2
88  | `XRL(`U1(a1,a2)) -> "xrl " ^ pp_arg a1 ^ " " ^ pp_arg a2
89  | `XRL(`U2(a1,a2)) -> "xrl " ^ pp_arg a1 ^ " " ^ pp_arg a2
Note: See TracBrowser for help on using the repository browser.