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

    {
    > Does anyone have any units that will allow me to use a fossil in my
    > programs?  If so, are these units preset for printing to the screen and
    > the modem?  I would VERY much apprecieate any help.

    Here  is  a  copy of my very own fossil interface, I made them because I
    couldn't find simple/good enough code out  there.  I like 'em because of
    their simplicity.  Only the basic commands are here, if you want to  add
    more  then download X00 (or the fido specs) for a chart of the functions
    and add your own.
    }

    Unit FComm;
    interface

    function  Comm_Init(port:byte):boolean;{Inits the port for communications,
    returns true if successfull}procedure Comm_DeInit;{DeInits the port}

    procedure Comm_Baud(baud:word);{Sets the speed of the port (not needed), always
    uses 8N1}procedure Comm_DTR(DTR_Up:boolean);{raises/lowers DTR}
    function  Comm_Carrier:boolean;{TRUE if Carrier detected}

    procedure Comm_Tx(sendbyte:byte);{Send a byte to port}
    function  Comm_Rx_Ready:boolean;{TRUE if char waiting in buffer}
    function  Comm_Rx:byte;{Get a byte from port}

    implementation

    var Comm_Port:word;{Port to use, in FOSSIL format. ie. COM1=0}
        StatBit:Word;{Status Bit}

    function Comm_Init(port:byte):boolean;
    var t:word;
    begin
         Comm_Port:=port-1;
         asm
            mov ah, 4h
            mov dx, Comm_Port
            int 14h
            mov t, ax
         end;
         Comm_Init:=t=$1954
    end;

    procedure Comm_DeInit;
    begin
         asm
            mov ah, 5h
            mov dx, Comm_Port
            int 14h
         end;
    end;

    procedure Comm_Baud(baud:word);
    var Newbaud:byte;
    begin
         Case Baud div 10 of        {finds the bit value version of the baud}
              30:  Newbaud:=$43;
              60:  Newbaud:=$63;
              120: Newbaud:=$83;
              240: Newbaud:=$A3;
              480: Newbaud:=$C3;
              960: Newbaud:=$E3;
              1920:Newbaud:=$03;
              3840:Newbaud:=$23;
       end;
         asm
            mov ah, 0h
            mov al, Newbaud
            mov dx, Comm_Port
            int 14h
         end;
    end;

    procedure Comm_DTR(DTR_Up:boolean);
    var DTRBit:byte;
    begin
         If DTR_Up
            then DTRBit:=1
            else DTRBit:=0;
         asm
            mov ah, 6h
            mov al, DTRBit
            mov dx, Comm_Port
            int 14h
         end;
    end;

    function Comm_Carrier:boolean;
    begin
         asm
            mov ah, 3h
            mov dx, Comm_Port
            int 14h
            mov StatBit, ax
         end;
         Comm_Carrier:=(StatBit and 128) <> 0;      {Bit 7=CD Signal}
    end;

    procedure Comm_Tx(sendbyte:byte);
    begin
         asm
            mov ah, 1h
            mov al, SendByte
            mov dx, Comm_Port
            int 14h
         end;
    end;

    function  Comm_Rx_Ready:boolean;
    begin
         asm
            mov ah, 3h
            mov dx, Comm_Port
            int 14h
            mov StatBit, ax
         end;
         Comm_Rx_Ready:=(StatBit and $100) <> 0;{Bit 0 of AH!}
    end;

    function  Comm_Rx:byte;
    var temp:byte;
    begin
         asm
            mov ah, 2h
            mov dx, Comm_Port
            int 14h
            mov temp, al
         end;
         Comm_Rx:=temp;
    end;

    end .{Unit}

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