Nor and Reference Jump

This commit is contained in:
Luxferre
2022-08-21 20:10:03 +03:00
parent 570646b8dd
commit c19a47877c
+11 -14
View File
@@ -68,21 +68,18 @@ void nrj_load(NRJWORD* m, NRJWORD offset, char *fname) {
} }
void nrj_run(char *program) { void nrj_run(char *program) {
NRJWORD maxaddr = (NRJWORD) (NRJSIZE - 1), mem[NRJSIZE], a, b, c; NRJWORD maxaddr = (NRJWORD) (NRJSIZE - 1), mem[NRJSIZE], pc;
mem[0] = (NRJWORD) 4; mem[0] = mem[1] = mem[2] = (NRJWORD) 0;
mem[1] = mem[2] = mem[3] = (NRJWORD) 0; pc = (NRJWORD) 3;
nrj_load(mem, mem[0], program); nrj_load(mem, pc, program);
while(mem[0] != maxaddr) { while(pc != maxaddr) {
if(mem[1]) nrj_in(&mem[3], &mem[mem[1]]); if(mem[0]) nrj_in(&mem[2], &mem[mem[0]]);
a = mem[0]++; mem[mem[pc]] = (~(mem[mem[pc]] | mem[mem[pc+1]])) & maxaddr;
b = mem[0]++; pc = mem[mem[pc+2]];
c = mem[0]++; mem[0] = (NRJWORD) 0;
mem[a] = (~(mem[a] | mem[b])) & maxaddr; if(mem[1]) {
mem[0] = (mem[0] + mem[c]) & maxaddr; nrj_out(&mem[2], &mem[mem[1]]);
mem[1] = (NRJWORD) 0; mem[1] = (NRJWORD) 0;
if(mem[2]) {
nrj_out(&mem[3], &mem[mem[2]]);
mem[2] = (NRJWORD) 0;
} }
} }
} }