ASMB,R,L,B,C
* 
* HP92404A CODE CONVERSION PACKAGE
* 
* SOURCE TAPE 92404-80001 REV. A
* RELOC. TAPE 92404-60001 REV. A
* 
* AUTHOR T.A. SAPONAS 
* 
* VERSION 4 OCTOBER 1973
* 
* 
      HED ASCII TO BCDIC CODE CONVERSION ROUTINE
      NAM ASCBC,7 
      ENT ASCBC 
      EXT .ENTR 
      SUP 
A     EQU 0 
TEMP  BSS 1          TEMPORARY STORAGE
NCHAR BSS 1         NUMBER CHARS. TO BE CONVERTED 
SOURC BSS 1         ADDRESS OF ARRAY TO BE CONVERTED
DESTN BSS 1         DESTINATION ADDRESS OF CHARS. 
ERROR BSS 1         BAD CHARACTER COUNTER 
ASCBC NOP 
      JSB .ENTR     GET ADDRESSES OF CALLING PARAMS.
      DEF NCHAR 
      LDA NCHAR,I   FETCH NUMBER OF CHARACTERS
      CMA,SSA,INA,SZA IF < OR = 0 RETURN
      CLB,RSS       ELSE,  CLEAR CHARACTER COUNTER
      JMP ASCBC,I 
      STB ERROR,I   CLEAR BAD CHARACTER COUNTER 
NXCHR LDA SOURC,I     / 
      SLB,RSS        / GET NEXT CHARACTER TO BE 
      ALF,ALF        \   CONVERTED
      AND =B177       \ 
      CLE,ERA         / GET WORD CONTAINING NEW 
      ADA TABLE      <  CHARACTER 
      LDA A,I         \ 
      SEZ            UPPER BYTE?
      ALF,ALF        NO,SHIFT TO UPPER BYTE 
      AND =B177400  / EXTRACT AND SAVE NEW
      STA TEMP      \ CHARACTER 
      SSA           / IF HIGH ORDER BIT SET, THEN 
      ISZ ERROR,I   \ INCREMENT BAD CHAR. COUNTER 
      LDA DESTN,I    GET DESTINATION WORD 
      SLB            UPPER BYTE?
      ALF,ALF        NO,SHIFT TO UPPER BYTE 
      AND =B377      MASK DESTINATION BYTE
      IOR TEMP       INSERT NEW CHARACTER 
      SLB,INB         / 
      ALF,ALF        < STORE DESTINATION WORD 
      STA DESTN,I     \ 
      CPB NCHAR,I    LAST CHARACTER?
      JMP ASCBC,I    YES, RETURN
      SLB            ANOTHER CHARACTER IN SOURCE WORD?
      JMP NXCHR      YES, GO TO NEXT CHARACTER
      ISZ SOURC       / 
      ISZ DESTN      < NO, INCREMENT SOURC, DESTN 
      JMP NXCHR       \ POINTERS AND GO TO NEXT CHAR. 
