source: Deliverables/D4.1/SFR.ml @ 85

Last change on this file since 85 was 83, checked in by mulligan, 10 years ago

Lots of work done on tidying up code.

File size: 3.3 KB
RevLine 
[83]1(*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*)
2(* FILENAME:    SFR.ml                                                       *)
3(* DESCRIPTION: Module for 8051 special function registers, including the    *)
4(*              Program Status Word (PSW).                                   *)
5(* CREATED:     16/09/2010, Dominic Mulligan                                 *)
6(* BUGS:                                                                     *)
7(*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*^*)
8
9open Bit;;
10open Byte;;
11
12module type SPECIAL_FUNCTION_REGISTER =
13sig
14  type bit
15  type byte
16
17  type sfr
18
19  val empty: sfr
20
21  val get_p0: sfr -> byte
22  val get_sp: sfr -> byte
23  val get_dpl: sfr -> byte
24  val get_dph: sfr -> byte
25  val get_pcon: sfr -> byte
26  val get_tcon: sfr -> byte
27  val get_tmod: sfr -> byte
28  val get_tl0: sfr -> byte
29  val get_tl1: sfr -> byte
30  val get_th0: sfr -> byte
31  val get_th1: sfr -> byte
32  val get_p1: sfr -> byte
33  val get_scon: sfr -> byte
34  val get_sbuf: sfr -> byte
35  val get_p2: sfr -> byte
36  val get_ie: sfr -> byte
37  val get_p3: sfr -> byte
38  val get_ip: sfr -> byte
39  val get_psw: sfr -> byte
40  val get_acc: sfr -> byte
41  val get_b: sfr -> byte
42
43  val set_p0: sfr -> byte
44  val set_sp: sfr -> byte
45  val set_dpl: sfr -> byte
46  val set_dph: sfr -> byte
47  val set_pcon: sfr -> byte
48  val set_tcon: sfr -> byte
49  val set_tmod: sfr -> byte
50  val set_tl0: sfr -> byte
51  val set_tl1: sfr -> byte
52  val set_th0: sfr -> byte
53  val set_th1: sfr -> byte
54  val set_p1: sfr -> byte
55  val set_scon: sfr -> byte
56  val set_sbuf: sfr -> byte
57  val set_p2: sfr -> byte
58  val set_ie: sfr -> byte
59  val set_p3: sfr -> byte
60  val set_ip: sfr -> byte
61  val set_psw: sfr -> byte
62  val set_acc: sfr -> byte
63  val set_b: sfr -> byte
64
65  val get_cy_flag: sfr -> bit
66  val get_ac_flag: sfr -> bit
67  val get_fo_flag: sfr -> bit
68  val get_rs1_flag: sfr -> bit
69  val get_rs0_flag: sfr -> bit
70  val get_ov_flag: sfr -> bit
71  val get_ud_flag: sfr -> bit
72  val get_p_flag: sfr -> bit
73
74  val set_cy_flag: sfr -> bit -> sfr
75  val set_ac_flag: sfr -> bit -> sfr
76  val set_fo_flag: sfr -> bit -> sfr
77  val set_rs1_flag: sfr -> bit -> sfr
78  val set_rs0_flag: sfr -> bit -> sfr
79  val set_ov_flag: sfr -> bit -> sfr
80  val set_ud_flag: sfr -> bit -> sfr
81  val set_p_flag: sfr -> bit -> sfr
82
83  val to_string: sfr -> string
84end;;
85
86module SpecialFunctionRegisterFunctor (Bit: BIT) (Byte: BYTE with type bit = Bit.bit): SPECIAL_FUNCTION_REGISTER
87  with type bit  = Bit.bit
88  and  type byte = Byte.byte =
89struct
90  type bit  = Bit.bit
91  type byte = Byte.byte
92
93  type sfr =
94  {
95    p0: byte;
96    sp: byte;
97    dpl: byte;
98    dph: byte;
99    pcon: byte;
100    tcon: byte;
101    tmod: byte;
102    tl0: byte;
103    tl1: byte;
104    th0: byte;
105    th1: byte;
106    p1: byte;
107    scon: byte;
108    sbuf: byte;
109    p2: byte;
110    ie: byte;
111    p3: byte;
112    ip: byte;
113    psw: byte;
114    acc: byte;
115    b: byte;
116  }
117
118  let empty = {
119    p0 = Byte.zero;
120    sp = Byte.zero;
121    dpl = Byte.zero;
122    dph = Byte.zero;
123    pcon = Byte.zero;
124    tcon = Byte.zero;
125    tmod = Byte.zero;
126    tl0 = Byte.zero;
127    tl1 = Byte.zero;
128    th0 = Byte.zero;
129    th1 = Byte.zero;
130    p1 = Byte.zero;
131    scon = Byte.zero;
132    sbuf = Byte.zero;
133    p2 = Byte.zero;
134    ie = Byte.zero;
135    p3 = Byte.zero;
136    ip = Byte.zero;
137    psw = Byte.zero;
138    acc = Byte.zero;
139    b = Byte.zero;
140  }
141end;;
Note: See TracBrowser for help on using the repository browser.