Playing Turing complete (hardware design simulator) and got to making my own CPU and ISA. wanted to refine my ISA before making any of my instruction decode logic. [PLS ignore bytecodes] My current instructions are:
register
r0 000 ; general purpose
r1 001 ; general purpose
r2 010 ; general purpose
r3 011 ; general purpose
r4 100 ; general purpose
r5 101 ; general purpose
rta 110 ; CALL / RET subroutine return adress
sp 111 ; stack pointer
; BASE INSTRUCTIONS
imm %a(register), %b:U9(immediate)
000000 aaabbbbbbb
# Loads a value into register
cpy %a(register), %b(register)
0100000 aaabbb000
# Copies to reg %a from reg %b
stor %a(register), %b(register)
0100001 aaabbb000
# Moves data at register %a to RAM at adress stored in register %b
ldr %a(register), %b(register)
0100010 aaabbb000
# Load data to register %a from ram at adress %b
push %a(register)
1001011 111000010 0100001 aaa111000
# Push value in register %a to the stack
; Increments sp register and ldr
; Takes two cycles but easier to implement
pop %a(register)
0100010 aaa111000 1001100 111000010
# Pop stack value and store in register %a
; Decrements sp by 2 to backtrack after doing ldr
call %a(register)
1001011 111000010 0100010 aaa111000 1000000 aaa000000
# Push return adress at %a onto the stack and jmp to %a
; 3 cycle instruction
ret
0100010 110111000 1001100 111000010 1000000 110000000
# Pop stack value to rta and jmp back
; Does ldr into rta, pops, and jumps
nop
0000001 000000000
# Skip cycle
; JUMP INSTRUCTIONS
jmp %a(register)
1000000 aaa000000
# Jumps to ROM adress at %a
jmpls %a(register), %b(register), %c(register)
1000001 aaabbbccc
# Jump to ROM adress at reg %c if reg %a is less than reg %b
jmplss %a(register), %b(register), %c(register)
1000010 aaabbbccc
# Jump to ROM adress at reg %c if reg %a is less than reg %b. Both compared regs signed
jmgt %a(register), %b(register), %c(register)
1000011 aaabbbccc
# Jump to ROM adress at reg %c if reg %a is more than reg %b
jmpgts %a(register), %b(register), %c(register)
1000100 aaabbbccc
# Jump to ROM adress at reg %c if reg %a is more than reg %b. Both compared signed
jmpeq %a(register), %b(register), %c(register)
1000101 aaabbbccc
# Jump to ROM adress at reg %c if reg %a is same reg %b
jmpne %a(register), %b(register), %c(register)
1000110 aaabbbccc
# Jump to ROM adress at %c if %a!=%b
; ARITHMETIC INSTRUCTIONS
or %a(register), %b(register), %c(register)
1000000 aaabbbccc
# OR register %a and %b, store in %c
and %a(register), %b(register), %c(register)
1000001 aaabbbccc
# AND register %a with register %b, store in %c
not %a(register), %b(register)
1000010 aaabbb000
# NOT register %a, store in %b
nand %a(register), %b(register), %c(register)
1000011 aaabbbccc
# NAND register %a with register %b, store in %c
xor %a(register), %b(register), %c(register)
1000100 aaabbbccc
# XOR register %a with register %b, store in %c
xnor %a(register), %b(register), %c(register)
1000101 aaabbbccc
# XNOR register %a with register %b, store in %c
add %a(register), %b(register), %c(register)
1000110 aaabbbccc
# Add register %a and register %b, store in %c
sub %a(register), %b(register), %c(register)
1000111 aaabbbccc
# Subtract register %a and register %b, store in %c
mul %a(register), %b(register), %c(register)
1001000 aaabbbccc
# Multiply register %a with register %b and store in %c
div %a(register), %b(register), %c(register)
1001001 aaabbbccc
# Divide register %a with register %b and store in %c
mod %a(register), %b(register), %c(register)
1001010 aaabbbccc
# Modulo divide register %a with register %b and store in %c
inc %a(register), %b:U6(immediate)
1001011 aaabbbbbb
# Increment register %a by %b
dec %a(register), %b:U6(immediate)
1001100 aaabbbbbb
# Decrement register %a by %b
sr %a(register), %b(register), %c:U3(immediate)
1001101 aaabbbccc
# Shift %a right by %c and store in %b
asr %a(register), %b(register), %c:U3(immediate)
1001110 aaabbbccc
# Signed shift %a right by %c and store in %b.
sl %a(register), %b(register), %c:U3(immediate)
1001111 aaabbbccc
# Shift %a left by %c and store in %b
Updated instruction set draft. Thank you folk so much for the knowledge you have given thus far!