home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / BEEHIVE / BBS / AMSTRAD.ARC / PCW8512.MCH next >
Text File  |  1987-10-31  |  5KB  |  157 lines

  1. { ROSMCH.INC - Remote Operating System Machine Dependent Routines }
  2.  
  3. {** System routines ** PCW8512 has a bigger screen (90x31)        }
  4. {                      Routines for 2400 bps are for later use... }
  5.  
  6.  
  7. procedure system_init;
  8. { Initialization to be done once when ROS first starts }
  9.  
  10.   begin    { system_init }
  11.   end;
  12.  
  13. procedure system_de_init;
  14. { De-initialization to be done once when ROS terminates }
  15.   begin
  16.   end;
  17.  
  18. procedure putstat(st: StrStd);
  19. { Display 'st' on status line }
  20.   const
  21.     status_line    =  1;                    { Line used for system status }
  22.     last_line      = 31;                    { Last line on screen }
  23.   var  i : integer;
  24.   begin
  25.     Write(#27#101);
  26.     GotoXY(1, status_line);
  27.     ClrEol;
  28.     LowVideo;
  29.     write(st);
  30.     for i := 1 to (90-length(st)) do write(' ');
  31.     HighVideo;
  32.     GotoXY(1, last_line)
  33.   end;
  34.  
  35. {** Remote channel routines **}
  36.  
  37. const
  38.  
  39. { Port locations / AMSTRAD PCW 8512 has different RX/TX-Rate }
  40.  
  41.   DataPort   = $E0;                         { Data port }
  42.   StatusPort = $E1;                         { Status port }
  43. (*  RatePort_T = $E5;                         Data rate (bps) port
  44.     RatePort_R = $E4;
  45.     RatePort   = $E7;  not nessecary because of the XBIOS... *)
  46.  
  47. { StatusPort commands }
  48.  
  49.   RESSTA     = $10;                         { Reset ext/status }
  50.   RESCHN     = $18;                         { Reset channel }
  51.   RESERR     = $30;                         { Reset error }
  52.   WRREG1     = $00;                         { Value to write to register 1 }
  53.   WRREG3     = $C1;                         { 8 bits/char, RX enable }
  54.   WRREG4     = $44;                         { 16x, 1 stop bit, no parity }
  55.   DTROFF     = $00;                         { DTR off, RTS off }
  56.   DTRON      = $EA;                         { DTR on, 8 bits/char, TX enable, RTS on }
  57.  
  58. { StatusPort masks }
  59.  
  60.   DAV        = $01;                         { Data available }
  61.   TRDY       = $04;                         { Transmit buffer empty }
  62.   DCD        = $08;                         { Data carrier detect }
  63.   PE         = $10;                         { Parity error }
  64.   OE         = $20;                         { Overrun error }
  65.   FE         = $40;                         { Framing error }
  66.   ERR        = $70;                         { Parity, overrun and framing error }
  67.  
  68. { Rate setting commands }
  69.  
  70.   BDSET      = $47;                         { First Byte of CTC Command }
  71.   BD300      = 128;                         {  300 bps }
  72.   BD1200     =  32;                         { 1200 bps }
  73. (*  BD2400     =  16;                         { 2400 bps } *)
  74.  
  75. procedure ch_init;
  76. { Initialize the remote channel }
  77.   const
  78.     sio_init: array[1..8] of byte =
  79.       (0, RESCHN, 4, WRREG4, 1, WRREG1, 3, WRREG3);
  80.   var
  81.     i: integer;
  82.   begin
  83.     for i := 1 to 8 do
  84.       port[StatusPort] := sio_init[i]
  85.   end;
  86.  
  87. procedure ch_on;
  88. { Turn on remote channel (usually by enabling DTR) }
  89.   begin
  90.     port[StatusPort] := 5;
  91.     port[StatusPort] := DTRON
  92.   end;
  93.  
  94. procedure ch_off;
  95. { Turn on remote channel (usually by disabling DTR) }
  96.   begin
  97.     port[StatusPort] := 5;
  98.     port[StatusPort] := DTROFF
  99.   end;
  100.  
  101. function ch_carck: boolean;
  102. { Check to see if carrier is present }
  103.   begin
  104.     port[StatusPort] := 0;
  105.     port[StatusPort] := RESSTA;
  106.     ch_carck := ((DCD and port[StatusPort]) <> 0)
  107.   end;
  108.  
  109. function ch_inprdy: boolean;
  110. { Check for ready to input from port }
  111. var
  112.   bt: byte;
  113. begin
  114.   if (DAV and port[StatusPort]) <> 0
  115.     then
  116.       begin
  117.         port[StatusPort] := 1;
  118.         if (ERR and port[StatusPort]) <> 0
  119.           then
  120.             begin
  121.               port[StatusPort] := RESERR;
  122.               bt := port[DataPort];
  123.               ch_inprdy := FALSE
  124.             end
  125.           else ch_inprdy := TRUE
  126.       end
  127.     else ch_inprdy := FALSE
  128. end;
  129.  
  130. function ch_inp: byte;
  131. { Input a byte from port - no wait - assumed ready }
  132.   begin
  133.     ch_inp := port[DataPort]
  134.   end;
  135.  
  136. procedure ch_out(bt: byte);
  137. { Output a byte to port - wait until ready }
  138.   begin
  139.     repeat
  140.     until ((TRDY and port[StatusPort]) <> 0);
  141.     port[DataPort] := bt
  142.   end;
  143.  
  144. procedure ch_set(r: integer);
  145. { Set the bps rate / see DMV's "JOYCE Sonderheft"-magazin 1/87 S. 79f. }
  146.   begin
  147.     rate := r;
  148.   {  port[RatePort_T] := BDSET;   }
  149.     case rate of
  150.        300: inline ($21/$06/$06/$cd/$5a/$fc/$b9/$00);
  151.       1200: inline ($21/$08/$08/$cd/$5a/$fc/$b9/$00);
  152. (*      2400: inline ($21/$0a/$0a/$cd/$5a/$fc/$b9/$00)   *)
  153.  
  154.     end
  155.   end;
  156.  
  157. : inline ($21/$08/$08/