.TITLE FXLAT -- XLATION RTN FOR ESFLX ; ; ; ; AUTHOR: P. GANDHI ; ; ; DATED: AUG 1978 ; ; ; FUNCTION: ; ; ; ; REGISTER USAGE ; ; R0 - COUNTER ; R1 - BINARY DATA BUFFER POINTER ; R2 - CODE BITS BUFFER POINTER ; R3 - EXTRA BYTE POINTER ; R5 - LOOP COUNTER ; ; ; COMMON AREA FOR BUFFER POINTERS ; ; .PSECT FBADCM,D,GBL,OVR TTBAD: .BLKW 1 ; TT BUFFER ADDRESS BNBAD: .BLKW 1 ; BINARY BUFFER ADDRESS CDBAD: .BLKW 1 ; CODE BUFFER ADDRESS XCNT: .BLKW 1 ; DATA COUNT RTNCD: .BLKW 1 ; RETURN CODE FXENCD:: MOV BNBAD,R1 ; BINARY BUFFER (INPUT) MOV CDBAD,R2 ; CODED DATA (OUTPUT) MOV R2,R3 INC R3 ; 1ST XLATED BYTE MOV XCNT,R5 ; # OF BYTES TO BE XLATED ; MOV #3,R0 ; 1 BYTE EXTRA FOR EACH 7 BYTES CLR CDWRD ; CLEAR EXTRA BYTE ; ; ENCD: MOVB (R1),R4 ; MOVE BYTE TO WORK REG BIC #177700,R4 ; CLEAR TOP TWO BITS OF BYTE ADD #40,R4 ; ADD 40 TO MAKE IT ASCII MOVB R4,(R3)+ ; MOVE BYTE TO DEST ; ROLB (R1) ROLB CDWRD ROLB (R1)+ ROLB CDWRD DEC R0 BNE ESOB ; ADD #40,CDWRD MOVB CDWRD,(R2) ADD #4.,R2 ; NEXT EXTRA BYTE CLR CDWRD MOV #3,R0 ; REFRESH COUNTER INC R3 ; PAST EXTRA BYTE ; ESOB: SOB R5,ENCD CMP #3,R0 ; SEE IF ON BOUNDRY BEQ 20$ 10$: ROLB CDWRD ROLB CDWRD SOB R0,10$ ADD #40,CDWRD MOVB CDWRD,(R2) 20$: RTS PC FXDECD:: MOV BNBAD,R1 ; BINARY BUFFER (OUTPUT) MOV CDBAD,R2 ; CODED DATA (INPUT) MOV R2,R3 INC R3 ; 1ST XLATED BYTE MOV XCNT,R5 ; # OF BYTES TO BE XLATED ; MOV #1,R0 ; 1 BYTE EXTRA FOR EACH 7 BYTES ; ; DECD: DEC R0 BNE 10$ ; ; MOVB (R2)+,R4 SUB #40,R4 MOVB R4,CDBYT MOV #3,R0 ; ; 10$: MOVB (R2)+,R4 SUB #40,R4 MOVB R4,(R1) ROLB CDBYT ROLB CDBYT MOVB CDBYT,WRKBYT BICB #77,WRKBYT BISB WRKBYT,(R1)+ SOB R5,DECD RTS PC ; CDWRD=. CDBYT: .BLKB 1 WRKBYT: .BLKB 1 .END