Changeset 455


Ignore:
Timestamp:
Jan 19, 2011, 10:58:43 AM (7 years ago)
Author:
mulligan
Message:

Merge commit.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Deliverables/D4.1/ASMInterpret.mli

    r454 r455  
    33
    44exception CodeTooLarge
    5 
     5 
    66type time = int;;
    77type line = [ `P1 of byte
     
    1818(* In:  reception time, line of input, new continuation,
    1919   Out: transmission time, output line, expected duration until reply,
    20         new continuation.
     20   new continuation.
    2121*)
    2222type continuation =
    2323  [`In of time * line * epsilon * continuation] option *
    24   [`Out of (time -> line -> time * continuation) ];;
     24    [`Out of (time -> line -> time * continuation) ];;
    2525
    2626type status =
    27 {
     27    {
    2828  (* Memory *)
    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 
     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     
    3434  (* Program counter *)
    35   pc: word;
    36 
     35      pc: word;
     36     
    3737  (* SFRs *)
    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 
     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     
    6363  (* Latches for the output lines *)
    64   p1_latch: byte;
    65   p3_latch: byte;
    66 
     64      p1_latch: byte;
     65      p3_latch: byte;
     66     
    6767  (* Fields for tracking the state of the processor. *)
     68     
     69  (* IO specific *)
     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     
     86  (* Timer and clock specific *)
     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     
     100val string_of_status: status -> string
    68101 
    69   (* IO specific *)
    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 
    86   (* Timer and clock specific *)
    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 
    100 val string_of_status: status -> string
    101 
    102102module WordMap: Map.S with type key = BitVectors.word
    103 
     103 
    104104type labelled_memory = BitVectors.byte list * string WordMap.t * bool (* has main *)
    105 
     105 
    106106val assembly:
    107107 [< ASM.labelled_instruction] ASM.program ->
     
    110110(*
    111111val link:
    112  (ASM.instruction list * symbol_table * cost_map) list -> BitVectors.byte list
     112  (ASM.instruction list * symbol_table * cost_map) list -> BitVectors.byte list
    113113*)
    114 
     114 
    115115val initialize: status
    116 
     116 
    117117val load_code_memory: BitVectors.byte list -> Physical.WordMap.map
    118118val load_mem: Physical.WordMap.map -> status -> status
    119119val load: BitVectors.byte list -> status -> status
    120 
     120 
    121121exception Halt  (* to be raised to stop execution *)
    122 
     122 
    123123(* the callback function is used to observe the execution
    124124   trace; it can raise Hold to stop execution. Otherwise
    125125   the processor never halts. *)
    126126val execute: (status -> unit) -> status -> status
    127 
     127 
    128128val fetch: Physical.WordMap.map -> word -> ASM.instruction * word * int
Note: See TracChangeset for help on using the changeset viewer.