73 lines
1.5 KiB
Plaintext
73 lines
1.5 KiB
Plaintext
//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;
|
|
}
|
|
}
|