; BITTER.MAC ; ; A SUBROUTINE TO DO OPERATIONS ON THE BIT LEVEL ; ; USE BY SAYING: CALL BITTER(NUMBER, OFFSET, OPERATION) ; IF OPERATION = 1, WANT TO SET BIT OFFSET OF BITS 1 THROUGH 16 ; IF OPERATION = 2, WANT TO CLEAR IT ; IF OPERATION = 3, ARE TESTING IT TO SEE IF BIT IS SET ; FOR THIS OPERAATION, USE IT BY SAYING, J=BITTER(NUMBER,OFFSET,3) ; J WILL BE 1 IF THE DESIRED OFFSET IS SET ; J WILL BE 0 IF THE DESIRED OFFSET IS NOT SET ; WHEN USING IT IN THIS WAY, BE SURE TO DEFINE BITTER AS AN INTEGER ; .GLOBL BITTER .TITLE BITTER BITTER: MOV @2(R5),R1 ; MOVE THE NUMBER TO R1 MOV #1,R2 ; THIS WILL BE THE NO TO SET OR CLEAR MOV @4(R5),R3 ; MOVE OFFSET TO R3 DEC R3 ASH R3,R2 ; R2 NOW CONTAINS THE WORD TO SET CMP @6(R5),#1 ; DO WE WANT TO SET THE BIT BEQ SET CMP @6(R5),#2 ; DO WE WANT TO CLEAR THE BIT BEQ CLEAR CMP @6(R5),#3 ; DO WE WANT TO TEST TO SEE IF SET BEQ TEST RETURN SET: BIS R2,R1 MOV R1,@2(R5) RETURN CLEAR: BIC R2,R1 MOV R1,@2(R5) RETURN TEST: BIT R2,R1 BNE OFF CLR R0 RETURN OFF: MOV #1,R0 RETURN .END