diff options
Diffstat (limited to 'src/lem_interp/interp_interface.lem')
| -rw-r--r-- | src/lem_interp/interp_interface.lem | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/lem_interp/interp_interface.lem b/src/lem_interp/interp_interface.lem index 26f5f508..02e7d2e2 100644 --- a/src/lem_interp/interp_interface.lem +++ b/src/lem_interp/interp_interface.lem @@ -166,6 +166,8 @@ instance (Ord reg_name) let (>=) r1 r2 = (reg_nameCompare r1 r2) <> LT end +(** basic values *) + type bit = | Bitc_zero | Bitc_one @@ -184,7 +186,7 @@ type register_value = <| rv_bits: list bit_lifted; rv_dir: direction; rv_start: type byte_lifted = Byte_lifted of list bit_lifted (* of length 8 *) -type instruction_field_value = list bit +type instruction_field_value = (*SHOULD BE JUST*) list bit (*register_value *) type byte = Byte of list bit (* of length 8 *) @@ -200,6 +202,8 @@ type address = Address of list byte (* of length 8 *) type opcode = Opcode of list byte (* of length 4 *) +(** typeclass instantiations *) + instance (Ord register_value) let compare = defaultCompare let (<) = defaultLess @@ -583,6 +587,14 @@ let address_of_register_value (rv:register_value) : maybe address = end end +let address_of_memory_value (mv:memory_value) : maybe address = + match byte_list_of_memory_value mv with + | Nothing -> Nothing + | Just bs -> + if List.length bs <> 8 then Nothing else + Just (address_of_byte_list bs) + end + val byte_of_int : int -> byte let byte_of_int (i:int) : byte = failwith "TODO" |
