{ >1. Let me look at the RING line from the modem >2. Let me determine the condition of CARRIER DETECT. The Modem Status Register (MSR) Byte contains this info. Carrier Detect: MSR bit 7 will be set it there is a carrier detected. Bit 3 indicates if there has been a change in the carrier detect status since the last time the MSR was read. Ring: is indicated by MSR bit 6. Bit 2 indicates if there was a change in bit 6 since the last time the MST was read. Bits 2 and 3 are cleared each time the MSR is read. Obtaining the MSR Byte may be done by directly reading the port value, or by calling the BIOS modem services interrupt $14. I've Typed in the following without testing. Using the BIOS... ... } Function GetMSR( COMport :Byte ) :Byte; { call With COMport 1 or 2 } Var Reg : Registers; begin Reg.DX := COMport - 1; Reg.AH := 3; Intr( $14, Reg ); GetMSR := Reg.AL end; (* ... MSRByte := GetMSR(1); { MSR For COM1 (clears bits 0..3) } ... Using direct access: For COM1, the MSR is at port $3FE; For COM2 it's at $2FE... ... MSRByte := Port[$3FE]; { MSR For COM1 (clears bits 0..3) } ... To test the status... ... *) IF ( MSRByte and $80 ) <> 0 then CarrierDetect := True ELSE CarrierDetect := False; IF ( MSRByte and $40 ) <> 0 then Ring := True; ELSE Ring := False; { Similar logic can be used With bits 2 and 3, which will inform you of whether or not a change occurred in bit 6 or 7 since the last read of the MSR. }