plex Console { ref function vector(void):void; byte read; u32 pad; byte type; byte write; byte error; u16 pad2; ref byte[] addr; byte mode; byte exec; } Console console = devmap(0x10, Console); byte memory[10000]; str code = "++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++."; bf(code); halt; function bf(str code) { nat mp; // memory pointer nat ip = 0; // instruction pointer while (ip < code.length) { if (ip > code.length) { return; } if (mp > memory.length) { return; } if (code[ip] == '>') { mp = mp + 1; } else if (code[ip] == '<') { mp = mp - 1; } else if (code[ip] == '+') { memory[mp] = memory[mp] + 1; } else if (code[ip] == '-') { memory[mp] = memory[mp] - 1; } else if (code[ip] == '.') { console.write = memory[mp]; } else if (code[ip] == ',') { memory[mp] = console.read; } else if (code[ip] == '[') { if(!memory[mp]) { nat nc = 1; while (nc > 0) { ip = ip + 1; if (code[ip] == '[') { nc = nc + 1; } else if (code[ip] == ']') { nc = nc - 1; } } } } else if (code[ip] == ']') { if (memory[mp]) { nat nc = 1; while (nc > 0) { ip = ip - 1; if (code[ip] == ']') { nc = nc + 1; } else if (code[ip] == '[') { nc = nc - 1; } } } } ip = ip + 1; } }