umx_asm

UMX virtual machine assembly compiler
git clone git://bsandro.tech/umx_asm
Log | Files | Refs | README | LICENSE

commit 03811c37db143d72e471ffd7dc178d1b965c1b7e
parent dd6689c60b7d3e3e9e327303f5277c6d3a389aed
Author: bsandro <email@bsandro.tech>
Date:   Tue,  5 Jul 2022 21:30:41 +0300

ORTH instruction support

Diffstat:
M.gitignore | 1+
Masm/instruction.go | 16++++++++++++----
Msample.ums | 14++++++++++++--
3 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/.gitignore b/.gitignore @@ -1 +1,2 @@ umx_asm +*.um diff --git a/asm/instruction.go b/asm/instruction.go @@ -58,12 +58,20 @@ func NewInstruction(input []string) *Instruction { return &instr } +//@todo make some kind of polymorphism for different opcodes func (i *Instruction) Pack() uint32 { + const valueMask uint32 = 0x1FFFFFF var ret uint32 = uint32(i.Opcode) << 28 - var r1 uint32 = uint32(i.RegA) << 6 - var r2 uint32 = uint32(i.RegB) << 3 - var r3 uint32 = uint32(i.RegC) - ret = ret | r1 | r2 | r3 + if i.Opcode == ORTH { + var v uint32 = i.Value & valueMask + var r1 uint32 = uint32(i.RegA) << 25 + ret = ret | r1 | v + } else { + var r1 uint32 = uint32(i.RegA) << 6 + var r2 uint32 = uint32(i.RegB) << 3 + var r3 uint32 = uint32(i.RegC) + ret = ret | r1 | r2 | r3 + } return ret } diff --git a/sample.ums b/sample.ums @@ -1,7 +1,17 @@ ; sample file - comments are prepended with a semicolon ; bsd licence, you know the drill -cmov 1 2 3 -arri 1 8 15 +;cmov 1 2 3 +;arri 1 8 15 ;orth 5 493028 + +orth 1 97 +orth 2 98 +orth 3 99 +orth 4 10 +outp 1 +outp 2 +outp 3 +outp 4 + halt