implement clear display instruction
This commit is contained in:
parent
28ddc9b690
commit
7ecfff3e0d
3 changed files with 24 additions and 7 deletions
|
@ -7,7 +7,7 @@ const DISPLAY_HEIGHT: usize = 32;
|
|||
/// Display trait
|
||||
pub trait Display {
|
||||
/// Re-draws the display.
|
||||
fn redraw(&self);
|
||||
fn clear(&self);
|
||||
/// Draws the display.
|
||||
fn draw(&mut self);
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ impl TerminalDisplay {
|
|||
|
||||
impl Display for TerminalDisplay {
|
||||
/// Re-draws the display.
|
||||
fn redraw(&self) {
|
||||
fn clear(&self) {
|
||||
// ANSI Escape code to move cursor to row 1 column 1
|
||||
// See https://stackoverflow.com/a/4062051
|
||||
print!("{esc}[2J{esc}[1;1H", esc = 27 as char);
|
||||
|
|
|
@ -2,7 +2,7 @@ use crate::display::Display;
|
|||
use crate::instruction::Instruction;
|
||||
use crate::stack::Stack;
|
||||
use anyhow::anyhow;
|
||||
use log::{debug, info};
|
||||
use log::{debug, info, warn};
|
||||
use std::fs::File;
|
||||
use std::io::Read;
|
||||
use std::path::Path;
|
||||
|
@ -103,12 +103,29 @@ where
|
|||
let instruction = self.fetch_instruction()?;
|
||||
self.program_counter += 2;
|
||||
|
||||
debug!("PC={} {:04x}", self.program_counter, instruction)
|
||||
debug!("PC={} {:04x}", self.program_counter, instruction);
|
||||
|
||||
// decode & execute
|
||||
//let decode = self.decode_instruction(instruction);
|
||||
self.execute_instruction(instruction)?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// execute
|
||||
fn execute_instruction(&mut self, instruction: Instruction) -> Result<(), anyhow::Error> {
|
||||
match instruction.raw() {
|
||||
// Clear Display
|
||||
0x00E0 => {
|
||||
info!("clear display");
|
||||
self.display.clear()
|
||||
}
|
||||
// Jump
|
||||
0x1000..=0x1FFF => {
|
||||
info!("jump to {}", instruction);
|
||||
}
|
||||
// Unknown instruction
|
||||
_ => {
|
||||
warn!("Unknown instruction: {:04x}, skipping.", instruction);
|
||||
}
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
@ -23,7 +23,7 @@ impl Instruction {
|
|||
impl Display for Instruction {
|
||||
fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
|
||||
f.write_str(&format!(
|
||||
"Instruction: [{:02x}, {:02x}]",
|
||||
"<Instruction: [{:02x}{:02x}]>",
|
||||
((self.data & 0xFF00) >> 8u8) as u8,
|
||||
(self.data & 0x00FF) as u8
|
||||
))
|
||||
|
|
Loading…
Reference in a new issue