Added era.mi; Project containing provisional simulator core
[Mograsim.git] / era.mi / src / era / mi / logic / Bit.java
1 package era.mi.logic;
2
3
4 public enum Bit
5 {
6         ONE, ZERO, Z, X;
7         
8         public static Bit and(Bit a, Bit b)
9         {
10                 return a.and(b);
11         }
12         
13         public Bit and(Bit other)
14         {
15                 if(equals(Bit.ZERO) || other.equals(Bit.ZERO))
16                         return Bit.ZERO;
17                 else if(equals(other) && equals(Bit.ONE))
18                         return Bit.ONE;
19                 else
20                         return Bit.X;
21         }
22         
23         public static Bit or(Bit a, Bit b)
24         {
25                 return a.or(b);
26         }
27         
28         public Bit or(Bit other)
29         {
30                 if(equals(Bit.ONE) || other.equals(Bit.ONE))
31                         return Bit.ONE;
32                 else if(equals(other) && equals(Bit.ZERO))
33                         return Bit.ZERO;
34                 else
35                         return Bit.X;
36         }
37         
38         public static Bit xor(Bit a, Bit b)
39         {
40                 return a.xor(b);
41         }
42         
43         public Bit xor(Bit other)
44         {
45                 //I'm uncertain how this should behave for cases where one value is neither 1 nor 0.
46                 //TODO: Implement xor
47                 return Bit.X;
48         }
49         
50         public Bit not()
51         {
52                 switch(this)
53                 {
54                 case ONE:
55                         return Bit.ZERO;
56                 case ZERO:
57                         return Bit.ONE;
58                 default:
59                         return Bit.X;
60                 }
61         }
62 }