;+ ; VARIOUS BIT ROUTINES ; THE FOLLOWING ROUTINES ALLOW FORTRAN ; PROGRAMS TO TREAT A BYTE ARRAY AS ; THOUGH IT WERE AN ARRAY OF BITS. ; ; AUTHOR: S. K. WYCKOFF ; WEIDNER COMMUNICATIONS, INC. ; 1673 WEST 820 NORTH ; PROVO, UTAH 84601 ; (801)-375-9910 ; ;- .TITLE BIT BIT ROUTINES .PSECT $$$BIT I,RO,GBL,REL .ENABL LSB ;+ ; CALL SETBIT(N,SRC) ; SETS BIT N OF SRC, WHERE SRC IS A BYTE ARRAY ;- SETBIT:: JSR PC,LOCBIT ;GET BYTE ADDRESS AND BIT MASK BISB R5,(R4) ;SET BIT RTS PC ;ALL DONE ;+ ; CALL CLRBIT(N,SRC) ; CLEARS BIT N OF SRC, WHERE SRC IS A BYTE ARRAY ;- CLRBIT:: JSR PC,LOCBIT ;GET BYTE ADDRESS AND BIT MASK BICB R5,(R4) ;CLR BIT RTS PC ;ALL DONE ;+ ; CALL TOGBIT(N,SRC) ; TOGGLES BIT N OF SRC, WHERE SRC IS A BYTE ARRAY ;- TOGBIT:: JSR PC,LOCBIT ;GET BYTE ADDRESS AND BIT MASK MOVB (R4),R0 ;COPY BYTE TO R0 XOR R5,R0 ;TOGGLE BIT MOVB R0,(R4) ;UPDATE BYTE RTS PC ;ALL DONE ;+ ; IF(BITSET(N,SRC)) --- ; TESTS BIT N OF SRC, WHERE SRC IS A BYTE ARRAY ; RETURNS .TRUE. IF BIT IS SET ; RETURNS .FALSE. IF BIT IS CLEAR ; ; IF(BITCLR(N,SRC)) --- ; TESTS BIT N OF SRC, WHERE SRC IS A BYTE ARRAY ; RETURNS .TRUE. IF BIT IS CLEAR ; RETURNS .FALSE. IF BIT IS SET ;- BITSET:: MOV #-1,R0 ;ASSUME .TRUE. BR 1$ ;SHARE CODE BITCLR:: CLR R0 ;ASSUME .FALSE. 1$: JSR PC,LOCBIT ;GET BYTE ADDRESS AND MASK BITB R5,(R4) ;TEST BIT BNE 99$ ;BRANCH IF SET COM R0 ;CORRECT THE ASSUMED VALUE 99$: RTS PC ;ALL DONE ;+ ; JSR PC,LOCBIT ; RETURNS BYTE ADDRESS OF SRC IN R4 AND BIT MASK IN R5 ;- LOCBIT:: MOV @2(R5),R4 ;R4 IS N DEC R4 ;FORM N-1 FOR OFFSET MOV R4,R3 ;SAVE IN R3 ASH #-3,R4 ;CALCULATE BYTE OFFSET ADD 4(R5),R4 ;R4 IS BYTE ADDRESS BIC #177770,R3 ;R3=BIT 0-7 MOV #1,R5 ;DEFAULT TO BIT 1 ASH R3,R5 ;CONVERT TO MASK RTS PC ;ALL DONE .END