Fixed mis-numbering of opcodes
This bug was intentionally kept in order to make sure everything ran flawlessly regardless.
This commit is contained in:
parent
d63bedda7c
commit
75465c6a20
3 changed files with 37 additions and 36 deletions
23
docs/spec.md
23
docs/spec.md
|
@ -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 |
|
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
|
24
src/vm.rs
24
src/vm.rs
|
@ -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);
|
||||
}
|
||||
|
|
Reference in a new issue