[Back to COMM SWAG index] [Back to Main SWAG index] [Original]

    {
    GINA DAVIS

    I have used routines to read/write the comm ports and read Status using
    the Port instruction, but mostly I have used BIOS calls (Int $14).  What
    you need is a technical reference book spelling out the Registers and
    the use of each bit.  (I have a book called "DOS Programmers Reference")
    I have source code which accesses a modem on Com1 or Com2 to dial phone
    numbers as part of my name & address database / dialer prog (Shareware).

    Here's an example of calling INT 14 to set up the serial port:-
    }

    FUNCTION Init_Port(serialport, params : word) : word;
    BEGIN
      regs.AX := params;
      regs.DX := port;
      regs.AH := 0;
      intr($14, regs);
    END;

    {
     The "serialport" is 0 for Com1 or 1 for Com2.
     "params" determines baud, parity, stop bits, etc.
     $43 for 300, $A3 gives 2400, $83 gives 1200,8,N,1 (p468 DOS Prog Ref)
     (baudbits SHL 5) OR OtherBits - 110,150,300,600,1200,2400,4800,9600

     The function returns the Status, ie. whether the operation was successful.
     And an example of using "Port" to directly access the a port register to
     toggle the DTR bit to hangup the modem:-
    }

    PROCEDURE Hang_Up_Modem(serialport : word);
    VAR
      portaddress : word;
      dummychar   : char;
    BEGIN
      IF serialport = 0 THEN
        portaddress := $3FC
      ELSE
        portaddress := $2FC;

      port[portaddress] := port[portaddress] xor $01;
      DELAY(10);
      port[portaddress] := port[portaddress] xor $01;
      DELAY(10);
      port[portaddress] := port[portaddress] AND $FE;

      REPEAT
        dummychar := read_modem(serialport)
      UNTIL regs.AH <> 0;
    END;    { Hang_Up_Modem }

[Back to COMM SWAG index] [Back to Main SWAG index] [Original]