64 lines
1.3 KiB
Rust
64 lines
1.3 KiB
Rust
use super::Display;
|
|
|
|
pub struct DebugDisplay {
|
|
pub (crate) display: Display,
|
|
x: usize,
|
|
y: usize,
|
|
w: usize,
|
|
h: usize,
|
|
}
|
|
|
|
impl DebugDisplay {
|
|
pub fn new(display: Display) -> DebugDisplay {
|
|
let w = display.width/8;
|
|
let h = display.height/16;
|
|
DebugDisplay {
|
|
display,
|
|
x: 0,
|
|
y: 0,
|
|
w: w,
|
|
h: h,
|
|
}
|
|
}
|
|
|
|
pub fn write_char(&mut self, c: char) {
|
|
if self.x >= self.w || c == '\n' {
|
|
self.x = 0;
|
|
self.y += 1;
|
|
}
|
|
|
|
if self.y >= self.h {
|
|
let new_y = self.h - 1;
|
|
let d_y = self.y - new_y;
|
|
|
|
self.display.scroll(d_y * 16);
|
|
|
|
unsafe {
|
|
self.display.sync(0, 0, self.display.width, self.display.height);
|
|
}
|
|
|
|
self.y = new_y;
|
|
}
|
|
|
|
if c != '\n' {
|
|
self.display.char(
|
|
self.x * 8, self.y * 16,
|
|
c,
|
|
0xFFFFFF
|
|
);
|
|
|
|
unsafe {
|
|
self.display.sync(self.x * 8, self.y * 16, 8, 16);
|
|
}
|
|
|
|
self.x += 1;
|
|
}
|
|
}
|
|
|
|
pub fn write(&mut self, buf: &[u8]) {
|
|
for &b in buf {
|
|
self.write_char(b as char);
|
|
}
|
|
}
|
|
}
|