* 
* 
*  THE FOLLOWING TABLE CONTAINS THE TRANSLATION OF ASCII TO BCDIC 
* 
* XXX INDICATES THERE IS NO CORESPONDING CODE IN BCDIC AND THE CODE 
*      GIVEN IS THE ASCII CODE WITH THE HIGH ORDER BIT OF THE 8 BIT 
*      BYTE SET TO 1.  THE LOWER CASE ASCII CHARACTERS ARE TRANSLATED 
*      TO UPPER CASE BCDIC. 
* 
* 
TABLE DEF A000      LOCATION OF TRANSLATION TABLE 
* 
*                ASCII  _  0  1   2  3   4  5   6  7
*                ^^^
A000  OCT 100201,101203,102205,103207 
*                BCDIC--> XXXXXX XXXXXX XXXXXX XXXXXX 
* 
A010  OCT 104035,015213,106077,107217 
*                         XXX       XXX XXX    XXXXXX 
* 
A020  OCT 110221,111223,112225,113227 
*                         XXXXXX XXXXXX XXXXXX XXXXXX 
* 
A030  OCT 114231,115233,116235,117237 
*                         XXXXXX XXXXXX XXXXXX XXXXXX 
* 
A040  OCT 010052,017417,025457,030035 
*                          SP !          $      & 
* 
A050  OCT 016074,026060,015440,035421 
*                          (  )   *  +   ,  -   .  /
* 
A060  OCT 005001,001003,002005,003007 
*                          0  1   2  3   4  5   6  7
* 
A070  OCT 004011,006456,037013,007072 
*                          8  9   :  ;   <  =   >  ?
* 
A100  OCT 006061,031063,032065,033067 
*                          @  A   B  C   D  E   F  G
* 
A110  OCT 034071,020442,021444,022446 
*                          H  I   J  K   L  M   N  O
* 
A120  OCT 023450,024422,011424,012426 
*                          P  Q   R  S   T  U   V  W
* 
A130  OCT 013430,014475,017055,156337 
*                          X  Y   Z  [   \  ]  XXXXXX 
* 
*  THE FOLLOWING TRANSLATION IS FROM LOWER CASE ASCII 
*    TO UPPER CASE BCDIC
A140  OCT 160061,031063,032065,033067 
*                         XXX A   B  C   D  E   F  G
* 
A150  OCT 034071,020442,021444,022446 
*                          H  I   J  K   L  M   N  O
* 
A160  OCT 023450,024422,011424,012426 
*                          P  Q   R  S   T  U   V  W
* 
A170  OCT 013430,014773,176375,177377 
*                          X  Y   Z XXX XXXXXX XXXXXX 
      END 
ASMB,R,L,B,C
      HED ASCII TO EBCDIC CODE CONVERSION ROUTINE 
      NAM ASCEB,7 
      ENT ASCEB 
      EXT .ENTR 
      SUP 
A     EQU 0 
TEMP  BSS 1          TEMPORARY STORAGE
NCHAR BSS 1         NUMBER CHARS. TO BE CONVERTED 
SOURC BSS 1         ADDRESS OF ARRAY TO BE CONVERTED
DESTN BSS 1         DESTINATION ADDRESS OF CHARS. 
ASCEB NOP 
      JSB .ENTR     GET ADDRESSES OF CALLING PARAMS.
      DEF NCHAR 
      LDA NCHAR,I   FETCH NUMBER OF CHARACTERS
      CMA,SSA,INA,SZA  IF < OR = 0 RETURN 
      CLB,RSS       ELSE,  CLEAR CHARACTER COUNTER
      JMP ASCEB,I 
NXCHR LDA SOURC,I     / 
      SLB,RSS        / GET NEXT CHARACTER TO BE 
      ALF,ALF        \   CONVERTED
      AND =B177       \ 
      CLE,ERA         / GET WORD CONTAINING NEW 
      ADA TABLE      <  CHARACTER 
      LDA A,I         \ 
      SEZ            UPPER BYTE?
      ALF,ALF        NO,SHIFT TO UPPER BYTE 
      AND =B177400   /EXTRACT AND SAVE NEW
      STA TEMP       \ CHARACTER
      LDA DESTN,I    GET DESTINATION WORD 
      SLB            UPPER BYTE?
      ALF,ALF        NO,SHIFT TO UPPER BYTE 
      AND =B377      MASK DESTINATION BYTE
      IOR TEMP       INSERT NEW CHARACTER 
      SLB,INB         / 
      ALF,ALF        < STORE DESTINATION WORD 
      STA DESTN,I     \ 
      CPB NCHAR,I    LAST CHARACTER?
      JMP ASCEB,I    YES, RETURN
      SLB            ANOTHER CHARACTER IN SOURCE WORD?
      JMP NXCHR      YES, GO TO NEXT CHARACTER
      ISZ SOURC       / 
      ISZ DESTN      < NO, INCREMENT SOURC, DESTN 
      JMP NXCHR       \ POINTERS AND GO TO NEXT CHAR. 
