Implemented COPY

This commit is contained in:
Skye Terran 2021-12-08 00:34:27 -08:00
parent 6097fdbf05
commit 22f48d8732
1 changed files with 26 additions and 2 deletions

View File

@ -24,11 +24,11 @@ use std::io;
// 0x1d: LERP (lerp n-2 to n-1 by n alpha) // 0x1d: LERP (lerp n-2 to n-1 by n alpha)
// 0x1e: MIN // 0x1e: MIN
// 0x1f: MAX // 0x1f: MAX
fn main() { fn main() {
println!("Slipcode | Skye Terran, 2021\n"); println!("Slipcode | Skye Terran, 2021\n");
let mut instructions: Vec<u8> = vec![0x01, 0xbf, 0x80, 0x00, 0x00, 0x01, 0x42, 0x65, 0x51, 0xec, 0x02, 0x10]; let mut instructions: Vec<u8> = vec![0x01, 0xbf, 0x80, 0x00, 0x00, 0x01, 0x42, 0x65, 0x51, 0xec, 0x02, 0x10, 0x04, 0x10, 0x04, 0x19, 0x11];
let mut values: Vec<f32> = vec![]; let mut values: Vec<f32> = vec![];
execute(&mut instructions, &mut values); execute(&mut instructions, &mut values);
@ -86,8 +86,10 @@ fn execute(instructions: &mut Vec<u8>, values: &mut Vec<f32>) {
0x01 => is_literal = true, 0x01 => is_literal = true,
0x02 => swap(values), 0x02 => swap(values),
0x03 => del(values), 0x03 => del(values),
0x04 => copy(values),
0x10 => add(values), 0x10 => add(values),
0x11 => sub(values), 0x11 => sub(values),
0x19 => floor(values),
_ => break _ => break
} }
if !is_literal { if !is_literal {
@ -132,6 +134,18 @@ fn del(values: &mut Vec<f32>) {
values.pop(); values.pop();
} }
fn copy(values: &mut Vec<f32>) {
println!("COPY");
let a_opt = values.pop();
if a_opt.is_some() {
let a = a_opt.unwrap();
values.push(a);
values.push(a);
} else {
println!("Not enough values.");
}
}
fn swap(values: &mut Vec<f32>) { fn swap(values: &mut Vec<f32>) {
println!("SWAP"); println!("SWAP");
let b_opt = values.pop(); let b_opt = values.pop();
@ -146,6 +160,16 @@ fn swap(values: &mut Vec<f32>) {
} }
} }
fn floor(values: &mut Vec<f32>) {
println!("FLOOR");
let a_opt = values.pop();
if a_opt.is_some() {
let a = a_opt.unwrap();
let a = a.floor();
values.push(a);
}
}
fn as_u32_be(array: &[u8; 4]) -> u32 { fn as_u32_be(array: &[u8; 4]) -> u32 {
((array[0] as u32) << 24) + ((array[0] as u32) << 24) +
((array[1] as u32) << 16) + ((array[1] as u32) << 16) +