home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / cpm / turbopas / comdemo.ark / CLIB180.DOC next >
Text File  |  1986-08-24  |  21KB  |  472 lines

  1.               Turbo Pascal Communications Library
  2.  
  3.    1.0 Introduction
  4.  
  5.          Turbo   Pascal   provides   a   fairly   uniform  programming
  6.        environment for a variety of microcomputers  running  CP/M  and
  7.        MS-DOS.   It is fast, and the differences between versions can,
  8.        in general, be worked around.  Certain  areas  are  a  problem,
  9.        however - communications, and system dependent function.
  10.  
  11.          This  set  of  routines  is  intended to address the first of
  12.        these  problems, difficulty in  communicating with  the outside
  13.        world.  Each   operating  system  is  different in  the way  it
  14.        handles communications, and different hardware  implementations
  15.        create problems when trying to use communications ports.  There
  16.        is a need for a standard set of routines that provide the basic
  17.        communications  needs  for  most programs.  If the routines are
  18.        rewritten  for  various  micros,   generalized   communications
  19.        programs can be written.  Any programming tricks can be used to
  20.        perform  the  actual  functions, but a uniform calling sequence
  21.        can be used.
  22.  
  23.         1.1 Sample Programs
  24.  
  25.              A   sample   communications   library   is  available  as
  26.            'CLIB180.INC'.  This library includes an  example  of  each
  27.            function and procedure listed below.  Some of the functions
  28.            are  very  simple, as the VT180 has PSETUP available to set
  29.            parity and/or baudrates.  CLIB180 also supports the RAINBOW
  30.            (100A,100B) running CP/M version 2 or higher.
  31.  
  32.              A  sample  of  the  use  of the communications library is
  33.            given  in  the   program   'COMDEMO.PAS'.    This   program
  34.            implements a 'connect' mode and allows simple file transfer
  35.            by  capturing data from the communications port and storing
  36.            it in a file, or sending a file to a remote system.
  37.  
  38.              COMDEMO.PAS  was written as a 'test-case' for CLIB180.INC
  39.            - it's also useful as the "first piece"  to  "customize"  a
  40.            "text-capture"   utility  for  a  new  micro-system,  which
  41.            doesn't have yet a way to "talk protocol".   TURBO-Pascal's
  42.            inherent  compilation-speed  and  (relatively  high  -  see
  43.            above) portability will help in  getting  the  "first"  and
  44.            "crucial"  step accomplished : Enable TEXT-capture "to" and
  45.            "from" another system.  The typical "next step" seen is  to
  46.            establish  an  (preferably)  Error-Correcting protocol like
  47.            KERMIT.
  48.  
  49.   2.0 General Library Description
  50.  
  51.        2.1 Variables, Constants, and Typed Variables
  52.  
  53.             All  library  functions,  procedures, and global variables
  54.           begin with 'c_'.  This should minimize collisions with other
  55.           program variables.  Any variables that begin with 'c__'  are
  56.           for  the  use  of  the  library  itself, and should NEVER be
  57.           modified by the main program.
  58.  
  59.             All  variables  required  by  the  library  only should be
  60.           included here.  This would include such variables as  IOBYTE
  61.           definitions for CP/M, etc.
  62.  
  63.             The   following   are  predefined  types,  constants,  and
  64.           variables in the library:
  65.  
  66.           Types
  67.  
  68.             c__string10 = string[10];
  69.             c__string5 = string[5];
  70.             c__port_names = an  array  of string10's that will list the
  71.                             possible ports for the computer.
  72.             c__baud_names = an  array  of string10's that will list the
  73.                             possible baud rates for the computer.
  74.             c__parity_names = an  array  of string10's that will list the
  75.                             possible parity settings for the computer.
  76.  
  77.           Constants
  78.  
  79.             c_lib_version = computer type, revision of library, and date.
  80.             c_port_str = all possible  strings that  the available  ports
  81.                          are  equivalent  to.   The  first  two  MUST  be
  82.                          'NOT SET'  and  'DEFAULT'.  After  all ports are
  83.                          defined, the last  element in the  array MUST be
  84.                          null ('').
  85.             c_baud_str = all possible strings that the available baud rates
  86.                          are equivalent to.  The first two MUST be
  87.                          'NOT SET' and 'DEFAULT'.  After all baud rates are
  88.                          defined, the last element in the array MUST be
  89.                          null ('').
  90.             c_parity_str = all possible strings that the available  parity
  91.                            settings are equivalent to.  The first two MUST
  92.                            be  'NOT SET' and  'DEFAULT'.  After  all ports
  93.                            are defined, the last element in the array MUST
  94.                            be null ('').
  95.  
  96.           Variables
  97.  
  98.             c_kbd_char : The returned keyboard character.
  99.             c_comm_char : The returned comm port character.
  100.             c_current_port : The number of the current port. the string
  101.                              equivalent of the port number is :
  102.                              c_port_str(c_current_value).
  103.             c_current_baud : The number  of the current baud rate.  The
  104.                              string equivalent of the baud rate is :
  105.                              c_baud_str(c_current_baud).
  106.             c_current_parity : The number of the current parity setting.
  107.                                The string equivalent if the parity is :
  108.                                c_parity_str(c_current_parity).
  109.  
  110.        2.2 Functions
  111.  
  112.            2.2.1 C_INIT
  113.  
  114.                 Initialize  a  communications port.  Initialization is
  115.               system dependent,  but  should  include  such  items  as
  116.               setting  hardware specific values, obtaining the initial
  117.               value of the IOBYTE in CP/M systems, etc.  It should  be
  118.               run  at  the  beginning  of  each  program that uses the
  119.               communications library.
  120.  
  121.                 The way the port, baud rate, and parity variables are
  122.               set up, executing c_init(1,1,1) will set up a default
  123.               communications port.  This is a good way to begin any
  124.               program so the at least some communication port is
  125.               initialized.  For some systems, having no port set up
  126.               will cause system hangups.
  127.  
  128.               c_init(port, baud, parity : integer) : boolean;
  129.  
  130.               Inputs : port   -  Number  of  the  port.  This  can  be
  131.                                  obtained  by  scanning  the  list  of
  132.                                  ports  contained    in   the    array
  133.                                  c_port_str.
  134.                        parity -  desired   parity   setting  on  port.
  135.                                  The number  of the  available  parity
  136.                                  values  for the  particular computer.
  137.                                  These can be obtained by scanning the
  138.                                  list of parity  settings available in
  139.                                  the array c_parity_str.
  140.  
  141.                        speed -   desired  port  speed.  The number of
  142.                                  the available baud rate settings can
  143.                                  be obtained by scanning  the list of
  144.                                  available  baud rate settings in the
  145.                                  array c_baud_str.
  146.  
  147.               Output : Function  returns TRUE if the desired setup  is
  148.                        valid, and FALSE if the setup is invalid.
  149.  
  150.               Variables affected : c_current_port, c_current_baud, and
  151.                                    c_current_parity are set to their new
  152.                                    values if the operation was successfull.
  153.  
  154.               Other effects: depends on implementation.
  155.  
  156.            2.2.2 C_SET_PORT
  157.  
  158.               Select the desired communications port.
  159.  
  160.               c_set_port(port : integer) : boolean;
  161.  
  162.               Input : port - Number of the port.  System dependent.  A
  163.                              list of the available ports  can be found
  164.                              in the array c_port_str.
  165.               Output : Function returns TRUE if new port was selected,
  166.               and FALSE if the new port was an invalid port.
  167.  
  168.               Variables affected : sets c_current_port, c_current_baud,
  169.                                    and c_current_parity to those for the
  170.                                    new port.  Other variables are system
  171.                                    dependent.
  172.  
  173.               Other  effects  :  current port should not be changed if
  174.               function returns FALSE.
  175.  
  176.            2.2.3 C_SET_PARITY
  177.  
  178.               Set the parity on the current port, if possible.
  179.  
  180.               c_set_parity(parity : integer) : boolean;
  181.  
  182.               Input : port - Number of the port.  System dependent.  A
  183.                              list of the available ports  can be found
  184.                              in the array c_port_str.
  185.  
  186.                        parity -  desired   parity   setting  on  port.
  187.                                  The number  of the  available  parity
  188.                                  values  for the  particular computer.
  189.                                  These can be obtained by scanning the
  190.                                  list of parity  settings available in
  191.                                  the array c_parity_str.
  192.  
  193.               Output: Function  returns TRUE if the parity is reset to
  194.                       the new value, and FALSE if the parity could not
  195.                       be set.
  196.  
  197.               Variables affected: c_current_parity is changed to the new
  198.                                   parity if the operation was successfull.
  199.                                   Other variables are system dependent.
  200.  
  201.               Other effects: should leave same parity if result is FALSE.
  202.  
  203.  
  204.            2.2.4 C_SET_BAUD
  205.  
  206.               Set the baud rate on the specified port, if possible.
  207.  
  208.               c_set_baud(speed : integer) : boolean;
  209.  
  210.               Inputs : speed -   desired  port  speed.  The number of
  211.                                  the available baud rate settings can
  212.                                  be obtained by scanning  the list of
  213.                                  available  baud rate settings in the
  214.                                  array c_baud_str.
  215.  
  216.               Output: Function returns TRUE if the baud rate can be
  217.                       set and FALSE if the baud rate cannot be set.
  218.  
  219.               Variables Affected: c_current_baud is set to the number
  220.                                   of the new baud rate if the operation
  221.                                   successfull.  Other variables are
  222.                                   system dependent.
  223.  
  224.               Other  effects  : Should leave the baud rate the same if
  225.                                 error.
  226.  
  227.            2.2.5 C_GET_KBD_CHAR
  228.  
  229.               Check the keyboard for an available character.
  230.  
  231.               c_get_kbd_char : boolean;
  232.  
  233.               Input : none.
  234.  
  235.               Output : Function   returns   TRUE  if  a  character  is
  236.                        available  and  false  if   no   character   is
  237.                        available.
  238.  
  239.               Variables affected : c_kbd_char   is   changed   to  new
  240.                                    character if function returns true.
  241.  
  242.               Other effects : function  must always leave the computer
  243.                               in  the same state as it was found, i.e.
  244.                               for  CP/M the IOBYTE must be returned so
  245.                               that  CON: is set to main console.
  246.  
  247.            2.2.6 C_GET_COMM_CHAR
  248.  
  249.               Check  the currently selected communications port for an
  250.               available character.
  251.  
  252.               c_get_comm_char : boolean;
  253.  
  254.               Input : none.
  255.  
  256.               Output : Function   returns   TRUE  if  a  character  is
  257.                        available  and  false  if   no   character   is
  258.                        available.
  259.  
  260.               Variables affected : c_comm_char   is   changed  to  new
  261.                                    character if function returns true.
  262.  
  263.               Other effects : Function  must always leave the computer
  264.                               in  the same state as it was found, i.e.
  265.                               for  CP/M the IOBYTE must be returned so
  266.                               that  CON: is set to main console.
  267.  
  268.        2.3 Procedures
  269.  
  270.            2.3.1 C_PUT_SCR_CHAR
  271.  
  272.               Send a character to the console screen.
  273.  
  274.               c_put_scr_char(character : char);
  275.  
  276.               Input : character to be output.
  277.  
  278.               Output : none.
  279.  
  280.               Variables affected : none.
  281.  
  282.               Other effects : Function  must always leave the computer
  283.                               in  the same state as it was found, i.e.
  284.                               for  CP/M the IOBYTE must be returned so
  285.                               that  CON: is set to main console.
  286.  
  287.           2.3.2 C_PUT_COMM_CHAR
  288.  
  289.              Send a character to the selected communications port.
  290.  
  291.              c_put_comm_char(character : char);
  292.  
  293.              Input : character to be output.
  294.  
  295.              Output : none.
  296.  
  297.              Variables affected : none.
  298.  
  299.              Other effects : Function  must  always leave the computer
  300.                              in  the same state as it was found,  i.e.
  301.                              for   CP/M the IOBYTE must be returned so
  302.                              that  CON: is set to main console.
  303.  
  304.     3.0 VT180 Communications Library
  305.  
  306.          This  is  an implementation of a standard set of routines for
  307.            communications, for the DEC  VT180  (Robin).   The  VT180's
  308.            main features are as follows:
  309.  
  310.          Microprocessor:         Z80A
  311.          Memory:                 64k bytes
  312.          Operating system:       CP/M-80
  313.          Communications ports:   4 serial
  314.  
  315.            CRT:  hard-wired terminal port to VT100 terminal
  316.  
  317.            LPT:  printer port
  318.  
  319.            UC1:  user defined console port
  320.  
  321.            PTR:  high speed reader port
  322.            PTP:  high speed punch port
  323.  
  324.        The  VT180  uses  the Digital Research standard IOBYTE for port
  325.        switching.
  326.  
  327.        3.1 The IOBYTE
  328.  
  329.  
  330.               A few words about the IOBYTE are in order.  The ports on
  331.            a  CP/M-80  computer are described by PHYSICAL names (CRT:,
  332.            LPT:, etc.).  When the IOBYTE is used, they are  mapped  to
  333.            LOGICAL  ports,  and  the IOBYTE allows reassignment of the
  334.            physical ports to different logical ports.  For example, on
  335.            the VT180, the pysical ports UC1: and CRT: can be  assigned
  336.            to  be  the  logical  port  CON:.  When booted normally all
  337.            console I/O goes to CRT:,  the  internal  VT100  port.   If
  338.            desired,  the  UC1:  port can be assigned to be CON: and an
  339.            external device can act as the system console.  I use  this
  340.            method  with  a  modem so I can dial up my computer and use
  341.            the remote terminal as the console.
  342.  
  343.              The IOBYTE is the device that allows this reassignment of
  344.            physical  ports.   The IOBYTE is a byte in memory, normally
  345.            located  at  address  0003.   This   may   vary   in   some
  346.            implementation  of  CP/M.   There  are  four  fields to the
  347.            IOBYTE:
  348.  
  349.              LIST       PUNCH      READER       CONSOLE
  350.  
  351.            bits 6,7   bits 4,5    bits 2,3      bits 0,1
  352.  
  353.            The values below are the possible IOBYTE assignments:
  354.  
  355.              Console field (bits 0,1)
  356.  
  357.                00 console is assigned to the console printer device (TTY:)
  358.                01 console is assigned to the CRT device (CRT:)
  359.                10 batch mode, RDR: is console input device, LST: device is 
  360.                   console output.
  361.                11 console is assigned to the user defined console (UC1:)
  362.  
  363.              READER field (bits 2,3)
  364.  
  365.                00 reader is teletype device (TTY:)
  366.                01 reader is the high speed reader device (PTR:)
  367.                10 reader is user defined reader #1 (UR1:)
  368.                11 reader is user defined reader #2 (UR2:)
  369.     
  370.              PUNCH field (bits 4,5)
  371.  
  372.                00 punch is teletype device (TTY:)
  373.                01 punch is high speed punch device (PTP:) 
  374.                10 punch is user defined punch #1 (UP1:)
  375.                11 punch is user defined punch #2 (UP2:)
  376.  
  377.              LIST field (bits 6,7)
  378.  
  379.                00 list device is teletype (TTY:)
  380.                01 list device is CRT device (CRT:)
  381.                10 list device is lineprinter device (LPT:)
  382.                11 list device is user defined list device (UL1:)
  383.  
  384.  
  385.               Two  of  the  serial  ports on the VT180 can be used for
  386.            serial communication, the READER/PUNCH port,  and  the  UC1
  387.            (user defined console) port.  From the chart above, setting
  388.            the  two  least  significant  bits of the IOBYTE to 01 will
  389.            allow normal console I/O to the  VT100  terminal.   Setting
  390.            the  same two bits to 11 will allow the UC1: port to be the
  391.            system console.
  392.  
  393.               Working   with   the   READER/PUNCH  port  is  a  little
  394.            different.  This is because the status of the  reader  port
  395.            cannot be obtained directly with reader system calls.  If a
  396.            call to get character from reader is done, the routine will
  397.            hang  there  until a character is available.  This will not
  398.            allow the alternating status checking  required.   However,
  399.            there  is  a  way.  The reader port can be made the console
  400.            port (IOBYTE value xxxxxx10).  Now the status of the reader
  401.            can be obtained without waiting.  The  characters  received
  402.            from  the keyboard are sent to the punch port with a system
  403.            call to punch output.
  404.  
  405.            2.5.3 Eight Bit Data
  406.  
  407.                 The  Digital  Research  manual for CP/M specifies that
  408.               the hight order bit of a  character  obtained  with  the
  409.               CONIN bios call will be zero.  This is not the case with
  410.               the  VT180.   All  8  bits are significant.  This allows
  411.               binary data to be transmitted and received by the VT180.
  412.               Other systems may vary.
  413.  
  414.            2.5.4 Function Descriptions
  415.  
  416.               2.5.4.1 Function C_INIT
  417.  
  418.                    The c_init function sets up the  intial values for
  419.                  the communications  library.  This function  MUST be
  420.                  executed at the beginning  of any program  that will
  421.                  use  the comm  library.  It initializes  the  iobyte
  422.                  settings, and sets up the default values for all the
  423.                  possible ports.
  424.                    On  entry, it sets all  the ports to their default
  425.                  values.  Since the parity and baud rate on the VT180
  426.                  cannot  be  easily  set,  DEFAULT  is  all  that  is
  427.                  allowed  for these  settings.  The default  port  is
  428.                  the comm port, which  is the normal VT180 comm port.
  429.                    If  an  illegal  port,  baud  rate,  or  parity is
  430.                  requested, the function returns FALSE.
  431.  
  432.               2.5.4.2 Function C_SET_PORT
  433.  
  434.                    Two ports are allowed for the VT180.  Valid values
  435.                  for port are 1, 2, and 3,  yielding default  (COMM),
  436.                  COMM, and UC1, respectively.
  437.  
  438.               2.5.4.3 Function C_SET_BAUD
  439.  
  440.                    In  this  version of the library, baud rates cannot
  441.                  be  set, and  the function  will return FALSE  if any
  442.                  value other than 1 (default) is requested.
  443.  
  444.                2.5.4.4 Function C_SET_PARITY
  445.  
  446.                    In  this  version  of the library, parity cannot be
  447.                    set, and  the  function  will  return FALSE  if any
  448.                    value other than 1 (default) is requested.
  449.  
  450.                2.5.4.5 Function C_GET_KBD_CHAR
  451.  
  452.                     This  function uses bios(1) to obtain  keyboard
  453.                     status  and  bios(2)  to  obtain a character.
  454.  
  455.                2.5.4.6 Function C_GET_COMM_CHAR
  456.  
  457.                     This  function uses bios(1) to obtain port status
  458.                     and bios(2) to obtain a character.
  459.  
  460.            2.5.5 Procedures
  461.  
  462.                2.5.5.1 Procedure C_PUT_SCR_CHAR
  463.  
  464.                    This procedure uses bios(3) to send a character
  465.                    the screen.
  466.  
  467.                2.5.5.2 Procedure C_PUT_COMM_CHAR
  468.  
  469.                    This  function  checks whether the selected port is
  470.                  the reader or the UC1 port and uses bios(5) to  write
  471.                  to the punch port or bios(3) to write to UC1.
  472.