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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
use self::super::super::super::super::isa::SpecialPurposeRegister;
use self::super::super::super::super::vm::Memory;
use bear_lib_terminal::terminal::print_xy;
use self::super::mem_ports_rw_update;
pub fn rw_write(x_start: usize, y_start: usize) {
let x_start = x_start as i32;
let y_start = y_start as i32;
print_xy(x_start, y_start, "Memory access");
print_xy(x_start, y_start + 1, "{none}");
}
pub fn rw_update(x_start: usize, y_start: usize, mem: &mut Memory) {
mem_ports_rw_update(x_start, y_start, mem.iter_rw());
mem.reset_rw();
}
pub fn view_write(x_start: usize, y_start: usize) {
let x_start = x_start as i32;
let y_start = y_start as i32;
print_xy(x_start, y_start, "Memory view");
}
pub fn view_update(x_start: usize, y_start: usize, adr: SpecialPurposeRegister<u16>, mem: &Memory) {
let x_start = x_start as i32;
let y_start = y_start as i32;
let adr = *adr;
for cur_line in 0..10 {
let addr = adr.wrapping_add(cur_line as u16).wrapping_sub(4);
let val = mem[..][addr as usize];
let (clr_start, clr_end) = if addr == adr {
("[bkcolor=darker grey]", "[/bkcolor]")
} else {
("", "")
};
print_xy(x_start,
y_start + 1 + cur_line,
&format!("{}{:04X} {:#04X} {:#06b}_{:04b}{}", clr_start, addr, val, val >> 4, val & 0b1111, clr_end));
}
}