dcl con ProcedureFlags char(4) init(X"970AD87C"); dcl con ProgramFlags char(4) init(X"AF6514D8"); dcl con ModuleFlags char(4) init(X"1BDE1BC1"); dcl con ProgramDomain char(2) init(X"8000"); dcl con ProgramState char(2) init(X"0080"); dcl con ModuleState char(2) init(X"0001"); dcl con BinderLevel char(1) init(X"02"); dcl con ModuleLevel char(1) init(X"02"); dcl dd Part(0:8) auto char(8); dcl dd Mat auto char(16); dcl dd Mat.8.Bin2 def(Mat) pos(9) bin(2); dcl dd Step auto bin(2); dcl dd n auto bin(2); dcl dd m auto bin(2); dcl dd Index auto bin(2); dcl dd Methods auto char(9) init("01"); dcl dd Method(0:8) def(Methods) pos(1) znd(1,0); dcl dd Path(0:3) auto char(7) init("2345678", "8367254", "4735826", "3624587"); cpybla Mat(1:8), X"912080400810180C"; -- load user state cmpbla(b) ProgramState, X"0001" / eq(AA); -- jump if user state cpybla Mat(1:8), X"4480054050014011"; -- load system state AA: cpybla Part(0), X"EA18F0700812080E"; -- load user domain cmpbla(b) ProgramDomain, X"0001" / eq(BB); -- jump if user domain cpybla Part(0), X"4C0A05225C494017"; -- load system domain BB: cpyblap Part(1), ProcedureFlags, X"00"; -- load procedure flags cpyblap Part(2), ProgramFlags, X"00"; -- load program flags cpyblap Part(3), ModuleFlags, X"00"; -- load module flags cpyblap Part(4), ProgramDomain, X"00"; -- load program domain cpyblap Part(5), ProgramState, X"00"; -- load program state cpyblap Part(6), ModuleState, X"00"; -- load module state cpyblap Part(7), BinderLevel, X"00"; -- load binder level cpyblap Part(8), ModuleLevel, X"00"; -- load module level cpynv Step, 0; -- prepare to loop below CC: cpybla Mat(9:8), Mat(1:8); -- prepare to rotate cpybtlls Mat(1:16), Mat(1:16), 17; -- shift left 17 bits cpynv Index, Method(Step); -- de-reference path part cpybla Mat(9:8), Part(Index); -- copy indexed part cpynv n, 8; -- DD: subn m, 17, n; -- addlc(s) Mat(n:1), Mat(m:1); -- add bytes subn(sb) n, 1 / pos(DD); -- addn(s) Step, 1; -- increment part index cmpnv(b) Step, 8 / hi(ZZ); -- exit loop after last part cmpnv(b) Step, 2 / neq(CC); -- jump if not keyed part cpybla Mat(9:1), x"00"; -- cpynv n, 8; -- EE: addlc(s) Mat(9:1), Mat(n:1); -- add up 8 bytes subn(s) n, 1 / pos(EE); -- cpybtrls Mat(9:2), Mat(9:2), 14; -- get two left-most bits cpybla Methods(3:7), Path(Mat.8.Bin2); -- copy remaining path b CC; -- repeat until end of loop ZZ: brk "LOOK"; -- validation value in MAT(1:8) pend;