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

Last change on this file since 66 was 50, checked in by mulligan, 10 years ago

More missing cases added to the ASMInterpret functions. Pretty printer
finished.

File size: 8.3 KB
RevLine 
[45]1open ASM;;
2
[44]3let pretty_bit =
4  function true -> "1"
5         | false -> "0"
6
7let pretty_nibble =
8  function (b1,b2,b3,b4) ->
9    pretty_bit b1 ^ pretty_bit b2 ^ pretty_bit b3 ^ pretty_bit b4
10
11let pretty_byte =
12  function (n1, n2) -> pretty_nibble n1 ^ " " ^ pretty_nibble n2
13
14let pretty_word =
15  function (b1,b2) -> pretty_byte b1 ^ " " ^ pretty_byte b2
16
17let pretty_word11 =
18  function (b1,b2,b3,b) ->
19    "word11: " ^ pretty_word (((false,false,false,false),(false,b1,b2,b3)),b)
[45]20
[49]21let pretty_instruction_debug =
[45]22 function
23    ACALL (`ADDR11 (a10,a9,a8,b1)) ->
24     "ACALL addr11 (" ^ pretty_word11 (a10,a9,a8,b1) ^ ")"
25  | ADD (`A,`REG (r1,r2,r3)) ->
26     "ADD A Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
27  | ADD (`A, `DIRECT b1) ->
28     "ADD A direct (" ^ pretty_byte b1 ^ ")"
29  | ADD (`A, `INDIRECT i1) ->
[46]30     "ADD A @Ri (" ^ pretty_bit i1 ^ ")"
[45]31  | ADD (`A, `DATA b1) ->
[46]32     "ADD A #data (" ^ pretty_byte b1 ^ ")"
[45]33  | ADDC (`A, `REG(r1,r2,r3)) ->
[46]34     "ADDC A Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]35  | ADDC (`A, `DIRECT b1) ->
[46]36     "ADDC A direct (" ^ pretty_byte b1 ^ ")"
[45]37  | ADDC (`A,`INDIRECT i1) ->
[46]38     "ADDC A @Ri (" ^ pretty_bit i1 ^ ")"
[45]39  | ADDC (`A,`DATA b1) ->
[46]40     "ADDC A #data (" ^ pretty_byte b1 ^ ")"
[45]41  | AJMP (`ADDR11 (a10,a9,a8,b1)) ->
[46]42     "AJMP addr11 (" ^ pretty_word11 (a10,a9,a8,b1) ^ ")"
[45]43  | ANL (`U1 (`A, `REG (r1,r2,r3))) ->
[46]44     "ANL A Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]45  | ANL (`U1 (`A, `DIRECT b1)) ->
[46]46     "ANL A direct (" ^ pretty_byte b1 ^ ")"
[45]47  | ANL (`U1 (`A, `INDIRECT i1)) ->
[46]48     "ANL A @Ri (" ^ pretty_bit i1 ^ ")"
[45]49  | ANL (`U1 (`A, `DATA b1)) ->
[46]50     "ANL A #data (" ^ pretty_byte b1 ^ ")"
[45]51  | ANL (`U2 (`DIRECT b1,`A)) ->
[46]52     "ANL direct A (" ^ pretty_byte b1 ^ ")"
[45]53  | ANL (`U2 (`DIRECT b1,`DATA b2)) ->
[46]54     "ANL direct #data (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]55  | ANL (`U3 (`C,`BIT b1)) ->
[46]56     "ANL C bit (" ^ pretty_byte b1 ^ ")"
[45]57  | ANL (`U3 (`C,`NBIT b1)) ->
[46]58     "ANL C /bit (" ^ pretty_byte b1 ^ ")"
[45]59  | CJNE (`U1 (`A, `DIRECT b1), `REL b2) ->
[49]60     "CJNE A direct rel (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]61  | CJNE (`U1 (`A, `DATA b1), `REL b2) ->
[49]62     "CJNE A #data rel (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]63  | CJNE (`U2 (`REG(r1,r2,r3), `DATA b1), `REL b2) ->
[49]64     "CJNE Ri #data rel (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]65  | CJNE (`U2 (`INDIRECT i1, `DATA b1), `REL b2) ->
[49]66     "CJNE @Ri #data rel (" ^ pretty_bit i1 ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]67  | CLR `A ->
[49]68     "CLR A"
[45]69  | CLR `C ->
[49]70    "CLR C"
[45]71  | CLR (`BIT b1) ->
[49]72    "CLR bit (" ^ pretty_byte b1 ^ ")"
[45]73  | DA `A ->
[50]74    "DA A"
[45]75  | DEC `A ->
[50]76    "DEC A"
[45]77  | DEC (`REG(r1,r2,r3)) ->
[50]78    "DEC Rn"
[45]79  | DEC (`DIRECT b1) ->
[50]80    "DEC direct (" ^ pretty_byte b1 ^ ")"
[45]81  | DEC (`INDIRECT i1) ->
[50]82    "DEC @Ri (" ^ pretty_bit i1 ^ ")"
[45]83  | DIV (`A, `B) ->
[50]84    "DIV A B"
[45]85  | DJNZ (`REG(r1,r2,r3), `REL b1) ->
[50]86    "DJNZ Rn rel (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ pretty_byte b1 ^ ")"
[45]87  | DJNZ (`DIRECT b1, `REL b2) ->
[50]88    "DJNZ direct rel (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]89  | INC `A ->
[50]90    "INC A"
[45]91  | INC (`REG(r1,r2,r3)) ->
[50]92    "INC Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]93  | INC (`DIRECT b1) ->
[50]94    "INC direct (" ^ pretty_byte b1 ^ ")"
[45]95  | INC (`INDIRECT i1) ->
[50]96    "INC @Ri (" ^ pretty_bit i1 ^ ")"
[45]97  | INC `DPTR ->
[50]98    "INC DPTR"
[45]99  | JB (`BIT b1, `REL b2) ->
[50]100    "JB bit rel (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]101  | JBC (`BIT b1, `REL b2) ->
[50]102    "JBC bit rel (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]103  | JC (`REL b1) ->
[50]104    "JC rel (" ^ pretty_byte b1 ^ ")"
[45]105  | JMP `IND_DPTR ->
[50]106    "JMP @A + DPTR"
[45]107  | JNB (`BIT b1, `REL b2) ->
[50]108    "JNB bit rel (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]109  | JNC (`REL b1) ->
[50]110    "JNC rel (" ^ pretty_byte b1 ^ ")"
[45]111  | JNZ (`REL b1) ->
[50]112    "JNZ rel (" ^ pretty_byte b1 ^ ")"
[45]113  | JZ (`REL b1) ->
[50]114    "JZ rel (" ^ pretty_byte b1 ^ ")"
[45]115  | LCALL (`ADDR16 (b1,b2)) ->
[50]116    "LCALL addr16 (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]117  | LJMP (`ADDR16 (b1,b2)) ->
[50]118    "LJMP addr16 (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]119  | MOV (`U1 (`A, `REG(r1,r2,r3))) ->
[50]120    "MOV A Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]121  | MOV (`U1 (`A, `DIRECT b1)) ->
[50]122    "MOV A direct (" ^ pretty_byte b1 ^ ")"
[45]123  | MOV (`U1 (`A, `INDIRECT i1)) ->
[50]124    "MOV A @Ri (" ^ pretty_bit i1 ^ ")"
[45]125  | MOV (`U1 (`A, `DATA b1)) ->
[50]126    "MOV A #data (" ^ pretty_byte b1 ^ ")"
[45]127  | MOV (`U2 (`REG(r1,r2,r3), `A)) ->
[50]128    "MOV Rn A (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]129  | MOV (`U2 (`REG(r1,r2,r3), (`DIRECT b1))) ->
[50]130    "MOV Rn direct (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]131  | MOV (`U2 (`REG(r1,r2,r3), (`DATA b1))) ->
[50]132    "MOV Rn #data (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]133  | MOV (`U3 (`DIRECT b1, `A)) ->
[50]134    "MOV direct A (" ^ pretty_byte b1 ^ ")"
[45]135  | MOV (`U3 (`DIRECT b1, `REG(r1,r2,r3))) ->
[50]136    "MOV direct Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]137  | MOV (`U3 (`DIRECT b1, `DIRECT b2)) ->
[50]138    "MOV direct direct (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]139  | MOV (`U3 (`DIRECT b1, `INDIRECT i1)) ->
[50]140    "MOV direct @Ri (" ^ pretty_byte b1 ^ pretty_bit i1 ^ ")"
[45]141  | MOV (`U3 (`DIRECT b1, `DATA b2)) ->
[50]142    "MOV direct #data (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]143  | MOV (`U2 (`INDIRECT i1, `A)) ->
[50]144    "MOV @Ri A (" ^ pretty_bit i1 ^ ")"
[45]145  | MOV (`U2 (`INDIRECT i1, `DIRECT b1)) ->
[50]146    "MOV @Ri direct (" ^ pretty_bit i1 ^ pretty_byte b1 ^ ")"
[45]147  | MOV (`U2 (`INDIRECT i1, `DATA b1)) ->
[50]148    "MOV @Ri #data (" ^ pretty_bit i1 ^ pretty_byte b1 ^ ")"
[45]149  | MOV (`U5 (`C, `BIT b1)) ->
[50]150    "MOV C bit (" ^ pretty_byte b1 ^ ")"
[45]151  | MOV (`U6 (`BIT b1, `C)) ->
[50]152    "MOV bit C (" ^ pretty_byte b1 ^ ")"
[45]153  | MOV (`U4 (`DPTR, `DATA16(b1,b2))) ->
[50]154    "MOV DPTR #data16 (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]155  | MOVC (`A, `A_DPTR) ->
[50]156    "MOVC A @A + DPTR"
[45]157  | MOVC (`A, `A_PC) ->
[50]158    "MOVC A @A + PC"
159  | MOVX (`U1 (`A, `EXT_INDIRECT i1)) ->
160    "MOVX A @Ri (" ^ pretty_bit i1 ^ ")"
161  | MOVX (`U1 (`A, `EXT_IND_DPTR)) ->
162    "MOVX A @DPTR"
163  | MOVX (`U2 (`EXT_INDIRECT i1, `A)) ->
164    "MOVX @Ri A ( " ^ pretty_bit i1 ^ ")"
165  | MOVX (`U2 (`EXT_IND_DPTR, `A)) ->
166    "MOVX @DPTR A"
[45]167  | MUL(`A, `B) ->
[50]168    "MUL A B"
[45]169  | NOP ->
[50]170    "NOP"
[45]171  | ORL (`U1(`A, `REG(r1,r2,r3))) ->
[50]172    "ORL A Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]173  | ORL (`U1(`A, `DIRECT b1)) ->
[50]174    "ORL A direct (" ^ pretty_byte b1 ^ ")"
[45]175  | ORL (`U1(`A, `INDIRECT i1)) ->
[50]176    "ORL A @Ri (" ^ pretty_bit i1 ^ ")"
[45]177  | ORL (`U1(`A, `DATA b1)) ->
[50]178    "ORL A #data (" ^ pretty_byte b1 ^ ")"
[45]179  | ORL (`U2(`DIRECT b1, `A)) ->
[50]180    "ORL direct A (" ^ pretty_byte b1 ^ ")"
[45]181  | ORL (`U2 (`DIRECT b1, `DATA b2)) ->
[50]182    "ORL direct #data (" ^ pretty_byte b1 ^ pretty_byte b2 ^ ")"
[45]183  | ORL (`U3 (`C, `BIT b1)) ->
[50]184    "ORL C bit (" ^ pretty_byte b1 ^ ")"
[45]185  | ORL (`U3 (`C, `NBIT b1)) ->
[50]186    "ORL C \\bit (" ^ pretty_byte b1 ^ ")"
[45]187  | POP (`DIRECT b1) ->
[50]188    "POP direct (" ^ pretty_byte b1 ^ ")"
[45]189  | PUSH (`DIRECT b1) ->
[50]190    "PUSH direct (" ^ pretty_byte b1 ^ ")"
[45]191  | RET ->
[50]192    "RET"
[45]193  | RETI ->
[50]194    "RETI"
[45]195  | RL `A ->
[50]196    "RL A"
[45]197  | RLC `A ->
[50]198    "RLC A"
[45]199  | RR `A ->
[50]200    "RR A"
[45]201  | RRC `A ->
[50]202    "RRC A"
[45]203  | SETB `C ->
[50]204    "SETB C"
[45]205  | SETB (`BIT b1) ->
[50]206    "SETB bit (" ^ pretty_byte b1 ^ ")"
[45]207  | SJMP (`REL b1) ->
[50]208    "SJMP rel (" ^ pretty_byte b1 ^ ")"
209  | SUBB (`A, `REG(r1,r2,r3)) ->
210    "SUBB A Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]211  | SUBB (`A, `DIRECT b1) ->
[50]212    "SUBB A direct (" ^ pretty_byte b1 ^ ")"
[45]213  | SUBB (`A, `INDIRECT i1) ->
[50]214    "SUBB A @Ri (" ^ pretty_bit i1 ^ ")"
[45]215  | SUBB (`A, `DATA b1) ->
[50]216    "SUBB A #data (" ^ pretty_byte b1 ^ ")"
[45]217  | SWAP `A ->
[50]218    "SWAP A"
[45]219  | XCH (`A, `REG(r1,r2,r3)) ->
[50]220    "XCH A Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]221  | XCH (`A, `DIRECT b1) ->
[50]222    "XCH A direct (" ^ pretty_byte b1 ^ ")"
[45]223  | XCH (`A, `INDIRECT i1) ->
[50]224    "XCH A @Ri (" ^ pretty_bit i1 ^ ")"
[45]225  | XCHD(`A, `INDIRECT i1) ->
[50]226    "XCHD A @Ri (" ^ pretty_bit i1 ^ ")"
[45]227  | XRL(`U1(`A, `REG(r1,r2,r3))) ->
[50]228    "XRL A Rn (" ^ pretty_bit r1 ^ pretty_bit r2 ^ pretty_bit r3 ^ ")"
[45]229  | XRL(`U1(`A, `DIRECT b1)) ->
[50]230    "XRL A direct (" ^ pretty_byte b1 ^ ")"
[45]231  | XRL(`U1(`A, `INDIRECT i1)) ->
[50]232    "XRL A @Ri (" ^ pretty_bit i1 ^ ")"
[45]233  | XRL(`U1(`A, `DATA b1)) ->
[50]234    "XRL A #data (" ^ pretty_byte b1 ^ ")"
[45]235  | XRL(`U2(`DIRECT b1, `A)) ->
[50]236    "XRL direct A (" ^ pretty_byte b1 ^ ")"
[45]237  | XRL(`U2(`DIRECT b1, `DATA b2)) ->
[50]238    "XRL direct #data (" ^ pretty_byte b2 ^ ")"
[45]239;;
Note: See TracBrowser for help on using the repository browser.