* 
* 
TABLE DEF A000      LOCATION OF TRANSLATION TABLE 
* 
*  THIS IS THE TABLE FOR CONVERSION FROM ASCII TO EBCDIC
* 
*                ASCII  _  0  1   2  3   4  5   6  7
*                ^^^
A000  OCT 000001,001003,033455,027057 
*                EBCDIC-->NULSOH STXETX EOTENQ ACKBEL 
* 
A010  OCT 013005,022413,006015,007017 
*                          BS HT  LF VT  FF CR  SO IC 
* 
A020  OCT 010021,011023,036075,031046 
*                         DLEDC1 DC2DC3 DC4NAK SYNETB 
* 
A030  OCT 014031,037447,016035,017037 
*                         CAN EM SUBESC IFSIGS IRSIUS 
* 
A040  OCT 040117,077573,055554,050175 
*                          SP !   "  #   $  %   &  '
* 
A050  OCT 046535,056116,065540,045541 
*                          (  )   *  +   ,  -   .  /
* 
A060  OCT 170361,171363,172365,173367 
*                          0  1   2  3   4  5   6  7
* 
A070  OCT 174371,075136,046176,067157 
*                          8  9   :  ;   <  =   >  ?
* 
A100  OCT 076301,141303,142305,143307 
*                          @  A   B  C   D  E   F  G
* 
A110  OCT 144311,150722,151724,152726 
*                          H  I   J  K   L  M   N  O
* 
A120  OCT 153730,154742,161744,162746 
*                          P  Q   R  S   T  U   V  W
* 
A130  OCT 163750,164512,160532,057555 
*                          X  Y   Z  [   \  !   ]  -
* 
*  THE FOLLOWING TRANSLATION IS FROM LOWER CASE ASCII 
*    TO LOWER CASE EBCDIC 
A140  OCT 074601,101203,102205,103207 
*                          \  A   B  C   D  E   F  G
* 
A150  OCT 104211,110622,111624,112626 
*                          H  I   J  K   L  M   N  O
* 
A160  OCT 113630,114642,121644,122646 
*                          P  Q   R  S   T  U   V  W
* 
A170  OCT 123650,124700,065320,120407 
*                          X  Y   Z      !        DEL 
* 
      END 
ASMB,R,L,B,C
      HED BCDIC TO ASCII CODE CONVERSION ROUTINE
      NAM BCDAS,7 
      ENT BCDAS 
      EXT .ENTR 
      SUP 
A     EQU 0 
TEMP  BSS 1          TEMPORARY STORAGE
NCHAR BSS 1         NUMBER CHARS. TO BE CONVERTED 
SOURC BSS 1         ADDRESS OF ARRAY TO BE CONVERTED
DESTN BSS 1         DESTINATION ADDRESS OF CHARS. 
BCDAS NOP 
      JSB .ENTR     GET ADDRESSES OF CALLING PARAMS.
      DEF NCHAR 
      LDA NCHAR,I   FETCH NUMBER OF CHARACTERS
      CMA,SSA,INA,SZA IF < OR = 0 RETURN
      CLB,RSS       ELSE, CLEAR CHARACTER COUNTER 
      JMP BCDAS,I 
NXCHR LDA SOURC,I     / 
      SLB,RSS        / GET NEXT CHARACTER TO BE 
      ALF,ALF        \   CONVERTED
      AND =B77        \ 
      CLE,ERA         / GET WORD CONTAINING NEW 
      ADA TABLE      <  CHARACTER 
      LDA A,I         \ 
      SEZ            UPPER BYTE?
      ALF,ALF        NO,SHIFT TO UPPER BYTE 
      AND =B177400   /EXTRACT AND SAVE NEW
      STA TEMP       \ CHARACTER
      LDA DESTN,I    GET DESTINATION WORD 
      SLB            UPPER BYTE?
      ALF,ALF        NO,SHIFT TO UPPER BYTE 
      AND =B377      MASK DESTINATION BYTE
      IOR TEMP       INSERT NEW CHARACTER 
      SLB,INB         / 
      ALF,ALF        < STORE DESTINATION WORD 
      STA DESTN,I     \ 
      CPB NCHAR,I    LAST CHARACTER?
      JMP BCDAS,I    YES, RETURN
      SLB            ANOTHER CHARACTER IN SOURCE WORD?
      JMP NXCHR      YES, GO TO NEXT CHARACTER
      ISZ SOURC       / 
      ISZ DESTN      < NO, INCREMENT SOURC, DESTN 
      JMP NXCHR       \ POINTERS AND GO TO NEXT CHAR. 
