Nor and Reference Jump
This commit is contained in:
@@ -68,21 +68,18 @@ void nrj_load(NRJWORD* m, NRJWORD offset, char *fname) {
|
||||
}
|
||||
|
||||
void nrj_run(char *program) {
|
||||
NRJWORD maxaddr = (NRJWORD) (NRJSIZE - 1), mem[NRJSIZE], a, b, c;
|
||||
mem[0] = (NRJWORD) 4;
|
||||
mem[1] = mem[2] = mem[3] = (NRJWORD) 0;
|
||||
nrj_load(mem, mem[0], program);
|
||||
while(mem[0] != maxaddr) {
|
||||
if(mem[1]) nrj_in(&mem[3], &mem[mem[1]]);
|
||||
a = mem[0]++;
|
||||
b = mem[0]++;
|
||||
c = mem[0]++;
|
||||
mem[a] = (~(mem[a] | mem[b])) & maxaddr;
|
||||
mem[0] = (mem[0] + mem[c]) & maxaddr;
|
||||
mem[1] = (NRJWORD) 0;
|
||||
if(mem[2]) {
|
||||
nrj_out(&mem[3], &mem[mem[2]]);
|
||||
mem[2] = (NRJWORD) 0;
|
||||
NRJWORD maxaddr = (NRJWORD) (NRJSIZE - 1), mem[NRJSIZE], pc;
|
||||
mem[0] = mem[1] = mem[2] = (NRJWORD) 0;
|
||||
pc = (NRJWORD) 3;
|
||||
nrj_load(mem, pc, program);
|
||||
while(pc != maxaddr) {
|
||||
if(mem[0]) nrj_in(&mem[2], &mem[mem[0]]);
|
||||
mem[mem[pc]] = (~(mem[mem[pc]] | mem[mem[pc+1]])) & maxaddr;
|
||||
pc = mem[mem[pc+2]];
|
||||
mem[0] = (NRJWORD) 0;
|
||||
if(mem[1]) {
|
||||
nrj_out(&mem[2], &mem[mem[1]]);
|
||||
mem[1] = (NRJWORD) 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user