diff --git a/challenge.mctf b/challenge.mctf index 1570b4e..741f44e 100644 Binary files a/challenge.mctf and b/challenge.mctf differ diff --git a/src/main.rs b/src/main.rs index 13e8b09..69ed0a1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -17,6 +17,7 @@ struct Machine { SMAIN: Vec, SCODE: Vec, IP: u16, + input: Vec, } impl Machine { @@ -272,6 +273,7 @@ impl Default for Machine { RX: 0, RY: 0, RZ: 0, + input: vec![], } } } @@ -517,6 +519,8 @@ impl Machine { let a = self.read(ci.args[0]); let b = self.read(ci.args[1]); + eprintln!("CMP({}, {})", a, b); + self.RSTAT.set(Flags::FZERO, a == 0 || b == 0); self.RSTAT.set(Flags::FEQUL, a == b); self.RSTAT.set(Flags::FLT, a < b); @@ -546,11 +550,7 @@ impl Machine { self.RSTAT.set(Flags::FZERO, val == 0); } OP::READ => { - let mut input = 0; - std::io::stdin().read(&mut [input]).unwrap(); - - if input == b'~' { input = 0; } - + let input = self.input.remove(0); self.write(ci.args[0], input as u16); self.RSTAT.set(Flags::FZERO, input == 0); } @@ -658,6 +658,7 @@ fn main() { let mut m = Machine::default(); m.SIN[1..=sin.inner().len()].copy_from_slice(sin.inner()); m.SCODE[1..=code.inner().len()].copy_from_slice(code.inner()); + m.input = b"\x0a".to_vec(); // dump_instructions(&m.SCODE[1..=code.inner().len()]);