* 
*     THE FOLLOWING TABLE CONTAINS THE TRANSLATION OF BCDIC TO ASCII
* 
TABLE DEF B00       LOCATION OF TRANSLATION TABLE 
* 
*                BCDIC  _  0  1   2  3   4  5   6  7
*                ^^^
B00   OCT 020061,031063,032065,033067 
*                ASCII-->  SP 1   2  3   4  5   6  7
* 
B10   OCT 034071,030075,040072,035043 
*                          8  9   0  =   @  :   >  #
* 
B20   OCT 020057,051524,052526,053530 
*                          SP /   S  T   U  V   W  X
* 
B30   OCT 054532,005054,024011,056042 
*                          Y  Z  LF  ,   ( HT   \  "
* 
B40   OCT 026512,045514,046516,047520 
*                          -  J   K  L   M  N   O  P
* 
B50   OCT 050522,020444,025135,035445 
*                          Q  R   !  $   *  ]   ;  %
* 
B60   OCT 025501,041103,042105,043107 
*                          +  A   B  C   D  E   F  G
* 
B70   OCT 044111,037456,024533,036015 
*                          H  I   ?  .   )  [   < CR
      END 
ASMB,R,L,B,C
      HED EBCDIC TO ASCII CODE CONVERSION ROUTINE 
      NAM EBCAS,7 
      ENT EBCAS 
      EXT .ENTR 
      SUP 
A     EQU 0 
TEMP  BSS 1          TEMPORARY STORAGE
NCHAR BSS 1         NUMBER CHARS. TO BE CONVERTED 
SOURC BSS 1         ADDRESS OF ARRAY TO BE CONVERTED
DESTN BSS 1         DESTINATION ADDRESS OF CHARS. 
ERROR BSS 1         BAD CHARACTER COUNTER 
EBCAS NOP 
      JSB .ENTR     GET ADDRESSES OF CALLING PARAMS.
      DEF NCHAR 
      LDA NCHAR,I   FETCH NUMBER OF CHARACTERS
      CMA,SSA,INA,SZA IF < OR = 0 RETURN
      CLB,RSS       ELSE, CLEAR CHARACTER COUNTER 
      JMP EBCAS,I 
      STB ERROR,I   CLEAR BAD CHARACTER COUNTER 
NXCHR LDA SOURC,I     / 
      SLB,RSS        / GET NEXT CHARACTER TO BE 
      ALF,ALF        \   CONVERTED
      AND =B377       \ 
      CLE,ERA         / GET WORD CONTAINING NEW 
      ADA TABLE      <  CHARACTER 
      LDA A,I         \ 
      SEZ            UPPER BYTE?
      ALF,ALF        NO,SHIFT TO UPPER BYTE 
      AND =B177400  /EXTRACT AND SAVE NEW 
      STA TEMP       \ CHARACTER
      SSA           /IF HIGH ORDER BIT SET, THEN
      ISZ ERROR,I   \ INCREMENT BAD CHAR. COUNTER 
      LDA DESTN,I    GET DESTINATION WORD 
      SLB            UPPER BYTE?
      ALF,ALF        NO,SHIFT TO UPPER BYTE 
      AND =B377      MASK DESTINATION BYTE
      IOR TEMP       INSERT NEW CHARACTER 
      SLB,INB         / 
      ALF,ALF        < STORE DESTINATION WORD 
      STA DESTN,I     \ 
      CPB NCHAR,I    LAST CHARACTER?
      JMP EBCAS,I    YES, RETURN
      SLB            ANOTHER CHARACTER IN SOURCE WORD?
      JMP NXCHR      YES, GO TO NEXT CHARACTER
      ISZ SOURC       / 
      ISZ DESTN      < NO, INCREMENT SOURC, DESTN 
      JMP NXCHR       \ POINTERS AND GO TO NEXT CHAR. 
* 
* 
TABLE DEF E000      LOCATION OF TRANSLATION TABLE 
* 
*  THIS IS THE TABLE FOR CONVERSION FROM EBCDIC TO ASCII
*   XXX INDICATES NO TRANSLATION, THE RESULTING CHARACTER 
*   HAS BIT 7 SET (HIGH ORDER BIT) AND BITS 0 THRU 6 REMAIN 
*   THE SAME AS THE SOURCE CODE 
* 
*                EBCDIC _  0  1   2  3   4  5   6  7
*                ^^^
E000  OCT 000001,001003,102011,103177 
*                ASCII--> NULSOH STXETX XXX HT XXXDEL 
* 
E010  OCT 104211,105013,006015,007017 
*                         XXXXXX XXX VT  FF CR  SO SI 
* 
E020  OCT 010021,011023,112012,004000 
*                         DLEDC1 DC2DC3 XXX LG BS NUL 
* 
E030  OCT 014031,115233,016035,017037 
*                         CAN EM XXXXXX  FS GS  RS US 
* 
E040  OCT 120241,121243,122012,013433 
*                         XXXXXX XXXXXX XXX LF ETBESC 
* 
E050  OCT 124251,125253,126005,003007 
*                         XXXXXX XXXXXX XXXENQ ACKBEL 
* 
E060  OCT 130261,013263,132265,133004 
*                         XXXXXX SYNXXX XXXXXX XXXEOT 
* 
E070  OCT 134271,135273,012025,137032 
*                         XXXXXX XXXXXX DC4NAK XXXSUB 
* 
E100  OCT 020301,141303,142305,143307 
*                         SP XXX XXXXXX XXXXXX XXXXXX 
* 
E110  OCT 144311,055456,036050,025441 
*                           XXXXXX  [  .   <  (   +  !
* 
E120  OCT 023321,151323,152325,153327 
*                          & XXX XXXXXX XXXXXX XXXXXX 
* 
E130  OCT 154331,056444,025051,035536 
*                         XXXXXX  ]  $   :  )   :  7
* 
E140  OCT 026457,161343,162345,163347 
*                          -  /  XXXXXX XXXXXX XXXXXX 
* 
E150  OCT 164351,076054,022537,037077 
*                         XXXXXX  !  ,   %  -   >  ?
* 
E160  OCT 170361,171363,172365,173367 
*                         XXXXXX XXXXXX XXXXXX XXXXXX 
* 
E170  OCT 174140,035043,040047,036442 
*                         XXX \   :  #   @  '   =  "
* 
*  THE FOLLOWING TRANSLATION IS FROM LOWER CASE EBCDIC
*    TO LOWER CASE ASCII
E200  OCT 100141,061143,062145,063147 
*                         XXX A   B  C   D  E   F  G
* 
E210  OCT 064151,105213,106215,107217 
*                          H  I  XXXXXX XXXXXX XXXXXX 
* 
E220  OCT 110152,065554,066556,067560 
*                         XXX J   K  L   M  N   O  P
* 
E230  OCT 070562,115233,116235,117237 
*                          Q  R  XXXXXX XXXXXX XXXXXX 
* 
E240  OCT 120176,071564,072566,073570 
*                         XXXESC  S  T   U  V   W  X
* 
E250  OCT 074572,125253,126255,127257 
*                          Y  Z  XXXXXX XXXXXX XXXXXX 
* 
E260  OCT 130261,131263,132265,133267 
*                         XXXXXX XXXXXX XXXXXX XXXXXX 
* 
E270  OCT 134271,135273,136275,137277 
*                         XXXXXX XXXXXX XXXXXX XXXXXX 
* 
*  THE FOLLOWING TRANSLATION IS FROM UPPER CASE EBCDIC
*    TO UPPER CASE ASCII
E300  OCT 075501,041103,042105,043107 
*                             A   B  C   D  E   F  G
* 
E310  OCT 044111,145313,146315,147134 
*                          H  I  XXXXXX XXXXXX XXX \
* 
E320  OCT 076512,045514,046516,047520 
*                          \  J   K  L   M  N   O  P
* 
E330  OCT 050522,155333,156335,157337 
*                          Q  R  XXXXXX XXXXXX XXXXXX 
* 
E340  OCT 160134,051524,052526,053530 
*                         XXX \   S  T   U  V   W  X
* 
E350  OCT 054532,165353,166355,167357 
*                          Y  Z  XXXXXX XXXXXX XXXXXX 
* 
E360  OCT 030061,031063,032065,033067 
*                          0  1   2  3   4  5   6  7
* 
E370  OCT 034071,175373,176375,177377 
*                          8  9  XXXXXX XXXXXX XXXXXX 
* 
      END 
                                                                                              