;ANDOR BOOLEAN AND AND OR ; ; CALL "AND"(I,J,K) K=I.AND.J ; CALL "OR"(I,J,K) K=I.OR.J ; CALL "XOR"(I,J,K) K=I.XOR.J ; AC0=%0 ; .MCALL ULODHD ; ULODHD START,END,AND,OR,XOR ; START: ; AND: JSR R4,@#GTRGPI ;GET ARGUMENTS .BYTE 1,1,2 .EVEN SETI SETF LDF (SP)+,R0 ;GET FIRST ARG STCFI AC0,A1 ;CONVERT TO INTEGER LDF (SP)+,R0 ;GET SECOND ARG STCFI AC0,A2 ;CONVERT TO INTEGER MOV A1,R0 ;ARG 1 IN R0 COM R0 ;BIC ISN'T REALLY AN "AND" ;IT DOES A "NOT" ON SOURCE FIRST (SNEAKY) BIC R0,A2 ;DO AND, STORE IN A2 LDCIF A2,AC0 ;LOAD AND CONVERT TO FLOATING MOV SP,R5 ;R5 => 3RD ARG JSR PC,@#NSTORE ;RETURN ARG TO PROGRAM ADD #12,SP ;UN-KLUTZ STACK POINTER JSR PC,@#PARCHK ;CHECK FOR ")" RTS PC ;BACK TO MAIN PROG ; ; A1: .WORD 0 A2: .WORD 0 ; ; OR: JSR R4,@#GTRGPI ;GET ARGUMENTS .BYTE 1,1,2 .EVEN SETI SETF LDF (SP)+,R0 ;GET FIRST ARG STCFI AC0,A1 ;CONVERT TO INTEGER LDF (SP)+,R0 ;GET SECOND ARG STCFI AC0,A2 ;CONVERT TO INTEGER MOV A1,R0 ;ARG 1 IN R0 BIS R0,A2 ;DO OR, STORE IN A2 LDCIF A2,AC0 ;LOAD AND CONVERT TO FLOATING MOV SP,R5 ;R5 => 3RD ARG JSR PC,@#NSTORE ;RETURN ARG TO PROGRAM ADD #12,SP ;UN-KLUTZ STACK POINTER JSR PC,@#PARCHK ;CHECK FOR ")" RTS PC ;BACK TO MAIN PROG ; XOR: JSR R4,@#GTRGPI ;GET ARGUMENTS .BYTE 1,1,2 .EVEN SETI SETF LDF (SP)+,R0 ;GET FIRST ARG STCFI AC0,A1 ;CONVERT TO INTEGER LDF (SP)+,R0 ;GET SECOND ARG STCFI AC0,A2 ;CONVERT TO INTEGER MOV A1,R0 ;ARG 1 IN R0 XOR R0,A2 ;DO XOR, STORE IN A2 LDCIF A2,AC0 ;LOAD AND CONVERT TO FLOATING MOV SP,R5 ;R5 => 3RD ARG JSR PC,@#NSTORE ;RETURN ARG TO PROGRAM ADD #12,SP ;UN-KLUTZ STACK POINTER JSR PC,@#PARCHK ;CHECK FOR ")" RTS PC ;BACK TO MAIN PROG ; ; END: .END