Fixed mis-numbering of opcodes

This bug was intentionally kept in order to make sure everything ran flawlessly regardless.
This commit is contained in:
Anthony Foxclaw 2020-02-07 01:01:39 -05:00
parent d63bedda7c
commit 75465c6a20
3 changed files with 37 additions and 36 deletions

View file

@ -13,15 +13,16 @@ Corten is based on Fletcher Haynes's [So you want to build a language VM](https:
| 2 | SUB |
| 3 | MUL |
| 4 | DIV |
| 6 | HLT | Halt |
| 5 | JMP | Jump |
| 8 | JMPF | Jump forward |
| 9 | JMPB | Jump backward |
| 10 | EQ | Equal |
| 11 | NEQ | Not equal |
| 12 | GTE | Greater then or equal to |
| 13 | GT | Greater then |
| 14 | LTE | Less then or equal |
| 15 | LT | Less then
| 16 | JMPE | Jump if equal |
| 5 | HLT | Halt |
| 6 | JMP | Jump |
| 7 | JMPF | Jump forward |
| 8 | JMPB | Jump backward |
| 9 | EQ | Equal |
| 10 | NEQ | Not equal |
| 11 | GTE | Greater then or equal to |
| 12 | GT | Greater then |
| 13 | LTE | Less then or equal |
| 14 | LT | Less then
| 15 | JMPE | Jump if equal |
| 16 | NOP |
| _ | IGL | Illegal action |

View file

@ -40,18 +40,18 @@ impl From<u8> for Opcode {
2 => Opcode::SUB,
3 => Opcode::MUL,
4 => Opcode::DIV,
6 => Opcode::HLT,
7 => Opcode::JMP,
8 => Opcode::JMPF,
9 => Opcode::JMPB,
10 => Opcode::EQ,
11 => Opcode::NEQ,
12 => Opcode::GTE,
13 => Opcode::GT,
14 => Opcode::LTE,
15 => Opcode::LT,
16 => Opcode::JMPE,
17 => Opcode::NOP,
5 => Opcode::HLT,
6 => Opcode::JMP,
7 => Opcode::JMPF,
8 => Opcode::JMPB,
9 => Opcode::EQ,
10 => Opcode::NEQ,
11 => Opcode::GTE,
12 => Opcode::GT,
13 => Opcode::LTE,
14 => Opcode::LT,
15 => Opcode::JMPE,
16 => Opcode::NOP,
_ => Opcode::IGL,
}
}

View file

@ -230,7 +230,7 @@ mod vm_tests {
#[test]
fn test_hlt_opcode() {
let mut vm = get_test_vm();
let test_bytes = vec![6, 0, 0, 0];
let test_bytes = vec![5, 0, 0, 0];
vm.program = test_bytes;
vm.run_once();
assert_eq!(vm.pc, 1);
@ -265,7 +265,7 @@ mod vm_tests {
let mut vm = get_test_vm();
vm.registers[0] = 10;
vm.registers[1] = 10;
vm.program = vec![10, 0, 1, 0, 10, 0, 1, 0];
vm.program = vec![9, 0, 1, 0, 9, 0, 1, 0];
vm.run_once();
assert_eq!(vm.equal_flag, true);
vm.registers[1] = 20;
@ -278,7 +278,7 @@ mod vm_tests {
let mut vm = get_test_vm();
vm.registers[0] = 10;
vm.registers[1] = 20;
vm.program = vec![11, 0, 1, 0, 11, 0, 1, 0];
vm.program = vec![10, 0, 1, 0, 10, 0, 1, 0];
vm.run_once();
assert_eq!(vm.equal_flag, true);
vm.registers[1] = 10;
@ -291,7 +291,7 @@ mod vm_tests {
let mut vm = get_test_vm();
vm.registers[0] = 20;
vm.registers[1] = 10;
vm.program = vec![12, 0, 1, 0, 12, 0, 1, 0, 12, 0, 1, 0];
vm.program = vec![11, 0, 1, 0, 11, 0, 1, 0, 11, 0, 1, 0];
vm.run_once();
assert_eq!(vm.equal_flag, true);
vm.registers[0] = 10;
@ -307,7 +307,7 @@ mod vm_tests {
let mut vm = get_test_vm();
vm.registers[0] = 20;
vm.registers[1] = 10;
vm.program = vec![13, 0, 1, 0, 13, 0, 1, 0, 13, 0, 1, 0];
vm.program = vec![12, 0, 1, 0, 12, 0, 1, 0, 12, 0, 1, 0];
vm.run_once();
assert_eq!(vm.equal_flag, true);
vm.registers[0] = 10;
@ -323,7 +323,7 @@ mod vm_tests {
let mut vm = get_test_vm();
vm.registers[0] = 20;
vm.registers[1] = 10;
vm.program = vec![14, 0, 1, 0, 14, 0, 1, 0, 14, 0, 1, 0];
vm.program = vec![13, 0, 1, 0, 13, 0, 1, 0, 13, 0, 1, 0];
vm.run_once();
assert_eq!(vm.equal_flag, false);
vm.registers[0] = 10;
@ -339,7 +339,7 @@ mod vm_tests {
let mut vm = get_test_vm();
vm.registers[0] = 20;
vm.registers[1] = 10;
vm.program = vec![15, 0, 1, 0, 15, 0, 1, 0, 15, 0, 1, 0];
vm.program = vec![14, 0, 1, 0, 14, 0, 1, 0, 14, 0, 1, 0];
vm.run_once();
assert_eq!(vm.equal_flag, false);
vm.registers[0] = 10;
@ -353,7 +353,7 @@ mod vm_tests {
#[test]
fn test_igl_opcode() {
let mut vm = get_test_vm();
let test_bytes = vec![200, 0, 0, 0];
let test_bytes = vec![254, 0, 0, 0];
vm.program = test_bytes;
vm.run_once();
assert_eq!(vm.pc, 1);
@ -363,7 +363,7 @@ mod vm_tests {
fn test_jmp_opcode() {
let mut vm = get_test_vm();
vm.registers[0] = 1;
vm.program = vec![7, 0, 0, 0];
vm.program = vec![6, 0, 0, 0];
vm.run_once();
assert_eq!(vm.pc, 1);
}
@ -372,7 +372,7 @@ mod vm_tests {
fn test_jmpf_opcode() {
let mut vm = get_test_vm();
vm.registers[0] = 2;
vm.program = vec![8, 0, 0, 0, 6, 0, 0, 0];
vm.program = vec![7, 0, 0, 0, 5, 0, 0, 0];
vm.run_once();
assert_eq!(vm.pc, 4);
}
@ -381,7 +381,7 @@ mod vm_tests {
fn test_jmpb_opcode() {
let mut vm = get_test_vm();
vm.registers[1] = 6;
vm.program = vec![0, 0, 0, 10, 9, 1, 0, 0];
vm.program = vec![0, 0, 0, 10, 8, 1, 0, 0];
vm.run_once();
vm.run_once();
assert_eq!(vm.pc, 0);
@ -392,7 +392,7 @@ mod vm_tests {
let mut vm = get_test_vm();
vm.registers[0] = 7;
vm.equal_flag = true;
vm.program = vec![16, 0, 0, 0, 17, 0, 0, 0, 17, 0, 0, 0];
vm.program = vec![15, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0];
vm.run_once();
assert_eq!(vm.pc, 7);
}