69 lines
1.3 KiB
Plaintext
69 lines
1.3 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 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;
|
|
}
|
|
}
|