mirror of
https://github.com/ChronosX88/YAVM.git
synced 2024-11-23 20:02:19 +00:00
50 lines
893 B
Go
50 lines
893 B
Go
|
package main
|
||
|
|
||
|
type Opcode int
|
||
|
|
||
|
const (
|
||
|
// LOAD is opcode for loading number into register
|
||
|
// Args:
|
||
|
// 1. register for loading number to
|
||
|
// 2. two bytes for number itself
|
||
|
LOAD Opcode = 0
|
||
|
|
||
|
// ADD is opcode for adding two number from register and storing to register which specified in bytecode
|
||
|
// Args:
|
||
|
// 1. first number from register
|
||
|
// 2. second number from register
|
||
|
// 3. to which register need to store result of adding
|
||
|
ADD Opcode = 1
|
||
|
SUB Opcode = 2
|
||
|
MULTIPLE Opcode = 3
|
||
|
DIVIDE Opcode = 4
|
||
|
HALT Opcode = 45
|
||
|
ILLEGAL Opcode = 50
|
||
|
)
|
||
|
|
||
|
func OpcodeFrom(b uint8) Opcode {
|
||
|
switch b {
|
||
|
case 0: {
|
||
|
return LOAD
|
||
|
}
|
||
|
case 1: {
|
||
|
return ADD
|
||
|
}
|
||
|
case 2: {
|
||
|
return SUB
|
||
|
}
|
||
|
case 3: {
|
||
|
return MULTIPLE
|
||
|
}
|
||
|
case 4: {
|
||
|
return DIVIDE
|
||
|
}
|
||
|
case 45: {
|
||
|
return HALT
|
||
|
}
|
||
|
default: {
|
||
|
return ILLEGAL
|
||
|
}
|
||
|
}
|
||
|
}
|