[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]