home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / mskermit / mszz10.asm < prev   
Assembly Source File  |  2020-01-01  |  19KB  |  496 lines

  1.     NAME    mszz10
  2. ; File MSZZ10.ASM
  3.     include mssdef.h
  4. ;       Copyright (C) 1982,1991, Trustees of Columbia University in the
  5. ;       City of New York.  Permission is granted to any individual or
  6. ;       institution to use, copy, or redistribute this software as long as
  7. ;       it is not sold for profit and this copyright notice is retained.
  8. ; Terminal emulator module for Zenith-100 based on mszibm.asm.
  9. ; Most of the contents of this file including all of the VT100/VT52
  10. ; emulation is left inactive (commented out).  I hope to be able to
  11. ; come back with a more complete implementation later on.
  12. ; Edit history
  13. ; 2 March 1991 version 3.10
  14. ; Last change: 3 May 1990.
  15. ; Bo Gedda
  16. ; Terminal emulator module for IBM PC's and compatibles. Emulates Heath-19,
  17. ; VT52, VT102, and VT320. Original version for VT100 done by James Harvey,
  18. ; Indiana Purdue Univ, for MS Kermit 2.27. Taken from there by Joe Doupnik,
  19. ; Utah State Univ for MS Kermit 2.29 et seq.
  20.  
  21. ; * Disclaimer *
  22. ;
  23. ; DEC and VT are trademarks of Digital Equipment Corporation.
  24. ; References:
  25. ;  "PT200 Programmers Reference Guide", 1984, Prime Computer # DOC 8621-001P
  26. ;  "Video Terminal Model H19, Operation", 1979, Heath Company # 595-2284-05
  27. ;  "VT100 User's Guide", 2nd ed., Jan 1979, DEC # EK-VT100-UG
  28. ;  "Rainbow 100+/100B Terminal Emulation Manual", June 1984, DEC # QV069-GZ
  29. ;  "Installing and Using The VT320 Video Terminal", June 1987,
  30. ;    DEC # EK-VT320-UU-001
  31. ;  "VT320 Programmer Reference Manual", July 1987, DEC # EK-VT320-RM-001
  32. ; ---------------------------------------------------------------------------
  33.  
  34.     public    nrc2cp, cpdecsg
  35.  
  36. data    segment
  37.     extrn    flags:byte, dosnum:word
  38.  
  39.     ; DEC National Replacement Char sets, one table for each Code Page
  40.                         ; CP437
  41. ; 12 replacment bytes (keyed by ASCII bytes), NRC number, country, size, ident
  42. nrc437    db    23h,40h,5bh,5ch,5dh,5eh        ; 0, ASCII, "B", dispatch ref
  43.     db    5fh,60h,7bh,7ch,7dh,7eh
  44.     db    94,'B',0            ; 94 byte set, letter pair
  45.     db    9ch,40h,5bh,5ch,5dh,5eh        ; 1, British, "A"
  46.     db    5fh,60h,7bh,7ch,7dh,7eh
  47.     db    94,'A',0
  48.     db    9ch,3fh,98h,0abh,7ch,5eh    ; 2, Dutch, "4"
  49.     db    5fh,60h,22h,9fh,0ach,27h
  50.     db    94,'4',0
  51.     db    23h,40h,8eh,99h,8fh,9ah        ; 3, Finnish, "5"
  52.     db    5fh,82h,84h,94h,86h,81h
  53.     db    94,'5',0
  54.     db    9ch,85h,0f8h,87h,15h,5eh    ; 4, French, "R"
  55.     db    5fh,60h,82h,97h,8ah,22h
  56.     db    94,'R',0
  57.     db    23h,85h,83h,87h,88h,8ch        ; 5, French Canadian, "9"
  58.     db    5fh,93h,82h,97h,8ah,96h
  59.     db    94,'9',0
  60.     db    23h,15h,8eh,99h,9ah,5eh        ; 6, German, "K"
  61.     db    5fh,60h,84h,94h,81h,0e1h
  62.     db    94,'K',0
  63.     db    9ch,15h,0f8h,87h,82h,5eh    ; 7, Italian, "Y"
  64.     db    5fh,97h,85h,95h,8ah,8dh
  65.     db    94,'Y',0
  66.     db    23h,40h,92h,0edh,8fh,5eh    ; 8, Norwegian/Danish, "'"
  67.     db    5fh,60h,91h,0edh,86h,7eh
  68.     db    94,60h,0
  69.     db    23h,40h,8eh,80h,99h,5eh        ; 9, Portugese, "%6"
  70.     db    5fh,60h,0a6h,87h,0a7h,7eh
  71.     db    94,'%','6'
  72.     db    9ch,15h,8ch,0a5h,0a8h,5eh    ; 10, Spanish, "Z"
  73.     db    5fh,60h,60h,0f8h,0a4h,87h
  74.     db    94,'Z',0
  75.     db    23h,90h,8eh,99h,8fh,9ah        ; 11, Swedish, "7"
  76.     db    5fh,82h,84h,94h,86h,81h
  77.     db    94,'7',0
  78.     db    97h,85h,82h,87h,88h,8ch        ; 12, Swiss, "="
  79.     db    8ah,93h,84h,94h,81h,96h
  80.     db    94,'=',0
  81.  
  82.                         ; CP850
  83. ; 12 replacment bytes (keyed by ASCII bytes), NRC number, country, size, ident
  84. nrc850    db    23h,40h,5bh,5ch,5dh,5eh        ; 0, ASCII, "B", dispatch ref
  85.     db    5fh,60h,7bh,7ch,7dh,7eh
  86.     db    94,'B',0            ; 94 byte set, letter pair
  87.     db    9ch,40h,5bh,5ch,5dh,5eh        ; 1, British, "A"
  88.     db    5fh,60h,7bh,7ch,7dh,7eh
  89.     db    94,'A',0
  90.     db    9ch,0f3h,98h,0abh,7ch,5eh    ; 2, Dutch, "4"
  91.     db    5fh,60h,22h,9fh,0ach,27h
  92.     db    94,'4',0
  93.     db    23h,40h,8eh,99h,8fh,9ah        ; 3, Finnish, "5"
  94.     db    5fh,82h,84h,94h,86h,81h
  95.     db    94,'5',0
  96.     db    9ch,85h,0f8h,87h,15h,5eh    ; 4, French, "R"
  97.     db    5fh,60h,82h,97h,8ah,22h
  98.     db    94,'R',0
  99.     db    23h,85h,83h,87h,88h,8ch        ; 5, French Canadian, "9"
  100.     db    5fh,93h,82h,97h,8ah,96h
  101.     db    94,'9',0
  102.     db    23h,15h,8eh,99h,9ah,5eh        ; 6, German, "K"
  103.     db    5fh,60h,84h,94h,81h,0e1h
  104.     db    94,'K',0
  105.     db    9ch,15h,0f8h,87h,82h,5eh    ; 7, Italian, "Y"
  106.     db    5fh,97h,85h,95h,8ah,8dh
  107.     db    94,'Y',0
  108.     db    23h,40h,92h,09dh,8fh,5eh    ; 8, Norwegian/Danish, "'"
  109.     db    5fh,60h,91h,09bh,86h,7eh
  110.     db    94,60h,0
  111.     db    23h,40h,0b5h,80h,0e5h,5eh    ; 9, Portugese, "%6"
  112.     db    5fh,60h,61h,87h,0e4h,7eh
  113.     db    94,'%','6'
  114.     db    9ch,15h,0adh,0a5h,0a8h,5eh    ; 10, Spanish, "Z"
  115.     db    5fh,60h,60h,0f8h,0a4h,87h
  116.     db    94,'Z',0
  117.     db    23h,90h,8eh,99h,8fh,9ah        ; 11, Swedish, "7"
  118.     db    5fh,82h,84h,94h,86h,81h
  119.     db    94,'7',0
  120.     db    97h,85h,82h,87h,88h,8ch        ; 12, Swiss, "="
  121.     db    8ah,93h,84h,94h,81h,96h
  122.     db    94,'=',0
  123.                         ; CP860
  124. ; 12 replacment bytes (keyed by ASCII bytes), NRC number, country, size, ident
  125. nrc860    db    23h,40h,5bh,5ch,5dh,5eh        ; 0, ASCII, "B", dispatch ref
  126.     db    5fh,60h,7bh,7ch,7dh,7eh
  127.     db    94,'B',0            ; 94 byte set, letter pair
  128.     db    9ch,40h,5bh,5ch,5dh,5eh        ; 1, British, "A"
  129.     db    5fh,60h,7bh,7ch,7dh,7eh
  130.     db    94,'A',0
  131.     db    9ch,3fh,79h,0abh,7ch,5eh    ; 2, Dutch, "4"
  132.     db    5fh,60h,22h,3fh,0ach,27h
  133.     db    94,'4',0
  134.     db    23h,40h,41h,4fh,41h,9ah        ; 3, Finnish, "5"
  135.     db    5fh,82h,61h,6fh,61h,81h
  136.     db    94,'5',0
  137.     db    9ch,85h,0f8h,87h,15h,5eh    ; 4, French, "R"
  138.     db    5fh,60h,82h,97h,8ah,22h
  139.     db    94,'R',0
  140.     db    23h,85h,83h,87h,88h,69h        ; 5, French Canadian, "9"
  141.     db    5fh,93h,82h,97h,8ah,75h
  142.     db    94,'9',0
  143.     db    23h,15h,41h,4fh,9ah,5eh        ; 6, German, "K"
  144.     db    5fh,60h,61h,6fh,81h,0e1h
  145.     db    94,'K',0
  146.     db    9ch,15h,0f8h,87h,82h,5eh    ; 7, Italian, "Y"
  147.     db    5fh,97h,85h,95h,8ah,8dh
  148.     db    94,'Y',0
  149.     db    23h,40h,3fh,0edh,41h,5eh    ; 8, Norwegian/Danish, "'"
  150.     db    5fh,60h,3fh,0edh,61h,7eh
  151.     db    94,60h,0
  152.     db    23h,40h,8eh,80h,99h,5eh        ; 9, Portugese, "%6"
  153.     db    5fh,60h,84h,87h,94h,7eh
  154.     db    94,'%','6'
  155.     db    9ch,15h,0adh,0a5h,0a8h,5eh    ; 10, Spanish, "Z"
  156.     db    5fh,60h,60h,0f8h,0a4h,87h
  157.     db    94,'Z',0
  158.     db    23h,90h,41h,4fh,41h,9ah        ; 11, Swedish, "7"
  159.     db    5fh,82h,61h,6fh,61h,75h
  160.     db    94,'7',0
  161.     db    97h,85h,82h,87h,88h,69h        ; 12, Swiss, "="
  162.     db    8ah,93h,61h,6fh,81h,75h
  163.     db    94,'=',0
  164.                         ; CP863
  165. ; 12 replacment bytes (keyed by ASCII bytes), NRC number, country, size, ident
  166. nrc863    db    23h,40h,5bh,5ch,5dh,5eh        ; 0, ASCII, "B", dispatch ref
  167.     db    5fh,60h,7bh,7ch,7dh,7eh
  168.     db    94,'B',0            ; 94 byte set, letter pair
  169.     db    9ch,40h,5bh,5ch,5dh,5eh        ; 1, British, "A"
  170.     db    5fh,60h,7bh,7ch,7dh,7eh
  171.     db    94,'A',0
  172.     db    9ch,0adh,79h,0abh,7ch,5eh    ; 2, Dutch, "4"
  173.     db    5fh,60h,0a4h,9fh,0ach,0a1h
  174.     db    94,'4',0
  175.     db    23h,40h,41h,4fh,41h,55h        ; 3, Finnish, "5"
  176.     db    5fh,82h,61h,6fh,61h,81h
  177.     db    94,'5',0
  178.     db    9ch,85h,0f8h,87h,15h,5eh    ; 4, French, "R"
  179.     db    5fh,60h,82h,97h,8ah,0a4h
  180.     db    94,'R',0
  181.     db    23h,85h,83h,87h,88h,8ch        ; 5, French Canadian, "9"
  182.     db    5fh,93h,82h,97h,8ah,96h
  183.     db    94,'9',0
  184.     db    23h,15h,41h,4fh,9ah,5eh        ; 6, German, "K"
  185.     db    5fh,60h,61h,6fh,81h,0e1h
  186.     db    94,'K',0
  187.     db    9ch,15h,0f8h,87h,82h,5eh    ; 7, Italian, "Y"
  188.     db    5fh,97h,6fh,85h,8ah,69h
  189.     db    94,'Y',0
  190.     db    23h,40h,3fh,0edh,41h,5eh    ; 8, Norwegian/Danish, "'"
  191.     db    5fh,60h,0efh,0edh,61h,7eh
  192.     db    94,60h,0
  193.     db    23h,40h,41h,80h,4fh,5eh        ; 9, Portugese, "%6"
  194.     db    5fh,60h,61h,87h,6fh,7eh
  195.     db    94,'%','6'
  196.     db    9ch,15h,3fh,4eh,3fh,5eh        ; 10, Spanish, "Z"
  197.     db    5fh,60h,60h,0f8h,6eh,87h
  198.     db    94,'Z',0
  199.     db    23h,90h,41h,4fh,41h,9ah        ; 11, Swedish, "7"
  200.     db    5fh,82h,61h,6fh,61h,81h
  201.     db    94,'7',0
  202.     db    97h,85h,82h,87h,88h,8ch        ; 12, Swiss, "="
  203.     db    8ah,93h,61h,6fh,81h,96h
  204.     db    94,'=',0
  205.                         ; CP865
  206. ; 12 replacment bytes (keyed by ASCII bytes), NRC number, country, size, ident
  207. nrc865    db    23h,40h,5bh,5ch,5dh,5eh        ; 0, ASCII, "B", dispatch ref
  208.     db    5fh,60h,7bh,7ch,7dh,7eh
  209.     db    94,'B',0            ; 94 byte set, letter pair
  210.     db    9ch,40h,5bh,5ch,5dh,5eh        ; 1, British, "A"
  211.     db    5fh,60h,7bh,7ch,7dh,7eh
  212.     db    94,'A',0
  213.     db    9ch,3fh,98h,0abh,7ch,5eh    ; 2, Dutch, "4"
  214.     db    5fh,60h,22h,9fh,0ach,27h
  215.     db    94,'4',0
  216.     db    23h,40h,8eh,99h,8fh,9ah        ; 3, Finnish, "5"
  217.     db    5fh,82h,84h,94h,86h,81h
  218.     db    94,'5',0
  219.     db    9ch,85h,0f8h,87h,15h,5eh    ; 4, French, "R"
  220.     db    5fh,60h,82h,97h,8ah,22h
  221.     db    94,'R',0
  222.     db    23h,85h,83h,87h,88h,8ch        ; 5, French Canadian, "9"
  223.     db    5fh,93h,82h,97h,8ah,96h
  224.     db    94,'9',0
  225.     db    23h,15h,8eh,99h,9ah,5eh        ; 6, German, "K"
  226.     db    5fh,60h,84h,94h,81h,0e1h
  227.     db    94,'K',0
  228.     db    9ch,15h,0f8h,87h,82h,5eh    ; 7, Italian, "Y"
  229.     db    5fh,97h,85h,95h,8ah,8dh
  230.     db    94,'Y',0
  231.     db    23h,40h,92h,9dh,8fh,5eh        ; 8, Norwegian/Danish, "'"
  232.     db    5fh,60h,91h,9bh,86h,7eh
  233.     db    94,60h,0
  234.     db    23h,40h,41h,80h,4fh,5eh        ; 9, Portugese, "%6"
  235.     db    5fh,60h,61h,87h,6fh,7eh
  236.     db    94,'%','6'
  237.     db    9ch,15h,0adh,0a5h,0a8h,5eh    ; 10, Spanish, "Z"
  238.     db    5fh,60h,60h,0f8h,0a4h,87h
  239.     db    94,'Z',0
  240.     db    23h,90h,8eh,99h,8fh,9ah        ; 11, Swedish, "7"
  241.     db    5fh,82h,84h,94h,86h,81h
  242.     db    94,'7',0
  243.     db    97h,85h,82h,87h,88h,8ch        ; 12, Swiss, "="
  244.     db    8ah,93h,84h,94h,81h,96h
  245.     db    94,'=',0
  246.  
  247. ; Translation tables for byte codes 0a0h..0ffh to map DEC Multinational
  248. ; Character Set (DEC Supplemental Graphic) to Code Pages.
  249. ; Codes 00h-1fh are 7-bit controls (C0), codes 20h..7eh are ASCII, 7fh DEL is
  250. ; considered to be a control code, 80h..9fh are 8-bit controls (C1).
  251. ; Each table is 94 translatable bytes followed by the table size (94), the
  252. ; ISO announcer ident '%5'.
  253.                     ; from DEC Multinational to Code Page
  254.                             ; to CP437
  255. MNcp437 db    80h,81h,82h,83h,   84h,85h,86h,87h    ; column 8
  256.     db    88h,89h,8ah,8bh,   8ch,8dh,8eh,8fh
  257.     db    90h,91h,92h,93h,   94h,95h,96h,97h    ; column 9
  258.     db    98h,99h,9ah,9bh,   9ch,9dh,9eh,9fh
  259.     db    0h,0adh,9bh,9ch,   20h,9dh,20h,15h    ; column 10
  260.     db    0fh,40h,0a6h,0aeh, 20h,20h,20h,20h
  261.     db    0f8h,0f1h,0fdh,33h, 20h,0e6h,14h,0feh    ; column 11
  262.     db    2eh,60h,0a7h,0afh, 0ach,0abh,20h,0a8h
  263.     db    85h,0a0h,83h,83h,  8eh,8fh,92h,80h    ; column 12
  264.     db    8ah,90h,88h,89h,   8dh,0a1h,8ch,8bh
  265.     db    20h,0a5h,95h,0a2h, 93h,94h,94h,4fh    ; column 13
  266.     db    0edh,97h,0a3h,96h, 9ah,59h,20h,0e1h
  267.     db    85h,0a0h,83h,84h,  84h,86h,91h,87h    ; column 14
  268.     db    8ah,82h,88h,89h,   8dh,0a1h,8ch,8bh
  269.     db    20h,0a4h,95h,0a2h, 93h,94h,94h,6fh    ; column 15
  270.     db    0edh,97h,0a3h,96h, 81h,98h,20h,0h
  271.     db    94,'%','5'            ; 94 byte set, letter ident
  272.  
  273.                             ; to CP850
  274. MNcp850 db    80h,81h,82h,83h,   84h,85h,86h,87h    ; column 8
  275.     db    88h,89h,8ah,8bh,   8ch,8dh,8eh,8fh
  276.     db    90h,91h,92h,93h,   94h,95h,96h,97h    ; column 9
  277.     db    98h,99h,9ah,9bh,   9ch,9dh,9eh,9fh
  278.     db    0h,0adh,0bdh,9ch,  20h,0beh,20h,15h    ; column 10
  279.     db    0cfh,0b8h,0a6h,0aeh, 20h,20h,20h,20h
  280.     db    0f8h,0f1h,0fdh,0fch, 20h,0e6h,14h,0feh    ; column 11
  281.     db    2eh,0fbh,0a7h,0afh, 0ach,0abh,20h,0a8h
  282.     db    0b7h,0b5h,0b6h,0b5h, 8eh,8fh,92h,80h    ; column 12
  283.     db    0d4h,90h,0d2h,0d3h, 0deh,0d6h,0d7h,0d8h
  284.     db    20h,0a5h,0e3h,0e0h, 0e2h,0e5h,99h,4fh    ; column 13
  285.     db    9dh,0ebh,0e9h,0eah, 9ah,0edh,20h,0e1h
  286.     db    85h,0a0h,83h,61h,   84h,86h,91h,87h    ; column 14
  287.     db    8ah,82h,88h,89h,    8dh,0a1h,8ch,8bh
  288.     db    20h,0a4h,95h,0a2h,  93h,0e4h,94h,6fh    ; column 15
  289.     db    9bh,97h,0a3h,96h,   81h,0ech,20h,0h
  290.     db    94,'%','5'            ; 94 byte set, letter ident
  291.                             ; to CP860
  292. MNcp860 db    80h,81h,82h,83h,   84h,85h,86h,87h    ; column 8
  293.     db    88h,89h,8ah,8bh,   8ch,8dh,8eh,8fh
  294.     db    90h,91h,92h,93h,   94h,95h,96h,97h    ; column 9
  295.     db    98h,99h,9ah,9bh,   9ch,9dh,9eh,9fh
  296.     db    0h,0adh,9bh,9ch,   20h,59h,20h,15h    ; column 10
  297.     db    0fh,3fh,0a6h,0aeh, 20h,20h,20h,20h
  298.     db    0f8h,0f1h,0fdh,33h, 20h,0e6h,14h,0feh    ; column 11
  299.     db    2eh,60h,0a7h,0afh, 0ach,0abh,20h,0a8h
  300.     db    85h,0a0h,83h,83h,  8eh,8fh,92h,80h    ; column 12
  301.     db    8ah,90h,88h,89h,   8dh,0a1h,8ch,8bh
  302.     db    20h,0a5h,95h,0a2h, 93h,94h,94h,4fh    ; column 13
  303.     db    0edh,97h,0a3h,96h, 9ah,59h,20h,0e1h
  304.     db    85h,0a0h,83h,84h,  84h,86h,91h,87h    ; column 14
  305.     db    8ah,82h,88h,89h,   8dh,0a1h,8ch,8bh
  306.     db    20h,0a4h,95h,0a2h, 93h,94h,94h,6fh    ; column 15
  307.     db    0edh,97h,0a3h,96h, 81h,98h,20h,0h
  308.     db    94,'%','5'            ; 94 byte set, letter ident
  309.                             ; to CP863
  310. MNcp863 db    80h,81h,82h,83h,   84h,85h,86h,87h    ; column 8
  311.     db    88h,89h,8ah,8bh,   8ch,8dh,8eh,8fh
  312.     db    90h,91h,92h,93h,   94h,95h,96h,97h    ; column 9
  313.     db    98h,99h,9ah,9bh,   9ch,9dh,9eh,9fh
  314.     db    0h,0adh,9bh,9ch,   20h,9dh,20h,15h    ; column 10
  315.     db    98h,40h,61h,0aeh,  20h,20h,20h,20h
  316.     db    0f8h,0f1h,0fdh,33h, 20h,0e6h,86h,0feh    ; column 11
  317.     db    2eh,31h,6fh,0afh,  0ach,0abh,20h,3fh
  318.     db    8eh,41h,84h,41h,   41h,41h,3fh,80h    ; column 12
  319.     db    91h,90h,92h,94h,   49h,49h,88h,95h
  320.     db    20h,4eh,4fh,4fh,   99h,4fh,4fh,4fh    ; column 13
  321.     db    0edh,9dh,55h,0aeh, 55h,59h,20h,0e1h
  322.     db    85h,61h,83h,61h,   61h,61h,3fh,87h    ; column 14
  323.     db    8ah,82h,88h,89h,   69h,69h,8ch,8bh
  324.     db    20h,6eh,6fh,0a2h,  93h,6fh,6fh,6fh    ; column 15
  325.     db    0edh,97h,0a3h,96h, 75h,79h,20h,0h
  326.     db    94,'%','5'            ; 94 byte set, letter ident
  327.                             ; to CP865
  328. MNcp865 db    80h,81h,82h,83h,   84h,85h,86h,87h    ; column 8
  329.     db    88h,89h,8ah,8bh,   8ch,8dh,8eh,8fh
  330.     db    90h,91h,92h,93h,   94h,95h,96h,97h    ; column 9
  331.     db    98h,99h,9ah,9bh,   9ch,9dh,9eh,9fh
  332.     db    0h,0adh,3fh,9ch,   20h,3fh,20h,15h    ; column 10
  333.     db    0afh,3fh,0a6h,0aeh, 20h,20h,20h,20h
  334.     db    0f8h,0f1h,0fdh,33h, 20h,0e6h,14h,0feh    ; column 11
  335.     db    2eh,31h,0a7h,03fh, 0ach,0abh,20h,0a8h
  336.     db    41h,41h,41h,41h,   8eh,8fh,92h,80h    ; column 12
  337.     db    45h,90h,45h,45h,   49h,49h,49h,49h
  338.     db    20h,0a5h,4fh,4fh,  4fh,4fh,99h,4fh    ; column 13
  339.     db    0edh,55h,55h,55h,  9ah,59h,20h,0e1h
  340.     db    85h,0a0h,83h,61h,  84h,86h,91h,87h    ; column 14
  341.     db    8ah,82h,88h,89h,   8dh,0a1h,8ch,8bh
  342.     db    20h,0a4h,95h,0a2h, 93h,6fh,94h,6fh    ; column 15
  343.     db    0edh,97h,0a3h,96h, 81h,79h,20h,0h
  344.     db    94,'%','5'            ; 94 byte set, letter ident
  345.  
  346. ; 128 byte translation tables from Code Pages to DEC Multinational char set
  347. ; (DEC Supplemental Graphic). For GRight only (high bit set).
  348.                             ; from Code Page 437
  349. cp437MN db    0c7h,0fch,0e9h,0e2h, 0e4h,0e0h,0e5h,0e7h ; column 8
  350.     db    0eah,0ebh,0e8h,0efh, 0eeh,0ech,0c4h,0c5h
  351.     db    0c9h,0e6h,0c6h,0f4h, 0f6h,0f2h,0fbh,0f9h ; column 9
  352.     db    0ffh,0d6h,0dch,0a2h, 0a3h,0a5h,3fh,3fh
  353.     db    0e1h,0edh,0f3h,0fah, 0f1h,0d1h,0aah,0bah ; column 10
  354.     db    0bfh,3fh,0ach,0bdh,  0bch,0a1h,0abh,0bbh
  355.     db    16 dup (3fh)                 ; column 11
  356.     db    16 dup (3fh)                 ; column 12
  357.     db    16 dup (3fh)                 ; column 13
  358.     db    3fh,0dfh, 4 dup (3fh),        0b5h,3fh ; column 14
  359.     db    5 dup(3fh),            0f8h,3fh,3fh
  360.     db    3fh,0b1h, 4 dup (3fh),          0h,3fh ; column 15
  361.     db    0b0h, 4 dup (3fh),       0b2h,0b7h,3fh
  362.                              ; from Code Page 850
  363. cp850MN db    0c7h,0fch,0e9h,0e2h, 0e4h,0e0h,0e5h,0e7h ; column 8
  364.     db    0eah,0ebh,0e8h,0efh, 0eeh,0ech,0c4h,0c5h
  365.     db    0c9h,0e6h,0c6h,0f4h, 0f6h,0f2h,0fbh,0f9h ; column 9
  366.     db    0ffh,0d6h,0dch,0f8h, 0a3h,0d8h,58h,3fh
  367.     db    0e1h,0edh,0f3h,0fah, 0f1h,0d1h,0aah,0bah ; column 10
  368.     db    0bfh,0aeh,0ach,0bdh, 0bch,0a1h,0abh,0bbh
  369.     db    5 dup (3fh),          0c1h,0c2h,0c0h ; column 11
  370.     db    0a9h, 4 dup (3fh),      0a2h,0a5h,0ach
  371.     db    6 dup (3fh),0e3h,0c3h, 7 dup (3fh),0a4h     ; column 12
  372.     db    0f0h,0d0h,0cah,0cbh, 0c8h,0b9h,0cdh,0ceh ; column 13
  373.     db    0cfh, 4 dup (3fh),       7ch,0cch,3fh
  374.     db    0d3h,0dfh,0d4h,0d2h, 0f5h,0d5h,0b5h,0deh ; column 14
  375.     db    0feh,0dah,0dbh,0d9h, 0fdh,0ddh,0afh,0b4h
  376.     db    0adh,0b1h,3dh,0beh,  0b6h,0a7h,00h,22h     ; column 15
  377.     db    0b0h,0a8h,3fh,0b9h,  0b2h,0b3h,0b7h,20h
  378.                              ; from Code Page 860
  379. cp860MN db    0c7h,0fch,0e9h,0e2h, 0e3h,0e0h,0c1h,0e7h ; column 8
  380.     db    0eah,0cah,0e8h,0cch, 0d4h,0ech,0c3h,0c2h
  381.     db    0c9h,0c0h,0c8h,0f4h, 0f5h,0f2h,0dah,0f9h ; column 9
  382.     db    0cch,0d5h,0dch,0a2h, 0a3h,0d9h,3fh,0d3h
  383.     db    0e1h,0edh,0f3h,0fah, 0f1h,0d1h,0aah,0bah ; column 10
  384.     db    0bfh,0d2h,0ach,0bdh, 0bch,0a1h,0abh,0bbh
  385.     db    16 dup (3fh)                 ; column 11
  386.     db    16 dup (3fh)                 ; column 12
  387.     db    16 dup (3fh)                 ; column 13
  388.     db    3fh,0dfh, 4 dup (3fh),        0b5h,3fh ; column 14
  389.     db    5 dup(3fh),            0f8h,3fh,3fh
  390.     db    3fh,0b1h, 4 dup (3fh),          0h,3fh ; column 15
  391.     db    0b0h, 4 dup (3fh),       0b2h,0b7h,3fh
  392.                              ; from Code Page 863
  393. cp863MN db    0c7h,0fch,0e9h,0e2h, 0e2h,0e0h,0b6h,0a2h ; column 8
  394.     db    0eah,0ebh,0e8h,0efh, 0eeh,3dh,0c0h,0a7h
  395.     db    0c9h,0c8h,0cah,0f4h, 0cbh,0cfh,0fbh,0fah ; column 9
  396.     db    0a4h,0d4h,0dch,0a2h, 0a3h,0d9h,0dbh,3fh
  397.     db    7ch,0b4h,0f3h,0fah, 0a8h,0a8h,0b3h,0afh ; column 10
  398.     db    0ceh,3fh,0ach,0bdh,  0bch,0beh,0abh,0bbh
  399.     db    16 dup (3fh)                 ; column 11
  400.     db    16 dup (3fh)                 ; column 12
  401.     db    16 dup (3fh)                 ; column 13
  402.     db    3fh,0dfh, 4 dup (3fh),        0b5h,3fh ; column 14
  403.     db    5 dup(3fh),            0f8h,3fh,3fh
  404.     db    3fh,0b1h, 4 dup (3fh),          0h,3fh ; column 15
  405.     db    0b0h, 4 dup (3fh),       0b2h,0b7h,3fh
  406.                              ; from Code Page 865
  407. cp865MN db    0c7h,0fch,0e9h,0e2h, 0e4h,0e0h,0e5h,0e7h ; column 8
  408.     db    0eah,0ebh,0e8h,0efh, 0eeh,0ech,0c4h,0c5h
  409.     db    0c9h,0e6h,0c6h,0f4h, 0f6h,0f2h,0fbh,0fah ; column 9
  410.     db    0ffh,0d6h,0dch,0f8h, 0a3h,0d8h,3fh,3fh
  411.     db    0e2h,0edh,0f3h,0fah, 0f1h,0d1h,0aah,0bah ; column 10
  412.     db    0bfh,3fh,0ach,0bdh,  0bch,0a1h,0abh,0a4h
  413.     db    16 dup (3fh)                 ; column 11
  414.     db    16 dup (3fh)                 ; column 12
  415.     db    16 dup (3fh)                 ; column 13
  416.     db    3fh,0dfh, 4 dup (3fh),        0b5h,3fh ; column 14
  417.     db    5 dup(3fh),            0f8h,3fh,3fh
  418.     db    3fh,0b1h, 4 dup (3fh),          0h,3fh ; column 15
  419.     db    0b0h, 4 dup (3fh),       0b2h,0b7h,3fh
  420.  
  421.             ; Dec Technical set to CP437, CP860, CP863, CP865
  422.             ; Note: CP850 lacks the symbols so expect trash
  423. dectech db    32 dup (0)                ; columns 8 and 9
  424.     db    0h,0fbh,0dah,0c4h, 0f4h,0f5h,0b3h,0dah    ; column 10
  425.     db    0c0h,0bfh,0d9h,28h,28h,29h,29h,0b4h
  426.     db    0c3h,3ch,3eh,5ch,  2fh,0bfh,0d9h,03eh    ; column 11
  427.     db    0a8h,20h,20h,20h,  0f3h,3dh,0f2h,3fh
  428.     db    1eh,0ech,0ech,0f6h,1eh,1fh,0e8h,0e2h    ; column 12
  429.     db    0f7h,0f7h,0e9h,58h,3fh,1dh,1ah,0f0h
  430.     db    0e3h,3fh,20h,0e4h, 20h,20h,0fbh,0eah    ; column 13
  431.     db    3fh,54h,3fh,3fh,   0efh,55h,5eh,76h
  432.     db    0aah,0e0h,0e1h,78h,0ebh,0eeh,0edh,3fh    ; column 14 
  433.     db    6eh,69h,0e9h,6bh,  3fh,20h,76h,3fh
  434.     db    0e3h,3fh,70h,0e5h, 0e7h,0a8h,9fh,77h    ; column 15
  435.     db    45h,76h,3fh,1bh,   18h,1ah,19h,7fh
  436.     db    94,3eh,0            ; 94 byte set, letter ident
  437. data    ends
  438.  
  439. code    segment
  440.     assume    cs:code, ds:data, es:nothing
  441.  
  442. ; Set reg BX to offset of table for Code Page to DEC Multinational Char Set
  443. ; (DEC Supplemental Graphics)
  444. CPDECSG proc    near
  445.     mov    bx,offset cp437MN    ; assume CP437
  446.     cmp    flags.chrset,437    ; current Code Page is 437?
  447.     je    cpdecsx            ; e = yes
  448.     mov    bx,offset cp850MN    ; assume CP850
  449.     cmp    flags.chrset,850    ; current Code Page is 850?
  450.     je    cpdecsx            ; e = yes
  451.     mov    bx,offset cp860MN    ; assume CP860
  452.     cmp    flags.chrset,860    ; current Code Page is 860?
  453.     je    cpdecsx            ; e = yes
  454.     mov    bx,offset cp863MN    ; assume CP863
  455.     cmp    flags.chrset,863    ; current Code Page is 863?
  456.     je    cpdecsx            ; e = yes
  457.     mov    bx,offset cp865MN    ; assume CP865
  458.     cmp    flags.chrset,865    ; current Code Page is 865?
  459.     je    cpdecsx            ; e = yes
  460.     mov    bx,offset cp437MN    ; default to CP437
  461. CPDECSX:ret
  462. CPDECSG endp
  463. ; Set register SI to the offset of the NRC table appropriate to the
  464. ; currently active Code Page. Defaults to CP437 if no CP found.
  465. NRC2CP    proc    near
  466.     push    bx
  467.     push    dx
  468.     cmp    dosnum,0300h+30        ; DOS version 3.30 or higher?
  469.     jb    nrc2cp1            ; b = no, no Code Pages
  470.     mov    ax,6601h        ; get global Code Page
  471.     int    dos            ; bx=active Code Page, dx=boot CP
  472.     cmp    bx,437            ; current Code Page is 437?
  473.     je    nrc2cp1            ; e = yes
  474.     mov    si,offset NRC850    ; assume CP850
  475.     cmp    bx,850            ; current Code Page is 850?
  476.     je    nrc2cpx            ; e = yes
  477.     mov    si,offset NRC860    ; assume CP860
  478.     cmp    bx,860            ; current Code Page is 860?
  479.     je    nrc2cpx            ; e = yes
  480.     mov    si,offset NRC863    ; assume CP863
  481.     cmp    bx,863            ; current Code Page is 863?
  482.     je    nrc2cpx            ; e = yes
  483.     mov    si,offset NRC865    ; assume CP865
  484.     cmp    bx,865            ; current Code Page is 865?
  485.     je    nrc2cpx            ; e = yes
  486. nrc2cp1:mov    si,offset NRC437    ; default to CP437
  487. nrc2cpx:pop    dx
  488.     pop    bx
  489.     ret
  490. NRC2CP    endp
  491.  
  492.  
  493. code    ends
  494.     end
  495.