( usage: cat program.bf | uxncli brainfuck.rom ) |10 @Console &vector $2 &read $1 &pad $4 &type $1 &write $1 &error $1 |0100 @on-reset ( -> ) ;on-console .Console/vector DEO2 BRK @on-console ( -> ) .Console/read DEI DUP #20 GTH ?{ POP #0000 .Console/vector DEO2 #010f DEO BRK } [ LIT2 &ptr =program ] INC2k ,&ptr STR2 STA BRK @ ( -- ) ;on-console/ptr LDA2 ;program &while ( -- ) LDAk [ LIT "+ ] NEQ ?{ OVR2 STH2k LDA INC STH2r STA } LDAk [ LIT "- ] NEQ ?{ OVR2 STH2k LDA #01 SUB STH2r STA } LDAk [ LIT "> ] NEQ ?{ SWP2 INC2 SWP2 } LDAk [ LIT "< ] NEQ ?{ SWP2 #0001 SUB2 SWP2 } LDAk [ LIT ". ] NEQ ?{ OVR2 LDA #18 DEO } LDAk [ LIT "[ ] NEQ ?{ goto-next } LDAk [ LIT "] ] NEQ ?{ goto-back } INC2 LDAk ?&while POP2 JMP2r @goto-next ( mem* prg* -- ) OVR2 LDA ?{ JMP2r } ( depth ) [ LITr 00 ] INC2 &loop ( -- ) LDAk [ LIT "[ ] NEQ JMP INCr LDAk [ LIT "] ] NEQ ?&>no-end STHkr #00 EQU ?&end LITr 01 SUBr &>no-end INC2 LDAk ?&loop &end ( depth ) POPr JMP2r @goto-back ( mem* prg* -- ) OVR2 LDA ?{ JMP2r } ( depth ) [ LITr 00 ] #0001 SUB2 &loop ( -- ) LDAk [ LIT "] ] NEQ JMP INCr LDAk [ LIT "[ ] NEQ ?&>no-end STHkr #00 EQU ?&end LITr 01 SUBr &>no-end #0001 SUB2 LDAk ?&loop &end ( depth ) POPr JMP2r @program