: cell+ cell + ; : cells cell * ; : char+ 1 + ; : chars ; : state [ _d 7 cells + ] literal ; \ : [ 0 state ! ; immediate \ : ] -1 state ! ; : sp _d ; : rp [ _d cell+ ] literal ; : dp [ _d 3 cells + ] literal ; : sp@ sp @ ; : rp@ rp @ cell+ ; : ip [ _d cell+ cell+ ] literal ; : here dp @ ; : unused [ _d 8 cells + ] literal @ here - ; : latest [ _d 4 cells + ] literal @ ; \ : dup sp@ @ ; \ : drop sp@ cell+ sp ! ; : pick cells cell+ sp@ + @ ; : >r rp@ cell - rp ! rp@ cell+ @ rp@ ! rp@ cell+ ! ; : r> rp@ @ rp@ cell+ rp ! rp@ @ swap rp@ ! ; \ : rot >r swap r> swap ; : -rot rot rot ; : over 1 pick ; : +! dup >r swap r> @ + swap ! ; : allot dp +! ; : , here ! cell allot ; : ['] ' [ ' literal , ] ; immediate : 1+ 1 + ; : 1- 1 - ; : if ['] _jmp0 , here 0 , ; immediate : then here swap ! ; immediate : else ['] _jmp , here 0 , swap here swap ! ; immediate