home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / COMM / MISC / RS204.ZIP / RS204.ASM < prev    next >
Encoding:
Assembly Source File  |  1991-10-01  |  15.9 KB  |  608 lines

  1. page    58,132
  2. TITLE    RS203    6-23-86    [10-1-91]
  3.  
  4. ;Original disassembly to see exactly what that E1 "enable"
  5. ;means (chasing a potential MSKermit bug).
  6.  
  7. ;v2.04, 1 Oct 91
  8. ; - Rewrite, tightening up a little.
  9. ; - Removed all the fancy BIOS screen displays,
  10. ;   with everything now going to STDOUT (for redirection).
  11. ;
  12. ;David Kirschbaum
  13. ;Toad Hall
  14. ;kirsch@usasoc.soc.mil
  15.  
  16. LF    EQU    0AH
  17. CR    EQU    0DH
  18.  
  19. CSEG    SEGMENT
  20.     ASSUME DS:CSEG, SS:CSEG ,CS:CSEG ,ES:CSEG
  21.     ORG    100H
  22.  
  23. RS_100    proc    near
  24.     JMP    RS_532
  25.  
  26. ;COM1 port address table
  27. com1tbl_103    DW    03F8H    ;[BX]    ;UART base
  28.         dw    03F9H    ;[BX+2]    ;base+1 IER
  29.         dw    03F9H    ;[BX+4]    ;base+1 IER
  30.         dw    03FBH    ;[BX+6]    ;base+3, LCR
  31.         DW    03FCH    ;[BX+8]    ;base+4, MCR
  32.         dw    03FDH    ;[BX+0A];base+5, LSR
  33.         dw    03FEH    ;[BX+0C];base+6, MSR
  34. ;COM2 port address table
  35. com2tbl_111    DW    02F8H,2 DUP(02F9H),02FBH
  36.         DW    02FCH,02FDH,02FEH
  37.  
  38. bauddiv_11F    DW    0        ;baudrate divisor
  39.  
  40. ier_121        db    0        ;Interrupt Enable Register status
  41. lcr_122        db    0        ;Line Control Register status
  42. mcr_123        db    0        ;Modem Control Register status
  43. lsr_124        db    0        ;Line Status Register status
  44. msr_125        db    0        ;Modem Status Register status
  45. lcr_126        db    0        ;LCR status w/8-bit OR'ed
  46.         db    0
  47.  
  48. numbuff_12F    DB    '      $'
  49.  
  50. buff_129 label    byte        ;overwrites intro            v2.04
  51. logo$    DB '                RS  Copyright Fred E. Davis 1986    Ver. 2.04'
  52.     db    CR,LF
  53. crlf    db    CR,LF,'$'
  54.  
  55. usage$    DB    'RS [n] where [n] is 1 for COM1 or 2 for COM2'    ;v2.04
  56.     db    CR,LF,'Defaults to COM1$'
  57.  
  58. com1$176    DB    CR,'COM1:$'
  59. com2$17D    DB    CR,'COM2:$'
  60. msg_184    DB    ' not installed!',CR,LF,CR,LF,CR,LF,'$'
  61. msg_194    DB    CR,LF,'A. Protocol:                    B. Handshake Status:'
  62.     db    CR,LF,'  1. Data Bits: $'
  63. msg_1DD    DB                '            1. DTR Out: $'
  64. msg_1F6    DB    CR,LF,'  2. Stop Bits: $'
  65. msg_209    DB                '            2. RTS Out: $'
  66. msg_222    DB    CR,LF,'  3. Parity   : $'
  67. msg_235    DB                '            3. CTS In : $'
  68. msg_24E    DB    CR,LF,'  4. Rate     : $'
  69. msg_261    DB                '            4. DSR In : $'
  70. msg_27A    DB    CR,LF,'  5. Stick    : $'
  71. msg_28D    DB                '            5. CD In  : $'
  72. msg_2A6    DB    CR,LF,'  6. Break    : $'
  73. msg_2B9    DB                '            6. RI In  : $'
  74. msg_2D2    DB    CR,LF,CR,LF
  75.     DB    'C. Line Status:                 D. Error Status:',CR,LF
  76.     DB    '  1. Receive Buffer : $'
  77. msg_31F    DB                '      1. Overrun: $'
  78. msg_332    DB    CR,LF,'  2. Transmit Buffer: $'
  79. msg_34B    DB                '      2. Parity : $'
  80. msg_35E    DB    CR,LF,'  3. Break Status   : $'
  81. msg_377    DB                '      3. Frame  : $'
  82. msg_38A    DB    CR,LF,'  4. Loop Back      : $'
  83. msg_3A3    DB    CR,LF,CR,LF
  84.     DB    'E. Interrupt Status:'
  85.     db    CR,LF,'  1. Output      : $'
  86. msg_3D1    DB    CR,LF,'  2. Data Ready  : $'
  87. msg_3E7    DB    CR,LF,'  3. Xmit Empty  : $'
  88. msg_3FD    DB    CR,LF,'  4. Line Status : $'
  89. msg_413    DB    CR,LF,'  5. Modem Status: $'
  90. msg_42C        DB    '1     $'
  91. msg_433        DB    '2     $'
  92. msg_43A        DB    '5     $'
  93. msg_441        DB    '6     $'
  94. msg_448        DB    '7     $'
  95. msg_44F        DB    '8     $'
  96. odd$        DB    'odd   $'
  97. even$        DB    'even  $'
  98. none$        DB    'none  $'
  99. norm$        DB    'normal$'
  100. set$        DB    'set   $'
  101.  
  102. baudtbl_479    label    byte
  103.     DB    '50    $'
  104.     dw    0900H        ;DB    0,9
  105.     db    '75    $'
  106.     dw    0600H        ;DB    0,6
  107.     db    '110   $'
  108.     dw    0417H        ;DB    17H,4
  109.     db    '134.5 $'
  110.     dw    0359H        ;DB    59H,3
  111.     db    '150   $'
  112.     dw    0300H        ;DB    0,3
  113.     db    '300   $'
  114.     dw    0180H        ;DB    80H,1
  115.     db    '600   $'
  116.     dw    00C0H        ;DB    0C0H,0
  117.     db    '1200  $'
  118.     dw    0060H        ;DB    60H,0
  119.     db    '1800  $'
  120.     dw    0040H        ;DB    40H,0
  121.     db    '2000  $'
  122.     dw    003AH        ;DB    3AH,0
  123.     db    '2400  $'
  124.     dw    0030H        ;DB    30H,0
  125.     db    '3600  $'
  126.     dw    0020H        ;DB    20H,0
  127.     db    '4800  $'
  128.     dw    0018H        ;DB    18H,0
  129.     db    '7200  $'
  130.     dw    0010H        ;DB    10H,0
  131.     db    '9600  $'
  132.     dw    000CH        ;DB    0CH,0
  133.  
  134. fast$    DB    'fast!!$'
  135. empty$    DB    'empty $'
  136. full$    DB    'full  $'
  137. low$    DB    'low   $'
  138. high$    DB    'high  $'
  139. enable$    DB    'enable$'
  140. disable$ DB    'disable$'
  141.  
  142. RS_100    endp
  143.  
  144. RS_532    proc    near
  145.  
  146. ;v2.04 Use STDOUT for all displays
  147.     mov    dx,offset logo$        ;copyright            v2.04
  148.     mov    ah,9            ;display msg to stdout        v2.04
  149.     int    21H
  150.  
  151.     MOV    DI,81H            ;PSP cmdline
  152.     MOV    AL,20H    ;' '        ;gobble leading spaces
  153.     MOV    CX,44H            ;max cmdline length
  154.     CLD
  155.     REPZ    SCASB
  156. ;v2.04 assume COM1
  157.     mov    bx,offset com1tbl_103    ;use COM1's table    v2.04
  158.     mov    dx,offset com1$176    ;CR,'COM1:$'        v2.04
  159.  
  160.     MOV    AL,[DI-1]        ;get last pre-space char
  161.     jcxz    Skp594            ;zeroed out cmdline, use COM1    v2.04
  162.  
  163.     CMP    AL,CR            ;No cmd parm ...
  164.     jz    Skp594            ;.. so use COM1            v2.04
  165.     CMP    AL,31H    ;'1'        ;COM1?
  166.     jz    Skp594            ;.. so use COM1            v2.04
  167.  
  168.     CMP    AL,32H    ;'2'        ;COM2?
  169.     JZ    Use_COM2_58E        ;yep
  170.      mov    dx,offset usage$    ;tell the dummy how        v2.04
  171.      jmp    short Msg_Term        ;display, terminate        v2.04
  172.  
  173.  
  174. Use_COM2_58E:
  175.     MOV    BX,OFFSET com2tbl_111    ;use COM2's table
  176.     MOV    DX,OFFSET com2$17D    ;CR,'COM2:$'
  177.  
  178. Skp594:    MOV    AH,9            ;display "COMn:"
  179.     INT    21H
  180.  
  181.     MOV    DX,[BX+6]        ;base+3, LCR Line Control Register
  182.     IN    AL,DX
  183.     OR    AL,80H            ;turn on 8-bit
  184.     MOV    lcr_126,AL        ;save it
  185.     OUT    DX,AL
  186.  
  187.     MOV    AH,AL            ;save LCR status in AH
  188.     MOV    CX,03E8H        ;delay value
  189. Lup5A7:    LOOP    Lup5A7            ;delay a bit
  190.     IN    AL,DX            ;read LCR
  191.     CMP    AH,AL            ;match original?
  192.     JNZ    Not_Installed_5CE    ;'Not installed', die
  193.  
  194.     MOV    DX,[BX]            ;UART base
  195.     IN    AL,DX            ;get baudrate divisor lsb
  196.     MOV    byte ptr bauddiv_11F,AL    ;save
  197.     INC    DX            ;bump to divisor msb
  198.     IN    AL,DX
  199.     MOV    byte ptr bauddiv_11F+1,AL    ;save it
  200.  
  201. ;Toggle LCR back off again so we can read the port normally
  202.  
  203.     MOV    DX,[BX+6]        ;base+3, LCR
  204.     MOV    AL,lcr_126        ;saved LCR status w/8-bit OR'ed
  205.     AND    AL,7FH            ;mask that bit off again
  206.     OUT    DX,AL            ;out the port
  207.  
  208.     MOV    AH,AL            ;save that LCR status
  209.     MOV    CX,03E8H        ;delay value
  210. Lup5C7:    LOOP    Lup5C7            ;delay a bit
  211.     IN    AL,DX            ;read the port
  212.     CMP    AH,AL            ;still match?
  213.     JZ    Skp5F3            ;yep, continue
  214.  
  215. Not_Installed_5CE:
  216.     mov    dx,offset msg_184    ;' not installed!'        v2.04
  217. Msg_Term:                ;v2.04
  218.     MOV    AH,9
  219.     INT    21H
  220.     MOV    AL,1            ;ERRORLEVEL 1
  221.     JMP    Term_937        ;terminate
  222.  
  223. Skp5F3:
  224.     MOV    DX,[BX+4]        ;base+1, IER Interrupt Enable Register
  225.     mov    di,offset ier_121    ;start of saved status        v2.04
  226.     IN    AL,DX
  227.     stosb                ;ier_121, save IER status    v2.04
  228.     MOV    DX,[BX+6]        ;base+3, LCR
  229.     IN    AL,DX
  230.     stosb                ;lcr_122, save LCR status    v2.04
  231.     MOV    DX,[BX+8]        ;base+4, MCR Modem Control Register
  232.     IN    AL,DX
  233.     stosb                ;mcr_123, save MCR status    v2.04
  234.     MOV    DX,[BX+0AH]        ;base+5 LSR Line Status Register
  235.     IN    AL,DX
  236.     stosb                ;lsr_124, save LSR status    v2.04
  237.     MOV    DX,[BX+0CH]        ;base+6 MSR Modem Status Register
  238.     IN    AL,DX
  239.     stosb                ;msr_125, save MSR status    v2.04
  240.  
  241.     MOV    DX,OFFSET msg_194    ;CR,LF,'A. Protocol:
  242.                     ;B. Handshake Status:'
  243.                     ;CR,LF,'  1. Data Bits: $'
  244.     MOV    AH,9
  245.     INT    21H
  246.  
  247.     mov    si,offset lcr_122    ;point to saved status bytes    v2.04
  248.     lodsb                ;lcr_122            v2.04
  249.     mov    dx,offset msg_43A    ;assume '5     $' bit data    v2.04
  250.     AND    AL,3            ;mask to data bits
  251.     jz    Pr_641            ;0 = 5                v2.04
  252.     mov    dx,offset msg_441    ;assume '6     $' bit data    v2.04
  253.     DEC    AL
  254.     jz    Pr_641            ;1 = 6                v2.04
  255.     mov    dx,offset msg_448    ;assume '7     $' bit data    v2.04
  256.     DEC    AL
  257.     jz    Pr_641            ;2 = 7                v2.04
  258.      MOV    DX,OFFSET msg_44F    ;'8     $' bit data
  259.  
  260. Pr_641:    MOV    AH,9            ;display data bit data
  261.     INT    21H
  262.  
  263.     MOV    DX,OFFSET msg_1DD    ;'            1. DTR Out: $'
  264.     MOV    AH,9
  265.     INT    21H
  266.     mov    al,[si]            ;mcr_123, MCR status        v2.04
  267.     mov    dx,offset high$        ;assume 'high  $'        v2.04
  268.     AND    AL,1            ;mask for DTR
  269.     jz    Pr_65C            ;1 = high            v2.04
  270.      MOV    DX,OFFSET low$        ;'low   $'
  271. Pr_65C:    MOV    AH,9            ;display DTR Out status
  272.     INT    21H
  273.  
  274.     MOV    DX,OFFSET msg_1F6    ;CR,LF,'  2. Stop Bits: $'
  275.     MOV    AH,9
  276.     INT    21H
  277.     dec    si            ;back up to lcr_122        v2.04
  278.     lodsb                ;lcr_122, LCR status        v2.04
  279.     mov    dx,offset msg_433    ;assume '2     $' stop bits    v2.04
  280.     AND    AL,4            ;mask for stop bits
  281.     jnz    Pr_677            ;1 = 2 stop bits        v2.04
  282.      MOV    DX,OFFSET msg_42C    ;'1     $' stop bits
  283. Pr_677:    MOV    AH,9            ;display stop bit data
  284.     INT    21H
  285.  
  286.     MOV    DX,OFFSET msg_209    ;'            2. RTS Out: $'
  287.     MOV    AH,9
  288.     INT    21H
  289.     mov    al,[si]            ;mcr_123, MCR status        v2.04
  290.     mov    dx,offset high$        ;assume 'high  $' RTS        v2.04
  291.     AND    AL,2            ;mask for RTS
  292.     jnz    Pr_692            ;non-0 = high            v2.04
  293.      MOV    DX,OFFSET low$        ;'low   $' RTS
  294. Pr_692:    MOV    AH,9            ;display RTS out status
  295.     INT    21H
  296.  
  297.     MOV    DX,OFFSET msg_222    ;CR,LF,'  3. Parity   : $'
  298.     MOV    AH,9
  299.     INT    21H
  300.     dec    si            ;back up to lcr_122 again    v2.04
  301.     mov    al,[si]            ;lcr_122 status            v2.04
  302.     mov    dx,offset none$        ;assume 'none  $'        v2.04
  303.     AND    AL,8            ;mask for parity bit
  304.     jz    Pr_6Bx            ;display none            v2.04
  305.     mov    al,[si]            ;get lcr_122 status again    v2.04
  306.     mov    dx,offset even$        ;assume 'even  $'        v2.04
  307.     AND    AL,10H            ;mask for parity bit
  308.     jnz    Pr_6Bx            ;even                v2.04
  309.      MOV    DX,OFFSET odd$        ;'odd   $'
  310. Pr_6Bx:    MOV    AH,9            ;display Parity status
  311.     INT    21H
  312.  
  313. Skp6C1:    MOV    DX,OFFSET msg_235    ;'            3. CTS In : $'
  314.     MOV    AH,9
  315.     INT    21H
  316.  
  317.     MOV    AL,msr_125        ;MSR status
  318.     mov    dx,offset high$        ;assume 'high  $' CTS in    v2.04
  319.     AND    AL,10H            ;mask to CTS bit
  320.     jnz    Pr_6D8            ;non-0 = high            v2.04
  321.      MOV    DX,OFFSET low$        ;'low   $' CTS In
  322. Pr_6D8:    MOV    AH,9            ;display CTS In status
  323.     INT    21H
  324.  
  325.     MOV    DX,OFFSET msg_24E    ;CR,LF,'  4. Rate     : $'
  326.     MOV    AH,9
  327.     INT    21H
  328.  
  329.     MOV    AX,bauddiv_11F        ;baudrate divisor
  330.     MOV    DI,7
  331.     MOV    CX,10H            ;total 16 records
  332. Lup6EC:    CMP    AX,word ptr [DI+baudtbl_479]
  333.     JZ    GotBaud_6F9
  334.     ADD    DI,9            ;next record
  335.     LOOP    Lup6EC
  336.     JCXZ    No_TableBaud_709
  337.  
  338. GotBaud_6F9:
  339.     MOV    AX,DI            ;record end
  340.     SUB    AX,7            ;back up to the string
  341.     ADD    AX,OFFSET baudtbl_479    ;table start
  342.     MOV    DX,AX
  343.     MOV    AH,9
  344.     INT    21H
  345.     JMP    SHORT    Check_DSR_763    ;skip to DSR check
  346.  
  347. ;Baudrate wasn't in our table
  348. No_TableBaud_709:
  349.     CMP    AX,2            ;divisor < 2?
  350.     JB    FastBaud_75C        ;yep, just say fast!!
  351.  
  352. ;Compute and display the raw baudrate
  353.  
  354.     MOV    BX,AX            ;divisor into BX
  355.     MOV    CL,4
  356.     SHL    BX,CL            ;*16
  357.     MOV    DX,1CH            ;long division
  358.     MOV    AX,2000H
  359.     DIV    BX
  360.  
  361.     MOV    DI,OFFSET buff_129    ;Asciify the result
  362.     XOR    BX,BX            ;buffer base
  363.     MOV    CX,6            ;6-byte buffer
  364. Lup728:    MOV    BYTE PTR [BX+DI],0    ;initialize buffer
  365.     INC    BX
  366.     LOOP    Lup728
  367.  
  368.     XCHG    BX,DI            ;BX -> buffer start
  369.     DEC    BX            ;back up 1
  370.     MOV    DI,0AH            ;10 constant for dividing
  371. Lup734:    XOR    DX,DX            ;clear overflow
  372.     DIV    DI            ;/10
  373.     INC    BX            ;bump buffer ptr
  374.     INC    CX            ;bump digit counter
  375.     MOV    [BX],DL            ;stuff Ascii char in buffer
  376.     OR    AX,AX            ;done?
  377.     JNZ    Lup734            ;nope
  378.  
  379.     XOR    DI,DI            ;string buffer base offset
  380. Lup742:    MOV    AL,[BX]            ;Ascii char
  381.     OR    AL,30H            ;mask to uppercase?
  382.     MOV    [DI+numbuff_12F],AL    ;stuff in blank string
  383.     DEC    BX
  384.     INC    DI
  385.     DEC    CX
  386.     JNZ    Lup742
  387.  
  388.     MOV    DX,OFFSET numbuff_12F    ;display ASCII number
  389.     MOV    AH,9
  390.     INT    21H
  391.  
  392.     JMP    SHORT    Check_DSR_763    ;skip to DSR check
  393.  
  394. FastBaud_75C:
  395.     MOV    DX,OFFSET fast$        ;'fast!!$'
  396.     MOV    AH,9
  397.     INT    21H
  398.  
  399. Check_DSR_763:
  400.     MOV    DX,OFFSET msg_261    ;'            4. DSR In : $'
  401.     MOV    AH,9
  402.     INT    21H
  403.     mov    si,offset msr_125    ;MSR status            v2.04
  404.     mov    al,[si]            ;msr_125 MSR status        v2.04
  405.     mov    dx,offset high$        ;assume 'high  $'        v2.04
  406.     AND    AL,20H            ;mask to MSR bit
  407.     jnz    Pr_77A            ;non-0 = high            v2.04
  408.      MOV    DX,OFFSET low$        ;'low   $'
  409. Pr_77A:    MOV    AH,9            ;display DSR In status
  410.     INT    21H
  411.  
  412.     MOV    DX,OFFSET msg_27A    ;'CR,LF,'  5. Stick    : $'
  413.     MOV    AH,9
  414.     INT    21H
  415.     MOV    AL,lcr_122        ;get LCR status
  416.     mov    dx,offset set$        ;assume 'set   $'        v2.04
  417.     AND    AL,20H            ;mask to "stick" status
  418.     JNZ    Pr_795            ;non-0 means "set"        v2.04
  419.      MOV    DX,OFFSET norm$        ;'normal$'
  420. Pr_795:    MOV    AH,9
  421.     INT    21H
  422.  
  423.     MOV    DX,OFFSET msg_28D    ;'            5. CD In  : $'
  424.     MOV    AH,9
  425.     INT    21H
  426.     mov    al,[si]            ;msr_125 MSR status        v2.04
  427.     mov    dx,offset high$        ;assume 'high  $'        v2.04
  428.     AND    AL,80H            ;mask to Carrier Detect status
  429.     JNZ    Pr_7B0            ;non-0 means high        v2.04
  430.      MOV    DX,OFFSET low$        ;'low   $'
  431. Pr_7B0:    MOV    AH,9
  432.     INT    21H
  433.  
  434.     MOV    DX,OFFSET msg_2A6    ;CR,LF,'  6. Break    : $'
  435.     MOV    AH,9
  436.     INT    21H
  437.     MOV    AL,lcr_122        ;get LCR status
  438.     mov    dx,offset set$        ;assume 'set   $'        v2.04
  439.     AND    AL,40H            ;mask break bit
  440.     JNZ    Pr_7CB            ;non-0 = set            v2.04
  441.      MOV    DX,OFFSET norm$        ;'normal$'
  442. Pr_7CB:    MOV    AH,9
  443.     INT    21H
  444.  
  445.     MOV    DX,OFFSET msg_2B9    ;'            6. RI In  : $'
  446.     MOV    AH,9
  447.     INT    21H
  448.     mov    al,[si]            ;msr_125 MSR status        v2.04
  449.     mov    dx,offset high$        ;assume 'high  $'        v2.04
  450.     AND    AL,40H            ;mask Ring Indicator bit
  451.     jnz    Pr_7E6            ;non-0 = high            v2.04
  452.      MOV    DX,OFFSET low$        ;'low   $'
  453. Pr_7E6:    MOV    AH,9            ;display RI in status
  454.     INT    21H
  455.  
  456. ;'C. Line Status:                 D. Error Status:',CR,LF
  457. ;'  1. Receive Buffer : $'
  458.     MOV    DX,OFFSET msg_2D2
  459.     MOV    AH,9
  460.     INT    21H
  461.  
  462.     dec    si            ;back down to lsr_124        v2.04
  463.     mov    al,[si]            ;lsr_124 LSR status        v2.04
  464.     mov    dx,offset full$        ;assume 'full  $'        v2.04
  465.     AND    AL,1            ;mask Receive Buffer status byte
  466.     jnz    Pr_801            ;non-0 = full            v2.04
  467.      MOV    DX,OFFSET empty$    ;'empty $'
  468. Pr_801:    MOV    AH,9            ;display Receive Buffer status
  469.     INT    21H
  470.  
  471.     MOV    DX,OFFSET msg_31F    ;'      1. Overrun: $'
  472.     MOV    AH,9
  473.     INT    21H
  474.     mov    al,[si]            ;lsr_124 LSR status        v2.04
  475.     mov    dx,offset set$        ;assume 'set   $'        v2.04
  476.     AND    AL,2            ;mask Overrun error bit
  477.     jnz    Pr_81C            ;non-0 = set            v2.04
  478.      MOV    DX,OFFSET none$        ;'none  $'
  479. Pr_81C:    MOV    AH,9            ;display Overrun error bit
  480.     INT    21H
  481.  
  482.     MOV    DX,OFFSET msg_332    ;CR,LF,'  2. Transmit Buffer: $'
  483.     MOV    AH,9
  484.     INT    21H
  485.     mov    al,[si]            ;lsr_124 LSR status        v2.04
  486.     mov    dx,offset empty$    ;assume 'empty $'        v2.04
  487.     AND    AL,20H            ;mask Transmit Buffer status bit
  488.     jnz    Pr_837            ;non-0 = empty            v2.04
  489.      MOV    DX,OFFSET full$        ;'full  $'
  490. Pr_837:    MOV    AH,9            ;display Transmit Buffer status
  491.     INT    21H
  492.  
  493.     MOV    DX,OFFSET msg_34B    ;'      2. Parity : $'
  494.     MOV    AH,9
  495.     INT    21H
  496.     mov    al,[si]            ;lsr_124 LSR status        v2.04
  497.     mov    dx,offset set$        ;assume 'set   $'        v2.04
  498.     AND    AL,4            ;mask Parity error bit
  499.     jnz    Pr_852            ;non-0 = set            v2.04
  500.      MOV    DX,OFFSET none$        ;'none  $'
  501. Pr_852:    MOV    AH,9
  502.     INT    21H
  503.  
  504.     MOV    DX,OFFSET msg_35E    ;'  3. Break Status   : $'
  505.     MOV    AH,9
  506.     INT    21H
  507.     mov    al,[si]            ;lsr_124 LSR status        v2.04
  508.     mov    dx,offset set$        ;assume 'set   $'        v2.04
  509.     AND    AL,10H            ;mask Break Status bit
  510.     jnz    Pr_86D            ;non-0 = set            v2.04
  511.      MOV    DX,OFFSET none$        ;'none  $'
  512. Pr_86D:    MOV    AH,9            ;display Break Status bit
  513.     INT    21H
  514.  
  515.     MOV    DX,OFFSET msg_377    ;'      3. Frame  : $'
  516.     MOV    AH,9
  517.     INT    21H
  518.     mov    al,[si]            ;lsr_124            v2.04
  519.     mov    dx,offset set$        ;assume 'set   $'        v2.04
  520.     AND    AL,8            ;mask Frame error bit
  521.     jnz    Pr_888            ;non-0 = set            v2.04
  522.      MOV    DX,OFFSET none$        ;'none  $'
  523. Pr_888:    MOV    AH,9
  524.     INT    21H
  525.  
  526.     MOV    DX,OFFSET msg_38A    ;'  4. Loop Back      : $'
  527.     MOV    AH,9
  528.     INT    21H
  529.     dec    si            ;back down to mcr_123        v2.04
  530.     mov    al,[si]            ;mcr_123 MCR status        v2.04
  531.     mov    dx,offset set$        ;assume 'set   $'        v2.04
  532.     AND    AL,10H            ;mask Loop Back error bit
  533.     jnz    Pr_8A3            ;                v2.04
  534.      MOV    DX,OFFSET norm$        ;'normal$'
  535. Pr_8A3:    MOV    AH,9
  536.     INT    21H
  537.  
  538. ;"E. Interrupt Status:'
  539.     MOV    DX,OFFSET msg_3A3    ;CR,LF,'  1. Output      : $'
  540.     MOV    AH,9
  541.     INT    21H
  542.     mov    al,[si]            ;mcr_123 MCR status        v2.04
  543.     mov    dx,offset disable$    ;assume 'disable$'        v2.04
  544.     AND    AL,8            ;mask Output Int Status bit
  545.     jnz    L08BE            ;non-0 = disabled        v2.04
  546.      MOV    DX,OFFSET enable$    ;'enable$'
  547. L08BE:    MOV    AH,9
  548.     INT    21H
  549.  
  550.     MOV    DX,OFFSET msg_3D1    ;'  2. Data Ready  : $'
  551.     MOV    AH,9
  552.     INT    21H
  553.     mov    si,offset ier_121    ;Interrupt Enable Status    v2.04
  554.     mov    al,[si]            ;ier_121 IER status        v2.04
  555.     mov    dx,offset enable$    ;assume 'enable$'        v2.04
  556.     AND    AL,1            ;mask to Data Ready
  557.     jnz    L08D9            ;non-0 = enabled        v2.04
  558.      MOV    DX,OFFSET disable$    ;'disable$'
  559. L08D9:    MOV    AH,9
  560.     INT    21H
  561.  
  562.     MOV    DX,OFFSET msg_3E7    ;'  3. Xmit Empty  : $'
  563.     MOV    AH,9
  564.     INT    21H
  565.     mov    al,[si]            ;ier_121 IER status        v2.04
  566.     mov    dx,offset enable$    ;assume 'enable$'        v2.04
  567.     AND    AL,2            ;mask to Xmit buffer empty
  568.     jnz    L08F4            ;non-0 = enabled        v2.04
  569.      MOV    DX,OFFSET disable$    ;'disable$'
  570. L08F4:    MOV    AH,9
  571.     INT    21H
  572.  
  573.     MOV    DX,OFFSET msg_3FD    ;'  4. Line Status : $'
  574.     MOV    AH,9
  575.     INT    21H
  576.     mov    al,[si]            ;ier_121 IER status        v2.04
  577.     mov    dx,offset enable$    ;assume 'enable$'        v2.04
  578.     AND    AL,4            ;mask Line Status int status
  579.     jnz    L090F            ;non-0 = enabled        v2.04
  580.      MOV    DX,OFFSET disable$    ;'disable$'
  581. L090F:    MOV    AH,9
  582.     INT    21H
  583.  
  584.     MOV    DX,OFFSET msg_413    ;'  5. Modem Status: $'
  585.     MOV    AH,9
  586.     INT    21H
  587.     mov    al,[si]            ;ier_121 IER status        v2.04
  588.     mov    dx,offset enable$    ;assume 'enable$'        v2.04
  589.     AND    AL,8            ;mask Modem Status int status
  590.     jnz    Pr_92A            ;non-0 = enabled        v2.04
  591.      MOV    DX,OFFSET disable$    ;'disable$'
  592. Pr_92A:    MOV    AH,9
  593.     INT    21H
  594.  
  595.     MOV    DX,OFFSET crlf        ;CR,LF,'$'            v2.04
  596.     MOV    AH,9
  597.     INT    21H
  598.  
  599.     xor    al,al            ;ERRORLEVEL 0            v2.04
  600. Term_937:
  601.     MOV    AH,4CH            ;terminate, ERRORLEVEL in AL
  602.     INT    21H
  603.  
  604. RS_532    endp
  605.  
  606. CSEG    ENDS
  607.     END    RS_100
  608.