1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
use osiris_process::operation::{merge, Operation, OperationSet};
use osiris_process::operation::scheme::{ArgumentType, OperationId};

pub mod range_applications;
pub mod control;

pub mod registers;

pub mod memory;

/// 0x04
pub mod logic {}

pub mod integral_arithmetic;

/// 0x11 Floating point arithmetic (+, -, /, *, rnd(), <=>)
pub mod float_arithmetic {}

/// Returns the standard operation set.
///
/// ## Operations
/// * `0x0000` noop
/// * `0x0101` [jump]:`address`
/// * `0x0102` [call]:`address`
/// * `0x0103` [call_return]
/// * `0x0104` [goto] `direct`:**32**
/// * `0x0105` [gosub] `direct`:**32**
/// * `0x0108` [for]:`counter_init`
/// * `0x0109` [next] `direct`:**32**
/// * `0x01FF` [halt]
///
///
/// * `0x0201` [set_top]:target top:**32**
/// * `0x0202` [set_bottom]:target bottom:**32**
/// * `0x0203` [clear_range]
/// * `0x0204` [move_to_float]:float unsigned:**16**
/// * `0x0205` [move_from_float]:unsigned float:**16**
/// * `0x0210` [push]:unsigned
/// * `0x0211` [pop]:unsigned
///
///
/// * `0x0301` [store_words]:`target` `[start:end]`
/// * `0x0302` [load_words]:`target` `[start:end]`
/// * `0x0303` [get_memory_size]:`target`
/// * `0x0304` [store_floats]:`target` `[start:end]`
/// * `0x0305` [load_floats]:`target` `[start:end]`
///
///
/// * `0x1001` [sum_integers]:`target` `[start:end]`
/// * `0x1002` [product_integers]:`target` `[start:end]`
/// * `0x1003` [difference_integers]:`target` `[start:end]`
/// * `0x1004` [quotient_integers]:`target` `[start:end]`
pub fn get_standard_set() -> OperationSet {
    merge(&[
        control::operation_set(),
        registers::operation_set(),
        memory::operation_set(),
        integral_arithmetic::operation_set(),
        OperationSet::from([
            (OperationId::new(0x0000), Operation::new(
                OperationId::new(0x0000),
                "noop".to_string(),
                false,
                ArgumentType::NoArgument,
                |_, _| Ok(()),
            ))
        ])
    ])
}

#[cfg(test)]
mod tests {

}