//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[10000] memory; 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; } while (ip < 106) { if (ip < 0 or ip > 106) { 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]; write = memory[mp]; } else if (code[ip] == ',') { // memory[mp] = console.read; memory[mp] = 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; } }