home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / GLEN / INFOP140.ZIP / PAGE_17.INC < prev    next >
Text File  |  1990-11-12  |  5KB  |  161 lines

  1. procedure page_17;
  2.   const
  3.     DayName: array[0..7] of string[9] = ('Sunday', 'Monday', 'Tuesday',
  4.                                          'Wednesday', 'Thursday', 'Friday',
  5.                                          'Saturday', 'Sunday');
  6.     MonthName: array[0..12] of string[9] = ('???', 'January', 'February', 'March',
  7.                                             'April', 'May', 'June', 'July',
  8.                                             'August', 'September', 'October',
  9.                                             'November', 'December');
  10.     ScreenName: array[0..3] of string[10] = ('EGA/VGA', 'CGA 40col',
  11.                                                  'CGA 80col', 'Monochrome');
  12.     FloppyName: array[0..5] of string[11] = ('none', '5.25" 360K',
  13.                                              '5.25" 1.2M', '3.5"  720K',
  14.                                              '3.5"  1.44M', '3.5"  2.88M');
  15.  
  16.   var
  17.     CMOSport: word;
  18.     count, checksum1, checksum2: word;
  19.     bad, pm: boolean;
  20.     floppy, hd, hdc, hdd, date, month, century, year, hour, min, sec: byte;
  21.     c: char;
  22.  
  23.   function readCMOS(adr: byte): byte;
  24.     var
  25.       i: byte;
  26.  
  27.     begin
  28.     bad:=false;
  29.     if CMOSport = $70 then
  30.       begin
  31.       inline($FA);
  32.       Port[CMOSport]:=adr;
  33.       readCMOS:=Port[CMOSport + 1];
  34.       inline($FB)
  35.       end
  36.     else
  37.       begin
  38.       inline($FA);
  39.       i:=Port[CMOSport + adr];
  40.       if i <> Port[CMOSport + adr] then
  41.         bad:=true;
  42.       inline($FB);
  43.       readCMOS:=i
  44.       end
  45.     end; {readCMOS}
  46.  
  47.   function addzero(b: byte): string;
  48.     var
  49.       c2: string[2];
  50.     begin
  51.     Str(b:0, c2);
  52.     if b < 10 then
  53.       c2:='0' + c2;
  54.     addzero:=c2
  55.     end; {addzero}
  56.  
  57.   function unBCD(b: byte): byte;
  58.     begin
  59.     unBCD:=(b and $0F) + ((b shr 4) * 10)
  60.     end; {unBCD}
  61.  
  62.   begin
  63.   caption2('CMOS');
  64.   regs.AH:=$C0;
  65.   Intr($15, regs);
  66.   if nocarry or (Mem[$F000:$FFFE] = $FC) then
  67.     begin
  68.     CMOSport:=$70;
  69.     Writeln;
  70.     caption3('Date');
  71.     date:=unBCD(readCMOS(7));
  72.     century:=unBCD(readCMOS($32));
  73.     year:=unBCD(readCMOS(9));
  74.     month:=unBCD(readCMOS(8));
  75. { Most BIOS's do not set the Day of Week byte. Commented out and left for info}
  76. {    Write(DayName[readCMOS(6)], ', ');}
  77.     case country[0] of
  78.       0, 3..255: Writeln(Monthname[month], ' ', date, ', ', century, addzero(year));
  79.       1: Writeln(date, ' ', Monthname[month], ', ', century, addzero(year));
  80.       2: Writeln(century, addzero(year), ', ', Monthname[month], ' ', date);
  81.     end; {case}
  82.     caption3('Time');
  83.     c:=Chr(country[$0D]);
  84.     hour:=unBCD(readCMOS(4));
  85.     min:=unBCD(readCMOS(2));
  86.     sec:=unBCD(readCMOS(0));
  87.     if country[$11] and 1 = 1 then
  88.       Writeln(hour, c, addzero(min), c, addzero(sec))
  89.     else
  90.       begin
  91.       pm:=false;
  92.       case hour of
  93.         0: hour:=12;
  94.         1..11: hour:=hour;
  95.         12: pm:=true;
  96.         13..23: begin
  97.                 pm:=true;
  98.                 hour:=hour - 12
  99.                 end;
  100.       end; {case}
  101.       Write(hour, c, addzero(min), c, addzero(sec), ' ');
  102.       if pm then
  103.         Writeln('PM')
  104.       else
  105.         Writeln('AM');
  106.       end;
  107.     Writeln;
  108.     caption3('Video type ');
  109.     Writeln(ScreenName[(readCMOS($14) shr 4) and 3]);
  110.     caption3('Coprocessor');
  111.     yesorno((readCMOS($14) and 2) = 2);
  112.     Writeln;
  113.     caption3('Floppy disk A');
  114.     floppy:=readCMOS($10);
  115.     if (floppy shr 4) < 5 then
  116.       Writeln(FloppyName[floppy shr 4])
  117.     else
  118.       Writeln('Unknown value -> ', hex(floppy shr 4, 2));
  119.     caption3('Floppy disk B');
  120.     if (floppy and $0F) < 5 then
  121.       Writeln(FloppyName[floppy and $0F])
  122.     else
  123.       Writeln('Unknown value -> ', hex(floppy and $0F, 2));
  124.     Writeln;
  125.     caption3('Hard disk 0');
  126.     hd:=readCMOS($12);
  127.     hdc:=hd shr 4;
  128.     hdd:=hd and $0F;
  129.     if hdc = $F then
  130.       hdc:=readCMOS($19);
  131.     if hdd = $F then
  132.       hdd:=readCMOS($1A);
  133.     if hdc = 0 then
  134.       Writeln('None')
  135.     else
  136.       Writeln('Type ', hdc);
  137.     caption3('Hard disk 1');
  138.     if hdd = 0 then
  139.       Writeln('None')
  140.     else
  141.       Writeln('Type ', hdd);
  142.     Writeln;
  143.     caption3('Conventional RAM');
  144.     Writeln((word(256) * readCMOS($16)) + readCMOS($15):5, 'K');
  145.     caption3('    Extended RAM');
  146.     Writeln((word(256) * readCMOS($18)) + readCMOS($17):5, 'K');
  147.     Writeln;
  148.     caption3('CMOS checksum');
  149.     checksum1:=0;
  150.     for count:=$10 to $2D do
  151.       Inc(checksum1, readCMOS(count));
  152.     checksum2:=(word(256) * readCMOS($2E)) + readCMOS($2F);
  153.     if checksum1 = checksum2 then
  154.       Writeln('OK')
  155.     else
  156.       Writeln('Error!  Says ', hex(checksum2, 4), ' should be ', hex(checksum1, 4));
  157.     end
  158.   else
  159.     Writeln('No standard CMOS detected!!')
  160.   end;
  161.