Nor and Reference Jump

This commit is contained in:
Luxferre
2022-08-21 20:10:03 +03:00
parent 570646b8dd
commit c19a47877c
+12 -15
View File
@@ -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;
}
}
}