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

    {
     Program Name : 16550.Pas
     Written By   : Jon Schneider & Rick Petersen
     E-Mail       : nothing
     Web Page     : nothing
     Program
     Compilation  : Turbo Pascal 5.0 or later

     Program Description :                                                        }

    (*    This program will toggle the state of a 16550 UART's FIFO buffer.      *)
    (*    It only seems to work with the Fossil driver X00.SYS version 1.09b.    *)
    (*    By toggling the buffer ON, even 4.77 Mhz PC's are able to receive      *)
    (*    files at a fixed rate of 19,200 baud without error.                    *)
    (*                                                                           *)
    (*    The code uses portions of the 'Turbo Professional' library. It         *)
    (*    will not compile without it.                                           *)
    (*                                                                           *)

    {$R-}    {Range checking off}
    {$B-}    {Boolean complete evaluation off}
    {$S-}    {Stack checking off}
    {$I+}    {I/O checking on}
    {$N-}    {No numeric coprocessor}
    {$M $4000, $4000, $A0000}

    program a16550;

    Uses
      Crt, TpString;

    var
       num_params : Integer;
       input_byte : Byte;
       state : String;
       cmd_tail : Boolean;
       com_port : Word;

    Procedure usage;

    begin
       Writeln;
       WriteLn('16550 - A TPBoard utility for toggling the 16550''s FIFO buffer');
       WriteLn;
       WriteLn('USAGE:  16550 [1-4] [on/off/?]');
       WriteLn;
       WriteLn('        Where ''1'' thru ''4'' is the COM port,  ''on'' or ''off'' will toggle');
       WriteLn('        the FIFO buffer''s state, and ''?'' will show it''s status. Turning');
       WriteLn('        the buffered mode on is guaranteed to lock up your system if you');
       WriteLn('        are using OpusCom, and may cause problems with other programs.');
       WriteLn('        It WILL work with X00 version 1.09b, TPBoard, and ProComm Plus.');
       WriteLn;
       Halt
    end;

    begin                         { 16550 }
       CheckBreak := False;
       num_params := ParamCount;
       cmd_tail := num_params = 2;
       if (not cmd_tail) then
          usage;
       if ParamStr(1) = '1' then
          com_port := $3fa
       else if ParamStr(1) = '2' then
          com_port := $2fa
       else if ParamStr(1) = '3' then
          com_port := $3ea
       else if ParamStr(1) = '4' then
          com_port := $2ea
       else
          usage;
       state := StUpcase(ParamStr(2));
       if state = 'ON' then
          Port[com_port] := $07
       else if state = 'OFF' then
          Port[com_port] := $00
       else if state = '?' then
          begin
             WriteLn;
             input_byte := Port[com_port];
             input_byte := input_byte and $c0;
             Write('FIFO buffer is turned ');
             if input_byte = $c0 then
                WriteLn('ON.')
             else
                WriteLn('OFF.');
          end
       else
          usage;
       WriteLn;
    end.                    { of 16550.Pas }

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