cdc:nos2.source:nam5871:bconv
Table of Contents
BCONV
Table Of Contents
- [00072] ENTRY POINT CALLED BY BDELINK
Source Code
- BCONV.txt
- *DECK BCONV
- IDENT BCONV
- ENTRY BCONV
- EXT XTRACE
- SST
- *#
- *1DC BCONV
- * 1. PROC NAME AUTHOR DATE
- * BCONV J. C. LEE 76/07/28
- * Y. HSIEH 77/06/06
- *
- * 2. FUNCTIONAL DESCRIPTION.
- * THIS ROUTINE IS RESPONSIBLE FOR CHARACTER CONVERSION. IT TAKES
- * CHARACTER STRINGS IN 8-BIT BYTES ASCII AND CONVERTS IT TO
- * THE CHARACTER TYPE REQUESTED - 12-BIT BYTES ASCII OR
- * 6-BIT BYTES DISPLAY CODE (63 OR 64 CHARACTER TYPE).
- *
- * 3. METHOD USED.
- * ENTRY AND EXIT PARAMETERS ARE PASSED VIA COMMON FORDEQ
- * GET CHARACTER STRING FROM DATA RING
- * STORE PROCESSED CHARACTER STRING INTO BUFFER
- *
- * 4. ENTRY PARAMETERS.
- * ACT CHARACTER TYPE TO CONVERT TO 12 BIT ASCII
- * DRPTR FWA OF BUFFER BEFORE CONVERSION
- * CHARCNT NUMBER OF CHARACTERS TO CONVERT
- *
- * 5. EXIT PARAMETERS.
- * BUFFIN FWA OF BUFFER AFTER CONVERSION
- *
- * 6. COMDECKS CALLED.
- * MACDEF INPARU DEQCOM(FORDEQ)
- *
- * 7. ROUTINES CALLED.
- * XTRACE TRACE CALLS
- *
- * 7. DAYFILE MESSAGES. NONE
- *
- *#
- **
- *CALL MACDEF
- *CALL INPARU
- *CALL DEQCOM
- ** TABLE FOR CHARACTER CONVERSION
- * DISPLAY CODE FOR CORRESPONDING ASCII VALUE
- * THIS COMMON BLOCK IS ALSO USED BY ISCP AT NIP INIT. TIME
- * TO ADJUST THE TABLE FOR 63 OR 64 CHAR. SET
- USE /COMVERT/
- CTABLE VFD 6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,12/0
- VFD 6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,12/0
- VFD 6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,12/0
- VFD 6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,6/55B,12/0
- VFD 6/55B,6/54D,6/52D,6/48D,6/43D,6/51D,6/55D,6/56D,12/0
- VFD 6/41D,6/42D,6/39D,6/37D,6/46D,6/38D,6/47D,6/40D,12/0
- VFD 6/27D,6/28D,6/29D,6/30D,6/31D,6/32D,6/33D,6/34D,12/0
- SET63A VFD 6/35D,6/36D,6/55B,6/63D,6/58D,6/44D,6/59D,6/57D,12/0
- VFD 6/60D,6/01D,6/02D,6/03D,6/04D,6/05D,6/06D,6/07D,12/0
- VFD 6/08D,6/09D,6/10D,6/11D,6/12D,6/13D,6/14D,6/15D,12/0
- VFD 6/16D,6/17D,6/18D,6/19D,6/20D,6/21D,6/22D,6/23D,12/0
- VFD 6/24D,6/25D,6/26D,6/49D,6/61D,6/50D,6/62D,6/53D,12/0
- SET63B VFD 6/60D,6/01D,6/02D,6/03D,6/04D,6/05D,6/06D,6/07D,12/0
- VFD 6/08D,6/09D,6/10D,6/11D,6/12D,6/13D,6/14D,6/15D,12/0
- VFD 6/16D,6/17D,6/18D,6/19D,6/20D,6/21D,6/22D,6/23D,12/0
- VFD 6/24D,6/25D,6/26D,6/49D,6/61D,6/50D,6/62D,6/53D,12/0
- USE *
- SPACE 5
- ** BCONV - ENTRY POINT CALLED BY BDELINK
- * TO CONVERT INBOUND DATA FROM 8-BIT ASCII
- * TO 12-BIT ASCII OR 6-BIT DISPLAY CODE
- *
- * REGISTER USAGE
- *
- * X0 = MASK FOR 8-BIT BYTES (52 OR 53-WITH NO PARITY BIT)
- * X1 = SCRATCH
- * X2 = INPUT WORD
- * X3 = SCRATCH
- * X4 = SCRATCH
- * X5 = SCRATCH
- * X6 = OUTPUT WORD
- * X7 = 0 IF 12-BIT ASCII, 54 FOR 6-BIT DISPLAY CODE BYTES
- *
- * B0 = 0
- * B1 = TOTAL CHARACTER COUNT
- * B2 = INPUT BUFFER INDEX
- * B3 = OUTPUT BUFFER INDEX
- * B4 = 64, USED TO CHECK IF HALF CHAR. EXIST AT WORD BOUND.
- * B5 = OUTPUT DATA SHIFT COUNT
- * B6 = INPUT DATA SHIFT COUNT
- * B7 = SCRATCH
- BCONV DATA 0
- IFEQ DEBUG,1,6
- SX6 A1
- SA6 TEMP
- SX1 XBCONV
- RJ XTRACE
- SA1 TEMP
- SA1 X1
- * INITIALIZE REGISTERS
- SA1 CHARCNT LOCATION HOLD CHARACTER COUNT
- SB4 12 SHIFT COUNT FOR 12 BIT ASCII CHAR.
- SB5 48 INIT. OUTPUT DATA SHIFT COUNT
- SA2 DRPTR FWA OF INPUT BUFFER
- SB1 X1 TOTAL CHARACTER COUNT
- SA3 BUFFIN FWA OF OUTPUT BUFFER
- SB2 X2 INPUT BUFFER POINTER
- SB3 X3 OUTPUT BUFFER POINTER
- SA4 ACT OUTPUT CHAR TYPE(12-BIT ASCII/DISPLY)
- MX0 52 MASK FOR 8-BIT ASCII CODE
- SB6 8 INIT. INPUT DATA SHIFT COUNT
- SX7 X4-CT12ASC CHECK CHAR-TYPE IS 12-BIT ASCII
- MX6 0 INIT. OUTPUT WORD TO ZERO
- ZR X7,BCONVA SIGNAL 12-BIT ASCII CONVERSION
- MX0 53 MASK FOR 8 BIT ASCII WITH NO PARITY
- SB4 6 SHIFT COUNT FOR 6 BIT DISPLAY CHAR.
- MX7 54 MASK FOR 6-BIT DISPLAY CODE
- SB5 B4+B5 INIT. OUTPUT DATA SHIFT COUNT = 54
- * READ IN NEXT WORD FROM INPUT BUFFER AND
- * HANDLE HALF CHARACTER CASE
- BCONVA BSS 0
- BX3 X2 PREVIOUS INPUT WORD
- SB7 B6-64 CHECK FOR HALF CHARACTER CONDITION
- SA2 B2 READ NEXT WORD FROM INPUT BUFFER
- SB6 8 INIT. INPUT DATA SHIFT COUNT
- SB2 B2+1 INCREMENT INPUT BUFFER INDEX
- NZ B7,BCONVB NO HALF CHARACTER AT WORD BOUNDARY
- MX5 4 MASK FOR HALF CHARACTER
- BX1 X5*X2 SECOND HALF OF CHARACTER
- MX5 56 MASK FOR HALF CHAR. AT LOW BITS
- BX3 -X5*X3 FIRST HALF OF CHARACTER
- BX4 X1+X3
- LX4 4 CHARACTER AT RIGHTMOST POSITION
- SB6 4 INIT. INPUT DATA SHIFT COUNT
- EQ BCONVC GO PROCESS CHAR. AT WORD BOUNDARY
- * CHECK END-OF-DATA. IF NOT, PROCESS NEXT CHARACTER
- BCONVB BSS 0
- ZR B1,BCONVE ALL DONE
- SB7 B6-64 CHECK FOR WORD BOUNDARY
- PL B7,BCONVA HIT WORD BOUNDARY, GO READ NEXT WORD
- LX3 X2,B6 SHIFT CHAR. TO RIGHTMOST POSITION
- BX4 -X0*X3
- BCONVC BSS 0
- ZR X7,BCONVD TYPE IS 12-BIT ASCII
- * CONVERT 8-BIT ASCII TO 6-BIT DISPLAY CODE
- BX3 -X0*X4 THE CURRENT CHARACTER
- AX3 3 X = CHAR. / 8
- BX1 X3 INDEX TO CONVERSION TABLE
- LX3 3 Y = X * 8
- IX5 X4-X3 Z = CHAR - Y (REMAINDER OF CHAR/8)
- IX3 X5+X5 Z * 2
- LX5 2 Z * 4
- IX4 X3+X5 Z*6 = SHIFT COUNT TO SHIFT CORRESP.
- SB7 X4+6 DISPLAY CODE TO RIGHTMOST POSITION
- SA5 X1+CTABLE INDEX TO CONVERSION TABLE
- LX3 X5,B7 DISPLAY CODE TO RIGHTMOST POSITION
- BX4 -X7*X3
- * APPEND NEW CHARACTER TO OUTPUT WORD AND UPDATE POINTERS
- BCONVD BSS 0
- LX4 X4,B5 SHIFT NEW CHAR TO PROPER POSITION
- BX6 X4+X6 FOR OUTPUT WORD
- SB1 B1-1 DECREMENT TOTAL CHAR COUNT
- SB5 B5-B4 OUTPUT CHAR POINTER
- SB6 B6+8 INPUT CHAR POINTER
- PL B5,BCONVB OUTPUT WORD NOT FILLED YET
- * WRITE CONVERTED WORD TO OUTPUT BUFFER
- BCONVE BSS 0
- SA6 B3
- MX6 0 INIT. OUTPUT WORD TO ZERO
- ZR B1,BCONV ALL DONE
- SB7 60
- SB5 B7-B4 INIT. OUTPUT DATA SHIFT COUNT
- SB3 B3+1 INCREMENT OUTPUT BUFFER INDEX
- EQ BCONVB CONTINUE TO CONVERT NEXT CHARACTER
- XBCONV DATA L*BCONV*
- TEMP BSS 1
- END
cdc/nos2.source/nam5871/bconv.txt ยท Last modified: 2023/08/05 17:21 by Site Administrator