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 / ZCAT / ROS-CLK.LBR / KP84-ROS.CZK / KP84-ROS.CLK
Text File  |  2000-06-30  |  3KB  |  119 lines

  1. { ROS.CLK - adapted from the following file by removal of non-clock code}
  2. { ROSMAC.INC - Remote Operating System Machine Dependent Routines }
  3. { Modified for Kaypro 4'84 with original clock }
  4. { By Kevin E. Karns - July 3, 1985 }
  5.  
  6. Const
  7.   sec =     2;  {clk functions}
  8.   minu =     3;
  9.   hour =    4;
  10.   day =     6;
  11.   mon =     7;
  12.   year =    9;
  13.   func =    32; {clk function port}
  14.   clock =   36; {clk read/write port}
  15.   init =    34; {Z80 PIO initialization port}
  16.   initch =  15; {Z80 PIO initialization char}
  17.   make_one_pass: boolean = false;
  18.  
  19. Type
  20.   abyte = byte;
  21.  
  22. Var
  23.   hours, minutes, seconds, months, days, years: abyte;
  24.  
  25.  
  26. Function Bcd(intval: abyte): abyte;
  27. (* convert an integer value (intval) to byte in packed BCD format
  28.    before sending it to clock.
  29. *)
  30.   Var
  31.     hinybble, lonybble: byte;
  32.  
  33. begin
  34.   hinybble := intval div 10;
  35.   lonybble := intval - (10 * hinybble);
  36.   hinybble := hinybble * 16;
  37.   Bcd := hinybble + lonybble;
  38. End;
  39.  
  40. Function Ascii(bcdbyte: abyte): abyte;
  41.   (* convert packed BCD byte read from clock to integer value that Turbo
  42.    will display as an ASCII string.
  43.   *)
  44.   Var
  45.     hinybble, lonybble: byte;
  46.  
  47. begin
  48.   lonybble := bcdbyte and $0F;
  49.   hinybble := 10 * (bcdbyte div 16);
  50.   Ascii := hinybble + lonybble;
  51. End; {ascii}
  52.  
  53. Procedure GetTAD(var t : tad_array);
  54.  
  55. { Return a 6 element byte array of the current system time in
  56.   seconds, minutes, hours, day, month, and year. }
  57.  
  58.  
  59. begin
  60.   port[init] := initch;  {initialize PIO}
  61.  
  62.   port[func] := hour;
  63.   hours := port[clock];
  64.   t[2] := Ascii(hours);
  65.  
  66.   port[func] := minu;
  67.   minutes := port[clock];
  68.   t[1] := Ascii(minutes);
  69.  
  70.   port[func] := sec;
  71.   seconds := port[clock];
  72.   t[0] := Ascii(seconds);
  73.  
  74.   port[func] := mon;
  75.   months := port[clock];
  76.   t[4] := Ascii(months);
  77.  
  78.   port[func] := day;
  79.   days := port[clock];
  80.   t[3] := Ascii(days);
  81.  
  82.   port[func] := year;
  83.   years := port[clock];
  84.   t[5] := Ascii(years);
  85. End; {GetTAD}
  86.  
  87. Procedure SetTAD(var t : tad_array);
  88.  
  89. { Set the system time using  a 6 element byte array }
  90.  
  91. begin
  92.   port[init] := initch;  {initialize PIO}
  93.  
  94.   port[func] := hour;
  95.   hours := Bcd(t[2]);
  96.   port[clock] := hours;
  97.  
  98.   port[func] := minu;
  99.   minutes := Bcd(t[1]);
  100.   port[clock] := minutes;
  101.  
  102.   port[func] := sec;
  103.   seconds := Bcd(t[0]);
  104.   port[clock] := seconds;
  105.  
  106.   port[func] := mon;
  107.   months := Bcd(t[4]);
  108.   port[clock] := months;
  109.  
  110.   port[func] := day;
  111.   days := Bcd(t[3]);
  112.   port[clock] := days;
  113.  
  114.   port[func] := year;
  115.   years := Bcd(t[5]);
  116.   port[clock] := years;
  117. End;
  118.  
  119.