#PROGRAM /BITOPS(22AM,EBM) #LOWER LINK(3) #PROGRAM # ######################################################## #CUE BITOR # INTEGER FUNCTION TO COMPUTE BITWISE OR OF TWO ARGS # WRITTEN TO BE CALLED FROM FORTRAN # # THIS VERSION WRITTEN IN QUICHE EATING MANNER USING # FPROLOG/FEPILOG # # ALTERNATIVE WOULD BE TO DO IT THE "HARDCORE" WAY: # # OBEY 0(1) [ GET ADDRESS OF FIRST ARG TO X3 # LDX 6 0(3) [ GET FIRST ARG TO X6 # OBEY 1(1) [ GET ADDRESS OF 2ND ARG TO X3 # ORX 6 0(3) [ OR 2ND ARG # EXIT 1 2 # OR CALL 3 FPROLOG 8HBITOR 2 /LINK LDX 1 LINK+1 [ GET ADDRESS OF FIRST ARG LDX 2 LINK+2 [ GET ADDRESS OF 2ND ARG LDX 6 0(1) [ GET FIRST ARG TO X6 ORX 6 0(2) [ OR 2ND ARG CALL 3 FEPILOG /LINK # ######################################################### #CUE BITAND # BITWISE AND AND CALL 3 FPROLOG 8HBITAND 2 /LINK LDX 1 LINK+1 [ GET ADDRESS OF FIRST ARG LDX 2 LINK+2 [ GET ADDRESS OF 2ND ARG LDX 6 0(1) [ GET FIRST ARG TO X6 ANDX 6 0(2) [ AND 2ND ARG CALL 3 FEPILOG /LINK # ######################################################### #CUE BITXOR # BITWISE XOR XOR CALL 3 FPROLOG 8HBITAND 2 /LINK LDX 1 LINK+1 [ GET ADDRESS OF FIRST ARG LDX 2 LINK+2 [ GET ADDRESS OF 2ND ARG LDX 6 0(1) [ GET FIRST ARG TO X6 ERX 6 0(2) [ XOR 2ND ARG CALL 3 FEPILOG /LINK # ######################################################### #CUE SHIFT # SHIFT IS A BIT TRICKIER - WE WANT TO SHIFT LEFT IF # DISTANCE IS +VE, RIGHT IF IT'S -VE SHIFT CALL 3 FPROLOG 8HSHIFT 2 /LINK LDX 1 LINK+1 [ GET ADDRESS OF FIRST ARG LDX 2 LINK+2 [ GET ADDRESS OF 2ND ARG LDX 6 0(1) [ GET FIRST ARG TO X6 LDX 2 0(2) [ GET 2ND ARG TO X2 BPZ 2 LEFT [ LEFT SHIFT IF +VE NGX 2 2 [ NEGATE X2 INTO X2 SRL 6 0(2) [ SHIFT RIGHT BRN *+2 [ GET ME OUT OF HERE LEFT SLL 6 0(2) [ SHIFT X6 LEFT BY X2 OUT CALL 3 FEPILOG /LINK #END #FINISH