From ecd10c643962ac1122fa016e30aee8b7796f8c45 Mon Sep 17 00:00:00 2001 From: Lizzy Fleckenstein Date: Sun, 20 Aug 2023 11:55:09 +0200 Subject: add brainfuck interpreter --- examples/brainfuck.false | 59 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 examples/brainfuck.false (limited to 'examples/brainfuck.false') diff --git a/examples/brainfuck.false b/examples/brainfuck.false new file mode 100644 index 0000000..0ba9adf --- /dev/null +++ b/examples/brainfuck.false @@ -0,0 +1,59 @@ +{ + to compile: + + (echo "[\"$(head -c30007 /dev/zero)\"]" && cat brainfuck.false) | ../paradox \ + > brainfuck.asm && nasm -f elf64 brainfuck.asm && ld -o brainfuck brainfuck.o + + REQUIRES PARADOX due to pointer arithmetic. + + stdin is used for both the brainfuck program and its input, separated by a zero byte. + to read the program from a file and enter input interactively: + + (cat your_program.b && echo -ne '\0' && cat) | ./brainfuck + + example hello world brainfuck program to try: + echo '+[>>>->-[>->----<<<]>>]>.---.>+..+++.>>.<.>>---.<<<.+++.------.<-.>>+.' | ./brainfuck +} +12+;$$t:h:l: +0d: { change this to 0d: to disable debugging, 1_d: to enable debugging } +0[^$$1_=~\0=~&][\1+]#% $n: +[ + r:\r;+ + 1[$0=~][\ + $2+ø + $'[=[@r;-@@]? + $']=[@r;+@@]? + %r;+ + \]#% + r;-\ +]b: +[$0=~][ + d;[ + "src: " + n;[$0=~][ + $2ø=$[27,"[31m"]? + \$2+ø,1-\ + [27,"[0m"]? + ]#% + "mem: " + t;h; 1ø1ø>~[\]?% h: + l;[$h;>~][ + $t;=$[27,"[31m"]? + \$;255&." "\ + [27,"[0m"]? + 1+ + ]#% + ^% + ]? + + $ø + $'>=[t;1+$l;30000+=[%l;]?t:]? + $'<=[t;$l;=[%l;30000+]?1-t:]? + $'+=[t;$;$255~&\1+255&|\:]? + $'-=[t;$;$255~&\1-255&|\:]? + $'.=[t;;,]? + $',=[t;$;255~&^|\:]? + $'[=[t;;255&0=[1_b;!]?]? + $']=[t;;255&0=~[1b;!]?]? + %1- +]#% -- cgit v1.2.3