Концепция небольшого RPN-процессора с интересными возможностями
https://hackaday.io/project/10553-cpu7 - CPU7 CPU7.pdfemulation.zpКод:
'! usage: addr len bubblesort8
:bubblesort8
dup 1 > if `! check if the array is more than one element
enter
1 over + `! calculate end=addr+len; stack: beg, end
1 swap dup `! stack: end, beg, addr
repeat
dup rd8 `! stack: end, beg, addr, [addr]
1 over ++ rd8 `! stack: end, beg, addr, [addr], [addr+1]
< if `! stack: end, beg, addr
++ `! addr=addr+1
else
dup rd8 `! stack: end, beg, addr, [addr]
1 over ++ rd8 `! stack: end, beg, addr, [addr], [addr+1]
2 over wr8 `! stack: end, beg, addr, [addr]
1 over ++ wr8 `! stack: end, beg, addr
drop dup `! addr=beg; stack: end, beg, addr
endif
dup 3 over < until
leave `! clean up the data stack
endif
drop drop `! remove the input parameters from the data stack
;
Код:
`! ==== collatz sequence ====
1000 1 =!
2
repeat
dup
:collatz_count
0 0 =!
repeat
dup 1 and if
3 * 1 + else
1 shr endif
0 ! ++ 0 =!
trace
100000 delay
dup 1 ==
until
drop
0 trace
1000000 delay drop
++
trace
1000000 delay
dup 1 ! >
until
print_stack
acall
Код:
`! ==== counter ====
154 trace 1 =!
1 ! trace print_stack
acall
1000 1 =!
6
repeat
:collatz_count
0 0 =!
repeat
0 ! ++ 0 =!
trace
--
1000000 delay
dup 1 ==
print_stack
until
154 trace
1000000 delay drop
++
trace
1000000 delay
dup 1 !
>
until
255 trace
1000000 delay
0 trace
1000000 delay
255 trace
1000000 delay
0 trace
1000000 delay
acall
P.S. В этой директории проекта на Github его реализация на Verilog
CPU7