<num> = 8 bit number, possibly signed (- prefix), possibly a unicode codepoint (in "")
<reg> = 2 bit register number

ldi  r0, <num> D0 <num>
ldi  r1, <num> D1 <num>
ldi  r2, <num> D2 <num>
ldi  r3, <num> D3 <num>
add  r0, r1    11
add  r1, r1    15
sub  r0, r1    31
sub  r1, r1    35
ld   r0, r1    B1
ld   r1, r1    B5
st   r0, r1    A1
st   r1, r1    A5
move r0, r1    01
move r1, r1    05
and  r0, r1    41
and  r1, r1    45
or   r0, r1    51
or   r1, r1    55
cmp  r0, r1    71
cmp  r1, r1    75
not  r0        80
not  r1        81
neg  r0        84
neg  r1        85
inc  r0        8C
inc  r1        8D
dec  r0        88
dec  r1        89
halt           D4


0000 move
0001 add
0010 ????
0011 sub
0100 and
0101 or
0110 ????
0111 cmp
1000 not/neg/inc/dec
1001 shla/shra
1010 st
1011 ld       
1100 ????      
1101 ldi     <- rn == 4 means halt
1110 ????
1111 ????


halt:
1101 0100

ldi/add/sub/ld/st/move/and/or/cmp:
0000 00 00 [00000000]
op   rn rm immediate


not/neg/inc/dec:
1000 00 00
     op rn

1000 00 not
1000 01 neg
1000 10 dec
1000 11 inc

shla/shra:
1001 00 00
     op rn

1001 01 shla
1001 10 shra


ldi
ld
st
push
pop
move
ldps
stsp
add
addc
sub
cmp
tst # fake
neg
inc
dec
and
or
xor
not
shra
shla
shr
shl
rol
br
bz
beq
bnz
bne
blt
ble
bgt
bge
halt
wait
jsr
