more implementations, still doesn't work.

This commit is contained in:
5225225 2020-06-06 20:35:12 +01:00
parent 89baa2dd3b
commit f438280d6c
1 changed files with 28 additions and 2 deletions

View File

@ -1,6 +1,7 @@
use byteorder::{ReadBytesExt, LE}; use byteorder::{ReadBytesExt, LE};
use std::io::Cursor; use std::io::Cursor;
use std::convert::{TryInto, TryFrom}; use std::convert::{TryInto, TryFrom};
use std::io::Read;
struct Machine { struct Machine {
RX: u16, RX: u16,
@ -522,20 +523,32 @@ impl Machine {
} }
OP::JEQU => { OP::JEQU => {
if self.RSTAT.contains(Flags::FEQUL) { if self.RSTAT.contains(Flags::FEQUL) {
if self.RTRGT == 0 {
return false;
}
self.IP = self.RTRGT; self.IP = self.RTRGT;
should_inc_ip = false; should_inc_ip = false;
} }
} }
OP::JUMP => {
if self.RTRGT == 0 {
return false;
}
self.IP = self.RTRGT;
should_inc_ip = false;
}
OP::INC => { OP::INC => {
let mut val = self.read(ci.args[0]); let mut val = self.read(ci.args[0]);
val += 1; val = val.wrapping_add(1);
self.write(ci.args[0], val); self.write(ci.args[0], val);
self.RSTAT.set(Flags::FZERO, val == 0); self.RSTAT.set(Flags::FZERO, val == 0);
} }
OP::READ => { OP::READ => {
let input = 0; let input = 0;
std::io::stdin().read(&mut [input]).unwrap();
self.write(ci.args[0], input); self.write(ci.args[0], input as u16);
self.RSTAT.set(Flags::FZERO, input == 0); self.RSTAT.set(Flags::FZERO, input == 0);
} }
OP::CPY => { OP::CPY => {
@ -558,6 +571,19 @@ impl Machine {
self.push_stack(self.RTRGT); self.push_stack(self.RTRGT);
self.RTRGT = 0; self.RTRGT = 0;
} }
OP::RCPT => {
let by: i32 = if ci.def.sign() == 1 {
self.RTRGT as i32
} else {
-(self.RTRGT as i32)
};
let from = self.read(ci.args[0]);
let to = ci.args[1].offset(by);
self.write(to, from);
self.RSTAT.set(Flags::FZERO, from == 0);
}
OP::RCPF => { OP::RCPF => {
let by: i32 = if ci.def.sign() == 1 { let by: i32 = if ci.def.sign() == 1 {
self.RTRGT as i32 self.RTRGT as i32