source: Deliverables/D4.1/ASMInterpret.mli @ 550

Last change on this file since 550 was 455, checked in by mulligan, 9 years ago

Merge commit.

File size: 3.2 KB
RevLine 
[138]1open BitVectors;;
2open Physical;;
3
[100]4exception CodeTooLarge
[455]5 
[138]6type time = int;;
[168]7type line = [ `P1 of byte
8            | `P3 of byte
[209]9            | `SerialBuff of [ `Eight of byte
10                             | `Nine of BitVectors.bit * byte
11                             ]
12            ];;
[193]13
14val string_of_line: line -> string;;
[209]15
16type epsilon = int;;
17
[166]18(* In:  reception time, line of input, new continuation,
19   Out: transmission time, output line, expected duration until reply,
[455]20   new continuation.
[166]21*)
[138]22type continuation =
[209]23  [`In of time * line * epsilon * continuation] option *
[455]24    [`Out of (time -> line -> time * continuation) ];;
[99]25
[209]26type status =
[455]27    {
[209]28  (* Memory *)
[455]29      code_memory: WordMap.map;        (* can be reduced *)
30      low_internal_ram: Byte7Map.map;
31      high_internal_ram: Byte7Map.map;
32      external_ram: WordMap.map;
33     
[209]34  (* Program counter *)
[455]35      pc: word;
36     
[209]37  (* SFRs *)
[455]38      sp: byte;
39      dpl: byte;
40      dph: byte;
41      pcon: byte;
42      tcon: byte;
43      tmod: byte;
44      tl0: byte;
45      tl1: byte;
46      th0: byte;
47      th1: byte;
48      p1: byte;
49      scon: byte;
50      sbuf: byte;
51      ie: byte;
52      p3: byte;
53      ip: byte;
54      psw: byte;
55      acc: byte;
56      b: byte;
57      t2con: byte;   (* 8052 only *)
58      rcap2l: byte;  (* 8052 only *)
59      rcap2h: byte;  (* 8052 only *)
60      tl2: byte;     (* 8052 only *)
61      th2: byte;     (* 8052 only *)
62     
[209]63  (* Latches for the output lines *)
[455]64      p1_latch: byte;
65      p3_latch: byte;
66     
[209]67  (* Fields for tracking the state of the processor. *)
[455]68     
[209]69  (* IO specific *)
[455]70      previous_p1_val: bool;
71      previous_p3_val: bool;
72     
73      serial_epsilon_out: epsilon option;
74      serial_epsilon_in: epsilon option;
75     
76      io_epsilon: epsilon;
77     
78      serial_v_in: [`Eight of byte | `Nine of (BitVectors.bit * byte) ] option;
79      serial_v_out: [`Eight of byte | `Nine of (BitVectors.bit * byte) ] option;
80     
81      serial_k_out: continuation option;
82     
83      io: continuation;
84      expected_out_time: [ `None | `Now | `At of time ];
85     
[209]86  (* Timer and clock specific *)
[455]87      clock: time;
88      timer0: word;
89      timer1: word;
90      timer2: word;  (* can be missing *)
91     
92      esi_running: bool;
93      t0i_running: bool;
94      t1i_running: bool;
95      e0i_running: bool;
96      e1i_running: bool;
97      es_running: bool;
98    }
99     
[195]100val string_of_status: status -> string
[455]101 
[454]102module WordMap: Map.S with type key = BitVectors.word
[455]103 
[454]104type labelled_memory = BitVectors.byte list * string WordMap.t * bool (* has main *)
[455]105 
[454]106val assembly:
107 [< ASM.labelled_instruction] ASM.program ->
108  (*ASM.instruction list * symbol_table *) labelled_memory
109
[138]110(*
111val link:
[455]112  (ASM.instruction list * symbol_table * cost_map) list -> BitVectors.byte list
[138]113*)
[455]114 
[100]115val initialize: status
[455]116 
[454]117val load_code_memory: BitVectors.byte list -> Physical.WordMap.map
[138]118val load_mem: Physical.WordMap.map -> status -> status
[100]119val load: BitVectors.byte list -> status -> status
[455]120 
[101]121exception Halt  (* to be raised to stop execution *)
[455]122 
[100]123(* the callback function is used to observe the execution
124   trace; it can raise Hold to stop execution. Otherwise
125   the processor never halts. *)
126val execute: (status -> unit) -> status -> status
[455]127 
[138]128val fetch: Physical.WordMap.map -> word -> ASM.instruction * word * int
Note: See TracBrowser for help on using the repository browser.